Auto Post Thumbnail - Version 3.9.8

Version Description

  • Some fixes
Download this release

Release Info

Developer webtemyk
Plugin Icon 128x128 Auto Post Thumbnail
Version 3.9.8
Comparing to
See all releases

Code changes from version 3.9.7 to 3.9.8

Files changed (108) hide show
  1. admin/assets/css/license-manager.css +0 -1
  2. admin/assets/css/settings.css +5 -5
  3. admin/assets/img/about/Sequence-01.gif +0 -0
  4. admin/assets/img/about/Sequence-02.gif +0 -0
  5. admin/assets/img/about/Sequence-03.png +0 -0
  6. admin/assets/img/about/Sequence-04.gif +0 -0
  7. admin/assets/img/about/Sequence-05.gif +0 -0
  8. admin/assets/img/about/Sequence-06.gif +0 -0
  9. admin/assets/img/about/icon-2.png +0 -0
  10. admin/assets/img/about/icon-3.png +0 -0
  11. admin/assets/img/about/icon-4.png +0 -0
  12. admin/assets/img/about/icon-5.png +0 -0
  13. admin/assets/img/about/icon-6.png +0 -0
  14. admin/assets/img/about/icon1.png +0 -0
  15. admin/assets/img/about/interface-1.png +0 -0
  16. admin/assets/img/about/interface-2.png +0 -0
  17. admin/assets/img/about/interface-3.png +0 -0
  18. admin/assets/js/_Chart.min.js +0 -10
  19. admin/assets/js/admin-thumbnail.js +74 -58
  20. admin/assets/js/generate.js +3 -3
  21. admin/assets/js/license-manager.js +1 -1
  22. admin/assets/js/search-page.js +111 -96
  23. admin/assets/js/upload-font.js +2 -2
  24. admin/class-page-logger.php +240 -242
  25. admin/class-page.php +298 -292
  26. admin/class-wapt-activation.php +2 -2
  27. admin/pages/about.php +69 -68
  28. admin/pages/generate.php +177 -170
  29. admin/pages/image.php +460 -462
  30. admin/pages/license.php +214 -210
  31. admin/pages/log.php +103 -102
  32. admin/pages/settings.php +256 -248
  33. admin/views/media-library.php +259 -251
  34. admin/views/pro.php +17 -17
  35. admin/views/pro_column.php +10 -10
  36. admin/views/sources/google.php +123 -132
  37. admin/views/tab-about.php +424 -365
  38. admin/views/tab-generate.php +220 -215
  39. admin/views/tab-license.php +150 -150
  40. auto-post-thumbnail.php +32 -36
  41. fonts/{Arial.ttf → arial.ttf} +0 -0
  42. fonts/{Segoeui.ttf → segoeui.ttf} +0 -0
  43. fonts/{Tahoma.ttf → tahoma.ttf} +0 -0
  44. includes/class-apt.php +214 -183
  45. includes/class-plugin.php +556 -551
  46. includes/class-post-images.php +174 -164
  47. includes/class-wapt-image.php +468 -468
  48. includes/class.generate-result.php +174 -164
  49. includes/controls/class.color.php +55 -56
  50. includes/controls/class.fonts.php +41 -36
  51. includes/controls/class.mediabutton.php +54 -49
  52. includes/image-search/boot.php +7 -7
  53. includes/image-search/class-google-images.php +103 -100
  54. includes/image-search/result/class.founded-image.php +11 -2
  55. includes/image-search/result/class.google-founded-image.php +0 -1
  56. includes/image-search/result/class.response.php +67 -67
  57. libs/factory/adverts/boot.php +12 -12
  58. libs/factory/adverts/includes/class-base.php +6 -6
  59. libs/factory/adverts/includes/class-dashboard-widget.php +4 -4
  60. libs/factory/adverts/includes/class-rest-request.php +4 -4
  61. libs/factory/adverts/langs/{wbcr_factory_adverts_129-ru_RU.mo → wbcr_factory_adverts_130-ru_RU.mo} +0 -0
  62. libs/factory/adverts/langs/{wbcr_factory_adverts_129-ru_RU.po → wbcr_factory_adverts_130-ru_RU.po} +0 -0
  63. libs/factory/bootstrap/assets/css-min/bootstrap.accordion.min.css +1 -1
  64. libs/factory/bootstrap/assets/css-min/bootstrap.blue.min.css +1 -1
  65. libs/factory/bootstrap/assets/css-min/bootstrap.coffee.min.css +1 -1
  66. libs/factory/bootstrap/assets/css-min/bootstrap.core.min.css +1 -1
  67. libs/factory/bootstrap/assets/css-min/bootstrap.datetimepicker.min.css +1 -1
  68. libs/factory/bootstrap/assets/css-min/bootstrap.ectoplasm.min.css +1 -1
  69. libs/factory/bootstrap/assets/css-min/bootstrap.form-group.min.css +1 -1
  70. libs/factory/bootstrap/assets/css-min/bootstrap.form-metabox.min.css +1 -1
  71. libs/factory/bootstrap/assets/css-min/bootstrap.light.min.css +1 -1
  72. libs/factory/bootstrap/assets/css-min/bootstrap.midnight.min.css +1 -1
  73. libs/factory/bootstrap/assets/css-min/bootstrap.ocean.min.css +1 -1
  74. libs/factory/bootstrap/assets/css-min/bootstrap.separator.min.css +1 -1
  75. libs/factory/bootstrap/assets/css-min/bootstrap.sunrise.min.css +1 -1
  76. libs/factory/bootstrap/assets/css-min/bootstrap.tab.min.css +1 -1
  77. libs/factory/bootstrap/assets/css-min/bootstrap.wp-editor.min.css +1 -1
  78. libs/factory/bootstrap/assets/css-min/control.checkbox.min.css +1 -1
  79. libs/factory/bootstrap/assets/css-min/control.color-and-opacity.min.css +1 -1
  80. libs/factory/bootstrap/assets/css-min/control.color.min.css +1 -1
  81. libs/factory/bootstrap/assets/css-min/control.dropdown-and-colors.min.css +1 -1
  82. libs/factory/bootstrap/assets/css-min/control.dropdown.min.css +1 -1
  83. libs/factory/bootstrap/assets/css-min/control.fonts.min.css +1 -1
  84. libs/factory/bootstrap/assets/css-min/control.list.min.css +1 -1
  85. libs/factory/bootstrap/assets/css-min/control.multiple-textbox.min.css +1 -1
  86. libs/factory/bootstrap/assets/css-min/control.pattern.min.css +1 -1
  87. libs/factory/bootstrap/assets/css-min/control.radio-colors.min.css +1 -1
  88. libs/factory/bootstrap/assets/css-min/holder.more-link.min.css +1 -1
  89. libs/factory/bootstrap/assets/css-min/plugin.gradient-picker.min.css +1 -1
  90. libs/factory/bootstrap/assets/css-min/plugin.paddings-editor.min.css +1 -1
  91. libs/factory/bootstrap/assets/js-min/bootstrap.accordion.min.js +1 -1
  92. libs/factory/bootstrap/assets/js-min/bootstrap.collapse.min.js +1 -1
  93. libs/factory/bootstrap/assets/js-min/bootstrap.datetimepicker.min.js +1 -1
  94. libs/factory/bootstrap/assets/js-min/bootstrap.dropdown.min.js +1 -1
  95. libs/factory/bootstrap/assets/js-min/bootstrap.modal.min.js +1 -1
  96. libs/factory/bootstrap/assets/js-min/control.checkbox.min.js +1 -1
  97. libs/factory/bootstrap/assets/js-min/control.color-and-opacity.min.js +1 -1
  98. libs/factory/bootstrap/assets/js-min/control.color.min.js +1 -1
  99. libs/factory/bootstrap/assets/js-min/control.dropdown-and-colors.min.js +1 -1
  100. libs/factory/bootstrap/assets/js-min/control.dropdown.min.js +1 -1
  101. libs/factory/bootstrap/assets/js-min/control.fonts.min.js +1 -1
  102. libs/factory/bootstrap/assets/js-min/control.gradient.min.js +1 -1
  103. libs/factory/bootstrap/assets/js-min/control.integer.min.js +1 -1
  104. libs/factory/bootstrap/assets/js-min/control.list.min.js +1 -1
  105. libs/factory/bootstrap/assets/js-min/control.multiple-textbox.min.js +1 -1
  106. libs/factory/bootstrap/assets/js-min/control.pattern.min.js +1 -1
  107. libs/factory/bootstrap/assets/js-min/holder.more-link.min.js +1 -1
  108. libs/factory/bootstrap/assets/js-min/plugin.gradient-picker.min.js +1 -1
admin/assets/css/license-manager.css CHANGED
@@ -1,4 +1,3 @@
1
-
2
  .not-visible-in-manager {
3
  display: none;
4
  }
 
1
  .not-visible-in-manager {
2
  display: none;
3
  }
admin/assets/css/settings.css CHANGED
@@ -3,7 +3,7 @@
3
  padding: 0px 30px;
4
  }
5
 
6
- .factory-bootstrap-453 .factory-ajax-loader
7
  {
8
  width: 120px !important;
9
  background: url("../img/ajax-loader-line.gif") no-repeat center center !important;
@@ -14,7 +14,7 @@
14
  top: 5px;
15
  }
16
 
17
- .factory-bootstrap-453 select.form-control
18
  {
19
  display: inline;
20
  background: #fff url(data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E) no-repeat right 5px top 55%;
@@ -27,7 +27,7 @@
27
  font-size: 16px !important;
28
  }
29
 
30
- .factory-bootstrap-453 .btn-default.active, .factory-bootstrap-453 .btn-default:active
31
  {
32
  text-shadow: none;
33
  color: #fff !important;
@@ -152,13 +152,13 @@ span.wapt-icon-pro
152
  box-shadow: none !important;
153
  }
154
 
155
- .factory-bootstrap-453 .factory-color .factory-background, .factory-bootstrap-453 .factory-color .factory-pattern
156
  {
157
  width: 30px;
158
  height: 30px;
159
  }
160
 
161
- .factory-bootstrap-453 .factory-color .factory-color-hex
162
  {
163
  width: 70px;
164
  font-family: Monospace, serif;
3
  padding: 0px 30px;
4
  }
5
 
6
+ .factory-bootstrap-454 .factory-ajax-loader
7
  {
8
  width: 120px !important;
9
  background: url("../img/ajax-loader-line.gif") no-repeat center center !important;
14
  top: 5px;
15
  }
16
 
17
+ .factory-bootstrap-454 select.form-control
18
  {
19
  display: inline;
20
  background: #fff url(data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E) no-repeat right 5px top 55%;
27
  font-size: 16px !important;
28
  }
29
 
30
+ .factory-bootstrap-454 .btn-default.active, .factory-bootstrap-454 .btn-default:active
31
  {
32
  text-shadow: none;
33
  color: #fff !important;
152
  box-shadow: none !important;
153
  }
154
 
155
+ .factory-bootstrap-454 .factory-color .factory-background, .factory-bootstrap-454 .factory-color .factory-pattern
156
  {
157
  width: 30px;
158
  height: 30px;
159
  }
160
 
161
+ .factory-bootstrap-454 .factory-color .factory-color-hex
162
  {
163
  width: 70px;
164
  font-family: Monospace, serif;
admin/assets/img/about/Sequence-01.gif ADDED
Binary file
admin/assets/img/about/Sequence-02.gif ADDED
Binary file
admin/assets/img/about/Sequence-03.png ADDED
Binary file
admin/assets/img/about/Sequence-04.gif ADDED
Binary file
admin/assets/img/about/Sequence-05.gif ADDED
Binary file
admin/assets/img/about/Sequence-06.gif ADDED
Binary file
admin/assets/img/about/icon-2.png ADDED
Binary file
admin/assets/img/about/icon-3.png ADDED
Binary file
admin/assets/img/about/icon-4.png ADDED
Binary file
admin/assets/img/about/icon-5.png ADDED
Binary file
admin/assets/img/about/icon-6.png ADDED
Binary file
admin/assets/img/about/icon1.png ADDED
Binary file
admin/assets/img/about/interface-1.png ADDED
Binary file
admin/assets/img/about/interface-2.png ADDED
Binary file
admin/assets/img/about/interface-3.png ADDED
Binary file
admin/assets/js/_Chart.min.js DELETED
@@ -1,10 +0,0 @@
1
- /*!
2
- * Chart.js
3
- * http://chartjs.org/
4
- * Version: 2.7.1
5
- *
6
- * Copyright 2017 Nick Downie
7
- * Released under the MIT license
8
- * https://github.com/chartjs/Chart.js/blob/master/LICENSE.md
9
- */
10
- window.apthumb=window.apthumb||{};!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window.apthumb:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Chart=t()}}(function(){return function t(e,n,i){function a(r,l){if(!n[r]){if(!e[r]){var s="function"==typeof require&&require;if(!l&&s)return s(r,!0);if(o)return o(r,!0);var u=new Error("Cannot find module '"+r+"'");throw u.code="MODULE_NOT_FOUND",u}var d=n[r]={exports:{}};e[r][0].call(d.exports,function(t){var n=e[r][1][t];return a(n||t)},d,d.exports,t,e,n,i)}return n[r].exports}for(var o="function"==typeof require&&require,r=0;r<i.length;r++)a(i[r]);return a}({1:[function(t,e,n){},{}],2:[function(t,e,n){function i(t){if(t){var e=[0,0,0],n=1,i=t.match(/^#([a-fA-F0-9]{3})$/i);if(i){i=i[1];for(a=0;a<e.length;a++)e[a]=parseInt(i[a]+i[a],16)}else if(i=t.match(/^#([a-fA-F0-9]{6})$/i)){i=i[1];for(a=0;a<e.length;a++)e[a]=parseInt(i.slice(2*a,2*a+2),16)}else if(i=t.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(a=0;a<e.length;a++)e[a]=parseInt(i[a+1]);n=parseFloat(i[4])}else if(i=t.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(a=0;a<e.length;a++)e[a]=Math.round(2.55*parseFloat(i[a+1]));n=parseFloat(i[4])}else if(i=t.match(/(\w+)/)){if("transparent"==i[1])return[0,0,0,0];if(!(e=c[i[1]]))return}for(var a=0;a<e.length;a++)e[a]=u(e[a],0,255);return n=n||0==n?u(n,0,1):1,e[3]=n,e}}function a(t){if(t){var e=t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[u(parseInt(e[1]),0,360),u(parseFloat(e[2]),0,100),u(parseFloat(e[3]),0,100),u(isNaN(n)?1:n,0,1)]}}}function o(t){if(t){var e=t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[u(parseInt(e[1]),0,360),u(parseFloat(e[2]),0,100),u(parseFloat(e[3]),0,100),u(isNaN(n)?1:n,0,1)]}}}function r(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function l(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%, "+(e||t[3]||1)+")"}function s(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function u(t,e,n){return Math.min(Math.max(e,t),n)}function d(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var c=t(6);e.exports={getRgba:i,getHsla:a,getRgb:function(t){var e=i(t);return e&&e.slice(0,3)},getHsl:function(t){var e=a(t);return e&&e.slice(0,3)},getHwb:o,getAlpha:function(t){var e=i(t);return e?e[3]:(e=a(t))?e[3]:(e=o(t))?e[3]:void 0},hexString:function(t){return"#"+d(t[0])+d(t[1])+d(t[2])},rgbString:function(t,e){return e<1||t[3]&&t[3]<1?r(t,e):"rgb("+t[0]+", "+t[1]+", "+t[2]+")"},rgbaString:r,percentString:function(t,e){return e<1||t[3]&&t[3]<1?l(t,e):"rgb("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%)"},percentaString:l,hslString:function(t,e){return e<1||t[3]&&t[3]<1?s(t,e):"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"},hslaString:s,hwbString:function(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"},keyword:function(t){return h[t.slice(0,3)]}};var h={};for(var f in c)h[c[f]]=f},{6:6}],3:[function(t,e,n){var i=t(5),a=t(2),o=function(t){if(t instanceof o)return t;if(!(this instanceof o))return new o(t);this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1};var e;"string"==typeof t?(e=a.getRgba(t))?this.setValues("rgb",e):(e=a.getHsla(t))?this.setValues("hsl",e):(e=a.getHwb(t))&&this.setValues("hwb",e):"object"==typeof t&&(void 0!==(e=t).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e))};o.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t=(t%=360)<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return a.hexString(this.values.rgb)},rgbString:function(){return a.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return a.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return a.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return a.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return a.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return a.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return a.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],n=0;n<t.length;n++){var i=t[n]/255;e[n]=i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),n=t.luminosity();return e>n?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=this,i=t,a=void 0===e?.5:e,o=2*a-1,r=n.alpha()-i.alpha(),l=((o*r==-1?o:(o+r)/(1+o*r))+1)/2,s=1-l;return this.rgb(l*n.red()+s*i.red(),l*n.green()+s*i.green(),l*n.blue()+s*i.blue()).alpha(n.alpha()*a+i.alpha()*(1-a))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new o,i=this.values,a=n.values;for(var r in i)i.hasOwnProperty(r)&&(t=i[r],"[object Array]"===(e={}.toString.call(t))?a[r]=t.slice(0):"[object Number]"===e?a[r]=t:console.error("unexpected color value:",t));return n}},o.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},o.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},o.prototype.getValues=function(t){for(var e=this.values,n={},i=0;i<t.length;i++)n[t.charAt(i)]=e[t][i];return 1!==e.alpha&&(n.a=e.alpha),n},o.prototype.setValues=function(t,e){var n,a=this.values,o=this.spaces,r=this.maxes,l=1;if(this.valid=!0,"alpha"===t)l=e;else if(e.length)a[t]=e.slice(0,t.length),l=e[t.length];else if(void 0!==e[t.charAt(0)]){for(n=0;n<t.length;n++)a[t][n]=e[t.charAt(n)];l=e.a}else if(void 0!==e[o[t][0]]){var s=o[t];for(n=0;n<t.length;n++)a[t][n]=e[s[n]];l=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===l?a.alpha:l)),"alpha"===t)return!1;var u;for(n=0;n<t.length;n++)u=Math.max(0,Math.min(r[t][n],a[t][n])),a[t][n]=Math.round(u);for(var d in o)d!==t&&(a[d]=i[t][d](a[t]));return!0},o.prototype.setSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n),this)},o.prototype.setChannel=function(t,e,n){var i=this.values[t];return void 0===n?i[e]:n===i[e]?this:(i[e]=n,this.setValues(t,i),this)},"undefined"!=typeof window&&(window.apthumb.Color=o),e.exports=o},{2:2,5:5}],4:[function(t,e,n){function i(t){var e,n,i,a=t[0]/255,o=t[1]/255,r=t[2]/255,l=Math.min(a,o,r),s=Math.max(a,o,r),u=s-l;return s==l?e=0:a==s?e=(o-r)/u:o==s?e=2+(r-a)/u:r==s&&(e=4+(a-o)/u),(e=Math.min(60*e,360))<0&&(e+=360),i=(l+s)/2,n=s==l?0:i<=.5?u/(s+l):u/(2-s-l),[e,100*n,100*i]}function a(t){var e,n,i,a=t[0],o=t[1],r=t[2],l=Math.min(a,o,r),s=Math.max(a,o,r),u=s-l;return n=0==s?0:u/s*1e3/10,s==l?e=0:a==s?e=(o-r)/u:o==s?e=2+(r-a)/u:r==s&&(e=4+(a-o)/u),(e=Math.min(60*e,360))<0&&(e+=360),i=s/255*1e3/10,[e,n,i]}function o(t){var e=t[0],n=t[1],a=t[2];return[i(t)[0],100*(1/255*Math.min(e,Math.min(n,a))),100*(a=1-1/255*Math.max(e,Math.max(n,a)))]}function l(t){var e,n,i,a,o=t[0]/255,r=t[1]/255,l=t[2]/255;return a=Math.min(1-o,1-r,1-l),e=(1-o-a)/(1-a)||0,n=(1-r-a)/(1-a)||0,i=(1-l-a)/(1-a)||0,[100*e,100*n,100*i,100*a]}function s(t){return C[JSON.stringify(t)]}function u(t){var e=t[0]/255,n=t[1]/255,i=t[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.1805*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)),100*(.2126*e+.7152*n+.0722*i),100*(.0193*e+.1192*n+.9505*i)]}function d(t){var e,n,i,a=u(t),o=a[0],r=a[1],l=a[2];return o/=95.047,r/=100,l/=108.883,o=o>.008856?Math.pow(o,1/3):7.787*o+16/116,r=r>.008856?Math.pow(r,1/3):7.787*r+16/116,l=l>.008856?Math.pow(l,1/3):7.787*l+16/116,e=116*r-16,n=500*(o-r),i=200*(r-l),[e,n,i]}function c(t){var e,n,i,a,o,r=t[0]/360,l=t[1]/100,s=t[2]/100;if(0==l)return o=255*s,[o,o,o];e=2*s-(n=s<.5?s*(1+l):s+l-s*l),a=[0,0,0];for(var u=0;u<3;u++)(i=r+1/3*-(u-1))<0&&i++,i>1&&i--,o=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e,a[u]=255*o;return a}function h(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,o=e-Math.floor(e),r=255*i*(1-n),l=255*i*(1-n*o),s=255*i*(1-n*(1-o)),i=255*i;switch(a){case 0:return[i,s,r];case 1:return[l,i,r];case 2:return[r,i,s];case 3:return[r,l,i];case 4:return[s,r,i];case 5:return[i,r,l]}}function f(t){var e,n,i,a,o=t[0]/360,l=t[1]/100,s=t[2]/100,u=l+s;switch(u>1&&(l/=u,s/=u),e=Math.floor(6*o),n=1-s,i=6*o-e,0!=(1&e)&&(i=1-i),a=l+i*(n-l),e){default:case 6:case 0:r=n,g=a,b=l;break;case 1:r=a,g=n,b=l;break;case 2:r=l,g=n,b=a;break;case 3:r=l,g=a,b=n;break;case 4:r=a,g=l,b=n;break;case 5:r=n,g=l,b=a}return[255*r,255*g,255*b]}function p(t){var e,n,i,a=t[0]/100,o=t[1]/100,r=t[2]/100,l=t[3]/100;return e=1-Math.min(1,a*(1-l)+l),n=1-Math.min(1,o*(1-l)+l),i=1-Math.min(1,r*(1-l)+l),[255*e,255*n,255*i]}function v(t){var e,n,i,a=t[0]/100,o=t[1]/100,r=t[2]/100;return e=3.2406*a+-1.5372*o+-.4986*r,n=-.9689*a+1.8758*o+.0415*r,i=.0557*a+-.204*o+1.057*r,e=e>.0031308?1.055*Math.pow(e,1/2.4)-.055:e*=12.92,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:n*=12.92,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:i*=12.92,e=Math.min(Math.max(0,e),1),n=Math.min(Math.max(0,n),1),i=Math.min(Math.max(0,i),1),[255*e,255*n,255*i]}function m(t){var e,n,i,a=t[0],o=t[1],r=t[2];return a/=95.047,o/=100,r/=108.883,a=a>.008856?Math.pow(a,1/3):7.787*a+16/116,o=o>.008856?Math.pow(o,1/3):7.787*o+16/116,r=r>.008856?Math.pow(r,1/3):7.787*r+16/116,e=116*o-16,n=500*(a-o),i=200*(o-r),[e,n,i]}function x(t){var e,n,i,a,o=t[0],r=t[1],l=t[2];return o<=8?a=(n=100*o/903.3)/100*7.787+16/116:(n=100*Math.pow((o+16)/116,3),a=Math.pow(n/100,1/3)),e=e/95.047<=.008856?e=95.047*(r/500+a-16/116)/7.787:95.047*Math.pow(r/500+a,3),i=i/108.883<=.008859?i=108.883*(a-l/200-16/116)/7.787:108.883*Math.pow(a-l/200,3),[e,n,i]}function y(t){var e,n,i,a=t[0],o=t[1],r=t[2];return e=Math.atan2(r,o),(n=360*e/2/Math.PI)<0&&(n+=360),i=Math.sqrt(o*o+r*r),[a,i,n]}function k(t){return v(x(t))}function w(t){var e,n,i,a=t[0],o=t[1];return i=t[2]/360*2*Math.PI,e=o*Math.cos(i),n=o*Math.sin(i),[a,e,n]}function M(t){return S[t]}e.exports={rgb2hsl:i,rgb2hsv:a,rgb2hwb:o,rgb2cmyk:l,rgb2keyword:s,rgb2xyz:u,rgb2lab:d,rgb2lch:function(t){return y(d(t))},hsl2rgb:c,hsl2hsv:function(t){var e,n,i=t[0],a=t[1]/100,o=t[2]/100;return 0===o?[0,0,0]:(o*=2,a*=o<=1?o:2-o,n=(o+a)/2,e=2*a/(o+a),[i,100*e,100*n])},hsl2hwb:function(t){return o(c(t))},hsl2cmyk:function(t){return l(c(t))},hsl2keyword:function(t){return s(c(t))},hsv2rgb:h,hsv2hsl:function(t){var e,n,i=t[0],a=t[1]/100,o=t[2]/100;return n=(2-a)*o,e=a*o,e/=n<=1?n:2-n,e=e||0,n/=2,[i,100*e,100*n]},hsv2hwb:function(t){return o(h(t))},hsv2cmyk:function(t){return l(h(t))},hsv2keyword:function(t){return s(h(t))},hwb2rgb:f,hwb2hsl:function(t){return i(f(t))},hwb2hsv:function(t){return a(f(t))},hwb2cmyk:function(t){return l(f(t))},hwb2keyword:function(t){return s(f(t))},cmyk2rgb:p,cmyk2hsl:function(t){return i(p(t))},cmyk2hsv:function(t){return a(p(t))},cmyk2hwb:function(t){return o(p(t))},cmyk2keyword:function(t){return s(p(t))},keyword2rgb:M,keyword2hsl:function(t){return i(M(t))},keyword2hsv:function(t){return a(M(t))},keyword2hwb:function(t){return o(M(t))},keyword2cmyk:function(t){return l(M(t))},keyword2lab:function(t){return d(M(t))},keyword2xyz:function(t){return u(M(t))},xyz2rgb:v,xyz2lab:m,xyz2lch:function(t){return y(m(t))},lab2xyz:x,lab2rgb:k,lab2lch:y,lch2lab:w,lch2xyz:function(t){return x(w(t))},lch2rgb:function(t){return k(w(t))}};var S={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},C={};for(var _ in S)C[JSON.stringify(S[_])]=_},{}],5:[function(t,e,n){var i=t(4),a=function(){return new u};for(var o in i){a[o+"Raw"]=function(t){return function(e){return"number"==typeof e&&(e=Array.prototype.slice.call(arguments)),i[t](e)}}(o);var r=/(\w+)2(\w+)/.exec(o),l=r[1],s=r[2];(a[l]=a[l]||{})[s]=a[o]=function(t){return function(e){"number"==typeof e&&(e=Array.prototype.slice.call(arguments));var n=i[t](e);if("string"==typeof n||void 0===n)return n;for(var a=0;a<n.length;a++)n[a]=Math.round(n[a]);return n}}(o)}var u=function(){this.convs={}};u.prototype.routeSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n))},u.prototype.setValues=function(t,e){return this.space=t,this.convs={},this.convs[t]=e,this},u.prototype.getValues=function(t){var e=this.convs[t];if(!e){var n=this.space,i=this.convs[n];e=a[n][t](i),this.convs[t]=e}return e},["rgb","hsl","hsv","cmyk","keyword"].forEach(function(t){u.prototype[t]=function(e){return this.routeSpace(t,arguments)}}),e.exports=a},{4:4}],6:[function(t,e,n){"use strict";e.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},{}],7:[function(t,e,n){var i=t(29)();i.helpers=t(45),t(27)(i),i.defaults=t(25),i.Element=t(26),i.elements=t(40),i.Interaction=t(28),i.platform=t(48),t(31)(i),t(22)(i),t(23)(i),t(24)(i),t(30)(i),t(33)(i),t(32)(i),t(35)(i),t(54)(i),t(52)(i),t(53)(i),t(55)(i),t(56)(i),t(57)(i),t(15)(i),t(16)(i),t(17)(i),t(18)(i),t(19)(i),t(20)(i),t(21)(i),t(8)(i),t(9)(i),t(10)(i),t(11)(i),t(12)(i),t(13)(i),t(14)(i);var a=[];a.push(t(49)(i),t(50)(i),t(51)(i)),i.plugins.register(a),i.platform.initialize(),e.exports=i,"undefined"!=typeof window&&(window.apthumb.Chart=i),i.canvasHelpers=i.helpers.canvas},{10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,19:19,20:20,21:21,22:22,23:23,24:24,25:25,26:26,27:27,28:28,29:29,30:30,31:31,32:32,33:33,35:35,40:40,45:45,48:48,49:49,50:50,51:51,52:52,53:53,54:54,55:55,56:56,57:57,8:8,9:9}],8:[function(t,e,n){"use strict";e.exports=function(t){t.Bar=function(e,n){return n.type="bar",new t(e,n)}}},{}],9:[function(t,e,n){"use strict";e.exports=function(t){t.Bubble=function(e,n){return n.type="bubble",new t(e,n)}}},{}],10:[function(t,e,n){"use strict";e.exports=function(t){t.Doughnut=function(e,n){return n.type="doughnut",new t(e,n)}}},{}],11:[function(t,e,n){"use strict";e.exports=function(t){t.Line=function(e,n){return n.type="line",new t(e,n)}}},{}],12:[function(t,e,n){"use strict";e.exports=function(t){t.PolarArea=function(e,n){return n.type="polarArea",new t(e,n)}}},{}],13:[function(t,e,n){"use strict";e.exports=function(t){t.Radar=function(e,n){return n.type="radar",new t(e,n)}}},{}],14:[function(t,e,n){"use strict";e.exports=function(t){t.Scatter=function(e,n){return n.type="scatter",new t(e,n)}}},{}],15:[function(t,e,n){"use strict";var i=t(25),a=t(40),o=t(45);i._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),i._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{position:"left",type:"category",categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{callbacks:{title:function(t,e){var n="";return t.length>0&&(t[0].yLabel?n=t[0].yLabel:e.labels.length>0&&t[0].index<e.labels.length&&(n=e.labels[t[0].index])),n},label:function(t,e){return(e.datasets[t.datasetIndex].label||"")+": "+t.xLabel}},mode:"index",axis:"y"}}),e.exports=function(t){t.controllers.bar=t.DatasetController.extend({dataElementType:a.Rectangle,initialize:function(){var e,n=this;t.DatasetController.prototype.initialize.apply(n,arguments),(e=n.getMeta()).stack=n.getDataset().stack,e.bar=!0},update:function(t){var e,n,i=this,a=i.getMeta().data;for(i._ruler=i.getRuler(),e=0,n=a.length;e<n;++e)i.updateElement(a[e],e,t)},updateElement:function(t,e,n){var i=this,a=i.chart,r=i.getMeta(),l=i.getDataset(),s=t.custom||{},u=a.options.elements.rectangle;t._xScale=i.getScaleForId(r.xAxisID),t._yScale=i.getScaleForId(r.yAxisID),t._datasetIndex=i.index,t._index=e,t._model={datasetLabel:l.label,label:a.data.labels[e],borderSkipped:s.borderSkipped?s.borderSkipped:u.borderSkipped,backgroundColor:s.backgroundColor?s.backgroundColor:o.valueAtIndexOrDefault(l.backgroundColor,e,u.backgroundColor),borderColor:s.borderColor?s.borderColor:o.valueAtIndexOrDefault(l.borderColor,e,u.borderColor),borderWidth:s.borderWidth?s.borderWidth:o.valueAtIndexOrDefault(l.borderWidth,e,u.borderWidth)},i.updateElementGeometry(t,e,n),t.pivot()},updateElementGeometry:function(t,e,n){var i=this,a=t._model,o=i.getValueScale(),r=o.getBasePixel(),l=o.isHorizontal(),s=i._ruler||i.getRuler(),u=i.calculateBarValuePixels(i.index,e),d=i.calculateBarIndexPixels(i.index,e,s);a.horizontal=l,a.base=n?r:u.base,a.x=l?n?r:u.head:d.center,a.y=l?d.center:n?r:u.head,a.height=l?d.size:void 0,a.width=l?void 0:d.size},getValueScaleId:function(){return this.getMeta().yAxisID},getIndexScaleId:function(){return this.getMeta().xAxisID},getValueScale:function(){return this.getScaleForId(this.getValueScaleId())},getIndexScale:function(){return this.getScaleForId(this.getIndexScaleId())},getStackCount:function(t){var e,n,i=this,a=i.chart,o=i.getIndexScale().options.stacked,r=void 0===t?a.data.datasets.length:t+1,l=[];for(e=0;e<r;++e)(n=a.getDatasetMeta(e)).bar&&a.isDatasetVisible(e)&&(!1===o||!0===o&&-1===l.indexOf(n.stack)||void 0===o&&(void 0===n.stack||-1===l.indexOf(n.stack)))&&l.push(n.stack);return l.length},getStackIndex:function(t){return this.getStackCount(t)-1},getRuler:function(){var t,e,n=this,i=n.getIndexScale(),a=n.getStackCount(),o=n.index,r=[],l=i.isHorizontal(),s=l?i.left:i.top,u=s+(l?i.width:i.height);for(t=0,e=n.getMeta().data.length;t<e;++t)r.push(i.getPixelForValue(null,t,o));return{pixels:r,start:s,end:u,stackCount:a,scale:i}},calculateBarValuePixels:function(t,e){var n,i,a,o,r,l,s=this,u=s.chart,d=s.getMeta(),c=s.getValueScale(),h=u.data.datasets,f=c.getRightValue(h[t].data[e]),g=c.options.stacked,p=d.stack,v=0;if(g||void 0===g&&void 0!==p)for(n=0;n<t;++n)(i=u.getDatasetMeta(n)).bar&&i.stack===p&&i.controller.getValueScaleId()===c.id&&u.isDatasetVisible(n)&&(a=c.getRightValue(h[n].data[e]),(f<0&&a<0||f>=0&&a>0)&&(v+=a));return o=c.getPixelForValue(v),r=c.getPixelForValue(v+f),l=(r-o)/2,{size:l,base:o,head:r,center:r+l/2}},calculateBarIndexPixels:function(t,e,n){var i,a,r,l,s,u,d=this,c=n.scale.options,h=d.getStackIndex(t),f=n.pixels,g=f[e],p=f.length,v=n.start,m=n.end;return 1===p?(i=g>v?g-v:m-g,a=g<m?m-g:g-v):(e>0&&(i=(g-f[e-1])/2,e===p-1&&(a=i)),e<p-1&&(a=(f[e+1]-g)/2,0===e&&(i=a))),r=i*c.categoryPercentage,l=a*c.categoryPercentage,s=(r+l)/n.stackCount,u=s*c.barPercentage,u=Math.min(o.valueOrDefault(c.barThickness,u),o.valueOrDefault(c.maxBarThickness,1/0)),g-=r,g+=s*h,g+=(s-u)/2,{size:u,base:g,head:g+u,center:g+u/2}},draw:function(){var t=this,e=t.chart,n=t.getValueScale(),i=t.getMeta().data,a=t.getDataset(),r=i.length,l=0;for(o.canvas.clipArea(e.ctx,e.chartArea);l<r;++l)isNaN(n.getRightValue(a.data[l]))||i[l].draw();o.canvas.unclipArea(e.ctx)},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,i=t.custom||{},a=t._model;a.backgroundColor=i.hoverBackgroundColor?i.hoverBackgroundColor:o.valueAtIndexOrDefault(e.hoverBackgroundColor,n,o.getHoverColor(a.backgroundColor)),a.borderColor=i.hoverBorderColor?i.hoverBorderColor:o.valueAtIndexOrDefault(e.hoverBorderColor,n,o.getHoverColor(a.borderColor)),a.borderWidth=i.hoverBorderWidth?i.hoverBorderWidth:o.valueAtIndexOrDefault(e.hoverBorderWidth,n,a.borderWidth)},removeHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,i=t.custom||{},a=t._model,r=this.chart.options.elements.rectangle;a.backgroundColor=i.backgroundColor?i.backgroundColor:o.valueAtIndexOrDefault(e.backgroundColor,n,r.backgroundColor),a.borderColor=i.borderColor?i.borderColor:o.valueAtIndexOrDefault(e.borderColor,n,r.borderColor),a.borderWidth=i.borderWidth?i.borderWidth:o.valueAtIndexOrDefault(e.borderWidth,n,r.borderWidth)}}),t.controllers.horizontalBar=t.controllers.bar.extend({getValueScaleId:function(){return this.getMeta().xAxisID},getIndexScaleId:function(){return this.getMeta().yAxisID}})}},{25:25,40:40,45:45}],16:[function(t,e,n){"use strict";var i=t(25),a=t(40),o=t(45);i._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.datasets[t.datasetIndex].label||"",i=e.datasets[t.datasetIndex].data[t.index];return n+": ("+t.xLabel+", "+t.yLabel+", "+i.r+")"}}}}),e.exports=function(t){t.controllers.bubble=t.DatasetController.extend({dataElementType:a.Point,update:function(t){var e=this,n=e.getMeta().data;o.each(n,function(n,i){e.updateElement(n,i,t)})},updateElement:function(t,e,n){var i=this,a=i.getMeta(),o=t.custom||{},r=i.getScaleForId(a.xAxisID),l=i.getScaleForId(a.yAxisID),s=i._resolveElementOptions(t,e),u=i.getDataset().data[e],d=i.index,c=n?r.getPixelForDecimal(.5):r.getPixelForValue("object"==typeof u?u:NaN,e,d),h=n?l.getBasePixel():l.getPixelForValue(u,e,d);t._xScale=r,t._yScale=l,t._options=s,t._datasetIndex=d,t._index=e,t._model={backgroundColor:s.backgroundColor,borderColor:s.borderColor,borderWidth:s.borderWidth,hitRadius:s.hitRadius,pointStyle:s.pointStyle,radius:n?0:s.radius,skip:o.skip||isNaN(c)||isNaN(h),x:c,y:h},t.pivot()},setHoverStyle:function(t){var e=t._model,n=t._options;e.backgroundColor=o.valueOrDefault(n.hoverBackgroundColor,o.getHoverColor(n.backgroundColor)),e.borderColor=o.valueOrDefault(n.hoverBorderColor,o.getHoverColor(n.borderColor)),e.borderWidth=o.valueOrDefault(n.hoverBorderWidth,n.borderWidth),e.radius=n.radius+n.hoverRadius},removeHoverStyle:function(t){var e=t._model,n=t._options;e.backgroundColor=n.backgroundColor,e.borderColor=n.borderColor,e.borderWidth=n.borderWidth,e.radius=n.radius},_resolveElementOptions:function(t,e){var n,i,a,r=this,l=r.chart,s=l.data.datasets[r.index],u=t.custom||{},d=l.options.elements.point,c=o.options.resolve,h=s.data[e],f={},g={chart:l,dataIndex:e,dataset:s,datasetIndex:r.index},p=["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle"];for(n=0,i=p.length;n<i;++n)f[a=p[n]]=c([u[a],s[a],d[a]],g,e);return f.radius=c([u.radius,h?h.r:void 0,s.radius,d.radius],g,e),f}})}},{25:25,40:40,45:45}],17:[function(t,e,n){"use strict";var i=t(25),a=t(40),o=t(45);i._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var n=t.data,i=n.datasets,a=n.labels;if(i.length)for(var o=0;o<i[0].data.length;++o)e.push('<li><span style="background-color:'+i[0].backgroundColor[o]+'"></span>'),a[o]&&e.push(a[o]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map(function(n,i){var a=t.getDatasetMeta(0),r=e.datasets[0],l=a.data[i],s=l&&l.custom||{},u=o.valueAtIndexOrDefault,d=t.options.elements.arc;return{text:n,fillStyle:s.backgroundColor?s.backgroundColor:u(r.backgroundColor,i,d.backgroundColor),strokeStyle:s.borderColor?s.borderColor:u(r.borderColor,i,d.borderColor),lineWidth:s.borderWidth?s.borderWidth:u(r.borderWidth,i,d.borderWidth),hidden:isNaN(r.data[i])||a.data[i].hidden,index:i}}):[]}},onClick:function(t,e){var n,i,a,o=e.index,r=this.chart;for(n=0,i=(r.data.datasets||[]).length;n<i;++n)(a=r.getDatasetMeta(n)).data[o]&&(a.data[o].hidden=!a.data[o].hidden);r.update()}},cutoutPercentage:50,rotation:-.5*Math.PI,circumference:2*Math.PI,tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.labels[t.index],i=": "+e.datasets[t.datasetIndex].data[t.index];return o.isArray(n)?(n=n.slice())[0]+=i:n+=i,n}}}}),i._set("pie",o.clone(i.doughnut)),i._set("pie",{cutoutPercentage:0}),e.exports=function(t){t.controllers.doughnut=t.controllers.pie=t.DatasetController.extend({dataElementType:a.Arc,linkScales:o.noop,getRingIndex:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&++e;return e},update:function(t){var e=this,n=e.chart,i=n.chartArea,a=n.options,r=a.elements.arc,l=i.right-i.left-r.borderWidth,s=i.bottom-i.top-r.borderWidth,u=Math.min(l,s),d={x:0,y:0},c=e.getMeta(),h=a.cutoutPercentage,f=a.circumference;if(f<2*Math.PI){var g=a.rotation%(2*Math.PI),p=(g+=2*Math.PI*(g>=Math.PI?-1:g<-Math.PI?1:0))+f,v={x:Math.cos(g),y:Math.sin(g)},m={x:Math.cos(p),y:Math.sin(p)},b=g<=0&&p>=0||g<=2*Math.PI&&2*Math.PI<=p,x=g<=.5*Math.PI&&.5*Math.PI<=p||g<=2.5*Math.PI&&2.5*Math.PI<=p,y=g<=-Math.PI&&-Math.PI<=p||g<=Math.PI&&Math.PI<=p,k=g<=.5*-Math.PI&&.5*-Math.PI<=p||g<=1.5*Math.PI&&1.5*Math.PI<=p,w=h/100,M={x:y?-1:Math.min(v.x*(v.x<0?1:w),m.x*(m.x<0?1:w)),y:k?-1:Math.min(v.y*(v.y<0?1:w),m.y*(m.y<0?1:w))},S={x:b?1:Math.max(v.x*(v.x>0?1:w),m.x*(m.x>0?1:w)),y:x?1:Math.max(v.y*(v.y>0?1:w),m.y*(m.y>0?1:w))},C={width:.5*(S.x-M.x),height:.5*(S.y-M.y)};u=Math.min(l/C.width,s/C.height),d={x:-.5*(S.x+M.x),y:-.5*(S.y+M.y)}}n.borderWidth=e.getMaxBorderWidth(c.data),n.outerRadius=Math.max((u-n.borderWidth)/2,0),n.innerRadius=Math.max(h?n.outerRadius/100*h:0,0),n.radiusLength=(n.outerRadius-n.innerRadius)/n.getVisibleDatasetCount(),n.offsetX=d.x*n.outerRadius,n.offsetY=d.y*n.outerRadius,c.total=e.calculateTotal(),e.outerRadius=n.outerRadius-n.radiusLength*e.getRingIndex(e.index),e.innerRadius=Math.max(e.outerRadius-n.radiusLength,0),o.each(c.data,function(n,i){e.updateElement(n,i,t)})},updateElement:function(t,e,n){var i=this,a=i.chart,r=a.chartArea,l=a.options,s=l.animation,u=(r.left+r.right)/2,d=(r.top+r.bottom)/2,c=l.rotation,h=l.rotation,f=i.getDataset(),g=n&&s.animateRotate?0:t.hidden?0:i.calculateCircumference(f.data[e])*(l.circumference/(2*Math.PI)),p=n&&s.animateScale?0:i.innerRadius,v=n&&s.animateScale?0:i.outerRadius,m=o.valueAtIndexOrDefault;o.extend(t,{_datasetIndex:i.index,_index:e,_model:{x:u+a.offsetX,y:d+a.offsetY,startAngle:c,endAngle:h,circumference:g,outerRadius:v,innerRadius:p,label:m(f.label,e,a.data.labels[e])}});var b=t._model;this.removeHoverStyle(t),n&&s.animateRotate||(b.startAngle=0===e?l.rotation:i.getMeta().data[e-1]._model.endAngle,b.endAngle=b.startAngle+b.circumference),t.pivot()},removeHoverStyle:function(e){t.DatasetController.prototype.removeHoverStyle.call(this,e,this.chart.options.elements.arc)},calculateTotal:function(){var t,e=this.getDataset(),n=this.getMeta(),i=0;return o.each(n.data,function(n,a){t=e.data[a],isNaN(t)||n.hidden||(i+=Math.abs(t))}),i},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?2*Math.PI*(t/e):0},getMaxBorderWidth:function(t){for(var e,n,i=0,a=this.index,o=t.length,r=0;r<o;r++)e=t[r]._model?t[r]._model.borderWidth:0,i=(n=t[r]._chart?t[r]._chart.config.data.datasets[a].hoverBorderWidth:0)>(i=e>i?e:i)?n:i;return i}})}},{25:25,40:40,45:45}],18:[function(t,e,n){"use strict";var i=t(25),a=t(40),o=t(45);i._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}}),e.exports=function(t){function e(t,e){return o.valueOrDefault(t.showLine,e.showLines)}t.controllers.line=t.DatasetController.extend({datasetElementType:a.Line,dataElementType:a.Point,update:function(t){var n,i,a,r=this,l=r.getMeta(),s=l.dataset,u=l.data||[],d=r.chart.options,c=d.elements.line,h=r.getScaleForId(l.yAxisID),f=r.getDataset(),g=e(f,d);for(g&&(a=s.custom||{},void 0!==f.tension&&void 0===f.lineTension&&(f.lineTension=f.tension),s._scale=h,s._datasetIndex=r.index,s._children=u,s._model={spanGaps:f.spanGaps?f.spanGaps:d.spanGaps,tension:a.tension?a.tension:o.valueOrDefault(f.lineTension,c.tension),backgroundColor:a.backgroundColor?a.backgroundColor:f.backgroundColor||c.backgroundColor,borderWidth:a.borderWidth?a.borderWidth:f.borderWidth||c.borderWidth,borderColor:a.borderColor?a.borderColor:f.borderColor||c.borderColor,borderCapStyle:a.borderCapStyle?a.borderCapStyle:f.borderCapStyle||c.borderCapStyle,borderDash:a.borderDash?a.borderDash:f.borderDash||c.borderDash,borderDashOffset:a.borderDashOffset?a.borderDashOffset:f.borderDashOffset||c.borderDashOffset,borderJoinStyle:a.borderJoinStyle?a.borderJoinStyle:f.borderJoinStyle||c.borderJoinStyle,fill:a.fill?a.fill:void 0!==f.fill?f.fill:c.fill,steppedLine:a.steppedLine?a.steppedLine:o.valueOrDefault(f.steppedLine,c.stepped),cubicInterpolationMode:a.cubicInterpolationMode?a.cubicInterpolationMode:o.valueOrDefault(f.cubicInterpolationMode,c.cubicInterpolationMode)},s.pivot()),n=0,i=u.length;n<i;++n)r.updateElement(u[n],n,t);for(g&&0!==s._model.tension&&r.updateBezierControlPoints(),n=0,i=u.length;n<i;++n)u[n].pivot()},getPointBackgroundColor:function(t,e){var n=this.chart.options.elements.point.backgroundColor,i=this.getDataset(),a=t.custom||{};return a.backgroundColor?n=a.backgroundColor:i.pointBackgroundColor?n=o.valueAtIndexOrDefault(i.pointBackgroundColor,e,n):i.backgroundColor&&(n=i.backgroundColor),n},getPointBorderColor:function(t,e){var n=this.chart.options.elements.point.borderColor,i=this.getDataset(),a=t.custom||{};return a.borderColor?n=a.borderColor:i.pointBorderColor?n=o.valueAtIndexOrDefault(i.pointBorderColor,e,n):i.borderColor&&(n=i.borderColor),n},getPointBorderWidth:function(t,e){var n=this.chart.options.elements.point.borderWidth,i=this.getDataset(),a=t.custom||{};return isNaN(a.borderWidth)?!isNaN(i.pointBorderWidth)||o.isArray(i.pointBorderWidth)?n=o.valueAtIndexOrDefault(i.pointBorderWidth,e,n):isNaN(i.borderWidth)||(n=i.borderWidth):n=a.borderWidth,n},updateElement:function(t,e,n){var i,a,r=this,l=r.getMeta(),s=t.custom||{},u=r.getDataset(),d=r.index,c=u.data[e],h=r.getScaleForId(l.yAxisID),f=r.getScaleForId(l.xAxisID),g=r.chart.options.elements.point;void 0!==u.radius&&void 0===u.pointRadius&&(u.pointRadius=u.radius),void 0!==u.hitRadius&&void 0===u.pointHitRadius&&(u.pointHitRadius=u.hitRadius),i=f.getPixelForValue("object"==typeof c?c:NaN,e,d),a=n?h.getBasePixel():r.calculatePointY(c,e,d),t._xScale=f,t._yScale=h,t._datasetIndex=d,t._index=e,t._model={x:i,y:a,skip:s.skip||isNaN(i)||isNaN(a),radius:s.radius||o.valueAtIndexOrDefault(u.pointRadius,e,g.radius),pointStyle:s.pointStyle||o.valueAtIndexOrDefault(u.pointStyle,e,g.pointStyle),backgroundColor:r.getPointBackgroundColor(t,e),borderColor:r.getPointBorderColor(t,e),borderWidth:r.getPointBorderWidth(t,e),tension:l.dataset._model?l.dataset._model.tension:0,steppedLine:!!l.dataset._model&&l.dataset._model.steppedLine,hitRadius:s.hitRadius||o.valueAtIndexOrDefault(u.pointHitRadius,e,g.hitRadius)}},calculatePointY:function(t,e,n){var i,a,o,r=this,l=r.chart,s=r.getMeta(),u=r.getScaleForId(s.yAxisID),d=0,c=0;if(u.options.stacked){for(i=0;i<n;i++)if(a=l.data.datasets[i],"line"===(o=l.getDatasetMeta(i)).type&&o.yAxisID===u.id&&l.isDatasetVisible(i)){var h=Number(u.getRightValue(a.data[e]));h<0?c+=h||0:d+=h||0}var f=Number(u.getRightValue(t));return f<0?u.getPixelForValue(c+f):u.getPixelForValue(d+f)}return u.getPixelForValue(t)},updateBezierControlPoints:function(){function t(t,e,n){return Math.max(Math.min(t,n),e)}var e,n,i,a,r=this,l=r.getMeta(),s=r.chart.chartArea,u=l.data||[];if(l.dataset._model.spanGaps&&(u=u.filter(function(t){return!t._model.skip})),"monotone"===l.dataset._model.cubicInterpolationMode)o.splineCurveMonotone(u);else for(e=0,n=u.length;e<n;++e)i=u[e]._model,a=o.splineCurve(o.previousItem(u,e)._model,i,o.nextItem(u,e)._model,l.dataset._model.tension),i.controlPointPreviousX=a.previous.x,i.controlPointPreviousY=a.previous.y,i.controlPointNextX=a.next.x,i.controlPointNextY=a.next.y;if(r.chart.options.elements.line.capBezierPoints)for(e=0,n=u.length;e<n;++e)(i=u[e]._model).controlPointPreviousX=t(i.controlPointPreviousX,s.left,s.right),i.controlPointPreviousY=t(i.controlPointPreviousY,s.top,s.bottom),i.controlPointNextX=t(i.controlPointNextX,s.left,s.right),i.controlPointNextY=t(i.controlPointNextY,s.top,s.bottom)},draw:function(){var t=this,n=t.chart,i=t.getMeta(),a=i.data||[],r=n.chartArea,l=a.length,s=0;for(o.canvas.clipArea(n.ctx,r),e(t.getDataset(),n.options)&&i.dataset.draw(),o.canvas.unclipArea(n.ctx);s<l;++s)a[s].draw(r)},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,i=t.custom||{},a=t._model;a.radius=i.hoverRadius||o.valueAtIndexOrDefault(e.pointHoverRadius,n,this.chart.options.elements.point.hoverRadius),a.backgroundColor=i.hoverBackgroundColor||o.valueAtIndexOrDefault(e.pointHoverBackgroundColor,n,o.getHoverColor(a.backgroundColor)),a.borderColor=i.hoverBorderColor||o.valueAtIndexOrDefault(e.pointHoverBorderColor,n,o.getHoverColor(a.borderColor)),a.borderWidth=i.hoverBorderWidth||o.valueAtIndexOrDefault(e.pointHoverBorderWidth,n,a.borderWidth)},removeHoverStyle:function(t){var e=this,n=e.chart.data.datasets[t._datasetIndex],i=t._index,a=t.custom||{},r=t._model;void 0!==n.radius&&void 0===n.pointRadius&&(n.pointRadius=n.radius),r.radius=a.radius||o.valueAtIndexOrDefault(n.pointRadius,i,e.chart.options.elements.point.radius),r.backgroundColor=e.getPointBackgroundColor(t,i),r.borderColor=e.getPointBorderColor(t,i),r.borderWidth=e.getPointBorderWidth(t,i)}})}},{25:25,40:40,45:45}],19:[function(t,e,n){"use strict";var i=t(25),a=t(40),o=t(45);i._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var n=t.data,i=n.datasets,a=n.labels;if(i.length)for(var o=0;o<i[0].data.length;++o)e.push('<li><span style="background-color:'+i[0].backgroundColor[o]+'"></span>'),a[o]&&e.push(a[o]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map(function(n,i){var a=t.getDatasetMeta(0),r=e.datasets[0],l=a.data[i].custom||{},s=o.valueAtIndexOrDefault,u=t.options.elements.arc;return{text:n,fillStyle:l.backgroundColor?l.backgroundColor:s(r.backgroundColor,i,u.backgroundColor),strokeStyle:l.borderColor?l.borderColor:s(r.borderColor,i,u.borderColor),lineWidth:l.borderWidth?l.borderWidth:s(r.borderWidth,i,u.borderWidth),hidden:isNaN(r.data[i])||a.data[i].hidden,index:i}}):[]}},onClick:function(t,e){var n,i,a,o=e.index,r=this.chart;for(n=0,i=(r.data.datasets||[]).length;n<i;++n)(a=r.getDatasetMeta(n)).data[o].hidden=!a.data[o].hidden;r.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}}),e.exports=function(t){t.controllers.polarArea=t.DatasetController.extend({dataElementType:a.Arc,linkScales:o.noop,update:function(t){var e=this,n=e.chart,i=n.chartArea,a=e.getMeta(),r=n.options,l=r.elements.arc,s=Math.min(i.right-i.left,i.bottom-i.top);n.outerRadius=Math.max((s-l.borderWidth/2)/2,0),n.innerRadius=Math.max(r.cutoutPercentage?n.outerRadius/100*r.cutoutPercentage:1,0),n.radiusLength=(n.outerRadius-n.innerRadius)/n.getVisibleDatasetCount(),e.outerRadius=n.outerRadius-n.radiusLength*e.index,e.innerRadius=e.outerRadius-n.radiusLength,a.count=e.countVisibleElements(),o.each(a.data,function(n,i){e.updateElement(n,i,t)})},updateElement:function(t,e,n){for(var i=this,a=i.chart,r=i.getDataset(),l=a.options,s=l.animation,u=a.scale,d=a.data.labels,c=i.calculateCircumference(r.data[e]),h=u.xCenter,f=u.yCenter,g=0,p=i.getMeta(),v=0;v<e;++v)isNaN(r.data[v])||p.data[v].hidden||++g;var m=l.startAngle,b=t.hidden?0:u.getDistanceFromCenterForValue(r.data[e]),x=m+c*g,y=x+(t.hidden?0:c),k=s.animateScale?0:u.getDistanceFromCenterForValue(r.data[e]);o.extend(t,{_datasetIndex:i.index,_index:e,_scale:u,_model:{x:h,y:f,innerRadius:0,outerRadius:n?k:b,startAngle:n&&s.animateRotate?m:x,endAngle:n&&s.animateRotate?m:y,label:o.valueAtIndexOrDefault(d,e,d[e])}}),i.removeHoverStyle(t),t.pivot()},removeHoverStyle:function(e){t.DatasetController.prototype.removeHoverStyle.call(this,e,this.chart.options.elements.arc)},countVisibleElements:function(){var t=this.getDataset(),e=this.getMeta(),n=0;return o.each(e.data,function(e,i){isNaN(t.data[i])||e.hidden||n++}),n},calculateCircumference:function(t){var e=this.getMeta().count;return e>0&&!isNaN(t)?2*Math.PI/e:0}})}},{25:25,40:40,45:45}],20:[function(t,e,n){"use strict";var i=t(25),a=t(40),o=t(45);i._set("radar",{scale:{type:"radialLinear"},elements:{line:{tension:0}}}),e.exports=function(t){t.controllers.radar=t.DatasetController.extend({datasetElementType:a.Line,dataElementType:a.Point,linkScales:o.noop,update:function(t){var e=this,n=e.getMeta(),i=n.dataset,a=n.data,r=i.custom||{},l=e.getDataset(),s=e.chart.options.elements.line,u=e.chart.scale;void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),o.extend(n.dataset,{_datasetIndex:e.index,_scale:u,_children:a,_loop:!0,_model:{tension:r.tension?r.tension:o.valueOrDefault(l.lineTension,s.tension),backgroundColor:r.backgroundColor?r.backgroundColor:l.backgroundColor||s.backgroundColor,borderWidth:r.borderWidth?r.borderWidth:l.borderWidth||s.borderWidth,borderColor:r.borderColor?r.borderColor:l.borderColor||s.borderColor,fill:r.fill?r.fill:void 0!==l.fill?l.fill:s.fill,borderCapStyle:r.borderCapStyle?r.borderCapStyle:l.borderCapStyle||s.borderCapStyle,borderDash:r.borderDash?r.borderDash:l.borderDash||s.borderDash,borderDashOffset:r.borderDashOffset?r.borderDashOffset:l.borderDashOffset||s.borderDashOffset,borderJoinStyle:r.borderJoinStyle?r.borderJoinStyle:l.borderJoinStyle||s.borderJoinStyle}}),n.dataset.pivot(),o.each(a,function(n,i){e.updateElement(n,i,t)},e),e.updateBezierControlPoints()},updateElement:function(t,e,n){var i=this,a=t.custom||{},r=i.getDataset(),l=i.chart.scale,s=i.chart.options.elements.point,u=l.getPointPositionForValue(e,r.data[e]);void 0!==r.radius&&void 0===r.pointRadius&&(r.pointRadius=r.radius),void 0!==r.hitRadius&&void 0===r.pointHitRadius&&(r.pointHitRadius=r.hitRadius),o.extend(t,{_datasetIndex:i.index,_index:e,_scale:l,_model:{x:n?l.xCenter:u.x,y:n?l.yCenter:u.y,tension:a.tension?a.tension:o.valueOrDefault(r.lineTension,i.chart.options.elements.line.tension),radius:a.radius?a.radius:o.valueAtIndexOrDefault(r.pointRadius,e,s.radius),backgroundColor:a.backgroundColor?a.backgroundColor:o.valueAtIndexOrDefault(r.pointBackgroundColor,e,s.backgroundColor),borderColor:a.borderColor?a.borderColor:o.valueAtIndexOrDefault(r.pointBorderColor,e,s.borderColor),borderWidth:a.borderWidth?a.borderWidth:o.valueAtIndexOrDefault(r.pointBorderWidth,e,s.borderWidth),pointStyle:a.pointStyle?a.pointStyle:o.valueAtIndexOrDefault(r.pointStyle,e,s.pointStyle),hitRadius:a.hitRadius?a.hitRadius:o.valueAtIndexOrDefault(r.pointHitRadius,e,s.hitRadius)}}),t._model.skip=a.skip?a.skip:isNaN(t._model.x)||isNaN(t._model.y)},updateBezierControlPoints:function(){var t=this.chart.chartArea,e=this.getMeta();o.each(e.data,function(n,i){var a=n._model,r=o.splineCurve(o.previousItem(e.data,i,!0)._model,a,o.nextItem(e.data,i,!0)._model,a.tension);a.controlPointPreviousX=Math.max(Math.min(r.previous.x,t.right),t.left),a.controlPointPreviousY=Math.max(Math.min(r.previous.y,t.bottom),t.top),a.controlPointNextX=Math.max(Math.min(r.next.x,t.right),t.left),a.controlPointNextY=Math.max(Math.min(r.next.y,t.bottom),t.top),n.pivot()})},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t.custom||{},i=t._index,a=t._model;a.radius=n.hoverRadius?n.hoverRadius:o.valueAtIndexOrDefault(e.pointHoverRadius,i,this.chart.options.elements.point.hoverRadius),a.backgroundColor=n.hoverBackgroundColor?n.hoverBackgroundColor:o.valueAtIndexOrDefault(e.pointHoverBackgroundColor,i,o.getHoverColor(a.backgroundColor)),a.borderColor=n.hoverBorderColor?n.hoverBorderColor:o.valueAtIndexOrDefault(e.pointHoverBorderColor,i,o.getHoverColor(a.borderColor)),a.borderWidth=n.hoverBorderWidth?n.hoverBorderWidth:o.valueAtIndexOrDefault(e.pointHoverBorderWidth,i,a.borderWidth)},removeHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t.custom||{},i=t._index,a=t._model,r=this.chart.options.elements.point;a.radius=n.radius?n.radius:o.valueAtIndexOrDefault(e.pointRadius,i,r.radius),a.backgroundColor=n.backgroundColor?n.backgroundColor:o.valueAtIndexOrDefault(e.pointBackgroundColor,i,r.backgroundColor),a.borderColor=n.borderColor?n.borderColor:o.valueAtIndexOrDefault(e.pointBorderColor,i,r.borderColor),a.borderWidth=n.borderWidth?n.borderWidth:o.valueAtIndexOrDefault(e.pointBorderWidth,i,r.borderWidth)}})}},{25:25,40:40,45:45}],21:[function(t,e,n){"use strict";t(25)._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},showLines:!1,tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}}),e.exports=function(t){t.controllers.scatter=t.controllers.line}},{25:25}],22:[function(t,e,n){"use strict";var i=t(25),a=t(26),o=t(45);i._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:o.noop,onComplete:o.noop}}),e.exports=function(t){t.Animation=a.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),t.animationService={frameDuration:17,animations:[],dropFrames:0,request:null,addAnimation:function(t,e,n,i){var a,o,r=this.animations;for(e.chart=t,i||(t.animating=!0),a=0,o=r.length;a<o;++a)if(r[a].chart===t)return void(r[a]=e);r.push(e),1===r.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var e=o.findIndex(this.animations,function(e){return e.chart===t});-1!==e&&(this.animations.splice(e,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=o.requestAnimFrame.call(window,function(){t.request=null,t.startDigest()}))},startDigest:function(){var t=this,e=Date.now(),n=0;t.dropFrames>1&&(n=Math.floor(t.dropFrames),t.dropFrames=t.dropFrames%1),t.advance(1+n);var i=Date.now();t.dropFrames+=(i-e)/t.frameDuration,t.animations.length>0&&t.requestAnimationFrame()},advance:function(t){for(var e,n,i=this.animations,a=0;a<i.length;)n=(e=i[a]).chart,e.currentStep=(e.currentStep||0)+t,e.currentStep=Math.min(e.currentStep,e.numSteps),o.callback(e.render,[n,e],n),o.callback(e.onAnimationProgress,[e],n),e.currentStep>=e.numSteps?(o.callback(e.onAnimationComplete,[e],n),n.animating=!1,i.splice(a,1)):++a}},Object.defineProperty(t.Animation.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(t.Animation.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}})}},{25:25,26:26,45:45}],23:[function(t,e,n){"use strict";var i=t(25),a=t(45),o=t(28),r=t(48);e.exports=function(t){function e(t){var e=(t=t||{}).data=t.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=a.configMerge(i.global,i[t.type],t.options||{}),t}function n(t){var e=t.options;e.scale?t.scale.options=e.scale:e.scales&&e.scales.xAxes.concat(e.scales.yAxes).forEach(function(e){t.scales[e.id].options=e}),t.tooltip._options=e.tooltips}function l(t){return"top"===t||"bottom"===t}var s=t.plugins;t.types={},t.instances={},t.controllers={},a.extend(t.prototype,{construct:function(n,i){var o=this;i=e(i);var l=r.acquireContext(n,i),s=l&&l.canvas,u=s&&s.height,d=s&&s.width;o.id=a.uid(),o.ctx=l,o.canvas=s,o.config=i,o.width=d,o.height=u,o.aspectRatio=u?d/u:null,o.options=i.options,o._bufferedRender=!1,o.chart=o,o.controller=o,t.instances[o.id]=o,Object.defineProperty(o,"data",{get:function(){return o.config.data},set:function(t){o.config.data=t}}),l&&s?(o.initialize(),o.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return s.notify(t,"beforeInit"),a.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.ensureScalesHaveIDs(),t.buildScales(),t.initToolTip(),s.notify(t,"afterInit"),t},clear:function(){return a.canvas.clear(this),this},stop:function(){return t.animationService.cancelAnimation(this),this},resize:function(t){var e=this,n=e.options,i=e.canvas,o=n.maintainAspectRatio&&e.aspectRatio||null,r=Math.max(0,Math.floor(a.getMaximumWidth(i))),l=Math.max(0,Math.floor(o?r/o:a.getMaximumHeight(i)));if((e.width!==r||e.height!==l)&&(i.width=e.width=r,i.height=e.height=l,i.style.width=r+"px",i.style.height=l+"px",a.retinaScale(e,n.devicePixelRatio),!t)){var u={width:r,height:l};s.notify(e,"resize",[u]),e.options.onResize&&e.options.onResize(e,u),e.stop(),e.update(e.options.responsiveAnimationDuration)}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;a.each(e.xAxes,function(t,e){t.id=t.id||"x-axis-"+e}),a.each(e.yAxes,function(t,e){t.id=t.id||"y-axis-"+e}),n&&(n.id=n.id||"scale")},buildScales:function(){var e=this,n=e.options,i=e.scales={},o=[];n.scales&&(o=o.concat((n.scales.xAxes||[]).map(function(t){return{options:t,dtype:"category",dposition:"bottom"}}),(n.scales.yAxes||[]).map(function(t){return{options:t,dtype:"linear",dposition:"left"}}))),n.scale&&o.push({options:n.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),a.each(o,function(n){var o=n.options,r=a.valueOrDefault(o.type,n.dtype),s=t.scaleService.getScaleConstructor(r);if(s){l(o.position)!==l(n.dposition)&&(o.position=n.dposition);var u=new s({id:o.id,options:o,ctx:e.ctx,chart:e});i[u.id]=u,u.mergeTicksOptions(),n.isDefault&&(e.scale=u)}}),t.scaleService.addScalesToLayout(this)},buildOrUpdateControllers:function(){var e=this,n=[],i=[];return a.each(e.data.datasets,function(a,o){var r=e.getDatasetMeta(o),l=a.type||e.config.type;if(r.type&&r.type!==l&&(e.destroyDatasetMeta(o),r=e.getDatasetMeta(o)),r.type=l,n.push(r.type),r.controller)r.controller.updateIndex(o);else{var s=t.controllers[r.type];if(void 0===s)throw new Error('"'+r.type+'" is not a chart type.');r.controller=new s(e,o),i.push(r.controller)}},e),i},resetElements:function(){var t=this;a.each(t.data.datasets,function(e,n){t.getDatasetMeta(n).controller.reset()},t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t){var e=this;if(t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]}),n(e),!1!==s.notify(e,"beforeUpdate")){e.tooltip._data=e.data;var i=e.buildOrUpdateControllers();a.each(e.data.datasets,function(t,n){e.getDatasetMeta(n).controller.buildOrUpdateElements()},e),e.updateLayout(),a.each(i,function(t){t.reset()}),e.updateDatasets(),e.tooltip.initialize(),e.lastActive=[],s.notify(e,"afterUpdate"),e._bufferedRender?e._bufferedRequest={duration:t.duration,easing:t.easing,lazy:t.lazy}:e.render(t)}},updateLayout:function(){var e=this;!1!==s.notify(e,"beforeLayout")&&(t.layoutService.update(this,this.width,this.height),s.notify(e,"afterScaleUpdate"),s.notify(e,"afterLayout"))},updateDatasets:function(){var t=this;if(!1!==s.notify(t,"beforeDatasetsUpdate")){for(var e=0,n=t.data.datasets.length;e<n;++e)t.updateDataset(e);s.notify(t,"afterDatasetsUpdate")}},updateDataset:function(t){var e=this,n=e.getDatasetMeta(t),i={meta:n,index:t};!1!==s.notify(e,"beforeDatasetUpdate",[i])&&(n.controller.update(),s.notify(e,"afterDatasetUpdate",[i]))},render:function(e){var n=this;e&&"object"==typeof e||(e={duration:e,lazy:arguments[1]});var i=e.duration,o=e.lazy;if(!1!==s.notify(n,"beforeRender")){var r=n.options.animation,l=function(t){s.notify(n,"afterRender"),a.callback(r&&r.onComplete,[t],n)};if(r&&(void 0!==i&&0!==i||void 0===i&&0!==r.duration)){var u=new t.Animation({numSteps:(i||r.duration)/16.66,easing:e.easing||r.easing,render:function(t,e){var n=a.easing.effects[e.easing],i=e.currentStep,o=i/e.numSteps;t.draw(n(o),o,i)},onAnimationProgress:r.onProgress,onAnimationComplete:l});t.animationService.addAnimation(n,u,i,o)}else n.draw(),l(new t.Animation({numSteps:0,chart:n}));return n}},draw:function(t){var e=this;e.clear(),a.isNullOrUndef(t)&&(t=1),e.transition(t),!1!==s.notify(e,"beforeDraw",[t])&&(a.each(e.boxes,function(t){t.draw(e.chartArea)},e),e.scale&&e.scale.draw(),e.drawDatasets(t),e._drawTooltip(t),s.notify(e,"afterDraw",[t]))},transition:function(t){for(var e=this,n=0,i=(e.data.datasets||[]).length;n<i;++n)e.isDatasetVisible(n)&&e.getDatasetMeta(n).controller.transition(t);e.tooltip.transition(t)},drawDatasets:function(t){var e=this;if(!1!==s.notify(e,"beforeDatasetsDraw",[t])){for(var n=(e.data.datasets||[]).length-1;n>=0;--n)e.isDatasetVisible(n)&&e.drawDataset(n,t);s.notify(e,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var n=this,i=n.getDatasetMeta(t),a={meta:i,index:t,easingValue:e};!1!==s.notify(n,"beforeDatasetDraw",[a])&&(i.controller.draw(e),s.notify(n,"afterDatasetDraw",[a]))},_drawTooltip:function(t){var e=this,n=e.tooltip,i={tooltip:n,easingValue:t};!1!==s.notify(e,"beforeTooltipDraw",[i])&&(n.draw(),s.notify(e,"afterTooltipDraw",[i]))},getElementAtEvent:function(t){return o.modes.single(this,t)},getElementsAtEvent:function(t){return o.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return o.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,n){var i=o.modes[e];return"function"==typeof i?i(this,t,n):[]},getDatasetAtEvent:function(t){return o.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this,n=e.data.datasets[t];n._meta||(n._meta={});var i=n._meta[e.id];return i||(i=n._meta[e.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null}),i},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e<n;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(t){var e=this.id,n=this.data.datasets[t],i=n._meta&&n._meta[e];i&&(i.controller.destroy(),delete n._meta[e])},destroy:function(){var e,n,i=this,o=i.canvas;for(i.stop(),e=0,n=i.data.datasets.length;e<n;++e)i.destroyDatasetMeta(e);o&&(i.unbindEvents(),a.canvas.clear(i),r.releaseContext(i.ctx),i.canvas=null,i.ctx=null),s.notify(i,"destroy"),delete t.instances[i.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var e=this;e.tooltip=new t.Tooltip({_chart:e,_chartInstance:e,_data:e.data,_options:e.options.tooltips},e)},bindEvents:function(){var t=this,e=t._listeners={},n=function(){t.eventHandler.apply(t,arguments)};a.each(t.options.events,function(i){r.addEventListener(t,i,n),e[i]=n}),t.options.responsive&&(n=function(){t.resize()},r.addEventListener(t,"resize",n),e.resize=n)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,a.each(e,function(e,n){r.removeEventListener(t,n,e)}))},updateHoverStyle:function(t,e,n){var i,a,o,r=n?"setHoverStyle":"removeHoverStyle";for(a=0,o=t.length;a<o;++a)(i=t[a])&&this.getDatasetMeta(i._datasetIndex).controller[r](i)},eventHandler:function(t){var e=this,n=e.tooltip;if(!1!==s.notify(e,"beforeEvent",[t])){e._bufferedRender=!0,e._bufferedRequest=null;var i=e.handleEvent(t);i|=n&&n.handleEvent(t),s.notify(e,"afterEvent",[t]);var a=e._bufferedRequest;return a?e.render(a):i&&!e.animating&&(e.stop(),e.render(e.options.hover.animationDuration,!0)),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e=this,n=e.options||{},i=n.hover,o=!1;return e.lastActive=e.lastActive||[],"mouseout"===t.type?e.active=[]:e.active=e.getElementsAtEventForMode(t,i.mode,i),a.callback(n.onHover||n.hover.onHover,[t.native,e.active],e),"mouseup"!==t.type&&"click"!==t.type||n.onClick&&n.onClick.call(e,t.native,e.active),e.lastActive.length&&e.updateHoverStyle(e.lastActive,i.mode,!1),e.active.length&&i.mode&&e.updateHoverStyle(e.active,i.mode,!0),o=!a.arrayEquals(e.active,e.lastActive),e.lastActive=e.active,o}}),t.Controller=t}},{25:25,28:28,45:45,48:48}],24:[function(t,e,n){"use strict";var i=t(45);e.exports=function(t){function e(t,e){t._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),a.forEach(function(e){var n="onData"+e.charAt(0).toUpperCase()+e.slice(1),a=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),o=a.apply(this,e);return i.each(t._chartjs.listeners,function(t){"function"==typeof t[n]&&t[n].apply(t,e)}),o}})}))}function n(t,e){var n=t._chartjs;if(n){var i=n.listeners,o=i.indexOf(e);-1!==o&&i.splice(o,1),i.length>0||(a.forEach(function(e){delete t[e]}),delete t._chartjs)}}var a=["push","pop","shift","splice","unshift"];t.DatasetController=function(t,e){this.initialize(t,e)},i.extend(t.DatasetController.prototype,{datasetElementType:null,dataElementType:null,initialize:function(t,e){var n=this;n.chart=t,n.index=e,n.linkScales(),n.addElements()},updateIndex:function(t){this.index=t},linkScales:function(){var t=this,e=t.getMeta(),n=t.getDataset();null===e.xAxisID&&(e.xAxisID=n.xAxisID||t.chart.options.scales.xAxes[0].id),null===e.yAxisID&&(e.yAxisID=n.yAxisID||t.chart.options.scales.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},reset:function(){this.update(!0)},destroy:function(){this._data&&n(this._data,this)},createMetaDataset:function(){var t=this,e=t.datasetElementType;return e&&new e({_chart:t.chart,_datasetIndex:t.index})},createMetaData:function(t){var e=this,n=e.dataElementType;return n&&new n({_chart:e.chart,_datasetIndex:e.index,_index:t})},addElements:function(){var t,e,n=this,i=n.getMeta(),a=n.getDataset().data||[],o=i.data;for(t=0,e=a.length;t<e;++t)o[t]=o[t]||n.createMetaData(t);i.dataset=i.dataset||n.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t=this,i=t.getDataset(),a=i.data||(i.data=[]);t._data!==a&&(t._data&&n(t._data,t),e(a,t),t._data=a),t.resyncElements()},update:i.noop,transition:function(t){for(var e=this.getMeta(),n=e.data||[],i=n.length,a=0;a<i;++a)n[a].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],n=e.length,i=0;for(t.dataset&&t.dataset.draw();i<n;++i)e[i].draw()},removeHoverStyle:function(t,e){var n=this.chart.data.datasets[t._datasetIndex],a=t._index,o=t.custom||{},r=i.valueAtIndexOrDefault,l=t._model;l.backgroundColor=o.backgroundColor?o.backgroundColor:r(n.backgroundColor,a,e.backgroundColor),l.borderColor=o.borderColor?o.borderColor:r(n.borderColor,a,e.borderColor),l.borderWidth=o.borderWidth?o.borderWidth:r(n.borderWidth,a,e.borderWidth)},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,a=t.custom||{},o=i.valueAtIndexOrDefault,r=i.getHoverColor,l=t._model;l.backgroundColor=a.hoverBackgroundColor?a.hoverBackgroundColor:o(e.hoverBackgroundColor,n,r(l.backgroundColor)),l.borderColor=a.hoverBorderColor?a.hoverBorderColor:o(e.hoverBorderColor,n,r(l.borderColor)),l.borderWidth=a.hoverBorderWidth?a.hoverBorderWidth:o(e.hoverBorderWidth,n,l.borderWidth)},resyncElements:function(){var t=this,e=t.getMeta(),n=t.getDataset().data,i=e.data.length,a=n.length;a<i?e.data.splice(a,i-a):a>i&&t.insertElements(i,a-i)},insertElements:function(t,e){for(var n=0;n<e;++n)this.addElementAndReset(t+n)},onDataPush:function(){this.insertElements(this.getDataset().data.length-1,arguments.length)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),t.DatasetController.extend=i.inherits}},{45:45}],25:[function(t,e,n){"use strict";var i=t(45);e.exports={_set:function(t,e){return i.merge(this[t]||(this[t]={}),e)}}},{45:45}],26:[function(t,e,n){"use strict";function i(t,e,n,i){var o,r,l,s,u,d,c,h,f,g=Object.keys(n);for(o=0,r=g.length;o<r;++o)if(l=g[o],d=n[l],e.hasOwnProperty(l)||(e[l]=d),(s=e[l])!==d&&"_"!==l[0]){if(t.hasOwnProperty(l)||(t[l]=s),u=t[l],(c=typeof d)===typeof u)if("string"===c){if((h=a(u)).valid&&(f=a(d)).valid){e[l]=f.mix(h,i).rgbString();continue}}else if("number"===c&&isFinite(u)&&isFinite(d)){e[l]=u+(d-u)*i;continue}e[l]=d}}var a=t(3),o=t(45),r=function(t){o.extend(this,t),this.initialize.apply(this,arguments)};o.extend(r.prototype,{initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=o.clone(t._model)),t._start={},t},transition:function(t){var e=this,n=e._model,a=e._start,o=e._view;return n&&1!==t?(o||(o=e._view={}),a||(a=e._start={}),i(a,o,n,t),e):(e._view=n,e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return o.isNumber(this._model.x)&&o.isNumber(this._model.y)}}),r.extend=o.inherits,e.exports=r},{3:3,45:45}],27:[function(t,e,n){"use strict";var i=t(3),a=t(25),o=t(45);e.exports=function(t){function e(t,e,n){var i;return"string"==typeof t?(i=parseInt(t,10),-1!==t.indexOf("%")&&(i=i/100*e.parentNode[n])):i=t,i}function n(t){return void 0!==t&&null!==t&&"none"!==t}function r(t,i,a){var o=document.defaultView,r=t.parentNode,l=o.getComputedStyle(t)[i],s=o.getComputedStyle(r)[i],u=n(l),d=n(s),c=Number.POSITIVE_INFINITY;return u||d?Math.min(u?e(l,t,a):c,d?e(s,r,a):c):"none"}o.configMerge=function(){return o.merge(o.clone(arguments[0]),[].slice.call(arguments,1),{merger:function(e,n,i,a){var r=n[e]||{},l=i[e];"scales"===e?n[e]=o.scaleMerge(r,l):"scale"===e?n[e]=o.merge(r,[t.scaleService.getScaleDefaults(l.type),l]):o._merger(e,n,i,a)}})},o.scaleMerge=function(){return o.merge(o.clone(arguments[0]),[].slice.call(arguments,1),{merger:function(e,n,i,a){if("xAxes"===e||"yAxes"===e){var r,l,s,u=i[e].length;for(n[e]||(n[e]=[]),r=0;r<u;++r)s=i[e][r],l=o.valueOrDefault(s.type,"xAxes"===e?"category":"linear"),r>=n[e].length&&n[e].push({}),!n[e][r].type||s.type&&s.type!==n[e][r].type?o.merge(n[e][r],[t.scaleService.getScaleDefaults(l),s]):o.merge(n[e][r],s)}else o._merger(e,n,i,a)}})},o.where=function(t,e){if(o.isArray(t)&&Array.prototype.filter)return t.filter(e);var n=[];return o.each(t,function(t){e(t)&&n.push(t)}),n},o.findIndex=Array.prototype.findIndex?function(t,e,n){return t.findIndex(e,n)}:function(t,e,n){n=void 0===n?t:n;for(var i=0,a=t.length;i<a;++i)if(e.call(n,t[i],i,t))return i;return-1},o.findNextWhere=function(t,e,n){o.isNullOrUndef(n)&&(n=-1);for(var i=n+1;i<t.length;i++){var a=t[i];if(e(a))return a}},o.findPreviousWhere=function(t,e,n){o.isNullOrUndef(n)&&(n=t.length);for(var i=n-1;i>=0;i--){var a=t[i];if(e(a))return a}},o.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},o.almostEquals=function(t,e,n){return Math.abs(t-e)<n},o.almostWhole=function(t,e){var n=Math.round(t);return n-e<t&&n+e>t},o.max=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.max(t,e)},Number.NEGATIVE_INFINITY)},o.min=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.min(t,e)},Number.POSITIVE_INFINITY)},o.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0==(t=+t)||isNaN(t)?t:t>0?1:-1},o.log10=Math.log10?function(t){return Math.log10(t)}:function(t){return Math.log(t)/Math.LN10},o.toRadians=function(t){return t*(Math.PI/180)},o.toDegrees=function(t){return t*(180/Math.PI)},o.getAngleFromPoint=function(t,e){var n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),o=Math.atan2(i,n);return o<-.5*Math.PI&&(o+=2*Math.PI),{angle:o,distance:a}},o.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},o.aliasPixel=function(t){return t%2==0?0:.5},o.splineCurve=function(t,e,n,i){var a=t.skip?e:t,o=e,r=n.skip?e:n,l=Math.sqrt(Math.pow(o.x-a.x,2)+Math.pow(o.y-a.y,2)),s=Math.sqrt(Math.pow(r.x-o.x,2)+Math.pow(r.y-o.y,2)),u=l/(l+s),d=s/(l+s),c=i*(u=isNaN(u)?0:u),h=i*(d=isNaN(d)?0:d);return{previous:{x:o.x-c*(r.x-a.x),y:o.y-c*(r.y-a.y)},next:{x:o.x+h*(r.x-a.x),y:o.y+h*(r.y-a.y)}}},o.EPSILON=Number.EPSILON||1e-14,o.splineCurveMonotone=function(t){var e,n,i,a,r=(t||[]).map(function(t){return{model:t._model,deltaK:0,mK:0}}),l=r.length;for(e=0;e<l;++e)if(!(i=r[e]).model.skip){if(n=e>0?r[e-1]:null,(a=e<l-1?r[e+1]:null)&&!a.model.skip){var s=a.model.x-i.model.x;i.deltaK=0!==s?(a.model.y-i.model.y)/s:0}!n||n.model.skip?i.mK=i.deltaK:!a||a.model.skip?i.mK=n.deltaK:this.sign(n.deltaK)!==this.sign(i.deltaK)?i.mK=0:i.mK=(n.deltaK+i.deltaK)/2}var u,d,c,h;for(e=0;e<l-1;++e)i=r[e],a=r[e+1],i.model.skip||a.model.skip||(o.almostEquals(i.deltaK,0,this.EPSILON)?i.mK=a.mK=0:(u=i.mK/i.deltaK,d=a.mK/i.deltaK,(h=Math.pow(u,2)+Math.pow(d,2))<=9||(c=3/Math.sqrt(h),i.mK=u*c*i.deltaK,a.mK=d*c*i.deltaK)));var f;for(e=0;e<l;++e)(i=r[e]).model.skip||(n=e>0?r[e-1]:null,a=e<l-1?r[e+1]:null,n&&!n.model.skip&&(f=(i.model.x-n.model.x)/3,i.model.controlPointPreviousX=i.model.x-f,i.model.controlPointPreviousY=i.model.y-f*i.mK),a&&!a.model.skip&&(f=(a.model.x-i.model.x)/3,i.model.controlPointNextX=i.model.x+f,i.model.controlPointNextY=i.model.y+f*i.mK))},o.nextItem=function(t,e,n){return n?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},o.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},o.niceNum=function(t,e){var n=Math.floor(o.log10(t)),i=t/Math.pow(10,n);return(e?i<1.5?1:i<3?2:i<7?5:10:i<=1?1:i<=2?2:i<=5?5:10)*Math.pow(10,n)},o.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},o.getRelativePosition=function(t,e){var n,i,a=t.originalEvent||t,r=t.currentTarget||t.srcElement,l=r.getBoundingClientRect(),s=a.touches;s&&s.length>0?(n=s[0].clientX,i=s[0].clientY):(n=a.clientX,i=a.clientY);var u=parseFloat(o.getStyle(r,"padding-left")),d=parseFloat(o.getStyle(r,"padding-top")),c=parseFloat(o.getStyle(r,"padding-right")),h=parseFloat(o.getStyle(r,"padding-bottom")),f=l.right-l.left-u-c,g=l.bottom-l.top-d-h;return n=Math.round((n-l.left-u)/f*r.width/e.currentDevicePixelRatio),i=Math.round((i-l.top-d)/g*r.height/e.currentDevicePixelRatio),{x:n,y:i}},o.getConstraintWidth=function(t){return r(t,"max-width","clientWidth")},o.getConstraintHeight=function(t){return r(t,"max-height","clientHeight")},o.getMaximumWidth=function(t){var e=t.parentNode;if(!e)return t.clientWidth;var n=parseInt(o.getStyle(e,"padding-left"),10),i=parseInt(o.getStyle(e,"padding-right"),10),a=e.clientWidth-n-i,r=o.getConstraintWidth(t);return isNaN(r)?a:Math.min(a,r)},o.getMaximumHeight=function(t){var e=t.parentNode;if(!e)return t.clientHeight;var n=parseInt(o.getStyle(e,"padding-top"),10),i=parseInt(o.getStyle(e,"padding-bottom"),10),a=e.clientHeight-n-i,r=o.getConstraintHeight(t);return isNaN(r)?a:Math.min(a,r)},o.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},o.retinaScale=function(t,e){var n=t.currentDevicePixelRatio=e||window.devicePixelRatio||1;if(1!==n){var i=t.canvas,a=t.height,o=t.width;i.height=a*n,i.width=o*n,t.ctx.scale(n,n),i.style.height=a+"px",i.style.width=o+"px"}},o.fontString=function(t,e,n){return e+" "+t+"px "+n},o.longestText=function(t,e,n,i){var a=(i=i||{}).data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==e&&(a=i.data={},r=i.garbageCollect=[],i.font=e),t.font=e;var l=0;o.each(n,function(e){void 0!==e&&null!==e&&!0!==o.isArray(e)?l=o.measureText(t,a,r,l,e):o.isArray(e)&&o.each(e,function(e){void 0===e||null===e||o.isArray(e)||(l=o.measureText(t,a,r,l,e))})});var s=r.length/2;if(s>n.length){for(var u=0;u<s;u++)delete a[r[u]];r.splice(0,s)}return l},o.measureText=function(t,e,n,i,a){var o=e[a];return o||(o=e[a]=t.measureText(a).width,n.push(a)),o>i&&(i=o),i},o.numberOfLabelLines=function(t){var e=1;return o.each(t,function(t){o.isArray(t)&&t.length>e&&(e=t.length)}),e},o.color=i?function(t){return t instanceof CanvasGradient&&(t=a.global.defaultColor),i(t)}:function(t){return console.error("Color.js not found!"),t},o.getHoverColor=function(t){return t instanceof CanvasPattern?t:o.color(t).saturate(.5).darken(.1).rgbString()}}},{25:25,3:3,45:45}],28:[function(t,e,n){"use strict";function i(t,e){return t.native?{x:t.x,y:t.y}:u.getRelativePosition(t,e)}function a(t,e){var n,i,a,o,r;for(i=0,o=t.data.datasets.length;i<o;++i)if(t.isDatasetVisible(i))for(a=0,r=(n=t.getDatasetMeta(i)).data.length;a<r;++a){var l=n.data[a];l._view.skip||e(l)}}function o(t,e){var n=[];return a(t,function(t){t.inRange(e.x,e.y)&&n.push(t)}),n}function r(t,e,n,i){var o=Number.POSITIVE_INFINITY,r=[];return a(t,function(t){if(!n||t.inRange(e.x,e.y)){var a=t.getCenterPoint(),l=i(e,a);l<o?(r=[t],o=l):l===o&&r.push(t)}}),r}function l(t){var e=-1!==t.indexOf("x"),n=-1!==t.indexOf("y");return function(t,i){var a=e?Math.abs(t.x-i.x):0,o=n?Math.abs(t.y-i.y):0;return Math.sqrt(Math.pow(a,2)+Math.pow(o,2))}}function s(t,e,n){var a=i(e,t);n.axis=n.axis||"x";var s=l(n.axis),u=n.intersect?o(t,a):r(t,a,!1,s),d=[];return u.length?(t.data.datasets.forEach(function(e,n){if(t.isDatasetVisible(n)){var i=t.getDatasetMeta(n).data[u[0]._index];i&&!i._view.skip&&d.push(i)}}),d):[]}var u=t(45);e.exports={modes:{single:function(t,e){var n=i(e,t),o=[];return a(t,function(t){if(t.inRange(n.x,n.y))return o.push(t),o}),o.slice(0,1)},label:s,index:s,dataset:function(t,e,n){var a=i(e,t);n.axis=n.axis||"xy";var s=l(n.axis),u=n.intersect?o(t,a):r(t,a,!1,s);return u.length>0&&(u=t.getDatasetMeta(u[0]._datasetIndex).data),u},"x-axis":function(t,e){return s(t,e,{intersect:!1})},point:function(t,e){return o(t,i(e,t))},nearest:function(t,e,n){var a=i(e,t);n.axis=n.axis||"xy";var o=l(n.axis),s=r(t,a,n.intersect,o);return s.length>1&&s.sort(function(t,e){var n=t.getArea()-e.getArea();return 0===n&&(n=t._datasetIndex-e._datasetIndex),n}),s.slice(0,1)},x:function(t,e,n){var o=i(e,t),r=[],l=!1;return a(t,function(t){t.inXRange(o.x)&&r.push(t),t.inRange(o.x,o.y)&&(l=!0)}),n.intersect&&!l&&(r=[]),r},y:function(t,e,n){var o=i(e,t),r=[],l=!1;return a(t,function(t){t.inYRange(o.y)&&r.push(t),t.inRange(o.x,o.y)&&(l=!0)}),n.intersect&&!l&&(r=[]),r}}}},{45:45}],29:[function(t,e,n){"use strict";t(25)._set("global",{responsive:!0,responsiveAnimationDuration:0,maintainAspectRatio:!0,events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",showLines:!0,elements:{},layout:{padding:{top:0,right:0,bottom:0,left:0}}}),e.exports=function(){var t=function(t,e){return this.construct(t,e),this};return t.Chart=t,t}},{25:25}],30:[function(t,e,n){"use strict";var i=t(45);e.exports=function(t){function e(t,e){return i.where(t,function(t){return t.position===e})}function n(t,e){t.forEach(function(t,e){return t._tmpIndex_=e,t}),t.sort(function(t,n){var i=e?n:t,a=e?t:n;return i.weight===a.weight?i._tmpIndex_-a._tmpIndex_:i.weight-a.weight}),t.forEach(function(t){delete t._tmpIndex_})}t.layoutService={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,t.boxes.push(e)},removeBox:function(t,e){var n=t.boxes?t.boxes.indexOf(e):-1;-1!==n&&t.boxes.splice(n,1)},configure:function(t,e,n){for(var i,a=["fullWidth","position","weight"],o=a.length,r=0;r<o;++r)i=a[r],n.hasOwnProperty(i)&&(e[i]=n[i])},update:function(t,a,o){function r(t){var e=i.findNextWhere(_,function(e){return e.box===t});if(e)if(t.isHorizontal()){var n={left:Math.max(T,D),right:Math.max(F,I),top:0,bottom:0};t.update(t.fullWidth?x:S,y/2,n)}else t.update(e.minSize.width,C)}function l(t){t.isHorizontal()?(t.left=t.fullWidth?d:T,t.right=t.fullWidth?a-c:T+S,t.top=V,t.bottom=V+t.height,V=t.bottom):(t.left=N,t.right=N+t.width,t.top=O,t.bottom=O+C,N=t.right)}if(t){var s=t.options.layout||{},u=i.options.toPadding(s.padding),d=u.left,c=u.right,h=u.top,f=u.bottom,g=e(t.boxes,"left"),p=e(t.boxes,"right"),v=e(t.boxes,"top"),m=e(t.boxes,"bottom"),b=e(t.boxes,"chartArea");n(g,!0),n(p,!1),n(v,!0),n(m,!1);var x=a-d-c,y=o-h-f,k=y/2,w=(a-x/2)/(g.length+p.length),M=(o-k)/(v.length+m.length),S=x,C=y,_=[];i.each(g.concat(p,v,m),function(t){var e,n=t.isHorizontal();n?(e=t.update(t.fullWidth?x:S,M),C-=e.height):(e=t.update(w,k),S-=e.width),_.push({horizontal:n,minSize:e,box:t})});var D=0,I=0,P=0,A=0;i.each(v.concat(m),function(t){if(t.getPadding){var e=t.getPadding();D=Math.max(D,e.left),I=Math.max(I,e.right)}}),i.each(g.concat(p),function(t){if(t.getPadding){var e=t.getPadding();P=Math.max(P,e.top),A=Math.max(A,e.bottom)}});var T=d,F=c,O=h,R=f;i.each(g.concat(p),r),i.each(g,function(t){T+=t.width}),i.each(p,function(t){F+=t.width}),i.each(v.concat(m),r),i.each(v,function(t){O+=t.height}),i.each(m,function(t){R+=t.height}),i.each(g.concat(p),function(t){var e=i.findNextWhere(_,function(e){return e.box===t}),n={left:0,right:0,top:O,bottom:R};e&&t.update(e.minSize.width,C,n)}),T=d,F=c,O=h,R=f,i.each(g,function(t){T+=t.width}),i.each(p,function(t){F+=t.width}),i.each(v,function(t){O+=t.height}),i.each(m,function(t){R+=t.height});var L=Math.max(D-T,0);T+=L,F+=Math.max(I-F,0);var z=Math.max(P-O,0);O+=z,R+=Math.max(A-R,0);var B=o-O-R,W=a-T-F;W===S&&B===C||(i.each(g,function(t){t.height=B}),i.each(p,function(t){t.height=B}),i.each(v,function(t){t.fullWidth||(t.width=W)}),i.each(m,function(t){t.fullWidth||(t.width=W)}),C=B,S=W);var N=d+L,V=h+z;i.each(g.concat(v),l),N+=S,V+=C,i.each(p,l),i.each(m,l),t.chartArea={left:T,top:O,right:T+S,bottom:O+C},i.each(b,function(e){e.left=t.chartArea.left,e.top=t.chartArea.top,e.right=t.chartArea.right,e.bottom=t.chartArea.bottom,e.update(S,C)})}}}}},{45:45}],31:[function(t,e,n){"use strict";var i=t(25),a=t(26),o=t(45);i._set("global",{plugins:{}}),e.exports=function(t){t.plugins={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach(function(t){-1===e.indexOf(t)&&e.push(t)}),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach(function(t){var n=e.indexOf(t);-1!==n&&e.splice(n,1)}),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,n){var i,a,o,r,l,s=this.descriptors(t),u=s.length;for(i=0;i<u;++i)if(a=s[i],o=a.plugin,"function"==typeof(l=o[e])&&((r=[t].concat(n||[])).push(a.options),!1===l.apply(o,r)))return!1;return!0},descriptors:function(t){var e=t._plugins||(t._plugins={});if(e.id===this._cacheId)return e.descriptors;var n=[],a=[],r=t&&t.config||{},l=r.options&&r.options.plugins||{};return this._plugins.concat(r.plugins||[]).forEach(function(t){if(-1===n.indexOf(t)){var e=t.id,r=l[e];!1!==r&&(!0===r&&(r=o.clone(i.global.plugins[e])),n.push(t),a.push({plugin:t,options:r||{}}))}}),e.descriptors=a,e.id=this._cacheId,a}},t.pluginService=t.plugins,t.PluginBase=a.extend({})}},{25:25,26:26,45:45}],32:[function(t,e,n){"use strict";function i(t){var e,n,i=[];for(e=0,n=t.length;e<n;++e)i.push(t[e].label);return i}function a(t,e,n){var i=t.getPixelForTick(e);return n&&(i-=0===e?(t.getPixelForTick(1)-i)/2:(i-t.getPixelForTick(e-1))/2),i}var o=t(25),r=t(26),l=t(45),s=t(34);o._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",lineHeight:1.2,padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:s.formatters.values,minor:{},major:{}}}),e.exports=function(t){function e(t,e,n){return l.isArray(e)?l.longestText(t,n,e):t.measureText(e).width}function n(t){var e=l.valueOrDefault,n=o.global,i=e(t.fontSize,n.defaultFontSize),a=e(t.fontStyle,n.defaultFontStyle),r=e(t.fontFamily,n.defaultFontFamily);return{size:i,style:a,family:r,font:l.fontString(i,a,r)}}function s(t){return l.options.toLineHeight(l.valueOrDefault(t.lineHeight,1.2),l.valueOrDefault(t.fontSize,o.global.defaultFontSize))}t.Scale=r.extend({getPadding:function(){var t=this;return{left:t.paddingLeft||0,top:t.paddingTop||0,right:t.paddingRight||0,bottom:t.paddingBottom||0}},getTicks:function(){return this._ticks},mergeTicksOptions:function(){var t=this.options.ticks;!1===t.minor&&(t.minor={display:!1}),!1===t.major&&(t.major={display:!1});for(var e in t)"major"!==e&&"minor"!==e&&(void 0===t.minor[e]&&(t.minor[e]=t[e]),void 0===t.major[e]&&(t.major[e]=t[e]))},beforeUpdate:function(){l.callback(this.options.beforeUpdate,[this])},update:function(t,e,n){var i,a,o,r,s,u,d=this;for(d.beforeUpdate(),d.maxWidth=t,d.maxHeight=e,d.margins=l.extend({left:0,right:0,top:0,bottom:0},n),d.longestTextCache=d.longestTextCache||{},d.beforeSetDimensions(),d.setDimensions(),d.afterSetDimensions(),d.beforeDataLimits(),d.determineDataLimits(),d.afterDataLimits(),d.beforeBuildTicks(),s=d.buildTicks()||[],d.afterBuildTicks(),d.beforeTickToLabelConversion(),o=d.convertTicksToLabels(s)||d.ticks,d.afterTickToLabelConversion(),d.ticks=o,i=0,a=o.length;i<a;++i)r=o[i],(u=s[i])?u.label=r:s.push(u={label:r,major:!1});return d._ticks=s,d.beforeCalculateTickRotation(),d.calculateTickRotation(),d.afterCalculateTickRotation(),d.beforeFit(),d.fit(),d.afterFit(),d.afterUpdate(),d.minSize},afterUpdate:function(){l.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){l.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){l.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){l.callback(this.options.beforeDataLimits,[this])},determineDataLimits:l.noop,afterDataLimits:function(){l.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){l.callback(this.options.beforeBuildTicks,[this])},buildTicks:l.noop,afterBuildTicks:function(){l.callback(this.options.afterBuildTicks,[this])},beforeTickToLabelConversion:function(){l.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this,e=t.options.ticks;t.ticks=t.ticks.map(e.userCallback||e.callback,this)},afterTickToLabelConversion:function(){l.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){l.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t=this,e=t.ctx,a=t.options.ticks,o=i(t._ticks),r=n(a);e.font=r.font;var s=a.minRotation||0;if(o.length&&t.options.display&&t.isHorizontal())for(var u,d=l.longestText(e,r.font,o,t.longestTextCache),c=d,h=t.getPixelForTick(1)-t.getPixelForTick(0)-6;c>h&&s<a.maxRotation;){var f=l.toRadians(s);if(u=Math.cos(f),Math.sin(f)*d>t.maxHeight){s--;break}s++,c=u*d}t.labelRotation=s},afterCalculateTickRotation:function(){l.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){l.callback(this.options.beforeFit,[this])},fit:function(){var t=this,a=t.minSize={width:0,height:0},o=i(t._ticks),r=t.options,u=r.ticks,d=r.scaleLabel,c=r.gridLines,h=r.display,f=t.isHorizontal(),g=n(u),p=r.gridLines.tickMarkLength;if(a.width=f?t.isFullWidth()?t.maxWidth-t.margins.left-t.margins.right:t.maxWidth:h&&c.drawTicks?p:0,a.height=f?h&&c.drawTicks?p:0:t.maxHeight,d.display&&h){var v=s(d)+l.options.toPadding(d.padding).height;f?a.height+=v:a.width+=v}if(u.display&&h){var m=l.longestText(t.ctx,g.font,o,t.longestTextCache),b=l.numberOfLabelLines(o),x=.5*g.size,y=t.options.ticks.padding;if(f){t.longestLabelWidth=m;var k=l.toRadians(t.labelRotation),w=Math.cos(k),M=Math.sin(k)*m+g.size*b+x*(b-1)+x;a.height=Math.min(t.maxHeight,a.height+M+y),t.ctx.font=g.font;var S=e(t.ctx,o[0],g.font),C=e(t.ctx,o[o.length-1],g.font);0!==t.labelRotation?(t.paddingLeft="bottom"===r.position?w*S+3:w*x+3,t.paddingRight="bottom"===r.position?w*x+3:w*C+3):(t.paddingLeft=S/2+3,t.paddingRight=C/2+3)}else u.mirror?m=0:m+=y+x,a.width=Math.min(t.maxWidth,a.width+m),t.paddingTop=g.size/2,t.paddingBottom=g.size/2}t.handleMargins(),t.width=a.width,t.height=a.height},handleMargins:function(){var t=this;t.margins&&(t.paddingLeft=Math.max(t.paddingLeft-t.margins.left,0),t.paddingTop=Math.max(t.paddingTop-t.margins.top,0),t.paddingRight=Math.max(t.paddingRight-t.margins.right,0),t.paddingBottom=Math.max(t.paddingBottom-t.margins.bottom,0))},afterFit:function(){l.callback(this.options.afterFit,[this])},isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(l.isNullOrUndef(t))return NaN;if("number"==typeof t&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},getLabelForIndex:l.noop,getPixelForValue:l.noop,getValueForPixel:l.noop,getPixelForTick:function(t){var e=this,n=e.options.offset;if(e.isHorizontal()){var i=(e.width-(e.paddingLeft+e.paddingRight))/Math.max(e._ticks.length-(n?0:1),1),a=i*t+e.paddingLeft;n&&(a+=i/2);var o=e.left+Math.round(a);return o+=e.isFullWidth()?e.margins.left:0}var r=e.height-(e.paddingTop+e.paddingBottom);return e.top+t*(r/(e._ticks.length-1))},getPixelForDecimal:function(t){var e=this;if(e.isHorizontal()){var n=(e.width-(e.paddingLeft+e.paddingRight))*t+e.paddingLeft,i=e.left+Math.round(n);return i+=e.isFullWidth()?e.margins.left:0}return e.top+t*e.height},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this,e=t.min,n=t.max;return t.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0},_autoSkip:function(t){var e,n,i,a,o=this,r=o.isHorizontal(),s=o.options.ticks.minor,u=t.length,d=l.toRadians(o.labelRotation),c=Math.cos(d),h=o.longestLabelWidth*c,f=[];for(s.maxTicksLimit&&(a=s.maxTicksLimit),r&&(e=!1,(h+s.autoSkipPadding)*u>o.width-(o.paddingLeft+o.paddingRight)&&(e=1+Math.floor((h+s.autoSkipPadding)*u/(o.width-(o.paddingLeft+o.paddingRight)))),a&&u>a&&(e=Math.max(e,Math.floor(u/a)))),n=0;n<u;n++)i=t[n],(e>1&&n%e>0||n%e==0&&n+e>=u)&&n!==u-1&&delete i.label,f.push(i);return f},draw:function(t){var e=this,i=e.options;if(i.display){var r=e.ctx,u=o.global,d=i.ticks.minor,c=i.ticks.major||d,h=i.gridLines,f=i.scaleLabel,g=0!==e.labelRotation,p=e.isHorizontal(),v=d.autoSkip?e._autoSkip(e.getTicks()):e.getTicks(),m=l.valueOrDefault(d.fontColor,u.defaultFontColor),b=n(d),x=l.valueOrDefault(c.fontColor,u.defaultFontColor),y=n(c),k=h.drawTicks?h.tickMarkLength:0,w=l.valueOrDefault(f.fontColor,u.defaultFontColor),M=n(f),S=l.options.toPadding(f.padding),C=l.toRadians(e.labelRotation),_=[],D="right"===i.position?e.left:e.right-k,I="right"===i.position?e.left+k:e.right,P="bottom"===i.position?e.top:e.bottom-k,A="bottom"===i.position?e.top+k:e.bottom;if(l.each(v,function(n,o){if(!l.isNullOrUndef(n.label)){var r,s,c,f,m=n.label;o===e.zeroLineIndex&&i.offset===h.offsetGridLines?(r=h.zeroLineWidth,s=h.zeroLineColor,c=h.zeroLineBorderDash,f=h.zeroLineBorderDashOffset):(r=l.valueAtIndexOrDefault(h.lineWidth,o),s=l.valueAtIndexOrDefault(h.color,o),c=l.valueOrDefault(h.borderDash,u.borderDash),f=l.valueOrDefault(h.borderDashOffset,u.borderDashOffset));var b,x,y,w,M,S,T,F,O,R,L="middle",z="middle",B=d.padding;if(p){var W=k+B;"bottom"===i.position?(z=g?"middle":"top",L=g?"right":"center",R=e.top+W):(z=g?"middle":"bottom",L=g?"left":"center",R=e.bottom-W);var N=a(e,o,h.offsetGridLines&&v.length>1);N<e.left&&(s="rgba(0,0,0,0)"),N+=l.aliasPixel(r),O=e.getPixelForTick(o)+d.labelOffset,b=y=M=T=N,x=P,w=A,S=t.top,F=t.bottom}else{var V,E="left"===i.position;d.mirror?(L=E?"left":"right",V=B):(L=E?"right":"left",V=k+B),O=E?e.right-V:e.left+V;var H=a(e,o,h.offsetGridLines&&v.length>1);H<e.top&&(s="rgba(0,0,0,0)"),H+=l.aliasPixel(r),R=e.getPixelForTick(o)+d.labelOffset,b=D,y=I,M=t.left,T=t.right,x=w=S=F=H}_.push({tx1:b,ty1:x,tx2:y,ty2:w,x1:M,y1:S,x2:T,y2:F,labelX:O,labelY:R,glWidth:r,glColor:s,glBorderDash:c,glBorderDashOffset:f,rotation:-1*C,label:m,major:n.major,textBaseline:z,textAlign:L})}}),l.each(_,function(t){if(h.display&&(r.save(),r.lineWidth=t.glWidth,r.strokeStyle=t.glColor,r.setLineDash&&(r.setLineDash(t.glBorderDash),r.lineDashOffset=t.glBorderDashOffset),r.beginPath(),h.drawTicks&&(r.moveTo(t.tx1,t.ty1),r.lineTo(t.tx2,t.ty2)),h.drawOnChartArea&&(r.moveTo(t.x1,t.y1),r.lineTo(t.x2,t.y2)),r.stroke(),r.restore()),d.display){r.save(),r.translate(t.labelX,t.labelY),r.rotate(t.rotation),r.font=t.major?y.font:b.font,r.fillStyle=t.major?x:m,r.textBaseline=t.textBaseline,r.textAlign=t.textAlign;var e=t.label;if(l.isArray(e))for(var n=0,i=0;n<e.length;++n)r.fillText(""+e[n],0,i),i+=1.5*b.size;else r.fillText(e,0,0);r.restore()}}),f.display){var T,F,O=0,R=s(f)/2;if(p)T=e.left+(e.right-e.left)/2,F="bottom"===i.position?e.bottom-R-S.bottom:e.top+R+S.top;else{var L="left"===i.position;T=L?e.left+R+S.top:e.right-R-S.top,F=e.top+(e.bottom-e.top)/2,O=L?-.5*Math.PI:.5*Math.PI}r.save(),r.translate(T,F),r.rotate(O),r.textAlign="center",r.textBaseline="middle",r.fillStyle=w,r.font=M.font,r.fillText(f.labelString,0,0),r.restore()}if(h.drawBorder){r.lineWidth=l.valueAtIndexOrDefault(h.lineWidth,0),r.strokeStyle=l.valueAtIndexOrDefault(h.color,0);var z=e.left,B=e.right,W=e.top,N=e.bottom,V=l.aliasPixel(r.lineWidth);p?(W=N="top"===i.position?e.bottom:e.top,W+=V,N+=V):(z=B="left"===i.position?e.right:e.left,z+=V,B+=V),r.beginPath(),r.moveTo(z,W),r.lineTo(B,N),r.stroke()}}}})}},{25:25,26:26,34:34,45:45}],33:[function(t,e,n){"use strict";var i=t(25),a=t(45);e.exports=function(t){t.scaleService={constructors:{},defaults:{},registerScaleType:function(t,e,n){this.constructors[t]=e,this.defaults[t]=a.clone(n)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(t){return this.defaults.hasOwnProperty(t)?a.merge({},[i.scale,this.defaults[t]]):{}},updateScaleDefaults:function(t,e){var n=this;n.defaults.hasOwnProperty(t)&&(n.defaults[t]=a.extend(n.defaults[t],e))},addScalesToLayout:function(e){a.each(e.scales,function(n){n.fullWidth=n.options.fullWidth,n.position=n.options.position,n.weight=n.options.weight,t.layoutService.addBox(e,n)})}}}},{25:25,45:45}],34:[function(t,e,n){"use strict";var i=t(45);e.exports={generators:{linear:function(t,e){var n,a=[];if(t.stepSize&&t.stepSize>0)n=t.stepSize;else{var o=i.niceNum(e.max-e.min,!1);n=i.niceNum(o/(t.maxTicks-1),!0)}var r=Math.floor(e.min/n)*n,l=Math.ceil(e.max/n)*n;t.min&&t.max&&t.stepSize&&i.almostWhole((t.max-t.min)/t.stepSize,n/1e3)&&(r=t.min,l=t.max);var s=(l-r)/n;s=i.almostEquals(s,Math.round(s),n/1e3)?Math.round(s):Math.ceil(s),a.push(void 0!==t.min?t.min:r);for(var u=1;u<s;++u)a.push(r+u*n);return a.push(void 0!==t.max?t.max:l),a},logarithmic:function(t,e){var n,a,o=[],r=i.valueOrDefault,l=r(t.min,Math.pow(10,Math.floor(i.log10(e.min)))),s=Math.floor(i.log10(e.max)),u=Math.ceil(e.max/Math.pow(10,s));0===l?(n=Math.floor(i.log10(e.minNotZero)),a=Math.floor(e.minNotZero/Math.pow(10,n)),o.push(l),l=a*Math.pow(10,n)):(n=Math.floor(i.log10(l)),a=Math.floor(l/Math.pow(10,n)));do{o.push(l),10===++a&&(a=1,++n),l=a*Math.pow(10,n)}while(n<s||n===s&&a<u);var d=r(t.max,l);return o.push(d),o}},formatters:{values:function(t){return i.isArray(t)?t:""+t},linear:function(t,e,n){var a=n.length>3?n[2]-n[1]:n[1]-n[0];Math.abs(a)>1&&t!==Math.floor(t)&&(a=t-Math.floor(t));var o=i.log10(Math.abs(a)),r="";if(0!==t){var l=-1*Math.floor(o);l=Math.max(Math.min(l,20),0),r=t.toFixed(l)}else r="0";return r},logarithmic:function(t,e,n){var a=t/Math.pow(10,Math.floor(i.log10(t)));return 0===t?"0":1===a||2===a||5===a||0===e||e===n.length-1?t.toExponential():""}}}},{45:45}],35:[function(t,e,n){"use strict";var i=t(25),a=t(26),o=t(45);i._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:o.noop,title:function(t,e){var n="",i=e.labels,a=i?i.length:0;if(t.length>0){var o=t[0];o.xLabel?n=o.xLabel:a>0&&o.index<a&&(n=i[o.index])}return n},afterTitle:o.noop,beforeBody:o.noop,beforeLabel:o.noop,label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n&&(n+=": "),n+=t.yLabel},labelColor:function(t,e){var n=e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return{borderColor:n.borderColor,backgroundColor:n.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:o.noop,afterBody:o.noop,beforeFooter:o.noop,footer:o.noop,afterFooter:o.noop}}}),e.exports=function(t){function e(t,e){var n=o.color(t);return n.alpha(e*n.alpha()).rgbaString()}function n(t,e){return e&&(o.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function r(t){var e=t._xScale,n=t._yScale||t._scale,i=t._index,a=t._datasetIndex;return{xLabel:e?e.getLabelForIndex(i,a):"",yLabel:n?n.getLabelForIndex(i,a):"",index:i,datasetIndex:a,x:t._model.x,y:t._model.y}}function l(t){var e=i.global,n=o.valueOrDefault;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,bodyFontColor:t.bodyFontColor,_bodyFontFamily:n(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:n(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:n(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:n(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:n(t.titleFontStyle,e.defaultFontStyle),titleFontSize:n(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:n(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:n(t.footerFontStyle,e.defaultFontStyle),footerFontSize:n(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function s(t,e){var n=t._chart.ctx,i=2*e.yPadding,a=0,r=e.body,l=r.reduce(function(t,e){return t+e.before.length+e.lines.length+e.after.length},0);l+=e.beforeBody.length+e.afterBody.length;var s=e.title.length,u=e.footer.length,d=e.titleFontSize,c=e.bodyFontSize,h=e.footerFontSize;i+=s*d,i+=s?(s-1)*e.titleSpacing:0,i+=s?e.titleMarginBottom:0,i+=l*c,i+=l?(l-1)*e.bodySpacing:0,i+=u?e.footerMarginTop:0,i+=u*h,i+=u?(u-1)*e.footerSpacing:0;var f=0,g=function(t){a=Math.max(a,n.measureText(t).width+f)};return n.font=o.fontString(d,e._titleFontStyle,e._titleFontFamily),o.each(e.title,g),n.font=o.fontString(c,e._bodyFontStyle,e._bodyFontFamily),o.each(e.beforeBody.concat(e.afterBody),g),f=e.displayColors?c+2:0,o.each(r,function(t){o.each(t.before,g),o.each(t.lines,g),o.each(t.after,g)}),f=0,n.font=o.fontString(h,e._footerFontStyle,e._footerFontFamily),o.each(e.footer,g),a+=2*e.xPadding,{width:a,height:i}}function u(t,e){var n=t._model,i=t._chart,a=t._chart.chartArea,o="center",r="center";n.y<e.height?r="top":n.y>i.height-e.height&&(r="bottom");var l,s,u,d,c,h=(a.left+a.right)/2,f=(a.top+a.bottom)/2;"center"===r?(l=function(t){return t<=h},s=function(t){return t>h}):(l=function(t){return t<=e.width/2},s=function(t){return t>=i.width-e.width/2}),u=function(t){return t+e.width>i.width},d=function(t){return t-e.width<0},c=function(t){return t<=f?"top":"bottom"},l(n.x)?(o="left",u(n.x)&&(o="center",r=c(n.y))):s(n.x)&&(o="right",d(n.x)&&(o="center",r=c(n.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:o,yAlign:g.yAlign?g.yAlign:r}}function d(t,e,n){var i=t.x,a=t.y,o=t.caretSize,r=t.caretPadding,l=t.cornerRadius,s=n.xAlign,u=n.yAlign,d=o+r,c=l+r;return"right"===s?i-=e.width:"center"===s&&(i-=e.width/2),"top"===u?a+=d:a-="bottom"===u?e.height+d:e.height/2,"center"===u?"left"===s?i+=d:"right"===s&&(i-=d):"left"===s?i-=c:"right"===s&&(i+=c),{x:i,y:a}}t.Tooltip=a.extend({initialize:function(){this._model=l(this._options),this._lastActive=[]},getTitle:function(){var t=this,e=t._options.callbacks,i=e.beforeTitle.apply(t,arguments),a=e.title.apply(t,arguments),o=e.afterTitle.apply(t,arguments),r=[];return r=n(r,i),r=n(r,a),r=n(r,o)},getBeforeBody:function(){var t=this._options.callbacks.beforeBody.apply(this,arguments);return o.isArray(t)?t:void 0!==t?[t]:[]},getBody:function(t,e){var i=this,a=i._options.callbacks,r=[];return o.each(t,function(t){var o={before:[],lines:[],after:[]};n(o.before,a.beforeLabel.call(i,t,e)),n(o.lines,a.label.call(i,t,e)),n(o.after,a.afterLabel.call(i,t,e)),r.push(o)}),r},getAfterBody:function(){var t=this._options.callbacks.afterBody.apply(this,arguments);return o.isArray(t)?t:void 0!==t?[t]:[]},getFooter:function(){var t=this,e=t._options.callbacks,i=e.beforeFooter.apply(t,arguments),a=e.footer.apply(t,arguments),o=e.afterFooter.apply(t,arguments),r=[];return r=n(r,i),r=n(r,a),r=n(r,o)},update:function(e){var n,i,a=this,c=a._options,h=a._model,f=a._model=l(c),g=a._active,p=a._data,v={xAlign:h.xAlign,yAlign:h.yAlign},m={x:h.x,y:h.y},b={width:h.width,height:h.height},x={x:h.caretX,y:h.caretY};if(g.length){f.opacity=1;var y=[],k=[];x=t.Tooltip.positioners[c.position].call(a,g,a._eventPosition);var w=[];for(n=0,i=g.length;n<i;++n)w.push(r(g[n]));c.filter&&(w=w.filter(function(t){return c.filter(t,p)})),c.itemSort&&(w=w.sort(function(t,e){return c.itemSort(t,e,p)})),o.each(w,function(t){y.push(c.callbacks.labelColor.call(a,t,a._chart)),k.push(c.callbacks.labelTextColor.call(a,t,a._chart))}),f.title=a.getTitle(w,p),f.beforeBody=a.getBeforeBody(w,p),f.body=a.getBody(w,p),f.afterBody=a.getAfterBody(w,p),f.footer=a.getFooter(w,p),f.x=Math.round(x.x),f.y=Math.round(x.y),f.caretPadding=c.caretPadding,f.labelColors=y,f.labelTextColors=k,f.dataPoints=w,m=d(f,b=s(this,f),v=u(this,b))}else f.opacity=0;return f.xAlign=v.xAlign,f.yAlign=v.yAlign,f.x=m.x,f.y=m.y,f.width=b.width,f.height=b.height,f.caretX=x.x,f.caretY=x.y,a._model=f,e&&c.custom&&c.custom.call(a,f),a},drawCaret:function(t,e){var n=this._chart.ctx,i=this._view,a=this.getCaretPosition(t,e,i);n.lineTo(a.x1,a.y1),n.lineTo(a.x2,a.y2),n.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,n){var i,a,o,r,l,s,u=n.caretSize,d=n.cornerRadius,c=n.xAlign,h=n.yAlign,f=t.x,g=t.y,p=e.width,v=e.height;if("center"===h)l=g+v/2,"left"===c?(a=(i=f)-u,o=i,r=l+u,s=l-u):(a=(i=f+p)+u,o=i,r=l-u,s=l+u);else if("left"===c?(i=(a=f+d+u)-u,o=a+u):"right"===c?(i=(a=f+p-d-u)-u,o=a+u):(i=(a=f+p/2)-u,o=a+u),"top"===h)l=(r=g)-u,s=r;else{l=(r=g+v)+u,s=r;var m=o;o=i,i=m}return{x1:i,x2:a,x3:o,y1:r,y2:l,y3:s}},drawTitle:function(t,n,i,a){var r=n.title;if(r.length){i.textAlign=n._titleAlign,i.textBaseline="top";var l=n.titleFontSize,s=n.titleSpacing;i.fillStyle=e(n.titleFontColor,a),i.font=o.fontString(l,n._titleFontStyle,n._titleFontFamily);var u,d;for(u=0,d=r.length;u<d;++u)i.fillText(r[u],t.x,t.y),t.y+=l+s,u+1===r.length&&(t.y+=n.titleMarginBottom-s)}},drawBody:function(t,n,i,a){var r=n.bodyFontSize,l=n.bodySpacing,s=n.body;i.textAlign=n._bodyAlign,i.textBaseline="top",i.font=o.fontString(r,n._bodyFontStyle,n._bodyFontFamily);var u=0,d=function(e){i.fillText(e,t.x+u,t.y),t.y+=r+l};i.fillStyle=e(n.bodyFontColor,a),o.each(n.beforeBody,d);var c=n.displayColors;u=c?r+2:0,o.each(s,function(l,s){var u=e(n.labelTextColors[s],a);i.fillStyle=u,o.each(l.before,d),o.each(l.lines,function(o){c&&(i.fillStyle=e(n.legendColorBackground,a),i.fillRect(t.x,t.y,r,r),i.lineWidth=1,i.strokeStyle=e(n.labelColors[s].borderColor,a),i.strokeRect(t.x,t.y,r,r),i.fillStyle=e(n.labelColors[s].backgroundColor,a),i.fillRect(t.x+1,t.y+1,r-2,r-2),i.fillStyle=u),d(o)}),o.each(l.after,d)}),u=0,o.each(n.afterBody,d),t.y-=l},drawFooter:function(t,n,i,a){var r=n.footer;r.length&&(t.y+=n.footerMarginTop,i.textAlign=n._footerAlign,i.textBaseline="top",i.fillStyle=e(n.footerFontColor,a),i.font=o.fontString(n.footerFontSize,n._footerFontStyle,n._footerFontFamily),o.each(r,function(e){i.fillText(e,t.x,t.y),t.y+=n.footerFontSize+n.footerSpacing}))},drawBackground:function(t,n,i,a,o){i.fillStyle=e(n.backgroundColor,o),i.strokeStyle=e(n.borderColor,o),i.lineWidth=n.borderWidth;var r=n.xAlign,l=n.yAlign,s=t.x,u=t.y,d=a.width,c=a.height,h=n.cornerRadius;i.beginPath(),i.moveTo(s+h,u),"top"===l&&this.drawCaret(t,a),i.lineTo(s+d-h,u),i.quadraticCurveTo(s+d,u,s+d,u+h),"center"===l&&"right"===r&&this.drawCaret(t,a),i.lineTo(s+d,u+c-h),i.quadraticCurveTo(s+d,u+c,s+d-h,u+c),"bottom"===l&&this.drawCaret(t,a),i.lineTo(s+h,u+c),i.quadraticCurveTo(s,u+c,s,u+c-h),"center"===l&&"left"===r&&this.drawCaret(t,a),i.lineTo(s,u+h),i.quadraticCurveTo(s,u,s+h,u),i.closePath(),i.fill(),n.borderWidth>0&&i.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var n={width:e.width,height:e.height},i={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,o=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&o&&(this.drawBackground(i,e,t,n,a),i.x+=e.xPadding,i.y+=e.yPadding,this.drawTitle(i,e,t,a),this.drawBody(i,e,t,a),this.drawFooter(i,e,t,a))}},handleEvent:function(t){var e=this,n=e._options,i=!1;if(e._lastActive=e._lastActive||[],"mouseout"===t.type?e._active=[]:e._active=e._chart.getElementsAtEventForMode(t,n.mode,n),!(i=!o.arrayEquals(e._active,e._lastActive)))return!1;if(e._lastActive=e._active,n.enabled||n.custom){e._eventPosition={x:t.x,y:t.y};var a=e._model;e.update(!0),e.pivot(),i|=a.x!==e._model.x||a.y!==e._model.y}return i}}),t.Tooltip.positioners={average:function(t){if(!t.length)return!1;var e,n,i=0,a=0,o=0;for(e=0,n=t.length;e<n;++e){var r=t[e];if(r&&r.hasValue()){var l=r.tooltipPosition();i+=l.x,a+=l.y,++o}}return{x:Math.round(i/o),y:Math.round(a/o)}},nearest:function(t,e){var n,i,a,r=e.x,l=e.y,s=Number.POSITIVE_INFINITY;for(n=0,i=t.length;n<i;++n){var u=t[n];if(u&&u.hasValue()){var d=u.getCenterPoint(),c=o.distanceBetweenPoints(e,d);c<s&&(s=c,a=u)}}if(a){var h=a.tooltipPosition();r=h.x,l=h.y}return{x:r,y:l}}}}},{25:25,26:26,45:45}],36:[function(t,e,n){"use strict";var i=t(25),a=t(26),o=t(45);i._set("global",{elements:{arc:{backgroundColor:i.global.defaultColor,borderColor:"#fff",borderWidth:2}}}),e.exports=a.extend({inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,e){var n=this._view;if(n){for(var i=o.getAngleFromPoint(n,{x:t,y:e}),a=i.angle,r=i.distance,l=n.startAngle,s=n.endAngle;s<l;)s+=2*Math.PI;for(;a>s;)a-=2*Math.PI;for(;a<l;)a+=2*Math.PI;var u=a>=l&&a<=s,d=r>=n.innerRadius&&r<=n.outerRadius;return u&&d}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var t=this._chart.ctx,e=this._view,n=e.startAngle,i=e.endAngle;t.beginPath(),t.arc(e.x,e.y,e.outerRadius,n,i),t.arc(e.x,e.y,e.innerRadius,i,n,!0),t.closePath(),t.strokeStyle=e.borderColor,t.lineWidth=e.borderWidth,t.fillStyle=e.backgroundColor,t.fill(),t.lineJoin="bevel",e.borderWidth&&t.stroke()}})},{25:25,26:26,45:45}],37:[function(t,e,n){"use strict";var i=t(25),a=t(26),o=t(45),r=i.global;i._set("global",{elements:{line:{tension:.4,backgroundColor:r.defaultColor,borderWidth:3,borderColor:r.defaultColor,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}}),e.exports=a.extend({draw:function(){var t,e,n,i,a=this,l=a._view,s=a._chart.ctx,u=l.spanGaps,d=a._children.slice(),c=r.elements.line,h=-1;for(a._loop&&d.length&&d.push(d[0]),s.save(),s.lineCap=l.borderCapStyle||c.borderCapStyle,s.setLineDash&&s.setLineDash(l.borderDash||c.borderDash),s.lineDashOffset=l.borderDashOffset||c.borderDashOffset,s.lineJoin=l.borderJoinStyle||c.borderJoinStyle,s.lineWidth=l.borderWidth||c.borderWidth,s.strokeStyle=l.borderColor||r.defaultColor,s.beginPath(),h=-1,t=0;t<d.length;++t)e=d[t],n=o.previousItem(d,t),i=e._view,0===t?i.skip||(s.moveTo(i.x,i.y),h=t):(n=-1===h?n:d[h],i.skip||(h!==t-1&&!u||-1===h?s.moveTo(i.x,i.y):o.canvas.lineTo(s,n._view,e._view),h=t));s.stroke(),s.restore()}})},{25:25,26:26,45:45}],38:[function(t,e,n){"use strict";function i(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hitRadius,2)}var a=t(25),o=t(26),r=t(45),l=a.global.defaultColor;a._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:l,borderColor:l,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}}),e.exports=o.extend({inRange:function(t,e){var n=this._view;return!!n&&Math.pow(t-n.x,2)+Math.pow(e-n.y,2)<Math.pow(n.hitRadius+n.radius,2)},inLabelRange:i,inXRange:i,inYRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.y,2)<Math.pow(e.radius+e.hitRadius,2)},getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(t){var e=this._view,n=this._model,i=this._chart.ctx,o=e.pointStyle,s=e.radius,u=e.x,d=e.y,c=r.color,h=0;e.skip||(i.strokeStyle=e.borderColor||l,i.lineWidth=r.valueOrDefault(e.borderWidth,a.global.elements.point.borderWidth),i.fillStyle=e.backgroundColor||l,void 0!==t&&(n.x<t.left||1.01*t.right<n.x||n.y<t.top||1.01*t.bottom<n.y)&&(n.x<t.left?h=(u-n.x)/(t.left-n.x):1.01*t.right<n.x?h=(n.x-u)/(n.x-t.right):n.y<t.top?h=(d-n.y)/(t.top-n.y):1.01*t.bottom<n.y&&(h=(n.y-d)/(n.y-t.bottom)),h=Math.round(100*h)/100,i.strokeStyle=c(i.strokeStyle).alpha(h).rgbString(),i.fillStyle=c(i.fillStyle).alpha(h).rgbString()),r.canvas.drawPoint(i,o,s,u,d))}})},{25:25,26:26,45:45}],39:[function(t,e,n){"use strict";function i(t){return void 0!==t._view.width}function a(t){var e,n,a,o,r=t._view;if(i(t)){var l=r.width/2;e=r.x-l,n=r.x+l,a=Math.min(r.y,r.base),o=Math.max(r.y,r.base)}else{var s=r.height/2;e=Math.min(r.x,r.base),n=Math.max(r.x,r.base),a=r.y-s,o=r.y+s}return{left:e,top:a,right:n,bottom:o}}var o=t(25),r=t(26);o._set("global",{elements:{rectangle:{backgroundColor:o.global.defaultColor,borderColor:o.global.defaultColor,borderSkipped:"bottom",borderWidth:0}}}),e.exports=r.extend({draw:function(){function t(t){return m[(b+t)%4]}var e,n,i,a,o,r,l,s=this._chart.ctx,u=this._view,d=u.borderWidth;if(u.horizontal?(e=u.base,n=u.x,i=u.y-u.height/2,a=u.y+u.height/2,o=n>e?1:-1,r=1,l=u.borderSkipped||"left"):(e=u.x-u.width/2,n=u.x+u.width/2,i=u.y,o=1,r=(a=u.base)>i?1:-1,l=u.borderSkipped||"bottom"),d){var c=Math.min(Math.abs(e-n),Math.abs(i-a)),h=(d=d>c?c:d)/2,f=e+("left"!==l?h*o:0),g=n+("right"!==l?-h*o:0),p=i+("top"!==l?h*r:0),v=a+("bottom"!==l?-h*r:0);f!==g&&(i=p,a=v),p!==v&&(e=f,n=g)}s.beginPath(),s.fillStyle=u.backgroundColor,s.strokeStyle=u.borderColor,s.lineWidth=d;var m=[[e,a],[e,i],[n,i],[n,a]],b=["bottom","left","top","right"].indexOf(l,0);-1===b&&(b=0);var x=t(0);s.moveTo(x[0],x[1]);for(var y=1;y<4;y++)x=t(y),s.lineTo(x[0],x[1]);s.fill(),d&&s.stroke()},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){var n=!1;if(this._view){var i=a(this);n=t>=i.left&&t<=i.right&&e>=i.top&&e<=i.bottom}return n},inLabelRange:function(t,e){var n=this;if(!n._view)return!1;var o=a(n);return i(n)?t>=o.left&&t<=o.right:e>=o.top&&e<=o.bottom},inXRange:function(t){var e=a(this);return t>=e.left&&t<=e.right},inYRange:function(t){var e=a(this);return t>=e.top&&t<=e.bottom},getCenterPoint:function(){var t,e,n=this._view;return i(this)?(t=n.x,e=(n.y+n.base)/2):(t=(n.x+n.base)/2,e=n.y),{x:t,y:e}},getArea:function(){var t=this._view;return t.width*Math.abs(t.y-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}})},{25:25,26:26}],40:[function(t,e,n){"use strict";e.exports={},e.exports.Arc=t(36),e.exports.Line=t(37),e.exports.Point=t(38),e.exports.Rectangle=t(39)},{36:36,37:37,38:38,39:39}],41:[function(t,e,n){"use strict";var i=t(42),n=e.exports={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,n,i,a,o){if(o){var r=Math.min(o,i/2),l=Math.min(o,a/2);t.moveTo(e+r,n),t.lineTo(e+i-r,n),t.quadraticCurveTo(e+i,n,e+i,n+l),t.lineTo(e+i,n+a-l),t.quadraticCurveTo(e+i,n+a,e+i-r,n+a),t.lineTo(e+r,n+a),t.quadraticCurveTo(e,n+a,e,n+a-l),t.lineTo(e,n+l),t.quadraticCurveTo(e,n,e+r,n)}else t.rect(e,n,i,a)},drawPoint:function(t,e,n,i,a){var o,r,l,s,u,d;if(!e||"object"!=typeof e||"[object HTMLImageElement]"!==(o=e.toString())&&"[object HTMLCanvasElement]"!==o){if(!(isNaN(n)||n<=0)){switch(e){default:t.beginPath(),t.arc(i,a,n,0,2*Math.PI),t.closePath(),t.fill();break;case"triangle":t.beginPath(),u=(r=3*n/Math.sqrt(3))*Math.sqrt(3)/2,t.moveTo(i-r/2,a+u/3),t.lineTo(i+r/2,a+u/3),t.lineTo(i,a-2*u/3),t.closePath(),t.fill();break;case"rect":d=1/Math.SQRT2*n,t.beginPath(),t.fillRect(i-d,a-d,2*d,2*d),t.strokeRect(i-d,a-d,2*d,2*d);break;case"rectRounded":var c=n/Math.SQRT2,h=i-c,f=a-c,g=Math.SQRT2*n;t.beginPath(),this.roundedRect(t,h,f,g,g,n/2),t.closePath(),t.fill();break;case"rectRot":d=1/Math.SQRT2*n,t.beginPath(),t.moveTo(i-d,a),t.lineTo(i,a+d),t.lineTo(i+d,a),t.lineTo(i,a-d),t.closePath(),t.fill();break;case"cross":t.beginPath(),t.moveTo(i,a+n),t.lineTo(i,a-n),t.moveTo(i-n,a),t.lineTo(i+n,a),t.closePath();break;case"crossRot":t.beginPath(),l=Math.cos(Math.PI/4)*n,s=Math.sin(Math.PI/4)*n,t.moveTo(i-l,a-s),t.lineTo(i+l,a+s),t.moveTo(i-l,a+s),t.lineTo(i+l,a-s),t.closePath();break;case"star":t.beginPath(),t.moveTo(i,a+n),t.lineTo(i,a-n),t.moveTo(i-n,a),t.lineTo(i+n,a),l=Math.cos(Math.PI/4)*n,s=Math.sin(Math.PI/4)*n,t.moveTo(i-l,a-s),t.lineTo(i+l,a+s),t.moveTo(i-l,a+s),t.lineTo(i+l,a-s),t.closePath();break;case"line":t.beginPath(),t.moveTo(i-n,a),t.lineTo(i+n,a),t.closePath();break;case"dash":t.beginPath(),t.moveTo(i,a),t.lineTo(i+n,a),t.closePath()}t.stroke()}}else t.drawImage(e,i-e.width/2,a-e.height/2,e.width,e.height)},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,n,i){if(n.steppedLine)return"after"===n.steppedLine&&!i||"after"!==n.steppedLine&&i?t.lineTo(e.x,n.y):t.lineTo(n.x,e.y),void t.lineTo(n.x,n.y);n.tension?t.bezierCurveTo(i?e.controlPointPreviousX:e.controlPointNextX,i?e.controlPointPreviousY:e.controlPointNextY,i?n.controlPointNextX:n.controlPointPreviousX,i?n.controlPointNextY:n.controlPointPreviousY,n.x,n.y):t.lineTo(n.x,n.y)}};i.clear=n.clear,i.drawRoundedRectangle=function(t){t.beginPath(),n.roundedRect.apply(n,arguments),t.closePath()}},{42:42}],42:[function(t,e,n){"use strict";var i={noop:function(){},uid:function(){var t=0;return function(){return t++}}(),isNullOrUndef:function(t){return null===t||void 0===t},isArray:Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},isObject:function(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,n){return i.valueOrDefault(i.isArray(t)?t[e]:t,n)},callback:function(t,e,n){if(t&&"function"==typeof t.call)return t.apply(n,e)},each:function(t,e,n,a){var o,r,l;if(i.isArray(t))if(r=t.length,a)for(o=r-1;o>=0;o--)e.call(n,t[o],o);else for(o=0;o<r;o++)e.call(n,t[o],o);else if(i.isObject(t))for(r=(l=Object.keys(t)).length,o=0;o<r;o++)e.call(n,t[l[o]],l[o])},arrayEquals:function(t,e){var n,a,o,r;if(!t||!e||t.length!==e.length)return!1;for(n=0,a=t.length;n<a;++n)if(o=t[n],r=e[n],o instanceof Array&&r instanceof Array){if(!i.arrayEquals(o,r))return!1}else if(o!==r)return!1;return!0},clone:function(t){if(i.isArray(t))return t.map(i.clone);if(i.isObject(t)){for(var e={},n=Object.keys(t),a=n.length,o=0;o<a;++o)e[n[o]]=i.clone(t[n[o]]);return e}return t},_merger:function(t,e,n,a){var o=e[t],r=n[t];i.isObject(o)&&i.isObject(r)?i.merge(o,r,a):e[t]=i.clone(r)},_mergerIf:function(t,e,n){var a=e[t],o=n[t];i.isObject(a)&&i.isObject(o)?i.mergeIf(a,o):e.hasOwnProperty(t)||(e[t]=i.clone(o))},merge:function(t,e,n){var a,o,r,l,s,u=i.isArray(e)?e:[e],d=u.length;if(!i.isObject(t))return t;for(a=(n=n||{}).merger||i._merger,o=0;o<d;++o)if(e=u[o],i.isObject(e))for(s=0,l=(r=Object.keys(e)).length;s<l;++s)a(r[s],t,e,n);return t},mergeIf:function(t,e){return i.merge(t,e,{merger:i._mergerIf})},extend:function(t){for(var e=1,n=arguments.length;e<n;++e)i.each(arguments[e],function(e,n){t[n]=e});return t},inherits:function(t){var e=this,n=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},a=function(){this.constructor=n};return a.prototype=e.prototype,n.prototype=new a,n.extend=i.inherits,t&&i.extend(n.prototype,t),n.__super__=e.prototype,n}};e.exports=i,i.callCallback=i.callback,i.indexOf=function(t,e,n){return Array.prototype.indexOf.call(t,e,n)},i.getValueOrDefault=i.valueOrDefault,i.getValueAtIndexOrDefault=i.valueAtIndexOrDefault},{}],43:[function(t,e,n){"use strict";var i=t(42),a={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return(t-=1)*t*t+1},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-((t-=1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return(t-=1)*t*t*t*t+1},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return 1-Math.cos(t*(Math.PI/2))},easeOutSine:function(t){return Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return 0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return 1===t?1:1-Math.pow(2,-10*t)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},easeInCirc:function(t){return t>=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n))},easeOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:2==(t/=.5)?1:(n||(n=.45),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),t<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-a.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*a.easeInBounce(2*t):.5*a.easeOutBounce(2*t-1)+.5}};e.exports={effects:a},i.easingEffects=a},{42:42}],44:[function(t,e,n){"use strict";var i=t(42);e.exports={toLineHeight:function(t,e){var n=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!n||"normal"===n[1])return 1.2*e;switch(t=+n[2],n[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,n,a,o;return i.isObject(t)?(e=+t.top||0,n=+t.right||0,a=+t.bottom||0,o=+t.left||0):e=n=a=o=+t||0,{top:e,right:n,bottom:a,left:o,height:e+a,width:o+n}},resolve:function(t,e,n){var a,o,r;for(a=0,o=t.length;a<o;++a)if(void 0!==(r=t[a])&&(void 0!==e&&"function"==typeof r&&(r=r(e)),void 0!==n&&i.isArray(r)&&(r=r[n]),void 0!==r))return r}}},{42:42}],45:[function(t,e,n){"use strict";e.exports=t(42),e.exports.easing=t(43),e.exports.canvas=t(41),e.exports.options=t(44)},{41:41,42:42,43:43,44:44}],46:[function(t,e,n){e.exports={acquireContext:function(t){return t&&t.canvas&&(t=t.canvas),t&&t.getContext("2d")||null}}},{}],47:[function(t,e,n){"use strict";function i(t,e){var n=v.getStyle(t,e),i=n&&n.match(/^(\d+)(\.\d+)?px$/);return i?Number(i[1]):void 0}function a(t,e){var n=t.style,a=t.getAttribute("height"),o=t.getAttribute("width");if(t[m]={initial:{height:a,width:o,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||"block",null===o||""===o){var r=i(t,"width");void 0!==r&&(t.width=r)}if(null===a||""===a)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var l=i(t,"height");void 0!==r&&(t.height=l)}return t}function o(t,e,n){t.addEventListener(e,n,M)}function r(t,e,n){t.removeEventListener(e,n,M)}function l(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void 0!==n?n:null,y:void 0!==i?i:null}}function s(t,e){var n=w[t.type]||t.type,i=v.getRelativePosition(t,e);return l(n,e,i.x,i.y,t)}function u(t,e){var n=!1,i=[];return function(){i=Array.prototype.slice.call(arguments),e=e||this,n||(n=!0,v.requestAnimFrame.call(window,function(){n=!1,t.apply(e,i)}))}}function d(t){var e=document.createElement("div"),n=b+"size-monitor",i="position:absolute;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1;";e.style.cssText=i,e.className=n,e.innerHTML='<div class="'+n+'-expand" style="'+i+'"><div style="position:absolute;width:1000000px;height:1000000px;left:0;top:0"></div></div><div class="'+n+'-shrink" style="'+i+'"><div style="position:absolute;width:200%;height:200%;left:0; top:0"></div></div>';var a=e.childNodes[0],r=e.childNodes[1];e._reset=function(){a.scrollLeft=1e6,a.scrollTop=1e6,r.scrollLeft=1e6,r.scrollTop=1e6};var l=function(){e._reset(),t()};return o(a,"scroll",l.bind(a,"expand")),o(r,"scroll",l.bind(r,"shrink")),e}function c(t,e){var n=t[m]||(t[m]={}),i=n.renderProxy=function(t){t.animationName===y&&e()};v.each(k,function(e){o(t,e,i)}),n.reflow=!!t.offsetParent,t.classList.add(x)}function h(t){var e=t[m]||{},n=e.renderProxy;n&&(v.each(k,function(e){r(t,e,n)}),delete e.renderProxy),t.classList.remove(x)}function f(t,e,n){var i=t[m]||(t[m]={}),a=i.resizer=d(u(function(){if(i.resizer)return e(l("resize",n))}));c(t,function(){if(i.resizer){var e=t.parentNode;e&&e!==a.parentNode&&e.insertBefore(a,e.firstChild),a._reset()}})}function g(t){var e=t[m]||{},n=e.resizer;delete e.resizer,h(t),n&&n.parentNode&&n.parentNode.removeChild(n)}function p(t,e){var n=t._style||document.createElement("style");t._style||(t._style=n,e="/* Chart.js */\n"+e,n.setAttribute("type","text/css"),document.getElementsByTagName("head")[0].appendChild(n)),n.appendChild(document.createTextNode(e))}var v=t(45),m="$chartjs",b="chartjs-",x=b+"render-monitor",y=b+"render-animation",k=["animationstart","webkitAnimationStart"],w={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},M=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(t){}return t}()&&{passive:!0};e.exports={_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,initialize:function(){var t="from{opacity:0.99}to{opacity:1}";p(this,"@-webkit-keyframes "+y+"{"+t+"}@keyframes "+y+"{"+t+"}."+x+"{-webkit-animation:"+y+" 0.001s;animation:"+y+" 0.001s;}")},acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var n=t&&t.getContext&&t.getContext("2d");return n&&n.canvas===t?(a(t,e),n):null},releaseContext:function(t){var e=t.canvas;if(e[m]){var n=e[m].initial;["height","width"].forEach(function(t){var i=n[t];v.isNullOrUndef(i)?e.removeAttribute(t):e.setAttribute(t,i)}),v.each(n.style||{},function(t,n){e.style[n]=t}),e.width=e.width,delete e[m]}},addEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=n[m]||(n[m]={});o(i,e,(a.proxies||(a.proxies={}))[t.id+"_"+e]=function(e){n(s(e,t))})}else f(i,n,t)},removeEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=((n[m]||{}).proxies||{})[t.id+"_"+e];a&&r(i,e,a)}else g(i)}},v.addEvent=o,v.removeEvent=r},{45:45}],48:[function(t,e,n){"use strict";var i=t(45),a=t(46),o=t(47),r=o._enabled?o:a;e.exports=i.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},r)},{45:45,46:46,47:47}],49:[function(t,e,n){"use strict";var i=t(25),a=t(40),o=t(45);i._set("global",{plugins:{filler:{propagate:!0}}}),e.exports=function(){function t(t,e,n){var i,a=t._model||{},o=a.fill;if(void 0===o&&(o=!!a.backgroundColor),!1===o||null===o)return!1;if(!0===o)return"origin";if(i=parseFloat(o,10),isFinite(i)&&Math.floor(i)===i)return"-"!==o[0]&&"+"!==o[0]||(i=e+i),!(i===e||i<0||i>=n)&&i;switch(o){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return o;default:return!1}}function e(t){var e,n=t.el._model||{},i=t.el._scale||{},a=t.fill,o=null;if(isFinite(a))return null;if("start"===a?o=void 0===n.scaleBottom?i.bottom:n.scaleBottom:"end"===a?o=void 0===n.scaleTop?i.top:n.scaleTop:void 0!==n.scaleZero?o=n.scaleZero:i.getBasePosition?o=i.getBasePosition():i.getBasePixel&&(o=i.getBasePixel()),void 0!==o&&null!==o){if(void 0!==o.x&&void 0!==o.y)return o;if("number"==typeof o&&isFinite(o))return e=i.isHorizontal(),{x:e?o:null,y:e?null:o}}return null}function n(t,e,n){var i,a=t[e].fill,o=[e];if(!n)return a;for(;!1!==a&&-1===o.indexOf(a);){if(!isFinite(a))return a;if(!(i=t[a]))return!1;if(i.visible)return a;o.push(a),a=i.fill}return!1}function r(t){var e=t.fill,n="dataset";return!1===e?null:(isFinite(e)||(n="boundary"),d[n](t))}function l(t){return t&&!t.skip}function s(t,e,n,i,a){var r;if(i&&a){for(t.moveTo(e[0].x,e[0].y),r=1;r<i;++r)o.canvas.lineTo(t,e[r-1],e[r]);for(t.lineTo(n[a-1].x,n[a-1].y),r=a-1;r>0;--r)o.canvas.lineTo(t,n[r],n[r-1],!0)}}function u(t,e,n,i,a,o){var r,u,d,c,h,f,g,p=e.length,v=i.spanGaps,m=[],b=[],x=0,y=0;for(t.beginPath(),r=0,u=p+!!o;r<u;++r)h=n(c=e[d=r%p]._view,d,i),f=l(c),g=l(h),f&&g?(x=m.push(c),y=b.push(h)):x&&y&&(v?(f&&m.push(c),g&&b.push(h)):(s(t,m,b,x,y),x=y=0,m=[],b=[]));s(t,m,b,x,y),t.closePath(),t.fillStyle=a,t.fill()}var d={dataset:function(t){var e=t.fill,n=t.chart,i=n.getDatasetMeta(e),a=i&&n.isDatasetVisible(e)&&i.dataset._children||[],o=a.length||0;return o?function(t,e){return e<o&&a[e]._view||null}:null},boundary:function(t){var e=t.boundary,n=e?e.x:null,i=e?e.y:null;return function(t){return{x:null===n?t.x:n,y:null===i?t.y:i}}}};return{id:"filler",afterDatasetsUpdate:function(i,o){var l,s,u,d,c=(i.data.datasets||[]).length,h=o.propagate,f=[];for(s=0;s<c;++s)d=null,(u=(l=i.getDatasetMeta(s)).dataset)&&u._model&&u instanceof a.Line&&(d={visible:i.isDatasetVisible(s),fill:t(u,s,c),chart:i,el:u}),l.$filler=d,f.push(d);for(s=0;s<c;++s)(d=f[s])&&(d.fill=n(f,s,h),d.boundary=e(d),d.mapper=r(d))},beforeDatasetDraw:function(t,e){var n=e.meta.$filler;if(n){var a=t.ctx,r=n.el,l=r._view,s=r._children||[],d=n.mapper,c=l.backgroundColor||i.global.defaultColor;d&&c&&s.length&&(o.canvas.clipArea(a,t.chartArea),u(a,s,d,l,c,r._loop),o.canvas.unclipArea(a))}}}}},{25:25,40:40,45:45}],50:[function(t,e,n){"use strict";var i=t(25),a=t(26),o=t(45);i._set("global",{legend:{display:!0,position:"top",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var n=e.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=null===a.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data;return o.isArray(e.datasets)?e.datasets.map(function(e,n){return{text:e.label,fillStyle:o.isArray(e.backgroundColor)?e.backgroundColor[0]:e.backgroundColor,hidden:!t.isDatasetVisible(n),lineCap:e.borderCapStyle,lineDash:e.borderDash,lineDashOffset:e.borderDashOffset,lineJoin:e.borderJoinStyle,lineWidth:e.borderWidth,strokeStyle:e.borderColor,pointStyle:e.pointStyle,datasetIndex:n}},this):[]}}},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');for(var n=0;n<t.data.datasets.length;n++)e.push('<li><span style="background-color:'+t.data.datasets[n].backgroundColor+'"></span>'),t.data.datasets[n].label&&e.push(t.data.datasets[n].label),e.push("</li>");return e.push("</ul>"),e.join("")}}),e.exports=function(t){function e(t,e){return t.usePointStyle?e*Math.SQRT2:t.boxWidth}function n(e,n){var i=new t.Legend({ctx:e.ctx,options:n,chart:e});r.configure(e,i,n),r.addBox(e,i),e.legend=i}var r=t.layoutService,l=o.noop;return t.Legend=a.extend({initialize:function(t){o.extend(this,t),this.legendHitBoxes=[],this.doughnutMode=!1},beforeUpdate:l,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:l,beforeSetDimensions:l,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:l,beforeBuildLabels:l,buildLabels:function(){var t=this,e=t.options.labels||{},n=o.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(n=n.filter(function(n){return e.filter(n,t.chart.data)})),t.options.reverse&&n.reverse(),t.legendItems=n},afterBuildLabels:l,beforeFit:l,fit:function(){var t=this,n=t.options,a=n.labels,r=n.display,l=t.ctx,s=i.global,u=o.valueOrDefault,d=u(a.fontSize,s.defaultFontSize),c=u(a.fontStyle,s.defaultFontStyle),h=u(a.fontFamily,s.defaultFontFamily),f=o.fontString(d,c,h),g=t.legendHitBoxes=[],p=t.minSize,v=t.isHorizontal();if(v?(p.width=t.maxWidth,p.height=r?10:0):(p.width=r?10:0,p.height=t.maxHeight),r)if(l.font=f,v){var m=t.lineWidths=[0],b=t.legendItems.length?d+a.padding:0;l.textAlign="left",l.textBaseline="top",o.each(t.legendItems,function(n,i){var o=e(a,d)+d/2+l.measureText(n.text).width;m[m.length-1]+o+a.padding>=t.width&&(b+=d+a.padding,m[m.length]=t.left),g[i]={left:0,top:0,width:o,height:d},m[m.length-1]+=o+a.padding}),p.height+=b}else{var x=a.padding,y=t.columnWidths=[],k=a.padding,w=0,M=0,S=d+x;o.each(t.legendItems,function(t,n){var i=e(a,d)+d/2+l.measureText(t.text).width;M+S>p.height&&(k+=w+a.padding,y.push(w),w=0,M=0),w=Math.max(w,i),M+=S,g[n]={left:0,top:0,width:i,height:d}}),k+=w,y.push(w),p.width+=k}t.width=p.width,t.height=p.height},afterFit:l,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,n=t.options,a=n.labels,r=i.global,l=r.elements.line,s=t.width,u=t.lineWidths;if(n.display){var d,c=t.ctx,h=o.valueOrDefault,f=h(a.fontColor,r.defaultFontColor),g=h(a.fontSize,r.defaultFontSize),p=h(a.fontStyle,r.defaultFontStyle),v=h(a.fontFamily,r.defaultFontFamily),m=o.fontString(g,p,v);c.textAlign="left",c.textBaseline="middle",c.lineWidth=.5,c.strokeStyle=f,c.fillStyle=f,c.font=m;var b=e(a,g),x=t.legendHitBoxes,y=function(t,e,i){if(!(isNaN(b)||b<=0)){c.save(),c.fillStyle=h(i.fillStyle,r.defaultColor),c.lineCap=h(i.lineCap,l.borderCapStyle),c.lineDashOffset=h(i.lineDashOffset,l.borderDashOffset),c.lineJoin=h(i.lineJoin,l.borderJoinStyle),c.lineWidth=h(i.lineWidth,l.borderWidth),c.strokeStyle=h(i.strokeStyle,r.defaultColor);var a=0===h(i.lineWidth,l.borderWidth);if(c.setLineDash&&c.setLineDash(h(i.lineDash,l.borderDash)),n.labels&&n.labels.usePointStyle){var s=g*Math.SQRT2/2,u=s/Math.SQRT2,d=t+u,f=e+u;o.canvas.drawPoint(c,i.pointStyle,s,d,f)}else a||c.strokeRect(t,e,b,g),c.fillRect(t,e,b,g);c.restore()}},k=function(t,e,n,i){var a=g/2,o=b+a+t,r=e+a;c.fillText(n.text,o,r),n.hidden&&(c.beginPath(),c.lineWidth=2,c.moveTo(o,r),c.lineTo(o+i,r),c.stroke())},w=t.isHorizontal();d=w?{x:t.left+(s-u[0])/2,y:t.top+a.padding,line:0}:{x:t.left+a.padding,y:t.top+a.padding,line:0};var M=g+a.padding;o.each(t.legendItems,function(e,n){var i=c.measureText(e.text).width,o=b+g/2+i,r=d.x,l=d.y;w?r+o>=s&&(l=d.y+=M,d.line++,r=d.x=t.left+(s-u[d.line])/2):l+M>t.bottom&&(r=d.x=r+t.columnWidths[d.line]+a.padding,l=d.y=t.top+a.padding,d.line++),y(r,l,e),x[n].left=r,x[n].top=l,k(r,l,e,i),w?d.x+=o+a.padding:d.y+=M})}},handleEvent:function(t){var e=this,n=e.options,i="mouseup"===t.type?"click":t.type,a=!1;if("mousemove"===i){if(!n.onHover)return}else{if("click"!==i)return;if(!n.onClick)return}var o=t.x,r=t.y;if(o>=e.left&&o<=e.right&&r>=e.top&&r<=e.bottom)for(var l=e.legendHitBoxes,s=0;s<l.length;++s){var u=l[s];if(o>=u.left&&o<=u.left+u.width&&r>=u.top&&r<=u.top+u.height){if("click"===i){n.onClick.call(e,t.native,e.legendItems[s]),a=!0;break}if("mousemove"===i){n.onHover.call(e,t.native,e.legendItems[s]),a=!0;break}}}return a}}),{id:"legend",beforeInit:function(t){var e=t.options.legend;e&&n(t,e)},beforeUpdate:function(t){var e=t.options.legend,a=t.legend;e?(o.mergeIf(e,i.global.legend),a?(r.configure(t,a,e),a.options=e):n(t,e)):a&&(r.removeBox(t,a),delete t.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}}}},{25:25,26:26,45:45}],51:[function(t,e,n){"use strict";var i=t(25),a=t(26),o=t(45);i._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,lineHeight:1.2,padding:10,position:"top",text:"",weight:2e3}}),e.exports=function(t){function e(e,i){var a=new t.Title({ctx:e.ctx,options:i,chart:e});n.configure(e,a,i),n.addBox(e,a),e.titleBlock=a}var n=t.layoutService,r=o.noop;return t.Title=a.extend({initialize:function(t){var e=this;o.extend(e,t),e.legendHitBoxes=[]},beforeUpdate:r,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:r,beforeSetDimensions:r,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:r,beforeBuildLabels:r,buildLabels:r,afterBuildLabels:r,beforeFit:r,fit:function(){var t=this,e=o.valueOrDefault,n=t.options,a=n.display,r=e(n.fontSize,i.global.defaultFontSize),l=t.minSize,s=o.isArray(n.text)?n.text.length:1,u=o.options.toLineHeight(n.lineHeight,r),d=a?s*u+2*n.padding:0;t.isHorizontal()?(l.width=t.maxWidth,l.height=d):(l.width=d,l.height=t.maxHeight),t.width=l.width,t.height=l.height},afterFit:r,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,n=o.valueOrDefault,a=t.options,r=i.global;if(a.display){var l,s,u,d=n(a.fontSize,r.defaultFontSize),c=n(a.fontStyle,r.defaultFontStyle),h=n(a.fontFamily,r.defaultFontFamily),f=o.fontString(d,c,h),g=o.options.toLineHeight(a.lineHeight,d),p=g/2+a.padding,v=0,m=t.top,b=t.left,x=t.bottom,y=t.right;e.fillStyle=n(a.fontColor,r.defaultFontColor),e.font=f,t.isHorizontal()?(s=b+(y-b)/2,u=m+p,l=y-b):(s="left"===a.position?b+p:y-p,u=m+(x-m)/2,l=x-m,v=Math.PI*("left"===a.position?-.5:.5)),e.save(),e.translate(s,u),e.rotate(v),e.textAlign="center",e.textBaseline="middle";var k=a.text;if(o.isArray(k))for(var w=0,M=0;M<k.length;++M)e.fillText(k[M],0,w,l),w+=g;else e.fillText(k,0,0,l);e.restore()}}}),{id:"title",beforeInit:function(t){var n=t.options.title;n&&e(t,n)},beforeUpdate:function(a){var r=a.options.title,l=a.titleBlock;r?(o.mergeIf(r,i.global.title),l?(n.configure(a,l,r),l.options=r):e(a,r)):l&&(t.layoutService.removeBox(a,l),delete a.titleBlock)}}}},{25:25,26:26,45:45}],52:[function(t,e,n){"use strict";e.exports=function(t){var e=t.Scale.extend({getLabels:function(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels},determineDataLimits:function(){var t=this,e=t.getLabels();t.minIndex=0,t.maxIndex=e.length-1;var n;void 0!==t.options.ticks.min&&(n=e.indexOf(t.options.ticks.min),t.minIndex=-1!==n?n:t.minIndex),void 0!==t.options.ticks.max&&(n=e.indexOf(t.options.ticks.max),t.maxIndex=-1!==n?n:t.maxIndex),t.min=e[t.minIndex],t.max=e[t.maxIndex]},buildTicks:function(){var t=this,e=t.getLabels();t.ticks=0===t.minIndex&&t.maxIndex===e.length-1?e:e.slice(t.minIndex,t.maxIndex+1)},getLabelForIndex:function(t,e){var n=this,i=n.chart.data,a=n.isHorizontal();return i.yLabels&&!a?n.getRightValue(i.datasets[e].data[t]):n.ticks[t-n.minIndex]},getPixelForValue:function(t,e){var n,i=this,a=i.options.offset,o=Math.max(i.maxIndex+1-i.minIndex-(a?0:1),1);if(void 0!==t&&null!==t&&(n=i.isHorizontal()?t.x:t.y),void 0!==n||void 0!==t&&isNaN(e)){var r=i.getLabels();t=n||t;var l=r.indexOf(t);e=-1!==l?l:e}if(i.isHorizontal()){var s=i.width/o,u=s*(e-i.minIndex);return a&&(u+=s/2),i.left+Math.round(u)}var d=i.height/o,c=d*(e-i.minIndex);return a&&(c+=d/2),i.top+Math.round(c)},getPixelForTick:function(t){return this.getPixelForValue(this.ticks[t],t+this.minIndex,null)},getValueForPixel:function(t){var e=this,n=e.options.offset,i=Math.max(e._ticks.length-(n?0:1),1),a=e.isHorizontal(),o=(a?e.width:e.height)/i;return t-=a?e.left:e.top,n&&(t-=o/2),(t<=0?0:Math.round(t/o))+e.minIndex},getBasePixel:function(){return this.bottom}});t.scaleService.registerScaleType("category",e,{position:"bottom"})}},{}],53:[function(t,e,n){"use strict";var i=t(25),a=t(45),o=t(34);e.exports=function(t){var e={position:"left",ticks:{callback:o.formatters.linear}},n=t.LinearScaleBase.extend({determineDataLimits:function(){function t(t){return r?t.xAxisID===e.id:t.yAxisID===e.id}var e=this,n=e.options,i=e.chart,o=i.data.datasets,r=e.isHorizontal();e.min=null,e.max=null;var l=n.stacked;if(void 0===l&&a.each(o,function(e,n){if(!l){var a=i.getDatasetMeta(n);i.isDatasetVisible(n)&&t(a)&&void 0!==a.stack&&(l=!0)}}),n.stacked||l){var s={};a.each(o,function(o,r){var l=i.getDatasetMeta(r),u=[l.type,void 0===n.stacked&&void 0===l.stack?r:"",l.stack].join(".");void 0===s[u]&&(s[u]={positiveValues:[],negativeValues:[]});var d=s[u].positiveValues,c=s[u].negativeValues;i.isDatasetVisible(r)&&t(l)&&a.each(o.data,function(t,i){var a=+e.getRightValue(t);isNaN(a)||l.data[i].hidden||(d[i]=d[i]||0,c[i]=c[i]||0,n.relativePoints?d[i]=100:a<0?c[i]+=a:d[i]+=a)})}),a.each(s,function(t){var n=t.positiveValues.concat(t.negativeValues),i=a.min(n),o=a.max(n);e.min=null===e.min?i:Math.min(e.min,i),e.max=null===e.max?o:Math.max(e.max,o)})}else a.each(o,function(n,o){var r=i.getDatasetMeta(o);i.isDatasetVisible(o)&&t(r)&&a.each(n.data,function(t,n){var i=+e.getRightValue(t);isNaN(i)||r.data[n].hidden||(null===e.min?e.min=i:i<e.min&&(e.min=i),null===e.max?e.max=i:i>e.max&&(e.max=i))})});e.min=isFinite(e.min)&&!isNaN(e.min)?e.min:0,e.max=isFinite(e.max)&&!isNaN(e.max)?e.max:1,this.handleTickRangeOptions()},getTickLimit:function(){var t,e=this,n=e.options.ticks;if(e.isHorizontal())t=Math.min(n.maxTicksLimit?n.maxTicksLimit:11,Math.ceil(e.width/50));else{var o=a.valueOrDefault(n.fontSize,i.global.defaultFontSize);t=Math.min(n.maxTicksLimit?n.maxTicksLimit:11,Math.ceil(e.height/(2*o)))}return t},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){var e,n=this,i=n.start,a=+n.getRightValue(t),o=n.end-i;return n.isHorizontal()?(e=n.left+n.width/o*(a-i),Math.round(e)):(e=n.bottom-n.height/o*(a-i),Math.round(e))},getValueForPixel:function(t){var e=this,n=e.isHorizontal(),i=n?e.width:e.height,a=(n?t-e.left:e.bottom-t)/i;return e.start+(e.end-e.start)*a},getPixelForTick:function(t){return this.getPixelForValue(this.ticksAsNumbers[t])}});t.scaleService.registerScaleType("linear",n,e)}},{25:25,34:34,45:45}],54:[function(t,e,n){"use strict";var i=t(45),a=t(34);e.exports=function(t){var e=i.noop;t.LinearScaleBase=t.Scale.extend({getRightValue:function(e){return"string"==typeof e?+e:t.Scale.prototype.getRightValue.call(this,e)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var n=i.sign(t.min),a=i.sign(t.max);n<0&&a<0?t.max=0:n>0&&a>0&&(t.min=0)}var o=void 0!==e.min||void 0!==e.suggestedMin,r=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),o!==r&&t.min>=t.max&&(o?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:e,handleDirectionalChanges:e,buildTicks:function(){var t=this,e=t.options.ticks,n=t.getTickLimit(),o={maxTicks:n=Math.max(2,n),min:e.min,max:e.max,stepSize:i.valueOrDefault(e.fixedStepSize,e.stepSize)},r=t.ticks=a.generators.linear(o,t);t.handleDirectionalChanges(),t.max=i.max(r),t.min=i.min(r),e.reverse?(r.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){var e=this;e.ticksAsNumbers=e.ticks.slice(),e.zeroLineIndex=e.ticks.indexOf(0),t.Scale.prototype.convertTicksToLabels.call(e)}})}},{34:34,45:45}],55:[function(t,e,n){"use strict";var i=t(45),a=t(34);e.exports=function(t){var e={position:"left",ticks:{callback:a.formatters.logarithmic}},n=t.Scale.extend({determineDataLimits:function(){function t(t){return s?t.xAxisID===e.id:t.yAxisID===e.id}var e=this,n=e.options,a=n.ticks,o=e.chart,r=o.data.datasets,l=i.valueOrDefault,s=e.isHorizontal();e.min=null,e.max=null,e.minNotZero=null;var u=n.stacked;if(void 0===u&&i.each(r,function(e,n){if(!u){var i=o.getDatasetMeta(n);o.isDatasetVisible(n)&&t(i)&&void 0!==i.stack&&(u=!0)}}),n.stacked||u){var d={};i.each(r,function(a,r){var l=o.getDatasetMeta(r),s=[l.type,void 0===n.stacked&&void 0===l.stack?r:"",l.stack].join(".");o.isDatasetVisible(r)&&t(l)&&(void 0===d[s]&&(d[s]=[]),i.each(a.data,function(t,i){var a=d[s],o=+e.getRightValue(t);isNaN(o)||l.data[i].hidden||(a[i]=a[i]||0,n.relativePoints?a[i]=100:a[i]+=o)}))}),i.each(d,function(t){var n=i.min(t),a=i.max(t);e.min=null===e.min?n:Math.min(e.min,n),e.max=null===e.max?a:Math.max(e.max,a)})}else i.each(r,function(n,a){var r=o.getDatasetMeta(a);o.isDatasetVisible(a)&&t(r)&&i.each(n.data,function(t,n){var i=+e.getRightValue(t);isNaN(i)||r.data[n].hidden||(null===e.min?e.min=i:i<e.min&&(e.min=i),null===e.max?e.max=i:i>e.max&&(e.max=i),0!==i&&(null===e.minNotZero||i<e.minNotZero)&&(e.minNotZero=i))})});e.min=l(a.min,e.min),e.max=l(a.max,e.max),e.min===e.max&&(0!==e.min&&null!==e.min?(e.min=Math.pow(10,Math.floor(i.log10(e.min))-1),e.max=Math.pow(10,Math.floor(i.log10(e.max))+1)):(e.min=1,e.max=10))},buildTicks:function(){var t=this,e=t.options.ticks,n={min:e.min,max:e.max},o=t.ticks=a.generators.logarithmic(n,t);t.isHorizontal()||o.reverse(),t.max=i.max(o),t.min=i.min(o),e.reverse?(o.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),t.Scale.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){return this.getPixelForValue(this.tickValues[t])},getPixelForValue:function(t){var e,n,a,o=this,r=o.start,l=+o.getRightValue(t),s=o.options.ticks;return o.isHorizontal()?(a=i.log10(o.end)-i.log10(r),0===l?n=o.left:(e=o.width,n=o.left+e/a*(i.log10(l)-i.log10(r)))):(e=o.height,0!==r||s.reverse?0===o.end&&s.reverse?(a=i.log10(o.start)-i.log10(o.minNotZero),n=l===o.end?o.top:l===o.minNotZero?o.top+.02*e:o.top+.02*e+.98*e/a*(i.log10(l)-i.log10(o.minNotZero))):0===l?n=s.reverse?o.top:o.bottom:(a=i.log10(o.end)-i.log10(r),e=o.height,n=o.bottom-e/a*(i.log10(l)-i.log10(r))):(a=i.log10(o.end)-i.log10(o.minNotZero),n=l===r?o.bottom:l===o.minNotZero?o.bottom-.02*e:o.bottom-.02*e-.98*e/a*(i.log10(l)-i.log10(o.minNotZero)))),n},getValueForPixel:function(t){var e,n,a=this,o=i.log10(a.end)-i.log10(a.start);return a.isHorizontal()?(n=a.width,e=a.start*Math.pow(10,(t-a.left)*o/n)):(n=a.height,e=Math.pow(10,(a.bottom-t)*o/n)/a.start),e}});t.scaleService.registerScaleType("logarithmic",n,e)}},{34:34,45:45}],56:[function(t,e,n){"use strict";var i=t(25),a=t(45),o=t(34);e.exports=function(t){function e(t){var e=t.options;return e.angleLines.display||e.pointLabels.display?t.chart.data.labels.length:0}function n(t){var e=t.options.pointLabels,n=a.valueOrDefault(e.fontSize,v.defaultFontSize),i=a.valueOrDefault(e.fontStyle,v.defaultFontStyle),o=a.valueOrDefault(e.fontFamily,v.defaultFontFamily);return{size:n,style:i,family:o,font:a.fontString(n,i,o)}}function r(t,e,n){return a.isArray(n)?{w:a.longestText(t,t.font,n),h:n.length*e+1.5*(n.length-1)*e}:{w:t.measureText(n).width,h:e}}function l(t,e,n,i,a){return t===i||t===a?{start:e-n/2,end:e+n/2}:t<i||t>a?{start:e-n-5,end:e}:{start:e,end:e+n+5}}function s(t){var i,o,s,u=n(t),d=Math.min(t.height/2,t.width/2),c={r:t.width,l:0,t:t.height,b:0},h={};t.ctx.font=u.font,t._pointLabelSizes=[];var f=e(t);for(i=0;i<f;i++){s=t.getPointPosition(i,d),o=r(t.ctx,u.size,t.pointLabels[i]||""),t._pointLabelSizes[i]=o;var g=t.getIndexAngle(i),p=a.toDegrees(g)%360,v=l(p,s.x,o.w,0,180),m=l(p,s.y,o.h,90,270);v.start<c.l&&(c.l=v.start,h.l=g),v.end>c.r&&(c.r=v.end,h.r=g),m.start<c.t&&(c.t=m.start,h.t=g),m.end>c.b&&(c.b=m.end,h.b=g)}t.setReductions(d,c,h)}function u(t){var e=Math.min(t.height/2,t.width/2);t.drawingArea=Math.round(e),t.setCenterPoint(0,0,0,0)}function d(t){return 0===t||180===t?"center":t<180?"left":"right"}function c(t,e,n,i){if(a.isArray(e))for(var o=n.y,r=1.5*i,l=0;l<e.length;++l)t.fillText(e[l],n.x,o),o+=r;else t.fillText(e,n.x,n.y)}function h(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}function f(t){var i=t.ctx,o=a.valueOrDefault,r=t.options,l=r.angleLines,s=r.pointLabels;i.lineWidth=l.lineWidth,i.strokeStyle=l.color;var u=t.getDistanceFromCenterForValue(r.ticks.reverse?t.min:t.max),f=n(t);i.textBaseline="top";for(var g=e(t)-1;g>=0;g--){if(l.display){var p=t.getPointPosition(g,u);i.beginPath(),i.moveTo(t.xCenter,t.yCenter),i.lineTo(p.x,p.y),i.stroke(),i.closePath()}if(s.display){var m=t.getPointPosition(g,u+5),b=o(s.fontColor,v.defaultFontColor);i.font=f.font,i.fillStyle=b;var x=t.getIndexAngle(g),y=a.toDegrees(x);i.textAlign=d(y),h(y,t._pointLabelSizes[g],m),c(i,t.pointLabels[g]||"",m,f.size)}}}function g(t,n,i,o){var r=t.ctx;if(r.strokeStyle=a.valueAtIndexOrDefault(n.color,o-1),r.lineWidth=a.valueAtIndexOrDefault(n.lineWidth,o-1),t.options.gridLines.circular)r.beginPath(),r.arc(t.xCenter,t.yCenter,i,0,2*Math.PI),r.closePath(),r.stroke();else{var l=e(t);if(0===l)return;r.beginPath();var s=t.getPointPosition(0,i);r.moveTo(s.x,s.y);for(var u=1;u<l;u++)s=t.getPointPosition(u,i),r.lineTo(s.x,s.y);r.closePath(),r.stroke()}}function p(t){return a.isNumber(t)?t:0}var v=i.global,m={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:o.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}},b=t.LinearScaleBase.extend({setDimensions:function(){var t=this,e=t.options,n=e.ticks;t.width=t.maxWidth,t.height=t.maxHeight,t.xCenter=Math.round(t.width/2),t.yCenter=Math.round(t.height/2);var i=a.min([t.height,t.width]),o=a.valueOrDefault(n.fontSize,v.defaultFontSize);t.drawingArea=e.display?i/2-(o/2+n.backdropPaddingY):i/2},determineDataLimits:function(){var t=this,e=t.chart,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;a.each(e.data.datasets,function(o,r){if(e.isDatasetVisible(r)){var l=e.getDatasetMeta(r);a.each(o.data,function(e,a){var o=+t.getRightValue(e);isNaN(o)||l.data[a].hidden||(n=Math.min(o,n),i=Math.max(o,i))})}}),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=i===Number.NEGATIVE_INFINITY?0:i,t.handleTickRangeOptions()},getTickLimit:function(){var t=this.options.ticks,e=a.valueOrDefault(t.fontSize,v.defaultFontSize);return Math.min(t.maxTicksLimit?t.maxTicksLimit:11,Math.ceil(this.drawingArea/(1.5*e)))},convertTicksToLabels:function(){var e=this;t.LinearScaleBase.prototype.convertTicksToLabels.call(e),e.pointLabels=e.chart.data.labels.map(e.options.pointLabels.callback,e)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){this.options.pointLabels.display?s(this):u(this)},setReductions:function(t,e,n){var i=this,a=e.l/Math.sin(n.l),o=Math.max(e.r-i.width,0)/Math.sin(n.r),r=-e.t/Math.cos(n.t),l=-Math.max(e.b-i.height,0)/Math.cos(n.b);a=p(a),o=p(o),r=p(r),l=p(l),i.drawingArea=Math.min(Math.round(t-(a+o)/2),Math.round(t-(r+l)/2)),i.setCenterPoint(a,o,r,l)},setCenterPoint:function(t,e,n,i){var a=this,o=a.width-e-a.drawingArea,r=t+a.drawingArea,l=n+a.drawingArea,s=a.height-i-a.drawingArea;a.xCenter=Math.round((r+o)/2+a.left),a.yCenter=Math.round((l+s)/2+a.top)},getIndexAngle:function(t){return t*(2*Math.PI/e(this))+(this.chart.options&&this.chart.options.startAngle?this.chart.options.startAngle:0)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(null===t)return 0;var n=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var n=this,i=n.getIndexAngle(t)-Math.PI/2;return{x:Math.round(Math.cos(i)*e)+n.xCenter,y:Math.round(Math.sin(i)*e)+n.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(){var t=this,e=t.min,n=t.max;return t.getPointPositionForValue(0,t.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0)},draw:function(){var t=this,e=t.options,n=e.gridLines,i=e.ticks,o=a.valueOrDefault;if(e.display){var r=t.ctx,l=this.getIndexAngle(0),s=o(i.fontSize,v.defaultFontSize),u=o(i.fontStyle,v.defaultFontStyle),d=o(i.fontFamily,v.defaultFontFamily),c=a.fontString(s,u,d);a.each(t.ticks,function(e,a){if(a>0||i.reverse){var u=t.getDistanceFromCenterForValue(t.ticksAsNumbers[a]);if(n.display&&0!==a&&g(t,n,u,a),i.display){var d=o(i.fontColor,v.defaultFontColor);if(r.font=c,r.save(),r.translate(t.xCenter,t.yCenter),r.rotate(l),i.showLabelBackdrop){var h=r.measureText(e).width;r.fillStyle=i.backdropColor,r.fillRect(-h/2-i.backdropPaddingX,-u-s/2-i.backdropPaddingY,h+2*i.backdropPaddingX,s+2*i.backdropPaddingY)}r.textAlign="center",r.textBaseline="middle",r.fillStyle=d,r.fillText(e,0,-u),r.restore()}}}),(e.angleLines.display||e.pointLabels.display)&&f(t)}}});t.scaleService.registerScaleType("radialLinear",b,m)}},{25:25,34:34,45:45}],57:[function(t,e,n){"use strict";function i(t,e){return t-e}function a(t){var e,n,i,a={},o=[];for(e=0,n=t.length;e<n;++e)a[i=t[e]]||(a[i]=!0,o.push(i));return o}function o(t,e,n,i){if("linear"===i||!t.length)return[{time:e,pos:0},{time:n,pos:1}];var a,o,r,l,s,u=[],d=[e];for(a=0,o=t.length;a<o;++a)(l=t[a])>e&&l<n&&d.push(l);for(d.push(n),a=0,o=d.length;a<o;++a)s=d[a+1],r=d[a-1],l=d[a],void 0!==r&&void 0!==s&&Math.round((s+r)/2)===l||u.push({time:l,pos:a/(o-1)});return u}function r(t,e,n){for(var i,a,o,r=0,l=t.length-1;r>=0&&r<=l;){if(i=r+l>>1,a=t[i-1]||null,o=t[i],!a)return{lo:null,hi:o};if(o[e]<n)r=i+1;else{if(!(a[e]>n))return{lo:a,hi:o};l=i-1}}return{lo:o,hi:null}}function l(t,e,n,i){var a=r(t,e,n),o=a.lo?a.hi?a.lo:t[t.length-2]:t[0],l=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=l[e]-o[e],u=s?(n-o[e])/s:0,d=(l[i]-o[i])*u;return o[i]+d}function s(t,e){var n=e.parser,i=e.parser||e.format;return"function"==typeof n?n(t):"string"==typeof t&&"string"==typeof i?m(t,i):(t instanceof m||(t=m(t)),t.isValid()?t:"function"==typeof i?i(t):t)}function u(t,e){if(x.isNullOrUndef(t))return null;var n=e.options.time,i=s(e.getRightValue(t),n);return i.isValid()?(n.round&&i.startOf(n.round),i.valueOf()):null}function d(t,e,n,i){var a,o,r,l=e-t,s=w[n],u=s.size,d=s.steps;if(!d)return Math.ceil(l/((i||1)*u));for(a=0,o=d.length;a<o&&(r=d[a],!(Math.ceil(l/(u*r))<=i));++a);return r}function c(t,e,n,i){var a,o,r,l=M.length;for(a=M.indexOf(t);a<l-1;++a)if(o=w[M[a]],r=o.steps?o.steps[o.steps.length-1]:k,o.common&&Math.ceil((n-e)/(r*o.size))<=i)return M[a];return M[l-1]}function h(t,e,n,i){var a,o,r=m.duration(m(i).diff(m(n)));for(a=M.length-1;a>=M.indexOf(e);a--)if(o=M[a],w[o].common&&r.as(o)>=t.length)return o;return M[e?M.indexOf(e):0]}function f(t){for(var e=M.indexOf(t)+1,n=M.length;e<n;++e)if(w[M[e]].common)return M[e]}function g(t,e,n,i){var a,o=i.time,r=o.unit||c(o.minUnit,t,e,n),l=f(r),s=x.valueOrDefault(o.stepSize,o.unitStepSize),u="week"===r&&o.isoWeekday,h=i.ticks.major.enabled,g=w[r],p=m(t),v=m(e),b=[];for(s||(s=d(t,e,r,n)),u&&(p=p.isoWeekday(u),v=v.isoWeekday(u)),p=p.startOf(u?"day":r),(v=v.startOf(u?"day":r))<e&&v.add(1,r),a=m(p),h&&l&&!u&&!o.round&&(a.startOf(l),a.add(~~((p-a)/(g.size*s))*s,r));a<v;a.add(s,r))b.push(+a);return b.push(+a),b}function p(t,e,n,i,a){var o,r,s=0,u=0;return a.offset&&e.length&&(a.time.min||(o=e.length>1?e[1]:i,r=e[0],s=(l(t,"time",o,"pos")-l(t,"time",r,"pos"))/2),a.time.max||(o=e[e.length-1],r=e.length>1?e[e.length-2]:n,u=(l(t,"time",o,"pos")-l(t,"time",r,"pos"))/2)),{left:s,right:u}}function v(t,e){var n,i,a,o,r=[];for(n=0,i=t.length;n<i;++n)a=t[n],o=!!e&&a===+m(a).startOf(e),r.push({value:a,major:o});return r}var m=t(1);m="function"==typeof m?m:window.moment;var b=t(25),x=t(45),y=Number.MIN_SAFE_INTEGER||-9007199254740991,k=Number.MAX_SAFE_INTEGER||9007199254740991,w={millisecond:{common:!0,size:1,steps:[1,2,5,10,20,50,100,250,500]},second:{common:!0,size:1e3,steps:[1,2,5,10,30]},minute:{common:!0,size:6e4,steps:[1,2,5,10,30]},hour:{common:!0,size:36e5,steps:[1,2,3,6,12]},day:{common:!0,size:864e5,steps:[1,2,5]},week:{common:!1,size:6048e5,steps:[1,2,3,4]},month:{common:!0,size:2628e6,steps:[1,2,3]},quarter:{common:!1,size:7884e6,steps:[1,2,3,4]},year:{common:!0,size:3154e7}},M=Object.keys(w);e.exports=function(t){var e=t.Scale.extend({initialize:function(){if(!m)throw new Error("Chart.js - Moment.js could not be found! You must include it before Chart.js to use the time scale. Download at https://momentjs.com");this.mergeTicksOptions(),t.Scale.prototype.initialize.call(this)},update:function(){var e=this,n=e.options;return n.time&&n.time.format&&console.warn("options.time.format is deprecated and replaced by options.time.parser."),t.Scale.prototype.update.apply(e,arguments)},getRightValue:function(e){return e&&void 0!==e.t&&(e=e.t),t.Scale.prototype.getRightValue.call(this,e)},determineDataLimits:function(){var t,e,n,o,r,l,s=this,d=s.chart,c=s.options.time,h=k,f=y,g=[],p=[],v=[];for(t=0,n=d.data.labels.length;t<n;++t)v.push(u(d.data.labels[t],s));for(t=0,n=(d.data.datasets||[]).length;t<n;++t)if(d.isDatasetVisible(t))if(r=d.data.datasets[t].data,x.isObject(r[0]))for(p[t]=[],e=0,o=r.length;e<o;++e)l=u(r[e],s),g.push(l),p[t][e]=l;else g.push.apply(g,v),p[t]=v.slice(0);else p[t]=[];v.length&&(v=a(v).sort(i),h=Math.min(h,v[0]),f=Math.max(f,v[v.length-1])),g.length&&(g=a(g).sort(i),h=Math.min(h,g[0]),f=Math.max(f,g[g.length-1])),h=u(c.min,s)||h,f=u(c.max,s)||f,h=h===k?+m().startOf("day"):h,f=f===y?+m().endOf("day")+1:f,s.min=Math.min(h,f),s.max=Math.max(h+1,f),s._horizontal=s.isHorizontal(),s._table=[],s._timestamps={data:g,datasets:p,labels:v}},buildTicks:function(){var t,e,n,i=this,a=i.min,r=i.max,l=i.options,s=l.time,d=[],c=[];switch(l.ticks.source){case"data":d=i._timestamps.data;break;case"labels":d=i._timestamps.labels;break;case"auto":default:d=g(a,r,i.getLabelCapacity(a),l)}for("ticks"===l.bounds&&d.length&&(a=d[0],r=d[d.length-1]),a=u(s.min,i)||a,r=u(s.max,i)||r,t=0,e=d.length;t<e;++t)(n=d[t])>=a&&n<=r&&c.push(n);return i.min=a,i.max=r,i._unit=s.unit||h(c,s.minUnit,i.min,i.max),i._majorUnit=f(i._unit),i._table=o(i._timestamps.data,a,r,l.distribution),i._offsets=p(i._table,c,a,r,l),v(c,i._majorUnit)},getLabelForIndex:function(t,e){var n=this,i=n.chart.data,a=n.options.time,o=i.labels&&t<i.labels.length?i.labels[t]:"",r=i.datasets[e].data[t];return x.isObject(r)&&(o=n.getRightValue(r)),a.tooltipFormat&&(o=s(o,a).format(a.tooltipFormat)),o},tickFormatFunction:function(t,e,n,i){var a=this,o=a.options,r=t.valueOf(),l=o.time.displayFormats,s=l[a._unit],u=a._majorUnit,d=l[u],c=t.clone().startOf(u).valueOf(),h=o.ticks.major,f=h.enabled&&u&&d&&r===c,g=t.format(i||(f?d:s)),p=f?h:o.ticks.minor,v=x.valueOrDefault(p.callback,p.userCallback);return v?v(g,e,n):g},convertTicksToLabels:function(t){var e,n,i=[];for(e=0,n=t.length;e<n;++e)i.push(this.tickFormatFunction(m(t[e].value),e,t));return i},getPixelForOffset:function(t){var e=this,n=e._horizontal?e.width:e.height,i=e._horizontal?e.left:e.top,a=l(e._table,"time",t,"pos");return i+n*(e._offsets.left+a)/(e._offsets.left+1+e._offsets.right)},getPixelForValue:function(t,e,n){var i=this,a=null;if(void 0!==e&&void 0!==n&&(a=i._timestamps.datasets[n][e]),null===a&&(a=u(t,i)),null!==a)return i.getPixelForOffset(a)},getPixelForTick:function(t){var e=this.getTicks();return t>=0&&t<e.length?this.getPixelForOffset(e[t].value):null},getValueForPixel:function(t){var e=this,n=e._horizontal?e.width:e.height,i=e._horizontal?e.left:e.top,a=(n?(t-i)/n:0)*(e._offsets.left+1+e._offsets.left)-e._offsets.right,o=l(e._table,"pos",a,"time");return m(o)},getLabelWidth:function(t){var e=this,n=e.options.ticks,i=e.ctx.measureText(t).width,a=x.toRadians(n.maxRotation),o=Math.cos(a),r=Math.sin(a);return i*o+x.valueOrDefault(n.fontSize,b.global.defaultFontSize)*r},getLabelCapacity:function(t){var e=this,n=e.options.time.displayFormats.millisecond,i=e.tickFormatFunction(m(t),0,[],n),a=e.getLabelWidth(i),o=e.isHorizontal()?e.width:e.height;return Math.floor(o/a)}});t.scaleService.registerScaleType("time",e,{position:"bottom",distribution:"linear",bounds:"data",time:{parser:!1,format:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}})}},{1:1,25:25,45:45}]},{},[7])(7)});
 
 
 
 
 
 
 
 
 
 
admin/assets/js/admin-thumbnail.js CHANGED
@@ -1,58 +1,74 @@
1
- /**
2
- * This function:
3
- *
4
- * Generates a custom image uploader / selector tied to a post where the click action originated
5
- * Upon clicking "Use as thumbnail" the image selected is set to be the post thumbnail
6
- * A thumbnail image is then shown in the All Posts / All Pages / All Custom Post types Admin Dashboard view
7
- *
8
- * @since 1.0.0
9
- *
10
- * global ajaxurl, apt_thumb - language array
11
- */
12
- (function ($) {
13
- jQuery(document).ready(function ($) {
14
-
15
- jQuery(document).on('click', '#hide_notice_auto_generation', function (e) {
16
- e.preventDefault();
17
- jQuery('#notice_auto_generation').animate({opacity: 'hide', height: 'hide'}, 200);
18
- jQuery.post(ajaxurl, {
19
- action: 'hide_notice_auto_generation',
20
- }).done(function (html) {
21
- console.log('Hided');
22
- });
23
-
24
- });
25
-
26
- //Отображение окна со всеми картинками в тексте поста
27
- window.aptModalShow = function (that, postid, wpnonce) {
28
-
29
- var $modal = $('#post_imgs_' + postid).find('> div');
30
- var $ajaximg = $('#post_imgs_' + postid).find('> span');
31
- //$modal.html('');
32
- $('.imgs').find('> div').html(''); //очистка всех модальных окон, чтобы исключить конфликты
33
-
34
- tb_show(apt.modal_title, '/?TB_inline&inlineId=post_imgs_' + postid + '&width=650&height=' + (window.innerHeight - 150));
35
- //tb_show(apt.modal_title, '/?TB_inline&inlineId=post_imgs_' + postid + '&width=650&height=500');
36
-
37
- $ajaximg.show();
38
- // AJAX запрос для загрузки контента окна
39
- jQuery.post(ajaxurl, {
40
- action: apt.action_column_get_thumbnails,
41
- post_id: postid,
42
- _ajax_nonce: wpnonce,
43
- }).done(function (html) {
44
- $ajaximg.hide();
45
- $modal.html(html);
46
- /*
47
- $('#wapt_thumbs').autocolumnlist({
48
- columns: 3,
49
- classname: 'wapt-grid-item',
50
- min: 1
51
- });
52
- */
53
- });
54
-
55
- //return false; // для ссылки
56
- }
57
- });
58
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * This function:
3
+ *
4
+ * Generates a custom image uploader / selector tied to a post where the click action originated
5
+ * Upon clicking "Use as thumbnail" the image selected is set to be the post thumbnail
6
+ * A thumbnail image is then shown in the All Posts / All Pages / All Custom Post types Admin Dashboard view
7
+ *
8
+ * @since 1.0.0
9
+ *
10
+ * global ajaxurl, apt_thumb - language array
11
+ */
12
+ (function ($) {
13
+ jQuery(document).ready(
14
+ function ($) {
15
+
16
+ jQuery(document).on(
17
+ 'click',
18
+ '#hide_notice_auto_generation',
19
+ function (e) {
20
+ e.preventDefault();
21
+ jQuery('#notice_auto_generation').animate({opacity: 'hide', height: 'hide'}, 200);
22
+ jQuery.post(
23
+ ajaxurl,
24
+ {
25
+ action: 'hide_notice_auto_generation',
26
+ }
27
+ ).done(
28
+ function (html) {
29
+ console.log('Hided');
30
+ }
31
+ );
32
+
33
+ }
34
+ );
35
+
36
+ //Отображение окна со всеми картинками в тексте поста
37
+ window.aptModalShow = function (that, postid, wpnonce) {
38
+
39
+ var $modal = $('#post_imgs_' + postid).find('> div');
40
+ var $ajaximg = $('#post_imgs_' + postid).find('> span');
41
+ //$modal.html('');
42
+ $('.imgs').find('> div').html(''); //очистка всех модальных окон, чтобы исключить конфликты
43
+
44
+ tb_show(apt.modal_title, '/?TB_inline&inlineId=post_imgs_' + postid + '&width=650&height=' + (window.innerHeight - 150));
45
+ //tb_show(apt.modal_title, '/?TB_inline&inlineId=post_imgs_' + postid + '&width=650&height=500');
46
+
47
+ $ajaximg.show();
48
+ // AJAX запрос для загрузки контента окна
49
+ jQuery.post(
50
+ ajaxurl,
51
+ {
52
+ action: apt.action_column_get_thumbnails,
53
+ post_id: postid,
54
+ _ajax_nonce: wpnonce,
55
+ }
56
+ ).done(
57
+ function (html) {
58
+ $ajaximg.hide();
59
+ $modal.html(html);
60
+ /*
61
+ $('#wapt_thumbs').autocolumnlist({
62
+ columns: 3,
63
+ classname: 'wapt-grid-item',
64
+ min: 1
65
+ });
66
+ */
67
+ }
68
+ );
69
+
70
+ //return false; // для ссылки
71
+ }
72
+ }
73
+ );
74
+ })(jQuery);
admin/assets/js/generate.js CHANGED
@@ -122,7 +122,7 @@ jQuery(function ($) {
122
  self.genpostthumbsbar.hide();
123
  self.genpostthumbsbar.progressbar("value", 0);
124
  self.button_running(self.startGenButton);
125
- noticeId = $.wbcr_factory_templates_105.app.showNotice("<p><strong>" + wapt.i8n_processed_posts + " 0</strong></p>", 'success');
126
  }, 500);
127
  return;
128
  }
@@ -209,7 +209,7 @@ jQuery(function ($) {
209
  self.genpostthumbsbar.progressbar("value", 0);
210
  self.button_running(self.startUnsetButton);
211
 
212
- noticeId = $.wbcr_factory_templates_105.app.showNotice(wapt.i8n_processed_posts + self.rt_total + "<br>" + wapt.i8n_del_images + self.posted_count, 'success');
213
  }, 500);
214
  }
215
  });
@@ -244,7 +244,7 @@ jQuery(function ($) {
244
  //self.genpostthumbsbar.progressbar("value", 0);
245
  self.button_running(self.startGenButton);
246
 
247
- noticeId = $.wbcr_factory_templates_105.app.showNotice(wapt.i8n_processed_posts + self.rt_total + "<br>" + wapt.i8n_set_images + self.posted_count, 'success');
248
  }, 500);
249
  }
250
  });
122
  self.genpostthumbsbar.hide();
123
  self.genpostthumbsbar.progressbar("value", 0);
124
  self.button_running(self.startGenButton);
125
+ noticeId = $.wbcr_factory_templates_106.app.showNotice("<p><strong>" + wapt.i8n_processed_posts + " 0</strong></p>", 'success');
126
  }, 500);
127
  return;
128
  }
209
  self.genpostthumbsbar.progressbar("value", 0);
210
  self.button_running(self.startUnsetButton);
211
 
212
+ noticeId = $.wbcr_factory_templates_106.app.showNotice(wapt.i8n_processed_posts + self.rt_total + "<br>" + wapt.i8n_del_images + self.posted_count, 'success');
213
  }, 500);
214
  }
215
  });
244
  //self.genpostthumbsbar.progressbar("value", 0);
245
  self.button_running(self.startGenButton);
246
 
247
+ noticeId = $.wbcr_factory_templates_106.app.showNotice(wapt.i8n_processed_posts + self.rt_total + "<br>" + wapt.i8n_set_images + self.posted_count, 'success');
248
  }, 500);
249
  }
250
  });
admin/assets/js/license-manager.js CHANGED
@@ -55,7 +55,7 @@ jQuery(function ($) {
55
  }
56
 
57
  if (response.data && response.data.message) {
58
- $.wbcr_factory_templates_105.app.showNotice(response.data.message, 'success');
59
 
60
  window.location.reload();
61
  }
55
  }
56
 
57
  if (response.data && response.data.message) {
58
+ $.wbcr_factory_templates_106.app.showNotice(response.data.message, 'success');
59
 
60
  window.location.reload();
61
  }
admin/assets/js/search-page.js CHANGED
@@ -1,109 +1,124 @@
1
  function findImages(searchEngine, action, nonce, query, page, params, callback) {
2
- params = params || {};
3
-
4
- params['page'] = page || 1;
5
- params['query'] = query;
6
- params['action'] = action
7
- params['nonce'] = nonce;
8
-
9
- showLoader(searchEngine);
10
-
11
- jQuery.post(ajaxurl, params, function(response) {
12
- if(!response.success) {
13
- hideLoader(searchEngine);
14
- jQuery('#' + searchEngine + '_results').html("API: " + response.data.error);
15
- return;
16
- }
17
-
18
- if(response.data.images_count === 0) {
19
- hideLoader(searchEngine);
20
- jQuery('#' + searchEngine + '_results').html(window.wapt_no_hits);
21
- } else {
22
- hideLoader(searchEngine);
23
- showFoundedImages(searchEngine, response.data.images, params.page);
24
- }
25
-
26
- if(typeof callback === 'function') {
27
- callback(response);
28
- }
29
- });
30
  }
31
 
32
  function showLoader(searchEngine) {
33
- jQuery('#loader_flex').show();
34
- jQuery('#page_num_div').show();
35
- jQuery('#prev_page').show();
36
- jQuery('#next_page').show();
37
- jQuery('#' + searchEngine + '_loader_flex').show();
38
- jQuery('#' + searchEngine + '_page_num_div').show();
39
- jQuery('#' + searchEngine + '_prev_page').show();
40
- jQuery('#' + searchEngine + '_next_page').show();
41
  }
42
 
43
  function hideLoader(searchEngine) {
44
- jQuery('#loader_flex').hide();
45
- jQuery('#page_num_div').hide();
46
- jQuery('#prev_page').hide();
47
- jQuery('#next_page').hide();
48
- jQuery('#' + searchEngine + '_loader_flex').hide();
49
- jQuery('#' + searchEngine + '_page_num_div').hide();
50
- jQuery('#' + searchEngine + '_prev_page').hide();
51
- jQuery('#' + searchEngine + '_next_page').hide();
52
  }
53
 
54
  function showFoundedImages(searchEngine, images, page) {
55
- var totalhits = 100; //google limit
56
- if(page > 1) {
57
- jQuery("#prev_page").show();
58
- } else {
59
- jQuery("#prev_page").hide();
60
- }
61
-
62
- if(page < totalhits / 10) {
63
- jQuery("#next_page").show();
64
- } else {
65
- jQuery("#next_page").hide();
66
- }
67
-
68
- jQuery('#page_num_div').html(page);
69
- jQuery('#page_num_div').show();
70
-
71
- var html = '';
72
-
73
- jQuery.each(images, function(key, image) {
74
- html += '<div class="item upload_' + searchEngine + '" ' +
75
- 'data-service="' + searchEngine + '" ' +
76
- 'data-title="' + (image.title || searchEngine + '_image') + '" ' +
77
- 'data-url="' + image.link + '" ' +
78
- 'data-link="' + image.context_link + '" ' +
79
- 'data-w="' + image.image.width + '" ' +
80
- 'data-h="' + image.image.height + '">' +
81
- '<img src="' + image.thumbnail_link + '">' +
82
- '<div class="download"><img src="' + window.wapt_download_svg + '">' +
83
- '<div>' + image.width + '×' + image.height + '<br>' +
84
- '<a href="' + image.context_link + '" target="_blank">' + (image.title || searchEngine + '_image').substr(0, 15) + '</a>' +
85
- '</div>' +
86
- '</div>' +
87
- '</div>';
88
- })
89
-
90
- var resultBlock = jQuery("#" + searchEngine + "_results");
91
- resultBlock.html(resultBlock.html() + html);
92
-
93
- jQuery('#' + searchEngine + '_results.flex-images').flexImages({rowHeight: 160});
94
- jQuery('#loader_flex-'+searchEngine).hide();
95
  }
96
 
97
- function downloadMedia(service, url, query, postId, title, excerpt, nonce, callback) {
98
- jQuery.post(ajaxurl, {
99
- action: 'upload_to_library',
100
- is_upload: '1',
101
- service: service,
102
- image_url: url,
103
- q: query,
104
- postid: postId,
105
- title: title,
106
- excerpt: excerpt,
107
- wpnonce: nonce,
108
- }, callback);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
  }
1
  function findImages(searchEngine, action, nonce, query, page, params, callback) {
2
+ params = params || {};
3
+
4
+ params['page'] = page || 1;
5
+ params['query'] = query;
6
+ params['action'] = action
7
+ params['nonce'] = nonce;
8
+
9
+ showLoader(searchEngine);
10
+
11
+ jQuery.post(ajaxurl, params, function (response) {
12
+ if (!response.success) {
13
+ hideLoader(searchEngine);
14
+ jQuery('#' + searchEngine + '_results').html("API: " + response.data.error);
15
+ return;
16
+ }
17
+
18
+ if (response.data.images_count === 0) {
19
+ hideLoader(searchEngine);
20
+ jQuery('#' + searchEngine + '_results').html(window.wapt_no_hits);
21
+ } else {
22
+ hideLoader(searchEngine);
23
+ showFoundedImages(searchEngine, response.data.images, params.page);
24
+ }
25
+
26
+ if (typeof callback === 'function') {
27
+ callback(response);
28
+ }
29
+ });
30
  }
31
 
32
  function showLoader(searchEngine) {
33
+ jQuery('#loader_flex').show();
34
+ jQuery('#page_num_div').show();
35
+ jQuery('#prev_page').show();
36
+ jQuery('#next_page').show();
37
+ jQuery('#' + searchEngine + '_loader_flex').show();
38
+ jQuery('#' + searchEngine + '_page_num_div').show();
39
+ jQuery('#' + searchEngine + '_prev_page').show();
40
+ jQuery('#' + searchEngine + '_next_page').show();
41
  }
42
 
43
  function hideLoader(searchEngine) {
44
+ jQuery('#loader_flex').hide();
45
+ jQuery('#page_num_div').hide();
46
+ jQuery('#prev_page').hide();
47
+ jQuery('#next_page').hide();
48
+ jQuery('#' + searchEngine + '_loader_flex').hide();
49
+ jQuery('#' + searchEngine + '_page_num_div').hide();
50
+ jQuery('#' + searchEngine + '_prev_page').hide();
51
+ jQuery('#' + searchEngine + '_next_page').hide();
52
  }
53
 
54
  function showFoundedImages(searchEngine, images, page) {
55
+ var totalhits = 100; //google limit
56
+ if (page > 1) {
57
+ jQuery("#prev_page").show();
58
+ } else {
59
+ jQuery("#prev_page").hide();
60
+ }
61
+
62
+ if (page < totalhits / 10) {
63
+ jQuery("#next_page").show();
64
+ } else {
65
+ jQuery("#next_page").hide();
66
+ }
67
+
68
+ jQuery('#page_num_div').html(page);
69
+ jQuery('#page_num_div').show();
70
+
71
+ var html = '';
72
+
73
+ jQuery.each(images, function (key, image) {
74
+ html += '<div class="item upload_' + searchEngine + '" ' +
75
+ 'data-service="' + searchEngine + '" ' +
76
+ 'data-title="' + (image.title || searchEngine + '_image') + '" ' +
77
+ 'data-url="' + image.link + '" ' +
78
+ 'data-link="' + image.context_link + '" ' +
79
+ 'data-w="' + image.image.width + '" ' +
80
+ 'data-h="' + image.image.height + '">' +
81
+ '<img src="' + image.thumbnail_link + '">' +
82
+ '<div class="download"><img src="' + window.wapt_download_svg + '">' +
83
+ '<div>' + image.image.width + '×' + image.image.height + '<br>' +
84
+ '<a href="' + image.context_link + '" target="_blank">' + (image.title || searchEngine + '_image').substr(0, 15) + '</a>' +
85
+ '</div>' +
86
+ '</div>' +
87
+ '</div>';
88
+ });
89
+
90
+ var resultBlock = jQuery("#" + searchEngine + "_results");
91
+ resultBlock.html(resultBlock.html() + html);
92
+
93
+ jQuery('#loader_flex-' + searchEngine).hide();
94
+ jQuery('#' + searchEngine + '_results.flex-images').flexImages({rowHeight: 160});
95
  }
96
 
97
+ function downloadMedia(service, url, query, postId, title, excerpt, nonce, _this) {
98
+ jQuery.post(ajaxurl, {
99
+ action: 'upload_to_library',
100
+ is_upload: '1',
101
+ service: service,
102
+ image_url: url,
103
+ q: query,
104
+ postid: postId,
105
+ title: title,
106
+ excerpt: excerpt,
107
+ wpnonce: nonce,
108
+ }, function (data) {
109
+ _this.removeClass('upload_' + service);
110
+ var err_msg;
111
+
112
+ if (parseInt(data) == data) {
113
+ jQuery('#apt-button-next').prop('disabled', false);
114
+ err_msg = 'DOWNLOADED';
115
+ if (window.cvapt_media_refresh !== undefined) {
116
+ window.parent.window.cvapt_media_refresh();
117
+ }
118
+ } else {
119
+ alert(data);
120
+ err_msg = 'ERROR';
121
+ }
122
+ _this.removeClass('uploading').find('.download img').replaceWith(err_msg);
123
+ });
124
  }
admin/assets/js/upload-font.js CHANGED
@@ -1,10 +1,10 @@
1
  jQuery(function ($) {
2
 
3
- var $element = $(".factory-bootstrap-453 .factory-wapt-fonts");
4
  var upload_button = $('#wapt-upload-button');
5
  var upload_loader = $('#wapt-upload-loader');
6
 
7
- $element.factoryBootstrap453_dropdownControl();
8
 
9
  upload_button.on('click', function (e) {
10
  e.preventDefault();
1
  jQuery(function ($) {
2
 
3
+ var $element = $(".factory-bootstrap-454 .factory-wapt-fonts");
4
  var upload_button = $('#wapt-upload-button');
5
  var upload_loader = $('#wapt-upload-loader');
6
 
7
+ $element.factoryBootstrap454_dropdownControl();
8
 
9
  upload_button.on('click', function (e) {
10
  e.preventDefault();
admin/class-page-logger.php CHANGED
@@ -1,242 +1,240 @@
1
- <?php
2
-
3
- use WBCR\Factory_Templates_105\ImpressiveLite;
4
-
5
- /**
6
- * Class of plugin page. Must be registered in file admin/class-prefix-page.php
7
- *
8
- * @author Artem Prihodko <webtemyk@yandex.ru>
9
- * @copyright (c) 2021, Webcraftic
10
- * @see ImpressiveLite
11
- *
12
- * @version 1.0.0
13
- */
14
-
15
- // Exit if accessed directly
16
- if ( ! defined( 'ABSPATH' ) ) {
17
- exit;
18
- }
19
-
20
- class WAPT_Page_Logger extends Wbcr_FactoryLogger117_Lite {
21
-
22
- /**
23
- * Name of the template to get content of. It will be based on plugins /admin/views/ dir.
24
- * /admin/views/tab-{$template_name}.php
25
- *
26
- * @var string
27
- */
28
- public $template_name = "log";
29
-
30
- /**
31
- * @var string
32
- */
33
- public $custom_target = "admin.php";
34
-
35
- /**
36
- * {@inheritdoc}
37
- */
38
- public $show_right_sidebar_in_options = false;
39
-
40
- /**
41
- * {@inheritdoc}
42
- */
43
- public $show_search_options_form = false;
44
-
45
- /**
46
- * Show this page in tabs?
47
- * default: true
48
- */
49
- public $show_menu_tab = true;
50
-
51
- /**
52
- * Title for tab in menu
53
- */
54
- public $menu_tab_title;
55
-
56
- public function __construct( $plugin ) {
57
- $this->menu_tab_title = $this->menu_tab_title ?? $this->menu_title;
58
-
59
- parent::__construct( $plugin );
60
- }
61
-
62
- /**
63
- * Render and return content of the template.
64
- * /admin/views/tab-{$template_name}.php
65
- *
66
- * @return mixed Content of the page
67
- */
68
- public function render( $name = '' ) {
69
- if ( $name == '' ) {
70
- $name = $this->template_name;
71
- }
72
- ob_start();
73
- if ( is_callable( $name ) ) {
74
- echo call_user_func( $name );
75
- } elseif ( strpos( $name, DIRECTORY_SEPARATOR ) !== false && ( is_file( $name ) || is_file( $name . '.php' ) ) ) {
76
- if ( is_file( $name ) ) {
77
- $path = $name;
78
- } else {
79
- $path = $name . '.php';
80
- }
81
- } else {
82
- $path = WAPT_PLUGIN_DIR . "/admin/views/tab-{$name}.php";
83
- }
84
- if ( ! is_file( $path ) ) {
85
- return '';
86
- }
87
- include $path;
88
- $content = ob_get_contents();
89
- ob_end_clean();
90
-
91
- return $content;
92
- }
93
-
94
- public function assets( $scripts, $styles ) {
95
- parent::assets( $scripts, $styles );
96
-
97
- $this->scripts->request( [
98
- 'control.checkbox',
99
- 'control.dropdown',
100
- 'control.integer',
101
- 'plugin.nouislider',
102
- 'bootstrap.dropdown'
103
- ], 'bootstrap' );
104
-
105
- $this->styles->request( [
106
- 'bootstrap.core',
107
- 'bootstrap.form-group',
108
- 'bootstrap.separator',
109
- 'control.dropdown',
110
- 'control.checkbox',
111
- 'control.integer',
112
- 'plugin.nouislider',
113
- ], 'bootstrap' );
114
- }
115
-
116
- /**
117
- * Show rendered template - $template_name
118
- */
119
- public function showPageContent() {
120
- parent::showPageContent();
121
- }
122
-
123
- public function getPluginSlug() {
124
- $plugin_slug = $this->plugin->getPluginInfoAttr( 'updates_settings' );
125
-
126
- return $plugin_slug['slug'] ?? WAPT_PLUGIN_SLUG;
127
- }
128
-
129
- /**
130
- * @param string $position
131
- *
132
- * @return mixed|void
133
- */
134
- protected function getPageWidgets( $position = 'bottom' ) {
135
- $widgets = [];
136
-
137
- if ( $position == 'bottom' ) {
138
- $widgets['rating_widget'] = $this->getRatingWidget( [] );
139
- $widgets['support_widget'] = $this->getSupportWidget();
140
- }
141
-
142
- /**
143
- * @since 3.8.2 - добавлен
144
- */
145
- $widgets = apply_filters( 'wbcr/factory/pages/impressive_lite/widgets', $widgets, $position, $this->plugin, $this );
146
-
147
- return $widgets;
148
- }
149
-
150
- /**
151
- * Создает html разметку виджета рейтинга
152
- *
153
- * @param array $args
154
- *
155
- * @author Artem Prihodko <webtemyk@yandex.ru>
156
- */
157
- public function showRatingWidget( array $args ) {
158
- $plugin_slug = $this->getPluginSlug();
159
-
160
- if ( ! isset( $args[0] ) || empty( $args[0] ) ) {
161
- $page_url = "https://wordpress.org/support/plugin/{$plugin_slug}/reviews/#new-post";
162
- } else {
163
- $page_url = $args[0];
164
- }
165
-
166
- $page_url = apply_filters( 'wbcr_factory_pages_451_implite_rating_widget_url', $page_url, $this->plugin->getPluginName(), $this->getResultId() );
167
-
168
- ?>
169
- <div class="wbcr-factory-sidebar-widget">
170
- <p>
171
- <strong><?php _e( 'Do you want the plugin to improved and update?', 'wbcr_factory_templates_105' ); ?></strong>
172
- </p>
173
- <p><?php _e( 'Help the author, leave a review on wordpress.org. Thanks to feedback, I will know that the plugin is really useful to you and is needed.', 'wbcr_factory_templates_105' ); ?></p>
174
- <p><?php _e( 'And also write your ideas on how to extend or improve the plugin.', 'wbcr_factory_templates_105' ); ?></p>
175
- <p>
176
- <i class="wbcr-factory-icon-5stars"></i>
177
- <a href="<?php echo $page_url; ?>" title="Go rate us" target="_blank">
178
- <strong><?php _e( 'Go rate us and push ideas', 'wbcr_factory_templates_105' ); ?></strong>
179
- </a>
180
- </p>
181
- </div>
182
- <?php
183
- }
184
-
185
- /**
186
- * Создает html разметку виджета поддержки
187
- *
188
- * @author @author Artem Prihodko <webtemyk@yandex.ru>
189
- */
190
- public function showSupportWidget() {
191
- $plugin_slug = $this->getPluginSlug();
192
-
193
- $free_support_url = "https://wordpress.org/support/plugin/{$plugin_slug}";
194
- $hot_support_url = $this->plugin->get_support()->get_contacts_url();
195
-
196
- ?>
197
- <div id="wbcr-clr-support-widget" class="wbcr-factory-sidebar-widget">
198
- <p><strong><?php _e( 'Having Issues?', 'wbcr_factory_templates_105' ); ?></strong></p>
199
- <div class="wbcr-clr-support-widget-body">
200
- <p>
201
- <?php _e( 'We provide free support for this plugin. If you are pushed with a problem, just create a new ticket. We will definitely help you!', 'wbcr_factory_templates_105' ); ?>
202
- </p>
203
- <ul>
204
- <li><span class="dashicons dashicons-sos"></span>
205
- <a href="<?php echo $free_support_url; ?>" target="_blank"
206
- rel="noopener"><?php _e( 'Get starting free support', 'wbcr_factory_templates_105' ); ?></a>
207
- </li>
208
- <li style="margin-top: 15px;background: #fff4f1;padding: 10px;color: #a58074;">
209
- <span class="dashicons dashicons-warning"></span>
210
- <?php printf( __( 'If you find a php error or a vulnerability in plugin, you can <a href="%s" target="_blank" rel="noopener">create ticket</a> in hot support that we responded instantly.', 'wbcr_factory_templates_105' ), $hot_support_url ); ?>
211
- </li>
212
- </ul>
213
- </div>
214
- </div>
215
- <?php
216
- }
217
-
218
- /**
219
- * @return string
220
- */
221
- public function getMenuSubTitle() {
222
- $menu_title = $this->menu_tab_title ?? $this->menu_title ?? $this->page_title;
223
-
224
- return apply_filters( 'wbcr/factory/pages/impressive_lite/menu_title', $menu_title, $this->plugin->getPluginName(), $this->id );
225
- }
226
-
227
- public static function instruction( $title, $html ) {
228
- $return = "<div class='form-group form-group-textbox'>
229
- <label for='' class='col-sm-4 control-label'>{$title}</label>
230
- <div class='control-group col-sm-8'>
231
- <div class='help-block'>
232
- {$html}
233
- </div>
234
- </div>
235
- </div>";
236
-
237
- return $return;
238
- }
239
-
240
- }
241
-
242
-
1
+ <?php
2
+
3
+ use WBCR\Factory_Templates_106\ImpressiveLite;
4
+
5
+ /**
6
+ * Class of plugin page. Must be registered in file admin/class-prefix-page.php
7
+ *
8
+ * @author Artem Prihodko <webtemyk@yandex.ru>
9
+ * @copyright (c) 2021, Webcraftic
10
+ * @see ImpressiveLite
11
+ *
12
+ * @version 1.0.0
13
+ */
14
+
15
+ // Exit if accessed directly
16
+ if ( ! defined( 'ABSPATH' ) ) {
17
+ exit;
18
+ }
19
+
20
+ class WAPT_Page_Logger extends Wbcr_FactoryLogger118_Lite {
21
+
22
+ /**
23
+ * Name of the template to get content of. It will be based on plugins /admin/views/ dir.
24
+ * /admin/views/tab-{$template_name}.php
25
+ *
26
+ * @var string
27
+ */
28
+ public $template_name = 'log';
29
+
30
+ /**
31
+ * @var string
32
+ */
33
+ public $custom_target = 'admin.php';
34
+
35
+ /**
36
+ * {@inheritdoc}
37
+ */
38
+ public $show_right_sidebar_in_options = false;
39
+
40
+ /**
41
+ * {@inheritdoc}
42
+ */
43
+ public $show_search_options_form = false;
44
+
45
+ /**
46
+ * Show this page in tabs?
47
+ * default: true
48
+ */
49
+ public $show_menu_tab = true;
50
+
51
+ /**
52
+ * Title for tab in menu
53
+ */
54
+ public $menu_tab_title;
55
+
56
+ public function __construct( $plugin ) {
57
+ $this->menu_tab_title = $this->menu_tab_title ?? $this->menu_title;
58
+
59
+ parent::__construct( $plugin );
60
+ }
61
+
62
+ /**
63
+ * Render and return content of the template.
64
+ * /admin/views/tab-{$template_name}.php
65
+ *
66
+ * @param string $name template name
67
+ *
68
+ * @return mixed Content of the page
69
+ */
70
+ public function render( $name = '' ) {
71
+ if ( '' === $name ) {
72
+ $name = $this->template_name;
73
+ }
74
+ ob_start();
75
+ if ( strpos( $name, DIRECTORY_SEPARATOR ) !== false && ( is_file( $name ) || is_file( $name . '.php' ) ) ) {
76
+ if ( is_file( $name ) ) {
77
+ $path = $name;
78
+ } else {
79
+ $path = $name . '.php';
80
+ }
81
+ } else {
82
+ $path = WAPT_PLUGIN_DIR . "/admin/views/tab-{$name}.php";
83
+ }
84
+ if ( ! is_file( $path ) ) {
85
+ return '';
86
+ }
87
+ include $path;
88
+ $content = ob_get_contents();
89
+ ob_end_clean();
90
+
91
+ return $content;
92
+ }
93
+
94
+ public function assets( $scripts, $styles ) {
95
+ parent::assets( $scripts, $styles );
96
+
97
+ $this->scripts->request( [
98
+ 'control.checkbox',
99
+ 'control.dropdown',
100
+ 'control.integer',
101
+ 'plugin.nouislider',
102
+ 'bootstrap.dropdown',
103
+ ], 'bootstrap' );
104
+
105
+ $this->styles->request( [
106
+ 'bootstrap.core',
107
+ 'bootstrap.form-group',
108
+ 'bootstrap.separator',
109
+ 'control.dropdown',
110
+ 'control.checkbox',
111
+ 'control.integer',
112
+ 'plugin.nouislider',
113
+ ], 'bootstrap' );
114
+ }
115
+
116
+ /**
117
+ * Show rendered template - $template_name
118
+ */
119
+ public function showPageContent() {
120
+ parent::showPageContent();
121
+ }
122
+
123
+ public function getPluginSlug() {
124
+ $plugin_slug = $this->plugin->getPluginInfoAttr( 'updates_settings' );
125
+
126
+ return $plugin_slug['slug'] ?? WAPT_PLUGIN_SLUG;
127
+ }
128
+
129
+ /**
130
+ * @param string $position
131
+ *
132
+ * @return mixed|void
133
+ */
134
+ protected function getPageWidgets( $position = 'bottom' ) {
135
+ $widgets = [];
136
+
137
+ if ( 'bottom' === $position ) {
138
+ $widgets['rating_widget'] = $this->getRatingWidget( [] );
139
+ $widgets['support_widget'] = $this->getSupportWidget();
140
+ }
141
+
142
+ /**
143
+ * @since 3.8.2 - добавлен
144
+ */
145
+ $widgets = apply_filters( 'wbcr/factory/pages/impressive_lite/widgets', $widgets, $position, $this->plugin, $this );
146
+
147
+ return $widgets;
148
+ }
149
+
150
+ /**
151
+ * Создает html разметку виджета рейтинга
152
+ *
153
+ * @param array $args Args
154
+ *
155
+ * @author Artem Prihodko <webtemyk@yandex.ru>
156
+ */
157
+ public function showRatingWidget( array $args ) {
158
+ $plugin_slug = $this->getPluginSlug();
159
+
160
+ if ( ! isset( $args[0] ) || empty( $args[0] ) ) {
161
+ $page_url = "https://wordpress.org/support/plugin/{$plugin_slug}/reviews/#new-post";
162
+ } else {
163
+ $page_url = $args[0];
164
+ }
165
+
166
+ $page_url = apply_filters( 'wbcr_factory_pages_452_implite_rating_widget_url', $page_url, $this->plugin->getPluginName(), $this->getResultId() );
167
+
168
+ ?>
169
+ <div class="wbcr-factory-sidebar-widget">
170
+ <p>
171
+ <strong><?php esc_html_e( 'Do you want the plugin to improved and update?', 'wbcr_factory_templates_106' ); ?></strong>
172
+ </p>
173
+ <p><?php esc_html_e( 'Help the author, leave a review on wordpress.org. Thanks to feedback, I will know that the plugin is really useful to you and is needed.', 'wbcr_factory_templates_106' ); ?></p>
174
+ <p><?php esc_html_e( 'And also write your ideas on how to extend or improve the plugin.', 'wbcr_factory_templates_106' ); ?></p>
175
+ <p>
176
+ <i class="wbcr-factory-icon-5stars"></i>
177
+ <a href="<?php echo esc_url_raw( $page_url ); ?>" title="Go rate us" target="_blank">
178
+ <strong><?php esc_html_e( 'Go rate us and push ideas', 'wbcr_factory_templates_106' ); ?></strong>
179
+ </a>
180
+ </p>
181
+ </div>
182
+ <?php
183
+ }
184
+
185
+ /**
186
+ * Создает html разметку виджета поддержки
187
+ *
188
+ * @author @author Artem Prihodko <webtemyk@yandex.ru>
189
+ */
190
+ public function showSupportWidget() {
191
+ $plugin_slug = $this->getPluginSlug();
192
+
193
+ $free_support_url = "https://wordpress.org/support/plugin/{$plugin_slug}";
194
+ $hot_support_url = $this->plugin->get_support()->get_contacts_url();
195
+
196
+ ?>
197
+ <div id="wbcr-clr-support-widget" class="wbcr-factory-sidebar-widget">
198
+ <p><strong><?php esc_html_e( 'Having Issues?', 'wbcr_factory_templates_106' ); ?></strong></p>
199
+ <div class="wbcr-clr-support-widget-body">
200
+ <p>
201
+ <?php esc_html_e( 'We provide free support for this plugin. If you are pushed with a problem, just create a new ticket. We will definitely help you!', 'wbcr_factory_templates_106' ); ?>
202
+ </p>
203
+ <ul>
204
+ <li><span class="dashicons dashicons-sos"></span>
205
+ <a href="<?php echo esc_url_raw( $free_support_url ); ?>" target="_blank"
206
+ rel="noopener"><?php esc_html_e( 'Get starting free support', 'wbcr_factory_templates_106' ); ?></a>
207
+ </li>
208
+ <li style="margin-top: 15px;background: #fff4f1;padding: 10px;color: #a58074;">
209
+ <span class="dashicons dashicons-warning"></span>
210
+ <?php printf( wp_kses_post( 'If you find a php error or a vulnerability in plugin, you can <a href="%s" target="_blank" rel="noopener">create ticket</a> in hot support that we responded instantly.', 'wbcr_factory_templates_106' ), esc_url_raw( $hot_support_url ) ); ?>
211
+ </li>
212
+ </ul>
213
+ </div>
214
+ </div>
215
+ <?php
216
+ }
217
+
218
+ /**
219
+ * @return string
220
+ */
221
+ public function getMenuSubTitle() {
222
+ $menu_title = $this->menu_tab_title ?? $this->menu_title ?? $this->page_title;
223
+
224
+ return apply_filters( 'wbcr/factory/pages/impressive_lite/menu_title', $menu_title, $this->plugin->getPluginName(), $this->id );
225
+ }
226
+
227
+ public static function instruction( $title, $html ) {
228
+ $return = "<div class='form-group form-group-textbox'>
229
+ <label for='' class='col-sm-4 control-label'>{$title}</label>
230
+ <div class='control-group col-sm-8'>
231
+ <div class='help-block'>
232
+ {$html}
233
+ </div>
234
+ </div>
235
+ </div>";
236
+
237
+ return $return;
238
+ }
239
+
240
+ }
 
 
admin/class-page.php CHANGED
@@ -1,292 +1,298 @@
1
- <?php
2
-
3
- use WBCR\Factory_Templates_105\ImpressiveLite;
4
-
5
- /**
6
- * Class of plugin page. Must be registered in file admin/class-prefix-page.php
7
- *
8
- * @author Artem Prihodko <webtemyk@yandex.ru>
9
- * @copyright (c) 2021, Webcraftic
10
- * @see ImpressiveLite
11
- *
12
- * @version 1.0.0
13
- */
14
-
15
- // Exit if accessed directly
16
- if ( ! defined( 'ABSPATH' ) ) {
17
- exit;
18
- }
19
-
20
- class WAPT_Page extends ImpressiveLite {
21
-
22
- /**
23
- * Name of the template to get content of. It will be based on plugins /admin/views/ dir.
24
- * /admin/views/tab-{$template_name}.php
25
- *
26
- * @var string
27
- */
28
- public $template_name = "main";
29
-
30
- /**
31
- * @var string
32
- */
33
- public $custom_target = "admin.php";
34
-
35
- /**
36
- * {@inheritdoc}
37
- */
38
- public $show_right_sidebar_in_options = true;
39
-
40
- /**
41
- * {@inheritdoc}
42
- */
43
- public $show_search_options_form = false;
44
-
45
- /**
46
- * Show this page in tabs?
47
- * default: true
48
- */
49
- public $show_menu_tab = true;
50
-
51
- /**
52
- * Title for tab in menu
53
- */
54
- public $menu_tab_title;
55
-
56
- public function __construct( $plugin ) {
57
- $this->menu_tab_title = $this->menu_tab_title ?? $this->menu_title;
58
-
59
- parent::__construct( $plugin );
60
- }
61
-
62
- /**
63
- * Render and return content of the template.
64
- * /admin/views/tab-{$template_name}.php
65
- *
66
- * @return mixed Content of the page
67
- */
68
- public function render( $name = '', $data = [] ) {
69
- if ( $name == '' ) {
70
- $name = $this->template_name;
71
- }
72
- ob_start();
73
- if ( is_callable( $name ) ) {
74
- echo call_user_func( $name );
75
- } elseif ( strpos( $name, DIRECTORY_SEPARATOR ) !== false && ( is_file( $name ) || is_file( $name . '.php' ) ) ) {
76
- if ( is_file( $name ) ) {
77
- $path = $name;
78
- } else {
79
- $path = $name . '.php';
80
- }
81
- } else {
82
- $path = WAPT_PLUGIN_DIR . "/admin/views/tab-{$name}.php";
83
- }
84
- if ( ! is_file( $path ) ) {
85
- return '';
86
- }
87
- include $path;
88
- $content = ob_get_contents();
89
- ob_end_clean();
90
-
91
- return $content;
92
- }
93
-
94
- public function assets( $scripts, $styles ) {
95
- parent::assets( $scripts, $styles );
96
-
97
- $this->scripts->request( [
98
- 'control.checkbox',
99
- 'control.dropdown',
100
- 'control.integer',
101
- 'plugin.nouislider',
102
- 'bootstrap.dropdown'
103
- ], 'bootstrap' );
104
-
105
- $this->styles->request( [
106
- 'bootstrap.core',
107
- 'bootstrap.form-group',
108
- 'bootstrap.separator',
109
- 'control.dropdown',
110
- 'control.checkbox',
111
- 'control.integer',
112
- 'plugin.nouislider',
113
- ], 'bootstrap' );
114
- }
115
-
116
- public function getPluginTitle() {
117
- $logo = "<div class='wapt-logo-title'>&nbsp;</div>";
118
-
119
- return $logo . $this->plugin->getPluginTitle();
120
- }
121
-
122
- /**
123
- * Show rendered template - $template_name
124
- */
125
- public function showPageContent() {
126
- echo $this->render();
127
- }
128
-
129
- public function getPluginSlug() {
130
- $plugin_slug = $this->plugin->getPluginInfoAttr( 'updates_settings' );
131
-
132
- return $plugin_slug['slug'] ?? WAPT_PLUGIN_SLUG;
133
- }
134
-
135
- /**
136
- * Get list of post types
137
- *
138
- * @return array
139
- */
140
- public function getPostTypes() {
141
- $args = [ 'public' => true ];
142
- if ( $this->plugin->isNetworkActive() ) {
143
- $args['_builtin'] = true;
144
- }
145
- $types = get_post_types( $args, 'objects' );
146
-
147
- $post_types = [];
148
- foreach ( $types as $type_name => $type ) {
149
- if ( $type_name == 'attachment' ) {
150
- continue;
151
- }
152
-
153
- $post_types[] = [ $type_name, $type->label ];
154
- }
155
-
156
- return $post_types;
157
- }
158
-
159
- /**
160
- * @param string $position
161
- *
162
- * @return mixed|void
163
- */
164
- protected function getPageWidgets( $position = 'bottom' ) {
165
- $widgets = [];
166
-
167
- if ( $position == 'bottom' ) {
168
- $widgets['rating_widget'] = $this->getRatingWidget( [] );
169
- $widgets['support_widget'] = $this->getSupportWidget();
170
- }
171
-
172
- /**
173
- * @since 3.8.2 - добавлен
174
- */
175
- $widgets = apply_filters( 'wbcr/factory/pages/impressive_lite/widgets', $widgets, $position, $this->plugin, $this );
176
-
177
- return $widgets;
178
- }
179
-
180
- /**
181
- * Создает html разметку виджета рейтинга
182
- *
183
- * @param array $args
184
- *
185
- * @author Artem Prihodko <webtemyk@yandex.ru>
186
- */
187
- public function showRatingWidget( array $args ) {
188
- $plugin_slug = $this->getPluginSlug();
189
-
190
- if ( ! isset( $args[0] ) || empty( $args[0] ) ) {
191
- $page_url = "https://wordpress.org/support/plugin/{$plugin_slug}/reviews/#new-post";
192
- } else {
193
- $page_url = $args[0];
194
- }
195
-
196
- $page_url = apply_filters( 'wbcr_factory_pages_451_implite_rating_widget_url', $page_url, $this->plugin->getPluginName(), $this->getResultId() );
197
-
198
- ?>
199
- <div class="wbcr-factory-sidebar-widget">
200
- <p>
201
- <strong><?php _e( 'Do you want the plugin to improved and update?', 'wbcr_factory_templates_105' ); ?></strong>
202
- </p>
203
- <p><?php _e( 'Help the author, leave a review on wordpress.org. Thanks to feedback, I will know that the plugin is really useful to you and is needed.', 'wbcr_factory_templates_105' ); ?></p>
204
- <p><?php _e( 'And also write your ideas on how to extend or improve the plugin.', 'wbcr_factory_templates_105' ); ?></p>
205
- <p>
206
- <i class="wbcr-factory-icon-5stars"></i>
207
- <a href="<?php echo $page_url; ?>" title="Go rate us" target="_blank">
208
- <strong><?php _e( 'Go rate us and push ideas', 'wbcr_factory_templates_105' ); ?></strong>
209
- </a>
210
- </p>
211
- </div>
212
- <?php
213
- }
214
-
215
- /**
216
- * Создает html разметку виджета поддержки
217
- *
218
- * @author @author Artem Prihodko <webtemyk@yandex.ru>
219
- */
220
- public function showSupportWidget() {
221
- $plugin_slug = $this->getPluginSlug();
222
-
223
- $free_support_url = "https://wordpress.org/support/plugin/{$plugin_slug}";
224
- $hot_support_url = $this->plugin->get_support()->get_contacts_url();
225
-
226
- ?>
227
- <div id="wbcr-clr-support-widget" class="wbcr-factory-sidebar-widget">
228
- <p><strong><?php _e( 'Having Issues?', 'wbcr_factory_templates_105' ); ?></strong></p>
229
- <div class="wbcr-clr-support-widget-body">
230
- <p>
231
- <?php _e( 'We provide free support for this plugin. If you are pushed with a problem, just create a new ticket. We will definitely help you!', 'wbcr_factory_templates_105' ); ?>
232
- </p>
233
- <ul>
234
- <li><span class="dashicons dashicons-sos"></span>
235
- <a href="<?php echo $free_support_url; ?>" target="_blank"
236
- rel="noopener"><?php _e( 'Get starting free support', 'wbcr_factory_templates_105' ); ?></a>
237
- </li>
238
- <li style="margin-top: 15px;background: #fff4f1;padding: 10px;color: #a58074;">
239
- <span class="dashicons dashicons-warning"></span>
240
- <?php printf( __( 'If you find a php error or a vulnerability in plugin, you can <a href="%s" target="_blank" rel="noopener">create ticket</a> in hot support that we responded instantly.', 'wbcr_factory_templates_105' ), $hot_support_url ); ?>
241
- </li>
242
- </ul>
243
- </div>
244
- </div>
245
- <?php
246
- }
247
-
248
- /**
249
- * @return string
250
- */
251
- public function getMenuSubTitle() {
252
- $menu_title = $this->menu_tab_title ?? $this->menu_title ?? $this->page_title;
253
-
254
- return apply_filters( 'wbcr/factory/pages/impressive_lite/menu_title', $menu_title, $this->plugin->getPluginName(), $this->id );
255
- }
256
-
257
- public static function instruction( $title, $html ) {
258
- $return = "<div class='form-group form-group-textbox'>
259
- <label for='' class='col-sm-4 control-label'>{$title}</label>
260
- <div class='control-group col-sm-8'>
261
- <div class='help-block'>
262
- {$html}
263
- </div>
264
- </div>
265
- </div>";
266
-
267
- return $return;
268
- }
269
-
270
- public static function group_header( $title, $description ) {
271
- $return = "<div class='wbcr-factory-page-group-header'><strong>{$title}</strong><p>{$description}</p></div>";
272
-
273
- return $return;
274
- }
275
-
276
- public function isShowRightSidebar() {
277
- if ( ! WAPT_Plugin::app()->is_premium() ) {
278
- $sidebar = WAPT_Plugin::app()->get_adverts_manager()->render_placement( 'right_sidebar' );
279
-
280
- return $sidebar ? true : false;
281
- }
282
-
283
- return false;
284
- }
285
-
286
- public function showRightSidebar() {
287
- echo WAPT_Plugin::app()->get_adverts_manager()->render_placement( 'right_sidebar' );
288
- }
289
-
290
- }
291
-
292
-
 
 
 
 
 
 
1
+ <?php
2
+
3
+ use WBCR\Factory_Templates_106\ImpressiveLite;
4
+
5
+ /**
6
+ * Class of plugin page. Must be registered in file admin/class-prefix-page.php
7
+ *
8
+ * @author Artem Prihodko <webtemyk@yandex.ru>
9
+ * @copyright (c) 2021, Webcraftic
10
+ * @see ImpressiveLite
11
+ *
12
+ * @version 1.0.0
13
+ */
14
+
15
+ // Exit if accessed directly
16
+ if ( ! defined( 'ABSPATH' ) ) {
17
+ exit;
18
+ }
19
+
20
+ class WAPT_Page extends ImpressiveLite {
21
+
22
+ /**
23
+ * Name of the template to get content of. It will be based on plugins /admin/views/ dir.
24
+ * /admin/views/tab-{$template_name}.php
25
+ *
26
+ * @var string
27
+ */
28
+ public $template_name = 'main';
29
+
30
+ /**
31
+ * @var string
32
+ */
33
+ public $custom_target = 'admin.php';
34
+
35
+ /**
36
+ * {@inheritdoc}
37
+ */
38
+ public $show_right_sidebar_in_options = true;
39
+
40
+ /**
41
+ * {@inheritdoc}
42
+ */
43
+ public $show_search_options_form = false;
44
+
45
+ /**
46
+ * Show this page in tabs?
47
+ * default: true
48
+ */
49
+ public $show_menu_tab = true;
50
+
51
+ /**
52
+ * Title for tab in menu
53
+ */
54
+ public $menu_tab_title;
55
+
56
+ public function __construct( $plugin ) {
57
+ $this->menu_tab_title = $this->menu_tab_title ?? $this->menu_title;
58
+
59
+ parent::__construct( $plugin );
60
+ }
61
+
62
+ /**
63
+ * Render and return content of the template.
64
+ * /admin/views/tab-{$template_name}.php
65
+ *
66
+ * @return mixed Content of the page
67
+ */
68
+ public function render( $name = '', $data = [] ) {
69
+ if ( '' === $name ) {
70
+ $name = $this->template_name;
71
+ }
72
+ ob_start();
73
+ if ( strpos( $name, DIRECTORY_SEPARATOR ) !== false && ( is_file( $name ) || is_file( $name . '.php' ) ) ) {
74
+ if ( is_file( $name ) ) {
75
+ $path = $name;
76
+ } else {
77
+ $path = $name . '.php';
78
+ }
79
+ } else {
80
+ $path = WAPT_PLUGIN_DIR . "/admin/views/tab-{$name}.php";
81
+ }
82
+ if ( ! is_file( $path ) ) {
83
+ return '';
84
+ }
85
+ include $path;
86
+ $content = ob_get_contents();
87
+ ob_end_clean();
88
+
89
+ return $content;
90
+ }
91
+
92
+ public function assets( $scripts, $styles ) {
93
+ parent::assets( $scripts, $styles );
94
+
95
+ $this->scripts->request( [
96
+ 'control.checkbox',
97
+ 'control.dropdown',
98
+ 'control.integer',
99
+ 'plugin.nouislider',
100
+ 'bootstrap.dropdown',
101
+ ], 'bootstrap' );
102
+
103
+ $this->styles->request( [
104
+ 'bootstrap.core',
105
+ 'bootstrap.form-group',
106
+ 'bootstrap.separator',
107
+ 'control.dropdown',
108
+ 'control.checkbox',
109
+ 'control.integer',
110
+ 'plugin.nouislider',
111
+ ], 'bootstrap' );
112
+ }
113
+
114
+ public function getPluginTitle() {
115
+ $logo = "<div class='wapt-logo-title'>&nbsp;</div>";
116
+
117
+ return $logo . $this->plugin->getPluginTitle();
118
+ }
119
+
120
+ /**
121
+ * Show rendered template - $template_name
122
+ */
123
+ public function showPageContent() {
124
+ echo $this->render(); // phpcs:ignore
125
+ }
126
+
127
+ public function getPluginSlug() {
128
+ $plugin_slug = $this->plugin->getPluginInfoAttr( 'updates_settings' );
129
+
130
+ return $plugin_slug['slug'] ?? WAPT_PLUGIN_SLUG;
131
+ }
132
+
133
+ /**
134
+ * Get list of post types
135
+ *
136
+ * @return array
137
+ */
138
+ public function getPostTypes() {
139
+ $args = [ 'public' => true ];
140
+ if ( $this->plugin->isNetworkActive() ) {
141
+ $args['_builtin'] = true;
142
+ }
143
+ $types = get_post_types( $args, 'objects' );
144
+
145
+ $post_types = [];
146
+ foreach ( $types as $type_name => $type ) {
147
+ if ( 'attachment' === $type_name ) {
148
+ continue;
149
+ }
150
+
151
+ $post_types[] = [ $type_name, $type->label ];
152
+ }
153
+
154
+ return $post_types;
155
+ }
156
+
157
+ /**
158
+ * @param string $position
159
+ *
160
+ * @return mixed|void
161
+ */
162
+ protected function getPageWidgets( $position = 'bottom' ) {
163
+ $widgets = [];
164
+
165
+ if ( 'bottom' === $position ) {
166
+ $widgets['rating_widget'] = $this->getRatingWidget( [] );
167
+ $widgets['support_widget'] = $this->getSupportWidget();
168
+ }
169
+
170
+ /**
171
+ * @since 3.8.2 - добавлен
172
+ */
173
+ $widgets = apply_filters( 'wbcr/factory/pages/impressive_lite/widgets', $widgets, $position, $this->plugin, $this );
174
+
175
+ return $widgets;
176
+ }
177
+
178
+ /**
179
+ * Создает html разметку виджета рейтинга
180
+ *
181
+ * @param array $args
182
+ *
183
+ * @author Artem Prihodko <webtemyk@yandex.ru>
184
+ */
185
+ public function showRatingWidget( array $args ) {
186
+ $plugin_slug = $this->getPluginSlug();
187
+
188
+ if ( ! isset( $args[0] ) || empty( $args[0] ) ) {
189
+ $page_url = "https://wordpress.org/support/plugin/{$plugin_slug}/reviews/#new-post";
190
+ } else {
191
+ $page_url = $args[0];
192
+ }
193
+
194
+ $page_url = apply_filters( 'wbcr_factory_pages_452_implite_rating_widget_url', $page_url, $this->plugin->getPluginName(), $this->getResultId() );
195
+
196
+ ?>
197
+ <div class="wbcr-factory-sidebar-widget">
198
+ <p>
199
+ <strong><?php esc_html_e( 'Do you want the plugin to improved and update?', 'wbcr_factory_templates_106' ); ?></strong>
200
+ </p>
201
+ <p><?php esc_html_e( 'Help the author, leave a review on wordpress.org. Thanks to feedback, I will know that the plugin is really useful to you and is needed.', 'wbcr_factory_templates_106' ); ?></p>
202
+ <p><?php esc_html_e( 'And also write your ideas on how to extend or improve the plugin.', 'wbcr_factory_templates_106' ); ?></p>
203
+ <p>
204
+ <i class="wbcr-factory-icon-5stars"></i>
205
+ <a href="<?php echo esc_url_raw( $page_url ); ?>" title="Go rate us" target="_blank">
206
+ <strong><?php esc_html_e( 'Go rate us and push ideas', 'wbcr_factory_templates_106' ); ?></strong>
207
+ </a>
208
+ </p>
209
+ </div>
210
+ <?php
211
+ }
212
+
213
+ /**
214
+ * Создает html разметку виджета поддержки
215
+ *
216
+ * @author @author Artem Prihodko <webtemyk@yandex.ru>
217
+ */
218
+ public function showSupportWidget() {
219
+ $plugin_slug = $this->getPluginSlug();
220
+
221
+ $free_support_url = "https://wordpress.org/support/plugin/{$plugin_slug}";
222
+ $hot_support_url = $this->plugin->get_support()->get_contacts_url();
223
+
224
+ ?>
225
+ <div id="wbcr-clr-support-widget" class="wbcr-factory-sidebar-widget">
226
+ <p><strong><?php esc_html_e( 'Having Issues?', 'wbcr_factory_templates_106' ); ?></strong></p>
227
+ <div class="wbcr-clr-support-widget-body">
228
+ <p>
229
+ <?php _e( 'We provide free support for this plugin. If you are pushed with a problem, just create a new ticket. We will definitely help you!', 'wbcr_factory_templates_106' ); ?>
230
+ </p>
231
+ <ul>
232
+ <li><span class="dashicons dashicons-sos"></span>
233
+ <a href="<?php echo esc_url_raw( $free_support_url ); ?>" target="_blank"
234
+ rel="noopener"><?php esc_html_e( 'Get starting free support', 'wbcr_factory_templates_106' ); ?></a>
235
+ </li>
236
+ <li style="margin-top: 15px;background: #fff4f1;padding: 10px;color: #a58074;">
237
+ <span class="dashicons dashicons-warning"></span>
238
+ <?php printf( wp_kses_post( 'If you find a php error or a vulnerability in plugin, you can <a href="%s" target="_blank" rel="noopener">create ticket</a> in hot support that we responded instantly.', 'wbcr_factory_templates_106' ), esc_url_raw( $hot_support_url ) ); ?>
239
+ </li>
240
+ </ul>
241
+ </div>
242
+ </div>
243
+ <?php
244
+ }
245
+
246
+ /**
247
+ * @return string
248
+ */
249
+ public function getMenuSubTitle() {
250
+ $menu_title = $this->menu_tab_title ?? $this->menu_title ?? $this->page_title;
251
+
252
+ return apply_filters( 'wbcr/factory/pages/impressive_lite/menu_title', $menu_title, $this->plugin->getPluginName(), $this->id );
253
+ }
254
+
255
+ public static function instruction( $title, $html ) {
256
+ $return = "<div class='form-group form-group-textbox'>
257
+ <label for='' class='col-sm-4 control-label'>{$title}</label>
258
+ <div class='control-group col-sm-8'>
259
+ <div class='help-block'>
260
+ {$html}
261
+ </div>
262
+ </div>
263
+ </div>";
264
+
265
+ return $return;
266
+ }
267
+
268
+ public static function group_header( $title, $description ) {
269
+ $return = "<div class='wbcr-factory-page-group-header'><strong>{$title}</strong><p>{$description}</p></div>";
270
+
271
+ return $return;
272
+ }
273
+
274
+ /**
275
+ * @return bool
276
+ */
277
+ public function isShowRightSidebar() {
278
+ if ( ! WAPT_Plugin::app()->is_premium() ) {
279
+ ob_start();
280
+ WAPT_Plugin::app()->get_adverts_manager()->render_placement( 'right_sidebar' ); // phpcs:ignore
281
+ $sidebar = ob_get_clean();
282
+
283
+ return (bool) $sidebar;
284
+ }
285
+
286
+ return false;
287
+ }
288
+
289
+ /**
290
+ *
291
+ */
292
+ public function showRightSidebar() {
293
+ WAPT_Plugin::app()->get_adverts_manager()->render_placement( 'right_sidebar' ); // phpcs:ignore
294
+ }
295
+
296
+ }
297
+
298
+
admin/class-wapt-activation.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * @author Webcraftic <wordpress.webraftic@gmail.com>
6
  * @copyright (c) 02.12.2018, Webcraftic
7
- * @see Wbcr_Factory452_Activator
8
  *
9
  * @version 1.0.1
10
  */
@@ -14,7 +14,7 @@ if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
- class WAPT_Activation extends Wbcr_Factory452_Activator {
18
 
19
  /**
20
  * Method is executed during the activation of the plugin.
4
  *
5
  * @author Webcraftic <wordpress.webraftic@gmail.com>
6
  * @copyright (c) 02.12.2018, Webcraftic
7
+ * @see Wbcr_Factory453_Activator
8
  *
9
  * @version 1.0.1
10
  */
14
  exit;
15
  }
16
 
17
+ class WAPT_Activation extends Wbcr_Factory453_Activator {
18
 
19
  /**
20
  * Method is executed during the activation of the plugin.
admin/pages/about.php CHANGED
@@ -1,68 +1,69 @@
1
- <?php
2
-
3
- // Exit if accessed directly
4
- if ( ! defined( 'ABSPATH' ) ) {
5
- exit;
6
- }
7
-
8
- require_once WAPT_PLUGIN_DIR . '/admin/class-page.php';
9
-
10
- /**
11
- * The page Settings.
12
- *
13
- * @since 1.0.0
14
- */
15
- class WAPT_About extends WAPT_Page {
16
-
17
- /**
18
- * Тип страницы
19
- * options - предназначена для создании страниц с набором опций и настроек.
20
- * page - произвольный контент, любой html код
21
- *
22
- * @var string
23
- */
24
- public $type = 'page';
25
-
26
- /**
27
- * @var int
28
- */
29
- public $page_menu_position = 1000;
30
-
31
- /**
32
- * @var bool
33
- */
34
- public $internal = false;
35
-
36
- /**
37
- * Menu icon (only if a page is placed as a main menu).
38
- * For example: '~/assets/img/menu-icon.png'
39
- * For example dashicons: '\f321'
40
- * @var string
41
- */
42
- public $menu_icon = '';
43
-
44
- /**
45
- * @var string
46
- */
47
- public $page_menu_dashicon = "dashicons-info-outline";
48
-
49
- /**
50
- * {@inheritdoc}
51
- */
52
- public $show_menu_tab = false;
53
-
54
- /**
55
- * @param WAPT_Plugin $plugin
56
- */
57
- public function __construct( $plugin ) {
58
- $this->id = "wapt_about";
59
- $this->menu_target = $plugin->getPrefix() . "generate-" . $plugin->getPluginName();
60
- $this->page_title = __( 'About APT', 'apt' );
61
- $this->menu_title = __( 'About', 'apt' );
62
- $this->template_name = "about";
63
-
64
- parent::__construct( $plugin );
65
-
66
- $this->plugin = $plugin;
67
- }
68
- }
 
1
+ <?php
2
+
3
+ // Exit if accessed directly
4
+ if ( ! defined( 'ABSPATH' ) ) {
5
+ exit;
6
+ }
7
+
8
+ require_once WAPT_PLUGIN_DIR . '/admin/class-page.php';
9
+
10
+ /**
11
+ * The page Settings.
12
+ *
13
+ * @since 1.0.0
14
+ */
15
+ class WAPT_About extends WAPT_Page {
16
+
17
+ /**
18
+ * Тип страницы
19
+ * options - предназначена для создании страниц с набором опций и настроек.
20
+ * page - произвольный контент, любой html код
21
+ *
22
+ * @var string
23
+ */
24
+ public $type = 'page';
25
+
26
+ /**
27
+ * @var int
28
+ */
29
+ public $page_menu_position = 1000;
30
+
31
+ /**
32
+ * @var bool
33
+ */
34
+ public $internal = false;
35
+
36
+ /**
37
+ * Menu icon (only if a page is placed as a main menu).
38
+ * For example: '~/assets/img/menu-icon.png'
39
+ * For example dashicons: '\f321'
40
+ *
41
+ * @var string
42
+ */
43
+ public $menu_icon = '';
44
+
45
+ /**
46
+ * @var string
47
+ */
48
+ public $page_menu_dashicon = 'dashicons-info-outline';
49
+
50
+ /**
51
+ * {@inheritdoc}
52
+ */
53
+ public $show_menu_tab = false;
54
+
55
+ /**
56
+ * @param WAPT_Plugin $plugin
57
+ */
58
+ public function __construct( $plugin ) {
59
+ $this->id = 'wapt_about';
60
+ $this->menu_target = $plugin->getPrefix() . 'generate-' . $plugin->getPluginName();
61
+ $this->page_title = __( 'About APT', 'apt' );
62
+ $this->menu_title = __( 'About', 'apt' );
63
+ $this->template_name = 'about';
64
+
65
+ parent::__construct( $plugin );
66
+
67
+ $this->plugin = $plugin;
68
+ }
69
+ }
admin/pages/generate.php CHANGED
@@ -1,170 +1,177 @@
1
- <?php
2
-
3
- // Exit if accessed directly
4
- if ( ! defined( 'ABSPATH' ) ) {
5
- exit;
6
- }
7
-
8
- require_once WAPT_PLUGIN_DIR . '/admin/class-page.php';
9
-
10
- /**
11
- * The page Settings.
12
- *
13
- * @since 1.0.0
14
- */
15
- class WAPT_Generate extends WAPT_Page {
16
-
17
- /**
18
- * The id of the page in the admin menu.
19
- *
20
- * Mainly used to navigate between pages.
21
- *
22
- * @since 1.0.0
23
- * @see FactoryPages451_AdminPage
24
- *
25
- * @var string
26
- */
27
- public $id;
28
-
29
- /**
30
- * Тип страницы
31
- * options - предназначена для создании страниц с набором опций и настроек.
32
- * page - произвольный контент, любой html код
33
- *
34
- * @var string
35
- */
36
- public $type = 'page';
37
-
38
- /**
39
- * Menu icon (only if a page is placed as a main menu).
40
- * For example: '~/assets/img/menu-icon.png'
41
- * For example dashicons: '\f321'
42
- * @var string
43
- */
44
- public $menu_icon;
45
-
46
- /**
47
- * @var string
48
- */
49
- public $page_menu_dashicon = 'dashicons-performance';
50
-
51
- /**
52
- * Menu position (only if a page is placed as a main menu).
53
- * @link http://codex.wordpress.org/Function_Reference/add_menu_page
54
- * @var string
55
- */
56
- public $menu_position = 58;
57
-
58
- /**
59
- * @var bool
60
- */
61
- public $internal = false;
62
-
63
- /**
64
- * Menu type. Set it to add the page to the specified type menu.
65
- * For example: 'post'
66
- * @var string
67
- */
68
- public $menu_post_type = null;
69
-
70
- /**
71
- * Visible page title.
72
- * For example: 'License Manager'
73
- * @var string
74
- */
75
- public $page_title;
76
-
77
- /**
78
- * Visible title in menu.
79
- * For example: 'License Manager'
80
- * @var string
81
- */
82
- public $menu_title;
83
-
84
- /**
85
- *
86
- * @var
87
- */
88
- public $page_menu_short_description;
89
-
90
- /**
91
- * Заголовок страницы, также использует в меню, как название закладки
92
- *
93
- * @var bool
94
- */
95
- public $show_page_title = true;
96
-
97
- /**
98
- * @var int
99
- */
100
- public $page_menu_position = 100;
101
-
102
-
103
- /**
104
- * @param WAPT_Plugin $plugin
105
- */
106
- public function __construct( $plugin ) {
107
- $this->id = $plugin->getPrefix() . "generate";
108
- $this->menu_title = __( 'Auto Featured Image', 'apt' );
109
-
110
- $this->menu_sub_title = __( 'Generate images', 'apt' );
111
- $this->menu_tab_title = __( 'Generate images', 'apt' );
112
- $this->page_title = __( 'Generate images', 'apt' );
113
-
114
- $this->menu_icon = WAPT_PLUGIN_URL . '/admin/assets/img/apt.png';
115
- $this->template_name = "generate";
116
-
117
- parent::__construct( $plugin );
118
-
119
- $this->plugin = $plugin;
120
- }
121
-
122
- /**
123
- * Requests assets (js and css) for the page.
124
- *
125
- * @return void
126
- * @since 1.0.0
127
- * @see FactoryPages451_AdminPage
128
- *
129
- */
130
- public function assets( $scripts, $styles ) {
131
- parent::assets( $scripts, $styles );
132
-
133
- wp_enqueue_style( 'jquery-ui-genpostthumbs', WAPT_PLUGIN_URL . '/admin/assets/jquery-ui/jquery-ui.min.css', [ 'jquery' ], WAPT_PLUGIN_VERSION );
134
- wp_enqueue_style( 'wapt-generate', WAPT_PLUGIN_URL . '/admin/assets/css/generate.css', [], WAPT_PLUGIN_VERSION );
135
- wp_enqueue_script( 'jquery-progress', WAPT_PLUGIN_URL . '/admin/assets/jquery-ui/jquery-ui.progressbar.min.js', [ 'jquery' ], WAPT_PLUGIN_VERSION, true );
136
- wp_enqueue_script( 'wapt-chart', WAPT_PLUGIN_URL . '/admin/assets/js/Chart.min.js', [ 'jquery' ], WAPT_PLUGIN_VERSION, true );
137
- wp_enqueue_script( 'wapt-generate', WAPT_PLUGIN_URL . '/admin/assets/js/generate.js', [ 'jquery' ], WAPT_PLUGIN_VERSION, true );
138
- wp_localize_script( 'wapt-generate', 'wapt', [
139
- 'is_premium' => $this->plugin->is_premium(),
140
- 'nonce_get_posts' => wp_create_nonce( 'get-posts' ),
141
- 'nonce_gen_post_thumbs' => wp_create_nonce( 'generate-post-thumbnails' ),
142
- 'nonce_del_post_thumbs' => wp_create_nonce( 'delete-post-thumbnails' ),
143
- 'i8n_processed_posts' => esc_html__( 'All done! Processed posts: ', 'apt' ),
144
- 'i8n_set_images' => esc_html__( 'Set featured image in posts: ', 'apt' ),
145
- 'i8n_del_images' => esc_html__( 'Unset featured image in posts: ', 'apt' ),
146
- 'i8n_delete_images' => esc_html__( 'Delete featured image in posts: ', 'apt' ),
147
- ] );
148
-
149
- }
150
-
151
- /**
152
- * Show rendered template - $template_name
153
- */
154
- public function showPageContent() {
155
- $no_featured = $this->plugin->apt->get_posts_count();
156
- $w_featured = $this->plugin->apt->get_posts_count( true );
157
- $percent = ( $no_featured + $w_featured == 0 ) ? 0 : ceil( $w_featured / ( $no_featured + $w_featured ) * 100 );
158
-
159
- $data = [
160
- 'stats' => [
161
- 'no_featured_image' => $no_featured,
162
- 'w_featured_image' => $w_featured,
163
- 'featured_image_percent' => $percent,
164
- 'error' => 0,
165
- ],
166
- 'log' => $this->plugin->getPopulateOption( 'generation_log', [] ),
167
- ];
168
- echo $this->render( $this->template_name, $data );
169
- }
170
- }
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Exit if accessed directly
4
+ if ( ! defined( 'ABSPATH' ) ) {
5
+ exit;
6
+ }
7
+
8
+ require_once WAPT_PLUGIN_DIR . '/admin/class-page.php';
9
+
10
+ /**
11
+ * The page Settings.
12
+ *
13
+ * @since 1.0.0
14
+ */
15
+ class WAPT_Generate extends WAPT_Page {
16
+
17
+ /**
18
+ * The id of the page in the admin menu.
19
+ *
20
+ * Mainly used to navigate between pages.
21
+ *
22
+ * @since 1.0.0
23
+ * @see FactoryPages452_AdminPage
24
+ *
25
+ * @var string
26
+ */
27
+ public $id;
28
+
29
+ /**
30
+ * Тип страницы
31
+ * options - предназначена для создании страниц с набором опций и настроек.
32
+ * page - произвольный контент, любой html код
33
+ *
34
+ * @var string
35
+ */
36
+ public $type = 'page';
37
+
38
+ /**
39
+ * Menu icon (only if a page is placed as a main menu).
40
+ * For example: '~/assets/img/menu-icon.png'
41
+ * For example dashicons: '\f321'
42
+ *
43
+ * @var string
44
+ */
45
+ public $menu_icon;
46
+
47
+ /**
48
+ * @var string
49
+ */
50
+ public $page_menu_dashicon = 'dashicons-performance';
51
+
52
+ /**
53
+ * Menu position (only if a page is placed as a main menu).
54
+ *
55
+ * @link http://codex.wordpress.org/Function_Reference/add_menu_page
56
+ * @var string
57
+ */
58
+ public $menu_position = 58;
59
+
60
+ /**
61
+ * @var bool
62
+ */
63
+ public $internal = false;
64
+
65
+ /**
66
+ * Menu type. Set it to add the page to the specified type menu.
67
+ * For example: 'post'
68
+ *
69
+ * @var string
70
+ */
71
+ public $menu_post_type = null;
72
+
73
+ /**
74
+ * Visible page title.
75
+ * For example: 'License Manager'
76
+ *
77
+ * @var string
78
+ */
79
+ public $page_title;
80
+
81
+ /**
82
+ * Visible title in menu.
83
+ * For example: 'License Manager'
84
+ *
85
+ * @var string
86
+ */
87
+ public $menu_title;
88
+
89
+ /**
90
+ *
91
+ */
92
+ public $page_menu_short_description;
93
+
94
+ /**
95
+ * Заголовок страницы, также использует в меню, как название закладки
96
+ *
97
+ * @var bool
98
+ */
99
+ public $show_page_title = true;
100
+
101
+ /**
102
+ * @var int
103
+ */
104
+ public $page_menu_position = 100;
105
+
106
+
107
+ /**
108
+ * @param WAPT_Plugin $plugin
109
+ */
110
+ public function __construct( $plugin ) {
111
+ $this->id = $plugin->getPrefix() . 'generate';
112
+ $this->menu_title = __( 'Auto Featured Image', 'apt' );
113
+
114
+ $this->menu_sub_title = __( 'Generate images', 'apt' );
115
+ $this->menu_tab_title = __( 'Generate images', 'apt' );
116
+ $this->page_title = __( 'Generate images', 'apt' );
117
+
118
+ $this->menu_icon = WAPT_PLUGIN_URL . '/admin/assets/img/apt.png';
119
+ $this->template_name = 'generate';
120
+
121
+ parent::__construct( $plugin );
122
+
123
+ $this->plugin = $plugin;
124
+ }
125
+
126
+ /**
127
+ * Requests assets (js and css) for the page.
128
+ *
129
+ * @return void
130
+ * @since 1.0.0
131
+ * @see FactoryPages452_AdminPage
132
+ */
133
+ public function assets( $scripts, $styles ) {
134
+ parent::assets( $scripts, $styles );
135
+
136
+ wp_enqueue_style( 'jquery-ui-genpostthumbs', WAPT_PLUGIN_URL . '/admin/assets/jquery-ui/jquery-ui.min.css', [ 'jquery' ], WAPT_PLUGIN_VERSION );
137
+ wp_enqueue_style( 'wapt-generate', WAPT_PLUGIN_URL . '/admin/assets/css/generate.css', [], WAPT_PLUGIN_VERSION );
138
+ wp_enqueue_script( 'jquery-progress', WAPT_PLUGIN_URL . '/admin/assets/jquery-ui/jquery-ui.progressbar.min.js', [ 'jquery' ], WAPT_PLUGIN_VERSION, true );
139
+ wp_enqueue_script( 'wapt-chart', WAPT_PLUGIN_URL . '/admin/assets/js/Chart.min.js', [ 'jquery' ], WAPT_PLUGIN_VERSION, true );
140
+ wp_enqueue_script( 'wapt-generate', WAPT_PLUGIN_URL . '/admin/assets/js/generate.js', [ 'jquery' ], WAPT_PLUGIN_VERSION, true );
141
+ wp_localize_script(
142
+ 'wapt-generate',
143
+ 'wapt',
144
+ [
145
+ 'is_premium' => $this->plugin->is_premium(),
146
+ 'nonce_get_posts' => wp_create_nonce( 'get-posts' ),
147
+ 'nonce_gen_post_thumbs' => wp_create_nonce( 'generate-post-thumbnails' ),
148
+ 'nonce_del_post_thumbs' => wp_create_nonce( 'delete-post-thumbnails' ),
149
+ 'i8n_processed_posts' => esc_html__( 'All done! Processed posts: ', 'apt' ),
150
+ 'i8n_set_images' => esc_html__( 'Set featured image in posts: ', 'apt' ),
151
+ 'i8n_del_images' => esc_html__( 'Unset featured image in posts: ', 'apt' ),
152
+ 'i8n_delete_images' => esc_html__( 'Delete featured image in posts: ', 'apt' ),
153
+ ]
154
+ );
155
+
156
+ }
157
+
158
+ /**
159
+ * Show rendered template - $template_name
160
+ */
161
+ public function showPageContent() {
162
+ $no_featured = $this->plugin->apt->get_posts_count();
163
+ $w_featured = $this->plugin->apt->get_posts_count( true );
164
+ $percent = ( $no_featured + $w_featured === 0 ) ? 0 : ceil( $w_featured / ( $no_featured + $w_featured ) * 100 );
165
+
166
+ $data = [
167
+ 'stats' => [
168
+ 'no_featured_image' => $no_featured,
169
+ 'w_featured_image' => $w_featured,
170
+ 'featured_image_percent' => $percent,
171
+ 'error' => 0,
172
+ ],
173
+ 'log' => $this->plugin->getPopulateOption( 'generation_log', [] ),
174
+ ];
175
+ echo $this->render( $this->template_name, $data ); // phpcs:ignore
176
+ }
177
+ }
admin/pages/image.php CHANGED
@@ -1,462 +1,460 @@
1
- <?php
2
-
3
- use WBCR\APT\AutoPostThumbnails;
4
-
5
- // Exit if accessed directly
6
- if ( ! defined( 'ABSPATH' ) ) {
7
- exit;
8
- }
9
-
10
- require_once WAPT_PLUGIN_DIR . '/admin/class-page.php';
11
-
12
- /**
13
- * The page Settings.
14
- *
15
- * @since 1.0.0
16
- */
17
- class WAPT_ImageSettings extends WAPT_Page {
18
-
19
- /**
20
- * Тип страницы
21
- * options - предназначена для создании страниц с набором опций и настроек.
22
- * page - произвольный контент, любой html код
23
- *
24
- * @var string
25
- */
26
- public $type = 'options';
27
-
28
- /**
29
- * @var bool
30
- */
31
- public $internal = false;
32
-
33
- /**
34
- * @var int
35
- */
36
- public $page_menu_position = 200;
37
-
38
- /**
39
- * Menu icon (only if a page is placed as a main menu).
40
- * For example: '~/assets/img/menu-icon.png'
41
- * For example dashicons: '\f321'
42
- *
43
- * @var string
44
- */
45
- public $menu_icon = '';
46
-
47
- /**
48
- * @var string
49
- */
50
- public $page_menu_dashicon = 'dashicons-cover-image';
51
-
52
- /**
53
- * {@inheritdoc}
54
- */
55
- public $show_menu_tab = true;
56
-
57
- /**
58
- * {@inheritdoc}
59
- */
60
- public $show_right_sidebar_in_options = true;
61
-
62
- /**
63
- * @var array
64
- */
65
- public $post_types;
66
-
67
- /**
68
- * @param WAPT_Plugin $plugin
69
- */
70
- public function __construct( $plugin ) {
71
- $this->id = $plugin->getPrefix() . "image";
72
- $this->menu_target = $plugin->getPrefix() . "generate-" . $plugin->getPluginName();
73
- $this->page_title = __( 'Image generation settings', 'apt' );
74
- $this->menu_title = __( 'Image', 'apt' );
75
- $this->capabilitiy = "manage_options";
76
- $this->template_name = "settings";
77
-
78
- add_action( 'wbcr_factory_forms_449_register_controls', function () {
79
- $colorControls = [
80
- [
81
- 'type' => 'wapt-color',
82
- 'class' => 'Wapt_FactoryForms_ColorControl',
83
- 'include' => WAPT_PLUGIN_DIR . '/includes/controls/class.color.php',
84
- ],
85
- [
86
- 'type' => 'wapt-mediabutton',
87
- 'class' => 'Wapt_FactoryForms_MediaButtonControl',
88
- 'include' => WAPT_PLUGIN_DIR . '/includes/controls/class.mediabutton.php',
89
- ],
90
- [
91
- 'type' => 'wapt-fonts',
92
- 'class' => 'Wapt_FactoryForms_FontsControl',
93
- 'include' => WAPT_PLUGIN_DIR . '/includes/controls/class.fonts.php',
94
- ],
95
- ];
96
- $this->plugin->forms->registerControls( $colorControls );
97
- } );
98
-
99
- //add_filter( 'wbcr/factory/pages/impressive-lite/widgets', [ $this, '' ], 10, 4 );
100
-
101
- $this->plugin = $plugin;
102
- $this->post_types = $this->getPostTypes();
103
-
104
- parent::__construct( $plugin );
105
- }
106
-
107
- /**
108
- * Enqueue page assets
109
- *
110
- * @return void
111
- * @since 3.8.1
112
- * @see Wbcr_FactoryPages451_AdminPage
113
- *
114
- */
115
- public function assets( $scripts, $styles ) {
116
- parent::assets( $scripts, $styles );
117
-
118
- $this->scripts->request( [
119
- 'control.list',
120
- 'control.color',
121
- 'plugin.color',
122
- 'plugin.iris',
123
- ], 'bootstrap' );
124
-
125
- $this->styles->request( [
126
- 'control.list',
127
- 'control.color',
128
- ], 'bootstrap' );
129
-
130
- $this->scripts->add( WAPT_PLUGIN_URL . '/admin/assets/js/jscolor.js', [ 'jquery' ], 'wapt-color-control', WAPT_PLUGIN_VERSION );
131
- $this->scripts->add( WAPT_PLUGIN_URL . '/admin/assets/js/settings.js', [ 'jquery' ], 'wapt-settings-script', WAPT_PLUGIN_VERSION );
132
- $this->styles->add( WAPT_PLUGIN_URL . '/admin/assets/css/settings.css', [], 'wapt-settings-style', WAPT_PLUGIN_VERSION );
133
- }
134
-
135
- public function isShowRightSidebar() {
136
- return $this->show_right_sidebar_in_options;
137
- }
138
-
139
- public function showRightSidebar() {
140
- ?>
141
- <div id="wapt-image-preview" class="wapt-image-preview">
142
- <div class="wapt-image-preview-title"><h3><?php echo __( 'Post thumbnail preview', 'apt' ); ?></h3></div>
143
- <?php
144
- $format = WAPT_Plugin::app()->getPopulateOption( "image-type", "jpg" );
145
- switch ( $format ) {
146
- case 'png':
147
- $format = 'png';
148
- break;
149
- case 'jpg':
150
- case 'jpeg':
151
- default:
152
- $format = 'jpg';
153
- break;
154
- }
155
-
156
- $posts = get_posts( [ 'numberposts' => 0, ] );
157
- $id = rand( 0, count( $posts ) - 1 );
158
- if ( count( $posts ) !== 0 ) {
159
- $txt = $posts[ $id ]->post_title;
160
- } else {
161
- $txt = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas aliquet turpis quis ex elementum malesuada';
162
- }
163
-
164
- $image = apply_filters( 'wapt/generate/image', AutoPostThumbnails::generate_image_with_text( $txt ), $txt );
165
-
166
- $image->save( WAPT_PLUGIN_DIR . "/preview.{$format}", 100, $format );
167
- ?>
168
- <img src="<?php echo WAPT_PLUGIN_URL . "/preview.{$format}?" . time(); ?>"
169
- width="100%" alt="">
170
- </div>
171
- <?php
172
- }
173
-
174
- /**
175
- * Returns options for the Basic Settings screen.
176
- *
177
- * @return array
178
- * @since 3.6.2
179
- */
180
- public function getPageOptions() {
181
-
182
- $is_premium = WAPT_Plugin::app()->is_premium();
183
- $pro = $is_premium ? '' : "<br><span class='wapt-icon-pro wapt-icon-pro-span'>PRO</span>";
184
- $layout_columns = [
185
- 'column-left' => 4,
186
- 'column-right' => 8,
187
- ];
188
-
189
- $options = [];
190
-
191
- $options[] = [
192
- 'type' => 'html',
193
- 'html' => $this->group_header( __( 'Background settings', 'apt' ), '' ),
194
- ];
195
-
196
- $options[] = [
197
- 'type' => 'dropdown',
198
- 'way' => 'buttons',
199
- 'name' => 'background-type',
200
- 'data' => [
201
- [ 'color', __( 'Color', 'apt' ) ],
202
- [ 'image', __( 'Image', 'apt' ) ],
203
- ],
204
- 'default' => 'color',
205
- 'title' => __( 'Background type', 'apt' ),
206
- 'hint' => __( 'Select the background type for the featured image', 'apt' ),
207
- 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
208
- ];
209
-
210
- $options[] = [
211
- 'type' => 'color',
212
- 'name' => 'background-color',
213
- 'default' => '#ff6262',
214
- 'title' => __( 'Background color for the image', 'apt' ),
215
- 'hint' => __( 'Set the background color for the featured image', 'apt' ),
216
- 'layout' => $layout_columns,
217
- ];
218
-
219
- if ( $is_premium ) {
220
- $options[] = [
221
- 'type' => 'wapt-mediabutton',
222
- 'name' => 'background-image',
223
- 'text' => __( 'Select image', 'apt' ),
224
- 'title' => __( 'Background image', 'apt' ),
225
- 'hint' => __( 'Set the background image. Only JPG or PNG', 'apt' ),
226
- 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
227
- 'layout' => $layout_columns,
228
- ];
229
- }
230
-
231
- $options[] = [
232
- 'type' => 'dropdown',
233
- 'way' => 'buttons',
234
- 'name' => 'image-type',
235
- 'data' => [
236
- [ 'jpg', __( 'JPEG', 'apt' ) ],
237
- [ 'png', __( 'PNG', 'apt' ) ],
238
- ],
239
- 'default' => 'jpg',
240
- 'title' => __( 'Image format', 'apt' ),
241
- 'hint' => __( 'Set format to save images', 'apt' ),
242
- ];
243
-
244
- $options[] = [
245
- 'type' => 'integer',
246
- 'way' => 'text',
247
- 'name' => 'image-width',
248
- 'units' => 'px',
249
- 'default' => 800,
250
- 'title' => __( 'Image size: width', 'apt' ),
251
- 'hint' => __( 'Set width of the image for the featured image', 'apt' ),
252
- ];
253
-
254
- $options[] = [
255
- 'type' => 'integer',
256
- 'way' => 'text',
257
- 'name' => 'image-height',
258
- 'units' => 'px',
259
- 'default' => 600,
260
- 'title' => __( 'Image size: height', 'apt' ),
261
- 'hint' => __( 'Set height of the image for the featured image', 'apt' ),
262
- ];
263
-
264
-
265
- //----------------------------------------------------------------------
266
- $options[] = [
267
- 'type' => 'html',
268
- 'html' => $this->group_header( __( 'Font settings', 'apt' ), '' ),
269
- ];
270
-
271
- $options[] = [
272
- 'type' => 'wapt-fonts',
273
- 'name' => 'font',
274
- 'data' => AutoPostThumbnails::get_fonts(),
275
- 'empty' => '',
276
- 'title' => __( 'Font name', 'apt' ),
277
- 'hint' => __( 'Select a font for the text in the featured image', 'apt' ),
278
- 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
279
- 'layout' => $layout_columns,
280
- ];
281
-
282
- $options[] = [
283
- 'type' => 'integer',
284
- 'way' => 'text',
285
- 'name' => 'font-size',
286
- 'units' => 'pt',
287
- 'default' => 25,
288
- 'title' => __( 'Font size', 'apt' ),
289
- 'hint' => __( 'Set the font size for the featured image', 'apt' ),
290
- ];
291
-
292
- $options[] = [
293
- 'type' => 'wapt-color',
294
- 'name' => 'font-color',
295
- 'title' => __( 'Font color', 'apt' ),
296
- 'hint' => __( 'Set the font color for the featured image', 'apt' ),
297
- 'layout' => $layout_columns,
298
- ];
299
-
300
- //----------------------------------------------------------------------
301
- $options[] = [
302
- 'type' => 'html',
303
- 'html' => $this->group_header( __( 'Text settings', 'apt' ), '' ),
304
- ];
305
-
306
- $options[] = [
307
- 'type' => 'checkbox',
308
- 'way' => 'buttons',
309
- 'name' => 'shadow',
310
- 'default' => '0',
311
- 'title' => __( 'Text shadow', 'apt' ),
312
- 'hint' => __( 'Use text shadow?', 'apt' ),
313
- 'eventsOn' => [
314
- 'show' => '.factory-control-shadow-color',
315
- ],
316
- 'eventsOff' => [
317
- 'hide' => '.factory-control-shadow-color',
318
- ],
319
- ];
320
-
321
- $options[] = [
322
- 'type' => 'wapt-color',
323
- 'name' => 'shadow-color',
324
- 'title' => __( 'Shadow color', 'apt' ),
325
- 'hint' => __( 'Set the shadow color for the text', 'apt' ),
326
- 'layout' => $layout_columns,
327
- ];
328
-
329
- $options[] = [
330
- 'type' => 'dropdown',
331
- 'way' => 'buttons',
332
- 'name' => 'text-transform',
333
- 'data' => [
334
- [ 'no', __( 'No transform', 'apt' ) ],
335
- [ 'upper', __( 'Uppercase', 'apt' ) ],
336
- [ 'lower', __( 'Lowercase', 'apt' ) ],
337
- ],
338
- 'default' => 'no',
339
- 'title' => __( 'Text transform', 'apt' ),
340
- 'hint' => __( 'Select type of text transformation', 'apt' ),
341
- ];
342
-
343
- $options[] = [
344
- 'type' => 'integer',
345
- 'way' => 'text',
346
- 'name' => 'text-crop',
347
- 'units' => __( 'chars', 'apt' ),
348
- 'default' => 50,
349
- 'title' => __( 'Text length', 'apt' ),
350
- 'hint' => __( 'Set the maximum text length', 'apt' ),
351
- ];
352
-
353
- $options[] = [
354
- 'type' => 'integer',
355
- 'way' => 'text',
356
- 'name' => 'text-line-spacing',
357
- 'range' => [ 0, 3 ],
358
- 'default' => 1.5,
359
- 'title' => __( 'Line spacing', 'apt' ),
360
- 'hint' => __( 'Set the line spacing', 'apt' ),
361
- ];
362
-
363
- //----------------------------------------------------------------------
364
- $options[] = [
365
- 'type' => 'html',
366
- 'html' => $this->group_header( __( 'Alignment', 'apt' ), '' ),
367
- ];
368
-
369
- $options[] = [
370
- 'type' => 'dropdown',
371
- 'way' => 'buttons',
372
- 'name' => 'text-align-horizontal',
373
- 'data' => [
374
- [ 'left', __( 'Left', 'apt' ) ],
375
- [ 'center', __( 'Center', 'apt' ) ],
376
- [ 'right', __( 'Right', 'apt' ) ],
377
- ],
378
- 'default' => 'center',
379
- 'title' => __( 'Horizontal text alignment', 'apt' ) . $pro,
380
- 'hint' => __( 'Select how to horizontally align the text on the image', 'apt' ),
381
- 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
382
- ];
383
-
384
- $options[] = [
385
- 'type' => 'dropdown',
386
- 'way' => 'buttons',
387
- 'name' => 'text-align-vertical',
388
- 'data' => [
389
- [ 'top', __( 'Top', 'apt' ) ],
390
- [ 'center', __( 'Center', 'apt' ) ],
391
- [ 'bottom', __( 'Bottom', 'apt' ) ],
392
- ],
393
- 'default' => 'center',
394
- 'title' => __( 'Vertical text alignment', 'apt' ) . $pro,
395
- 'hint' => __( 'Select how to vertically align the text on the image', 'apt' ),
396
- 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
397
- ];
398
-
399
- //----------------------------------------------------------------------
400
- $options[] = [
401
- 'type' => 'html',
402
- 'html' => $this->group_header( __( 'Padding', 'apt' ), '' ),
403
- ];
404
-
405
- $options[] = [
406
- 'type' => 'integer',
407
- 'way' => 'text',
408
- 'name' => 'text-padding-tb',
409
- 'units' => __( 'px', 'apt' ),
410
- 'default' => 15,
411
- 'title' => __( 'Top/bottom text padding', 'apt' ) . $pro,
412
- 'hint' => __( 'Padding at the top and bottom of the text', 'apt' ),
413
- 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
414
- ];
415
-
416
- $options[] = [
417
- 'type' => 'integer',
418
- 'way' => 'text',
419
- 'name' => 'text-padding-lr',
420
- 'units' => __( 'px', 'apt' ),
421
- 'default' => 15,
422
- 'title' => __( 'Left/right text padding', 'apt' ) . $pro,
423
- 'hint' => __( 'Padding at the left and right of the text', 'apt' ),
424
- 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
425
- ];
426
-
427
- //----------------------------------------------------------------------
428
- $options[] = [
429
- 'type' => 'html',
430
- 'html' => $this->group_header( __( 'Addition of text', 'apt' ), '' ),
431
- ];
432
-
433
- $options[] = [
434
- 'type' => 'textbox',
435
- 'name' => 'before-text',
436
- 'default' => '',
437
- 'title' => __( 'String before text', 'apt' ) . $pro,
438
- 'hint' => __( 'Additional string before text. For a line break, use <b>[br]</b>', 'apt' ),
439
- 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
440
- 'htmlAttrs' => ( ! $is_premium ) ? [ 'disabled' => 'disabled' ] : [],
441
- ];
442
-
443
- $options[] = [
444
- 'type' => 'textbox',
445
- 'name' => 'after-text',
446
- 'default' => '',
447
- 'title' => __( 'String after text', 'apt' ) . $pro,
448
- 'hint' => __( 'Additional string after text. For a line break, use <b>[br]</b>', 'apt' ),
449
- 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
450
- 'htmlAttrs' => ( ! $is_premium ) ? [ 'disabled' => 'disabled' ] : [],
451
- ];
452
-
453
- $form_options[] = [
454
- 'type' => 'form-group',
455
- 'items' => $options,
456
- //'cssClass' => 'postbox'
457
- ];
458
-
459
- return $form_options;
460
- }
461
-
462
- }
1
+ <?php
2
+
3
+ use WBCR\APT\AutoPostThumbnails;
4
+
5
+ // Exit if accessed directly
6
+ if ( ! defined( 'ABSPATH' ) ) {
7
+ exit;
8
+ }
9
+
10
+ require_once WAPT_PLUGIN_DIR . '/admin/class-page.php';
11
+
12
+ /**
13
+ * The page Settings.
14
+ *
15
+ * @since 1.0.0
16
+ */
17
+ class WAPT_ImageSettings extends WAPT_Page {
18
+
19
+ /**
20
+ * Тип страницы
21
+ * options - предназначена для создании страниц с набором опций и настроек.
22
+ * page - произвольный контент, любой html код
23
+ *
24
+ * @var string
25
+ */
26
+ public $type = 'options';
27
+
28
+ /**
29
+ * @var bool
30
+ */
31
+ public $internal = false;
32
+
33
+ /**
34
+ * @var int
35
+ */
36
+ public $page_menu_position = 200;
37
+
38
+ /**
39
+ * Menu icon (only if a page is placed as a main menu).
40
+ * For example: '~/assets/img/menu-icon.png'
41
+ * For example dashicons: '\f321'
42
+ *
43
+ * @var string
44
+ */
45
+ public $menu_icon = '';
46
+
47
+ /**
48
+ * @var string
49
+ */
50
+ public $page_menu_dashicon = 'dashicons-cover-image';
51
+
52
+ /**
53
+ * {@inheritdoc}
54
+ */
55
+ public $show_menu_tab = true;
56
+
57
+ /**
58
+ * {@inheritdoc}
59
+ */
60
+ public $show_right_sidebar_in_options = true;
61
+
62
+ /**
63
+ * @var array
64
+ */
65
+ public $post_types;
66
+
67
+ /**
68
+ * @param WAPT_Plugin $plugin
69
+ */
70
+ public function __construct( $plugin ) {
71
+ $this->id = $plugin->getPrefix() . 'image';
72
+ $this->menu_target = $plugin->getPrefix() . 'generate-' . $plugin->getPluginName();
73
+ $this->page_title = __( 'Image generation settings', 'apt' );
74
+ $this->menu_title = __( 'Image', 'apt' );
75
+ $this->capabilitiy = 'manage_options';
76
+ $this->template_name = 'settings';
77
+
78
+ add_action( 'wbcr_factory_forms_450_register_controls', function () {
79
+ $colorControls = [
80
+ [
81
+ 'type' => 'wapt-color',
82
+ 'class' => 'Wapt_FactoryForms_ColorControl',
83
+ 'include' => WAPT_PLUGIN_DIR . '/includes/controls/class.color.php',
84
+ ],
85
+ [
86
+ 'type' => 'wapt-mediabutton',
87
+ 'class' => 'Wapt_FactoryForms_MediaButtonControl',
88
+ 'include' => WAPT_PLUGIN_DIR . '/includes/controls/class.mediabutton.php',
89
+ ],
90
+ [
91
+ 'type' => 'wapt-fonts',
92
+ 'class' => 'Wapt_FactoryForms_FontsControl',
93
+ 'include' => WAPT_PLUGIN_DIR . '/includes/controls/class.fonts.php',
94
+ ],
95
+ ];
96
+ $this->plugin->forms->registerControls( $colorControls );
97
+ } );
98
+
99
+ //add_filter( 'wbcr/factory/pages/impressive-lite/widgets', [ $this, '' ], 10, 4 );
100
+
101
+ $this->plugin = $plugin;
102
+ $this->post_types = $this->getPostTypes();
103
+
104
+ parent::__construct( $plugin );
105
+ }
106
+
107
+ /**
108
+ * Enqueue page assets
109
+ *
110
+ * @return void
111
+ * @since 3.8.1
112
+ * @see Wbcr_FactoryPages452_AdminPage
113
+ */
114
+ public function assets( $scripts, $styles ) {
115
+ parent::assets( $scripts, $styles );
116
+
117
+ $this->scripts->request( [
118
+ 'control.list',
119
+ 'control.color',
120
+ 'plugin.color',
121
+ 'plugin.iris',
122
+ ], 'bootstrap' );
123
+
124
+ $this->styles->request( [
125
+ 'control.list',
126
+ 'control.color',
127
+ ], 'bootstrap' );
128
+
129
+ $this->scripts->add( WAPT_PLUGIN_URL . '/admin/assets/js/jscolor.js', [ 'jquery' ], 'wapt-color-control', WAPT_PLUGIN_VERSION );
130
+ $this->scripts->add( WAPT_PLUGIN_URL . '/admin/assets/js/settings.js', [ 'jquery' ], 'wapt-settings-script', WAPT_PLUGIN_VERSION );
131
+ $this->styles->add( WAPT_PLUGIN_URL . '/admin/assets/css/settings.css', [], 'wapt-settings-style', WAPT_PLUGIN_VERSION );
132
+ }
133
+
134
+ public function isShowRightSidebar() {
135
+ return $this->show_right_sidebar_in_options;
136
+ }
137
+
138
+ public function showRightSidebar() {
139
+ ?>
140
+ <div id="wapt-image-preview" class="wapt-image-preview">
141
+ <div class="wapt-image-preview-title"><h3><?php esc_html_e( 'Post thumbnail preview', 'apt' ); ?></h3></div>
142
+ <?php
143
+ $format = WAPT_Plugin::app()->getPopulateOption( 'image-type', 'jpg' );
144
+ switch ( $format ) {
145
+ case 'png':
146
+ $format = 'png';
147
+ break;
148
+ case 'jpg':
149
+ case 'jpeg':
150
+ default:
151
+ $format = 'jpg';
152
+ break;
153
+ }
154
+
155
+ $posts = get_posts( [ 'numberposts' => 0 ] );
156
+ $id = rand( 0, count( $posts ) - 1 );
157
+ if ( count( $posts ) !== 0 ) {
158
+ $txt = $posts[ $id ]->post_title;
159
+ } else {
160
+ $txt = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas aliquet turpis quis ex elementum malesuada';
161
+ }
162
+
163
+ $image = apply_filters( 'wapt/generate/image', AutoPostThumbnails::generate_image_with_text( $txt ), $txt );
164
+
165
+ $image->save( WAPT_PLUGIN_DIR . "/preview.{$format}", 100, $format );
166
+ ?>
167
+ <img src="<?php echo esc_url_raw( WAPT_PLUGIN_URL . "/preview.{$format}?" . time() ); ?>"
168
+ width="100%" alt="">
169
+ </div>
170
+ <?php
171
+ }
172
+
173
+ /**
174
+ * Returns options for the Basic Settings screen.
175
+ *
176
+ * @return array
177
+ * @since 3.6.2
178
+ */
179
+ public function getPageOptions() {
180
+
181
+ $is_premium = WAPT_Plugin::app()->is_premium();
182
+ $pro = $is_premium ? '' : "<br><span class='wapt-icon-pro wapt-icon-pro-span'>PRO</span>";
183
+ $layout_columns = [
184
+ 'column-left' => 4,
185
+ 'column-right' => 8,
186
+ ];
187
+
188
+ $options = [];
189
+
190
+ $options[] = [
191
+ 'type' => 'html',
192
+ 'html' => $this->group_header( __( 'Background settings', 'apt' ), '' ),
193
+ ];
194
+
195
+ $options[] = [
196
+ 'type' => 'dropdown',
197
+ 'way' => 'buttons',
198
+ 'name' => 'background-type',
199
+ 'data' => [
200
+ [ 'color', __( 'Color', 'apt' ) ],
201
+ [ 'image', __( 'Image', 'apt' ) ],
202
+ ],
203
+ 'default' => 'color',
204
+ 'title' => __( 'Background type', 'apt' ),
205
+ 'hint' => __( 'Select the background type for the featured image', 'apt' ),
206
+ 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
207
+ ];
208
+
209
+ $options[] = [
210
+ 'type' => 'color',
211
+ 'name' => 'background-color',
212
+ 'default' => '#ff6262',
213
+ 'title' => __( 'Background color for the image', 'apt' ),
214
+ 'hint' => __( 'Set the background color for the featured image', 'apt' ),
215
+ 'layout' => $layout_columns,
216
+ ];
217
+
218
+ if ( $is_premium ) {
219
+ $options[] = [
220
+ 'type' => 'wapt-mediabutton',
221
+ 'name' => 'background-image',
222
+ 'text' => __( 'Select image', 'apt' ),
223
+ 'title' => __( 'Background image', 'apt' ),
224
+ 'hint' => __( 'Set the background image. Only JPG or PNG', 'apt' ),
225
+ 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
226
+ 'layout' => $layout_columns,
227
+ ];
228
+ }
229
+
230
+ $options[] = [
231
+ 'type' => 'dropdown',
232
+ 'way' => 'buttons',
233
+ 'name' => 'image-type',
234
+ 'data' => [
235
+ [ 'jpg', __( 'JPEG', 'apt' ) ],
236
+ [ 'png', __( 'PNG', 'apt' ) ],
237
+ ],
238
+ 'default' => 'jpg',
239
+ 'title' => __( 'Image format', 'apt' ),
240
+ 'hint' => __( 'Set format to save images', 'apt' ),
241
+ ];
242
+
243
+ $options[] = [
244
+ 'type' => 'integer',
245
+ 'way' => 'text',
246
+ 'name' => 'image-width',
247
+ 'units' => 'px',
248
+ 'default' => 800,
249
+ 'title' => __( 'Image size: width', 'apt' ),
250
+ 'hint' => __( 'Set width of the image for the featured image', 'apt' ),
251
+ ];
252
+
253
+ $options[] = [
254
+ 'type' => 'integer',
255
+ 'way' => 'text',
256
+ 'name' => 'image-height',
257
+ 'units' => 'px',
258
+ 'default' => 600,
259
+ 'title' => __( 'Image size: height', 'apt' ),
260
+ 'hint' => __( 'Set height of the image for the featured image', 'apt' ),
261
+ ];
262
+
263
+ //----------------------------------------------------------------------
264
+ $options[] = [
265
+ 'type' => 'html',
266
+ 'html' => $this->group_header( __( 'Font settings', 'apt' ), '' ),
267
+ ];
268
+
269
+ $options[] = [
270
+ 'type' => 'wapt-fonts',
271
+ 'name' => 'font',
272
+ 'data' => AutoPostThumbnails::get_fonts(),
273
+ 'empty' => '',
274
+ 'title' => __( 'Font name', 'apt' ),
275
+ 'hint' => __( 'Select a font for the text in the featured image', 'apt' ),
276
+ 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
277
+ 'layout' => $layout_columns,
278
+ ];
279
+
280
+ $options[] = [
281
+ 'type' => 'integer',
282
+ 'way' => 'text',
283
+ 'name' => 'font-size',
284
+ 'units' => 'pt',
285
+ 'default' => 25,
286
+ 'title' => __( 'Font size', 'apt' ),
287
+ 'hint' => __( 'Set the font size for the featured image', 'apt' ),
288
+ ];
289
+
290
+ $options[] = [
291
+ 'type' => 'wapt-color',
292
+ 'name' => 'font-color',
293
+ 'title' => __( 'Font color', 'apt' ),
294
+ 'hint' => __( 'Set the font color for the featured image', 'apt' ),
295
+ 'layout' => $layout_columns,
296
+ ];
297
+
298
+ //----------------------------------------------------------------------
299
+ $options[] = [
300
+ 'type' => 'html',
301
+ 'html' => $this->group_header( __( 'Text settings', 'apt' ), '' ),
302
+ ];
303
+
304
+ $options[] = [
305
+ 'type' => 'checkbox',
306
+ 'way' => 'buttons',
307
+ 'name' => 'shadow',
308
+ 'default' => '0',
309
+ 'title' => __( 'Text shadow', 'apt' ),
310
+ 'hint' => __( 'Use text shadow?', 'apt' ),
311
+ 'eventsOn' => [
312
+ 'show' => '.factory-control-shadow-color',
313
+ ],
314
+ 'eventsOff' => [
315
+ 'hide' => '.factory-control-shadow-color',
316
+ ],
317
+ ];
318
+
319
+ $options[] = [
320
+ 'type' => 'wapt-color',
321
+ 'name' => 'shadow-color',
322
+ 'title' => __( 'Shadow color', 'apt' ),
323
+ 'hint' => __( 'Set the shadow color for the text', 'apt' ),
324
+ 'layout' => $layout_columns,
325
+ ];
326
+
327
+ $options[] = [
328
+ 'type' => 'dropdown',
329
+ 'way' => 'buttons',
330
+ 'name' => 'text-transform',
331
+ 'data' => [
332
+ [ 'no', __( 'No transform', 'apt' ) ],
333
+ [ 'upper', __( 'Uppercase', 'apt' ) ],
334
+ [ 'lower', __( 'Lowercase', 'apt' ) ],
335
+ ],
336
+ 'default' => 'no',
337
+ 'title' => __( 'Text transform', 'apt' ),
338
+ 'hint' => __( 'Select type of text transformation', 'apt' ),
339
+ ];
340
+
341
+ $options[] = [
342
+ 'type' => 'integer',
343
+ 'way' => 'text',
344
+ 'name' => 'text-crop',
345
+ 'units' => __( 'chars', 'apt' ),
346
+ 'default' => 50,
347
+ 'title' => __( 'Text length', 'apt' ),
348
+ 'hint' => __( 'Set the maximum text length', 'apt' ),
349
+ ];
350
+
351
+ $options[] = [
352
+ 'type' => 'integer',
353
+ 'way' => 'text',
354
+ 'name' => 'text-line-spacing',
355
+ 'range' => [ 0, 3 ],
356
+ 'default' => 1.5,
357
+ 'title' => __( 'Line spacing', 'apt' ),
358
+ 'hint' => __( 'Set the line spacing', 'apt' ),
359
+ ];
360
+
361
+ //----------------------------------------------------------------------
362
+ $options[] = [
363
+ 'type' => 'html',
364
+ 'html' => $this->group_header( __( 'Alignment', 'apt' ), '' ),
365
+ ];
366
+
367
+ $options[] = [
368
+ 'type' => 'dropdown',
369
+ 'way' => 'buttons',
370
+ 'name' => 'text-align-horizontal',
371
+ 'data' => [
372
+ [ 'left', __( 'Left', 'apt' ) ],
373
+ [ 'center', __( 'Center', 'apt' ) ],
374
+ [ 'right', __( 'Right', 'apt' ) ],
375
+ ],
376
+ 'default' => 'center',
377
+ 'title' => __( 'Horizontal text alignment', 'apt' ) . $pro,
378
+ 'hint' => __( 'Select how to horizontally align the text on the image', 'apt' ),
379
+ 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
380
+ ];
381
+
382
+ $options[] = [
383
+ 'type' => 'dropdown',
384
+ 'way' => 'buttons',
385
+ 'name' => 'text-align-vertical',
386
+ 'data' => [
387
+ [ 'top', __( 'Top', 'apt' ) ],
388
+ [ 'center', __( 'Center', 'apt' ) ],
389
+ [ 'bottom', __( 'Bottom', 'apt' ) ],
390
+ ],
391
+ 'default' => 'center',
392
+ 'title' => __( 'Vertical text alignment', 'apt' ) . $pro,
393
+ 'hint' => __( 'Select how to vertically align the text on the image', 'apt' ),
394
+ 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
395
+ ];
396
+
397
+ //----------------------------------------------------------------------
398
+ $options[] = [
399
+ 'type' => 'html',
400
+ 'html' => $this->group_header( __( 'Padding', 'apt' ), '' ),
401
+ ];
402
+
403
+ $options[] = [
404
+ 'type' => 'integer',
405
+ 'way' => 'text',
406
+ 'name' => 'text-padding-tb',
407
+ 'units' => __( 'px', 'apt' ),
408
+ 'default' => 15,
409
+ 'title' => __( 'Top/bottom text padding', 'apt' ) . $pro,
410
+ 'hint' => __( 'Padding at the top and bottom of the text', 'apt' ),
411
+ 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
412
+ ];
413
+
414
+ $options[] = [
415
+ 'type' => 'integer',
416
+ 'way' => 'text',
417
+ 'name' => 'text-padding-lr',
418
+ 'units' => __( 'px', 'apt' ),
419
+ 'default' => 15,
420
+ 'title' => __( 'Left/right text padding', 'apt' ) . $pro,
421
+ 'hint' => __( 'Padding at the left and right of the text', 'apt' ),
422
+ 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
423
+ ];
424
+
425
+ //----------------------------------------------------------------------
426
+ $options[] = [
427
+ 'type' => 'html',
428
+ 'html' => $this->group_header( __( 'Addition of text', 'apt' ), '' ),
429
+ ];
430
+
431
+ $options[] = [
432
+ 'type' => 'textbox',
433
+ 'name' => 'before-text',
434
+ 'default' => '',
435
+ 'title' => __( 'String before text', 'apt' ) . $pro,
436
+ 'hint' => __( 'Additional string before text. For a line break, use <b>[br]</b>', 'apt' ),
437
+ 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
438
+ 'htmlAttrs' => ( ! $is_premium ) ? [ 'disabled' => 'disabled' ] : [],
439
+ ];
440
+
441
+ $options[] = [
442
+ 'type' => 'textbox',
443
+ 'name' => 'after-text',
444
+ 'default' => '',
445
+ 'title' => __( 'String after text', 'apt' ) . $pro,
446
+ 'hint' => __( 'Additional string after text. For a line break, use <b>[br]</b>', 'apt' ),
447
+ 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
448
+ 'htmlAttrs' => ( ! $is_premium ) ? [ 'disabled' => 'disabled' ] : [],
449
+ ];
450
+
451
+ $form_options[] = [
452
+ 'type' => 'form-group',
453
+ 'items' => $options,
454
+ //'cssClass' => 'postbox'
455
+ ];
456
+
457
+ return $form_options;
458
+ }
459
+
460
+ }
 
 
admin/pages/license.php CHANGED
@@ -1,210 +1,214 @@
1
- <?php
2
-
3
- // Exit if accessed directly
4
- use WBCR\Factory_452\Premium\Interfaces\License;
5
- use WBCR\Factory_452\Premium\Provider;
6
-
7
- if ( ! defined( 'ABSPATH' ) ) {
8
- exit;
9
- }
10
-
11
- /**
12
- * Class WAPT_License_Page is used as template to display form to active premium functionality.
13
- *
14
- * @since 2.0.7
15
- */
16
- class WAPT_License extends WAPT_Page {
17
-
18
- /**
19
- * @var int
20
- */
21
- public $page_menu_position = 900;
22
-
23
- /**
24
- * @var bool
25
- */
26
- public $internal = false;
27
-
28
- /**
29
- * {@inheritdoc}
30
- */
31
- public $type = "page";
32
-
33
- /**
34
- * {@inheritdoc}
35
- */
36
- public $page_menu_dashicon = 'dashicons-admin-network';
37
-
38
- /**
39
- * {@inheritdoc}
40
- */
41
- public $available_for_multisite = true;
42
-
43
- /**
44
- * {@inheritdoc}
45
- */
46
- public $show_menu_tab = false;
47
-
48
- /**
49
- * @var string Name of the paid plan.
50
- */
51
- public $plan_name;
52
-
53
- // PREMIUM SECTION
54
- // ------------------------------------------------------------------
55
- /**
56
- * @since 2.0.7
57
- * @var bool
58
- */
59
- protected $is_premium;
60
-
61
- /**
62
- * @since 2.0.7
63
- * @var Provider
64
- */
65
- protected $premium;
66
-
67
- /**
68
- * @since 2.0.7
69
- * @var bool
70
- */
71
- protected $is_premium_active;
72
-
73
- /**
74
- * @since 2.0.7
75
- * @var bool
76
- */
77
- protected $premium_has_subscription;
78
-
79
- /**
80
- * @since 2.0.7
81
- * @var License
82
- */
83
- protected $premium_license;
84
-
85
- // END PREMIUM SECTION
86
- // ------------------------------------------------------------------
87
-
88
- /**
89
- * {@inheritdoc}
90
- * @param WAPT_Plugin $plugin
91
- */
92
- public function __construct( $plugin ) {
93
- $this->plugin = $plugin;
94
-
95
- $this->id = 'license';
96
- $this->menu_title = '<span style="color:#f18500">' . __( 'License', 'apt' ) . '</span>';
97
- $this->page_title = __( 'License of APT', 'apt' );
98
- $this->template_name = "license";
99
- $this->menu_target = $plugin->getPrefix() . "generate-" . $plugin->getPluginName();
100
- $this->capabilitiy = "manage_options";
101
-
102
- $this->premium = WAPT_Plugin::app()->premium;
103
- $this->is_premium = $this->premium->is_activate();
104
- $this->is_premium_active = $this->premium->is_active();
105
- $this->premium_has_subscription = $this->premium->has_paid_subscription();
106
- $this->premium_license = $this->premium->get_license();
107
-
108
- parent::__construct( $plugin );
109
- }
110
-
111
- /**
112
- * [MAGIC] Magic method that configures assets for a page.
113
- */
114
- public function assets( $scripts, $styles ) {
115
- parent::assets( $scripts, $styles );
116
-
117
- $this->styles->add( WAPT_PLUGIN_URL . '/admin/assets/css/license-manager.css' );
118
-
119
- $this->styles->request( array(
120
- 'bootstrap.core',
121
- 'bootstrap.form-groups',
122
- 'bootstrap.separator',
123
- ), 'bootstrap' );
124
-
125
- $this->scripts->add( WAPT_PLUGIN_URL . '/admin/assets/js/license-manager.js' );
126
- }
127
-
128
- /**
129
- * Get before content.
130
- *
131
- * @return string Before content.
132
- */
133
- protected function get_plan_description() {
134
- return '';
135
- }
136
-
137
- /**
138
- * @return string
139
- */
140
- protected function get_hidden_license_key() {
141
- if ( ! $this->is_premium ) {
142
- return '';
143
- }
144
-
145
- return $this->premium_license->get_hidden_key();
146
- }
147
-
148
- /**
149
- * @return string
150
- */
151
- protected function get_plan() {
152
- if ( ! $this->is_premium ) {
153
- return 'free';
154
- }
155
-
156
- return $this->premium->get_plan();
157
- }
158
-
159
- /**
160
- * @return mixed
161
- */
162
- protected function get_expiration_days() {
163
- return $this->premium_license->get_expiration_time( 'days' );
164
- }
165
-
166
- /**
167
- * @return string
168
- */
169
- protected function get_billing_cycle_readable() {
170
- if ( ! $this->is_premium ) {
171
- return '';
172
- }
173
-
174
- $billing_cycle = $this->premium->get_billing_cycle();
175
- $billing = 'lifetime';
176
-
177
- if ( 1 == $billing_cycle ) {
178
- $billing = 'month';
179
- } else if ( 12 == $billing_cycle ) {
180
- $billing = 'year';
181
- }
182
-
183
- return $billing;
184
- }
185
-
186
- /**
187
- * Тип лицензии, цветовое оформление для формы лицензирования
188
- * free - бесплатная
189
- * gift - пожизненная лицензия, лицензия на особых условиях
190
- * trial - красный цвет, применяется для триалов, если лиценизия истекла или заблокирована
191
- * paid - обычная оплаченная лицензия, в данный момент активна.
192
- *
193
- * @return string
194
- */
195
- protected function get_license_type() {
196
- if ( ! $this->is_premium ) {
197
- return 'free';
198
- }
199
-
200
- $license = $this->premium_license;
201
-
202
- if ( $license->is_lifetime() ) {
203
- return 'gift';
204
- } else if ( $license->get_expiration_time( 'days' ) < 1 ) {
205
- return 'trial';
206
- }
207
-
208
- return 'paid';
209
- }
210
- }
 
 
 
 
1
+ <?php
2
+
3
+ // Exit if accessed directly
4
+ use WBCR\Factory_453\Premium\Interfaces\License;
5
+ use WBCR\Factory_453\Premium\Provider;
6
+
7
+ if ( ! defined( 'ABSPATH' ) ) {
8
+ exit;
9
+ }
10
+
11
+ /**
12
+ * Class WAPT_License_Page is used as template to display form to active premium functionality.
13
+ *
14
+ * @since 2.0.7
15
+ */
16
+ class WAPT_License extends WAPT_Page {
17
+
18
+ /**
19
+ * @var int
20
+ */
21
+ public $page_menu_position = 900;
22
+
23
+ /**
24
+ * @var bool
25
+ */
26
+ public $internal = false;
27
+
28
+ /**
29
+ * {@inheritdoc}
30
+ */
31
+ public $type = 'page';
32
+
33
+ /**
34
+ * {@inheritdoc}
35
+ */
36
+ public $page_menu_dashicon = 'dashicons-admin-network';
37
+
38
+ /**
39
+ * {@inheritdoc}
40
+ */
41
+ public $available_for_multisite = true;
42
+
43
+ /**
44
+ * {@inheritdoc}
45
+ */
46
+ public $show_menu_tab = false;
47
+
48
+ /**
49
+ * @var string Name of the paid plan.
50
+ */
51
+ public $plan_name;
52
+
53
+ // PREMIUM SECTION
54
+ // ------------------------------------------------------------------
55
+ /**
56
+ * @since 2.0.7
57
+ * @var bool
58
+ */
59
+ protected $is_premium;
60
+
61
+ /**
62
+ * @since 2.0.7
63
+ * @var Provider
64
+ */
65
+ protected $premium;
66
+
67
+ /**
68
+ * @since 2.0.7
69
+ * @var bool
70
+ */
71
+ protected $is_premium_active;
72
+
73
+ /**
74
+ * @since 2.0.7
75
+ * @var bool
76
+ */
77
+ protected $premium_has_subscription;
78
+
79
+ /**
80
+ * @since 2.0.7
81
+ * @var License
82
+ */
83
+ protected $premium_license;
84
+
85
+ // END PREMIUM SECTION
86
+ // ------------------------------------------------------------------
87
+
88
+ /**
89
+ * {@inheritdoc}
90
+ *
91
+ * @param WAPT_Plugin $plugin
92
+ */
93
+ public function __construct( $plugin ) {
94
+ $this->plugin = $plugin;
95
+
96
+ $this->id = 'license';
97
+ $this->menu_title = '<span style="color:#f18500">' . __( 'License', 'apt' ) . '</span>';
98
+ $this->page_title = __( 'License of APT', 'apt' );
99
+ $this->template_name = 'license';
100
+ $this->menu_target = $plugin->getPrefix() . 'generate-' . $plugin->getPluginName();
101
+ $this->capabilitiy = 'manage_options';
102
+
103
+ $this->premium = WAPT_Plugin::app()->premium;
104
+ $this->is_premium = $this->premium->is_activate();
105
+ $this->is_premium_active = $this->premium->is_active();
106
+ $this->premium_has_subscription = $this->premium->has_paid_subscription();
107
+ $this->premium_license = $this->premium->get_license();
108
+
109
+ parent::__construct( $plugin );
110
+ }
111
+
112
+ /**
113
+ * [MAGIC] Magic method that configures assets for a page.
114
+ */
115
+ public function assets( $scripts, $styles ) {
116
+ parent::assets( $scripts, $styles );
117
+
118
+ $this->styles->add( WAPT_PLUGIN_URL . '/admin/assets/css/license-manager.css' );
119
+
120
+ $this->styles->request(
121
+ array(
122
+ 'bootstrap.core',
123
+ 'bootstrap.form-groups',
124
+ 'bootstrap.separator',
125
+ ),
126
+ 'bootstrap'
127
+ );
128
+
129
+ $this->scripts->add( WAPT_PLUGIN_URL . '/admin/assets/js/license-manager.js' );
130
+ }
131
+
132
+ /**
133
+ * Get before content.
134
+ *
135
+ * @return string Before content.
136
+ */
137
+ protected function get_plan_description() {
138
+ return '';
139
+ }
140
+
141
+ /**
142
+ * @return string
143
+ */
144
+ protected function get_hidden_license_key() {
145
+ if ( ! $this->is_premium ) {
146
+ return '';
147
+ }
148
+
149
+ return $this->premium_license->get_hidden_key();
150
+ }
151
+
152
+ /**
153
+ * @return string
154
+ */
155
+ protected function get_plan() {
156
+ if ( ! $this->is_premium ) {
157
+ return 'free';
158
+ }
159
+
160
+ return $this->premium->get_plan();
161
+ }
162
+
163
+ /**
164
+ * @return mixed
165
+ */
166
+ protected function get_expiration_days() {
167
+ return $this->premium_license->get_expiration_time( 'days' );
168
+ }
169
+
170
+ /**
171
+ * @return string
172
+ */
173
+ protected function get_billing_cycle_readable() {
174
+ if ( ! $this->is_premium ) {
175
+ return '';
176
+ }
177
+
178
+ $billing_cycle = $this->premium->get_billing_cycle();
179
+ $billing = 'lifetime';
180
+
181
+ if ( 1 == $billing_cycle ) {
182
+ $billing = 'month';
183
+ } elseif ( 12 == $billing_cycle ) {
184
+ $billing = 'year';
185
+ }
186
+
187
+ return $billing;
188
+ }
189
+
190
+ /**
191
+ * Тип лицензии, цветовое оформление для формы лицензирования
192
+ * free - бесплатная
193
+ * gift - пожизненная лицензия, лицензия на особых условиях
194
+ * trial - красный цвет, применяется для триалов, если лиценизия истекла или заблокирована
195
+ * paid - обычная оплаченная лицензия, в данный момент активна.
196
+ *
197
+ * @return string
198
+ */
199
+ protected function get_license_type() {
200
+ if ( ! $this->is_premium ) {
201
+ return 'free';
202
+ }
203
+
204
+ $license = $this->premium_license;
205
+
206
+ if ( $license->is_lifetime() ) {
207
+ return 'gift';
208
+ } elseif ( $license->get_expiration_time( 'days' ) < 1 ) {
209
+ return 'trial';
210
+ }
211
+
212
+ return 'paid';
213
+ }
214
+ }
admin/pages/log.php CHANGED
@@ -1,102 +1,103 @@
1
- <?php
2
- // Exit if accessed directly
3
- if ( ! defined( 'ABSPATH' ) ) {
4
- exit;
5
- }
6
-
7
- require_once WAPT_PLUGIN_DIR . '/admin/class-page-logger.php';
8
-
9
- /**
10
- * Класс отвечает за работу страницы логов.
11
- *
12
- * @author Eugene Jokerov <jokerov@gmail.com>
13
- * @author Alexander Teshabaev <sasha.tesh@gmail.com>
14
- * @copyright (c) 2018, Webcraftic
15
- * @version 1.0
16
- */
17
- class WAPT_Log extends WAPT_Page_Logger {
18
-
19
- /**
20
- * {@inheritdoc}
21
- */
22
- public $id;
23
-
24
- /**
25
- * Тип страницы
26
- * options - предназначена для создании страниц с набором опций и настроек.
27
- * page - произвольный контент, любой html код
28
- *
29
- * @var string
30
- */
31
- public $type = 'page';
32
-
33
- /**
34
- * @var string
35
- */
36
- public $page_menu_dashicon = 'dashicons-list-view';
37
-
38
- /**
39
- * Menu position (only if a page is placed as a main menu).
40
- * @link http://codex.wordpress.org/Function_Reference/add_menu_page
41
- * @var string
42
- */
43
- public $menu_position = 58;
44
-
45
- /**
46
- * @var bool
47
- */
48
- public $internal = false;
49
-
50
- /**
51
- * Заголовок страницы, также использует в меню, как название закладки
52
- *
53
- * @var bool
54
- */
55
- public $show_page_title = true;
56
-
57
- /**
58
- * @var int
59
- */
60
- public $page_menu_position = 300;
61
-
62
- /**
63
- * {@inheritdoc}
64
- */
65
- public $available_for_multisite = false;
66
-
67
- /**
68
- * {@inheritdoc}
69
- */
70
- public $show_right_sidebar_in_options = false;
71
-
72
- /**
73
- * @param WAPT_Plugin $plugin
74
- */
75
- public function __construct( WAPT_Plugin $plugin ) {
76
- $this->id = 'log';
77
- $this->menu_target = $plugin->getPrefix() . "generate-" . $plugin->getPluginName();
78
- $this->page_title = __( 'Plugin logs', 'apt' );
79
- $this->menu_title = $this->getMenuTitle();
80
-
81
- $this->plugin = $plugin;
82
-
83
- parent::__construct( $plugin );
84
- }
85
-
86
- /**
87
- * {@inheritdoc}
88
- */
89
- public function getMenuTitle() {
90
- return __( 'Logs', 'apt' );
91
- }
92
-
93
- /**
94
- * {@inheritdoc}
95
- *
96
- * @return void
97
- * @since 1.0.0
98
- */
99
- public function assets( $scripts, $styles ) {
100
- parent::assets( $scripts, $styles );
101
- }
102
- }
 
1
+ <?php
2
+ // Exit if accessed directly
3
+ if ( ! defined( 'ABSPATH' ) ) {
4
+ exit;
5
+ }
6
+
7
+ require_once WAPT_PLUGIN_DIR . '/admin/class-page-logger.php';
8
+
9
+ /**
10
+ * Класс отвечает за работу страницы логов.
11
+ *
12
+ * @author Eugene Jokerov <jokerov@gmail.com>
13
+ * @author Alexander Teshabaev <sasha.tesh@gmail.com>
14
+ * @copyright (c) 2018, Webcraftic
15
+ * @version 1.0
16
+ */
17
+ class WAPT_Log extends WAPT_Page_Logger {
18
+
19
+ /**
20
+ * {@inheritdoc}
21
+ */
22
+ public $id;
23
+
24
+ /**
25
+ * Тип страницы
26
+ * options - предназначена для создании страниц с набором опций и настроек.
27
+ * page - произвольный контент, любой html код
28
+ *
29
+ * @var string
30
+ */
31
+ public $type = 'page';
32
+
33
+ /**
34
+ * @var string
35
+ */
36
+ public $page_menu_dashicon = 'dashicons-list-view';
37
+
38
+ /**
39
+ * Menu position (only if a page is placed as a main menu).
40
+ *
41
+ * @link http://codex.wordpress.org/Function_Reference/add_menu_page
42
+ * @var string
43
+ */
44
+ public $menu_position = 58;
45
+
46
+ /**
47
+ * @var bool
48
+ */
49
+ public $internal = false;
50
+
51
+ /**
52
+ * Заголовок страницы, также использует в меню, как название закладки
53
+ *
54
+ * @var bool
55
+ */
56
+ public $show_page_title = true;
57
+
58
+ /**
59
+ * @var int
60
+ */
61
+ public $page_menu_position = 300;
62
+
63
+ /**
64
+ * {@inheritdoc}
65
+ */
66
+ public $available_for_multisite = false;
67
+
68
+ /**
69
+ * {@inheritdoc}
70
+ */
71
+ public $show_right_sidebar_in_options = false;
72
+
73
+ /**
74
+ * @param WAPT_Plugin $plugin
75
+ */
76
+ public function __construct( WAPT_Plugin $plugin ) {
77
+ $this->id = 'log';
78
+ $this->menu_target = $plugin->getPrefix() . 'generate-' . $plugin->getPluginName();
79
+ $this->page_title = __( 'Plugin logs', 'apt' );
80
+ $this->menu_title = $this->getMenuTitle();
81
+
82
+ $this->plugin = $plugin;
83
+
84
+ parent::__construct( $plugin );
85
+ }
86
+
87
+ /**
88
+ * {@inheritdoc}
89
+ */
90
+ public function getMenuTitle() {
91
+ return __( 'Logs', 'apt' );
92
+ }
93
+
94
+ /**
95
+ * {@inheritdoc}
96
+ *
97
+ * @return void
98
+ * @since 1.0.0
99
+ */
100
+ public function assets( $scripts, $styles ) {
101
+ parent::assets( $scripts, $styles );
102
+ }
103
+ }
admin/pages/settings.php CHANGED
@@ -1,248 +1,256 @@
1
- <?php
2
-
3
- use WBCR\APT\AutoPostThumbnails;
4
-
5
- // Exit if accessed directly
6
- if ( ! defined( 'ABSPATH' ) ) {
7
- exit;
8
- }
9
-
10
- require_once WAPT_PLUGIN_DIR . '/admin/class-page.php';
11
-
12
- /**
13
- * The page Settings.
14
- *
15
- * @since 1.0.0
16
- */
17
- class WAPT_Settings extends WAPT_Page {
18
-
19
- /**
20
- * Тип страницы
21
- * options - предназначена для создании страниц с набором опций и настроек.
22
- * page - произвольный контент, любой html код
23
- *
24
- * @var string
25
- */
26
- public $type = 'options';
27
-
28
- /**
29
- * @var bool
30
- */
31
- public $internal = false;
32
-
33
- /**
34
- * @var int
35
- */
36
- public $page_menu_position = 200;
37
-
38
- /**
39
- * Menu icon (only if a page is placed as a main menu).
40
- * For example: '~/assets/img/menu-icon.png'
41
- * For example dashicons: '\f321'
42
- *
43
- * @var string
44
- */
45
- public $menu_icon = '';
46
-
47
- /**
48
- * @var string
49
- */
50
- public $page_menu_dashicon = 'dashicons-admin-settings';
51
-
52
- /**
53
- * {@inheritdoc}
54
- */
55
- public $show_menu_tab = true;
56
-
57
- /**
58
- * @var array
59
- */
60
- public $post_types;
61
-
62
- /**
63
- * @param WAPT_Plugin $plugin
64
- */
65
- public function __construct( $plugin ) {
66
- $this->id = $plugin->getPrefix() . "settings";
67
- $this->menu_target = $plugin->getPrefix() . "generate-" . $plugin->getPluginName();
68
- $this->page_title = __( 'Settings of APT', 'apt' );
69
- $this->menu_title = __( 'Settings', 'apt' );
70
- $this->page_menu_short_description = __( 'General settings', 'apt' );
71
- $this->capabilitiy = "manage_options";
72
- $this->template_name = "settings";
73
-
74
- $this->plugin = $plugin;
75
- $this->post_types = $this->getPostTypes();
76
-
77
- parent::__construct( $plugin );
78
- }
79
-
80
- /**
81
- * Enqueue page assets
82
- *
83
- * @return void
84
- * @since 3.8.1
85
- * @see Wbcr_FactoryPages451_AdminPage
86
- *
87
- */
88
- public function assets( $scripts, $styles ) {
89
- parent::assets( $scripts, $styles );
90
-
91
- $this->scripts->request( [
92
- 'control.list',
93
- 'bootstrap.accordion',
94
- 'bootstrap.tab',
95
- ], 'bootstrap' );
96
-
97
- $this->styles->request( [
98
- 'control.list',
99
- 'bootstrap.accordion',
100
- 'bootstrap.tab',
101
- ], 'bootstrap' );
102
-
103
- $this->scripts->add( WAPT_PLUGIN_URL . '/admin/assets/js/settings.js', [ 'jquery' ], 'wapt-settings-script', WAPT_PLUGIN_VERSION );
104
- $this->styles->add( WAPT_PLUGIN_URL . '/admin/assets/css/settings.css', [], 'wapt-settings-style', WAPT_PLUGIN_VERSION );
105
- }
106
-
107
- /**
108
- * Returns options for the Basic Settings screen.
109
- *
110
- * @return array
111
- * @since 3.6.2
112
- */
113
- public function getPageOptions() {
114
- $is_premium = WAPT_Plugin::app()->is_premium();
115
- $pro = $is_premium ? '' : "<br><span class='wapt-icon-pro wapt-icon-pro-span'>PRO</span>";
116
-
117
- $options = [];
118
-
119
- $options[] = [
120
- 'type' => 'html',
121
- 'html' => $this->group_header( __( 'General', 'apt' ), __( 'Basic plugin settings', 'apt' ) ),
122
- ];
123
-
124
- $options[] = [
125
- 'type' => 'checkbox',
126
- 'way' => 'buttons',
127
- 'name' => 'auto_generation',
128
- 'title' => __( 'Add featured image when saving a post', 'apt' ),
129
- 'default' => true,
130
- 'hint' => __( 'Automatically add featured image when saving a post', 'apt' ),
131
- ];
132
-
133
- $options[] = [
134
- 'type' => 'dropdown',
135
- 'way' => 'buttons',
136
- 'name' => 'generate_autoimage',
137
- 'data' => [
138
- [ 'find', __( 'Find in post', 'apt' ) ],
139
- [ 'generate', __( 'Generate from title', 'apt' ) ],
140
- [ 'both', __( 'Find or generate', 'apt' ) ],
141
- [ 'google', __( 'Google', 'apt' ) ],
142
- [ 'find_google', __( 'Find or Google', 'apt' ) ],
143
- ],
144
- 'default' => 'find',
145
- 'title' => __( 'Featured image', 'apt' ),
146
- 'hint' => __( "How to generate featured image:
147
- <br> <b>Find in post:</b> search for the first image in the post text
148
- <br> <b>Generate from title:</b> created from the title on a colored background
149
- <br> <b>Find or generate:</b> find an image in the post text, if it is not present, generate it from the title
150
- <br> <b>Google:</b> search for an image by title of the post in Google
151
- <br> <b>Find or Google:</b> find an image in the post text, if it is not present, search for an image by title of the post in Google", 'apt' ),
152
- 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro-item' ] : [],
153
- ];
154
-
155
- $options[] = [
156
- 'type' => 'list',
157
- 'way' => 'checklist',
158
- 'name' => 'auto_post_types',
159
- 'data' => $is_premium ? $this->getPostTypes() : $this->post_types,
160
- 'default' => 'post,page',
161
- 'title' => __( 'Generate for post types', 'apt' ),
162
- 'hint' => __( "What types of posts to generate images for", 'apt' ),
163
- ];
164
-
165
- $options[] = [
166
- 'type' => 'checkbox',
167
- 'way' => 'buttons',
168
- 'name' => 'delete_settings',
169
- 'title' => __( 'Delete settings when removing the plugin', 'apt' ),
170
- 'default' => false,
171
- 'hint' => __( 'Delete settings when removing the plugin', 'apt' ),
172
- ];
173
-
174
- /* ------------------ IMPORT SETTINGS -----------------------*/
175
- $options[] = [
176
- 'type' => 'html',
177
- 'html' => $this->group_header( __( 'Import', 'apt' ), __( 'Images import settings', 'apt' ) ),
178
- ];
179
-
180
- $options[] = [
181
- 'type' => 'checkbox',
182
- 'way' => 'buttons',
183
- 'name' => 'auto_upload_images',
184
- 'title' => __( 'Auto images import', 'apt' ),
185
- 'default' => false,
186
- 'hint' => __( 'Import post images to the media library and replacing them in the text when saving the post', 'apt' ),
187
- 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
188
- ];
189
-
190
- $options[] = [
191
- 'type' => 'list',
192
- 'way' => 'checklist',
193
- 'name' => 'import_post_types',
194
- 'data' => $is_premium ? $this->getPostTypes() : $this->post_types,
195
- 'default' => '',
196
- 'title' => __( 'Import for post types', 'apt' ) . $pro,
197
- 'hint' => __( "What types of posts to import images for", 'apt' ),
198
- 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
199
- 'htmlAttrs' => ( ! $is_premium ) ? [ 'disabled' => 'disabled' ] : [],
200
- ];
201
-
202
- /* ------------------ API SETTINGS -----------------------*/
203
- $options[] = [
204
- 'type' => 'html',
205
- 'html' => $this->group_header( __( 'Google API', 'apt' ), __( 'Settings connecting to the Google API service', 'apt' ) ),
206
- ];
207
-
208
- /* GOOGLE */
209
- $options[] = [
210
- 'type' => 'html',
211
- 'html' => $this->instruction( __( 'Google API', 'apt' ), '<a href="https://www.youtube.com/watch?v=Bxy8Yqp5XX0" target="_blank" rel="noopener">' . __( 'How to get google api key & custom search engine id', 'apt' ) . '</a>' ),
212
- ];
213
-
214
- $options[] = [
215
- 'type' => 'hidden',
216
- 'name' => 'ajax_nonce',
217
- 'value' => ''//wp_create_nonce( 'check-api-key' )
218
- ];
219
-
220
- // Текстовое поле
221
- $options[] = [
222
- 'type' => 'textbox',
223
- 'name' => 'google_apikey',
224
- 'title' => __( 'API key for Google', 'apt' ),
225
- 'hint' => __( 'You can get API key after registration on the site' ) . ' <a href="https://developers.google.com/custom-search/v1/overview" target="_blank" rel="noopener">https://developers.google.com/custom-search/v1/overview</a>',
226
- 'default' => '',
227
- ];
228
-
229
- $options[] = [
230
- 'type' => 'textbox',
231
- 'name' => 'google_cse',
232
- 'title' => __( 'Google Custom Search Engine ID', 'apt' ),
233
- 'hint' => __( 'You can get API key after registration on the site', 'apt' ) . ' <a href="https://cse.google.com/cse/all" target="_blank" rel="noopener">https://cse.google.com/cse/all</a>',
234
- 'default' => '',
235
- ];
236
-
237
- $options = apply_filters( 'wapt/settings/form_options', $options );
238
-
239
- $form_options[] = [
240
- 'type' => 'form-group',
241
- 'items' => $options,
242
- //'cssClass' => 'postbox'
243
- ];
244
-
245
- return $form_options;
246
- }
247
-
248
- }
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ use WBCR\APT\AutoPostThumbnails;
4
+
5
+ // Exit if accessed directly
6
+ if ( ! defined( 'ABSPATH' ) ) {
7
+ exit;
8
+ }
9
+
10
+ require_once WAPT_PLUGIN_DIR . '/admin/class-page.php';
11
+
12
+ /**
13
+ * The page Settings.
14
+ *
15
+ * @since 1.0.0
16
+ */
17
+ class WAPT_Settings extends WAPT_Page {
18
+
19
+ /**
20
+ * Тип страницы
21
+ * options - предназначена для создании страниц с набором опций и настроек.
22
+ * page - произвольный контент, любой html код
23
+ *
24
+ * @var string
25
+ */
26
+ public $type = 'options';
27
+
28
+ /**
29
+ * @var bool
30
+ */
31
+ public $internal = false;
32
+
33
+ /**
34
+ * @var int
35
+ */
36
+ public $page_menu_position = 200;
37
+
38
+ /**
39
+ * Menu icon (only if a page is placed as a main menu).
40
+ * For example: '~/assets/img/menu-icon.png'
41
+ * For example dashicons: '\f321'
42
+ *
43
+ * @var string
44
+ */
45
+ public $menu_icon = '';
46
+
47
+ /**
48
+ * @var string
49
+ */
50
+ public $page_menu_dashicon = 'dashicons-admin-settings';
51
+
52
+ /**
53
+ * {@inheritdoc}
54
+ */
55
+ public $show_menu_tab = true;
56
+
57
+ /**
58
+ * @var array
59
+ */
60
+ public $post_types;
61
+
62
+ /**
63
+ * @param WAPT_Plugin $plugin
64
+ */
65
+ public function __construct( $plugin ) {
66
+ $this->id = $plugin->getPrefix() . 'settings';
67
+ $this->menu_target = $plugin->getPrefix() . 'generate-' . $plugin->getPluginName();
68
+ $this->page_title = __( 'Settings of APT', 'apt' );
69
+ $this->menu_title = __( 'Settings', 'apt' );
70
+ $this->page_menu_short_description = __( 'General settings', 'apt' );
71
+ $this->capabilitiy = 'manage_options';
72
+ $this->template_name = 'settings';
73
+
74
+ $this->plugin = $plugin;
75
+ $this->post_types = $this->getPostTypes();
76
+
77
+ parent::__construct( $plugin );
78
+ }
79
+
80
+ /**
81
+ * Enqueue page assets
82
+ *
83
+ * @return void
84
+ * @since 3.8.1
85
+ * @see Wbcr_FactoryPages452_AdminPage
86
+ */
87
+ public function assets( $scripts, $styles ) {
88
+ parent::assets( $scripts, $styles );
89
+
90
+ $this->scripts->request(
91
+ [
92
+ 'control.list',
93
+ 'bootstrap.accordion',
94
+ 'bootstrap.tab',
95
+ ],
96
+ 'bootstrap'
97
+ );
98
+
99
+ $this->styles->request(
100
+ [
101
+ 'control.list',
102
+ 'bootstrap.accordion',
103
+ 'bootstrap.tab',
104
+ ],
105
+ 'bootstrap'
106
+ );
107
+
108
+ $this->scripts->add( WAPT_PLUGIN_URL . '/admin/assets/js/settings.js', [ 'jquery' ], 'wapt-settings-script', WAPT_PLUGIN_VERSION );
109
+ $this->styles->add( WAPT_PLUGIN_URL . '/admin/assets/css/settings.css', [], 'wapt-settings-style', WAPT_PLUGIN_VERSION );
110
+ }
111
+
112
+ /**
113
+ * Returns options for the Basic Settings screen.
114
+ *
115
+ * @return array
116
+ * @since 3.6.2
117
+ */
118
+ public function getPageOptions() {
119
+ $is_premium = WAPT_Plugin::app()->is_premium();
120
+ $pro = $is_premium ? '' : "<br><span class='wapt-icon-pro wapt-icon-pro-span'>PRO</span>";
121
+
122
+ $options = [];
123
+
124
+ $options[] = [
125
+ 'type' => 'html',
126
+ 'html' => $this->group_header( __( 'General', 'apt' ), __( 'Basic plugin settings', 'apt' ) ),
127
+ ];
128
+
129
+ $options[] = [
130
+ 'type' => 'checkbox',
131
+ 'way' => 'buttons',
132
+ 'name' => 'auto_generation',
133
+ 'title' => __( 'Add featured image when saving a post', 'apt' ),
134
+ 'default' => true,
135
+ 'hint' => __( 'Automatically add featured image when saving a post', 'apt' ),
136
+ ];
137
+
138
+ $options[] = [
139
+ 'type' => 'dropdown',
140
+ 'way' => 'buttons',
141
+ 'name' => 'generate_autoimage',
142
+ 'data' => [
143
+ [ 'find', __( 'Find in post', 'apt' ) ],
144
+ [ 'generate', __( 'Generate from title', 'apt' ) ],
145
+ [ 'both', __( 'Find or generate', 'apt' ) ],
146
+ [ 'google', __( 'Google', 'apt' ) ],
147
+ [ 'find_google', __( 'Find or Google', 'apt' ) ],
148
+ ],
149
+ 'default' => 'find',
150
+ 'title' => __( 'Featured image', 'apt' ),
151
+ 'hint' => __(
152
+ 'How to generate featured image:
153
+ <br> <b>Find in post:</b> search for the first image in the post text
154
+ <br> <b>Generate from title:</b> created from the title on a colored background
155
+ <br> <b>Find or generate:</b> find an image in the post text, if it is not present, generate it from the title
156
+ <br> <b>Google:</b> search for an image by title of the post in Google
157
+ <br> <b>Find or Google:</b> find an image in the post text, if it is not present, search for an image by title of the post in Google',
158
+ 'apt'
159
+ ),
160
+ 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro-item' ] : [],
161
+ ];
162
+
163
+ $options[] = [
164
+ 'type' => 'list',
165
+ 'way' => 'checklist',
166
+ 'name' => 'auto_post_types',
167
+ 'data' => $is_premium ? $this->getPostTypes() : $this->post_types,
168
+ 'default' => 'post,page',
169
+ 'title' => __( 'Generate for post types', 'apt' ),
170
+ 'hint' => __( 'What types of posts to generate images for', 'apt' ),
171
+ ];
172
+
173
+ $options[] = [
174
+ 'type' => 'checkbox',
175
+ 'way' => 'buttons',
176
+ 'name' => 'delete_settings',
177
+ 'title' => __( 'Delete settings when removing the plugin', 'apt' ),
178
+ 'default' => false,
179
+ 'hint' => __( 'Delete settings when removing the plugin', 'apt' ),
180
+ ];
181
+
182
+ /* ------------------ IMPORT SETTINGS -----------------------*/
183
+ $options[] = [
184
+ 'type' => 'html',
185
+ 'html' => $this->group_header( __( 'Import', 'apt' ), __( 'Images import settings', 'apt' ) ),
186
+ ];
187
+
188
+ $options[] = [
189
+ 'type' => 'checkbox',
190
+ 'way' => 'buttons',
191
+ 'name' => 'auto_upload_images',
192
+ 'title' => __( 'Auto images import', 'apt' ),
193
+ 'default' => false,
194
+ 'hint' => __( 'Import post images to the media library and replacing them in the text when saving the post', 'apt' ),
195
+ 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
196
+ ];
197
+
198
+ $options[] = [
199
+ 'type' => 'list',
200
+ 'way' => 'checklist',
201
+ 'name' => 'import_post_types',
202
+ 'data' => $is_premium ? $this->getPostTypes() : $this->post_types,
203
+ 'default' => '',
204
+ 'title' => __( 'Import for post types', 'apt' ) . $pro,
205
+ 'hint' => __( 'What types of posts to import images for', 'apt' ),
206
+ 'cssClass' => ( ! $is_premium ) ? [ 'wapt-icon-pro' ] : [],
207
+ 'htmlAttrs' => ( ! $is_premium ) ? [ 'disabled' => 'disabled' ] : [],
208
+ ];
209
+
210
+ /* ------------------ API SETTINGS -----------------------*/
211
+ $options[] = [
212
+ 'type' => 'html',
213
+ 'html' => $this->group_header( __( 'Google API', 'apt' ), __( 'Settings connecting to the Google API service', 'apt' ) ),
214
+ ];
215
+
216
+ /* GOOGLE */
217
+ $options[] = [
218
+ 'type' => 'html',
219
+ 'html' => $this->instruction( __( 'Google API', 'apt' ), '<a href="https://www.youtube.com/watch?v=Bxy8Yqp5XX0" target="_blank" rel="noopener">' . __( 'How to get google api key & custom search engine id', 'apt' ) . '</a>' ),
220
+ ];
221
+
222
+ $options[] = [
223
+ 'type' => 'hidden',
224
+ 'name' => 'ajax_nonce',
225
+ 'value' => '', //wp_create_nonce( 'check-api-key' )
226
+ ];
227
+
228
+ // Текстовое поле
229
+ $options[] = [
230
+ 'type' => 'textbox',
231
+ 'name' => 'google_apikey',
232
+ 'title' => __( 'API key for Google', 'apt' ),
233
+ 'hint' => __( 'You can get API key after registration on the site' ) . ' <a href="https://developers.google.com/custom-search/v1/overview" target="_blank" rel="noopener">https://developers.google.com/custom-search/v1/overview</a>',
234
+ 'default' => '',
235
+ ];
236
+
237
+ $options[] = [
238
+ 'type' => 'textbox',
239
+ 'name' => 'google_cse',
240
+ 'title' => __( 'Google Custom Search Engine ID', 'apt' ),
241
+ 'hint' => __( 'You can get API key after registration on the site', 'apt' ) . ' <a href="https://cse.google.com/cse/all" target="_blank" rel="noopener">https://cse.google.com/cse/all</a>',
242
+ 'default' => '',
243
+ ];
244
+
245
+ $options = apply_filters( 'wapt/settings/form_options', $options );
246
+
247
+ $form_options[] = [
248
+ 'type' => 'form-group',
249
+ 'items' => $options,
250
+ //'cssClass' => 'postbox'
251
+ ];
252
+
253
+ return $form_options;
254
+ }
255
+
256
+ }
admin/views/media-library.php CHANGED
@@ -1,251 +1,259 @@
1
- <?php
2
- $ajaxloader = WAPT_PLUGIN_URL . "/admin/assets/img/ajax-loader-line.gif";
3
- $apt_content_nonce = wp_create_nonce( 'apt_content' );
4
- $post_id = - 1;
5
- if ( isset( $_GET['post_id'] ) ) {
6
- $post_id = absint( $_GET['post_id'] ) ? absint( $_GET['post_id'] ) : -1;
7
- }
8
-
9
-
10
- ?>
11
-
12
- <?php if ( WAPT_Plugin::app()->premium->is_activate() ): ?>
13
- <div class="watson-categories">
14
- <div id="ajaxloader-watson" style="display: none">
15
- <img src="<?php echo $ajaxloader ?>" alt="">
16
- </div>
17
- <div id="message"></div>
18
- <div class="categories">
19
- <ul id="categories-list">
20
- <li></li>
21
- </ul>
22
- </div>
23
- </div>
24
- <?php endif; ?>
25
-
26
- <div class="tabs">
27
- <ul>
28
- <?php $i = 1;
29
- foreach ( $this->sources as $src => $slug ) {
30
- if ( $slug === '_skip' ) {
31
- continue;
32
- }
33
-
34
- $is_pro = "";
35
- if ( empty( $slug ) && ! WAPT_Plugin::app()->premium->is_activate() ) {
36
- $is_pro = " (PRO)";
37
- }
38
- $is_pro = "<sup class='wapt-sup-pro'>" . $is_pro . "</sup>";
39
-
40
- echo "<li id='tabs-" . $i ++ . "'>" . strtoupper( $src ) . $is_pro . "</li>";
41
- } ?>
42
- </ul>
43
- <div id='ajaxloader' style='display:none;'><img src='<?php echo $ajaxloader; ?>' width='150px' alt=''></div>
44
- <div id="media-frame-content">
45
- <?php foreach ( $this->sources as $src => $slug ) {
46
- if ( $slug === '_skip' ) {
47
- continue;
48
- }
49
-
50
- echo "<div id='tab-" . strtolower( $src ) . "' class='tab'></div>";
51
- } ?>
52
- </div>
53
- </div>
54
-
55
- <style>
56
- sup
57
- {
58
- font-size: 10px;
59
- }
60
-
61
- .tabs
62
- {
63
- display: inline-block;
64
- width: 100%;
65
- margin: 5px 0px 10px 0px;
66
- }
67
-
68
- .tabs > div
69
- {
70
- padding-top: 10px;
71
- }
72
-
73
- .tabs > ul
74
- {
75
- margin: 0px;
76
- padding: 0px;
77
- }
78
-
79
- .tabs > ul:after
80
- {
81
- content: "";
82
- display: block;
83
- clear: both;
84
- height: 1px;
85
- background: #008ec2;
86
- }
87
-
88
- .tabs > ul li
89
- {
90
- cursor: pointer;
91
- display: block;
92
- float: left;
93
- padding: 10px 0;
94
- background: #f1f1f1;
95
- color: #0073aa;
96
- width: 15%;
97
- border-radius: 10px 10px 0 0;
98
- font-weight: bold;
99
- text-align: center;
100
- }
101
-
102
- .tabs > ul li.active, .tabs ul li.active:hover
103
- {
104
- background: #008ec2;
105
- color: #ffffff;
106
- width: 15%;
107
- }
108
-
109
- .tabs > ul li:hover
110
- {
111
- background: #008ec2;
112
- color: #dddddd;
113
- }
114
-
115
- .tabs > ul li
116
- {
117
- margin-bottom: 0;
118
- }
119
-
120
- .tab
121
- {
122
- padding: 10px;
123
- }
124
-
125
- #ajaxloader
126
- {
127
- margin: 20px 10px 10px 30px;
128
- }
129
-
130
- #page_num_div
131
- {
132
- display: inline;
133
- font-weight: bold;
134
- padding: 20px;
135
- }
136
-
137
- .apt_pages
138
- {
139
- padding-top: 20px;
140
- }
141
-
142
- .divform
143
- {
144
- line-height: 1.5;
145
- margin: 1em 0;
146
- max-width: 500px;
147
- position: relative;
148
- }
149
-
150
- .input_query
151
- {
152
- width: 100%;
153
- padding: 7px 32px 7px 9px;
154
- }
155
-
156
- .submit_button
157
- {
158
- height: 90%;
159
- width: 70px;
160
- border: 0;
161
- cursor: pointer;
162
- position: absolute;
163
- right: 0px;
164
- top: 2px;
165
- outline: 0;
166
- }
167
-
168
- .custom-media-button
169
- {
170
- float: right;
171
- padding: 0px 20px 20px 0px;
172
- position: absolute;
173
- right: 0px;
174
- }
175
- </style>
176
- <script type="text/javascript">
177
- jQuery(document).ready(function () {
178
- jQuery.fn.lightTabs = function (options) {
179
-
180
- var createTabs = function () {
181
- tabs = this;
182
- i = 0;
183
-
184
- showPage = function (i) {
185
- jQuery(tabs).children("div").children("div").hide();
186
- jQuery(tabs).children("ul").children("li").removeClass("active");
187
- jQuery('#' + jQuery(tabs).children("div").children("div").attr('id')).html('');
188
-
189
- jQuery('#' + jQuery(tabs).children("div").children("div").eq(i).attr('id')).html('');
190
- jQuery(tabs).children("div").children("div").eq(i).show();
191
- jQuery(tabs).children("ul").children("li").eq(i).addClass("active");
192
-
193
- jQuery('#ajaxloader').show();
194
- jQuery.post(ajaxurl, {
195
- action: 'source_content',
196
- source: jQuery(tabs).children("div").children("div").eq(i).attr('id'),
197
- wpnonce: '<?php echo $apt_content_nonce; ?>',
198
- post_id: <?php echo $post_id;?>,
199
- }).done(function (content) {
200
- jQuery('#ajaxloader').hide();
201
- jQuery('#' + jQuery(tabs).children("div").children("div").eq(i).attr('id')).html(content);
202
-
203
- if (typeof window.search_query !== 'undefined') {
204
- jQuery(".input_query").val(window.search_query);
205
- jQuery(".submit_button").click();
206
- }
207
- });
208
-
209
- };
210
-
211
- showPage(0);
212
-
213
- jQuery(tabs).children("ul").children("li").each(function (index, element) {
214
- jQuery(element).attr("data-page", i);
215
- i++;
216
- });
217
-
218
- jQuery(tabs).children("ul").children("li").click(function () {
219
- showPage(parseInt(jQuery(this).attr("data-page")));
220
- });
221
- };
222
- return this.each(createTabs);
223
- };
224
-
225
- jQuery(".tabs").lightTabs();
226
-
227
- jQuery("#ajax-watson").on('click', function () {
228
- jQuery("#ajaxloader-watson").css('display', 'block');
229
- jQuery.post(ajaxurl, {
230
- action: 'apt_api_watson',
231
- postId: <?php echo $post_id;?>,
232
- nonce: "<?php echo wp_create_nonce( 'apt_api_watson' )?>"
233
- }, function (response) {
234
- console.log(response);
235
- if (response.success) {
236
- jQuery("#ajaxloader-watson").css('display', 'none');
237
- response.data.categories.forEach(function (category) {
238
- var ul = jQuery(`<li style="cursor: pointer; color: #007bff" data-label="${category.label}">${category.label} (${(category.score * 100).toFixed(2)}%)</li>`);
239
- ul.on('click', function () {
240
- jQuery(".input_query").val(jQuery(this).attr('data-label'));
241
- jQuery(".submit_button").click();
242
- });
243
- jQuery("#categories-list").append(ul);
244
- });
245
- } else {
246
- jQuery("#message").html(response.data.message);
247
- }
248
- });
249
- });
250
- });
251
- </script>
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $ajaxloader = WAPT_PLUGIN_URL . '/admin/assets/img/ajax-loader-line.gif';
3
+ $apt_content_nonce = wp_create_nonce( 'apt_content' );
4
+ $post_id = - 1;
5
+ if ( isset( $_GET['post_id'] ) ) {
6
+ $post_id = absint( $_GET['post_id'] ) ? absint( $_GET['post_id'] ) : - 1;
7
+ }
8
+
9
+
10
+ ?>
11
+
12
+ <?php if ( WAPT_Plugin::app()->premium->is_activate() ) : ?>
13
+ <div class="watson-categories">
14
+ <div id="ajaxloader-watson" style="display: none">
15
+ <img src="<?php echo esc_url_raw( $ajaxloader ); ?>" alt="">
16
+ </div>
17
+ <div id="message"></div>
18
+ <div class="categories">
19
+ <ul id="categories-list">
20
+ <li></li>
21
+ </ul>
22
+ </div>
23
+ </div>
24
+ <?php endif; ?>
25
+
26
+ <div class="tabs">
27
+ <ul>
28
+ <?php
29
+ $i = 1;
30
+ foreach ( $this->sources as $src => $slug ) {
31
+ if ( '_skip' === $slug ) {
32
+ continue;
33
+ }
34
+
35
+ $is_pro = '';
36
+ if ( empty( $slug ) && ! WAPT_Plugin::app()->premium->is_activate() ) {
37
+ $is_pro = ' (PRO)';
38
+ }
39
+ $is_pro = "<sup class='wapt-sup-pro'>" . $is_pro . '</sup>';
40
+
41
+ echo "<li id='tabs-" . intval( $i ++ ) . "'>" . esc_html( strtoupper( $src ) ) . esc_html( $is_pro ) . '</li>';
42
+ }
43
+ ?>
44
+ </ul>
45
+ <div id='ajaxloader' style='display:none;'>
46
+ <img src='<?php echo esc_url_raw( $ajaxloader ); ?>' width='150px' alt=''>
47
+ </div>
48
+ <div id="media-frame-content">
49
+ <?php
50
+ foreach ( $this->sources as $src => $slug ) {
51
+ if ( '_skip' === $slug ) {
52
+ continue;
53
+ }
54
+
55
+ echo "<div id='tab-" . esc_attr( strtolower( $src ) ) . "' class='tab'></div>";
56
+ }
57
+ ?>
58
+ </div>
59
+ </div>
60
+
61
+ <style>
62
+ sup
63
+ {
64
+ font-size: 10px;
65
+ }
66
+
67
+ .tabs
68
+ {
69
+ display: inline-block;
70
+ width: 100%;
71
+ margin: 5px 0px 10px 0px;
72
+ }
73
+
74
+ .tabs > div
75
+ {
76
+ padding-top: 10px;
77
+ }
78
+
79
+ .tabs > ul
80
+ {
81
+ margin: 0px;
82
+ padding: 0px;
83
+ }
84
+
85
+ .tabs > ul:after
86
+ {
87
+ content: "";
88
+ display: block;
89
+ clear: both;
90
+ height: 1px;
91
+ background: #008ec2;
92
+ }
93
+
94
+ .tabs > ul li
95
+ {
96
+ cursor: pointer;
97
+ display: block;
98
+ float: left;
99
+ padding: 10px 0;
100
+ background: #f1f1f1;
101
+ color: #0073aa;
102
+ width: 15%;
103
+ border-radius: 10px 10px 0 0;
104
+ font-weight: bold;
105
+ text-align: center;
106
+ }
107
+
108
+ .tabs > ul li.active, .tabs ul li.active:hover
109
+ {
110
+ background: #008ec2;
111
+ color: #ffffff;
112
+ width: 15%;
113
+ }
114
+
115
+ .tabs > ul li:hover
116
+ {
117
+ background: #008ec2;
118
+ color: #dddddd;
119
+ }
120
+
121
+ .tabs > ul li
122
+ {
123
+ margin-bottom: 0;
124
+ }
125
+
126
+ .tab
127
+ {
128
+ padding: 10px;
129
+ }
130
+
131
+ #ajaxloader
132
+ {
133
+ margin: 20px 10px 10px 30px;
134
+ }
135
+
136
+ #page_num_div
137
+ {
138
+ display: inline;
139
+ font-weight: bold;
140
+ padding: 20px;
141
+ }
142
+
143
+ .apt_pages
144
+ {
145
+ padding-top: 20px;
146
+ }
147
+
148
+ .divform
149
+ {
150
+ line-height: 1.5;
151
+ margin: 1em 0;
152
+ max-width: 500px;
153
+ position: relative;
154
+ }
155
+
156
+ .input_query
157
+ {
158
+ width: 100%;
159
+ padding: 7px 32px 7px 9px;
160
+ }
161
+
162
+ .submit_button
163
+ {
164
+ height: 90%;
165
+ width: 70px;
166
+ border: 0;
167
+ cursor: pointer;
168
+ position: absolute;
169
+ right: 0px;
170
+ top: 2px;
171
+ outline: 0;
172
+ }
173
+
174
+ .custom-media-button
175
+ {
176
+ float: right;
177
+ padding: 0px 20px 20px 0px;
178
+ position: absolute;
179
+ right: 0px;
180
+ }
181
+ </style>
182
+ <script type="text/javascript">
183
+ jQuery(document).ready(function () {
184
+ jQuery.fn.lightTabs = function (options) {
185
+
186
+ var createTabs = function () {
187
+ tabs = this;
188
+ i = 0;
189
+
190
+ showPage = function (i) {
191
+ jQuery(tabs).children("div").children("div").hide();
192
+ jQuery(tabs).children("ul").children("li").removeClass("active");
193
+ jQuery('#' + jQuery(tabs).children("div").children("div").attr('id')).html('');
194
+
195
+ jQuery('#' + jQuery(tabs).children("div").children("div").eq(i).attr('id')).html('');
196
+ jQuery(tabs).children("div").children("div").eq(i).show();
197
+ jQuery(tabs).children("ul").children("li").eq(i).addClass("active");
198
+
199
+ jQuery('#ajaxloader').show();
200
+ jQuery.post(ajaxurl, {
201
+ action: 'source_content',
202
+ source: jQuery(tabs).children("div").children("div").eq(i).attr('id'),
203
+ wpnonce: '<?php echo esc_attr( $apt_content_nonce ); ?>',
204
+ post_id: <?php echo intval( $post_id ); ?>,
205
+ }).done(function (content) {
206
+ jQuery('#ajaxloader').hide();
207
+ if (jQuery(tabs).children("ul").children("li").eq(i).hasClass("active")) {
208
+ jQuery('#' + jQuery(tabs).children("div").children("div").eq(i).attr('id')).html(content);
209
+ }
210
+
211
+ if (typeof window.search_query !== 'undefined') {
212
+ jQuery(".input_query").val(window.search_query);
213
+ jQuery(".submit_button").click();
214
+ }
215
+ });
216
+
217
+ };
218
+
219
+ showPage(0);
220
+
221
+ jQuery(tabs).children("ul").children("li").each(function (index, element) {
222
+ jQuery(element).attr("data-page", i);
223
+ i++;
224
+ });
225
+
226
+ jQuery(tabs).children("ul").children("li").click(function () {
227
+ showPage(parseInt(jQuery(this).attr("data-page")));
228
+ });
229
+ };
230
+ return this.each(createTabs);
231
+ };
232
+
233
+ jQuery(".tabs").lightTabs();
234
+
235
+ jQuery("#ajax-watson").on('click', function () {
236
+ jQuery("#ajaxloader-watson").css('display', 'block');
237
+ jQuery.post(ajaxurl, {
238
+ action: 'apt_api_watson',
239
+ postId: <?php echo intval( $post_id ); ?>,
240
+ nonce: "<?php echo esc_attr( wp_create_nonce( 'apt_api_watson' ) ); ?>"
241
+ }, function (response) {
242
+ console.log(response);
243
+ if (response.success) {
244
+ jQuery("#ajaxloader-watson").css('display', 'none');
245
+ response.data.categories.forEach(function (category) {
246
+ var ul = jQuery(`<li style="cursor: pointer; color: #007bff" data-label="${category.label}">${category.label} (${(category.score * 100).toFixed(2)}%)</li>`);
247
+ ul.on('click', function () {
248
+ jQuery(".input_query").val(jQuery(this).attr('data-label'));
249
+ jQuery(".submit_button").click();
250
+ });
251
+ jQuery("#categories-list").append(ul);
252
+ });
253
+ } else {
254
+ jQuery("#message").html(response.data.message);
255
+ }
256
+ });
257
+ });
258
+ });
259
+ </script>
admin/views/pro.php CHANGED
@@ -1,17 +1,17 @@
1
- <?php
2
- if ( ! WAPT_Plugin::app()->premium->is_activate() ) {
3
- echo __( "This service available in the PRO version" );
4
- ?>
5
- <a href="<?php echo WAPT_Plugin::app()->get_support()->get_pricing_url( true, 'license_page' ); ?>"
6
- class="purchase-premium" target="_blank" rel="noopener">
7
- <span class="btn btn-gold">
8
- <?php printf( __( 'Upgrade to Premium', 'insert-php' ), WAPT_Plugin::app()->premium->get_price() ) ?>
9
- </span><br>
10
- </a>
11
- <?php
12
- }
13
- if ( empty( $slug ) && WAPT_Plugin::app()->premium->is_activate() ) {
14
- echo __( "You have activated a premium license, but not install premium add-on to use pro features now." );
15
- }
16
-
17
- ?>
1
+ <?php
2
+ if ( ! WAPT_Plugin::app()->premium->is_activate() ) {
3
+ echo esc_html__( 'This service available in the PRO version' );
4
+ ?>
5
+ <a href="<?php echo esc_url_raw( WAPT_Plugin::app()->get_support()->get_pricing_url( true, 'license_page' ) ); ?>"
6
+ class="purchase-premium" target="_blank" rel="noopener">
7
+ <span class="btn btn-gold">
8
+ <?php printf( esc_html__( 'Upgrade to Premium', 'insert-php' ), WAPT_Plugin::app()->premium->get_price() ); ?>
9
+ </span><br>
10
+ </a>
11
+ <?php
12
+ }
13
+ if ( empty( $slug ) && WAPT_Plugin::app()->premium->is_activate() ) {
14
+ echo esc_html__( 'You have activated a premium license, but not install premium add-on to use pro features now.' );
15
+ }
16
+
17
+ ?>
admin/views/pro_column.php CHANGED
@@ -1,10 +1,10 @@
1
- <?php
2
- echo __( "Thumbnails of posts available in the PRO version" );
3
- ?>
4
- <a href="<?php echo WAPT_Plugin::app()->get_support()->get_pricing_url( true, 'license_page' ); ?>"
5
- class="purchase-premium" target="_blank" rel="noopener">
6
- <span class="btn btn-gold">
7
- <?php printf( __( 'Upgrade to Premium', 'insert-php' ), WAPT_Plugin::app()->premium->get_price() ) ?>
8
- </span>
9
- </a>
10
-
1
+ <?php
2
+ echo esc_html__( 'Thumbnails of posts available in the PRO version' );
3
+ ?>
4
+ <a href="<?php echo esc_url_raw( WAPT_Plugin::app()->get_support()->get_pricing_url( true, 'license_page' ) ); ?>"
5
+ class="purchase-premium" target="_blank" rel="noopener">
6
+ <span class="btn btn-gold">
7
+ <?php printf( esc_html__( 'Upgrade to Premium', 'insert-php' ), esc_html( WAPT_Plugin::app()->premium->get_price() ) ); ?>
8
+ </span>
9
+ </a>
10
+
admin/views/sources/google.php CHANGED
@@ -1,132 +1,123 @@
1
- <?php
2
- $ajaxloader = WAPT_PLUGIN_URL . "/admin/assets/img/ajax-loader-line.gif";
3
- $apt_google_nonce = wp_create_nonce( 'apt_api' );
4
-
5
- $apt_google_key = WAPT_Plugin::app()->getPopulateOption( 'google_apikey' );
6
- $apt_google_cse = WAPT_Plugin::app()->getPopulateOption( 'google_cse' );
7
-
8
- if ( isset( $_REQUEST['post'] ) ) {
9
- $pid = intval( $_REQUEST['post'] );
10
- } else {
11
- $pid = 0;
12
- }
13
-
14
- if ( $apt_google_key && $apt_google_cse ) {
15
- ?>
16
- <script>
17
- window.wapt_no_hits = '<?php echo __( 'No hits', 'apt' )?>';
18
- window.wapt_download_svg = '<?php echo WAPT_PLUGIN_URL . '/admin/assets/img/download.svg' ?>';
19
- </script>
20
- <script type="text/javascript">
21
-
22
- function call_api(query, page = 1) {
23
- findImages('google', 'apt_api_google', '<?php echo $apt_google_nonce?>', query, page, {
24
- rights: jQuery("#filter_rights").attr('checked') === 'checked' ? 1 : 0,
25
- });
26
- }
27
-
28
- function do_submit() {
29
- jQuery('#loader_flex-google').show();
30
- q = jQuery('#query', form).val();
31
- p = jQuery('#page_num', form).val();
32
-
33
- if (jQuery('#filter_rights', form).is(':checked')) {
34
- rights = 1;
35
- } else rights = 0;
36
-
37
- jQuery('#google_results').html('');
38
- call_api(q, p);
39
- }
40
-
41
- jQuery('#prev_page').click(function (e) {
42
- jQuery('#page_num', form).val(parseInt(jQuery('#page_num', form).val(), 10) - 1);
43
- do_submit();
44
- });
45
- jQuery('#next_page').click(function (e) {
46
- jQuery('#page_num', form).val(parseInt(jQuery('#page_num', form).val(), 10) + 1);
47
- do_submit();
48
- });
49
-
50
- //Кнопка поиска
51
- jQuery(document).ready(function () {
52
- form = jQuery('#google_images_form');
53
-
54
- form.submit(function (e) {
55
- e.preventDefault();
56
- do_submit();
57
- });
58
- });
59
-
60
- //загрузка в медиабиблиотеку
61
- jQuery(document).on('click', '.upload_google', function (e) {
62
- if (jQuery(e.target).is('a')) return;
63
- //jQuery(document).off('click', '.upload_google');
64
- // loading animation
65
- var downdiv = jQuery(this);
66
- downdiv.addClass('uploading').find('.download img').replaceWith('<img src="<?php echo WAPT_PLUGIN_URL . '/admin/assets/img/loading.svg' ?>" style="height:80px !important">');
67
- jQuery.post(ajaxurl,
68
- {
69
- action: 'upload_to_library',
70
- is_upload: "1",
71
- service: jQuery(this).data('service'),
72
- image_url: jQuery(this).data('url'),
73
- image_user: jQuery(this).data('user'),
74
- q: q,
75
- postid: <?php echo $pid;?>,
76
- title: jQuery(this).data('title'),
77
- excerpt: '<a href="' + jQuery(this).data('link') + '" target="_blank">' + jQuery(this).data('title') + '</a>',
78
- wpnonce: '<?php echo $apt_google_nonce; ?>'
79
- },
80
- function (data) {
81
- if (parseInt(data) == data) {
82
- downdiv.removeClass('uploading').find('.download img').replaceWith('DOWNLOADED');
83
- downdiv.removeClass('upload_google');
84
- jQuery('#apt-button-next').prop('disabled', false);
85
-
86
- if (window.cvapt_media_refresh !== undefined) {
87
- window.parent.window.cvapt_media_refresh();
88
- }
89
- } else {
90
- alert(data);
91
- downdiv.removeClass('uploading').find('.download img').replaceWith('ERROR');
92
- downdiv.removeClass('upload_google');
93
- }
94
- });
95
- return false;
96
- });
97
- </script>
98
-
99
- <div style="padding:10px 15px 25px">
100
- <form id="google_images_form" style="margin:0">
101
- <div class="divform">
102
- <input id="query" type="text" value="" class="input_query" autofocus
103
- placeholder="<?php echo __( 'Search...', 'apt' ); ?>">
104
- <input id="page_num" type="hidden" value="1">
105
- <button type="submit" class="submit_button" title="<?php echo __( 'Search', 'apt' ); ?>"><img
106
- src="<?php echo WAPT_PLUGIN_URL . '/admin/assets/img/search.png' ?>"></button>
107
- </div>
108
- <div style="margin:1em 0;padding-left:2px;line-height:2">
109
- <label style="margin-right:15px;white-space:nowrap">
110
- <input type="checkbox" id="filter_rights"><?php echo __( 'Commercial and derived use', 'apt' ); ?>
111
- </label>
112
- </div>
113
- </form>
114
- <div id="loader_flex-google" style="display: none;"><img src='<?php echo $ajaxloader; ?>' width='100px' alt=''></div>
115
- <div id="google_results" class="flex-images"></div>
116
- <div class="apt_pages">
117
- <button id="prev_page" style="display: none;"><span
118
- class="dashicons dashicons-arrow-left-alt"></span> <?php echo __( 'Prev', 'apt' ); ?>
119
- </button>
120
- <div id="page_num_div" style="display: none;"></div>
121
- <button id="next_page" style="display: none;"><?php echo __( 'Next', 'apt' ); ?> <span
122
- class="dashicons dashicons-arrow-right-alt"></span>
123
- </button>
124
- </div>
125
- </div>
126
- <?php
127
- } else {
128
- ?>
129
- <div><?php echo __( 'API key is missing. Add it in APT settings', 'apt' ); ?> ->
130
- <a href="<?php echo admin_url( 'admin.php?page=wapt_settings-wbcr_apt' ); ?>" target="_blank">here</a></div>
131
- <?php
132
- } ?>
1
+ <?php
2
+ $ajaxloader = WAPT_PLUGIN_URL . '/admin/assets/img/ajax-loader-line.gif';
3
+ $apt_google_nonce = wp_create_nonce( 'apt_api' );
4
+
5
+ $apt_google_key = WAPT_Plugin::app()->getPopulateOption( 'google_apikey' );
6
+ $apt_google_cse = WAPT_Plugin::app()->getPopulateOption( 'google_cse' );
7
+
8
+ if ( isset( $_REQUEST['post'] ) ) {
9
+ $pid = intval( $_REQUEST['post'] );
10
+ } else {
11
+ $pid = 0;
12
+ }
13
+
14
+ if ( $apt_google_key && $apt_google_cse ) {
15
+ ?>
16
+ <script>
17
+ window.wapt_no_hits = '<?php esc_html_e( 'No hits', 'apt' ); ?>';
18
+ window.wapt_download_svg = '<?php echo esc_url( WAPT_PLUGIN_URL . '/admin/assets/img/download.svg' ); ?>';
19
+ </script>
20
+ <script type="text/javascript">
21
+
22
+ function call_api(query, page = 1) {
23
+ findImages('google', 'apt_api_google', '<?php echo esc_attr( $apt_google_nonce ); ?>', query, page, {
24
+ rights: jQuery("#filter_rights").attr('checked') === 'checked' ? 1 : 0,
25
+ });
26
+ }
27
+
28
+ function do_submit() {
29
+ jQuery('#loader_flex-google').show();
30
+ q = jQuery('#query', form).val();
31
+ p = jQuery('#page_num', form).val();
32
+
33
+ if (jQuery('#filter_rights', form).is(':checked')) {
34
+ rights = 1;
35
+ } else rights = 0;
36
+
37
+ jQuery('#google_results').html('');
38
+ call_api(q, p);
39
+ }
40
+
41
+ jQuery('#prev_page').click(function (e) {
42
+ jQuery('#page_num', form).val(parseInt(jQuery('#page_num', form).val(), 10) - 1);
43
+ do_submit();
44
+ });
45
+ jQuery('#next_page').click(function (e) {
46
+ jQuery('#page_num', form).val(parseInt(jQuery('#page_num', form).val(), 10) + 1);
47
+ do_submit();
48
+ });
49
+
50
+ //Кнопка поиска
51
+ jQuery(document).ready(function () {
52
+ form = jQuery('#google_images_form');
53
+
54
+ form.submit(function (e) {
55
+ e.preventDefault();
56
+ do_submit();
57
+ });
58
+ });
59
+
60
+ //загрузка в медиабиблиотеку
61
+
62
+ jQuery(document).on('click', '#tab-google .upload_google', function (e) {
63
+ if (jQuery(e.target).is('a')) return;
64
+ //jQuery(document).off('click', '.upload_google');
65
+ // loading animation
66
+ var downdiv = jQuery(this);
67
+ downdiv.addClass('uploading').find('.download img').replaceWith('<img src="<?php echo esc_url_raw( WAPT_PLUGIN_URL . '/admin/assets/img/loading.svg' ); ?>" style="height:80px !important">');
68
+
69
+ downloadMedia(
70
+ jQuery(this).data('service'),
71
+ jQuery(this).data('url'),
72
+ jQuery("#query").val(),
73
+ <?php echo intval( $pid ); ?>,
74
+ jQuery(this).data('title'),
75
+ '<a href="' + jQuery(this).data('link') + '" target="_blank">' + jQuery(this).data('title') + '</a>',
76
+ '<?php echo esc_attr( $apt_google_nonce ); ?>',
77
+ jQuery(this)
78
+ );
79
+
80
+ return false;
81
+ });
82
+
83
+ </script>
84
+
85
+ <div style="padding:10px 15px 25px">
86
+ <form id="google_images_form" style="margin:0">
87
+ <div class="divform">
88
+ <input id="query" type="text" value="" class="input_query" autofocus
89
+ placeholder="<?php echo esc_attr__( 'Search...', 'apt' ); ?>">
90
+ <input id="page_num" type="hidden" value="1">
91
+ <button type="submit" class="submit_button" title="<?php echo esc_attr__( 'Search', 'apt' ); ?>">
92
+ <img src="<?php echo esc_url_raw( WAPT_PLUGIN_URL . '/admin/assets/img/search.png' ); ?>">
93
+ </button>
94
+ </div>
95
+ <div style="margin:1em 0;padding-left:2px;line-height:2">
96
+ <label style="margin-right:15px;white-space:nowrap">
97
+ <input type="checkbox"
98
+ id="filter_rights"><?php echo esc_html__( 'Commercial and derived use', 'apt' ); ?>
99
+ </label>
100
+ </div>
101
+ </form>
102
+ <div id="loader_flex-google" style="display: none;">
103
+ <img src='<?php echo esc_url_raw( $ajaxloader ); ?>' width='100px' alt=''>
104
+ </div>
105
+ <div id="google_results" class="flex-images"></div>
106
+ <div class="apt_pages">
107
+ <button id="prev_page" style="display: none;"><span
108
+ class="dashicons dashicons-arrow-left-alt"></span> <?php echo esc_html__( 'Prev', 'apt' ); ?>
109
+ </button>
110
+ <div id="page_num_div" style="display: none;"></div>
111
+ <button id="next_page" style="display: none;"><?php echo esc_html__( 'Next', 'apt' ); ?> <span
112
+ class="dashicons dashicons-arrow-right-alt"></span>
113
+ </button>
114
+ </div>
115
+ </div>
116
+ <?php
117
+ } else {
118
+ ?>
119
+ <div><?php echo esc_html__( 'API key is missing. Add it in APT settings', 'apt' ); ?> ->
120
+ <a href="<?php echo esc_url_raw( admin_url( 'admin.php?page=wapt_settings-wbcr_apt' ) ); ?>" target="_blank">here</a>
121
+ </div>
122
+ <?php
123
+ } ?>
 
 
 
 
 
 
 
 
 
admin/views/tab-about.php CHANGED
@@ -1,365 +1,424 @@
1
- <style>
2
- .apt-section-wrapper {
3
- width: 100%;
4
- margin-top: 10px;
5
- padding-right: 20px;
6
- box-sizing: border-box;
7
- }
8
-
9
- .apt-section {
10
- padding: 29px 29px 0px 29px;
11
- }
12
-
13
- .apt-section .container {
14
- display: block;
15
- margin-right: auto;
16
- margin-left: auto;
17
- position: relative;
18
- max-width: 1140px;
19
- min-height: 400px;
20
- }
21
-
22
- .apt-section-intro {
23
- width: 1280px;
24
- height: 414px;
25
- box-shadow: 0px 0px 24px rgba(107, 107, 107, 0.5);
26
- text-align: center;
27
- margin: 0 auto;
28
- padding: 0;
29
- }
30
-
31
- .apt-section-intro img {
32
- width: 100%;
33
- height: auto;
34
- }
35
-
36
- .apt-section-intro .container h2 {
37
- font-size: 61px;
38
- font-weight: 500;
39
- text-transform: uppercase;
40
- line-height: 1.1em;
41
- color: #fff;
42
- text-align: center;
43
- }
44
-
45
- .apt-section-intro .container p {
46
- margin-bottom: 1.6em;
47
- color: #fffcfc;
48
- font-family: "Arial", Sans-serif;
49
- font-size: 22px;
50
- line-height: 1.3em;
51
- letter-spacing: 1.1px;
52
- }
53
-
54
- .apt-section-video p {
55
- font-size: 16px;
56
- text-align: center;
57
- padding: 30px;
58
- }
59
-
60
- .apt-section-video iframe {
61
- margin: 0 auto;
62
- display: block;
63
- }
64
-
65
- .apt-section-changelog h4 {
66
- font-size: 1.3333333333333rem;
67
- }
68
-
69
- .apt-section-changelog p,
70
- .apt-section-changelog ul > li {
71
- font-size: 15px;
72
- }
73
-
74
- .apt-section-changelog ul {
75
- list-style: inherit;
76
- margin-left: 40px;
77
- }
78
-
79
- #wpfooter {
80
- position: relative !important;
81
- }
82
-
83
- .heading-title {
84
- text-align: center;
85
- }
86
-
87
- .heading-container {
88
- text-align: center;
89
- margin-top: 20px;
90
- }
91
-
92
- .heading-container > p > a {
93
- font-size: 2em;
94
- }
95
-
96
- h1.heading-title {
97
- font-size: 1.8em;
98
- line-height: 1.2em;
99
-
100
- }
101
-
102
- h2.image-box-title {
103
- font-size: 2em;
104
- line-height: 1.2em;
105
- margin: 0;
106
- }
107
-
108
- p.image-box-description {
109
- font-size: 1.15em;
110
- line-height: 1.2em;
111
- margin: 5px;
112
- margin-bottom: 20px;
113
- font-weight: bold;
114
- }
115
-
116
- div.text-editor > p {
117
- font-size: 1.2em;
118
- line-height: 1.5em;
119
- margin: 10px;
120
- }
121
-
122
- div.image > img {
123
- box-sizing: border-box;
124
- /*border: 1px solid black;*/
125
- box-shadow: 0px 0px 24px rgba(107, 107, 107, 0.5);
126
- text-align: center;
127
- display: block;
128
- margin: auto;
129
- margin-bottom: 30px;
130
- }
131
-
132
- hr {
133
- border: 1px solid black;
134
- }
135
-
136
- @media screen and (max-width: 1500px) {
137
- .apt-section .container {
138
- min-height: 300px;
139
- }
140
-
141
- .apt-section-intro {
142
- box-sizing: border-box;
143
- width: 100%;
144
- min-height: auto;
145
- height: calc(100% - 10px);
146
- }
147
-
148
- .apt-section-video p {
149
- padding: 10px;
150
- }
151
-
152
- .apt-section-video iframe {
153
- width: 100%;
154
- }
155
- }
156
- </style>
157
- <!--
158
- <div class="apt-section">
159
- <div class="row">
160
- <div class="widget-container">
161
- <h1 class="heading-title size-default">
162
- We suppose you’ve noticed the changes which happened with Auto Featured Image.
163
- <br>Reading this tutorial you can get more information about new features.</h1>
164
- </div>
165
-
166
- <div class="widget-container">
167
- <div class="divider">
168
- <hr>
169
- </div>
170
- </div>
171
-
172
- <div class="heading-container">
173
- <img width="70" height="70" src="https://cm-wp.com/wp-content/uploads/2019/09/icon-6-150x150.png"
174
- class="attachment-thumbnail size-thumbnail" alt="">
175
- <h2 class="image-box-title">New image generation tools</h2>
176
- <p class="image-box-description">You can generate featured images by single click as you did in the past.
177
- But comparing with last release&nbsp; here appeared some new additional tools, so you can:</p>
178
- </div>
179
- <div class="widget-container">
180
- <div class="text-editor clearfix">
181
- <p>Bulk generate or delete&nbsp;featured images.</p>
182
- </div>
183
- </div>
184
- <div class="widget-container">
185
- <div class="image">
186
- <img width="1024" src="https://cm-wp.com/wp-content/uploads/2019/10/2019-10-03_16-42-43.png"
187
- class="attachment-full size-full" alt="">
188
- </div>
189
- </div>
190
- <div class="widget-container">
191
- <div class="text-editor clearfix"><p>Selective generation and deletion of featured images using filters <a
192
- href="https://cm-wp.com/apt/pricing/?utm_source=wordpress.org&amp;utm_content=license_page">(PRO)</a>.
193
- </p></div>
194
- </div>
195
- <div class="widget-container">
196
- <div class="image">
197
- <img width="1024" height="320" src="https://cm-wp.com/wp-content/uploads/2019/10/Sequence-01.gif"
198
- class="attachment-large size-large" alt="">
199
- </div>
200
- </div>
201
- <div class="widget-container">
202
- <div class="text-editor clearfix"><p>Disable automatic post thumbnail generation.</p></div>
203
- </div>
204
- <div class="widget-container">
205
- <div class="image">
206
- <img width="500" src="https://cm-wp.com/wp-content/uploads/2019/09/2.png"
207
- class="attachment-large size-large" alt="">
208
- </div>
209
- </div>
210
- <div class="widget-container">
211
- <div class="text-editor clearfix"><p>If you do not want the plug-in settings to be saved, after
212
- uninstalling, click “delete settings”</p></div>
213
- </div>
214
- <div class="widget-container">
215
- <div class="image">
216
- <img width="500" height="145" src="https://cm-wp.com/wp-content/uploads/2019/09/3.png"
217
- class="attachment-large size-large" alt="">
218
- </div>
219
- </div>
220
-
221
- <div class="widget-container">
222
- <div class="divider">
223
- <hr>
224
- </div>
225
- </div>
226
-
227
- <div class="heading-container">
228
- <div class="image-box-wrapper"><img width="70" height="70"
229
- src="https://cm-wp.com/wp-content/uploads/2019/09/icon-2-150x150.png"
230
- class="attachment-thumbnail size-thumbnail" alt="">
231
- <div class="image-box-content"><h2 class="image-box-title">Bulk featured Images generation or unset in
232
- post list</h2>
233
- <p class="image-box-description">Use bulk actions when you set featured images. For example Generate
234
- or Unset all of them.</p></div>
235
- </div>
236
- </div>
237
- <div class="widget-container">
238
- <div class="text-editor clearfix"><p>Also we changed the Posts list interface in dashboard and added a
239
- Column for displaying featured images. If any post stays without any featured image you’ll see this
240
- from the posts list. Opening post is unnecessary, that’s why It makes the process easier.</p></div>
241
- </div>
242
- <div class="widget-container">
243
- <div class="image">
244
- <img width="1024" src="https://cm-wp.com/wp-content/uploads/2019/10/03.gif"
245
- class="attachment-full size-full" alt=""></div>
246
- </div>
247
-
248
- <div class="widget-container">
249
- <div class="divider">
250
- <hr>
251
- </div>
252
- </div>
253
-
254
- <div class="heading-container">
255
- <div class="image-box-wrapper"><img width="70" height="70"
256
- src="https://cm-wp.com/wp-content/uploads/2019/09/icon-3-150x150.png"
257
- class="attachment-thumbnail size-thumbnail" alt="">
258
- <div class="image-box-content"><h2 class="image-box-title">Featured Images selective generation </h2>
259
- <p class="image-box-description">Execute custom generation or unset featured images applying this
260
- tool for single or some posts.</p></div>
261
- </div>
262
- </div>
263
- <div class="widget-container">
264
- <div class="image">
265
- <img width="500" src="https://cm-wp.com/wp-content/uploads/2019/09/7.png"
266
- class="attachment-large size-large" alt="">
267
- </div>
268
- </div>
269
-
270
- <div class="widget-container">
271
- <div class="divider">
272
- <hr>
273
- </div>
274
- </div>
275
-
276
- <div class="heading-container">
277
- <div class="image-box-wrapper"><a href="http://cm-wp.com/apt/pricing/"><img width="70" height="70"
278
- src="https://cm-wp.com/wp-content/uploads/2019/09/icon-4-150x150.png"
279
- class="attachment-thumbnail size-thumbnail"
280
- alt=""></a>
281
- <div class="image-box-content"><h2 class="image-box-title">Manual Featured Images Selection</h2>
282
- <p class="image-box-description">Select featured images from the post images when you are in
283
- dashboard’s Posts list. This feature is available for users who have PRO account.</p></div>
284
- </div>
285
- </div>
286
- <div class="widget-container">
287
- <div class="image">
288
- <img width="1024" src="https://cm-wp.com/wp-content/uploads/2019/10/04.gif"
289
- class="attachment-full size-full" alt=""></div>
290
- </div>
291
- <div class="widget-container">
292
- <div class="text-editor clearfix"><p>You can add featured images even if the picture is not uploaded to the
293
- medialibrary but inserted into the post using an external link or shortcode.</p></div>
294
- </div>
295
-
296
- <div class="widget-container">
297
- <div class="divider">
298
- <hr>
299
- </div>
300
- </div>
301
-
302
- <div class="heading-container">
303
- <div class="image-box-wrapper"><img width="70" height="70"
304
- src="https://cm-wp.com/wp-content/uploads/2019/09/icon1-150x150.png"
305
- class="attachment-thumbnail size-thumbnail" alt="">
306
- <div class="image-box-content"><h2 class="image-box-title">Image search in Google, Unsplash,
307
- Pixabay</h2>
308
- <p class="image-box-description">Search for images with Creative Commons license.</p></div>
309
- </div>
310
- </div>
311
- <div class="widget-container">
312
- <div class="text-editor clearfix"><p><span style="font-weight: 400;">It appeared new tab in the Media Library =&gt; </span><i><span
313
- style="font-weight: 400;">Add from APT. </span></i><span style="font-weight: 400;">There you can find images using popular free stock sites:&nbsp; Google, Pixabay <a
314
- href="https://cm-wp.com/apt/pricing/?utm_source=wordpress.org&amp;utm_content=license_page">(pro)</a>, Unsplash <a
315
- href="https://cm-wp.com/apt/pricing/?utm_source=wordpress.org&amp;utm_content=license_page">(pro)</a>. Just enter a search query, choose the image and insert it into the Media library by single click.</span>
316
- </p></div>
317
- </div>
318
- <div class="widget-container">
319
- <div class="image">
320
- <img width="1024" src="https://cm-wp.com/wp-content/uploads/2019/10/05.gif"
321
- class="attachment-large size-large" alt="">
322
- </div>
323
- </div>
324
-
325
- <div class="widget-container">
326
- <div class="divider">
327
- <hr>
328
- </div>
329
- </div>
330
-
331
- <div class="heading-container">
332
- <div class="image-box-wrapper"><img width="70" height="70"
333
- src="https://cm-wp.com/wp-content/uploads/2019/09/icon-5-150x150.png"
334
- class="attachment-thumbnail size-thumbnail" alt="">
335
- <div class="image-box-content"><h2 class="image-box-title">Compatibility with Elementor and
336
- Gutenberg</h2>
337
- <p class="image-box-description">Auto Featured Image is compatible with Classic Editor, Gutenberg
338
- and Elementor plugins.</p></div>
339
- </div>
340
- </div>
341
- <div class="widget-container">
342
- <div class="image">
343
- <img width="1024" src="https://cm-wp.com/wp-content/uploads/2019/10/007.gif"
344
- class="attachment-large size-large" alt="">
345
- </div>
346
- </div>
347
-
348
- <div class="widget-container">
349
- <div class="divider">
350
- <hr>
351
- </div>
352
- </div>
353
-
354
- <div class="heading-container">
355
- <p>
356
- <a href="https://cm-wp.com/apt/apt-f-a-q/?utm_medium=right_banner&amp;utm_campaign=apt&amp;utm_content=link"
357
- target="_blank" rel="noopener">F.A.Q.</a>
358
- </p>
359
- <p>
360
- <a href="https://forum.webcraftic.com/" target="_blank" rel="noopener">Get starting free support</a>
361
- </p>
362
- </div>
363
- </div>
364
- </div>
365
- -->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <style>
2
+ .apt-section-wrapper
3
+ {
4
+ width: 100%;
5
+ margin-top: 10px;
6
+ padding-right: 20px;
7
+ box-sizing: border-box;
8
+ }
9
+
10
+ .apt-section
11
+ {
12
+ padding: 29px 29px 0px 29px;
13
+ }
14
+
15
+ .apt-section .container
16
+ {
17
+ display: block;
18
+ margin-right: auto;
19
+ margin-left: auto;
20
+ position: relative;
21
+ max-width: 1140px;
22
+ min-height: 400px;
23
+ }
24
+
25
+ .apt-section-intro
26
+ {
27
+ width: 1280px;
28
+ height: 414px;
29
+ box-shadow: 0px 0px 24px rgba(107, 107, 107, 0.5);
30
+ text-align: center;
31
+ margin: 0 auto;
32
+ padding: 0;
33
+ }
34
+
35
+ .apt-section-intro img
36
+ {
37
+ width: 100%;
38
+ height: auto;
39
+ }
40
+
41
+ .apt-section-intro .container h2
42
+ {
43
+ font-size: 61px;
44
+ font-weight: 500;
45
+ text-transform: uppercase;
46
+ line-height: 1.1em;
47
+ color: #fff;
48
+ text-align: center;
49
+ }
50
+
51
+ .apt-section-intro .container p
52
+ {
53
+ margin-bottom: 1.6em;
54
+ color: #fffcfc;
55
+ font-family: "Arial", Sans-serif;
56
+ font-size: 22px;
57
+ line-height: 1.3em;
58
+ letter-spacing: 1.1px;
59
+ }
60
+
61
+ .apt-section-video p
62
+ {
63
+ font-size: 16px;
64
+ text-align: center;
65
+ padding: 30px;
66
+ }
67
+
68
+ .apt-section-video iframe
69
+ {
70
+ margin: 0 auto;
71
+ display: block;
72
+ }
73
+
74
+ .apt-section-changelog h4
75
+ {
76
+ font-size: 1.3333333333333rem;
77
+ }
78
+
79
+ .apt-section-changelog p,
80
+ .apt-section-changelog ul > li
81
+ {
82
+ font-size: 15px;
83
+ }
84
+
85
+ .apt-section-changelog ul
86
+ {
87
+ list-style: inherit;
88
+ margin-left: 40px;
89
+ }
90
+
91
+ #wpfooter
92
+ {
93
+ position: relative !important;
94
+ }
95
+
96
+ .heading-title
97
+ {
98
+ text-align: center;
99
+ }
100
+
101
+ .heading-container
102
+ {
103
+ text-align: center;
104
+ margin-top: 20px;
105
+ }
106
+
107
+ .heading-container > p > a
108
+ {
109
+ font-size: 2em;
110
+ }
111
+
112
+ h1.heading-title
113
+ {
114
+ font-size: 1.8em;
115
+ line-height: 1.2em;
116
+
117
+ }
118
+
119
+ h2.image-box-title
120
+ {
121
+ font-size: 2em;
122
+ line-height: 1.2em;
123
+ margin: 0;
124
+ }
125
+
126
+ p.image-box-description
127
+ {
128
+ font-size: 1.15em;
129
+ line-height: 1.2em;
130
+ margin: 5px;
131
+ margin-bottom: 20px;
132
+ font-weight: bold;
133
+ }
134
+
135
+ div.text-editor > p
136
+ {
137
+ font-size: 1.2em;
138
+ line-height: 1.5em;
139
+ margin: 10px;
140
+ }
141
+
142
+ div.image > img
143
+ {
144
+ box-sizing: border-box;
145
+ /*border: 1px solid black;*/
146
+ box-shadow: 0px 0px 24px rgba(107, 107, 107, 0.5);
147
+ text-align: center;
148
+ display: block;
149
+ margin: auto;
150
+ margin-bottom: 30px;
151
+ }
152
+
153
+ hr
154
+ {
155
+ border: 1px solid black;
156
+ }
157
+
158
+ @media screen and (max-width: 1500px)
159
+ {
160
+ .apt-section .container
161
+ {
162
+ min-height: 300px;
163
+ }
164
+
165
+ .apt-section-intro
166
+ {
167
+ box-sizing: border-box;
168
+ width: 100%;
169
+ min-height: auto;
170
+ height: calc(100% - 10px);
171
+ }
172
+
173
+ .apt-section-video p
174
+ {
175
+ padding: 10px;
176
+ }
177
+
178
+ .apt-section-video iframe
179
+ {
180
+ width: 100%;
181
+ }
182
+ }
183
+ </style>
184
+
185
+ <div class="apt-section">
186
+ <div class="row">
187
+ <div class="widget-container">
188
+ <h1 class="heading-title size-default">
189
+ We suppose you’ve noticed the changes which happened with Auto Featured Image.
190
+ <br>Reading this tutorial you can get more information about new features.</h1>
191
+ </div>
192
+
193
+ <div class="widget-container">
194
+ <div class="divider">
195
+ <hr>
196
+ </div>
197
+ </div>
198
+
199
+ <div class="heading-container">
200
+ <img width="70" height="70" class="attachment-thumbnail size-thumbnail" alt=""
201
+ src="<?php echo esc_url_raw( WAPT_PLUGIN_URL . '/admin/assets/img/about/icon-6.png' ); ?>">
202
+ <h2 class="image-box-title">New image generation tools</h2>
203
+ <p class="image-box-description">You can generate featured images by single click as you did in the past.
204
+ But comparing with last release&nbsp; here appeared some new additional tools, so you can:</p>
205
+ </div>
206
+ <div class="widget-container">
207
+ <div class="text-editor clearfix">
208
+ <p>Bulk generate or delete&nbsp;featured images.</p>
209
+ </div>
210
+ </div>
211
+ <div class="widget-container">
212
+ <div class="image">
213
+ <img width="1024"
214
+ src="<?php echo esc_url_raw( WAPT_PLUGIN_URL . '/admin/assets/img/about/interface-1.png' ); ?>"
215
+ class="attachment-full size-full" alt="">
216
+ </div>
217
+ </div>
218
+ <div class="widget-container">
219
+ <div class="text-editor clearfix">
220
+ <p>Selective generation and deletion of featured images using filters
221
+ <a href="https://cm-wp.com/apt/pricing/?utm_source=wordpress.org&amp;utm_content=license_page">(PRO)</a>.
222
+ </p>
223
+ </div>
224
+ </div>
225
+ <div class="widget-container">
226
+ <div class="image">
227
+ <img width="1024" height="320"
228
+ src="<?php echo esc_url_raw( WAPT_PLUGIN_URL . '/admin/assets/img/about/Sequence-01.gif' ); ?>"
229
+ class="attachment-large size-large" alt="">
230
+ </div>
231
+ </div>
232
+ <div class="widget-container">
233
+ <div class="text-editor clearfix"><p>Disable automatic post thumbnail generation.</p></div>
234
+ </div>
235
+ <div class="widget-container">
236
+ <div class="image">
237
+ <img width="500"
238
+ src="<?php echo esc_url_raw( WAPT_PLUGIN_URL . '/admin/assets/img/about/interface-2.png' ); ?>"
239
+ class="attachment-large size-large" alt="">
240
+ </div>
241
+ </div>
242
+ <div class="widget-container">
243
+ <div class="text-editor clearfix">
244
+ <p>If you do not want the plug-in settings to be saved, after
245
+ uninstalling, click “delete settings”
246
+ </p>
247
+ </div>
248
+ </div>
249
+ <div class="widget-container">
250
+ <div class="image">
251
+ <img width="500" height="145"
252
+ src="<?php echo esc_url_raw( WAPT_PLUGIN_URL . '/admin/assets/img/about/interface-3.png' ); ?>"
253
+ class="attachment-large size-large" alt="">
254
+ </div>
255
+ </div>
256
+
257
+ <div class="widget-container">
258
+ <div class="divider">
259
+ <hr>
260
+ </div>
261
+ </div>
262
+
263
+ <div class="heading-container">
264
+ <div class="image-box-wrapper">
265
+ <img width="70" height="70"
266
+ src="<?php echo esc_url_raw( WAPT_PLUGIN_URL . '/admin/assets/img/about/icon-2.png' ); ?>"
267
+ class="attachment-thumbnail size-thumbnail" alt="">
268
+ <div class="image-box-content"><h2 class="image-box-title">Bulk featured Images generation or unset in
269
+ post list</h2>
270
+ <p class="image-box-description">Use bulk actions when you set featured images. For example Generate
271
+ or Unset all of them.</p></div>
272
+ </div>
273
+ </div>
274
+ <div class="widget-container">
275
+ <div class="text-editor clearfix">
276
+ <p>Also we changed the Posts list interface in dashboard and added a
277
+ Column for displaying featured images. If any post stays without any featured image you’ll see this
278
+ from the posts list. Opening post is unnecessary, that’s why It makes the process easier.</p>
279
+ </div>
280
+ </div>
281
+ <div class="widget-container">
282
+ <div class="image">
283
+ <img width="1024"
284
+ src="<?php echo esc_url_raw( WAPT_PLUGIN_URL . '/admin/assets/img/about/Sequence-02.gif' ); ?>"
285
+ class="attachment-full size-full" alt="">
286
+ </div>
287
+ </div>
288
+
289
+ <div class="widget-container">
290
+ <div class="divider">
291
+ <hr>
292
+ </div>
293
+ </div>
294
+
295
+ <div class="heading-container">
296
+ <div class="image-box-wrapper">
297
+ <img width="70" height="70"
298
+ src="<?php echo esc_url_raw( WAPT_PLUGIN_URL . '/admin/assets/img/about/icon-3.png' ); ?>"
299
+ class="attachment-thumbnail size-thumbnail" alt="">
300
+ <div class="image-box-content"><h2 class="image-box-title">Featured Images selective generation </h2>
301
+ <p class="image-box-description">Execute custom generation or unset featured images applying this
302
+ tool for single or some posts.</p></div>
303
+ </div>
304
+ </div>
305
+ <div class="widget-container">
306
+ <div class="image">
307
+ <img width="500"
308
+ src="<?php echo esc_url_raw( WAPT_PLUGIN_URL . '/admin/assets/img/about/Sequence-03.png' ); ?>"
309
+ class="attachment-large size-large" alt="">
310
+ </div>
311
+ </div>
312
+
313
+ <div class="widget-container">
314
+ <div class="divider">
315
+ <hr>
316
+ </div>
317
+ </div>
318
+
319
+ <div class="heading-container">
320
+ <div class="image-box-wrapper">
321
+ <a href="http://cm-wp.com/apt/pricing/">
322
+ <img width="70" height="70"
323
+ src="<?php echo esc_url_raw( WAPT_PLUGIN_URL . '/admin/assets/img/about/icon-4.png' ); ?>"
324
+ class="attachment-thumbnail size-thumbnail" alt="">
325
+ </a>
326
+ <div class="image-box-content"><h2 class="image-box-title">Manual Featured Images Selection</h2>
327
+ <p class="image-box-description">Select featured images from the post images when you are in
328
+ dashboard’s Posts list. This feature is available for users who have PRO account.</p></div>
329
+ </div>
330
+ </div>
331
+ <div class="widget-container">
332
+ <div class="image">
333
+ <img width="1024"
334
+ src="<?php echo esc_url_raw( WAPT_PLUGIN_URL . '/admin/assets/img/about/Sequence-04.gif' ); ?>"
335
+ class="attachment-full size-full" alt=""></div>
336
+ </div>
337
+ <div class="widget-container">
338
+ <div class="text-editor clearfix">
339
+ <p>You can add featured images even if the picture is not uploaded to the
340
+ medialibrary but inserted into the post using an external link or shortcode.</p>
341
+ </div>
342
+ </div>
343
+
344
+ <div class="widget-container">
345
+ <div class="divider">
346
+ <hr>
347
+ </div>
348
+ </div>
349
+
350
+ <div class="heading-container">
351
+ <div class="image-box-wrapper">
352
+ <img width="70" height="70"
353
+ src="<?php echo esc_url_raw( WAPT_PLUGIN_URL . '/admin/assets/img/about/icon-1.png' ); ?>"
354
+ class="attachment-thumbnail size-thumbnail" alt="">
355
+ <div class="image-box-content">
356
+ <h2 class="image-box-title">Image search in Google, Unsplash, Pixabay</h2>
357
+ <p class="image-box-description">Search for images with Creative Commons license.</p></div>
358
+ </div>
359
+ </div>
360
+ <div class="widget-container">
361
+ <div class="text-editor clearfix">
362
+ <p>
363
+ <span style="font-weight: 400;">It appeared new tab in the Media Library =&gt; </span>
364
+ <i><span style="font-weight: 400;">Add from APT. </span></i>
365
+ <span style="font-weight: 400;">There you can find images using popular free stock sites:&nbsp; Google, Pixabay
366
+ <a href="https://cm-wp.com/apt/pricing/?utm_source=wordpress.org&amp;utm_content=license_page">(pro)</a>,
367
+ Unsplash <a
368
+ href="https://cm-wp.com/apt/pricing/?utm_source=wordpress.org&amp;utm_content=license_page">(pro)</a>.
369
+ Just enter a search query, choose the image and insert it into the Media library by single click.
370
+ </span>
371
+ </p>
372
+ </div>
373
+ </div>
374
+ <div class="widget-container">
375
+ <div class="image">
376
+ <img width="1024"
377
+ src="<?php echo esc_url_raw( WAPT_PLUGIN_URL . '/admin/assets/img/about/Sequence-05.gif' ); ?>"
378
+ class="attachment-large size-large" alt="">
379
+ </div>
380
+ </div>
381
+
382
+ <div class="widget-container">
383
+ <div class="divider">
384
+ <hr>
385
+ </div>
386
+ </div>
387
+
388
+ <div class="heading-container">
389
+ <div class="image-box-wrapper">
390
+ <img width="70" height="70"
391
+ src="<?php echo esc_url_raw( WAPT_PLUGIN_URL . '/admin/assets/img/about/icon-5.png' ); ?>"
392
+ class="attachment-thumbnail size-thumbnail" alt="">
393
+ <div class="image-box-content">
394
+ <h2 class="image-box-title">Compatibility with Elementor and Gutenberg</h2>
395
+ <p class="image-box-description">Auto Featured Image is compatible with Classic Editor, Gutenberg
396
+ and Elementor plugins.</p>
397
+ </div>
398
+ </div>
399
+ </div>
400
+ <div class="widget-container">
401
+ <div class="image">
402
+ <img width="1024"
403
+ src="<?php echo esc_url_raw( WAPT_PLUGIN_URL . '/admin/assets/img/about/Sequence-06.gif' ); ?>"
404
+ class="attachment-large size-large" alt="">
405
+ </div>
406
+ </div>
407
+
408
+ <div class="widget-container">
409
+ <div class="divider">
410
+ <hr>
411
+ </div>
412
+ </div>
413
+
414
+ <div class="heading-container">
415
+ <p>
416
+ <a href="https://cm-wp.com/apt/apt-f-a-q/?utm_medium=right_banner&amp;utm_campaign=apt&amp;utm_content=link"
417
+ target="_blank" rel="noopener">F.A.Q.</a>
418
+ </p>
419
+ <p>
420
+ <a href="https://forum.webcraftic.com/" target="_blank" rel="noopener">Get starting free support</a>
421
+ </p>
422
+ </div>
423
+ </div>
424
+ </div>
admin/views/tab-generate.php CHANGED
@@ -1,215 +1,220 @@
1
- <?php
2
- /**
3
- * @var array $data
4
- */
5
-
6
- $stats = $data['stats'] ?? [];
7
- $log = $data['log'] ?? [];
8
- ?>
9
-
10
- <div class="wrap" id="wapt-generate-page">
11
- <div class="factory-bootstrap-453 factory-fontawesome-000">
12
- <div class="row wapt-statistic-row">
13
- <div class="wapt-generate-statistic">
14
- <div class="wapt-chart-container">
15
- <canvas id="wapt-main-chart" width="180" height="180"
16
- data-no_featured_image="<?php echo esc_attr( $stats['no_featured_image'] ); ?>"
17
- data-w_featured_image="<?php echo esc_attr( $stats['w_featured_image'] ); ?>"
18
- data-errors="<?php echo esc_attr( $stats['error'] ); ?>"
19
- style="display: block;">
20
- </canvas>
21
- <div id="wapt-overview-chart-percent" class="wapt-chart-percent">
22
- <?php echo trim( esc_attr( $stats['featured_image_percent'] ) );?><span>%</span>
23
- </div>
24
- <p class="wapt-global-phrase">
25
- <span class="wapt-total-percent"><?php echo esc_attr( $stats['featured_image_percent'] ); ?>%</span>
26
- <?php _e( 'of your posts have a featured image', 'apt' ); ?>
27
- </p>
28
- </div>
29
- <div class="wapt-fillters-form">
30
- <div class="wapt-row0">
31
- <div class="row">
32
- <div id="wapt-overview-chart-legend">
33
- <ul class="wapt-doughnut-legend">
34
- <li>
35
- <span style="background-color:#d6d6d6"></span>
36
- <?php echo __( 'Without featured image', 'apt' ); ?> -
37
- <span class="wapt-num" id="wapt-unset-num"><?php echo $stats['no_featured_image']; ?></span>
38
- </li>
39
- <li>
40
- <span style="background-color:#8bc34a"></span>
41
- <?php echo __( 'With featured image', 'apt' ); ?> -
42
- <span class="wapt-num" id="wapt-generated-num"><?php echo $stats['w_featured_image']; ?></span>
43
- </li>
44
- </ul>
45
- </div>
46
- </div>
47
- </div>
48
- <div class="wapt-row1">
49
- <?php
50
- if ( \WAPT_Plugin::app()->is_premium() ) {
51
- do_action( 'wapt/filter_form_print' );
52
- } else {
53
- $stati = get_post_stati( [
54
- '_builtin' => true,
55
- "show_in_admin_status_list" => true,
56
- ], 'objects' );
57
-
58
- $post_types = get_post_types( [
59
- 'public' => true,
60
- 'publicly_queryable' => 1,
61
- ], 'objects', 'or' );
62
- unset( $post_types['attachment'] ); // удалим attachment
63
-
64
- $categories = get_categories( [
65
- 'taxonomy' => 'category',
66
- 'type' => 'post',
67
- 'orderby' => 'name',
68
- 'order' => 'ASC',
69
- ] );
70
- ?>
71
- <div class="row wapt-filter-row">
72
- <div class="col-md-2">
73
- <label for="filter_posttype"
74
- class="apt-filter-label"><?php esc_html_e( 'Post type', 'apt' ) ?></label>
75
- </div>
76
- <div class="col-md-10">
77
- <select name="filter_posttype" id="filter_posttype" class="apt-filter-input">
78
- <option value="post"><?php echo __( 'Posts', 'apt' ); ?></option>
79
- <option value="page"><?php echo __( 'Pages', 'apt' ); ?></option>
80
- </select>
81
- </div>
82
- </div>
83
-
84
- <div class="row wapt-filter-row wapt-pro-row">
85
- <div class="col-md-2">
86
- <label for="filter_poststatus"
87
- class="apt-filter-label"><?php esc_html_e( 'Post status', 'aptp' ) ?></label>
88
- </div>
89
- <div class="col-md-10">
90
- <select name="filter_poststatus" id="filter_poststatus" class="apt-filter-input"
91
- tabindex="-1">
92
- <option value="">&nbsp;</option>
93
- <?php
94
- foreach ( $stati as $status ) {
95
- echo '<option value="' . $status->name . '">' . $status->label . '</option>';
96
- }
97
- ?>
98
- </select><span>&nbsp;</span>
99
- </div>
100
- </div>
101
-
102
- <div class="row wapt-filter-row wapt-pro-row">
103
- <div class="col-md-2">
104
- <label for="filter_postcategory"
105
- class="apt-filter-label"><?php esc_html_e( 'Post category', 'aptp' ) ?></label>
106
- </div>
107
- <div class="col-md-10">
108
- <select name="filter_postcategory" id="filter_postcategory" class="apt-filter-input"
109
- tabindex="-1">
110
- <option value="">&nbsp;</option>
111
- <?php
112
- foreach ( $categories as $cat ) {
113
- echo '<option value="' . $cat->term_id . '">' . $cat->name . ' (' . $cat->count . ')</option>';
114
- }
115
- ?>
116
- </select><span>&nbsp;</span>
117
- </div>
118
- </div>
119
-
120
- <div class="row wapt-filter-row wapt-pro-row">
121
- <div class="col-md-2">
122
- <label for="filter_startdate"
123
- class="apt-filter-label"><?php esc_html_e( 'Date from', 'aptp' ) ?></label>
124
- </div>
125
- <div class="col-md-10">
126
- <input type="text" name="filter_startdate" id="filter_startdate"
127
- class="apt-filter-input datepicker" tabindex="-1"><span>&nbsp;</span>
128
- <label for="filter_enddate"
129
- class="apt-filter-label"><?php esc_html_e( 'to', 'aptp' ) ?></label>
130
- <input type="text" name="filter_enddate" id="filter_enddate"
131
- class="apt-filter-input datepicker" tabindex="-1"><span>&nbsp;</span>
132
- </div>
133
- </div>
134
- <?php } ?>
135
- </div>
136
- <div class="wapt-row2">
137
- <div class="row wapt-filter-row">
138
- <div class="wapt-statistic-buttons-wrap">
139
- <div>
140
- <button class="hide-if-no-js wapt-generate-button"
141
- name="generate-post-thumbnails"
142
- id="generate-post-thumbnails">
143
- <?php esc_attr_e( 'Generate Featured images', 'apt' ) ?>
144
- </button>&nbsp;
145
- <button class="hide-if-no-js wapt-unset-button"
146
- name="delete-post-thumbnails"
147
- id="delete-post-thumbnails">
148
- <?php esc_attr_e( 'Delete Featured images', 'apt' ) ?>
149
- </button>
150
- </div>
151
-
152
- </div>
153
- </div>
154
- </div>
155
-
156
- </div>
157
- </div>
158
- <div id="genpostthumbsbar" class="wapt-genpostthumbsbar"
159
- style="position:relative;height:40px;display: none;">
160
- <div id="genpostthumbsbar-percent"
161
- style="position:absolute;left:50%;top:50%;margin-left:-25px;height:25px;margin-top:-9px;font-weight:bold;text-align:center;"></div>
162
- </div>
163
- <div class="wapt-statistic-message">
164
- <p><?php _e( 'Note: Thumbnails won\'t be generated for posts that already have post thumbnail or <strong><em>skip_post_thumb</em></strong> custom meta field.', 'apt' ) ?></p>
165
- </div>
166
- </div>
167
- <div class="row wapt-generation-progress">
168
- <div class="wbcr-factory-page-group-header" style="margin-bottom:0;">
169
- <strong><?php echo __( 'Generation log', 'apt' ); ?></strong>
170
- <p><?php echo __( 'Generation log shows the last 100 generated images.', 'apt' ); ?></p>
171
- </div>
172
- <div class="wapt-table-container">
173
- <table class="wapt-table">
174
- <thead>
175
- <tr>
176
- <th class="wapt-image-td"></th>
177
- <th class="wapt-title-td"><?php echo __( 'Post title', 'apt' ); ?></th>
178
- <th><?php echo __( 'Image size', 'apt' ); ?></th>
179
- <th><?php echo __( 'Generation type', 'apt' ); ?></th>
180
- <th><?php echo __( 'Status', 'apt' ); ?></th>
181
- </tr>
182
- </thead>
183
- <tbody>
184
- <?php foreach ( $log as $item ):
185
- if ( isset( $item['error_msg'] ) && $item['error_msg'] ):?>
186
- <tr class="flash wapt-table-item wapt-row-id-<?php echo $item['post_id']; ?> wapt-error">
187
- <td class="wapt-image-td"></td>
188
- <td class="wapt-title-td">
189
- <a href="<?php echo $item['url']; ?>" target="_blank"><?php echo $item['title']; ?></a>
190
- </td>
191
- <td></td>
192
- <td><?php echo $item['type']; ?></td>
193
- <td><?php echo $item['error_msg']; ?></td>
194
- </tr>
195
- <?php else: ?>
196
- <tr class="flash wapt-table-item wapt-row-id-<?php echo $item['post_id']; ?>">
197
- <td class="wapt-image-td">
198
- <img height="50" src="<?php echo $item['thumbnail_url']; ?>">
199
- </td>
200
- <td class="wapt-title-td">
201
- <a href="<?php echo $item['url']; ?>" target="_blank">
202
- <?php echo $item['title']; ?></a>
203
- </td>
204
- <td><?php echo $item['image_size']; ?></td>
205
- <td><?php echo $item['type']; ?></td>
206
- <td><?php echo $item['status']; ?></td>
207
- </tr>
208
- <?php endif; ?>
209
- <?php endforeach; ?>
210
- </tbody>
211
- </table>
212
- </div>
213
- </div>
214
- </div>
215
- </div>
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var array $data
4
+ */
5
+
6
+ $stats = $data['stats'] ?? [];
7
+ $log = $data['log'] ?? [];
8
+ ?>
9
+
10
+ <div class="wrap" id="wapt-generate-page">
11
+ <div class="factory-bootstrap-454 factory-fontawesome-000">
12
+ <div class="row wapt-statistic-row">
13
+ <div class="wapt-generate-statistic">
14
+ <div class="wapt-chart-container">
15
+ <canvas id="wapt-main-chart" width="180" height="180"
16
+ data-no_featured_image="<?php echo esc_attr( $stats['no_featured_image'] ); ?>"
17
+ data-w_featured_image="<?php echo esc_attr( $stats['w_featured_image'] ); ?>"
18
+ data-errors="<?php echo esc_attr( $stats['error'] ); ?>"
19
+ style="display: block;">
20
+ </canvas>
21
+ <div id="wapt-overview-chart-percent" class="wapt-chart-percent">
22
+ <?php echo esc_attr( trim( $stats['featured_image_percent'] ) ); ?><span>%</span>
23
+ </div>
24
+ <p class="wapt-global-phrase">
25
+ <span class="wapt-total-percent"><?php echo esc_attr( $stats['featured_image_percent'] ); ?>%</span>
26
+ <?php esc_html_e( 'of your posts have a featured image', 'apt' ); ?>
27
+ </p>
28
+ </div>
29
+ <div class="wapt-fillters-form">
30
+ <div class="wapt-row0">
31
+ <div class="row">
32
+ <div id="wapt-overview-chart-legend">
33
+ <ul class="wapt-doughnut-legend">
34
+ <li>
35
+ <span style="background-color:#d6d6d6"></span>
36
+ <?php echo esc_html__( 'Without featured image', 'apt' ); ?> -
37
+ <span class="wapt-num"
38
+ id="wapt-unset-num"><?php echo intval( $stats['no_featured_image'] ); ?></span>
39
+ </li>
40
+ <li>
41
+ <span style="background-color:#8bc34a"></span>
42
+ <?php echo esc_html__( 'With featured image', 'apt' ); ?> -
43
+ <span class="wapt-num"
44
+ id="wapt-generated-num"><?php echo intval( $stats['w_featured_image'] ); ?></span>
45
+ </li>
46
+ </ul>
47
+ </div>
48
+ </div>
49
+ </div>
50
+ <div class="wapt-row1">
51
+ <?php
52
+ if ( \WAPT_Plugin::app()->is_premium() ) {
53
+ do_action( 'wapt/filter_form_print' );
54
+ } else {
55
+ $stati = get_post_stati( [
56
+ '_builtin' => true,
57
+ 'show_in_admin_status_list' => true,
58
+ ], 'objects' );
59
+
60
+ $post_types = get_post_types( [
61
+ 'public' => true,
62
+ 'publicly_queryable' => 1,
63
+ ], 'objects', 'or' );
64
+ unset( $post_types['attachment'] ); // удалим attachment
65
+
66
+ $categories = get_categories( [
67
+ 'taxonomy' => 'category',
68
+ 'type' => 'post',
69
+ 'orderby' => 'name',
70
+ 'order' => 'ASC',
71
+ ] );
72
+ ?>
73
+ <div class="row wapt-filter-row">
74
+ <div class="col-md-2">
75
+ <label for="filter_posttype"
76
+ class="apt-filter-label"><?php esc_html_e( 'Post type', 'apt' ); ?></label>
77
+ </div>
78
+ <div class="col-md-10">
79
+ <select name="filter_posttype" id="filter_posttype" class="apt-filter-input">
80
+ <option value="post"><?php echo esc_html__( 'Posts', 'apt' ); ?></option>
81
+ <option value="page"><?php echo esc_html__( 'Pages', 'apt' ); ?></option>
82
+ </select>
83
+ </div>
84
+ </div>
85
+
86
+ <div class="row wapt-filter-row wapt-pro-row">
87
+ <div class="col-md-2">
88
+ <label for="filter_poststatus"
89
+ class="apt-filter-label"><?php esc_html_e( 'Post status', 'aptp' ); ?></label>
90
+ </div>
91
+ <div class="col-md-10">
92
+ <select name="filter_poststatus" id="filter_poststatus" class="apt-filter-input"
93
+ tabindex="-1">
94
+ <option value="">&nbsp;</option>
95
+ <?php
96
+ foreach ( $stati as $stat ) {
97
+ echo '<option value="' . esc_attr( $stat->name ) . '">' . esc_html( $stat->label ) . '</option>';
98
+ }
99
+ ?>
100
+ </select><span>&nbsp;</span>
101
+ </div>
102
+ </div>
103
+
104
+ <div class="row wapt-filter-row wapt-pro-row">
105
+ <div class="col-md-2">
106
+ <label for="filter_postcategory"
107
+ class="apt-filter-label"><?php esc_html_e( 'Post category', 'aptp' ); ?></label>
108
+ </div>
109
+ <div class="col-md-10">
110
+ <select name="filter_postcategory" id="filter_postcategory" class="apt-filter-input"
111
+ tabindex="-1">
112
+ <option value="">&nbsp;</option>
113
+ <?php
114
+ foreach ( $categories as $cat ) {
115
+ echo '<option value="' . esc_attr( $cat->term_id ) . '">' . esc_html( $cat->name ) . ' (' . (int) $cat->count . ')</option>';
116
+ }
117
+ ?>
118
+ </select><span>&nbsp;</span>
119
+ </div>
120
+ </div>
121
+
122
+ <div class="row wapt-filter-row wapt-pro-row">
123
+ <div class="col-md-2">
124
+ <label for="filter_startdate"
125
+ class="apt-filter-label"><?php esc_html_e( 'Date from', 'aptp' ); ?></label>
126
+ </div>
127
+ <div class="col-md-10">
128
+ <input type="text" name="filter_startdate" id="filter_startdate"
129
+ class="apt-filter-input datepicker" tabindex="-1"><span>&nbsp;</span>
130
+ <label for="filter_enddate"
131
+ class="apt-filter-label"><?php esc_html_e( 'to', 'aptp' ); ?></label>
132
+ <input type="text" name="filter_enddate" id="filter_enddate"
133
+ class="apt-filter-input datepicker" tabindex="-1"><span>&nbsp;</span>
134
+ </div>
135
+ </div>
136
+ <?php } ?>
137
+ </div>
138
+ <div class="wapt-row2">
139
+ <div class="row wapt-filter-row">
140
+ <div class="wapt-statistic-buttons-wrap">
141
+ <div>
142
+ <button class="hide-if-no-js wapt-generate-button"
143
+ name="generate-post-thumbnails"
144
+ id="generate-post-thumbnails">
145
+ <?php esc_attr_e( 'Generate Featured images', 'apt' ); ?>
146
+ </button>&nbsp;
147
+ <button class="hide-if-no-js wapt-unset-button"
148
+ name="delete-post-thumbnails"
149
+ id="delete-post-thumbnails">
150
+ <?php esc_attr_e( 'Delete Featured images', 'apt' ); ?>
151
+ </button>
152
+ </div>
153
+
154
+ </div>
155
+ </div>
156
+ </div>
157
+
158
+ </div>
159
+ </div>
160
+ <div id="genpostthumbsbar" class="wapt-genpostthumbsbar"
161
+ style="position:relative;height:40px;display: none;">
162
+ <div id="genpostthumbsbar-percent"
163
+ style="position:absolute;left:50%;top:50%;margin-left:-25px;height:25px;margin-top:-9px;font-weight:bold;text-align:center;"></div>
164
+ </div>
165
+ <div class="wapt-statistic-message">
166
+ <p><?php wp_kses_post( 'Note: Thumbnails won\'t be generated for posts that already have post thumbnail or <strong><em>skip_post_thumb</em></strong> custom meta field.', 'apt' ); ?></p>
167
+ </div>
168
+ </div>
169
+ <div class="row wapt-generation-progress">
170
+ <div class="wbcr-factory-page-group-header" style="margin-bottom:0;">
171
+ <strong><?php echo esc_html__( 'Generation log', 'apt' ); ?></strong>
172
+ <p><?php echo esc_html__( 'Generation log shows the last 100 generated images.', 'apt' ); ?></p>
173
+ </div>
174
+ <div class="wapt-table-container">
175
+ <table class="wapt-table">
176
+ <thead>
177
+ <tr>
178
+ <th class="wapt-image-td"></th>
179
+ <th class="wapt-title-td"><?php echo esc_html__( 'Post title', 'apt' ); ?></th>
180
+ <th><?php echo esc_html__( 'Image size', 'apt' ); ?></th>
181
+ <th><?php echo esc_html__( 'Generation type', 'apt' ); ?></th>
182
+ <th><?php echo esc_html__( 'Status', 'apt' ); ?></th>
183
+ </tr>
184
+ </thead>
185
+ <tbody>
186
+ <?php
187
+ foreach ( $log as $item ) :
188
+ if ( isset( $item['error_msg'] ) && $item['error_msg'] ) :
189
+ ?>
190
+ <tr class="flash wapt-table-item wapt-row-id-<?php echo esc_attr( $item['post_id'] ); ?> wapt-error">
191
+ <td class="wapt-image-td"></td>
192
+ <td class="wapt-title-td">
193
+ <a href="<?php echo esc_url_raw( $item['url'] ); ?>"
194
+ target="_blank"><?php echo esc_html( $item['title'] ); ?></a>
195
+ </td>
196
+ <td></td>
197
+ <td><?php echo esc_html( $item['type'] ); ?></td>
198
+ <td><?php echo esc_html( $item['error_msg'] ); ?></td>
199
+ </tr>
200
+ <?php else : ?>
201
+ <tr class="flash wapt-table-item wapt-row-id-<?php echo intval( $item['post_id'] ); ?>">
202
+ <td class="wapt-image-td">
203
+ <img height="50" src="<?php echo esc_url_raw( $item['thumbnail_url'] ); ?>">
204
+ </td>
205
+ <td class="wapt-title-td">
206
+ <a href="<?php echo esc_url_raw( $item['url'] ); ?>" target="_blank">
207
+ <?php echo esc_html( $item['title'] ); ?></a>
208
+ </td>
209
+ <td><?php echo esc_html( $item['image_size'] ); ?></td>
210
+ <td><?php echo esc_html( $item['type'] ); ?></td>
211
+ <td><?php echo esc_html( $item['status'] ); ?></td>
212
+ </tr>
213
+ <?php endif; ?>
214
+ <?php endforeach; ?>
215
+ </tbody>
216
+ </table>
217
+ </div>
218
+ </div>
219
+ </div>
220
+ </div>
admin/views/tab-license.php CHANGED
@@ -1,150 +1,150 @@
1
- <div class="wrap">
2
- <div class="factory-bootstrap-453 factory-fontawesome-000">
3
- <?php wp_nonce_field( 'license' ); ?>
4
- <div id="wapt-license-wrapper"
5
- data-loader="<?php echo WAPT_PLUGIN_URL . '/admin/assets/img/loader.gif'; ?>"
6
- data-plugin="<?php echo get_class( $this->plugin ) ?>">
7
-
8
- <div class="factory-bootstrap-413 onp-page-wrap <?php echo $this->get_license_type() ?>-license-manager-content"
9
- id="license-manager">
10
- <div>
11
- <h3><?php printf( __( 'Activate %s', 'apt' ), $this->plan_name ) ?></h3>
12
- <?php echo $this->get_plan_description() ?>
13
- </div>
14
- <br>
15
-
16
- <div class="onp-container">
17
- <div class="license-details">
18
- <?php if ( $this->get_license_type() == 'free' ): ?>
19
- <a href="<?php echo $this->plugin->get_support()->get_pricing_url( true, 'license_page' ); ?>"
20
- class="purchase-premium" target="_blank" rel="noopener">
21
- <span class="btn btn-gold btn-inner-wrap">
22
- <?php printf( __( 'Upgrade to Premium', 'apt' ), $this->premium->get_price() ) ?>
23
- </span>
24
- </a>
25
- <p><?php printf( __( 'Your current license for %1$s:', 'apt' ), $this->plugin->getPluginTitle() ) ?></p>
26
- <?php endif; ?>
27
- <div class="license-details-block <?php echo $this->get_license_type() ?>-details-block">
28
- <?php if ( $this->is_premium ): ?>
29
- <a data-action="deactivate" href="#"
30
- class="btn btn-default btn-small license-delete-button wapt-control-btn">
31
- <?php _e( 'Delete Key', 'apt' ) ?>
32
- </a>
33
- <a data-action="sync" href="#"
34
- class="btn btn-default btn-small license-synchronization-button wapt-control-btn">
35
- <?php _e( 'Synchronization', 'apt' ) ?>
36
- </a>
37
- <?php endif; ?>
38
- <h3>
39
- <?php echo ucfirst( $this->get_plan() ); ?>
40
-
41
- <?php if ( $this->is_premium && $this->premium_has_subscription ): ?>
42
- <span style="font-size: 15px;">
43
- (<?php printf( __( 'Automatic renewal, every %s', '' ), esc_attr( $this->get_billing_cycle_readable() ) ); ?>
44
- )
45
- </span>
46
- <?php endif; ?>
47
- </h3>
48
- <?php if ( $this->is_premium ): ?>
49
- <div class="license-key-identity">
50
- <code><?php echo esc_attr( $this->get_hidden_license_key() ) ?></code>
51
- </div>
52
- <?php endif; ?>
53
- <div class="license-key-description">
54
- <?php if( !$this->is_premium ): ?>
55
- <p><?php _e('Public License is a GPLv3 compatible license allowing you to change and use this version of the plugin for free. Please keep in mind this license covers only free edition of the plugin. Premium versions are distributed with other type of a license.', 'apt') ?></p>
56
- <?php else: ?>
57
- <p><?php _e('Сommercial license, only to the premium add-on to this free plugin. You cannot distribute or modify the premium add-on. But free plugin is a GPLv3 compatible license allowing you to change and use this version of the plugin for free.', 'apt') ?></p>
58
- <?php endif; ?>
59
- <?php if ( $this->is_premium && $this->premium_has_subscription ): ?>
60
- <p class="activate-trial-hint">
61
- <?php _e( 'You use a paid subscription for the plugin updates. In case you don’t want to receive paid updates, please, click <a data-action="unsubscribe" class="wapt-control-btn" href="#">cancel subscription</a>', 'apt' ) ?>
62
- </p>
63
- <?php endif; ?>
64
-
65
- <?php if ( $this->get_license_type() == 'trial' ): ?>
66
- <p class="activate-error-hint">
67
- <?php printf( __( 'Your license has expired, please extend the license to get updates and support.', 'apt' ), '' ) ?>
68
- </p>
69
- <?php endif; ?>
70
- </div>
71
- <table class="license-params" colspacing="0" colpadding="0">
72
- <tr>
73
- <!--<td class="license-param license-param-domain">
74
- <span class="license-value"><?php echo esc_attr( $_SERVER['SERVER_NAME'] ); ?></span>
75
- <span class="license-value-name"><?php _e( 'domain', 'apt' ) ?></span>
76
- </td>-->
77
- <td class="license-param license-param-days">
78
- <span class="license-value"><?php echo $this->get_plan() ?></span>
79
- <span class="license-value-name"><?php _e( 'plan', 'apt' ) ?></span>
80
- </td>
81
- <?php if ( $this->is_premium ) : ?>
82
- <td class="license-param license-param-sites">
83
- <span class="license-value">
84
- <?php echo esc_attr( $this->premium_license->get_count_active_sites() ); ?>
85
- <?php _e( 'of', 'apt' ) ?>
86
- <?php echo esc_attr( $this->premium_license->get_sites_quota() ); ?></span>
87
- <span class="license-value-name"><?php _e( 'active sites', 'apt' ) ?></span>
88
- </td>
89
- <?php endif; ?>
90
- <td class="license-param license-param-version">
91
- <span class="license-value"><?php echo $this->plugin->getPluginVersion() ?></span>
92
- <span class="license-value-name"><span><?php _e( 'version', 'apt' ) ?></span></span>
93
- </td>
94
- <?php if ( $this->is_premium ): ?>
95
- <td class="license-param license-param-days">
96
- <?php if ( $this->get_license_type() == 'trial' ): ?>
97
- <span class="license-value"><?php _e( 'EXPIRED!', 'apt' ) ?></span>
98
- <span class="license-value-name"><?php _e( 'please update the key', 'apt' ) ?></span>
99
- <?php else: ?>
100
- <span class="license-value">
101
- <?php
102
- if ( $this->premium_license->is_lifetime() ) {
103
- echo 'infiniate';
104
- } else {
105
- echo $this->get_expiration_days();
106
- }
107
- ?>
108
- <small> <?php _e( 'day(s)', 'apt' ) ?></small>
109
- </span>
110
- <span class="license-value-name"><?php _e( 'remained', 'apt' ) ?></span>
111
- <?php endif; ?>
112
- </td>
113
- <?php endif; ?>
114
- </tr>
115
- </table>
116
- </div>
117
- </div>
118
- <div class="license-input">
119
- <form action="" method="post">
120
- <?php if ( $this->is_premium ): ?>
121
- <p><?php _e( 'Have a key to activate the premium version? Paste it here:', 'apt' ) ?><p>
122
- <?php else: ?>
123
- <p><?php _e( 'Have a key to activate the plugin? Paste it here:', 'apt' ) ?>
124
- <p>
125
- <?php endif; ?>
126
- <div class="license-key-wrap">
127
- <input type="text" id="license-key" name="licensekey" value=""
128
- class="form-control"/>
129
- <button data-action="activate" class="btn btn-default wapt-control-btn"
130
- type="button"
131
- id="license-submit">
132
- <?php _e( 'Submit Key', 'apt' ) ?>
133
- </button>
134
- </div>
135
- <?php if ( $this->is_premium ): ?>
136
- <p style="margin-top: 10px;">
137
- <?php printf( __( '<a href="%s" target="_blank" rel="noopener">Lean more</a> about the premium version and get the license key to activate it now!', 'apt' ), $this->plugin->get_support()->get_pricing_url( true, 'license_page' ) ); ?>
138
- </p>
139
- <?php else: ?>
140
- <p style="margin-top: 10px;">
141
- <?php printf( __( 'Can’t find your key? Go to <a href="%s" target="_blank" rel="noopener">this page</a> and login using the e-mail address associated with your purchase.', 'apt' ), 'https://users.freemius.com/password/recover' ) ?>
142
- </p>
143
- <?php endif; ?>
144
- </form>
145
- </div>
146
- </div>
147
- </div>
148
- </div>
149
- </div>
150
- </div>
1
+ <div class="wrap">
2
+ <div class="factory-bootstrap-454 factory-fontawesome-000">
3
+ <?php wp_nonce_field( 'license' ); ?>
4
+ <div id="wapt-license-wrapper"
5
+ data-loader="<?php echo esc_url_raw( WAPT_PLUGIN_URL . '/admin/assets/img/loader.gif' ); ?>"
6
+ data-plugin="<?php echo esc_attr( get_class( $this->plugin ) ); ?>">
7
+
8
+ <div class="factory-bootstrap-413 onp-page-wrap <?php echo esc_attr( $this->get_license_type() ); ?>-license-manager-content"
9
+ id="license-manager">
10
+ <div>
11
+ <h3><?php printf( esc_html__( 'Activate %s', 'apt' ), esc_html( $this->plan_name ) ); ?></h3>
12
+ <?php echo esc_html( $this->get_plan_description() ); ?>
13
+ </div>
14
+ <br>
15
+
16
+ <div class="onp-container">
17
+ <div class="license-details">
18
+ <?php if ( $this->get_license_type() === 'free' ) : ?>
19
+ <a href="<?php echo esc_url_raw( $this->plugin->get_support()->get_pricing_url( true, 'license_page' ) ); ?>"
20
+ class="purchase-premium" target="_blank" rel="noopener">
21
+ <span class="btn btn-gold btn-inner-wrap">
22
+ <?php printf( esc_html__( 'Upgrade to Premium', 'apt' ), esc_html( $this->premium->get_price() ) ); ?>
23
+ </span>
24
+ </a>
25
+ <p><?php printf( esc_html__( 'Your current license for %1$s:', 'apt' ), esc_html( $this->plugin->getPluginTitle() ) ); ?></p>
26
+ <?php endif; ?>
27
+ <div class="license-details-block <?php echo esc_html( $this->get_license_type() ); ?>-details-block">
28
+ <?php if ( $this->is_premium ) : ?>
29
+ <a data-action="deactivate" href="#"
30
+ class="btn btn-default btn-small license-delete-button wapt-control-btn">
31
+ <?php esc_html_e( 'Delete Key', 'apt' ); ?>
32
+ </a>
33
+ <a data-action="sync" href="#"
34
+ class="btn btn-default btn-small license-synchronization-button wapt-control-btn">
35
+ <?php esc_html_e( 'Synchronization', 'apt' ); ?>
36
+ </a>
37
+ <?php endif; ?>
38
+ <h3>
39
+ <?php echo esc_html( ucfirst( $this->get_plan() ) ); ?>
40
+
41
+ <?php if ( $this->is_premium && $this->premium_has_subscription ) : ?>
42
+ <span style="font-size: 15px;">
43
+ (<?php printf( esc_html__( 'Automatic renewal, every %s', '' ), esc_attr( $this->get_billing_cycle_readable() ) ); ?>
44
+ )
45
+ </span>
46
+ <?php endif; ?>
47
+ </h3>
48
+ <?php if ( $this->is_premium ) : ?>
49
+ <div class="license-key-identity">
50
+ <code><?php echo esc_attr( $this->get_hidden_license_key() ); ?></code>
51
+ </div>
52
+ <?php endif; ?>
53
+ <div class="license-key-description">
54
+ <?php if ( ! $this->is_premium ) : ?>
55
+ <p><?php esc_html_e( 'Public License is a GPLv3 compatible license allowing you to change and use this version of the plugin for free. Please keep in mind this license covers only free edition of the plugin. Premium versions are distributed with other type of a license.', 'apt' ); ?></p>
56
+ <?php else : ?>
57
+ <p><?php esc_html_e( 'Сommercial license, only to the premium add-on to this free plugin. You cannot distribute or modify the premium add-on. But free plugin is a GPLv3 compatible license allowing you to change and use this version of the plugin for free.', 'apt' ); ?></p>
58
+ <?php endif; ?>
59
+ <?php if ( $this->is_premium && $this->premium_has_subscription ) : ?>
60
+ <p class="activate-trial-hint">
61
+ <?php esc_html_e( 'You use a paid subscription for the plugin updates. In case you don’t want to receive paid updates, please, click <a data-action="unsubscribe" class="wapt-control-btn" href="#">cancel subscription</a>', 'apt' ); ?>
62
+ </p>
63
+ <?php endif; ?>
64
+
65
+ <?php if ( $this->get_license_type() === 'trial' ) : ?>
66
+ <p class="activate-error-hint">
67
+ <?php printf( esc_html__( 'Your license has expired, please extend the license to get updates and support.', 'apt' ), '' ); ?>
68
+ </p>
69
+ <?php endif; ?>
70
+ </div>
71
+ <table class="license-params" colspacing="0" colpadding="0">
72
+ <tr>
73
+ <!--<td class="license-param license-param-domain">
74
+ <span class="license-value"><?php echo esc_attr( $_SERVER['SERVER_NAME'] ); ?></span>
75
+ <span class="license-value-name"><?php esc_html_e( 'domain', 'apt' ); ?></span>
76
+ </td>-->
77
+ <td class="license-param license-param-days">
78
+ <span class="license-value"><?php echo esc_html( $this->get_plan() ); ?></span>
79
+ <span class="license-value-name"><?php esc_html_e( 'plan', 'apt' ); ?></span>
80
+ </td>
81
+ <?php if ( $this->is_premium ) : ?>
82
+ <td class="license-param license-param-sites">
83
+ <span class="license-value">
84
+ <?php echo esc_attr( $this->premium_license->get_count_active_sites() ); ?>
85
+ <?php esc_html_e( 'of', 'apt' ); ?>
86
+ <?php echo esc_attr( $this->premium_license->get_sites_quota() ); ?></span>
87
+ <span class="license-value-name"><?php esc_html_e( 'active sites', 'apt' ); ?></span>
88
+ </td>
89
+ <?php endif; ?>
90
+ <td class="license-param license-param-version">
91
+ <span class="license-value"><?php echo esc_html( $this->plugin->getPluginVersion() ); ?></span>
92
+ <span class="license-value-name"><span><?php esc_html_e( 'version', 'apt' ); ?></span></span>
93
+ </td>
94
+ <?php if ( $this->is_premium ) : ?>
95
+ <td class="license-param license-param-days">
96
+ <?php if ( $this->get_license_type() === 'trial' ) : ?>
97
+ <span class="license-value"><?php esc_html_e( 'EXPIRED!', 'apt' ); ?></span>
98
+ <span class="license-value-name"><?php esc_html_e( 'please update the key', 'apt' ); ?></span>
99
+ <?php else : ?>
100
+ <span class="license-value">
101
+ <?php
102
+ if ( $this->premium_license->is_lifetime() ) {
103
+ echo 'infiniate';
104
+ } else {
105
+ echo esc_html( $this->get_expiration_days() );
106
+ }
107
+ ?>
108
+ <small> <?php esc_html_e( 'day(s)', 'apt' ); ?></small>
109
+ </span>
110
+ <span class="license-value-name"><?php esc_html_e( 'remained', 'apt' ); ?></span>
111
+ <?php endif; ?>
112
+ </td>
113
+ <?php endif; ?>
114
+ </tr>
115
+ </table>
116
+ </div>
117
+ </div>
118
+ <div class="license-input">
119
+ <form action="" method="post">
120
+ <?php if ( $this->is_premium ) : ?>
121
+ <p><?php esc_html_e( 'Have a key to activate the premium version? Paste it here:', 'apt' ); ?><p>
122
+ <?php else : ?>
123
+ <p><?php esc_html_e( 'Have a key to activate the plugin? Paste it here:', 'apt' ); ?>
124
+ <p>
125
+ <?php endif; ?>
126
+ <div class="license-key-wrap">
127
+ <input type="text" id="license-key" name="licensekey" value=""
128
+ class="form-control"/>
129
+ <button data-action="activate" class="btn btn-default wapt-control-btn"
130
+ type="button"
131
+ id="license-submit">
132
+ <?php esc_html_e( 'Submit Key', 'apt' ); ?>
133
+ </button>
134
+ </div>
135
+ <?php if ( $this->is_premium ) : ?>
136
+ <p style="margin-top: 10px;">
137
+ <?php printf( wp_kses_post( '<a href="%s" target="_blank" rel="noopener">Lean more</a> about the premium version and get the license key to activate it now!', 'apt' ), esc_url_raw( $this->plugin->get_support()->get_pricing_url( true, 'license_page' ) ) ); ?>
138
+ </p>
139
+ <?php else : ?>
140
+ <p style="margin-top: 10px;">
141
+ <?php printf( wp_kses_post( 'Can’t find your key? Go to <a href="%s" target="_blank" rel="noopener">this page</a> and login using the e-mail address associated with your purchase.', 'apt' ), 'https://users.freemius.com/password/recover' ); ?>
142
+ </p>
143
+ <?php endif; ?>
144
+ </form>
145
+ </div>
146
+ </div>
147
+ </div>
148
+ </div>
149
+ </div>
150
+ </div>
auto-post-thumbnail.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Auto Featured Image (Auto Post Thumbnail)
4
  Plugin URI: https://cm-wp.com/apt
5
  Description: Automatically generate the Featured Image from the first image in post or any custom post type only if Featured Image is not set manually. Featured Image Generation From Title. Native image search for Elementor, Gutenberg, Classic Editor.
6
- Version: 3.9.7
7
  Author: Creative Motion <support@cm-wp.com>
8
  Author URI: https://cm-wp.com
9
  Text Domain: apt
@@ -89,28 +89,28 @@ $plugin_info = [
89
  ],
90
 
91
  'load_factory_modules' => [
92
- [ 'libs/factory/bootstrap', 'factory_bootstrap_453', 'admin' ],
93
- [ 'libs/factory/forms', 'factory_forms_449', 'admin' ],
94
- [ 'libs/factory/pages', 'factory_pages_451', 'admin' ],
95
- [ 'libs/factory/templates', 'factory_templates_105', 'admin' ],
96
- [ 'libs/factory/freemius', 'factory_freemius_139', 'all' ],
97
- [ 'libs/factory/adverts', 'factory_adverts_129', 'admin' ],
98
- [ 'libs/factory/feedback', 'factory_feedback_113', 'admin' ],
99
- [ 'libs/factory/logger', 'factory_logger_117', 'all' ],
100
  ],
101
  ];
102
 
103
- $wapt_compatibility = new Wbcr_Factory452_Requirements(
104
- __FILE__,
105
- array_merge(
106
- $plugin_info,
107
- [
108
- 'plugin_already_activate' => defined( 'WAPT_PLUGIN_ACTIVE' ),
109
- 'required_php_version' => '7.0',
110
- 'required_wp_version' => '4.8.0',
111
- // 'required_clearfy_check_component' => false
112
  ]
113
- )
114
  );
115
 
116
  /**
@@ -121,8 +121,6 @@ if ( ! $wapt_compatibility->check() ) {
121
  return;
122
  }
123
 
124
- /********************************************/
125
-
126
  define( 'WAPT_PLUGIN_ACTIVE', true );
127
  define( 'WAPT_PLUGIN_VERSION', $wapt_compatibility->get_plugin_version() );
128
 
@@ -151,15 +149,15 @@ require_once WAPT_PLUGIN_DIR . '/includes/image-search/boot.php';
151
 
152
  try {
153
  new WAPT_Plugin(
154
- __FILE__,
155
- array_merge(
156
- $plugin_info,
157
- [
158
- 'plugin_version' => WAPT_PLUGIN_VERSION,
159
- 'plugin_text_domain' => $wapt_compatibility->get_text_domain(),
160
  ]
161
- )
162
- );
163
  } catch ( Exception $e ) {
164
  global $wapt_exception;
165
 
@@ -167,16 +165,14 @@ try {
167
  // Plugin wasn't initialized due to an error
168
  define( 'WAPT_PLUGIN_THROW_ERROR', true );
169
 
 
 
 
170
  function wapt_exception_notice() {
171
  global $wapt_exception;
172
 
173
- $error = sprintf(
174
- 'The %s plugin has stopped. <b>Error:</b> %s Code: %s',
175
- 'Auto Featured Image',
176
- $wapt_exception->getMessage(),
177
- $wapt_exception->getCode()
178
- );
179
- echo '<div class="notice notice-error"><p>' . $error . '</p></div>';
180
  }
181
 
182
  add_action( 'admin_notices', 'wapt_exception_notice' );
3
  Plugin Name: Auto Featured Image (Auto Post Thumbnail)
4
  Plugin URI: https://cm-wp.com/apt
5
  Description: Automatically generate the Featured Image from the first image in post or any custom post type only if Featured Image is not set manually. Featured Image Generation From Title. Native image search for Elementor, Gutenberg, Classic Editor.
6
+ Version: 3.9.8
7
  Author: Creative Motion <support@cm-wp.com>
8
  Author URI: https://cm-wp.com
9
  Text Domain: apt
89
  ],
90
 
91
  'load_factory_modules' => [
92
+ [ 'libs/factory/bootstrap', 'factory_bootstrap_454', 'admin' ],
93
+ [ 'libs/factory/forms', 'factory_forms_450', 'admin' ],
94
+ [ 'libs/factory/pages', 'factory_pages_452', 'admin' ],
95
+ [ 'libs/factory/templates', 'factory_templates_106', 'admin' ],
96
+ [ 'libs/factory/freemius', 'factory_freemius_140', 'all' ],
97
+ [ 'libs/factory/adverts', 'factory_adverts_130', 'admin' ],
98
+ [ 'libs/factory/feedback', 'factory_feedback_114', 'admin' ],
99
+ [ 'libs/factory/logger', 'factory_logger_118', 'all' ],
100
  ],
101
  ];
102
 
103
+ $wapt_compatibility = new Wbcr_Factory453_Requirements(
104
+ __FILE__,
105
+ array_merge(
106
+ $plugin_info,
107
+ [
108
+ 'plugin_already_activate' => defined( 'WAPT_PLUGIN_ACTIVE' ),
109
+ 'required_php_version' => '7.0',
110
+ 'required_wp_version' => '4.8.0',
111
+ // 'required_clearfy_check_component' => false
112
  ]
113
+ )
114
  );
115
 
116
  /**
121
  return;
122
  }
123
 
 
 
124
  define( 'WAPT_PLUGIN_ACTIVE', true );
125
  define( 'WAPT_PLUGIN_VERSION', $wapt_compatibility->get_plugin_version() );
126
 
149
 
150
  try {
151
  new WAPT_Plugin(
152
+ __FILE__,
153
+ array_merge(
154
+ $plugin_info,
155
+ [
156
+ 'plugin_version' => WAPT_PLUGIN_VERSION,
157
+ 'plugin_text_domain' => $wapt_compatibility->get_text_domain(),
158
  ]
159
+ )
160
+ );
161
  } catch ( Exception $e ) {
162
  global $wapt_exception;
163
 
165
  // Plugin wasn't initialized due to an error
166
  define( 'WAPT_PLUGIN_THROW_ERROR', true );
167
 
168
+ /**
169
+ * Exception notice
170
+ */
171
  function wapt_exception_notice() {
172
  global $wapt_exception;
173
 
174
+ $error = sprintf( 'The %s plugin has stopped. <b>Error:</b> %s Code: %s', 'Auto Featured Image', $wapt_exception->getMessage(), $wapt_exception->getCode() );
175
+ echo '<div class="notice notice-error"><p>' . wp_kses_post( $error ) . '</p></div>';
 
 
 
 
 
176
  }
177
 
178
  add_action( 'admin_notices', 'wapt_exception_notice' );
fonts/{Arial.ttf → arial.ttf} RENAMED
File without changes
fonts/{Segoeui.ttf → segoeui.ttf} RENAMED
File without changes
fonts/{Tahoma.ttf → tahoma.ttf} RENAMED
File without changes
includes/class-apt.php CHANGED
@@ -60,17 +60,17 @@ class AutoPostThumbnails {
60
  $this->plugin = \WAPT_Plugin::app();
61
 
62
  $this->sources = [
63
- 'google' => WAPT_PLUGIN_SLUG,
64
- 'recommend' => '',
65
- 'pixabay' => '',
66
- 'unsplash' => '',
67
- ];
68
- if ( \WAPT_Plugin::app()->is_premium() ) {
69
- $this->sources = [
70
- 'recommend' => '',
71
  'google' => WAPT_PLUGIN_SLUG,
 
72
  'pixabay' => '',
73
  'unsplash' => '',
 
 
 
 
 
 
 
74
  ];
75
  }
76
 
@@ -84,7 +84,7 @@ class AutoPostThumbnails {
84
  * @return AutoPostThumbnails
85
  */
86
  public static function instance() {
87
- if ( static::$instance === null ) {
88
  static::$instance = new self();
89
  }
90
 
@@ -95,7 +95,7 @@ class AutoPostThumbnails {
95
  * Init includes.
96
  */
97
  private function init_includes() {
98
- //require __DIR__ . '/src/class.template.php';
99
  }
100
 
101
  /**
@@ -113,17 +113,17 @@ class AutoPostThumbnails {
113
  if ( $is_auto_upload && \WAPT_Plugin::app()->is_premium() ) {
114
  add_filter( 'wp_insert_post_data', [ $this, 'auto_upload' ], 10, 2 );
115
 
116
- // This hook handle update post via rest api. for example Wordpress mobile apps
117
  foreach ( $allowed_import_post_types as $post_type ) {
118
  add_action( "rest_after_insert_{$post_type}", [ $this, 'auto_upload' ], 10, 2 );
119
  }
120
  }
121
 
122
  if ( $is_auto_generate ) {
123
- //add_action( 'publish_post', [ $this, 'publish_post' ], 10, 1 );
124
  add_action( 'save_post', [ $this, 'save_post' ], 10, 3 );
125
 
126
- // This hook handle update post via rest api. for example Wordpress mobile apps
127
  foreach ( $this->allowed_generate_post_types as $post_type ) {
128
  add_action( "rest_after_insert_{$post_type}", [ $this, 'rest_after_insert' ], 10, 3 );
129
  }
@@ -141,9 +141,9 @@ class AutoPostThumbnails {
141
  }
142
 
143
  private function ajax_actions() {
144
- //AJAX actions
145
- add_action( 'wp_ajax_generatepostthumbnail', [ $this, 'ajax_process_post', ] );
146
- add_action( 'wp_ajax_delete_post_thumbnails', [ $this, 'ajax_delete_post_thumbnails', ] );
147
  add_action( 'wp_ajax_get-posts-ids', [ $this, 'get_posts_ids' ] );
148
  add_action( 'wp_ajax_apt_replace_thumbnail', [ $this, 'apt_replace_thumbnail' ] );
149
  add_action( 'wp_ajax_apt_get_thumbnail', [ $this, 'apt_get_thumbnail' ] );
@@ -151,7 +151,7 @@ class AutoPostThumbnails {
151
  add_action( 'wp_ajax_upload_to_library', [ $this, 'upload_to_library' ] );
152
  add_action( 'wp_ajax_wapt_upload_font', [ $this, 'upload_font' ] );
153
 
154
- //APIs
155
  add_action( 'wp_ajax_apt_api_google', [ $this, 'apt_api_google' ] );
156
  add_action( 'wp_ajax_apt_check_api_key', [ $this, 'apt_check_api_key' ] );
157
  add_action( 'wp_ajax_hide_notice_auto_generation', [ $this, 'hide_notice_auto_generation' ] );
@@ -174,7 +174,7 @@ class AutoPostThumbnails {
174
  }
175
  check_ajax_referer( 'get-posts' );
176
 
177
- $generate = \WAPT_Plugin::app()->getPopulateOption( "generate_autoimage", 'find' );
178
 
179
  $this->plugin->logger->info( "START generate in mode: {$generate}" );
180
 
@@ -190,13 +190,13 @@ class AutoPostThumbnails {
190
  break;
191
  }
192
 
193
- $has_thumb = (bool) $_POST['withThumb'];
194
- $type = esc_html( $_POST['posttype'] );
195
  if ( \WAPT_Plugin::app()->is_premium() ) {
196
- $status = esc_html( $_POST['poststatus'] );
197
- $category = esc_html( $_POST['category'] );
198
- $date_start = esc_html( $_POST['date_start'] );
199
- $date_end = esc_html( $_POST['date_end'] );
200
  $date_start = $date_start ? \DateTime::createFromFormat( 'd.m.Y', $date_start )->format( 'd.m.Y' ) : 0;
201
  $date_end = $date_end ? \DateTime::createFromFormat( 'd.m.Y', $date_end )->setTime( 23, 59 )->format( 'd.m.Y H:i' ) : 0;
202
  // Get id's of the posts that satisfy the filters
@@ -211,8 +211,9 @@ class AutoPostThumbnails {
211
  $ids = [];
212
  foreach ( $query->posts as $post ) {
213
  $ids[] = $post->ID;
214
- //если запрошены посты без тамбнеила, значит пользователь хочет сгенерировать их
215
- /*if ( ! $has_thumb ) {
 
216
  $images = new \WBCR\APT\PostImages( $post->ID );
217
  if ( ( $images->is_images() && $images->count_images() ) || $auto_generate ) {
218
  $ids[] = $post->ID;
@@ -220,13 +221,14 @@ class AutoPostThumbnails {
220
  } else //иначе он хочет удалить тамбнэйлы
221
  {
222
  $ids[] = $post->ID;
223
- }*/
 
224
  }
225
  $ids = implode( ',', $ids );
226
  } else {
227
- $ids = "0";
228
  }
229
- echo $ids;
230
 
231
  $this->plugin->logger->info( "Queried posts IDs: {$ids}" );
232
 
@@ -286,7 +288,7 @@ class AutoPostThumbnails {
286
  set_time_limit( 60 );
287
 
288
  // Pass on the id to our 'publish' callback function.
289
- echo delete_post_thumbnail( $id );
290
 
291
  die( - 1 );
292
  }
@@ -298,13 +300,13 @@ class AutoPostThumbnails {
298
  */
299
  public function notice_auto_generation() {
300
  ?>
301
- <div class="notice notice-warning is-dismissible" id="notice_auto_generation">
302
- <p><b>Auto Featured Image:</b> Do you want to enable automatic post thumbnail generation? Enable this option
303
- in
304
- <a href="<?php echo admin_url( 'admin.php?page=wapt_settings-wbcr_apt&tab=general' ); ?>">settings</a><br>
305
- <a href="#" id="hide_notice_auto_generation">Don't ask again</a>
306
- </p>
307
- </div>
308
  <?php
309
  }
310
 
@@ -312,7 +314,7 @@ class AutoPostThumbnails {
312
  *
313
  */
314
  public function hide_notice_auto_generation() {
315
- if ( isset( $_POST['action'] ) && $_POST['action'] === 'hide_notice_auto_generation' ) {
316
  \WAPT_Plugin::app()->updateOption( 'auto_generation_notice', 0 );
317
  }
318
  }
@@ -328,7 +330,7 @@ class AutoPostThumbnails {
328
  */
329
  public function check_required_transition( $new_status = '', $old_status = '', $post = '' ) {
330
 
331
- if ( 'publish' == $new_status ) {
332
  $this->publish_post( $post->ID );
333
  }
334
  }
@@ -340,40 +342,52 @@ class AutoPostThumbnails {
340
  */
341
  public function get_posts_query( $has_thumb = false, $type = 'post', $status = 'publish', $category = 0, $date_start = 0, $date_end = 0, $is_log = true ) {
342
 
 
343
  if ( $is_log ) {
344
- $this->plugin->logger->info( "Posts query: " . var_export( [
345
- 'has_thumb' => $has_thumb,
346
- 'type' => $type,
347
- 'status' => $status,
348
- 'category' => $category,
349
- 'date_start' => $date_start,
350
- 'date_end' => $date_end,
351
- ], true ) );
352
  }
 
353
 
354
  $q_status = $status ? $status : 'any';
355
  $q_type = $type ? $type : 'any';
356
- $q_has_thumb = $has_thumb ? "EXISTS" : "NOT EXISTS";
357
 
358
  $args = [
359
- 'posts_per_page' => - 1,
360
- 'post_status' => $q_status,
361
- 'post_type' => $q_type,
362
- 'meta_query' => [
363
- 'relation' => 'AND',
364
- [ 'key' => '_thumbnail_id', 'compare' => $q_has_thumb ],
365
- [ 'key' => 'skip_post_thumb', 'compare' => 'NOT EXISTS' ],
366
- ],
 
 
 
 
 
 
367
  ];
368
  if ( $category ) {
369
  $args['cat'] = $category;
370
  }
371
  if ( $date_start && $date_end ) {
372
- $args['date_query'][] = [ 'after' => $date_start, 'before' => $date_end, 'inclusive' => true, ];
 
 
 
 
373
  }
374
  $query = new WP_Query( $args );
375
 
376
- //$this->plugin->logger->debug( "Posts SQL: " . $query->request );
377
 
378
  return $query;
379
  }
@@ -420,7 +434,7 @@ class AutoPostThumbnails {
420
  // If thumb id is not found, try to look for the image in DB.
421
  if ( isset( $image['url'] ) && ! empty( $image['url'] ) ) {
422
  $image_url = $image['url'];
423
- //если ссылка на миниатюру, то регулярка сделает ссылку на оригинал. убирает в конце названия файла -150x150
424
  $image_url = preg_replace( '/-[0-9]{1,}x[0-9]{1,}\./', '.', $image_url );
425
  $thumb_id = $wpdb->get_var( "SELECT ID FROM {$wpdb->posts} WHERE guid LIKE '%" . esc_sql( $image_url ) . "%'" );
426
  }
@@ -470,7 +484,7 @@ class AutoPostThumbnails {
470
  public function publish_post( $post_id, $post = null, $update = true ) {
471
  global $wpdb;
472
 
473
- $autoimage = \WAPT_Plugin::app()->getPopulateOption( "generate_autoimage", 'find' );
474
  $generation = new GenerateResult( $post_id, $autoimage );
475
 
476
  if ( ! $post ) {
@@ -478,7 +492,7 @@ class AutoPostThumbnails {
478
  if ( ! $post ) {
479
  $this->plugin->logger->warning( "The post was not found (post ID = {$post_id})" );
480
 
481
- return $generation->result( __( "The post was not found", 'apt' ) );
482
  }
483
  }
484
 
@@ -491,7 +505,7 @@ class AutoPostThumbnails {
491
  if ( $_thumbnail_id && $wpdb->get_var( "SELECT ID FROM {$wpdb->posts} WHERE id = '" . esc_sql( $_thumbnail_id ) . "' AND post_type = 'attachment'" ) || get_post_meta( $post_id, 'skip_post_thumb', true ) ) {
492
  $this->plugin->logger->warning( "The post ({$post_id}) has already been assigned a featured image" );
493
 
494
- return $generation->result( __( "The post has already been assigned a featured image", 'apt' ) );
495
  }
496
 
497
  $thumb_id = 0;
@@ -519,17 +533,17 @@ class AutoPostThumbnails {
519
  }
520
  } else {
521
  // создаём свою картинку с заголовком на цветном фоне
522
- if ( $autoimage == 'generate' || $autoimage == 'both' ) {
523
  $thumb_id = $this->generate_and_attachment( $post_id );
524
  if ( $thumb_id ) {
525
  update_post_meta( $post_id, '_thumbnail_id', $thumb_id );
526
 
527
  return $generation->result( '', $thumb_id );
528
  }
529
- } else if ( $autoimage == 'google' || $autoimage == 'find_google' ) {
530
  $response = ( new GoogleImages() )->search( $post->post_title, 1 );
531
  if ( ! empty( $response->images ) ) {
532
- $this->plugin->logger->info( "Google image search result = " . var_export( $response->images[0], true ) );
533
  $thumb_id = apply_filters( 'wapt/download_from_google', 0, $response->images, $post_id );
534
  }
535
  if ( $thumb_id ) {
@@ -538,11 +552,11 @@ class AutoPostThumbnails {
538
 
539
  return $generation->result( '', $thumb_id );
540
  }
541
- $this->plugin->logger->error( "Error download from google. " . var_export( $thumb_id, true ) );
542
  }
543
  }
544
 
545
- return $generation->result( __( "No images found or generated", 'apt' ) );
546
  }
547
 
548
  /**
@@ -617,7 +631,6 @@ class AutoPostThumbnails {
617
  /**
618
  * Fetch image from URL and generate required thumbnails.
619
  *
620
- *
621
  * @param string $image
622
  * @param string $title
623
  * @param int $post_id
@@ -634,7 +647,7 @@ class AutoPostThumbnails {
634
 
635
  // Get the file name
636
  $filename = substr( $imageUrl, ( strrpos( $imageUrl, '/' ) ) + 1 );
637
- //исключаем параметры после имени файла
638
  if ( strrpos( $filename, '?' ) ) {
639
  $filename = substr( $filename, 0, strrpos( $filename, '?' ) );
640
  }
@@ -649,7 +662,7 @@ class AutoPostThumbnails {
649
  $new_file = $uploads['path'] . "/$filename";
650
  $ext = pathinfo( $new_file, PATHINFO_EXTENSION );
651
  if ( empty( $ext ) ) {
652
- $ext = "jpg";
653
  $filename .= ".{$ext}";
654
  $new_file .= ".{$ext}";
655
  }
@@ -658,19 +671,23 @@ class AutoPostThumbnails {
658
  if ( ! ini_get( 'allow_url_fopen' ) ) {
659
  $file_data = $this->get_file_contents( $imageUrl );
660
  } else {
661
- $arrContextOptions = [ "ssl" => [ "verify_peer" => false, "verify_peer_name" => false, ], ];
 
 
 
 
 
662
  $file_data = file_get_contents( $imageUrl, false, stream_context_create( $arrContextOptions ) );
663
  }
664
 
665
-
666
  if ( ! $file_data ) {
667
  return null;
668
  }
669
 
670
- //Fix for checking file extensions
671
- $exts = explode( ".", $filename );
672
  if ( count( $exts ) > 2 ) {
673
- //return null;
674
  }
675
 
676
  $allowed = get_allowed_mime_types();
@@ -702,16 +719,16 @@ class AutoPostThumbnails {
702
 
703
  // Construct the attachment array
704
  $attachment = [
705
- 'post_mime_type' => $type,
706
- 'guid' => $url,
707
- 'post_parent' => null,
708
- 'post_title' => $imageTitle,
709
- 'post_content' => '',
710
  ];
711
 
712
  $thumb_id = wp_insert_attachment( $attachment, $file, $post_id );
713
  if ( ! is_wp_error( $thumb_id ) ) {
714
- require_once( ABSPATH . '/wp-admin/includes/image.php' );
715
 
716
  // Added fix by misthero as suggested
717
  wp_update_attachment_metadata( $thumb_id, wp_generate_attachment_metadata( $thumb_id, $new_file ) );
@@ -725,12 +742,11 @@ class AutoPostThumbnails {
725
 
726
  /**
727
  * Function to fetch the contents of URL using HTTP API in absence of allow_url_fopen.
728
- *
729
  */
730
  public function get_file_contents( $URL ) {
731
  $response = wp_remote_get( $URL );
732
  $contents = '';
733
- if ( wp_remote_retrieve_response_code( $response ) == 200 ) {
734
  $contents = wp_remote_retrieve_body( $response );
735
  }
736
 
@@ -755,17 +771,17 @@ class AutoPostThumbnails {
755
  if ( isset( $_POST['thumbnail_id'] ) && ! empty( $_POST['thumbnail_id'] ) ) {
756
  $thumb_id = intval( $_POST['thumbnail_id'] );
757
 
758
- if ( $thumb_id == - 1 ) {
759
- //generate image
760
  $thumb_id = $this->generate_and_attachment( $post_id );
761
  }
762
- } else if ( isset( $_POST['image'] ) && ! empty( $_POST['image'] ) ) {
763
  $img = $_POST['image'];
764
 
765
- //Совместимость с NextGen
766
  $img = preg_replace( '/(thumbs\/thumbs_)/', '.', $img );
767
 
768
- //Find image in medialibrary
769
  $thumb_id = $this->get_thumbnail_id( [ 'url' => $img ] );
770
 
771
  if ( ! $thumb_id ) {
@@ -778,7 +794,7 @@ class AutoPostThumbnails {
778
  update_post_meta( $post_id, '_thumbnail_id', $thumb_id );
779
  }
780
 
781
- echo $this->apt_getThumbHtml( $post_id, $thumb_id );
782
  }
783
  }
784
  die();
@@ -791,7 +807,7 @@ class AutoPostThumbnails {
791
  * @uses apt_thumb
792
  */
793
  public function apt_get_thumbnail() {
794
- include WAPT_ABSPATH . "/admin/views/pro_column.php";
795
  die();
796
  }
797
 
@@ -806,42 +822,39 @@ class AutoPostThumbnails {
806
  public function apt_getThumbHtml( $post_id, $thumb_id ) {
807
  $imgTag = get_the_post_thumbnail( $post_id, [ 100, 0 ], [ 'class' => 'img' ] );
808
  if ( empty( $imgTag ) ) {
809
- $imgTag = __( 'No image', 'apt' );
810
  }
811
 
812
- $title = __( 'Change featured image', 'apt' );
813
  $wpnonce = wp_create_nonce( 'set_post_thumbnail-' . $post_id );
814
- $ajaxloader = WAPT_PLUGIN_URL . "/admin/assets/img/ajax-loader.gif";
815
- $content = "";
816
- $html = "<a title='{$title}' href='#' class='modal-init-js' id='modal-init-js_{$post_id}' " . "onclick='return window.aptModalShow(this, {$post_id}, \"$wpnonce\");'>{$imgTag}</a>" . "<span id='loader_{$post_id}' style='display:none;'><img src='{$ajaxloader}' width='100px' alt=''></span>" . "<div id='post_imgs_{$post_id}' class='imgs' style='display:none;'>" . "<span style='display:none;'><img src='{$ajaxloader}' alt=''></span><div>{$content}</div></div>";
817
 
818
  return $html;
819
  }
820
 
821
  /**
822
  * Контент подпункта меню в Медиафайлы
823
- *
824
  */
825
  public function addToMediaFromApt() {
826
- //media_upload_header();
827
  $this->is_in_medialibrary = true;
828
  $this->sources = apply_filters( 'wapt/sources', $this->sources, 'add_to_media_from_apt' );
829
- require_once WAPT_ABSPATH . "/admin/views/media-library.php";
830
  }
831
 
832
  /**
833
  * Контент вкладки
834
- *
835
  */
836
  public function media_AptTabContent() {
837
  media_upload_header();
838
  $this->sources = apply_filters( 'wapt/sources', $this->sources, 'tab_content' );
839
- require_once WAPT_ABSPATH . "/admin/views/media-library.php";
840
  }
841
 
842
  /**
843
  * AJAX вывод содержимого вкладки сервиса
844
- *
845
  */
846
  public function source_content() {
847
  if ( ! wp_verify_nonce( $_POST['wpnonce'], 'apt_content' ) ) {
@@ -849,9 +862,9 @@ class AutoPostThumbnails {
849
  }
850
  $this->sources = apply_filters( 'wapt/sources', $this->sources, 'source_content' );
851
  if ( isset( $_POST['source'] ) && ! empty( $_POST['source'] ) ) {
852
- $source = str_replace( "tab-", "", sanitize_text_field( $_POST['source'] ) );
853
 
854
- //if( empty($this->sources[$source]) && !\WAPT_Plugin::app()->premium->is_activate() )
855
  if ( empty( $this->sources[ $source ] ) ) {
856
  require_once WAPT_PLUGIN_DIR . '/admin/views/pro.php';
857
  } else {
@@ -863,7 +876,6 @@ class AutoPostThumbnails {
863
 
864
  /**
865
  * AJAX загрузка выбранного изображения
866
- *
867
  */
868
  public function upload_to_library() {
869
 
@@ -876,13 +888,14 @@ class AutoPostThumbnails {
876
  // get image file
877
  $response = wp_remote_get( $_POST['image_url'], [ 'timeout' => 100 ] );
878
  if ( is_wp_error( $response ) ) {
879
- die( 'Error: ' . $response->get_error_message() );
880
  }
881
 
882
- $file_ext = '';
 
883
  switch ( $_POST['service'] ) {
884
  case 'pixabay':
885
- $path_info = pathinfo( $_POST['image_url'] );
886
  $file_ext = $path_info['extension'];
887
  $image_title = sanitize_text_field( $_POST['q'] );
888
  break;
@@ -896,7 +909,7 @@ class AutoPostThumbnails {
896
  $image_title = sanitize_text_field( $_POST['title'] );
897
  break;
898
  case 'google':
899
- $path_info = pathinfo( $_POST['image_url'] );
900
  $file_ext = $path_info['extension'];
901
  if ( $file_ext !== 'jpg' && $file_ext !== 'jpeg' && $file_ext !== 'png' && $file_ext !== 'gif' ) {
902
  $file_ext = 'jpg';
@@ -904,29 +917,41 @@ class AutoPostThumbnails {
904
  if ( empty( $file_ext ) ) {
905
  $file_ext = 'jpg';
906
  }
907
- $image_title = sanitize_text_field( $_POST['title'] );
908
  break;
909
  }
910
 
911
- $file_name = sanitize_file_name( implode( '_', explode( ' ', $_POST['q'] ) ) . '_' . time() . '.' . $file_ext );
 
912
  $wp_upload_dir = wp_upload_dir();
913
  $image_upload_path = $wp_upload_dir['path'];
914
 
915
  if ( ! is_dir( $image_upload_path ) ) {
 
916
  if ( ! @mkdir( $image_upload_path, 0777, true ) ) {
917
- die( 'Error: Failed to create upload folder ' . $image_upload_path );
 
 
 
 
 
 
 
 
918
  }
 
919
  }
920
 
921
  $target_file_name = $image_upload_path . '/' . $file_name;
922
- $result = @file_put_contents( $target_file_name, $response['body'] );
 
923
  unset( $response['body'] );
924
- if ( $result === false ) {
925
- die( 'Error: Failed to write file ' . $target_file_name );
926
  }
927
 
928
  // are we dealing with an image
929
- require_once( ABSPATH . 'wp-admin/includes/image.php' );
930
  if ( ! wp_read_image_metadata( $target_file_name ) ) {
931
  unlink( $target_file_name );
932
  die( 'Error: File is not an image.' );
@@ -937,29 +962,29 @@ class AutoPostThumbnails {
937
  // insert attachment
938
  $wp_filetype = wp_check_filetype( basename( $target_file_name ), null );
939
  $attachment = [
940
- 'guid' => $wp_upload_dir['url'] . '/' . basename( $target_file_name ),
941
- 'post_mime_type' => $wp_filetype['type'],
942
- 'post_title' => preg_replace( '/\.[^.]+$/', '', $image_title ),
943
- 'post_status' => 'inherit',
944
  ];
945
 
946
  $attach_id = wp_insert_attachment( $attachment, $target_file_name, $postid );
947
- if ( $attach_id == 0 ) {
948
  die( 'Error: File attachment error' );
949
  }
950
 
951
  $attach_data = wp_generate_attachment_metadata( $attach_id, $target_file_name );
952
  $result = wp_update_attachment_metadata( $attach_id, $attach_data );
953
  if ( ! $result ) {
954
- //die( 'Error: File attachment metadata error' );
955
  }
956
 
957
  $image_data = [];
958
  $image_data['ID'] = $attach_id;
959
- $image_data['post_excerpt'] = $_POST['excerpt'];
960
  wp_update_post( $image_data );
961
 
962
- echo $attach_id;
963
 
964
  exit;
965
  }
@@ -967,7 +992,6 @@ class AutoPostThumbnails {
967
 
968
  /**
969
  * AJAX загрузка шрифта
970
- *
971
  */
972
  public function upload_font() {
973
  if ( ! wp_verify_nonce( $_POST['wpnonce'], 'wapt_upload_font' ) ) {
@@ -977,7 +1001,7 @@ class AutoPostThumbnails {
977
  if ( isset( $_POST['is_font_upload'] ) && count( $_FILES ) > 0 ) {
978
  $file = $_FILES[0];
979
  $upload_dir = wp_upload_dir();
980
- $upload_dir = $upload_dir['basedir'] . "/apt_fonts";
981
  if ( ! is_dir( $upload_dir ) ) {
982
  mkdir( $upload_dir, 0777 );
983
  }
@@ -987,13 +1011,13 @@ class AutoPostThumbnails {
987
 
988
  // Проверка, что файл является шрифтом TrueType
989
  $header = file_get_contents( $file['tmp_name'], false, null, null, 4 );
990
- if ( $header !== "\x00\x01\x00\x00" && $header !== "true" && $header !== "typ1" ) {
991
- die( json_encode( [ 'error' => "The uploaded file is not a TrueType font" ] ) );
992
  }
993
- //-----
994
  $path = pathinfo( $file['tmp_name'] );
995
- if ( $path['extension'] == 'php' || $path['extension'] == 'js' ) {
996
- die( json_encode( [ 'error' => "The uploaded file is not a TrueType font." ] ) );
997
  }
998
 
999
  add_filter( 'upload_mimes', function ( $mime_types ) {
@@ -1015,7 +1039,7 @@ class AutoPostThumbnails {
1015
  }
1016
  } else {
1017
  $result = [ 'error' => $data['error'] ];
1018
- }
1019
 
1020
  die( json_encode( $result ) );
1021
  }
@@ -1031,7 +1055,6 @@ class AutoPostThumbnails {
1031
 
1032
  /**
1033
  * AJAX загрузка google
1034
- *
1035
  */
1036
  public function apt_api_google() {
1037
 
@@ -1054,16 +1077,13 @@ class AutoPostThumbnails {
1054
  }
1055
 
1056
  if ( isset( $_POST['watson'] ) ) {
1057
- $query = isset( $_POST['query'] )
1058
- && ! empty( $_POST['query'] )
1059
- && (bool) $_POST['watson']
1060
- ? sanitize_text_field( $_POST['query'] ) : $post_title;
1061
  } else {
1062
  $query = sanitize_text_field( $_POST['query'] ?? '' );
1063
  }
1064
 
1065
  try {
1066
- $response = ( new GoogleImages() )->search( $query, $query == $post_title ? $page + 1 : $page );
1067
 
1068
  if ( isset( $_POST['limit'] ) && is_numeric( $_POST['limit'] ) ) {
1069
  $response->limit( (int) $_POST['limit'] );
@@ -1082,7 +1102,7 @@ class AutoPostThumbnails {
1082
  }
1083
  }
1084
  } catch ( Exception $e ) {
1085
- die( $e->getMessage() );
1086
  }
1087
 
1088
  if ( $response->is_error() ) {
@@ -1095,7 +1115,6 @@ class AutoPostThumbnails {
1095
 
1096
  /**
1097
  * Проверка API ключей
1098
- *
1099
  */
1100
  public function apt_check_api_key() {
1101
 
@@ -1107,15 +1126,15 @@ class AutoPostThumbnails {
1107
  $key = trim( $_POST['key'] );
1108
  $cx = trim( $_POST['key2'] );
1109
  switch ( $provider ) {
1110
- case "google":
1111
  $url = "https://www.googleapis.com/customsearch/v1?q=cat&key={$key}&cx={$cx}";
1112
 
1113
  $response = wp_remote_get( $url, [ 'timeout' => 100 ] );
1114
  if ( is_wp_error( $response ) ) {
1115
- die( 'Error: ' . $response->get_error_message() );
1116
  }
1117
  $result = json_decode( $response['body'] );
1118
- echo ! isset( $result->error->errors );
1119
  break;
1120
  }
1121
  exit;
@@ -1124,7 +1143,7 @@ class AutoPostThumbnails {
1124
 
1125
  public function check_api_notice( $notices, $plugin_name ) {
1126
  // Если экшен вызывал не этот плагин, то не выводим это уведомления
1127
- if ( $plugin_name != \WAPT_Plugin::app()->getPluginName() ) {
1128
  return $notices;
1129
  }
1130
  // Получаем заголовок плагина
@@ -1132,20 +1151,20 @@ class AutoPostThumbnails {
1132
 
1133
  if ( ! \WAPT_Plugin::app()->getPopulateOption( 'google_apikey' ) && ! \WAPT_Plugin::app()->getPopulateOption( 'google_cse' ) ) {
1134
  // Задаем текст уведомления
1135
- $notice_text = '<p><b>' . $plugin_title . ':</b> <br>' . sprintf( __( "To download images from Google, specify Google API keys in the <a href='%s'>settings</a>.", 'apt' ), admin_url( 'admin.php?page=wapt_settings-wbcr_apt' ) ) . "</p>";
1136
 
1137
  // Задаем настройки уведомления
1138
  $notices[] = [
1139
- 'id' => 'apt_check_api',
1140
- //error, success, warning
1141
- 'type' => 'warning',
1142
- 'dismissible' => true,
1143
  // На каких страницах показывать уведомление ('plugins', 'dashboard', 'edit')
1144
- 'where' => [ 'plugins', 'dashboard', 'edit' ],
1145
  // Через какое время уведомление снова появится?
1146
- 'dismiss_expires' => 0,
1147
- 'text' => $notice_text,
1148
- 'classes' => [],
1149
  ];
1150
  }
1151
 
@@ -1159,33 +1178,45 @@ class AutoPostThumbnails {
1159
  */
1160
  public static function get_fonts() {
1161
  $upload_dir = wp_upload_dir();
1162
- $upload_dir_fonts = $upload_dir['basedir'] . "/apt_fonts";
1163
- $plugin_dir_fonts = WAPT_PLUGIN_DIR . "/fonts";
1164
  $fonts = [];
1165
 
1166
- $fonts[] = [ 'title' => __( 'Standard', 'apt' ), 'type' => 'group' ];
 
 
 
1167
  $files = scandir( $plugin_dir_fonts );
1168
  foreach ( $files as $file ) {
1169
- if ( $file == '.' || $file == '..' ) {
1170
  continue;
1171
  }
1172
  $name = pathinfo( $plugin_dir_fonts . '/' . $file );
1173
  $name = $name['filename'];
1174
- $fonts[] = [ 'value' => $file, 'title' => $name ];
 
 
 
1175
  }
1176
 
1177
  if ( is_dir( $upload_dir_fonts ) ) {
1178
  $files = scandir( $upload_dir_fonts );
1179
  }
1180
  if ( count( $files ) && \WAPT_Plugin::app()->is_premium() ) {
1181
- $fonts[] = [ 'title' => __( 'Uploaded', 'apt' ), 'type' => 'group' ];
 
 
 
1182
  foreach ( $files as $file ) {
1183
- if ( $file == '.' || $file == '..' ) {
1184
  continue;
1185
  }
1186
  $name = pathinfo( $upload_dir_fonts . '/' . $file );
1187
  $name = $name['filename'];
1188
- $fonts[] = [ 'value' => $file, 'title' => $name ];
 
 
 
1189
  }
1190
  }
1191
 
@@ -1205,13 +1236,13 @@ class AutoPostThumbnails {
1205
  * @return Image
1206
  */
1207
  public static function generate_image_with_text( $text, $pathToSave = '', $format = 'jpg', $width = 0, $height = 0 ) {
1208
- $font = WAPT_PLUGIN_DIR . "/fonts/Arial.ttf";
1209
  $font_size = \WAPT_Plugin::app()->getPopulateOption( 'font-size', 25 );
1210
- $font_color = \WAPT_Plugin::app()->getPopulateOption( 'font-color', "#ffffff" );
1211
- if ( $width == 0 ) {
1212
  $width = (int) \WAPT_Plugin::app()->getPopulateOption( 'image-width', 800 );
1213
  }
1214
- if ( $height == 0 ) {
1215
  $height = (int) \WAPT_Plugin::app()->getPopulateOption( 'image-height', 600 );
1216
  }
1217
  $before_text = '';
@@ -1220,13 +1251,13 @@ class AutoPostThumbnails {
1220
  if ( ! $shadow ) {
1221
  $shadow_color = '';
1222
  } else {
1223
- $shadow_color = \WAPT_Plugin::app()->getPopulateOption( 'shadow-color', "#ffffff" );
1224
  }
1225
 
1226
- $background_type = "color";
1227
- $background = \WAPT_Plugin::app()->getPopulateOption( 'background-color', "#ff6262" );
1228
 
1229
- $text_transform = \WAPT_Plugin::app()->getPopulateOption( 'text-transform', "no" );
1230
  switch ( $text_transform ) {
1231
  case 'upper':
1232
  $text = mb_strtoupper( $text );
@@ -1251,11 +1282,11 @@ class AutoPostThumbnails {
1251
  $line_spacing = \WAPT_Plugin::app()->getPopulateOption( 'text-line-spacing', 1.5 );
1252
 
1253
  $params = [
1254
- 'text' => $text,
1255
- 'pathToSave' => $pathToSave,
1256
- 'format' => $format,
1257
- 'width' => $width,
1258
- 'height' => $height,
1259
  ];
1260
  $image = new Image( $width, $height, $background, $font, $font_size, $font_color );
1261
  $image->params = $params;
@@ -1284,17 +1315,17 @@ class AutoPostThumbnails {
1284
  public function generate_and_attachment( $post_id ) {
1285
  $this->plugin->logger->info( "Start generate attachment for post ID = {$post_id}" );
1286
 
1287
- $format = \WAPT_Plugin::app()->getPopulateOption( "image-type", "jpg" );
1288
  switch ( $format ) {
1289
  case 'png':
1290
  $extension = 'png';
1291
- $mime_type = "image/png";
1292
  break;
1293
  case 'jpg':
1294
  case 'jpeg':
1295
  default:
1296
  $extension = 'jpg';
1297
- $mime_type = "image/jpeg";
1298
  break;
1299
  }
1300
  $post = get_post( $post_id, 'OBJECT' );
@@ -1322,7 +1353,7 @@ class AutoPostThumbnails {
1322
 
1323
  return $thumb_id;
1324
  } else {
1325
- $this->plugin->logger->error( "Error generate attachment: " . var_export( $thumb_id, true ) );
1326
  }
1327
 
1328
  return 0;
@@ -1356,17 +1387,17 @@ class AutoPostThumbnails {
1356
  $file_url = str_replace( wp_get_upload_dir()['basedir'], wp_get_upload_dir()['baseurl'], $file_path );
1357
  if ( file_exists( $file_path ) ) {
1358
  $attachment = [
1359
- 'post_mime_type' => $mime_type,
1360
- 'guid' => $file_url,
1361
- 'post_parent' => $post->ID,
1362
- 'post_title' => $post->post_title,
1363
- 'post_content' => '',
1364
  ];
1365
 
1366
  $thumb_id = wp_insert_attachment( $attachment, $file_path, $post->ID );
1367
 
1368
  if ( ! is_wp_error( $thumb_id ) ) {
1369
- require_once( ABSPATH . '/wp-admin/includes/image.php' );
1370
 
1371
  // Added fix by misthero as suggested
1372
  wp_update_attachment_metadata( $thumb_id, wp_generate_attachment_metadata( $thumb_id, $file_path ) );
60
  $this->plugin = \WAPT_Plugin::app();
61
 
62
  $this->sources = [
 
 
 
 
 
 
 
 
63
  'google' => WAPT_PLUGIN_SLUG,
64
+ 'recommend' => '',
65
  'pixabay' => '',
66
  'unsplash' => '',
67
+ ];
68
+ if ( \WAPT_Plugin::app()->is_premium() ) {
69
+ $this->sources = [
70
+ 'recommend' => '',
71
+ 'google' => WAPT_PLUGIN_SLUG,
72
+ 'pixabay' => '',
73
+ 'unsplash' => '',
74
  ];
75
  }
76
 
84
  * @return AutoPostThumbnails
85
  */
86
  public static function instance() {
87
+ if ( null === static::$instance ) {
88
  static::$instance = new self();
89
  }
90
 
95
  * Init includes.
96
  */
97
  private function init_includes() {
98
+ // require __DIR__ . '/src/class.template.php';
99
  }
100
 
101
  /**
113
  if ( $is_auto_upload && \WAPT_Plugin::app()->is_premium() ) {
114
  add_filter( 'wp_insert_post_data', [ $this, 'auto_upload' ], 10, 2 );
115
 
116
+ // This hook handle update post via rest api. for example WordPress mobile apps
117
  foreach ( $allowed_import_post_types as $post_type ) {
118
  add_action( "rest_after_insert_{$post_type}", [ $this, 'auto_upload' ], 10, 2 );
119
  }
120
  }
121
 
122
  if ( $is_auto_generate ) {
123
+ // add_action( 'publish_post', [ $this, 'publish_post' ], 10, 1 );
124
  add_action( 'save_post', [ $this, 'save_post' ], 10, 3 );
125
 
126
+ // This hook handle update post via rest api. for example WordPress mobile apps
127
  foreach ( $this->allowed_generate_post_types as $post_type ) {
128
  add_action( "rest_after_insert_{$post_type}", [ $this, 'rest_after_insert' ], 10, 3 );
129
  }
141
  }
142
 
143
  private function ajax_actions() {
144
+ // AJAX actions
145
+ add_action( 'wp_ajax_generatepostthumbnail', [ $this, 'ajax_process_post' ] );
146
+ add_action( 'wp_ajax_delete_post_thumbnails', [ $this, 'ajax_delete_post_thumbnails' ] );
147
  add_action( 'wp_ajax_get-posts-ids', [ $this, 'get_posts_ids' ] );
148
  add_action( 'wp_ajax_apt_replace_thumbnail', [ $this, 'apt_replace_thumbnail' ] );
149
  add_action( 'wp_ajax_apt_get_thumbnail', [ $this, 'apt_get_thumbnail' ] );
151
  add_action( 'wp_ajax_upload_to_library', [ $this, 'upload_to_library' ] );
152
  add_action( 'wp_ajax_wapt_upload_font', [ $this, 'upload_font' ] );
153
 
154
+ // APIs
155
  add_action( 'wp_ajax_apt_api_google', [ $this, 'apt_api_google' ] );
156
  add_action( 'wp_ajax_apt_check_api_key', [ $this, 'apt_check_api_key' ] );
157
  add_action( 'wp_ajax_hide_notice_auto_generation', [ $this, 'hide_notice_auto_generation' ] );
174
  }
175
  check_ajax_referer( 'get-posts' );
176
 
177
+ $generate = \WAPT_Plugin::app()->getPopulateOption( 'generate_autoimage', 'find' );
178
 
179
  $this->plugin->logger->info( "START generate in mode: {$generate}" );
180
 
190
  break;
191
  }
192
 
193
+ $has_thumb = sanitize_text_field( wp_unslash( $_POST['withThumb'] ?? false ) );
194
+ $type = sanitize_text_field( wp_unslash( $_POST['posttype'] ?? '' ) );
195
  if ( \WAPT_Plugin::app()->is_premium() ) {
196
+ $status = sanitize_text_field( wp_unslash( $_POST['poststatus'] ?? '' ) );
197
+ $category = sanitize_text_field( wp_unslash( $_POST['category'] ?? '' ) );
198
+ $date_start = sanitize_text_field( wp_unslash( $_POST['date_start'] ?? '' ) );
199
+ $date_end = sanitize_text_field( wp_unslash( $_POST['date_end'] ?? '' ) );
200
  $date_start = $date_start ? \DateTime::createFromFormat( 'd.m.Y', $date_start )->format( 'd.m.Y' ) : 0;
201
  $date_end = $date_end ? \DateTime::createFromFormat( 'd.m.Y', $date_end )->setTime( 23, 59 )->format( 'd.m.Y H:i' ) : 0;
202
  // Get id's of the posts that satisfy the filters
211
  $ids = [];
212
  foreach ( $query->posts as $post ) {
213
  $ids[] = $post->ID;
214
+ // если запрошены посты без тамбнеила, значит пользователь хочет сгенерировать их
215
+ /*
216
+ if ( ! $has_thumb ) {
217
  $images = new \WBCR\APT\PostImages( $post->ID );
218
  if ( ( $images->is_images() && $images->count_images() ) || $auto_generate ) {
219
  $ids[] = $post->ID;
221
  } else //иначе он хочет удалить тамбнэйлы
222
  {
223
  $ids[] = $post->ID;
224
+ }
225
+ */
226
  }
227
  $ids = implode( ',', $ids );
228
  } else {
229
+ $ids = '0';
230
  }
231
+ echo esc_js( $ids );
232
 
233
  $this->plugin->logger->info( "Queried posts IDs: {$ids}" );
234
 
288
  set_time_limit( 60 );
289
 
290
  // Pass on the id to our 'publish' callback function.
291
+ echo (bool) delete_post_thumbnail( $id );
292
 
293
  die( - 1 );
294
  }
300
  */
301
  public function notice_auto_generation() {
302
  ?>
303
+ <div class="notice notice-warning is-dismissible" id="notice_auto_generation">
304
+ <p><b>Auto Featured Image:</b> Do you want to enable automatic post thumbnail generation? Enable this option
305
+ in
306
+ <a href="<?php echo esc_url_raw( admin_url( 'admin.php?page=wapt_settings-wbcr_apt&tab=general' ) ); ?>">settings</a><br>
307
+ <a href="#" id="hide_notice_auto_generation">Don't ask again</a>
308
+ </p>
309
+ </div>
310
  <?php
311
  }
312
 
314
  *
315
  */
316
  public function hide_notice_auto_generation() {
317
+ if ( isset( $_POST['action'] ) && 'hide_notice_auto_generation' === $_POST['action'] ) {
318
  \WAPT_Plugin::app()->updateOption( 'auto_generation_notice', 0 );
319
  }
320
  }
330
  */
331
  public function check_required_transition( $new_status = '', $old_status = '', $post = '' ) {
332
 
333
+ if ( 'publish' === $new_status ) {
334
  $this->publish_post( $post->ID );
335
  }
336
  }
342
  */
343
  public function get_posts_query( $has_thumb = false, $type = 'post', $status = 'publish', $category = 0, $date_start = 0, $date_end = 0, $is_log = true ) {
344
 
345
+ // phpcs:disable WordPress.PHP.DevelopmentFunctions
346
  if ( $is_log ) {
347
+ $this->plugin->logger->info( 'Posts query: ' . var_export( [
348
+ 'has_thumb' => $has_thumb,
349
+ 'type' => $type,
350
+ 'status' => $status,
351
+ 'category' => $category,
352
+ 'date_start' => $date_start,
353
+ 'date_end' => $date_end,
354
+ ], true ) );
355
  }
356
+ // phpcs:enable
357
 
358
  $q_status = $status ? $status : 'any';
359
  $q_type = $type ? $type : 'any';
360
+ $q_has_thumb = $has_thumb ? 'EXISTS' : 'NOT EXISTS';
361
 
362
  $args = [
363
+ 'posts_per_page' => - 1,
364
+ 'post_status' => $q_status,
365
+ 'post_type' => $q_type,
366
+ 'meta_query' => [
367
+ 'relation' => 'AND',
368
+ [
369
+ 'key' => '_thumbnail_id',
370
+ 'compare' => $q_has_thumb,
371
+ ],
372
+ [
373
+ 'key' => 'skip_post_thumb',
374
+ 'compare' => 'NOT EXISTS',
375
+ ],
376
+ ],
377
  ];
378
  if ( $category ) {
379
  $args['cat'] = $category;
380
  }
381
  if ( $date_start && $date_end ) {
382
+ $args['date_query'][] = [
383
+ 'after' => $date_start,
384
+ 'before' => $date_end,
385
+ 'inclusive' => true,
386
+ ];
387
  }
388
  $query = new WP_Query( $args );
389
 
390
+ // $this->plugin->logger->debug( "Posts SQL: " . $query->request );
391
 
392
  return $query;
393
  }
434
  // If thumb id is not found, try to look for the image in DB.
435
  if ( isset( $image['url'] ) && ! empty( $image['url'] ) ) {
436
  $image_url = $image['url'];
437
+ // если ссылка на миниатюру, то регулярка сделает ссылку на оригинал. убирает в конце названия файла -150x150
438
  $image_url = preg_replace( '/-[0-9]{1,}x[0-9]{1,}\./', '.', $image_url );
439
  $thumb_id = $wpdb->get_var( "SELECT ID FROM {$wpdb->posts} WHERE guid LIKE '%" . esc_sql( $image_url ) . "%'" );
440
  }
484
  public function publish_post( $post_id, $post = null, $update = true ) {
485
  global $wpdb;
486
 
487
+ $autoimage = \WAPT_Plugin::app()->getPopulateOption( 'generate_autoimage', 'find' );
488
  $generation = new GenerateResult( $post_id, $autoimage );
489
 
490
  if ( ! $post ) {
492
  if ( ! $post ) {
493
  $this->plugin->logger->warning( "The post was not found (post ID = {$post_id})" );
494
 
495
+ return $generation->result( __( 'The post was not found', 'apt' ) );
496
  }
497
  }
498
 
505
  if ( $_thumbnail_id && $wpdb->get_var( "SELECT ID FROM {$wpdb->posts} WHERE id = '" . esc_sql( $_thumbnail_id ) . "' AND post_type = 'attachment'" ) || get_post_meta( $post_id, 'skip_post_thumb', true ) ) {
506
  $this->plugin->logger->warning( "The post ({$post_id}) has already been assigned a featured image" );
507
 
508
+ return $generation->result( __( 'The post has already been assigned a featured image', 'apt' ) );
509
  }
510
 
511
  $thumb_id = 0;
533
  }
534
  } else {
535
  // создаём свою картинку с заголовком на цветном фоне
536
+ if ( $autoimage === 'generate' || $autoimage === 'both' ) {
537
  $thumb_id = $this->generate_and_attachment( $post_id );
538
  if ( $thumb_id ) {
539
  update_post_meta( $post_id, '_thumbnail_id', $thumb_id );
540
 
541
  return $generation->result( '', $thumb_id );
542
  }
543
+ } elseif ( $autoimage === 'google' || $autoimage === 'find_google' ) {
544
  $response = ( new GoogleImages() )->search( $post->post_title, 1 );
545
  if ( ! empty( $response->images ) ) {
546
+ $this->plugin->logger->info( 'Google image search result = ' . var_export( $response->images[0], true ) );
547
  $thumb_id = apply_filters( 'wapt/download_from_google', 0, $response->images, $post_id );
548
  }
549
  if ( $thumb_id ) {
552
 
553
  return $generation->result( '', $thumb_id );
554
  }
555
+ $this->plugin->logger->error( 'Error download from google. ' . var_export( $thumb_id, true ) );
556
  }
557
  }
558
 
559
+ return $generation->result( __( 'No images found or generated', 'apt' ) );
560
  }
561
 
562
  /**
631
  /**
632
  * Fetch image from URL and generate required thumbnails.
633
  *
 
634
  * @param string $image
635
  * @param string $title
636
  * @param int $post_id
647
 
648
  // Get the file name
649
  $filename = substr( $imageUrl, ( strrpos( $imageUrl, '/' ) ) + 1 );
650
+ // исключаем параметры после имени файла
651
  if ( strrpos( $filename, '?' ) ) {
652
  $filename = substr( $filename, 0, strrpos( $filename, '?' ) );
653
  }
662
  $new_file = $uploads['path'] . "/$filename";
663
  $ext = pathinfo( $new_file, PATHINFO_EXTENSION );
664
  if ( empty( $ext ) ) {
665
+ $ext = 'jpg';
666
  $filename .= ".{$ext}";
667
  $new_file .= ".{$ext}";
668
  }
671
  if ( ! ini_get( 'allow_url_fopen' ) ) {
672
  $file_data = $this->get_file_contents( $imageUrl );
673
  } else {
674
+ $arrContextOptions = [
675
+ 'ssl' => [
676
+ 'verify_peer' => false,
677
+ 'verify_peer_name' => false,
678
+ ],
679
+ ];
680
  $file_data = file_get_contents( $imageUrl, false, stream_context_create( $arrContextOptions ) );
681
  }
682
 
 
683
  if ( ! $file_data ) {
684
  return null;
685
  }
686
 
687
+ // Fix for checking file extensions
688
+ $exts = explode( '.', $filename );
689
  if ( count( $exts ) > 2 ) {
690
+ // return null;
691
  }
692
 
693
  $allowed = get_allowed_mime_types();
719
 
720
  // Construct the attachment array
721
  $attachment = [
722
+ 'post_mime_type' => $type,
723
+ 'guid' => $url,
724
+ 'post_parent' => null,
725
+ 'post_title' => $imageTitle,
726
+ 'post_content' => '',
727
  ];
728
 
729
  $thumb_id = wp_insert_attachment( $attachment, $file, $post_id );
730
  if ( ! is_wp_error( $thumb_id ) ) {
731
+ require_once ABSPATH . '/wp-admin/includes/image.php';
732
 
733
  // Added fix by misthero as suggested
734
  wp_update_attachment_metadata( $thumb_id, wp_generate_attachment_metadata( $thumb_id, $new_file ) );
742
 
743
  /**
744
  * Function to fetch the contents of URL using HTTP API in absence of allow_url_fopen.
 
745
  */
746
  public function get_file_contents( $URL ) {
747
  $response = wp_remote_get( $URL );
748
  $contents = '';
749
+ if ( wp_remote_retrieve_response_code( $response ) === 200 ) {
750
  $contents = wp_remote_retrieve_body( $response );
751
  }
752
 
771
  if ( isset( $_POST['thumbnail_id'] ) && ! empty( $_POST['thumbnail_id'] ) ) {
772
  $thumb_id = intval( $_POST['thumbnail_id'] );
773
 
774
+ if ( $thumb_id === - 1 ) {
775
+ // generate image
776
  $thumb_id = $this->generate_and_attachment( $post_id );
777
  }
778
+ } elseif ( isset( $_POST['image'] ) && ! empty( $_POST['image'] ) ) {
779
  $img = $_POST['image'];
780
 
781
+ // Совместимость с NextGen
782
  $img = preg_replace( '/(thumbs\/thumbs_)/', '.', $img );
783
 
784
+ // Find image in medialibrary
785
  $thumb_id = $this->get_thumbnail_id( [ 'url' => $img ] );
786
 
787
  if ( ! $thumb_id ) {
794
  update_post_meta( $post_id, '_thumbnail_id', $thumb_id );
795
  }
796
 
797
+ echo $this->apt_getThumbHtml( $post_id, $thumb_id ); // phpcs:ignore
798
  }
799
  }
800
  die();
807
  * @uses apt_thumb
808
  */
809
  public function apt_get_thumbnail() {
810
+ include WAPT_ABSPATH . '/admin/views/pro_column.php';
811
  die();
812
  }
813
 
822
  public function apt_getThumbHtml( $post_id, $thumb_id ) {
823
  $imgTag = get_the_post_thumbnail( $post_id, [ 100, 0 ], [ 'class' => 'img' ] );
824
  if ( empty( $imgTag ) ) {
825
+ $imgTag = esc_html__( 'No image', 'apt' );
826
  }
827
 
828
+ $title = esc_attr__( 'Change featured image', 'apt' );
829
  $wpnonce = wp_create_nonce( 'set_post_thumbnail-' . $post_id );
830
+ $ajaxloader = WAPT_PLUGIN_URL . '/admin/assets/img/ajax-loader.gif';
831
+ $content = '';
832
+ $html = "<a title='{$title}' href='#' class='modal-init-js' id='modal-init-js_{$post_id}' onclick='return window.aptModalShow(this, {$post_id}, \"$wpnonce\");'>{$imgTag}</a>" . "<span id='loader_{$post_id}' style='display:none;'><img src='{$ajaxloader}' width='100px' alt=''></span><div id='post_imgs_{$post_id}' class='imgs' style='display:none;'><span style='display:none;'><img src='{$ajaxloader}' alt=''></span><div>{$content}</div></div>";
833
 
834
  return $html;
835
  }
836
 
837
  /**
838
  * Контент подпункта меню в Медиафайлы
 
839
  */
840
  public function addToMediaFromApt() {
841
+ // media_upload_header();
842
  $this->is_in_medialibrary = true;
843
  $this->sources = apply_filters( 'wapt/sources', $this->sources, 'add_to_media_from_apt' );
844
+ require_once WAPT_ABSPATH . '/admin/views/media-library.php';
845
  }
846
 
847
  /**
848
  * Контент вкладки
 
849
  */
850
  public function media_AptTabContent() {
851
  media_upload_header();
852
  $this->sources = apply_filters( 'wapt/sources', $this->sources, 'tab_content' );
853
+ require_once WAPT_ABSPATH . '/admin/views/media-library.php';
854
  }
855
 
856
  /**
857
  * AJAX вывод содержимого вкладки сервиса
 
858
  */
859
  public function source_content() {
860
  if ( ! wp_verify_nonce( $_POST['wpnonce'], 'apt_content' ) ) {
862
  }
863
  $this->sources = apply_filters( 'wapt/sources', $this->sources, 'source_content' );
864
  if ( isset( $_POST['source'] ) && ! empty( $_POST['source'] ) ) {
865
+ $source = str_replace( 'tab-', '', sanitize_text_field( $_POST['source'] ) );
866
 
867
+ // if( empty($this->sources[$source]) && !\WAPT_Plugin::app()->premium->is_activate() )
868
  if ( empty( $this->sources[ $source ] ) ) {
869
  require_once WAPT_PLUGIN_DIR . '/admin/views/pro.php';
870
  } else {
876
 
877
  /**
878
  * AJAX загрузка выбранного изображения
 
879
  */
880
  public function upload_to_library() {
881
 
888
  // get image file
889
  $response = wp_remote_get( $_POST['image_url'], [ 'timeout' => 100 ] );
890
  if ( is_wp_error( $response ) ) {
891
+ die( 'Error: ' . esc_html( $response->get_error_message() ) );
892
  }
893
 
894
+ $file_ext = '';
895
+ $image_title = '';
896
  switch ( $_POST['service'] ) {
897
  case 'pixabay':
898
+ $path_info = pathinfo( esc_url_raw( $_POST['image_url'] ) );
899
  $file_ext = $path_info['extension'];
900
  $image_title = sanitize_text_field( $_POST['q'] );
901
  break;
909
  $image_title = sanitize_text_field( $_POST['title'] );
910
  break;
911
  case 'google':
912
+ $path_info = pathinfo( esc_url_raw( $_POST['image_url'] ) );
913
  $file_ext = $path_info['extension'];
914
  if ( $file_ext !== 'jpg' && $file_ext !== 'jpeg' && $file_ext !== 'png' && $file_ext !== 'gif' ) {
915
  $file_ext = 'jpg';
917
  if ( empty( $file_ext ) ) {
918
  $file_ext = 'jpg';
919
  }
920
+ $image_title = sanitize_text_field( wp_unslash( $_POST['title'] ?? '' ) );
921
  break;
922
  }
923
 
924
+ $q = sanitize_text_field( wp_unslash( $_POST['q'] ?? '' ) );
925
+ $file_name = sanitize_file_name( implode( '_', explode( ' ', $q ) ) . '_' . time() . '.' . $file_ext );
926
  $wp_upload_dir = wp_upload_dir();
927
  $image_upload_path = $wp_upload_dir['path'];
928
 
929
  if ( ! is_dir( $image_upload_path ) ) {
930
+ // phpcs:disable WordPress.PHP.NoSilencedErrors.Discouraged
931
  if ( ! @mkdir( $image_upload_path, 0777, true ) ) {
932
+ die( 'Error: Failed to create upload folder ' . esc_html( $image_upload_path ) );
933
+ }
934
+ // phpcs:enable
935
+ }
936
+
937
+ global $wp_filesystem;
938
+ if ( ! $wp_filesystem ) {
939
+ if ( ! function_exists( 'WP_Filesystem' ) ) {
940
+ require_once ABSPATH . 'wp-admin/includes/file.php';
941
  }
942
+ WP_Filesystem();
943
  }
944
 
945
  $target_file_name = $image_upload_path . '/' . $file_name;
946
+ $result = $wp_filesystem->put_contents( $target_file_name, $response['body'] );
947
+ //$result = @file_put_contents( $target_file_name, $response['body'] );
948
  unset( $response['body'] );
949
+ if ( false === $result ) {
950
+ die( 'Error: Failed to write file ' . esc_html( $target_file_name ) );
951
  }
952
 
953
  // are we dealing with an image
954
+ require_once ABSPATH . 'wp-admin/includes/image.php';
955
  if ( ! wp_read_image_metadata( $target_file_name ) ) {
956
  unlink( $target_file_name );
957
  die( 'Error: File is not an image.' );
962
  // insert attachment
963
  $wp_filetype = wp_check_filetype( basename( $target_file_name ), null );
964
  $attachment = [
965
+ 'guid' => $wp_upload_dir['url'] . '/' . basename( $target_file_name ),
966
+ 'post_mime_type' => $wp_filetype['type'],
967
+ 'post_title' => preg_replace( '/\.[^.]+$/', '', $image_title ),
968
+ 'post_status' => 'inherit',
969
  ];
970
 
971
  $attach_id = wp_insert_attachment( $attachment, $target_file_name, $postid );
972
+ if ( 0 === $attach_id ) {
973
  die( 'Error: File attachment error' );
974
  }
975
 
976
  $attach_data = wp_generate_attachment_metadata( $attach_id, $target_file_name );
977
  $result = wp_update_attachment_metadata( $attach_id, $attach_data );
978
  if ( ! $result ) {
979
+ // die( 'Error: File attachment metadata error' );
980
  }
981
 
982
  $image_data = [];
983
  $image_data['ID'] = $attach_id;
984
+ $image_data['post_excerpt'] = sanitize_text_field( wp_unslash( $_POST['excerpt'] ?? '' ) );
985
  wp_update_post( $image_data );
986
 
987
+ echo (int) $attach_id;
988
 
989
  exit;
990
  }
992
 
993
  /**
994
  * AJAX загрузка шрифта
 
995
  */
996
  public function upload_font() {
997
  if ( ! wp_verify_nonce( $_POST['wpnonce'], 'wapt_upload_font' ) ) {
1001
  if ( isset( $_POST['is_font_upload'] ) && count( $_FILES ) > 0 ) {
1002
  $file = $_FILES[0];
1003
  $upload_dir = wp_upload_dir();
1004
+ $upload_dir = $upload_dir['basedir'] . '/apt_fonts';
1005
  if ( ! is_dir( $upload_dir ) ) {
1006
  mkdir( $upload_dir, 0777 );
1007
  }
1011
 
1012
  // Проверка, что файл является шрифтом TrueType
1013
  $header = file_get_contents( $file['tmp_name'], false, null, null, 4 );
1014
+ if ( $header !== "\x00\x01\x00\x00" && $header !== 'true' && $header !== 'typ1' ) {
1015
+ die( json_encode( [ 'error' => 'The uploaded file is not a TrueType font' ] ) );
1016
  }
1017
+ // -----
1018
  $path = pathinfo( $file['tmp_name'] );
1019
+ if ( $path['extension'] === 'php' || $path['extension'] === 'js' ) {
1020
+ die( json_encode( [ 'error' => 'The uploaded file is not a TrueType font.' ] ) );
1021
  }
1022
 
1023
  add_filter( 'upload_mimes', function ( $mime_types ) {
1039
  }
1040
  } else {
1041
  $result = [ 'error' => $data['error'] ];
1042
+ }
1043
 
1044
  die( json_encode( $result ) );
1045
  }
1055
 
1056
  /**
1057
  * AJAX загрузка google
 
1058
  */
1059
  public function apt_api_google() {
1060
 
1077
  }
1078
 
1079
  if ( isset( $_POST['watson'] ) ) {
1080
+ $query = isset( $_POST['query'] ) && ! empty( $_POST['query'] ) && (bool) $_POST['watson'] ? sanitize_text_field( $_POST['query'] ) : $post_title;
 
 
 
1081
  } else {
1082
  $query = sanitize_text_field( $_POST['query'] ?? '' );
1083
  }
1084
 
1085
  try {
1086
+ $response = ( new GoogleImages() )->search( $query, $query === $post_title ? $page + 1 : $page );
1087
 
1088
  if ( isset( $_POST['limit'] ) && is_numeric( $_POST['limit'] ) ) {
1089
  $response->limit( (int) $_POST['limit'] );
1102
  }
1103
  }
1104
  } catch ( Exception $e ) {
1105
+ die( esc_html( $e->getMessage() ) );
1106
  }
1107
 
1108
  if ( $response->is_error() ) {
1115
 
1116
  /**
1117
  * Проверка API ключей
 
1118
  */
1119
  public function apt_check_api_key() {
1120
 
1126
  $key = trim( $_POST['key'] );
1127
  $cx = trim( $_POST['key2'] );
1128
  switch ( $provider ) {
1129
+ case 'google':
1130
  $url = "https://www.googleapis.com/customsearch/v1?q=cat&key={$key}&cx={$cx}";
1131
 
1132
  $response = wp_remote_get( $url, [ 'timeout' => 100 ] );
1133
  if ( is_wp_error( $response ) ) {
1134
+ die( 'Error: ' . esc_html( $response->get_error_message() ) );
1135
  }
1136
  $result = json_decode( $response['body'] );
1137
+ echo (bool) ! isset( $result->error->errors );
1138
  break;
1139
  }
1140
  exit;
1143
 
1144
  public function check_api_notice( $notices, $plugin_name ) {
1145
  // Если экшен вызывал не этот плагин, то не выводим это уведомления
1146
+ if ( $plugin_name !== \WAPT_Plugin::app()->getPluginName() ) {
1147
  return $notices;
1148
  }
1149
  // Получаем заголовок плагина
1151
 
1152
  if ( ! \WAPT_Plugin::app()->getPopulateOption( 'google_apikey' ) && ! \WAPT_Plugin::app()->getPopulateOption( 'google_cse' ) ) {
1153
  // Задаем текст уведомления
1154
+ $notice_text = '<p><b>' . $plugin_title . ':</b> <br>' . sprintf( __( "To download images from Google, specify Google API keys in the <a href='%s'>settings</a>.", 'apt' ), admin_url( 'admin.php?page=wapt_settings-wbcr_apt' ) ) . '</p>';
1155
 
1156
  // Задаем настройки уведомления
1157
  $notices[] = [
1158
+ 'id' => 'apt_check_api',
1159
+ // error, success, warning
1160
+ 'type' => 'warning',
1161
+ 'dismissible' => true,
1162
  // На каких страницах показывать уведомление ('plugins', 'dashboard', 'edit')
1163
+ 'where' => [ 'plugins', 'dashboard', 'edit' ],
1164
  // Через какое время уведомление снова появится?
1165
+ 'dismiss_expires' => 0,
1166
+ 'text' => $notice_text,
1167
+ 'classes' => [],
1168
  ];
1169
  }
1170
 
1178
  */
1179
  public static function get_fonts() {
1180
  $upload_dir = wp_upload_dir();
1181
+ $upload_dir_fonts = $upload_dir['basedir'] . '/apt_fonts';
1182
+ $plugin_dir_fonts = WAPT_PLUGIN_DIR . '/fonts';
1183
  $fonts = [];
1184
 
1185
+ $fonts[] = [
1186
+ 'title' => __( 'Standard', 'apt' ),
1187
+ 'type' => 'group',
1188
+ ];
1189
  $files = scandir( $plugin_dir_fonts );
1190
  foreach ( $files as $file ) {
1191
+ if ( $file === '.' || $file === '..' ) {
1192
  continue;
1193
  }
1194
  $name = pathinfo( $plugin_dir_fonts . '/' . $file );
1195
  $name = $name['filename'];
1196
+ $fonts[] = [
1197
+ 'value' => $file,
1198
+ 'title' => $name,
1199
+ ];
1200
  }
1201
 
1202
  if ( is_dir( $upload_dir_fonts ) ) {
1203
  $files = scandir( $upload_dir_fonts );
1204
  }
1205
  if ( count( $files ) && \WAPT_Plugin::app()->is_premium() ) {
1206
+ $fonts[] = [
1207
+ 'title' => __( 'Uploaded', 'apt' ),
1208
+ 'type' => 'group',
1209
+ ];
1210
  foreach ( $files as $file ) {
1211
+ if ( $file === '.' || $file === '..' ) {
1212
  continue;
1213
  }
1214
  $name = pathinfo( $upload_dir_fonts . '/' . $file );
1215
  $name = $name['filename'];
1216
+ $fonts[] = [
1217
+ 'value' => $file,
1218
+ 'title' => $name,
1219
+ ];
1220
  }
1221
  }
1222
 
1236
  * @return Image
1237
  */
1238
  public static function generate_image_with_text( $text, $pathToSave = '', $format = 'jpg', $width = 0, $height = 0 ) {
1239
+ $font = WAPT_PLUGIN_DIR . '/fonts/Arial.ttf';
1240
  $font_size = \WAPT_Plugin::app()->getPopulateOption( 'font-size', 25 );
1241
+ $font_color = \WAPT_Plugin::app()->getPopulateOption( 'font-color', '#ffffff' );
1242
+ if ( $width === 0 ) {
1243
  $width = (int) \WAPT_Plugin::app()->getPopulateOption( 'image-width', 800 );
1244
  }
1245
+ if ( $height === 0 ) {
1246
  $height = (int) \WAPT_Plugin::app()->getPopulateOption( 'image-height', 600 );
1247
  }
1248
  $before_text = '';
1251
  if ( ! $shadow ) {
1252
  $shadow_color = '';
1253
  } else {
1254
+ $shadow_color = \WAPT_Plugin::app()->getPopulateOption( 'shadow-color', '#ffffff' );
1255
  }
1256
 
1257
+ $background_type = 'color';
1258
+ $background = \WAPT_Plugin::app()->getPopulateOption( 'background-color', '#ff6262' );
1259
 
1260
+ $text_transform = \WAPT_Plugin::app()->getPopulateOption( 'text-transform', 'no' );
1261
  switch ( $text_transform ) {
1262
  case 'upper':
1263
  $text = mb_strtoupper( $text );
1282
  $line_spacing = \WAPT_Plugin::app()->getPopulateOption( 'text-line-spacing', 1.5 );
1283
 
1284
  $params = [
1285
+ 'text' => $text,
1286
+ 'pathToSave' => $pathToSave,
1287
+ 'format' => $format,
1288
+ 'width' => $width,
1289
+ 'height' => $height,
1290
  ];
1291
  $image = new Image( $width, $height, $background, $font, $font_size, $font_color );
1292
  $image->params = $params;
1315
  public function generate_and_attachment( $post_id ) {
1316
  $this->plugin->logger->info( "Start generate attachment for post ID = {$post_id}" );
1317
 
1318
+ $format = \WAPT_Plugin::app()->getPopulateOption( 'image-type', 'jpg' );
1319
  switch ( $format ) {
1320
  case 'png':
1321
  $extension = 'png';
1322
+ $mime_type = 'image/png';
1323
  break;
1324
  case 'jpg':
1325
  case 'jpeg':
1326
  default:
1327
  $extension = 'jpg';
1328
+ $mime_type = 'image/jpeg';
1329
  break;
1330
  }
1331
  $post = get_post( $post_id, 'OBJECT' );
1353
 
1354
  return $thumb_id;
1355
  } else {
1356
+ $this->plugin->logger->error( 'Error generate attachment: ' . var_export( $thumb_id, true ) );
1357
  }
1358
 
1359
  return 0;
1387
  $file_url = str_replace( wp_get_upload_dir()['basedir'], wp_get_upload_dir()['baseurl'], $file_path );
1388
  if ( file_exists( $file_path ) ) {
1389
  $attachment = [
1390
+ 'post_mime_type' => $mime_type,
1391
+ 'guid' => $file_url,
1392
+ 'post_parent' => $post->ID,
1393
+ 'post_title' => $post->post_title,
1394
+ 'post_content' => '',
1395
  ];
1396
 
1397
  $thumb_id = wp_insert_attachment( $attachment, $file_path, $post->ID );
1398
 
1399
  if ( ! is_wp_error( $thumb_id ) ) {
1400
+ require_once ABSPATH . '/wp-admin/includes/image.php';
1401
 
1402
  // Added fix by misthero as suggested
1403
  wp_update_attachment_metadata( $thumb_id, wp_generate_attachment_metadata( $thumb_id, $file_path ) );
includes/class-plugin.php CHANGED
@@ -1,551 +1,556 @@
1
- <?php
2
-
3
- use WBCR\APT;
4
- use WBCR\APT\PostImagesPro;
5
-
6
- // Exit if accessed directly
7
- if ( ! defined( 'ABSPATH' ) ) {
8
- exit;
9
- }
10
-
11
- /**
12
- * Основной класс плагина Auto Featured Image
13
- *
14
- * @author Alexander Kovalev <alex.kovalevv@gmail.com>
15
- * @copyright (c) 2018 Webraftic Ltd
16
- * @version 1.0
17
- */
18
- class WAPT_Plugin extends Wbcr_Factory452_Plugin {
19
-
20
- /**
21
- * @see self::app()
22
- * @var Wbcr_Factory452_Plugin
23
- */
24
- private static $app;
25
-
26
- /**
27
- * @var WBCR\APT\AutoPostThumbnails
28
- */
29
- public $apt;
30
-
31
- /**
32
- * @var integer
33
- */
34
- public $numberOfColumn;
35
-
36
- /**
37
- * Конструктор
38
- *
39
- * Применяет конструктор родительского класса и записывает экземпляр текущего класса в свойство $app.
40
- * Подробнее о свойстве $app см. self::app()
41
- *
42
- * @param string $plugin_path
43
- * @param array $data
44
- *
45
- * @throws Exception
46
- */
47
- public function __construct( $plugin_path, $data ) {
48
- parent::__construct( $plugin_path, $data );
49
-
50
- self::$app = $this;
51
-
52
- if ( is_admin() ) {
53
- // Регистрации класса активации/деактивации плагина
54
- $this->initActivation();
55
-
56
- $this->numberOfColumn = 4;
57
- $this->apt = \WBCR\APT\AutoPostThumbnails::instance();
58
-
59
- require( WAPT_PLUGIN_DIR . '/admin/ajax/check-license.php' );
60
-
61
- // Инициализация бэкенда
62
- $this->admin_scripts();
63
- }
64
-
65
- if ( $this->doing_rest_api() ) {
66
- require_once WAPT_PLUGIN_DIR . "/includes/class.generate-result.php";
67
- $this->apt = \WBCR\APT\AutoPostThumbnails::instance();
68
- }
69
-
70
- $this->global_scripts();
71
- }
72
-
73
- /**
74
- * Статический метод для быстрого доступа к интерфейсу плагина.
75
- *
76
- * @return Wbcr_Factory452_Plugin
77
- */
78
- public static function app() {
79
- return self::$app;
80
- }
81
-
82
- /**
83
- * Метод проверяет активацию премиум плагина и наличие действующего лицензионного ключа
84
- *
85
- * @return bool
86
- */
87
- public function is_premium() {
88
- if ( $this->premium->is_active() && $this->premium->is_activate() //&& $this->premium->is_install_package()
89
- ) {
90
- return true;
91
- } else {
92
- return false;
93
- }
94
- }
95
-
96
- /**
97
- * Регистрации класса активации/деактивации плагина
98
- */
99
- protected function initActivation() {
100
- include_once( WAPT_PLUGIN_DIR . '/admin/class-wapt-activation.php' );
101
- $this->registerActivation( 'WAPT_Activation' );
102
- }
103
-
104
- /**
105
- * Регистрирует классы страниц в плагине
106
- *
107
- */
108
- private function register_pages() {
109
- self::app()->registerPage( 'WAPT_Generate', WAPT_PLUGIN_DIR . '/admin/pages/generate.php' );
110
- self::app()->registerPage( 'WAPT_Settings', WAPT_PLUGIN_DIR . '/admin/pages/settings.php' );
111
- self::app()->registerPage( 'WAPT_ImageSettings', WAPT_PLUGIN_DIR . '/admin/pages/image.php' );
112
- self::app()->registerPage( 'WAPT_License', WAPT_PLUGIN_DIR . '/admin/pages/license.php' );
113
- self::app()->registerPage( 'WAPT_Log', WAPT_PLUGIN_DIR . '/admin/pages/log.php' );
114
- //self::app()->registerPage( 'WAPT_About', WAPT_PLUGIN_DIR . '/admin/pages/about.php' );
115
- }
116
-
117
- /**
118
- */
119
- private function admin_scripts() {
120
- require_once WAPT_PLUGIN_DIR . "/includes/class.generate-result.php";
121
-
122
- //$this->register_pages();
123
-
124
- //------ ACTIONS ------
125
- add_action( 'admin_init', [ $this, 'redirect_to_about_page' ] );
126
- add_action( 'admin_menu', [ $this, 'my_custom_submenu_page' ] );
127
-
128
- add_action( 'admin_notices', [ $this, 'check_perms' ] );
129
- add_action( 'wbcr/factory/admin_notices', [ $this, 'show_about_notice' ], 10, 2 );
130
-
131
- // Plugin hook for adding CSS and JS files required for this plugin
132
- add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets', ] );
133
- add_action( 'wp_enqueue_media', [ $this, 'enqueue_media', ] );
134
-
135
- //Hook to adding "image" column in Posts table
136
- add_filter( 'manage_post_posts_columns', [ $this, 'add_image_column' ], 4 );
137
- //Hook to filling "image" column in Posts table
138
- add_action( 'manage_post_posts_custom_column', [ $this, 'fill_image_column' ], 5, 2 );
139
-
140
- //ADD tab and button to medialibrary
141
- add_filter( "media_upload_tabs", [ $this, "addTab" ] );
142
- add_action( "media_upload_apttab", [ $this, "aptTabHandle" ] );
143
-
144
-
145
- // filter posts
146
- add_action( 'restrict_manage_posts', [ $this, 'add_posts_filters' ] );
147
- add_action( 'pre_get_posts', [ $this, 'posts_filter' ], 10, 1 );
148
- add_filter( 'views_edit-post', [ $this, 'add_filter_link' ], 10, 1 );
149
- // bulk actions
150
- add_filter( 'bulk_actions-edit-post', [ $this, 'register_bulk_action_generate' ] );
151
- add_filter( 'handle_bulk_actions-edit-post', [ $this, 'bulk_action_generate_handler' ], 10, 3 );
152
- add_action( 'admin_notices', [ $this, 'apt_bulk_action_admin_notice' ] );
153
- add_action( 'admin_notices', [ $this, 'update_admin_notice' ] );
154
-
155
- add_filter( 'plugin_action_links_' . WAPT_PLUGIN_BASENAME, [ $this, 'plugin_action_link' ] );
156
-
157
- add_action( 'plugins_loaded', [ $this, 'plugins_loaded' ] );
158
- }
159
-
160
- /**
161
- * Выполняет php сценарии, когда все Wordpress плагины будут загружены
162
- *
163
- * @throws \Exception
164
- * @since 1.0.0
165
- * @author Alexander Kovalev <alex.kovalevv@gmail.com>
166
- */
167
- public function plugins_loaded() {
168
- if ( is_admin() ) {
169
- $this->register_pages();
170
- }
171
- }
172
-
173
- /**
174
- */
175
- private function global_scripts() {
176
- }
177
-
178
- /**
179
- * Enqueue assets.
180
- *
181
- * @param $hook_suffix
182
- *
183
- * @return void
184
- */
185
- public function enqueue_assets( $hook_suffix ) {
186
- //Подключаем стили и скрипты всегда в админке
187
- add_thickbox();
188
- wp_enqueue_media();
189
- wp_enqueue_script( 'apt-admin-script-thumbnail', WAPT_PLUGIN_URL . '/admin/assets/js/admin-thumbnail.js', [], false, true );
190
-
191
- if ( isset( $_REQUEST['post'] ) ) {
192
- $pid = intval( $_REQUEST['post'] );
193
- } else {
194
- $pid = 0;
195
- }
196
- $action_column_get_thumbnails = apply_filters( 'wapt/get-thumbnails/action', "apt_get_thumbnail" );
197
-
198
- $localize = [
199
- 'postid' => $pid,
200
- 'action_column_get_thumbnails' => $action_column_get_thumbnails,
201
- ];
202
-
203
- if ( is_admin() ) {
204
- wp_enqueue_script( 'jquery-autocolumnlist', WAPT_PLUGIN_URL . '/admin/assets/jquery-ui/jquery.autocolumnlist.js', [], false, true );
205
- wp_enqueue_script( 'jquery-flex-images', WAPT_PLUGIN_URL . '/admin/assets/jquery-ui/jquery.flex-images.min.js', [ 'jquery' ], false, true );
206
- wp_enqueue_style( 'style', WAPT_PLUGIN_URL . '/admin/assets/css/style.css' );
207
- wp_enqueue_style( 'flex-images', WAPT_PLUGIN_URL . '/admin/assets/css/jquery.flex-images.css' );
208
-
209
- $localize['button_text'] = __( 'Use as thumbnail', 'apt' );
210
- $localize['modal_title'] = __( 'Change featured image', 'apt' );
211
- }
212
-
213
- wp_enqueue_script( 'apt-admin-check_api', WAPT_PLUGIN_URL . '/admin/assets/js/check-api.js', [], false, true );
214
- wp_enqueue_script( 'apt-admin-search-page', WAPT_PLUGIN_URL . '/admin/assets/js/search-page.js', [], false, true );
215
-
216
- wp_localize_script( 'apt-admin-script-thumbnail', 'apt', $localize );
217
- //-----------------------------------
218
- if ( 'settings_page_generate-post-thumbnails' != $hook_suffix ) {
219
- return;
220
- }
221
- }
222
-
223
- public function enqueue_media() {
224
- global $post;
225
-
226
- if ( is_plugin_active( 'dreamstime-stock-photos/dreamstime.php' ) && ! ( isset( $_GET['action'] ) && $_GET['action'] == 'elementor' ) ) {
227
- wp_deregister_script( 'dreamstime-media-views' );
228
- wp_enqueue_script( 'dreamstime-media-views', WAPT_PLUGIN_URL . '/admin/assets/js/dreamstime-media-views.js', [ 'jquery' ], false, true );
229
- $handler = 'dreamstime-media-views';
230
- } else {
231
- wp_enqueue_script( 'apt-media-views', WAPT_PLUGIN_URL . '/admin/assets/js/media-views.js', [ 'jquery' ], false, true );
232
- $handler = 'apt-media-views';
233
- }
234
-
235
- $apt_media_iframe_src = ! empty( $post ) ? get_admin_url( get_current_blog_id(), 'media-upload.php?chromeless=1&post_id=' . $post->ID . '&tab=apttab' ) : "";
236
- wp_localize_script( $handler, 'apt_media_iframe', [ 'src' => esc_url( $apt_media_iframe_src ) ] );
237
- }
238
-
239
- /**
240
- * Этот хук реализует условную логику, при которой пользователь периодически будет
241
- * видеть страницу "О плагине", а конкретно при активации и обновлении плагина.
242
- */
243
- public function redirect_to_about_page() {
244
- // If the user has updated the plugin or activated it for the first time,
245
- // you need to show the page "What's new?"
246
- if ( ! $this->isNetworkAdmin() ) {
247
- $about_page_viewed = $this->request->get( 'wapt_about_page_viewed', null );
248
- $need_show_about = get_option( $this->getOptionName( 'whats_new_v360' ) );
249
- if ( is_null( $about_page_viewed ) ) {
250
- if ( $need_show_about && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) && ! ( defined( 'DOING_CRON' ) && DOING_CRON ) ) {
251
- try {
252
- $redirect_url = '';
253
- if ( class_exists( 'Wbcr_FactoryPages451' ) ) {
254
- $redirect_url = admin_url( "admin.php?page=wapt_about-wbcr_apt&wapt_about_page_viewed=1" );
255
- }
256
- if ( $redirect_url ) {
257
- wp_safe_redirect( $redirect_url );
258
- die();
259
- }
260
- } catch ( Exception $e ) {
261
- }
262
- }
263
- } else {
264
- if ( $need_show_about && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) && ! ( defined( 'DOING_CRON' ) && DOING_CRON ) ) {
265
- delete_option( $this->getOptionName( 'whats_new_v360' ) );
266
- }
267
- }
268
- }
269
- }
270
-
271
- /**
272
- * Add subpage to media menu
273
- *
274
- * @param $hook_suffix
275
- *
276
- * @return void
277
- */
278
- public function my_custom_submenu_page() {
279
- add_media_page( __( 'Auto Featured Images', 'apt' ), __( 'Add from APT', 'apt' ), 'manage_options', 'menu-media-apt', [
280
- $this->apt,
281
- 'addToMediaFromApt',
282
- ] );
283
- }
284
-
285
- /**
286
- * Check whether the required directory structure is available so that the plugin can create thumbnails if needed.
287
- * If not, don't allow plugin activation.
288
- */
289
- public function check_perms() {
290
- $uploads = wp_upload_dir( current_time( 'mysql' ) );
291
-
292
- if ( $uploads['error'] ) {
293
- echo '<div class="updated"><p>';
294
- echo $uploads['error'];
295
-
296
- if ( function_exists( 'deactivate_plugins' ) ) {
297
- deactivate_plugins( 'auto-post-thumbnail/auto-post-thumbnail.php', 'auto-post-thumbnail.php' );
298
- echo '<br /> ' . esc_html__( 'This plugin has been automatically deactivated.', 'apt' );
299
- }
300
-
301
- echo '</p></div>';
302
- }
303
- }
304
-
305
- public function show_about_notice( $notices, $plugin_name ) {
306
- // Если экшен вызывал не этот плагин, то не выводим это уведомления
307
- if ( $plugin_name != $this->getPluginName() ) {
308
- return $notices;
309
- }
310
- // Получаем заголовок плагина
311
- $plugin_title = $this->getPluginTitle();
312
-
313
- $notice_text = '<p><b>' . $plugin_title . ':</b> ' . sprintf( __( "What's new in version 3.7.0? Find out from <a href='%s'>the article</a> on our website.", 'apt' ), 'https://cm-wp.com/auto-featured-image-from-title/' ) . "</p>";
314
- $notices[] = [
315
- 'id' => 'apt_show_about_370',
316
- //error, success, warning
317
- 'type' => 'info',
318
- 'dismissible' => true,
319
- // На каких страницах показывать уведомление ('plugins', 'dashboard', 'edit')
320
- 'where' => [ 'plugins', 'dashboard', 'edit' ],
321
- // Через какое время уведомление снова появится?
322
- 'dismiss_expires' => 0,
323
- 'text' => $notice_text,
324
- 'classes' => [],
325
- ];
326
-
327
- return $notices;
328
- }
329
-
330
- /**
331
- * Function for adding "image" column in Posts table
332
- *
333
- * @param array $columns
334
- *
335
- * @return array
336
- */
337
- public function add_image_column( $columns ) {
338
- $pro = $this->is_premium() ? '' : ' <sup class="wapt-sup-pro">(PRO)<sup>';
339
-
340
- $new_columns = [ 'apt-image' => __( 'Image', 'apt' ) . $pro, ];
341
-
342
- return array_slice( $columns, 0, $this->numberOfColumn ) + $new_columns + array_slice( $columns, $this->numberOfColumn );
343
- }
344
-
345
- /**
346
- * Function to filling "image" column in Posts table
347
- *
348
- * @param string $colname
349
- * @param int $post_id
350
- */
351
- public function fill_image_column( $colname, $post_id ) {
352
- if ( $colname === 'apt-image' ) {
353
- $thumb_id = get_post_thumbnail_id( $post_id );
354
- //$this->nonce = wp_create_nonce( 'set_post_thumbnail-' . $post_id );
355
- echo $this->apt->apt_getThumbHtml( $post_id, $thumb_id );
356
- }
357
- }
358
-
359
- /**
360
- * Добавляет вкладку в медиабиблиотеку
361
- *
362
- * @param $tabs
363
- *
364
- * @return array
365
- */
366
- public function addTab( $tabs ) {
367
- $tabs['apttab'] = __( "Auto Featured Image", "apt" );
368
-
369
- return ( $tabs );
370
- }
371
-
372
- /**
373
- * Обработчик вывода во вкладку
374
- *
375
- */
376
- public function aptTabHandle() {
377
- // wp_iframe() adds css for "media" when callback function has "media_" as prefix
378
- wp_iframe( [ $this->apt, "media_AptTabContent" ] );
379
- }
380
-
381
- /**
382
- * Register bulk option for posts
383
- *
384
- * @return array(string)
385
- */
386
- public function register_bulk_action_generate( $bulk_actions ) {
387
- $bulk_actions['apt_generate_thumb'] = __( 'Generate featured image', 'apt' );
388
- $bulk_actions['apt_delete_thumb'] = __( 'Unset featured image', 'apt' );
389
- $bulk_actions['apt_add_images'] = __( 'Upload post images', 'apt' );
390
-
391
- return $bulk_actions;
392
- }
393
-
394
- /**
395
- * Handler of bulk option for posts
396
- *
397
- * @return string
398
- */
399
- public function bulk_action_generate_handler( $redirect_to, $doaction, $post_ids ) {
400
-
401
- foreach ( $post_ids as $post_id ) {
402
- switch ( $doaction ) {
403
- case 'apt_add_images':
404
- do_action( 'wapt/upload_and_replace_post_images', $post_id );
405
- break;
406
- case 'apt_generate_thumb':
407
- $this->apt->publish_post( $post_id );
408
- break;
409
- case 'apt_delete_thumb':
410
- delete_post_thumbnail( $post_id );
411
- break;
412
- default:
413
- return $redirect_to;
414
- }
415
- }
416
-
417
- $redirect_to = add_query_arg( [
418
- 'apt_bulk_action' => count( $post_ids ),
419
- ], $redirect_to );
420
-
421
- return $redirect_to;
422
- }
423
-
424
- /**
425
- * Admin notice after bulk action
426
- *
427
- */
428
- public function apt_bulk_action_admin_notice() {
429
- if ( empty( $_GET['apt_bulk_action'] ) ) {
430
- return;
431
- }
432
-
433
- $data = intval( $_GET['apt_bulk_action'] );
434
- $msg = __( 'Processed posts: ', 'apt' ) . $data;
435
- echo '<div id="message" class="updated"><p>' . $msg . '</p></div>';
436
- }
437
-
438
- /**
439
- * Admin notice
440
- *
441
- */
442
- public function update_admin_notice() {
443
- if ( defined( 'WAPTP_PLUGIN_VERSION' ) && str_replace( '.', '', WAPTP_PLUGIN_VERSION ) < 130 ) {
444
- $msg = __( 'To use premium features, update the <b>Auto Featured Image Premium</b> plugin!', 'apt' );
445
- echo '<div id="message" class="notice notice-warning is-dismissible"><p>' . $msg . '</p></div>';
446
- }
447
- }
448
-
449
- /**
450
- * Add filter on the Posts list tables.
451
- *
452
- * @param $post_type string
453
- * @param $witch string
454
- */
455
- public function add_posts_filters() {
456
- $screen = get_current_screen();
457
-
458
- if ( ! empty( $screen ) && "post" == $screen->post_type ) {
459
- $apt_is_image = false;
460
- if ( isset( $_GET['apt_is_image'] ) ) {
461
- $apt_is_image = absint( $_GET['apt_is_image'] );
462
- }
463
-
464
- echo '<select name="apt_is_image">' . '<option value="-1">' . __( 'Featured Image', 'apt' ) . '</option>' . '<option value="1" ' . selected( 1, $apt_is_image, 0 ) . '>' . __( 'With image', 'apt' ) . '</option>' . '<option value="0" ' . selected( 0, $apt_is_image, 0 ) . '>' . __( 'Without image', 'apt' ) . '</option>' . '</select>';
465
- }
466
- }
467
-
468
- /**
469
- * Filter the Posts list tables.
470
- *
471
- * @param $query \WP_Query
472
- *
473
- */
474
- public function posts_filter( $query ) {
475
- if ( ! is_admin() ) {
476
- return;
477
- } // выходим если не админка
478
-
479
- // убедимся что мы на нужной странице админки
480
- require_once( ABSPATH . 'wp-admin/includes/screen.php' );
481
- $cs = get_current_screen();
482
- if ( empty( $cs->post_type ) || $cs->post_type != 'post' || $cs->id != 'edit-post' ) {
483
- return;
484
- }
485
-
486
- if ( isset( $_GET['apt_is_image'] ) && $_GET['apt_is_image'] != - 1 ) {
487
- if ( (int) $_GET['apt_is_image'] == 1 ) {
488
- $compare = 'EXISTS';
489
- } else {
490
- $compare = 'NOT EXISTS';
491
- }
492
- $query->set( 'meta_query', [ [ 'key' => '_thumbnail_id', 'compare' => $compare ] ] );
493
- }
494
- }
495
-
496
- /**
497
- * Add filter on the Posts list tables.
498
- *
499
- */
500
- public function add_filter_link( $views ) {
501
- $query = $this->apt->get_posts_query( false, 'post', 'publish' );
502
- $posts = $query->post_count;
503
-
504
- $q = add_query_arg( [ 'apt_is_image' => '0', 'post_type' => 'post' ], 'edit.php' );
505
- $views['apt_filter'] = '<a href="' . $q . '">' . __( 'Without featured image', 'apt' ) . '</a> (' . $posts . ')';
506
- unset( $my );
507
-
508
- return $views;
509
- }
510
-
511
- /**
512
- * Adds the plugin action link on Plugins table
513
- *
514
- * @param array $links links array
515
- *
516
- * @return array
517
- */
518
- public function plugin_action_link( $links ) {
519
- $link_generate = '<a href="' . esc_url( $this->getPluginPageUrl( $this->getPrefix() . "generate" ) ) . '">' . esc_html__( 'Generate', 'apt' ) . '</a>';
520
- array_unshift( $links, $link_generate );
521
-
522
- return $links;
523
- }
524
-
525
- /**
526
- * Checks if the current request is a WP REST API request.
527
- *
528
- * Case #1: After WP_REST_Request initialisation
529
- * Case #2: Support "plain" permalink settings
530
- * Case #3: URL Path begins with wp-json/ (your REST prefix)
531
- * Also supports WP installations in subfolders
532
- *
533
- * @author matzeeable https://wordpress.stackexchange.com/questions/221202/does-something-like-is-rest-exist
534
- * @return boolean
535
- */
536
- public function doing_rest_api() {
537
- $prefix = rest_get_url_prefix();
538
- $rest_route = $this->request->get( 'rest_route', null );
539
- if ( defined( 'REST_REQUEST' ) && REST_REQUEST // (#1)
540
- || ! is_null( $rest_route ) // (#2)
541
- && strpos( trim( $rest_route, '\\/' ), $prefix, 0 ) === 0 ) {
542
- return true;
543
- }
544
-
545
- // (#3)
546
- $rest_url = wp_parse_url( site_url( $prefix ) );
547
- $current_url = wp_parse_url( add_query_arg( [] ) );
548
-
549
- return strpos( $current_url['path'], $rest_url['path'], 0 ) === 0;
550
- }
551
- }
 
 
 
 
 
1
+ <?php
2
+
3
+ use WBCR\APT;
4
+ use WBCR\APT\PostImagesPro;
5
+
6
+ // Exit if accessed directly
7
+ if ( ! defined( 'ABSPATH' ) ) {
8
+ exit;
9
+ }
10
+
11
+ /**
12
+ * Основной класс плагина Auto Featured Image
13
+ *
14
+ * @author Alexander Kovalev <alex.kovalevv@gmail.com>
15
+ * @copyright (c) 2018 Webraftic Ltd
16
+ * @version 1.0
17
+ */
18
+ class WAPT_Plugin extends Wbcr_Factory453_Plugin {
19
+
20
+ /**
21
+ * @see self::app()
22
+ * @var Wbcr_Factory453_Plugin
23
+ */
24
+ private static $app;
25
+
26
+ /**
27
+ * @var WBCR\APT\AutoPostThumbnails
28
+ */
29
+ public $apt;
30
+
31
+ /**
32
+ * @var integer
33
+ */
34
+ public $numberOfColumn;
35
+
36
+ /**
37
+ * Конструктор
38
+ *
39
+ * Применяет конструктор родительского класса и записывает экземпляр текущего класса в свойство $app.
40
+ * Подробнее о свойстве $app см. self::app()
41
+ *
42
+ * @param string $plugin_path
43
+ * @param array $data
44
+ *
45
+ * @throws Exception
46
+ */
47
+ public function __construct( $plugin_path, $data ) {
48
+ parent::__construct( $plugin_path, $data );
49
+
50
+ self::$app = $this;
51
+
52
+ if ( is_admin() ) {
53
+ // Регистрации класса активации/деактивации плагина
54
+ $this->initActivation();
55
+
56
+ $this->numberOfColumn = 4;
57
+ $this->apt = \WBCR\APT\AutoPostThumbnails::instance();
58
+
59
+ require WAPT_PLUGIN_DIR . '/admin/ajax/check-license.php';
60
+
61
+ // Инициализация бэкенда
62
+ $this->admin_scripts();
63
+ }
64
+
65
+ if ( $this->doing_rest_api() ) {
66
+ require_once WAPT_PLUGIN_DIR . '/includes/class.generate-result.php';
67
+ $this->apt = \WBCR\APT\AutoPostThumbnails::instance();
68
+ }
69
+
70
+ $this->global_scripts();
71
+ }
72
+
73
+ /**
74
+ * Статический метод для быстрого доступа к интерфейсу плагина.
75
+ *
76
+ * @return Wbcr_Factory453_Plugin
77
+ */
78
+ public static function app() {
79
+ return self::$app;
80
+ }
81
+
82
+ /**
83
+ * Метод проверяет активацию премиум плагина и наличие действующего лицензионного ключа
84
+ *
85
+ * @return bool
86
+ */
87
+ public function is_premium() {
88
+ if ( $this->premium->is_active() && $this->premium->is_activate() //&& $this->premium->is_install_package()
89
+ ) {
90
+ return true;
91
+ } else {
92
+ return false;
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Регистрации класса активации/деактивации плагина
98
+ */
99
+ protected function initActivation() {
100
+ include_once WAPT_PLUGIN_DIR . '/admin/class-wapt-activation.php';
101
+ $this->registerActivation( 'WAPT_Activation' );
102
+ }
103
+
104
+ /**
105
+ * Регистрирует классы страниц в плагине
106
+ */
107
+ private function register_pages() {
108
+ self::app()->registerPage( 'WAPT_Generate', WAPT_PLUGIN_DIR . '/admin/pages/generate.php' );
109
+ self::app()->registerPage( 'WAPT_Settings', WAPT_PLUGIN_DIR . '/admin/pages/settings.php' );
110
+ self::app()->registerPage( 'WAPT_ImageSettings', WAPT_PLUGIN_DIR . '/admin/pages/image.php' );
111
+ self::app()->registerPage( 'WAPT_License', WAPT_PLUGIN_DIR . '/admin/pages/license.php' );
112
+ self::app()->registerPage( 'WAPT_Log', WAPT_PLUGIN_DIR . '/admin/pages/log.php' );
113
+ self::app()->registerPage( 'WAPT_About', WAPT_PLUGIN_DIR . '/admin/pages/about.php' );
114
+ }
115
+
116
+ /**
117
+ */
118
+ private function admin_scripts() {
119
+ require_once WAPT_PLUGIN_DIR . '/includes/class.generate-result.php';
120
+
121
+ //$this->register_pages();
122
+
123
+ //------ ACTIONS ------
124
+ add_action( 'admin_init', [ $this, 'redirect_to_about_page' ] );
125
+ add_action( 'admin_menu', [ $this, 'my_custom_submenu_page' ] );
126
+
127
+ add_action( 'admin_notices', [ $this, 'check_perms' ] );
128
+ add_action( 'wbcr/factory/admin_notices', [ $this, 'show_about_notice' ], 10, 2 );
129
+
130
+ // Plugin hook for adding CSS and JS files required for this plugin
131
+ add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] );
132
+ add_action( 'wp_enqueue_media', [ $this, 'enqueue_media' ] );
133
+
134
+ //Hook to adding "image" column in Posts table
135
+ add_filter( 'manage_post_posts_columns', [ $this, 'add_image_column' ], 4 );
136
+ //Hook to filling "image" column in Posts table
137
+ add_action( 'manage_post_posts_custom_column', [ $this, 'fill_image_column' ], 5, 2 );
138
+
139
+ //ADD tab and button to medialibrary
140
+ add_filter( 'media_upload_tabs', [ $this, 'addTab' ] );
141
+ add_action( 'media_upload_apttab', [ $this, 'aptTabHandle' ] );
142
+
143
+ // filter posts
144
+ add_action( 'restrict_manage_posts', [ $this, 'add_posts_filters' ] );
145
+ add_action( 'pre_get_posts', [ $this, 'posts_filter' ], 10, 1 );
146
+ add_filter( 'views_edit-post', [ $this, 'add_filter_link' ], 10, 1 );
147
+ // bulk actions
148
+ add_filter( 'bulk_actions-edit-post', [ $this, 'register_bulk_action_generate' ] );
149
+ add_filter( 'handle_bulk_actions-edit-post', [ $this, 'bulk_action_generate_handler' ], 10, 3 );
150
+ add_action( 'admin_notices', [ $this, 'apt_bulk_action_admin_notice' ] );
151
+ add_action( 'admin_notices', [ $this, 'update_admin_notice' ] );
152
+
153
+ add_filter( 'plugin_action_links_' . WAPT_PLUGIN_BASENAME, [ $this, 'plugin_action_link' ] );
154
+
155
+ add_action( 'plugins_loaded', [ $this, 'plugins_loaded' ] );
156
+ }
157
+
158
+ /**
159
+ * Выполняет php сценарии, когда все WordPress плагины будут загружены
160
+ *
161
+ * @throws \Exception
162
+ * @since 1.0.0
163
+ * @author Alexander Kovalev <alex.kovalevv@gmail.com>
164
+ */
165
+ public function plugins_loaded() {
166
+ if ( is_admin() ) {
167
+ $this->register_pages();
168
+ }
169
+ }
170
+
171
+ /**
172
+ */
173
+ private function global_scripts() {
174
+ }
175
+
176
+ /**
177
+ * Enqueue assets.
178
+ *
179
+ * @param $hook_suffix
180
+ *
181
+ * @return void
182
+ */
183
+ public function enqueue_assets( $hook_suffix ) {
184
+ //Подключаем стили и скрипты всегда в админке
185
+ add_thickbox();
186
+ wp_enqueue_media();
187
+ wp_enqueue_script( 'apt-admin-script-thumbnail', WAPT_PLUGIN_URL . '/admin/assets/js/admin-thumbnail.js', [], false, true );
188
+
189
+ if ( isset( $_REQUEST['post'] ) ) {
190
+ $pid = intval( $_REQUEST['post'] );
191
+ } else {
192
+ $pid = 0;
193
+ }
194
+ $action_column_get_thumbnails = apply_filters( 'wapt/get-thumbnails/action', 'apt_get_thumbnail' );
195
+
196
+ $localize = [
197
+ 'postid' => $pid,
198
+ 'action_column_get_thumbnails' => $action_column_get_thumbnails,
199
+ ];
200
+
201
+ if ( is_admin() ) {
202
+ wp_enqueue_script( 'jquery-autocolumnlist', WAPT_PLUGIN_URL . '/admin/assets/jquery-ui/jquery.autocolumnlist.js', [], false, true );
203
+ wp_enqueue_script( 'jquery-flex-images', WAPT_PLUGIN_URL . '/admin/assets/jquery-ui/jquery.flex-images.min.js', [ 'jquery' ], false, true );
204
+ wp_enqueue_style( 'style', WAPT_PLUGIN_URL . '/admin/assets/css/style.css' );
205
+ wp_enqueue_style( 'flex-images', WAPT_PLUGIN_URL . '/admin/assets/css/jquery.flex-images.css' );
206
+
207
+ $localize['button_text'] = __( 'Use as thumbnail', 'apt' );
208
+ $localize['modal_title'] = __( 'Change featured image', 'apt' );
209
+ }
210
+
211
+ wp_enqueue_script( 'apt-admin-check_api', WAPT_PLUGIN_URL . '/admin/assets/js/check-api.js', [], false, true );
212
+ wp_enqueue_script( 'apt-admin-search-page', WAPT_PLUGIN_URL . '/admin/assets/js/search-page.js', [], false, true );
213
+
214
+ wp_localize_script( 'apt-admin-script-thumbnail', 'apt', $localize );
215
+ //-----------------------------------
216
+ if ( 'settings_page_generate-post-thumbnails' != $hook_suffix ) {
217
+ return;
218
+ }
219
+ }
220
+
221
+ public function enqueue_media() {
222
+ global $post;
223
+
224
+ if ( is_plugin_active( 'dreamstime-stock-photos/dreamstime.php' ) && ! ( isset( $_GET['action'] ) && $_GET['action'] == 'elementor' ) ) {
225
+ wp_deregister_script( 'dreamstime-media-views' );
226
+ wp_enqueue_script( 'dreamstime-media-views', WAPT_PLUGIN_URL . '/admin/assets/js/dreamstime-media-views.js', [ 'jquery' ], false, true );
227
+ $handler = 'dreamstime-media-views';
228
+ } else {
229
+ wp_enqueue_script( 'apt-media-views', WAPT_PLUGIN_URL . '/admin/assets/js/media-views.js', [ 'jquery' ], false, true );
230
+ $handler = 'apt-media-views';
231
+ }
232
+
233
+ $apt_media_iframe_src = ! empty( $post ) ? get_admin_url( get_current_blog_id(), 'media-upload.php?chromeless=1&post_id=' . $post->ID . '&tab=apttab' ) : '';
234
+ wp_localize_script( $handler, 'apt_media_iframe', [ 'src' => esc_url( $apt_media_iframe_src ) ] );
235
+ }
236
+
237
+ /**
238
+ * Этот хук реализует условную логику, при которой пользователь периодически будет
239
+ * видеть страницу "О плагине", а конкретно при активации и обновлении плагина.
240
+ */
241
+ public function redirect_to_about_page() {
242
+ // If the user has updated the plugin or activated it for the first time,
243
+ // you need to show the page "What's new?"
244
+ if ( ! $this->isNetworkAdmin() ) {
245
+ $about_page_viewed = $this->request->get( 'wapt_about_page_viewed', null );
246
+ $need_show_about = get_option( $this->getOptionName( 'whats_new_v360' ) );
247
+ if ( is_null( $about_page_viewed ) ) {
248
+ if ( $need_show_about && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) && ! ( defined( 'DOING_CRON' ) && DOING_CRON ) ) {
249
+ try {
250
+ $redirect_url = '';
251
+ if ( class_exists( 'Wbcr_FactoryPages452' ) ) {
252
+ $redirect_url = admin_url( 'admin.php?page=wapt_about-wbcr_apt&wapt_about_page_viewed=1' );
253
+ }
254
+ if ( $redirect_url ) {
255
+ wp_safe_redirect( $redirect_url );
256
+ die();
257
+ }
258
+ } catch ( Exception $e ) {
259
+ }
260
+ }
261
+ } else {
262
+ if ( $need_show_about && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) && ! ( defined( 'DOING_CRON' ) && DOING_CRON ) ) {
263
+ delete_option( $this->getOptionName( 'whats_new_v360' ) );
264
+ }
265
+ }
266
+ }
267
+ }
268
+
269
+ /**
270
+ * Add subpage to media menu
271
+ *
272
+ * @param $hook_suffix
273
+ *
274
+ * @return void
275
+ */
276
+ public function my_custom_submenu_page() {
277
+ add_media_page( __( 'Auto Featured Images', 'apt' ), __( 'Add from APT', 'apt' ), 'manage_options', 'menu-media-apt', [
278
+ $this->apt,
279
+ 'addToMediaFromApt',
280
+ ] );
281
+ }
282
+
283
+ /**
284
+ * Check whether the required directory structure is available so that the plugin can create thumbnails if needed.
285
+ * If not, don't allow plugin activation.
286
+ */
287
+ public function check_perms() {
288
+ $uploads = wp_upload_dir( current_time( 'mysql' ) );
289
+
290
+ if ( $uploads['error'] ) {
291
+ echo '<div class="updated"><p>';
292
+ echo esc_html( $uploads['error'] );
293
+
294
+ if ( function_exists( 'deactivate_plugins' ) ) {
295
+ deactivate_plugins( 'auto-post-thumbnail/auto-post-thumbnail.php', 'auto-post-thumbnail.php' );
296
+ echo '<br /> ' . esc_html__( 'This plugin has been automatically deactivated.', 'apt' );
297
+ }
298
+
299
+ echo '</p></div>';
300
+ }
301
+ }
302
+
303
+ /**
304
+ * Show about notice
305
+ *
306
+ * @param array $notices Notices list
307
+ * @param string $plugin_name Plugin name
308
+ *
309
+ * @return array
310
+ */
311
+ public function show_about_notice( $notices, $plugin_name ) {
312
+ // Если экшен вызывал не этот плагин, то не выводим это уведомления
313
+ if ( $plugin_name !== $this->getPluginName() ) {
314
+ return $notices;
315
+ }
316
+ // Получаем заголовок плагина
317
+ $plugin_title = $this->getPluginTitle();
318
+
319
+ $notice_text = '<p><b>' . $plugin_title . ':</b> ' . sprintf( __( "What's new in version 3.7.0? Find out from <a href='%s'>the article</a> on our website.", 'apt' ), 'https://cm-wp.com/auto-featured-image-from-title/' ) . '</p>';
320
+ $notices[] = [
321
+ 'id' => 'apt_show_about_370',
322
+ //error, success, warning
323
+ 'type' => 'info',
324
+ 'dismissible' => true,
325
+ // На каких страницах показывать уведомление ('plugins', 'dashboard', 'edit')
326
+ 'where' => [ 'plugins', 'dashboard', 'edit' ],
327
+ // Через какое время уведомление снова появится?
328
+ 'dismiss_expires' => 0,
329
+ 'text' => $notice_text,
330
+ 'classes' => [],
331
+ ];
332
+
333
+ return $notices;
334
+ }
335
+
336
+ /**
337
+ * Function for adding "image" column in Posts table
338
+ *
339
+ * @param array $columns
340
+ *
341
+ * @return array
342
+ */
343
+ public function add_image_column( $columns ) {
344
+ $pro = $this->is_premium() ? '' : ' <sup class="wapt-sup-pro">(PRO)<sup>';
345
+
346
+ $new_columns = [ 'apt-image' => __( 'Image', 'apt' ) . $pro ];
347
+
348
+ return array_slice( $columns, 0, $this->numberOfColumn ) + $new_columns + array_slice( $columns, $this->numberOfColumn );
349
+ }
350
+
351
+ /**
352
+ * Function to filling "image" column in Posts table
353
+ *
354
+ * @param string $colname
355
+ * @param int $post_id
356
+ */
357
+ public function fill_image_column( $colname, $post_id ) {
358
+ if ( 'apt-image' === $colname ) {
359
+ $thumb_id = get_post_thumbnail_id( $post_id );
360
+ echo $this->apt->apt_getThumbHtml( $post_id, $thumb_id ); // phpcs:ignore
361
+ }
362
+ }
363
+
364
+ /**
365
+ * Добавляет вкладку в медиабиблиотеку
366
+ *
367
+ * @param $tabs
368
+ *
369
+ * @return array
370
+ */
371
+ public function addTab( $tabs ) {
372
+ $tabs['apttab'] = __( 'Auto Featured Image', 'apt' );
373
+
374
+ return ( $tabs );
375
+ }
376
+
377
+ /**
378
+ * Обработчик вывода во вкладку
379
+ */
380
+ public function aptTabHandle() {
381
+ // wp_iframe() adds css for "media" when callback function has "media_" as prefix
382
+ wp_iframe( [ $this->apt, 'media_AptTabContent' ] );
383
+ }
384
+
385
+ /**
386
+ * Register bulk option for posts
387
+ *
388
+ * @return array(string)
389
+ */
390
+ public function register_bulk_action_generate( $bulk_actions ) {
391
+ $bulk_actions['apt_generate_thumb'] = __( 'Generate featured image', 'apt' );
392
+ $bulk_actions['apt_delete_thumb'] = __( 'Unset featured image', 'apt' );
393
+ $bulk_actions['apt_add_images'] = __( 'Upload post images', 'apt' );
394
+
395
+ return $bulk_actions;
396
+ }
397
+
398
+ /**
399
+ * Handler of bulk option for posts
400
+ *
401
+ * @return string
402
+ */
403
+ public function bulk_action_generate_handler( $redirect_to, $doaction, $post_ids ) {
404
+
405
+ foreach ( $post_ids as $post_id ) {
406
+ switch ( $doaction ) {
407
+ case 'apt_add_images':
408
+ do_action( 'wapt/upload_and_replace_post_images', $post_id );
409
+ break;
410
+ case 'apt_generate_thumb':
411
+ $this->apt->publish_post( $post_id );
412
+ break;
413
+ case 'apt_delete_thumb':
414
+ delete_post_thumbnail( $post_id );
415
+ break;
416
+ default:
417
+ return $redirect_to;
418
+ }
419
+ }
420
+
421
+ $redirect_to = add_query_arg( [
422
+ 'apt_bulk_action' => count( $post_ids ),
423
+ ], $redirect_to );
424
+
425
+ return $redirect_to;
426
+ }
427
+
428
+ /**
429
+ * Admin notice after bulk action
430
+ */
431
+ public function apt_bulk_action_admin_notice() {
432
+ if ( empty( $_GET['apt_bulk_action'] ) ) {
433
+ return;
434
+ }
435
+
436
+ $data = intval( $_GET['apt_bulk_action'] );
437
+ $msg = __( 'Processed posts: ', 'apt' ) . $data;
438
+ echo '<div id="message" class="updated"><p>' . wp_kses_post( $msg ) . '</p></div>';
439
+ }
440
+
441
+ /**
442
+ * Admin notice
443
+ */
444
+ public function update_admin_notice() {
445
+ if ( defined( 'WAPTP_PLUGIN_VERSION' ) && str_replace( '.', '', WAPTP_PLUGIN_VERSION ) < 130 ) {
446
+ $msg = __( 'To use premium features, update the <b>Auto Featured Image Premium</b> plugin!', 'apt' );
447
+ echo '<div id="message" class="notice notice-warning is-dismissible"><p>' . wp_kses_post( $msg ) . '</p></div>';
448
+ }
449
+ }
450
+
451
+ /**
452
+ * Add filter on the Posts list tables.
453
+ */
454
+ public function add_posts_filters() {
455
+ $screen = get_current_screen();
456
+
457
+ if ( ! empty( $screen ) && 'post' === $screen->post_type ) {
458
+ $apt_is_image = false;
459
+ if ( isset( $_GET['apt_is_image'] ) ) {
460
+ $apt_is_image = absint( $_GET['apt_is_image'] );
461
+ }
462
+
463
+ echo '<select name="apt_is_image"><option value="-1">' . esc_html__( 'Featured Image', 'apt' ) . '</option><option value="1" ' . selected( 1, $apt_is_image, 0 ) . '>' . esc_html__( 'With image', 'apt' ) . '</option><option value="0" ' . selected( 0, $apt_is_image, 0 ) . '>' . esc_html__( 'Without image', 'apt' ) . '</option></select>';
464
+ }
465
+ }
466
+
467
+ /**
468
+ * Filter the Posts list tables.
469
+ *
470
+ * @param $query \WP_Query
471
+ */
472
+ public function posts_filter( $query ) {
473
+ if ( ! is_admin() ) {
474
+ return;
475
+ } // выходим если не админка
476
+
477
+ // убедимся что мы на нужной странице админки
478
+ require_once ABSPATH . 'wp-admin/includes/screen.php';
479
+ $cs = get_current_screen();
480
+ if ( empty( $cs->post_type ) || 'post' !== $cs->post_type || 'edit-post' !== $cs->id ) {
481
+ return;
482
+ }
483
+
484
+ if ( isset( $_GET['apt_is_image'] ) && $_GET['apt_is_image'] != - 1 ) {
485
+ if ( (int) $_GET['apt_is_image'] == 1 ) {
486
+ $compare = 'EXISTS';
487
+ } else {
488
+ $compare = 'NOT EXISTS';
489
+ }
490
+ $query->set( 'meta_query', [
491
+ [
492
+ 'key' => '_thumbnail_id',
493
+ 'compare' => $compare,
494
+ ],
495
+ ] );
496
+ }
497
+ }
498
+
499
+ /**
500
+ * Add filter on the Posts list tables.
501
+ */
502
+ public function add_filter_link( $views ) {
503
+ $query = $this->apt->get_posts_query( false, 'post', 'publish' );
504
+ $posts = $query->post_count;
505
+
506
+ $q = add_query_arg( [
507
+ 'apt_is_image' => '0',
508
+ 'post_type' => 'post',
509
+ ], 'edit.php' );
510
+ $views['apt_filter'] = '<a href="' . $q . '">' . __( 'Without featured image', 'apt' ) . '</a> (' . $posts . ')';
511
+ unset( $my );
512
+
513
+ return $views;
514
+ }
515
+
516
+ /**
517
+ * Adds the plugin action link on Plugins table
518
+ *
519
+ * @param array $links links array
520
+ *
521
+ * @return array
522
+ */
523
+ public function plugin_action_link( $links ) {
524
+ $link_generate = '<a href="' . esc_url( $this->getPluginPageUrl( $this->getPrefix() . 'generate' ) ) . '">' . esc_html__( 'Generate', 'apt' ) . '</a>';
525
+ array_unshift( $links, $link_generate );
526
+
527
+ return $links;
528
+ }
529
+
530
+ /**
531
+ * Checks if the current request is a WP REST API request.
532
+ *
533
+ * Case #1: After WP_REST_Request initialisation
534
+ * Case #2: Support "plain" permalink settings
535
+ * Case #3: URL Path begins with wp-json/ (your REST prefix)
536
+ * Also supports WP installations in subfolders
537
+ *
538
+ * @author matzeeable https://wordpress.stackexchange.com/questions/221202/does-something-like-is-rest-exist
539
+ * @return boolean
540
+ */
541
+ public function doing_rest_api() {
542
+ $prefix = rest_get_url_prefix();
543
+ $rest_route = $this->request->get( 'rest_route', null );
544
+ if ( defined( 'REST_REQUEST' ) && REST_REQUEST // (#1)
545
+ || ! is_null( $rest_route ) // (#2)
546
+ && strpos( trim( $rest_route, '\\/' ), $prefix, 0 ) === 0 ) {
547
+ return true;
548
+ }
549
+
550
+ // (#3)
551
+ $rest_url = wp_parse_url( site_url( $prefix ) );
552
+ $current_url = wp_parse_url( add_query_arg( [] ) );
553
+
554
+ return strpos( $current_url['path'], $rest_url['path'], 0 ) === 0;
555
+ }
556
+ }
includes/class-post-images.php CHANGED
@@ -1,164 +1,174 @@
1
- <?php
2
-
3
- namespace WBCR\APT;
4
-
5
- use WP_Post, WP_Error;
6
-
7
- // Exit if accessed directly
8
- if ( ! defined( 'ABSPATH' ) ) {
9
- exit;
10
- }
11
-
12
-
13
- class PostImages {
14
-
15
- /**
16
- * @var \WAPT_Plugin
17
- */
18
- private $plugin;
19
-
20
- /**
21
- * @var WP_Post
22
- */
23
- public $post;
24
-
25
- /**
26
- * @var array
27
- */
28
- private $images = [];
29
-
30
- /**
31
- * Post Images constructor.
32
- *
33
- * @param WP_Post|int|string $post Post object or post ID or post content
34
- */
35
- public function __construct( $post = null ) {
36
- $this->plugin = \WAPT_Plugin::app();
37
-
38
- if ( is_numeric( $post ) ) {
39
- $post = get_post( $post, 'OBJECT' );
40
- $this->post = $post;
41
- } else if ( is_object( $post ) ) {
42
- $this->post = $post;
43
- } else if ( is_string( $post ) ) {
44
- $new_post = new \stdClass();
45
- $new_post->post_content = $post;
46
-
47
- $this->post = new WP_Post( $new_post );
48
- }
49
-
50
- $this->find_images();
51
- }
52
-
53
- /**
54
- * Get an array of images url, contained in the post
55
- *
56
- */
57
- private function find_images() {
58
- $matches = [];
59
- $images = [];
60
-
61
- //do shortcodes before search images
62
- $post_content = do_shortcode( $this->post->post_content ?? '' );
63
-
64
- // Get all images from post's body
65
- preg_match_all( '/<\s*img .*?src\s*=\s*[\"\']?([^\"\'> ]*).*?>/i', $post_content, $matches );
66
-
67
- if ( count( $matches ) ) {
68
- //$this->plugin->logger->debug( "Found from regex: " . var_export( $matches[0], true ) );
69
-
70
- foreach ( $matches[0] as $key => $image ) {
71
- $title = '';
72
- preg_match_all( '/<\s*img [^\>]*title\s*=\s*[\"\']?([^\"\'> ]*)/i', $image, $matchesTitle );
73
-
74
- if ( count( $matchesTitle ) && isset( $matchesTitle[1] ) && isset( $matchesTitle[1][ $key ] ) ) {
75
- $title = $matches[1][ $key ];
76
- }
77
-
78
- $images[] = [
79
- 'tag' => $image,
80
- 'url' => $matches[1][ $key ],
81
- 'title' => $title,
82
- ];
83
- }
84
- }
85
-
86
- $this->images = $images;
87
- $this->plugin->logger->debug( "Found images: " . var_export( $images, true ) );
88
- }
89
-
90
- /**
91
- * Get the post object
92
- *
93
- * @return WP_Post
94
- */
95
- public function get_post() {
96
- return $this->post;
97
- }
98
-
99
- /**
100
- * Get an array of images url, contained in the post
101
- *
102
- * @return array
103
- */
104
- public function get_images() {
105
- return $this->images;
106
- }
107
-
108
- /**
109
- * Get count of images url, contained in the post
110
- *
111
- * @return int
112
- */
113
- public function count_images() {
114
- return count( $this->images );
115
- }
116
-
117
- /**
118
- * If images is founded in post
119
- *
120
- * @return bool
121
- */
122
- public function is_images() {
123
- return (bool) $this->count_images();
124
- }
125
-
126
- /**
127
- * @param string $image
128
- * @param string $suffix
129
- * @param WP_Post $post
130
- *
131
- * @return string
132
- */
133
- public function unique_filepath( $image, $suffix = 'image', $post = null ) {
134
- if ( ! $post ) {
135
- $post = $this->get_post();
136
- }
137
-
138
- $uploads = wp_upload_dir( current_time( 'mysql' ) );
139
- $extension = pathinfo( $image, PATHINFO_EXTENSION );
140
-
141
- //$slug = wp_unique_post_slug( $post->post_title, $post->ID, $post->post_status, $post->post_type, $post->post_parent );
142
- $slug = "wapt_{$suffix}";
143
- $file_path = wp_unique_filename( $uploads['path'], "{$slug}_{$post->post_type}_{$post->ID}.{$extension}" );
144
- $file_path = "{$uploads['path']}/{$file_path}";
145
-
146
- return $file_path;
147
- }
148
-
149
- /**
150
- * @param string $url
151
- * @param string $path_to
152
- *
153
- * @return bool
154
- */
155
- public function download( $url, $path_to ) {
156
- $response = wp_remote_get( $url );
157
- if ( 200 === wp_remote_retrieve_response_code( $response ) ) {
158
- $body = wp_remote_retrieve_body( $response );
159
- $downloaded = $path_to ? @file_put_contents( $path_to, $body ) : false;
160
- }
161
-
162
- return isset( $downloaded ) ? (bool) $downloaded : false;
163
- }
164
- }
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WBCR\APT;
4
+
5
+ use WP_Post, WP_Error;
6
+
7
+ // Exit if accessed directly
8
+ if ( ! defined( 'ABSPATH' ) ) {
9
+ exit;
10
+ }
11
+
12
+ /**
13
+ * Post images class
14
+ */
15
+ class PostImages {
16
+
17
+ /**
18
+ * @var \WAPT_Plugin
19
+ */
20
+ private $plugin;
21
+
22
+ /**
23
+ * @var WP_Post
24
+ */
25
+ public $post;
26
+
27
+ /**
28
+ * @var array
29
+ */
30
+ private $images = [];
31
+
32
+ /**
33
+ * Post Images constructor.
34
+ *
35
+ * @param WP_Post|int|string $post Post object or post ID or post content
36
+ */
37
+ public function __construct( $post = null ) {
38
+ $this->plugin = \WAPT_Plugin::app();
39
+
40
+ if ( is_numeric( $post ) ) {
41
+ $post = get_post( $post, 'OBJECT' );
42
+ $this->post = $post;
43
+ } elseif ( is_object( $post ) ) {
44
+ $this->post = $post;
45
+ } elseif ( is_string( $post ) ) {
46
+ $new_post = new \stdClass();
47
+ $new_post->post_content = $post;
48
+
49
+ $this->post = new WP_Post( $new_post );
50
+ }
51
+
52
+ $this->find_images();
53
+ }
54
+
55
+ /**
56
+ * Get an array of images url, contained in the post
57
+ */
58
+ private function find_images() {
59
+ $matches = [];
60
+ $images = [];
61
+
62
+ //do shortcodes before search images
63
+ $post_content = do_shortcode( $this->post->post_content ?? '' );
64
+
65
+ // Get all images from post's body
66
+ preg_match_all( '/<\s*img .*?src\s*=\s*[\"\']?([^\"\'> ]*).*?>/i', $post_content, $matches );
67
+
68
+ if ( count( $matches ) ) {
69
+ //$this->plugin->logger->debug( "Found from regex: " . var_export( $matches[0], true ) );
70
+
71
+ foreach ( $matches[0] as $key => $image ) {
72
+ $title = '';
73
+ preg_match_all( '/<\s*img [^\>]*title\s*=\s*[\"\']?([^\"\'> ]*)/i', $image, $matches_title );
74
+
75
+ if ( count( $matches_title ) && isset( $matches_title[1] ) && isset( $matches_title[1][ $key ] ) ) {
76
+ $title = $matches[1][ $key ];
77
+ }
78
+
79
+ $images[] = [
80
+ 'tag' => $image,
81
+ 'url' => $matches[1][ $key ],
82
+ 'title' => $title,
83
+ ];
84
+ }
85
+ }
86
+
87
+ $this->images = $images;
88
+ $this->plugin->logger->debug( 'Found images: ' . var_export( $images, true ) );
89
+ }
90
+
91
+ /**
92
+ * Get the post object
93
+ *
94
+ * @return WP_Post
95
+ */
96
+ public function get_post() {
97
+ return $this->post;
98
+ }
99
+
100
+ /**
101
+ * Get an array of images url, contained in the post
102
+ *
103
+ * @return array
104
+ */
105
+ public function get_images() {
106
+ return $this->images;
107
+ }
108
+
109
+ /**
110
+ * Get count of images url, contained in the post
111
+ *
112
+ * @return int
113
+ */
114
+ public function count_images() {
115
+ return count( $this->images );
116
+ }
117
+
118
+ /**
119
+ * If images is founded in post
120
+ *
121
+ * @return bool
122
+ */
123
+ public function is_images() {
124
+ return (bool) $this->count_images();
125
+ }
126
+
127
+ /**
128
+ * @param string $image Image path
129
+ * @param string $suffix Slug suffix
130
+ * @param WP_Post $post Post object
131
+ *
132
+ * @return string
133
+ */
134
+ public function unique_filepath( $image, $suffix = 'image', $post = null ) {
135
+ if ( ! $post ) {
136
+ $post = $this->get_post();
137
+ }
138
+
139
+ $uploads = wp_upload_dir( current_time( 'mysql' ) );
140
+ $extension = pathinfo( $image, PATHINFO_EXTENSION );
141
+
142
+ //$slug = wp_unique_post_slug( $post->post_title, $post->ID, $post->post_status, $post->post_type, $post->post_parent );
143
+ $slug = "wapt_{$suffix}";
144
+ $file_path = wp_unique_filename( $uploads['path'], "{$slug}_{$post->post_type}_{$post->ID}.{$extension}" );
145
+ $file_path = "{$uploads['path']}/{$file_path}";
146
+
147
+ return $file_path;
148
+ }
149
+
150
+ /**
151
+ * @param string $url URL
152
+ * @param string $path_to Path to download
153
+ *
154
+ * @return bool
155
+ */
156
+ public function download( $url, $path_to ) {
157
+ $response = wp_remote_get( $url );
158
+ if ( 200 === wp_remote_retrieve_response_code( $response ) ) {
159
+ $body = wp_remote_retrieve_body( $response );
160
+
161
+ global $wp_filesystem;
162
+ if ( ! $wp_filesystem ) {
163
+ if ( ! function_exists( 'WP_Filesystem' ) ) {
164
+ require_once ABSPATH . 'wp-admin/includes/file.php';
165
+ }
166
+ WP_Filesystem();
167
+ }
168
+
169
+ $downloaded = $path_to ? $wp_filesystem->put_contents( $path_to, $body ) : false;
170
+ }
171
+
172
+ return isset( $downloaded ) ? (bool) $downloaded : false;
173
+ }
174
+ }
includes/class-wapt-image.php CHANGED
@@ -1,468 +1,468 @@
1
- <?php
2
- namespace WBCR\APT;
3
-
4
- use WAPT_Plugin, Exception;
5
-
6
- // Exit if accessed directly
7
- if ( ! defined( 'ABSPATH' ) ) {
8
- exit;
9
- }
10
-
11
- /**
12
- * Class for image processing
13
- *
14
- * @author Artem Prikhodko <webtemyk@yandex.ru>
15
- * @copyright (c) 2020 Webraftic Ltd
16
- * @version 1.0
17
- */
18
- class Image {
19
-
20
- /**
21
- * @see self::app()
22
- * @var Image
23
- */
24
- private static $app;
25
-
26
- /**
27
- * @var integer
28
- */
29
- public $width;
30
-
31
- /**
32
- * @var integer
33
- */
34
- public $height;
35
-
36
- /**
37
- * @var string
38
- */
39
- private $font_path = WAPT_PLUGIN_DIR . "/fonts/arial.ttf";
40
-
41
- /**
42
- * @var integer
43
- */
44
- public $font_size;
45
-
46
- /**
47
- * @var string|array
48
- */
49
- public $font_color;
50
-
51
- /**
52
- * @var string
53
- */
54
- public $text;
55
-
56
- /**
57
- * @var string
58
- */
59
- public $background;
60
-
61
- /**
62
- * @var string
63
- */
64
- private $reference_text = 'abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ-!?.,_"[]';
65
-
66
- /**
67
- * @var Resource
68
- */
69
- private $image;
70
-
71
- /**
72
- * @var string
73
- */
74
- public $padding_left = 0;
75
-
76
- /**
77
- * @var string
78
- */
79
- public $padding_top = 0;
80
-
81
- /**
82
- * @var string
83
- */
84
- public $line_spacing = 1;
85
-
86
- /**
87
- * @var array
88
- */
89
- public $params = array();
90
-
91
- /**
92
- * @return
93
- */
94
- public function getImage() {
95
- return $this->image;
96
- }
97
-
98
- /**
99
- * @param string $padding_left
100
- * @param string $padding_top
101
- */
102
- public function setPadding( $padding_left, $padding_top ) {
103
- $this->padding_left = $padding_left;
104
- $this->padding_top = $padding_top;
105
- }
106
-
107
- /**
108
- * @param int $width
109
- */
110
- public function setWidth( $width ) {
111
- $this->width = $width;
112
- }
113
-
114
- /**
115
- * @param int $height
116
- */
117
- public function setHeight( $height ) {
118
- $this->height = $height;
119
- }
120
-
121
- /**
122
- * @param string $font_path
123
- */
124
- public function setFontPath( $font_path ) {
125
- if ( file_exists( $font_path ) ) {
126
- $this->font_path = $font_path;
127
- }
128
- }
129
-
130
- /**
131
- * {PLUGIN_DIR}/fonts/{font}.ttf
132
- *
133
- * @param string $font
134
- */
135
- public function setFont( $font ) {
136
- $this->font_path = WAPT_PLUGIN_DIR . "/fonts/{$font}.ttf";
137
- }
138
-
139
- /**
140
- * @param int $font_size
141
- */
142
- public function setFontSize( $font_size ) {
143
- $this->font_size = $font_size;
144
- }
145
-
146
- /**
147
- * @param array|string $font_color
148
- */
149
- public function setFontColor( $font_color ) {
150
- $this->font_color = $font_color;
151
- }
152
-
153
- /**
154
- * @param string $text
155
- */
156
- public function setText( $text ) {
157
- $this->text = $text;
158
- }
159
-
160
- /**
161
- * @param array|string $background
162
- */
163
- public function setBackground( $background ) {
164
- $this->background = $background;
165
- }
166
-
167
- /**
168
- * Конструктор
169
- *
170
- * @param string $width
171
- * @param string $height
172
- * @param array|string $background = '#ffffff'
173
- * @param string $font = ''
174
- * @param integer $font_size = 0
175
- * @param string $font_color = '#000000'
176
- *
177
- */
178
- public function __construct( $width, $height, $background = '#ffffff', $font = '', $font_size = 0, $font_color = '#000000' ) {
179
- self::$app = $this;
180
-
181
- $this->width = $width;
182
- $this->height = $height;
183
- $this->background = $background;
184
- $this->font_path = $font;
185
- $this->font_size = $font_size;
186
- $this->font_color = $font_color;
187
-
188
- $this->image = $this->create( $width, $height, $background );
189
- }
190
-
191
- /**
192
- * Статический метод для быстрого доступа к интерфейсу плагина.
193
- *
194
- * @return Image
195
- */
196
- public static function app() {
197
- return self::$app;
198
- }
199
-
200
- /**
201
- * Create image
202
- *
203
- * @return Resource
204
- */
205
- public function create( $width, $height, $background = '#ffffff' ) {
206
- if ( is_numeric( $background ) ) //image
207
- {
208
- $image = wp_get_attachment_metadata( $background );
209
- if ( $image ) {
210
- $upload_dir = wp_upload_dir();
211
- $file_path = $upload_dir['basedir'] . '/' . $image['file'];
212
- $file_type = wp_check_filetype( $file_path );
213
- switch ( $file_type['type'] ) {
214
- case 'image/jpeg':
215
- $im = imagecreatefromjpeg( $file_path );
216
- $this->setWidth( $image['width'] );
217
- $this->setHeight( $image['height'] );
218
- break;
219
-
220
- case 'image/png':
221
- $im = imagecreatefrompng( $file_path );
222
- imagesavealpha( $im, true );
223
- $this->setWidth( $image['width'] );
224
- $this->setHeight( $image['height'] );
225
- break;
226
-
227
- default:
228
- $im = $this->create( $width, $height );
229
- break;
230
- }
231
- } else {
232
- $im = $this->create( $width, $height );
233
- }
234
- } else { //color
235
- $im = imagecreatetruecolor( $width, $height );
236
- $color = $this->color_hex_to_rgb( $background );
237
- $bg_color = imagecolorallocate( $im, $color['r'], $color['g'], $color['b'] );
238
- imagefill( $im, 0, 0, $bg_color );
239
- }
240
-
241
- return $im;
242
- }
243
-
244
- /**
245
- * Convert hex color to RGB
246
- *
247
- * @param string $hex
248
- *
249
- * @return array
250
- */
251
- private function color_hex_to_rgb( $hex = '' ) {
252
- if ( empty( $hex ) ) {
253
- $hex = $this->font_color;
254
- }
255
- list( $r, $g, $b ) = sscanf( $hex, "#%02x%02x%02x" );
256
-
257
- return array(
258
- 'r' => $r,
259
- 'g' => $g,
260
- 'b' => $b,
261
- );
262
- }
263
-
264
- /**
265
- * Get width of the letter in the font.
266
- *
267
- * return array(
268
- * 'width' => int
269
- * 'height' => int
270
- * );
271
- * OR false
272
- *
273
- * @return array|false
274
- */
275
- public function get_font_char_size() {
276
- if ( $this->font_path !== '' && $this->font_size !== 0 ) {
277
-
278
- $text = ! empty( $this->text ) ? $this->text : $this->reference_text;
279
- //$txt_image = $this->create( 500, 500 );
280
- $box = imagettfbbox( $this->font_size, 0, $this->font_path, $text );
281
- $width = $box[2] - $box[0];
282
- $height = $box[1] - $box[7];
283
- $result = array(
284
- 'width' => ceil( $width / strlen( $text ) ), //средняя ширина одного символа
285
- 'height' => $height, //высота одного символа
286
- );
287
-
288
- return $result;
289
- } else {
290
- return false;
291
- }
292
- }
293
-
294
- /**
295
- * Write text on the image
296
- *
297
- * @param string $text
298
- * @param string $font = ''
299
- * @param integer $font_size = 0
300
- * @param string $font_color = '#000000'
301
- * @param string $align
302
- * @param string $valign
303
- * @param float $line_spacing
304
- * @param string $shadow_color
305
- *
306
- * @return bool
307
- */
308
- public function write_text( $text, $font = '', $font_size = '', $font_color = '', $align = 'left', $valign = 'top', $line_spacing = '1.5', $shadow_color = '' ) {
309
- if ( ! empty( $text ) ) {
310
- $text = mb_convert_encoding( $text, 'UTF-8' );
311
-
312
- if ( empty( $font ) ) {
313
- $font = $this->font_path;
314
- }
315
- if ( empty( $font_size ) ) {
316
- $font_size = $this->font_size;
317
- }
318
- if ( empty( $font_color ) ) {
319
- $font_color = $this->font_color;
320
- }
321
- $this->setText( $text );
322
- $char_size = $this->get_font_char_size();
323
-
324
- $pad_left = (int) $this->padding_left;
325
- $pad_top = (int) $this->padding_top;
326
-
327
- $color = $this->color_hex_to_rgb( $font_color );
328
- $font_color = imagecolorallocate( $this->image, $color['r'], $color['g'], $color['b'] );
329
- if ( ! empty( $shadow_color ) ) {
330
- $color = $this->color_hex_to_rgb( $shadow_color );
331
- $shadow_color = imagecolorallocate( $this->image, $color['r'], $color['g'], $color['b'] );
332
- }
333
- $line_spacing = (float) $line_spacing;
334
-
335
- $width = $this->width - $pad_left * 2;
336
- $height = $this->height - $pad_top * 2;
337
-
338
- $chars_per_line = ceil( $width / $char_size['width'] * 0.9 ); //count of chars per line
339
- $text2 = wordwrap( $text, $chars_per_line, "\n", false );
340
- $text2 = str_replace( "[br]", "\n", $text2 );
341
- $line_count = count( explode( "\n", $text2 ) );
342
- $lines = explode( "\n", $text2 );
343
- for ( $i = 0; $i < $line_count; $i ++ ) {
344
- $box = imagettfbbox( $font_size, 0, $font, $this->commas_cut( $lines[ $i ] ) );
345
- $w = $box[4] - $box[6];
346
- if ( $w > $width ) {
347
- $font_size --;
348
- $i = 0;
349
- }
350
-
351
- }
352
-
353
- $text_height = $line_count * $char_size['height'];
354
- while ( $text_height > $height || ( $height - $text_height <= ( 2 * $pad_left ) ) ) {
355
- $this->font_size --;
356
- $font_size --;
357
- $char_size = $this->get_font_char_size();
358
- if ( ! $char_size ) {
359
- break;
360
- }
361
- $line_width = ceil( $width / $char_size['width'] * 0.9 ); //count of chars per line
362
- $text2 = wordwrap( $text, (int) $line_width, "\n", false );
363
- $text2 = str_replace( "[br]", "\n", $text2 );
364
- $line_count = count( explode( "\n", $text2 ) );
365
- $text_height = $line_count * ( $char_size['height'] * $line_spacing );
366
- }
367
- $width = $this->width;
368
- $height = $this->height;
369
-
370
- $lines = explode( "\n", $text2 );
371
- if ( $valign == "bottom" ) {
372
- $lines = array_reverse( $lines );
373
- }
374
-
375
- foreach ( $lines as $key => $line ) {
376
- $box = imagettfbbox( $font_size, 0, $font, $this->commas_cut( $line ) );
377
- $h = $char_size['height'] * count( $lines ) + ( $line_spacing - 1 ) * $char_size['height'] * count( $lines );
378
- $w = $box[4] - $box[6];
379
- $num = $line_spacing * $key;
380
-
381
- switch ( $align . '-' . $valign ) {
382
- case 'left-top':
383
- $x = $pad_left;
384
- $y = ceil( $pad_top + $char_size['height'] + ( $char_size['height'] * $num ) );
385
- break;
386
- case 'left-center':
387
- $x = $pad_left;
388
- $y = ceil( ( $height / 2 - $h / 2 ) + $char_size['height'] + ( $char_size['height'] * $num ) );
389
- break;
390
- case 'left-bottom':
391
- $x = $pad_left;
392
- $y = ceil( ( $height - $pad_top ) - ( $char_size['height'] * $num ) );
393
- break;
394
- //-------------------------
395
- case 'center-top':
396
- $x = ceil( $width / 2 - $w / 2 );
397
- $y = ceil( $pad_top + $char_size['height'] + ( $char_size['height'] * $num ) );
398
- break;
399
- case 'center-center':
400
- $x = ceil( $width / 2 - $w / 2 );
401
- $y = ceil( ( $height / 2 - $h / 2 ) + $char_size['height'] + ( $char_size['height'] * $num ) );
402
- break;
403
- case 'center-bottom':
404
- $x = ceil( $width / 2 - $w / 2 );
405
- $y = ceil( ( $height - $pad_top ) - ( $char_size['height'] * $num ) );
406
- break;
407
- //-------------------------
408
- case 'right-top':
409
- $x = $width - $w - $pad_left;
410
- $y = ceil( $pad_top + $char_size['height'] + ( $char_size['height'] * $num ) );
411
- break;
412
- case 'right-center':
413
- $x = $width - $w - $pad_left;
414
- $y = ceil( ( $height / 2 - $h / 2 ) + $char_size['height'] + ( $char_size['height'] * $num ) );
415
- break;
416
- case 'right-bottom':
417
- $x = $width - $w - $pad_left;
418
- $y = ceil( ( $height - $pad_top ) - ( $char_size['height'] * $num ) );
419
- break;
420
- }
421
- //shadow
422
- if ( ! empty( $shadow_color ) ) {
423
- imagettftext( $this->image, $font_size, 0, $x + 2, $y + 2, $shadow_color, $font, trim( $line ) );
424
- }
425
-
426
- //text
427
- imagettftext( $this->image, $font_size, 0, (int) $x, (int) $y, $font_color, $font, trim( $line ) );
428
- //imagerectangle($this->image, 0,$y,$width,$y, 1);
429
- //imagerectangle($this->image, 0,$height/2,$width,$height/2, 2);
430
- }
431
-
432
- return true;
433
- } else {
434
- return false;
435
- }
436
- }
437
-
438
- /**
439
- * Save image
440
- *
441
- * @param string $text
442
- *
443
- * @return string
444
- */
445
- public function commas_cut( $text ) {
446
- return str_replace( ',', '', $text );
447
- }
448
-
449
- /**
450
- * Save image
451
- *
452
- * @param string $path
453
- * @param integer $quality
454
- * @param string $format
455
- */
456
- public function save( $path, $quality = 100, $format = 'jpg' ) {
457
- switch ( strtolower( $format ) ) {
458
- case 'jpg':
459
- case 'jpeg':
460
- imagejpeg( $this->image, $path, $quality );
461
- break;
462
- case 'png':
463
- imagepng( $this->image, $path );
464
- break;
465
- }
466
- }
467
-
468
- }
1
+ <?php
2
+
3
+ namespace WBCR\APT;
4
+
5
+ use WAPT_Plugin, Exception;
6
+
7
+ // Exit if accessed directly
8
+ if ( ! defined( 'ABSPATH' ) ) {
9
+ exit;
10
+ }
11
+
12
+ /**
13
+ * Class for image processing
14
+ *
15
+ * @author Artem Prikhodko <webtemyk@yandex.ru>
16
+ * @copyright (c) 2020 Webraftic Ltd
17
+ * @version 1.0
18
+ */
19
+ class Image {
20
+
21
+ /**
22
+ * @see self::app()
23
+ * @var Image
24
+ */
25
+ private static $app;
26
+
27
+ /**
28
+ * @var integer
29
+ */
30
+ public $width;
31
+
32
+ /**
33
+ * @var integer
34
+ */
35
+ public $height;
36
+
37
+ /**
38
+ * @var string
39
+ */
40
+ private $font_path = WAPT_PLUGIN_DIR . '/fonts/arial.ttf';
41
+
42
+ /**
43
+ * @var integer
44
+ */
45
+ public $font_size;
46
+
47
+ /**
48
+ * @var string|array
49
+ */
50
+ public $font_color;
51
+
52
+ /**
53
+ * @var string
54
+ */
55
+ public $text;
56
+
57
+ /**
58
+ * @var string
59
+ */
60
+ public $background;
61
+
62
+ /**
63
+ * @var string
64
+ */
65
+ private $reference_text = 'abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ-!?.,_"[]';
66
+
67
+ /**
68
+ * @var Resource
69
+ */
70
+ private $image;
71
+
72
+ /**
73
+ * @var string
74
+ */
75
+ public $padding_left = 0;
76
+
77
+ /**
78
+ * @var string
79
+ */
80
+ public $padding_top = 0;
81
+
82
+ /**
83
+ * @var string
84
+ */
85
+ public $line_spacing = 1;
86
+
87
+ /**
88
+ * @var array
89
+ */
90
+ public $params = array();
91
+
92
+ /**
93
+ * @return
94
+ */
95
+ public function getImage() {
96
+ return $this->image;
97
+ }
98
+
99
+ /**
100
+ * @param string $padding_left
101
+ * @param string $padding_top
102
+ */
103
+ public function setPadding( $padding_left, $padding_top ) {
104
+ $this->padding_left = $padding_left;
105
+ $this->padding_top = $padding_top;
106
+ }
107
+
108
+ /**
109
+ * @param int $width
110
+ */
111
+ public function setWidth( $width ) {
112
+ $this->width = $width;
113
+ }
114
+
115
+ /**
116
+ * @param int $height
117
+ */
118
+ public function setHeight( $height ) {
119
+ $this->height = $height;
120
+ }
121
+
122
+ /**
123
+ * @param string $font_path
124
+ */
125
+ public function setFontPath( $font_path ) {
126
+ if ( file_exists( $font_path ) ) {
127
+ $this->font_path = $font_path;
128
+ }
129
+ }
130
+
131
+ /**
132
+ * {PLUGIN_DIR}/fonts/{font}.ttf
133
+ *
134
+ * @param string $font
135
+ */
136
+ public function setFont( $font ) {
137
+ $this->font_path = WAPT_PLUGIN_DIR . "/fonts/{$font}.ttf";
138
+ }
139
+
140
+ /**
141
+ * @param int $font_size
142
+ */
143
+ public function setFontSize( $font_size ) {
144
+ $this->font_size = $font_size;
145
+ }
146
+
147
+ /**
148
+ * @param array|string $font_color
149
+ */
150
+ public function setFontColor( $font_color ) {
151
+ $this->font_color = $font_color;
152
+ }
153
+
154
+ /**
155
+ * @param string $text
156
+ */
157
+ public function setText( $text ) {
158
+ $this->text = $text;
159
+ }
160
+
161
+ /**
162
+ * @param array|string $background
163
+ */
164
+ public function setBackground( $background ) {
165
+ $this->background = $background;
166
+ }
167
+
168
+ /**
169
+ * Конструктор
170
+ *
171
+ * @param string $width
172
+ * @param string $height
173
+ * @param array|string $background = '#ffffff'
174
+ * @param string $font = ''
175
+ * @param integer $font_size = 0
176
+ * @param string $font_color = '#000000'
177
+ */
178
+ public function __construct( $width, $height, $background = '#ffffff', $font = '', $font_size = 0, $font_color = '#000000' ) {
179
+ self::$app = $this;
180
+
181
+ $this->width = $width;
182
+ $this->height = $height;
183
+ $this->background = $background;
184
+ $this->font_path = $font;
185
+ $this->font_size = $font_size;
186
+ $this->font_color = $font_color;
187
+
188
+ $this->image = $this->create( $width, $height, $background );
189
+ }
190
+
191
+ /**
192
+ * Статический метод для быстрого доступа к интерфейсу плагина.
193
+ *
194
+ * @return Image
195
+ */
196
+ public static function app() {
197
+ return self::$app;
198
+ }
199
+
200
+ /**
201
+ * Create image
202
+ *
203
+ * @return Resource
204
+ */
205
+ public function create( $width, $height, $background = '#ffffff' ) {
206
+ if ( is_numeric( $background ) ) { //image
207
+ $image = wp_get_attachment_metadata( $background );
208
+ if ( $image ) {
209
+ $upload_dir = wp_upload_dir();
210
+ $file_path = $upload_dir['basedir'] . '/' . $image['file'];
211
+ $file_type = wp_check_filetype( $file_path );
212
+ switch ( $file_type['type'] ) {
213
+ case 'image/jpeg':
214
+ $im = imagecreatefromjpeg( $file_path );
215
+ $this->setWidth( $image['width'] );
216
+ $this->setHeight( $image['height'] );
217
+ break;
218
+
219
+ case 'image/png':
220
+ $im = imagecreatefrompng( $file_path );
221
+ imagesavealpha( $im, true );
222
+ $this->setWidth( $image['width'] );
223
+ $this->setHeight( $image['height'] );
224
+ break;
225
+
226
+ default:
227
+ $im = $this->create( $width, $height );
228
+ break;
229
+ }
230
+ } else {
231
+ $im = $this->create( $width, $height );
232
+ }
233
+ } else { //color
234
+ $im = imagecreatetruecolor( $width, $height );
235
+ $color = $this->color_hex_to_rgb( $background );
236
+ $bg_color = imagecolorallocate( $im, $color['r'], $color['g'], $color['b'] );
237
+ imagefill( $im, 0, 0, $bg_color );
238
+ }
239
+
240
+ return $im;
241
+ }
242
+
243
+ /**
244
+ * Convert hex color to RGB
245
+ *
246
+ * @param string $hex
247
+ *
248
+ * @return array
249
+ */
250
+ private function color_hex_to_rgb( $hex = '' ) {
251
+ if ( empty( $hex ) ) {
252
+ $hex = $this->font_color;
253
+ }
254
+ list( $r, $g, $b ) = sscanf( $hex, '#%02x%02x%02x' );
255
+
256
+ return array(
257
+ 'r' => $r,
258
+ 'g' => $g,
259
+ 'b' => $b,
260
+ );
261
+ }
262
+
263
+ /**
264
+ * Get width of the letter in the font.
265
+ *
266
+ * return array(
267
+ * 'width' => int
268
+ * 'height' => int
269
+ * );
270
+ * OR false
271
+ *
272
+ * @return array|false
273
+ */
274
+ public function get_font_char_size() {
275
+ if ( $this->font_path !== '' && $this->font_size !== 0 ) {
276
+
277
+ $text = ! empty( $this->text ) ? $this->text : $this->reference_text;
278
+ //$txt_image = $this->create( 500, 500 );
279
+ $box = imagettfbbox( $this->font_size, 0, $this->font_path, $text );
280
+ $width = $box[2] - $box[0];
281
+ $height = $box[1] - $box[7];
282
+ $result = array(
283
+ 'width' => ceil( $width / strlen( $text ) ), //средняя ширина одного символа
284
+ 'height' => $height, //высота одного символа
285
+ );
286
+
287
+ return $result;
288
+ } else {
289
+ return false;
290
+ }
291
+ }
292
+
293
+ /**
294
+ * Write text on the image
295
+ *
296
+ * @param string $text
297
+ * @param string $font = ''
298
+ * @param integer $font_size = 0
299
+ * @param string $font_color = '#000000'
300
+ * @param string $align
301
+ * @param string $valign
302
+ * @param float $line_spacing
303
+ * @param string $shadow_color
304
+ *
305
+ * @return bool
306
+ */
307
+ public function write_text( $text, $font = '', $font_size = '', $font_color = '', $align = 'left', $valign = 'top', $line_spacing = '1.5', $shadow_color = '' ) {
308
+ if ( ! empty( $text ) ) {
309
+ $text = mb_convert_encoding( $text, 'UTF-8' );
310
+
311
+ if ( empty( $font ) ) {
312
+ $font = $this->font_path;
313
+ }
314
+ if ( empty( $font_size ) ) {
315
+ $font_size = $this->font_size;
316
+ }
317
+ if ( empty( $font_color ) ) {
318
+ $font_color = $this->font_color;
319
+ }
320
+ $this->setText( $text );
321
+ $char_size = $this->get_font_char_size();
322
+
323
+ $pad_left = (int) $this->padding_left;
324
+ $pad_top = (int) $this->padding_top;
325
+
326
+ $color = $this->color_hex_to_rgb( $font_color );
327
+ $font_color = imagecolorallocate( $this->image, $color['r'], $color['g'], $color['b'] );
328
+ if ( ! empty( $shadow_color ) ) {
329
+ $color = $this->color_hex_to_rgb( $shadow_color );
330
+ $shadow_color = imagecolorallocate( $this->image, $color['r'], $color['g'], $color['b'] );
331
+ }
332
+ $line_spacing = (float) $line_spacing;
333
+
334
+ $width = $this->width - $pad_left * 2;
335
+ $height = $this->height - $pad_top * 2;
336
+
337
+ $chars_per_line = ceil( $width / $char_size['width'] * 0.9 ); //count of chars per line
338
+ $text2 = wordwrap( $text, $chars_per_line, "\n", false );
339
+ $text2 = str_replace( '[br]', "\n", $text2 );
340
+ $line_count = count( explode( "\n", $text2 ) );
341
+ $lines = explode( "\n", $text2 );
342
+ for ( $i = 0; $i < $line_count; $i ++ ) {
343
+ $box = imagettfbbox( $font_size, 0, $font, $this->commas_cut( $lines[ $i ] ) );
344
+ $w = $box[4] - $box[6];
345
+ if ( $w > $width ) {
346
+ $font_size --;
347
+ $i = 0;
348
+ }
349
+ }
350
+
351
+ $text_height = $line_count * $char_size['height'];
352
+ while ( $text_height > $height || ( $height - $text_height <= ( 2 * $pad_left ) ) ) {
353
+ $this->font_size --;
354
+ $font_size --;
355
+ $char_size = $this->get_font_char_size();
356
+ if ( ! $char_size ) {
357
+ break;
358
+ }
359
+ $line_width = ceil( $width / $char_size['width'] * 0.9 ); //count of chars per line
360
+ $text2 = wordwrap( $text, (int) $line_width, "\n", false );
361
+ $text2 = str_replace( '[br]', "\n", $text2 );
362
+ $line_count = count( explode( "\n", $text2 ) );
363
+ $text_height = $line_count * ( $char_size['height'] * $line_spacing );
364
+ }
365
+ $width = $this->width;
366
+ $height = $this->height;
367
+
368
+ $lines = explode( "\n", $text2 );
369
+ if ( $valign == 'bottom' ) {
370
+ $lines = array_reverse( $lines );
371
+ }
372
+
373
+ foreach ( $lines as $key => $line ) {
374
+ $box = imagettfbbox( $font_size, 0, $font, $this->commas_cut( $line ) );
375
+ $h = $char_size['height'] * count( $lines ) + ( $line_spacing - 1 ) * $char_size['height'] * count( $lines );
376
+ $w = $box[4] - $box[6];
377
+ $num = $line_spacing * $key;
378
+
379
+ $x = 0;
380
+ $y = 0;
381
+ switch ( $align . '-' . $valign ) {
382
+ case 'left-top':
383
+ $x = $pad_left;
384
+ $y = ceil( $pad_top + $char_size['height'] + ( $char_size['height'] * $num ) );
385
+ break;
386
+ case 'left-center':
387
+ $x = $pad_left;
388
+ $y = ceil( ( $height / 2 - $h / 2 ) + $char_size['height'] + ( $char_size['height'] * $num ) );
389
+ break;
390
+ case 'left-bottom':
391
+ $x = $pad_left;
392
+ $y = ceil( ( $height - $pad_top ) - ( $char_size['height'] * $num ) );
393
+ break;
394
+ //-------------------------
395
+ case 'center-top':
396
+ $x = ceil( $width / 2 - $w / 2 );
397
+ $y = ceil( $pad_top + $char_size['height'] + ( $char_size['height'] * $num ) );
398
+ break;
399
+ case 'center-center':
400
+ $x = ceil( $width / 2 - $w / 2 );
401
+ $y = ceil( ( $height / 2 - $h / 2 ) + $char_size['height'] + ( $char_size['height'] * $num ) );
402
+ break;
403
+ case 'center-bottom':
404
+ $x = ceil( $width / 2 - $w / 2 );
405
+ $y = ceil( ( $height - $pad_top ) - ( $char_size['height'] * $num ) );
406
+ break;
407
+ //-------------------------
408
+ case 'right-top':
409
+ $x = $width - $w - $pad_left;
410
+ $y = ceil( $pad_top + $char_size['height'] + ( $char_size['height'] * $num ) );
411
+ break;
412
+ case 'right-center':
413
+ $x = $width - $w - $pad_left;
414
+ $y = ceil( ( $height / 2 - $h / 2 ) + $char_size['height'] + ( $char_size['height'] * $num ) );
415
+ break;
416
+ case 'right-bottom':
417
+ $x = $width - $w - $pad_left;
418
+ $y = ceil( ( $height - $pad_top ) - ( $char_size['height'] * $num ) );
419
+ break;
420
+ }
421
+ //shadow
422
+ if ( ! empty( $shadow_color ) ) {
423
+ imagettftext( $this->image, $font_size, 0, $x + 2, $y + 2, $shadow_color, $font, trim( $line ) );
424
+ }
425
+
426
+ //text
427
+ imagettftext( $this->image, $font_size, 0, (int) $x, (int) $y, $font_color, $font, trim( $line ) );
428
+ //imagerectangle($this->image, 0,$y,$width,$y, 1);
429
+ //imagerectangle($this->image, 0,$height/2,$width,$height/2, 2);
430
+ }
431
+
432
+ return true;
433
+ } else {
434
+ return false;
435
+ }
436
+ }
437
+
438
+ /**
439
+ * Save image
440
+ *
441
+ * @param string $text
442
+ *
443
+ * @return string
444
+ */
445
+ public function commas_cut( $text ) {
446
+ return str_replace( ',', '', $text );
447
+ }
448
+
449
+ /**
450
+ * Save image
451
+ *
452
+ * @param string $path
453
+ * @param integer $quality
454
+ * @param string $format
455
+ */
456
+ public function save( $path, $quality = 100, $format = 'jpg' ) {
457
+ switch ( strtolower( $format ) ) {
458
+ case 'jpg':
459
+ case 'jpeg':
460
+ imagejpeg( $this->image, $path, $quality );
461
+ break;
462
+ case 'png':
463
+ imagepng( $this->image, $path );
464
+ break;
465
+ }
466
+ }
467
+
468
+ }
includes/class.generate-result.php CHANGED
@@ -1,164 +1,174 @@
1
- <?php
2
-
3
- namespace WBCR\APT;
4
-
5
- // Exit if accessed directly
6
- if ( ! defined( 'ABSPATH' ) ) {
7
- exit;
8
- }
9
-
10
- class GenerateResult {
11
-
12
- /**
13
- * @var int
14
- */
15
- private $post_id;
16
-
17
- /**
18
- * @var int
19
- */
20
- public $thumbnail_id;
21
-
22
- /**
23
- * @var string
24
- */
25
- private $generate_method;
26
-
27
- /**
28
- * @var string
29
- */
30
- public $status;
31
-
32
- /**
33
- * @var string
34
- */
35
- public $message;
36
-
37
- /**
38
- * @var array
39
- */
40
- private $methods;
41
-
42
- /**
43
- * GenerateResult constructor.
44
- *
45
- * @param int $post_id
46
- * @param string $generate_method
47
- */
48
- public function __construct( $post_id, $generate_method = '' ) {
49
- $this->methods = [
50
- 'find' => __( 'Find in post', 'apt' ),
51
- 'generate' => __( 'Generate from title', 'apt' ),
52
- 'both' => __( 'Find or generate', 'apt' ),
53
- 'google' => __( 'Google', 'apt' ),
54
- 'find_google' => __( 'Find or Google', 'apt' ),
55
- ];
56
-
57
- $this->post_id = $post_id;
58
- $this->generate_method = $this->getMethod( $generate_method );
59
- }
60
-
61
- /**
62
- * Set the result data.
63
- *
64
- * @param string $message
65
- * @param int $thumbnail_id
66
- * @param string $status
67
- */
68
- public function setResult( $message = '', $thumbnail_id = 0, $status = '' ) {
69
-
70
- $this->thumbnail_id = $thumbnail_id;
71
- $this->status = ! empty( $status ) ? $status : __( 'Done', 'apt' );
72
- $this->message = $message;
73
- }
74
-
75
- /**
76
- * Return self with result data.
77
- *
78
- * @param string $message
79
- * @param int $thumbnail_id
80
- * @param string $status
81
- *
82
- * @return self
83
- */
84
- public function result( $message = '', $thumbnail_id = 0, $status = '' ) {
85
- $this->setResult( $message, $thumbnail_id, $status );
86
-
87
- return $this;
88
- }
89
-
90
- /**
91
- * @param $method
92
- *
93
- * @return string
94
- */
95
- private function getMethod( $method ) {
96
- return $this->methods[ $method ] ?? '';
97
- }
98
-
99
- /**
100
- * @return string
101
- */
102
- public function get_generate_method() {
103
- return $this->generate_method;
104
- }
105
-
106
- private function get_file_size( $url ) {
107
- $path = '';
108
- $parsed_url = parse_url( $url );
109
- if ( empty( $parsed_url['path'] ) ) {
110
- return '';
111
- }
112
- $file = ABSPATH . ltrim( $parsed_url['path'], '/' );
113
- if ( file_exists( $file ) ) {
114
- $bytes = filesize( $file );
115
- $s = array( 'b', 'Kb', 'Mb', 'Gb' );
116
- $e = floor( log( $bytes ) / log( 1024 ) );
117
-
118
- return sprintf( '%d ' . $s[ $e ], ( $bytes / pow( 1024, floor( $e ) ) ) );
119
- }
120
-
121
- return '';
122
-
123
- }
124
-
125
- /**
126
- * @return array
127
- */
128
- public function getData( $write_to_log = false ) {
129
- if ( $this->thumbnail_id ) {
130
- $data = [
131
- [
132
- 'post_id' => $this->post_id,
133
- 'thumbnail_url' => wp_get_attachment_image_url( $this->thumbnail_id, 'thumbnail' ),
134
- 'url' => get_permalink( $this->post_id ),
135
- 'title' => get_post( $this->post_id )->post_title,
136
- 'image_size' => $this->get_file_size( wp_get_attachment_image_url( $this->thumbnail_id, 'full' ) ),
137
- 'type' => $this->get_generate_method(),
138
- 'status' => $this->status,
139
- ],
140
- ];
141
- } else {
142
- $data = [
143
- [
144
- 'post_id' => $this->post_id,
145
- 'url' => get_permalink( $this->post_id ),
146
- 'title' => get_post( $this->post_id )->post_title,
147
- 'type' => $this->get_generate_method(),
148
- 'status' => $this->status,
149
- 'error_msg' => $this->message,
150
- ]
151
- ];
152
- }
153
-
154
- if ( $write_to_log ) {
155
- $log = \WAPT_Plugin::app()->getPopulateOption( 'generation_log', [] );
156
- if ( count( $log ) > 100 ) {
157
- $log = array_slice( $log, 0, 100 );
158
- }
159
- \WAPT_Plugin::app()->updatePopulateOption( 'generation_log', array_merge( $data, $log ) );
160
- }
161
-
162
- return $data;
163
- }
164
- }
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WBCR\APT;
4
+
5
+ // Exit if accessed directly
6
+ if ( ! defined( 'ABSPATH' ) ) {
7
+ exit;
8
+ }
9
+
10
+ /**
11
+ * Result class
12
+ */
13
+ class GenerateResult {
14
+
15
+ /**
16
+ * @var int
17
+ */
18
+ private $post_id;
19
+
20
+ /**
21
+ * @var int
22
+ */
23
+ public $thumbnail_id;
24
+
25
+ /**
26
+ * @var string
27
+ */
28
+ private $generate_method;
29
+
30
+ /**
31
+ * @var string
32
+ */
33
+ public $status;
34
+
35
+ /**
36
+ * @var string
37
+ */
38
+ public $message;
39
+
40
+ /**
41
+ * @var array
42
+ */
43
+ private $methods;
44
+
45
+ /**
46
+ * GenerateResult constructor.
47
+ *
48
+ * @param int $post_id Post ID
49
+ * @param string $generate_method Generate method
50
+ */
51
+ public function __construct( $post_id, $generate_method = '' ) {
52
+ $this->methods = [
53
+ 'find' => __( 'Find in post', 'apt' ),
54
+ 'generate' => __( 'Generate from title', 'apt' ),
55
+ 'both' => __( 'Find or generate', 'apt' ),
56
+ 'google' => __( 'Google', 'apt' ),
57
+ 'find_google' => __( 'Find or Google', 'apt' ),
58
+ ];
59
+
60
+ $this->post_id = $post_id;
61
+ $this->generate_method = $this->getMethod( $generate_method );
62
+ }
63
+
64
+ /**
65
+ * Set the result data.
66
+ *
67
+ * @param string $message Message
68
+ * @param int $thumbnail_id Thumbnail ID
69
+ * @param string $status Status
70
+ */
71
+ public function setResult( $message = '', $thumbnail_id = 0, $status = '' ) {
72
+
73
+ $this->thumbnail_id = $thumbnail_id;
74
+ $this->status = ! empty( $status ) ? $status : __( 'Done', 'apt' );
75
+ $this->message = $message;
76
+ }
77
+
78
+ /**
79
+ * Return self with result data.
80
+ *
81
+ * @param string $message Message
82
+ * @param int $thumbnail_id Thumbnail ID
83
+ * @param string $status Status
84
+ *
85
+ * @return self
86
+ */
87
+ public function result( $message = '', $thumbnail_id = 0, $status = '' ) {
88
+ $this->setResult( $message, $thumbnail_id, $status );
89
+
90
+ return $this;
91
+ }
92
+
93
+ /**
94
+ * @param string $method Method
95
+ *
96
+ * @return string
97
+ */
98
+ private function getMethod( $method ) {
99
+ return $this->methods[ $method ] ?? '';
100
+ }
101
+
102
+ /**
103
+ * @return string
104
+ */
105
+ public function get_generate_method() {
106
+ return $this->generate_method;
107
+ }
108
+
109
+ /**
110
+ * @param string $url File URL
111
+ *
112
+ * @return string
113
+ */
114
+ private function get_file_size( $url ) {
115
+ $path = '';
116
+ $parsed_url = parse_url( $url );
117
+ if ( empty( $parsed_url['path'] ) ) {
118
+ return '';
119
+ }
120
+ $file = ABSPATH . ltrim( $parsed_url['path'], '/' );
121
+ if ( file_exists( $file ) ) {
122
+ $bytes = filesize( $file );
123
+ $s = array( 'b', 'Kb', 'Mb', 'Gb' );
124
+ $e = floor( log( $bytes ) / log( 1024 ) );
125
+
126
+ return sprintf( '%d ' . $s[ $e ], ( $bytes / pow( 1024, floor( $e ) ) ) );
127
+ }
128
+
129
+ return '';
130
+
131
+ }
132
+
133
+ /**
134
+ * @param bool $write_to_log is write to log?
135
+ *
136
+ * @return array
137
+ */
138
+ public function getData( $write_to_log = false ) {
139
+ if ( $this->thumbnail_id ) {
140
+ $data = [
141
+ [
142
+ 'post_id' => $this->post_id,
143
+ 'thumbnail_url' => wp_get_attachment_image_url( $this->thumbnail_id, 'thumbnail' ),
144
+ 'url' => get_permalink( $this->post_id ),
145
+ 'title' => get_post( $this->post_id )->post_title,
146
+ 'image_size' => $this->get_file_size( wp_get_attachment_image_url( $this->thumbnail_id, 'full' ) ),
147
+ 'type' => $this->get_generate_method(),
148
+ 'status' => $this->status,
149
+ ],
150
+ ];
151
+ } else {
152
+ $data = [
153
+ [
154
+ 'post_id' => $this->post_id,
155
+ 'url' => get_permalink( $this->post_id ),
156
+ 'title' => get_post( $this->post_id )->post_title,
157
+ 'type' => $this->get_generate_method(),
158
+ 'status' => $this->status,
159
+ 'error_msg' => $this->message,
160
+ ],
161
+ ];
162
+ }
163
+
164
+ if ( $write_to_log ) {
165
+ $log = \WAPT_Plugin::app()->getPopulateOption( 'generation_log', [] );
166
+ if ( count( $log ) > 100 ) {
167
+ $log = array_slice( $log, 0, 100 );
168
+ }
169
+ \WAPT_Plugin::app()->updatePopulateOption( 'generation_log', array_merge( $data, $log ) );
170
+ }
171
+
172
+ return $data;
173
+ }
174
+ }
includes/controls/class.color.php CHANGED
@@ -1,56 +1,55 @@
1
- <?php
2
- /**
3
- * Color
4
- *
5
- * Main options:
6
- * name => a name of the control
7
- * value => a value to show in the control
8
- * default => a default value of the control if the "value" option is not specified
9
- *
10
- * @author Artem Prihodko <webtemyk@yandex.ru>
11
- * @copyright (c) 2020, Webcraftic Ltd
12
- *
13
- */
14
-
15
- // Exit if accessed directly
16
- if ( ! defined( 'ABSPATH' ) ) {
17
- exit;
18
- }
19
-
20
- if ( ! class_exists( 'Wapt_FactoryForms_ColorControl' ) ) {
21
-
22
- class Wapt_FactoryForms_ColorControl extends Wbcr_FactoryForms449_Control {
23
-
24
- public $type = 'wapt-color';
25
-
26
- /**
27
- * Shows the html markup of the control.
28
- *
29
- * @return void
30
- * @since 1.0.0
31
- */
32
- public function html() {
33
- $name = $this->getNameOnForm();
34
- $value = esc_attr( $this->getValue() );
35
-
36
- if ( ! $value ) {
37
- $value = '#ffffff';
38
- }
39
- ?>
40
-
41
- <style>
42
- .wapt-jscolor
43
- {
44
- padding: 15px !important;
45
- font-size: 16px !important;
46
- cursor: pointer;
47
- }
48
- </style>
49
- <div <?php $this->attrs() ?>>
50
- <input type="text" id="<?php echo $name; ?>" name="<?php echo $name; ?>"
51
- class="factory-input-text jscolor wapt-jscolor" value="<?php echo $value; ?>">
52
- </div>
53
- <?php
54
- }
55
- }
56
- }
1
+ <?php
2
+ /**
3
+ * Color
4
+ *
5
+ * Main options:
6
+ * name => a name of the control
7
+ * value => a value to show in the control
8
+ * default => a default value of the control if the "value" option is not specified
9
+ *
10
+ * @author Artem Prihodko <webtemyk@yandex.ru>
11
+ * @copyright (c) 2020, Webcraftic Ltd
12
+ */
13
+
14
+ // Exit if accessed directly
15
+ if ( ! defined( 'ABSPATH' ) ) {
16
+ exit;
17
+ }
18
+
19
+ if ( ! class_exists( 'Wapt_FactoryForms_ColorControl' ) ) {
20
+
21
+ class Wapt_FactoryForms_ColorControl extends Wbcr_FactoryForms450_Control {
22
+
23
+ public $type = 'wapt-color';
24
+
25
+ /**
26
+ * Shows the html markup of the control.
27
+ *
28
+ * @return void
29
+ * @since 1.0.0
30
+ */
31
+ public function html() {
32
+ $name = $this->getNameOnForm();
33
+ $value = esc_attr( $this->getValue() );
34
+
35
+ if ( ! $value ) {
36
+ $value = '#ffffff';
37
+ }
38
+ ?>
39
+
40
+ <style>
41
+ .wapt-jscolor
42
+ {
43
+ padding: 15px !important;
44
+ font-size: 16px !important;
45
+ cursor: pointer;
46
+ }
47
+ </style>
48
+ <div <?php $this->attrs(); ?>>
49
+ <input type="text" id="<?php echo esc_attr( $name ); ?>" name="<?php echo esc_attr( $name ); ?>"
50
+ class="factory-input-text jscolor wapt-jscolor" value="<?php echo esc_attr( $value ); ?>">
51
+ </div>
52
+ <?php
53
+ }
54
+ }
55
+ }
 
includes/controls/class.fonts.php CHANGED
@@ -22,7 +22,7 @@ if ( ! defined( 'ABSPATH' ) ) {
22
 
23
  if ( ! class_exists( 'Wapt_FactoryForms_FontsControl' ) ) {
24
 
25
- class Wapt_FactoryForms_FontsControl extends Wbcr_FactoryForms449_DropdownControl {
26
 
27
  public $type = 'wapt-fonts';
28
 
@@ -33,36 +33,40 @@ if ( ! class_exists( 'Wapt_FactoryForms_FontsControl' ) ) {
33
  * @since 1.0.0
34
  */
35
  public function assets() {
36
- wp_enqueue_script( 'apt-upload-font', WAPT_PLUGIN_URL . '/admin/assets/js/upload-font.js', [], false, true );
37
  wp_localize_script( 'apt-upload-font', 'wapt_upload_font', [ 'nonce' => wp_create_nonce( 'wapt_upload_font' ) ] );
38
  ?>
39
- <style>
40
- .wapt-upload-div {
41
- margin: 10px 0px;
42
- display: inline;
43
- vertical-align: middle;
44
- margin-left: -5px !important;
45
- }
46
-
47
- .wapt-upload-button {
48
- height: 34px;
49
- box-shadow: 1px 1px 5px -2px #8e8d8d;
50
- border: 1px solid #ccc;
51
- border-radius: 0px 3px 3px 0px;
52
- }
53
-
54
- .wapt-upload-loader {
55
- height: 34px;
56
- display: inline;
57
- margin-left: 5px !important;
58
- }
59
-
60
- .wapt-loader-invisible {
61
- display: none !important;
62
- }
63
-
64
-
65
- </style>
 
 
 
 
66
  <?php
67
  }
68
 
@@ -80,13 +84,14 @@ if ( ! class_exists( 'Wapt_FactoryForms_FontsControl' ) ) {
80
 
81
  $this->assets();
82
  ?>
83
- <div class="wapt-upload-div">
84
- <input type="file" accept=".ttf" id="wapt-font-file" style="display: none;">
85
- <button id="wapt-upload-button" class="wapt-upload-button">Upload custom font</button>
86
- <div id="wapt-upload-loader" class="wapt-upload-loader wapt-loader-invisible"><img
87
- src="<?php echo WAPT_PLUGIN_URL; ?>/admin/assets/img/ajax-loader.gif" alt="" height="34">
88
- </div>
89
- </div>
 
90
  <?php
91
 
92
  }
22
 
23
  if ( ! class_exists( 'Wapt_FactoryForms_FontsControl' ) ) {
24
 
25
+ class Wapt_FactoryForms_FontsControl extends Wbcr_FactoryForms450_DropdownControl {
26
 
27
  public $type = 'wapt-fonts';
28
 
33
  * @since 1.0.0
34
  */
35
  public function assets() {
36
+ wp_enqueue_script( 'apt-upload-font', WAPT_PLUGIN_URL . '/admin/assets/js/upload-font.js', [], WAPT_PLUGIN_VERSION, true );
37
  wp_localize_script( 'apt-upload-font', 'wapt_upload_font', [ 'nonce' => wp_create_nonce( 'wapt_upload_font' ) ] );
38
  ?>
39
+ <style>
40
+ .wapt-upload-div
41
+ {
42
+ margin: 10px 0px;
43
+ display: inline;
44
+ vertical-align: middle;
45
+ margin-left: -5px !important;
46
+ }
47
+
48
+ .wapt-upload-button
49
+ {
50
+ height: 34px;
51
+ box-shadow: 1px 1px 5px -2px #8e8d8d;
52
+ border: 1px solid #ccc;
53
+ border-radius: 0px 3px 3px 0px;
54
+ }
55
+
56
+ .wapt-upload-loader
57
+ {
58
+ height: 34px;
59
+ display: inline;
60
+ margin-left: 5px !important;
61
+ }
62
+
63
+ .wapt-loader-invisible
64
+ {
65
+ display: none !important;
66
+ }
67
+
68
+
69
+ </style>
70
  <?php
71
  }
72
 
84
 
85
  $this->assets();
86
  ?>
87
+ <div class="wapt-upload-div">
88
+ <input type="file" accept=".ttf" id="wapt-font-file" style="display: none;">
89
+ <button id="wapt-upload-button" class="wapt-upload-button">Upload custom font</button>
90
+ <div id="wapt-upload-loader" class="wapt-upload-loader wapt-loader-invisible">
91
+ <img src="<?php echo esc_url_raw( WAPT_PLUGIN_URL . '/admin/assets/img/ajax-loader.gif' ); ?>"
92
+ alt="" height="34">
93
+ </div>
94
+ </div>
95
  <?php
96
 
97
  }
includes/controls/class.mediabutton.php CHANGED
@@ -20,7 +20,7 @@ if ( ! defined( 'ABSPATH' ) ) {
20
 
21
  if ( ! class_exists( 'Wapt_FactoryForms_MediaButtonControl' ) ) {
22
 
23
- class Wapt_FactoryForms_MediaButtonControl extends Wbcr_FactoryForms449_Control {
24
 
25
  public $type = 'wapt-mediabutton';
26
 
@@ -50,59 +50,64 @@ if ( ! class_exists( 'Wapt_FactoryForms_MediaButtonControl' ) ) {
50
  }
51
  }
52
  ?>
53
- <style>
54
- .wapt-bg-image-thumb {
55
- margin: 10px 0px;
56
- border-radius: 10px;
57
- box-shadow: 2px 2px 5px 0px rgba(0, 0, 0, 0.5);
58
- }
 
59
 
60
- .wapt-invisible {
61
- display: none;
62
- }
 
63
 
64
- .wapt-visible {
65
- display: block;
66
- }
67
- </style>
68
- <script lang="js">
69
- jQuery(function ($) {
 
70
 
71
- var frame;
72
- $(document).on('click', '#wapt-select-image', function (event) {
73
- event.preventDefault();
74
- if (frame) {
75
- frame.open();
76
- return;
77
- }
78
 
79
- frame = wp.media({
80
- //title : 'Выберите файл',
81
- button: {
82
- //text: 'Использовать этот файл'
83
- },
84
- multiple: false
85
- });
86
- frame.on('select', function () {
87
- var attachment = frame.state().get('selection').first().toJSON();
88
- var thumb = $('#wapt-bg-image-thumb');
89
- $('#<?php echo $name; ?>').val(attachment.id);
90
- thumb.attr('src', attachment.sizes.thumbnail.url);
91
- thumb.removeClass('wapt-bg-image-invisible').addClass('wapt-visible');
92
 
93
- });
94
- frame.open();
95
- });
96
- });
97
- </script>
98
- <div <?php $this->attrs() ?>>
99
- <img src="<?php echo $thumbnail_url ?>" alt="" class="wapt-bg-image-thumb <?php echo $image_class; ?>"
100
- id="wapt-bg-image-thumb">
101
- <button class="button button-primary button-large <?php echo $name; ?>"
102
- id="wapt-select-image"><?php echo $button_text; ?></button>
103
- <input type="hidden" id="<?php echo $name; ?>" name="<?php echo $name; ?>" class="factory-input-text"
104
- value="<?php echo $value; ?>">
105
- </div>
 
 
106
  <?php
107
  }
108
  }
20
 
21
  if ( ! class_exists( 'Wapt_FactoryForms_MediaButtonControl' ) ) {
22
 
23
+ class Wapt_FactoryForms_MediaButtonControl extends Wbcr_FactoryForms450_Control {
24
 
25
  public $type = 'wapt-mediabutton';
26
 
50
  }
51
  }
52
  ?>
53
+ <style>
54
+ .wapt-bg-image-thumb
55
+ {
56
+ margin: 10px 0px;
57
+ border-radius: 10px;
58
+ box-shadow: 2px 2px 5px 0px rgba(0, 0, 0, 0.5);
59
+ }
60
 
61
+ .wapt-invisible
62
+ {
63
+ display: none;
64
+ }
65
 
66
+ .wapt-visible
67
+ {
68
+ display: block;
69
+ }
70
+ </style>
71
+ <script lang="js">
72
+ jQuery(function ($) {
73
 
74
+ var frame;
75
+ $(document).on('click', '#wapt-select-image', function (event) {
76
+ event.preventDefault();
77
+ if (frame) {
78
+ frame.open();
79
+ return;
80
+ }
81
 
82
+ frame = wp.media({
83
+ //title : 'Выберите файл',
84
+ button: {
85
+ //text: 'Использовать этот файл'
86
+ },
87
+ multiple: false
88
+ });
89
+ frame.on('select', function () {
90
+ var attachment = frame.state().get('selection').first().toJSON();
91
+ var thumb = $('#wapt-bg-image-thumb');
92
+ $('#<?php echo esc_html( $name ); ?>').val(attachment.id);
93
+ thumb.attr('src', attachment.sizes.thumbnail.url);
94
+ thumb.removeClass('wapt-bg-image-invisible').addClass('wapt-visible');
95
 
96
+ });
97
+ frame.open();
98
+ });
99
+ });
100
+ </script>
101
+ <div <?php $this->attrs(); ?>>
102
+ <img src="<?php echo esc_url_raw( $thumbnail_url ); ?>" alt=""
103
+ class="wapt-bg-image-thumb <?php echo esc_attr( $image_class ); ?>"
104
+ id="wapt-bg-image-thumb">
105
+ <button class="button button-primary button-large <?php echo esc_attr( $name ); ?>"
106
+ id="wapt-select-image"><?php echo esc_html( $button_text ); ?></button>
107
+ <input type="hidden" id="<?php echo esc_attr( $name ); ?>" name="<?php echo esc_attr( $name ); ?>"
108
+ class="factory-input-text"
109
+ value="<?php echo esc_html( $value ); ?>">
110
+ </div>
111
  <?php
112
  }
113
  }
includes/image-search/boot.php CHANGED
@@ -1,7 +1,7 @@
1
- <?php
2
-
3
- require_once("interface-image-search.php");
4
- require_once("class-google-images.php");
5
- require_once( "result/class.founded-image.php" );
6
- require_once( "result/class.google-founded-image.php" );
7
- require_once( "result/class.response.php" );
1
+ <?php
2
+
3
+ require_once 'interface-image-search.php';
4
+ require_once 'class-google-images.php';
5
+ require_once 'result/class.founded-image.php';
6
+ require_once 'result/class.google-founded-image.php';
7
+ require_once 'result/class.response.php';
includes/image-search/class-google-images.php CHANGED
@@ -1,100 +1,103 @@
1
- <?php
2
-
3
- namespace WBCR\APT;
4
-
5
- use WAPT_Plugin, Exception;
6
-
7
- // Exit if accessed directly
8
- if ( ! defined( 'ABSPATH' ) ) {
9
- exit;
10
- }
11
-
12
- class GoogleImages implements ImageSearch {
13
- const URL = 'https://www.googleapis.com/customsearch/v1';
14
-
15
- /**
16
- * @var string
17
- */
18
- private $key;
19
-
20
- /**
21
- * @var string
22
- */
23
- private $cse;
24
-
25
- public function __construct() {
26
- $this->key = WAPT_Plugin::app()->getPopulateOption( 'google_apikey' );
27
- $this->cse = WAPT_Plugin::app()->getPopulateOption( 'google_cse' );
28
- }
29
-
30
-
31
- /**
32
- * @param string $query
33
- * @param int $page
34
- *
35
- * @return SearchResponse
36
- * @throws Exception
37
- */
38
- public function search( $query, $page ) {
39
- if ( isset( $_POST['rights'] ) && (int) $_POST['rights'] ) {
40
- $rights = "&rights=(cc_publicdomain%7Ccc_attribute%7Ccc_sharealike).-(cc_noncommercial%7Ccc_nonderived)";
41
- } else {
42
- $rights = '';
43
- }
44
-
45
- $start = ( ( $page - 1 ) * 10 ) + 1;
46
- $url = sprintf( "%s?%s", self::URL, http_build_query( [
47
- 'searchType' => 'image',
48
- 'start' => $start . $rights,
49
- 'q' => $query,
50
- 'key' => $this->key,
51
- 'cx' => $this->cse,
52
- ] ) );
53
-
54
- /**
55
- * @var array|null $limit = [
56
- * 'expires' => 0 | int,
57
- * 'count' => 10 | int,
58
- * ]
59
- */
60
- $limit = WAPT_Plugin::app()->getPopulateOption( 'google_limit', [ 'expires' => time(), 'count' => 10 ] );
61
- if ( time() - $limit['expires'] > 3600 ) {
62
- $limit['expires'] = time();
63
- $limit['count'] = 10;
64
- WAPT_Plugin::app()->updateOption( 'google_limit', $limit );
65
- }
66
-
67
- if ( ! WAPT_Plugin::app()->premium->is_active() && ! WAPT_Plugin::app()->premium->is_activate() ) {
68
- if ( $limit['count'] < 1 ) {
69
- WAPT_Plugin::app()->logger->warning( __( 'You have reached the limit at the moment. Try again in an 1 hour', 'apt' ) );
70
- throw new Exception( sprintf( __( 'You have reached the limit at the moment. Try again in an 1 hour or <a href="%s">Upgrade to Premium</a>', 'apt' ), WAPT_Plugin::app()->get_support()->get_pricing_url( true, 'license_page' ) ) );
71
- }
72
- $limit['count'] --;
73
- }
74
-
75
- if ( $start === 1 ) {
76
- WAPT_Plugin::app()->updateOption( 'google_limit', $limit );
77
- }
78
-
79
- $response = wp_remote_get( $url, [ 'timeout' => 100 ] );
80
- if ( is_wp_error( $response ) ) {
81
- WAPT_Plugin::app()->logger->error( 'Google search error: ' . $response->get_error_message() );
82
- throw new Exception( 'Error: ' . $response->get_error_message() );
83
- }
84
-
85
- $images = [];
86
- $error = null;
87
- $response = json_decode( $response['body'], true );
88
- if ( isset( $response['error'] ) ) {
89
- $error = $response['error']['message'];
90
- } elseif ( isset( $response['items'] ) && is_array( $response['items'] ) ) {
91
- foreach ( $response['items'] as $item ) {
92
- $image = new GoogleFoundedImage( $item );
93
-
94
- $images[] = $image;
95
- }
96
- }
97
-
98
- return new SearchResponse( $images, $error );
99
- }
100
- }
 
 
 
1
+ <?php
2
+
3
+ namespace WBCR\APT;
4
+
5
+ use WAPT_Plugin, Exception;
6
+
7
+ // Exit if accessed directly
8
+ if ( ! defined( 'ABSPATH' ) ) {
9
+ exit;
10
+ }
11
+
12
+ class GoogleImages implements ImageSearch {
13
+ const URL = 'https://www.googleapis.com/customsearch/v1';
14
+
15
+ /**
16
+ * @var string
17
+ */
18
+ private $key;
19
+
20
+ /**
21
+ * @var string
22
+ */
23
+ private $cse;
24
+
25
+ public function __construct() {
26
+ $this->key = WAPT_Plugin::app()->getPopulateOption( 'google_apikey' );
27
+ $this->cse = WAPT_Plugin::app()->getPopulateOption( 'google_cse' );
28
+ }
29
+
30
+
31
+ /**
32
+ * @param string $query
33
+ * @param int $page
34
+ *
35
+ * @return SearchResponse
36
+ * @throws Exception
37
+ */
38
+ public function search( $query, $page ) {
39
+ if ( isset( $_POST['rights'] ) && (int) $_POST['rights'] ) {
40
+ $rights = '&rights=(cc_publicdomain%7Ccc_attribute%7Ccc_sharealike).-(cc_noncommercial%7Ccc_nonderived)';
41
+ } else {
42
+ $rights = '';
43
+ }
44
+
45
+ $start = ( ( $page - 1 ) * 10 ) + 1;
46
+ $url = sprintf( '%s?%s', self::URL, http_build_query( [
47
+ 'searchType' => 'image',
48
+ 'start' => $start . $rights,
49
+ 'q' => $query,
50
+ 'key' => $this->key,
51
+ 'cx' => $this->cse,
52
+ ] ) );
53
+
54
+ /**
55
+ * @var array|null $limit = [
56
+ * 'expires' => 0 | int,
57
+ * 'count' => 10 | int,
58
+ * ]
59
+ */
60
+ $limit = WAPT_Plugin::app()->getPopulateOption( 'google_limit', [
61
+ 'expires' => time(),
62
+ 'count' => 10,
63
+ ] );
64
+ if ( time() - $limit['expires'] > 3600 ) {
65
+ $limit['expires'] = time();
66
+ $limit['count'] = 10;
67
+ WAPT_Plugin::app()->updateOption( 'google_limit', $limit );
68
+ }
69
+
70
+ if ( ! WAPT_Plugin::app()->premium->is_active() && ! WAPT_Plugin::app()->premium->is_activate() ) {
71
+ if ( $limit['count'] < 1 ) {
72
+ WAPT_Plugin::app()->logger->warning( __( 'You have reached the limit at the moment. Try again in an 1 hour', 'apt' ) );
73
+ throw new Exception( sprintf( __( 'You have reached the limit at the moment. Try again in an 1 hour or <a href="%s">Upgrade to Premium</a>', 'apt' ), WAPT_Plugin::app()->get_support()->get_pricing_url( true, 'license_page' ) ) );
74
+ }
75
+ $limit['count'] --;
76
+ }
77
+
78
+ if ( 1 === $start ) {
79
+ WAPT_Plugin::app()->updateOption( 'google_limit', $limit );
80
+ }
81
+
82
+ $response = wp_remote_get( $url, [ 'timeout' => 100 ] );
83
+ if ( is_wp_error( $response ) ) {
84
+ WAPT_Plugin::app()->logger->error( 'Google search error: ' . $response->get_error_message() );
85
+ throw new Exception( 'Error: ' . $response->get_error_message() );
86
+ }
87
+
88
+ $images = [];
89
+ $error = null;
90
+ $response = json_decode( $response['body'], true );
91
+ if ( isset( $response['error'] ) ) {
92
+ $error = $response['error']['message'];
93
+ } elseif ( isset( $response['items'] ) && is_array( $response['items'] ) ) {
94
+ foreach ( $response['items'] as $item ) {
95
+ $image = new GoogleFoundedImage( $item );
96
+
97
+ $images[] = $image;
98
+ }
99
+ }
100
+
101
+ return new SearchResponse( $images, $error );
102
+ }
103
+ }
includes/image-search/result/class.founded-image.php CHANGED
@@ -71,8 +71,17 @@ abstract class FoundedImage {
71
  public function download( $path_to = '' ) {
72
  $response = wp_remote_get( $this->link );
73
  if ( 200 === wp_remote_retrieve_response_code( $response ) ) {
74
- $body = wp_remote_retrieve_body( $response );
75
- $downloaded = $path_to ? @file_put_contents( $path_to, $body ) : false;
 
 
 
 
 
 
 
 
 
76
  }
77
 
78
  return isset( $downloaded ) ? (bool) $downloaded : false;
71
  public function download( $path_to = '' ) {
72
  $response = wp_remote_get( $this->link );
73
  if ( 200 === wp_remote_retrieve_response_code( $response ) ) {
74
+ $body = wp_remote_retrieve_body( $response );
75
+
76
+ global $wp_filesystem;
77
+ if ( ! $wp_filesystem ) {
78
+ if ( ! function_exists( 'WP_Filesystem' ) ) {
79
+ require_once ABSPATH . 'wp-admin/includes/file.php';
80
+ }
81
+ WP_Filesystem();
82
+ }
83
+
84
+ $downloaded = $path_to ? $wp_filesystem->put_contents( $path_to, $body ) : false;
85
  }
86
 
87
  return isset( $downloaded ) ? (bool) $downloaded : false;
includes/image-search/result/class.google-founded-image.php CHANGED
@@ -28,7 +28,6 @@ class GoogleFoundedImage extends FoundedImage {
28
  $this->image->width = $item['image']['width'] ?? '';
29
  $this->image->height = $item['image']['height'] ?? '';
30
 
31
-
32
  $path = parse_url( $this->link, PHP_URL_PATH );
33
  preg_match_all( '/.*\/(.*)\.(\w{3,4})?(\?|\/.*)?/', $path, $match );
34
 
28
  $this->image->width = $item['image']['width'] ?? '';
29
  $this->image->height = $item['image']['height'] ?? '';
30
 
 
31
  $path = parse_url( $this->link, PHP_URL_PATH );
32
  preg_match_all( '/.*\/(.*)\.(\w{3,4})?(\?|\/.*)?/', $path, $match );
33
 
includes/image-search/result/class.response.php CHANGED
@@ -1,67 +1,67 @@
1
- <?php
2
- namespace WBCR\APT;
3
-
4
- use WAPT_Plugin, Exception;
5
-
6
- // Exit if accessed directly
7
- if ( ! defined( 'ABSPATH' ) ) {
8
- exit;
9
- }
10
-
11
- class SearchResponse implements \JsonSerializable {
12
-
13
- /**
14
- * @var int
15
- */
16
- public $images_count;
17
-
18
- /**
19
- * @var FoundedImage
20
- */
21
- public $images;
22
-
23
- /**
24
- * @var string|null
25
- */
26
- public $error;
27
-
28
- /**
29
- * SearchResponse constructor.
30
- *
31
- * @param FoundedImage[] $images
32
- * @param string|null $images
33
- */
34
- public function __construct( $images, $error = null ) {
35
- $this->images = $images;
36
- $this->error = $error;
37
- $this->images_count = count( $images );
38
- }
39
-
40
- /**
41
- * @param $limit
42
- */
43
- public function limit( $limit ) {
44
- $this->images = array_slice( $this->images, 0, $limit );
45
- $this->images_count = count( $this->images );
46
- }
47
-
48
- /**
49
- * @return bool
50
- */
51
- public function is_error() {
52
- return ! is_null( $this->error );
53
- }
54
-
55
- public function jsonSerialize() {
56
- if( $this->is_error() ) {
57
- return [
58
- 'error' => $this->error
59
- ];
60
- }
61
-
62
- return [
63
- 'images' => $this->images,
64
- 'images_count' => $this->images_count,
65
- ];
66
- }
67
- }
1
+ <?php
2
+ namespace WBCR\APT;
3
+
4
+ use WAPT_Plugin, Exception;
5
+
6
+ // Exit if accessed directly
7
+ if ( ! defined( 'ABSPATH' ) ) {
8
+ exit;
9
+ }
10
+
11
+ class SearchResponse implements \JsonSerializable {
12
+
13
+ /**
14
+ * @var int
15
+ */
16
+ public $images_count;
17
+
18
+ /**
19
+ * @var FoundedImage
20
+ */
21
+ public $images;
22
+
23
+ /**
24
+ * @var string|null
25
+ */
26
+ public $error;
27
+
28
+ /**
29
+ * SearchResponse constructor.
30
+ *
31
+ * @param FoundedImage[] $images
32
+ * @param string|null $images
33
+ */
34
+ public function __construct( $images, $error = null ) {
35
+ $this->images = $images;
36
+ $this->error = $error;
37
+ $this->images_count = count( $images );
38
+ }
39
+
40
+ /**
41
+ * @param $limit
42
+ */
43
+ public function limit( $limit ) {
44
+ $this->images = array_slice( $this->images, 0, $limit );
45
+ $this->images_count = count( $this->images );
46
+ }
47
+
48
+ /**
49
+ * @return bool
50
+ */
51
+ public function is_error() {
52
+ return ! is_null( $this->error );
53
+ }
54
+
55
+ public function jsonSerialize() {
56
+ if ( $this->is_error() ) {
57
+ return [
58
+ 'error' => $this->error,
59
+ ];
60
+ }
61
+
62
+ return [
63
+ 'images' => $this->images,
64
+ 'images_count' => $this->images_count,
65
+ ];
66
+ }
67
+ }
libs/factory/adverts/boot.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- use WBCR\Factory_Adverts_129\Base;
4
 
5
  /**
6
  * Factory Adverts
@@ -20,31 +20,31 @@ if( !defined('ABSPATH') ) {
20
  exit;
21
  }
22
 
23
- if( defined('FACTORY_ADVERTS_129_LOADED') || (defined('FACTORY_ADVERTS_BLOCK') && FACTORY_ADVERTS_BLOCK) ) {
24
  return;
25
  }
26
 
27
  # Устанавливаем константу, что модуль уже загружен
28
- define('FACTORY_ADVERTS_129_LOADED', true);
29
 
30
  # Устанавливаем версию модуля
31
- define('FACTORY_ADVERTS_129_VERSION', '1.2.9');
32
 
33
  # Регистрируем тектовый домен, для интернализации интерфейса модуля
34
- load_plugin_textdomain('wbcr_factory_adverts_129', false, dirname(plugin_basename(__FILE__)) . '/langs');
35
 
36
  # Устанавливаем директорию модуля
37
- define('FACTORY_ADVERTS_129_DIR', dirname(__FILE__));
38
 
39
  # Устанавливаем url модуля
40
- define('FACTORY_ADVERTS_129_URL', plugins_url(null, __FILE__));
41
 
42
- require_once(FACTORY_ADVERTS_129_DIR . '/includes/class-rest-request.php');
43
- require_once(FACTORY_ADVERTS_129_DIR . '/includes/class-base.php');
44
 
45
  /**
46
- * @param Wbcr_Factory452_Plugin $plugin
47
  */
48
- add_action('wbcr_factory_adverts_129_plugin_created', function ($plugin) {
49
- $plugin->set_adverts_manager("WBCR\Factory_Adverts_129\Base");
50
  });
1
  <?php
2
 
3
+ use WBCR\Factory_Adverts_130\Base;
4
 
5
  /**
6
  * Factory Adverts
20
  exit;
21
  }
22
 
23
+ if( defined('FACTORY_ADVERTS_130_LOADED') || (defined('FACTORY_ADVERTS_BLOCK') && FACTORY_ADVERTS_BLOCK) ) {
24
  return;
25
  }
26
 
27
  # Устанавливаем константу, что модуль уже загружен
28
+ define('FACTORY_ADVERTS_130_LOADED', true);
29
 
30
  # Устанавливаем версию модуля
31
+ define('FACTORY_ADVERTS_130_VERSION', '1.3.0');
32
 
33
  # Регистрируем тектовый домен, для интернализации интерфейса модуля
34
+ load_plugin_textdomain('wbcr_factory_adverts_130', false, dirname(plugin_basename(__FILE__)) . '/langs');
35
 
36
  # Устанавливаем директорию модуля
37
+ define('FACTORY_ADVERTS_130_DIR', dirname(__FILE__));
38
 
39
  # Устанавливаем url модуля
40
+ define('FACTORY_ADVERTS_130_URL', plugins_url(null, __FILE__));
41
 
42
+ require_once(FACTORY_ADVERTS_130_DIR . '/includes/class-rest-request.php');
43
+ require_once(FACTORY_ADVERTS_130_DIR . '/includes/class-base.php');
44
 
45
  /**
46
+ * @param Wbcr_Factory453_Plugin $plugin
47
  */
48
+ add_action('wbcr_factory_adverts_130_plugin_created', function ($plugin) {
49
+ $plugin->set_adverts_manager("WBCR\Factory_Adverts_130\Base");
50
  });
libs/factory/adverts/includes/class-base.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- namespace WBCR\Factory_Adverts_129;
4
 
5
  // Exit if accessed directly
6
  if ( ! defined( 'ABSPATH' ) ) {
@@ -28,7 +28,7 @@ class Base {
28
  *
29
  * @author Alexander Kovalev <alex.kovalevv@gmail.com>
30
  * @since 1.0.1
31
- * @var \Wbcr_Factory452_Plugin
32
  */
33
  private $plugin;
34
 
@@ -53,7 +53,7 @@ class Base {
53
  *
54
  * @author Alexander Kovalev <alex.kovalevv@gmail.com>
55
  * @since 1.0.1
56
- * @var \WBCR\Factory_Adverts_129\Creative_Motion_API
57
  */
58
  private $api;
59
 
@@ -82,9 +82,9 @@ class Base {
82
  *
83
  * @since 1.0.0 Added
84
  *
85
- * @param \Wbcr_Factory452_Plugin $plugin
86
  */
87
- public function __construct( \Wbcr_Factory452_Plugin $plugin, $settings ) {
88
  $this->plugin = $plugin;
89
 
90
  $this->settings = wp_parse_args( $settings, [
@@ -257,7 +257,7 @@ class Base {
257
  $content = $this->get_debug_message( 'dashboard_widget' );
258
  }
259
 
260
- require_once FACTORY_ADVERTS_129_DIR . '/includes/class-dashboard-widget.php';
261
  new Dashboard_Widget( $this->plugin, $content );
262
  }
263
  }
1
  <?php
2
 
3
+ namespace WBCR\Factory_Adverts_130;
4
 
5
  // Exit if accessed directly
6
  if ( ! defined( 'ABSPATH' ) ) {
28
  *
29
  * @author Alexander Kovalev <alex.kovalevv@gmail.com>
30
  * @since 1.0.1
31
+ * @var \Wbcr_Factory453_Plugin
32
  */
33
  private $plugin;
34
 
53
  *
54
  * @author Alexander Kovalev <alex.kovalevv@gmail.com>
55
  * @since 1.0.1
56
+ * @var \WBCR\Factory_Adverts_130\Creative_Motion_API
57
  */
58
  private $api;
59
 
82
  *
83
  * @since 1.0.0 Added
84
  *
85
+ * @param \Wbcr_Factory453_Plugin $plugin
86
  */
87
+ public function __construct( \Wbcr_Factory453_Plugin $plugin, $settings ) {
88
  $this->plugin = $plugin;
89
 
90
  $this->settings = wp_parse_args( $settings, [
257
  $content = $this->get_debug_message( 'dashboard_widget' );
258
  }
259
 
260
+ require_once FACTORY_ADVERTS_130_DIR . '/includes/class-dashboard-widget.php';
261
  new Dashboard_Widget( $this->plugin, $content );
262
  }
263
  }
libs/factory/adverts/includes/class-dashboard-widget.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- namespace WBCR\Factory_Adverts_129;
4
 
5
  // Exit if accessed directly
6
  if ( ! defined( 'ABSPATH' ) ) {
@@ -35,7 +35,7 @@ class Dashboard_Widget {
35
  *
36
  * @author Alexander Kovalev <alex.kovalevv@gmail.com>
37
  * @since 1.0.1
38
- * @var \Wbcr_Factory452_Plugin
39
  */
40
  private $plugin;
41
 
@@ -46,10 +46,10 @@ class Dashboard_Widget {
46
  *
47
  * @since 1.0.0 Added
48
  *
49
- * @param \Wbcr_Factory452_Plugin $plugin
50
  * @param string $content
51
  */
52
- public function __construct( \Wbcr_Factory452_Plugin $plugin, $content ) {
53
 
54
  $this->plugin = $plugin;
55
  $this->content = $content;
1
  <?php
2
 
3
+ namespace WBCR\Factory_Adverts_130;
4
 
5
  // Exit if accessed directly
6
  if ( ! defined( 'ABSPATH' ) ) {
35
  *
36
  * @author Alexander Kovalev <alex.kovalevv@gmail.com>
37
  * @since 1.0.1
38
+ * @var \Wbcr_Factory453_Plugin
39
  */
40
  private $plugin;
41
 
46
  *
47
  * @since 1.0.0 Added
48
  *
49
+ * @param \Wbcr_Factory453_Plugin $plugin
50
  * @param string $content
51
  */
52
+ public function __construct( \Wbcr_Factory453_Plugin $plugin, $content ) {
53
 
54
  $this->plugin = $plugin;
55
  $this->content = $content;
libs/factory/adverts/includes/class-rest-request.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- namespace WBCR\Factory_Adverts_129;
4
 
5
  // Exit if accessed directly
6
  if( !defined('ABSPATH') ) {
@@ -65,7 +65,7 @@ class Creative_Motion_API {
65
  *
66
  * @author Alexander Kovalev <alex.kovalevv@gmail.com>
67
  * @since 1.0.1
68
- * @var \Wbcr_Factory452_Plugin
69
  */
70
  private $plugin;
71
 
@@ -75,11 +75,11 @@ class Creative_Motion_API {
75
  *
76
  * Variable initialization.
77
  *
78
- * @param \Wbcr_Factory452_Plugin $plugin_name
79
  * @since 1.0.0 Added
80
  *
81
  */
82
- public function __construct(\Wbcr_Factory452_Plugin $plugin)
83
  {
84
  $this->plugin = $plugin;
85
  }
1
  <?php
2
 
3
+ namespace WBCR\Factory_Adverts_130;
4
 
5
  // Exit if accessed directly
6
  if( !defined('ABSPATH') ) {
65
  *
66
  * @author Alexander Kovalev <alex.kovalevv@gmail.com>
67
  * @since 1.0.1
68
+ * @var \Wbcr_Factory453_Plugin
69
  */
70
  private $plugin;
71
 
75
  *
76
  * Variable initialization.
77
  *
78
+ * @param \Wbcr_Factory453_Plugin $plugin_name
79
  * @since 1.0.0 Added
80
  *
81
  */
82
+ public function __construct(\Wbcr_Factory453_Plugin $plugin)
83
  {
84
  $this->plugin = $plugin;
85
  }
libs/factory/adverts/langs/{wbcr_factory_adverts_129-ru_RU.mo → wbcr_factory_adverts_130-ru_RU.mo} RENAMED
File without changes
libs/factory/adverts/langs/{wbcr_factory_adverts_129-ru_RU.po → wbcr_factory_adverts_130-ru_RU.po} RENAMED
File without changes
libs/factory/bootstrap/assets/css-min/bootstrap.accordion.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .factory-accordion{margin:0 0 30px;border-top:1px solid #DDD;border-right:1px solid #DDD;border-left:1px solid #DDD;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.factory-bootstrap-453 .factory-accordion>h3{border-bottom:1px solid #DDD;cursor:pointer;padding:8px 15px;margin:0}.factory-bootstrap-453 .factory-accordion>div{display:none;margin:0;border-bottom:1px solid #DDD}.factory-bootstrap-453 .factory-accordion-item{display:none}.factory-bootstrap-453 .inner-factory-accordion-item{padding:10px 0}.factory-bootstrap-453 .factory-accordion>h3.active:hover{cursor:default}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .factory-accordion{margin:0 0 30px;border-top:1px solid #DDD;border-right:1px solid #DDD;border-left:1px solid #DDD;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.factory-bootstrap-454 .factory-accordion>h3{border-bottom:1px solid #DDD;cursor:pointer;padding:8px 15px;margin:0}.factory-bootstrap-454 .factory-accordion>div{display:none;margin:0;border-bottom:1px solid #DDD}.factory-bootstrap-454 .factory-accordion-item{display:none}.factory-bootstrap-454 .inner-factory-accordion-item{padding:10px 0}.factory-bootstrap-454 .factory-accordion>h3.active:hover{cursor:default}
libs/factory/bootstrap/assets/css-min/bootstrap.blue.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .btn-primary{background:#e1a948;border-color:#d39323;color:#fff;-webkit-box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-453 .btn-primary:focus,.factory-bootstrap-453 .btn-primary:hover{background:#db9825;border-color:#bd831f;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8be74,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8be74,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-453 .btn-primary:active{background:#db9825;border-color:#bd831f;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-453 .btn-primary:disabled,.factory-bootstrap-453 .btn-primary[disabled]{color:#d1cdc7!important;background:#db9825!important;border-color:#bd831f!important;text-shadow:none!important}.factory-bootstrap-453 .btn-group .btn.active.value{background-color:#e1a948;-webkit-box-shadow:inset 0 1px 2px #d39323;box-shadow:inset 0 1px 2px #d39323;border-top:1px solid #d39323;border-bottom:1px solid #d39323;border-left:1px solid #d39323}.factory-bootstrap-453 .pagination>.active>a,.factory-bootstrap-453 .pagination>.active>a:focus,.factory-bootstrap-453 .pagination>.active>a:hover,.factory-bootstrap-453 .pagination>.active>span,.factory-bootstrap-453 .pagination>.active>span:focus,.factory-bootstrap-453 .pagination>.active>span:hover{background-color:#e1a948;border-color:#d39323}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .btn-primary{background:#e1a948;border-color:#d39323;color:#fff;-webkit-box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-454 .btn-primary:focus,.factory-bootstrap-454 .btn-primary:hover{background:#db9825;border-color:#bd831f;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8be74,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8be74,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-454 .btn-primary:active{background:#db9825;border-color:#bd831f;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-454 .btn-primary:disabled,.factory-bootstrap-454 .btn-primary[disabled]{color:#d1cdc7!important;background:#db9825!important;border-color:#bd831f!important;text-shadow:none!important}.factory-bootstrap-454 .btn-group .btn.active.value{background-color:#e1a948;-webkit-box-shadow:inset 0 1px 2px #d39323;box-shadow:inset 0 1px 2px #d39323;border-top:1px solid #d39323;border-bottom:1px solid #d39323;border-left:1px solid #d39323}.factory-bootstrap-454 .pagination>.active>a,.factory-bootstrap-454 .pagination>.active>a:focus,.factory-bootstrap-454 .pagination>.active>a:hover,.factory-bootstrap-454 .pagination>.active>span,.factory-bootstrap-454 .pagination>.active>span:focus,.factory-bootstrap-454 .pagination>.active>span:hover{background-color:#e1a948;border-color:#d39323}
libs/factory/bootstrap/assets/css-min/bootstrap.coffee.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .btn-primary{background:#c7a589;border-color:#b78a66;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-453 .btn-primary:focus,.factory-bootstrap-453 .btn-primary:hover{background:#ba906d;border-color:#ae7d55;color:#fff;-webkit-box-shadow:inset 0 1px 0 #d7bfac,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #d7bfac,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-453 .btn-primary:active{background:#ba906d;border-color:#ae7d55;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-453 .btn-primary:disabled,.factory-bootstrap-453 .btn-primary[disabled]{color:#d1cbc7!important;background:#ba906d!important;border-color:#ae7d55!important;text-shadow:none!important}.factory-bootstrap-453 .btn-group .btn.active.value{background-color:#c7a589;-webkit-box-shadow:inset 0 1px 2px #b78a66;box-shadow:inset 0 1px 2px #b78a66;border-top:1px solid #b78a66;border-bottom:1px solid #b78a66;border-left:1px solid #b78a66}.factory-bootstrap-453 .pagination>.active>a,.factory-bootstrap-453 .pagination>.active>a:focus,.factory-bootstrap-453 .pagination>.active>a:hover,.factory-bootstrap-453 .pagination>.active>span,.factory-bootstrap-453 .pagination>.active>span:focus,.factory-bootstrap-453 .pagination>.active>span:hover{background-color:#c7a589;border-color:#b78a66}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .btn-primary{background:#c7a589;border-color:#b78a66;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-454 .btn-primary:focus,.factory-bootstrap-454 .btn-primary:hover{background:#ba906d;border-color:#ae7d55;color:#fff;-webkit-box-shadow:inset 0 1px 0 #d7bfac,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #d7bfac,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-454 .btn-primary:active{background:#ba906d;border-color:#ae7d55;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-454 .btn-primary:disabled,.factory-bootstrap-454 .btn-primary[disabled]{color:#d1cbc7!important;background:#ba906d!important;border-color:#ae7d55!important;text-shadow:none!important}.factory-bootstrap-454 .btn-group .btn.active.value{background-color:#c7a589;-webkit-box-shadow:inset 0 1px 2px #b78a66;box-shadow:inset 0 1px 2px #b78a66;border-top:1px solid #b78a66;border-bottom:1px solid #b78a66;border-left:1px solid #b78a66}.factory-bootstrap-454 .pagination>.active>a,.factory-bootstrap-454 .pagination>.active>a:focus,.factory-bootstrap-454 .pagination>.active>a:hover,.factory-bootstrap-454 .pagination>.active>span,.factory-bootstrap-454 .pagination>.active>span:focus,.factory-bootstrap-454 .pagination>.active>span:hover{background-color:#c7a589;border-color:#b78a66}
libs/factory/bootstrap/assets/css-min/bootstrap.core.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 article,.factory-bootstrap-453 aside,.factory-bootstrap-453 details,.factory-bootstrap-453 figcaption,.factory-bootstrap-453 figure,.factory-bootstrap-453 footer,.factory-bootstrap-453 header,.factory-bootstrap-453 hgroup,.factory-bootstrap-453 main,.factory-bootstrap-453 nav,.factory-bootstrap-453 section,.factory-bootstrap-453 summary{display:block}.factory-bootstrap-453 audio,.factory-bootstrap-453 canvas,.factory-bootstrap-453 video{display:inline-block}.factory-bootstrap-453 audio:not([controls]){display:none;height:0}.factory-bootstrap-453 [hidden],.factory-bootstrap-453 template{display:none}.factory-bootstrap-453 body{margin:0}.factory-bootstrap-453 a{background:0 0}.factory-bootstrap-453 a:focus{outline:thin dotted}.factory-bootstrap-453 a:active,.factory-bootstrap-453 a:hover{outline:0}.factory-bootstrap-453 h1{margin:.67em 0}.factory-bootstrap-453 b,.factory-bootstrap-453 strong{font-weight:700}.factory-bootstrap-453 dfn{font-style:italic}.factory-bootstrap-453 hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}.factory-bootstrap-453 mark{color:#000;background:#ff0}.factory-bootstrap-453 code,.factory-bootstrap-453 kbd,.factory-bootstrap-453 pre,.factory-bootstrap-453 samp{font-size:1em}.factory-bootstrap-453 pre{white-space:pre-wrap}.factory-bootstrap-453 q{quotes:"\201C" "\201D" "\2018" "\2019"}.factory-bootstrap-453 sub,.factory-bootstrap-453 sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}.factory-bootstrap-453 sup{top:-.5em}.factory-bootstrap-453 sub{bottom:-.25em}.factory-bootstrap-453 img{border:0}.factory-bootstrap-453 svg:not(:root){overflow:hidden}.factory-bootstrap-453 figure{margin:0}.factory-bootstrap-453 button,.factory-bootstrap-453 input,.factory-bootstrap-453 select,.factory-bootstrap-453 textarea{margin:0}.factory-bootstrap-453 button,.factory-bootstrap-453 select{text-transform:none}.factory-bootstrap-453 select{padding-right:4px!important}.factory-bootstrap-453 button,.factory-bootstrap-453 input[type=reset],.factory-bootstrap-453 input[type=submit],html .factory-bootstrap-453 input[type=button]{cursor:pointer;-webkit-appearance:button}.factory-bootstrap-453 button[disabled],html .factory-bootstrap-453 input[disabled]{cursor:default}.factory-bootstrap-453 input[type=checkbox],.factory-bootstrap-453 input[type=radio]{padding:0;box-sizing:border-box}.factory-bootstrap-453 input[type=search]{-webkit-appearance:textfield}.factory-bootstrap-453 input[type=search]::-webkit-search-cancel-button,.factory-bootstrap-453 input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.factory-bootstrap-453 button::-moz-focus-inner,.factory-bootstrap-453 input::-moz-focus-inner{padding:0;border:0}.factory-bootstrap-453 textarea{overflow:auto;vertical-align:top}.factory-bootstrap-453 table{border-collapse:collapse;border-spacing:0}@media print{.factory-bootstrap-453 *{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}.factory-bootstrap-453 a,.factory-bootstrap-453 a:visited{text-decoration:underline}.factory-bootstrap-453 a[href]:after{content:" (" attr(href) ")"}.factory-bootstrap-453 abbr[title]:after{content:" (" attr(title) ")"}.factory-bootstrap-453 a[href^="javascript:"]:after,.factory-bootstrap-453 a[href^="#"]:after{content:""}.factory-bootstrap-453 blockquote,.factory-bootstrap-453 pre{border:1px solid #999;page-break-inside:avoid}.factory-bootstrap-453 thead{display:table-header-group}.factory-bootstrap-453 img,.factory-bootstrap-453 tr{page-break-inside:avoid}.factory-bootstrap-453 img{max-width:100%!important}@page{margin:2cm .5cm}.factory-bootstrap-453 h2,.factory-bootstrap-453 h3,.factory-bootstrap-453 p{orphans:3;widows:3}.factory-bootstrap-453 h2,.factory-bootstrap-453 h3{page-break-after:avoid}.factory-bootstrap-453 select{background:#fff!important}.factory-bootstrap-453 .navbar{display:none}.factory-bootstrap-453 .table td,.factory-bootstrap-453 .table th{background-color:#fff!important}.factory-bootstrap-453 .btn>.caret,.factory-bootstrap-453 .dropup>.btn>.caret{border-top-color:#000!important}.factory-bootstrap-453 .label{border:1px solid #000}.factory-bootstrap-453 .table{border-collapse:collapse!important}.factory-bootstrap-453 .table-bordered td,.factory-bootstrap-453 .table-bordered th{border:1px solid #ddd!important}}.factory-bootstrap-453 *,.factory-bootstrap-453 :after,.factory-bootstrap-453 :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html .factory-bootstrap-453{-webkit-tap-highlight-color:rgba(0,0,0,0)}.factory-bootstrap-453 body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}.factory-bootstrap-453 button,.factory-bootstrap-453 input,.factory-bootstrap-453 select,.factory-bootstrap-453 textarea{font-family:inherit;font-size:inherit;line-height:inherit}.factory-bootstrap-453 img{vertical-align:middle}.factory-bootstrap-453 .img-responsive{display:block;height:auto;max-width:100%}.factory-bootstrap-453 .img-rounded{border-radius:6px}.factory-bootstrap-453 .img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.factory-bootstrap-453 .img-circle{border-radius:50%}.factory-bootstrap-453 hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.factory-bootstrap-453 .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.factory-bootstrap-453 .h1,.factory-bootstrap-453 .h2,.factory-bootstrap-453 .h3,.factory-bootstrap-453 .h4,.factory-bootstrap-453 .h5,.factory-bootstrap-453 .h6,.factory-bootstrap-453 h1,.factory-bootstrap-453 h2,.factory-bootstrap-453 h3,.factory-bootstrap-453 h4,.factory-bootstrap-453 h5,.factory-bootstrap-453 h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1;color:inherit}.factory-bootstrap-453 .h1 .small,.factory-bootstrap-453 .h1 small,.factory-bootstrap-453 .h2 .small,.factory-bootstrap-453 .h2 small,.factory-bootstrap-453 .h3 .small,.factory-bootstrap-453 .h3 small,.factory-bootstrap-453 .h4 .small,.factory-bootstrap-453 .h4 small,.factory-bootstrap-453 .h5 .small,.factory-bootstrap-453 .h5 small,.factory-bootstrap-453 .h6 .small,.factory-bootstrap-453 .h6 small,.factory-bootstrap-453 h1 .small,.factory-bootstrap-453 h1 small,.factory-bootstrap-453 h2 .small,.factory-bootstrap-453 h2 small,.factory-bootstrap-453 h3 .small,.factory-bootstrap-453 h3 small,.factory-bootstrap-453 h4 .small,.factory-bootstrap-453 h4 small,.factory-bootstrap-453 h5 .small,.factory-bootstrap-453 h5 small,.factory-bootstrap-453 h6 .small,.factory-bootstrap-453 h6 small{font-weight:400;line-height:1;color:#999}.factory-bootstrap-453 h1,.factory-bootstrap-453 h2,.factory-bootstrap-453 h3{margin-top:20px;margin-bottom:10px}.factory-bootstrap-453 h1 .small,.factory-bootstrap-453 h1 small,.factory-bootstrap-453 h2 .small,.factory-bootstrap-453 h2 small,.factory-bootstrap-453 h3 .small,.factory-bootstrap-453 h3 small{font-size:65%}.factory-bootstrap-453 h4,.factory-bootstrap-453 h5,.factory-bootstrap-453 h6{margin-top:10px;margin-bottom:10px}.factory-bootstrap-453 h4 .small,.factory-bootstrap-453 h4 small,.factory-bootstrap-453 h5 .small,.factory-bootstrap-453 h5 small,.factory-bootstrap-453 h6 .small,.factory-bootstrap-453 h6 small{font-size:75%}.factory-bootstrap-453 .h1,.factory-bootstrap-453 h1{font-size:36px}.factory-bootstrap-453 .h2,.factory-bootstrap-453 h2{font-size:30px}.factory-bootstrap-453 .h3,.factory-bootstrap-453 h3{font-size:24px}.factory-bootstrap-453 .h4,.factory-bootstrap-453 h4{font-size:18px}.factory-bootstrap-453 .h5,.factory-bootstrap-453 h5{font-size:14px}.factory-bootstrap-453 .h6,.factory-bootstrap-453 h6{font-size:12px}.factory-bootstrap-453 p{margin:0 0 10px}.factory-bootstrap-453 .lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.factory-bootstrap-453 .small,.factory-bootstrap-453 small{font-size:85%}.factory-bootstrap-453 cite{font-style:normal}.factory-bootstrap-453 .text-muted{color:#999}.factory-bootstrap-453 .text-primary{color:#428bca}.factory-bootstrap-453 .text-primary:hover{color:#3071a9}.factory-bootstrap-453 .text-warning{color:#8a6d3b}.factory-bootstrap-453 .text-warning:hover{color:#66512c}.factory-bootstrap-453 .text-danger{color:#a94442}.factory-bootstrap-453 .text-danger:hover{color:#843534}.factory-bootstrap-453 .text-success{color:#3c763d}.factory-bootstrap-453 .text-success:hover{color:#2b542c}.factory-bootstrap-453 .text-info{color:#31708f}.factory-bootstrap-453 .text-info:hover{color:#245269}.factory-bootstrap-453 .text-left{text-align:left}.factory-bootstrap-453 .text-right{text-align:right}.factory-bootstrap-453 .text-center{text-align:center}.factory-bootstrap-453 .page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}.factory-bootstrap-453 ol,.factory-bootstrap-453 ul{margin-top:0;margin-bottom:10px}.factory-bootstrap-453 ol ol,.factory-bootstrap-453 ol ul,.factory-bootstrap-453 ul ol,.factory-bootstrap-453 ul ul{margin-bottom:0}.factory-bootstrap-453 .list-inline,.factory-bootstrap-453 .list-unstyled{padding-left:0;list-style:none}.factory-bootstrap-453 .list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}.factory-bootstrap-453 .list-inline>li:first-child{padding-left:0}.factory-bootstrap-453 dl{margin-top:0;margin-bottom:20px}.factory-bootstrap-453 dd,.factory-bootstrap-453 dt{line-height:1.428571429}.factory-bootstrap-453 dt{font-weight:700}.factory-bootstrap-453 dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:after,.dl-horizontal dd:before{display:table;content:" "}.dl-horizontal dd:after{clear:both}}.factory-bootstrap-453 abbr[data-original-title],.factory-bootstrap-453 abbr[title]{cursor:help;border-bottom:1px dotted #999}.factory-bootstrap-453 .initialism{font-size:90%;text-transform:uppercase}.factory-bootstrap-453 blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}.factory-bootstrap-453 blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}.factory-bootstrap-453 blockquote p:last-child{margin-bottom:0}.factory-bootstrap-453 blockquote .small,.factory-bootstrap-453 blockquote small{display:block;line-height:1.428571429;color:#999}.factory-bootstrap-453 blockquote .small:before,.factory-bootstrap-453 blockquote small:before{content:'\2014 \00A0'}.factory-bootstrap-453 blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}.factory-bootstrap-453 blockquote.pull-right .small,.factory-bootstrap-453 blockquote.pull-right p,.factory-bootstrap-453 blockquote.pull-right small{text-align:right}.factory-bootstrap-453 blockquote.pull-right .small:before,.factory-bootstrap-453 blockquote.pull-right small:before{content:''}.factory-bootstrap-453 blockquote.pull-right .small:after,.factory-bootstrap-453 blockquote.pull-right small:after{content:'\00A0 \2014'}.factory-bootstrap-453 blockquote:after,.factory-bootstrap-453 blockquote:before{content:""}.factory-bootstrap-453 address{margin-bottom:20px;font-style:normal;line-height:1.428571429}.factory-bootstrap-453 code,.factory-bootstrap-453 kbd,.factory-bootstrap-453 pre,.factory-bootstrap-453 samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}.factory-bootstrap-453 code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}.factory-bootstrap-453 pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.factory-bootstrap-453 pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.factory-bootstrap-453 .pre-scrollable{max-height:340px;overflow-y:scroll}.factory-bootstrap-453 .container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.factory-bootstrap-453 .container:after,.factory-bootstrap-453 .container:before{display:table;content:" "}.factory-bootstrap-453 .container:after{clear:both}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.factory-bootstrap-453 .row{margin-right:-15px;margin-left:-15px}.factory-bootstrap-453 .row:after,.factory-bootstrap-453 .row:before{display:table;content:" "}.factory-bootstrap-453 .row:after{clear:both}.factory-bootstrap-453 .col-lg-1,.factory-bootstrap-453 .col-lg-10,.factory-bootstrap-453 .col-lg-11,.factory-bootstrap-453 .col-lg-12,.factory-bootstrap-453 .col-lg-2,.factory-bootstrap-453 .col-lg-3,.factory-bootstrap-453 .col-lg-4,.factory-bootstrap-453 .col-lg-5,.factory-bootstrap-453 .col-lg-6,.factory-bootstrap-453 .col-lg-7,.factory-bootstrap-453 .col-lg-8,.factory-bootstrap-453 .col-lg-9,.factory-bootstrap-453 .col-md-1,.factory-bootstrap-453 .col-md-10,.factory-bootstrap-453 .col-md-11,.factory-bootstrap-453 .col-md-12,.factory-bootstrap-453 .col-md-2,.factory-bootstrap-453 .col-md-3,.factory-bootstrap-453 .col-md-4,.factory-bootstrap-453 .col-md-5,.factory-bootstrap-453 .col-md-6,.factory-bootstrap-453 .col-md-7,.factory-bootstrap-453 .col-md-8,.factory-bootstrap-453 .col-md-9,.factory-bootstrap-453 .col-sm-1,.factory-bootstrap-453 .col-sm-10,.factory-bootstrap-453 .col-sm-11,.factory-bootstrap-453 .col-sm-12,.factory-bootstrap-453 .col-sm-2,.factory-bootstrap-453 .col-sm-3,.factory-bootstrap-453 .col-sm-4,.factory-bootstrap-453 .col-sm-5,.factory-bootstrap-453 .col-sm-6,.factory-bootstrap-453 .col-sm-7,.factory-bootstrap-453 .col-sm-8,.factory-bootstrap-453 .col-sm-9,.factory-bootstrap-453 .col-xs-1,.factory-bootstrap-453 .col-xs-10,.factory-bootstrap-453 .col-xs-11,.factory-bootstrap-453 .col-xs-12,.factory-bootstrap-453 .col-xs-2,.factory-bootstrap-453 .col-xs-3,.factory-bootstrap-453 .col-xs-4,.factory-bootstrap-453 .col-xs-5,.factory-bootstrap-453 .col-xs-6,.factory-bootstrap-453 .col-xs-7,.factory-bootstrap-453 .col-xs-8,.factory-bootstrap-453 .col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.factory-bootstrap-453 .col-xs-1,.factory-bootstrap-453 .col-xs-10,.factory-bootstrap-453 .col-xs-11,.factory-bootstrap-453 .col-xs-12,.factory-bootstrap-453 .col-xs-2,.factory-bootstrap-453 .col-xs-3,.factory-bootstrap-453 .col-xs-4,.factory-bootstrap-453 .col-xs-5,.factory-bootstrap-453 .col-xs-6,.factory-bootstrap-453 .col-xs-7,.factory-bootstrap-453 .col-xs-8,.factory-bootstrap-453 .col-xs-9{float:left}.factory-bootstrap-453 .col-xs-12{width:100%}.factory-bootstrap-453 .col-xs-11{width:91.66666666666666%}.factory-bootstrap-453 .col-xs-10{width:83.33333333333334%}.factory-bootstrap-453 .col-xs-9{width:75%}.factory-bootstrap-453 .col-xs-8{width:66.66666666666666%}.factory-bootstrap-453 .col-xs-7{width:58.333333333333336%}.factory-bootstrap-453 .col-xs-6{width:50%}.factory-bootstrap-453 .col-xs-5{width:41.66666666666667%}.factory-bootstrap-453 .col-xs-4{width:33.33333333333333%}.factory-bootstrap-453 .col-xs-3{width:25%}.factory-bootstrap-453 .col-xs-2{width:16.666666666666664%}.factory-bootstrap-453 .col-xs-1{width:8.333333333333332%}.factory-bootstrap-453 .col-xs-pull-12{right:100%}.factory-bootstrap-453 .col-xs-pull-11{right:91.66666666666666%}.factory-bootstrap-453 .col-xs-pull-10{right:83.33333333333334%}.factory-bootstrap-453 .col-xs-pull-9{right:75%}.factory-bootstrap-453 .col-xs-pull-8{right:66.66666666666666%}.factory-bootstrap-453 .col-xs-pull-7{right:58.333333333333336%}.factory-bootstrap-453 .col-xs-pull-6{right:50%}.factory-bootstrap-453 .col-xs-pull-5{right:41.66666666666667%}.factory-bootstrap-453 .col-xs-pull-4{right:33.33333333333333%}.factory-bootstrap-453 .col-xs-pull-3{right:25%}.factory-bootstrap-453 .col-xs-pull-2{right:16.666666666666664%}.factory-bootstrap-453 .col-xs-pull-1{right:8.333333333333332%}.factory-bootstrap-453 .col-xs-pull-0{right:0}.factory-bootstrap-453 .col-xs-push-12{left:100%}.factory-bootstrap-453 .col-xs-push-11{left:91.66666666666666%}.factory-bootstrap-453 .col-xs-push-10{left:83.33333333333334%}.factory-bootstrap-453 .col-xs-push-9{left:75%}.factory-bootstrap-453 .col-xs-push-8{left:66.66666666666666%}.factory-bootstrap-453 .col-xs-push-7{left:58.333333333333336%}.factory-bootstrap-453 .col-xs-push-6{left:50%}.factory-bootstrap-453 .col-xs-push-5{left:41.66666666666667%}.factory-bootstrap-453 .col-xs-push-4{left:33.33333333333333%}.factory-bootstrap-453 .col-xs-push-3{left:25%}.factory-bootstrap-453 .col-xs-push-2{left:16.666666666666664%}.factory-bootstrap-453 .col-xs-push-1{left:8.333333333333332%}.factory-bootstrap-453 .col-xs-push-0{left:0}.factory-bootstrap-453 .col-xs-offset-12{margin-left:100%}.factory-bootstrap-453 .col-xs-offset-11{margin-left:91.66666666666666%}.factory-bootstrap-453 .col-xs-offset-10{margin-left:83.33333333333334%}.factory-bootstrap-453 .col-xs-offset-9{margin-left:75%}.factory-bootstrap-453 .col-xs-offset-8{margin-left:66.66666666666666%}.factory-bootstrap-453 .col-xs-offset-7{margin-left:58.333333333333336%}.factory-bootstrap-453 .col-xs-offset-6{margin-left:50%}.factory-bootstrap-453 .col-xs-offset-5{margin-left:41.66666666666667%}.factory-bootstrap-453 .col-xs-offset-4{margin-left:33.33333333333333%}.factory-bootstrap-453 .col-xs-offset-3{margin-left:25%}.factory-bootstrap-453 .col-xs-offset-2{margin-left:16.666666666666664%}.factory-bootstrap-453 .col-xs-offset-1{margin-left:8.333333333333332%}.factory-bootstrap-453 .col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666666666666%}.col-sm-10{width:83.33333333333334%}.col-sm-9{width:75%}.col-sm-8{width:66.66666666666666%}.col-sm-7{width:58.333333333333336%}.col-sm-6{width:50%}.col-sm-5{width:41.66666666666667%}.col-sm-4{width:33.33333333333333%}.col-sm-3{width:25%}.col-sm-2{width:16.666666666666664%}.col-sm-1{width:8.333333333333332%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-pull-0{right:0}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666666666666%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-1{left:8.333333333333332%}.col-sm-push-0{left:0}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666666666666%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-1{margin-left:8.333333333333332%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666666666666%}.col-md-10{width:83.33333333333334%}.col-md-9{width:75%}.col-md-8{width:66.66666666666666%}.col-md-7{width:58.333333333333336%}.col-md-6{width:50%}.col-md-5{width:41.66666666666667%}.col-md-4{width:33.33333333333333%}.col-md-3{width:25%}.col-md-2{width:16.666666666666664%}.col-md-1{width:8.333333333333332%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666666666666%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-1{right:8.333333333333332%}.col-md-pull-0{right:0}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666666666666%}.col-md-push-10{left:83.33333333333334%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666666666666%}.col-md-push-7{left:58.333333333333336%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666666666667%}.col-md-push-4{left:33.33333333333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.666666666666664%}.col-md-push-1{left:8.333333333333332%}.col-md-push-0{left:0}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666666666666%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offset-1{margin-left:8.333333333333332%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666666666666%}.col-lg-10{width:83.33333333333334%}.col-lg-9{width:75%}.col-lg-8{width:66.66666666666666%}.col-lg-7{width:58.333333333333336%}.col-lg-6{width:50%}.col-lg-5{width:41.66666666666667%}.col-lg-4{width:33.33333333333333%}.col-lg-3{width:25%}.col-lg-2{width:16.666666666666664%}.col-lg-1{width:8.333333333333332%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-1{right:8.333333333333332%}.col-lg-pull-0{right:0}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666666666666%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.666666666666664%}.col-lg-push-1{left:8.333333333333332%}.col-lg-push-0{left:0}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666666666666%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666666666667%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-1{margin-left:8.333333333333332%}.col-lg-offset-0{margin-left:0}}.factory-bootstrap-453 table{max-width:100%;background-color:transparent}.factory-bootstrap-453 th{text-align:left}.factory-bootstrap-453 .table{width:100%;margin-bottom:20px}.factory-bootstrap-453 .table>tbody>tr>td,.factory-bootstrap-453 .table>tbody>tr>th,.factory-bootstrap-453 .table>tfoot>tr>td,.factory-bootstrap-453 .table>tfoot>tr>th,.factory-bootstrap-453 .table>thead>tr>td,.factory-bootstrap-453 .table>thead>tr>th{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.factory-bootstrap-453 .table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.factory-bootstrap-453 .table>caption+thead>tr:first-child>td,.factory-bootstrap-453 .table>caption+thead>tr:first-child>th,.factory-bootstrap-453 .table>colgroup+thead>tr:first-child>td,.factory-bootstrap-453 .table>colgroup+thead>tr:first-child>th,.factory-bootstrap-453 .table>thead:first-child>tr:first-child>td,.factory-bootstrap-453 .table>thead:first-child>tr:first-child>th{border-top:0}.factory-bootstrap-453 .table>tbody+tbody{border-top:2px solid #ddd}.factory-bootstrap-453 .table .table{background-color:#fff}.factory-bootstrap-453 .table-condensed>tbody>tr>td,.factory-bootstrap-453 .table-condensed>tbody>tr>th,.factory-bootstrap-453 .table-condensed>tfoot>tr>td,.factory-bootstrap-453 .table-condensed>tfoot>tr>th,.factory-bootstrap-453 .table-condensed>thead>tr>td,.factory-bootstrap-453 .table-condensed>thead>tr>th{padding:5px}.factory-bootstrap-453 .table-bordered,.factory-bootstrap-453 .table-bordered>tbody>tr>td,.factory-bootstrap-453 .table-bordered>tbody>tr>th,.factory-bootstrap-453 .table-bordered>tfoot>tr>td,.factory-bootstrap-453 .table-bordered>tfoot>tr>th,.factory-bootstrap-453 .table-bordered>thead>tr>td,.factory-bootstrap-453 .table-bordered>thead>tr>th{border:1px solid #ddd}.factory-bootstrap-453 .table-bordered>thead>tr>td,.factory-bootstrap-453 .table-bordered>thead>tr>th{border-bottom-width:2px}.factory-bootstrap-453 .table-striped>tbody>tr:nth-child(odd)>td,.factory-bootstrap-453 .table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.factory-bootstrap-453 .table-hover>tbody>tr:hover>td,.factory-bootstrap-453 .table-hover>tbody>tr:hover>th{background-color:#f5f5f5}.factory-bootstrap-453 table col[class*=col-]{position:static;display:table-column;float:none}.factory-bootstrap-453 table td[class*=col-],.factory-bootstrap-453 table th[class*=col-]{display:table-cell;float:none}.factory-bootstrap-453 .table>tbody>.active>td,.factory-bootstrap-453 .table>tbody>.active>th,.factory-bootstrap-453 .table>tbody>tr>.active,.factory-bootstrap-453 .table>tfoot>.active>td,.factory-bootstrap-453 .table>tfoot>.active>th,.factory-bootstrap-453 .table>tfoot>tr>.active,.factory-bootstrap-453 .table>thead>.active>td,.factory-bootstrap-453 .table>thead>.active>th,.factory-bootstrap-453 .table>thead>tr>.active{background-color:#f5f5f5}.factory-bootstrap-453 .table-hover>tbody>.active:hover>td,.factory-bootstrap-453 .table-hover>tbody>.active:hover>th,.factory-bootstrap-453 .table-hover>tbody>tr>.active:hover{background-color:#e8e8e8}.factory-bootstrap-453 .table>tbody>.success>td,.factory-bootstrap-453 .table>tbody>.success>th,.factory-bootstrap-453 .table>tbody>tr>.success,.factory-bootstrap-453 .table>tfoot>.success>td,.factory-bootstrap-453 .table>tfoot>.success>th,.factory-bootstrap-453 .table>tfoot>tr>.success,.factory-bootstrap-453 .table>thead>.success>td,.factory-bootstrap-453 .table>thead>.success>th,.factory-bootstrap-453 .table>thead>tr>.success{background-color:#dff0d8}.factory-bootstrap-453 .table-hover>tbody>.success:hover>td,.factory-bootstrap-453 .table-hover>tbody>.success:hover>th,.factory-bootstrap-453 .table-hover>tbody>tr>.success:hover{background-color:#d0e9c6}.factory-bootstrap-453 .table>tbody>.danger>td,.factory-bootstrap-453 .table>tbody>.danger>th,.factory-bootstrap-453 .table>tbody>tr>.danger,.factory-bootstrap-453 .table>tfoot>.danger>td,.factory-bootstrap-453 .table>tfoot>.danger>th,.factory-bootstrap-453 .table>tfoot>tr>.danger,.factory-bootstrap-453 .table>thead>.danger>td,.factory-bootstrap-453 .table>thead>.danger>th,.factory-bootstrap-453 .table>thead>tr>.danger{background-color:#f2dede}.factory-bootstrap-453 .table-hover>tbody>.danger:hover>td,.factory-bootstrap-453 .table-hover>tbody>.danger:hover>th,.factory-bootstrap-453 .table-hover>tbody>tr>.danger:hover{background-color:#ebcccc}.factory-bootstrap-453 .table>tbody>.warning>td,.factory-bootstrap-453 .table>tbody>.warning>th,.factory-bootstrap-453 .table>tbody>tr>.warning,.factory-bootstrap-453 .table>tfoot>.warning>td,.factory-bootstrap-453 .table>tfoot>.warning>th,.factory-bootstrap-453 .table>tfoot>tr>.warning,.factory-bootstrap-453 .table>thead>.warning>td,.factory-bootstrap-453 .table>thead>.warning>th,.factory-bootstrap-453 .table>thead>tr>.warning{background-color:#fcf8e3}.factory-bootstrap-453 .table-hover>tbody>.warning:hover>td,.factory-bootstrap-453 .table-hover>tbody>.warning:hover>th,.factory-bootstrap-453 .table-hover>tbody>tr>.warning:hover{background-color:#faf2cc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:scroll;overflow-y:hidden;border:1px solid #ddd;-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}.factory-bootstrap-453 fieldset{padding:0;margin:0;border:0}.factory-bootstrap-453 legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5;-moz-box-sizing:content-box;box-sizing:content-box}.factory-bootstrap-453 label{display:inline-block;margin-bottom:5px;font-weight:700}.factory-bootstrap-453 input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.factory-bootstrap-453 input[type=checkbox],.factory-bootstrap-453 input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}.factory-bootstrap-453 input[type=file]{display:block}.factory-bootstrap-453 select[multiple],.factory-bootstrap-453 select[size]{height:auto}.factory-bootstrap-453 select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}.factory-bootstrap-453 input[type=checkbox]:focus,.factory-bootstrap-453 input[type=file]:focus,.factory-bootstrap-453 input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-453 input[type=number]::-webkit-inner-spin-button,.factory-bootstrap-453 input[type=number]::-webkit-outer-spin-button{height:auto}.factory-bootstrap-453 output{display:block;padding-top:7px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle}.factory-bootstrap-453 .form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.factory-bootstrap-453 .form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-453 .form-control:-moz-placeholder{color:#999}.factory-bootstrap-453 .form-control::-moz-placeholder{color:#999;opacity:1}.factory-bootstrap-453 .form-control:-ms-input-placeholder{color:#999}.factory-bootstrap-453 .form-control::-webkit-input-placeholder{color:#999}.factory-bootstrap-453 .form-control[disabled],.factory-bootstrap-453 .form-control[readonly],.factory-bootstrap-453 fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}.factory-bootstrap-453 textarea.form-control{height:auto}.factory-bootstrap-453 .form-group{margin-bottom:15px}.factory-bootstrap-453 .checkbox,.factory-bootstrap-453 .radio{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.factory-bootstrap-453 .checkbox label,.factory-bootstrap-453 .radio label{display:inline;margin-bottom:0;font-weight:400;cursor:pointer}.factory-bootstrap-453 .checkbox input[type=checkbox],.factory-bootstrap-453 .checkbox-inline input[type=checkbox],.factory-bootstrap-453 .radio input[type=radio],.factory-bootstrap-453 .radio-inline input[type=radio]{float:left;margin-left:-20px}.factory-bootstrap-453 .checkbox+.checkbox,.factory-bootstrap-453 .radio+.radio{margin-top:-5px}.factory-bootstrap-453 .checkbox-inline,.factory-bootstrap-453 .radio-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.factory-bootstrap-453 .checkbox-inline+.checkbox-inline,.factory-bootstrap-453 .radio-inline+.radio-inline{margin-top:0;margin-left:10px}.factory-bootstrap-453 .checkbox-inline[disabled],.factory-bootstrap-453 .checkbox[disabled],.factory-bootstrap-453 .radio-inline[disabled],.factory-bootstrap-453 .radio[disabled],.factory-bootstrap-453 fieldset[disabled] .checkbox,.factory-bootstrap-453 fieldset[disabled] .checkbox-inline,.factory-bootstrap-453 fieldset[disabled] .radio,.factory-bootstrap-453 fieldset[disabled] .radio-inline,.factory-bootstrap-453 fieldset[disabled] input[type=checkbox],.factory-bootstrap-453 fieldset[disabled] input[type=radio],.factory-bootstrap-453 input[type=checkbox][disabled],.factory-bootstrap-453 input[type=radio][disabled]{cursor:not-allowed}.factory-bootstrap-453 .input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-453 select.input-sm{height:30px;line-height:30px}.factory-bootstrap-453 textarea.input-sm{height:auto}.factory-bootstrap-453 .input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-453 select.input-lg{height:46px;line-height:46px}.factory-bootstrap-453 textarea.input-lg{height:auto}.factory-bootstrap-453 .has-warning .checkbox,.factory-bootstrap-453 .has-warning .checkbox-inline,.factory-bootstrap-453 .has-warning .control-label,.factory-bootstrap-453 .has-warning .help-block,.factory-bootstrap-453 .has-warning .radio,.factory-bootstrap-453 .has-warning .radio-inline{color:#8a6d3b}.factory-bootstrap-453 .has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-453 .has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.factory-bootstrap-453 .has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.factory-bootstrap-453 .has-error .checkbox,.factory-bootstrap-453 .has-error .checkbox-inline,.factory-bootstrap-453 .has-error .control-label,.factory-bootstrap-453 .has-error .help-block,.factory-bootstrap-453 .has-error .radio,.factory-bootstrap-453 .has-error .radio-inline{color:#a94442}.factory-bootstrap-453 .controls{display:block}.factory-bootstrap-453 .has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-453 .has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.factory-bootstrap-453 .has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.factory-bootstrap-453 .has-success .checkbox,.factory-bootstrap-453 .has-success .checkbox-inline,.factory-bootstrap-453 .has-success .control-label,.factory-bootstrap-453 .has-success .help-block,.factory-bootstrap-453 .has-success .radio,.factory-bootstrap-453 .has-success .radio-inline{color:#3c763d}.factory-bootstrap-453 .has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-453 .has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.factory-bootstrap-453 .has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.factory-bootstrap-453 .form-control-static{margin-bottom:0}.factory-bootstrap-453 .help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373;font-weight:400}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline select.form-control{width:auto}.form-inline .checkbox,.form-inline .radio{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{float:none;margin-left:0}}.factory-bootstrap-453 .form-horizontal .checkbox,.factory-bootstrap-453 .form-horizontal .checkbox-inline,.factory-bootstrap-453 .form-horizontal .control-label,.factory-bootstrap-453 .form-horizontal .radio,.factory-bootstrap-453 .form-horizontal .radio-inline{position:relative;padding-top:7px;margin-top:0;margin-bottom:0}.factory-bootstrap-453 .form-horizontal .control-label{max-width:200px}.factory-bootstrap-453 .form-horizontal .checkbox,.factory-bootstrap-453 .form-horizontal .radio{min-height:27px}.factory-bootstrap-453 .form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.factory-bootstrap-453 .form-horizontal .form-group:after,.factory-bootstrap-453 .form-horizontal .form-group:before{display:table;content:" "}.factory-bootstrap-453 .form-horizontal .form-group:after{clear:both}.factory-bootstrap-453 .form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.factory-bootstrap-453 .btn{display:inline-block;padding:5px 12px;margin-bottom:0;font-size:13px;font-weight:400;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;border-radius:3px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.factory-bootstrap-453 .btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-453 .btn{text-decoration:none}.factory-bootstrap-453 .btn:focus,.factory-bootstrap-453 .btn:hover{color:#333;text-decoration:none}.factory-bootstrap-453 .btn.disabled,.factory-bootstrap-453 .btn[disabled],.factory-bootstrap-453 fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-453 .btn-default.active,.factory-bootstrap-453 .btn-default:active,.factory-bootstrap-453 .btn-default:focus,.factory-bootstrap-453 .btn-default:hover,.factory-bootstrap-453 .open .dropdown-toggle.btn-default{background:#fafafa;border-color:#999;color:#222}.factory-bootstrap-453 .btn-default.active,.factory-bootstrap-453 .btn-default:active,.factory-bootstrap-453 .open .dropdown-toggle.btn-default{background-image:none}.factory-bootstrap-453 .btn-default.disabled,.factory-bootstrap-453 .btn-default.disabled.active,.factory-bootstrap-453 .btn-default.disabled:active,.factory-bootstrap-453 .btn-default.disabled:focus,.factory-bootstrap-453 .btn-default.disabled:hover,.factory-bootstrap-453 .btn-default[disabled],.factory-bootstrap-453 .btn-default[disabled].active,.factory-bootstrap-453 .btn-default[disabled]:active,.factory-bootstrap-453 .btn-default[disabled]:focus,.factory-bootstrap-453 .btn-default[disabled]:hover,.factory-bootstrap-453 fieldset[disabled] .btn-default,.factory-bootstrap-453 fieldset[disabled] .btn-default.active,.factory-bootstrap-453 fieldset[disabled] .btn-default:active,.factory-bootstrap-453 fieldset[disabled] .btn-default:focus,.factory-bootstrap-453 fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.factory-bootstrap-453 .btn-default .badge{color:#fff;background-color:#fff}.factory-bootstrap-453 .btn-primary.active,.factory-bootstrap-453 .btn-primary:active,.factory-bootstrap-453 .btn-primary:focus,.factory-bootstrap-453 .btn-primary:hover,.factory-bootstrap-453 .open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.factory-bootstrap-453 .btn-primary.active,.factory-bootstrap-453 .btn-primary:active,.factory-bootstrap-453 .open .dropdown-toggle.btn-primary{background-image:none}.factory-bootstrap-453 .btn-primary.disabled,.factory-bootstrap-453 .btn-primary.disabled.active,.factory-bootstrap-453 .btn-primary.disabled:active,.factory-bootstrap-453 .btn-primary.disabled:focus,.factory-bootstrap-453 .btn-primary.disabled:hover,.factory-bootstrap-453 .btn-primary[disabled],.factory-bootstrap-453 .btn-primary[disabled].active,.factory-bootstrap-453 .btn-primary[disabled]:active,.factory-bootstrap-453 .btn-primary[disabled]:focus,.factory-bootstrap-453 .btn-primary[disabled]:hover,.factory-bootstrap-453 fieldset[disabled] .btn-primary,.factory-bootstrap-453 fieldset[disabled] .btn-primary.active,.factory-bootstrap-453 fieldset[disabled] .btn-primary:active,.factory-bootstrap-453 fieldset[disabled] .btn-primary:focus,.factory-bootstrap-453 fieldset[disabled] .btn-primary:hover{background-color:#428bca;border-color:#357ebd}.factory-bootstrap-453 .btn-primary .badge{color:#428bca;background-color:#fff}.factory-bootstrap-453 .btn-warning{color:#fff;background-color:#f0ad4e}.factory-bootstrap-453 .btn-warning.active,.factory-bootstrap-453 .btn-warning:active,.factory-bootstrap-453 .btn-warning:focus,.factory-bootstrap-453 .btn-warning:hover,.factory-bootstrap-453 .open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.factory-bootstrap-453 .btn-warning.active,.factory-bootstrap-453 .btn-warning:active,.factory-bootstrap-453 .open .dropdown-toggle.btn-warning{background-image:none}.factory-bootstrap-453 .btn-warning.disabled,.factory-bootstrap-453 .btn-warning.disabled.active,.factory-bootstrap-453 .btn-warning.disabled:active,.factory-bootstrap-453 .btn-warning.disabled:focus,.factory-bootstrap-453 .btn-warning.disabled:hover,.factory-bootstrap-453 .btn-warning[disabled],.factory-bootstrap-453 .btn-warning[disabled].active,.factory-bootstrap-453 .btn-warning[disabled]:active,.factory-bootstrap-453 .btn-warning[disabled]:focus,.factory-bootstrap-453 .btn-warning[disabled]:hover,.factory-bootstrap-453 fieldset[disabled] .btn-warning,.factory-bootstrap-453 fieldset[disabled] .btn-warning.active,.factory-bootstrap-453 fieldset[disabled] .btn-warning:active,.factory-bootstrap-453 fieldset[disabled] .btn-warning:focus,.factory-bootstrap-453 fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.factory-bootstrap-453 .btn-warning .badge{color:#f0ad4e;background-color:#fff}.factory-bootstrap-453 .btn-success{color:#fff;background-color:#5cb85c}.factory-bootstrap-453 .btn-success.active,.factory-bootstrap-453 .btn-success:active,.factory-bootstrap-453 .btn-success:focus,.factory-bootstrap-453 .btn-success:hover,.factory-bootstrap-453 .open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.factory-bootstrap-453 .btn-success.active,.factory-bootstrap-453 .btn-success:active,.factory-bootstrap-453 .open .dropdown-toggle.btn-success{background-image:none}.factory-bootstrap-453 .btn-success.disabled,.factory-bootstrap-453 .btn-success.disabled.active,.factory-bootstrap-453 .btn-success.disabled:active,.factory-bootstrap-453 .btn-success.disabled:focus,.factory-bootstrap-453 .btn-success.disabled:hover,.factory-bootstrap-453 .btn-success[disabled],.factory-bootstrap-453 .btn-success[disabled].active,.factory-bootstrap-453 .btn-success[disabled]:active,.factory-bootstrap-453 .btn-success[disabled]:focus,.factory-bootstrap-453 .btn-success[disabled]:hover,.factory-bootstrap-453 fieldset[disabled] .btn-success,.factory-bootstrap-453 fieldset[disabled] .btn-success.active,.factory-bootstrap-453 fieldset[disabled] .btn-success:active,.factory-bootstrap-453 fieldset[disabled] .btn-success:focus,.factory-bootstrap-453 fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.factory-bootstrap-453 .btn-success .badge{color:#5cb85c;background-color:#fff}.factory-bootstrap-453 .btn-info{color:#fff;background-color:#5bc0de}.factory-bootstrap-453 .btn-info.active,.factory-bootstrap-453 .btn-info:active,.factory-bootstrap-453 .btn-info:focus,.factory-bootstrap-453 .btn-info:hover,.factory-bootstrap-453 .open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.factory-bootstrap-453 .btn-info.active,.factory-bootstrap-453 .btn-info:active,.factory-bootstrap-453 .open .dropdown-toggle.btn-info{background-image:none}.factory-bootstrap-453 .btn-info.disabled,.factory-bootstrap-453 .btn-info.disabled.active,.factory-bootstrap-453 .btn-info.disabled:active,.factory-bootstrap-453 .btn-info.disabled:focus,.factory-bootstrap-453 .btn-info.disabled:hover,.factory-bootstrap-453 .btn-info[disabled],.factory-bootstrap-453 .btn-info[disabled].active,.factory-bootstrap-453 .btn-info[disabled]:active,.factory-bootstrap-453 .btn-info[disabled]:focus,.factory-bootstrap-453 .btn-info[disabled]:hover,.factory-bootstrap-453 fieldset[disabled] .btn-info,.factory-bootstrap-453 fieldset[disabled] .btn-info.active,.factory-bootstrap-453 fieldset[disabled] .btn-info:active,.factory-bootstrap-453 fieldset[disabled] .btn-info:focus,.factory-bootstrap-453 fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.factory-bootstrap-453 .btn-info .badge{color:#5bc0de;background-color:#fff}.factory-bootstrap-453 .btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.factory-bootstrap-453 .btn-link,.factory-bootstrap-453 .btn-link:active,.factory-bootstrap-453 .btn-link[disabled],.factory-bootstrap-453 fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-453 .btn-link,.factory-bootstrap-453 .btn-link:active,.factory-bootstrap-453 .btn-link:focus,.factory-bootstrap-453 .btn-link:hover{border-color:transparent}.factory-bootstrap-453 .btn-link:focus,.factory-bootstrap-453 .btn-link:hover{color:#2a6496;text-decoration:underline;background-color:transparent}.factory-bootstrap-453 .btn-link[disabled]:focus,.factory-bootstrap-453 .btn-link[disabled]:hover,.factory-bootstrap-453 fieldset[disabled] .btn-link:focus,.factory-bootstrap-453 fieldset[disabled] .btn-link:hover{color:#999;text-decoration:none}.factory-bootstrap-453 .btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-453 .btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-453 .btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-453 .btn-block{display:block;width:100%;padding-right:0;padding-left:0}.factory-bootstrap-453 .btn-block+.btn-block{margin-top:5px}.factory-bootstrap-453 input[type=button].btn-block,.factory-bootstrap-453 input[type=reset].btn-block,.factory-bootstrap-453 input[type=submit].btn-block{width:100%}.factory-bootstrap-453 .fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.factory-bootstrap-453 .fade.in{opacity:1}.factory-bootstrap-453 .collapse{display:none}.factory-bootstrap-453 .collapse.in{display:block}.factory-bootstrap-453 .collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular) format('svg')}.factory-bootstrap-453 .glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:400;line-height:1;-moz-osx-font-smoothing:grayscale}.factory-bootstrap-453 .glyphicon:empty{width:1em}.factory-bootstrap-453 .glyphicon-asterisk:before{content:"\2a"}.factory-bootstrap-453 .glyphicon-plus:before{content:"\2b"}.factory-bootstrap-453 .glyphicon-euro:before{content:"\20ac"}.factory-bootstrap-453 .glyphicon-minus:before{content:"\2212"}.factory-bootstrap-453 .glyphicon-cloud:before{content:"\2601"}.factory-bootstrap-453 .glyphicon-envelope:before{content:"\2709"}.factory-bootstrap-453 .glyphicon-pencil:before{content:"\270f"}.factory-bootstrap-453 .glyphicon-glass:before{content:"\e001"}.factory-bootstrap-453 .glyphicon-music:before{content:"\e002"}.factory-bootstrap-453 .glyphicon-search:before{content:"\e003"}.factory-bootstrap-453 .glyphicon-heart:before{content:"\e005"}.factory-bootstrap-453 .glyphicon-star:before{content:"\e006"}.factory-bootstrap-453 .glyphicon-star-empty:before{content:"\e007"}.factory-bootstrap-453 .glyphicon-user:before{content:"\e008"}.factory-bootstrap-453 .glyphicon-film:before{content:"\e009"}.factory-bootstrap-453 .glyphicon-th-large:before{content:"\e010"}.factory-bootstrap-453 .glyphicon-th:before{content:"\e011"}.factory-bootstrap-453 .glyphicon-th-list:before{content:"\e012"}.factory-bootstrap-453 .glyphicon-ok:before{content:"\e013"}.factory-bootstrap-453 .glyphicon-remove:before{content:"\e014"}.factory-bootstrap-453 .glyphicon-zoom-in:before{content:"\e015"}.factory-bootstrap-453 .glyphicon-zoom-out:before{content:"\e016"}.factory-bootstrap-453 .glyphicon-off:before{content:"\e017"}.factory-bootstrap-453 .glyphicon-signal:before{content:"\e018"}.factory-bootstrap-453 .glyphicon-cog:before{content:"\e019"}.factory-bootstrap-453 .glyphicon-trash:before{content:"\e020"}.factory-bootstrap-453 .glyphicon-home:before{content:"\e021"}.factory-bootstrap-453 .glyphicon-file:before{content:"\e022"}.factory-bootstrap-453 .glyphicon-time:before{content:"\e023"}.factory-bootstrap-453 .glyphicon-road:before{content:"\e024"}.factory-bootstrap-453 .glyphicon-download-alt:before{content:"\e025"}.factory-bootstrap-453 .glyphicon-download:before{content:"\e026"}.factory-bootstrap-453 .glyphicon-upload:before{content:"\e027"}.factory-bootstrap-453 .glyphicon-inbox:before{content:"\e028"}.factory-bootstrap-453 .glyphicon-play-circle:before{content:"\e029"}.factory-bootstrap-453 .glyphicon-repeat:before{content:"\e030"}.factory-bootstrap-453 .glyphicon-refresh:before{content:"\e031"}.factory-bootstrap-453 .glyphicon-list-alt:before{content:"\e032"}.factory-bootstrap-453 .glyphicon-lock:before{content:"\e033"}.factory-bootstrap-453 .glyphicon-flag:before{content:"\e034"}.factory-bootstrap-453 .glyphicon-headphones:before{content:"\e035"}.factory-bootstrap-453 .glyphicon-volume-off:before{content:"\e036"}.factory-bootstrap-453 .glyphicon-volume-down:before{content:"\e037"}.factory-bootstrap-453 .glyphicon-volume-up:before{content:"\e038"}.factory-bootstrap-453 .glyphicon-qrcode:before{content:"\e039"}.factory-bootstrap-453 .glyphicon-barcode:before{content:"\e040"}.factory-bootstrap-453 .glyphicon-tag:before{content:"\e041"}.factory-bootstrap-453 .glyphicon-tags:before{content:"\e042"}.factory-bootstrap-453 .glyphicon-book:before{content:"\e043"}.factory-bootstrap-453 .glyphicon-bookmark:before{content:"\e044"}.factory-bootstrap-453 .glyphicon-print:before{content:"\e045"}.factory-bootstrap-453 .glyphicon-camera:before{content:"\e046"}.factory-bootstrap-453 .glyphicon-font:before{content:"\e047"}.factory-bootstrap-453 .glyphicon-bold:before{content:"\e048"}.factory-bootstrap-453 .glyphicon-italic:before{content:"\e049"}.factory-bootstrap-453 .glyphicon-text-height:before{content:"\e050"}.factory-bootstrap-453 .glyphicon-text-width:before{content:"\e051"}.factory-bootstrap-453 .glyphicon-align-left:before{content:"\e052"}.factory-bootstrap-453 .glyphicon-align-center:before{content:"\e053"}.factory-bootstrap-453 .glyphicon-align-right:before{content:"\e054"}.factory-bootstrap-453 .glyphicon-align-justify:before{content:"\e055"}.factory-bootstrap-453 .glyphicon-list:before{content:"\e056"}.factory-bootstrap-453 .glyphicon-indent-left:before{content:"\e057"}.factory-bootstrap-453 .glyphicon-indent-right:before{content:"\e058"}.factory-bootstrap-453 .glyphicon-facetime-video:before{content:"\e059"}.factory-bootstrap-453 .glyphicon-picture:before{content:"\e060"}.factory-bootstrap-453 .glyphicon-map-marker:before{content:"\e062"}.factory-bootstrap-453 .glyphicon-adjust:before{content:"\e063"}.factory-bootstrap-453 .glyphicon-tint:before{content:"\e064"}.factory-bootstrap-453 .glyphicon-edit:before{content:"\e065"}.factory-bootstrap-453 .glyphicon-share:before{content:"\e066"}.factory-bootstrap-453 .glyphicon-check:before{content:"\e067"}.factory-bootstrap-453 .glyphicon-move:before{content:"\e068"}.factory-bootstrap-453 .glyphicon-step-backward:before{content:"\e069"}.factory-bootstrap-453 .glyphicon-fast-backward:before{content:"\e070"}.factory-bootstrap-453 .glyphicon-backward:before{content:"\e071"}.factory-bootstrap-453 .glyphicon-play:before{content:"\e072"}.factory-bootstrap-453 .glyphicon-pause:before{content:"\e073"}.factory-bootstrap-453 .glyphicon-stop:before{content:"\e074"}.factory-bootstrap-453 .glyphicon-forward:before{content:"\e075"}.factory-bootstrap-453 .glyphicon-fast-forward:before{content:"\e076"}.factory-bootstrap-453 .glyphicon-step-forward:before{content:"\e077"}.factory-bootstrap-453 .glyphicon-eject:before{content:"\e078"}.factory-bootstrap-453 .glyphicon-chevron-left:before{content:"\e079"}.factory-bootstrap-453 .glyphicon-chevron-right:before{content:"\e080"}.factory-bootstrap-453 .glyphicon-plus-sign:before{content:"\e081"}.factory-bootstrap-453 .glyphicon-minus-sign:before{content:"\e082"}.factory-bootstrap-453 .glyphicon-remove-sign:before{content:"\e083"}.factory-bootstrap-453 .glyphicon-ok-sign:before{content:"\e084"}.factory-bootstrap-453 .glyphicon-question-sign:before{content:"\e085"}.factory-bootstrap-453 .glyphicon-info-sign:before{content:"\e086"}.factory-bootstrap-453 .glyphicon-screenshot:before{content:"\e087"}.factory-bootstrap-453 .glyphicon-remove-circle:before{content:"\e088"}.factory-bootstrap-453 .glyphicon-ok-circle:before{content:"\e089"}.factory-bootstrap-453 .glyphicon-ban-circle:before{content:"\e090"}.factory-bootstrap-453 .glyphicon-arrow-left:before{content:"\e091"}.factory-bootstrap-453 .glyphicon-arrow-right:before{content:"\e092"}.factory-bootstrap-453 .glyphicon-arrow-up:before{content:"\e093"}.factory-bootstrap-453 .glyphicon-arrow-down:before{content:"\e094"}.factory-bootstrap-453 .glyphicon-share-alt:before{content:"\e095"}.factory-bootstrap-453 .glyphicon-resize-full:before{content:"\e096"}.factory-bootstrap-453 .glyphicon-resize-small:before{content:"\e097"}.factory-bootstrap-453 .glyphicon-exclamation-sign:before{content:"\e101"}.factory-bootstrap-453 .glyphicon-gift:before{content:"\e102"}.factory-bootstrap-453 .glyphicon-leaf:before{content:"\e103"}.factory-bootstrap-453 .glyphicon-fire:before{content:"\e104"}.factory-bootstrap-453 .glyphicon-eye-open:before{content:"\e105"}.factory-bootstrap-453 .glyphicon-eye-close:before{content:"\e106"}.factory-bootstrap-453 .glyphicon-warning-sign:before{content:"\e107"}.factory-bootstrap-453 .glyphicon-plane:before{content:"\e108"}.factory-bootstrap-453 .glyphicon-calendar:before{content:"\e109"}.factory-bootstrap-453 .glyphicon-random:before{content:"\e110"}.factory-bootstrap-453 .glyphicon-comment:before{content:"\e111"}.factory-bootstrap-453 .glyphicon-magnet:before{content:"\e112"}.factory-bootstrap-453 .glyphicon-chevron-up:before{content:"\e113"}.factory-bootstrap-453 .glyphicon-chevron-down:before{content:"\e114"}.factory-bootstrap-453 .glyphicon-retweet:before{content:"\e115"}.factory-bootstrap-453 .glyphicon-shopping-cart:before{content:"\e116"}.factory-bootstrap-453 .glyphicon-folder-close:before{content:"\e117"}.factory-bootstrap-453 .glyphicon-folder-open:before{content:"\e118"}.factory-bootstrap-453 .glyphicon-resize-vertical:before{content:"\e119"}.factory-bootstrap-453 .glyphicon-resize-horizontal:before{content:"\e120"}.factory-bootstrap-453 .glyphicon-hdd:before{content:"\e121"}.factory-bootstrap-453 .glyphicon-bullhorn:before{content:"\e122"}.factory-bootstrap-453 .glyphicon-bell:before{content:"\e123"}.factory-bootstrap-453 .glyphicon-certificate:before{content:"\e124"}.factory-bootstrap-453 .glyphicon-thumbs-up:before{content:"\e125"}.factory-bootstrap-453 .glyphicon-thumbs-down:before{content:"\e126"}.factory-bootstrap-453 .glyphicon-hand-right:before{content:"\e127"}.factory-bootstrap-453 .glyphicon-hand-left:before{content:"\e128"}.factory-bootstrap-453 .glyphicon-hand-up:before{content:"\e129"}.factory-bootstrap-453 .glyphicon-hand-down:before{content:"\e130"}.factory-bootstrap-453 .glyphicon-circle-arrow-right:before{content:"\e131"}.factory-bootstrap-453 .glyphicon-circle-arrow-left:before{content:"\e132"}.factory-bootstrap-453 .glyphicon-circle-arrow-up:before{content:"\e133"}.factory-bootstrap-453 .glyphicon-circle-arrow-down:before{content:"\e134"}.factory-bootstrap-453 .glyphicon-globe:before{content:"\e135"}.factory-bootstrap-453 .glyphicon-wrench:before{content:"\e136"}.factory-bootstrap-453 .glyphicon-tasks:before{content:"\e137"}.factory-bootstrap-453 .glyphicon-filter:before{content:"\e138"}.factory-bootstrap-453 .glyphicon-briefcase:before{content:"\e139"}.factory-bootstrap-453 .glyphicon-fullscreen:before{content:"\e140"}.factory-bootstrap-453 .glyphicon-dashboard:before{content:"\e141"}.factory-bootstrap-453 .glyphicon-paperclip:before{content:"\e142"}.factory-bootstrap-453 .glyphicon-heart-empty:before{content:"\e143"}.factory-bootstrap-453 .glyphicon-link:before{content:"\e144"}.factory-bootstrap-453 .glyphicon-phone:before{content:"\e145"}.factory-bootstrap-453 .glyphicon-pushpin:before{content:"\e146"}.factory-bootstrap-453 .glyphicon-usd:before{content:"\e148"}.factory-bootstrap-453 .glyphicon-gbp:before{content:"\e149"}.factory-bootstrap-453 .glyphicon-sort:before{content:"\e150"}.factory-bootstrap-453 .glyphicon-sort-by-alphabet:before{content:"\e151"}.factory-bootstrap-453 .glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.factory-bootstrap-453 .glyphicon-sort-by-order:before{content:"\e153"}.factory-bootstrap-453 .glyphicon-sort-by-order-alt:before{content:"\e154"}.factory-bootstrap-453 .glyphicon-sort-by-attributes:before{content:"\e155"}.factory-bootstrap-453 .glyphicon-sort-by-attributes-alt:before{content:"\e156"}.factory-bootstrap-453 .glyphicon-unchecked:before{content:"\e157"}.factory-bootstrap-453 .glyphicon-expand:before{content:"\e158"}.factory-bootstrap-453 .glyphicon-collapse-down:before{content:"\e159"}.factory-bootstrap-453 .glyphicon-collapse-up:before{content:"\e160"}.factory-bootstrap-453 .glyphicon-log-in:before{content:"\e161"}.factory-bootstrap-453 .glyphicon-flash:before{content:"\e162"}.factory-bootstrap-453 .glyphicon-log-out:before{content:"\e163"}.factory-bootstrap-453 .glyphicon-new-window:before{content:"\e164"}.factory-bootstrap-453 .glyphicon-record:before{content:"\e165"}.factory-bootstrap-453 .glyphicon-save:before{content:"\e166"}.factory-bootstrap-453 .glyphicon-open:before{content:"\e167"}.factory-bootstrap-453 .glyphicon-saved:before{content:"\e168"}.factory-bootstrap-453 .glyphicon-import:before{content:"\e169"}.factory-bootstrap-453 .glyphicon-export:before{content:"\e170"}.factory-bootstrap-453 .glyphicon-send:before{content:"\e171"}.factory-bootstrap-453 .glyphicon-floppy-disk:before{content:"\e172"}.factory-bootstrap-453 .glyphicon-floppy-saved:before{content:"\e173"}.factory-bootstrap-453 .glyphicon-floppy-remove:before{content:"\e174"}.factory-bootstrap-453 .glyphicon-floppy-save:before{content:"\e175"}.factory-bootstrap-453 .glyphicon-floppy-open:before{content:"\e176"}.factory-bootstrap-453 .glyphicon-credit-card:before{content:"\e177"}.factory-bootstrap-453 .glyphicon-transfer:before{content:"\e178"}.factory-bootstrap-453 .glyphicon-cutlery:before{content:"\e179"}.factory-bootstrap-453 .glyphicon-header:before{content:"\e180"}.factory-bootstrap-453 .glyphicon-compressed:before{content:"\e181"}.factory-bootstrap-453 .glyphicon-earphone:before{content:"\e182"}.factory-bootstrap-453 .glyphicon-phone-alt:before{content:"\e183"}.factory-bootstrap-453 .glyphicon-tower:before{content:"\e184"}.factory-bootstrap-453 .glyphicon-stats:before{content:"\e185"}.factory-bootstrap-453 .glyphicon-sd-video:before{content:"\e186"}.factory-bootstrap-453 .glyphicon-hd-video:before{content:"\e187"}.factory-bootstrap-453 .glyphicon-subtitles:before{content:"\e188"}.factory-bootstrap-453 .glyphicon-sound-stereo:before{content:"\e189"}.factory-bootstrap-453 .glyphicon-sound-dolby:before{content:"\e190"}.factory-bootstrap-453 .glyphicon-sound-5-1:before{content:"\e191"}.factory-bootstrap-453 .glyphicon-sound-6-1:before{content:"\e192"}.factory-bootstrap-453 .glyphicon-sound-7-1:before{content:"\e193"}.factory-bootstrap-453 .glyphicon-copyright-mark:before{content:"\e194"}.factory-bootstrap-453 .glyphicon-registration-mark:before{content:"\e195"}.factory-bootstrap-453 .glyphicon-cloud-download:before{content:"\e197"}.factory-bootstrap-453 .glyphicon-cloud-upload:before{content:"\e198"}.factory-bootstrap-453 .glyphicon-tree-conifer:before{content:"\e199"}.factory-bootstrap-453 .glyphicon-tree-deciduous:before{content:"\e200"}.factory-bootstrap-453 .caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.factory-bootstrap-453 .dropdown{position:relative}.factory-bootstrap-453 .dropdown-toggle:focus{outline:0}.factory-bootstrap-453 .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.factory-bootstrap-453 .dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-453 .dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-453 .dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.428571429;color:#333;white-space:nowrap}.factory-bootstrap-453 .dropdown-menu>li>a:focus,.factory-bootstrap-453 .dropdown-menu>li>a:hover{color:#262626;text-decoration:none}.factory-bootstrap-453 .dropdown-menu>.active>a,.factory-bootstrap-453 .dropdown-menu>.active>a:focus,.factory-bootstrap-453 .dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0}.factory-bootstrap-453 .dropdown-menu>.disabled>a,.factory-bootstrap-453 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-453 .dropdown-menu>.disabled>a:hover{color:#999}.factory-bootstrap-453 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-453 .dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-453 .open>.dropdown-menu{display:block}.factory-bootstrap-453 .open>a{outline:0}.factory-bootstrap-453 .dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.factory-bootstrap-453 .dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.factory-bootstrap-453 .pull-right>.dropdown-menu{right:0;left:auto}.factory-bootstrap-453 .dropup .caret,.factory-bootstrap-453 .navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.factory-bootstrap-453 .dropup .dropdown-menu,.factory-bootstrap-453 .navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.factory-bootstrap-453 .btn-group,.factory-bootstrap-453 .btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.factory-bootstrap-453 .btn-group-vertical>.btn,.factory-bootstrap-453 .btn-group>.btn{position:relative;float:left}.factory-bootstrap-453 .btn-group-vertical>.btn.active,.factory-bootstrap-453 .btn-group-vertical>.btn:active,.factory-bootstrap-453 .btn-group-vertical>.btn:focus,.factory-bootstrap-453 .btn-group-vertical>.btn:hover,.factory-bootstrap-453 .btn-group>.btn.active,.factory-bootstrap-453 .btn-group>.btn:active,.factory-bootstrap-453 .btn-group>.btn:focus,.factory-bootstrap-453 .btn-group>.btn:hover{z-index:2}.factory-bootstrap-453 .btn-group-vertical>.btn:focus,.factory-bootstrap-453 .btn-group>.btn:focus{outline:0}.factory-bootstrap-453 .btn-group .btn+.btn,.factory-bootstrap-453 .btn-group .btn+.btn-group,.factory-bootstrap-453 .btn-group .btn-group+.btn,.factory-bootstrap-453 .btn-group .btn-group+.btn-group{margin-left:-1px}.factory-bootstrap-453 .btn-toolbar:after,.factory-bootstrap-453 .btn-toolbar:before{display:table;content:" "}.factory-bootstrap-453 .btn-toolbar:after{clear:both}.factory-bootstrap-453 .btn-toolbar .btn-group{float:left}.factory-bootstrap-453 .btn-toolbar>.btn+.btn,.factory-bootstrap-453 .btn-toolbar>.btn+.btn-group,.factory-bootstrap-453 .btn-toolbar>.btn-group+.btn,.factory-bootstrap-453 .btn-toolbar>.btn-group+.btn-group{margin-left:5px}.factory-bootstrap-453 .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.factory-bootstrap-453 .btn-group>.btn:first-child{margin-left:0}.factory-bootstrap-453 .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-453 .btn-group>.btn:last-child:not(:first-child),.factory-bootstrap-453 .btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-453 .btn-group>.btn-group{float:left}.factory-bootstrap-453 .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-453 .btn-group>.btn-group:first-child>.btn:last-child,.factory-bootstrap-453 .btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-453 .btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-453 .btn-group .dropdown-toggle:active,.factory-bootstrap-453 .btn-group.open .dropdown-toggle{outline:0}.factory-bootstrap-453 .btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-453 .btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-453 .btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-453 .btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.factory-bootstrap-453 .btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.factory-bootstrap-453 .btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.factory-bootstrap-453 .btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-453 .btn-group{border:4px solid #f9f9f9;border-radius:4px}.factory-bootstrap-453 .btn-group .btn.active.value{text-shadow:none;color:#fff;background-color:#33aad5;-webkit-box-shadow:inset 0 1px 1px #0074a2;box-shadow:inset 0 1px 3px #0074a2;border-top:1px solid #0074a2;border-bottom:1px solid #0074a2;border-left:1px solid #0074a2}.factory-bootstrap-453 .btn .caret{margin-left:0}.factory-bootstrap-453 .btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.factory-bootstrap-453 .dropup .btn-lg .caret{border-width:0 5px 5px}.factory-bootstrap-453 .btn-group-vertical>.btn,.factory-bootstrap-453 .btn-group-vertical>.btn-group,.factory-bootstrap-453 .btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.factory-bootstrap-453 .btn-group-vertical>.btn-group:after,.factory-bootstrap-453 .btn-group-vertical>.btn-group:before{display:table;content:" "}.factory-bootstrap-453 .btn-group-vertical>.btn-group:after{clear:both}.factory-bootstrap-453 .btn-group-vertical>.btn-group>.btn{float:none}.factory-bootstrap-453 .btn-group-vertical>.btn+.btn,.factory-bootstrap-453 .btn-group-vertical>.btn+.btn-group,.factory-bootstrap-453 .btn-group-vertical>.btn-group+.btn,.factory-bootstrap-453 .btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.factory-bootstrap-453 .btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-453 .btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-453 .btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-bottom-left-radius:4px;border-top-left-radius:0}.factory-bootstrap-453 .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-453 .btn-group-vertical>.btn-group:first-child>.btn:last-child,.factory-bootstrap-453 .btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-453 .btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-453 .btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.factory-bootstrap-453 .btn-group-justified>.btn,.factory-bootstrap-453 .btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.factory-bootstrap-453 .btn-group-justified>.btn-group .btn{width:100%}[data-toggle=buttons]>.btn>input[type=checkbox],[data-toggle=buttons]>.btn>input[type=radio]{display:none}.factory-bootstrap-453 .input-group{position:relative;display:table;border-collapse:separate}.factory-bootstrap-453 .input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.factory-bootstrap-453 .input-group .form-control{width:100%;margin-bottom:0}.factory-bootstrap-453 .input-group-lg>.form-control,.factory-bootstrap-453 .input-group-lg>.input-group-addon,.factory-bootstrap-453 .input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-453 select.input-group-lg>.form-control,.factory-bootstrap-453 select.input-group-lg>.input-group-addon,.factory-bootstrap-453 select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}.factory-bootstrap-453 textarea.input-group-lg>.form-control,.factory-bootstrap-453 textarea.input-group-lg>.input-group-addon,.factory-bootstrap-453 textarea.input-group-lg>.input-group-btn>.btn{height:auto}.factory-bootstrap-453 .input-group-sm>.form-control,.factory-bootstrap-453 .input-group-sm>.input-group-addon,.factory-bootstrap-453 .input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-453 select.input-group-sm>.form-control,.factory-bootstrap-453 select.input-group-sm>.input-group-addon,.factory-bootstrap-453 select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}.factory-bootstrap-453 textarea.input-group-sm>.form-control,.factory-bootstrap-453 textarea.input-group-sm>.input-group-addon,.factory-bootstrap-453 textarea.input-group-sm>.input-group-btn>.btn{height:auto}.factory-bootstrap-453 .input-group .form-control,.factory-bootstrap-453 .input-group-addon,.factory-bootstrap-453 .input-group-btn{display:table-cell}.factory-bootstrap-453 .input-group .form-control:not(:first-child):not(:last-child),.factory-bootstrap-453 .input-group-addon:not(:first-child):not(:last-child),.factory-bootstrap-453 .input-group-btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-453 .input-group-addon,.factory-bootstrap-453 .input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.factory-bootstrap-453 .input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.factory-bootstrap-453 .input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.factory-bootstrap-453 .input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.factory-bootstrap-453 .input-group-addon input[type=checkbox],.factory-bootstrap-453 .input-group-addon input[type=radio]{margin-top:0}.factory-bootstrap-453 .input-group .form-control:first-child,.factory-bootstrap-453 .input-group-addon:first-child,.factory-bootstrap-453 .input-group-btn:first-child>.btn,.factory-bootstrap-453 .input-group-btn:first-child>.dropdown-toggle,.factory-bootstrap-453 .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-453 .input-group-addon:first-child{border-right:0}.factory-bootstrap-453 .input-group .form-control:last-child,.factory-bootstrap-453 .input-group-addon:last-child,.factory-bootstrap-453 .input-group-btn:first-child>.btn:not(:first-child),.factory-bootstrap-453 .input-group-btn:last-child>.btn,.factory-bootstrap-453 .input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-453 .input-group-addon:last-child{border-left:0}.factory-bootstrap-453 .input-group-btn{position:relative;white-space:nowrap}.factory-bootstrap-453 .input-group-btn:first-child>.btn{margin-right:-1px}.factory-bootstrap-453 .input-group-btn:last-child>.btn{margin-left:-1px}.factory-bootstrap-453 .input-group-btn>.btn{position:relative}.factory-bootstrap-453 .input-group-btn>.btn+.btn{margin-left:-4px}.factory-bootstrap-453 .input-group-btn>.btn:active,.factory-bootstrap-453 .input-group-btn>.btn:hover{z-index:2}.factory-bootstrap-453 .nav{padding-left:0;margin-bottom:0;list-style:none}.factory-bootstrap-453 .nav:after,.factory-bootstrap-453 .nav:before{display:table;content:" "}.factory-bootstrap-453 .nav:after{clear:both}.factory-bootstrap-453 .nav>li{position:relative;display:block}.factory-bootstrap-453 .nav>li>a{position:relative;display:block;padding:10px 15px}.factory-bootstrap-453 .nav>li>a:focus,.factory-bootstrap-453 .nav>li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-453 .nav>li.disabled>a{color:#999}.factory-bootstrap-453 .nav>li.disabled>a:focus,.factory-bootstrap-453 .nav>li.disabled>a:hover{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.factory-bootstrap-453 .nav .open>a,.factory-bootstrap-453 .nav .open>a:focus,.factory-bootstrap-453 .nav .open>a:hover{background-color:#eee;border-color:#428bca}.factory-bootstrap-453 .nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-453 .nav>li>a>img{max-width:none}.factory-bootstrap-453 .nav-tabs{border-bottom:1px solid #ddd}.factory-bootstrap-453 .nav-tabs>li{float:left;margin-bottom:-1px}.factory-bootstrap-453 .nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.factory-bootstrap-453 .nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.factory-bootstrap-453 .nav-tabs>li.active>a,.factory-bootstrap-453 .nav-tabs>li.active>a:focus,.factory-bootstrap-453 .nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.factory-bootstrap-453 .nav-tabs.nav-justified{width:100%;border-bottom:0}.factory-bootstrap-453 .nav-tabs.nav-justified>li{float:none}.factory-bootstrap-453 .nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-453 .nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.factory-bootstrap-453 .nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-453 .nav-tabs.nav-justified>.active>a,.factory-bootstrap-453 .nav-tabs.nav-justified>.active>a:focus,.factory-bootstrap-453 .nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.factory-bootstrap-453 .nav-pills>li{float:left}.factory-bootstrap-453 .nav-pills>li>a{border-radius:4px}.factory-bootstrap-453 .nav-pills>li+li{margin-left:2px}.factory-bootstrap-453 .nav-pills>li.active>a,.factory-bootstrap-453 .nav-pills>li.active>a:focus,.factory-bootstrap-453 .nav-pills>li.active>a:hover{color:#fff;background-color:#428bca}.factory-bootstrap-453 .nav-stacked>li{float:none}.factory-bootstrap-453 .nav-stacked>li+li{margin-top:2px;margin-left:0}.factory-bootstrap-453 .nav-justified{width:100%}.factory-bootstrap-453 .nav-justified>li{float:none}.factory-bootstrap-453 .nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-453 .nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.factory-bootstrap-453 .nav-tabs-justified{border-bottom:0}.factory-bootstrap-453 .nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-453 .nav-tabs-justified>.active>a,.factory-bootstrap-453 .nav-tabs-justified>.active>a:focus,.factory-bootstrap-453 .nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.factory-bootstrap-453 .tab-content>.tab-pane{display:none}.factory-bootstrap-453 .tab-content>.active{display:block}.factory-bootstrap-453 .nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-453 .navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.factory-bootstrap-453 .navbar:after,.factory-bootstrap-453 .navbar:before{display:table;content:" "}.factory-bootstrap-453 .navbar:after{clear:both}@media (min-width:768px){.navbar{border-radius:4px}}.factory-bootstrap-453 .navbar-header:after,.factory-bootstrap-453 .navbar-header:before{display:table;content:" "}.factory-bootstrap-453 .navbar-header:after{clear:both}@media (min-width:768px){.navbar-header{float:left}}.factory-bootstrap-453 .navbar-collapse{max-height:340px;padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.factory-bootstrap-453 .navbar-collapse:after,.factory-bootstrap-453 .navbar-collapse:before{display:table;content:" "}.factory-bootstrap-453 .navbar-collapse:after{clear:both}.factory-bootstrap-453 .navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.factory-bootstrap-453 .container>.navbar-collapse,.factory-bootstrap-453 .container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.factory-bootstrap-453 .navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.factory-bootstrap-453 .navbar-fixed-bottom,.factory-bootstrap-453 .navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.factory-bootstrap-453 .navbar-fixed-top{top:0;border-width:0 0 1px}.factory-bootstrap-453 .navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.factory-bootstrap-453 .navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px}.factory-bootstrap-453 .navbar-brand:focus,.factory-bootstrap-453 .navbar-brand:hover{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.factory-bootstrap-453 .navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.factory-bootstrap-453 .navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.factory-bootstrap-453 .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.factory-bootstrap-453 .navbar-nav{margin:7.5px -15px}.factory-bootstrap-453 .navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.factory-bootstrap-453 .navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form select.form-control{width:auto}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{float:none;margin-left:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.factory-bootstrap-453 .navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-453 .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-453 .navbar-nav.pull-right>li>.dropdown-menu,.factory-bootstrap-453 .navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-453 .navbar-btn{margin-top:8px;margin-bottom:8px}.factory-bootstrap-453 .navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.factory-bootstrap-453 .navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.factory-bootstrap-453 .navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.factory-bootstrap-453 .navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.factory-bootstrap-453 .navbar-default .navbar-brand{color:#777}.factory-bootstrap-453 .navbar-default .navbar-brand:focus,.factory-bootstrap-453 .navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.factory-bootstrap-453 .navbar-default .navbar-nav>li>a,.factory-bootstrap-453 .navbar-default .navbar-text{color:#777}.factory-bootstrap-453 .navbar-default .navbar-nav>li>a:focus,.factory-bootstrap-453 .navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.factory-bootstrap-453 .navbar-default .navbar-nav>.active>a,.factory-bootstrap-453 .navbar-default .navbar-nav>.active>a:focus,.factory-bootstrap-453 .navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.factory-bootstrap-453 .navbar-default .navbar-nav>.disabled>a,.factory-bootstrap-453 .navbar-default .navbar-nav>.disabled>a:focus,.factory-bootstrap-453 .navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.factory-bootstrap-453 .navbar-default .navbar-toggle{border-color:#ddd}.factory-bootstrap-453 .navbar-default .navbar-toggle:focus,.factory-bootstrap-453 .navbar-default .navbar-toggle:hover{background-color:#ddd}.factory-bootstrap-453 .navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.factory-bootstrap-453 .navbar-default .navbar-collapse,.factory-bootstrap-453 .navbar-default .navbar-form{border-color:#e7e7e7}.factory-bootstrap-453 .navbar-default .navbar-nav>.open>a,.factory-bootstrap-453 .navbar-default .navbar-nav>.open>a:focus,.factory-bootstrap-453 .navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.factory-bootstrap-453 .navbar-default .navbar-link{color:#777}.factory-bootstrap-453 .navbar-default .navbar-link:hover{color:#333}.factory-bootstrap-453 .navbar-inverse{background-color:#222;border-color:#080808}.factory-bootstrap-453 .navbar-inverse .navbar-brand{color:#999}.factory-bootstrap-453 .navbar-inverse .navbar-brand:focus,.factory-bootstrap-453 .navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.factory-bootstrap-453 .navbar-inverse .navbar-nav>li>a,.factory-bootstrap-453 .navbar-inverse .navbar-text{color:#999}.factory-bootstrap-453 .navbar-inverse .navbar-nav>li>a:focus,.factory-bootstrap-453 .navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.factory-bootstrap-453 .navbar-inverse .navbar-nav>.active>a,.factory-bootstrap-453 .navbar-inverse .navbar-nav>.active>a:focus,.factory-bootstrap-453 .navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.factory-bootstrap-453 .navbar-inverse .navbar-nav>.disabled>a,.factory-bootstrap-453 .navbar-inverse .navbar-nav>.disabled>a:focus,.factory-bootstrap-453 .navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.factory-bootstrap-453 .navbar-inverse .navbar-toggle{border-color:#333}.factory-bootstrap-453 .navbar-inverse .navbar-toggle:focus,.factory-bootstrap-453 .navbar-inverse .navbar-toggle:hover{background-color:#333}.factory-bootstrap-453 .navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.factory-bootstrap-453 .navbar-inverse .navbar-collapse,.factory-bootstrap-453 .navbar-inverse .navbar-form{border-color:#101010}.factory-bootstrap-453 .navbar-inverse .navbar-nav>.open>a,.factory-bootstrap-453 .navbar-inverse .navbar-nav>.open>a:focus,.factory-bootstrap-453 .navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.factory-bootstrap-453 .navbar-inverse .navbar-link{color:#999}.factory-bootstrap-453 .navbar-inverse .navbar-link:hover{color:#fff}.factory-bootstrap-453 .breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.factory-bootstrap-453 .breadcrumb>li{display:inline-block}.factory-bootstrap-453 .breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.factory-bootstrap-453 .breadcrumb>.active{color:#999}.factory-bootstrap-453 .pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.factory-bootstrap-453 .pagination>li{display:inline}.factory-bootstrap-453 .pagination>li>a,.factory-bootstrap-453 .pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.428571429;text-decoration:none;background-color:#fff;border:1px solid #ddd}.factory-bootstrap-453 .pagination>li:first-child>a,.factory-bootstrap-453 .pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.factory-bootstrap-453 .pagination>li:last-child>a,.factory-bootstrap-453 .pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.factory-bootstrap-453 .pagination>li>a:focus,.factory-bootstrap-453 .pagination>li>a:hover,.factory-bootstrap-453 .pagination>li>span:focus,.factory-bootstrap-453 .pagination>li>span:hover{background-color:#eee}.factory-bootstrap-453 .pagination>.active>a,.factory-bootstrap-453 .pagination>.active>a:focus,.factory-bootstrap-453 .pagination>.active>a:hover,.factory-bootstrap-453 .pagination>.active>span,.factory-bootstrap-453 .pagination>.active>span:focus,.factory-bootstrap-453 .pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#1e8cbe;border-color:#0074a2}.factory-bootstrap-453 .pagination>.disabled>a,.factory-bootstrap-453 .pagination>.disabled>a:focus,.factory-bootstrap-453 .pagination>.disabled>a:hover,.factory-bootstrap-453 .pagination>.disabled>span,.factory-bootstrap-453 .pagination>.disabled>span:focus,.factory-bootstrap-453 .pagination>.disabled>span:hover{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.factory-bootstrap-453 .pagination-lg>li>a,.factory-bootstrap-453 .pagination-lg>li>span{padding:10px 16px;font-size:18px}.factory-bootstrap-453 .pagination-lg>li:first-child>a,.factory-bootstrap-453 .pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.factory-bootstrap-453 .pagination-lg>li:last-child>a,.factory-bootstrap-453 .pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.factory-bootstrap-453 .pagination-sm>li>a,.factory-bootstrap-453 .pagination-sm>li>span{padding:5px 10px;font-size:12px}.factory-bootstrap-453 .pagination-sm>li:first-child>a,.factory-bootstrap-453 .pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.factory-bootstrap-453 .pagination-sm>li:last-child>a,.factory-bootstrap-453 .pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.factory-bootstrap-453 .pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.factory-bootstrap-453 .pager:after,.factory-bootstrap-453 .pager:before{display:table;content:" "}.factory-bootstrap-453 .pager:after{clear:both}.factory-bootstrap-453 .pager li{display:inline}.factory-bootstrap-453 .pager li>a,.factory-bootstrap-453 .pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.factory-bootstrap-453 .pager li>a:focus,.factory-bootstrap-453 .pager li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-453 .pager .next>a,.factory-bootstrap-453 .pager .next>span{float:right}.factory-bootstrap-453 .pager .previous>a,.factory-bootstrap-453 .pager .previous>span{float:left}.factory-bootstrap-453 .pager .disabled>a,.factory-bootstrap-453 .pager .disabled>a:focus,.factory-bootstrap-453 .pager .disabled>a:hover,.factory-bootstrap-453 .pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.factory-bootstrap-453 .label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.factory-bootstrap-453 .label[href]:focus,.factory-bootstrap-453 .label[href]:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-453 .label:empty{display:none}.factory-bootstrap-453 .btn .label{position:relative;top:-1px}.factory-bootstrap-453 .label-default{background-color:#999}.factory-bootstrap-453 .label-default[href]:focus,.factory-bootstrap-453 .label-default[href]:hover{background-color:gray}.factory-bootstrap-453 .label-primary{background-color:#428bca}.factory-bootstrap-453 .label-primary[href]:focus,.factory-bootstrap-453 .label-primary[href]:hover{background-color:#3071a9}.factory-bootstrap-453 .label-success{background-color:#5cb85c}.factory-bootstrap-453 .label-success[href]:focus,.factory-bootstrap-453 .label-success[href]:hover{background-color:#449d44}.factory-bootstrap-453 .label-info{background-color:#5bc0de}.factory-bootstrap-453 .label-info[href]:focus,.factory-bootstrap-453 .label-info[href]:hover{background-color:#31b0d5}.factory-bootstrap-453 .label-warning{background-color:#f0ad4e}.factory-bootstrap-453 .label-warning[href]:focus,.factory-bootstrap-453 .label-warning[href]:hover{background-color:#ec971f}.factory-bootstrap-453 .label-danger{background-color:#d9534f}.factory-bootstrap-453 .label-danger[href]:focus,.factory-bootstrap-453 .label-danger[href]:hover{background-color:#c9302c}.factory-bootstrap-453 .badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#999;border-radius:10px}.factory-bootstrap-453 .badge:empty{display:none}.factory-bootstrap-453 .btn .badge{position:relative;top:-1px}.factory-bootstrap-453 a.badge:focus,.factory-bootstrap-453 a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-453 .nav-pills>.active>a>.badge,.factory-bootstrap-453 a.list-group-item.active>.badge{color:#428bca;background-color:#fff}.factory-bootstrap-453 .nav-pills>li>a>.badge{margin-left:3px}.factory-bootstrap-453 .jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.factory-bootstrap-453 .jumbotron .h1,.factory-bootstrap-453 .jumbotron h1{line-height:1;color:inherit}.factory-bootstrap-453 .jumbotron p{line-height:1.4}.factory-bootstrap-453 .container .jumbotron{border-radius:6px}.factory-bootstrap-453 .jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.factory-bootstrap-453 .thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.factory-bootstrap-453 .thumbnail a>img,.factory-bootstrap-453 .thumbnail>img{display:block;height:auto;max-width:100%;margin-right:auto;margin-left:auto}.factory-bootstrap-453 a.thumbnail.active,.factory-bootstrap-453 a.thumbnail:focus,.factory-bootstrap-453 a.thumbnail:hover{border-color:#428bca}.factory-bootstrap-453 .thumbnail .caption{padding:9px;color:#333}.factory-bootstrap-453 .alert{border:1px solid transparent;border-radius:4px}.factory-bootstrap-453 .alert h4{margin-top:0;color:inherit}.factory-bootstrap-453 .alert .alert-link{font-weight:700}.factory-bootstrap-453 .alert>p,.factory-bootstrap-453 .alert>ul{margin-bottom:0}.factory-bootstrap-453 .alert>p+p{margin-top:5px}.factory-bootstrap-453 .alert-dismissable{padding-right:35px}.factory-bootstrap-453 .alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.factory-bootstrap-453 .alert-info{color:#31708f;background-color:#d9edf7}.factory-bootstrap-453 .alert-info hr{border-top-color:#a6e1ec}.factory-bootstrap-453 .alert-info .alert-link{color:#245269}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.factory-bootstrap-453 .progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.factory-bootstrap-453 .progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#2ea2cc;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.factory-bootstrap-453 .progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.factory-bootstrap-453 .progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.factory-bootstrap-453 .progress-bar-success{background-color:#5cb85c}.factory-bootstrap-453 .progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.factory-bootstrap-453 .progress-bar-info{background-color:#5bc0de}.factory-bootstrap-453 .progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.factory-bootstrap-453 .progress-bar-warning{background-color:#f0ad4e}.factory-bootstrap-453 .progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.factory-bootstrap-453 .progress-bar-danger{background-color:#d9534f}.factory-bootstrap-453 .progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.factory-bootstrap-453 .media,.factory-bootstrap-453 .media-body{overflow:hidden;zoom:1}.factory-bootstrap-453 .media,.factory-bootstrap-453 .media .media{margin-top:15px}.factory-bootstrap-453 .media:first-child{margin-top:0}.factory-bootstrap-453 .media-object{display:block}.factory-bootstrap-453 .media-heading{margin:0 0 5px}.factory-bootstrap-453 .media>.pull-left{margin-right:10px}.factory-bootstrap-453 .media>.pull-right{margin-left:10px}.factory-bootstrap-453 .media-list{padding-left:0;list-style:none}.factory-bootstrap-453 .list-group{padding-left:0;margin-bottom:20px}.factory-bootstrap-453 .list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.factory-bootstrap-453 .list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.factory-bootstrap-453 .list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.factory-bootstrap-453 .list-group-item>.badge{float:right}.factory-bootstrap-453 .list-group-item>.badge+.badge{margin-right:5px}.factory-bootstrap-453 a.list-group-item{color:#555}.factory-bootstrap-453 a.list-group-item .list-group-item-heading{color:#333}.factory-bootstrap-453 a.list-group-item:focus,.factory-bootstrap-453 a.list-group-item:hover{text-decoration:none;background-color:#f5f5f5}.factory-bootstrap-453 a.list-group-item.active,.factory-bootstrap-453 a.list-group-item.active:focus,.factory-bootstrap-453 a.list-group-item.active:hover{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-453 a.list-group-item.active .list-group-item-heading,.factory-bootstrap-453 a.list-group-item.active:focus .list-group-item-heading,.factory-bootstrap-453 a.list-group-item.active:hover .list-group-item-heading{color:inherit}.factory-bootstrap-453 a.list-group-item.active .list-group-item-text,.factory-bootstrap-453 a.list-group-item.active:focus .list-group-item-text,.factory-bootstrap-453 a.list-group-item.active:hover .list-group-item-text{color:#e1edf7}.factory-bootstrap-453 .list-group-item-heading{margin-top:0;margin-bottom:5px}.factory-bootstrap-453 .list-group-item-text{margin-bottom:0;line-height:1.3}.factory-bootstrap-453 .panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px}.factory-bootstrap-453 .panel-body{padding:15px}.factory-bootstrap-453 .panel-body:after,.factory-bootstrap-453 .panel-body:before{display:table;content:" "}.factory-bootstrap-453 .panel-body:after{clear:both}.factory-bootstrap-453 .panel>.list-group{margin-bottom:0}.factory-bootstrap-453 .panel>.list-group .list-group-item{border-width:1px 0}.factory-bootstrap-453 .panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-453 .panel>.list-group .list-group-item:last-child{border-bottom:0}.factory-bootstrap-453 .panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.factory-bootstrap-453 .panel>.table,.factory-bootstrap-453 .panel>.table-responsive>.table{margin-bottom:0}.factory-bootstrap-453 .panel>.panel-body+.table,.factory-bootstrap-453 .panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.factory-bootstrap-453 .panel>.table>tbody:first-child td,.factory-bootstrap-453 .panel>.table>tbody:first-child th{border-top:0}.factory-bootstrap-453 .panel>.table-bordered,.factory-bootstrap-453 .panel>.table-responsive>.table-bordered{border:0}.factory-bootstrap-453 .panel>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-453 .panel>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-453 .panel>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-453 .panel>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-453 .panel>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-453 .panel>.table-bordered>thead>tr>th:first-child,.factory-bootstrap-453 .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-453 .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-453 .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-453 .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-453 .panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-453 .panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.factory-bootstrap-453 .panel>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-453 .panel>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-453 .panel>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-453 .panel>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-453 .panel>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-453 .panel>.table-bordered>thead>tr>th:last-child,.factory-bootstrap-453 .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-453 .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-453 .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-453 .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-453 .panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-453 .panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.factory-bootstrap-453 .panel>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-453 .panel>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-453 .panel>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-453 .panel>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-453 .panel>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-453 .panel>.table-bordered>thead>tr:last-child>th,.factory-bootstrap-453 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-453 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-453 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-453 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-453 .panel>.table-responsive>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-453 .panel>.table-responsive>.table-bordered>thead>tr:last-child>th{border-bottom:0}.factory-bootstrap-453 .panel>.table-responsive{margin-bottom:0;border:0}.factory-bootstrap-453 .panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.factory-bootstrap-453 .panel-heading>.dropdown .dropdown-toggle{color:inherit}.factory-bootstrap-453 .panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.factory-bootstrap-453 .panel-title>a{color:inherit}.factory-bootstrap-453 .panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.factory-bootstrap-453 .panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.factory-bootstrap-453 .panel-group .panel+.panel{margin-top:5px}.factory-bootstrap-453 .panel-group .panel-heading{border-bottom:0}.factory-bootstrap-453 .panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.factory-bootstrap-453 .panel-group .panel-footer{border-top:0}.factory-bootstrap-453 .panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.factory-bootstrap-453 .panel-default{border-color:#ddd}.factory-bootstrap-453 .panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.factory-bootstrap-453 .panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.factory-bootstrap-453 .panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.factory-bootstrap-453 .panel-primary{border-color:#428bca}.factory-bootstrap-453 .panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-453 .panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.factory-bootstrap-453 .panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.factory-bootstrap-453 .panel-success{border-color:#d6e9c6}.factory-bootstrap-453 .panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.factory-bootstrap-453 .panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.factory-bootstrap-453 .panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.factory-bootstrap-453 .panel-warning{border-color:#faebcc}.factory-bootstrap-453 .panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.factory-bootstrap-453 .panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.factory-bootstrap-453 .panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.factory-bootstrap-453 .panel-danger{border-color:#ebccd1}.factory-bootstrap-453 .panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.factory-bootstrap-453 .panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.factory-bootstrap-453 .panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.factory-bootstrap-453 .panel-info{border-color:#bce8f1}.factory-bootstrap-453 .panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.factory-bootstrap-453 .panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.factory-bootstrap-453 .panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.factory-bootstrap-453 .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px}.factory-bootstrap-453 .well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.factory-bootstrap-453 .well-lg{padding:24px;border-radius:6px}.factory-bootstrap-453 .well-sm{padding:9px;border-radius:3px}.factory-bootstrap-453 .close{float:right;font-size:14px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.3;filter:alpha(opacity=30)}.factory-bootstrap-453 .alert .close{position:relative;top:-8px;right:-7px}.factory-bootstrap-453 .close:focus,.factory-bootstrap-453 .close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-453 button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.factory-bootstrap-453 .modal-open{overflow:hidden}.factory-bootstrap-453 .modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:auto;overflow-y:scroll;width:auto;margin-left:0;background-color:transparent;border:0}.factory-bootstrap-453 .modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.factory-bootstrap-453 .modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.factory-bootstrap-453 .modal-dialog{position:relative;z-index:1050;width:auto;margin:10px}.factory-bootstrap-453 .modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box}.factory-bootstrap-453 .modal-backdrop,.factory-bootstrap-453-modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.factory-bootstrap-453 .modal-backdrop.fade,.factory-bootstrap-453-modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.factory-bootstrap-453 .modal-backdrop.in,.factory-bootstrap-453-modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-453 .modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.factory-bootstrap-453 .modal-header .close{margin-top:-2px}.factory-bootstrap-453 .modal-title{margin:0;line-height:1.428571429}.factory-bootstrap-453 .modal-body{position:relative;padding:20px;max-height:none}.factory-bootstrap-453 .modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.factory-bootstrap-453 .modal-footer:after,.factory-bootstrap-453 .modal-footer:before{display:table;content:" "}.factory-bootstrap-453 .modal-footer:after{clear:both}.factory-bootstrap-453 .modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.factory-bootstrap-453 .modal-footer .btn-group .btn+.btn{margin-left:-1px}.factory-bootstrap-453 .modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.factory-bootstrap-453 .modal-dialog{width:600px;margin:30px auto}.factory-bootstrap-453 .modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}}.factory-bootstrap-453 .tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.factory-bootstrap-453 .tooltip.in{opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-453 .tooltip.top{padding:5px 0;margin-top:-3px}.factory-bootstrap-453 .tooltip.right{padding:0 5px;margin-left:3px}.factory-bootstrap-453 .tooltip.bottom{padding:5px 0;margin-top:3px}.factory-bootstrap-453 .tooltip.left{padding:0 5px;margin-left:-3px}.factory-bootstrap-453 .tooltip-inner{width:400px;padding:15px 20px;color:#fff;text-align:left;text-decoration:none;background-color:#673ab7;border-radius:3px}.factory-bootstrap-453 .tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-453 .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-453 .tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-453 .tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-453 .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#673ab7;border-width:5px 5px 5px 0}.factory-bootstrap-453 .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#673ab7;border-width:5px 0 5px 5px}.factory-bootstrap-453 .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-453 .tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-453 .tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-453 .popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);background-clip:padding-box}.factory-bootstrap-453 .popover.top{margin-top:-10px}.factory-bootstrap-453 .popover.right{margin-left:10px}.factory-bootstrap-453 .popover.bottom{margin-top:10px}.factory-bootstrap-453 .popover.left{margin-left:-10px}.factory-bootstrap-453 .popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.factory-bootstrap-453 .popover-content{padding:9px 14px}.factory-bootstrap-453 .popover .arrow,.factory-bootstrap-453 .popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-453 .popover .arrow{border-width:11px}.factory-bootstrap-453 .popover .arrow:after{border-width:10px;content:""}.factory-bootstrap-453 .popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.factory-bootstrap-453 .popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.factory-bootstrap-453 .popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.factory-bootstrap-453 .popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.factory-bootstrap-453 .popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);border-top-width:0}.factory-bootstrap-453 .popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.factory-bootstrap-453 .popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,.25);border-right-width:0}.factory-bootstrap-453 .popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.factory-bootstrap-453 .carousel{position:relative}.factory-bootstrap-453 .carousel-inner{position:relative;width:100%;overflow:hidden}.factory-bootstrap-453 .carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.factory-bootstrap-453 .carousel-inner>.item>a>img,.factory-bootstrap-453 .carousel-inner>.item>img{display:block;height:auto;max-width:100%;line-height:1}.factory-bootstrap-453 .carousel-inner>.active,.factory-bootstrap-453 .carousel-inner>.next,.factory-bootstrap-453 .carousel-inner>.prev{display:block}.factory-bootstrap-453 .carousel-inner>.active{left:0}.factory-bootstrap-453 .carousel-inner>.next,.factory-bootstrap-453 .carousel-inner>.prev{position:absolute;top:0;width:100%}.factory-bootstrap-453 .carousel-inner>.next{left:100%}.factory-bootstrap-453 .carousel-inner>.prev{left:-100%}.factory-bootstrap-453 .carousel-inner>.next.left,.factory-bootstrap-453 .carousel-inner>.prev.right{left:0}.factory-bootstrap-453 .carousel-inner>.active.left{left:-100%}.factory-bootstrap-453 .carousel-inner>.active.right{left:100%}.factory-bootstrap-453 .carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-453 .carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5) 0),color-stop(rgba(0,0,0,.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.factory-bootstrap-453 .carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001) 0),color-stop(rgba(0,0,0,.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.factory-bootstrap-453 .carousel-control:focus,.factory-bootstrap-453 .carousel-control:hover{color:#fff;text-decoration:none;outline:0;opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-453 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-453 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-453 .carousel-control .icon-next,.factory-bootstrap-453 .carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.factory-bootstrap-453 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-453 .carousel-control .icon-prev{left:50%}.factory-bootstrap-453 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-453 .carousel-control .icon-next{right:50%}.factory-bootstrap-453 .carousel-control .icon-next,.factory-bootstrap-453 .carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.factory-bootstrap-453 .carousel-control .icon-prev:before{content:'\2039'}.factory-bootstrap-453 .carousel-control .icon-next:before{content:'\203a'}.factory-bootstrap-453 .carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.factory-bootstrap-453 .carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.factory-bootstrap-453 .carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.factory-bootstrap-453 .carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.factory-bootstrap-453 .carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicons-chevron-left,.carousel-control .glyphicons-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.factory-bootstrap-453 .clearfix:after,.factory-bootstrap-453 .clearfix:before{display:table;content:" "}.factory-bootstrap-453 .clearfix:after{clear:both}.factory-bootstrap-453 .center-block{display:block;margin-right:auto;margin-left:auto}.factory-bootstrap-453 .pull-right{float:right!important}.factory-bootstrap-453 .pull-left{float:left!important}.factory-bootstrap-453 .hide{display:none!important}.factory-bootstrap-453 .show{display:block!important}.factory-bootstrap-453 .invisible{visibility:hidden}.factory-bootstrap-453 .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.factory-bootstrap-453 .hidden{display:none!important;visibility:hidden!important}.factory-bootstrap-453 .affix{position:fixed}@-ms-viewport{width:device-width}.factory-bootstrap-453 .visible-lg,.factory-bootstrap-453 .visible-md,.factory-bootstrap-453 .visible-sm,.factory-bootstrap-453 .visible-xs,.factory-bootstrap-453 td.visible-lg,.factory-bootstrap-453 td.visible-md,.factory-bootstrap-453 td.visible-sm,.factory-bootstrap-453 td.visible-xs,.factory-bootstrap-453 th.visible-lg,.factory-bootstrap-453 th.visible-md,.factory-bootstrap-453 th.visible-sm,.factory-bootstrap-453 th.visible-xs,.factory-bootstrap-453 tr.visible-lg,.factory-bootstrap-453 tr.visible-md,.factory-bootstrap-453 tr.visible-sm,.factory-bootstrap-453 tr.visible-xs{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}table.visible-xs.visible-sm{display:table}tr.visible-xs.visible-sm{display:table-row!important}td.visible-xs.visible-sm,th.visible-xs.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-xs.visible-md{display:block!important}table.visible-xs.visible-md{display:table}tr.visible-xs.visible-md{display:table-row!important}td.visible-xs.visible-md,th.visible-xs.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-xs.visible-lg{display:block!important}table.visible-xs.visible-lg{display:table}tr.visible-xs.visible-lg{display:table-row!important}td.visible-xs.visible-lg,th.visible-xs.visible-lg{display:table-cell!important}}@media (max-width:767px){.visible-sm.visible-xs{display:block!important}table.visible-sm.visible-xs{display:table}tr.visible-sm.visible-xs{display:table-row!important}td.visible-sm.visible-xs,th.visible-sm.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-sm.visible-md{display:block!important}table.visible-sm.visible-md{display:table}tr.visible-sm.visible-md{display:table-row!important}td.visible-sm.visible-md,th.visible-sm.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-sm.visible-lg{display:block!important}table.visible-sm.visible-lg{display:table}tr.visible-sm.visible-lg{display:table-row!important}td.visible-sm.visible-lg,th.visible-sm.visible-lg{display:table-cell!important}}@media (max-width:767px){.visible-md.visible-xs{display:block!important}table.visible-md.visible-xs{display:table}tr.visible-md.visible-xs{display:table-row!important}td.visible-md.visible-xs,th.visible-md.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}table.visible-md.visible-sm{display:table}tr.visible-md.visible-sm{display:table-row!important}td.visible-md.visible-sm,th.visible-md.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-md.visible-lg{display:block!important}table.visible-md.visible-lg{display:table}tr.visible-md.visible-lg{display:table-row!important}td.visible-md.visible-lg,th.visible-md.visible-lg{display:table-cell!important}}@media (max-width:767px){.visible-lg.visible-xs{display:block!important}table.visible-lg.visible-xs{display:table}tr.visible-lg.visible-xs{display:table-row!important}td.visible-lg.visible-xs,th.visible-lg.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}table.visible-lg.visible-sm{display:table}tr.visible-lg.visible-sm{display:table-row!important}td.visible-lg.visible-sm,th.visible-lg.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-lg.visible-md{display:block!important}table.visible-lg.visible-md{display:table}tr.visible-lg.visible-md{display:table-row!important}td.visible-lg.visible-md,th.visible-lg.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}.factory-bootstrap-453 .hidden-xs{display:block!important}.factory-bootstrap-453 table.hidden-xs{display:table}.factory-bootstrap-453 tr.hidden-xs{display:table-row!important}.factory-bootstrap-453 td.hidden-xs,.factory-bootstrap-453 th.hidden-xs{display:table-cell!important}@media (max-width:767px){.hidden-xs,td.hidden-xs,th.hidden-xs,tr.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm,th.hidden-xs.hidden-sm,tr.hidden-xs.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-xs.hidden-md,td.hidden-xs.hidden-md,th.hidden-xs.hidden-md,tr.hidden-xs.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg,th.hidden-xs.hidden-lg,tr.hidden-xs.hidden-lg{display:none!important}}.factory-bootstrap-453 .hidden-sm{display:block!important}.factory-bootstrap-453 table.hidden-sm{display:table}.factory-bootstrap-453 tr.hidden-sm{display:table-row!important}.factory-bootstrap-453 td.hidden-sm,.factory-bootstrap-453 th.hidden-sm{display:table-cell!important}@media (max-width:767px){.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs,th.hidden-sm.hidden-xs,tr.hidden-sm.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm,td.hidden-sm,th.hidden-sm,tr.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-sm.hidden-md,td.hidden-sm.hidden-md,th.hidden-sm.hidden-md,tr.hidden-sm.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg,th.hidden-sm.hidden-lg,tr.hidden-sm.hidden-lg{display:none!important}}.factory-bootstrap-453 .hidden-md{display:block!important}.factory-bootstrap-453 table.hidden-md{display:table}.factory-bootstrap-453 tr.hidden-md{display:table-row!important}.factory-bootstrap-453 td.hidden-md,.factory-bootstrap-453 th.hidden-md{display:table-cell!important}@media (max-width:767px){.hidden-md.hidden-xs,td.hidden-md.hidden-xs,th.hidden-md.hidden-xs,tr.hidden-md.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-md.hidden-sm,td.hidden-md.hidden-sm,th.hidden-md.hidden-sm,tr.hidden-md.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md,td.hidden-md,th.hidden-md,tr.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-md.hidden-lg,td.hidden-md.hidden-lg,th.hidden-md.hidden-lg,tr.hidden-md.hidden-lg{display:none!important}}.factory-bootstrap-453 .hidden-lg{display:block!important}.factory-bootstrap-453 table.hidden-lg{display:table}.factory-bootstrap-453 tr.hidden-lg{display:table-row!important}.factory-bootstrap-453 td.hidden-lg,.factory-bootstrap-453 th.hidden-lg{display:table-cell!important}@media (max-width:767px){.factory-bootstrap-453 .hidden-lg.hidden-xs,.factory-bootstrap-453 td.hidden-lg.hidden-xs,.factory-bootstrap-453 th.hidden-lg.hidden-xs,.factory-bootstrap-453 tr.hidden-lg.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.factory-bootstrap-453 .hidden-lg.hidden-sm,.factory-bootstrap-453 td.hidden-lg.hidden-sm,.factory-bootstrap-453 th.hidden-lg.hidden-sm,.factory-bootstrap-453 tr.hidden-lg.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.factory-bootstrap-453 .hidden-lg.hidden-md,.factory-bootstrap-453 td.hidden-lg.hidden-md,.factory-bootstrap-453 th.hidden-lg.hidden-md,.factory-bootstrap-453 tr.hidden-lg.hidden-md{display:none!important}}@media (min-width:1200px){.factory-bootstrap-453 .hidden-lg,.factory-bootstrap-453 td.hidden-lg,.factory-bootstrap-453 th.hidden-lg,.factory-bootstrap-453 tr.hidden-lg{display:none!important}}.factory-bootstrap-453 .visible-print,.factory-bootstrap-453 td.visible-print,.factory-bootstrap-453 th.visible-print,.factory-bootstrap-453 tr.visible-print{display:none!important}@media print{.factory-bootstrap-453 .visible-print{display:block!important}.factory-bootstrap-453 table.visible-print{display:table}.factory-bootstrap-453 tr.visible-print{display:table-row!important}.factory-bootstrap-453 td.visible-print,.factory-bootstrap-453 th.visible-print{display:table-cell!important}.factory-bootstrap-453 .hidden-print,.factory-bootstrap-453 td.hidden-print,.factory-bootstrap-453 th.hidden-print,.factory-bootstrap-453 tr.hidden-print{display:none!important}}.factory-bootstrap-453 .btn-danger,.factory-bootstrap-453 .btn-default,.factory-bootstrap-453 .btn-info,.factory-bootstrap-453 .btn-primary,.factory-bootstrap-453 .btn-success,.factory-bootstrap-453 .btn-warning{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-453 .btn-danger.active,.factory-bootstrap-453 .btn-danger:active,.factory-bootstrap-453 .btn-default.active,.factory-bootstrap-453 .btn-default:active,.factory-bootstrap-453 .btn-info.active,.factory-bootstrap-453 .btn-info:active,.factory-bootstrap-453 .btn-primary.active,.factory-bootstrap-453 .btn-primary:active,.factory-bootstrap-453 .btn-success.active,.factory-bootstrap-453 .btn-success:active,.factory-bootstrap-453 .btn-warning.active,.factory-bootstrap-453 .btn-warning:active{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.factory-bootstrap-453 .btn.active,.factory-bootstrap-453 .btn:active{background-image:none}.factory-bootstrap-453 .btn-default{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);vertical-align:top}.factory-bootstrap-453 .btn-default.active,.factory-bootstrap-453 .btn-default:active{background-color:#fff;border-color:#dbdbdb}.factory-bootstrap-453 .btn-gold{font-weight:700;padding:7px 12px;cursor:pointer;line-height:16px;display:inline-block;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;box-shadow:#e3e3e3 0 1px 1px;-moz-box-shadow:0 1px 1px rgba(000,000,000,.1),inset 0 1px 1px rgba(255,255,255,.7);-webkit-box-shadow:0 1px 1px rgba(000,000,000,.1),inset 0 1px 1px rgba(255,255,255,.7);text-shadow:1px 1px 0 #ffe8b2;color:#7c5d1b;border:1px solid #d6a437;background:#feeb80}.factory-bootstrap-453 .btn-gold:focus,.factory-bootstrap-453 .btn-gold:hover{background:#fef0a1}.factory-bootstrap-453 .btn-gold.active,.factory-bootstrap-453 .btn-gold:active{background:#fef0a1;-webkit-box-shadow:inset 0 3px 8px 0 #f8ba36;box-shadow:inset 0 3px 8px 0 #f8ba36}.factory-bootstrap-453 .btn-primary{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;text-decoration:none}.factory-bootstrap-453 .btn-primary:focus,.factory-bootstrap-453 .btn-primary:hover{background:#1e8cbe;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6);box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff}.factory-bootstrap-453 .btn-primary.active,.factory-bootstrap-453 .btn-primary:active{background-color:#2d6ca2;border-color:#2b669a}.factory-bootstrap-453 .btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);background-repeat:repeat-x;border-color:#3e8f3e;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-453 .btn-success:focus,.factory-bootstrap-453 .btn-success:hover{background-color:#419641;background-position:0 -15px}.factory-bootstrap-453 .btn-success.active,.factory-bootstrap-453 .btn-success:active{background-color:#419641;border-color:#3e8f3e}.factory-bootstrap-453 .btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);background-repeat:repeat-x;border-color:#e38d13;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-453 .btn-warning:focus,.factory-bootstrap-453 .btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.factory-bootstrap-453 .btn-warning.active,.factory-bootstrap-453 .btn-warning:active{background-color:#eb9316;border-color:#e38d13}.factory-bootstrap-453 .btn-danger{color:#fff;background:#d9534f;border-color:#d43f3a}.factory-bootstrap-453 .btn-danger.active,.factory-bootstrap-453 .btn-danger:active,.factory-bootstrap-453 .btn-danger:focus,.factory-bootstrap-453 .btn-danger:hover,.factory-bootstrap-453 .open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.factory-bootstrap-453 .btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);background-repeat:repeat-x;border-color:#28a4c9;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-453 .btn-info:focus,.factory-bootstrap-453 .btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.factory-bootstrap-453 .btn-info.active,.factory-bootstrap-453 .btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.factory-bootstrap-453 .img-thumbnail,.factory-bootstrap-453 .thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.factory-bootstrap-453 .dropdown-menu>li>a:focus,.factory-bootstrap-453 .dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.factory-bootstrap-453 .dropdown-menu>.active>a,.factory-bootstrap-453 .dropdown-menu>.active>a:focus,.factory-bootstrap-453 .dropdown-menu>.active>a:hover{background-color:#357ebd;background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0)}.factory-bootstrap-453 .navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.factory-bootstrap-453 .navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.factory-bootstrap-453 .navbar-brand,.factory-bootstrap-453 .navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.factory-bootstrap-453 .navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-453 .navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:linear-gradient(to bottom,#222 0,#282828 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.factory-bootstrap-453 .navbar-inverse .navbar-brand,.factory-bootstrap-453 .navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.factory-bootstrap-453 .navbar-fixed-bottom,.factory-bootstrap-453 .navbar-fixed-top,.factory-bootstrap-453 .navbar-static-top{border-radius:0}.factory-bootstrap-453 .alert{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-453 .alert .actions{padding-top:10px}.factory-bootstrap-453 .alert-success{color:#3c763d;background-color:#dff0d8;border-bottom:2px solid #c8e5bc}.factory-bootstrap-453 .alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;border-color:#9acfea;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0)}.factory-bootstrap-453 .alert{text-shadow:none;box-shadow:none;margin:0;margin-top:10px;margin-bottom:10px;padding:10px}.factory-bootstrap-453 .alert-normal,.factory-bootstrap-453 .alert-warning{background:#fcf8e3;color:#8a6d3b;border:1px solid #b8823b}.factory-bootstrap-453 .alert-danger{background:#cf4944;color:#fff;border-bottom:2px solid #b23e3a}.factory-bootstrap-453 .alert-danger a:not(.btn),.factory-bootstrap-453 .alert-error a:not(.btn){color:#fff}.factory-bootstrap-453 .progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)}.factory-bootstrap-453 .progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0)}.factory-bootstrap-453 .progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)}.factory-bootstrap-453 .progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)}.factory-bootstrap-453 .progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)}.factory-bootstrap-453 .progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)}.factory-bootstrap-453 .list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.factory-bootstrap-453 .list-group-item.active,.factory-bootstrap-453 .list-group-item.active:focus,.factory-bootstrap-453 .list-group-item.active:hover{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;border-color:#3278b3;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0)}.factory-bootstrap-453 .panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-453 .panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.factory-bootstrap-453 .panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0)}.factory-bootstrap-453 .panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)}.factory-bootstrap-453 .panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)}.factory-bootstrap-453 .panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)}.factory-bootstrap-453 .panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)}.factory-bootstrap-453 .well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;border-color:#dcdcdc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}.factory-bootstrap-453 .factory-after{margin-left:7px;display:inline-block}.factory-bootstrap-453 .factory-hidden{display:none}.factory-bootstrap-453 .factory-ajax-loader{width:25px;height:25px;background:url(../assets/images/loader-sm-tr.gif)}.factory-control-error{background-color:rgba(0,0,0,.8);white-space:normal;z-index:10;font-weight:400;line-height:150%;border-radius:4px;color:#fff;font-size:13px;margin-top:5px;padding:4px 10px 3px;max-width:500px;display:inline-block}.factory-control-error i{margin:0 7px 0 1px}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 article,.factory-bootstrap-454 aside,.factory-bootstrap-454 details,.factory-bootstrap-454 figcaption,.factory-bootstrap-454 figure,.factory-bootstrap-454 footer,.factory-bootstrap-454 header,.factory-bootstrap-454 hgroup,.factory-bootstrap-454 main,.factory-bootstrap-454 nav,.factory-bootstrap-454 section,.factory-bootstrap-454 summary{display:block}.factory-bootstrap-454 audio,.factory-bootstrap-454 canvas,.factory-bootstrap-454 video{display:inline-block}.factory-bootstrap-454 audio:not([controls]){display:none;height:0}.factory-bootstrap-454 [hidden],.factory-bootstrap-454 template{display:none}.factory-bootstrap-454 body{margin:0}.factory-bootstrap-454 a{background:0 0}.factory-bootstrap-454 a:focus{outline:thin dotted}.factory-bootstrap-454 a:active,.factory-bootstrap-454 a:hover{outline:0}.factory-bootstrap-454 h1{margin:.67em 0}.factory-bootstrap-454 b,.factory-bootstrap-454 strong{font-weight:700}.factory-bootstrap-454 dfn{font-style:italic}.factory-bootstrap-454 hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}.factory-bootstrap-454 mark{color:#000;background:#ff0}.factory-bootstrap-454 code,.factory-bootstrap-454 kbd,.factory-bootstrap-454 pre,.factory-bootstrap-454 samp{font-size:1em}.factory-bootstrap-454 pre{white-space:pre-wrap}.factory-bootstrap-454 q{quotes:"\201C" "\201D" "\2018" "\2019"}.factory-bootstrap-454 sub,.factory-bootstrap-454 sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}.factory-bootstrap-454 sup{top:-.5em}.factory-bootstrap-454 sub{bottom:-.25em}.factory-bootstrap-454 img{border:0}.factory-bootstrap-454 svg:not(:root){overflow:hidden}.factory-bootstrap-454 figure{margin:0}.factory-bootstrap-454 button,.factory-bootstrap-454 input,.factory-bootstrap-454 select,.factory-bootstrap-454 textarea{margin:0}.factory-bootstrap-454 button,.factory-bootstrap-454 select{text-transform:none}.factory-bootstrap-454 select{padding-right:4px!important}.factory-bootstrap-454 button,.factory-bootstrap-454 input[type=reset],.factory-bootstrap-454 input[type=submit],html .factory-bootstrap-454 input[type=button]{cursor:pointer;-webkit-appearance:button}.factory-bootstrap-454 button[disabled],html .factory-bootstrap-454 input[disabled]{cursor:default}.factory-bootstrap-454 input[type=checkbox],.factory-bootstrap-454 input[type=radio]{padding:0;box-sizing:border-box}.factory-bootstrap-454 input[type=search]{-webkit-appearance:textfield}.factory-bootstrap-454 input[type=search]::-webkit-search-cancel-button,.factory-bootstrap-454 input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.factory-bootstrap-454 button::-moz-focus-inner,.factory-bootstrap-454 input::-moz-focus-inner{padding:0;border:0}.factory-bootstrap-454 textarea{overflow:auto;vertical-align:top}.factory-bootstrap-454 table{border-collapse:collapse;border-spacing:0}@media print{.factory-bootstrap-454 *{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}.factory-bootstrap-454 a,.factory-bootstrap-454 a:visited{text-decoration:underline}.factory-bootstrap-454 a[href]:after{content:" (" attr(href) ")"}.factory-bootstrap-454 abbr[title]:after{content:" (" attr(title) ")"}.factory-bootstrap-454 a[href^="javascript:"]:after,.factory-bootstrap-454 a[href^="#"]:after{content:""}.factory-bootstrap-454 blockquote,.factory-bootstrap-454 pre{border:1px solid #999;page-break-inside:avoid}.factory-bootstrap-454 thead{display:table-header-group}.factory-bootstrap-454 img,.factory-bootstrap-454 tr{page-break-inside:avoid}.factory-bootstrap-454 img{max-width:100%!important}@page{margin:2cm .5cm}.factory-bootstrap-454 h2,.factory-bootstrap-454 h3,.factory-bootstrap-454 p{orphans:3;widows:3}.factory-bootstrap-454 h2,.factory-bootstrap-454 h3{page-break-after:avoid}.factory-bootstrap-454 select{background:#fff!important}.factory-bootstrap-454 .navbar{display:none}.factory-bootstrap-454 .table td,.factory-bootstrap-454 .table th{background-color:#fff!important}.factory-bootstrap-454 .btn>.caret,.factory-bootstrap-454 .dropup>.btn>.caret{border-top-color:#000!important}.factory-bootstrap-454 .label{border:1px solid #000}.factory-bootstrap-454 .table{border-collapse:collapse!important}.factory-bootstrap-454 .table-bordered td,.factory-bootstrap-454 .table-bordered th{border:1px solid #ddd!important}}.factory-bootstrap-454 *,.factory-bootstrap-454 :after,.factory-bootstrap-454 :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html .factory-bootstrap-454{-webkit-tap-highlight-color:rgba(0,0,0,0)}.factory-bootstrap-454 body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}.factory-bootstrap-454 button,.factory-bootstrap-454 input,.factory-bootstrap-454 select,.factory-bootstrap-454 textarea{font-family:inherit;font-size:inherit;line-height:inherit}.factory-bootstrap-454 img{vertical-align:middle}.factory-bootstrap-454 .img-responsive{display:block;height:auto;max-width:100%}.factory-bootstrap-454 .img-rounded{border-radius:6px}.factory-bootstrap-454 .img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.factory-bootstrap-454 .img-circle{border-radius:50%}.factory-bootstrap-454 hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.factory-bootstrap-454 .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.factory-bootstrap-454 .h1,.factory-bootstrap-454 .h2,.factory-bootstrap-454 .h3,.factory-bootstrap-454 .h4,.factory-bootstrap-454 .h5,.factory-bootstrap-454 .h6,.factory-bootstrap-454 h1,.factory-bootstrap-454 h2,.factory-bootstrap-454 h3,.factory-bootstrap-454 h4,.factory-bootstrap-454 h5,.factory-bootstrap-454 h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1;color:inherit}.factory-bootstrap-454 .h1 .small,.factory-bootstrap-454 .h1 small,.factory-bootstrap-454 .h2 .small,.factory-bootstrap-454 .h2 small,.factory-bootstrap-454 .h3 .small,.factory-bootstrap-454 .h3 small,.factory-bootstrap-454 .h4 .small,.factory-bootstrap-454 .h4 small,.factory-bootstrap-454 .h5 .small,.factory-bootstrap-454 .h5 small,.factory-bootstrap-454 .h6 .small,.factory-bootstrap-454 .h6 small,.factory-bootstrap-454 h1 .small,.factory-bootstrap-454 h1 small,.factory-bootstrap-454 h2 .small,.factory-bootstrap-454 h2 small,.factory-bootstrap-454 h3 .small,.factory-bootstrap-454 h3 small,.factory-bootstrap-454 h4 .small,.factory-bootstrap-454 h4 small,.factory-bootstrap-454 h5 .small,.factory-bootstrap-454 h5 small,.factory-bootstrap-454 h6 .small,.factory-bootstrap-454 h6 small{font-weight:400;line-height:1;color:#999}.factory-bootstrap-454 h1,.factory-bootstrap-454 h2,.factory-bootstrap-454 h3{margin-top:20px;margin-bottom:10px}.factory-bootstrap-454 h1 .small,.factory-bootstrap-454 h1 small,.factory-bootstrap-454 h2 .small,.factory-bootstrap-454 h2 small,.factory-bootstrap-454 h3 .small,.factory-bootstrap-454 h3 small{font-size:65%}.factory-bootstrap-454 h4,.factory-bootstrap-454 h5,.factory-bootstrap-454 h6{margin-top:10px;margin-bottom:10px}.factory-bootstrap-454 h4 .small,.factory-bootstrap-454 h4 small,.factory-bootstrap-454 h5 .small,.factory-bootstrap-454 h5 small,.factory-bootstrap-454 h6 .small,.factory-bootstrap-454 h6 small{font-size:75%}.factory-bootstrap-454 .h1,.factory-bootstrap-454 h1{font-size:36px}.factory-bootstrap-454 .h2,.factory-bootstrap-454 h2{font-size:30px}.factory-bootstrap-454 .h3,.factory-bootstrap-454 h3{font-size:24px}.factory-bootstrap-454 .h4,.factory-bootstrap-454 h4{font-size:18px}.factory-bootstrap-454 .h5,.factory-bootstrap-454 h5{font-size:14px}.factory-bootstrap-454 .h6,.factory-bootstrap-454 h6{font-size:12px}.factory-bootstrap-454 p{margin:0 0 10px}.factory-bootstrap-454 .lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.factory-bootstrap-454 .small,.factory-bootstrap-454 small{font-size:85%}.factory-bootstrap-454 cite{font-style:normal}.factory-bootstrap-454 .text-muted{color:#999}.factory-bootstrap-454 .text-primary{color:#428bca}.factory-bootstrap-454 .text-primary:hover{color:#3071a9}.factory-bootstrap-454 .text-warning{color:#8a6d3b}.factory-bootstrap-454 .text-warning:hover{color:#66512c}.factory-bootstrap-454 .text-danger{color:#a94442}.factory-bootstrap-454 .text-danger:hover{color:#843534}.factory-bootstrap-454 .text-success{color:#3c763d}.factory-bootstrap-454 .text-success:hover{color:#2b542c}.factory-bootstrap-454 .text-info{color:#31708f}.factory-bootstrap-454 .text-info:hover{color:#245269}.factory-bootstrap-454 .text-left{text-align:left}.factory-bootstrap-454 .text-right{text-align:right}.factory-bootstrap-454 .text-center{text-align:center}.factory-bootstrap-454 .page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}.factory-bootstrap-454 ol,.factory-bootstrap-454 ul{margin-top:0;margin-bottom:10px}.factory-bootstrap-454 ol ol,.factory-bootstrap-454 ol ul,.factory-bootstrap-454 ul ol,.factory-bootstrap-454 ul ul{margin-bottom:0}.factory-bootstrap-454 .list-inline,.factory-bootstrap-454 .list-unstyled{padding-left:0;list-style:none}.factory-bootstrap-454 .list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}.factory-bootstrap-454 .list-inline>li:first-child{padding-left:0}.factory-bootstrap-454 dl{margin-top:0;margin-bottom:20px}.factory-bootstrap-454 dd,.factory-bootstrap-454 dt{line-height:1.428571429}.factory-bootstrap-454 dt{font-weight:700}.factory-bootstrap-454 dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:after,.dl-horizontal dd:before{display:table;content:" "}.dl-horizontal dd:after{clear:both}}.factory-bootstrap-454 abbr[data-original-title],.factory-bootstrap-454 abbr[title]{cursor:help;border-bottom:1px dotted #999}.factory-bootstrap-454 .initialism{font-size:90%;text-transform:uppercase}.factory-bootstrap-454 blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}.factory-bootstrap-454 blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}.factory-bootstrap-454 blockquote p:last-child{margin-bottom:0}.factory-bootstrap-454 blockquote .small,.factory-bootstrap-454 blockquote small{display:block;line-height:1.428571429;color:#999}.factory-bootstrap-454 blockquote .small:before,.factory-bootstrap-454 blockquote small:before{content:'\2014 \00A0'}.factory-bootstrap-454 blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}.factory-bootstrap-454 blockquote.pull-right .small,.factory-bootstrap-454 blockquote.pull-right p,.factory-bootstrap-454 blockquote.pull-right small{text-align:right}.factory-bootstrap-454 blockquote.pull-right .small:before,.factory-bootstrap-454 blockquote.pull-right small:before{content:''}.factory-bootstrap-454 blockquote.pull-right .small:after,.factory-bootstrap-454 blockquote.pull-right small:after{content:'\00A0 \2014'}.factory-bootstrap-454 blockquote:after,.factory-bootstrap-454 blockquote:before{content:""}.factory-bootstrap-454 address{margin-bottom:20px;font-style:normal;line-height:1.428571429}.factory-bootstrap-454 code,.factory-bootstrap-454 kbd,.factory-bootstrap-454 pre,.factory-bootstrap-454 samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}.factory-bootstrap-454 code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}.factory-bootstrap-454 pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.factory-bootstrap-454 pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.factory-bootstrap-454 .pre-scrollable{max-height:340px;overflow-y:scroll}.factory-bootstrap-454 .container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.factory-bootstrap-454 .container:after,.factory-bootstrap-454 .container:before{display:table;content:" "}.factory-bootstrap-454 .container:after{clear:both}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.factory-bootstrap-454 .row{margin-right:-15px;margin-left:-15px}.factory-bootstrap-454 .row:after,.factory-bootstrap-454 .row:before{display:table;content:" "}.factory-bootstrap-454 .row:after{clear:both}.factory-bootstrap-454 .col-lg-1,.factory-bootstrap-454 .col-lg-10,.factory-bootstrap-454 .col-lg-11,.factory-bootstrap-454 .col-lg-12,.factory-bootstrap-454 .col-lg-2,.factory-bootstrap-454 .col-lg-3,.factory-bootstrap-454 .col-lg-4,.factory-bootstrap-454 .col-lg-5,.factory-bootstrap-454 .col-lg-6,.factory-bootstrap-454 .col-lg-7,.factory-bootstrap-454 .col-lg-8,.factory-bootstrap-454 .col-lg-9,.factory-bootstrap-454 .col-md-1,.factory-bootstrap-454 .col-md-10,.factory-bootstrap-454 .col-md-11,.factory-bootstrap-454 .col-md-12,.factory-bootstrap-454 .col-md-2,.factory-bootstrap-454 .col-md-3,.factory-bootstrap-454 .col-md-4,.factory-bootstrap-454 .col-md-5,.factory-bootstrap-454 .col-md-6,.factory-bootstrap-454 .col-md-7,.factory-bootstrap-454 .col-md-8,.factory-bootstrap-454 .col-md-9,.factory-bootstrap-454 .col-sm-1,.factory-bootstrap-454 .col-sm-10,.factory-bootstrap-454 .col-sm-11,.factory-bootstrap-454 .col-sm-12,.factory-bootstrap-454 .col-sm-2,.factory-bootstrap-454 .col-sm-3,.factory-bootstrap-454 .col-sm-4,.factory-bootstrap-454 .col-sm-5,.factory-bootstrap-454 .col-sm-6,.factory-bootstrap-454 .col-sm-7,.factory-bootstrap-454 .col-sm-8,.factory-bootstrap-454 .col-sm-9,.factory-bootstrap-454 .col-xs-1,.factory-bootstrap-454 .col-xs-10,.factory-bootstrap-454 .col-xs-11,.factory-bootstrap-454 .col-xs-12,.factory-bootstrap-454 .col-xs-2,.factory-bootstrap-454 .col-xs-3,.factory-bootstrap-454 .col-xs-4,.factory-bootstrap-454 .col-xs-5,.factory-bootstrap-454 .col-xs-6,.factory-bootstrap-454 .col-xs-7,.factory-bootstrap-454 .col-xs-8,.factory-bootstrap-454 .col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.factory-bootstrap-454 .col-xs-1,.factory-bootstrap-454 .col-xs-10,.factory-bootstrap-454 .col-xs-11,.factory-bootstrap-454 .col-xs-12,.factory-bootstrap-454 .col-xs-2,.factory-bootstrap-454 .col-xs-3,.factory-bootstrap-454 .col-xs-4,.factory-bootstrap-454 .col-xs-5,.factory-bootstrap-454 .col-xs-6,.factory-bootstrap-454 .col-xs-7,.factory-bootstrap-454 .col-xs-8,.factory-bootstrap-454 .col-xs-9{float:left}.factory-bootstrap-454 .col-xs-12{width:100%}.factory-bootstrap-454 .col-xs-11{width:91.66666666666666%}.factory-bootstrap-454 .col-xs-10{width:83.33333333333334%}.factory-bootstrap-454 .col-xs-9{width:75%}.factory-bootstrap-454 .col-xs-8{width:66.66666666666666%}.factory-bootstrap-454 .col-xs-7{width:58.333333333333336%}.factory-bootstrap-454 .col-xs-6{width:50%}.factory-bootstrap-454 .col-xs-5{width:41.66666666666667%}.factory-bootstrap-454 .col-xs-4{width:33.33333333333333%}.factory-bootstrap-454 .col-xs-3{width:25%}.factory-bootstrap-454 .col-xs-2{width:16.666666666666664%}.factory-bootstrap-454 .col-xs-1{width:8.333333333333332%}.factory-bootstrap-454 .col-xs-pull-12{right:100%}.factory-bootstrap-454 .col-xs-pull-11{right:91.66666666666666%}.factory-bootstrap-454 .col-xs-pull-10{right:83.33333333333334%}.factory-bootstrap-454 .col-xs-pull-9{right:75%}.factory-bootstrap-454 .col-xs-pull-8{right:66.66666666666666%}.factory-bootstrap-454 .col-xs-pull-7{right:58.333333333333336%}.factory-bootstrap-454 .col-xs-pull-6{right:50%}.factory-bootstrap-454 .col-xs-pull-5{right:41.66666666666667%}.factory-bootstrap-454 .col-xs-pull-4{right:33.33333333333333%}.factory-bootstrap-454 .col-xs-pull-3{right:25%}.factory-bootstrap-454 .col-xs-pull-2{right:16.666666666666664%}.factory-bootstrap-454 .col-xs-pull-1{right:8.333333333333332%}.factory-bootstrap-454 .col-xs-pull-0{right:0}.factory-bootstrap-454 .col-xs-push-12{left:100%}.factory-bootstrap-454 .col-xs-push-11{left:91.66666666666666%}.factory-bootstrap-454 .col-xs-push-10{left:83.33333333333334%}.factory-bootstrap-454 .col-xs-push-9{left:75%}.factory-bootstrap-454 .col-xs-push-8{left:66.66666666666666%}.factory-bootstrap-454 .col-xs-push-7{left:58.333333333333336%}.factory-bootstrap-454 .col-xs-push-6{left:50%}.factory-bootstrap-454 .col-xs-push-5{left:41.66666666666667%}.factory-bootstrap-454 .col-xs-push-4{left:33.33333333333333%}.factory-bootstrap-454 .col-xs-push-3{left:25%}.factory-bootstrap-454 .col-xs-push-2{left:16.666666666666664%}.factory-bootstrap-454 .col-xs-push-1{left:8.333333333333332%}.factory-bootstrap-454 .col-xs-push-0{left:0}.factory-bootstrap-454 .col-xs-offset-12{margin-left:100%}.factory-bootstrap-454 .col-xs-offset-11{margin-left:91.66666666666666%}.factory-bootstrap-454 .col-xs-offset-10{margin-left:83.33333333333334%}.factory-bootstrap-454 .col-xs-offset-9{margin-left:75%}.factory-bootstrap-454 .col-xs-offset-8{margin-left:66.66666666666666%}.factory-bootstrap-454 .col-xs-offset-7{margin-left:58.333333333333336%}.factory-bootstrap-454 .col-xs-offset-6{margin-left:50%}.factory-bootstrap-454 .col-xs-offset-5{margin-left:41.66666666666667%}.factory-bootstrap-454 .col-xs-offset-4{margin-left:33.33333333333333%}.factory-bootstrap-454 .col-xs-offset-3{margin-left:25%}.factory-bootstrap-454 .col-xs-offset-2{margin-left:16.666666666666664%}.factory-bootstrap-454 .col-xs-offset-1{margin-left:8.333333333333332%}.factory-bootstrap-454 .col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666666666666%}.col-sm-10{width:83.33333333333334%}.col-sm-9{width:75%}.col-sm-8{width:66.66666666666666%}.col-sm-7{width:58.333333333333336%}.col-sm-6{width:50%}.col-sm-5{width:41.66666666666667%}.col-sm-4{width:33.33333333333333%}.col-sm-3{width:25%}.col-sm-2{width:16.666666666666664%}.col-sm-1{width:8.333333333333332%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-pull-0{right:0}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666666666666%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-1{left:8.333333333333332%}.col-sm-push-0{left:0}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666666666666%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-1{margin-left:8.333333333333332%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666666666666%}.col-md-10{width:83.33333333333334%}.col-md-9{width:75%}.col-md-8{width:66.66666666666666%}.col-md-7{width:58.333333333333336%}.col-md-6{width:50%}.col-md-5{width:41.66666666666667%}.col-md-4{width:33.33333333333333%}.col-md-3{width:25%}.col-md-2{width:16.666666666666664%}.col-md-1{width:8.333333333333332%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666666666666%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-1{right:8.333333333333332%}.col-md-pull-0{right:0}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666666666666%}.col-md-push-10{left:83.33333333333334%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666666666666%}.col-md-push-7{left:58.333333333333336%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666666666667%}.col-md-push-4{left:33.33333333333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.666666666666664%}.col-md-push-1{left:8.333333333333332%}.col-md-push-0{left:0}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666666666666%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offset-1{margin-left:8.333333333333332%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666666666666%}.col-lg-10{width:83.33333333333334%}.col-lg-9{width:75%}.col-lg-8{width:66.66666666666666%}.col-lg-7{width:58.333333333333336%}.col-lg-6{width:50%}.col-lg-5{width:41.66666666666667%}.col-lg-4{width:33.33333333333333%}.col-lg-3{width:25%}.col-lg-2{width:16.666666666666664%}.col-lg-1{width:8.333333333333332%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-1{right:8.333333333333332%}.col-lg-pull-0{right:0}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666666666666%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.666666666666664%}.col-lg-push-1{left:8.333333333333332%}.col-lg-push-0{left:0}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666666666666%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666666666667%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-1{margin-left:8.333333333333332%}.col-lg-offset-0{margin-left:0}}.factory-bootstrap-454 table{max-width:100%;background-color:transparent}.factory-bootstrap-454 th{text-align:left}.factory-bootstrap-454 .table{width:100%;margin-bottom:20px}.factory-bootstrap-454 .table>tbody>tr>td,.factory-bootstrap-454 .table>tbody>tr>th,.factory-bootstrap-454 .table>tfoot>tr>td,.factory-bootstrap-454 .table>tfoot>tr>th,.factory-bootstrap-454 .table>thead>tr>td,.factory-bootstrap-454 .table>thead>tr>th{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.factory-bootstrap-454 .table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.factory-bootstrap-454 .table>caption+thead>tr:first-child>td,.factory-bootstrap-454 .table>caption+thead>tr:first-child>th,.factory-bootstrap-454 .table>colgroup+thead>tr:first-child>td,.factory-bootstrap-454 .table>colgroup+thead>tr:first-child>th,.factory-bootstrap-454 .table>thead:first-child>tr:first-child>td,.factory-bootstrap-454 .table>thead:first-child>tr:first-child>th{border-top:0}.factory-bootstrap-454 .table>tbody+tbody{border-top:2px solid #ddd}.factory-bootstrap-454 .table .table{background-color:#fff}.factory-bootstrap-454 .table-condensed>tbody>tr>td,.factory-bootstrap-454 .table-condensed>tbody>tr>th,.factory-bootstrap-454 .table-condensed>tfoot>tr>td,.factory-bootstrap-454 .table-condensed>tfoot>tr>th,.factory-bootstrap-454 .table-condensed>thead>tr>td,.factory-bootstrap-454 .table-condensed>thead>tr>th{padding:5px}.factory-bootstrap-454 .table-bordered,.factory-bootstrap-454 .table-bordered>tbody>tr>td,.factory-bootstrap-454 .table-bordered>tbody>tr>th,.factory-bootstrap-454 .table-bordered>tfoot>tr>td,.factory-bootstrap-454 .table-bordered>tfoot>tr>th,.factory-bootstrap-454 .table-bordered>thead>tr>td,.factory-bootstrap-454 .table-bordered>thead>tr>th{border:1px solid #ddd}.factory-bootstrap-454 .table-bordered>thead>tr>td,.factory-bootstrap-454 .table-bordered>thead>tr>th{border-bottom-width:2px}.factory-bootstrap-454 .table-striped>tbody>tr:nth-child(odd)>td,.factory-bootstrap-454 .table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.factory-bootstrap-454 .table-hover>tbody>tr:hover>td,.factory-bootstrap-454 .table-hover>tbody>tr:hover>th{background-color:#f5f5f5}.factory-bootstrap-454 table col[class*=col-]{position:static;display:table-column;float:none}.factory-bootstrap-454 table td[class*=col-],.factory-bootstrap-454 table th[class*=col-]{display:table-cell;float:none}.factory-bootstrap-454 .table>tbody>.active>td,.factory-bootstrap-454 .table>tbody>.active>th,.factory-bootstrap-454 .table>tbody>tr>.active,.factory-bootstrap-454 .table>tfoot>.active>td,.factory-bootstrap-454 .table>tfoot>.active>th,.factory-bootstrap-454 .table>tfoot>tr>.active,.factory-bootstrap-454 .table>thead>.active>td,.factory-bootstrap-454 .table>thead>.active>th,.factory-bootstrap-454 .table>thead>tr>.active{background-color:#f5f5f5}.factory-bootstrap-454 .table-hover>tbody>.active:hover>td,.factory-bootstrap-454 .table-hover>tbody>.active:hover>th,.factory-bootstrap-454 .table-hover>tbody>tr>.active:hover{background-color:#e8e8e8}.factory-bootstrap-454 .table>tbody>.success>td,.factory-bootstrap-454 .table>tbody>.success>th,.factory-bootstrap-454 .table>tbody>tr>.success,.factory-bootstrap-454 .table>tfoot>.success>td,.factory-bootstrap-454 .table>tfoot>.success>th,.factory-bootstrap-454 .table>tfoot>tr>.success,.factory-bootstrap-454 .table>thead>.success>td,.factory-bootstrap-454 .table>thead>.success>th,.factory-bootstrap-454 .table>thead>tr>.success{background-color:#dff0d8}.factory-bootstrap-454 .table-hover>tbody>.success:hover>td,.factory-bootstrap-454 .table-hover>tbody>.success:hover>th,.factory-bootstrap-454 .table-hover>tbody>tr>.success:hover{background-color:#d0e9c6}.factory-bootstrap-454 .table>tbody>.danger>td,.factory-bootstrap-454 .table>tbody>.danger>th,.factory-bootstrap-454 .table>tbody>tr>.danger,.factory-bootstrap-454 .table>tfoot>.danger>td,.factory-bootstrap-454 .table>tfoot>.danger>th,.factory-bootstrap-454 .table>tfoot>tr>.danger,.factory-bootstrap-454 .table>thead>.danger>td,.factory-bootstrap-454 .table>thead>.danger>th,.factory-bootstrap-454 .table>thead>tr>.danger{background-color:#f2dede}.factory-bootstrap-454 .table-hover>tbody>.danger:hover>td,.factory-bootstrap-454 .table-hover>tbody>.danger:hover>th,.factory-bootstrap-454 .table-hover>tbody>tr>.danger:hover{background-color:#ebcccc}.factory-bootstrap-454 .table>tbody>.warning>td,.factory-bootstrap-454 .table>tbody>.warning>th,.factory-bootstrap-454 .table>tbody>tr>.warning,.factory-bootstrap-454 .table>tfoot>.warning>td,.factory-bootstrap-454 .table>tfoot>.warning>th,.factory-bootstrap-454 .table>tfoot>tr>.warning,.factory-bootstrap-454 .table>thead>.warning>td,.factory-bootstrap-454 .table>thead>.warning>th,.factory-bootstrap-454 .table>thead>tr>.warning{background-color:#fcf8e3}.factory-bootstrap-454 .table-hover>tbody>.warning:hover>td,.factory-bootstrap-454 .table-hover>tbody>.warning:hover>th,.factory-bootstrap-454 .table-hover>tbody>tr>.warning:hover{background-color:#faf2cc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:scroll;overflow-y:hidden;border:1px solid #ddd;-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}.factory-bootstrap-454 fieldset{padding:0;margin:0;border:0}.factory-bootstrap-454 legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5;-moz-box-sizing:content-box;box-sizing:content-box}.factory-bootstrap-454 label{display:inline-block;margin-bottom:5px;font-weight:700}.factory-bootstrap-454 input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.factory-bootstrap-454 input[type=checkbox],.factory-bootstrap-454 input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}.factory-bootstrap-454 input[type=file]{display:block}.factory-bootstrap-454 select[multiple],.factory-bootstrap-454 select[size]{height:auto}.factory-bootstrap-454 select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}.factory-bootstrap-454 input[type=checkbox]:focus,.factory-bootstrap-454 input[type=file]:focus,.factory-bootstrap-454 input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-454 input[type=number]::-webkit-inner-spin-button,.factory-bootstrap-454 input[type=number]::-webkit-outer-spin-button{height:auto}.factory-bootstrap-454 output{display:block;padding-top:7px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle}.factory-bootstrap-454 .form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.factory-bootstrap-454 .form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-454 .form-control:-moz-placeholder{color:#999}.factory-bootstrap-454 .form-control::-moz-placeholder{color:#999;opacity:1}.factory-bootstrap-454 .form-control:-ms-input-placeholder{color:#999}.factory-bootstrap-454 .form-control::-webkit-input-placeholder{color:#999}.factory-bootstrap-454 .form-control[disabled],.factory-bootstrap-454 .form-control[readonly],.factory-bootstrap-454 fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}.factory-bootstrap-454 textarea.form-control{height:auto}.factory-bootstrap-454 .form-group{margin-bottom:15px}.factory-bootstrap-454 .checkbox,.factory-bootstrap-454 .radio{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.factory-bootstrap-454 .checkbox label,.factory-bootstrap-454 .radio label{display:inline;margin-bottom:0;font-weight:400;cursor:pointer}.factory-bootstrap-454 .checkbox input[type=checkbox],.factory-bootstrap-454 .checkbox-inline input[type=checkbox],.factory-bootstrap-454 .radio input[type=radio],.factory-bootstrap-454 .radio-inline input[type=radio]{float:left;margin-left:-20px}.factory-bootstrap-454 .checkbox+.checkbox,.factory-bootstrap-454 .radio+.radio{margin-top:-5px}.factory-bootstrap-454 .checkbox-inline,.factory-bootstrap-454 .radio-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.factory-bootstrap-454 .checkbox-inline+.checkbox-inline,.factory-bootstrap-454 .radio-inline+.radio-inline{margin-top:0;margin-left:10px}.factory-bootstrap-454 .checkbox-inline[disabled],.factory-bootstrap-454 .checkbox[disabled],.factory-bootstrap-454 .radio-inline[disabled],.factory-bootstrap-454 .radio[disabled],.factory-bootstrap-454 fieldset[disabled] .checkbox,.factory-bootstrap-454 fieldset[disabled] .checkbox-inline,.factory-bootstrap-454 fieldset[disabled] .radio,.factory-bootstrap-454 fieldset[disabled] .radio-inline,.factory-bootstrap-454 fieldset[disabled] input[type=checkbox],.factory-bootstrap-454 fieldset[disabled] input[type=radio],.factory-bootstrap-454 input[type=checkbox][disabled],.factory-bootstrap-454 input[type=radio][disabled]{cursor:not-allowed}.factory-bootstrap-454 .input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-454 select.input-sm{height:30px;line-height:30px}.factory-bootstrap-454 textarea.input-sm{height:auto}.factory-bootstrap-454 .input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-454 select.input-lg{height:46px;line-height:46px}.factory-bootstrap-454 textarea.input-lg{height:auto}.factory-bootstrap-454 .has-warning .checkbox,.factory-bootstrap-454 .has-warning .checkbox-inline,.factory-bootstrap-454 .has-warning .control-label,.factory-bootstrap-454 .has-warning .help-block,.factory-bootstrap-454 .has-warning .radio,.factory-bootstrap-454 .has-warning .radio-inline{color:#8a6d3b}.factory-bootstrap-454 .has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-454 .has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.factory-bootstrap-454 .has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.factory-bootstrap-454 .has-error .checkbox,.factory-bootstrap-454 .has-error .checkbox-inline,.factory-bootstrap-454 .has-error .control-label,.factory-bootstrap-454 .has-error .help-block,.factory-bootstrap-454 .has-error .radio,.factory-bootstrap-454 .has-error .radio-inline{color:#a94442}.factory-bootstrap-454 .controls{display:block}.factory-bootstrap-454 .has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-454 .has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.factory-bootstrap-454 .has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.factory-bootstrap-454 .has-success .checkbox,.factory-bootstrap-454 .has-success .checkbox-inline,.factory-bootstrap-454 .has-success .control-label,.factory-bootstrap-454 .has-success .help-block,.factory-bootstrap-454 .has-success .radio,.factory-bootstrap-454 .has-success .radio-inline{color:#3c763d}.factory-bootstrap-454 .has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-454 .has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.factory-bootstrap-454 .has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.factory-bootstrap-454 .form-control-static{margin-bottom:0}.factory-bootstrap-454 .help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373;font-weight:400}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline select.form-control{width:auto}.form-inline .checkbox,.form-inline .radio{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{float:none;margin-left:0}}.factory-bootstrap-454 .form-horizontal .checkbox,.factory-bootstrap-454 .form-horizontal .checkbox-inline,.factory-bootstrap-454 .form-horizontal .control-label,.factory-bootstrap-454 .form-horizontal .radio,.factory-bootstrap-454 .form-horizontal .radio-inline{position:relative;padding-top:7px;margin-top:0;margin-bottom:0}.factory-bootstrap-454 .form-horizontal .control-label{max-width:200px}.factory-bootstrap-454 .form-horizontal .checkbox,.factory-bootstrap-454 .form-horizontal .radio{min-height:27px}.factory-bootstrap-454 .form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.factory-bootstrap-454 .form-horizontal .form-group:after,.factory-bootstrap-454 .form-horizontal .form-group:before{display:table;content:" "}.factory-bootstrap-454 .form-horizontal .form-group:after{clear:both}.factory-bootstrap-454 .form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.factory-bootstrap-454 .btn{display:inline-block;padding:5px 12px;margin-bottom:0;font-size:13px;font-weight:400;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;border-radius:3px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.factory-bootstrap-454 .btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-454 .btn{text-decoration:none}.factory-bootstrap-454 .btn:focus,.factory-bootstrap-454 .btn:hover{color:#333;text-decoration:none}.factory-bootstrap-454 .btn.disabled,.factory-bootstrap-454 .btn[disabled],.factory-bootstrap-454 fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-454 .btn-default.active,.factory-bootstrap-454 .btn-default:active,.factory-bootstrap-454 .btn-default:focus,.factory-bootstrap-454 .btn-default:hover,.factory-bootstrap-454 .open .dropdown-toggle.btn-default{background:#fafafa;border-color:#999;color:#222}.factory-bootstrap-454 .btn-default.active,.factory-bootstrap-454 .btn-default:active,.factory-bootstrap-454 .open .dropdown-toggle.btn-default{background-image:none}.factory-bootstrap-454 .btn-default.disabled,.factory-bootstrap-454 .btn-default.disabled.active,.factory-bootstrap-454 .btn-default.disabled:active,.factory-bootstrap-454 .btn-default.disabled:focus,.factory-bootstrap-454 .btn-default.disabled:hover,.factory-bootstrap-454 .btn-default[disabled],.factory-bootstrap-454 .btn-default[disabled].active,.factory-bootstrap-454 .btn-default[disabled]:active,.factory-bootstrap-454 .btn-default[disabled]:focus,.factory-bootstrap-454 .btn-default[disabled]:hover,.factory-bootstrap-454 fieldset[disabled] .btn-default,.factory-bootstrap-454 fieldset[disabled] .btn-default.active,.factory-bootstrap-454 fieldset[disabled] .btn-default:active,.factory-bootstrap-454 fieldset[disabled] .btn-default:focus,.factory-bootstrap-454 fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.factory-bootstrap-454 .btn-default .badge{color:#fff;background-color:#fff}.factory-bootstrap-454 .btn-primary.active,.factory-bootstrap-454 .btn-primary:active,.factory-bootstrap-454 .btn-primary:focus,.factory-bootstrap-454 .btn-primary:hover,.factory-bootstrap-454 .open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.factory-bootstrap-454 .btn-primary.active,.factory-bootstrap-454 .btn-primary:active,.factory-bootstrap-454 .open .dropdown-toggle.btn-primary{background-image:none}.factory-bootstrap-454 .btn-primary.disabled,.factory-bootstrap-454 .btn-primary.disabled.active,.factory-bootstrap-454 .btn-primary.disabled:active,.factory-bootstrap-454 .btn-primary.disabled:focus,.factory-bootstrap-454 .btn-primary.disabled:hover,.factory-bootstrap-454 .btn-primary[disabled],.factory-bootstrap-454 .btn-primary[disabled].active,.factory-bootstrap-454 .btn-primary[disabled]:active,.factory-bootstrap-454 .btn-primary[disabled]:focus,.factory-bootstrap-454 .btn-primary[disabled]:hover,.factory-bootstrap-454 fieldset[disabled] .btn-primary,.factory-bootstrap-454 fieldset[disabled] .btn-primary.active,.factory-bootstrap-454 fieldset[disabled] .btn-primary:active,.factory-bootstrap-454 fieldset[disabled] .btn-primary:focus,.factory-bootstrap-454 fieldset[disabled] .btn-primary:hover{background-color:#428bca;border-color:#357ebd}.factory-bootstrap-454 .btn-primary .badge{color:#428bca;background-color:#fff}.factory-bootstrap-454 .btn-warning{color:#fff;background-color:#f0ad4e}.factory-bootstrap-454 .btn-warning.active,.factory-bootstrap-454 .btn-warning:active,.factory-bootstrap-454 .btn-warning:focus,.factory-bootstrap-454 .btn-warning:hover,.factory-bootstrap-454 .open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.factory-bootstrap-454 .btn-warning.active,.factory-bootstrap-454 .btn-warning:active,.factory-bootstrap-454 .open .dropdown-toggle.btn-warning{background-image:none}.factory-bootstrap-454 .btn-warning.disabled,.factory-bootstrap-454 .btn-warning.disabled.active,.factory-bootstrap-454 .btn-warning.disabled:active,.factory-bootstrap-454 .btn-warning.disabled:focus,.factory-bootstrap-454 .btn-warning.disabled:hover,.factory-bootstrap-454 .btn-warning[disabled],.factory-bootstrap-454 .btn-warning[disabled].active,.factory-bootstrap-454 .btn-warning[disabled]:active,.factory-bootstrap-454 .btn-warning[disabled]:focus,.factory-bootstrap-454 .btn-warning[disabled]:hover,.factory-bootstrap-454 fieldset[disabled] .btn-warning,.factory-bootstrap-454 fieldset[disabled] .btn-warning.active,.factory-bootstrap-454 fieldset[disabled] .btn-warning:active,.factory-bootstrap-454 fieldset[disabled] .btn-warning:focus,.factory-bootstrap-454 fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.factory-bootstrap-454 .btn-warning .badge{color:#f0ad4e;background-color:#fff}.factory-bootstrap-454 .btn-success{color:#fff;background-color:#5cb85c}.factory-bootstrap-454 .btn-success.active,.factory-bootstrap-454 .btn-success:active,.factory-bootstrap-454 .btn-success:focus,.factory-bootstrap-454 .btn-success:hover,.factory-bootstrap-454 .open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.factory-bootstrap-454 .btn-success.active,.factory-bootstrap-454 .btn-success:active,.factory-bootstrap-454 .open .dropdown-toggle.btn-success{background-image:none}.factory-bootstrap-454 .btn-success.disabled,.factory-bootstrap-454 .btn-success.disabled.active,.factory-bootstrap-454 .btn-success.disabled:active,.factory-bootstrap-454 .btn-success.disabled:focus,.factory-bootstrap-454 .btn-success.disabled:hover,.factory-bootstrap-454 .btn-success[disabled],.factory-bootstrap-454 .btn-success[disabled].active,.factory-bootstrap-454 .btn-success[disabled]:active,.factory-bootstrap-454 .btn-success[disabled]:focus,.factory-bootstrap-454 .btn-success[disabled]:hover,.factory-bootstrap-454 fieldset[disabled] .btn-success,.factory-bootstrap-454 fieldset[disabled] .btn-success.active,.factory-bootstrap-454 fieldset[disabled] .btn-success:active,.factory-bootstrap-454 fieldset[disabled] .btn-success:focus,.factory-bootstrap-454 fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.factory-bootstrap-454 .btn-success .badge{color:#5cb85c;background-color:#fff}.factory-bootstrap-454 .btn-info{color:#fff;background-color:#5bc0de}.factory-bootstrap-454 .btn-info.active,.factory-bootstrap-454 .btn-info:active,.factory-bootstrap-454 .btn-info:focus,.factory-bootstrap-454 .btn-info:hover,.factory-bootstrap-454 .open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.factory-bootstrap-454 .btn-info.active,.factory-bootstrap-454 .btn-info:active,.factory-bootstrap-454 .open .dropdown-toggle.btn-info{background-image:none}.factory-bootstrap-454 .btn-info.disabled,.factory-bootstrap-454 .btn-info.disabled.active,.factory-bootstrap-454 .btn-info.disabled:active,.factory-bootstrap-454 .btn-info.disabled:focus,.factory-bootstrap-454 .btn-info.disabled:hover,.factory-bootstrap-454 .btn-info[disabled],.factory-bootstrap-454 .btn-info[disabled].active,.factory-bootstrap-454 .btn-info[disabled]:active,.factory-bootstrap-454 .btn-info[disabled]:focus,.factory-bootstrap-454 .btn-info[disabled]:hover,.factory-bootstrap-454 fieldset[disabled] .btn-info,.factory-bootstrap-454 fieldset[disabled] .btn-info.active,.factory-bootstrap-454 fieldset[disabled] .btn-info:active,.factory-bootstrap-454 fieldset[disabled] .btn-info:focus,.factory-bootstrap-454 fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.factory-bootstrap-454 .btn-info .badge{color:#5bc0de;background-color:#fff}.factory-bootstrap-454 .btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.factory-bootstrap-454 .btn-link,.factory-bootstrap-454 .btn-link:active,.factory-bootstrap-454 .btn-link[disabled],.factory-bootstrap-454 fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-454 .btn-link,.factory-bootstrap-454 .btn-link:active,.factory-bootstrap-454 .btn-link:focus,.factory-bootstrap-454 .btn-link:hover{border-color:transparent}.factory-bootstrap-454 .btn-link:focus,.factory-bootstrap-454 .btn-link:hover{color:#2a6496;text-decoration:underline;background-color:transparent}.factory-bootstrap-454 .btn-link[disabled]:focus,.factory-bootstrap-454 .btn-link[disabled]:hover,.factory-bootstrap-454 fieldset[disabled] .btn-link:focus,.factory-bootstrap-454 fieldset[disabled] .btn-link:hover{color:#999;text-decoration:none}.factory-bootstrap-454 .btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-454 .btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-454 .btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-454 .btn-block{display:block;width:100%;padding-right:0;padding-left:0}.factory-bootstrap-454 .btn-block+.btn-block{margin-top:5px}.factory-bootstrap-454 input[type=button].btn-block,.factory-bootstrap-454 input[type=reset].btn-block,.factory-bootstrap-454 input[type=submit].btn-block{width:100%}.factory-bootstrap-454 .fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.factory-bootstrap-454 .fade.in{opacity:1}.factory-bootstrap-454 .collapse{display:none}.factory-bootstrap-454 .collapse.in{display:block}.factory-bootstrap-454 .collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular) format('svg')}.factory-bootstrap-454 .glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:400;line-height:1;-moz-osx-font-smoothing:grayscale}.factory-bootstrap-454 .glyphicon:empty{width:1em}.factory-bootstrap-454 .glyphicon-asterisk:before{content:"\2a"}.factory-bootstrap-454 .glyphicon-plus:before{content:"\2b"}.factory-bootstrap-454 .glyphicon-euro:before{content:"\20ac"}.factory-bootstrap-454 .glyphicon-minus:before{content:"\2212"}.factory-bootstrap-454 .glyphicon-cloud:before{content:"\2601"}.factory-bootstrap-454 .glyphicon-envelope:before{content:"\2709"}.factory-bootstrap-454 .glyphicon-pencil:before{content:"\270f"}.factory-bootstrap-454 .glyphicon-glass:before{content:"\e001"}.factory-bootstrap-454 .glyphicon-music:before{content:"\e002"}.factory-bootstrap-454 .glyphicon-search:before{content:"\e003"}.factory-bootstrap-454 .glyphicon-heart:before{content:"\e005"}.factory-bootstrap-454 .glyphicon-star:before{content:"\e006"}.factory-bootstrap-454 .glyphicon-star-empty:before{content:"\e007"}.factory-bootstrap-454 .glyphicon-user:before{content:"\e008"}.factory-bootstrap-454 .glyphicon-film:before{content:"\e009"}.factory-bootstrap-454 .glyphicon-th-large:before{content:"\e010"}.factory-bootstrap-454 .glyphicon-th:before{content:"\e011"}.factory-bootstrap-454 .glyphicon-th-list:before{content:"\e012"}.factory-bootstrap-454 .glyphicon-ok:before{content:"\e013"}.factory-bootstrap-454 .glyphicon-remove:before{content:"\e014"}.factory-bootstrap-454 .glyphicon-zoom-in:before{content:"\e015"}.factory-bootstrap-454 .glyphicon-zoom-out:before{content:"\e016"}.factory-bootstrap-454 .glyphicon-off:before{content:"\e017"}.factory-bootstrap-454 .glyphicon-signal:before{content:"\e018"}.factory-bootstrap-454 .glyphicon-cog:before{content:"\e019"}.factory-bootstrap-454 .glyphicon-trash:before{content:"\e020"}.factory-bootstrap-454 .glyphicon-home:before{content:"\e021"}.factory-bootstrap-454 .glyphicon-file:before{content:"\e022"}.factory-bootstrap-454 .glyphicon-time:before{content:"\e023"}.factory-bootstrap-454 .glyphicon-road:before{content:"\e024"}.factory-bootstrap-454 .glyphicon-download-alt:before{content:"\e025"}.factory-bootstrap-454 .glyphicon-download:before{content:"\e026"}.factory-bootstrap-454 .glyphicon-upload:before{content:"\e027"}.factory-bootstrap-454 .glyphicon-inbox:before{content:"\e028"}.factory-bootstrap-454 .glyphicon-play-circle:before{content:"\e029"}.factory-bootstrap-454 .glyphicon-repeat:before{content:"\e030"}.factory-bootstrap-454 .glyphicon-refresh:before{content:"\e031"}.factory-bootstrap-454 .glyphicon-list-alt:before{content:"\e032"}.factory-bootstrap-454 .glyphicon-lock:before{content:"\e033"}.factory-bootstrap-454 .glyphicon-flag:before{content:"\e034"}.factory-bootstrap-454 .glyphicon-headphones:before{content:"\e035"}.factory-bootstrap-454 .glyphicon-volume-off:before{content:"\e036"}.factory-bootstrap-454 .glyphicon-volume-down:before{content:"\e037"}.factory-bootstrap-454 .glyphicon-volume-up:before{content:"\e038"}.factory-bootstrap-454 .glyphicon-qrcode:before{content:"\e039"}.factory-bootstrap-454 .glyphicon-barcode:before{content:"\e040"}.factory-bootstrap-454 .glyphicon-tag:before{content:"\e041"}.factory-bootstrap-454 .glyphicon-tags:before{content:"\e042"}.factory-bootstrap-454 .glyphicon-book:before{content:"\e043"}.factory-bootstrap-454 .glyphicon-bookmark:before{content:"\e044"}.factory-bootstrap-454 .glyphicon-print:before{content:"\e045"}.factory-bootstrap-454 .glyphicon-camera:before{content:"\e046"}.factory-bootstrap-454 .glyphicon-font:before{content:"\e047"}.factory-bootstrap-454 .glyphicon-bold:before{content:"\e048"}.factory-bootstrap-454 .glyphicon-italic:before{content:"\e049"}.factory-bootstrap-454 .glyphicon-text-height:before{content:"\e050"}.factory-bootstrap-454 .glyphicon-text-width:before{content:"\e051"}.factory-bootstrap-454 .glyphicon-align-left:before{content:"\e052"}.factory-bootstrap-454 .glyphicon-align-center:before{content:"\e053"}.factory-bootstrap-454 .glyphicon-align-right:before{content:"\e054"}.factory-bootstrap-454 .glyphicon-align-justify:before{content:"\e055"}.factory-bootstrap-454 .glyphicon-list:before{content:"\e056"}.factory-bootstrap-454 .glyphicon-indent-left:before{content:"\e057"}.factory-bootstrap-454 .glyphicon-indent-right:before{content:"\e058"}.factory-bootstrap-454 .glyphicon-facetime-video:before{content:"\e059"}.factory-bootstrap-454 .glyphicon-picture:before{content:"\e060"}.factory-bootstrap-454 .glyphicon-map-marker:before{content:"\e062"}.factory-bootstrap-454 .glyphicon-adjust:before{content:"\e063"}.factory-bootstrap-454 .glyphicon-tint:before{content:"\e064"}.factory-bootstrap-454 .glyphicon-edit:before{content:"\e065"}.factory-bootstrap-454 .glyphicon-share:before{content:"\e066"}.factory-bootstrap-454 .glyphicon-check:before{content:"\e067"}.factory-bootstrap-454 .glyphicon-move:before{content:"\e068"}.factory-bootstrap-454 .glyphicon-step-backward:before{content:"\e069"}.factory-bootstrap-454 .glyphicon-fast-backward:before{content:"\e070"}.factory-bootstrap-454 .glyphicon-backward:before{content:"\e071"}.factory-bootstrap-454 .glyphicon-play:before{content:"\e072"}.factory-bootstrap-454 .glyphicon-pause:before{content:"\e073"}.factory-bootstrap-454 .glyphicon-stop:before{content:"\e074"}.factory-bootstrap-454 .glyphicon-forward:before{content:"\e075"}.factory-bootstrap-454 .glyphicon-fast-forward:before{content:"\e076"}.factory-bootstrap-454 .glyphicon-step-forward:before{content:"\e077"}.factory-bootstrap-454 .glyphicon-eject:before{content:"\e078"}.factory-bootstrap-454 .glyphicon-chevron-left:before{content:"\e079"}.factory-bootstrap-454 .glyphicon-chevron-right:before{content:"\e080"}.factory-bootstrap-454 .glyphicon-plus-sign:before{content:"\e081"}.factory-bootstrap-454 .glyphicon-minus-sign:before{content:"\e082"}.factory-bootstrap-454 .glyphicon-remove-sign:before{content:"\e083"}.factory-bootstrap-454 .glyphicon-ok-sign:before{content:"\e084"}.factory-bootstrap-454 .glyphicon-question-sign:before{content:"\e085"}.factory-bootstrap-454 .glyphicon-info-sign:before{content:"\e086"}.factory-bootstrap-454 .glyphicon-screenshot:before{content:"\e087"}.factory-bootstrap-454 .glyphicon-remove-circle:before{content:"\e088"}.factory-bootstrap-454 .glyphicon-ok-circle:before{content:"\e089"}.factory-bootstrap-454 .glyphicon-ban-circle:before{content:"\e090"}.factory-bootstrap-454 .glyphicon-arrow-left:before{content:"\e091"}.factory-bootstrap-454 .glyphicon-arrow-right:before{content:"\e092"}.factory-bootstrap-454 .glyphicon-arrow-up:before{content:"\e093"}.factory-bootstrap-454 .glyphicon-arrow-down:before{content:"\e094"}.factory-bootstrap-454 .glyphicon-share-alt:before{content:"\e095"}.factory-bootstrap-454 .glyphicon-resize-full:before{content:"\e096"}.factory-bootstrap-454 .glyphicon-resize-small:before{content:"\e097"}.factory-bootstrap-454 .glyphicon-exclamation-sign:before{content:"\e101"}.factory-bootstrap-454 .glyphicon-gift:before{content:"\e102"}.factory-bootstrap-454 .glyphicon-leaf:before{content:"\e103"}.factory-bootstrap-454 .glyphicon-fire:before{content:"\e104"}.factory-bootstrap-454 .glyphicon-eye-open:before{content:"\e105"}.factory-bootstrap-454 .glyphicon-eye-close:before{content:"\e106"}.factory-bootstrap-454 .glyphicon-warning-sign:before{content:"\e107"}.factory-bootstrap-454 .glyphicon-plane:before{content:"\e108"}.factory-bootstrap-454 .glyphicon-calendar:before{content:"\e109"}.factory-bootstrap-454 .glyphicon-random:before{content:"\e110"}.factory-bootstrap-454 .glyphicon-comment:before{content:"\e111"}.factory-bootstrap-454 .glyphicon-magnet:before{content:"\e112"}.factory-bootstrap-454 .glyphicon-chevron-up:before{content:"\e113"}.factory-bootstrap-454 .glyphicon-chevron-down:before{content:"\e114"}.factory-bootstrap-454 .glyphicon-retweet:before{content:"\e115"}.factory-bootstrap-454 .glyphicon-shopping-cart:before{content:"\e116"}.factory-bootstrap-454 .glyphicon-folder-close:before{content:"\e117"}.factory-bootstrap-454 .glyphicon-folder-open:before{content:"\e118"}.factory-bootstrap-454 .glyphicon-resize-vertical:before{content:"\e119"}.factory-bootstrap-454 .glyphicon-resize-horizontal:before{content:"\e120"}.factory-bootstrap-454 .glyphicon-hdd:before{content:"\e121"}.factory-bootstrap-454 .glyphicon-bullhorn:before{content:"\e122"}.factory-bootstrap-454 .glyphicon-bell:before{content:"\e123"}.factory-bootstrap-454 .glyphicon-certificate:before{content:"\e124"}.factory-bootstrap-454 .glyphicon-thumbs-up:before{content:"\e125"}.factory-bootstrap-454 .glyphicon-thumbs-down:before{content:"\e126"}.factory-bootstrap-454 .glyphicon-hand-right:before{content:"\e127"}.factory-bootstrap-454 .glyphicon-hand-left:before{content:"\e128"}.factory-bootstrap-454 .glyphicon-hand-up:before{content:"\e129"}.factory-bootstrap-454 .glyphicon-hand-down:before{content:"\e130"}.factory-bootstrap-454 .glyphicon-circle-arrow-right:before{content:"\e131"}.factory-bootstrap-454 .glyphicon-circle-arrow-left:before{content:"\e132"}.factory-bootstrap-454 .glyphicon-circle-arrow-up:before{content:"\e133"}.factory-bootstrap-454 .glyphicon-circle-arrow-down:before{content:"\e134"}.factory-bootstrap-454 .glyphicon-globe:before{content:"\e135"}.factory-bootstrap-454 .glyphicon-wrench:before{content:"\e136"}.factory-bootstrap-454 .glyphicon-tasks:before{content:"\e137"}.factory-bootstrap-454 .glyphicon-filter:before{content:"\e138"}.factory-bootstrap-454 .glyphicon-briefcase:before{content:"\e139"}.factory-bootstrap-454 .glyphicon-fullscreen:before{content:"\e140"}.factory-bootstrap-454 .glyphicon-dashboard:before{content:"\e141"}.factory-bootstrap-454 .glyphicon-paperclip:before{content:"\e142"}.factory-bootstrap-454 .glyphicon-heart-empty:before{content:"\e143"}.factory-bootstrap-454 .glyphicon-link:before{content:"\e144"}.factory-bootstrap-454 .glyphicon-phone:before{content:"\e145"}.factory-bootstrap-454 .glyphicon-pushpin:before{content:"\e146"}.factory-bootstrap-454 .glyphicon-usd:before{content:"\e148"}.factory-bootstrap-454 .glyphicon-gbp:before{content:"\e149"}.factory-bootstrap-454 .glyphicon-sort:before{content:"\e150"}.factory-bootstrap-454 .glyphicon-sort-by-alphabet:before{content:"\e151"}.factory-bootstrap-454 .glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.factory-bootstrap-454 .glyphicon-sort-by-order:before{content:"\e153"}.factory-bootstrap-454 .glyphicon-sort-by-order-alt:before{content:"\e154"}.factory-bootstrap-454 .glyphicon-sort-by-attributes:before{content:"\e155"}.factory-bootstrap-454 .glyphicon-sort-by-attributes-alt:before{content:"\e156"}.factory-bootstrap-454 .glyphicon-unchecked:before{content:"\e157"}.factory-bootstrap-454 .glyphicon-expand:before{content:"\e158"}.factory-bootstrap-454 .glyphicon-collapse-down:before{content:"\e159"}.factory-bootstrap-454 .glyphicon-collapse-up:before{content:"\e160"}.factory-bootstrap-454 .glyphicon-log-in:before{content:"\e161"}.factory-bootstrap-454 .glyphicon-flash:before{content:"\e162"}.factory-bootstrap-454 .glyphicon-log-out:before{content:"\e163"}.factory-bootstrap-454 .glyphicon-new-window:before{content:"\e164"}.factory-bootstrap-454 .glyphicon-record:before{content:"\e165"}.factory-bootstrap-454 .glyphicon-save:before{content:"\e166"}.factory-bootstrap-454 .glyphicon-open:before{content:"\e167"}.factory-bootstrap-454 .glyphicon-saved:before{content:"\e168"}.factory-bootstrap-454 .glyphicon-import:before{content:"\e169"}.factory-bootstrap-454 .glyphicon-export:before{content:"\e170"}.factory-bootstrap-454 .glyphicon-send:before{content:"\e171"}.factory-bootstrap-454 .glyphicon-floppy-disk:before{content:"\e172"}.factory-bootstrap-454 .glyphicon-floppy-saved:before{content:"\e173"}.factory-bootstrap-454 .glyphicon-floppy-remove:before{content:"\e174"}.factory-bootstrap-454 .glyphicon-floppy-save:before{content:"\e175"}.factory-bootstrap-454 .glyphicon-floppy-open:before{content:"\e176"}.factory-bootstrap-454 .glyphicon-credit-card:before{content:"\e177"}.factory-bootstrap-454 .glyphicon-transfer:before{content:"\e178"}.factory-bootstrap-454 .glyphicon-cutlery:before{content:"\e179"}.factory-bootstrap-454 .glyphicon-header:before{content:"\e180"}.factory-bootstrap-454 .glyphicon-compressed:before{content:"\e181"}.factory-bootstrap-454 .glyphicon-earphone:before{content:"\e182"}.factory-bootstrap-454 .glyphicon-phone-alt:before{content:"\e183"}.factory-bootstrap-454 .glyphicon-tower:before{content:"\e184"}.factory-bootstrap-454 .glyphicon-stats:before{content:"\e185"}.factory-bootstrap-454 .glyphicon-sd-video:before{content:"\e186"}.factory-bootstrap-454 .glyphicon-hd-video:before{content:"\e187"}.factory-bootstrap-454 .glyphicon-subtitles:before{content:"\e188"}.factory-bootstrap-454 .glyphicon-sound-stereo:before{content:"\e189"}.factory-bootstrap-454 .glyphicon-sound-dolby:before{content:"\e190"}.factory-bootstrap-454 .glyphicon-sound-5-1:before{content:"\e191"}.factory-bootstrap-454 .glyphicon-sound-6-1:before{content:"\e192"}.factory-bootstrap-454 .glyphicon-sound-7-1:before{content:"\e193"}.factory-bootstrap-454 .glyphicon-copyright-mark:before{content:"\e194"}.factory-bootstrap-454 .glyphicon-registration-mark:before{content:"\e195"}.factory-bootstrap-454 .glyphicon-cloud-download:before{content:"\e197"}.factory-bootstrap-454 .glyphicon-cloud-upload:before{content:"\e198"}.factory-bootstrap-454 .glyphicon-tree-conifer:before{content:"\e199"}.factory-bootstrap-454 .glyphicon-tree-deciduous:before{content:"\e200"}.factory-bootstrap-454 .caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.factory-bootstrap-454 .dropdown{position:relative}.factory-bootstrap-454 .dropdown-toggle:focus{outline:0}.factory-bootstrap-454 .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.factory-bootstrap-454 .dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-454 .dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-454 .dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.428571429;color:#333;white-space:nowrap}.factory-bootstrap-454 .dropdown-menu>li>a:focus,.factory-bootstrap-454 .dropdown-menu>li>a:hover{color:#262626;text-decoration:none}.factory-bootstrap-454 .dropdown-menu>.active>a,.factory-bootstrap-454 .dropdown-menu>.active>a:focus,.factory-bootstrap-454 .dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0}.factory-bootstrap-454 .dropdown-menu>.disabled>a,.factory-bootstrap-454 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-454 .dropdown-menu>.disabled>a:hover{color:#999}.factory-bootstrap-454 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-454 .dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-454 .open>.dropdown-menu{display:block}.factory-bootstrap-454 .open>a{outline:0}.factory-bootstrap-454 .dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.factory-bootstrap-454 .dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.factory-bootstrap-454 .pull-right>.dropdown-menu{right:0;left:auto}.factory-bootstrap-454 .dropup .caret,.factory-bootstrap-454 .navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.factory-bootstrap-454 .dropup .dropdown-menu,.factory-bootstrap-454 .navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.factory-bootstrap-454 .btn-group,.factory-bootstrap-454 .btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.factory-bootstrap-454 .btn-group-vertical>.btn,.factory-bootstrap-454 .btn-group>.btn{position:relative;float:left}.factory-bootstrap-454 .btn-group-vertical>.btn.active,.factory-bootstrap-454 .btn-group-vertical>.btn:active,.factory-bootstrap-454 .btn-group-vertical>.btn:focus,.factory-bootstrap-454 .btn-group-vertical>.btn:hover,.factory-bootstrap-454 .btn-group>.btn.active,.factory-bootstrap-454 .btn-group>.btn:active,.factory-bootstrap-454 .btn-group>.btn:focus,.factory-bootstrap-454 .btn-group>.btn:hover{z-index:2}.factory-bootstrap-454 .btn-group-vertical>.btn:focus,.factory-bootstrap-454 .btn-group>.btn:focus{outline:0}.factory-bootstrap-454 .btn-group .btn+.btn,.factory-bootstrap-454 .btn-group .btn+.btn-group,.factory-bootstrap-454 .btn-group .btn-group+.btn,.factory-bootstrap-454 .btn-group .btn-group+.btn-group{margin-left:-1px}.factory-bootstrap-454 .btn-toolbar:after,.factory-bootstrap-454 .btn-toolbar:before{display:table;content:" "}.factory-bootstrap-454 .btn-toolbar:after{clear:both}.factory-bootstrap-454 .btn-toolbar .btn-group{float:left}.factory-bootstrap-454 .btn-toolbar>.btn+.btn,.factory-bootstrap-454 .btn-toolbar>.btn+.btn-group,.factory-bootstrap-454 .btn-toolbar>.btn-group+.btn,.factory-bootstrap-454 .btn-toolbar>.btn-group+.btn-group{margin-left:5px}.factory-bootstrap-454 .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.factory-bootstrap-454 .btn-group>.btn:first-child{margin-left:0}.factory-bootstrap-454 .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-454 .btn-group>.btn:last-child:not(:first-child),.factory-bootstrap-454 .btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-454 .btn-group>.btn-group{float:left}.factory-bootstrap-454 .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-454 .btn-group>.btn-group:first-child>.btn:last-child,.factory-bootstrap-454 .btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-454 .btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-454 .btn-group .dropdown-toggle:active,.factory-bootstrap-454 .btn-group.open .dropdown-toggle{outline:0}.factory-bootstrap-454 .btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-454 .btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-454 .btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-454 .btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.factory-bootstrap-454 .btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.factory-bootstrap-454 .btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.factory-bootstrap-454 .btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-454 .btn-group{border:4px solid #f9f9f9;border-radius:4px}.factory-bootstrap-454 .btn-group .btn.active.value{text-shadow:none;color:#fff;background-color:#33aad5;-webkit-box-shadow:inset 0 1px 1px #0074a2;box-shadow:inset 0 1px 3px #0074a2;border-top:1px solid #0074a2;border-bottom:1px solid #0074a2;border-left:1px solid #0074a2}.factory-bootstrap-454 .btn .caret{margin-left:0}.factory-bootstrap-454 .btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.factory-bootstrap-454 .dropup .btn-lg .caret{border-width:0 5px 5px}.factory-bootstrap-454 .btn-group-vertical>.btn,.factory-bootstrap-454 .btn-group-vertical>.btn-group,.factory-bootstrap-454 .btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.factory-bootstrap-454 .btn-group-vertical>.btn-group:after,.factory-bootstrap-454 .btn-group-vertical>.btn-group:before{display:table;content:" "}.factory-bootstrap-454 .btn-group-vertical>.btn-group:after{clear:both}.factory-bootstrap-454 .btn-group-vertical>.btn-group>.btn{float:none}.factory-bootstrap-454 .btn-group-vertical>.btn+.btn,.factory-bootstrap-454 .btn-group-vertical>.btn+.btn-group,.factory-bootstrap-454 .btn-group-vertical>.btn-group+.btn,.factory-bootstrap-454 .btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.factory-bootstrap-454 .btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-454 .btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-454 .btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-bottom-left-radius:4px;border-top-left-radius:0}.factory-bootstrap-454 .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-454 .btn-group-vertical>.btn-group:first-child>.btn:last-child,.factory-bootstrap-454 .btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-454 .btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-454 .btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.factory-bootstrap-454 .btn-group-justified>.btn,.factory-bootstrap-454 .btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.factory-bootstrap-454 .btn-group-justified>.btn-group .btn{width:100%}[data-toggle=buttons]>.btn>input[type=checkbox],[data-toggle=buttons]>.btn>input[type=radio]{display:none}.factory-bootstrap-454 .input-group{position:relative;display:table;border-collapse:separate}.factory-bootstrap-454 .input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.factory-bootstrap-454 .input-group .form-control{width:100%;margin-bottom:0}.factory-bootstrap-454 .input-group-lg>.form-control,.factory-bootstrap-454 .input-group-lg>.input-group-addon,.factory-bootstrap-454 .input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-454 select.input-group-lg>.form-control,.factory-bootstrap-454 select.input-group-lg>.input-group-addon,.factory-bootstrap-454 select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}.factory-bootstrap-454 textarea.input-group-lg>.form-control,.factory-bootstrap-454 textarea.input-group-lg>.input-group-addon,.factory-bootstrap-454 textarea.input-group-lg>.input-group-btn>.btn{height:auto}.factory-bootstrap-454 .input-group-sm>.form-control,.factory-bootstrap-454 .input-group-sm>.input-group-addon,.factory-bootstrap-454 .input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-454 select.input-group-sm>.form-control,.factory-bootstrap-454 select.input-group-sm>.input-group-addon,.factory-bootstrap-454 select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}.factory-bootstrap-454 textarea.input-group-sm>.form-control,.factory-bootstrap-454 textarea.input-group-sm>.input-group-addon,.factory-bootstrap-454 textarea.input-group-sm>.input-group-btn>.btn{height:auto}.factory-bootstrap-454 .input-group .form-control,.factory-bootstrap-454 .input-group-addon,.factory-bootstrap-454 .input-group-btn{display:table-cell}.factory-bootstrap-454 .input-group .form-control:not(:first-child):not(:last-child),.factory-bootstrap-454 .input-group-addon:not(:first-child):not(:last-child),.factory-bootstrap-454 .input-group-btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-454 .input-group-addon,.factory-bootstrap-454 .input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.factory-bootstrap-454 .input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.factory-bootstrap-454 .input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.factory-bootstrap-454 .input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.factory-bootstrap-454 .input-group-addon input[type=checkbox],.factory-bootstrap-454 .input-group-addon input[type=radio]{margin-top:0}.factory-bootstrap-454 .input-group .form-control:first-child,.factory-bootstrap-454 .input-group-addon:first-child,.factory-bootstrap-454 .input-group-btn:first-child>.btn,.factory-bootstrap-454 .input-group-btn:first-child>.dropdown-toggle,.factory-bootstrap-454 .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-454 .input-group-addon:first-child{border-right:0}.factory-bootstrap-454 .input-group .form-control:last-child,.factory-bootstrap-454 .input-group-addon:last-child,.factory-bootstrap-454 .input-group-btn:first-child>.btn:not(:first-child),.factory-bootstrap-454 .input-group-btn:last-child>.btn,.factory-bootstrap-454 .input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-454 .input-group-addon:last-child{border-left:0}.factory-bootstrap-454 .input-group-btn{position:relative;white-space:nowrap}.factory-bootstrap-454 .input-group-btn:first-child>.btn{margin-right:-1px}.factory-bootstrap-454 .input-group-btn:last-child>.btn{margin-left:-1px}.factory-bootstrap-454 .input-group-btn>.btn{position:relative}.factory-bootstrap-454 .input-group-btn>.btn+.btn{margin-left:-4px}.factory-bootstrap-454 .input-group-btn>.btn:active,.factory-bootstrap-454 .input-group-btn>.btn:hover{z-index:2}.factory-bootstrap-454 .nav{padding-left:0;margin-bottom:0;list-style:none}.factory-bootstrap-454 .nav:after,.factory-bootstrap-454 .nav:before{display:table;content:" "}.factory-bootstrap-454 .nav:after{clear:both}.factory-bootstrap-454 .nav>li{position:relative;display:block}.factory-bootstrap-454 .nav>li>a{position:relative;display:block;padding:10px 15px}.factory-bootstrap-454 .nav>li>a:focus,.factory-bootstrap-454 .nav>li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-454 .nav>li.disabled>a{color:#999}.factory-bootstrap-454 .nav>li.disabled>a:focus,.factory-bootstrap-454 .nav>li.disabled>a:hover{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.factory-bootstrap-454 .nav .open>a,.factory-bootstrap-454 .nav .open>a:focus,.factory-bootstrap-454 .nav .open>a:hover{background-color:#eee;border-color:#428bca}.factory-bootstrap-454 .nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-454 .nav>li>a>img{max-width:none}.factory-bootstrap-454 .nav-tabs{border-bottom:1px solid #ddd}.factory-bootstrap-454 .nav-tabs>li{float:left;margin-bottom:-1px}.factory-bootstrap-454 .nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.factory-bootstrap-454 .nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.factory-bootstrap-454 .nav-tabs>li.active>a,.factory-bootstrap-454 .nav-tabs>li.active>a:focus,.factory-bootstrap-454 .nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.factory-bootstrap-454 .nav-tabs.nav-justified{width:100%;border-bottom:0}.factory-bootstrap-454 .nav-tabs.nav-justified>li{float:none}.factory-bootstrap-454 .nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-454 .nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.factory-bootstrap-454 .nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-454 .nav-tabs.nav-justified>.active>a,.factory-bootstrap-454 .nav-tabs.nav-justified>.active>a:focus,.factory-bootstrap-454 .nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.factory-bootstrap-454 .nav-pills>li{float:left}.factory-bootstrap-454 .nav-pills>li>a{border-radius:4px}.factory-bootstrap-454 .nav-pills>li+li{margin-left:2px}.factory-bootstrap-454 .nav-pills>li.active>a,.factory-bootstrap-454 .nav-pills>li.active>a:focus,.factory-bootstrap-454 .nav-pills>li.active>a:hover{color:#fff;background-color:#428bca}.factory-bootstrap-454 .nav-stacked>li{float:none}.factory-bootstrap-454 .nav-stacked>li+li{margin-top:2px;margin-left:0}.factory-bootstrap-454 .nav-justified{width:100%}.factory-bootstrap-454 .nav-justified>li{float:none}.factory-bootstrap-454 .nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-454 .nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.factory-bootstrap-454 .nav-tabs-justified{border-bottom:0}.factory-bootstrap-454 .nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-454 .nav-tabs-justified>.active>a,.factory-bootstrap-454 .nav-tabs-justified>.active>a:focus,.factory-bootstrap-454 .nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.factory-bootstrap-454 .tab-content>.tab-pane{display:none}.factory-bootstrap-454 .tab-content>.active{display:block}.factory-bootstrap-454 .nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-454 .navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.factory-bootstrap-454 .navbar:after,.factory-bootstrap-454 .navbar:before{display:table;content:" "}.factory-bootstrap-454 .navbar:after{clear:both}@media (min-width:768px){.navbar{border-radius:4px}}.factory-bootstrap-454 .navbar-header:after,.factory-bootstrap-454 .navbar-header:before{display:table;content:" "}.factory-bootstrap-454 .navbar-header:after{clear:both}@media (min-width:768px){.navbar-header{float:left}}.factory-bootstrap-454 .navbar-collapse{max-height:340px;padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.factory-bootstrap-454 .navbar-collapse:after,.factory-bootstrap-454 .navbar-collapse:before{display:table;content:" "}.factory-bootstrap-454 .navbar-collapse:after{clear:both}.factory-bootstrap-454 .navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.factory-bootstrap-454 .container>.navbar-collapse,.factory-bootstrap-454 .container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.factory-bootstrap-454 .navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.factory-bootstrap-454 .navbar-fixed-bottom,.factory-bootstrap-454 .navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.factory-bootstrap-454 .navbar-fixed-top{top:0;border-width:0 0 1px}.factory-bootstrap-454 .navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.factory-bootstrap-454 .navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px}.factory-bootstrap-454 .navbar-brand:focus,.factory-bootstrap-454 .navbar-brand:hover{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.factory-bootstrap-454 .navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.factory-bootstrap-454 .navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.factory-bootstrap-454 .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.factory-bootstrap-454 .navbar-nav{margin:7.5px -15px}.factory-bootstrap-454 .navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.factory-bootstrap-454 .navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form select.form-control{width:auto}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{float:none;margin-left:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.factory-bootstrap-454 .navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-454 .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-454 .navbar-nav.pull-right>li>.dropdown-menu,.factory-bootstrap-454 .navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-454 .navbar-btn{margin-top:8px;margin-bottom:8px}.factory-bootstrap-454 .navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.factory-bootstrap-454 .navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.factory-bootstrap-454 .navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.factory-bootstrap-454 .navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.factory-bootstrap-454 .navbar-default .navbar-brand{color:#777}.factory-bootstrap-454 .navbar-default .navbar-brand:focus,.factory-bootstrap-454 .navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.factory-bootstrap-454 .navbar-default .navbar-nav>li>a,.factory-bootstrap-454 .navbar-default .navbar-text{color:#777}.factory-bootstrap-454 .navbar-default .navbar-nav>li>a:focus,.factory-bootstrap-454 .navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.factory-bootstrap-454 .navbar-default .navbar-nav>.active>a,.factory-bootstrap-454 .navbar-default .navbar-nav>.active>a:focus,.factory-bootstrap-454 .navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.factory-bootstrap-454 .navbar-default .navbar-nav>.disabled>a,.factory-bootstrap-454 .navbar-default .navbar-nav>.disabled>a:focus,.factory-bootstrap-454 .navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.factory-bootstrap-454 .navbar-default .navbar-toggle{border-color:#ddd}.factory-bootstrap-454 .navbar-default .navbar-toggle:focus,.factory-bootstrap-454 .navbar-default .navbar-toggle:hover{background-color:#ddd}.factory-bootstrap-454 .navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.factory-bootstrap-454 .navbar-default .navbar-collapse,.factory-bootstrap-454 .navbar-default .navbar-form{border-color:#e7e7e7}.factory-bootstrap-454 .navbar-default .navbar-nav>.open>a,.factory-bootstrap-454 .navbar-default .navbar-nav>.open>a:focus,.factory-bootstrap-454 .navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.factory-bootstrap-454 .navbar-default .navbar-link{color:#777}.factory-bootstrap-454 .navbar-default .navbar-link:hover{color:#333}.factory-bootstrap-454 .navbar-inverse{background-color:#222;border-color:#080808}.factory-bootstrap-454 .navbar-inverse .navbar-brand{color:#999}.factory-bootstrap-454 .navbar-inverse .navbar-brand:focus,.factory-bootstrap-454 .navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.factory-bootstrap-454 .navbar-inverse .navbar-nav>li>a,.factory-bootstrap-454 .navbar-inverse .navbar-text{color:#999}.factory-bootstrap-454 .navbar-inverse .navbar-nav>li>a:focus,.factory-bootstrap-454 .navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.factory-bootstrap-454 .navbar-inverse .navbar-nav>.active>a,.factory-bootstrap-454 .navbar-inverse .navbar-nav>.active>a:focus,.factory-bootstrap-454 .navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.factory-bootstrap-454 .navbar-inverse .navbar-nav>.disabled>a,.factory-bootstrap-454 .navbar-inverse .navbar-nav>.disabled>a:focus,.factory-bootstrap-454 .navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.factory-bootstrap-454 .navbar-inverse .navbar-toggle{border-color:#333}.factory-bootstrap-454 .navbar-inverse .navbar-toggle:focus,.factory-bootstrap-454 .navbar-inverse .navbar-toggle:hover{background-color:#333}.factory-bootstrap-454 .navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.factory-bootstrap-454 .navbar-inverse .navbar-collapse,.factory-bootstrap-454 .navbar-inverse .navbar-form{border-color:#101010}.factory-bootstrap-454 .navbar-inverse .navbar-nav>.open>a,.factory-bootstrap-454 .navbar-inverse .navbar-nav>.open>a:focus,.factory-bootstrap-454 .navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.factory-bootstrap-454 .navbar-inverse .navbar-link{color:#999}.factory-bootstrap-454 .navbar-inverse .navbar-link:hover{color:#fff}.factory-bootstrap-454 .breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.factory-bootstrap-454 .breadcrumb>li{display:inline-block}.factory-bootstrap-454 .breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.factory-bootstrap-454 .breadcrumb>.active{color:#999}.factory-bootstrap-454 .pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.factory-bootstrap-454 .pagination>li{display:inline}.factory-bootstrap-454 .pagination>li>a,.factory-bootstrap-454 .pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.428571429;text-decoration:none;background-color:#fff;border:1px solid #ddd}.factory-bootstrap-454 .pagination>li:first-child>a,.factory-bootstrap-454 .pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.factory-bootstrap-454 .pagination>li:last-child>a,.factory-bootstrap-454 .pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.factory-bootstrap-454 .pagination>li>a:focus,.factory-bootstrap-454 .pagination>li>a:hover,.factory-bootstrap-454 .pagination>li>span:focus,.factory-bootstrap-454 .pagination>li>span:hover{background-color:#eee}.factory-bootstrap-454 .pagination>.active>a,.factory-bootstrap-454 .pagination>.active>a:focus,.factory-bootstrap-454 .pagination>.active>a:hover,.factory-bootstrap-454 .pagination>.active>span,.factory-bootstrap-454 .pagination>.active>span:focus,.factory-bootstrap-454 .pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#1e8cbe;border-color:#0074a2}.factory-bootstrap-454 .pagination>.disabled>a,.factory-bootstrap-454 .pagination>.disabled>a:focus,.factory-bootstrap-454 .pagination>.disabled>a:hover,.factory-bootstrap-454 .pagination>.disabled>span,.factory-bootstrap-454 .pagination>.disabled>span:focus,.factory-bootstrap-454 .pagination>.disabled>span:hover{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.factory-bootstrap-454 .pagination-lg>li>a,.factory-bootstrap-454 .pagination-lg>li>span{padding:10px 16px;font-size:18px}.factory-bootstrap-454 .pagination-lg>li:first-child>a,.factory-bootstrap-454 .pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.factory-bootstrap-454 .pagination-lg>li:last-child>a,.factory-bootstrap-454 .pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.factory-bootstrap-454 .pagination-sm>li>a,.factory-bootstrap-454 .pagination-sm>li>span{padding:5px 10px;font-size:12px}.factory-bootstrap-454 .pagination-sm>li:first-child>a,.factory-bootstrap-454 .pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.factory-bootstrap-454 .pagination-sm>li:last-child>a,.factory-bootstrap-454 .pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.factory-bootstrap-454 .pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.factory-bootstrap-454 .pager:after,.factory-bootstrap-454 .pager:before{display:table;content:" "}.factory-bootstrap-454 .pager:after{clear:both}.factory-bootstrap-454 .pager li{display:inline}.factory-bootstrap-454 .pager li>a,.factory-bootstrap-454 .pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.factory-bootstrap-454 .pager li>a:focus,.factory-bootstrap-454 .pager li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-454 .pager .next>a,.factory-bootstrap-454 .pager .next>span{float:right}.factory-bootstrap-454 .pager .previous>a,.factory-bootstrap-454 .pager .previous>span{float:left}.factory-bootstrap-454 .pager .disabled>a,.factory-bootstrap-454 .pager .disabled>a:focus,.factory-bootstrap-454 .pager .disabled>a:hover,.factory-bootstrap-454 .pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.factory-bootstrap-454 .label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.factory-bootstrap-454 .label[href]:focus,.factory-bootstrap-454 .label[href]:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-454 .label:empty{display:none}.factory-bootstrap-454 .btn .label{position:relative;top:-1px}.factory-bootstrap-454 .label-default{background-color:#999}.factory-bootstrap-454 .label-default[href]:focus,.factory-bootstrap-454 .label-default[href]:hover{background-color:gray}.factory-bootstrap-454 .label-primary{background-color:#428bca}.factory-bootstrap-454 .label-primary[href]:focus,.factory-bootstrap-454 .label-primary[href]:hover{background-color:#3071a9}.factory-bootstrap-454 .label-success{background-color:#5cb85c}.factory-bootstrap-454 .label-success[href]:focus,.factory-bootstrap-454 .label-success[href]:hover{background-color:#449d44}.factory-bootstrap-454 .label-info{background-color:#5bc0de}.factory-bootstrap-454 .label-info[href]:focus,.factory-bootstrap-454 .label-info[href]:hover{background-color:#31b0d5}.factory-bootstrap-454 .label-warning{background-color:#f0ad4e}.factory-bootstrap-454 .label-warning[href]:focus,.factory-bootstrap-454 .label-warning[href]:hover{background-color:#ec971f}.factory-bootstrap-454 .label-danger{background-color:#d9534f}.factory-bootstrap-454 .label-danger[href]:focus,.factory-bootstrap-454 .label-danger[href]:hover{background-color:#c9302c}.factory-bootstrap-454 .badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#999;border-radius:10px}.factory-bootstrap-454 .badge:empty{display:none}.factory-bootstrap-454 .btn .badge{position:relative;top:-1px}.factory-bootstrap-454 a.badge:focus,.factory-bootstrap-454 a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-454 .nav-pills>.active>a>.badge,.factory-bootstrap-454 a.list-group-item.active>.badge{color:#428bca;background-color:#fff}.factory-bootstrap-454 .nav-pills>li>a>.badge{margin-left:3px}.factory-bootstrap-454 .jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.factory-bootstrap-454 .jumbotron .h1,.factory-bootstrap-454 .jumbotron h1{line-height:1;color:inherit}.factory-bootstrap-454 .jumbotron p{line-height:1.4}.factory-bootstrap-454 .container .jumbotron{border-radius:6px}.factory-bootstrap-454 .jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.factory-bootstrap-454 .thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.factory-bootstrap-454 .thumbnail a>img,.factory-bootstrap-454 .thumbnail>img{display:block;height:auto;max-width:100%;margin-right:auto;margin-left:auto}.factory-bootstrap-454 a.thumbnail.active,.factory-bootstrap-454 a.thumbnail:focus,.factory-bootstrap-454 a.thumbnail:hover{border-color:#428bca}.factory-bootstrap-454 .thumbnail .caption{padding:9px;color:#333}.factory-bootstrap-454 .alert{border:1px solid transparent;border-radius:4px}.factory-bootstrap-454 .alert h4{margin-top:0;color:inherit}.factory-bootstrap-454 .alert .alert-link{font-weight:700}.factory-bootstrap-454 .alert>p,.factory-bootstrap-454 .alert>ul{margin-bottom:0}.factory-bootstrap-454 .alert>p+p{margin-top:5px}.factory-bootstrap-454 .alert-dismissable{padding-right:35px}.factory-bootstrap-454 .alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.factory-bootstrap-454 .alert-info{color:#31708f;background-color:#d9edf7}.factory-bootstrap-454 .alert-info hr{border-top-color:#a6e1ec}.factory-bootstrap-454 .alert-info .alert-link{color:#245269}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.factory-bootstrap-454 .progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.factory-bootstrap-454 .progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#2ea2cc;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.factory-bootstrap-454 .progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.factory-bootstrap-454 .progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.factory-bootstrap-454 .progress-bar-success{background-color:#5cb85c}.factory-bootstrap-454 .progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.factory-bootstrap-454 .progress-bar-info{background-color:#5bc0de}.factory-bootstrap-454 .progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.factory-bootstrap-454 .progress-bar-warning{background-color:#f0ad4e}.factory-bootstrap-454 .progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.factory-bootstrap-454 .progress-bar-danger{background-color:#d9534f}.factory-bootstrap-454 .progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.factory-bootstrap-454 .media,.factory-bootstrap-454 .media-body{overflow:hidden;zoom:1}.factory-bootstrap-454 .media,.factory-bootstrap-454 .media .media{margin-top:15px}.factory-bootstrap-454 .media:first-child{margin-top:0}.factory-bootstrap-454 .media-object{display:block}.factory-bootstrap-454 .media-heading{margin:0 0 5px}.factory-bootstrap-454 .media>.pull-left{margin-right:10px}.factory-bootstrap-454 .media>.pull-right{margin-left:10px}.factory-bootstrap-454 .media-list{padding-left:0;list-style:none}.factory-bootstrap-454 .list-group{padding-left:0;margin-bottom:20px}.factory-bootstrap-454 .list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.factory-bootstrap-454 .list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.factory-bootstrap-454 .list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.factory-bootstrap-454 .list-group-item>.badge{float:right}.factory-bootstrap-454 .list-group-item>.badge+.badge{margin-right:5px}.factory-bootstrap-454 a.list-group-item{color:#555}.factory-bootstrap-454 a.list-group-item .list-group-item-heading{color:#333}.factory-bootstrap-454 a.list-group-item:focus,.factory-bootstrap-454 a.list-group-item:hover{text-decoration:none;background-color:#f5f5f5}.factory-bootstrap-454 a.list-group-item.active,.factory-bootstrap-454 a.list-group-item.active:focus,.factory-bootstrap-454 a.list-group-item.active:hover{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-454 a.list-group-item.active .list-group-item-heading,.factory-bootstrap-454 a.list-group-item.active:focus .list-group-item-heading,.factory-bootstrap-454 a.list-group-item.active:hover .list-group-item-heading{color:inherit}.factory-bootstrap-454 a.list-group-item.active .list-group-item-text,.factory-bootstrap-454 a.list-group-item.active:focus .list-group-item-text,.factory-bootstrap-454 a.list-group-item.active:hover .list-group-item-text{color:#e1edf7}.factory-bootstrap-454 .list-group-item-heading{margin-top:0;margin-bottom:5px}.factory-bootstrap-454 .list-group-item-text{margin-bottom:0;line-height:1.3}.factory-bootstrap-454 .panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px}.factory-bootstrap-454 .panel-body{padding:15px}.factory-bootstrap-454 .panel-body:after,.factory-bootstrap-454 .panel-body:before{display:table;content:" "}.factory-bootstrap-454 .panel-body:after{clear:both}.factory-bootstrap-454 .panel>.list-group{margin-bottom:0}.factory-bootstrap-454 .panel>.list-group .list-group-item{border-width:1px 0}.factory-bootstrap-454 .panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-454 .panel>.list-group .list-group-item:last-child{border-bottom:0}.factory-bootstrap-454 .panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.factory-bootstrap-454 .panel>.table,.factory-bootstrap-454 .panel>.table-responsive>.table{margin-bottom:0}.factory-bootstrap-454 .panel>.panel-body+.table,.factory-bootstrap-454 .panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.factory-bootstrap-454 .panel>.table>tbody:first-child td,.factory-bootstrap-454 .panel>.table>tbody:first-child th{border-top:0}.factory-bootstrap-454 .panel>.table-bordered,.factory-bootstrap-454 .panel>.table-responsive>.table-bordered{border:0}.factory-bootstrap-454 .panel>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-454 .panel>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-454 .panel>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-454 .panel>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-454 .panel>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-454 .panel>.table-bordered>thead>tr>th:first-child,.factory-bootstrap-454 .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-454 .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-454 .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-454 .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-454 .panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-454 .panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.factory-bootstrap-454 .panel>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-454 .panel>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-454 .panel>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-454 .panel>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-454 .panel>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-454 .panel>.table-bordered>thead>tr>th:last-child,.factory-bootstrap-454 .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-454 .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-454 .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-454 .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-454 .panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-454 .panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.factory-bootstrap-454 .panel>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-454 .panel>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-454 .panel>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-454 .panel>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-454 .panel>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-454 .panel>.table-bordered>thead>tr:last-child>th,.factory-bootstrap-454 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-454 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-454 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-454 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-454 .panel>.table-responsive>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-454 .panel>.table-responsive>.table-bordered>thead>tr:last-child>th{border-bottom:0}.factory-bootstrap-454 .panel>.table-responsive{margin-bottom:0;border:0}.factory-bootstrap-454 .panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.factory-bootstrap-454 .panel-heading>.dropdown .dropdown-toggle{color:inherit}.factory-bootstrap-454 .panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.factory-bootstrap-454 .panel-title>a{color:inherit}.factory-bootstrap-454 .panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.factory-bootstrap-454 .panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.factory-bootstrap-454 .panel-group .panel+.panel{margin-top:5px}.factory-bootstrap-454 .panel-group .panel-heading{border-bottom:0}.factory-bootstrap-454 .panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.factory-bootstrap-454 .panel-group .panel-footer{border-top:0}.factory-bootstrap-454 .panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.factory-bootstrap-454 .panel-default{border-color:#ddd}.factory-bootstrap-454 .panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.factory-bootstrap-454 .panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.factory-bootstrap-454 .panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.factory-bootstrap-454 .panel-primary{border-color:#428bca}.factory-bootstrap-454 .panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-454 .panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.factory-bootstrap-454 .panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.factory-bootstrap-454 .panel-success{border-color:#d6e9c6}.factory-bootstrap-454 .panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.factory-bootstrap-454 .panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.factory-bootstrap-454 .panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.factory-bootstrap-454 .panel-warning{border-color:#faebcc}.factory-bootstrap-454 .panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.factory-bootstrap-454 .panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.factory-bootstrap-454 .panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.factory-bootstrap-454 .panel-danger{border-color:#ebccd1}.factory-bootstrap-454 .panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.factory-bootstrap-454 .panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.factory-bootstrap-454 .panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.factory-bootstrap-454 .panel-info{border-color:#bce8f1}.factory-bootstrap-454 .panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.factory-bootstrap-454 .panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.factory-bootstrap-454 .panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.factory-bootstrap-454 .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px}.factory-bootstrap-454 .well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.factory-bootstrap-454 .well-lg{padding:24px;border-radius:6px}.factory-bootstrap-454 .well-sm{padding:9px;border-radius:3px}.factory-bootstrap-454 .close{float:right;font-size:14px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.3;filter:alpha(opacity=30)}.factory-bootstrap-454 .alert .close{position:relative;top:-8px;right:-7px}.factory-bootstrap-454 .close:focus,.factory-bootstrap-454 .close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-454 button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.factory-bootstrap-454 .modal-open{overflow:hidden}.factory-bootstrap-454 .modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:auto;overflow-y:scroll;width:auto;margin-left:0;background-color:transparent;border:0}.factory-bootstrap-454 .modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.factory-bootstrap-454 .modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.factory-bootstrap-454 .modal-dialog{position:relative;z-index:1050;width:auto;margin:10px}.factory-bootstrap-454 .modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box}.factory-bootstrap-454 .modal-backdrop,.factory-bootstrap-454-modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.factory-bootstrap-454 .modal-backdrop.fade,.factory-bootstrap-454-modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.factory-bootstrap-454 .modal-backdrop.in,.factory-bootstrap-454-modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-454 .modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.factory-bootstrap-454 .modal-header .close{margin-top:-2px}.factory-bootstrap-454 .modal-title{margin:0;line-height:1.428571429}.factory-bootstrap-454 .modal-body{position:relative;padding:20px;max-height:none}.factory-bootstrap-454 .modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.factory-bootstrap-454 .modal-footer:after,.factory-bootstrap-454 .modal-footer:before{display:table;content:" "}.factory-bootstrap-454 .modal-footer:after{clear:both}.factory-bootstrap-454 .modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.factory-bootstrap-454 .modal-footer .btn-group .btn+.btn{margin-left:-1px}.factory-bootstrap-454 .modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.factory-bootstrap-454 .modal-dialog{width:600px;margin:30px auto}.factory-bootstrap-454 .modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}}.factory-bootstrap-454 .tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.factory-bootstrap-454 .tooltip.in{opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-454 .tooltip.top{padding:5px 0;margin-top:-3px}.factory-bootstrap-454 .tooltip.right{padding:0 5px;margin-left:3px}.factory-bootstrap-454 .tooltip.bottom{padding:5px 0;margin-top:3px}.factory-bootstrap-454 .tooltip.left{padding:0 5px;margin-left:-3px}.factory-bootstrap-454 .tooltip-inner{width:400px;padding:15px 20px;color:#fff;text-align:left;text-decoration:none;background-color:#673ab7;border-radius:3px}.factory-bootstrap-454 .tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-454 .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-454 .tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-454 .tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-454 .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#673ab7;border-width:5px 5px 5px 0}.factory-bootstrap-454 .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#673ab7;border-width:5px 0 5px 5px}.factory-bootstrap-454 .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-454 .tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-454 .tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-454 .popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);background-clip:padding-box}.factory-bootstrap-454 .popover.top{margin-top:-10px}.factory-bootstrap-454 .popover.right{margin-left:10px}.factory-bootstrap-454 .popover.bottom{margin-top:10px}.factory-bootstrap-454 .popover.left{margin-left:-10px}.factory-bootstrap-454 .popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.factory-bootstrap-454 .popover-content{padding:9px 14px}.factory-bootstrap-454 .popover .arrow,.factory-bootstrap-454 .popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-454 .popover .arrow{border-width:11px}.factory-bootstrap-454 .popover .arrow:after{border-width:10px;content:""}.factory-bootstrap-454 .popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.factory-bootstrap-454 .popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.factory-bootstrap-454 .popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.factory-bootstrap-454 .popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.factory-bootstrap-454 .popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);border-top-width:0}.factory-bootstrap-454 .popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.factory-bootstrap-454 .popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,.25);border-right-width:0}.factory-bootstrap-454 .popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.factory-bootstrap-454 .carousel{position:relative}.factory-bootstrap-454 .carousel-inner{position:relative;width:100%;overflow:hidden}.factory-bootstrap-454 .carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.factory-bootstrap-454 .carousel-inner>.item>a>img,.factory-bootstrap-454 .carousel-inner>.item>img{display:block;height:auto;max-width:100%;line-height:1}.factory-bootstrap-454 .carousel-inner>.active,.factory-bootstrap-454 .carousel-inner>.next,.factory-bootstrap-454 .carousel-inner>.prev{display:block}.factory-bootstrap-454 .carousel-inner>.active{left:0}.factory-bootstrap-454 .carousel-inner>.next,.factory-bootstrap-454 .carousel-inner>.prev{position:absolute;top:0;width:100%}.factory-bootstrap-454 .carousel-inner>.next{left:100%}.factory-bootstrap-454 .carousel-inner>.prev{left:-100%}.factory-bootstrap-454 .carousel-inner>.next.left,.factory-bootstrap-454 .carousel-inner>.prev.right{left:0}.factory-bootstrap-454 .carousel-inner>.active.left{left:-100%}.factory-bootstrap-454 .carousel-inner>.active.right{left:100%}.factory-bootstrap-454 .carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-454 .carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5) 0),color-stop(rgba(0,0,0,.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.factory-bootstrap-454 .carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001) 0),color-stop(rgba(0,0,0,.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.factory-bootstrap-454 .carousel-control:focus,.factory-bootstrap-454 .carousel-control:hover{color:#fff;text-decoration:none;outline:0;opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-454 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-454 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-454 .carousel-control .icon-next,.factory-bootstrap-454 .carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.factory-bootstrap-454 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-454 .carousel-control .icon-prev{left:50%}.factory-bootstrap-454 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-454 .carousel-control .icon-next{right:50%}.factory-bootstrap-454 .carousel-control .icon-next,.factory-bootstrap-454 .carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.factory-bootstrap-454 .carousel-control .icon-prev:before{content:'\2039'}.factory-bootstrap-454 .carousel-control .icon-next:before{content:'\203a'}.factory-bootstrap-454 .carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.factory-bootstrap-454 .carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.factory-bootstrap-454 .carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.factory-bootstrap-454 .carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.factory-bootstrap-454 .carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicons-chevron-left,.carousel-control .glyphicons-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.factory-bootstrap-454 .clearfix:after,.factory-bootstrap-454 .clearfix:before{display:table;content:" "}.factory-bootstrap-454 .clearfix:after{clear:both}.factory-bootstrap-454 .center-block{display:block;margin-right:auto;margin-left:auto}.factory-bootstrap-454 .pull-right{float:right!important}.factory-bootstrap-454 .pull-left{float:left!important}.factory-bootstrap-454 .hide{display:none!important}.factory-bootstrap-454 .show{display:block!important}.factory-bootstrap-454 .invisible{visibility:hidden}.factory-bootstrap-454 .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.factory-bootstrap-454 .hidden{display:none!important;visibility:hidden!important}.factory-bootstrap-454 .affix{position:fixed}@-ms-viewport{width:device-width}.factory-bootstrap-454 .visible-lg,.factory-bootstrap-454 .visible-md,.factory-bootstrap-454 .visible-sm,.factory-bootstrap-454 .visible-xs,.factory-bootstrap-454 td.visible-lg,.factory-bootstrap-454 td.visible-md,.factory-bootstrap-454 td.visible-sm,.factory-bootstrap-454 td.visible-xs,.factory-bootstrap-454 th.visible-lg,.factory-bootstrap-454 th.visible-md,.factory-bootstrap-454 th.visible-sm,.factory-bootstrap-454 th.visible-xs,.factory-bootstrap-454 tr.visible-lg,.factory-bootstrap-454 tr.visible-md,.factory-bootstrap-454 tr.visible-sm,.factory-bootstrap-454 tr.visible-xs{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}table.visible-xs.visible-sm{display:table}tr.visible-xs.visible-sm{display:table-row!important}td.visible-xs.visible-sm,th.visible-xs.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-xs.visible-md{display:block!important}table.visible-xs.visible-md{display:table}tr.visible-xs.visible-md{display:table-row!important}td.visible-xs.visible-md,th.visible-xs.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-xs.visible-lg{display:block!important}table.visible-xs.visible-lg{display:table}tr.visible-xs.visible-lg{display:table-row!important}td.visible-xs.visible-lg,th.visible-xs.visible-lg{display:table-cell!important}}@media (max-width:767px){.visible-sm.visible-xs{display:block!important}table.visible-sm.visible-xs{display:table}tr.visible-sm.visible-xs{display:table-row!important}td.visible-sm.visible-xs,th.visible-sm.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-sm.visible-md{display:block!important}table.visible-sm.visible-md{display:table}tr.visible-sm.visible-md{display:table-row!important}td.visible-sm.visible-md,th.visible-sm.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-sm.visible-lg{display:block!important}table.visible-sm.visible-lg{display:table}tr.visible-sm.visible-lg{display:table-row!important}td.visible-sm.visible-lg,th.visible-sm.visible-lg{display:table-cell!important}}@media (max-width:767px){.visible-md.visible-xs{display:block!important}table.visible-md.visible-xs{display:table}tr.visible-md.visible-xs{display:table-row!important}td.visible-md.visible-xs,th.visible-md.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}table.visible-md.visible-sm{display:table}tr.visible-md.visible-sm{display:table-row!important}td.visible-md.visible-sm,th.visible-md.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-md.visible-lg{display:block!important}table.visible-md.visible-lg{display:table}tr.visible-md.visible-lg{display:table-row!important}td.visible-md.visible-lg,th.visible-md.visible-lg{display:table-cell!important}}@media (max-width:767px){.visible-lg.visible-xs{display:block!important}table.visible-lg.visible-xs{display:table}tr.visible-lg.visible-xs{display:table-row!important}td.visible-lg.visible-xs,th.visible-lg.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}table.visible-lg.visible-sm{display:table}tr.visible-lg.visible-sm{display:table-row!important}td.visible-lg.visible-sm,th.visible-lg.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-lg.visible-md{display:block!important}table.visible-lg.visible-md{display:table}tr.visible-lg.visible-md{display:table-row!important}td.visible-lg.visible-md,th.visible-lg.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}.factory-bootstrap-454 .hidden-xs{display:block!important}.factory-bootstrap-454 table.hidden-xs{display:table}.factory-bootstrap-454 tr.hidden-xs{display:table-row!important}.factory-bootstrap-454 td.hidden-xs,.factory-bootstrap-454 th.hidden-xs{display:table-cell!important}@media (max-width:767px){.hidden-xs,td.hidden-xs,th.hidden-xs,tr.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm,th.hidden-xs.hidden-sm,tr.hidden-xs.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-xs.hidden-md,td.hidden-xs.hidden-md,th.hidden-xs.hidden-md,tr.hidden-xs.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg,th.hidden-xs.hidden-lg,tr.hidden-xs.hidden-lg{display:none!important}}.factory-bootstrap-454 .hidden-sm{display:block!important}.factory-bootstrap-454 table.hidden-sm{display:table}.factory-bootstrap-454 tr.hidden-sm{display:table-row!important}.factory-bootstrap-454 td.hidden-sm,.factory-bootstrap-454 th.hidden-sm{display:table-cell!important}@media (max-width:767px){.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs,th.hidden-sm.hidden-xs,tr.hidden-sm.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm,td.hidden-sm,th.hidden-sm,tr.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-sm.hidden-md,td.hidden-sm.hidden-md,th.hidden-sm.hidden-md,tr.hidden-sm.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg,th.hidden-sm.hidden-lg,tr.hidden-sm.hidden-lg{display:none!important}}.factory-bootstrap-454 .hidden-md{display:block!important}.factory-bootstrap-454 table.hidden-md{display:table}.factory-bootstrap-454 tr.hidden-md{display:table-row!important}.factory-bootstrap-454 td.hidden-md,.factory-bootstrap-454 th.hidden-md{display:table-cell!important}@media (max-width:767px){.hidden-md.hidden-xs,td.hidden-md.hidden-xs,th.hidden-md.hidden-xs,tr.hidden-md.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-md.hidden-sm,td.hidden-md.hidden-sm,th.hidden-md.hidden-sm,tr.hidden-md.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md,td.hidden-md,th.hidden-md,tr.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-md.hidden-lg,td.hidden-md.hidden-lg,th.hidden-md.hidden-lg,tr.hidden-md.hidden-lg{display:none!important}}.factory-bootstrap-454 .hidden-lg{display:block!important}.factory-bootstrap-454 table.hidden-lg{display:table}.factory-bootstrap-454 tr.hidden-lg{display:table-row!important}.factory-bootstrap-454 td.hidden-lg,.factory-bootstrap-454 th.hidden-lg{display:table-cell!important}@media (max-width:767px){.factory-bootstrap-454 .hidden-lg.hidden-xs,.factory-bootstrap-454 td.hidden-lg.hidden-xs,.factory-bootstrap-454 th.hidden-lg.hidden-xs,.factory-bootstrap-454 tr.hidden-lg.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.factory-bootstrap-454 .hidden-lg.hidden-sm,.factory-bootstrap-454 td.hidden-lg.hidden-sm,.factory-bootstrap-454 th.hidden-lg.hidden-sm,.factory-bootstrap-454 tr.hidden-lg.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.factory-bootstrap-454 .hidden-lg.hidden-md,.factory-bootstrap-454 td.hidden-lg.hidden-md,.factory-bootstrap-454 th.hidden-lg.hidden-md,.factory-bootstrap-454 tr.hidden-lg.hidden-md{display:none!important}}@media (min-width:1200px){.factory-bootstrap-454 .hidden-lg,.factory-bootstrap-454 td.hidden-lg,.factory-bootstrap-454 th.hidden-lg,.factory-bootstrap-454 tr.hidden-lg{display:none!important}}.factory-bootstrap-454 .visible-print,.factory-bootstrap-454 td.visible-print,.factory-bootstrap-454 th.visible-print,.factory-bootstrap-454 tr.visible-print{display:none!important}@media print{.factory-bootstrap-454 .visible-print{display:block!important}.factory-bootstrap-454 table.visible-print{display:table}.factory-bootstrap-454 tr.visible-print{display:table-row!important}.factory-bootstrap-454 td.visible-print,.factory-bootstrap-454 th.visible-print{display:table-cell!important}.factory-bootstrap-454 .hidden-print,.factory-bootstrap-454 td.hidden-print,.factory-bootstrap-454 th.hidden-print,.factory-bootstrap-454 tr.hidden-print{display:none!important}}.factory-bootstrap-454 .btn-danger,.factory-bootstrap-454 .btn-default,.factory-bootstrap-454 .btn-info,.factory-bootstrap-454 .btn-primary,.factory-bootstrap-454 .btn-success,.factory-bootstrap-454 .btn-warning{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-454 .btn-danger.active,.factory-bootstrap-454 .btn-danger:active,.factory-bootstrap-454 .btn-default.active,.factory-bootstrap-454 .btn-default:active,.factory-bootstrap-454 .btn-info.active,.factory-bootstrap-454 .btn-info:active,.factory-bootstrap-454 .btn-primary.active,.factory-bootstrap-454 .btn-primary:active,.factory-bootstrap-454 .btn-success.active,.factory-bootstrap-454 .btn-success:active,.factory-bootstrap-454 .btn-warning.active,.factory-bootstrap-454 .btn-warning:active{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.factory-bootstrap-454 .btn.active,.factory-bootstrap-454 .btn:active{background-image:none}.factory-bootstrap-454 .btn-default{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);vertical-align:top}.factory-bootstrap-454 .btn-default.active,.factory-bootstrap-454 .btn-default:active{background-color:#fff;border-color:#dbdbdb}.factory-bootstrap-454 .btn-gold{font-weight:700;padding:7px 12px;cursor:pointer;line-height:16px;display:inline-block;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;box-shadow:#e3e3e3 0 1px 1px;-moz-box-shadow:0 1px 1px rgba(000,000,000,.1),inset 0 1px 1px rgba(255,255,255,.7);-webkit-box-shadow:0 1px 1px rgba(000,000,000,.1),inset 0 1px 1px rgba(255,255,255,.7);text-shadow:1px 1px 0 #ffe8b2;color:#7c5d1b;border:1px solid #d6a437;background:#feeb80}.factory-bootstrap-454 .btn-gold:focus,.factory-bootstrap-454 .btn-gold:hover{background:#fef0a1}.factory-bootstrap-454 .btn-gold.active,.factory-bootstrap-454 .btn-gold:active{background:#fef0a1;-webkit-box-shadow:inset 0 3px 8px 0 #f8ba36;box-shadow:inset 0 3px 8px 0 #f8ba36}.factory-bootstrap-454 .btn-primary{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;text-decoration:none}.factory-bootstrap-454 .btn-primary:focus,.factory-bootstrap-454 .btn-primary:hover{background:#1e8cbe;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6);box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff}.factory-bootstrap-454 .btn-primary.active,.factory-bootstrap-454 .btn-primary:active{background-color:#2d6ca2;border-color:#2b669a}.factory-bootstrap-454 .btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);background-repeat:repeat-x;border-color:#3e8f3e;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-454 .btn-success:focus,.factory-bootstrap-454 .btn-success:hover{background-color:#419641;background-position:0 -15px}.factory-bootstrap-454 .btn-success.active,.factory-bootstrap-454 .btn-success:active{background-color:#419641;border-color:#3e8f3e}.factory-bootstrap-454 .btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);background-repeat:repeat-x;border-color:#e38d13;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-454 .btn-warning:focus,.factory-bootstrap-454 .btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.factory-bootstrap-454 .btn-warning.active,.factory-bootstrap-454 .btn-warning:active{background-color:#eb9316;border-color:#e38d13}.factory-bootstrap-454 .btn-danger{color:#fff;background:#d9534f;border-color:#d43f3a}.factory-bootstrap-454 .btn-danger.active,.factory-bootstrap-454 .btn-danger:active,.factory-bootstrap-454 .btn-danger:focus,.factory-bootstrap-454 .btn-danger:hover,.factory-bootstrap-454 .open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.factory-bootstrap-454 .btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);background-repeat:repeat-x;border-color:#28a4c9;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-454 .btn-info:focus,.factory-bootstrap-454 .btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.factory-bootstrap-454 .btn-info.active,.factory-bootstrap-454 .btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.factory-bootstrap-454 .img-thumbnail,.factory-bootstrap-454 .thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.factory-bootstrap-454 .dropdown-menu>li>a:focus,.factory-bootstrap-454 .dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.factory-bootstrap-454 .dropdown-menu>.active>a,.factory-bootstrap-454 .dropdown-menu>.active>a:focus,.factory-bootstrap-454 .dropdown-menu>.active>a:hover{background-color:#357ebd;background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0)}.factory-bootstrap-454 .navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.factory-bootstrap-454 .navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.factory-bootstrap-454 .navbar-brand,.factory-bootstrap-454 .navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.factory-bootstrap-454 .navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-454 .navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:linear-gradient(to bottom,#222 0,#282828 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.factory-bootstrap-454 .navbar-inverse .navbar-brand,.factory-bootstrap-454 .navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.factory-bootstrap-454 .navbar-fixed-bottom,.factory-bootstrap-454 .navbar-fixed-top,.factory-bootstrap-454 .navbar-static-top{border-radius:0}.factory-bootstrap-454 .alert{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-454 .alert .actions{padding-top:10px}.factory-bootstrap-454 .alert-success{color:#3c763d;background-color:#dff0d8;border-bottom:2px solid #c8e5bc}.factory-bootstrap-454 .alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;border-color:#9acfea;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0)}.factory-bootstrap-454 .alert{text-shadow:none;box-shadow:none;margin:0;margin-top:10px;margin-bottom:10px;padding:10px}.factory-bootstrap-454 .alert-normal,.factory-bootstrap-454 .alert-warning{background:#fcf8e3;color:#8a6d3b;border:1px solid #b8823b}.factory-bootstrap-454 .alert-danger{background:#cf4944;color:#fff;border-bottom:2px solid #b23e3a}.factory-bootstrap-454 .alert-danger a:not(.btn),.factory-bootstrap-454 .alert-error a:not(.btn){color:#fff}.factory-bootstrap-454 .progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)}.factory-bootstrap-454 .progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0)}.factory-bootstrap-454 .progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)}.factory-bootstrap-454 .progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)}.factory-bootstrap-454 .progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)}.factory-bootstrap-454 .progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)}.factory-bootstrap-454 .list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.factory-bootstrap-454 .list-group-item.active,.factory-bootstrap-454 .list-group-item.active:focus,.factory-bootstrap-454 .list-group-item.active:hover{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;border-color:#3278b3;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0)}.factory-bootstrap-454 .panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-454 .panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.factory-bootstrap-454 .panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0)}.factory-bootstrap-454 .panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)}.factory-bootstrap-454 .panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)}.factory-bootstrap-454 .panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)}.factory-bootstrap-454 .panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)}.factory-bootstrap-454 .well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;border-color:#dcdcdc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}.factory-bootstrap-454 .factory-after{margin-left:7px;display:inline-block}.factory-bootstrap-454 .factory-hidden{display:none}.factory-bootstrap-454 .factory-ajax-loader{width:25px;height:25px;background:url(../assets/images/loader-sm-tr.gif)}.factory-control-error{background-color:rgba(0,0,0,.8);white-space:normal;z-index:10;font-weight:400;line-height:150%;border-radius:4px;color:#fff;font-size:13px;margin-top:5px;padding:4px 10px 3px;max-width:500px;display:inline-block}.factory-control-error i{margin:0 7px 0 1px}
libs/factory/bootstrap/assets/css-min/bootstrap.datetimepicker.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .bootstrap-datetimepicker-widget{list-style:none}.factory-bootstrap-453 .bootstrap-datetimepicker-widget.dropdown-menu{display:block;margin:2px 0;padding:4px;width:19em}@media (min-width:768px){.factory-bootstrap-453 .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:992px){.factory-bootstrap-453 .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:1200px){.factory-bootstrap-453 .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}.factory-bootstrap-453 .bootstrap-datetimepicker-widget.dropdown-menu:after,.factory-bootstrap-453 .bootstrap-datetimepicker-widget.dropdown-menu:before{content:'';display:inline-block;position:absolute}.factory-bootstrap-453 .bootstrap-datetimepicker-widget.dropdown-menu.bottom:before{border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);top:-7px;left:7px}.factory-bootstrap-453 .bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;top:-6px;left:8px}.factory-bootstrap-453 .bootstrap-datetimepicker-widget.dropdown-menu.top:before{border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,.2);bottom:-7px;left:6px}.factory-bootstrap-453 .bootstrap-datetimepicker-widget.dropdown-menu.top:after{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;bottom:-6px;left:7px}.factory-bootstrap-453 .bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before{left:auto;right:6px}.factory-bootstrap-453 .bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after{left:auto;right:7px}.factory-bootstrap-453 .bootstrap-datetimepicker-widget .list-unstyled{margin:0}.factory-bootstrap-453 .bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.factory-bootstrap-453 .bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.factory-bootstrap-453 .bootstrap-datetimepicker-widget .timepicker-hour,.factory-bootstrap-453 .bootstrap-datetimepicker-widget .timepicker-minute,.factory-bootstrap-453 .bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:700;font-size:1.2em;margin:0}.factory-bootstrap-453 .bootstrap-datetimepicker-widget button[data-action]{padding:6px}.factory-bootstrap-453 .bootstrap-datetimepicker-widget .btn[data-action=incrementHours]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Increment Hours"}.factory-bootstrap-453 .bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Increment Minutes"}.factory-bootstrap-453 .bootstrap-datetimepicker-widget .btn[data-action=decrementHours]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Decrement Hours"}.factory-bootstrap-453 .bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Decrement Minutes"}.factory-bootstrap-453 .bootstrap-datetimepicker-widget .btn[data-action=showHours]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Show Hours"}.factory-bootstrap-453 .bootstrap-datetimepicker-widget .btn[data-action=showMinutes]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Show Minutes"}.factory-bootstrap-453 .bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Toggle AM/PM"}.factory-bootstrap-453 .bootstrap-datetimepicker-widget .btn[data-action=clear]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Clear the picker"}.factory-bootstrap-453 .bootstrap-datetimepicker-widget .btn[data-action=today]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Set the date to today"}.factory-bootstrap-453 .bootstrap-datetimepicker-widget .picker-switch{text-align:center}.factory-bootstrap-453 .bootstrap-datetimepicker-widget .picker-switch::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Toggle Date and Time Screens"}.factory-bootstrap-453 .bootstrap-datetimepicker-widget .picker-switch td{padding:0;margin:0;height:auto;width:auto;line-height:inherit}.factory-bootstrap-453 .bootstrap-datetimepicker-widget .picker-switch td span{line-height:2.5;height:2.5em;width:100%}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table{width:100%;margin:0}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td,.factory-bootstrap-453 .bootstrap-datetimepicker-widget table th{text-align:center;border-radius:4px}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table th{height:20px;line-height:20px;width:20px}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table th.picker-switch{width:145px}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table th.disabled,.factory-bootstrap-453 .bootstrap-datetimepicker-widget table th.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table th.prev::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Previous Month"}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table th.next::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Next Month"}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table thead tr:first-child th{cursor:pointer}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#eee}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td{height:54px;line-height:54px;width:54px}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td.cw{font-size:.8em;height:20px;line-height:20px;color:#777}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td.day{height:20px;line-height:20px;width:20px}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td.day:hover,.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td.hour:hover,.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td.minute:hover,.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td.second:hover{background:#eee;cursor:pointer}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td.new,.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td.old{color:#777}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td.today{position:relative}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td.today:before{content:'';display:inline-block;border:solid transparent;border-width:0 0 7px 7px;border-bottom-color:#337ab7;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:4px;right:4px}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td.active,.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td.active:hover{background-color:#337ab7;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td.active.today:before{border-bottom-color:#fff}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td.disabled,.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td span{display:inline-block;width:54px;height:54px;line-height:54px;margin:2px 1.5px;cursor:pointer;border-radius:4px}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td span:hover{background:#eee}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td span.active{background-color:#337ab7;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td span.old{color:#777}.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td span.disabled,.factory-bootstrap-453 .bootstrap-datetimepicker-widget table td span.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.factory-bootstrap-453 .bootstrap-datetimepicker-widget.usetwentyfour td.hour{height:27px;line-height:27px}.factory-bootstrap-453 .bootstrap-datetimepicker-widget.wider{width:21em}.factory-bootstrap-453 .bootstrap-datetimepicker-widget .datepicker-decades .decade{line-height:1.8em!important}.factory-bootstrap-453 .input-group.date .input-group-addon{cursor:pointer}.factory-bootstrap-453 .sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .bootstrap-datetimepicker-widget{list-style:none}.factory-bootstrap-454 .bootstrap-datetimepicker-widget.dropdown-menu{display:block;margin:2px 0;padding:4px;width:19em}@media (min-width:768px){.factory-bootstrap-454 .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:992px){.factory-bootstrap-454 .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:1200px){.factory-bootstrap-454 .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}.factory-bootstrap-454 .bootstrap-datetimepicker-widget.dropdown-menu:after,.factory-bootstrap-454 .bootstrap-datetimepicker-widget.dropdown-menu:before{content:'';display:inline-block;position:absolute}.factory-bootstrap-454 .bootstrap-datetimepicker-widget.dropdown-menu.bottom:before{border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);top:-7px;left:7px}.factory-bootstrap-454 .bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;top:-6px;left:8px}.factory-bootstrap-454 .bootstrap-datetimepicker-widget.dropdown-menu.top:before{border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,.2);bottom:-7px;left:6px}.factory-bootstrap-454 .bootstrap-datetimepicker-widget.dropdown-menu.top:after{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;bottom:-6px;left:7px}.factory-bootstrap-454 .bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before{left:auto;right:6px}.factory-bootstrap-454 .bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after{left:auto;right:7px}.factory-bootstrap-454 .bootstrap-datetimepicker-widget .list-unstyled{margin:0}.factory-bootstrap-454 .bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.factory-bootstrap-454 .bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.factory-bootstrap-454 .bootstrap-datetimepicker-widget .timepicker-hour,.factory-bootstrap-454 .bootstrap-datetimepicker-widget .timepicker-minute,.factory-bootstrap-454 .bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:700;font-size:1.2em;margin:0}.factory-bootstrap-454 .bootstrap-datetimepicker-widget button[data-action]{padding:6px}.factory-bootstrap-454 .bootstrap-datetimepicker-widget .btn[data-action=incrementHours]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Increment Hours"}.factory-bootstrap-454 .bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Increment Minutes"}.factory-bootstrap-454 .bootstrap-datetimepicker-widget .btn[data-action=decrementHours]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Decrement Hours"}.factory-bootstrap-454 .bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Decrement Minutes"}.factory-bootstrap-454 .bootstrap-datetimepicker-widget .btn[data-action=showHours]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Show Hours"}.factory-bootstrap-454 .bootstrap-datetimepicker-widget .btn[data-action=showMinutes]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Show Minutes"}.factory-bootstrap-454 .bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Toggle AM/PM"}.factory-bootstrap-454 .bootstrap-datetimepicker-widget .btn[data-action=clear]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Clear the picker"}.factory-bootstrap-454 .bootstrap-datetimepicker-widget .btn[data-action=today]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Set the date to today"}.factory-bootstrap-454 .bootstrap-datetimepicker-widget .picker-switch{text-align:center}.factory-bootstrap-454 .bootstrap-datetimepicker-widget .picker-switch::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Toggle Date and Time Screens"}.factory-bootstrap-454 .bootstrap-datetimepicker-widget .picker-switch td{padding:0;margin:0;height:auto;width:auto;line-height:inherit}.factory-bootstrap-454 .bootstrap-datetimepicker-widget .picker-switch td span{line-height:2.5;height:2.5em;width:100%}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table{width:100%;margin:0}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td,.factory-bootstrap-454 .bootstrap-datetimepicker-widget table th{text-align:center;border-radius:4px}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table th{height:20px;line-height:20px;width:20px}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table th.picker-switch{width:145px}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table th.disabled,.factory-bootstrap-454 .bootstrap-datetimepicker-widget table th.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table th.prev::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Previous Month"}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table th.next::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Next Month"}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table thead tr:first-child th{cursor:pointer}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#eee}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td{height:54px;line-height:54px;width:54px}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td.cw{font-size:.8em;height:20px;line-height:20px;color:#777}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td.day{height:20px;line-height:20px;width:20px}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td.day:hover,.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td.hour:hover,.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td.minute:hover,.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td.second:hover{background:#eee;cursor:pointer}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td.new,.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td.old{color:#777}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td.today{position:relative}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td.today:before{content:'';display:inline-block;border:solid transparent;border-width:0 0 7px 7px;border-bottom-color:#337ab7;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:4px;right:4px}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td.active,.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td.active:hover{background-color:#337ab7;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td.active.today:before{border-bottom-color:#fff}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td.disabled,.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td span{display:inline-block;width:54px;height:54px;line-height:54px;margin:2px 1.5px;cursor:pointer;border-radius:4px}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td span:hover{background:#eee}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td span.active{background-color:#337ab7;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td span.old{color:#777}.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td span.disabled,.factory-bootstrap-454 .bootstrap-datetimepicker-widget table td span.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.factory-bootstrap-454 .bootstrap-datetimepicker-widget.usetwentyfour td.hour{height:27px;line-height:27px}.factory-bootstrap-454 .bootstrap-datetimepicker-widget.wider{width:21em}.factory-bootstrap-454 .bootstrap-datetimepicker-widget .datepicker-decades .decade{line-height:1.8em!important}.factory-bootstrap-454 .input-group.date .input-group-addon{cursor:pointer}.factory-bootstrap-454 .sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}
libs/factory/bootstrap/assets/css-min/bootstrap.ectoplasm.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .btn-primary{background:#a3b745;border-color:#839237;color:#fff;-webkit-box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-453 .btn-primary:focus,.factory-bootstrap-453 .btn-primary:hover{background:#89993a;border-color:#727f30;color:#fff;-webkit-box-shadow:inset 0 1px 0 #b7c669,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #b7c669,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-453 .btn-primary:active{background:#89993a;border-color:#727f30;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-453 .btn-primary:disabled,.factory-bootstrap-453 .btn-primary[disabled]{color:#cfd1c7!important;background:#89993a!important;border-color:#727f30!important;text-shadow:none!important}.factory-bootstrap-453 .btn-group .btn.active.value{background-color:#a3b745;-webkit-box-shadow:inset 0 1px 2px #839237;box-shadow:inset 0 1px 2px #839237;border-top:1px solid #839237;border-bottom:1px solid #839237;border-left:1px solid #839237}.factory-bootstrap-453 .pagination>.active>a,.factory-bootstrap-453 .pagination>.active>a:focus,.factory-bootstrap-453 .pagination>.active>a:hover,.factory-bootstrap-453 .pagination>.active>span,.factory-bootstrap-453 .pagination>.active>span:focus,.factory-bootstrap-453 .pagination>.active>span:hover{background-color:#a3b745;border-color:#839237}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .btn-primary{background:#a3b745;border-color:#839237;color:#fff;-webkit-box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-454 .btn-primary:focus,.factory-bootstrap-454 .btn-primary:hover{background:#89993a;border-color:#727f30;color:#fff;-webkit-box-shadow:inset 0 1px 0 #b7c669,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #b7c669,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-454 .btn-primary:active{background:#89993a;border-color:#727f30;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-454 .btn-primary:disabled,.factory-bootstrap-454 .btn-primary[disabled]{color:#cfd1c7!important;background:#89993a!important;border-color:#727f30!important;text-shadow:none!important}.factory-bootstrap-454 .btn-group .btn.active.value{background-color:#a3b745;-webkit-box-shadow:inset 0 1px 2px #839237;box-shadow:inset 0 1px 2px #839237;border-top:1px solid #839237;border-bottom:1px solid #839237;border-left:1px solid #839237}.factory-bootstrap-454 .pagination>.active>a,.factory-bootstrap-454 .pagination>.active>a:focus,.factory-bootstrap-454 .pagination>.active>a:hover,.factory-bootstrap-454 .pagination>.active>span,.factory-bootstrap-454 .pagination>.active>span:focus,.factory-bootstrap-454 .pagination>.active>span:hover{background-color:#a3b745;border-color:#839237}
libs/factory/bootstrap/assets/css-min/bootstrap.form-group.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .factory-form-group .factory-legend{padding:9px 12px;background-color:#f9f9f9}.factory-bootstrap-453 .factory-form-group .factory-title{font-weight:700;font-size:14px;line-height:14px;color:#555;margin:0}.factory-bootstrap-453 .factory-form-group .factory-hint-icon{display:block;width:16px;height:16px;line-height:13px;padding:0;font-size:11px;text-align:center;position:absolute;top:-5px;right:-3px;color:#fff;background:#E91E63;border-radius:3px}.factory-bootstrap-453 .factory-form-group .factory-hint-icon.factory-hint-icon-green{background:#8bc34a}.factory-bootstrap-453 .factory-form-group .factory-hint-icon.factory-hint-icon-grey{background:#9e9e9e}.factory-bootstrap-453 .factory-form-group .factory-hint-icon.factory-hint-icon-red{background:#E91E63}.factory-bootstrap-453 .factory-form-group .factory-hint{margin:0;font-size:12px;line-height:16px;margin-top:6px}.factory-bootstrap-453 .factory-form-group+.factory-form-group{margin-top:30px}.factory-bootstrap-453 .factory-form-group legend+.control-group{margin-top:0}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .factory-form-group .factory-legend{padding:9px 12px;background-color:#f9f9f9}.factory-bootstrap-454 .factory-form-group .factory-title{font-weight:700;font-size:14px;line-height:14px;color:#555;margin:0}.factory-bootstrap-454 .factory-form-group .factory-hint-icon{display:block;width:16px;height:16px;line-height:13px;padding:0;font-size:11px;text-align:center;position:absolute;top:-5px;right:-3px;color:#fff;background:#E91E63;border-radius:3px}.factory-bootstrap-454 .factory-form-group .factory-hint-icon.factory-hint-icon-green{background:#8bc34a}.factory-bootstrap-454 .factory-form-group .factory-hint-icon.factory-hint-icon-grey{background:#9e9e9e}.factory-bootstrap-454 .factory-form-group .factory-hint-icon.factory-hint-icon-red{background:#E91E63}.factory-bootstrap-454 .factory-form-group .factory-hint{margin:0;font-size:12px;line-height:16px;margin-top:6px}.factory-bootstrap-454 .factory-form-group+.factory-form-group{margin-top:30px}.factory-bootstrap-454 .factory-form-group legend+.control-group{margin-top:0}
libs/factory/bootstrap/assets/css-min/bootstrap.form-metabox.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-form-metabox{padding:15px 10px 10px}.factory-form-metabox .control-group:last-child{margin-bottom:0}#side-sortables .factory-bootstrap-453 .control-label{float:left;width:100%;text-align:left;position:relative;top:1px}#side-sortables .factory-bootstrap-453 .control-icon{float:left;margin:0 6px 0 0}#side-sortables .factory-bootstrap-453 input{float:right;position:relative;top:-25px}#side-sortables .factory-bootstrap-453 .col-sm-10{margin:0;width:100%}#side-sortables .factory-bootstrap-453 .form-group{float:none;width:auto;overflow:auto;margin-bottom:0;border-top:1px solid #f7f7f7;padding-top:15px;margin-top:15px}#side-sortables .factory-bootstrap-453 .form-group:first-child{border-top:0;padding-top:0;margin-top:0}
8
  */
9
 
10
 
11
+ .factory-form-metabox{padding:15px 10px 10px}.factory-form-metabox .control-group:last-child{margin-bottom:0}#side-sortables .factory-bootstrap-454 .control-label{float:left;width:100%;text-align:left;position:relative;top:1px}#side-sortables .factory-bootstrap-454 .control-icon{float:left;margin:0 6px 0 0}#side-sortables .factory-bootstrap-454 input{float:right;position:relative;top:-25px}#side-sortables .factory-bootstrap-454 .col-sm-10{margin:0;width:100%}#side-sortables .factory-bootstrap-454 .form-group{float:none;width:auto;overflow:auto;margin-bottom:0;border-top:1px solid #f7f7f7;padding-top:15px;margin-top:15px}#side-sortables .factory-bootstrap-454 .form-group:first-child{border-top:0;padding-top:0;margin-top:0}
libs/factory/bootstrap/assets/css-min/bootstrap.light.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .btn-primary{background:#04a4cc;border-color:#037c9a;color:#fff;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-453 .btn-primary:focus,.factory-bootstrap-453 .btn-primary:hover{background:#0384a4;border-color:#036881;color:#fff;-webkit-box-shadow:inset 0 1px 0 #09cafa,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #09cafa,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-453 .btn-primary:active{background:#0384a4;border-color:#036881;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-453 .btn-primary:disabled,.factory-bootstrap-453 .btn-primary[disabled]{color:#c7cfd1!important;background:#0384a4!important;border-color:#036881!important;text-shadow:none!important}.factory-bootstrap-453 .btn-group .btn.active.value{background-color:#04a4cc;-webkit-box-shadow:inset 0 1px 2px #037c9a;box-shadow:inset 0 1px 2px #037c9a;border-top:1px solid #037c9a;border-bottom:1px solid #037c9a;border-left:1px solid #037c9a}.factory-bootstrap-453 .pagination>.active>a,.factory-bootstrap-453 .pagination>.active>a:focus,.factory-bootstrap-453 .pagination>.active>a:hover,.factory-bootstrap-453 .pagination>.active>span,.factory-bootstrap-453 .pagination>.active>span:focus,.factory-bootstrap-453 .pagination>.active>span:hover{background-color:#04a4cc;border-color:#037c9a}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .btn-primary{background:#04a4cc;border-color:#037c9a;color:#fff;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-454 .btn-primary:focus,.factory-bootstrap-454 .btn-primary:hover{background:#0384a4;border-color:#036881;color:#fff;-webkit-box-shadow:inset 0 1px 0 #09cafa,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #09cafa,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-454 .btn-primary:active{background:#0384a4;border-color:#036881;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-454 .btn-primary:disabled,.factory-bootstrap-454 .btn-primary[disabled]{color:#c7cfd1!important;background:#0384a4!important;border-color:#036881!important;text-shadow:none!important}.factory-bootstrap-454 .btn-group .btn.active.value{background-color:#04a4cc;-webkit-box-shadow:inset 0 1px 2px #037c9a;box-shadow:inset 0 1px 2px #037c9a;border-top:1px solid #037c9a;border-bottom:1px solid #037c9a;border-left:1px solid #037c9a}.factory-bootstrap-454 .pagination>.active>a,.factory-bootstrap-454 .pagination>.active>a:focus,.factory-bootstrap-454 .pagination>.active>a:hover,.factory-bootstrap-454 .pagination>.active>span,.factory-bootstrap-454 .pagination>.active>span:focus,.factory-bootstrap-454 .pagination>.active>span:hover{background-color:#04a4cc;border-color:#037c9a}
libs/factory/bootstrap/assets/css-min/bootstrap.midnight.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .btn-primary{background:#e14d43;border-color:#d02a21;color:#fff;-webkit-box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-453 .btn-primary:focus,.factory-bootstrap-453 .btn-primary:hover{background:#d92c23;border-color:#ba251e;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8756f,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8756f,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-453 .btn-primary:active{background:#d92c23;border-color:#ba251e;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-453 .btn-primary:disabled,.factory-bootstrap-453 .btn-primary[disabled]{color:#d1c7c7!important;background:#d92c23!important;border-color:#ba251e!important;text-shadow:none!important}.factory-bootstrap-453 .btn-group .btn.active.value{background-color:#e14d43;-webkit-box-shadow:inset 0 1px 2px #d02a21;box-shadow:inset 0 1px 2px #d02a21;border-top:1px solid #d02a21;border-bottom:1px solid #d02a21;border-left:1px solid #d02a21}.factory-bootstrap-453 .pagination>.active>a,.factory-bootstrap-453 .pagination>.active>a:focus,.factory-bootstrap-453 .pagination>.active>a:hover,.factory-bootstrap-453 .pagination>.active>span,.factory-bootstrap-453 .pagination>.active>span:focus,.factory-bootstrap-453 .pagination>.active>span:hover{background-color:#e14d43;border-color:#d02a21}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .btn-primary{background:#e14d43;border-color:#d02a21;color:#fff;-webkit-box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-454 .btn-primary:focus,.factory-bootstrap-454 .btn-primary:hover{background:#d92c23;border-color:#ba251e;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8756f,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8756f,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-454 .btn-primary:active{background:#d92c23;border-color:#ba251e;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-454 .btn-primary:disabled,.factory-bootstrap-454 .btn-primary[disabled]{color:#d1c7c7!important;background:#d92c23!important;border-color:#ba251e!important;text-shadow:none!important}.factory-bootstrap-454 .btn-group .btn.active.value{background-color:#e14d43;-webkit-box-shadow:inset 0 1px 2px #d02a21;box-shadow:inset 0 1px 2px #d02a21;border-top:1px solid #d02a21;border-bottom:1px solid #d02a21;border-left:1px solid #d02a21}.factory-bootstrap-454 .pagination>.active>a,.factory-bootstrap-454 .pagination>.active>a:focus,.factory-bootstrap-454 .pagination>.active>a:hover,.factory-bootstrap-454 .pagination>.active>span,.factory-bootstrap-454 .pagination>.active>span:focus,.factory-bootstrap-454 .pagination>.active>span:hover{background-color:#e14d43;border-color:#d02a21}
libs/factory/bootstrap/assets/css-min/bootstrap.ocean.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .btn-primary{background:#9ebaa0;border-color:#80a583;color:#fff;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-453 .btn-primary:focus,.factory-bootstrap-453 .btn-primary:hover{background:#86a988;border-color:#719a74;color:#fff;-webkit-box-shadow:inset 0 1px 0 #bccfbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #bccfbd,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-453 .btn-primary:active{background:#86a988;border-color:#719a74;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-453 .btn-primary:disabled,.factory-bootstrap-453 .btn-primary[disabled]{color:#c7d1c8!important;background:#86a988!important;border-color:#719a74!important;text-shadow:none!important}.factory-bootstrap-453 .btn-group .btn.active.value{background-color:#9ebaa0;-webkit-box-shadow:inset 0 1px 2px #80a583;box-shadow:inset 0 1px 2px #80a583;border-top:1px solid #80a583;border-bottom:1px solid #80a583;border-left:1px solid #80a583}.factory-bootstrap-453 .pagination>.active>a,.factory-bootstrap-453 .pagination>.active>a:focus,.factory-bootstrap-453 .pagination>.active>a:hover,.factory-bootstrap-453 .pagination>.active>span,.factory-bootstrap-453 .pagination>.active>span:focus,.factory-bootstrap-453 .pagination>.active>span:hover{background-color:#9ebaa0;border-color:#80a583}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .btn-primary{background:#9ebaa0;border-color:#80a583;color:#fff;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-454 .btn-primary:focus,.factory-bootstrap-454 .btn-primary:hover{background:#86a988;border-color:#719a74;color:#fff;-webkit-box-shadow:inset 0 1px 0 #bccfbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #bccfbd,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-454 .btn-primary:active{background:#86a988;border-color:#719a74;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-454 .btn-primary:disabled,.factory-bootstrap-454 .btn-primary[disabled]{color:#c7d1c8!important;background:#86a988!important;border-color:#719a74!important;text-shadow:none!important}.factory-bootstrap-454 .btn-group .btn.active.value{background-color:#9ebaa0;-webkit-box-shadow:inset 0 1px 2px #80a583;box-shadow:inset 0 1px 2px #80a583;border-top:1px solid #80a583;border-bottom:1px solid #80a583;border-left:1px solid #80a583}.factory-bootstrap-454 .pagination>.active>a,.factory-bootstrap-454 .pagination>.active>a:focus,.factory-bootstrap-454 .pagination>.active>a:hover,.factory-bootstrap-454 .pagination>.active>span,.factory-bootstrap-454 .pagination>.active>span:focus,.factory-bootstrap-454 .pagination>.active>span:hover{background-color:#9ebaa0;border-color:#80a583}
libs/factory/bootstrap/assets/css-min/bootstrap.separator.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .factory-separator{border-bottom:1px solid #f9f9f9;border-top:1px solid #d1d1d1;margin-bottom:25px}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .factory-separator{border-bottom:1px solid #f9f9f9;border-top:1px solid #d1d1d1;margin-bottom:25px}
libs/factory/bootstrap/assets/css-min/bootstrap.sunrise.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .btn-primary{background:#dd823b;border-color:#c36822;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-453 .btn-primary:focus,.factory-bootstrap-453 .btn-primary:hover{background:#cc6c23;border-color:#ad5c1e;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e59d66,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e59d66,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-453 .btn-primary:active{background:#cc6c23;border-color:#ad5c1e;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-453 .btn-primary:disabled,.factory-bootstrap-453 .btn-primary[disabled]{color:#d1cbc7!important;background:#cc6c23!important;border-color:#ad5c1e!important;text-shadow:none!important}.factory-bootstrap-453 .btn-group .btn.active.value{background-color:#dd823b;-webkit-box-shadow:inset 0 1px 2px #c36822;box-shadow:inset 0 1px 2px #c36822;border-top:1px solid #c36822;border-bottom:1px solid #c36822;border-left:1px solid #c36822}.factory-bootstrap-453 .pagination>.active>a,.factory-bootstrap-453 .pagination>.active>a:focus,.factory-bootstrap-453 .pagination>.active>a:hover,.factory-bootstrap-453 .pagination>.active>span,.factory-bootstrap-453 .pagination>.active>span:focus,.factory-bootstrap-453 .pagination>.active>span:hover{background-color:#dd823b;border-color:#c36822}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .btn-primary{background:#dd823b;border-color:#c36822;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-454 .btn-primary:focus,.factory-bootstrap-454 .btn-primary:hover{background:#cc6c23;border-color:#ad5c1e;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e59d66,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e59d66,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-454 .btn-primary:active{background:#cc6c23;border-color:#ad5c1e;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-454 .btn-primary:disabled,.factory-bootstrap-454 .btn-primary[disabled]{color:#d1cbc7!important;background:#cc6c23!important;border-color:#ad5c1e!important;text-shadow:none!important}.factory-bootstrap-454 .btn-group .btn.active.value{background-color:#dd823b;-webkit-box-shadow:inset 0 1px 2px #c36822;box-shadow:inset 0 1px 2px #c36822;border-top:1px solid #c36822;border-bottom:1px solid #c36822;border-left:1px solid #c36822}.factory-bootstrap-454 .pagination>.active>a,.factory-bootstrap-454 .pagination>.active>a:focus,.factory-bootstrap-454 .pagination>.active>a:hover,.factory-bootstrap-454 .pagination>.active>span,.factory-bootstrap-454 .pagination>.active>span:focus,.factory-bootstrap-454 .pagination>.active>span:hover{background-color:#dd823b;border-color:#c36822}
libs/factory/bootstrap/assets/css-min/bootstrap.tab.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .factory-tab{overflow:hidden;margin-bottom:25px}.factory-bootstrap-453 .factory-tab .form-group{overflow:hidden}.factory-bootstrap-453 .factory-tab+.form-group{margin-top:30px}.factory-bootstrap-453 .nav-tabs a{text-decoration:none}.factory-bootstrap-453 .factory-align-horizontal .nav-tabs{border-bottom:0}.factory-bootstrap-453 .factory-align-vertical .factory-headers{float:left;width:150px}.factory-bootstrap-453 .factory-align-vertical .factory-headers .nav-tabs{border-bottom:0;display:block;margin:0;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.factory-bootstrap-453 .factory-tab .factory-bodies{background-color:#fff;-webkit-border-radius:0 3px 3px;-moz-border-radius:0 3px 3px;border-radius:0 3px 3px;border:1px solid #DDD;padding:30px 15px 25px 10px}.factory-bootstrap-453 .factory-align-vertical .factory-bodies{min-height:250px;margin-left:150px}.factory-bootstrap-453 .factory-align-vertical .factory-bodies .actory-tab-item{clear:both}.factory-bootstrap-453 .form-horizontal .factory-align-vertical .form-group{margin-left:-5px}.factory-bootstrap-453 .factory-align-vertical .nav-tabs li{float:none}.factory-bootstrap-453 .factory-align-vertical .nav-tabs li a{margin-right:-1px;margin-bottom:0;position:relative;z-index:10;padding:10px 0 9px 15px;-webkit-border-radius:3px;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0;-moz-border-radius:3px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;border-radius:3px;border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-453 .factory-align-vertical .nav-tabs>.active>a{border:1px solid #DDD!important;border-right:1px solid #fff!important}.factory-bootstrap-453 .factory-align-vertical .nav-tabs>li a:hover{color:#21759B;z-index:5;border-color:transparent}.factory-bootstrap-453 .factory-align-vertical .control-label{width:20%;max-width:140px}.factory-bootstrap-453 .factory-align-vertical .control-group{width:80%}.factory-bootstrap-453 .factory-align-vertical .control-group input[type=text],.factory-bootstrap-453 .factory-align-vertical .control-group textarea{width:90%}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .factory-tab{overflow:hidden;margin-bottom:25px}.factory-bootstrap-454 .factory-tab .form-group{overflow:hidden}.factory-bootstrap-454 .factory-tab+.form-group{margin-top:30px}.factory-bootstrap-454 .nav-tabs a{text-decoration:none}.factory-bootstrap-454 .factory-align-horizontal .nav-tabs{border-bottom:0}.factory-bootstrap-454 .factory-align-vertical .factory-headers{float:left;width:150px}.factory-bootstrap-454 .factory-align-vertical .factory-headers .nav-tabs{border-bottom:0;display:block;margin:0;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.factory-bootstrap-454 .factory-tab .factory-bodies{background-color:#fff;-webkit-border-radius:0 3px 3px;-moz-border-radius:0 3px 3px;border-radius:0 3px 3px;border:1px solid #DDD;padding:30px 15px 25px 10px}.factory-bootstrap-454 .factory-align-vertical .factory-bodies{min-height:250px;margin-left:150px}.factory-bootstrap-454 .factory-align-vertical .factory-bodies .actory-tab-item{clear:both}.factory-bootstrap-454 .form-horizontal .factory-align-vertical .form-group{margin-left:-5px}.factory-bootstrap-454 .factory-align-vertical .nav-tabs li{float:none}.factory-bootstrap-454 .factory-align-vertical .nav-tabs li a{margin-right:-1px;margin-bottom:0;position:relative;z-index:10;padding:10px 0 9px 15px;-webkit-border-radius:3px;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0;-moz-border-radius:3px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;border-radius:3px;border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-454 .factory-align-vertical .nav-tabs>.active>a{border:1px solid #DDD!important;border-right:1px solid #fff!important}.factory-bootstrap-454 .factory-align-vertical .nav-tabs>li a:hover{color:#21759B;z-index:5;border-color:transparent}.factory-bootstrap-454 .factory-align-vertical .control-label{width:20%;max-width:140px}.factory-bootstrap-454 .factory-align-vertical .control-group{width:80%}.factory-bootstrap-454 .factory-align-vertical .control-group input[type=text],.factory-bootstrap-454 .factory-align-vertical .control-group textarea{width:90%}
libs/factory/bootstrap/assets/css-min/bootstrap.wp-editor.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .wp-editor-wrap *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.factory-bootstrap-453 .wp-editor-wrap .button,.factory-bootstrap-453 .wp-editor-wrap input,.factory-bootstrap-453 .wp-editor-wrap textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.factory-bootstrap-453 .switch-html,.factory-bootstrap-453 .switch-tmce{color:#777}.factory-bootstrap-453 .html-active .switch-html,.factory-bootstrap-453 .tmce-active .switch-tmce{color:#555}.factory-bootstrap-453 .switch-html:hover,.factory-bootstrap-453 .switch-tmce:hover{color:#777}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .wp-editor-wrap *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.factory-bootstrap-454 .wp-editor-wrap .button,.factory-bootstrap-454 .wp-editor-wrap input,.factory-bootstrap-454 .wp-editor-wrap textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.factory-bootstrap-454 .switch-html,.factory-bootstrap-454 .switch-tmce{color:#777}.factory-bootstrap-454 .html-active .switch-html,.factory-bootstrap-454 .tmce-active .switch-tmce{color:#555}.factory-bootstrap-454 .switch-html:hover,.factory-bootstrap-454 .switch-tmce:hover{color:#777}
libs/factory/bootstrap/assets/css-min/control.checkbox.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- #side-sortables .factory-bootstrap-453 .factory-buttons-way{float:right;position:relative;top:-25px;left:5px;border:3px solid #f9f9f9;border-radius:4px}.factory-bootstrap-453 .factory-checkbox-disabled button,.factory-bootstrap-453 .factory-checkbox-disabled input{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-453 .factory-buttons-way{border:3px solid #f9f9f9;border-radius:4px}.factory-bootstrap-453 .factory-buttons-way button{padding-left:10px;padding-right:10px}.factory-bootstrap-453 .factory-buttons-way .factory-on.active{text-shadow:none;color:#fff;background-color:#33aad5;-webkit-box-shadow:inset 0 1px 1px #0074a2;box-shadow:inset 0 1px 3px #0074a2;border-top:1px solid #0074a2;border-bottom:1px solid #0074a2;border-left:1px solid #0074a2}.factory-bootstrap-453 .factory-checkbox-tumbler-hint{margin-top:5px}.factory-bootstrap-453 .factory-checkbox-tumbler-hint .factory-tumbler-content{display:inline-block;background-color:#ffd;padding:1px 5px}.admin-color-light .factory-bootstrap-453 .factory-buttons-way .factory-on.active{background-color:#04a4cc;-webkit-box-shadow:inset 0 1px 2px #037c9a;box-shadow:inset 0 1px 2px #037c9a;border-top:1px solid #037c9a;border-bottom:1px solid #037c9a;border-left:1px solid #037c9a}.admin-color-blue .factory-bootstrap-453 .factory-buttons-way .factory-on.active{background-color:#e1a948;-webkit-box-shadow:inset 0 1px 2px #d39323;box-shadow:inset 0 1px 2px #d39323;border-top:1px solid #d39323;border-bottom:1px solid #d39323;border-left:1px solid #d39323}.admin-color-coffee .factory-bootstrap-453 .factory-buttons-way .factory-on.active{background-color:#c7a589;-webkit-box-shadow:inset 0 1px 2px #b78a66;box-shadow:inset 0 1px 2px #b78a66;border-top:1px solid #b78a66;border-bottom:1px solid #b78a66;border-left:1px solid #b78a66}.admin-color-ectoplasm .factory-bootstrap-453 .factory-buttons-way .factory-on.active{background-color:#a3b745;-webkit-box-shadow:inset 0 1px 2px #839237;box-shadow:inset 0 1px 2px #839237;border-top:1px solid #839237;border-bottom:1px solid #839237;border-left:1px solid #839237}.admin-color-midnight .factory-bootstrap-453 .factory-buttons-way .factory-on.active{background-color:#e14d43;-webkit-box-shadow:inset 0 1px 2px #d02a21;box-shadow:inset 0 1px 2px #d02a21;border-top:1px solid #d02a21;border-bottom:1px solid #d02a21;border-left:1px solid #d02a21}.admin-color-ocean .factory-bootstrap-453 .factory-buttons-way .factory-on.active{background-color:#9ebaa0;-webkit-box-shadow:inset 0 1px 2px #80a583;box-shadow:inset 0 1px 2px #80a583;border-top:1px solid #80a583;border-bottom:1px solid #80a583;border-left:1px solid #80a583}.admin-color-sunrise .factory-bootstrap-453 .factory-buttons-way .factory-on.active{background-color:#dd823b;-webkit-box-shadow:inset 0 1px 2px #c36822;box-shadow:inset 0 1px 2px #c36822;border-top:1px solid #c36822;border-bottom:1px solid #c36822;border-left:1px solid #c36822}
8
  */
9
 
10
 
11
+ #side-sortables .factory-bootstrap-454 .factory-buttons-way{float:right;position:relative;top:-25px;left:5px;border:3px solid #f9f9f9;border-radius:4px}.factory-bootstrap-454 .factory-checkbox-disabled button,.factory-bootstrap-454 .factory-checkbox-disabled input{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-454 .factory-buttons-way{border:3px solid #f9f9f9;border-radius:4px}.factory-bootstrap-454 .factory-buttons-way button{padding-left:10px;padding-right:10px}.factory-bootstrap-454 .factory-buttons-way .factory-on.active{text-shadow:none;color:#fff;background-color:#33aad5;-webkit-box-shadow:inset 0 1px 1px #0074a2;box-shadow:inset 0 1px 3px #0074a2;border-top:1px solid #0074a2;border-bottom:1px solid #0074a2;border-left:1px solid #0074a2}.factory-bootstrap-454 .factory-checkbox-tumbler-hint{margin-top:5px}.factory-bootstrap-454 .factory-checkbox-tumbler-hint .factory-tumbler-content{display:inline-block;background-color:#ffd;padding:1px 5px}.admin-color-light .factory-bootstrap-454 .factory-buttons-way .factory-on.active{background-color:#04a4cc;-webkit-box-shadow:inset 0 1px 2px #037c9a;box-shadow:inset 0 1px 2px #037c9a;border-top:1px solid #037c9a;border-bottom:1px solid #037c9a;border-left:1px solid #037c9a}.admin-color-blue .factory-bootstrap-454 .factory-buttons-way .factory-on.active{background-color:#e1a948;-webkit-box-shadow:inset 0 1px 2px #d39323;box-shadow:inset 0 1px 2px #d39323;border-top:1px solid #d39323;border-bottom:1px solid #d39323;border-left:1px solid #d39323}.admin-color-coffee .factory-bootstrap-454 .factory-buttons-way .factory-on.active{background-color:#c7a589;-webkit-box-shadow:inset 0 1px 2px #b78a66;box-shadow:inset 0 1px 2px #b78a66;border-top:1px solid #b78a66;border-bottom:1px solid #b78a66;border-left:1px solid #b78a66}.admin-color-ectoplasm .factory-bootstrap-454 .factory-buttons-way .factory-on.active{background-color:#a3b745;-webkit-box-shadow:inset 0 1px 2px #839237;box-shadow:inset 0 1px 2px #839237;border-top:1px solid #839237;border-bottom:1px solid #839237;border-left:1px solid #839237}.admin-color-midnight .factory-bootstrap-454 .factory-buttons-way .factory-on.active{background-color:#e14d43;-webkit-box-shadow:inset 0 1px 2px #d02a21;box-shadow:inset 0 1px 2px #d02a21;border-top:1px solid #d02a21;border-bottom:1px solid #d02a21;border-left:1px solid #d02a21}.admin-color-ocean .factory-bootstrap-454 .factory-buttons-way .factory-on.active{background-color:#9ebaa0;-webkit-box-shadow:inset 0 1px 2px #80a583;box-shadow:inset 0 1px 2px #80a583;border-top:1px solid #80a583;border-bottom:1px solid #80a583;border-left:1px solid #80a583}.admin-color-sunrise .factory-bootstrap-454 .factory-buttons-way .factory-on.active{background-color:#dd823b;-webkit-box-shadow:inset 0 1px 2px #c36822;box-shadow:inset 0 1px 2px #c36822;border-top:1px solid #c36822;border-bottom:1px solid #c36822;border-left:1px solid #c36822}
libs/factory/bootstrap/assets/css-min/control.color-and-opacity.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .factory-control-row{padding-left:105px;position:relative}.factory-bootstrap-453 .factory-control-row .factory-color-wrap{position:absolute;left:0;top:0}.factory-bootstrap-453 .factory-control-row .factory-opacity-wrap{width:100%}.factory-bootstrap-453 .iris-picker{margin-top:10px}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .factory-control-row{padding-left:105px;position:relative}.factory-bootstrap-454 .factory-control-row .factory-color-wrap{position:absolute;left:0;top:0}.factory-bootstrap-454 .factory-control-row .factory-opacity-wrap{width:100%}.factory-bootstrap-454 .iris-picker{margin-top:10px}
libs/factory/bootstrap/assets/css-min/control.color.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .factory-color{position:relative}.factory-bootstrap-453 .factory-color .factory-color-hex{display:inline-block;width:65px;text-align:left;vertical-align:top;border-top-right-radius:3px;border-bottom-right-radius:3px;border-radius:3px;z-index:1;position:relative;margin-left:26px;border-top-left-radius:0;border-bottom-left-radius:0}.factory-bootstrap-453 .factory-color .factory-background,.factory-bootstrap-453 .factory-color .factory-pattern{cursor:pointer;height:26px;width:26px;position:absolute;border-radius:5px;background:transparent url(../../assets/images/color_picker_pattern.jpg) center center repeat;-moz-box-sizing:border-box;box-sizing:border-box;border-bottom:2px solid rgba(0,0,0,.34);z-index:1;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.factory-bootstrap-453 .factory-color .factory-background{z-index:2;border-radius:3px}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .factory-color{position:relative}.factory-bootstrap-454 .factory-color .factory-color-hex{display:inline-block;width:65px;text-align:left;vertical-align:top;border-top-right-radius:3px;border-bottom-right-radius:3px;border-radius:3px;z-index:1;position:relative;margin-left:26px;border-top-left-radius:0;border-bottom-left-radius:0}.factory-bootstrap-454 .factory-color .factory-background,.factory-bootstrap-454 .factory-color .factory-pattern{cursor:pointer;height:26px;width:26px;position:absolute;border-radius:5px;background:transparent url(../../assets/images/color_picker_pattern.jpg) center center repeat;-moz-box-sizing:border-box;box-sizing:border-box;border-bottom:2px solid rgba(0,0,0,.34);z-index:1;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.factory-bootstrap-454 .factory-color .factory-background{z-index:2;border-radius:3px}
libs/factory/bootstrap/assets/css-min/control.dropdown-and-colors.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .factory-dropdown-and-colors .factory-colors-wrap,.factory-bootstrap-453 .factory-dropdown-and-colors .factory-dropdown-wrap{display:inline-block}.factory-bootstrap-453 .factory-dropdown-and-colors .factory-dropdown-wrap{min-width:200px;max-width:300px}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .factory-dropdown-and-colors .factory-colors-wrap,.factory-bootstrap-454 .factory-dropdown-and-colors .factory-dropdown-wrap{display:inline-block}.factory-bootstrap-454 .factory-dropdown-and-colors .factory-dropdown-wrap{min-width:200px;max-width:300px}
libs/factory/bootstrap/assets/css-min/control.dropdown.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .factory-dropdown.factory-buttons-way .fa{margin-right:6px;position:relative}.factory-bootstrap-453 .factory-dropdown.factory-buttons-way{border:0;border-radius:0}.factory-bootstrap-453 .factory-hints .factory-hint{margin-top:5px;display:inline-block;background-color:#ffd;padding:1px 5px}.admin-color-light .factory-bootstrap-453 .factory-dropdown.factory-buttons-way .active{background-color:#04a4cc;-webkit-box-shadow:inset 0 1px 2px #037c9a;box-shadow:inset 0 1px 2px #037c9a;border-top:1px solid #037c9a;border-bottom:1px solid #037c9a;border-left:1px solid #037c9a}.admin-color-blue .factory-bootstrap-453 .factory-dropdown.factory-buttons-way .active{background-color:#e1a948;-webkit-box-shadow:inset 0 1px 2px #d39323;box-shadow:inset 0 1px 2px #d39323;border-top:1px solid #d39323;border-bottom:1px solid #d39323;border-left:1px solid #d39323}.admin-color-coffee .factory-bootstrap-453 .factory-dropdown.factory-buttons-way .active{background-color:#c7a589;-webkit-box-shadow:inset 0 1px 2px #b78a66;box-shadow:inset 0 1px 2px #b78a66;border-top:1px solid #b78a66;border-bottom:1px solid #b78a66;border-left:1px solid #b78a66}.admin-color-ectoplasm .factory-bootstrap-453 .factory-dropdown.factory-buttons-way .active{background-color:#a3b745;-webkit-box-shadow:inset 0 1px 2px #839237;box-shadow:inset 0 1px 2px #839237;border-top:1px solid #839237;border-bottom:1px solid #839237;border-left:1px solid #839237}.admin-color-midnight .factory-bootstrap-453 .factory-dropdown.factory-buttons-way .active{background-color:#e14d43;-webkit-box-shadow:inset 0 1px 2px #d02a21;box-shadow:inset 0 1px 2px #d02a21;border-top:1px solid #d02a21;border-bottom:1px solid #d02a21;border-left:1px solid #d02a21}.admin-color-ocean .factory-bootstrap-453 .factory-dropdown.factory-buttons-way .active{background-color:#9ebaa0;-webkit-box-shadow:inset 0 1px 2px #80a583;box-shadow:inset 0 1px 2px #80a583;border-top:1px solid #80a583;border-bottom:1px solid #80a583;border-left:1px solid #80a583}.admin-color-sunrise .factory-bootstrap-453 .factory-dropdown.factory-buttons-way .active{background-color:#dd823b;-webkit-box-shadow:inset 0 1px 2px #c36822;box-shadow:inset 0 1px 2px #c36822;border-top:1px solid #c36822;border-bottom:1px solid #c36822;border-left:1px solid #c36822}.factory-bootstrap-453 .factory-dropdown.factory-ddslick-way .dd-select{background-color:#fff!important}.factory-bootstrap-453 .factory-dropdown.factory-ddslick-way label{margin-bottom:1px}.factory-bootstrap-453 .factory-dropdown.factory-ddslick-way .dd-option,.factory-bootstrap-453 .factory-dropdown.factory-ddslick-way .dd-selected{padding:8px 12px 8px 11px!important}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .factory-dropdown.factory-buttons-way .fa{margin-right:6px;position:relative}.factory-bootstrap-454 .factory-dropdown.factory-buttons-way{border:0;border-radius:0}.factory-bootstrap-454 .factory-hints .factory-hint{margin-top:5px;display:inline-block;background-color:#ffd;padding:1px 5px}.admin-color-light .factory-bootstrap-454 .factory-dropdown.factory-buttons-way .active{background-color:#04a4cc;-webkit-box-shadow:inset 0 1px 2px #037c9a;box-shadow:inset 0 1px 2px #037c9a;border-top:1px solid #037c9a;border-bottom:1px solid #037c9a;border-left:1px solid #037c9a}.admin-color-blue .factory-bootstrap-454 .factory-dropdown.factory-buttons-way .active{background-color:#e1a948;-webkit-box-shadow:inset 0 1px 2px #d39323;box-shadow:inset 0 1px 2px #d39323;border-top:1px solid #d39323;border-bottom:1px solid #d39323;border-left:1px solid #d39323}.admin-color-coffee .factory-bootstrap-454 .factory-dropdown.factory-buttons-way .active{background-color:#c7a589;-webkit-box-shadow:inset 0 1px 2px #b78a66;box-shadow:inset 0 1px 2px #b78a66;border-top:1px solid #b78a66;border-bottom:1px solid #b78a66;border-left:1px solid #b78a66}.admin-color-ectoplasm .factory-bootstrap-454 .factory-dropdown.factory-buttons-way .active{background-color:#a3b745;-webkit-box-shadow:inset 0 1px 2px #839237;box-shadow:inset 0 1px 2px #839237;border-top:1px solid #839237;border-bottom:1px solid #839237;border-left:1px solid #839237}.admin-color-midnight .factory-bootstrap-454 .factory-dropdown.factory-buttons-way .active{background-color:#e14d43;-webkit-box-shadow:inset 0 1px 2px #d02a21;box-shadow:inset 0 1px 2px #d02a21;border-top:1px solid #d02a21;border-bottom:1px solid #d02a21;border-left:1px solid #d02a21}.admin-color-ocean .factory-bootstrap-454 .factory-dropdown.factory-buttons-way .active{background-color:#9ebaa0;-webkit-box-shadow:inset 0 1px 2px #80a583;box-shadow:inset 0 1px 2px #80a583;border-top:1px solid #80a583;border-bottom:1px solid #80a583;border-left:1px solid #80a583}.admin-color-sunrise .factory-bootstrap-454 .factory-dropdown.factory-buttons-way .active{background-color:#dd823b;-webkit-box-shadow:inset 0 1px 2px #c36822;box-shadow:inset 0 1px 2px #c36822;border-top:1px solid #c36822;border-bottom:1px solid #c36822;border-left:1px solid #c36822}.factory-bootstrap-454 .factory-dropdown.factory-ddslick-way .dd-select{background-color:#fff!important}.factory-bootstrap-454 .factory-dropdown.factory-ddslick-way label{margin-bottom:1px}.factory-bootstrap-454 .factory-dropdown.factory-ddslick-way .dd-option,.factory-bootstrap-454 .factory-dropdown.factory-ddslick-way .dd-selected{padding:8px 12px 8px 11px!important}
libs/factory/bootstrap/assets/css-min/control.fonts.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .factory-font .factory-control-row{padding:0;vertical-align:top}.factory-bootstrap-453 .factory-font .factory-color-wrap{position:static;display:inline-block;vertical-align:top}.factory-bootstrap-453 .factory-font .factory-size-wrap{display:inline-block;width:70px;vertical-align:top}.factory-bootstrap-453 .iris-picker{margin-top:10px}.factory-bootstrap-453 .factory-font .factory-family-wrap{padding-bottom:10px}.factory-bootstrap-453 .factory-font .chosen-results{max-height:150px}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .factory-font .factory-control-row{padding:0;vertical-align:top}.factory-bootstrap-454 .factory-font .factory-color-wrap{position:static;display:inline-block;vertical-align:top}.factory-bootstrap-454 .factory-font .factory-size-wrap{display:inline-block;width:70px;vertical-align:top}.factory-bootstrap-454 .iris-picker{margin-top:10px}.factory-bootstrap-454 .factory-font .factory-family-wrap{padding-bottom:10px}.factory-bootstrap-454 .factory-font .chosen-results{max-height:150px}
libs/factory/bootstrap/assets/css-min/control.list.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .factory-list li input{margin:0 5px 0 0;position:relative;top:1px;outline:0!important}.factory-bootstrap-453 .factory-list li span{vertical-align:bottom;line-height:100%}.factory-bootstrap-453 .factory-list .factory-error{position:relative;display:inline-block}.factory-bootstrap-453 .factory-list .factory-error i{color:#f47665;margin:0 7px 0 1px;cursor:help}.factory-bootstrap-453 .factory-list .factory-error-text{display:none;position:absolute;width:300px}.factory-bootstrap-453 .factory-list .factory-error-text,.factory-bootstrap-453 .factory-list-error{background-color:rgba(0,0,0,.8);white-space:normal;z-index:10;padding:10px 12px 12px;font-weight:400;line-height:150%;border-radius:4px;color:#fff;font-size:13px;margin-top:2px}.factory-bootstrap-453 .factory-list-error{padding:5px 10px;max-width:500px;display:inline-block}.factory-bootstrap-453 .factory-list-error i{margin:0 7px 0 1px}.factory-bootstrap-453 .factory-list .factory-error-text a{color:#fff;font-weight:700}.factory-bootstrap-453 .factory-list .factory-has-error:hover .factory-error-text{display:block}.factory-bootstrap-453 .factory-list .factory-has-error{cursor:default}.opanda-connect-buttons .opanda-has-error .opanda-error{display:inline-block}.factory-bootstrap-453 .factory-checklist-way.factory-empty{font-style:italic;margin-top:7px}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .factory-list li input{margin:0 5px 0 0;position:relative;top:1px;outline:0!important}.factory-bootstrap-454 .factory-list li span{vertical-align:bottom;line-height:100%}.factory-bootstrap-454 .factory-list .factory-error{position:relative;display:inline-block}.factory-bootstrap-454 .factory-list .factory-error i{color:#f47665;margin:0 7px 0 1px;cursor:help}.factory-bootstrap-454 .factory-list .factory-error-text{display:none;position:absolute;width:300px}.factory-bootstrap-454 .factory-list .factory-error-text,.factory-bootstrap-454 .factory-list-error{background-color:rgba(0,0,0,.8);white-space:normal;z-index:10;padding:10px 12px 12px;font-weight:400;line-height:150%;border-radius:4px;color:#fff;font-size:13px;margin-top:2px}.factory-bootstrap-454 .factory-list-error{padding:5px 10px;max-width:500px;display:inline-block}.factory-bootstrap-454 .factory-list-error i{margin:0 7px 0 1px}.factory-bootstrap-454 .factory-list .factory-error-text a{color:#fff;font-weight:700}.factory-bootstrap-454 .factory-list .factory-has-error:hover .factory-error-text{display:block}.factory-bootstrap-454 .factory-list .factory-has-error{cursor:default}.opanda-connect-buttons .opanda-has-error .opanda-error{display:inline-block}.factory-bootstrap-454 .factory-checklist-way.factory-empty{font-style:italic;margin-top:7px}
libs/factory/bootstrap/assets/css-min/control.multiple-textbox.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .factory-mtextbox-item{position:relative;margin-bottom:5px}.factory-bootstrap-453 .factory-mtextbox-item input,.factory-mtextbox-remove-item{display:inline-block}.factory-bootstrap-453 .factory-mtextbox-item .factory-mtextbox-remove-item{position:absolute;top:0;right:0;bottom:0;width:40px;border-radius:0 3px 3px 0;outline:0}.factory-bootstrap-453 .factory-mtextbox-item .factory-mtextbox-remove-item:focus,.factory-bootstrap-453 .factory-mtextbox-item .factory-mtextbox-remove-item:hover{box-shadow:none;outline:0}.factory-bootstrap-453 .factory-mtextbox-add-item{display:block;margin-top:10px}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .factory-mtextbox-item{position:relative;margin-bottom:5px}.factory-bootstrap-454 .factory-mtextbox-item input,.factory-mtextbox-remove-item{display:inline-block}.factory-bootstrap-454 .factory-mtextbox-item .factory-mtextbox-remove-item{position:absolute;top:0;right:0;bottom:0;width:40px;border-radius:0 3px 3px 0;outline:0}.factory-bootstrap-454 .factory-mtextbox-item .factory-mtextbox-remove-item:focus,.factory-bootstrap-454 .factory-mtextbox-item .factory-mtextbox-remove-item:hover{box-shadow:none;outline:0}.factory-bootstrap-454 .factory-mtextbox-add-item{display:block;margin-top:10px}
libs/factory/bootstrap/assets/css-min/control.pattern.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .factory-pattern .factory-pattern-controls{vertical-align:middle}.factory-bootstrap-453 .factory-pattern .factory-preview-wrap{display:inline-block;vertical-align:middle}.factory-bootstrap-453 .factory-pattern .factory-preview{width:100px;height:26px;background:transparent url(../assets/assets/images/color_picker_pattern.jpg) repeat;border:0;border-radius:3px;cursor:pointer;-moz-box-sizing:border-box;box-sizing:border-box;border-bottom:2px solid rgba(0,0,0,.34)!important;position:relative}.factory-bootstrap-453 .factory-pattern .factory-preview.factory-empty{background:transparent url(../assets/assets/images/color_picker_pattern.jpg) repeat!important}.factory-bootstrap-453 .factory-pattern .factory-preview span{position:absolute;top:0;left:76px;background:#111;width:26px;height:26px;border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;-webkit-border-radius:0 3px 3px 0;z-index:99;border-bottom:2px solid #000}.factory-bootstrap-453 .factory-pattern .factory-preview span:hover{background:#161616}.factory-bootstrap-453 .factory-pattern .factory-preview span:after{content:'';width:0;height:0;border:transparent solid 5px;border-top-color:#96a6a6;position:absolute;top:10px;right:7px;z-index:1}.factory-bootstrap-453 .factory-pattern.factory-patterns-panel-active .factory-preview span:after{border-top-color:transparent;border-bottom-color:#96a6a6;top:4px}.factory-bootstrap-453 .factory-pattern .factory-color-panel{padding:10px;margin-top:10px;background:rgba(255,255,255,.04);border-radius:3px;display:none}.factory-bootstrap-453 .factory-pattern.factory-color-panel-active .factory-color-panel{display:block}.factory-bootstrap-453 .factory-pattern .factory-color-label{margin-right:5px}.factory-bootstrap-453 .factory-pattern .factory-color,.factory-bootstrap-453 .factory-pattern .factory-color-label{display:inline-block;vertical-align:middle}.factory-bootstrap-453 .factory-pattern .factory-color-panel .factory-hint{margin-top:7px}.factory-bootstrap-453 .factory-pattern .factory-patterns-panel{display:none;margin-top:10px;padding:2px 0 0;border-top:1px solid #272727;overflow:visible}.factory-bootstrap-453 .factory-pattern .factory-patterns-group{clear:both;padding:2px 0 0;border-bottom:1px solid #272727;padding-bottom:10px}.factory-bootstrap-453 .factory-pattern .factory-patterns-group-title{margin-top:10px}.factory-bootstrap-453 .factory-pattern .factory-patterns-row{padding-top:10px}.factory-bootstrap-453 .factory-pattern.factory-patterns-panel-active .factory-patterns-panel{display:block}.factory-bootstrap-453 .factory-pattern .factory-patterns-item,.factory-bootstrap-453 .factory-pattern .factory-patterns-item div{width:46px;height:46px}.factory-bootstrap-453 .factory-pattern .factory-patterns-item{display:inline-block;cursor:pointer;position:relative;vertical-align:top}.factory-bootstrap-453 .factory-pattern .factory-patterns-item+.factory-patterns-item{margin-left:10px}.factory-bootstrap-453 .factory-pattern .factory-patterns-item div{position:absolute;border-radius:100%;border:4px solid #333}.factory-bootstrap-453 .factory-pattern .factory-patterns-item:hover .factory-pattern-holder{width:64px;height:64px;top:-10px;left:-10px;border:1px solid #333;z-index:10}.factory-bootstrap-453 .factory-pattern .factory-no-preview{background:#2f2f2f;line-height:46px;border-radius:100%;text-align:center;font-size:20px}.factory-bootstrap-453 .factory-pattern .factory-no-preview:hover{background:#333}.factory-bootstrap-453 .factory-pattern .factory-button .fa{font-size:14px;margin-right:1px}.factory-bootstrap-453 .factory-pattern .factory-button span{position:relative;top:-1px}.factory-bootstrap-453 .factory-pattern .factory-button+.factory-button{margin-left:3px}.factory-bootstrap-453 .factory-pattern .factory-change-color-btn{margin-left:5px}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .factory-pattern .factory-pattern-controls{vertical-align:middle}.factory-bootstrap-454 .factory-pattern .factory-preview-wrap{display:inline-block;vertical-align:middle}.factory-bootstrap-454 .factory-pattern .factory-preview{width:100px;height:26px;background:transparent url(../assets/assets/images/color_picker_pattern.jpg) repeat;border:0;border-radius:3px;cursor:pointer;-moz-box-sizing:border-box;box-sizing:border-box;border-bottom:2px solid rgba(0,0,0,.34)!important;position:relative}.factory-bootstrap-454 .factory-pattern .factory-preview.factory-empty{background:transparent url(../assets/assets/images/color_picker_pattern.jpg) repeat!important}.factory-bootstrap-454 .factory-pattern .factory-preview span{position:absolute;top:0;left:76px;background:#111;width:26px;height:26px;border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;-webkit-border-radius:0 3px 3px 0;z-index:99;border-bottom:2px solid #000}.factory-bootstrap-454 .factory-pattern .factory-preview span:hover{background:#161616}.factory-bootstrap-454 .factory-pattern .factory-preview span:after{content:'';width:0;height:0;border:transparent solid 5px;border-top-color:#96a6a6;position:absolute;top:10px;right:7px;z-index:1}.factory-bootstrap-454 .factory-pattern.factory-patterns-panel-active .factory-preview span:after{border-top-color:transparent;border-bottom-color:#96a6a6;top:4px}.factory-bootstrap-454 .factory-pattern .factory-color-panel{padding:10px;margin-top:10px;background:rgba(255,255,255,.04);border-radius:3px;display:none}.factory-bootstrap-454 .factory-pattern.factory-color-panel-active .factory-color-panel{display:block}.factory-bootstrap-454 .factory-pattern .factory-color-label{margin-right:5px}.factory-bootstrap-454 .factory-pattern .factory-color,.factory-bootstrap-454 .factory-pattern .factory-color-label{display:inline-block;vertical-align:middle}.factory-bootstrap-454 .factory-pattern .factory-color-panel .factory-hint{margin-top:7px}.factory-bootstrap-454 .factory-pattern .factory-patterns-panel{display:none;margin-top:10px;padding:2px 0 0;border-top:1px solid #272727;overflow:visible}.factory-bootstrap-454 .factory-pattern .factory-patterns-group{clear:both;padding:2px 0 0;border-bottom:1px solid #272727;padding-bottom:10px}.factory-bootstrap-454 .factory-pattern .factory-patterns-group-title{margin-top:10px}.factory-bootstrap-454 .factory-pattern .factory-patterns-row{padding-top:10px}.factory-bootstrap-454 .factory-pattern.factory-patterns-panel-active .factory-patterns-panel{display:block}.factory-bootstrap-454 .factory-pattern .factory-patterns-item,.factory-bootstrap-454 .factory-pattern .factory-patterns-item div{width:46px;height:46px}.factory-bootstrap-454 .factory-pattern .factory-patterns-item{display:inline-block;cursor:pointer;position:relative;vertical-align:top}.factory-bootstrap-454 .factory-pattern .factory-patterns-item+.factory-patterns-item{margin-left:10px}.factory-bootstrap-454 .factory-pattern .factory-patterns-item div{position:absolute;border-radius:100%;border:4px solid #333}.factory-bootstrap-454 .factory-pattern .factory-patterns-item:hover .factory-pattern-holder{width:64px;height:64px;top:-10px;left:-10px;border:1px solid #333;z-index:10}.factory-bootstrap-454 .factory-pattern .factory-no-preview{background:#2f2f2f;line-height:46px;border-radius:100%;text-align:center;font-size:20px}.factory-bootstrap-454 .factory-pattern .factory-no-preview:hover{background:#333}.factory-bootstrap-454 .factory-pattern .factory-button .fa{font-size:14px;margin-right:1px}.factory-bootstrap-454 .factory-pattern .factory-button span{position:relative;top:-1px}.factory-bootstrap-454 .factory-pattern .factory-button+.factory-button{margin-left:3px}.factory-bootstrap-454 .factory-pattern .factory-change-color-btn{margin-left:5px}
libs/factory/bootstrap/assets/css-min/control.radio-colors.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .factory-from-radio-label,.factory-bootstrap-453 .factory-from-radio-label>span{-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;transition:all .3s}.factory-bootstrap-453 .factory-from-radio-label{position:relative;width:30px;height:30px;border-radius:3px;background-color:#fff;border:1px solid rgba(0,0,0,.1)}.factory-bootstrap-453 .factory-from-radio-label:hover{background-color:#f5f2f2;border:1px solid rgba(0,0,0,.2)}.factory-bootstrap-453 .factory-from-radio-label>span{display:block;position:absolute;top:2px;left:2px;right:2px;bottom:2px;text-indent:-9999px;background-color:#fff}.factory-bootstrap-453 .factory-from-radio-label .factory-radio-color:checked+span{border:5px solid #fff}.factory-bootstrap-453 .factory-radio-color{opacity:0}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .factory-from-radio-label,.factory-bootstrap-454 .factory-from-radio-label>span{-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;transition:all .3s}.factory-bootstrap-454 .factory-from-radio-label{position:relative;width:30px;height:30px;border-radius:3px;background-color:#fff;border:1px solid rgba(0,0,0,.1)}.factory-bootstrap-454 .factory-from-radio-label:hover{background-color:#f5f2f2;border:1px solid rgba(0,0,0,.2)}.factory-bootstrap-454 .factory-from-radio-label>span{display:block;position:absolute;top:2px;left:2px;right:2px;bottom:2px;text-indent:-9999px;background-color:#fff}.factory-bootstrap-454 .factory-from-radio-label .factory-radio-color:checked+span{border:5px solid #fff}.factory-bootstrap-454 .factory-radio-color{opacity:0}
libs/factory/bootstrap/assets/css-min/holder.more-link.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .factory-more-link-content{border-top:1px dashed #DDD;padding-top:25px;width:100%;padding-right:20px;position:relative}.factory-bootstrap-453 .factory-tab .factory-more-link-show{display:inline-block;text-decoration:none;border-bottom:1px dotted #21759b;position:relative}.factory-bootstrap-453 .factory-tab .factory-more-link-show:hover{border-color:#d54e21}.factory-bootstrap-453 .factory-tab .factory-more-link-hide{position:absolute;margin-top:-35px;background-color:#fff;padding:0 5px;right:20px;color:#bbb;text-decoration:none}.factory-bootstrap-453 .factory-tab .factory-more-link-hide:hover{color:#999}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .factory-more-link-content{border-top:1px dashed #DDD;padding-top:25px;width:100%;padding-right:20px;position:relative}.factory-bootstrap-454 .factory-tab .factory-more-link-show{display:inline-block;text-decoration:none;border-bottom:1px dotted #21759b;position:relative}.factory-bootstrap-454 .factory-tab .factory-more-link-show:hover{border-color:#d54e21}.factory-bootstrap-454 .factory-tab .factory-more-link-hide{position:absolute;margin-top:-35px;background-color:#fff;padding:0 5px;right:20px;color:#bbb;text-decoration:none}.factory-bootstrap-454 .factory-tab .factory-more-link-hide:hover{color:#999}
libs/factory/bootstrap/assets/css-min/plugin.gradient-picker.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .factory-gradient-picker-wrap{margin-bottom:20px}.factory-bootstrap-453 .gradientPicker-preview{width:100%;height:30px;border-radius:3px;background:transparent url(../../assets/images/color_picker_pattern.jpg) repeat}.factory-bootstrap-453 .factory-color-picker-container{display:none;padding-top:15px}.factory-bootstrap-453 .factory-point,.factory-bootstrap-453 .factory-point-color{position:absolute;width:10px;height:10px;border:0;font-size:0;border-radius:50% 50% 100% 100%;-moz-border-radius:50% 50% 100% 100%;-webkit-border-radius:50% 50% 100% 100%;cursor:pointer;overflow:hidden}.factory-bootstrap-453 .factory-point-color{border-radius:0}.factory-bootstrap-453 .factory-point{background:transparent url(../../assets/images/color_picker_pattern.jpg) repeat}.factory-bootstrap-453 .factory-current-point{-ms-transform:rotate(180deg);-webkit-transform:rotate(180deg);transform:rotate(180deg)}.factory-bootstrap-453 .factory-points{position:relative;height:10px;width:100%;cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAWCAYAAADAQbwGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ1JREFUeNq8VAEKwCAITOn%2FX3ZzTBCxUicTBsvsOO9EIKJhAwCe5H0H4xBvLQgOegV8yZ8AZwJHc8zKI4c53bk6IGNqMH3GCJuMlkeG4p4G1e5Lq1KXatmCM7AdrbLLq7FC0agycx7oXOmk8%2FY%2FPNjRR7s6ZFHFqY5AcasLFDPtpAC7WH7aNkxgO9gdLNv3oWdKiKXX7r8bu6rlJcAA9ZRfMt5oHoIAAAAASUVORK5CYII%3D) 5 0,pointer}.factory-bootstrap-453 .gradientPicker-iris-wrap{display:none;position:absolute;left:0;top:78px;width:212px;height:212px;background:#111;border:1px solid #222;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;z-index:9999}.factory-bootstrap-453 .gradientPicker-iris-wrap .iris-border,.factory-bootstrap-453 .gradientPicker-iris-wrap .iris-picker{border:0;background:#111}.factory-bootstrap-453 .gradientPicker-pallets{padding:8px 0 3px;margin-bottom:10px;border-bottom:1px solid #323232;border-top:1px solid #323232;font-size:0;line-height:0;text-align:center}.factory-bootstrap-453 .factory-preset-gradient,.factory-bootstrap-453 .factory-secondary-color{width:22px;height:22px;border-radius:100%}.factory-bootstrap-453 .factory-preset-gradient{display:inline-block;cursor:pointer;margin-bottom:3px;position:relative}.factory-bootstrap-453 .factory-preset-gradient:hover{opacity:.9}.factory-bootstrap-453 .factory-preset-gradient+.factory-preset-gradient{margin-left:5px}.factory-bootstrap-453 .factory-secondary-color-wrap{width:11px;height:22px;position:absolute;overflow:hidden;right:0}.factory-bootstrap-453 .factory-secondary-color{position:absolute;left:-11px;background-color:red}.factory-bootstrap-453 .gradientPicker-filldirection{width:200px;margin-top:5px}.factory-bootstrap-453 .gradientPicker-ptConfig .color-chooser{float:left}.factory-bootstrap-453 .factory-color-picker-container .factory-slider{padding-left:75px;padding-right:60px;position:relative}.factory-bootstrap-453 .factory-color-picker-container .factory-color-hex{top:0;left:0;position:absolute;width:65px}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .factory-gradient-picker-wrap{margin-bottom:20px}.factory-bootstrap-454 .gradientPicker-preview{width:100%;height:30px;border-radius:3px;background:transparent url(../../assets/images/color_picker_pattern.jpg) repeat}.factory-bootstrap-454 .factory-color-picker-container{display:none;padding-top:15px}.factory-bootstrap-454 .factory-point,.factory-bootstrap-454 .factory-point-color{position:absolute;width:10px;height:10px;border:0;font-size:0;border-radius:50% 50% 100% 100%;-moz-border-radius:50% 50% 100% 100%;-webkit-border-radius:50% 50% 100% 100%;cursor:pointer;overflow:hidden}.factory-bootstrap-454 .factory-point-color{border-radius:0}.factory-bootstrap-454 .factory-point{background:transparent url(../../assets/images/color_picker_pattern.jpg) repeat}.factory-bootstrap-454 .factory-current-point{-ms-transform:rotate(180deg);-webkit-transform:rotate(180deg);transform:rotate(180deg)}.factory-bootstrap-454 .factory-points{position:relative;height:10px;width:100%;cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAWCAYAAADAQbwGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ1JREFUeNq8VAEKwCAITOn%2FX3ZzTBCxUicTBsvsOO9EIKJhAwCe5H0H4xBvLQgOegV8yZ8AZwJHc8zKI4c53bk6IGNqMH3GCJuMlkeG4p4G1e5Lq1KXatmCM7AdrbLLq7FC0agycx7oXOmk8%2FY%2FPNjRR7s6ZFHFqY5AcasLFDPtpAC7WH7aNkxgO9gdLNv3oWdKiKXX7r8bu6rlJcAA9ZRfMt5oHoIAAAAASUVORK5CYII%3D) 5 0,pointer}.factory-bootstrap-454 .gradientPicker-iris-wrap{display:none;position:absolute;left:0;top:78px;width:212px;height:212px;background:#111;border:1px solid #222;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;z-index:9999}.factory-bootstrap-454 .gradientPicker-iris-wrap .iris-border,.factory-bootstrap-454 .gradientPicker-iris-wrap .iris-picker{border:0;background:#111}.factory-bootstrap-454 .gradientPicker-pallets{padding:8px 0 3px;margin-bottom:10px;border-bottom:1px solid #323232;border-top:1px solid #323232;font-size:0;line-height:0;text-align:center}.factory-bootstrap-454 .factory-preset-gradient,.factory-bootstrap-454 .factory-secondary-color{width:22px;height:22px;border-radius:100%}.factory-bootstrap-454 .factory-preset-gradient{display:inline-block;cursor:pointer;margin-bottom:3px;position:relative}.factory-bootstrap-454 .factory-preset-gradient:hover{opacity:.9}.factory-bootstrap-454 .factory-preset-gradient+.factory-preset-gradient{margin-left:5px}.factory-bootstrap-454 .factory-secondary-color-wrap{width:11px;height:22px;position:absolute;overflow:hidden;right:0}.factory-bootstrap-454 .factory-secondary-color{position:absolute;left:-11px;background-color:red}.factory-bootstrap-454 .gradientPicker-filldirection{width:200px;margin-top:5px}.factory-bootstrap-454 .gradientPicker-ptConfig .color-chooser{float:left}.factory-bootstrap-454 .factory-color-picker-container .factory-slider{padding-left:75px;padding-right:60px;position:relative}.factory-bootstrap-454 .factory-color-picker-container .factory-color-hex{top:0;left:0;position:absolute;width:65px}
libs/factory/bootstrap/assets/css-min/plugin.paddings-editor.min.css CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
 
11
- .factory-bootstrap-453 .factory-paddings-editor{padding-left:135px;height:90px;position:relative}.factory-bootstrap-453 .factory-paddings-editor .factory-rectangle{width:120px;height:90px;border-radius:10px;background-color:#a6b6b6;overflow:hidden;cursor:pointer;-moz-box-sizing:content-box;box-sizing:content-box;position:absolute;top:0;left:0}.factory-bootstrap-453 .factory-paddings-editor .factory-side{width:100%;height:100%;position:absolute}.factory-bootstrap-453 .factory-paddings-editor .factory-side-center{width:30px;height:30px;border-radius:100%;background-color:#bac9c9;position:absolute;top:30px;left:45px;-moz-box-sizing:content-box;box-sizing:content-box}.factory-bootstrap-453 .factory-paddings-editor .factory-side-center:hover{background-color:#c0cece}.factory-bootstrap-453 .factory-paddings-editor .factory-side-center.factory-active{background-color:#829595}.factory-bootstrap-453 .factory-paddings-editor .factory-side-top{height:30px;top:0;left:0}.factory-bootstrap-453 .factory-paddings-editor .factory-side-right{width:45px;top:0;right:0}.factory-bootstrap-453 .factory-paddings-editor .factory-side-bottom{height:30px;bottom:0;left:0}.factory-bootstrap-453 .factory-paddings-editor .factory-side-left{width:45px;top:0;left:0}.factory-bootstrap-453 .factory-paddings-editor .factory-rectangle .factory-visible-value{color:#1b1f1f;background-color:rgba(255,255,255,.3);border-radius:3px;padding:2px;line-height:13px;display:inline-block}.factory-bootstrap-453 .factory-paddings-editor .factory-rectangle .factory-side.factory-active .factory-visible-value{background-color:rgba(255,255,255,.3);border-radius:3px;padding:2px;line-height:13px;display:inline-block}.factory-bootstrap-453 .factory-paddings-editor .factory-visible-value em{font-style:normal}.factory-bootstrap-453 .factory-paddings-editor .factory-side-bottom,.factory-bootstrap-453 .factory-paddings-editor .factory-side-top{text-align:center;line-height:30px}.factory-bootstrap-453 .factory-paddings-editor .factory-side-left,.factory-bootstrap-453 .factory-paddings-editor .factory-side-right{line-height:90px;text-align:center}.factory-bootstrap-453 .factory-paddings-editor .factory-slider-container{font-style:italic}.factory-bootstrap-453 .factory-paddings-editor .factory-slider{padding-right:0;margin-top:7px}
8
  */
9
 
10
 
11
+ .factory-bootstrap-454 .factory-paddings-editor{padding-left:135px;height:90px;position:relative}.factory-bootstrap-454 .factory-paddings-editor .factory-rectangle{width:120px;height:90px;border-radius:10px;background-color:#a6b6b6;overflow:hidden;cursor:pointer;-moz-box-sizing:content-box;box-sizing:content-box;position:absolute;top:0;left:0}.factory-bootstrap-454 .factory-paddings-editor .factory-side{width:100%;height:100%;position:absolute}.factory-bootstrap-454 .factory-paddings-editor .factory-side-center{width:30px;height:30px;border-radius:100%;background-color:#bac9c9;position:absolute;top:30px;left:45px;-moz-box-sizing:content-box;box-sizing:content-box}.factory-bootstrap-454 .factory-paddings-editor .factory-side-center:hover{background-color:#c0cece}.factory-bootstrap-454 .factory-paddings-editor .factory-side-center.factory-active{background-color:#829595}.factory-bootstrap-454 .factory-paddings-editor .factory-side-top{height:30px;top:0;left:0}.factory-bootstrap-454 .factory-paddings-editor .factory-side-right{width:45px;top:0;right:0}.factory-bootstrap-454 .factory-paddings-editor .factory-side-bottom{height:30px;bottom:0;left:0}.factory-bootstrap-454 .factory-paddings-editor .factory-side-left{width:45px;top:0;left:0}.factory-bootstrap-454 .factory-paddings-editor .factory-rectangle .factory-visible-value{color:#1b1f1f;background-color:rgba(255,255,255,.3);border-radius:3px;padding:2px;line-height:13px;display:inline-block}.factory-bootstrap-454 .factory-paddings-editor .factory-rectangle .factory-side.factory-active .factory-visible-value{background-color:rgba(255,255,255,.3);border-radius:3px;padding:2px;line-height:13px;display:inline-block}.factory-bootstrap-454 .factory-paddings-editor .factory-visible-value em{font-style:normal}.factory-bootstrap-454 .factory-paddings-editor .factory-side-bottom,.factory-bootstrap-454 .factory-paddings-editor .factory-side-top{text-align:center;line-height:30px}.factory-bootstrap-454 .factory-paddings-editor .factory-side-left,.factory-bootstrap-454 .factory-paddings-editor .factory-side-right{line-height:90px;text-align:center}.factory-bootstrap-454 .factory-paddings-editor .factory-slider-container{font-style:italic}.factory-bootstrap-454 .factory-paddings-editor .factory-slider{padding-right:0;margin-top:7px}
libs/factory/bootstrap/assets/js-min/bootstrap.accordion.min.js CHANGED
@@ -7,4 +7,4 @@
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
- !function(a,b,c,d){"use strict";a.fn.factoryBootstrap453_accordion=function(){return this.each(function(){var b=a(this),c=!1;a("."+b.attr("class")+" > div:first").show(),a("."+b.attr("class")+" > div:first").add("."+b.attr("class")+" > h3:first").addClass("active"),a("."+b.attr("class")+" > h3").on("click",function(){var d=a(this),e=d.next();return d.hasClass("active")||c||(c=!0,d.parent().children("div").slideUp(500),a("."+b.attr("class")+" > h3").removeClass("active"),d.addClass("active"),e.addClass("active").slideDown({duration:500,complete:function(){c=!1,b.trigger("shown.bs.accordion",[d])},progress:function(){b.trigger("progress.bs.accordion",[d])}})),!1})})},a(function(){a(".factory-bootstrap-453 .factory-accordion").factoryBootstrap453_accordion()})}(jQuery,window,document);
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
+ !function(a,b,c,d){"use strict";a.fn.factoryBootstrap454_accordion=function(){return this.each(function(){var b=a(this),c=!1;a("."+b.attr("class")+" > div:first").show(),a("."+b.attr("class")+" > div:first").add("."+b.attr("class")+" > h3:first").addClass("active"),a("."+b.attr("class")+" > h3").on("click",function(){var d=a(this),e=d.next();return d.hasClass("active")||c||(c=!0,d.parent().children("div").slideUp(500),a("."+b.attr("class")+" > h3").removeClass("active"),d.addClass("active"),e.addClass("active").slideDown({duration:500,complete:function(){c=!1,b.trigger("shown.bs.accordion",[d])},progress:function(){b.trigger("progress.bs.accordion",[d])}})),!1})})},a(function(){a(".factory-bootstrap-454 .factory-accordion").factoryBootstrap454_accordion()})}(jQuery,window,document);
libs/factory/bootstrap/assets/js-min/bootstrap.collapse.min.js CHANGED
@@ -7,4 +7,4 @@
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
- +function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},a.fn.factoryBootstrap453_collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.factoryBootstrap453_collapse.Constructor=b,a(document).on("click.bs.collapse.data-api","[data-toggle=factory-collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=factory-collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery);
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
+ +function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},a.fn.factoryBootstrap454_collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.factoryBootstrap454_collapse.Constructor=b,a(document).on("click.bs.collapse.data-api","[data-toggle=factory-collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=factory-collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery);
libs/factory/bootstrap/assets/js-min/bootstrap.datetimepicker.min.js CHANGED
@@ -8,4 +8,4 @@
8
  */
9
 
10
  !function(a){"use strict";if("function"==typeof define&&define.amd)define(["jquery","moment"],a);else if("object"==typeof exports)module.exports=a(require("jquery"),require("moment"));else{if("undefined"==typeof jQuery)throw"bootstrap-datetimepicker requires jQuery to be loaded first";if("undefined"==typeof moment)throw"bootstrap-datetimepicker requires Moment.js to be loaded first";a(jQuery,moment)}}(function(a,b){"use strict";if(!b)throw new Error("bootstrap-datetimepicker requires Moment.js to be loaded first");var c=function(c,d){var e,f,g,h,i,j,k,l={},m=!0,n=!1,o=!1,p=0,q=[{clsName:"days",navFnc:"M",navStep:1},{clsName:"months",navFnc:"y",navStep:1},{clsName:"years",navFnc:"y",navStep:10},{clsName:"decades",navFnc:"y",navStep:100}],r=["days","months","years","decades"],s=["top","bottom","auto"],t=["left","right","auto"],u=["default","top","bottom"],v={up:38,38:"up",down:40,40:"down",left:37,37:"left",right:39,39:"right",tab:9,9:"tab",escape:27,27:"escape",enter:13,13:"enter",pageUp:33,33:"pageUp",pageDown:34,34:"pageDown",shift:16,16:"shift",control:17,17:"control",space:32,32:"space",t:84,84:"t","delete":46,46:"delete"},w={},x=function(){return void 0!==b.tz&&void 0!==d.timeZone&&null!==d.timeZone&&""!==d.timeZone},y=function(a){var c;return c=void 0===a||null===a?b():b.isDate(a)||b.isMoment(a)?b(a):x()?b.tz(a,j,d.useStrict,d.timeZone):b(a,j,d.useStrict),x()&&c.tz(d.timeZone),c},z=function(a){if("string"!=typeof a||a.length>1)throw new TypeError("isEnabled expects a single character string parameter");switch(a){case"y":return-1!==i.indexOf("Y");case"M":return-1!==i.indexOf("M");case"d":return-1!==i.toLowerCase().indexOf("d");case"h":case"H":return-1!==i.toLowerCase().indexOf("h");case"m":return-1!==i.indexOf("m");case"s":return-1!==i.indexOf("s");default:return!1}},A=function(){return z("h")||z("m")||z("s")},B=function(){return z("y")||z("M")||z("d")},C=function(){var b=a("<thead>").append(a("<tr>").append(a("<th>").addClass("prev").attr("data-action","previous").append(a("<span>").addClass(d.icons.previous))).append(a("<th>").addClass("picker-switch").attr("data-action","pickerSwitch").attr("colspan",d.calendarWeeks?"6":"5")).append(a("<th>").addClass("next").attr("data-action","next").append(a("<span>").addClass(d.icons.next)))),c=a("<tbody>").append(a("<tr>").append(a("<td>").attr("colspan",d.calendarWeeks?"8":"7")));return[a("<div>").addClass("datepicker-days").append(a("<table>").addClass("table-condensed").append(b).append(a("<tbody>"))),a("<div>").addClass("datepicker-months").append(a("<table>").addClass("table-condensed").append(b.clone()).append(c.clone())),a("<div>").addClass("datepicker-years").append(a("<table>").addClass("table-condensed").append(b.clone()).append(c.clone())),a("<div>").addClass("datepicker-decades").append(a("<table>").addClass("table-condensed").append(b.clone()).append(c.clone()))]},D=function(){var b=a("<tr>"),c=a("<tr>"),e=a("<tr>");return z("h")&&(b.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.incrementHour}).addClass("btn").attr("data-action","incrementHours").append(a("<span>").addClass(d.icons.up)))),c.append(a("<td>").append(a("<span>").addClass("timepicker-hour").attr({"data-time-component":"hours",title:d.tooltips.pickHour}).attr("data-action","showHours"))),e.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.decrementHour}).addClass("btn").attr("data-action","decrementHours").append(a("<span>").addClass(d.icons.down))))),z("m")&&(z("h")&&(b.append(a("<td>").addClass("separator")),c.append(a("<td>").addClass("separator").html(":")),e.append(a("<td>").addClass("separator"))),b.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.incrementMinute}).addClass("btn").attr("data-action","incrementMinutes").append(a("<span>").addClass(d.icons.up)))),c.append(a("<td>").append(a("<span>").addClass("timepicker-minute").attr({"data-time-component":"minutes",title:d.tooltips.pickMinute}).attr("data-action","showMinutes"))),e.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.decrementMinute}).addClass("btn").attr("data-action","decrementMinutes").append(a("<span>").addClass(d.icons.down))))),z("s")&&(z("m")&&(b.append(a("<td>").addClass("separator")),c.append(a("<td>").addClass("separator").html(":")),e.append(a("<td>").addClass("separator"))),b.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.incrementSecond}).addClass("btn").attr("data-action","incrementSeconds").append(a("<span>").addClass(d.icons.up)))),c.append(a("<td>").append(a("<span>").addClass("timepicker-second").attr({"data-time-component":"seconds",title:d.tooltips.pickSecond}).attr("data-action","showSeconds"))),e.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.decrementSecond}).addClass("btn").attr("data-action","decrementSeconds").append(a("<span>").addClass(d.icons.down))))),h||(b.append(a("<td>").addClass("separator")),c.append(a("<td>").append(a("<button>").addClass("btn btn-primary").attr({"data-action":"togglePeriod",tabindex:"-1",title:d.tooltips.togglePeriod}))),e.append(a("<td>").addClass("separator"))),a("<div>").addClass("timepicker-picker").append(a("<table>").addClass("table-condensed").append([b,c,e]))},E=function(){var b=a("<div>").addClass("timepicker-hours").append(a("<table>").addClass("table-condensed")),c=a("<div>").addClass("timepicker-minutes").append(a("<table>").addClass("table-condensed")),d=a("<div>").addClass("timepicker-seconds").append(a("<table>").addClass("table-condensed")),e=[D()];return z("h")&&e.push(b),z("m")&&e.push(c),z("s")&&e.push(d),e},F=function(){var b=[];return d.showTodayButton&&b.push(a("<td>").append(a("<a>").attr({"data-action":"today",title:d.tooltips.today}).append(a("<span>").addClass(d.icons.today)))),!d.sideBySide&&B()&&A()&&b.push(a("<td>").append(a("<a>").attr({"data-action":"togglePicker",title:d.tooltips.selectTime}).append(a("<span>").addClass(d.icons.time)))),d.showClear&&b.push(a("<td>").append(a("<a>").attr({"data-action":"clear",title:d.tooltips.clear}).append(a("<span>").addClass(d.icons.clear)))),d.showClose&&b.push(a("<td>").append(a("<a>").attr({"data-action":"close",title:d.tooltips.close}).append(a("<span>").addClass(d.icons.close)))),a("<table>").addClass("table-condensed").append(a("<tbody>").append(a("<tr>").append(b)))},G=function(){var b=a("<div>").addClass("bootstrap-datetimepicker-widget dropdown-menu"),c=a("<div>").addClass("datepicker").append(C()),e=a("<div>").addClass("timepicker").append(E()),f=a("<ul>").addClass("list-unstyled"),g=a("<li>").addClass("picker-switch"+(d.collapse?" accordion-toggle":"")).append(F());return d.inline&&b.removeClass("dropdown-menu"),h&&b.addClass("usetwentyfour"),z("s")&&!h&&b.addClass("wider"),d.sideBySide&&B()&&A()?(b.addClass("timepicker-sbs"),"top"===d.toolbarPlacement&&b.append(g),b.append(a("<div>").addClass("row").append(c.addClass("col-md-6")).append(e.addClass("col-md-6"))),"bottom"===d.toolbarPlacement&&b.append(g),b):("top"===d.toolbarPlacement&&f.append(g),B()&&f.append(a("<li>").addClass(d.collapse&&A()?"collapse in":"").append(c)),"default"===d.toolbarPlacement&&f.append(g),A()&&f.append(a("<li>").addClass(d.collapse&&B()?"collapse":"").append(e)),"bottom"===d.toolbarPlacement&&f.append(g),b.append(f))},H=function(){var b,e={};return b=c.is("input")||d.inline?c.data():c.find("input").data(),b.dateOptions&&b.dateOptions instanceof Object&&(e=a.extend(!0,e,b.dateOptions)),a.each(d,function(a){var c="date"+a.charAt(0).toUpperCase()+a.slice(1);void 0!==b[c]&&(e[a]=b[c])}),e},I=function(){var b,e=(n||c).position(),f=(n||c).offset(),g=d.widgetPositioning.vertical,h=d.widgetPositioning.horizontal;if(d.widgetParent)b=d.widgetParent.append(o);else if(c.is("input"))b=c.after(o).parent();else{if(d.inline)return void(b=c.append(o));b=c,c.children().first().after(o)}if("auto"===g&&(g=f.top+1.5*o.height()>=a(window).height()+a(window).scrollTop()&&o.height()+c.outerHeight()<f.top?"top":"bottom"),"auto"===h&&(h=b.width()<f.left+o.outerWidth()/2&&f.left+o.outerWidth()>a(window).width()?"right":"left"),"top"===g?o.addClass("top").removeClass("bottom"):o.addClass("bottom").removeClass("top"),"right"===h?o.addClass("pull-right"):o.removeClass("pull-right"),"static"===b.css("position")&&(b=b.parents().filter(function(){return"static"!==a(this).css("position")}).first()),0===b.length)throw new Error("datetimepicker component should be placed within a non-static positioned container");o.css({top:"top"===g?"auto":e.top+c.outerHeight(),bottom:"top"===g?b.outerHeight()-(b===c?0:e.top):"auto",left:"left"===h?b===c?0:e.left:"auto",right:"left"===h?"auto":b.outerWidth()-c.outerWidth()-(b===c?0:e.left)})},J=function(a){"dp.change"===a.type&&(a.date&&a.date.isSame(a.oldDate)||!a.date&&!a.oldDate)||c.trigger(a)},K=function(a){"y"===a&&(a="YYYY"),J({type:"dp.update",change:a,viewDate:f.clone()})},L=function(a){o&&(a&&(k=Math.max(p,Math.min(3,k+a))),o.find(".datepicker > div").hide().filter(".datepicker-"+q[k].clsName).show())},M=function(){var b=a("<tr>"),c=f.clone().startOf("w").startOf("d");for(d.calendarWeeks===!0&&b.append(a("<th>").addClass("cw").text("#"));c.isBefore(f.clone().endOf("w"));)b.append(a("<th>").addClass("dow").text(c.format("dd"))),c.add(1,"d");o.find(".datepicker-days thead").append(b)},N=function(a){return d.disabledDates[a.format("YYYY-MM-DD")]===!0},O=function(a){return d.enabledDates[a.format("YYYY-MM-DD")]===!0},P=function(a){return d.disabledHours[a.format("H")]===!0},Q=function(a){return d.enabledHours[a.format("H")]===!0},R=function(b,c){if(!b.isValid())return!1;if(d.disabledDates&&"d"===c&&N(b))return!1;if(d.enabledDates&&"d"===c&&!O(b))return!1;if(d.minDate&&b.isBefore(d.minDate,c))return!1;if(d.maxDate&&b.isAfter(d.maxDate,c))return!1;if(d.daysOfWeekDisabled&&"d"===c&&-1!==d.daysOfWeekDisabled.indexOf(b.day()))return!1;if(d.disabledHours&&("h"===c||"m"===c||"s"===c)&&P(b))return!1;if(d.enabledHours&&("h"===c||"m"===c||"s"===c)&&!Q(b))return!1;if(d.disabledTimeIntervals&&("h"===c||"m"===c||"s"===c)){var e=!1;if(a.each(d.disabledTimeIntervals,function(){return b.isBetween(this[0],this[1])?(e=!0,!1):void 0}),e)return!1}return!0},S=function(){for(var b=[],c=f.clone().startOf("y").startOf("d");c.isSame(f,"y");)b.push(a("<span>").attr("data-action","selectMonth").addClass("month").text(c.format("MMM"))),c.add(1,"M");o.find(".datepicker-months td").empty().append(b)},T=function(){var b=o.find(".datepicker-months"),c=b.find("th"),g=b.find("tbody").find("span");c.eq(0).find("span").attr("title",d.tooltips.prevYear),c.eq(1).attr("title",d.tooltips.selectYear),c.eq(2).find("span").attr("title",d.tooltips.nextYear),b.find(".disabled").removeClass("disabled"),R(f.clone().subtract(1,"y"),"y")||c.eq(0).addClass("disabled"),c.eq(1).text(f.year()),R(f.clone().add(1,"y"),"y")||c.eq(2).addClass("disabled"),g.removeClass("active"),e.isSame(f,"y")&&!m&&g.eq(e.month()).addClass("active"),g.each(function(b){R(f.clone().month(b),"M")||a(this).addClass("disabled")})},U=function(){var a=o.find(".datepicker-years"),b=a.find("th"),c=f.clone().subtract(5,"y"),g=f.clone().add(6,"y"),h="";for(b.eq(0).find("span").attr("title",d.tooltips.prevDecade),b.eq(1).attr("title",d.tooltips.selectDecade),b.eq(2).find("span").attr("title",d.tooltips.nextDecade),a.find(".disabled").removeClass("disabled"),d.minDate&&d.minDate.isAfter(c,"y")&&b.eq(0).addClass("disabled"),b.eq(1).text(c.year()+"-"+g.year()),d.maxDate&&d.maxDate.isBefore(g,"y")&&b.eq(2).addClass("disabled");!c.isAfter(g,"y");)h+='<span data-action="selectYear" class="year'+(c.isSame(e,"y")&&!m?" active":"")+(R(c,"y")?"":" disabled")+'">'+c.year()+"</span>",c.add(1,"y");a.find("td").html(h)},V=function(){var a,c=o.find(".datepicker-decades"),g=c.find("th"),h=b({y:f.year()-f.year()%100-1}),i=h.clone().add(100,"y"),j=h.clone(),k=!1,l=!1,m="";for(g.eq(0).find("span").attr("title",d.tooltips.prevCentury),g.eq(2).find("span").attr("title",d.tooltips.nextCentury),c.find(".disabled").removeClass("disabled"),(h.isSame(b({y:1900}))||d.minDate&&d.minDate.isAfter(h,"y"))&&g.eq(0).addClass("disabled"),g.eq(1).text(h.year()+"-"+i.year()),(h.isSame(b({y:2e3}))||d.maxDate&&d.maxDate.isBefore(i,"y"))&&g.eq(2).addClass("disabled");!h.isAfter(i,"y");)a=h.year()+12,k=d.minDate&&d.minDate.isAfter(h,"y")&&d.minDate.year()<=a,l=d.maxDate&&d.maxDate.isAfter(h,"y")&&d.maxDate.year()<=a,m+='<span data-action="selectDecade" class="decade'+(e.isAfter(h)&&e.year()<=a?" active":"")+(R(h,"y")||k||l?"":" disabled")+'" data-selection="'+(h.year()+6)+'">'+(h.year()+1)+" - "+(h.year()+12)+"</span>",h.add(12,"y");m+="<span></span><span></span><span></span>",c.find("td").html(m),g.eq(1).text(j.year()+1+"-"+h.year())},W=function(){var b,c,g,h=o.find(".datepicker-days"),i=h.find("th"),j=[],k=[];if(B()){for(i.eq(0).find("span").attr("title",d.tooltips.prevMonth),i.eq(1).attr("title",d.tooltips.selectMonth),i.eq(2).find("span").attr("title",d.tooltips.nextMonth),h.find(".disabled").removeClass("disabled"),i.eq(1).text(f.format(d.dayViewHeaderFormat)),R(f.clone().subtract(1,"M"),"M")||i.eq(0).addClass("disabled"),R(f.clone().add(1,"M"),"M")||i.eq(2).addClass("disabled"),b=f.clone().startOf("M").startOf("w").startOf("d"),g=0;42>g;g++)0===b.weekday()&&(c=a("<tr>"),d.calendarWeeks&&c.append('<td class="cw">'+b.week()+"</td>"),j.push(c)),k=["day"],b.isBefore(f,"M")&&k.push("old"),b.isAfter(f,"M")&&k.push("new"),b.isSame(e,"d")&&!m&&k.push("active"),R(b,"d")||k.push("disabled"),b.isSame(y(),"d")&&k.push("today"),(0===b.day()||6===b.day())&&k.push("weekend"),J({type:"dp.classify",date:b,classNames:k}),c.append('<td data-action="selectDay" data-day="'+b.format("L")+'" class="'+k.join(" ")+'">'+b.date()+"</td>"),b.add(1,"d");h.find("tbody").empty().append(j),T(),U(),V()}},X=function(){var b=o.find(".timepicker-hours table"),c=f.clone().startOf("d"),d=[],e=a("<tr>");for(f.hour()>11&&!h&&c.hour(12);c.isSame(f,"d")&&(h||f.hour()<12&&c.hour()<12||f.hour()>11);)c.hour()%4===0&&(e=a("<tr>"),d.push(e)),e.append('<td data-action="selectHour" class="hour'+(R(c,"h")?"":" disabled")+'">'+c.format(h?"HH":"hh")+"</td>"),c.add(1,"h");b.empty().append(d)},Y=function(){for(var b=o.find(".timepicker-minutes table"),c=f.clone().startOf("h"),e=[],g=a("<tr>"),h=1===d.stepping?5:d.stepping;f.isSame(c,"h");)c.minute()%(4*h)===0&&(g=a("<tr>"),e.push(g)),g.append('<td data-action="selectMinute" class="minute'+(R(c,"m")?"":" disabled")+'">'+c.format("mm")+"</td>"),c.add(h,"m");b.empty().append(e)},Z=function(){for(var b=o.find(".timepicker-seconds table"),c=f.clone().startOf("m"),d=[],e=a("<tr>");f.isSame(c,"m");)c.second()%20===0&&(e=a("<tr>"),d.push(e)),e.append('<td data-action="selectSecond" class="second'+(R(c,"s")?"":" disabled")+'">'+c.format("ss")+"</td>"),c.add(5,"s");b.empty().append(d)},$=function(){var a,b,c=o.find(".timepicker span[data-time-component]");h||(a=o.find(".timepicker [data-action=togglePeriod]"),b=e.clone().add(e.hours()>=12?-12:12,"h"),a.text(e.format("A")),R(b,"h")?a.removeClass("disabled"):a.addClass("disabled")),c.filter("[data-time-component=hours]").text(e.format(h?"HH":"hh")),c.filter("[data-time-component=minutes]").text(e.format("mm")),c.filter("[data-time-component=seconds]").text(e.format("ss")),X(),Y(),Z()},_=function(){o&&(W(),$())},aa=function(a){var b=m?null:e;if(!a)return m=!0,g.val(""),c.data("date",""),J({type:"dp.change",date:!1,oldDate:b}),void _();if(a=a.clone().locale(d.locale),x()&&a.tz(d.timeZone),1!==d.stepping)for(a.minutes(Math.round(a.minutes()/d.stepping)*d.stepping).seconds(0);d.minDate&&a.isBefore(d.minDate);)a.add(d.stepping,"minutes");R(a)?(e=a,f=e.clone(),g.val(e.format(i)),c.data("date",e.format(i)),m=!1,_(),J({type:"dp.change",date:e.clone(),oldDate:b})):(d.keepInvalid?J({type:"dp.change",date:a,oldDate:b}):g.val(m?"":e.format(i)),J({type:"dp.error",date:a,oldDate:b}))},ba=function(){var b=!1;return o?(o.find(".collapse").each(function(){var c=a(this).data("collapse");return c&&c.transitioning?(b=!0,!1):!0}),b?l:(n&&n.hasClass("btn")&&n.toggleClass("active"),o.hide(),a(window).off("resize",I),o.off("click","[data-action]"),o.off("mousedown",!1),o.remove(),o=!1,J({type:"dp.hide",date:e.clone()}),g.blur(),f=e.clone(),l)):l},ca=function(){aa(null)},da=function(a){return void 0===d.parseInputDate?(!b.isMoment(a)||a instanceof Date)&&(a=y(a)):a=d.parseInputDate(a),a},ea={next:function(){var a=q[k].navFnc;f.add(q[k].navStep,a),W(),K(a)},previous:function(){var a=q[k].navFnc;f.subtract(q[k].navStep,a),W(),K(a)},pickerSwitch:function(){L(1)},selectMonth:function(b){var c=a(b.target).closest("tbody").find("span").index(a(b.target));f.month(c),k===p?(aa(e.clone().year(f.year()).month(f.month())),d.inline||ba()):(L(-1),W()),K("M")},selectYear:function(b){var c=parseInt(a(b.target).text(),10)||0;f.year(c),k===p?(aa(e.clone().year(f.year())),d.inline||ba()):(L(-1),W()),K("YYYY")},selectDecade:function(b){var c=parseInt(a(b.target).data("selection"),10)||0;f.year(c),k===p?(aa(e.clone().year(f.year())),d.inline||ba()):(L(-1),W()),K("YYYY")},selectDay:function(b){var c=f.clone();a(b.target).is(".old")&&c.subtract(1,"M"),a(b.target).is(".new")&&c.add(1,"M"),aa(c.date(parseInt(a(b.target).text(),10))),A()||d.keepOpen||d.inline||ba()},incrementHours:function(){var a=e.clone().add(1,"h");R(a,"h")&&aa(a)},incrementMinutes:function(){var a=e.clone().add(d.stepping,"m");R(a,"m")&&aa(a)},incrementSeconds:function(){var a=e.clone().add(1,"s");R(a,"s")&&aa(a)},decrementHours:function(){var a=e.clone().subtract(1,"h");R(a,"h")&&aa(a)},decrementMinutes:function(){var a=e.clone().subtract(d.stepping,"m");R(a,"m")&&aa(a)},decrementSeconds:function(){var a=e.clone().subtract(1,"s");R(a,"s")&&aa(a)},togglePeriod:function(){aa(e.clone().add(e.hours()>=12?-12:12,"h"))},togglePicker:function(b){var c,e=a(b.target),f=e.closest("ul"),g=f.find(".in"),h=f.find(".collapse:not(.in)");if(g&&g.length){if(c=g.data("collapse"),c&&c.transitioning)return;g.collapse?(g.collapse("hide"),h.collapse("show")):(g.removeClass("in"),h.addClass("in")),e.is("span")?e.toggleClass(d.icons.time+" "+d.icons.date):e.find("span").toggleClass(d.icons.time+" "+d.icons.date)}},showPicker:function(){o.find(".timepicker > div:not(.timepicker-picker)").hide(),o.find(".timepicker .timepicker-picker").show()},showHours:function(){o.find(".timepicker .timepicker-picker").hide(),o.find(".timepicker .timepicker-hours").show()},showMinutes:function(){o.find(".timepicker .timepicker-picker").hide(),o.find(".timepicker .timepicker-minutes").show()},showSeconds:function(){o.find(".timepicker .timepicker-picker").hide(),o.find(".timepicker .timepicker-seconds").show()},selectHour:function(b){var c=parseInt(a(b.target).text(),10);h||(e.hours()>=12?12!==c&&(c+=12):12===c&&(c=0)),aa(e.clone().hours(c)),ea.showPicker.call(l)},selectMinute:function(b){aa(e.clone().minutes(parseInt(a(b.target).text(),10))),ea.showPicker.call(l)},selectSecond:function(b){aa(e.clone().seconds(parseInt(a(b.target).text(),10))),ea.showPicker.call(l)},clear:ca,today:function(){var a=y();R(a,"d")&&aa(a)},close:ba},fa=function(b){return a(b.currentTarget).is(".disabled")?!1:(ea[a(b.currentTarget).data("action")].apply(l,arguments),!1)},ga=function(){var b,c={year:function(a){return a.month(0).date(1).hours(0).seconds(0).minutes(0)},month:function(a){return a.date(1).hours(0).seconds(0).minutes(0)},day:function(a){return a.hours(0).seconds(0).minutes(0)},hour:function(a){return a.seconds(0).minutes(0)},minute:function(a){return a.seconds(0)}};return g.prop("disabled")||!d.ignoreReadonly&&g.prop("readonly")||o?l:(void 0!==g.val()&&0!==g.val().trim().length?aa(da(g.val().trim())):m&&d.useCurrent&&(d.inline||g.is("input")&&0===g.val().trim().length)&&(b=y(),"string"==typeof d.useCurrent&&(b=c[d.useCurrent](b)),aa(b)),o=G(),M(),S(),o.find(".timepicker-hours").hide(),o.find(".timepicker-minutes").hide(),o.find(".timepicker-seconds").hide(),_(),L(),a(window).on("resize",I),o.on("click","[data-action]",fa),o.on("mousedown",!1),n&&n.hasClass("btn")&&n.toggleClass("active"),I(),o.show(),d.focusOnShow&&!g.is(":focus")&&g.focus(),J({type:"dp.show"}),l)},ha=function(){return o?ba():ga()},ia=function(a){var b,c,e,f,g=null,h=[],i={},j=a.which,k="p";w[j]=k;for(b in w)w.hasOwnProperty(b)&&w[b]===k&&(h.push(b),parseInt(b,10)!==j&&(i[b]=!0));for(b in d.keyBinds)if(d.keyBinds.hasOwnProperty(b)&&"function"==typeof d.keyBinds[b]&&(e=b.split(" "),e.length===h.length&&v[j]===e[e.length-1])){for(f=!0,c=e.length-2;c>=0;c--)if(!(v[e[c]]in i)){f=!1;break}if(f){g=d.keyBinds[b];break}}g&&(g.call(l,o),a.stopPropagation(),a.preventDefault())},ja=function(a){w[a.which]="r",a.stopPropagation(),a.preventDefault()},ka=function(b){var c=a(b.target).val().trim(),d=c?da(c):null;return aa(d),b.stopImmediatePropagation(),!1},la=function(){g.on({change:ka,blur:d.debug?"":ba,keydown:ia,keyup:ja,focus:d.allowInputToggle?ga:""}),c.is("input")?g.on({focus:ga}):n&&(n.on("click",ha),n.on("mousedown",!1))},ma=function(){g.off({change:ka,blur:blur,keydown:ia,keyup:ja,focus:d.allowInputToggle?ba:""}),c.is("input")?g.off({focus:ga}):n&&(n.off("click",ha),n.off("mousedown",!1))},na=function(b){var c={};return a.each(b,function(){var a=da(this);a.isValid()&&(c[a.format("YYYY-MM-DD")]=!0)}),Object.keys(c).length?c:!1},oa=function(b){var c={};return a.each(b,function(){c[this]=!0}),Object.keys(c).length?c:!1},pa=function(){var a=d.format||"L LT";i=a.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,function(a){var b=e.localeData().longDateFormat(a)||a;return b.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,function(a){return e.localeData().longDateFormat(a)||a})}),j=d.extraFormats?d.extraFormats.slice():[],j.indexOf(a)<0&&j.indexOf(i)<0&&j.push(i),h=i.toLowerCase().indexOf("a")<1&&i.replace(/\[.*?\]/g,"").indexOf("h")<1,z("y")&&(p=2),z("M")&&(p=1),z("d")&&(p=0),k=Math.max(p,k),m||aa(e)};if(l.destroy=function(){ba(),ma(),c.removeData("DateTimePicker"),c.removeData("date")},l.toggle=ha,l.show=ga,l.hide=ba,l.disable=function(){return ba(),n&&n.hasClass("btn")&&n.addClass("disabled"),g.prop("disabled",!0),l},l.enable=function(){return n&&n.hasClass("btn")&&n.removeClass("disabled"),g.prop("disabled",!1),l},l.ignoreReadonly=function(a){if(0===arguments.length)return d.ignoreReadonly;if("boolean"!=typeof a)throw new TypeError("ignoreReadonly () expects a boolean parameter");return d.ignoreReadonly=a,l},l.options=function(b){if(0===arguments.length)return a.extend(!0,{},d);if(!(b instanceof Object))throw new TypeError("options() options parameter should be an object");return a.extend(!0,d,b),a.each(d,function(a,b){if(void 0===l[a])throw new TypeError("option "+a+" is not recognized!");l[a](b)}),l},l.date=function(a){if(0===arguments.length)return m?null:e.clone();if(!(null===a||"string"==typeof a||b.isMoment(a)||a instanceof Date))throw new TypeError("date() parameter must be one of [null, string, moment or Date]");return aa(null===a?null:da(a)),l},l.format=function(a){if(0===arguments.length)return d.format;if("string"!=typeof a&&("boolean"!=typeof a||a!==!1))throw new TypeError("format() expects a string or boolean:false parameter "+a);return d.format=a,i&&pa(),l},l.timeZone=function(a){if(0===arguments.length)return d.timeZone;if("string"!=typeof a)throw new TypeError("newZone() expects a string parameter");return d.timeZone=a,l},l.dayViewHeaderFormat=function(a){if(0===arguments.length)return d.dayViewHeaderFormat;if("string"!=typeof a)throw new TypeError("dayViewHeaderFormat() expects a string parameter");return d.dayViewHeaderFormat=a,l},l.extraFormats=function(a){if(0===arguments.length)return d.extraFormats;if(a!==!1&&!(a instanceof Array))throw new TypeError("extraFormats() expects an array or false parameter");return d.extraFormats=a,j&&pa(),l},l.disabledDates=function(b){if(0===arguments.length)return d.disabledDates?a.extend({},d.disabledDates):d.disabledDates;if(!b)return d.disabledDates=!1,_(),l;if(!(b instanceof Array))throw new TypeError("disabledDates() expects an array parameter");return d.disabledDates=na(b),d.enabledDates=!1,_(),l},l.enabledDates=function(b){if(0===arguments.length)return d.enabledDates?a.extend({},d.enabledDates):d.enabledDates;if(!b)return d.enabledDates=!1,_(),l;if(!(b instanceof Array))throw new TypeError("enabledDates() expects an array parameter");return d.enabledDates=na(b),d.disabledDates=!1,_(),l},l.daysOfWeekDisabled=function(a){if(0===arguments.length)return d.daysOfWeekDisabled.splice(0);if("boolean"==typeof a&&!a)return d.daysOfWeekDisabled=!1,_(),l;if(!(a instanceof Array))throw new TypeError("daysOfWeekDisabled() expects an array parameter");if(d.daysOfWeekDisabled=a.reduce(function(a,b){return b=parseInt(b,10),b>6||0>b||isNaN(b)?a:(-1===a.indexOf(b)&&a.push(b),a)},[]).sort(),d.useCurrent&&!d.keepInvalid){for(var b=0;!R(e,"d");){if(e.add(1,"d"),31===b)throw"Tried 31 times to find a valid date";b++}aa(e)}return _(),l},l.maxDate=function(a){if(0===arguments.length)return d.maxDate?d.maxDate.clone():d.maxDate;if("boolean"==typeof a&&a===!1)return d.maxDate=!1,_(),l;"string"==typeof a&&("now"===a||"moment"===a)&&(a=y());var b=da(a);if(!b.isValid())throw new TypeError("maxDate() Could not parse date parameter: "+a);if(d.minDate&&b.isBefore(d.minDate))throw new TypeError("maxDate() date parameter is before options.minDate: "+b.format(i));return d.maxDate=b,d.useCurrent&&!d.keepInvalid&&e.isAfter(a)&&aa(d.maxDate),f.isAfter(b)&&(f=b.clone().subtract(d.stepping,"m")),_(),l},l.minDate=function(a){if(0===arguments.length)return d.minDate?d.minDate.clone():d.minDate;if("boolean"==typeof a&&a===!1)return d.minDate=!1,_(),l;"string"==typeof a&&("now"===a||"moment"===a)&&(a=y());var b=da(a);if(!b.isValid())throw new TypeError("minDate() Could not parse date parameter: "+a);if(d.maxDate&&b.isAfter(d.maxDate))throw new TypeError("minDate() date parameter is after options.maxDate: "+b.format(i));return d.minDate=b,d.useCurrent&&!d.keepInvalid&&e.isBefore(a)&&aa(d.minDate),f.isBefore(b)&&(f=b.clone().add(d.stepping,"m")),_(),l},l.defaultDate=function(a){if(0===arguments.length)return d.defaultDate?d.defaultDate.clone():d.defaultDate;if(!a)return d.defaultDate=!1,l;"string"==typeof a&&(a="now"===a||"moment"===a?y():y(a));var b=da(a);if(!b.isValid())throw new TypeError("defaultDate() Could not parse date parameter: "+a);if(!R(b))throw new TypeError("defaultDate() date passed is invalid according to component setup validations");return d.defaultDate=b,(d.defaultDate&&d.inline||""===g.val().trim())&&aa(d.defaultDate),l},l.locale=function(a){if(0===arguments.length)return d.locale;if(!b.localeData(a))throw new TypeError("locale() locale "+a+" is not loaded from moment locales!");return d.locale=a,e.locale(d.locale),f.locale(d.locale),i&&pa(),o&&(ba(),ga()),l},l.stepping=function(a){return 0===arguments.length?d.stepping:(a=parseInt(a,10),(isNaN(a)||1>a)&&(a=1),d.stepping=a,l)},l.useCurrent=function(a){var b=["year","month","day","hour","minute"];if(0===arguments.length)return d.useCurrent;if("boolean"!=typeof a&&"string"!=typeof a)throw new TypeError("useCurrent() expects a boolean or string parameter");if("string"==typeof a&&-1===b.indexOf(a.toLowerCase()))throw new TypeError("useCurrent() expects a string parameter of "+b.join(", "));return d.useCurrent=a,l},l.collapse=function(a){if(0===arguments.length)return d.collapse;if("boolean"!=typeof a)throw new TypeError("collapse() expects a boolean parameter");return d.collapse===a?l:(d.collapse=a,o&&(ba(),ga()),l)},l.icons=function(b){if(0===arguments.length)return a.extend({},d.icons);if(!(b instanceof Object))throw new TypeError("icons() expects parameter to be an Object");return a.extend(d.icons,b),o&&(ba(),ga()),l},l.tooltips=function(b){if(0===arguments.length)return a.extend({},d.tooltips);if(!(b instanceof Object))throw new TypeError("tooltips() expects parameter to be an Object");return a.extend(d.tooltips,b),o&&(ba(),ga()),l},l.useStrict=function(a){if(0===arguments.length)return d.useStrict;if("boolean"!=typeof a)throw new TypeError("useStrict() expects a boolean parameter");return d.useStrict=a,l},l.sideBySide=function(a){if(0===arguments.length)return d.sideBySide;if("boolean"!=typeof a)throw new TypeError("sideBySide() expects a boolean parameter");return d.sideBySide=a,o&&(ba(),ga()),l},l.viewMode=function(a){if(0===arguments.length)return d.viewMode;if("string"!=typeof a)throw new TypeError("viewMode() expects a string parameter");if(-1===r.indexOf(a))throw new TypeError("viewMode() parameter must be one of ("+r.join(", ")+") value");return d.viewMode=a,k=Math.max(r.indexOf(a),p),L(),l},l.toolbarPlacement=function(a){if(0===arguments.length)return d.toolbarPlacement;if("string"!=typeof a)throw new TypeError("toolbarPlacement() expects a string parameter");if(-1===u.indexOf(a))throw new TypeError("toolbarPlacement() parameter must be one of ("+u.join(", ")+") value");return d.toolbarPlacement=a,o&&(ba(),ga()),l},l.widgetPositioning=function(b){if(0===arguments.length)return a.extend({},d.widgetPositioning);if("[object Object]"!=={}.toString.call(b))throw new TypeError("widgetPositioning() expects an object variable");if(b.horizontal){if("string"!=typeof b.horizontal)throw new TypeError("widgetPositioning() horizontal variable must be a string");if(b.horizontal=b.horizontal.toLowerCase(),-1===t.indexOf(b.horizontal))throw new TypeError("widgetPositioning() expects horizontal parameter to be one of ("+t.join(", ")+")");d.widgetPositioning.horizontal=b.horizontal}if(b.vertical){if("string"!=typeof b.vertical)throw new TypeError("widgetPositioning() vertical variable must be a string");if(b.vertical=b.vertical.toLowerCase(),-1===s.indexOf(b.vertical))throw new TypeError("widgetPositioning() expects vertical parameter to be one of ("+s.join(", ")+")");d.widgetPositioning.vertical=b.vertical}return _(),l},l.calendarWeeks=function(a){if(0===arguments.length)return d.calendarWeeks;if("boolean"!=typeof a)throw new TypeError("calendarWeeks() expects parameter to be a boolean value");return d.calendarWeeks=a,_(),l},l.showTodayButton=function(a){if(0===arguments.length)return d.showTodayButton;if("boolean"!=typeof a)throw new TypeError("showTodayButton() expects a boolean parameter");return d.showTodayButton=a,o&&(ba(),ga()),l},l.showClear=function(a){if(0===arguments.length)return d.showClear;if("boolean"!=typeof a)throw new TypeError("showClear() expects a boolean parameter");return d.showClear=a,o&&(ba(),ga()),l},l.widgetParent=function(b){if(0===arguments.length)return d.widgetParent;if("string"==typeof b&&(b=a(b)),null!==b&&"string"!=typeof b&&!(b instanceof a))throw new TypeError("widgetParent() expects a string or a jQuery object parameter");return d.widgetParent=b,o&&(ba(),ga()),l},l.keepOpen=function(a){if(0===arguments.length)return d.keepOpen;if("boolean"!=typeof a)throw new TypeError("keepOpen() expects a boolean parameter");return d.keepOpen=a,l},l.focusOnShow=function(a){if(0===arguments.length)return d.focusOnShow;if("boolean"!=typeof a)throw new TypeError("focusOnShow() expects a boolean parameter");return d.focusOnShow=a,l},l.inline=function(a){if(0===arguments.length)return d.inline;if("boolean"!=typeof a)throw new TypeError("inline() expects a boolean parameter");return d.inline=a,l},l.clear=function(){return ca(),l},l.keyBinds=function(a){return 0===arguments.length?d.keyBinds:(d.keyBinds=a,l)},l.getMoment=function(a){return y(a)},l.debug=function(a){if("boolean"!=typeof a)throw new TypeError("debug() expects a boolean parameter");return d.debug=a,l},l.allowInputToggle=function(a){if(0===arguments.length)return d.allowInputToggle;if("boolean"!=typeof a)throw new TypeError("allowInputToggle() expects a boolean parameter");return d.allowInputToggle=a,l},l.showClose=function(a){if(0===arguments.length)return d.showClose;if("boolean"!=typeof a)throw new TypeError("showClose() expects a boolean parameter");return d.showClose=a,l},l.keepInvalid=function(a){if(0===arguments.length)return d.keepInvalid;if("boolean"!=typeof a)throw new TypeError("keepInvalid() expects a boolean parameter");
11
- return d.keepInvalid=a,l},l.datepickerInput=function(a){if(0===arguments.length)return d.datepickerInput;if("string"!=typeof a)throw new TypeError("datepickerInput() expects a string parameter");return d.datepickerInput=a,l},l.parseInputDate=function(a){if(0===arguments.length)return d.parseInputDate;if("function"!=typeof a)throw new TypeError("parseInputDate() sholud be as function");return d.parseInputDate=a,l},l.disabledTimeIntervals=function(b){if(0===arguments.length)return d.disabledTimeIntervals?a.extend({},d.disabledTimeIntervals):d.disabledTimeIntervals;if(!b)return d.disabledTimeIntervals=!1,_(),l;if(!(b instanceof Array))throw new TypeError("disabledTimeIntervals() expects an array parameter");return d.disabledTimeIntervals=b,_(),l},l.disabledHours=function(b){if(0===arguments.length)return d.disabledHours?a.extend({},d.disabledHours):d.disabledHours;if(!b)return d.disabledHours=!1,_(),l;if(!(b instanceof Array))throw new TypeError("disabledHours() expects an array parameter");if(d.disabledHours=oa(b),d.enabledHours=!1,d.useCurrent&&!d.keepInvalid){for(var c=0;!R(e,"h");){if(e.add(1,"h"),24===c)throw"Tried 24 times to find a valid date";c++}aa(e)}return _(),l},l.enabledHours=function(b){if(0===arguments.length)return d.enabledHours?a.extend({},d.enabledHours):d.enabledHours;if(!b)return d.enabledHours=!1,_(),l;if(!(b instanceof Array))throw new TypeError("enabledHours() expects an array parameter");if(d.enabledHours=oa(b),d.disabledHours=!1,d.useCurrent&&!d.keepInvalid){for(var c=0;!R(e,"h");){if(e.add(1,"h"),24===c)throw"Tried 24 times to find a valid date";c++}aa(e)}return _(),l},l.viewDate=function(a){if(0===arguments.length)return f.clone();if(!a)return f=e.clone(),l;if(!("string"==typeof a||b.isMoment(a)||a instanceof Date))throw new TypeError("viewDate() parameter must be one of [string, moment or Date]");return f=da(a),K(),l},c.is("input"))g=c;else if(g=c.find(d.datepickerInput),0===g.length)g=c.find("input");else if(!g.is("input"))throw new Error('CSS class "'+d.datepickerInput+'" cannot be applied to non input element');if(c.hasClass("input-group")&&(n=0===c.find(".datepickerbutton").length?c.find(".input-group-addon"):c.find(".datepickerbutton")),!d.inline&&!g.is("input"))throw new Error("Could not initialize DateTimePicker without an input element");return e=y(),f=e.clone(),a.extend(!0,d,H()),l.options(d),pa(),la(),g.prop("disabled")&&l.disable(),g.is("input")&&0!==g.val().trim().length?aa(da(g.val().trim())):d.defaultDate&&void 0===g.attr("placeholder")&&aa(d.defaultDate),d.inline&&ga(),l};return a.fn.factoryBootstrap453_DatetimePickerControl=function(b){b=b||{};var d,e=Array.prototype.slice.call(arguments,1),f=!0,g=["destroy","hide","show","toggle"];if("object"==typeof b)return this.each(function(){var d,e=a(this);e.data("DateTimePicker")||(d=a.extend(!0,{},a.fn.factoryBootstrap453_DatetimePickerControl.defaults,b),e.data("DateTimePicker",c(e,d)))});if("string"==typeof b)return this.each(function(){var c=a(this),g=c.data("DateTimePicker");if(!g)throw new Error('bootstrap-datetimepicker("'+b+'") method was called on an element that is not using DateTimePicker');d=g[b].apply(g,e),f=d===g}),f||a.inArray(b,g)>-1?this:d;throw new TypeError("Invalid arguments for DateTimePicker: "+b)},a.fn.factoryBootstrap453_DatetimePickerControl.defaults={timeZone:"",format:!1,dayViewHeaderFormat:"MMMM YYYY",extraFormats:!1,stepping:1,minDate:!1,maxDate:!1,useCurrent:!0,collapse:!0,locale:b.locale(),defaultDate:!1,disabledDates:!1,enabledDates:!1,icons:{time:"fa fa-clock-o",date:"fa fa-calendar",up:"fa fa-arrow-up",down:"fa fa-arrow-down",previous:"fa fa-arrow-left",next:"fa fa-arrow-right",today:"fa fa-thumb-tack",clear:"fa fa-trash",close:"fa fa-times"},tooltips:{today:"Go to today",clear:"Clear selection",close:"Close the picker",selectMonth:"Select Month",prevMonth:"Previous Month",nextMonth:"Next Month",selectYear:"Select Year",prevYear:"Previous Year",nextYear:"Next Year",selectDecade:"Select Decade",prevDecade:"Previous Decade",nextDecade:"Next Decade",prevCentury:"Previous Century",nextCentury:"Next Century",pickHour:"Pick Hour",incrementHour:"Increment Hour",decrementHour:"Decrement Hour",pickMinute:"Pick Minute",incrementMinute:"Increment Minute",decrementMinute:"Decrement Minute",pickSecond:"Pick Second",incrementSecond:"Increment Second",decrementSecond:"Decrement Second",togglePeriod:"Toggle Period",selectTime:"Select Time"},useStrict:!1,sideBySide:!1,daysOfWeekDisabled:!1,calendarWeeks:!1,viewMode:"days",toolbarPlacement:"default",showTodayButton:!1,showClear:!1,showClose:!1,widgetPositioning:{horizontal:"auto",vertical:"auto"},widgetParent:null,ignoreReadonly:!1,keepOpen:!1,focusOnShow:!0,inline:!1,keepInvalid:!1,datepickerInput:".datepickerinput",keyBinds:{up:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")?this.date(b.clone().subtract(7,"d")):this.date(b.clone().add(this.stepping(),"m"))}},down:function(a){if(!a)return void this.show();var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")?this.date(b.clone().add(7,"d")):this.date(b.clone().subtract(this.stepping(),"m"))},"control up":function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")?this.date(b.clone().subtract(1,"y")):this.date(b.clone().add(1,"h"))}},"control down":function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")?this.date(b.clone().add(1,"y")):this.date(b.clone().subtract(1,"h"))}},left:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")&&this.date(b.clone().subtract(1,"d"))}},right:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")&&this.date(b.clone().add(1,"d"))}},pageUp:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")&&this.date(b.clone().subtract(1,"M"))}},pageDown:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")&&this.date(b.clone().add(1,"M"))}},enter:function(){this.hide()},escape:function(){this.hide()},"control space":function(a){a&&a.find(".timepicker").is(":visible")&&a.find('.btn[data-action="togglePeriod"]').click()},t:function(){this.date(this.getMoment())},"delete":function(){this.clear()}},debug:!1,allowInputToggle:!1,disabledTimeIntervals:!1,disabledHours:!1,enabledHours:!1,viewDate:!1},a.fn.factoryBootstrap453_DatetimePickerControl}),function(a){a(function(){a(".factory-bootstrap-453 .factory-datetimepicker").factoryBootstrap453_DatetimePickerControl(),a(".factory-bootstrap-453 .factory-datetimepicker-range-0").factoryBootstrap453_DatetimePickerControl(),a(".factory-bootstrap-453 .factory-datetimepicker-range-1").factoryBootstrap453_DatetimePickerControl({useCurrent:!1}),a(".factory-bootstrap-453 .factory-datetimepicker-range-0").on("dp.change",function(b){a(".factory-bootstrap-453 .factory-datetimepicker-range-1").data("DateTimePicker").minDate(b.date)}),a(".factory-bootstrap-453 .factory-datetimepicker-range-1").on("dp.change",function(b){a(".factory-bootstrap-453 .factory-datetimepicker-range-0").data("DateTimePicker").maxDate(b.date)})})}(jQuery);
8
  */
9
 
10
  !function(a){"use strict";if("function"==typeof define&&define.amd)define(["jquery","moment"],a);else if("object"==typeof exports)module.exports=a(require("jquery"),require("moment"));else{if("undefined"==typeof jQuery)throw"bootstrap-datetimepicker requires jQuery to be loaded first";if("undefined"==typeof moment)throw"bootstrap-datetimepicker requires Moment.js to be loaded first";a(jQuery,moment)}}(function(a,b){"use strict";if(!b)throw new Error("bootstrap-datetimepicker requires Moment.js to be loaded first");var c=function(c,d){var e,f,g,h,i,j,k,l={},m=!0,n=!1,o=!1,p=0,q=[{clsName:"days",navFnc:"M",navStep:1},{clsName:"months",navFnc:"y",navStep:1},{clsName:"years",navFnc:"y",navStep:10},{clsName:"decades",navFnc:"y",navStep:100}],r=["days","months","years","decades"],s=["top","bottom","auto"],t=["left","right","auto"],u=["default","top","bottom"],v={up:38,38:"up",down:40,40:"down",left:37,37:"left",right:39,39:"right",tab:9,9:"tab",escape:27,27:"escape",enter:13,13:"enter",pageUp:33,33:"pageUp",pageDown:34,34:"pageDown",shift:16,16:"shift",control:17,17:"control",space:32,32:"space",t:84,84:"t","delete":46,46:"delete"},w={},x=function(){return void 0!==b.tz&&void 0!==d.timeZone&&null!==d.timeZone&&""!==d.timeZone},y=function(a){var c;return c=void 0===a||null===a?b():b.isDate(a)||b.isMoment(a)?b(a):x()?b.tz(a,j,d.useStrict,d.timeZone):b(a,j,d.useStrict),x()&&c.tz(d.timeZone),c},z=function(a){if("string"!=typeof a||a.length>1)throw new TypeError("isEnabled expects a single character string parameter");switch(a){case"y":return-1!==i.indexOf("Y");case"M":return-1!==i.indexOf("M");case"d":return-1!==i.toLowerCase().indexOf("d");case"h":case"H":return-1!==i.toLowerCase().indexOf("h");case"m":return-1!==i.indexOf("m");case"s":return-1!==i.indexOf("s");default:return!1}},A=function(){return z("h")||z("m")||z("s")},B=function(){return z("y")||z("M")||z("d")},C=function(){var b=a("<thead>").append(a("<tr>").append(a("<th>").addClass("prev").attr("data-action","previous").append(a("<span>").addClass(d.icons.previous))).append(a("<th>").addClass("picker-switch").attr("data-action","pickerSwitch").attr("colspan",d.calendarWeeks?"6":"5")).append(a("<th>").addClass("next").attr("data-action","next").append(a("<span>").addClass(d.icons.next)))),c=a("<tbody>").append(a("<tr>").append(a("<td>").attr("colspan",d.calendarWeeks?"8":"7")));return[a("<div>").addClass("datepicker-days").append(a("<table>").addClass("table-condensed").append(b).append(a("<tbody>"))),a("<div>").addClass("datepicker-months").append(a("<table>").addClass("table-condensed").append(b.clone()).append(c.clone())),a("<div>").addClass("datepicker-years").append(a("<table>").addClass("table-condensed").append(b.clone()).append(c.clone())),a("<div>").addClass("datepicker-decades").append(a("<table>").addClass("table-condensed").append(b.clone()).append(c.clone()))]},D=function(){var b=a("<tr>"),c=a("<tr>"),e=a("<tr>");return z("h")&&(b.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.incrementHour}).addClass("btn").attr("data-action","incrementHours").append(a("<span>").addClass(d.icons.up)))),c.append(a("<td>").append(a("<span>").addClass("timepicker-hour").attr({"data-time-component":"hours",title:d.tooltips.pickHour}).attr("data-action","showHours"))),e.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.decrementHour}).addClass("btn").attr("data-action","decrementHours").append(a("<span>").addClass(d.icons.down))))),z("m")&&(z("h")&&(b.append(a("<td>").addClass("separator")),c.append(a("<td>").addClass("separator").html(":")),e.append(a("<td>").addClass("separator"))),b.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.incrementMinute}).addClass("btn").attr("data-action","incrementMinutes").append(a("<span>").addClass(d.icons.up)))),c.append(a("<td>").append(a("<span>").addClass("timepicker-minute").attr({"data-time-component":"minutes",title:d.tooltips.pickMinute}).attr("data-action","showMinutes"))),e.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.decrementMinute}).addClass("btn").attr("data-action","decrementMinutes").append(a("<span>").addClass(d.icons.down))))),z("s")&&(z("m")&&(b.append(a("<td>").addClass("separator")),c.append(a("<td>").addClass("separator").html(":")),e.append(a("<td>").addClass("separator"))),b.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.incrementSecond}).addClass("btn").attr("data-action","incrementSeconds").append(a("<span>").addClass(d.icons.up)))),c.append(a("<td>").append(a("<span>").addClass("timepicker-second").attr({"data-time-component":"seconds",title:d.tooltips.pickSecond}).attr("data-action","showSeconds"))),e.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.decrementSecond}).addClass("btn").attr("data-action","decrementSeconds").append(a("<span>").addClass(d.icons.down))))),h||(b.append(a("<td>").addClass("separator")),c.append(a("<td>").append(a("<button>").addClass("btn btn-primary").attr({"data-action":"togglePeriod",tabindex:"-1",title:d.tooltips.togglePeriod}))),e.append(a("<td>").addClass("separator"))),a("<div>").addClass("timepicker-picker").append(a("<table>").addClass("table-condensed").append([b,c,e]))},E=function(){var b=a("<div>").addClass("timepicker-hours").append(a("<table>").addClass("table-condensed")),c=a("<div>").addClass("timepicker-minutes").append(a("<table>").addClass("table-condensed")),d=a("<div>").addClass("timepicker-seconds").append(a("<table>").addClass("table-condensed")),e=[D()];return z("h")&&e.push(b),z("m")&&e.push(c),z("s")&&e.push(d),e},F=function(){var b=[];return d.showTodayButton&&b.push(a("<td>").append(a("<a>").attr({"data-action":"today",title:d.tooltips.today}).append(a("<span>").addClass(d.icons.today)))),!d.sideBySide&&B()&&A()&&b.push(a("<td>").append(a("<a>").attr({"data-action":"togglePicker",title:d.tooltips.selectTime}).append(a("<span>").addClass(d.icons.time)))),d.showClear&&b.push(a("<td>").append(a("<a>").attr({"data-action":"clear",title:d.tooltips.clear}).append(a("<span>").addClass(d.icons.clear)))),d.showClose&&b.push(a("<td>").append(a("<a>").attr({"data-action":"close",title:d.tooltips.close}).append(a("<span>").addClass(d.icons.close)))),a("<table>").addClass("table-condensed").append(a("<tbody>").append(a("<tr>").append(b)))},G=function(){var b=a("<div>").addClass("bootstrap-datetimepicker-widget dropdown-menu"),c=a("<div>").addClass("datepicker").append(C()),e=a("<div>").addClass("timepicker").append(E()),f=a("<ul>").addClass("list-unstyled"),g=a("<li>").addClass("picker-switch"+(d.collapse?" accordion-toggle":"")).append(F());return d.inline&&b.removeClass("dropdown-menu"),h&&b.addClass("usetwentyfour"),z("s")&&!h&&b.addClass("wider"),d.sideBySide&&B()&&A()?(b.addClass("timepicker-sbs"),"top"===d.toolbarPlacement&&b.append(g),b.append(a("<div>").addClass("row").append(c.addClass("col-md-6")).append(e.addClass("col-md-6"))),"bottom"===d.toolbarPlacement&&b.append(g),b):("top"===d.toolbarPlacement&&f.append(g),B()&&f.append(a("<li>").addClass(d.collapse&&A()?"collapse in":"").append(c)),"default"===d.toolbarPlacement&&f.append(g),A()&&f.append(a("<li>").addClass(d.collapse&&B()?"collapse":"").append(e)),"bottom"===d.toolbarPlacement&&f.append(g),b.append(f))},H=function(){var b,e={};return b=c.is("input")||d.inline?c.data():c.find("input").data(),b.dateOptions&&b.dateOptions instanceof Object&&(e=a.extend(!0,e,b.dateOptions)),a.each(d,function(a){var c="date"+a.charAt(0).toUpperCase()+a.slice(1);void 0!==b[c]&&(e[a]=b[c])}),e},I=function(){var b,e=(n||c).position(),f=(n||c).offset(),g=d.widgetPositioning.vertical,h=d.widgetPositioning.horizontal;if(d.widgetParent)b=d.widgetParent.append(o);else if(c.is("input"))b=c.after(o).parent();else{if(d.inline)return void(b=c.append(o));b=c,c.children().first().after(o)}if("auto"===g&&(g=f.top+1.5*o.height()>=a(window).height()+a(window).scrollTop()&&o.height()+c.outerHeight()<f.top?"top":"bottom"),"auto"===h&&(h=b.width()<f.left+o.outerWidth()/2&&f.left+o.outerWidth()>a(window).width()?"right":"left"),"top"===g?o.addClass("top").removeClass("bottom"):o.addClass("bottom").removeClass("top"),"right"===h?o.addClass("pull-right"):o.removeClass("pull-right"),"static"===b.css("position")&&(b=b.parents().filter(function(){return"static"!==a(this).css("position")}).first()),0===b.length)throw new Error("datetimepicker component should be placed within a non-static positioned container");o.css({top:"top"===g?"auto":e.top+c.outerHeight(),bottom:"top"===g?b.outerHeight()-(b===c?0:e.top):"auto",left:"left"===h?b===c?0:e.left:"auto",right:"left"===h?"auto":b.outerWidth()-c.outerWidth()-(b===c?0:e.left)})},J=function(a){"dp.change"===a.type&&(a.date&&a.date.isSame(a.oldDate)||!a.date&&!a.oldDate)||c.trigger(a)},K=function(a){"y"===a&&(a="YYYY"),J({type:"dp.update",change:a,viewDate:f.clone()})},L=function(a){o&&(a&&(k=Math.max(p,Math.min(3,k+a))),o.find(".datepicker > div").hide().filter(".datepicker-"+q[k].clsName).show())},M=function(){var b=a("<tr>"),c=f.clone().startOf("w").startOf("d");for(d.calendarWeeks===!0&&b.append(a("<th>").addClass("cw").text("#"));c.isBefore(f.clone().endOf("w"));)b.append(a("<th>").addClass("dow").text(c.format("dd"))),c.add(1,"d");o.find(".datepicker-days thead").append(b)},N=function(a){return d.disabledDates[a.format("YYYY-MM-DD")]===!0},O=function(a){return d.enabledDates[a.format("YYYY-MM-DD")]===!0},P=function(a){return d.disabledHours[a.format("H")]===!0},Q=function(a){return d.enabledHours[a.format("H")]===!0},R=function(b,c){if(!b.isValid())return!1;if(d.disabledDates&&"d"===c&&N(b))return!1;if(d.enabledDates&&"d"===c&&!O(b))return!1;if(d.minDate&&b.isBefore(d.minDate,c))return!1;if(d.maxDate&&b.isAfter(d.maxDate,c))return!1;if(d.daysOfWeekDisabled&&"d"===c&&-1!==d.daysOfWeekDisabled.indexOf(b.day()))return!1;if(d.disabledHours&&("h"===c||"m"===c||"s"===c)&&P(b))return!1;if(d.enabledHours&&("h"===c||"m"===c||"s"===c)&&!Q(b))return!1;if(d.disabledTimeIntervals&&("h"===c||"m"===c||"s"===c)){var e=!1;if(a.each(d.disabledTimeIntervals,function(){return b.isBetween(this[0],this[1])?(e=!0,!1):void 0}),e)return!1}return!0},S=function(){for(var b=[],c=f.clone().startOf("y").startOf("d");c.isSame(f,"y");)b.push(a("<span>").attr("data-action","selectMonth").addClass("month").text(c.format("MMM"))),c.add(1,"M");o.find(".datepicker-months td").empty().append(b)},T=function(){var b=o.find(".datepicker-months"),c=b.find("th"),g=b.find("tbody").find("span");c.eq(0).find("span").attr("title",d.tooltips.prevYear),c.eq(1).attr("title",d.tooltips.selectYear),c.eq(2).find("span").attr("title",d.tooltips.nextYear),b.find(".disabled").removeClass("disabled"),R(f.clone().subtract(1,"y"),"y")||c.eq(0).addClass("disabled"),c.eq(1).text(f.year()),R(f.clone().add(1,"y"),"y")||c.eq(2).addClass("disabled"),g.removeClass("active"),e.isSame(f,"y")&&!m&&g.eq(e.month()).addClass("active"),g.each(function(b){R(f.clone().month(b),"M")||a(this).addClass("disabled")})},U=function(){var a=o.find(".datepicker-years"),b=a.find("th"),c=f.clone().subtract(5,"y"),g=f.clone().add(6,"y"),h="";for(b.eq(0).find("span").attr("title",d.tooltips.prevDecade),b.eq(1).attr("title",d.tooltips.selectDecade),b.eq(2).find("span").attr("title",d.tooltips.nextDecade),a.find(".disabled").removeClass("disabled"),d.minDate&&d.minDate.isAfter(c,"y")&&b.eq(0).addClass("disabled"),b.eq(1).text(c.year()+"-"+g.year()),d.maxDate&&d.maxDate.isBefore(g,"y")&&b.eq(2).addClass("disabled");!c.isAfter(g,"y");)h+='<span data-action="selectYear" class="year'+(c.isSame(e,"y")&&!m?" active":"")+(R(c,"y")?"":" disabled")+'">'+c.year()+"</span>",c.add(1,"y");a.find("td").html(h)},V=function(){var a,c=o.find(".datepicker-decades"),g=c.find("th"),h=b({y:f.year()-f.year()%100-1}),i=h.clone().add(100,"y"),j=h.clone(),k=!1,l=!1,m="";for(g.eq(0).find("span").attr("title",d.tooltips.prevCentury),g.eq(2).find("span").attr("title",d.tooltips.nextCentury),c.find(".disabled").removeClass("disabled"),(h.isSame(b({y:1900}))||d.minDate&&d.minDate.isAfter(h,"y"))&&g.eq(0).addClass("disabled"),g.eq(1).text(h.year()+"-"+i.year()),(h.isSame(b({y:2e3}))||d.maxDate&&d.maxDate.isBefore(i,"y"))&&g.eq(2).addClass("disabled");!h.isAfter(i,"y");)a=h.year()+12,k=d.minDate&&d.minDate.isAfter(h,"y")&&d.minDate.year()<=a,l=d.maxDate&&d.maxDate.isAfter(h,"y")&&d.maxDate.year()<=a,m+='<span data-action="selectDecade" class="decade'+(e.isAfter(h)&&e.year()<=a?" active":"")+(R(h,"y")||k||l?"":" disabled")+'" data-selection="'+(h.year()+6)+'">'+(h.year()+1)+" - "+(h.year()+12)+"</span>",h.add(12,"y");m+="<span></span><span></span><span></span>",c.find("td").html(m),g.eq(1).text(j.year()+1+"-"+h.year())},W=function(){var b,c,g,h=o.find(".datepicker-days"),i=h.find("th"),j=[],k=[];if(B()){for(i.eq(0).find("span").attr("title",d.tooltips.prevMonth),i.eq(1).attr("title",d.tooltips.selectMonth),i.eq(2).find("span").attr("title",d.tooltips.nextMonth),h.find(".disabled").removeClass("disabled"),i.eq(1).text(f.format(d.dayViewHeaderFormat)),R(f.clone().subtract(1,"M"),"M")||i.eq(0).addClass("disabled"),R(f.clone().add(1,"M"),"M")||i.eq(2).addClass("disabled"),b=f.clone().startOf("M").startOf("w").startOf("d"),g=0;42>g;g++)0===b.weekday()&&(c=a("<tr>"),d.calendarWeeks&&c.append('<td class="cw">'+b.week()+"</td>"),j.push(c)),k=["day"],b.isBefore(f,"M")&&k.push("old"),b.isAfter(f,"M")&&k.push("new"),b.isSame(e,"d")&&!m&&k.push("active"),R(b,"d")||k.push("disabled"),b.isSame(y(),"d")&&k.push("today"),(0===b.day()||6===b.day())&&k.push("weekend"),J({type:"dp.classify",date:b,classNames:k}),c.append('<td data-action="selectDay" data-day="'+b.format("L")+'" class="'+k.join(" ")+'">'+b.date()+"</td>"),b.add(1,"d");h.find("tbody").empty().append(j),T(),U(),V()}},X=function(){var b=o.find(".timepicker-hours table"),c=f.clone().startOf("d"),d=[],e=a("<tr>");for(f.hour()>11&&!h&&c.hour(12);c.isSame(f,"d")&&(h||f.hour()<12&&c.hour()<12||f.hour()>11);)c.hour()%4===0&&(e=a("<tr>"),d.push(e)),e.append('<td data-action="selectHour" class="hour'+(R(c,"h")?"":" disabled")+'">'+c.format(h?"HH":"hh")+"</td>"),c.add(1,"h");b.empty().append(d)},Y=function(){for(var b=o.find(".timepicker-minutes table"),c=f.clone().startOf("h"),e=[],g=a("<tr>"),h=1===d.stepping?5:d.stepping;f.isSame(c,"h");)c.minute()%(4*h)===0&&(g=a("<tr>"),e.push(g)),g.append('<td data-action="selectMinute" class="minute'+(R(c,"m")?"":" disabled")+'">'+c.format("mm")+"</td>"),c.add(h,"m");b.empty().append(e)},Z=function(){for(var b=o.find(".timepicker-seconds table"),c=f.clone().startOf("m"),d=[],e=a("<tr>");f.isSame(c,"m");)c.second()%20===0&&(e=a("<tr>"),d.push(e)),e.append('<td data-action="selectSecond" class="second'+(R(c,"s")?"":" disabled")+'">'+c.format("ss")+"</td>"),c.add(5,"s");b.empty().append(d)},$=function(){var a,b,c=o.find(".timepicker span[data-time-component]");h||(a=o.find(".timepicker [data-action=togglePeriod]"),b=e.clone().add(e.hours()>=12?-12:12,"h"),a.text(e.format("A")),R(b,"h")?a.removeClass("disabled"):a.addClass("disabled")),c.filter("[data-time-component=hours]").text(e.format(h?"HH":"hh")),c.filter("[data-time-component=minutes]").text(e.format("mm")),c.filter("[data-time-component=seconds]").text(e.format("ss")),X(),Y(),Z()},_=function(){o&&(W(),$())},aa=function(a){var b=m?null:e;if(!a)return m=!0,g.val(""),c.data("date",""),J({type:"dp.change",date:!1,oldDate:b}),void _();if(a=a.clone().locale(d.locale),x()&&a.tz(d.timeZone),1!==d.stepping)for(a.minutes(Math.round(a.minutes()/d.stepping)*d.stepping).seconds(0);d.minDate&&a.isBefore(d.minDate);)a.add(d.stepping,"minutes");R(a)?(e=a,f=e.clone(),g.val(e.format(i)),c.data("date",e.format(i)),m=!1,_(),J({type:"dp.change",date:e.clone(),oldDate:b})):(d.keepInvalid?J({type:"dp.change",date:a,oldDate:b}):g.val(m?"":e.format(i)),J({type:"dp.error",date:a,oldDate:b}))},ba=function(){var b=!1;return o?(o.find(".collapse").each(function(){var c=a(this).data("collapse");return c&&c.transitioning?(b=!0,!1):!0}),b?l:(n&&n.hasClass("btn")&&n.toggleClass("active"),o.hide(),a(window).off("resize",I),o.off("click","[data-action]"),o.off("mousedown",!1),o.remove(),o=!1,J({type:"dp.hide",date:e.clone()}),g.blur(),f=e.clone(),l)):l},ca=function(){aa(null)},da=function(a){return void 0===d.parseInputDate?(!b.isMoment(a)||a instanceof Date)&&(a=y(a)):a=d.parseInputDate(a),a},ea={next:function(){var a=q[k].navFnc;f.add(q[k].navStep,a),W(),K(a)},previous:function(){var a=q[k].navFnc;f.subtract(q[k].navStep,a),W(),K(a)},pickerSwitch:function(){L(1)},selectMonth:function(b){var c=a(b.target).closest("tbody").find("span").index(a(b.target));f.month(c),k===p?(aa(e.clone().year(f.year()).month(f.month())),d.inline||ba()):(L(-1),W()),K("M")},selectYear:function(b){var c=parseInt(a(b.target).text(),10)||0;f.year(c),k===p?(aa(e.clone().year(f.year())),d.inline||ba()):(L(-1),W()),K("YYYY")},selectDecade:function(b){var c=parseInt(a(b.target).data("selection"),10)||0;f.year(c),k===p?(aa(e.clone().year(f.year())),d.inline||ba()):(L(-1),W()),K("YYYY")},selectDay:function(b){var c=f.clone();a(b.target).is(".old")&&c.subtract(1,"M"),a(b.target).is(".new")&&c.add(1,"M"),aa(c.date(parseInt(a(b.target).text(),10))),A()||d.keepOpen||d.inline||ba()},incrementHours:function(){var a=e.clone().add(1,"h");R(a,"h")&&aa(a)},incrementMinutes:function(){var a=e.clone().add(d.stepping,"m");R(a,"m")&&aa(a)},incrementSeconds:function(){var a=e.clone().add(1,"s");R(a,"s")&&aa(a)},decrementHours:function(){var a=e.clone().subtract(1,"h");R(a,"h")&&aa(a)},decrementMinutes:function(){var a=e.clone().subtract(d.stepping,"m");R(a,"m")&&aa(a)},decrementSeconds:function(){var a=e.clone().subtract(1,"s");R(a,"s")&&aa(a)},togglePeriod:function(){aa(e.clone().add(e.hours()>=12?-12:12,"h"))},togglePicker:function(b){var c,e=a(b.target),f=e.closest("ul"),g=f.find(".in"),h=f.find(".collapse:not(.in)");if(g&&g.length){if(c=g.data("collapse"),c&&c.transitioning)return;g.collapse?(g.collapse("hide"),h.collapse("show")):(g.removeClass("in"),h.addClass("in")),e.is("span")?e.toggleClass(d.icons.time+" "+d.icons.date):e.find("span").toggleClass(d.icons.time+" "+d.icons.date)}},showPicker:function(){o.find(".timepicker > div:not(.timepicker-picker)").hide(),o.find(".timepicker .timepicker-picker").show()},showHours:function(){o.find(".timepicker .timepicker-picker").hide(),o.find(".timepicker .timepicker-hours").show()},showMinutes:function(){o.find(".timepicker .timepicker-picker").hide(),o.find(".timepicker .timepicker-minutes").show()},showSeconds:function(){o.find(".timepicker .timepicker-picker").hide(),o.find(".timepicker .timepicker-seconds").show()},selectHour:function(b){var c=parseInt(a(b.target).text(),10);h||(e.hours()>=12?12!==c&&(c+=12):12===c&&(c=0)),aa(e.clone().hours(c)),ea.showPicker.call(l)},selectMinute:function(b){aa(e.clone().minutes(parseInt(a(b.target).text(),10))),ea.showPicker.call(l)},selectSecond:function(b){aa(e.clone().seconds(parseInt(a(b.target).text(),10))),ea.showPicker.call(l)},clear:ca,today:function(){var a=y();R(a,"d")&&aa(a)},close:ba},fa=function(b){return a(b.currentTarget).is(".disabled")?!1:(ea[a(b.currentTarget).data("action")].apply(l,arguments),!1)},ga=function(){var b,c={year:function(a){return a.month(0).date(1).hours(0).seconds(0).minutes(0)},month:function(a){return a.date(1).hours(0).seconds(0).minutes(0)},day:function(a){return a.hours(0).seconds(0).minutes(0)},hour:function(a){return a.seconds(0).minutes(0)},minute:function(a){return a.seconds(0)}};return g.prop("disabled")||!d.ignoreReadonly&&g.prop("readonly")||o?l:(void 0!==g.val()&&0!==g.val().trim().length?aa(da(g.val().trim())):m&&d.useCurrent&&(d.inline||g.is("input")&&0===g.val().trim().length)&&(b=y(),"string"==typeof d.useCurrent&&(b=c[d.useCurrent](b)),aa(b)),o=G(),M(),S(),o.find(".timepicker-hours").hide(),o.find(".timepicker-minutes").hide(),o.find(".timepicker-seconds").hide(),_(),L(),a(window).on("resize",I),o.on("click","[data-action]",fa),o.on("mousedown",!1),n&&n.hasClass("btn")&&n.toggleClass("active"),I(),o.show(),d.focusOnShow&&!g.is(":focus")&&g.focus(),J({type:"dp.show"}),l)},ha=function(){return o?ba():ga()},ia=function(a){var b,c,e,f,g=null,h=[],i={},j=a.which,k="p";w[j]=k;for(b in w)w.hasOwnProperty(b)&&w[b]===k&&(h.push(b),parseInt(b,10)!==j&&(i[b]=!0));for(b in d.keyBinds)if(d.keyBinds.hasOwnProperty(b)&&"function"==typeof d.keyBinds[b]&&(e=b.split(" "),e.length===h.length&&v[j]===e[e.length-1])){for(f=!0,c=e.length-2;c>=0;c--)if(!(v[e[c]]in i)){f=!1;break}if(f){g=d.keyBinds[b];break}}g&&(g.call(l,o),a.stopPropagation(),a.preventDefault())},ja=function(a){w[a.which]="r",a.stopPropagation(),a.preventDefault()},ka=function(b){var c=a(b.target).val().trim(),d=c?da(c):null;return aa(d),b.stopImmediatePropagation(),!1},la=function(){g.on({change:ka,blur:d.debug?"":ba,keydown:ia,keyup:ja,focus:d.allowInputToggle?ga:""}),c.is("input")?g.on({focus:ga}):n&&(n.on("click",ha),n.on("mousedown",!1))},ma=function(){g.off({change:ka,blur:blur,keydown:ia,keyup:ja,focus:d.allowInputToggle?ba:""}),c.is("input")?g.off({focus:ga}):n&&(n.off("click",ha),n.off("mousedown",!1))},na=function(b){var c={};return a.each(b,function(){var a=da(this);a.isValid()&&(c[a.format("YYYY-MM-DD")]=!0)}),Object.keys(c).length?c:!1},oa=function(b){var c={};return a.each(b,function(){c[this]=!0}),Object.keys(c).length?c:!1},pa=function(){var a=d.format||"L LT";i=a.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,function(a){var b=e.localeData().longDateFormat(a)||a;return b.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,function(a){return e.localeData().longDateFormat(a)||a})}),j=d.extraFormats?d.extraFormats.slice():[],j.indexOf(a)<0&&j.indexOf(i)<0&&j.push(i),h=i.toLowerCase().indexOf("a")<1&&i.replace(/\[.*?\]/g,"").indexOf("h")<1,z("y")&&(p=2),z("M")&&(p=1),z("d")&&(p=0),k=Math.max(p,k),m||aa(e)};if(l.destroy=function(){ba(),ma(),c.removeData("DateTimePicker"),c.removeData("date")},l.toggle=ha,l.show=ga,l.hide=ba,l.disable=function(){return ba(),n&&n.hasClass("btn")&&n.addClass("disabled"),g.prop("disabled",!0),l},l.enable=function(){return n&&n.hasClass("btn")&&n.removeClass("disabled"),g.prop("disabled",!1),l},l.ignoreReadonly=function(a){if(0===arguments.length)return d.ignoreReadonly;if("boolean"!=typeof a)throw new TypeError("ignoreReadonly () expects a boolean parameter");return d.ignoreReadonly=a,l},l.options=function(b){if(0===arguments.length)return a.extend(!0,{},d);if(!(b instanceof Object))throw new TypeError("options() options parameter should be an object");return a.extend(!0,d,b),a.each(d,function(a,b){if(void 0===l[a])throw new TypeError("option "+a+" is not recognized!");l[a](b)}),l},l.date=function(a){if(0===arguments.length)return m?null:e.clone();if(!(null===a||"string"==typeof a||b.isMoment(a)||a instanceof Date))throw new TypeError("date() parameter must be one of [null, string, moment or Date]");return aa(null===a?null:da(a)),l},l.format=function(a){if(0===arguments.length)return d.format;if("string"!=typeof a&&("boolean"!=typeof a||a!==!1))throw new TypeError("format() expects a string or boolean:false parameter "+a);return d.format=a,i&&pa(),l},l.timeZone=function(a){if(0===arguments.length)return d.timeZone;if("string"!=typeof a)throw new TypeError("newZone() expects a string parameter");return d.timeZone=a,l},l.dayViewHeaderFormat=function(a){if(0===arguments.length)return d.dayViewHeaderFormat;if("string"!=typeof a)throw new TypeError("dayViewHeaderFormat() expects a string parameter");return d.dayViewHeaderFormat=a,l},l.extraFormats=function(a){if(0===arguments.length)return d.extraFormats;if(a!==!1&&!(a instanceof Array))throw new TypeError("extraFormats() expects an array or false parameter");return d.extraFormats=a,j&&pa(),l},l.disabledDates=function(b){if(0===arguments.length)return d.disabledDates?a.extend({},d.disabledDates):d.disabledDates;if(!b)return d.disabledDates=!1,_(),l;if(!(b instanceof Array))throw new TypeError("disabledDates() expects an array parameter");return d.disabledDates=na(b),d.enabledDates=!1,_(),l},l.enabledDates=function(b){if(0===arguments.length)return d.enabledDates?a.extend({},d.enabledDates):d.enabledDates;if(!b)return d.enabledDates=!1,_(),l;if(!(b instanceof Array))throw new TypeError("enabledDates() expects an array parameter");return d.enabledDates=na(b),d.disabledDates=!1,_(),l},l.daysOfWeekDisabled=function(a){if(0===arguments.length)return d.daysOfWeekDisabled.splice(0);if("boolean"==typeof a&&!a)return d.daysOfWeekDisabled=!1,_(),l;if(!(a instanceof Array))throw new TypeError("daysOfWeekDisabled() expects an array parameter");if(d.daysOfWeekDisabled=a.reduce(function(a,b){return b=parseInt(b,10),b>6||0>b||isNaN(b)?a:(-1===a.indexOf(b)&&a.push(b),a)},[]).sort(),d.useCurrent&&!d.keepInvalid){for(var b=0;!R(e,"d");){if(e.add(1,"d"),31===b)throw"Tried 31 times to find a valid date";b++}aa(e)}return _(),l},l.maxDate=function(a){if(0===arguments.length)return d.maxDate?d.maxDate.clone():d.maxDate;if("boolean"==typeof a&&a===!1)return d.maxDate=!1,_(),l;"string"==typeof a&&("now"===a||"moment"===a)&&(a=y());var b=da(a);if(!b.isValid())throw new TypeError("maxDate() Could not parse date parameter: "+a);if(d.minDate&&b.isBefore(d.minDate))throw new TypeError("maxDate() date parameter is before options.minDate: "+b.format(i));return d.maxDate=b,d.useCurrent&&!d.keepInvalid&&e.isAfter(a)&&aa(d.maxDate),f.isAfter(b)&&(f=b.clone().subtract(d.stepping,"m")),_(),l},l.minDate=function(a){if(0===arguments.length)return d.minDate?d.minDate.clone():d.minDate;if("boolean"==typeof a&&a===!1)return d.minDate=!1,_(),l;"string"==typeof a&&("now"===a||"moment"===a)&&(a=y());var b=da(a);if(!b.isValid())throw new TypeError("minDate() Could not parse date parameter: "+a);if(d.maxDate&&b.isAfter(d.maxDate))throw new TypeError("minDate() date parameter is after options.maxDate: "+b.format(i));return d.minDate=b,d.useCurrent&&!d.keepInvalid&&e.isBefore(a)&&aa(d.minDate),f.isBefore(b)&&(f=b.clone().add(d.stepping,"m")),_(),l},l.defaultDate=function(a){if(0===arguments.length)return d.defaultDate?d.defaultDate.clone():d.defaultDate;if(!a)return d.defaultDate=!1,l;"string"==typeof a&&(a="now"===a||"moment"===a?y():y(a));var b=da(a);if(!b.isValid())throw new TypeError("defaultDate() Could not parse date parameter: "+a);if(!R(b))throw new TypeError("defaultDate() date passed is invalid according to component setup validations");return d.defaultDate=b,(d.defaultDate&&d.inline||""===g.val().trim())&&aa(d.defaultDate),l},l.locale=function(a){if(0===arguments.length)return d.locale;if(!b.localeData(a))throw new TypeError("locale() locale "+a+" is not loaded from moment locales!");return d.locale=a,e.locale(d.locale),f.locale(d.locale),i&&pa(),o&&(ba(),ga()),l},l.stepping=function(a){return 0===arguments.length?d.stepping:(a=parseInt(a,10),(isNaN(a)||1>a)&&(a=1),d.stepping=a,l)},l.useCurrent=function(a){var b=["year","month","day","hour","minute"];if(0===arguments.length)return d.useCurrent;if("boolean"!=typeof a&&"string"!=typeof a)throw new TypeError("useCurrent() expects a boolean or string parameter");if("string"==typeof a&&-1===b.indexOf(a.toLowerCase()))throw new TypeError("useCurrent() expects a string parameter of "+b.join(", "));return d.useCurrent=a,l},l.collapse=function(a){if(0===arguments.length)return d.collapse;if("boolean"!=typeof a)throw new TypeError("collapse() expects a boolean parameter");return d.collapse===a?l:(d.collapse=a,o&&(ba(),ga()),l)},l.icons=function(b){if(0===arguments.length)return a.extend({},d.icons);if(!(b instanceof Object))throw new TypeError("icons() expects parameter to be an Object");return a.extend(d.icons,b),o&&(ba(),ga()),l},l.tooltips=function(b){if(0===arguments.length)return a.extend({},d.tooltips);if(!(b instanceof Object))throw new TypeError("tooltips() expects parameter to be an Object");return a.extend(d.tooltips,b),o&&(ba(),ga()),l},l.useStrict=function(a){if(0===arguments.length)return d.useStrict;if("boolean"!=typeof a)throw new TypeError("useStrict() expects a boolean parameter");return d.useStrict=a,l},l.sideBySide=function(a){if(0===arguments.length)return d.sideBySide;if("boolean"!=typeof a)throw new TypeError("sideBySide() expects a boolean parameter");return d.sideBySide=a,o&&(ba(),ga()),l},l.viewMode=function(a){if(0===arguments.length)return d.viewMode;if("string"!=typeof a)throw new TypeError("viewMode() expects a string parameter");if(-1===r.indexOf(a))throw new TypeError("viewMode() parameter must be one of ("+r.join(", ")+") value");return d.viewMode=a,k=Math.max(r.indexOf(a),p),L(),l},l.toolbarPlacement=function(a){if(0===arguments.length)return d.toolbarPlacement;if("string"!=typeof a)throw new TypeError("toolbarPlacement() expects a string parameter");if(-1===u.indexOf(a))throw new TypeError("toolbarPlacement() parameter must be one of ("+u.join(", ")+") value");return d.toolbarPlacement=a,o&&(ba(),ga()),l},l.widgetPositioning=function(b){if(0===arguments.length)return a.extend({},d.widgetPositioning);if("[object Object]"!=={}.toString.call(b))throw new TypeError("widgetPositioning() expects an object variable");if(b.horizontal){if("string"!=typeof b.horizontal)throw new TypeError("widgetPositioning() horizontal variable must be a string");if(b.horizontal=b.horizontal.toLowerCase(),-1===t.indexOf(b.horizontal))throw new TypeError("widgetPositioning() expects horizontal parameter to be one of ("+t.join(", ")+")");d.widgetPositioning.horizontal=b.horizontal}if(b.vertical){if("string"!=typeof b.vertical)throw new TypeError("widgetPositioning() vertical variable must be a string");if(b.vertical=b.vertical.toLowerCase(),-1===s.indexOf(b.vertical))throw new TypeError("widgetPositioning() expects vertical parameter to be one of ("+s.join(", ")+")");d.widgetPositioning.vertical=b.vertical}return _(),l},l.calendarWeeks=function(a){if(0===arguments.length)return d.calendarWeeks;if("boolean"!=typeof a)throw new TypeError("calendarWeeks() expects parameter to be a boolean value");return d.calendarWeeks=a,_(),l},l.showTodayButton=function(a){if(0===arguments.length)return d.showTodayButton;if("boolean"!=typeof a)throw new TypeError("showTodayButton() expects a boolean parameter");return d.showTodayButton=a,o&&(ba(),ga()),l},l.showClear=function(a){if(0===arguments.length)return d.showClear;if("boolean"!=typeof a)throw new TypeError("showClear() expects a boolean parameter");return d.showClear=a,o&&(ba(),ga()),l},l.widgetParent=function(b){if(0===arguments.length)return d.widgetParent;if("string"==typeof b&&(b=a(b)),null!==b&&"string"!=typeof b&&!(b instanceof a))throw new TypeError("widgetParent() expects a string or a jQuery object parameter");return d.widgetParent=b,o&&(ba(),ga()),l},l.keepOpen=function(a){if(0===arguments.length)return d.keepOpen;if("boolean"!=typeof a)throw new TypeError("keepOpen() expects a boolean parameter");return d.keepOpen=a,l},l.focusOnShow=function(a){if(0===arguments.length)return d.focusOnShow;if("boolean"!=typeof a)throw new TypeError("focusOnShow() expects a boolean parameter");return d.focusOnShow=a,l},l.inline=function(a){if(0===arguments.length)return d.inline;if("boolean"!=typeof a)throw new TypeError("inline() expects a boolean parameter");return d.inline=a,l},l.clear=function(){return ca(),l},l.keyBinds=function(a){return 0===arguments.length?d.keyBinds:(d.keyBinds=a,l)},l.getMoment=function(a){return y(a)},l.debug=function(a){if("boolean"!=typeof a)throw new TypeError("debug() expects a boolean parameter");return d.debug=a,l},l.allowInputToggle=function(a){if(0===arguments.length)return d.allowInputToggle;if("boolean"!=typeof a)throw new TypeError("allowInputToggle() expects a boolean parameter");return d.allowInputToggle=a,l},l.showClose=function(a){if(0===arguments.length)return d.showClose;if("boolean"!=typeof a)throw new TypeError("showClose() expects a boolean parameter");return d.showClose=a,l},l.keepInvalid=function(a){if(0===arguments.length)return d.keepInvalid;if("boolean"!=typeof a)throw new TypeError("keepInvalid() expects a boolean parameter");
11
+ return d.keepInvalid=a,l},l.datepickerInput=function(a){if(0===arguments.length)return d.datepickerInput;if("string"!=typeof a)throw new TypeError("datepickerInput() expects a string parameter");return d.datepickerInput=a,l},l.parseInputDate=function(a){if(0===arguments.length)return d.parseInputDate;if("function"!=typeof a)throw new TypeError("parseInputDate() sholud be as function");return d.parseInputDate=a,l},l.disabledTimeIntervals=function(b){if(0===arguments.length)return d.disabledTimeIntervals?a.extend({},d.disabledTimeIntervals):d.disabledTimeIntervals;if(!b)return d.disabledTimeIntervals=!1,_(),l;if(!(b instanceof Array))throw new TypeError("disabledTimeIntervals() expects an array parameter");return d.disabledTimeIntervals=b,_(),l},l.disabledHours=function(b){if(0===arguments.length)return d.disabledHours?a.extend({},d.disabledHours):d.disabledHours;if(!b)return d.disabledHours=!1,_(),l;if(!(b instanceof Array))throw new TypeError("disabledHours() expects an array parameter");if(d.disabledHours=oa(b),d.enabledHours=!1,d.useCurrent&&!d.keepInvalid){for(var c=0;!R(e,"h");){if(e.add(1,"h"),24===c)throw"Tried 24 times to find a valid date";c++}aa(e)}return _(),l},l.enabledHours=function(b){if(0===arguments.length)return d.enabledHours?a.extend({},d.enabledHours):d.enabledHours;if(!b)return d.enabledHours=!1,_(),l;if(!(b instanceof Array))throw new TypeError("enabledHours() expects an array parameter");if(d.enabledHours=oa(b),d.disabledHours=!1,d.useCurrent&&!d.keepInvalid){for(var c=0;!R(e,"h");){if(e.add(1,"h"),24===c)throw"Tried 24 times to find a valid date";c++}aa(e)}return _(),l},l.viewDate=function(a){if(0===arguments.length)return f.clone();if(!a)return f=e.clone(),l;if(!("string"==typeof a||b.isMoment(a)||a instanceof Date))throw new TypeError("viewDate() parameter must be one of [string, moment or Date]");return f=da(a),K(),l},c.is("input"))g=c;else if(g=c.find(d.datepickerInput),0===g.length)g=c.find("input");else if(!g.is("input"))throw new Error('CSS class "'+d.datepickerInput+'" cannot be applied to non input element');if(c.hasClass("input-group")&&(n=0===c.find(".datepickerbutton").length?c.find(".input-group-addon"):c.find(".datepickerbutton")),!d.inline&&!g.is("input"))throw new Error("Could not initialize DateTimePicker without an input element");return e=y(),f=e.clone(),a.extend(!0,d,H()),l.options(d),pa(),la(),g.prop("disabled")&&l.disable(),g.is("input")&&0!==g.val().trim().length?aa(da(g.val().trim())):d.defaultDate&&void 0===g.attr("placeholder")&&aa(d.defaultDate),d.inline&&ga(),l};return a.fn.factoryBootstrap454_DatetimePickerControl=function(b){b=b||{};var d,e=Array.prototype.slice.call(arguments,1),f=!0,g=["destroy","hide","show","toggle"];if("object"==typeof b)return this.each(function(){var d,e=a(this);e.data("DateTimePicker")||(d=a.extend(!0,{},a.fn.factoryBootstrap454_DatetimePickerControl.defaults,b),e.data("DateTimePicker",c(e,d)))});if("string"==typeof b)return this.each(function(){var c=a(this),g=c.data("DateTimePicker");if(!g)throw new Error('bootstrap-datetimepicker("'+b+'") method was called on an element that is not using DateTimePicker');d=g[b].apply(g,e),f=d===g}),f||a.inArray(b,g)>-1?this:d;throw new TypeError("Invalid arguments for DateTimePicker: "+b)},a.fn.factoryBootstrap454_DatetimePickerControl.defaults={timeZone:"",format:!1,dayViewHeaderFormat:"MMMM YYYY",extraFormats:!1,stepping:1,minDate:!1,maxDate:!1,useCurrent:!0,collapse:!0,locale:b.locale(),defaultDate:!1,disabledDates:!1,enabledDates:!1,icons:{time:"fa fa-clock-o",date:"fa fa-calendar",up:"fa fa-arrow-up",down:"fa fa-arrow-down",previous:"fa fa-arrow-left",next:"fa fa-arrow-right",today:"fa fa-thumb-tack",clear:"fa fa-trash",close:"fa fa-times"},tooltips:{today:"Go to today",clear:"Clear selection",close:"Close the picker",selectMonth:"Select Month",prevMonth:"Previous Month",nextMonth:"Next Month",selectYear:"Select Year",prevYear:"Previous Year",nextYear:"Next Year",selectDecade:"Select Decade",prevDecade:"Previous Decade",nextDecade:"Next Decade",prevCentury:"Previous Century",nextCentury:"Next Century",pickHour:"Pick Hour",incrementHour:"Increment Hour",decrementHour:"Decrement Hour",pickMinute:"Pick Minute",incrementMinute:"Increment Minute",decrementMinute:"Decrement Minute",pickSecond:"Pick Second",incrementSecond:"Increment Second",decrementSecond:"Decrement Second",togglePeriod:"Toggle Period",selectTime:"Select Time"},useStrict:!1,sideBySide:!1,daysOfWeekDisabled:!1,calendarWeeks:!1,viewMode:"days",toolbarPlacement:"default",showTodayButton:!1,showClear:!1,showClose:!1,widgetPositioning:{horizontal:"auto",vertical:"auto"},widgetParent:null,ignoreReadonly:!1,keepOpen:!1,focusOnShow:!0,inline:!1,keepInvalid:!1,datepickerInput:".datepickerinput",keyBinds:{up:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")?this.date(b.clone().subtract(7,"d")):this.date(b.clone().add(this.stepping(),"m"))}},down:function(a){if(!a)return void this.show();var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")?this.date(b.clone().add(7,"d")):this.date(b.clone().subtract(this.stepping(),"m"))},"control up":function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")?this.date(b.clone().subtract(1,"y")):this.date(b.clone().add(1,"h"))}},"control down":function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")?this.date(b.clone().add(1,"y")):this.date(b.clone().subtract(1,"h"))}},left:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")&&this.date(b.clone().subtract(1,"d"))}},right:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")&&this.date(b.clone().add(1,"d"))}},pageUp:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")&&this.date(b.clone().subtract(1,"M"))}},pageDown:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")&&this.date(b.clone().add(1,"M"))}},enter:function(){this.hide()},escape:function(){this.hide()},"control space":function(a){a&&a.find(".timepicker").is(":visible")&&a.find('.btn[data-action="togglePeriod"]').click()},t:function(){this.date(this.getMoment())},"delete":function(){this.clear()}},debug:!1,allowInputToggle:!1,disabledTimeIntervals:!1,disabledHours:!1,enabledHours:!1,viewDate:!1},a.fn.factoryBootstrap454_DatetimePickerControl}),function(a){a(function(){a(".factory-bootstrap-454 .factory-datetimepicker").factoryBootstrap454_DatetimePickerControl(),a(".factory-bootstrap-454 .factory-datetimepicker-range-0").factoryBootstrap454_DatetimePickerControl(),a(".factory-bootstrap-454 .factory-datetimepicker-range-1").factoryBootstrap454_DatetimePickerControl({useCurrent:!1}),a(".factory-bootstrap-454 .factory-datetimepicker-range-0").on("dp.change",function(b){a(".factory-bootstrap-454 .factory-datetimepicker-range-1").data("DateTimePicker").minDate(b.date)}),a(".factory-bootstrap-454 .factory-datetimepicker-range-1").on("dp.change",function(b){a(".factory-bootstrap-454 .factory-datetimepicker-range-0").data("DateTimePicker").maxDate(b.date)})})}(jQuery);
libs/factory/bootstrap/assets/js-min/bootstrap.dropdown.min.js CHANGED
@@ -7,4 +7,4 @@
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
- +function(a){"use strict";function b(){a(d).remove(),a(e).each(function(b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=factory-dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b),f.trigger(d=a.Event("show.bs.dropdown")),d.isDefaultPrevented())return;f.toggleClass("open").trigger("shown.bs.dropdown"),e.focus()}return!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=a("[role=menu] li:not(.divider):visible a",f);if(h.length){var i=h.index(h.filter(":focus"));38==b.keyCode&&i>0&&i--,40==b.keyCode&&i<h.length-1&&i++,~i||(i=0),h.eq(i).focus()}}}},a.fn.factoryBootstrap453_dropdown=function(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new f(this)),"string"==typeof b&&d[b].call(c)})},a.fn.factoryBootstrap453_dropdown.Constructor=f,a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",e,f.prototype.toggle).on("keydown.bs.dropdown.data-api",e+", [role=menu]",f.prototype.keydown)}(jQuery);
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
+ +function(a){"use strict";function b(){a(d).remove(),a(e).each(function(b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=factory-dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b),f.trigger(d=a.Event("show.bs.dropdown")),d.isDefaultPrevented())return;f.toggleClass("open").trigger("shown.bs.dropdown"),e.focus()}return!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=a("[role=menu] li:not(.divider):visible a",f);if(h.length){var i=h.index(h.filter(":focus"));38==b.keyCode&&i>0&&i--,40==b.keyCode&&i<h.length-1&&i++,~i||(i=0),h.eq(i).focus()}}}},a.fn.factoryBootstrap454_dropdown=function(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new f(this)),"string"==typeof b&&d[b].call(c)})},a.fn.factoryBootstrap454_dropdown.Constructor=f,a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",e,f.prototype.toggle).on("keydown.bs.dropdown.data-api",e+", [role=menu]",f.prototype.keydown)}(jQuery);
libs/factory/bootstrap/assets/js-min/bootstrap.modal.min.js CHANGED
@@ -7,4 +7,4 @@
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
- +function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.load(this.options.remote)};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(a){return this[this.isShown?"hide":"show"](a)},b.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.$element.on("click.dismiss.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body),c.$element.show(),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one(a.support.transition.end,function(){c.$element.focus().trigger(e)}).emulateTransitionEnd(300):c.$element.focus().trigger(e)}))},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one(a.support.transition.end,a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;if(this.$backdrop=a('<div class="factory-bootstrap-453-modal-backdrop '+c+'" />').appendTo(document.body),this.$element.on("click.dismiss.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;d?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()):b&&b()};var c=a.fn.factoryBootstrap453_modal;a.fn.factoryBootstrap453_modal=function(c,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},b.DEFAULTS,e.data(),"object"==typeof c&&c);f||e.data("bs.modal",f=new b(this,g)),"string"==typeof c?f[c](d):g.show&&f.show(d)})},a.fn.factoryBootstrap453_modal.Constructor=b,a.fn.factoryBootstrap453_modal.noConflict=function(){return a.fn.factoryBootstrap453_modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="factory-modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("factory-modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());b.preventDefault(),e.factoryBootstrap453_modal(f,this).one("hide",function(){c.is(":visible")&&c.focus()})}),a(document).on("show.bs.modal",".modal",function(){a(document.body).addClass("modal-open")}).on("hidden.bs.modal",".modal",function(){a(document.body).removeClass("modal-open")})}(jQuery);
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
+ +function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.load(this.options.remote)};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(a){return this[this.isShown?"hide":"show"](a)},b.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.$element.on("click.dismiss.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body),c.$element.show(),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one(a.support.transition.end,function(){c.$element.focus().trigger(e)}).emulateTransitionEnd(300):c.$element.focus().trigger(e)}))},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one(a.support.transition.end,a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;if(this.$backdrop=a('<div class="factory-bootstrap-454-modal-backdrop '+c+'" />').appendTo(document.body),this.$element.on("click.dismiss.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;d?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()):b&&b()};var c=a.fn.factoryBootstrap454_modal;a.fn.factoryBootstrap454_modal=function(c,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},b.DEFAULTS,e.data(),"object"==typeof c&&c);f||e.data("bs.modal",f=new b(this,g)),"string"==typeof c?f[c](d):g.show&&f.show(d)})},a.fn.factoryBootstrap454_modal.Constructor=b,a.fn.factoryBootstrap454_modal.noConflict=function(){return a.fn.factoryBootstrap454_modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="factory-modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("factory-modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());b.preventDefault(),e.factoryBootstrap454_modal(f,this).one("hide",function(){c.is(":visible")&&c.focus()})}),a(document).on("show.bs.modal",".modal",function(){a(document.body).addClass("modal-open")}).on("hidden.bs.modal",".modal",function(){a(document.body).removeClass("modal-open")})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.checkbox.min.js CHANGED
@@ -7,4 +7,4 @@
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
- !function(a){var b=function(b){var c=this;this.$element=a(b),this.$result=this.$element.find(".factory-result"),this.$on=this.$element.find(".factory-on"),this.$off=this.$element.find(".factory-off");var d=this.$element.is(".factory-tumbler"),e=this.$element.is(".factory-has-tumbler-hint"),f=this.$element.data("tumbler-function"),g=this.$element.data("tumbler-delay");g||(g=3e3),this.callByPath=function(a,b){for(var c=a.split("."),d=window,e=0;e<c.length;e++)d=d[c[e]];d.apply(d,b)},this.$on.click(function(){return c.$off.removeClass("active"),c.$on.addClass("active"),d?setTimeout(function(){c.$on.removeClass("active"),c.$off.addClass("active");var a=e?c.$element.next():null;f?c.callByPath(f,[c.$element,a]):e&&(c.$element.next().fadeIn(300),setTimeout(function(){c.$element.next().fadeOut(500)},g))},300):(c.$result.prop("checked",!0),c.$result.val(1),c.$result.trigger("change")),!1}),this.$off.click(function(){return c.$on.removeClass("active"),c.$off.addClass("active"),d?setTimeout(function(){c.$off.removeClass("active"),c.$on.addClass("active");var a=e?c.$element.next():null;f?c.callByPath(f,[c.$element,a]):e&&(c.$element.next().fadeIn(300),setTimeout(function(){c.$element.next().fadeOut(500)},g))},300):(c.$result.prop("checked",!1),c.$result.val(0),c.$result.trigger("change")),!1}),this.hashCode=function(a){var b=0;if(!a||0===a.length)return b;for(var c=0;c<a.length;c++){var d=a.charCodeAt(c);b=(b<<5)-b+d,b&=b}return b=b.toString(16),b=b.replace("-","")},this.executeEvents=function(a){(void 0!==window.__factory_checkbox_control_events_off_data||void 0!==window.__factory_checkbox_control_events_on_data)&&(a.change(function(){c.eventsProcess(a)}),c.eventsProcess(a))},this.eventsProcess=function(b){var d=b.attr("name"),e=b.prop("checked"),f=window.__factory_checkbox_control_events_on_data[d],g=window.__factory_checkbox_control_events_off_data[d];if(f||g){var h,i;void 0===window.__factory_checkbox_control_detach_elements&&(window.__factory_checkbox_control_detach_elements={}),h=window.__factory_checkbox_control_detach_elements,i=e?f:g;for(var j in i)if(i.hasOwnProperty(j)){var k,l=i[j];a.isArray(l)||(k=c.hashCode(d+l));var m;switch(j){case"hide":"string"==typeof l&&a(l).hide(0);break;case"show":"string"==typeof l&&a(l).fadeIn(200);break;case"detach":"string"==typeof l&&a(l).each(function(b){h[k]||(h[k]={}),h[k][b]||(h[k][b]={}),h[k][b].recovery_contanier=a(this).parent(),h[k][b].element=a(this).clone(!0),a(this).remove()});break;case"recovery":if(h[k]){for(var n in h[k])h[k].hasOwnProperty(n)&&h[k][n].recovery_contanier&&h[k][n].element&&h[k][n].recovery_contanier.append(h[k][n].element);delete h[k]}break;case"removeClasses":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&l[m]&&a(m).removeClass(l[m]);break;case"addClasses":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&l[m]&&a(m).addClass(l[m]);break;case"setValue":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&void 0!==l[m]&&null!==l[m]&&a(m).val(l[m])}}}},this.executeEvents(this.$result)};a.fn.factoryBootstrap453_checkboxControl=function(c){if("string"==typeof c){var d=a(this).data("factory.checkbox.control");return d?d[c]():null}return this.each(function(){var c=a(this),d=c.data("factory.checkbox.control");d||c.data("factory.checkbox.control",d=new b(this))})},a.fn.factoryBootstrap453_checkboxControl.Constructor=b,a(function(){a(".factory-bootstrap-453 .factory-checkbox.factory-buttons-way").factoryBootstrap453_checkboxControl(),a(".factory-bootstrap-453 .factory-checkbox").not(".factory-buttons-way").click(function(){a(this).prop("checked")?a(this).val(1):a(this).val(0)})})}(jQuery);
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
+ !function(a){var b=function(b){var c=this;this.$element=a(b),this.$result=this.$element.find(".factory-result"),this.$on=this.$element.find(".factory-on"),this.$off=this.$element.find(".factory-off");var d=this.$element.is(".factory-tumbler"),e=this.$element.is(".factory-has-tumbler-hint"),f=this.$element.data("tumbler-function"),g=this.$element.data("tumbler-delay");g||(g=3e3),this.callByPath=function(a,b){for(var c=a.split("."),d=window,e=0;e<c.length;e++)d=d[c[e]];d.apply(d,b)},this.$on.click(function(){return c.$off.removeClass("active"),c.$on.addClass("active"),d?setTimeout(function(){c.$on.removeClass("active"),c.$off.addClass("active");var a=e?c.$element.next():null;f?c.callByPath(f,[c.$element,a]):e&&(c.$element.next().fadeIn(300),setTimeout(function(){c.$element.next().fadeOut(500)},g))},300):(c.$result.prop("checked",!0),c.$result.val(1),c.$result.trigger("change")),!1}),this.$off.click(function(){return c.$on.removeClass("active"),c.$off.addClass("active"),d?setTimeout(function(){c.$off.removeClass("active"),c.$on.addClass("active");var a=e?c.$element.next():null;f?c.callByPath(f,[c.$element,a]):e&&(c.$element.next().fadeIn(300),setTimeout(function(){c.$element.next().fadeOut(500)},g))},300):(c.$result.prop("checked",!1),c.$result.val(0),c.$result.trigger("change")),!1}),this.hashCode=function(a){var b=0;if(!a||0===a.length)return b;for(var c=0;c<a.length;c++){var d=a.charCodeAt(c);b=(b<<5)-b+d,b&=b}return b=b.toString(16),b=b.replace("-","")},this.executeEvents=function(a){(void 0!==window.__factory_checkbox_control_events_off_data||void 0!==window.__factory_checkbox_control_events_on_data)&&(a.change(function(){c.eventsProcess(a)}),c.eventsProcess(a))},this.eventsProcess=function(b){var d=b.attr("name"),e=b.prop("checked"),f=window.__factory_checkbox_control_events_on_data[d],g=window.__factory_checkbox_control_events_off_data[d];if(f||g){var h,i;void 0===window.__factory_checkbox_control_detach_elements&&(window.__factory_checkbox_control_detach_elements={}),h=window.__factory_checkbox_control_detach_elements,i=e?f:g;for(var j in i)if(i.hasOwnProperty(j)){var k,l=i[j];a.isArray(l)||(k=c.hashCode(d+l));var m;switch(j){case"hide":"string"==typeof l&&a(l).hide(0);break;case"show":"string"==typeof l&&a(l).fadeIn(200);break;case"detach":"string"==typeof l&&a(l).each(function(b){h[k]||(h[k]={}),h[k][b]||(h[k][b]={}),h[k][b].recovery_contanier=a(this).parent(),h[k][b].element=a(this).clone(!0),a(this).remove()});break;case"recovery":if(h[k]){for(var n in h[k])h[k].hasOwnProperty(n)&&h[k][n].recovery_contanier&&h[k][n].element&&h[k][n].recovery_contanier.append(h[k][n].element);delete h[k]}break;case"removeClasses":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&l[m]&&a(m).removeClass(l[m]);break;case"addClasses":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&l[m]&&a(m).addClass(l[m]);break;case"setValue":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&void 0!==l[m]&&null!==l[m]&&a(m).val(l[m])}}}},this.executeEvents(this.$result)};a.fn.factoryBootstrap454_checkboxControl=function(c){if("string"==typeof c){var d=a(this).data("factory.checkbox.control");return d?d[c]():null}return this.each(function(){var c=a(this),d=c.data("factory.checkbox.control");d||c.data("factory.checkbox.control",d=new b(this))})},a.fn.factoryBootstrap454_checkboxControl.Constructor=b,a(function(){a(".factory-bootstrap-454 .factory-checkbox.factory-buttons-way").factoryBootstrap454_checkboxControl(),a(".factory-bootstrap-454 .factory-checkbox").not(".factory-buttons-way").click(function(){a(this).prop("checked")?a(this).val(1):a(this).val(0)})})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.color-and-opacity.min.js CHANGED
@@ -7,4 +7,4 @@
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
- !function(a,b){a(function(){a(function(){a(".factory-bootstrap-453 .factory-color-and-opacity").each(function(){var b=a(this),c=b.find(".factory-color"),d=b.find(".factory-integer");d.change(function(){var a=d.find(".factory-result").val()/100;c.find(".factory-background").css("opacity",a)}),d.change(),d.on("click.color.factory",function(a){a.stopPropagation()})})})})}(jQuery);
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
+ !function(a,b){a(function(){a(function(){a(".factory-bootstrap-454 .factory-color-and-opacity").each(function(){var b=a(this),c=b.find(".factory-color"),d=b.find(".factory-integer");d.change(function(){var a=d.find(".factory-result").val()/100;c.find(".factory-background").css("opacity",a)}),d.change(),d.on("click.color.factory",function(a){a.stopPropagation()})})})})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.color.min.js CHANGED
@@ -7,4 +7,4 @@
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
- !function(a){a.widget("factoryBootstrap453.colorControl",{_create:function(){this.$element=this.element,this.$picker=this.$element.find(".factory-color-hex"),this.$preview=this.$element.find(".factory-preview"),this.$background=this.$element.find(".factory-background"),this._init()},_init:function(b){var c=this,d={width:216,palettes:["#16a086","#27ae61","#2a80b9","#8f44ad","#2d3e50","#f49c14","#c1392b","#bec3c7"],hide:!0,change:function(a,b){c.$background.css({background:b.color.toString()}),c.$element.trigger("change.color.factory",[b.color.toString()]),c.$element.trigger("updated.color.factory",[b.color.toString()])}},e=this.$element.data("picker-target");e&&(d.target=a(e)),this.$picker.factoryBootstrap453_iris(d),this.$picker.off("focus"),a(document).on("click.color.factory",function(){c.$picker.factoryBootstrap453_iris("hide")}),this.$picker.add(this.$background).on("click.color.factory",function(a){a.stopPropagation(),c.$picker.factoryBootstrap453_iris("show")})},togglePicker:function(){this.$element.hasClass("factory-picker-active")?this.hidePicker():this.showPicker()},hidePicker:function(){this.$element.removeClass("factory-picker-active"),this.$picker.factoryBootstrap453_iris("hide")},showPicker:function(){this.$element.addClass("factory-picker-active"),this.$picker.factoryBootstrap453_iris("show")},getValue:function(){return this.$picker.val()},setValue:function(a,b){this.$picker.val(a),b&&self.$picker.trigger("change")}}),a(function(){a.widget.bridge("factoryBootstrap453_colorControl",a.factoryBootstrap453.colorControl),a(".factory-bootstrap-453 .factory-color").factoryBootstrap453_colorControl({})})}(jQuery);
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
+ !function(a){a.widget("factoryBootstrap454.colorControl",{_create:function(){this.$element=this.element,this.$picker=this.$element.find(".factory-color-hex"),this.$preview=this.$element.find(".factory-preview"),this.$background=this.$element.find(".factory-background"),this._init()},_init:function(b){var c=this,d={width:216,palettes:["#16a086","#27ae61","#2a80b9","#8f44ad","#2d3e50","#f49c14","#c1392b","#bec3c7"],hide:!0,change:function(a,b){c.$background.css({background:b.color.toString()}),c.$element.trigger("change.color.factory",[b.color.toString()]),c.$element.trigger("updated.color.factory",[b.color.toString()])}},e=this.$element.data("picker-target");e&&(d.target=a(e)),this.$picker.factoryBootstrap454_iris(d),this.$picker.off("focus"),a(document).on("click.color.factory",function(){c.$picker.factoryBootstrap454_iris("hide")}),this.$picker.add(this.$background).on("click.color.factory",function(a){a.stopPropagation(),c.$picker.factoryBootstrap454_iris("show")})},togglePicker:function(){this.$element.hasClass("factory-picker-active")?this.hidePicker():this.showPicker()},hidePicker:function(){this.$element.removeClass("factory-picker-active"),this.$picker.factoryBootstrap454_iris("hide")},showPicker:function(){this.$element.addClass("factory-picker-active"),this.$picker.factoryBootstrap454_iris("show")},getValue:function(){return this.$picker.val()},setValue:function(a,b){this.$picker.val(a),b&&self.$picker.trigger("change")}}),a(function(){a.widget.bridge("factoryBootstrap454_colorControl",a.factoryBootstrap454.colorControl),a(".factory-bootstrap-454 .factory-color").factoryBootstrap454_colorControl({})})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.dropdown-and-colors.min.js CHANGED
@@ -7,4 +7,4 @@
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
- !function(a){var b=function(b){var c=a(b),d=c.find(".factory-colors-inner-wrap");c.find("select").change(function(){var b=c.find("select option:selected"),e=b.data("colors"),f=d.data("radio-name");if(f&&e){d.html("");for(var g=0;g<e.length;g++){var h=e[g],i=a('<span class="factory-form-radio-item"><label class="factory-from-radio-label"><input type="radio" name="'+f+'" class="factory-radio-color" value="'+h[0]+'" checked="checked"><span style="background-color:'+h[1]+'"></span></label></span>');d.append(i)}}})};a.fn.factoryBootstrap453_dropdownAndColors=function(c){if("string"==typeof c){var d=a(this).data("factory.dropdownAndColors.control");return d?d[c]():null}return this.each(function(){var c=a(this),d=c.data("factory.dropdownAndColors.control");d||c.data("factory.dropdownAndColors.control",d=new b(this))})},a.fn.factoryBootstrap453_dropdownAndColors.Constructor=b,a(function(){a(".factory-bootstrap-453 .factory-dropdown-and-colors").factoryBootstrap453_dropdownAndColors()})}(jQuery);
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
+ !function(a){var b=function(b){var c=a(b),d=c.find(".factory-colors-inner-wrap");c.find("select").change(function(){var b=c.find("select option:selected"),e=b.data("colors"),f=d.data("radio-name");if(f&&e){d.html("");for(var g=0;g<e.length;g++){var h=e[g],i=a('<span class="factory-form-radio-item"><label class="factory-from-radio-label"><input type="radio" name="'+f+'" class="factory-radio-color" value="'+h[0]+'" checked="checked"><span style="background-color:'+h[1]+'"></span></label></span>');d.append(i)}}})};a.fn.factoryBootstrap454_dropdownAndColors=function(c){if("string"==typeof c){var d=a(this).data("factory.dropdownAndColors.control");return d?d[c]():null}return this.each(function(){var c=a(this),d=c.data("factory.dropdownAndColors.control");d||c.data("factory.dropdownAndColors.control",d=new b(this))})},a.fn.factoryBootstrap454_dropdownAndColors.Constructor=b,a(function(){a(".factory-bootstrap-454 .factory-dropdown-and-colors").factoryBootstrap454_dropdownAndColors()})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.dropdown.min.js CHANGED
@@ -7,4 +7,4 @@
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
- !function(a){var b=function(b){var c=this;if(this.$element=a(b),this.way=this.$element.data("way"),this.name=this.$element.data("name")||this.$element.attr("name"),this.hashCode=function(a){var b=0;if(!a||0===a.length)return b;for(var c=0;c<a.length;c++){var d=a.charCodeAt(c);b=(b<<5)-b+d,b&=b}return b=b.toString(16),b=b.replace("-","")},this.executeEvents=function(a){void 0!==window.factory_dropdown_control_events_data&&(a.change(function(){c.eventsProcess(a)}),c.eventsProcess(a))},this.eventsProcess=function(b){var d=b.attr("name"),e=b.val(),f=window.factory_dropdown_control_events_data[d];if(f&&f[e]){var g;void 0===window.__factory_dropdown_control_detach_elements&&(window.__factory_dropdown_control_detach_elements={}),g=window.__factory_dropdown_control_detach_elements;for(var h in f[e])if(f[e].hasOwnProperty(h)){var i,j=f[e][h];switch(a.isArray(j)||(i=c.hashCode(d+j)),h){case"hide":"string"==typeof j&&a(j).hide(0);break;case"show":"string"==typeof j&&a(j).fadeIn(200);break;case"detach":"string"==typeof j&&a(j).each(function(b){g[i]||(g[i]={}),g[i][b]||(g[i][b]={}),g[i][b].recovery_contanier=a(this).parent(),g[i][b].element=a(this).clone(!0),a(this).remove()});break;case"recovery":if(g[i]){for(var k in g[i])g[i].hasOwnProperty(k)&&g[i][k].recovery_contanier&&g[i][k].element&&g[i][k].recovery_contanier.append(g[i][k].element);delete g[i]}break;case"removeClasses":if("object"==typeof j)for(var l in j)j.hasOwnProperty(l)&&j[l]&&a(l).removeClass(j[l]);break;case"addClasses":if("object"==typeof j)for(var l in j)j.hasOwnProperty(l)&&j[l]&&a(l).addClass(j[l])}}}},"buttons"===this.way)this.$result=this.$element.find(".factory-result"),this.$hints=this.$element.find(".factory-hints"),this.$buttons=this.$element.find(".btn"),c.executeEvents(this.$result),this.$buttons.click(function(){var b=a(this).data("value");return c.$buttons.removeClass("active"),a(this).addClass("active"),c.$hints.find(".factory-hint").hide(),c.$hints.find(".factory-hint-"+b).fadeIn(),c.$result.val(b),c.$result.trigger("change"),!1});else if("ddslick"===this.way){c.executeEvents(c.$element.find(".factory-result"));var d=window["factory_"+this.name+"_data"],e=this.$element.find(".factory-ddslick"),f=this.$element.data("width")||300,g=this.$element.data("align")||"right";a(d).each(function(){return this.imageHoverSrc?void(a("<img/>")[0].src=this.imageHoverSrc):!0}),e.ddslick({data:d,width:f,imagePosition:g,selectText:"- select -",onSelected:function(a){a.selectedData.imageHoverSrc&&c.$element.find(".dd-selected-image").attr("src",a.selectedData.imageHoverSrc);var b=c.$element.find(".factory-result").val(a.selectedData.value);b.change()}})}else{c.executeEvents(this.$element),this.$hints=this.$element.next(),this.$hints.hasClass("factory-hints")&&(this.$element.change(function(){return c.updateHints(),!1}),this.updateHints=function(){var a=c.$element.val();c.$hints.find(".factory-hint").hide(),c.$hints.find(".factory-hint-"+a).show()},c.updateHints()),this.getAjaxData=function(){var a=c.$element.data("ajax-data-id");return window[a]},this.loadData=function(){var b=c.getAjaxData();a.ajax({url:b.url,data:b.data,dataType:"json",success:function(a){return a.error?c.showError(a.error):void c.fill(a.items)},error:function(a){console&&console.log&&console.log(a.responseText),c.showError("Unexpected error occurred during the ajax request.")},complete:function(){c.removeLoader()}})},this.fill=function(a){this.clearList();var b=c.getAjaxData();if(a&&a.length)for(var d in a){var e=a[d];c.addListItem(e)}else this.$element.append("<option>"+b.emptyList+"</li>");this.$element.trigger("factory-loaded")},this.clearList=function(){this.$element.html("")},this.addListItem=function(b){var d=a("<option />").attr("value",b.value).text(b.title).appendTo(this.$element),e=c.getAjaxData();e.selected&&e.selected==b.value&&d.attr("selected","selected")},this.showError=function(b){this.clearList();var d=a("<div class='factory-control-error'></div>").append(a("<i class='fa fa-exclamation-triangle'></i>")).append(b),e=c.getAjaxData();this.$element.append("<option>"+e.emptyList+"</li>"),this.$element.after(d),this.$element.addClass("factory-has-error")},this.removeLoader=function(){this.$element.removeClass("factory-hidden");var b=c.getAjaxData();a(b.loader).remove()};var h=this.$element.data("ajax");h&&this.loadData()}};a.fn.factoryBootstrap453_dropdownControl=function(c){if("string"==typeof c){var d=a(this).data("factory.dropdown.control");return d?d[c]():null}return this.each(function(){var c=a(this),d=c.data("factory.dropdown.control");d||c.data("factory.dropdown.control",d=new b(this))})},a.fn.factoryBootstrap453_dropdownControl.Constructor=b,a(function(){a(".factory-bootstrap-453 .factory-dropdown").factoryBootstrap453_dropdownControl()})}(jQuery);
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
+ !function(a){var b=function(b){var c=this;if(this.$element=a(b),this.way=this.$element.data("way"),this.name=this.$element.data("name")||this.$element.attr("name"),this.hashCode=function(a){var b=0;if(!a||0===a.length)return b;for(var c=0;c<a.length;c++){var d=a.charCodeAt(c);b=(b<<5)-b+d,b&=b}return b=b.toString(16),b=b.replace("-","")},this.executeEvents=function(a){void 0!==window.factory_dropdown_control_events_data&&(a.change(function(){c.eventsProcess(a)}),c.eventsProcess(a))},this.eventsProcess=function(b){var d=b.attr("name"),e=b.val(),f=window.factory_dropdown_control_events_data[d];if(f&&f[e]){var g;void 0===window.__factory_dropdown_control_detach_elements&&(window.__factory_dropdown_control_detach_elements={}),g=window.__factory_dropdown_control_detach_elements;for(var h in f[e])if(f[e].hasOwnProperty(h)){var i,j=f[e][h];switch(a.isArray(j)||(i=c.hashCode(d+j)),h){case"hide":"string"==typeof j&&a(j).hide(0);break;case"show":"string"==typeof j&&a(j).fadeIn(200);break;case"detach":"string"==typeof j&&a(j).each(function(b){g[i]||(g[i]={}),g[i][b]||(g[i][b]={}),g[i][b].recovery_contanier=a(this).parent(),g[i][b].element=a(this).clone(!0),a(this).remove()});break;case"recovery":if(g[i]){for(var k in g[i])g[i].hasOwnProperty(k)&&g[i][k].recovery_contanier&&g[i][k].element&&g[i][k].recovery_contanier.append(g[i][k].element);delete g[i]}break;case"removeClasses":if("object"==typeof j)for(var l in j)j.hasOwnProperty(l)&&j[l]&&a(l).removeClass(j[l]);break;case"addClasses":if("object"==typeof j)for(var l in j)j.hasOwnProperty(l)&&j[l]&&a(l).addClass(j[l])}}}},"buttons"===this.way)this.$result=this.$element.find(".factory-result"),this.$hints=this.$element.find(".factory-hints"),this.$buttons=this.$element.find(".btn"),c.executeEvents(this.$result),this.$buttons.click(function(){var b=a(this).data("value");return c.$buttons.removeClass("active"),a(this).addClass("active"),c.$hints.find(".factory-hint").hide(),c.$hints.find(".factory-hint-"+b).fadeIn(),c.$result.val(b),c.$result.trigger("change"),!1});else if("ddslick"===this.way){c.executeEvents(c.$element.find(".factory-result"));var d=window["factory_"+this.name+"_data"],e=this.$element.find(".factory-ddslick"),f=this.$element.data("width")||300,g=this.$element.data("align")||"right";a(d).each(function(){return this.imageHoverSrc?void(a("<img/>")[0].src=this.imageHoverSrc):!0}),e.ddslick({data:d,width:f,imagePosition:g,selectText:"- select -",onSelected:function(a){a.selectedData.imageHoverSrc&&c.$element.find(".dd-selected-image").attr("src",a.selectedData.imageHoverSrc);var b=c.$element.find(".factory-result").val(a.selectedData.value);b.change()}})}else{c.executeEvents(this.$element),this.$hints=this.$element.next(),this.$hints.hasClass("factory-hints")&&(this.$element.change(function(){return c.updateHints(),!1}),this.updateHints=function(){var a=c.$element.val();c.$hints.find(".factory-hint").hide(),c.$hints.find(".factory-hint-"+a).show()},c.updateHints()),this.getAjaxData=function(){var a=c.$element.data("ajax-data-id");return window[a]},this.loadData=function(){var b=c.getAjaxData();a.ajax({url:b.url,data:b.data,dataType:"json",success:function(a){return a.error?c.showError(a.error):void c.fill(a.items)},error:function(a){console&&console.log&&console.log(a.responseText),c.showError("Unexpected error occurred during the ajax request.")},complete:function(){c.removeLoader()}})},this.fill=function(a){this.clearList();var b=c.getAjaxData();if(a&&a.length)for(var d in a){var e=a[d];c.addListItem(e)}else this.$element.append("<option>"+b.emptyList+"</li>");this.$element.trigger("factory-loaded")},this.clearList=function(){this.$element.html("")},this.addListItem=function(b){var d=a("<option />").attr("value",b.value).text(b.title).appendTo(this.$element),e=c.getAjaxData();e.selected&&e.selected==b.value&&d.attr("selected","selected")},this.showError=function(b){this.clearList();var d=a("<div class='factory-control-error'></div>").append(a("<i class='fa fa-exclamation-triangle'></i>")).append(b),e=c.getAjaxData();this.$element.append("<option>"+e.emptyList+"</li>"),this.$element.after(d),this.$element.addClass("factory-has-error")},this.removeLoader=function(){this.$element.removeClass("factory-hidden");var b=c.getAjaxData();a(b.loader).remove()};var h=this.$element.data("ajax");h&&this.loadData()}};a.fn.factoryBootstrap454_dropdownControl=function(c){if("string"==typeof c){var d=a(this).data("factory.dropdown.control");return d?d[c]():null}return this.each(function(){var c=a(this),d=c.data("factory.dropdown.control");d||c.data("factory.dropdown.control",d=new b(this))})},a.fn.factoryBootstrap454_dropdownControl.Constructor=b,a(function(){a(".factory-bootstrap-454 .factory-dropdown").factoryBootstrap454_dropdownControl()})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.fonts.min.js CHANGED
@@ -7,4 +7,4 @@
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
- !function(a){a.widget("factoryBootstrap453.fontControl",{_create:function(){this.$element=this.element,this.$family=this.$element.find(".factory-family-wrap select"),this.$googleFontData=this.$element.find(".factory-google-font-data"),this.fontSelectorName=this.$family.attr("name"),this.googleFontsOptions={frameName:this.element.data("google-fonts-frame-name")},this.googleFontsOptions.frameName||(this.googleFontsOptions.frameName="preview"),this._initUI(),this._bindEvents()},_initUI:function(){this.$family.chosen()},_bindEvents:function(){var a=this;this.$family.change(function(b){var c=a._getCurrentOption(),d=c.data("google-font");if(d){var e=c.data("family"),f=c.data("variants").split(","),g=c.data("subsets").split(",");a._loadGoogleFont(e,f,g)}else a.$googleFontData.val("")})},_getCurrentOption:function(){var a=this.$family.val();return this._getOptionByValue(a)},_getOptionByValue:function(a){var b=this.$family.find("option[value='"+a+"']");return b},_loadGoogleFont:function(b,c,d){var c=this._filterGoogleFontVariantsBeforeLoading(b,c,d),d=this._filterGoogleFontSubsetsBeforeLoading(b,c,d);this.$googleFontData.val(this._encode64(JSON.stringify({name:b,styles:c,subsets:d})));var e=this._getTargetToLoadGoogleFont(),f=this.fontSelectorName+"-font-loader",g=e.find("#"+f);e.find("#"+f).length>0&&g.remove();var h="http://fonts.googleapis.com/css";c&&c.length&&(b=b+":"+c.join(",")),h=h+"?family="+b,d&&d.length&&(h=h+"&subset="+d.join(",")),a('<link id="'+f+'" rel="stylesheet" type="text/css" href="'+h+'" >').appendTo(e)},_filterGoogleFontVariantsBeforeLoading:function(b,c,d){var e=this;return a(document).trigger("factory-filter-google-font-variants",[c,e.$element,b,d]),c},_filterGoogleFontSubsetsBeforeLoading:function(b,c,d){var e=this;return a(document).trigger("factory-filter-google-font-subsets",[d,e.$element,c,d]),d},_getTargetToLoadGoogleFont:function(){var b=this.googleFontsOptions.frameName,c=a("head");if(b){var d=a('iframe[name="'+b+'"]');if(0===d.length)return console.error("The preview container not found.");c=d.contents().find("head")}return c},_base64KeyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",_encode64:function(a){a=escape(a);var b,c,d,e,f,g="",h="",i="",j=0;do b=a.charCodeAt(j++),c=a.charCodeAt(j++),h=a.charCodeAt(j++),d=b>>2,e=(3&b)<<4|c>>4,f=(15&c)<<2|h>>6,i=63&h,isNaN(c)?f=i=64:isNaN(h)&&(i=64),g=g+this._base64KeyStr.charAt(d)+this._base64KeyStr.charAt(e)+this._base64KeyStr.charAt(f)+this._base64KeyStr.charAt(i),b=c=h="",d=e=f=i="";while(j<a.length);return g}}),a(function(){a.widget.bridge("factoryBootstrap453_fontControl",a.factoryBootstrap453.fontControl),a(".factory-bootstrap-453 .factory-font").factoryBootstrap453_fontControl({})})}(jQuery);
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
+ !function(a){a.widget("factoryBootstrap454.fontControl",{_create:function(){this.$element=this.element,this.$family=this.$element.find(".factory-family-wrap select"),this.$googleFontData=this.$element.find(".factory-google-font-data"),this.fontSelectorName=this.$family.attr("name"),this.googleFontsOptions={frameName:this.element.data("google-fonts-frame-name")},this.googleFontsOptions.frameName||(this.googleFontsOptions.frameName="preview"),this._initUI(),this._bindEvents()},_initUI:function(){this.$family.chosen()},_bindEvents:function(){var a=this;this.$family.change(function(b){var c=a._getCurrentOption(),d=c.data("google-font");if(d){var e=c.data("family"),f=c.data("variants").split(","),g=c.data("subsets").split(",");a._loadGoogleFont(e,f,g)}else a.$googleFontData.val("")})},_getCurrentOption:function(){var a=this.$family.val();return this._getOptionByValue(a)},_getOptionByValue:function(a){var b=this.$family.find("option[value='"+a+"']");return b},_loadGoogleFont:function(b,c,d){var c=this._filterGoogleFontVariantsBeforeLoading(b,c,d),d=this._filterGoogleFontSubsetsBeforeLoading(b,c,d);this.$googleFontData.val(this._encode64(JSON.stringify({name:b,styles:c,subsets:d})));var e=this._getTargetToLoadGoogleFont(),f=this.fontSelectorName+"-font-loader",g=e.find("#"+f);e.find("#"+f).length>0&&g.remove();var h="http://fonts.googleapis.com/css";c&&c.length&&(b=b+":"+c.join(",")),h=h+"?family="+b,d&&d.length&&(h=h+"&subset="+d.join(",")),a('<link id="'+f+'" rel="stylesheet" type="text/css" href="'+h+'" >').appendTo(e)},_filterGoogleFontVariantsBeforeLoading:function(b,c,d){var e=this;return a(document).trigger("factory-filter-google-font-variants",[c,e.$element,b,d]),c},_filterGoogleFontSubsetsBeforeLoading:function(b,c,d){var e=this;return a(document).trigger("factory-filter-google-font-subsets",[d,e.$element,c,d]),d},_getTargetToLoadGoogleFont:function(){var b=this.googleFontsOptions.frameName,c=a("head");if(b){var d=a('iframe[name="'+b+'"]');if(0===d.length)return console.error("The preview container not found.");c=d.contents().find("head")}return c},_base64KeyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",_encode64:function(a){a=escape(a);var b,c,d,e,f,g="",h="",i="",j=0;do b=a.charCodeAt(j++),c=a.charCodeAt(j++),h=a.charCodeAt(j++),d=b>>2,e=(3&b)<<4|c>>4,f=(15&c)<<2|h>>6,i=63&h,isNaN(c)?f=i=64:isNaN(h)&&(i=64),g=g+this._base64KeyStr.charAt(d)+this._base64KeyStr.charAt(e)+this._base64KeyStr.charAt(f)+this._base64KeyStr.charAt(i),b=c=h="",d=e=f=i="";while(j<a.length);return g}}),a(function(){a.widget.bridge("factoryBootstrap454_fontControl",a.factoryBootstrap454.fontControl),a(".factory-bootstrap-454 .factory-font").factoryBootstrap454_fontControl({})})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.gradient.min.js CHANGED
@@ -7,4 +7,4 @@
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
- !function(a){var b=function(b){this.$element=a(b),this.$picker=this.$element.find(".factory-gradient-picker"),this.$result=this.$element.find(".factory-result"),this.init()};b.prototype.init=function(){var a=this,b=this.$element.data("directions"),c=this.$element.data("points"),d=c?c.split(","):[];this.$picker.gradientPicker({change:function(b,c){a.$result.val(c).trigger("keyup")},fillDirection:b,controlPoints:d})},a.fn.factoryBootstrap453_gradientControl=function(c){return this.each(function(){var d=a(this),e=d.data("factory.gradient-control");e||d.data("factory.gradient-control",e=new b(this)),"string"==typeof c&&e[c].call(e)})},a.fn.factoryBootstrap453_gradientControl.Constructor=b,a(function(){a(".factory-bootstrap-453 .factory-gradient").factoryBootstrap453_gradientControl()})}(jQuery);
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
+ !function(a){var b=function(b){this.$element=a(b),this.$picker=this.$element.find(".factory-gradient-picker"),this.$result=this.$element.find(".factory-result"),this.init()};b.prototype.init=function(){var a=this,b=this.$element.data("directions"),c=this.$element.data("points"),d=c?c.split(","):[];this.$picker.gradientPicker({change:function(b,c){a.$result.val(c).trigger("keyup")},fillDirection:b,controlPoints:d})},a.fn.factoryBootstrap454_gradientControl=function(c){return this.each(function(){var d=a(this),e=d.data("factory.gradient-control");e||d.data("factory.gradient-control",e=new b(this)),"string"==typeof c&&e[c].call(e)})},a.fn.factoryBootstrap454_gradientControl.Constructor=b,a(function(){a(".factory-bootstrap-454 .factory-gradient").factoryBootstrap454_gradientControl()})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.integer.min.js CHANGED
@@ -7,4 +7,4 @@
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
- !function(a){var b=function(b){this.$element=a(b),this.$element.hasClass("factory-has-slider")&&this.createSlider()};b.prototype.createSlider=function(){var a=this,b=this.$element.find(".factory-slider-container");this.$bar=b.find(".factory-bar"),this.$result=b.find(".factory-result"),this.$visibleValue=b.find(".factory-visible-value"),this.units=b.data("units"),this.rangeStart=b.data("range-start"),this.rangeEnd=b.data("range-end"),this.step=b.data("step"),this.step||(this.step=1);var c=this.$result.val();this.$bar.noUiSlider({start:parseInt(c),range:{min:a.rangeStart,max:a.rangeEnd},connect:"lower",step:a.step}),this.$bar.on("slide set",function(){a.setValue(parseInt(a.$bar.val()))})},b.prototype.setValue=function(a,b){this.$result.val(a),this.$visibleValue.length>0&&(this.units?this.$visibleValue.text(a+this.units):this.$visibleValue.text(a)),b&&this.$bar.noUiSlider({start:a},!0),this.$result.trigger("keyup"),this.$element.trigger("change")},b.prototype.getValue=function(){return this.$result.val()},b.prototype.api=function(){return this},a.fn.factoryBootstrap453_integerControl=function(c){if("string"==typeof c){var d=a(this).data("factory.integer-control");return d?d[c]():null}return this.each(function(){var c=a(this),d=c.data("factory.integer-control");d||c.data("factory.integer-control",d=new b(this))})},a.fn.factoryBootstrap453_integerControl.Constructor=b,a(function(){a(".factory-bootstrap-453 .factory-integer").factoryBootstrap453_integerControl()})}(jQuery);
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
+ !function(a){var b=function(b){this.$element=a(b),this.$element.hasClass("factory-has-slider")&&this.createSlider()};b.prototype.createSlider=function(){var a=this,b=this.$element.find(".factory-slider-container");this.$bar=b.find(".factory-bar"),this.$result=b.find(".factory-result"),this.$visibleValue=b.find(".factory-visible-value"),this.units=b.data("units"),this.rangeStart=b.data("range-start"),this.rangeEnd=b.data("range-end"),this.step=b.data("step"),this.step||(this.step=1);var c=this.$result.val();this.$bar.noUiSlider({start:parseInt(c),range:{min:a.rangeStart,max:a.rangeEnd},connect:"lower",step:a.step}),this.$bar.on("slide set",function(){a.setValue(parseInt(a.$bar.val()))})},b.prototype.setValue=function(a,b){this.$result.val(a),this.$visibleValue.length>0&&(this.units?this.$visibleValue.text(a+this.units):this.$visibleValue.text(a)),b&&this.$bar.noUiSlider({start:a},!0),this.$result.trigger("keyup"),this.$element.trigger("change")},b.prototype.getValue=function(){return this.$result.val()},b.prototype.api=function(){return this},a.fn.factoryBootstrap454_integerControl=function(c){if("string"==typeof c){var d=a(this).data("factory.integer-control");return d?d[c]():null}return this.each(function(){var c=a(this),d=c.data("factory.integer-control");d||c.data("factory.integer-control",d=new b(this))})},a.fn.factoryBootstrap454_integerControl.Constructor=b,a(function(){a(".factory-bootstrap-454 .factory-integer").factoryBootstrap454_integerControl()})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.list.min.js CHANGED
@@ -7,4 +7,4 @@
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
- !function(a){var b=function(b){var c=this;if(this.$element=a(b),this.way=this.$element.data("way"),this.name=this.$element.data("name"),"checklist"===this.way){this.getAjaxData=function(){var a=c.$element.data("ajax-data-id");return window[a]},this.loadData=function(){var b=c.getAjaxData();a.ajax({url:b.url,data:b.data,dataType:"json",success:function(a){return a.error?c.showError(a.error):void c.fill(a.items)},error:function(){c.showError("Unexpected error occurred during the ajax request.")},complete:function(){c.removeLoader()}})},this.fill=function(a){this.clearList();var b=c.getAjaxData();if(a&&a.length){this.$element.removeClass("factory-empty");for(var d in a){var e=a[d];c.addListItem(e)}}else this.$element.addClass("factory-empty"),this.$element.append("<li>"+b.emptyList+"</li>")},this.clearList=function(){this.$element.html("")},this.addListItem=function(b){var d=a("<li>"),e=a("<label>").attr("for","factory-checklist-"+c.name+"-"+b.value).appendTo(d),f=a("<span>").appendTo(e),g=a("<input />").attr("type","checkbox").attr("name",c.name+"[]").val(b.value).attr("id","factory-checklist-"+c.name+"-"+b.value).appendTo(f),h=(a("<span>"+b.title+"</span>").appendTo(e),c.getAjaxData());h.selected.length&&a.inArray(b.value,h.selected)>=0&&g.attr("checked","checked"),this.$element.append(d)},this.showError=function(b){this.$element.html("").append(a("<i class='fa fa-exclamation-triangle'></i>")).append(b),this.$element.addClass("factory-list-error")},this.removeLoader=function(){this.$element.removeClass("factory-hidden");var b=c.getAjaxData();a(b.loader).remove()};var d=this.$element.data("ajax");d&&this.loadData()}};a.fn.factoryBootstrap453_listControl=function(c){if("string"==typeof c){var d=a(this).data("factory.list.control");return d?d[c]():null}return this.each(function(){var c=a(this),d=c.data("factory.list.control");d||c.data("factory.list.control",d=new b(this))})},a.fn.factoryBootstrap453_listControl.Constructor=b,a(function(){a(".factory-bootstrap-453 .factory-list").factoryBootstrap453_listControl()})}(jQuery);
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
+ !function(a){var b=function(b){var c=this;if(this.$element=a(b),this.way=this.$element.data("way"),this.name=this.$element.data("name"),"checklist"===this.way){this.getAjaxData=function(){var a=c.$element.data("ajax-data-id");return window[a]},this.loadData=function(){var b=c.getAjaxData();a.ajax({url:b.url,data:b.data,dataType:"json",success:function(a){return a.error?c.showError(a.error):void c.fill(a.items)},error:function(){c.showError("Unexpected error occurred during the ajax request.")},complete:function(){c.removeLoader()}})},this.fill=function(a){this.clearList();var b=c.getAjaxData();if(a&&a.length){this.$element.removeClass("factory-empty");for(var d in a){var e=a[d];c.addListItem(e)}}else this.$element.addClass("factory-empty"),this.$element.append("<li>"+b.emptyList+"</li>")},this.clearList=function(){this.$element.html("")},this.addListItem=function(b){var d=a("<li>"),e=a("<label>").attr("for","factory-checklist-"+c.name+"-"+b.value).appendTo(d),f=a("<span>").appendTo(e),g=a("<input />").attr("type","checkbox").attr("name",c.name+"[]").val(b.value).attr("id","factory-checklist-"+c.name+"-"+b.value).appendTo(f),h=(a("<span>"+b.title+"</span>").appendTo(e),c.getAjaxData());h.selected.length&&a.inArray(b.value,h.selected)>=0&&g.attr("checked","checked"),this.$element.append(d)},this.showError=function(b){this.$element.html("").append(a("<i class='fa fa-exclamation-triangle'></i>")).append(b),this.$element.addClass("factory-list-error")},this.removeLoader=function(){this.$element.removeClass("factory-hidden");var b=c.getAjaxData();a(b.loader).remove()};var d=this.$element.data("ajax");d&&this.loadData()}};a.fn.factoryBootstrap454_listControl=function(c){if("string"==typeof c){var d=a(this).data("factory.list.control");return d?d[c]():null}return this.each(function(){var c=a(this),d=c.data("factory.list.control");d||c.data("factory.list.control",d=new b(this))})},a.fn.factoryBootstrap454_listControl.Constructor=b,a(function(){a(".factory-bootstrap-454 .factory-list").factoryBootstrap454_listControl()})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.multiple-textbox.min.js CHANGED
@@ -7,4 +7,4 @@
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
- !function(a){"use strict";var b=function(b){this.$element=a(b);var c=a(".factory-mtextbox-item",this.$element).eq(0).clone(!0);a(".factory-mtextbox-add-item",this.$element).on("click",function(){var b=a(this).closest(".factory-multiple-textbox-group").find(".factory-mtextbox-items"),d=c.clone(!0),e=a('<button class="btn btn-default btn-small factory-mtextbox-remove-item"><i class="fa fa-times" aria-hidden="true"></i></button>');return b.append(d.append(e)),d.find('input[type="text"]').val("").focus(),!1}),a(document).on("click",".factory-mtextbox-remove-item",function(){return a(this).closest(".factory-mtextbox-item").remove(),!1})};a.fn.factoryBootstrap453_MultipleTextboxControl=function(){return this.each(function(){new b(this)})},a(function(){a(".factory-bootstrap-453 .factory-multiple-textbox-group").factoryBootstrap453_MultipleTextboxControl()})}(jQuery);
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
+ !function(a){"use strict";var b=function(b){this.$element=a(b);var c=a(".factory-mtextbox-item",this.$element).eq(0).clone(!0);a(".factory-mtextbox-add-item",this.$element).on("click",function(){var b=a(this).closest(".factory-multiple-textbox-group").find(".factory-mtextbox-items"),d=c.clone(!0),e=a('<button class="btn btn-default btn-small factory-mtextbox-remove-item"><i class="fa fa-times" aria-hidden="true"></i></button>');return b.append(d.append(e)),d.find('input[type="text"]').val("").focus(),!1}),a(document).on("click",".factory-mtextbox-remove-item",function(){return a(this).closest(".factory-mtextbox-item").remove(),!1})};a.fn.factoryBootstrap454_MultipleTextboxControl=function(){return this.each(function(){new b(this)})},a(function(){a(".factory-bootstrap-454 .factory-multiple-textbox-group").factoryBootstrap454_MultipleTextboxControl()})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.pattern.min.js CHANGED
@@ -7,4 +7,4 @@
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
- !function(a){a.widget("factoryBootstrap453.patternControl",{_create:function(){this.$element=this.element,this.$preview=this.$element.find(".factory-preview"),this.$patternResult=this.$element.find(".factory-pattern-result"),this.$colorResult=this.$element.find(".factory-color-result"),this.$patterns=this.$element.find(".factory-patterns-panel"),this.$patternItems=this.$element.find(".factory-patterns-item"),this.$btnUpload=this.$element.find(".factory-upload-btn"),this.$btnChangeColor=this.$element.find(".factory-change-color-btn"),this.$colorPanel=this.$element.find(".factory-color-panel"),this.$colorContol=this.$element.find(".factory-color"),this._initMainPanel(),this._initColorPickerPanel(),this._initPatternsPanel()},_initMainPanel:function(){var a=this;this.$preview.on("click",function(){return a.togglePatternsPanel(),!1}),this.$btnChangeColor.on("click",function(){return a.toggleColorPanel(),!1})},togglePatternsPanel:function(){this.$element.hasClass("factory-patterns-panel-active")?this.hidePatternsPanel():this.showPatternsPanel()},hidePatternsPanel:function(){this.$element.removeClass("factory-patterns-panel-active")},showPatternsPanel:function(){this.$element.addClass("factory-patterns-panel-active")},hasColor:function(){return this.$element.hasClass("factory-color-panel-active")},toggleColorPanel:function(){this.hasColor()?this.hideColorPanel():this.showColorPanel()},hideColorPanel:function(){this.$element.removeClass("factory-color-panel-active"),this.$btnChangeColor.removeClass("button-active"),this.$colorResult.val(""),this.$colorResult.trigger("change"),this.$element.trigger("change")},showColorPanel:function(){this.$element.addClass("factory-color-panel-active"),this.$btnChangeColor.addClass("button-active"),this.$colorResult.val(this.$colorContol.factoryBootstrap453_colorControl("getValue")),this.$colorResult.trigger("change"),this.$element.trigger("change")},_initColorPickerPanel:function(){var a=this;this.$colorContol.bind("updated.color.factory",function(b,c){return a.$colorResult.val(c),!1})},_initPatternsPanel:function(){var b=this,c=!0,d=wp.media.editor.send.attachment;this.$btnUpload.on("click",function(){return c=!0,wp.media.editor.send.attachment=function(a,e){return c?(b.$preview.css({background:"url("+e.url+") repeat",border:"0",fontSize:"0"}),void b.$patternResult.attr("value",e.url).trigger("change")):d.apply(this,[a,e])},wp.media.editor.open(b.$btnUpload),a(".add_media").on("click",function(){c=!1}),!1}),this.$patternItems.on("click",function(){if(a(this).data("pattern")){var c=a(this).data("pattern");b.$preview.removeClass("factory-empty"),b.$preview.css({background:"url("+c+") repeat"}),b.$patternResult.attr("value",c).trigger("change")}})}}),a(function(){a.widget.bridge("factoryBootstrap453_patternControl",a.factoryBootstrap453.patternControl),a(".factory-bootstrap-453 .factory-pattern").factoryBootstrap453_patternControl({})})}(jQuery);
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
+ !function(a){a.widget("factoryBootstrap454.patternControl",{_create:function(){this.$element=this.element,this.$preview=this.$element.find(".factory-preview"),this.$patternResult=this.$element.find(".factory-pattern-result"),this.$colorResult=this.$element.find(".factory-color-result"),this.$patterns=this.$element.find(".factory-patterns-panel"),this.$patternItems=this.$element.find(".factory-patterns-item"),this.$btnUpload=this.$element.find(".factory-upload-btn"),this.$btnChangeColor=this.$element.find(".factory-change-color-btn"),this.$colorPanel=this.$element.find(".factory-color-panel"),this.$colorContol=this.$element.find(".factory-color"),this._initMainPanel(),this._initColorPickerPanel(),this._initPatternsPanel()},_initMainPanel:function(){var a=this;this.$preview.on("click",function(){return a.togglePatternsPanel(),!1}),this.$btnChangeColor.on("click",function(){return a.toggleColorPanel(),!1})},togglePatternsPanel:function(){this.$element.hasClass("factory-patterns-panel-active")?this.hidePatternsPanel():this.showPatternsPanel()},hidePatternsPanel:function(){this.$element.removeClass("factory-patterns-panel-active")},showPatternsPanel:function(){this.$element.addClass("factory-patterns-panel-active")},hasColor:function(){return this.$element.hasClass("factory-color-panel-active")},toggleColorPanel:function(){this.hasColor()?this.hideColorPanel():this.showColorPanel()},hideColorPanel:function(){this.$element.removeClass("factory-color-panel-active"),this.$btnChangeColor.removeClass("button-active"),this.$colorResult.val(""),this.$colorResult.trigger("change"),this.$element.trigger("change")},showColorPanel:function(){this.$element.addClass("factory-color-panel-active"),this.$btnChangeColor.addClass("button-active"),this.$colorResult.val(this.$colorContol.factoryBootstrap454_colorControl("getValue")),this.$colorResult.trigger("change"),this.$element.trigger("change")},_initColorPickerPanel:function(){var a=this;this.$colorContol.bind("updated.color.factory",function(b,c){return a.$colorResult.val(c),!1})},_initPatternsPanel:function(){var b=this,c=!0,d=wp.media.editor.send.attachment;this.$btnUpload.on("click",function(){return c=!0,wp.media.editor.send.attachment=function(a,e){return c?(b.$preview.css({background:"url("+e.url+") repeat",border:"0",fontSize:"0"}),void b.$patternResult.attr("value",e.url).trigger("change")):d.apply(this,[a,e])},wp.media.editor.open(b.$btnUpload),a(".add_media").on("click",function(){c=!1}),!1}),this.$patternItems.on("click",function(){if(a(this).data("pattern")){var c=a(this).data("pattern");b.$preview.removeClass("factory-empty"),b.$preview.css({background:"url("+c+") repeat"}),b.$patternResult.attr("value",c).trigger("change")}})}}),a(function(){a.widget.bridge("factoryBootstrap454_patternControl",a.factoryBootstrap454.patternControl),a(".factory-bootstrap-454 .factory-pattern").factoryBootstrap454_patternControl({})})}(jQuery);
libs/factory/bootstrap/assets/js-min/holder.more-link.min.js CHANGED
@@ -7,4 +7,4 @@
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
- !function(a,b,c,d){"use strict";var e="factoryBootstrap453_moreLink";a.fn[e]=function(b,c){return this.each(function(){var b=a(this);b.find(".factory-more-link-show").click(function(){return a(a(this).attr("href")).fadeIn(),a(this).hide(),!1}),b.find(".factory-more-link-hide").click(function(){var b=a(a(this).attr("href"));return b.fadeOut(300,function(){b.parents(".factory-more-link").find(".factory-more-link-show").show()}),!1})})},a(function(){a(".factory-bootstrap-453 .factory-more-link").factoryBootstrap453_moreLink()})}(jQuery,window,document);
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
+ !function(a,b,c,d){"use strict";var e="factoryBootstrap454_moreLink";a.fn[e]=function(b,c){return this.each(function(){var b=a(this);b.find(".factory-more-link-show").click(function(){return a(a(this).attr("href")).fadeIn(),a(this).hide(),!1}),b.find(".factory-more-link-hide").click(function(){var b=a(a(this).attr("href"));return b.fadeOut(300,function(){b.parents(".factory-more-link").find(".factory-more-link-show").show()}),!1})})},a(function(){a(".factory-bootstrap-454 .factory-more-link").factoryBootstrap454_moreLink()})}(jQuery,window,document);
libs/factory/bootstrap/assets/js-min/plugin.gradient-picker.min.js CHANGED
@@ -7,4 +7,4 @@
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
- !function($){function ctrlPtComparator(a,b){return a.position-b.position}function bind(a,b){return"function"==typeof a.bind?a.bind(b):function(){a.apply(b,arguments)}}function GradientSelection(a,b){var c=this;this.$el=a,this.$presets=this.$el.find(".gradientPicker-pallets"),this.$presetsItems=this.$presets.find(".factory-preset-gradient"),this.$preview=this.$el.find(".gradientPicker-preview"),this.$pointsContainer=this.$el.find(".factory-points"),this.$colorPickerContainer=this.$el.find(".factory-color-picker-container"),this.$colorPicker=this.$el.find(".factory-color-picker"),this.$colorHex=this.$el.find(".factory-color-hex"),this.$opacitySliderContainer=this.$el.find(".factory-slider-container"),this.$opacitySlider=this.$el.find(".factory-bar"),this.$el.css("position","relative"),this.opts=b,this._createPresetGradients(),this._createPreview(),this._createColorPicker(),this._createDirectionDropdown(),this.controlPoints=[],b.controlPoints=b.controlPoints||[];for(var d=0;d<b.controlPoints.length;++d){var e=this.createCtrlPt(b.controlPoints[d]);this.controlPoints.push(e)}0===this.controlPoints.length&&(this.controlPoints.push(this.createCtrlPt(this.$presetsItems.data("primary")+" 0% 1")),this.controlPoints.push(this.createCtrlPt(this.$presetsItems.data("secondary")+" 100% 1"))),$(document).on("click.gp.factory",function(){c.hideColorPicker()}),this.$colorPickerContainer.on("click.gp.factory",function(a){a.stopPropagation()}),this.$pointsContainer.on("click.gp.factory",function(a){a.stopPropagation(),c.placePoint(a)}),this.updatePreview()}function ControlPoint(a,b,c){var d=this;if(this.parent=a,this.$container=a.$pointsContainer,this.$el=$('<span class="factory-point"></span>'),this.$pointColor=$('<span class="factory-point-color"></span>').appendTo(this.$el),this.$container.append(this.$el),"string"==typeof b?(b=b.split(" "),this.position=parseFloat(b[1])/100,this.color=b[0],this.opacity=b[2]):(this.position=b.position,this.color=b.color,this.opacity=b.opacity),this.outerWidth=this.$el.outerWidth(),this.$pointColor.css({"background-color":d.color,opacity:d.opacity}),"horizontal"===c){var e=(d.$container.width()-this.$el.outerWidth())*this.position;this.$el.css("left",e)}else{var f=(d.$container.height()-this.$el.outerHeight())*this.position;this.$el.css("top",f)}this.drag=bind(this.drag,this),this.stop=bind(this.stop,this),this.$el.disableSelection().css("webkit-user-select","none").draggable({axis:"horizontal"===c?"x":"y",drag:this.drag,stop:this.stop,containment:d.$container,cancel:null}),this.$el.on("click.gp.factory",function(a){d.parent.currentPoint===d?d.parent.hideColorPicker(d):d.parent.showColorPicker(d),a.stopPropagation()})}$.event.special.destroyed||($.event.special.destroyed={remove:function(a){a.handler&&a.handler()}});var agent=window.navigator.userAgent,browserPrefix=["-webkit-","-moz-","-ms-"],x,y=0;GradientSelection.prototype={_createPresetGradients:function(){var a=this;this.$presetsItems.each(function(){var a=$(this),b=$('<span class="factory-secondary-color-wrap"></span>').appendTo(a),c=$('<span class="factory-secondary-color"></span>').appendTo(b);a.css("background",a.data("primary")),c.css("background",a.data("secondary"))}),this.$presetsItems.click(function(){var b=$(this).data("primary"),c=$(this).data("secondary");a.setGradient([b+" 0% 1",c+" 100% 1"])})},_createPreview:function(){var a=this.$preview[0];a.width=0===a.clientWidth?210:a.clientWidth,a.height=0===a.clientHeight?30:a.clientHeight,this.g2d=a.getContext("2d")},_createColorPicker:function(){var a=this;this.$colorPicker.factoryBootstrap453_iris({width:217,palettes:["#16a086","#27ae61","#2a80b9","#8f44ad","#2d3e50","#f49c14","#c1392b","#bec3c7"],hide:!0,change:function(b,c){a.currentPoint.updateColor(c.color.toString()),a._colorLock||a.$colorHex.val(c.color.toString())}}),a.$colorHex.on("change paste keyup",function(){a._colorLock=!0,a.$colorPicker.factoryBootstrap453_iris("color",a.$colorHex.val()),a._cancelColorLock()}),this.$opacitySlider.noUiSlider({start:100,range:{min:0,max:100},step:1}),this.$opacitySlider.on("slide",function(){var b=parseInt(a.$opacitySlider.val()),c=b+"%";a.$opacitySliderContainer.find(".factory-visible-value").text(c),a.currentPoint.updateOpacity(b/100)}),this.$opacitySlider.on("set",function(){a.$result.val(a.getValue()),a.$result.trigger("change")})},_repeatColorLock:!1,_colorLock:!1,_colorLockTimer:!1,_cancelColorLock:function(a){var b=this;return b._colorLockTimer&&!a?(this._repeatColorLock=!0,!1):void(this._colorLockTimer=setTimeout(function(){return b._repeatColorLock?(b._repeatColorLock=!1,b._cancelColorLock(!0),!1):(b._colorLock=!1,b._colorLockTimer=!1,void(b._repeatColorLock=!1))},500))},_createDirectionDropdown:function(){var a=this,b=factory&&factory.res&&factory.res.resVertical||"vertical",c=factory&&factory.res&&factory.res.resHorizontal||"horizontal";this.$directionDropdown=$('<select class="gradientPicker-filldirection"><option value="vertical"'+("top"===a.opts.fillDirection?" selected":"")+">"+b+'</option><option value="horizontal"'+("left"===a.opts.fillDirection?" selected":"")+">"+c+"</option></select>"),this.$el.append(this.$directionDropdown),this.$directionDropdown.chosen(),this.$directionDropdown.change(function(){a.setGradientDirection($(this).val())})},showColorPicker:function(a){this.currentPoint=a,$(".factory-current-point").removeClass("factory-current-point"),a.$el.addClass("factory-current-point"),this.$colorPickerContainer.show(),this.$colorPicker.factoryBootstrap453_iris("show"),this.$colorPicker.factoryBootstrap453_iris("option","color",a.color),this.$opacitySlider.val(100*a.opacity),this.$opacitySlider.trigger("slide")},hideColorPicker:function(){$(".factory-current-point").removeClass("factory-current-point"),this.currentPoint=!1,this.$colorPickerContainer.hide()},isColorPickerShown:function(){return this.currentPoint},docClicked:function(){$(".gradientPicker-iris-wrap").hide(),$(".gradientPicker-ctrlPt").removeClass("open")},createCtrlPt:function(a){return new ControlPoint(this,a,this.opts.orientation)},updateOptions:function(a,b){if($.extend(this.opts,a),b){this.controlPoints=[],this.$pointsContainer.html("");for(var c=0;c<this.opts.controlPoints.length;++c){var d=this.createCtrlPt(this.opts.controlPoints[c]);this.controlPoints.push(d)}}switch(this.updatePreview(),this.opts.fillDirection){case"top":fillDirectCheck="horizontal";break;case"left":fillDirectCheck="vertical";break;default:fillDirectCheck=!1}fillDirectCheck&&$(".gradientPicker-filldirection",this.$el).find('option[value="'+fillDirectCheck+'"]').prop("selected",!0)},updatePreview:function(){var a=[];if(this.controlPoints.sort(ctrlPtComparator),this.g2d.clearRect(0,0,this.g2d.canvas.width,this.g2d.canvas.height),"horizontal"===this.opts.orientation)for(var b=this.g2d.createLinearGradient(0,0,this.g2d.canvas.width,0),c=0;c<this.controlPoints.length;++c){var d=this.controlPoints[c];b.addColorStop(d.position,"rgba("+hexToRgb(d.color).r+","+hexToRgb(d.color).g+","+hexToRgb(d.color).b+", "+d.opacity+")"),a.push({position:d.position,color:d.color,opacity:d.opacity})}if(this.g2d.fillStyle=b,this.g2d.fillRect(0,0,this.g2d.canvas.width,this.g2d.canvas.height),this.opts.generateStyles)var e=this._generatePreviewStyles();this.opts.change(a,e)},removeControlPoint:function(a){var b=this.controlPoints.indexOf(a);-1!=b&&(this.controlPoints.splice(b,1),a.$el.remove())},placePoint:function(a){a.stopPropagation();var b=$(a.target).offset(),c=a.pageX-b.left,d=a.pageY-b.top,e=this.g2d.getImageData(c,d,1,1),f="rgb("+e.data[0]+","+e.data[1]+","+e.data[2]+")",g=1/255*e.data[3],h=this.createCtrlPt({position:c/this.g2d.canvas.width,color:rgb2hex(f),opacity:g});this.controlPoints.push(h),this.controlPoints.sort(ctrlPtComparator),this.showColorPicker(h)},setGradient:function(a){this.updateOptions({controlPoints:a},!0),this.updatePreview()},setGradientDirection:function(a){switch(a){case"horizontal":this.updateOptions({type:"linear",fillDirection:"top"},!1);break;case"vertical":this.updateOptions({type:"linear",fillDirection:"left"},!1)}},_generatePreviewStyles:function(){var a={};a.filldirection=this.opts.fillDirection,a.color_points=[];for(var b=0;b<this.controlPoints.length;++b){var c=this.controlPoints[b];a.color_points.push(c.color+" "+(100*c.position|0)+"% "+c.opacity)}return JSON.stringify(a)},_genPalletsBackground:function(a,b){return cssRules="linear-gradient(90deg, "+a+" 0%, "+b+" 100%)",agent.indexOf("WebKit")>=0?crossBrowserRule=browserPrefix[0]+cssRules:agent.indexOf("Mozilla")>=0?crossBrowserRule=browserPrefix[1]+cssRules:agent.indexOf("Microsoft")>=0?crossBrowserRule=browserPrefix[2]+cssRules:crossBrowserRule=cssRules,crossBrowserRule}},ControlPoint.prototype={updateColor:function(a){this.color=a,this.$pointColor.css("background-color",a),this.parent.updatePreview()},updateOpacity:function(a){this.opacity=a,this.$pointColor.css("opacity",a),this.parent.updatePreview()},drag:function(e,ui){var stopPointPosition=eval(this.$el.parent().offset().top+this.$el.parent().height()+20);e.pageY>stopPointPosition&&this.remove();var left=ui.position.left;this.position=left/(this.$container.width()-this.outerWidth),this.parent.updatePreview()},stop:function(){this.parent.updatePreview()},remove:function(){this.parent.removeControlPoint(this),this.parent.hideColorPicker(),this.parent.updatePreview()}};var methods={init:function(a){a=$.extend({controlPoints:["#FFF 0% 1","#000 100% 1"],orientation:"horizontal",type:"linear",fillDirection:"left",generateStyles:!0,change:function(){}},a),this.each(function(){var b=$(this),c=new GradientSelection(b,a);b.data("gradientPicker-sel",c)})},update:function(a){this.each(function(){var b=$(this),c=b.data("gradientPicker-sel");null!=c&&c.updateOptions(a,!0)})}};$.fn.gradientPicker=function(a,b){"string"==typeof a&&"init"!==a?methods[a].call(this,b):(b=a,methods.init.call(this,b))}}(jQuery);
7
  * Support: http://webcraftic.com/contact-us/
8
  */
9
 
10
+ !function($){function ctrlPtComparator(a,b){return a.position-b.position}function bind(a,b){return"function"==typeof a.bind?a.bind(b):function(){a.apply(b,arguments)}}function GradientSelection(a,b){var c=this;this.$el=a,this.$presets=this.$el.find(".gradientPicker-pallets"),this.$presetsItems=this.$presets.find(".factory-preset-gradient"),this.$preview=this.$el.find(".gradientPicker-preview"),this.$pointsContainer=this.$el.find(".factory-points"),this.$colorPickerContainer=this.$el.find(".factory-color-picker-container"),this.$colorPicker=this.$el.find(".factory-color-picker"),this.$colorHex=this.$el.find(".factory-color-hex"),this.$opacitySliderContainer=this.$el.find(".factory-slider-container"),this.$opacitySlider=this.$el.find(".factory-bar"),this.$el.css("position","relative"),this.opts=b,this._createPresetGradients(),this._createPreview(),this._createColorPicker(),this._createDirectionDropdown(),this.controlPoints=[],b.controlPoints=b.controlPoints||[];for(var d=0;d<b.controlPoints.length;++d){var e=this.createCtrlPt(b.controlPoints[d]);this.controlPoints.push(e)}0===this.controlPoints.length&&(this.controlPoints.push(this.createCtrlPt(this.$presetsItems.data("primary")+" 0% 1")),this.controlPoints.push(this.createCtrlPt(this.$presetsItems.data("secondary")+" 100% 1"))),$(document).on("click.gp.factory",function(){c.hideColorPicker()}),this.$colorPickerContainer.on("click.gp.factory",function(a){a.stopPropagation()}),this.$pointsContainer.on("click.gp.factory",function(a){a.stopPropagation(),c.placePoint(a)}),this.updatePreview()}function ControlPoint(a,b,c){var d=this;if(this.parent=a,this.$container=a.$pointsContainer,this.$el=$('<span class="factory-point"></span>'),this.$pointColor=$('<span class="factory-point-color"></span>').appendTo(this.$el),this.$container.append(this.$el),"string"==typeof b?(b=b.split(" "),this.position=parseFloat(b[1])/100,this.color=b[0],this.opacity=b[2]):(this.position=b.position,this.color=b.color,this.opacity=b.opacity),this.outerWidth=this.$el.outerWidth(),this.$pointColor.css({"background-color":d.color,opacity:d.opacity}),"horizontal"===c){var e=(d.$container.width()-this.$el.outerWidth())*this.position;this.$el.css("left",e)}else{var f=(d.$container.height()-this.$el.outerHeight())*this.position;this.$el.css("top",f)}this.drag=bind(this.drag,this),this.stop=bind(this.stop,this),this.$el.disableSelection().css("webkit-user-select","none").draggable({axis:"horizontal"===c?"x":"y",drag:this.drag,stop:this.stop,containment:d.$container,cancel:null}),this.$el.on("click.gp.factory",function(a){d.parent.currentPoint===d?d.parent.hideColorPicker(d):d.parent.showColorPicker(d),a.stopPropagation()})}$.event.special.destroyed||($.event.special.destroyed={remove:function(a){a.handler&&a.handler()}});var agent=window.navigator.userAgent,browserPrefix=["-webkit-","-moz-","-ms-"],x,y=0;GradientSelection.prototype={_createPresetGradients:function(){var a=this;this.$presetsItems.each(function(){var a=$(this),b=$('<span class="factory-secondary-color-wrap"></span>').appendTo(a),c=$('<span class="factory-secondary-color"></span>').appendTo(b);a.css("background",a.data("primary")),c.css("background",a.data("secondary"))}),this.$presetsItems.click(function(){var b=$(this).data("primary"),c=$(this).data("secondary");a.setGradient([b+" 0% 1",c+" 100% 1"])})},_createPreview:function(){var a=this.$preview[0];a.width=0===a.clientWidth?210:a.clientWidth,a.height=0===a.clientHeight?30:a.clientHeight,this.g2d=a.getContext("2d")},_createColorPicker:function(){var a=this;this.$colorPicker.factoryBootstrap454_iris({width:217,palettes:["#16a086","#27ae61","#2a80b9","#8f44ad","#2d3e50","#f49c14","#c1392b","#bec3c7"],hide:!0,change:function(b,c){a.currentPoint.updateColor(c.color.toString()),a._colorLock||a.$colorHex.val(c.color.toString())}}),a.$colorHex.on("change paste keyup",function(){a._colorLock=!0,a.$colorPicker.factoryBootstrap454_iris("color",a.$colorHex.val()),a._cancelColorLock()}),this.$opacitySlider.noUiSlider({start:100,range:{min:0,max:100},step:1}),this.$opacitySlider.on("slide",function(){var b=parseInt(a.$opacitySlider.val()),c=b+"%";a.$opacitySliderContainer.find(".factory-visible-value").text(c),a.currentPoint.updateOpacity(b/100)}),this.$opacitySlider.on("set",function(){a.$result.val(a.getValue()),a.$result.trigger("change")})},_repeatColorLock:!1,_colorLock:!1,_colorLockTimer:!1,_cancelColorLock:function(a){var b=this;return b._colorLockTimer&&!a?(this._repeatColorLock=!0,!1):void(this._colorLockTimer=setTimeout(function(){return b._repeatColorLock?(b._repeatColorLock=!1,b._cancelColorLock(!0),!1):(b._colorLock=!1,b._colorLockTimer=!1,void(b._repeatColorLock=!1))},500))},_createDirectionDropdown:function(){var a=this,b=factory&&factory.res&&factory.res.resVertical||"vertical",c=factory&&factory.res&&factory.res.resHorizontal||"horizontal";this.$directionDropdown=$('<select class="gradientPicker-filldirection"><option value="vertical"'+("top"===a.opts.fillDirection?" selected":"")+">"+b+'</option><option value="horizontal"'+("left"===a.opts.fillDirection?" selected":"")+">"+c+"</option></select>"),this.$el.append(this.$directionDropdown),this.$directionDropdown.chosen(),this.$directionDropdown.change(function(){a.setGradientDirection($(this).val())})},showColorPicker:function(a){this.currentPoint=a,$(".factory-current-point").removeClass("factory-current-point"),a.$el.addClass("factory-current-point"),this.$colorPickerContainer.show(),this.$colorPicker.factoryBootstrap454_iris("show"),this.$colorPicker.factoryBootstrap454_iris("option","color",a.color),this.$opacitySlider.val(100*a.opacity),this.$opacitySlider.trigger("slide")},hideColorPicker:function(){$(".factory-current-point").removeClass("factory-current-point"),this.currentPoint=!1,this.$colorPickerContainer.hide()},isColorPickerShown:function(){return this.currentPoint},docClicked:function(){$(".gradientPicker-iris-wrap").hide(),$(".gradientPicker-ctrlPt").removeClass("open")},createCtrlPt:function(a){return new ControlPoint(this,a,this.opts.orientation)},updateOptions:function(a,b){if($.extend(this.opts,a),b){this.controlPoints=[],this.$pointsContainer.html("");for(var c=0;c<this.opts.controlPoints.length;++c){var d=this.createCtrlPt(this.opts.controlPoints[c]);this.controlPoints.push(d)}}switch(this.updatePreview(),this.opts.fillDirection){case"top":fillDirectCheck="horizontal";break;case"left":fillDirectCheck="vertical";break;default:fillDirectCheck=!1}fillDirectCheck&&$(".gradientPicker-filldirection",this.$el).find('option[value="'+fillDirectCheck+'"]').prop("selected",!0)},updatePreview:function(){var a=[];if(this.controlPoints.sort(ctrlPtComparator),this.g2d.clearRect(0,0,this.g2d.canvas.width,this.g2d.canvas.height),"horizontal"===this.opts.orientation)for(var b=this.g2d.createLinearGradient(0,0,this.g2d.canvas.width,0),c=0;c<this.controlPoints.length;++c){var d=this.controlPoints[c];b.addColorStop(d.position,"rgba("+hexToRgb(d.color).r+","+hexToRgb(d.color).g+","+hexToRgb(d.color).b+", "+d.opacity+")"),a.push({position:d.position,color:d.color,opacity:d.opacity})}if(this.g2d.fillStyle=b,this.g2d.fillRect(0,0,this.g2d.canvas.width,this.g2d.canvas.height),this.opts.generateStyles)var e=this._generatePreviewStyles();this.opts.change(a,e)},removeControlPoint:function(a){var b=this.controlPoints.indexOf(a);-1!=b&&(this.controlPoints.splice(b,1),a.$el.remove())},placePoint:function(a){a.stopPropagation();var b=$(a.target).offset(),c=a.pageX-b.left,d=a.pageY-b.top,e=this.g2d.getImageData(c,d,1,1),f="rgb("+e.data[0]+","+e.data[1]+","+e.data[2]+")",g=1/255*e.data[3],h=this.createCtrlPt({position:c/this.g2d.canvas.width,color:rgb2hex(f),opacity:g});this.controlPoints.push(h),this.controlPoints.sort(ctrlPtComparator),this.showColorPicker(h)},setGradient:function(a){this.updateOptions({controlPoints:a},!0),this.updatePreview()},setGradientDirection:function(a){switch(a){case"horizontal":this.updateOptions({type:"linear",fillDirection:"top"},!1);break;case"vertical":this.updateOptions({type:"linear",fillDirection:"left"},!1)}},_generatePreviewStyles:function(){var a={};a.filldirection=this.opts.fillDirection,a.color_points=[];for(var b=0;b<this.controlPoints.length;++b){var c=this.controlPoints[b];a.color_points.push(c.color+" "+(100*c.position|0)+"% "+c.opacity)}return JSON.stringify(a)},_genPalletsBackground:function(a,b){return cssRules="linear-gradient(90deg, "+a+" 0%, "+b+" 100%)",agent.indexOf("WebKit")>=0?crossBrowserRule=browserPrefix[0]+cssRules:agent.indexOf("Mozilla")>=0?crossBrowserRule=browserPrefix[1]+cssRules:agent.indexOf("Microsoft")>=0?crossBrowserRule=browserPrefix[2]+cssRules:crossBrowserRule=cssRules,crossBrowserRule}},ControlPoint.prototype={updateColor:function(a){this.color=a,this.$pointColor.css("background-color",a),this.parent.updatePreview()},updateOpacity:function(a){this.opacity=a,this.$pointColor.css("opacity",a),this.parent.updatePreview()},drag:function(e,ui){var stopPointPosition=eval(this.$el.parent().offset().top+this.$el.parent().height()+20);e.pageY>stopPointPosition&&this.remove();var left=ui.position.left;this.position=left/(this.$container.width()-this.outerWidth),this.parent.updatePreview()},stop:function(){this.parent.updatePreview()},