Instagram Slider Widget - Version 1.5.0

Version Description

  • Renamed the plugin to conform to Facebook and Instagram
Download this release

Release Info

Developer webcraftic
Plugin Icon 128x128 Instagram Slider Widget
Version 1.5.0
Comparing to
See all releases

Code changes from version 1.4.2 to 1.5.0

Files changed (130) hide show
  1. admin/ajax/check-license.php +87 -0
  2. admin/assets/css/jr-insta-admin.css +31 -0
  3. admin/assets/css/license-manager.css +659 -0
  4. admin/assets/img/fon.jpg +0 -0
  5. admin/assets/img/instagram.png +0 -0
  6. admin/assets/img/wis.png +0 -0
  7. admin/assets/index.php +2 -0
  8. admin/assets/js/jr-insta-admin.js +114 -0
  9. admin/assets/js/license-manager.js +77 -0
  10. admin/class-wis-activation.php +36 -0
  11. admin/class-wis-page.php +67 -0
  12. admin/pages/about.php +51 -0
  13. admin/pages/license.php +202 -0
  14. admin/pages/settings.php +195 -0
  15. admin/pages/widgets.php +128 -0
  16. admin/views/tab-about.php +104 -0
  17. admin/views/tab-license.php +147 -0
  18. admin/views/tab-settings.php +37 -0
  19. admin/views/tab-widgets.php +27 -0
  20. assets/index.php +2 -0
  21. includes/class-wis-plugin.php +127 -0
  22. includes/class-wis_instagram_slider.php +1517 -0
  23. instaram_slider.php +142 -1507
  24. libs/factory/adverts/assets/index.php +2 -0
  25. libs/factory/adverts/assets/js/index.php +2 -0
  26. libs/factory/adverts/assets/js/script.js +13 -0
  27. libs/factory/adverts/boot.php +50 -0
  28. libs/factory/adverts/includes/class-adverts-base.php +261 -0
  29. libs/factory/adverts/includes/class-adverts-dashboard-widget.php +107 -0
  30. libs/factory/adverts/includes/class-adverts-rest-request.php +180 -0
  31. libs/factory/adverts/includes/class-base.php +323 -0
  32. libs/factory/adverts/includes/class-dashboard-widget.php +99 -0
  33. libs/factory/adverts/includes/class-rest-request.php +197 -0
  34. libs/factory/adverts/includes/index.php +2 -0
  35. libs/factory/adverts/index.php +2 -0
  36. libs/factory/adverts/langs/wbcr_factory_adverts_102-ru_RU.mo +0 -0
  37. libs/factory/adverts/langs/wbcr_factory_adverts_102-ru_RU.po +83 -0
  38. libs/factory/adverts/readme.txt +98 -0
  39. libs/factory/bootstrap/assets/css-min/bootstrap.accordion.min.css +11 -0
  40. libs/factory/bootstrap/assets/css-min/bootstrap.blue.min.css +11 -0
  41. libs/factory/bootstrap/assets/css-min/bootstrap.coffee.min.css +11 -0
  42. libs/factory/bootstrap/assets/css-min/bootstrap.core.min.css +25 -0
  43. libs/factory/bootstrap/assets/css-min/bootstrap.datepicker.min.css +17 -0
  44. libs/factory/bootstrap/assets/css-min/bootstrap.datetimepicker.min.css +15 -0
  45. libs/factory/bootstrap/assets/css-min/bootstrap.ectoplasm.min.css +11 -0
  46. libs/factory/bootstrap/assets/css-min/bootstrap.form-group.min.css +11 -0
  47. libs/factory/bootstrap/assets/css-min/bootstrap.form-metabox.min.css +11 -0
  48. libs/factory/bootstrap/assets/css-min/bootstrap.light.min.css +11 -0
  49. libs/factory/bootstrap/assets/css-min/bootstrap.midnight.min.css +11 -0
  50. libs/factory/bootstrap/assets/css-min/bootstrap.ocean.min.css +11 -0
  51. libs/factory/bootstrap/assets/css-min/bootstrap.separator.min.css +11 -0
  52. libs/factory/bootstrap/assets/css-min/bootstrap.sunrise.min.css +11 -0
  53. libs/factory/bootstrap/assets/css-min/bootstrap.tab.min.css +11 -0
  54. libs/factory/bootstrap/assets/css-min/bootstrap.wp-editor.min.css +11 -0
  55. libs/factory/bootstrap/assets/css-min/control.checkbox.min.css +11 -0
  56. libs/factory/bootstrap/assets/css-min/control.color-and-opacity.min.css +11 -0
  57. libs/factory/bootstrap/assets/css-min/control.color.min.css +11 -0
  58. libs/factory/bootstrap/assets/css-min/control.dropdown-and-colors.min.css +11 -0
  59. libs/factory/bootstrap/assets/css-min/control.dropdown.min.css +11 -0
  60. libs/factory/bootstrap/assets/css-min/control.fonts.min.css +11 -0
  61. libs/factory/bootstrap/assets/css-min/control.list.min.css +11 -0
  62. libs/factory/bootstrap/assets/css-min/control.multiple-textbox.min.css +11 -0
  63. libs/factory/bootstrap/assets/css-min/control.pattern.min.css +11 -0
  64. libs/factory/bootstrap/assets/css-min/control.radio-colors.min.css +11 -0
  65. libs/factory/bootstrap/assets/css-min/holder.conrol-group.min.css +11 -0
  66. libs/factory/bootstrap/assets/css-min/holder.more-link.min.css +11 -0
  67. libs/factory/bootstrap/assets/css-min/plugin.chosen.min.css +21 -0
  68. libs/factory/bootstrap/assets/css-min/plugin.gradient-picker.min.css +11 -0
  69. libs/factory/bootstrap/assets/css-min/plugin.nouislider.min.css +11 -0
  70. libs/factory/bootstrap/assets/css-min/plugin.paddings-editor.min.css +11 -0
  71. libs/factory/bootstrap/assets/images/chosen-sprite.png +0 -0
  72. libs/factory/bootstrap/assets/images/chosen-sprite@2x.png +0 -0
  73. libs/factory/bootstrap/assets/images/color_picker_pattern.jpg +0 -0
  74. libs/factory/bootstrap/assets/images/drop-menu_arrow.png +0 -0
  75. libs/factory/bootstrap/assets/images/loader-sm-f6f6f6.gif +0 -0
  76. libs/factory/bootstrap/assets/images/loader-sm-tr.gif +0 -0
  77. libs/factory/bootstrap/assets/images/no-pattern-background-control.png +0 -0
  78. libs/factory/bootstrap/assets/js-min/bootstrap.accordion.min.js +10 -0
  79. libs/factory/bootstrap/assets/js-min/bootstrap.affix.min.js +10 -0
  80. libs/factory/bootstrap/assets/js-min/bootstrap.alert.min.js +10 -0
  81. libs/factory/bootstrap/assets/js-min/bootstrap.button.min.js +10 -0
  82. libs/factory/bootstrap/assets/js-min/bootstrap.carousel.min.js +10 -0
  83. libs/factory/bootstrap/assets/js-min/bootstrap.collapse.min.js +10 -0
  84. libs/factory/bootstrap/assets/js-min/bootstrap.datepicker.min.js +17 -0
  85. libs/factory/bootstrap/assets/js-min/bootstrap.datetimepicker.min.js +18 -0
  86. libs/factory/bootstrap/assets/js-min/bootstrap.dropdown.min.js +10 -0
  87. libs/factory/bootstrap/assets/js-min/bootstrap.modal.min.js +10 -0
  88. libs/factory/bootstrap/assets/js-min/bootstrap.popover.min.js +10 -0
  89. libs/factory/bootstrap/assets/js-min/bootstrap.scrollspy.min.js +10 -0
  90. libs/factory/bootstrap/assets/js-min/bootstrap.tab.min.js +10 -0
  91. libs/factory/bootstrap/assets/js-min/bootstrap.tooltip.min.js +10 -0
  92. libs/factory/bootstrap/assets/js-min/bootstrap.transition.min.js +10 -0
  93. libs/factory/bootstrap/assets/js-min/control.checkbox.min.js +10 -0
  94. libs/factory/bootstrap/assets/js-min/control.color-and-opacity.min.js +10 -0
  95. libs/factory/bootstrap/assets/js-min/control.color.min.js +10 -0
  96. libs/factory/bootstrap/assets/js-min/control.dropdown-and-colors.min.js +10 -0
  97. libs/factory/bootstrap/assets/js-min/control.dropdown.min.js +10 -0
  98. libs/factory/bootstrap/assets/js-min/control.fonts.min.js +10 -0
  99. libs/factory/bootstrap/assets/js-min/control.gradient.min.js +10 -0
  100. libs/factory/bootstrap/assets/js-min/control.integer.min.js +10 -0
  101. libs/factory/bootstrap/assets/js-min/control.list.min.js +10 -0
  102. libs/factory/bootstrap/assets/js-min/control.multiple-textbox.min.js +10 -0
  103. libs/factory/bootstrap/assets/js-min/control.pattern.min.js +10 -0
  104. libs/factory/bootstrap/assets/js-min/global.color-functions.min.js +10 -0
  105. libs/factory/bootstrap/assets/js-min/holder.conrol-group.min.js +10 -0
  106. libs/factory/bootstrap/assets/js-min/holder.more-link.min.js +10 -0
  107. libs/factory/bootstrap/assets/js-min/plugin.chosen.min.js +21 -0
  108. libs/factory/bootstrap/assets/js-min/plugin.color.min.js +10 -0
  109. libs/factory/bootstrap/assets/js-min/plugin.ddslick.min.js +10 -0
  110. libs/factory/bootstrap/assets/js-min/plugin.gradient-picker.min.js +10 -0
  111. libs/factory/bootstrap/assets/js-min/plugin.iris.min.js +13 -0
  112. libs/factory/bootstrap/assets/js-min/plugin.moment-with-locales.min.js +526 -0
  113. libs/factory/bootstrap/assets/js-min/plugin.nouislider.min.js +11 -0
  114. libs/factory/bootstrap/assets/js-min/plugin.paddings-editor.min.js +10 -0
  115. libs/factory/bootstrap/boot.php +46 -0
  116. libs/factory/bootstrap/includes/functions.php +286 -0
  117. libs/factory/bootstrap/includes/index.php +2 -0
  118. libs/factory/bootstrap/index.php +2 -0
  119. libs/factory/core/README.md +3 -0
  120. libs/factory/core/boot.php +62 -0
  121. libs/factory/core/includes/activation/class-factory-activator.php +43 -0
  122. libs/factory/core/includes/activation/class-factory-update.php +39 -0
  123. libs/factory/core/includes/activation/index.php +2 -0
  124. libs/factory/core/includes/assets-managment/class-factory-assets-list.php +126 -0
  125. libs/factory/core/includes/assets-managment/class-factory-script-list.php +166 -0
  126. libs/factory/core/includes/assets-managment/class-factory-style-list.php +86 -0
  127. libs/factory/core/includes/assets-managment/index.php +2 -0
  128. libs/factory/core/includes/class-check-compatibility.php +122 -0
  129. libs/factory/core/includes/class-factory-migrations.php +541 -0
  130. libs/factory/core/includes/class-factory-notices.php +255 -0
admin/ajax/check-license.php ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Ajax plugin check licensing
4
+ * @author Webcraftic <wordpress.webraftic@gmail.com>
5
+ * @copyright (c) 2017 Webraftic Ltd
6
+ * @version 1.0
7
+ */
8
+
9
+ // Exit if accessed directly
10
+ if( !defined('ABSPATH') ) {
11
+ exit;
12
+ }
13
+
14
+ /**
15
+ * Обработчик ajax запросов для проверки, активации, деактивации лицензионного ключа
16
+ *
17
+ * @since 1.4.0
18
+ */
19
+ function wis_check_license()
20
+ {
21
+ check_admin_referer('license');
22
+
23
+ $action = WIS_Plugin::app()->request->post('license_action', false, true);
24
+ $license_key = WIS_Plugin::app()->request->post('licensekey', null);
25
+
26
+ if( empty($action) || !in_array($action, array('activate', 'deactivate', 'sync', 'unsubscribe')) ) {
27
+ wp_send_json_error(array('error_message' => __('Licensing action not passed or this action is prohibited!', 'instagram-slider-widget')));
28
+ die();
29
+ }
30
+
31
+ $licensing = WIS_Plugin::app()->premium;
32
+
33
+ $result = null;
34
+ $success_message = '';
35
+
36
+ switch( $action ) {
37
+ case 'activate':
38
+ if( empty($license_key) || strlen($license_key) > 32 ) {
39
+ wp_send_json_error(array('error_message' => __('License key is empty or license key too long (license key is 32 characters long)', 'instagram-slider-widget')));
40
+ } else {
41
+ $result = $licensing->activate($license_key);
42
+ $success_message = __('Your license has been successfully activated', 'instagram-slider-widget');
43
+ }
44
+ break;
45
+ case 'deactivate':
46
+ $result = $licensing->deactivate();
47
+ $success_message = __('The license is deactivated', 'instagram-slider-widget');
48
+ break;
49
+ case 'sync':
50
+ $result = $licensing->sync();
51
+ $success_message = __('The license has been updated', 'instagram-slider-widget');
52
+ break;
53
+ case 'unsubscribe':
54
+ $result = $licensing->cancel_paid_subscription();
55
+ $success_message = __('Subscription success cancelled', 'instagram-slider-widget');
56
+ break;
57
+ }
58
+
59
+ if( is_wp_error($result) ) {
60
+
61
+ /**
62
+ * Экшен выполняет, когда проверка лицензии вернула ошибку
63
+ * @param string $action
64
+ * @param string $license_key
65
+ * @since 1.4.0
66
+ */
67
+ add_action('wbcr/isw/check_license_error', $action, $license_key);
68
+
69
+ wp_send_json_error(array('error_message' => $result->get_error_message()));
70
+ die();
71
+ }
72
+
73
+ /**
74
+ * Экшен выполняет, когда проверка лицензии успешно завершена
75
+ * @param string $action
76
+ * @param string $license_key
77
+ * @since 1.4.0
78
+ */
79
+ add_action('wbcr/isw/check_license_success', $action, $license_key);
80
+
81
+ wp_send_json_success(array('message' => $success_message));
82
+
83
+ die();
84
+ }
85
+
86
+ add_action('wp_ajax_wis_check_license', 'wis_check_license');
87
+
admin/assets/css/jr-insta-admin.css ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .jr-container .donate { padding: 5px 15px 10px; display: inline-block; position: relative; color: #000; background: #ffd751; -webkit-border-radius: 5px; border-radius: 5px; border: 1px solid #b4b4b4; font-weight: bold; font-size: 14px; text-decoration: none; }
2
+ .jr-container .donate a { outline: 0; cursor: pointer }
3
+ .jr-container .donate span:before { color: #ce1f00; font: 400 20px/1 dashicons; font-family: dashicons; font-size: 24px; font-style: normal; font-variant: normal; font-weight: 400; font-stretch: normal; line-height: 1; content: '\f487'; position: relative; display: inline-block; top: 4px; margin-right: 4px; }
4
+ .jr-container .pressthis a, .jr-container .pressthis-bookmarklet a,
5
+ .jr-container .pressthis a:active, .jr-container .pressthis-bookmarklet a:active,
6
+ .jr-container .pressthis a:focus, .jr-container .pressthis-bookmarklet a:focus,
7
+ .jr-container .pressthis a:hover, .jr-container .pressthis-bookmarklet a:hover { cursor: pointer; background: #53b5d9; border: 1px solid #0074a2; color: #ffffff; font-weight: bold }
8
+ .jr-container .jr_insta_error { border-left: 4px solid #dd3d36; -moz-box-shadow: 0 1px 1px 0 rgba(0,0,0,.1); -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,.1); box-shadow: 0 1px 1px 0 rgba(0,0,0,.1); padding: 5px 12px; }
9
+ .jr-container .jr-radio { margin-right: 20px }
10
+ .jr-container .jr-search-for-container { display: block; margin-bottom: 7px; }
11
+ .jr-container .jr-seach-for { width: 90px; display: inline-block; vertical-align: middle }
12
+
13
+ .jr-container .jr-advanced { text-decoration: none; border: none }
14
+ .jr-container .jr-advanced:focus { outline: 0; border: none; box-shadow:none }
15
+
16
+ .jr-container .jr-advanced-input div { border: 1px solid #cfcfcf; padding: 10px; margin: 25px 0 0; }
17
+ .jr-container .jr-advanced-input .jr-advanced-title{ margin: -22px 0 0 0; background-color: white; width: 160px; padding: 3px 10px; border: 1px solid #cfcfcf; }
18
+ .jr-container .jr-description { color: #777; font-size: smaller; clear:both; display:block; margin-top: 5px;}
19
+ .jr-container .jr-description.hide-media-library, .jr-container .jr-description.hide-instagram { display: none }
20
+
21
+ .jr-container .switch { position: relative; display: inline-block; margin-left: 5px; width: 45px; height: 24px; }
22
+ .jr-container .switch input {display:none;}
23
+ .jr-container .slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; -webkit-transition: .4s; transition: .4s; }
24
+ .jr-container .slider:before { position: absolute; content: ""; height: 22px; width: 22px; left: 0px; bottom: 0px; border: 1px solid #e5e5e5; background-color: white; -webkit-transition: .4s; transition: .4s; }
25
+ .jr-container input:checked + .slider { background-color: #0085ba; }
26
+ .jr-container input:focus + .slider { box-shadow: 0 0 1px #0085ba; }
27
+ .jr-container input:checked + .slider:before { -webkit-transform: translateX(22px); -ms-transform: translateX(22px); transform: translateX(22px); }
28
+ .jr-container .slider.round { border-radius: 34px; }
29
+ .jr-container .slider.round:before { border-radius: 50%; }
30
+ .jr-container .donate-buttons { text-align: center }
31
+ .jr-container .donate-button-link { cursor: pointer }
admin/assets/css/license-manager.css ADDED
@@ -0,0 +1,659 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ .not-visible-in-manager {
3
+ display: none;
4
+ }
5
+
6
+ /**
7
+ * Global License Message
8
+ */
9
+ .global-license-message {
10
+ width: 600px;
11
+ margin: auto;
12
+ /*margin-top: 100px;*/
13
+ font-size: 14px;
14
+ line-height: 170%;
15
+ }
16
+
17
+ .global-license-message h2, .global-license-message h3 {
18
+ padding: 0px;
19
+ margin: 5px 0;
20
+ }
21
+
22
+ .onp-page-wrap {
23
+ max-width: 720px;
24
+ margin: auto;
25
+ margin-top: 40px;
26
+ font-size: 14px;
27
+ line-height: 170%;
28
+ }
29
+
30
+ .onp-container {
31
+ border: 0px;
32
+ padding: 0px;
33
+ border-radius: 5px;
34
+ background: rgb(255, 255, 255) !important;
35
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
36
+ -moz-box-sizing: border-box;
37
+ box-sizing: border-box;
38
+ }
39
+
40
+ #license-manager .onp-container {
41
+ background: -moz-linear-gradient(top, rgba(255, 255, 255, 1) 63%, rgba(246, 246, 246, 1) 100%); /* FF3.6+ */
42
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(63%, rgba(255, 255, 255, 1)), color-stop(100%, rgba(246, 246, 246, 1))); /* Chrome,Safari4+ */
43
+ background: -webkit-linear-gradient(top, rgba(255, 255, 255, 1) 63%, rgba(246, 246, 246, 1) 100%); /* Chrome10+,Safari5.1+ */
44
+ background: -o-linear-gradient(top, rgba(255, 255, 255, 1) 63%, rgba(246, 246, 246, 1) 100%); /* Opera 11.10+ */
45
+ background: -ms-linear-gradient(top, rgba(255, 255, 255, 1) 63%, rgba(246, 246, 246, 1) 100%); /* IE10+ */
46
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 1) 63%, rgba(246, 246, 246, 1) 100%); /* W3C */
47
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f6f6f6', GradientType=0); /* IE6-9 */
48
+ }
49
+
50
+ .onp-container h2 {
51
+ margin: 0px;
52
+ padding: 0px;
53
+ }
54
+
55
+ .onp-container p {
56
+ margin: 0 0 2px 0;
57
+ padding: 0px;
58
+ line-height: 170%;
59
+ }
60
+
61
+ .btn-uppercase {
62
+ font-size: 12px;
63
+ letter-spacing: 1px;
64
+ text-transform: uppercase;
65
+ text-decoration: none;
66
+ }
67
+
68
+ .btn-uppercase *[class^=icon] {
69
+ position: relative;
70
+ top: -1px;
71
+ left: -1px;
72
+ }
73
+
74
+ .onp-page-wrap .license-message {
75
+ margin-bottom: 20px;
76
+ overflow: hidden;
77
+ }
78
+
79
+ .onp-page-wrap .license-message .alert {
80
+ margin: 0px;
81
+ }
82
+
83
+ .onp-page-wrap .license-message strong {
84
+ display: block;
85
+ margin-bottom: 0px;
86
+ }
87
+
88
+ .onp-page-wrap .license-message p {
89
+ margin: 1px 0 1px 0;
90
+ padding: 0px;
91
+ }
92
+
93
+ .onp-page-wrap .license-message a {
94
+ font-weight: bold;
95
+ }
96
+
97
+ .license-message .alert-warning-icon {
98
+ padding-left: 60px;
99
+ background-image: url("../img/warning.png");
100
+ background-position: 15px 11px;
101
+ background-repeat: no-repeat;
102
+ }
103
+
104
+ #onp-hide-license-manager {
105
+ position: absolute;
106
+ top: 2px;
107
+ right: 15px;
108
+ font-size: 12px;
109
+ color: #777;
110
+ font-weight: bold;
111
+ }
112
+
113
+ #onp-hide-license-manager:hover {
114
+ text-decoration: none;
115
+ }
116
+
117
+ #onp-hide-license-manager,
118
+ #onp-hide-license-manager:focus,
119
+ #onp-hide-license-manager:hover {
120
+ outline: none;
121
+ border: 0px;
122
+ box-shadow: none;
123
+ }
124
+
125
+ #onp-hide-license-manager .fa {
126
+ margin-right: 5px;
127
+ }
128
+
129
+ #license-manager .license-details-wrap {
130
+ border: 1px solid #e9e9e9;
131
+ padding: 0px;
132
+ border-radius: 5px;
133
+
134
+ background: rgb(255, 255, 255); /* Old browsers */
135
+ background: -moz-linear-gradient(top, rgba(255, 255, 255, 1) 63%, rgba(246, 246, 246, 1) 100%); /* FF3.6+ */
136
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(63%, rgba(255, 255, 255, 1)), color-stop(100%, rgba(246, 246, 246, 1))); /* Chrome,Safari4+ */
137
+ background: -webkit-linear-gradient(top, rgba(255, 255, 255, 1) 63%, rgba(246, 246, 246, 1) 100%); /* Chrome10+,Safari5.1+ */
138
+ background: -o-linear-gradient(top, rgba(255, 255, 255, 1) 63%, rgba(246, 246, 246, 1) 100%); /* Opera 11.10+ */
139
+ background: -ms-linear-gradient(top, rgba(255, 255, 255, 1) 63%, rgba(246, 246, 246, 1) 100%); /* IE10+ */
140
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 1) 63%, rgba(246, 246, 246, 1) 100%); /* W3C */
141
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f6f6f6', GradientType=0); /* IE6-9 */
142
+
143
+ box-shadow: 0px 2px 1px #c9c9c9;
144
+ }
145
+
146
+ #license-manager .activate-trial-hint {
147
+ background-color: #f8f8f8;
148
+ padding: 10px 20px;
149
+ position: relative;
150
+ -moz-box-sizing: content-box;
151
+ box-sizing: content-box;
152
+ }
153
+
154
+ #license-manager .activate-error-hint {
155
+ background-color: #fb7976;
156
+ color: #f5f5f5;
157
+ text-shadow: none;
158
+ padding: 2px 9px;
159
+ width: 100%;
160
+ position: relative;
161
+ margin-left: -9px;
162
+ -moz-box-sizing: content-box;
163
+ box-sizing: content-box;
164
+ }
165
+
166
+ #license-manager .license-details {
167
+ padding: 20px;
168
+ padding-bottom: 0px;
169
+ -webkit-border-top-left-radius: 5px;
170
+ -webkit-border-top-right-radius: 5px;
171
+ -moz-border-radius-topleft: 5px;
172
+ -moz-border-radius-topright: 5px;
173
+ border-top-left-radius: 5px;
174
+ border-top-right-radius: 5px;
175
+
176
+ position: relative;
177
+ z-index: 10;
178
+ }
179
+
180
+ #license-manager .license-key-identity {
181
+ font-style: italic;
182
+ position: relative;
183
+ top: -6px;
184
+ }
185
+
186
+ #license-manager .license-key-identity code {
187
+ display: inline-block;
188
+ padding: 2px 5px;
189
+ font-size: 16px;
190
+ }
191
+
192
+ #license-manager .license-key-description {
193
+ font-size: 12px;
194
+ }
195
+
196
+ #license-manager .license-delete-button {
197
+ float: right;
198
+ text-decoration: none;
199
+ position: relative;
200
+ top: -7px;
201
+ left: 10px;
202
+ }
203
+
204
+ #license-manager .license-synchronization-button {
205
+ float: right;
206
+ text-decoration: none;
207
+ position: relative;
208
+ top: -7px;
209
+ left: 4px;
210
+ }
211
+
212
+ #license-manager .license-details-block {
213
+ padding: 28px 35px 15px 35px;
214
+ margin-left: -35px;
215
+ width: 100%;
216
+ position: relative;
217
+ margin-top: 20px;
218
+
219
+ background: #fff;
220
+ border: 0px;
221
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
222
+ color: #333;
223
+
224
+ border-radius: 5px;
225
+
226
+ -webkit-box-sizing: content-box;
227
+ -moz-box-sizing: content-box;
228
+ box-sizing: content-box;
229
+ }
230
+
231
+ #license-manager .license-details-block p + p {
232
+ margin-top: 10px;
233
+ }
234
+
235
+ #license-manager .license-details-block a {
236
+ font-weight: bold;
237
+ }
238
+
239
+ #license-manager .license-details-block.trial-details-block {
240
+ background: #ffdede;
241
+
242
+ border: 0;
243
+ box-shadow: 0 0 7px #cf4944;
244
+ color: #a04342;
245
+ text-shadow: 1px 1px 2px #fff2f2;
246
+ }
247
+
248
+ #license-manager .license-details-block.trial-details-block a {
249
+ color: #a04342;
250
+ }
251
+
252
+ #license-manager .license-details-block.paid-details-block {
253
+ border: 0;
254
+ box-shadow: 0 0 7px #b8823b;
255
+ color: #8a6d3b;
256
+ background: #fcf8e3;
257
+ }
258
+
259
+ #license-manager .license-details-block.paid-details-block a {
260
+ color: #7a4c00;
261
+ }
262
+
263
+ #license-manager .license-details-block.gift-details-block {
264
+ background: #DFF0D8;
265
+ border: 1px solid #D6E9C6;
266
+ box-shadow: 0px 0px 5px #D6E9C6;
267
+ color: #468847;
268
+ }
269
+
270
+ #license-manager .license-details-block.gift-details-block a {
271
+ color: #468847;
272
+ }
273
+
274
+ #license-manager .license-params {
275
+ margin-top: 15px;
276
+ position: relative;
277
+ left: -2px;
278
+ }
279
+
280
+ #license-manager .license-value {
281
+ display: block;
282
+ font-size: 16px;
283
+ font-weight: bold;
284
+ }
285
+
286
+ #license-manager .license-value small {
287
+ font-weight: normal;
288
+ }
289
+
290
+ #license-manager .license-value-name {
291
+ display: block;
292
+ font-size: 12px;
293
+ }
294
+
295
+ #license-manager .license-param {
296
+ white-space: nowrap;
297
+ line-height: 130%;
298
+ padding: 10px 0 10px 35px;
299
+ vertical-align: top;
300
+ }
301
+
302
+ #license-manager .license-param-domain {
303
+ padding-left: 65px;
304
+ background: url('../img/free-license-chip.png') -3px 0px no-repeat;
305
+ }
306
+
307
+ #license-manager .trial-details-block .license-param-domain {
308
+ background: url('../img/trial-license-chip.png') -3px 0px no-repeat;
309
+ }
310
+
311
+ #license-manager .paid-details-block .license-param-domain {
312
+ background: url('../img/paid-license-chip.png') -3px 0px no-repeat;
313
+ }
314
+
315
+ #license-manager .license-details-block h3 {
316
+ padding: 0;
317
+ font-size: 22px;
318
+ margin: 0 0 16px 0;
319
+ color: #8a6d3b;
320
+ font-weight: 500;
321
+ }
322
+
323
+ #license-manager .license-details-block a {
324
+ color: #a04342;
325
+ }
326
+
327
+ #license-manager .license-input {
328
+
329
+ padding: 20px;
330
+ -webkit-border-bottom-right-radius: 5px;
331
+ -webkit-border-bottom-left-radius: 5px;
332
+ -moz-border-radius-bottomright: 5px;
333
+ -moz-border-radius-bottomleft: 5px;
334
+ border-bottom-right-radius: 5px;
335
+ border-bottom-left-radius: 5px;
336
+ }
337
+
338
+ #license-manager .license-input .btn {
339
+ text-decoration: none;
340
+ }
341
+
342
+ #license-manager .license-key-wrap {
343
+ padding-right: 110px;
344
+ }
345
+
346
+ #license-key {
347
+ width: 100%;
348
+ position: relative;
349
+ font-size: 18px;
350
+ line-height: 20px;
351
+ top: -1px;
352
+ height: 36px;
353
+ color: #000;
354
+ }
355
+
356
+ #license-submit {
357
+ float: right;
358
+ padding: 7px 14px 6px 14px;
359
+ }
360
+
361
+ #plugin-update-block {
362
+ padding-top: 10px;
363
+ font-size: 10px;
364
+ color: #666;
365
+ max-width: 700px;
366
+ margin: auto;
367
+ }
368
+
369
+ #plugin-update-block a {
370
+ color: #000;
371
+ }
372
+
373
+ .purchase-premium {
374
+ float: right;
375
+ position: relative;
376
+ top: -11px;
377
+ left: 8px;
378
+ text-decoration: none;
379
+ font-weight: bold;
380
+ background: #fffaea;
381
+ padding: 0px;
382
+ border-radius: 4px;
383
+ outline: none;
384
+ margin-top: 4px;
385
+ box-shadow: 0 0 8px #fddf67;
386
+ }
387
+
388
+ .purchase-premium .fa {
389
+ position: relative;
390
+ margin-right: 3px;
391
+ margin-left: 3px;
392
+ }
393
+
394
+ /*
395
+ * Manual Trial Activation
396
+ */
397
+ #trial-manual .onp-container {
398
+ padding: 20px;
399
+ overflow: hidden;
400
+ }
401
+
402
+ #trial-manual ul {
403
+ margin: 0px;
404
+ padding: 0px;
405
+ margin-top: 10px;
406
+ }
407
+
408
+ #trial-manual ul li {
409
+ margin-bottom: 10px;
410
+ }
411
+
412
+ #trial-manual .license-reponse-code {
413
+ width: 100%;
414
+ height: 150px;
415
+ margin-top: 5px;
416
+ }
417
+
418
+ /*
419
+ * Manual Key Activation
420
+ */
421
+ #activate-key-manual .onp-container {
422
+ padding: 20px;
423
+ overflow: hidden;
424
+ }
425
+
426
+ #activate-key-manual ul {
427
+ margin: 0px;
428
+ padding: 0px;
429
+ margin-top: 10px;
430
+ }
431
+
432
+ #activate-key-manual ul li {
433
+ margin-bottom: 10px;
434
+ }
435
+
436
+ #activate-key-manual .license-reponse-code {
437
+ width: 100%;
438
+ height: 150px;
439
+ margin-top: 5px;
440
+ }
441
+
442
+ /**
443
+ * FAQ
444
+ */
445
+
446
+ #faq-block {
447
+ border-top: 1px solid #d7d7d7;
448
+
449
+ margin-top: 20px;
450
+ width: 100%;
451
+
452
+ padding: 10px 20px;
453
+ position: relative;
454
+ }
455
+
456
+ #faq-block .faq-header {
457
+ border-bottom: 1px dotted #333;
458
+ display: inline-block;
459
+ cursor: pointer;
460
+ font-weight: bold;
461
+ line-height: 16px;
462
+ font-size: 13px;
463
+ color: #333;
464
+ }
465
+
466
+ #faq-block .faq-header:hover {
467
+ border-bottom: 0px;
468
+ }
469
+
470
+ #faq-block .faq-header:focus, #faq-block .faq-header:active {
471
+ outline: 0;
472
+ }
473
+
474
+ #faq-block li > div {
475
+ display: none;
476
+ }
477
+
478
+ #faq-block p {
479
+ margin: 6px 0 10px 0;
480
+ font-size: 13px;
481
+ line-height: 170%;
482
+ }
483
+
484
+ #open-faq {
485
+ color: #000 !important;
486
+ text-decoration: none;
487
+ border-bottom: 1px dotted #000;
488
+ margin-left: 4px;
489
+ }
490
+
491
+ #open-faq:hover {
492
+ border-bottom: 0px;
493
+ }
494
+
495
+ .gray-link, .gray-link a {
496
+ color: #666666 !important;
497
+ }
498
+
499
+ /**
500
+ * A form to create a customer account
501
+ */
502
+
503
+ .onp-single-block .onp-header {
504
+ text-align: center;
505
+ padding: 10px;
506
+ }
507
+
508
+ .onp-single-block .onp-header h4 {
509
+ font-size: 26px;
510
+ line-height: 130%;
511
+ }
512
+
513
+ .onp-single-block .onp-container {
514
+ padding: 50px 60px;
515
+ border: 1px solid #bbb;
516
+ position: relative;
517
+ }
518
+
519
+ .onp-single-block .onp-container .onp-container-header {
520
+ margin-bottom: 20px;
521
+ }
522
+
523
+ .onp-single-block .onp-container .onp-container-header h4 {
524
+ color: #000;
525
+ margin: 0px;
526
+ font-size: 20px;
527
+ }
528
+
529
+ .onp-single-block .onp-container .onp-container-header .onp-key-info {
530
+ color: #666;
531
+ }
532
+
533
+ .onp-single-block .onp-container .onp-container-header .onp-key-info .fa {
534
+ color: #777;
535
+ }
536
+
537
+ .onp-single-block .onp-container .onp-container-header .onp-icon {
538
+ position: absolute;
539
+ top: 30px;
540
+ right: 30px;
541
+ }
542
+
543
+ .onp-single-block .onp-container p,
544
+ .onp-single-block .onp-container li {
545
+ color: #333;
546
+ font-size: 14px;
547
+ }
548
+
549
+ .onp-single-block .onp-container p + p {
550
+ margin-top: 15px;
551
+ }
552
+
553
+ .onp-single-block .onp-container .onp-form {
554
+ text-align: left;
555
+ padding: 10px 0 0 0;
556
+ }
557
+
558
+ .onp-single-block #email {
559
+ font-size: 26px;
560
+ line-height: 26px;
561
+ height: 50px;
562
+ }
563
+
564
+ .onp-single-block .checkbox {
565
+ padding-left: 25px;
566
+ color: #999;
567
+ font-style: italic;
568
+ }
569
+
570
+ .onp-single-block .checkbox input {
571
+ margin-left: -25px;
572
+ }
573
+
574
+ .onp-single-block .onp-actions {
575
+ padding-top: 20px;
576
+ }
577
+
578
+ .onp-single-block .onp-actions .btn-primary {
579
+ margin-right: 15px;
580
+ }
581
+
582
+ .onp-single-block .onp-actions a.onp-cancel {
583
+ text-decoration: none;
584
+ color: #111;
585
+ }
586
+
587
+ .onp-single-block .onp-actions a.onp-cancel:hover {
588
+ text-decoration: none;
589
+ border-bottom: 1px solid #111;
590
+ background-color: #f9f9f9;
591
+ }
592
+
593
+ .onp-single-block .onp-benefits {
594
+ padding-left: 25px;
595
+ margin-top: 15px;
596
+ list-style: initial;
597
+ }
598
+
599
+ .onp-single-block .onp-login-details {
600
+
601
+ }
602
+
603
+ .onp-single-block .onp-text-seporator {
604
+ border-top: 1px solid #eee;
605
+ margin: 30px 0;
606
+ }
607
+
608
+ #create-account .onp-container {
609
+ background: #fff url("../img/create-account-bg.png") no-repeat 370px 230px !important;
610
+ }
611
+
612
+ #account-created .onp-step {
613
+ overflow: hidden;
614
+ }
615
+
616
+ #account-created .onp-steps {
617
+ padding: 25px 0 20px 10px;
618
+ }
619
+
620
+ #account-created .onp-step + .onp-step {
621
+ margin-top: 20px;
622
+ }
623
+
624
+ #account-created .onp-step .onp-num {
625
+ font-size: 25px;
626
+ line-height: 40px;
627
+ background-color: #f5f5f5;
628
+ width: 40px;
629
+ height: 40px;
630
+ display: inline-block;
631
+ border-radius: 7px;
632
+ text-align: center;
633
+ -moz-box-sizing: border-box;
634
+ box-sizing: border-box;
635
+ margin-right: 10px;
636
+ vertical-align: middle;
637
+ font-weight: bolder;
638
+ font-family: Arial, sans-serif;
639
+ }
640
+
641
+ #account-created .onp-step .onp-desc {
642
+ width: 490px;
643
+ display: inline-block;
644
+ vertical-align: middle;
645
+ line-height: 150%;
646
+ }
647
+
648
+ #finish .onp-container {
649
+ background: #fff url("../img/finish.png") no-repeat 0 -90px !important;
650
+ padding-left: 260px;
651
+ min-height: 250px;
652
+
653
+ border-bottom: 3px solid #ccc;
654
+ }
655
+
656
+ .winp-loader {
657
+ float: right;
658
+ width: 32px;
659
+ }
admin/assets/img/fon.jpg ADDED
Binary file
admin/assets/img/instagram.png ADDED
Binary file
admin/assets/img/wis.png ADDED
Binary file
admin/assets/index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ // Silence is golden.
admin/assets/js/jr-insta-admin.js ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($) {
2
+
3
+ $(document).ready(function($){
4
+ $('.donate-bitcoin-qr-address').hide();
5
+ $('.donate-button-link').on('click', function (e) {
6
+ e.preventDefault();
7
+ //$(this).slideUp(100);
8
+ $('.donate-bitcoin-qr-address').slideToggle();
9
+ });
10
+
11
+ // Hide Custom Url if image link is not set to custom url
12
+ $('body').on('change', '.jr-container select[id$="images_link"]', function(e){
13
+ var images_link = $(this);
14
+ if ( images_link.val() != 'custom_url' ) {
15
+ images_link.closest('.jr-container').find('input[id$="custom_url"]').val('').parent().animate({opacity: 'hide' , height: 'hide'}, 200);
16
+ } else {
17
+ images_link.closest('.jr-container').find('input[id$="custom_url"]').parent().animate({opacity: 'show' , height: 'show'}, 200);
18
+ }
19
+ });
20
+
21
+ // Modify options based on template selections
22
+ $('body').on('change', '.jr-container select[id$="template"]', function(e){
23
+ var template = $(this);
24
+ if ( template.val() == 'thumbs' || template.val() == 'thumbs-no-border' ) {
25
+ template.closest('.jr-container').find('.jr-slider-options').animate({opacity: 'hide' , height: 'hide'}, 200);
26
+ template.closest('.jr-container').find('input[id$="columns"]').closest('p').animate({opacity: 'show' , height: 'show'}, 200);
27
+ } else {
28
+ template.closest('.jr-container').find('.jr-slider-options').animate({opacity: 'show' , height: 'show'}, 200);
29
+ template.closest('.jr-container').find('input[id$="columns"]').closest('p').animate({opacity: 'hide' , height: 'hide'}, 200);
30
+ }
31
+ });
32
+
33
+ // Modfiy options when search for is changed
34
+ $('body').on('change', '.jr-container input:radio[id$="search_for"]', function(e){
35
+ var search_for = $(this);
36
+ if ( search_for.val() != 'username' ) {
37
+ search_for.closest('.jr-container').find('[id$="attachment"]:checkbox').closest('p').animate({opacity: 'hide' , height: 'hide'}, 200);
38
+ search_for.closest('.jr-container').find('select[id$="images_link"] option[value="user_url"]').animate({opacity: 'hide' , height: 'hide'}, 200);
39
+ search_for.closest('.jr-container').find('select[id$="images_link"] option[value="attachment"]').animate({opacity: 'hide' , height: 'hide'}, 200);
40
+ search_for.closest('.jr-container').find('select[id$="images_link"]').val('image_link');
41
+ search_for.closest('.jr-container').find('select[id$="description"] option[value="username"]').animate({opacity: 'hide' , height: 'hide'}, 200);
42
+ search_for.closest('.jr-container').find('input[id$="blocked_users"]').closest('p').animate({opacity: 'show' , height: 'show'}, 200);
43
+
44
+ } else {
45
+ search_for.closest('.jr-container').find('[id$="attachment"]:checkbox').closest('p').animate({opacity: 'show' , height: 'show'}, 200);
46
+ search_for.closest('.jr-container').find('select[id$="images_link"] option[value="user_url"]').animate({opacity: 'show' , height: 'show'}, 200);
47
+ search_for.closest('.jr-container').find('select[id$="images_link"] option[value="attachment"]').animate({opacity: 'show' , height: 'show'}, 200);
48
+ search_for.closest('.jr-container').find('select[id$="images_link"]').val('image_link');
49
+ search_for.closest('.jr-container').find('select[id$="description"] option[value="username"]').animate({opacity: 'show' , height: 'show'}, 200);
50
+ search_for.closest('.jr-container').find('input[id$="blocked_users"]').closest('p').animate({opacity: 'hide' , height: 'hide'}, 200);
51
+
52
+ }
53
+ });
54
+
55
+ // Hide blocked images if not checked attachments
56
+ $('body').on('change', '.jr-container [id$="attachment"]:checkbox', function(e){
57
+ var attachment = $(this);
58
+ if ( this.checked ) {
59
+ attachment.closest('.jr-container').find('select[id$="images_link"] option[value="attachment"]').animate({opacity: 'show' , height: 'show'}, 200);
60
+ attachment.closest('.jr-container').find('select[id$="images_link"]').val('image_link');
61
+ } else {
62
+ attachment.closest('.jr-container').find('select[id$="images_link"] option[value="attachment"]').animate({opacity: 'hide' , height: 'hide'}, 200);
63
+ attachment.closest('.jr-container').find('select[id$="images_link"]').val('image_link');
64
+ }
65
+ });
66
+
67
+ // Toggle advanced options
68
+ $('body').on('click', '.jr-advanced', function(e){
69
+ e.preventDefault();
70
+ var advanced_container = $(this).parent().next();
71
+
72
+ if ( advanced_container.is(':hidden') ) {
73
+ $(this).html('[ - Close ]');
74
+ } else {
75
+ $(this).html('[ + Open ]');
76
+ }
77
+ advanced_container.toggle();
78
+ });
79
+
80
+ // Remove blocked images with ajax
81
+ $('body').on('click', '.jr-container .jr-delete-instagram-dupes', function(e){
82
+ e.preventDefault();
83
+ var $this = $(this),
84
+ username = $(this).data("username"),
85
+ ajaxNonce = $(this).closest('.jr-container').find('input[name=delete_insta_dupes_nonce]').val();
86
+
87
+ $.ajax({
88
+ type: 'POST',
89
+ url: ajaxurl,
90
+ data: {
91
+ action: 'jr_delete_insta_dupes',
92
+ username : username,
93
+ _ajax_nonce: ajaxNonce
94
+ },
95
+ beforeSend: function () {
96
+ $this.prop('disabled', true);
97
+ $this.closest('.jr-container').find('.jr-spinner').addClass( 'spinner' ).css({'visibility':'visible','float':'none'});
98
+ },
99
+ success: function(data, textStatus, XMLHttpRequest) {
100
+ $this.closest('.jr-container').find('.deleted-dupes-info').text( 'Removed Duplicates: '+ data.deleted);
101
+ },
102
+ complete: function () {
103
+ $this.prop('disabled', false);
104
+ $this.closest('.jr-container').find('.jr-spinner').addClass( 'spinner' ).css({'visibility':'hidden','float':'none'});
105
+ },
106
+ error: function(XMLHttpRequest, textStatus, errorThrown) {
107
+ //console.log(XMLHttpRequest.responseText);
108
+ }
109
+ });
110
+ });
111
+
112
+ }); // Document Ready
113
+
114
+ })(jQuery);
admin/assets/js/license-manager.js ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Этот файл содержит скрипт исполняелся во время процедур с формой лицензирования.
3
+ * Его основная роль отправка ajax запросов на проверку, активацию, деактивацию лицензии
4
+ * и вывод уведомлений об ошибка или успешно выполнении проверок.
5
+ *
6
+ * @author Webcraftic <wordpress.webraftic@gmail.com>
7
+ * @copyright (c) 05.10.2018, Webcraftic
8
+ * @version 1.1
9
+ * @since 1.4.0
10
+ */
11
+
12
+
13
+ jQuery(function ($) {
14
+
15
+ $(document).on('click', '.wapt-control-btn', function () {
16
+
17
+ $('.wapt-control-btn').hide();
18
+
19
+ var wrapper = $('#wapt-license-wrapper'),
20
+ loader = wrapper.data('loader');
21
+
22
+ $(this).after('<img class="wapt-loader" src="' + loader + '">');
23
+
24
+ var data = {
25
+ action: 'wapt_check_license',
26
+ _wpnonce: $('#_wpnonce').val(),
27
+ license_action: $(this).data('action'),
28
+ licensekey: ''
29
+ };
30
+
31
+ if ($(this).data('action') == 'activate') {
32
+ data.licensekey = $('#license-key').val();
33
+ }
34
+
35
+ $.ajax(ajaxurl, {
36
+ type: 'post',
37
+ dataType: 'json',
38
+ data: data,
39
+ success: function (response) {
40
+ var noticeId;
41
+
42
+ if (!response || !response.success) {
43
+
44
+ $('.wapt-control-btn').show();
45
+ $('.wapt-loader').remove();
46
+
47
+ if (response.data) {
48
+ console.log(response.data.error_message);
49
+ alert('Error: [' + response.data.error_message + ']');
50
+ } else {
51
+ console.log(response);
52
+ }
53
+
54
+ return;
55
+ }
56
+
57
+ if (response.data && response.data.message) {
58
+ alert(response.data.message);
59
+
60
+ window.location.reload();
61
+ }
62
+ },
63
+ error: function (xhr, ajaxOptions, thrownError) {
64
+
65
+ $('.wapt-control-btn').show();
66
+ $('.wapt-loader').remove();
67
+
68
+ console.log(xhr.status, xhr.responseText, thrownError);
69
+
70
+ alert('Error: [' + thrownError + '] Status: [' + xhr.status + '] Error massage: [' + xhr.responseText + ']');
71
+ }
72
+ });
73
+
74
+ return false;
75
+ });
76
+
77
+ });
admin/class-wis-activation.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Class of activation/deactivation of the plugin. Must be registered in file includes/class.plugin.php
4
+ *
5
+ * @author Webcraftic <wordpress.webraftic@gmail.com>
6
+ * @copyright (c) 02.12.2018, Webcraftic
7
+ * @see Wbcr_Factory420_Activator
8
+ *
9
+ * @version 1.0.1
10
+ */
11
+
12
+ // Exit if accessed directly
13
+ if ( ! defined( 'ABSPATH' ) ) {
14
+ exit;
15
+ }
16
+
17
+ class WIS_Activation extends Wbcr_Factory420_Activator {
18
+
19
+ /**
20
+ * Method is executed during the activation of the plugin.
21
+ *
22
+ * @since 1.0.0
23
+ */
24
+ public function activate() {
25
+ // Code to be executed during plugin activation
26
+ }
27
+
28
+ /**
29
+ * The method is executed during the deactivation of the plugin.
30
+ *
31
+ * @since 1.0.0
32
+ */
33
+ public function deactivate() {
34
+ // Code to be executed during plugin deactivation
35
+ }
36
+ }
admin/class-wis-page.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Class of plugin page. Must be registered in file admin/class-prefix-page.php
4
+ *
5
+ * @author Webcraftic <wordpress.webraftic@gmail.com>
6
+ * @copyright (c) 02.12.2018, Webcraftic
7
+ * @see Wbcr_FactoryPages420_AdminPage
8
+ *
9
+ * @version 1.0.0
10
+ */
11
+
12
+ // Exit if accessed directly
13
+ if ( ! defined( 'ABSPATH' ) ) {
14
+ exit;
15
+ }
16
+
17
+ class WIS_Page extends Wbcr_FactoryPages420_AdminPage {
18
+
19
+ /**
20
+ * Name of the template to get content of. It will be based on plugins /admin/views/ dir.
21
+ * /admin/views/tab-{$template_name}.php
22
+ *
23
+ * @var string
24
+ */
25
+ public $template_name = "main";
26
+
27
+ /**
28
+ * Render and return content of the template.
29
+ * /admin/views/tab-{$template_name}.php
30
+ *
31
+ * @return mixed Content of the page
32
+ */
33
+ public function render ($name = '') {
34
+ if($name == '') $name = $this->template_name;
35
+ ob_start();
36
+ if ( is_callable( $name ) ) {
37
+ echo call_user_func( $name );
38
+ } elseif ( strpos( $name, DIRECTORY_SEPARATOR ) !== false && ( is_file( $name ) || is_file( $name . '.php' ) ) ) {
39
+ if ( is_file( $name ) ) {
40
+ $path = $name;
41
+ } else {
42
+ $path = $name . '.php';
43
+ }
44
+ } else {
45
+ $path = WIS_PLUGIN_DIR . "/admin/views/tab-{$name}.php";
46
+ }
47
+ if ( ! is_file( $path ) ) {
48
+ return '';
49
+ }
50
+ include $path;
51
+ $content = ob_get_contents();
52
+ ob_end_clean();
53
+
54
+ return $content;
55
+ }
56
+
57
+ /**
58
+ * Show rendered template - $template_name
59
+ */
60
+ public function indexAction()
61
+ {
62
+ echo $this->render();
63
+ }
64
+
65
+ }
66
+
67
+
admin/pages/about.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Exit if accessed directly
4
+ if ( ! defined( 'ABSPATH' ) ) {
5
+ exit;
6
+ }
7
+
8
+ /**
9
+ * The page Settings.
10
+ *
11
+ * @since 1.0.0
12
+ */
13
+ class WIS_AboutPage extends WIS_Page {
14
+
15
+ /**
16
+ * Тип страницы
17
+ * options - предназначена для создании страниц с набором опций и настроек.
18
+ * page - произвольный контент, любой html код
19
+ *
20
+ * @var string
21
+ */
22
+ public $type = 'page';
23
+
24
+ /**
25
+ * Menu icon (only if a page is placed as a main menu).
26
+ * For example: '~/assets/img/menu-icon.png'
27
+ * For example dashicons: '\f321'
28
+ * @var string
29
+ */
30
+ public $menu_icon = '';
31
+
32
+ /**
33
+ * @var string
34
+ */
35
+ public $page_menu_dashicon;
36
+
37
+ /**
38
+ * @param WAPT_Plugin $plugin
39
+ */
40
+ public function __construct( $plugin ) {
41
+ $this->id = $plugin->getPrefix()."about";
42
+ $this->menu_target= $plugin->getPrefix()."settings-".$plugin->getPluginName();
43
+ $this->page_title = __( 'About Social Slider Widget', 'instagram-slider-widget' );
44
+ $this->menu_title = __( 'About', 'instagram-slider-widget' );
45
+ $this->template_name = "about";
46
+
47
+ parent::__construct( $plugin );
48
+
49
+ $this->plugin = $plugin;
50
+ }
51
+ }
admin/pages/license.php ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Exit if accessed directly
4
+ if ( ! defined( 'ABSPATH' ) ) {
5
+ exit;
6
+ }
7
+
8
+ /**
9
+ * Class WAPT_License_Page is used as template to display form to active premium functionality.
10
+ *
11
+ * @since 2.0.7
12
+ */
13
+ class WIS_LicensePage extends WIS_Page {
14
+
15
+ /**
16
+ * {@inheritdoc}
17
+ */
18
+ public $type = "page";
19
+
20
+ /**
21
+ * {@inheritdoc}
22
+ */
23
+ public $page_menu_dashicon = 'dashicons-admin-network';
24
+
25
+ /**
26
+ * {@inheritdoc}
27
+ */
28
+ public $show_right_sidebar_in_options = false;
29
+
30
+ /**
31
+ * {@inheritdoc}
32
+ */
33
+ public $page_menu_position = 0;
34
+
35
+ /**
36
+ * {@inheritdoc}
37
+ */
38
+ public $available_for_multisite = true;
39
+
40
+ /**
41
+ * @var string Name of the paid plan.
42
+ */
43
+ public $plan_name;
44
+
45
+ // PREMIUM SECTION
46
+ // ------------------------------------------------------------------
47
+ /**
48
+ * @since 2.0.7
49
+ * @var bool
50
+ */
51
+ protected $is_premium;
52
+
53
+ /**
54
+ * @since 2.0.7
55
+ * @var \WBCR\Factory_413\Premium\Provider
56
+ */
57
+ protected $premium;
58
+
59
+ /**
60
+ * @since 2.0.7
61
+ * @var bool
62
+ */
63
+ protected $is_premium_active;
64
+
65
+ /**
66
+ * @since 2.0.7
67
+ * @var bool
68
+ */
69
+ protected $premium_has_subscription;
70
+
71
+ /**
72
+ * @since 2.0.7
73
+ * @var \WBCR\Factory_413\Premium\Interfaces\License
74
+ */
75
+ protected $premium_license;
76
+
77
+ // END PREMIUM SECTION
78
+ // ------------------------------------------------------------------
79
+
80
+ /**
81
+ * {@inheritdoc}
82
+ * @param Wbcr_Factory420_Plugin $plugin
83
+ */
84
+ public function __construct ( Wbcr_Factory420_Plugin $plugin ) {
85
+ $this->plugin = $plugin;
86
+
87
+ parent::__construct( $plugin );
88
+
89
+ $this->id = $plugin->getPrefix().'license';
90
+ $this->menu_title = __( 'License', 'instagram-slider-widget' );
91
+ $this->page_title = __( 'License of APT', 'instagram-slider-widget' );
92
+ $this->template_name = "license";
93
+ $this->menu_target= $plugin->getPrefix()."settings-".$plugin->getPluginName();
94
+ $this->capabilitiy = "manage_options";
95
+
96
+ $this->premium = WIS_Plugin::app()->premium;
97
+ $this->is_premium = $this->premium->is_activate();
98
+ $this->is_premium_active = $this->premium->is_active();
99
+ $this->premium_has_subscription = $this->premium->has_paid_subscription();
100
+ $this->premium_license = $this->premium->get_license();
101
+ }
102
+
103
+ /**
104
+ * [MAGIC] Magic method that configures assets for a page.
105
+ */
106
+ public function assets ( $scripts, $styles ) {
107
+ parent::assets( $scripts, $styles );
108
+
109
+ $this->styles->add( WIS_PLUGIN_URL . '/admin/assets/css/license-manager.css' );
110
+
111
+ $this->styles->request( array(
112
+ 'bootstrap.core',
113
+ 'bootstrap.form-groups',
114
+ 'bootstrap.separator',
115
+ ), 'bootstrap' );
116
+
117
+ $this->scripts->add( WIS_PLUGIN_URL . '/admin/assets/js/license-manager.js' );
118
+ }
119
+
120
+ /**
121
+ * Get before content.
122
+ *
123
+ * @return string Before content.
124
+ */
125
+ protected function get_plan_description () {
126
+ return '';
127
+ }
128
+
129
+ /**
130
+ * @return string
131
+ */
132
+ protected function get_hidden_license_key () {
133
+ if ( ! $this->is_premium ) {
134
+ return '';
135
+ }
136
+
137
+ return $this->premium_license->get_hidden_key();
138
+ }
139
+
140
+ /**
141
+ * @return string
142
+ */
143
+ protected function get_plan () {
144
+ if ( ! $this->is_premium ) {
145
+ return 'free';
146
+ }
147
+
148
+ return $this->premium->get_plan();
149
+ }
150
+
151
+ /**
152
+ * @return mixed
153
+ */
154
+ protected function get_expiration_days () {
155
+ return $this->premium_license->get_expiration_time( 'days' );
156
+ }
157
+
158
+ /**
159
+ * @return string
160
+ */
161
+ protected function get_billing_cycle_readable () {
162
+ if ( ! $this->is_premium ) {
163
+ return '';
164
+ }
165
+
166
+ $billing_cycle = $this->premium->get_billing_cycle();
167
+ $billing = 'lifetime';
168
+
169
+ if ( 1 == $billing_cycle ) {
170
+ $billing = 'month';
171
+ } else if ( 12 == $billing_cycle ) {
172
+ $billing = 'year';
173
+ }
174
+
175
+ return $billing;
176
+ }
177
+
178
+ /**
179
+ * Тип лицензии, цветовое оформление для формы лицензирования
180
+ * free - бесплатная
181
+ * gift - пожизненная лицензия, лицензия на особых условиях
182
+ * trial - красный цвет, применяется для триалов, если лиценизия истекла или заблокирована
183
+ * paid - обычная оплаченная лицензия, в данный момент активна.
184
+ *
185
+ * @return string
186
+ */
187
+ protected function get_license_type () {
188
+ if ( ! $this->is_premium ) {
189
+ return 'free';
190
+ }
191
+
192
+ $license = $this->premium_license;
193
+
194
+ if ( $license->is_lifetime() ) {
195
+ return 'gift';
196
+ } else if ( $license->get_expiration_time( 'days' ) < 1 ) {
197
+ return 'trial';
198
+ }
199
+
200
+ return 'paid';
201
+ }
202
+ }
admin/pages/settings.php ADDED
@@ -0,0 +1,195 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Exit if accessed directly
4
+ if ( ! defined( 'ABSPATH' ) ) {
5
+ exit;
6
+ }
7
+
8
+ /**
9
+ * The page Settings.
10
+ *
11
+ * @since 1.0.0
12
+ */
13
+ class WIS_SettingsPage extends WIS_Page {
14
+
15
+ /**
16
+ * Тип страницы
17
+ * options - предназначена для создании страниц с набором опций и настроек.
18
+ * page - произвольный контент, любой html код
19
+ *
20
+ * @var string
21
+ */
22
+ public $type = 'options';
23
+
24
+ /**
25
+ * The id of the page in the admin menu.
26
+ *
27
+ * Mainly used to navigate between pages.
28
+ *
29
+ * @since 1.0.0
30
+ * @see FactoryPages420_AdminPage
31
+ *
32
+ * @var string
33
+ */
34
+ public $id;
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-performance';
48
+
49
+ /**
50
+ * Menu position (only if a page is placed as a main menu).
51
+ * @link http://codex.wordpress.org/Function_Reference/add_menu_page
52
+ * @var string
53
+ */
54
+ public $menu_position = 58;
55
+
56
+ /**
57
+ * Menu type. Set it to add the page to the specified type menu.
58
+ * For example: 'post'
59
+ * @var string
60
+ */
61
+ public $menu_post_type = null;
62
+
63
+ /**
64
+ * Visible page title.
65
+ * For example: 'License Manager'
66
+ * @var string
67
+ */
68
+ public $page_title;
69
+
70
+ /**
71
+ * Visible title in menu.
72
+ * For example: 'License Manager'
73
+ * @var string
74
+ */
75
+ public $menu_title;
76
+
77
+ /**
78
+ * If set, an extra sub menu will be created with another title.
79
+ * @var string
80
+ */
81
+ public $menu_sub_title;
82
+
83
+ /**
84
+ *
85
+ * @var
86
+ */
87
+ public $page_menu_short_description;
88
+
89
+ /**
90
+ * Заголовок страницы, также использует в меню, как название закладки
91
+ *
92
+ * @var bool
93
+ */
94
+ public $show_page_title = true;
95
+
96
+ /**
97
+ * @var int
98
+ */
99
+ public $page_menu_position = 20;
100
+
101
+
102
+ /**
103
+ * @param WIS_Plugin $plugin
104
+ */
105
+ public function __construct( $plugin ) {
106
+ $this->id = $plugin->getPrefix()."settings";
107
+ $this->page_title = __( 'Settings of Social Slider Widget', 'instagram-slider-widget' );
108
+ $this->menu_title = __( 'Settings', 'instagram-slider-widget' );
109
+ $this->menu_target= $plugin->getPrefix()."widgets-".$plugin->getPluginName();
110
+ $this->menu_icon = '~/admin/assets/img/wis.png';
111
+ $this->capabilitiy = "manage_options";
112
+ $this->template_name = "settings";
113
+
114
+ parent::__construct( $plugin );
115
+
116
+ $this->plugin = $plugin;
117
+ }
118
+
119
+ public function assets( $scripts, $styles ) {
120
+ $this->scripts->request( 'jquery' );
121
+
122
+ $this->scripts->request( [
123
+ 'control.checkbox',
124
+ 'control.dropdown'
125
+ ], 'bootstrap' );
126
+
127
+ $this->styles->request( [
128
+ 'bootstrap.core',
129
+ 'bootstrap.form-group',
130
+ 'bootstrap.separator',
131
+ 'control.dropdown',
132
+ 'control.checkbox',
133
+ ], 'bootstrap' );
134
+ }
135
+
136
+ /**
137
+ * Returns options for the Basic Settings screen.
138
+ *
139
+ * @since 1.0.0
140
+ * @return array
141
+ */
142
+ public function getOptions() {
143
+
144
+ $options = [];
145
+
146
+ $options[] = [
147
+ 'type' => 'html',
148
+ 'html' => '<h3 style="margin-left:0">General</h3>'
149
+ ];
150
+
151
+ $options[] = [
152
+ 'type' => 'separator'
153
+ ];
154
+
155
+ /*
156
+ $options[] = [
157
+ 'type' => 'checkbox',
158
+ 'way' => 'buttons',
159
+ 'name' => 'auto-generation',
160
+ 'title' => __( 'Enable automatic post thumbnail generation', 'instagram-slider-widget' ),
161
+ 'default' => false,
162
+ 'hint' => __( 'Enable automatic post thumbnail generation', 'instagram-slider-widget' )
163
+ ];
164
+ */
165
+
166
+ return $options;
167
+ }
168
+
169
+ public function indexAction() {
170
+
171
+ // creating a form
172
+ global $form;
173
+ $form = new Wbcr_FactoryForms418_Form( [
174
+ 'scope' => substr( $this->plugin->getPrefix(), 0, - 1 ),
175
+ 'name' => 'setting'
176
+ ], $this->plugin );
177
+
178
+ $form->setProvider( new Wbcr_FactoryForms418_OptionsValueProvider( $this->plugin ) );
179
+
180
+ $form->add( $this->getOptions() );
181
+
182
+ $wapt_saved = WIS_Plugin::app()->request->post( $this->plugin->getPrefix() . 'saved', '' );
183
+ if ( ! empty( $wapt_saved ) ) {
184
+ $wapt_nonce = WIS_Plugin::app()->request->post( $this->plugin->getPrefix() . 'nonce', '' );
185
+ if ( ! wp_verify_nonce( $wapt_nonce, $this->plugin->getPrefix() . 'settings_form' ) ) {
186
+ wp_die( 'Permission error. You can not edit this page.' );
187
+ }
188
+ $form->save();
189
+
190
+ do_action( 'wis/settings/after_form_save' );
191
+ }
192
+
193
+ parent::indexAction();
194
+ }
195
+ }
admin/pages/widgets.php ADDED
@@ -0,0 +1,128 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Exit if accessed directly
4
+ if ( ! defined( 'ABSPATH' ) ) {
5
+ exit;
6
+ }
7
+
8
+ /**
9
+ * The page Settings.
10
+ *
11
+ * @since 1.0.0
12
+ */
13
+ class WIS_WidgetsPage extends WIS_Page {
14
+
15
+ /**
16
+ * Тип страницы
17
+ * options - предназначена для создании страниц с набором опций и настроек.
18
+ * page - произвольный контент, любой html код
19
+ *
20
+ * @var string
21
+ */
22
+ public $type;
23
+
24
+ /**
25
+ * The id of the page in the admin menu.
26
+ *
27
+ * Mainly used to navigate between pages.
28
+ *
29
+ * @since 1.0.0
30
+ * @see FactoryPages420_AdminPage
31
+ *
32
+ * @var string
33
+ */
34
+ public $id;
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-performance';
48
+
49
+ /**
50
+ * Menu position (only if a page is placed as a main menu).
51
+ * @link http://codex.wordpress.org/Function_Reference/add_menu_page
52
+ * @var string
53
+ */
54
+ public $menu_position = 58;
55
+
56
+ /**
57
+ * Menu type. Set it to add the page to the specified type menu.
58
+ * For example: 'post'
59
+ * @var string
60
+ */
61
+ public $menu_post_type = null;
62
+
63
+ /**
64
+ * Visible page title.
65
+ * For example: 'License Manager'
66
+ * @var string
67
+ */
68
+ public $page_title;
69
+
70
+ /**
71
+ * Visible title in menu.
72
+ * For example: 'License Manager'
73
+ * @var string
74
+ */
75
+ public $menu_title;
76
+
77
+ /**
78
+ * If set, an extra sub menu will be created with another title.
79
+ * @var string
80
+ */
81
+ public $menu_sub_title;
82
+
83
+ /**
84
+ *
85
+ * @var
86
+ */
87
+ public $page_menu_short_description;
88
+
89
+ /**
90
+ * Заголовок страницы, также использует в меню, как название закладки
91
+ *
92
+ * @var bool
93
+ */
94
+ public $show_page_title = true;
95
+
96
+ /**
97
+ * @var int
98
+ */
99
+ public $page_menu_position = 20;
100
+
101
+
102
+ /**
103
+ * @param WIS_Plugin $plugin
104
+ */
105
+ public function __construct( $plugin ) {
106
+ $this->id = $plugin->getPrefix()."widgets";
107
+ $this->page_title = __( 'Social Slider Widgets', 'instagram-slider-widget' );
108
+ $this->menu_title = __( 'Social Slider Widgets', 'instagram-slider-widget' );
109
+ $this->menu_sub_title = __( 'Widgets', 'instagram-slider-widget' );;
110
+ $this->menu_icon = '~/admin/assets/img/wis.png';
111
+ $this->capabilitiy = "manage_options";
112
+ $this->template_name = "widgets";
113
+
114
+ parent::__construct( $plugin );
115
+
116
+ $this->plugin = $plugin;
117
+ }
118
+
119
+ public function assets( $scripts, $styles ) {
120
+ //Widgets scripts
121
+ $this->scripts->request( 'admin-widgets' );
122
+
123
+ if ( wp_is_mobile() ) {
124
+ $this->scripts->request( 'jquery-touch-punch' );
125
+ }
126
+
127
+ }
128
+ }
admin/views/tab-about.php ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <style>
2
+
3
+ .wis-section-wrapper {
4
+ width: 100%;
5
+ margin-top: 10px;
6
+ }
7
+
8
+ .wis-section {
9
+ padding: 29px 29px 29px 29px;
10
+ }
11
+
12
+ .wis-section .container {
13
+ display: -webkit-box;
14
+ display: -webkit-flex;
15
+ display: -ms-flexbox;
16
+ display: flex;
17
+ margin-right: auto;
18
+ margin-left: auto;
19
+ position: relative;
20
+ max-width: 1140px;
21
+ /*min-height: 600px;*/
22
+ -webkit-box-align: center;
23
+ -webkit-align-items: center;
24
+ -ms-flex-align: center;
25
+ align-items: center;
26
+ }
27
+
28
+ .wis-section-intro {
29
+ background-image: url('<?php echo WIS_PLUGIN_URL;?>/admin/assets/img/fon.jpg');
30
+ background-position: bottom center;
31
+ background-size: cover;
32
+ box-shadow: 0px 0px 34px 0px rgba(107, 107, 107, 0.5);
33
+ transition: background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s;
34
+ text-align: center;
35
+ }
36
+
37
+ .wis-section-intro .container h2 {
38
+ font-size: 61px;
39
+ font-weight: 500;
40
+ text-transform: uppercase;
41
+ line-height: 1.1em;
42
+ color: #fff;
43
+ text-align: center;
44
+ }
45
+
46
+ .wis-section-intro .container p {
47
+ margin-bottom: 1.6em;
48
+ color: #fffcfc;
49
+ font-family: "Arial", Sans-serif;
50
+ font-size: 22px;
51
+ line-height: 1.3em;
52
+ letter-spacing: 1.1px;
53
+ }
54
+
55
+ .wis-section-changelog h4 {
56
+ font-size: 1.3333333333333rem;
57
+ }
58
+
59
+ .wis-section-changelog p,
60
+ .wis-section-changelog ul > li {
61
+ font-size: 15px;
62
+ }
63
+
64
+ .wis-section-changelog ul {
65
+ list-style: inherit;
66
+ margin-left: 40px;
67
+ }
68
+
69
+ #wpfooter {
70
+ position: relative !important;
71
+ }
72
+
73
+
74
+ </style>
75
+
76
+ <div class="wis-section-wrapper">
77
+ <section class="wis-section wis-section-intro">
78
+ <div class="container">
79
+
80
+ <div>
81
+ <h2><?php esc_html_e( 'Social Slider Widget', 'instagram-slider-widget' ) ?></h2>
82
+
83
+ <p><?php esc_html_e( 'We didn’t please you with updated lately. However, great news today! We are about to tell you about all the spectacular changes that are planned for our plugin!', 'instagram-slider-widget' ) ?></p>
84
+
85
+ <p><?php echo __( 'First of all, we proudly announce that a new group of developers, <span style="text-decoration: underline;"><strong>Creative Motion</strong></span>, are helping us with plugin improvement.', 'instagram-slider-widget' ) ?></p>
86
+
87
+ <p><?php esc_html_e( 'Auto Post Thumbnails has perfectly fit in our close family of popular plugins with more than 600,000 users worldwide.', 'instagram-slider-widget' ) ?></p>
88
+
89
+ <p><?php esc_html_e( 'What you can expect soon:', 'instagram-slider-widget' ) ?></p>
90
+
91
+ </div>
92
+ </div>
93
+
94
+ </section>
95
+
96
+ <section class="wis-section wis-section-changelog">
97
+ <div class="container">
98
+ <div>
99
+ <h4>1.4.4</h4>
100
+ <p><?php echo __( 'Bug fixes', 'instagram-slider-widget' ); ?></p>
101
+ </div>
102
+ </div>
103
+ </section>
104
+ </div>
admin/views/tab-license.php ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap">
2
+ <div class="factory-bootstrap-421 factory-fontawesome-000">
3
+ <?php wp_nonce_field( 'license' ); ?>
4
+ <div id="wis-license-wrapper"
5
+ data-loader="<?php echo WIS_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', 'instagram-slider-widget' ), $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 for $%s', 'instagram-slider-widget' ), $this->premium->get_price() ) ?>
23
+ </span>
24
+ </a>
25
+ <p><?php printf( __( 'Your current license for %1$s:', 'instagram-slider-widget' ), $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 wis-control-btn">
31
+ <?php _e( 'Delete Key', 'instagram-slider-widget' ) ?>
32
+ </a>
33
+ <a data-action="sync" href="#"
34
+ class="btn btn-default btn-small license-synchronization-button wis-control-btn">
35
+ <?php _e( 'Synchronization', 'instagram-slider-widget' ) ?>
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
+ <p><?php _e( 'Public License is a GPLv2 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.', 'instagram-slider-widget' ) ?>
55
+ </p>
56
+ <?php if ( $this->is_premium && $this->premium_has_subscription ): ?>
57
+ <p class="activate-trial-hint">
58
+ <?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="wis-control-btn" href="#">cancel subscription</a>', 'instagram-slider-widget' ) ?>
59
+ </p>
60
+ <?php endif; ?>
61
+
62
+ <?php if ( $this->get_license_type() == 'trial' ): ?>
63
+ <p class="activate-error-hint">
64
+ <?php printf( __( 'Your license has expired, please extend the license to get updates and support.', 'instagram-slider-widget' ), '' ) ?>
65
+ </p>
66
+ <?php endif; ?>
67
+ </div>
68
+ <table class="license-params" colspacing="0" colpadding="0">
69
+ <tr>
70
+ <!--<td class="license-param license-param-domain">
71
+ <span class="license-value"><?php echo esc_attr( $_SERVER['SERVER_NAME'] ); ?></span>
72
+ <span class="license-value-name"><?php _e( 'domain', 'instagram-slider-widget' ) ?></span>
73
+ </td>-->
74
+ <td class="license-param license-param-days">
75
+ <span class="license-value"><?php echo $this->get_plan() ?></span>
76
+ <span class="license-value-name"><?php _e( 'plan', 'instagram-slider-widget' ) ?></span>
77
+ </td>
78
+ <?php if ( $this->is_premium ) : ?>
79
+ <td class="license-param license-param-sites">
80
+ <span class="license-value">
81
+ <?php echo esc_attr( $this->premium_license->get_count_active_sites() ); ?>
82
+ <?php _e( 'of', 'instagram-slider-widget' ) ?>
83
+ <?php echo esc_attr( $this->premium_license->get_sites_quota() ); ?></span>
84
+ <span class="license-value-name"><?php _e( 'active sites', 'instagram-slider-widget' ) ?></span>
85
+ </td>
86
+ <?php endif; ?>
87
+ <td class="license-param license-param-version">
88
+ <span class="license-value"><?php echo $this->plugin->getPluginVersion() ?></span>
89
+ <span class="license-value-name"><span><?php _e( 'version', 'instagram-slider-widget' ) ?></span></span>
90
+ </td>
91
+ <?php if ( $this->is_premium ): ?>
92
+ <td class="license-param license-param-days">
93
+ <?php if ( $this->get_license_type() == 'trial' ): ?>
94
+ <span class="license-value"><?php _e( 'EXPIRED!', 'instagram-slider-widget' ) ?></span>
95
+ <span class="license-value-name"><?php _e( 'please update the key', 'instagram-slider-widget' ) ?></span>
96
+ <?php else: ?>
97
+ <span class="license-value">
98
+ <?php
99
+ if ( $this->premium_license->is_lifetime() ) {
100
+ echo 'infiniate';
101
+ } else {
102
+ echo $this->get_expiration_days();
103
+ }
104
+ ?>
105
+ <small> <?php _e( 'day(s)', 'instagram-slider-widget' ) ?></small>
106
+ </span>
107
+ <span class="license-value-name"><?php _e( 'remained', 'instagram-slider-widget' ) ?></span>
108
+ <?php endif; ?>
109
+ </td>
110
+ <?php endif; ?>
111
+ </tr>
112
+ </table>
113
+ </div>
114
+ </div>
115
+ <div class="license-input">
116
+ <form action="" method="post">
117
+ <?php if ( $this->is_premium ): ?>
118
+ <p><?php _e( 'Have a key to activate the premium version? Paste it here:', 'instagram-slider-widget' ) ?><p>
119
+ <?php else: ?>
120
+ <p><?php _e( 'Have a key to activate the plugin? Paste it here:', 'instagram-slider-widget' ) ?>
121
+ <p>
122
+ <?php endif; ?>
123
+ <button data-action="activate" class="btn btn-default wis-control-btn"
124
+ type="button"
125
+ id="license-submit">
126
+ <?php _e( 'Submit Key', 'instagram-slider-widget' ) ?>
127
+ </button>
128
+ <div class="license-key-wrap">
129
+ <input type="text" id="license-key" name="licensekey" value=""
130
+ class="form-control"/>
131
+ </div>
132
+ <?php if ( $this->is_premium ): ?>
133
+ <p style="margin-top: 10px;">
134
+ <?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!', 'instagram-slider-widget' ), $this->plugin->get_support()->get_pricing_url( true, 'license_page' ) ); ?>
135
+ </p>
136
+ <?php else: ?>
137
+ <p style="margin-top: 10px;">
138
+ <?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.', 'instagram-slider-widget' ), $this->plugin->get_support()->get_contacts_url( true, 'license_page' ) ) ?>
139
+ </p>
140
+ <?php endif; ?>
141
+ </form>
142
+ </div>
143
+ </div>
144
+ </div>
145
+ </div>
146
+ </div>
147
+ </div>
admin/views/tab-settings.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php global $form; ?>
2
+
3
+ <div class="wrap">
4
+ <div class="factory-bootstrap-421 factory-fontawesome-000">
5
+ <h3><?php _e( 'Settings', 'insert-php' ) ?></h3>
6
+ <div class="row">
7
+ <div class="col-md-9">
8
+ <form method="post" class="form-horizontal">
9
+ <?php if ( ! empty( $wbcr_saved ) ) { ?>
10
+ <div id="message" class="alert alert-success">
11
+ <p><?php _e( 'The settings have been updated successfully!', 'insert-php' ) ?></p>
12
+ </div>
13
+ <?php } ?>
14
+ <div style="padding-top: 10px;">
15
+ <?php $form->html(); ?>
16
+ </div>
17
+ <div class="form-group form-horizontal">
18
+ <label class="col-sm-2 control-label"> </label>
19
+ <div class="control-group controls col-sm-10">
20
+ <?php wp_nonce_field( $this->plugin->getPrefix() . 'settings_form', $this->plugin->getPrefix() . 'nonce' ); ?>
21
+ <input name="<?php echo $this->plugin->getPrefix() . 'saved' ?>" class="btn btn-primary" type="submit" value="<?php _e( 'Save settings', 'insert-php' ) ?>"/>
22
+ </div>
23
+ </div>
24
+ </form>
25
+ </div>
26
+ <div class="col-md-3">
27
+ <div id="wapt-dashboard-widget" class="wapt-right-widget">
28
+ <?php
29
+ global $wbcr_isw_adinserter;
30
+ echo $wbcr_isw_adinserter->get_adverts( 'right_sidebar' );
31
+ //apply_filters( 'wbcr/inp/dashboard/widget/print', '' );
32
+ ?>
33
+ </div>
34
+ </div>
35
+ </div>
36
+ </div>
37
+ </div>
admin/views/tab-widgets.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ require_once ABSPATH."wp-admin/includes/widgets.php";
3
+ $sidebars_widgets = wp_get_sidebars_widgets();
4
+ global $wp_registered_widgets, $wp_registered_sidebars;
5
+
6
+ wp_nonce_field('save-sidebar-widgets','_wpnonce_widgets');
7
+ if ( !empty( $sidebars_widgets ) )
8
+ {
9
+ foreach ($sidebars_widgets as $key => $sidebar)
10
+ {
11
+ foreach ($sidebar as $widget)
12
+ {
13
+ if(strstr($widget, 'jr_insta_slider'))
14
+ {
15
+ wp_list_widget_controls($key, $wp_registered_sidebars[$key]['name']);
16
+ }
17
+ }
18
+ }
19
+ }
20
+ ?>
21
+ <script>
22
+ jQuery(document).ready(function($) {
23
+ $('.widget:not([id*="jr_insta_slider"])').remove();
24
+ //$('[id*="jr_insta_slider"]').before($('#jr_insta_shortcode').val())
25
+ $('.sidebar-name').find('button.handlediv').remove();
26
+ });
27
+ </script>
assets/index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ // Silence is golden.
includes/class-wis-plugin.php ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Exit if accessed directly
4
+ if ( ! defined( 'ABSPATH' ) ) {
5
+ exit;
6
+ }
7
+
8
+ /**
9
+ * Основной класс плагина Social Slider Widget
10
+ *
11
+ * @author Artem Prihodko <webtemyk@yandex.ru>
12
+ * @copyright (c) 2019 Webraftic Ltd
13
+ * @version 1.0
14
+ */
15
+
16
+ class WIS_Plugin extends Wbcr_Factory420_Plugin {
17
+
18
+ /**
19
+ * @see self::app()
20
+ * @var Wbcr_Factory420_Plugin
21
+ */
22
+ private static $app;
23
+
24
+ /**
25
+ * Статический метод для быстрого доступа к интерфейсу плагина.
26
+ *
27
+ * Позволяет разработчику глобально получить доступ к экземпляру класса плагина в любом месте
28
+ * плагина, но при этом разработчик не может вносить изменения в основной класс плагина.
29
+ *
30
+ * Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
31
+ * классам.
32
+ *
33
+ * @return Wbcr_Factory420_Plugin
34
+ */
35
+ public static function app() {
36
+ return self::$app;
37
+ }
38
+
39
+ /**
40
+ * Конструктор
41
+ *
42
+ * Применяет конструктор родительского класса и записывает экземпляр текущего класса в свойство $app.
43
+ * Подробнее о свойстве $app см. self::app()
44
+ *
45
+ * @param string $plugin_path
46
+ * @param array $data
47
+ *
48
+ * @throws Exception
49
+ */
50
+ public function __construct( $plugin_path, $data ) {
51
+ parent::__construct( $plugin_path, $data );
52
+
53
+ self::$app = $this;
54
+
55
+ if ( is_admin() ) {
56
+ // Регистрации класса активации/деактивации плагина
57
+ $this->init_activation();
58
+
59
+ // Инициализация скриптов для бэкенда
60
+ $this->admin_scripts();
61
+
62
+ //Подключение файла проверки лицензии
63
+ require( WIS_PLUGIN_DIR . '/admin/ajax/check-license.php' );
64
+ }
65
+ else
66
+ {
67
+ $this->front_scripts();
68
+ }
69
+
70
+ $this->global_scripts();
71
+
72
+
73
+ }
74
+
75
+ protected function init_activation() {
76
+ include_once( WIS_PLUGIN_DIR . '/admin/class-wis-activation.php' );
77
+ $this->registerActivation( 'WIS_Activation' );
78
+ }
79
+
80
+ /**
81
+ * Регистрирует классы страниц в плагине
82
+ */
83
+ private function register_pages() {
84
+ // require_once WIS_PLUGIN_DIR . '/admin/class-wis-page.php';
85
+ // self::app()->registerPage( 'WIS_WidgetsPage', WIS_PLUGIN_DIR . '/admin/pages/widgets.php' );
86
+ // self::app()->registerPage( 'WIS_SettingsPage', WIS_PLUGIN_DIR . '/admin/pages/settings.php' );
87
+ // self::app()->registerPage( 'WIS_LicensePage', WIS_PLUGIN_DIR . '/admin/pages/license.php' );
88
+ // self::app()->registerPage( 'WIS_AboutPage', WIS_PLUGIN_DIR . '/admin/pages/about.php' );
89
+ }
90
+
91
+ /**
92
+ * Код для админки
93
+ */
94
+ private function admin_scripts()
95
+ {
96
+ // Регистрация страниц
97
+ $this->register_pages();
98
+
99
+ add_action( 'admin_enqueue_scripts', [$this, 'admin_enqueue_assets'] );
100
+ }
101
+
102
+ /**
103
+ * Код для админки и фронтенда
104
+ */
105
+ private function global_scripts() {
106
+
107
+ }
108
+
109
+ /**
110
+ * Код для админки и фронтенда
111
+ */
112
+ private function front_scripts() {
113
+ add_action( 'wp_enqueue_scripts', [$this, 'enqueue_assets'] );
114
+ }
115
+
116
+ public function admin_enqueue_assets()
117
+ {
118
+ wp_enqueue_style( 'jr-insta-admin-styles', WIS_PLUGIN_URL.'/admin/assets/css/jr-insta-admin.css', array(), WIS_PLUGIN_VERSION );
119
+ wp_enqueue_script( 'jr-insta-admin-script', WIS_PLUGIN_URL.'/admin/assets/js/jr-insta-admin.js', array( 'jquery' ), WIS_PLUGIN_VERSION, true );
120
+ }
121
+
122
+ public function enqueue_assets()
123
+ {
124
+ wp_enqueue_style( 'instag-slider', WIS_PLUGIN_URL.'/assets/css/instag-slider.css', array(), WIS_PLUGIN_VERSION );
125
+ wp_enqueue_script( 'jquery-pllexi-slider', WIS_PLUGIN_URL.'/assets/js/jquery.flexslider-min.js', array( 'jquery' ), '2.2', false );
126
+ }
127
+ }
includes/class-wis_instagram_slider.php ADDED
@@ -0,0 +1,1517 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WIS_InstagramSlider Class
4
+ */
5
+ class WIS_InstagramSlider extends WP_Widget {
6
+
7
+ /**
8
+ * Plugin version, used for cache-busting of style and script file references.
9
+ *
10
+ * @var string
11
+ */
12
+ const VERSION = '1.4.3';
13
+ const USERNAME_URL = 'https://www.instagram.com/{username}/';
14
+ const TAG_URL = 'https://www.instagram.com/explore/tags/{tag}/?__a=1';
15
+
16
+ /**
17
+ * Initialize the plugin by registering widget and loading public scripts
18
+ *
19
+ */
20
+ public function __construct() {
21
+
22
+ // Widget ID and Class Setup
23
+ parent::__construct( 'jr_insta_slider', __( 'Social Slider', 'instagram-slider-widget' ), array(
24
+ 'classname' => 'jr-insta-slider',
25
+ 'description' => __( 'A widget that displays a slider with instagram images ', 'instagram-slider-widget' )
26
+ )
27
+ );
28
+
29
+ // Shortcode
30
+ add_shortcode( 'jr_instagram', array( $this, 'shortcode' ) );
31
+
32
+ // Instgram Action to display images
33
+ add_action( 'jr_instagram', array( $this, 'instagram_images' ) );
34
+
35
+ // Enqueue Plugin Styles and scripts
36
+ add_action( 'wp_enqueue_scripts', array( $this, 'public_enqueue' ) );
37
+
38
+ // Enqueue Plugin Styles and scripts for admin pages
39
+ add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue' ) );
40
+
41
+ // Ajax action to unblock images from widget
42
+ add_action( 'wp_ajax_jr_delete_insta_dupes', array( $this, 'delete_dupes' ) );
43
+
44
+ // Add new attachment field desctiptions
45
+ add_filter( 'attachment_fields_to_edit', array( $this, 'insta_attachment_fields' ) , 10, 2 );
46
+
47
+ // Add action for single cron events
48
+ add_action( 'jr_insta_cron', array( $this, 'jr_cron_trigger' ), 10 , 3 );
49
+ }
50
+
51
+ /**
52
+ * Register widget on widgets init
53
+ */
54
+ public static function register_widget() {
55
+ register_widget( __CLASS__ );
56
+ register_sidebar( array(
57
+ 'name' => __( 'Social Slider - Shortcode Generator', 'instagram-slider-widget' ),
58
+ 'id' => 'jr-insta-shortcodes',
59
+ 'description' => __( "1. Drag Social Slider Widget here. 2. Fill in the fields and hit save. 3. Copy the shortocde generated at the bottom of the widget form and use it on posts or pages.", 'instagram-slider-widget' )
60
+ )
61
+ );
62
+ }
63
+
64
+ /**
65
+ * Enqueue public-facing Scripts and style sheet.
66
+ */
67
+ public function public_enqueue() {
68
+
69
+ wp_enqueue_style( 'instag-slider', WIS_PLUGIN_DIR.'/assets/css/instag-slider.css', array(), self::VERSION );
70
+
71
+ wp_enqueue_script( 'jquery-pllexi-slider', WIS_PLUGIN_DIR.'/assets/js/jquery.flexslider-min.js', array( 'jquery' ), '2.2', false );
72
+ }
73
+
74
+ /**
75
+ * Enqueue admin side scripts and styles
76
+ *
77
+ * @param string $hook
78
+ */
79
+ public function admin_enqueue( $hook ) {
80
+
81
+ if ( 'widgets.php' != $hook ) {
82
+ return;
83
+ }
84
+
85
+ wp_enqueue_style( 'jr-insta-admin-styles', WIS_PLUGIN_DIR.'/admin/assets/css/jr-insta-admin.css', array(), self::VERSION );
86
+ wp_enqueue_script( 'jr-insta-admin-script', WIS_PLUGIN_DIR.'/admin/assets/js/jr-insta-admin.js', array( 'jquery' ), self::VERSION, true );
87
+ }
88
+
89
+ /**
90
+ * The Public view of the Widget
91
+ *
92
+ */
93
+ public function widget( $args, $instance ) {
94
+
95
+ extract( $args );
96
+
97
+ //Our variables from the widget settings.
98
+ $title = apply_filters( 'widget_title', $instance['title'] );
99
+
100
+ echo $before_widget;
101
+
102
+ // Display the widget title
103
+ if ( $title ) {
104
+ echo $before_title . $title . $after_title;
105
+ }
106
+
107
+ do_action( 'jr_instagram', $instance );
108
+
109
+ echo $after_widget;
110
+ }
111
+
112
+ /**
113
+ * Update the widget settings
114
+ *
115
+ * @param array $new_instance New instance values
116
+ * @param array $old_instance Old instance values
117
+ *
118
+ * @return array
119
+ */
120
+ public function update( $new_instance, $instance ) {
121
+
122
+ $instance['title'] = strip_tags( $new_instance['title'] );
123
+ $instance['search_for'] = $new_instance['search_for'];
124
+ $instance['username'] = $new_instance['username'];
125
+ $instance['hashtag'] = $new_instance['hashtag'];
126
+ $instance['blocked_users'] = $new_instance['blocked_users'];
127
+ $instance['attachment'] = $new_instance['attachment'];
128
+ $instance['template'] = $new_instance['template'];
129
+ $instance['images_link'] = $new_instance['images_link'];
130
+ $instance['custom_url'] = $new_instance['custom_url'];
131
+ $instance['orderby'] = $new_instance['orderby'];
132
+ $instance['images_number'] = $new_instance['images_number'];
133
+ $instance['columns'] = $new_instance['columns'];
134
+ $instance['refresh_hour'] = $new_instance['refresh_hour'];
135
+ $instance['image_size'] = $new_instance['image_size'];
136
+ $instance['image_link_rel'] = $new_instance['image_link_rel'];
137
+ $instance['image_link_class'] = $new_instance['image_link_class'];
138
+ $instance['no_pin'] = $new_instance['no_pin'];
139
+ $instance['controls'] = $new_instance['controls'];
140
+ $instance['animation'] = $new_instance['animation'];
141
+ $instance['caption_words'] = $new_instance['caption_words'];
142
+ $instance['slidespeed'] = $new_instance['slidespeed'];
143
+ $instance['description'] = $new_instance['description'];
144
+ $instance['support_author'] = $new_instance['support_author'];
145
+
146
+ return $instance;
147
+ }
148
+
149
+
150
+ /**
151
+ * Widget Settings Form
152
+ *
153
+ */
154
+ public function form( $instance ) {
155
+
156
+ $defaults = array(
157
+ 'title' => __('Social Slider', 'instagram-slider-widget'),
158
+ 'search_for' => 'username',
159
+ 'username' => '',
160
+ 'hashtag' => '',
161
+ 'blocked_users' => '',
162
+ 'attachment' => 0,
163
+ 'template' => 'slider',
164
+ 'images_link' => 'image_url',
165
+ 'custom_url' => '',
166
+ 'orderby' => 'rand',
167
+ 'images_number' => 5,
168
+ 'columns' => 4,
169
+ 'refresh_hour' => 5,
170
+ 'image_size' => 'standard',
171
+ 'image_link_rel' => '',
172
+ 'image_link_class' => '',
173
+ 'no_pin' => 0,
174
+ 'controls' => 'prev_next',
175
+ 'animation' => 'slide',
176
+ 'caption_words' => 100,
177
+ 'slidespeed' => 7000,
178
+ 'description' => array( 'username', 'time','caption' ),
179
+ 'support_author' => 0
180
+ );
181
+
182
+ $instance = wp_parse_args( (array) $instance, $defaults );
183
+
184
+ ?>
185
+ <div class="jr-container">
186
+ <p>
187
+ <label for="<?php echo $this->get_field_id( 'title' ); ?>"><strong><?php _e('Title:', 'instagram-slider-widget'); ?></strong></label>
188
+ <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" />
189
+ </p>
190
+ <p>
191
+ <strong><?php _e( 'Search Instagram for:', 'instagram-slider-widget' ); ?></strong>
192
+ <span class="jr-search-for-container"><label class="jr-seach-for"><input type="radio" id="<?php echo $this->get_field_id( 'search_for' ); ?>" name="<?php echo $this->get_field_name( 'search_for' ); ?>" value="username" <?php checked( 'username', $instance['search_for'] ); ?> /> <?php _e( 'Username:', 'instagram-slider-widget' ); ?></label> <input id="<?php echo $this->get_field_id( 'username' ); ?>" class="inline-field-text" name="<?php echo $this->get_field_name( 'username' ); ?>" value="<?php echo $instance['username']; ?>" /></span>
193
+ <span class="jr-search-for-container"><label class="jr-seach-for"><input type="radio" id="<?php echo $this->get_field_id( 'search_for' ); ?>" name="<?php echo $this->get_field_name( 'search_for' ); ?>" value="hashtag" <?php checked( 'hashtag', $instance['search_for'] ); ?> /> <?php _e( 'Hashtag:', 'instagram-slider-widget' ); ?></label> <input id="<?php echo $this->get_field_id( 'hashtag' ); ?>" class="inline-field-text" name="<?php echo $this->get_field_name( 'hashtag' ); ?>" value="<?php echo $instance['hashtag']; ?>" /> <small><?php _e('without # sign', 'instagram-slider-widget'); ?></small></span>
194
+ </p>
195
+ <p class="<?php if ( 'hashtag' != $instance['search_for'] ) echo 'hidden'; ?>">
196
+ <label for="<?php echo $this->get_field_id( 'blocked_users' ); ?>"><?php _e( 'Block Users', 'instagram-slider-widget' ); ?>:</label>
197
+ <input class="widefat" id="<?php echo $this->get_field_id( 'blocked_users' ); ?>" name="<?php echo $this->get_field_name( 'blocked_users' ); ?>" value="<?php echo $instance['blocked_users']; ?>" />
198
+ <span class="jr-description"><?php _e( 'Enter usernames separated by commas whose images you don\'t want to show', 'instagram-slider-widget' ); ?></span>
199
+ </p>
200
+ <p class="<?php if ( 'username' != $instance['search_for'] ) echo 'hidden'; ?>"><strong><?php _e( 'Save in Media Library: ', 'instagram-slider-widget' ); ?></strong>
201
+ <label class="switch" for="<?php echo $this->get_field_id( 'attachment' ); ?>">
202
+ <input class="widefat" id="<?php echo $this->get_field_id( 'attachment' ); ?>" name="<?php echo $this->get_field_name( 'attachment' ); ?>" type="checkbox" value="1" <?php checked( '1', $instance['attachment'] ); ?> /><span class="slider round"></span></label>
203
+ <br><span class="jr-description"><?php _e( ' Turn on to save Instagram Images into WordPress media library.', 'instagram-slider-widget') ?></span>
204
+ <?php
205
+ if ( isset ( $instance['username'] ) && !empty($instance['username'] ) ) {
206
+ echo '<br><button class="button action jr-delete-instagram-dupes" type="button" data-username="'.$instance['username'].'"><strong>Remove</strong> duplicate images for <strong>'.$instance['username'].'</strong></button><span class="jr-spinner"></span>';
207
+ echo '<br><br><strong><span class="deleted-dupes-info"></span></strong>';
208
+ wp_nonce_field( 'jr_delete_instagram_dupes', 'delete_insta_dupes_nonce' );
209
+ }
210
+ ?>
211
+ </p>
212
+ <p>
213
+ <label for="<?php echo $this->get_field_id( 'images_number' ); ?>"><strong><?php _e( 'Number of images to show:', 'instagram-slider-widget' ); ?></strong>
214
+ <input class="small-text" id="<?php echo $this->get_field_id( 'images_number' ); ?>" name="<?php echo $this->get_field_name( 'images_number' ); ?>" value="<?php echo $instance['images_number']; ?>" />
215
+ </label>
216
+ </p>
217
+ <p>
218
+ <label for="<?php echo $this->get_field_id( 'refresh_hour' ); ?>"><strong><?php _e( 'Check for new images every:', 'instagram-slider-widget' ); ?></strong>
219
+ <input class="small-text" id="<?php echo $this->get_field_id( 'refresh_hour' ); ?>" name="<?php echo $this->get_field_name( 'refresh_hour' ); ?>" value="<?php echo $instance['refresh_hour']; ?>" />
220
+ <span><?php _e('hours', 'instagram-slider-widget'); ?></span>
221
+ </label>
222
+ </p>
223
+ <p>
224
+ <label for="<?php echo $this->get_field_id( 'template' ); ?>"><strong><?php _e( 'Template', 'instagram-slider-widget' ); ?></strong>
225
+ <select class="widefat" name="<?php echo $this->get_field_name( 'template' ); ?>" id="<?php echo $this->get_field_id( 'template' ); ?>">
226
+ <option value="slider" <?php echo ($instance['template'] == 'slider') ? ' selected="selected"' : ''; ?>><?php _e( 'Slider - Normal', 'instagram-slider-widget' ); ?></option>
227
+ <option value="slider-overlay" <?php echo ($instance['template'] == 'slider-overlay') ? ' selected="selected"' : ''; ?>><?php _e( 'Slider - Overlay Text', 'instagram-slider-widget' ); ?></option>
228
+ <option value="thumbs" <?php echo ($instance['template'] == 'thumbs') ? ' selected="selected"' : ''; ?>><?php _e( 'Thumbnails', 'instagram-slider-widget' ); ?></option>
229
+ <option value="thumbs-no-border" <?php echo ($instance['template'] == 'thumbs-no-border') ? ' selected="selected"' : ''; ?>><?php _e( 'Thumbnails - Without Border', 'instagram-slider-widget' ); ?></option>
230
+ </select>
231
+ </label>
232
+ </p>
233
+ <p class="<?php if ( 'thumbs' != $instance['template'] && 'thumbs-no-border' != $instance['template'] ) echo 'hidden'; ?>">
234
+ <label for="<?php echo $this->get_field_id( 'columns' ); ?>"><strong><?php _e( 'Number of Columns:', 'instagram-slider-widget' ); ?></strong>
235
+ <input class="small-text" id="<?php echo $this->get_field_id( 'columns' ); ?>" name="<?php echo $this->get_field_name( 'columns' ); ?>" value="<?php echo $instance['columns']; ?>" />
236
+ <span class='jr-description'><?php _e('max is 10 ( only for thumbnails template )', 'instagram-slider-widget'); ?></span>
237
+ </label>
238
+ </p>
239
+ <p>
240
+ <label for="<?php echo $this->get_field_id( 'image_size' ); ?>"><strong><?php _e( 'Image format', 'instagram-slider-widget' ); ?></strong></label>
241
+ <select class="widefat" id="<?php echo $this->get_field_id( 'image_size' ); ?>" name="<?php echo $this->get_field_name( 'image_size' ); ?>">
242
+ <option value="thumbnail" <?php echo ($instance['image_size'] == 'thumbnail') ? ' selected="selected"' : ''; ?>><?php _e( 'Thumbnail - 150x150', 'instagram-slider-widget' ); ?></option>
243
+ <option value="low" <?php echo ($instance['image_size'] == 'low') ? ' selected="selected"' : ''; ?>><?php _e( 'Low - 320x320', 'instagram-slider-widget' ); ?></option>
244
+ <option value="standard" <?php echo ($instance['image_size'] == 'standard') ? ' selected="selected"' : ''; ?>><?php _e( 'Standard - 640x640', 'instagram-slider-widget' ); ?></option>
245
+ <option value="full" <?php echo ($instance['image_size'] == 'full') ? ' selected="selected"' : ''; ?>><?php _e( 'Full Size', 'instagram-slider-widget' ); ?></option>
246
+ </select>
247
+ <span class="jr-description"><?php _e( '<strong>Square - Cropped</strong> - option will show square cropped images in 640x640 pixels. <br/><strong>Original - No Crop</strong> - will display the original user uploaded image size.', 'instagram-slider-widget' ); ?></span>
248
+ </p>
249
+ <p>
250
+ <label for="<?php echo $this->get_field_id( 'orderby' ); ?>"><strong><?php _e( 'Order by', 'instagram-slider-widget' ); ?></strong>
251
+ <select class="widefat" name="<?php echo $this->get_field_name( 'orderby' ); ?>" id="<?php echo $this->get_field_id( 'orderby' ); ?>">
252
+ <option value="date-ASC" <?php selected( $instance['orderby'], 'date-ASC', true); ?>><?php _e( 'Date - Ascending', 'instagram-slider-widget' ); ?></option>
253
+ <option value="date-DESC" <?php selected( $instance['orderby'], 'date-DESC', true); ?>><?php _e( 'Date - Descending', 'instagram-slider-widget' ); ?></option>
254
+ <option value="popular-ASC" <?php selected( $instance['orderby'], 'popular-ASC', true); ?>><?php _e( 'Popularity - Ascending', 'instagram-slider-widget' ); ?></option>
255
+ <option value="popular-DESC" <?php selected( $instance['orderby'], 'popular-DESC', true); ?>><?php _e( 'Popularity - Descending', 'instagram-slider-widget' ); ?></option>
256
+ <option value="rand" <?php selected( $instance['orderby'], 'rand', true); ?>><?php _e( 'Random', 'instagram-slider-widget' ); ?></option>
257
+ </select>
258
+ </label>
259
+ </p>
260
+ <p>
261
+ <label for="<?php echo $this->get_field_id( 'images_link' ); ?>"><strong><?php _e( 'Link to', 'instagram-slider-widget' ); ?></strong>
262
+ <select class="widefat" name="<?php echo $this->get_field_name( 'images_link' ); ?>" id="<?php echo $this->get_field_id( 'images_link' ); ?>">
263
+ <option value="image_link" <?php selected( $instance['images_link'], 'image_link', true); ?>><?php _e( 'Instagram Image', 'instagram-slider-widget' ); ?></option>
264
+ <option class="<?php if ( 'hashtag' == $instance['search_for'] ) echo 'hidden'; ?>" value="user_url" <?php selected( $instance['images_link'], 'user_url', true); ?>><?php _e( 'Instagram Profile', 'instagram-slider-widget' ); ?></option>
265
+ <option value="image_url" <?php selected( $instance['images_link'], 'image_url', true); ?>><?php _e( 'Image URL', 'instagram-slider-widget' ); ?></option>
266
+ <option class="<?php if ( ( !$instance['attachment'] ) || 'hashtag' == $instance['search_for'] ) echo 'hidden'; ?>" value="attachment" <?php selected( $instance['images_link'], 'attachment', true); ?>><?php _e( 'Attachment Page', 'instagram-slider-widget' ); ?></option>
267
+ <option value="custom_url" <?php selected( $instance['images_link'], 'custom_url', true ); ?>><?php _e( 'Custom Link', 'instagram-slider-widget' ); ?></option>
268
+ <option value="none" <?php selected( $instance['images_link'], 'none', true); ?>><?php _e( 'None', 'instagram-slider-widget' ); ?></option>
269
+ </select>
270
+ </label>
271
+ </p>
272
+ <p class="<?php if ( 'custom_url' != $instance['images_link'] ) echo 'hidden'; ?>">
273
+ <label for="<?php echo $this->get_field_id( 'custom_url' ); ?>"><?php _e( 'Custom link:', 'instagram-slider-widget'); ?></label>
274
+ <input class="widefat" id="<?php echo $this->get_field_id( 'custom_url' ); ?>" name="<?php echo $this->get_field_name( 'custom_url' ); ?>" value="<?php echo $instance['custom_url']; ?>" />
275
+ <span><?php _e('* use this field only if the above option is set to <strong>Custom Link</strong>', 'instagram-slider-widget'); ?></span>
276
+ </p>
277
+ <p>
278
+ <strong>Advanced Options</strong>
279
+ <?php
280
+ $advanced_class = '';
281
+ $advanced_text = '[ - Close ]';
282
+ if ( '' == trim( $instance['image_link_rel'] ) && '' == trim( $instance['image_link_class'] ) && '' == trim( $instance['image_size'] ) ) {
283
+ $advanced_class = 'hidden';
284
+ $advanced_text = '[ + Open ]';
285
+ }
286
+ ?>
287
+ <a href="#" class="jr-advanced"><?php echo $advanced_text; ?></a>
288
+ </p>
289
+ <div class="jr-advanced-input <?php echo $advanced_class; ?>">
290
+ <div class="jr-image-options">
291
+ <h4 class="jr-advanced-title"><?php _e( 'Advanced Image Options', 'instagram-slider-widget'); ?></h4>
292
+ <p>
293
+ <label for="<?php echo $this->get_field_id( 'image_link_rel' ); ?>"><?php _e( 'Image Link rel attribute', 'instagram-slider-widget' ); ?>:</label>
294
+ <input class="widefat" id="<?php echo $this->get_field_id( 'image_link_rel' ); ?>" name="<?php echo $this->get_field_name( 'image_link_rel' ); ?>" value="<?php echo $instance['image_link_rel']; ?>" />
295
+ <span class="jr-description"><?php _e( 'Specifies the relationship between the current page and the linked website', 'instagram-slider-widget' ); ?></span>
296
+ </p>
297
+ <p>
298
+ <label for="<?php echo $this->get_field_id( 'image_link_class' ); ?>"><?php _e( 'Image Link class', 'instagram-slider-widget' ); ?>:</label>
299
+ <input class="widefat" id="<?php echo $this->get_field_id( 'image_link_class' ); ?>" name="<?php echo $this->get_field_name( 'image_link_class' ); ?>" value="<?php echo $instance['image_link_class']; ?>" />
300
+ <span class="jr-description"><?php _e( 'Usefull if you are using jQuery lightbox plugins to open links', 'instagram-slider-widget' ); ?></span>
301
+ </p>
302
+ <p><strong><?php _e( 'Disable Pinning:', 'instagram-slider-widget' ); ?></strong>
303
+ <label class="switch" for="<?php echo $this->get_field_id( 'no_pin' ); ?>">
304
+ <input class="widefat" id="<?php echo $this->get_field_id( 'no_pin' ); ?>" name="<?php echo $this->get_field_name( 'no_pin' ); ?>" type="checkbox" value="1" <?php checked( '1', $instance['no_pin'] ); ?> /><span class="slider round"></span></label>
305
+ <br><span class="jr-description"><?php _e( 'Disable pinning for Pinterest on all images from this widget!', 'instagram-slider-widget') ?></span>
306
+ </p>
307
+ </div>
308
+ <div class="jr-slider-options <?php if ( 'thumbs' == $instance['template'] || 'thumbs-no-border' == $instance['template'] ) echo 'hidden'; ?>">
309
+ <h4 class="jr-advanced-title"><?php _e( 'Advanced Slider Options', 'instagram-slider-widget'); ?></h4>
310
+ <p>
311
+ <?php _e( 'Slider Navigation Controls:', 'instagram-slider-widget' ); ?><br>
312
+ <label class="jr-radio"><input type="radio" id="<?php echo $this->get_field_id( 'controls' ); ?>" name="<?php echo $this->get_field_name( 'controls' ); ?>" value="prev_next" <?php checked( 'prev_next', $instance['controls'] ); ?> /> <?php _e( 'Prev & Next', 'instagram-slider-widget' ); ?></label>
313
+ <label class="jr-radio"><input type="radio" id="<?php echo $this->get_field_id( 'controls' ); ?>" name="<?php echo $this->get_field_name( 'controls' ); ?>" value="numberless" <?php checked( 'numberless', $instance['controls'] ); ?> /> <?php _e( 'Dotted', 'instagram-slider-widget' ); ?></label>
314
+ <label class="jr-radio"><input type="radio" id="<?php echo $this->get_field_id( 'controls' ); ?>" name="<?php echo $this->get_field_name( 'controls' ); ?>" value="none" <?php checked( 'none', $instance['controls'] ); ?> /> <?php _e( 'No Navigation', 'instagram-slider-widget' ); ?></label>
315
+ </p>
316
+ <p>
317
+ <?php _e( 'Slider Animation:', 'instagram-slider-widget' ); ?><br>
318
+ <label class="jr-radio"><input type="radio" id="<?php echo $this->get_field_id( 'animation' ); ?>" name="<?php echo $this->get_field_name( 'animation' ); ?>" value="slide" <?php checked( 'slide', $instance['animation'] ); ?> /> <?php _e( 'Slide', 'instagram-slider-widget' ); ?></label>
319
+ <label class="jr-radio"><input type="radio" id="<?php echo $this->get_field_id( 'animation' ); ?>" name="<?php echo $this->get_field_name( 'animation' ); ?>" value="fade" <?php checked( 'fade', $instance['animation'] ); ?> /> <?php _e( 'Fade', 'instagram-slider-widget' ); ?></label>
320
+ </p>
321
+ <p>
322
+ <label for="<?php echo $this->get_field_id( 'caption_words' ); ?>"><?php _e( 'Number of words in caption:', 'instagram-slider-widget' ); ?>
323
+ <input class="small-text" id="<?php echo $this->get_field_id( 'caption_words' ); ?>" name="<?php echo $this->get_field_name( 'caption_words' ); ?>" value="<?php echo $instance['caption_words']; ?>" />
324
+ </label>
325
+ </p>
326
+ <p>
327
+ <label for="<?php echo $this->get_field_id( 'slidespeed' ); ?>"><?php _e( 'Slide Speed:', 'instagram-slider-widget' ); ?>
328
+ <input class="small-text" id="<?php echo $this->get_field_id( 'slidespeed' ); ?>" name="<?php echo $this->get_field_name( 'slidespeed' ); ?>" value="<?php echo $instance['slidespeed']; ?>" />
329
+ <span><?php _e('milliseconds', 'instagram-slider-widget'); ?></span>
330
+ <span class='jr-description'><?php _e('1000 milliseconds = 1 second', 'instagram-slider-widget'); ?></span>
331
+ </label>
332
+ </p>
333
+ <p>
334
+ <label for="<?php echo $this->get_field_id('description'); ?>"><?php _e( 'Slider Text Description:', 'instagram-slider-widget' ); ?></label>
335
+ <select size=3 class='widefat' id="<?php echo $this->get_field_id('description'); ?>" name="<?php echo $this->get_field_name('description'); ?>[]" multiple="multiple">
336
+ <option class="<?php if ( 'hashtag' == $instance['search_for'] ) echo 'hidden'; ?>" value='username' <?php $this->selected( $instance['description'], 'username' ); ?>><?php _e( 'Username', 'instagram-slider-widget'); ?></option>
337
+ <option value='time'<?php $this->selected( $instance['description'], 'time' ); ?>><?php _e( 'Time', 'instagram-slider-widget'); ?></option>
338
+ <option value='caption'<?php $this->selected( $instance['description'], 'caption' ); ?>><?php _e( 'Caption', 'instagram-slider-widget'); ?></option>
339
+ </select>
340
+ <span class="jr-description"><?php _e( 'Hold ctrl and click the fields you want to show/hide on your slider. Leave all unselected to hide them all. Default all selected.', 'instagram-slider-widget') ?></span>
341
+ </p>
342
+ </div>
343
+ </div>
344
+ <?php $widget_id = preg_replace( '/[^0-9]/', '', $this->id ); if ( $widget_id != '' ) : ?>
345
+ <p>
346
+ <label for="jr_insta_shortcode"><?php _e('Shortcode of this Widget:', 'instagram-slider-widget'); ?></label>
347
+ <input id="jr_insta_shortcode" onclick="this.setSelectionRange(0, this.value.length)" type="text" class="widefat" value="[jr_instagram id=&quot;<?php echo $widget_id ?>&quot;]" readonly="readonly" style="border:none; color:black; font-family:monospace;">
348
+ <span class="jr-description"><?php _e( 'Use this shortcode in any page or post to display images with this widget configuration!', 'instagram-slider-widget') ?></span>
349
+ </p>
350
+ <?php endif; ?>
351
+ <div class="jr-advanced-input">
352
+ <div class="jr-image-options">
353
+ <h4 class="jr-advanced-title"><?php _e( 'Help us, help you!', 'instagram-slider-widget'); ?></h4>
354
+ <p><strong><?php _e( 'Show "Powered by Link"', 'instagram-slider-widget' ); ?></strong>
355
+ <label class="switch" for="<?php echo $this->get_field_id( 'support_author' ); ?>">
356
+ <input class="widefat" id="<?php echo $this->get_field_id( 'support_author' ); ?>" name="<?php echo $this->get_field_name( 'support_author' ); ?>" type="checkbox" value="1" <?php checked( '1', $instance['support_author'] ); ?> /><span class="slider round"></span></label>
357
+ <br><span class="jr-description"><?php _e( 'When enabled, the author is notified and a backlink website is visible at the bottom of the plugin. <br> <strong>If you enable this option you will have privileged support from our team!</strong>', 'instagram-slider-widget') ?></span>
358
+ </p>
359
+ <div class="donate-buttons">
360
+ <a target="_blank" title="Donate with Paypal!" href="http://bit.ly/2EseW2p"><p class="donate"><span></span>Donate with Paypal!</p></a>
361
+ </div>
362
+ </div></div>
363
+ </div><br>
364
+ <?php
365
+ }
366
+
367
+ /**
368
+ * Selected array function echoes selected if in array
369
+ *
370
+ * @param array $haystack The array to search in
371
+ * @param string $current The string value to search in array;
372
+ *
373
+ */
374
+ public function selected( $haystack, $current ) {
375
+
376
+ if( is_array( $haystack ) && in_array( $current, $haystack ) ) {
377
+ selected( 1, 1, true );
378
+ }
379
+ }
380
+
381
+
382
+ /**
383
+ * Add shorcode function
384
+ * @param array $atts shortcode attributes
385
+ * @return mixed
386
+ */
387
+ public function shortcode( $atts ) {
388
+
389
+ $atts = shortcode_atts( array( 'id' => '' ), $atts, 'jr_instagram' );
390
+ $args = get_option( 'widget_jr_insta_slider' );
391
+ if ( isset($args[$atts['id']] ) ) {
392
+ $args[$atts['id']]['widget_id'] = $atts['id'];
393
+ return $this->display_images( $args[$atts['id']] );
394
+ }
395
+ }
396
+
397
+ /**
398
+ * Echoes the Display Instagram Images method
399
+ *
400
+ * @param array $args
401
+ *
402
+ * @return void
403
+ */
404
+ public function instagram_images( $args ) {
405
+ echo $this->display_images( $args );
406
+ }
407
+
408
+ /**
409
+ * Cron Trigger Function
410
+ * @param [type] $username [description]
411
+ * @param [type] $refresh_hour [description]
412
+ * @param [type] $images [description]
413
+ * @return [type] [description]
414
+ */
415
+ public function jr_cron_trigger( $username, $refresh_hour, $images ) {
416
+ $search_for = array();
417
+ $search_for['username'] = $username;
418
+ $this->instagram_data( $search_for, $refresh_hour, $images, true );
419
+ }
420
+
421
+ /**
422
+ * Runs the query for images and returns the html
423
+ *
424
+ * @param array $args
425
+ *
426
+ * @return string
427
+ */
428
+ private function display_images( $args ) {
429
+
430
+ $username = isset( $args['username'] ) && !empty( $args['username'] ) ? $args['username'] : false;
431
+ $hashtag = isset( $args['hashtag'] ) && !empty( $args['hashtag'] ) ? str_replace( '#', '', $args['hashtag'] ) : false;
432
+ $blocked_users = isset( $args['blocked_users'] ) && !empty( $args['blocked_users'] ) ? $args['blocked_users'] : false;
433
+ $attachment = isset( $args['attachment'] ) ? true : false;
434
+ $template = isset( $args['template'] ) ? $args['template'] : 'slider';
435
+ $orderby = isset( $args['orderby'] ) ? $args['orderby'] : 'rand';
436
+ $images_link = isset( $args['images_link'] ) ? $args['images_link'] : 'image_url';
437
+ $custom_url = isset( $args['custom_url'] ) ? $args['custom_url'] : '';
438
+ $images_number = isset( $args['images_number'] ) ? absint( $args['images_number'] ) : 5;
439
+ $columns = isset( $args['columns'] ) ? absint( $args['columns'] ) : 4;
440
+ $refresh_hour = isset( $args['refresh_hour'] ) ? absint( $args['refresh_hour'] ) : 5;
441
+ $image_size = isset( $args['image_size'] ) ? $args['image_size'] : 'standard';
442
+ $image_link_rel = isset( $args['image_link_rel'] ) ? $args['image_link_rel'] : '';
443
+ $no_pin = isset( $args['no_pin'] ) ? $args['no_pin'] : 0;
444
+ $image_link_class = isset( $args['image_link_class'] ) ? $args['image_link_class'] : '';
445
+ $controls = isset( $args['controls'] ) ? $args['controls'] : 'prev_next';
446
+ $animation = isset( $args['animation'] ) ? $args['animation'] : 'slide';
447
+ $caption_words = isset( $args['caption_words'] ) ? $args['caption_words'] : 100;
448
+ $slidespeed = isset( $args['slidespeed'] ) ? $args['slidespeed'] : 7000;
449
+ $description = isset( $args['description'] ) ? $args['description'] : array();
450
+ $widget_id = isset( $args['widget_id'] ) ? $args['widget_id'] : preg_replace( '/[^0-9]/', '', $this->id );
451
+ $powered_by_link = isset( $args['support_author'] ) ? true : false;
452
+
453
+ if ( !empty( $description ) && !is_array( $description ) ) {
454
+ $description = explode( ',', $description );
455
+ }
456
+
457
+ if ( isset ( $args['search_for'] ) && $args['search_for'] == 'hashtag' ) {
458
+ $search = 'hashtag';
459
+ $search_for['hashtag'] = $hashtag;
460
+ $search_for['blocked_users'] = $blocked_users;
461
+ } else {
462
+ $search = 'user';
463
+ $search_for['username'] = $username;
464
+ }
465
+
466
+ if ( $refresh_hour == 0 ) {
467
+ $refresh_hour = 5;
468
+ }
469
+
470
+ $template_args = array(
471
+ 'search_for' => $search,
472
+ 'attachment' => $attachment,
473
+ 'image_size' => $image_size,
474
+ 'link_rel' => $image_link_rel,
475
+ 'link_class' => $image_link_class,
476
+ 'no_pin' => $no_pin,
477
+ 'caption_words' => $caption_words
478
+ );
479
+
480
+ $images_div_class = 'jr-insta-thumb';
481
+ $ul_class = ( $template == 'thumbs-no-border' ) ? 'thumbnails no-border jr_col_' . $columns : 'thumbnails jr_col_' . $columns;
482
+ $slider_script = '';
483
+
484
+ if ( $template != 'thumbs' && $template != 'thumbs-no-border' ) {
485
+
486
+ $template_args['description'] = $description;
487
+ $direction_nav = ( $controls == 'prev_next' ) ? 'true' : 'false';
488
+ $control_nav = ( $controls == 'numberless' ) ? 'true': 'false';
489
+ $ul_class = 'slides';
490
+
491
+ if ( $template == 'slider' ) {
492
+ $images_div_class = 'pllexislider pllexislider-normal instaslider-nr-'. $widget_id;
493
+ $slider_script =
494
+ "<script type='text/javascript'>" . "\n" .
495
+ " jQuery(document).ready(function($) {" . "\n" .
496
+ " $('.instaslider-nr-{$widget_id}').pllexislider({" . "\n" .
497
+ " animation: '{$animation}'," . "\n" .
498
+ " slideshowSpeed: {$slidespeed}," . "\n" .
499
+ " directionNav: {$direction_nav}," . "\n" .
500
+ " controlNav: {$control_nav}," . "\n" .
501
+ " prevText: ''," . "\n" .
502
+ " nextText: ''," . "\n" .
503
+ " });" . "\n" .
504
+ " });" . "\n" .
505
+ "</script>" . "\n";
506
+ } else {
507
+ $images_div_class = 'pllexislider pllexislider-overlay instaslider-nr-'. $widget_id;
508
+ $slider_script =
509
+ "<script type='text/javascript'>" . "\n" .
510
+ " jQuery(document).ready(function($) {" . "\n" .
511
+ " $('.instaslider-nr-{$widget_id}').pllexislider({" . "\n" .
512
+ " animation: '{$animation}'," . "\n" .
513
+ " slideshowSpeed: {$slidespeed}," . "\n" .
514
+ " directionNav: {$direction_nav}," . "\n" .
515
+ " controlNav: {$control_nav}," . "\n" .
516
+ " prevText: ''," . "\n" .
517
+ " nextText: ''," . "\n" .
518
+ " start: function(slider){" . "\n" .
519
+ " slider.hover(" . "\n" .
520
+ " function () {" . "\n" .
521
+ " slider.find('.jr-insta-datacontainer, .pllex-control-nav, .pllex-direction-nav').stop(true,true).fadeIn();" . "\n" .
522
+ " }," . "\n" .
523
+ " function () {" . "\n" .
524
+ " slider.find('.jr-insta-datacontainer, .pllex-control-nav, .pllex-direction-nav').stop(true,true).fadeOut();" . "\n" .
525
+ " }" . "\n" .
526
+ " );" . "\n" .
527
+ " }" . "\n" .
528
+ " });" . "\n" .
529
+ " });" . "\n" .
530
+ "</script>" . "\n";
531
+ }
532
+ }
533
+
534
+ $images_div = "<div class='{$images_div_class}'>\n";
535
+ $images_ul = "<ul class='no-bullet {$ul_class}'>\n";
536
+
537
+ $output = __( 'No images found! <br> Try some other hashtag or username', 'instagram-slider-widget' );
538
+
539
+ if ( ( $search == 'user' && $attachment ) ) {
540
+
541
+ if ( !wp_next_scheduled( 'jr_insta_cron', array( $search_for['username'], $refresh_hour, $images_number ) ) ) {
542
+ wp_schedule_single_event( time(), 'jr_insta_cron', array( $search_for['username'], $refresh_hour, $images_number ) );
543
+ }
544
+
545
+ $opt_name = 'jr_insta_' . md5( $search . '_' . $search_for['username'] );
546
+ $attachment_ids = (array) get_option( $opt_name );
547
+
548
+ $query_args = array(
549
+ 'post_type' => 'attachment',
550
+ 'post_status' => 'inherit',
551
+ 'post_mime_type' => 'image',
552
+ 'posts_per_page' => $images_number,
553
+ 'no_found_rows' => true
554
+ );
555
+
556
+ if ( $orderby != 'rand' ) {
557
+
558
+ $orderby = explode( '-', $orderby );
559
+ $meta_key = $orderby[0] == 'date' ? 'jr_insta_timestamp' : 'jr_insta_popularity';
560
+
561
+ $query_args['meta_key'] = $meta_key;
562
+ $query_args['orderby'] = 'meta_value_num';
563
+ $query_args['order'] = $orderby[1];
564
+ }
565
+
566
+ if ( isset( $attachment_ids['saved_images'] ) && !empty( $attachment_ids['saved_images'] ) ) {
567
+
568
+ $query_args['post__in'] = $attachment_ids['saved_images'];
569
+
570
+ } else {
571
+
572
+ $query_args['meta_query'] = array(
573
+ array(
574
+ 'key' => 'jr_insta_username',
575
+ 'value' => $username,
576
+ 'compare' => '='
577
+ )
578
+ );
579
+ }
580
+
581
+ $instagram_images = new WP_Query( $query_args );
582
+
583
+ if ( $instagram_images->have_posts() ) {
584
+
585
+ $output = $slider_script . $images_div . $images_ul;
586
+
587
+ while ( $instagram_images->have_posts() ) : $instagram_images->the_post();
588
+
589
+ $id = get_the_id();
590
+
591
+ if ( 'image_link' == $images_link ) {
592
+ $template_args['link_to'] = get_post_meta( $id, 'jr_insta_link', true );
593
+ } elseif ( 'user_url' == $images_link ) {
594
+ $template_args['link_to'] = 'https://www.instagram.com/' . $username . '/';
595
+ } elseif ( 'image_url' == $images_link ) {
596
+ $template_args['link_to'] = wp_get_attachment_url( $id );
597
+ } elseif ( 'attachment' == $images_link ) {
598
+ $template_args['link_to'] = get_permalink( $id );
599
+ } elseif ( 'custom_url' == $images_link ) {
600
+ $template_args['link_to'] = $custom_url;
601
+ }
602
+
603
+ $image_thumb_url = get_post_meta( $id, 'jr_insta_sizes', true );
604
+ $template_args['image'] = $image_thumb_url[$image_size];
605
+
606
+ $output .= $this->get_template( $template, $template_args );
607
+
608
+ endwhile;
609
+
610
+ $output .= "</ul>\n</div>" . $this->powered_by_link( $powered_by_link );
611
+
612
+ } else {
613
+
614
+ $images_data = $this->instagram_data( $search_for, $refresh_hour, $images_number, false );
615
+
616
+ if ( is_array( $images_data ) && !empty( $images_data ) ) {
617
+
618
+ if ( $orderby != 'rand' ) {
619
+
620
+ $func = $orderby[0] == 'date' ? 'sort_timestamp_' . $orderby[1] : 'sort_popularity_' . $orderby[1];
621
+
622
+ usort( $images_data, array( $this, $func ) );
623
+
624
+ } else {
625
+
626
+ shuffle( $images_data );
627
+ }
628
+
629
+ $output = $slider_script . $images_div . $images_ul;
630
+
631
+ foreach ( $images_data as $image_data ) {
632
+
633
+ if ( 'image_link' == $images_link ) {
634
+ $template_args['link_to'] = $image_data['link'];
635
+ } elseif ( 'user_url' == $images_link ) {
636
+ $template_args['link_to'] = 'https://www.instagram.com/' . $username . '/';
637
+ } elseif ( 'image_url' == $images_link ) {
638
+ $template_args['link_to'] = $image_data['url'];
639
+ } elseif ( 'custom_url' == $images_link ) {
640
+ $template_args['link_to'] = $custom_url;
641
+ }
642
+
643
+ $template_args['image'] = $image_data['sizes'][$image_size];
644
+ $template_args['caption'] = $image_data['caption'];
645
+ $template_args['timestamp'] = $image_data['timestamp'];
646
+ $template_args['username'] = isset( $image_data['username'] ) ? $image_data['username'] : '';
647
+ $template_args['attachment'] = false;
648
+
649
+ $output .= $this->get_template( $template, $template_args );
650
+ }
651
+
652
+ $output .= "</ul>\n</div>" . $this->powered_by_link( $powered_by_link );
653
+ }
654
+
655
+ }
656
+
657
+ wp_reset_postdata();
658
+
659
+ } else {
660
+
661
+ $images_data = $this->instagram_data( $search_for, $refresh_hour, $images_number, false );
662
+
663
+ if ( is_array( $images_data ) && !empty( $images_data ) ) {
664
+
665
+ if ( $orderby != 'rand' ) {
666
+
667
+ $orderby = explode( '-', $orderby );
668
+ $func = $orderby[0] == 'date' ? 'sort_timestamp_' . $orderby[1] : 'sort_popularity_' . $orderby[1];
669
+
670
+ usort( $images_data, array( $this, $func ) );
671
+
672
+ } else {
673
+
674
+ shuffle( $images_data );
675
+ }
676
+
677
+ $output = $slider_script . $images_div . $images_ul;
678
+
679
+ foreach ( $images_data as $image_data ) {
680
+
681
+ if ( 'image_link' == $images_link ) {
682
+ $template_args['link_to'] = $image_data['link'];
683
+ } elseif ( 'user_url' == $images_link ) {
684
+ $template_args['link_to'] = 'https://www.instagram.com/' . $username . '/';
685
+ } elseif ( 'image_url' == $images_link ) {
686
+ $template_args['link_to'] = $image_data['url'];
687
+ } elseif ( 'custom_url' == $images_link ) {
688
+ $template_args['link_to'] = $custom_url;
689
+ }
690
+
691
+ $template_args['image'] = $image_data['sizes'][$image_size];
692
+ $template_args['caption'] = $image_data['caption'];
693
+ $template_args['timestamp'] = $image_data['timestamp'];
694
+ $template_args['username'] = isset( $image_data['username'] ) ? $image_data['username'] : '';
695
+
696
+ $output .= $this->get_template( $template, $template_args );
697
+ }
698
+
699
+ $output .= "</ul>\n</div>" . $this->powered_by_link( $powered_by_link );
700
+ }
701
+ }
702
+
703
+ return $output;
704
+
705
+ }
706
+
707
+
708
+ /**
709
+ * Function to display Templates styles
710
+ *
711
+ * @param string $template
712
+ * @param array $args
713
+ *
714
+ * return mixed
715
+ */
716
+ private function get_template( $template, $args ) {
717
+
718
+ $link_to = isset( $args['link_to'] ) ? $args['link_to'] : false;
719
+ $image_url = isset( $args['image'] ) ? $args['image'] : false;
720
+
721
+ if ( ( $args['search_for'] == 'user' && $args['attachment'] !== true ) || $args['search_for'] == 'hashtag' ) {
722
+ $caption = $args['caption'];
723
+ $time = $args['timestamp'];
724
+ $username = $args['username'];
725
+ } else {
726
+ $attach_id = get_the_id();
727
+ $caption = get_the_excerpt();
728
+ $time = get_post_meta( $attach_id, 'jr_insta_timestamp', true );
729
+ $username = get_post_meta( $attach_id, 'jr_insta_username', true );
730
+ }
731
+
732
+ $short_caption = wp_trim_words( $caption, 10, '' );
733
+ $short_caption = preg_replace("/[^A-Za-z0-9?! ]/","", $short_caption);
734
+ $caption = wp_trim_words( $caption, $args['caption_words'], '' );
735
+ $nopin = ( 1 == $args['no_pin'] ) ? 'nopin="nopin"' : '';
736
+
737
+ $image_src = '<img src="' . $image_url . '" alt="' . $short_caption . '" title="' . $short_caption . '" '. $nopin . '/>';
738
+ $image_output = $image_src;
739
+
740
+ if ( $link_to ) {
741
+ $image_output = '<a href="' . $link_to . '" target="_blank"';
742
+
743
+ if ( ! empty( $args['link_rel'] ) ) {
744
+ $image_output .= ' rel="' . $args['link_rel'] . '"';
745
+ }
746
+
747
+ if ( ! empty( $args['link_class'] ) ) {
748
+ $image_output .= ' class="' . $args['link_class'] . '"';
749
+ }
750
+ $image_output .= ' title="' . $short_caption . '">' . $image_src . '</a>';
751
+ }
752
+
753
+ $output = '';
754
+
755
+ // Template : Normal Slider
756
+ if ( $template == 'slider' ) {
757
+
758
+ $output .= "<li>";
759
+
760
+ $output .= $image_output;
761
+
762
+ if ( is_array( $args['description'] ) && count( $args['description'] ) >= 1 ) {
763
+
764
+ $output .= "<div class='jr-insta-datacontainer'>\n";
765
+
766
+ if ( $time && in_array( 'time', $args['description'] ) ) {
767
+ $time = human_time_diff( $time );
768
+ $output .= "<span class='jr-insta-time'>{$time} ago</span>\n";
769
+ }
770
+ if ( in_array( 'username', $args['description'] ) && $username ) {
771
+ $output .= "<span class='jr-insta-username'>by <a rel='nofollow' href='https://www.instagram.com/{$username}/' target='_blank'>{$username}</a></span>\n";
772
+ }
773
+
774
+ if ( $caption != '' && in_array( 'caption', $args['description'] ) ) {
775
+ $caption = preg_replace( '/@([a-z0-9_]+)/i', '&nbsp;<a href="https://www.instagram.com/$1/" rel="nofollow" target="_blank">@$1</a>&nbsp;', $caption );
776
+ $caption = preg_replace( '/\#([a-zA-Z0-9_-]+)/i', '&nbsp;<a href="https://www.instagram.com/explore/tags/$1/" rel="nofollow" target="_blank">$0</a>&nbsp;', $caption);
777
+ $output .= "<span class='jr-insta-caption'>{$caption}</span>\n";
778
+ }
779
+
780
+ $output .= "</div>\n";
781
+ }
782
+
783
+ $output .= "</li>";
784
+
785
+ // Template : Slider with text Overlay on mouse over
786
+ } elseif ( $template == 'slider-overlay' ) {
787
+
788
+ $output .= "<li>";
789
+
790
+ $output .= $image_output;
791
+
792
+ if ( is_array( $args['description'] ) && count( $args['description'] ) >= 1 ) {
793
+
794
+ $output .= "<div class='jr-insta-wrap'>\n";
795
+
796
+ $output .= "<div class='jr-insta-datacontainer'>\n";
797
+
798
+ if ( $time && in_array( 'time', $args['description'] ) ) {
799
+ $time = human_time_diff( $time );
800
+ $output .= "<span class='jr-insta-time'>{$time} ago</span>\n";
801
+ }
802
+
803
+ if ( in_array( 'username', $args['description'] ) && $username ) {
804
+ $output .= "<span class='jr-insta-username'>by <a rel='nofollow' target='_blank' href='https://www.instagram.com/{$username}/'>{$username}</a></span>\n";
805
+ }
806
+
807
+ if ( $caption != '' && in_array( 'caption', $args['description'] ) ) {
808
+ $caption = preg_replace( '/@([a-z0-9_]+)/i', '&nbsp;<a href="https://www.instagram.com/$1/" rel="nofollow" target="_blank">@$1</a>&nbsp;', $caption );
809
+ $caption = preg_replace( '/\#([a-zA-Z0-9_-]+)/i', '&nbsp;<a href="https://www.instagram.com/explore/tags/$1/" rel="nofollow" target="_blank">$0</a>&nbsp;', $caption);
810
+ $output .= "<span class='jr-insta-caption'>{$caption}</span>\n";
811
+ }
812
+
813
+ $output .= "</div>\n";
814
+
815
+ $output .= "</div>\n";
816
+ }
817
+
818
+ $output .= "</li>";
819
+
820
+ // Template : Thumbnails no text
821
+ } elseif ( $template == 'thumbs' || $template == 'thumbs-no-border' ) {
822
+
823
+ $output .= "<li>";
824
+ $output .= $image_output;
825
+ $output .= "</li>";
826
+
827
+ } else {
828
+
829
+ $output .= 'This template does not exist!';
830
+ }
831
+
832
+ return $output;
833
+ }
834
+
835
+
836
+ /**
837
+ * Trigger refresh for new data
838
+ * @param bolean $instaData
839
+ * @param array $old_args
840
+ * @param array $new_args
841
+ * @return bolean
842
+ */
843
+ private function trigger_refresh_data( $instaData, $old_args, $new_args ) {
844
+
845
+ $trigger = 0;
846
+
847
+ if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
848
+ return false;
849
+ }
850
+
851
+ if ( false === $instaData ) {
852
+ $trigger = 1;
853
+ }
854
+
855
+
856
+ if ( isset( $old_args['saved_images'] ) ) {
857
+ unset($old_args['saved_images']);
858
+ }
859
+
860
+ if ( isset( $old_args['deleted_images'] ) ) {
861
+ unset($old_args['deleted_images']);
862
+ }
863
+
864
+ if ( is_array( $old_args ) && is_array( $new_args ) && array_diff( $old_args, $new_args ) !== array_diff( $new_args, $old_args ) ) {
865
+ $trigger = 1;
866
+ }
867
+
868
+ if ( $trigger == 1 ) {
869
+ return true;
870
+ }
871
+
872
+ return false;
873
+ }
874
+
875
+
876
+ /**
877
+ * Show powered by link at the end of the plugin
878
+ * @param [type] $support_author [description]
879
+ * @return [type] [description]
880
+ */
881
+ function powered_by_link( $support_author ) {
882
+
883
+ if ( $support_author ) {
884
+ $link = $this->domain_data();
885
+
886
+ if ( isset( $link['text'] ) && !empty( $link['text'] ) && isset( $link['domain'] ) && !empty( $link['domain'] ) ) {
887
+ $link = '<div style="clear:both;text-align:right;font-size:10px;" >Powered by <a href="'.$link['domain'].'" target="_blank">'.$link['text'].'</a></div>';
888
+ } else if ( isset( $link['text'] ) && !empty( $link['text'] ) ) {
889
+ $link = '<div style="clear:both;text-align:right;font-size:10px;" >Powered by '.$link['text'].'</div>';
890
+ } else {
891
+ $link = '';
892
+ }
893
+
894
+ return $link;
895
+ }
896
+ return false;
897
+ }
898
+
899
+
900
+ /**
901
+ * Stores the fetched data from instagram in WordPress DB using transients
902
+ *
903
+ * @param string $username Instagram Username to fetch images from
904
+ * @param string $cache_hours Cache hours for transient
905
+ * @param string $nr_images Nr of images to fetch from instagram
906
+ *
907
+ * @return array of localy saved instagram data
908
+ */
909
+ private function instagram_data( $search_for, $cache_hours, $nr_images, $attachment ) {
910
+
911
+ $nr_images = $nr_images <= 12 ? $nr_images : 12;
912
+ $blocked_users = isset( $search_for['blocked_users'] ) && !empty( $search_for['blocked_users'] ) ? $search_for['blocked_users'] : false;
913
+ if ( isset( $search_for['username'] ) && !empty( $search_for['username'] ) ) {
914
+ $search = 'user';
915
+ $search_string = $search_for['username'];
916
+ } elseif ( isset( $search_for['hashtag'] ) && !empty( $search_for['hashtag'] ) ) {
917
+ $search = 'hashtag';
918
+ $search_string = $search_for['hashtag'];
919
+ $blocked_users_array = $blocked_users ? $this->get_ids_from_usernames( $blocked_users ) : array();
920
+ } else {
921
+ return __( 'Nothing to search for', 'instagram-slider-widget');
922
+ }
923
+
924
+ $opt_name = 'jr_insta_' . md5( $search . '_' . $search_string );
925
+ $instaData = get_transient( $opt_name );
926
+ $old_opts = (array) get_option( $opt_name );
927
+ $new_opts = array(
928
+ 'search' => $search,
929
+ 'search_string' => $search_string,
930
+ 'blocked_users' => $blocked_users,
931
+ 'cache_hours' => $cache_hours,
932
+ 'nr_images' => $nr_images,
933
+ 'attachment' => $attachment
934
+ );
935
+
936
+ if ( true === $this->trigger_refresh_data( $instaData, $old_opts, $new_opts ) ) {
937
+
938
+ $instaData = array();
939
+ $old_opts['search'] = $search;
940
+ $old_opts['search_string'] = $search_string;
941
+ $old_opts['blocked_users'] = $blocked_users;
942
+ $old_opts['cache_hours'] = $cache_hours;
943
+ $old_opts['nr_images'] = $nr_images;
944
+ $old_opts['attachment'] = $attachment;
945
+
946
+ if ( 'user' == $search ) {
947
+
948
+ $url = str_replace( '{username}', urlencode( trim( $search_string ) ), self::USERNAME_URL );
949
+ $response = wp_remote_get( $url, array( 'sslverify' => false, 'timeout' => 60 ) );
950
+
951
+ $json = str_replace( 'window._sharedData = ', '', strstr( $response['body'], 'window._sharedData = ' ) );
952
+
953
+ // Compatibility for version of php where strstr() doesnt accept third parameter
954
+ if ( version_compare( PHP_VERSION, '5.3.0', '>=' ) ) {
955
+ $json = strstr( $json, '</script>', true );
956
+ } else {
957
+ $json = substr( $json, 0, strpos( $json, '</script>' ) );
958
+ }
959
+ $json = rtrim( $json, ';' );
960
+
961
+ // Function json_last_error() is not available before PHP * 5.3.0 version
962
+ if ( function_exists( 'json_last_error' ) ) {
963
+
964
+ ( $results = json_decode( $json, true ) ) && json_last_error() == JSON_ERROR_NONE;
965
+
966
+ } else {
967
+ $results = json_decode( $json, true );
968
+ }
969
+
970
+ } else {
971
+ $url = str_replace( '{tag}', urlencode( trim( $search_string ) ), self::TAG_URL );
972
+ $response = wp_remote_get( $url, array( 'sslverify' => false, 'timeout' => 60 ) );
973
+ $results = json_decode( $response['body'], true );
974
+
975
+ }
976
+
977
+ if ( is_wp_error( $response ) ) {
978
+
979
+ return $response->get_error_message();
980
+ }
981
+
982
+ if ( $response['response']['code'] == 200 ) {
983
+
984
+ if ( $results && is_array( $results ) ) {
985
+
986
+ if ( 'user' == $search ) {
987
+ $entry_data = isset($results['entry_data']['ProfilePage'][0]['graphql']['user']['edge_owner_to_timeline_media']['edges']) ? $results['entry_data']['ProfilePage'][0]['graphql']['user']['edge_owner_to_timeline_media']['edges'] : array();
988
+ } else {
989
+ $entry_data = isset( $results['graphql']['hashtag']['edge_hashtag_to_media']['edges'] ) ? $results['graphql']['hashtag']['edge_hashtag_to_media']['edges'] : array();
990
+ }
991
+
992
+ if ( empty( $entry_data ) ) {
993
+ return __( 'No images found', 'instagram-slider-widget');
994
+ }
995
+
996
+ foreach ( $entry_data as $current => $result ) {
997
+
998
+ $result = $result['node'];
999
+
1000
+ if ( 'hashtag' == $search ) {
1001
+
1002
+ if ( in_array( $result['owner']['id'], $blocked_users_array ) ) {
1003
+ $nr_images++;
1004
+ continue;
1005
+ }
1006
+ }
1007
+
1008
+ if ( $result['is_video'] == true ) {
1009
+ $nr_images++;
1010
+ continue;
1011
+ }
1012
+
1013
+
1014
+ if ( $current >= $nr_images ) {
1015
+ break;
1016
+ }
1017
+
1018
+ $image_data = $this->media_model( $result );
1019
+
1020
+ if ( 'user' == $search ) {
1021
+ $image_data['username'] = $search_string;
1022
+ }
1023
+
1024
+ if ( ( $search == 'hashtag' ) || ( $search == 'user' && !$attachment ) ) {
1025
+
1026
+ $instaData[] = $image_data;
1027
+
1028
+ } else {
1029
+
1030
+ if ( isset( $old_opts['saved_images'][$image_data['id']] ) ) {
1031
+
1032
+ if ( is_string( get_post_status( $old_opts['saved_images'][$image_data['id']] ) ) ) {
1033
+
1034
+ $this->update_wp_attachment( $old_opts['saved_images'][$image_data['id']], $image_data );
1035
+
1036
+ $instaData[$image_data['id']] = $old_opts['saved_images'][$image_data['id']];
1037
+
1038
+ } else {
1039
+ unset( $old_opts['saved_images'][$image_data['id']] );
1040
+ }
1041
+
1042
+ } else {
1043
+
1044
+ $id = $this->save_wp_attachment( $image_data );
1045
+
1046
+ if ( $id && is_numeric( $id ) ) {
1047
+
1048
+ $old_opts['saved_images'][$image_data['id']] = $id;
1049
+
1050
+ $instaData[$image_data['id']] = $id;
1051
+
1052
+ } else {
1053
+
1054
+ return $id;
1055
+ }
1056
+
1057
+ } // end isset $saved_images
1058
+
1059
+ } // false to save attachments
1060
+
1061
+ } // end -> foreach
1062
+
1063
+ } // end -> ( $results ) && is_array( $results ) )
1064
+
1065
+ } else {
1066
+
1067
+ return $response['response']['message'];
1068
+
1069
+ } // end -> $response['response']['code'] === 200 )
1070
+
1071
+ update_option( $opt_name, $old_opts );
1072
+
1073
+ if ( is_array( $instaData ) && !empty( $instaData ) ) {
1074
+
1075
+ set_transient( $opt_name, $instaData, $cache_hours * 60 * 60 );
1076
+ }
1077
+
1078
+ } // end -> false === $instaData
1079
+
1080
+ return $instaData;
1081
+ }
1082
+
1083
+
1084
+ /**
1085
+ * @param string $imageUrl
1086
+ *
1087
+ * @return array
1088
+ */
1089
+ private function get_thumbnail_urls( $thumbnails ) {
1090
+
1091
+ $image_thumbnails = array();
1092
+
1093
+ foreach ( $thumbnails as $thumbnail ) {
1094
+
1095
+ switch ( $thumbnail['config_width'] ) {
1096
+ case '150':
1097
+ $image_thumbnails['thumbnail'] = $thumbnail['src'];
1098
+ break;
1099
+ case '320':
1100
+ $image_thumbnails['low'] = $thumbnail['src'];
1101
+ break;
1102
+ case '640':
1103
+ $image_thumbnails['standard'] = $thumbnail['src'];
1104
+ break;
1105
+ }
1106
+ }
1107
+
1108
+ return $image_thumbnails;
1109
+ }
1110
+
1111
+
1112
+ /**
1113
+ * Media Model
1114
+ * @param [type] $medias_array [description]
1115
+ * @return [type] [description]
1116
+ */
1117
+ private function media_model( $medias_array ) {
1118
+
1119
+ $medias_model = array();
1120
+
1121
+ foreach ( $medias_array as $prop => $value ) {
1122
+
1123
+ switch ( $prop ) {
1124
+ case 'id':
1125
+ $medias_model['id'] = $value;
1126
+ break;
1127
+ case 'code':
1128
+ case 'shortcode':
1129
+ $medias_model['code'] = $value;
1130
+ $medias_model['link'] = 'https://www.instagram.com/p/'. $value . '/';
1131
+ break;
1132
+ case 'owner':
1133
+ $medias_model['user_id'] = $value['id'];
1134
+ break;
1135
+ case 'caption':
1136
+ $medias_model['caption'] = $this->sanitize( $value );
1137
+ break;
1138
+ case 'edge_media_to_caption':
1139
+ if ( !empty( $value['edges'] ) ) {
1140
+ $first_caption = $value['edges'][0];
1141
+ if ( isset( $first_caption['node']['text'] ) ) {
1142
+ $medias_model['caption'] = $this->sanitize( $value['edges'][0]['node']['text'] );
1143
+ }
1144
+ }
1145
+ break;
1146
+ case 'date':
1147
+ case 'taken_at_timestamp':
1148
+ $medias_model['timestamp'] = (float) $value;
1149
+ break;
1150
+ case 'dimensions':
1151
+ $medias_model['height'] = $value['height'];
1152
+ $medias_model['width'] = $value['width'];
1153
+ break;
1154
+ case 'display_url':
1155
+ case 'display_src':
1156
+ $medias_model['url'] = $value;
1157
+ if ( isset( $medias_model['sizes'] ) ) {
1158
+ $medias_model['sizes']['full'] = $value;
1159
+ }
1160
+ break;
1161
+ case 'edge_liked_by':
1162
+ case 'likes':
1163
+ $medias_model['likes_count'] = $value['count'];
1164
+ break;
1165
+ case 'edge_media_to_comment':
1166
+ case 'comments':
1167
+ $medias_model['comment_count'] = $value['count'];
1168
+ break;
1169
+ case 'thumbnail_resources':
1170
+ $medias_model['sizes'] = $this->get_thumbnail_urls( $value );
1171
+ if ( isset( $medias_model['url'] ) ) {
1172
+ $medias_model['sizes']['full'] = $medias_model['url'];
1173
+ }
1174
+ break;
1175
+ }
1176
+
1177
+ if ( isset( $medias_model['comment_count'] ) && isset( $medias_model['likes_count'] ) ) {
1178
+ $medias_model['popularity'] = (int) ( $medias_model['comment_count'] ) + ( $medias_model['likes_count'] );
1179
+ }
1180
+ }
1181
+
1182
+ return $medias_model;
1183
+ }
1184
+
1185
+
1186
+ /**
1187
+ * Remove Duplicates
1188
+ * @return [type] [description]
1189
+ */
1190
+ private function clean_duplicates( $username ) {
1191
+
1192
+ $savedinsta_args = array(
1193
+ 'post_type' => 'attachment',
1194
+ 'post_status' => 'inherit',
1195
+ 'post_mime_type' => 'image',
1196
+ 'orderby' => 'rand',
1197
+ 'posts_per_page' => -1,
1198
+ 'meta_query' => array(
1199
+ array(
1200
+ 'key' => 'jr_insta_username',
1201
+ 'compare' => '=',
1202
+ 'value' => $username
1203
+ ),
1204
+ ),
1205
+ );
1206
+
1207
+ $savedinsta = new WP_Query( $savedinsta_args );
1208
+
1209
+ $opt_name = 'jr_insta_' . md5( 'user' . '_' . $username );
1210
+
1211
+ $attachment_ids = (array) get_option( $opt_name );
1212
+
1213
+ $deleted_count = 0;
1214
+
1215
+ foreach ( $savedinsta->posts as $post ) {
1216
+
1217
+ if ( !in_array( $post->ID, $attachment_ids['saved_images'] ) ) {
1218
+
1219
+ if ( false !== wp_delete_attachment( $post->ID, true ) ) {
1220
+ $deleted_count++;
1221
+ }
1222
+ }
1223
+ }
1224
+
1225
+ wp_reset_postdata();
1226
+
1227
+ return $deleted_count;
1228
+ }
1229
+
1230
+ /**
1231
+ * Ajax Call to unblock images
1232
+ * @return void
1233
+ */
1234
+ public function delete_dupes() {
1235
+
1236
+ if (function_exists('check_ajax_referer')) {
1237
+ check_ajax_referer( 'jr_delete_instagram_dupes' );
1238
+ }
1239
+
1240
+ $post = $_POST;
1241
+ $return = array(
1242
+ 'deleted' => $this->clean_duplicates( $post['username'] )
1243
+ );
1244
+
1245
+ wp_send_json( $return );
1246
+ }
1247
+
1248
+ /**
1249
+ * Get Instagram Ids from Usernames into array
1250
+ * @param string $usernames Comma separated string with instagram users
1251
+ * @return array An array with instagram ids
1252
+ */
1253
+ private function get_ids_from_usernames( $usernames ) {
1254
+
1255
+ $users = explode( ',', trim( $usernames ) );
1256
+ $user_ids = (array) get_transient( 'jr_insta_user_ids' );
1257
+ $return_ids = array();
1258
+
1259
+ if ( is_array( $users ) && !empty( $users ) ) {
1260
+
1261
+ foreach ( $users as $user ) {
1262
+
1263
+ if ( isset( $user_ids[$user] ) ) {
1264
+ continue;
1265
+ }
1266
+
1267
+ $url = str_replace( '{username}', urlencode( trim( $user ) ), self::USERNAME_URL );
1268
+ $response = wp_remote_get( $url, array( 'sslverify' => false, 'timeout' => 60 ) );
1269
+
1270
+ if ( is_wp_error( $response ) ) {
1271
+
1272
+ return $response->get_error_message();
1273
+ }
1274
+
1275
+ if ( $response['response']['code'] == 200 ) {
1276
+
1277
+ $results = json_decode( $response['body'], true );
1278
+
1279
+ if ( $results && is_array( $results ) ) {
1280
+
1281
+ $user_id = isset( $results['user']['id'] ) ? $results['user']['id'] : false;
1282
+
1283
+ if ( $user_id ) {
1284
+
1285
+ $user_ids[$user] = $user_id;
1286
+
1287
+ set_transient( 'jr_insta_user_ids', $user_ids );
1288
+ }
1289
+ }
1290
+ }
1291
+ }
1292
+ }
1293
+
1294
+ foreach ( $users as $user ) {
1295
+ if ( isset( $user_ids[$user] ) ) {
1296
+ $return_ids[] = $user_ids[$user];
1297
+ }
1298
+ }
1299
+
1300
+ return $return_ids;
1301
+ }
1302
+
1303
+
1304
+ /**
1305
+ * Updates attachment using the id
1306
+ * @param int $attachment_ID
1307
+ * @param array image_data
1308
+ * @return void
1309
+ */
1310
+ private function update_wp_attachment( $attachment_ID, $image_data ) {
1311
+ update_post_meta( $attachment_ID, 'jr_insta_popularity', $image_data['popularity'] );
1312
+ update_post_meta( $attachment_ID, 'jr_insta_likes_count', $image_data['likes_count'] );
1313
+ update_post_meta( $attachment_ID, 'jr_insta_comment_count', $image_data['comment_count'] );
1314
+ }
1315
+
1316
+ /**
1317
+ * Save Instagram images to upload folder and ads to media.
1318
+ * If the upload fails it returns the remote image url.
1319
+ *
1320
+ * @param string $url Url of image to download
1321
+ * @param string $file File path for image
1322
+ *
1323
+ * @return string $url Url to image
1324
+ */
1325
+ private function save_wp_attachment( $image_data ) {
1326
+
1327
+ $image_info = pathinfo( $image_data['url'] );
1328
+
1329
+ if ( !in_array( $image_info['extension'], array( 'jpg', 'jpe', 'jpeg' ) ) ) {
1330
+ return false;
1331
+ }
1332
+
1333
+ $attachment = array(
1334
+ 'guid' => $image_data['url'],
1335
+ 'post_mime_type' => 'image/jpeg',
1336
+ 'post_title' => preg_replace( '/\.[^.]+$/', '', $image_info['basename'] ),
1337
+ 'post_excerpt' => $image_data['caption']
1338
+ );
1339
+
1340
+ $attachment_metadata = array( 'width' => $image_data['width'], 'height' => $image_data['height'], 'file' => $image_info['basename'] );
1341
+ $attachment_metadata['sizes'] = array( 'full' => $attachment_metadata );
1342
+ $id = wp_insert_attachment( $attachment );
1343
+ wp_update_attachment_metadata( $id, $attachment_metadata );
1344
+
1345
+
1346
+ unset( $image_data['caption'] );
1347
+
1348
+ foreach ( $image_data as $meta_key => $meta_value ) {
1349
+ update_post_meta( $id, 'jr_insta_' . $meta_key, $meta_value );
1350
+ }
1351
+
1352
+ return $id;
1353
+ }
1354
+
1355
+ /**
1356
+ * Add new attachment Description only for instgram images
1357
+ *
1358
+ * @param array $form_fields
1359
+ * @param object $post
1360
+ *
1361
+ * @return array
1362
+ */
1363
+ public function insta_attachment_fields( $form_fields, $post ) {
1364
+
1365
+ $instagram_username = get_post_meta( $post->ID, 'jr_insta_username', true );
1366
+
1367
+ if ( !empty( $instagram_username ) ) {
1368
+
1369
+ $form_fields["jr_insta_username"] = array(
1370
+ "label" => __( "Instagram Username" ),
1371
+ "input" => "html",
1372
+ "html" => "<span style='line-height:31px'><a target='_blank' href='https://www.instagram.com/{$instagram_username}/'>{$instagram_username}</a></span>"
1373
+ );
1374
+
1375
+ $instagram_link = get_post_meta( $post->ID, 'jr_insta_link', true );
1376
+ if ( !empty( $instagram_link ) ) {
1377
+ $form_fields["jr_insta_link"] = array(
1378
+ "label" => __( "Instagram Image" ),
1379
+ "input" => "html",
1380
+ "html" => "<span style='line-height:31px'><a target='_blank' href='{$instagram_link}'>{$instagram_link}</a></span>"
1381
+ );
1382
+ }
1383
+
1384
+ $instagram_date = get_post_meta( $post->ID, 'jr_insta_timestamp', true );
1385
+ if ( !empty( $instagram_date ) ) {
1386
+ $instagram_date = date( "F j, Y, g:i a", $instagram_date );
1387
+ $form_fields["jr_insta_time"] = array(
1388
+ "label" => __( "Posted on Instagram" ),
1389
+ "input" => "html",
1390
+ "html" => "<span style='line-height:31px'>{$instagram_date}</span>"
1391
+ );
1392
+ }
1393
+ }
1394
+
1395
+ return $form_fields;
1396
+ }
1397
+
1398
+ /**
1399
+ * Sort Function for timestamp Ascending
1400
+ */
1401
+ public function sort_timestamp_ASC( $a, $b ) {
1402
+ return $a['timestamp'] > $b['timestamp'];
1403
+ }
1404
+
1405
+ /**
1406
+ * Sort Function for timestamp Descending
1407
+ */
1408
+ public function sort_timestamp_DESC( $a, $b ) {
1409
+ return $a['timestamp'] < $b['timestamp'];
1410
+ }
1411
+
1412
+ /**
1413
+ * Sort Function for popularity Ascending
1414
+ */
1415
+ public function sort_popularity_ASC( $a, $b ) {
1416
+ return $a['popularity'] > $b['popularity'];
1417
+ }
1418
+
1419
+ /**
1420
+ * Sort Function for popularity Descending
1421
+ */
1422
+ public function sort_popularity_DESC( $a, $b ) {
1423
+ return $a['popularity'] < $b['popularity'];
1424
+ }
1425
+
1426
+ /**
1427
+ * Plugin Data for better compatibility and Support
1428
+ *
1429
+ */
1430
+ public function domain_data() {
1431
+
1432
+ if ( false === $domain_data = get_transient( 'jr_domain_info' ) ) {
1433
+
1434
+ $theme = wp_get_theme();
1435
+ $domain = get_site_url();
1436
+ $plugin = self::VERSION;
1437
+ $url = 'http://jrwebstudio.com/wp-admin/admin-post.php';
1438
+
1439
+ $response = wp_safe_remote_post( $url, array(
1440
+ 'method' => 'POST',
1441
+ 'timeout' => 45,
1442
+ 'redirection' => 5,
1443
+ 'httpversion' => '1.1',
1444
+ 'blocking' => true,
1445
+ 'user-agent' => 'Mozilla/4.0',
1446
+ 'headers' => array(),
1447
+ 'cookies' => array(),
1448
+ 'body' => array(
1449
+ 'action' => 'insta_users',
1450
+ 'domain' => $domain,
1451
+ 'theme_name' => $theme->get( 'Name' ),
1452
+ 'theme_version' => $theme->get( 'Version' ),
1453
+ 'plugin_version' => $plugin,
1454
+ 'timestamp' => time()
1455
+ )
1456
+ )
1457
+ );
1458
+
1459
+ if ( $response['response']['code'] == 200 ) {
1460
+ $domain_data = json_decode( wp_remote_retrieve_body( $response ), true );
1461
+ if ( is_array( $domain_data) && !empty( $domain_data) ) {
1462
+ set_transient( 'jr_domain_info', $domain_data, WEEK_IN_SECONDS );
1463
+ }
1464
+ }
1465
+ }
1466
+
1467
+ return $domain_data;
1468
+ }
1469
+
1470
+ /**
1471
+ * Sanitize 4-byte UTF8 chars; no full utf8mb4 support in drupal7+mysql stack.
1472
+ * This solution runs in O(n) time BUT assumes that all incoming input is
1473
+ * strictly UTF8.
1474
+ *
1475
+ * @param string $input The input to be sanitised
1476
+ *
1477
+ * @return the sanitized input
1478
+ */
1479
+ private function sanitize( $input ) {
1480
+
1481
+ if ( !empty( $input ) ) {
1482
+ $utf8_2byte = 0xC0 /*1100 0000*/ ;
1483
+ $utf8_2byte_bmask = 0xE0 /*1110 0000*/ ;
1484
+ $utf8_3byte = 0xE0 /*1110 0000*/ ;
1485
+ $utf8_3byte_bmask = 0XF0 /*1111 0000*/ ;
1486
+ $utf8_4byte = 0xF0 /*1111 0000*/ ;
1487
+ $utf8_4byte_bmask = 0xF8 /*1111 1000*/ ;
1488
+
1489
+ $sanitized = "";
1490
+ $len = strlen( $input );
1491
+ for ( $i = 0; $i < $len; ++$i ) {
1492
+
1493
+ $mb_char = $input[$i]; // Potentially a multibyte sequence
1494
+ $byte = ord( $mb_char );
1495
+
1496
+ if ( ( $byte & $utf8_2byte_bmask ) == $utf8_2byte ) {
1497
+ $mb_char .= $input[++$i];
1498
+ } else if ( ( $byte & $utf8_3byte_bmask ) == $utf8_3byte ) {
1499
+ $mb_char .= $input[++$i];
1500
+ $mb_char .= $input[++$i];
1501
+ } else if ( ( $byte & $utf8_4byte_bmask ) == $utf8_4byte ) {
1502
+ // Replace with ? to avoid MySQL exception
1503
+ $mb_char = '';
1504
+ $i += 3;
1505
+ }
1506
+
1507
+ $sanitized .= $mb_char;
1508
+ }
1509
+
1510
+ $input = $sanitized;
1511
+ }
1512
+
1513
+ return $input;
1514
+ }
1515
+
1516
+ } // end of class WIS_InstagramSlider
1517
+ ?>
instaram_slider.php CHANGED
@@ -1,1518 +1,153 @@
1
  <?php
2
  /*
3
- Plugin Name: Instagram Slider Widget
4
- Plugin URI: http://instagram.jrwebstudio.com/
5
- Version: 1.4.2
6
- Description: Instagram Slider Widget is a responsive slider widget that shows 12 latest images from a public Instagram user and up to 18 images from a hashtag.
7
- Author: jetonr
8
- Author URI: http://jrwebstudio.com/
9
- License: GPLv2 or later
 
 
 
10
  */
11
 
12
- /**
13
- * On widgets Init register Widget
14
- */
15
- add_action( 'widgets_init', array( 'JR_InstagramSlider', 'register_widget' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
  /**
18
- * JR_InstagramSlider Class
 
19
  */
20
- class JR_InstagramSlider extends WP_Widget {
21
-
22
- /**
23
- * Plugin version, used for cache-busting of style and script file references.
24
- *
25
- * @var string
26
- */
27
- const VERSION = '1.4.2';
28
-
29
- const USERNAME_URL = 'https://www.instagram.com/{username}/?__a=1';
30
-
31
- const TAG_URL = 'https://www.instagram.com/explore/tags/{tag}/?__a=1';
32
-
33
- /**
34
- * Initialize the plugin by registering widget and loading public scripts
35
- *
36
- */
37
- public function __construct() {
38
-
39
- // Widget ID and Class Setup
40
- parent::__construct( 'jr_insta_slider', __( 'Instagram Slider', 'jrinstaslider' ), array(
41
- 'classname' => 'jr-insta-slider',
42
- 'description' => __( 'A widget that displays a slider with instagram images ', 'jrinstaslider' )
43
- )
44
- );
45
-
46
- // Shortcode
47
- add_shortcode( 'jr_instagram', array( $this, 'shortcode' ) );
48
-
49
- // Instgram Action to display images
50
- add_action( 'jr_instagram', array( $this, 'instagram_images' ) );
51
-
52
- // Enqueue Plugin Styles and scripts
53
- add_action( 'wp_enqueue_scripts', array( $this, 'public_enqueue' ) );
54
-
55
- // Enqueue Plugin Styles and scripts for admin pages
56
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue' ) );
57
-
58
- // Ajax action to unblock images from widget
59
- add_action( 'wp_ajax_jr_delete_insta_dupes', array( $this, 'delete_dupes' ) );
60
-
61
- // Add new attachment field desctiptions
62
- add_filter( 'attachment_fields_to_edit', array( $this, 'insta_attachment_fields' ) , 10, 2 );
63
-
64
- // Add action for single cron events
65
- add_action( 'jr_insta_cron', array( $this, 'jr_cron_trigger' ), 10 , 3 );
66
- }
67
-
68
- /**
69
- * Register widget on windgets init
70
- */
71
- public static function register_widget() {
72
- register_widget( __CLASS__ );
73
- register_sidebar( array(
74
- 'name' => __( 'Instagram Slider - Shortcode Generator', 'jrinstaslider' ),
75
- 'id' => 'jr-insta-shortcodes',
76
- 'description' => __( "1. Drag Instagram Slider widget here. 2. Fill in the fields and hit save. 3. Copy the shortocde generated at the bottom of the widget form and use it on posts or pages.", 'jrinstaslider' )
77
- )
78
- );
79
- }
80
-
81
- /**
82
- * Enqueue public-facing Scripts and style sheet.
83
- */
84
- public function public_enqueue() {
85
-
86
- wp_enqueue_style( 'instag-slider', plugins_url( 'assets/css/instag-slider.css', __FILE__ ), array(), self::VERSION );
87
-
88
- wp_enqueue_script( 'jquery-pllexi-slider', plugins_url( 'assets/js/jquery.flexslider-min.js', __FILE__ ), array( 'jquery' ), '2.2', false );
89
- }
90
-
91
- /**
92
- * Enqueue admin side scripts and styles
93
- *
94
- * @param string $hook
95
- */
96
- public function admin_enqueue( $hook ) {
97
-
98
- if ( 'widgets.php' != $hook ) {
99
- return;
100
- }
101
-
102
- wp_enqueue_style( 'jr-insta-admin-styles', plugins_url( 'assets/css/jr-insta-admin.css', __FILE__ ), array(), self::VERSION );
103
- wp_enqueue_script( 'jr-insta-admin-script', plugins_url( 'assets/js/jr-insta-admin.js', __FILE__ ), array( 'jquery' ), self::VERSION, true );
104
- }
105
-
106
- /**
107
- * The Public view of the Widget
108
- *
109
- * @return mixed
110
- */
111
- public function widget( $args, $instance ) {
112
-
113
- extract( $args );
114
-
115
- //Our variables from the widget settings.
116
- $title = apply_filters( 'widget_title', $instance['title'] );
117
-
118
- echo $before_widget;
119
-
120
- // Display the widget title
121
- if ( $title ) {
122
- echo $before_title . $title . $after_title;
123
- }
124
-
125
- do_action( 'jr_instagram', $instance );
126
-
127
- echo $after_widget;
128
- }
129
-
130
- /**
131
- * Update the widget settings
132
- *
133
- * @param array $new_instance New instance values
134
- * @param array $old_instance Old instance values
135
- *
136
- * @return array
137
- */
138
- public function update( $new_instance, $instance ) {
139
-
140
- $instance['title'] = strip_tags( $new_instance['title'] );
141
- $instance['search_for'] = $new_instance['search_for'];
142
- $instance['username'] = $new_instance['username'];
143
- $instance['hashtag'] = $new_instance['hashtag'];
144
- $instance['blocked_users'] = $new_instance['blocked_users'];
145
- $instance['attachment'] = $new_instance['attachment'];
146
- $instance['template'] = $new_instance['template'];
147
- $instance['images_link'] = $new_instance['images_link'];
148
- $instance['custom_url'] = $new_instance['custom_url'];
149
- $instance['orderby'] = $new_instance['orderby'];
150
- $instance['images_number'] = $new_instance['images_number'];
151
- $instance['columns'] = $new_instance['columns'];
152
- $instance['refresh_hour'] = $new_instance['refresh_hour'];
153
- $instance['image_size'] = $new_instance['image_size'];
154
- $instance['image_link_rel'] = $new_instance['image_link_rel'];
155
- $instance['image_link_class'] = $new_instance['image_link_class'];
156
- $instance['no_pin'] = $new_instance['no_pin'];
157
- $instance['controls'] = $new_instance['controls'];
158
- $instance['animation'] = $new_instance['animation'];
159
- $instance['caption_words'] = $new_instance['caption_words'];
160
- $instance['slidespeed'] = $new_instance['slidespeed'];
161
- $instance['description'] = $new_instance['description'];
162
- $instance['support_author'] = $new_instance['support_author'];
163
-
164
- return $instance;
165
- }
166
-
167
-
168
- /**
169
- * Widget Settings Form
170
- *
171
- * @return mixed
172
- */
173
- public function form( $instance ) {
174
-
175
- $defaults = array(
176
- 'title' => __('Instagram Slider', 'jrinstaslider'),
177
- 'search_for' => 'username',
178
- 'username' => '',
179
- 'hashtag' => '',
180
- 'blocked_users' => '',
181
- 'attachment' => 0,
182
- 'template' => 'slider',
183
- 'images_link' => 'image_url',
184
- 'custom_url' => '',
185
- 'orderby' => 'rand',
186
- 'images_number' => 5,
187
- 'columns' => 4,
188
- 'refresh_hour' => 5,
189
- 'image_size' => 'standard',
190
- 'image_link_rel' => '',
191
- 'image_link_class' => '',
192
- 'no_pin' => 0,
193
- 'controls' => 'prev_next',
194
- 'animation' => 'slide',
195
- 'caption_words' => 100,
196
- 'slidespeed' => 7000,
197
- 'description' => array( 'username', 'time','caption' ),
198
- 'support_author' => 0
199
- );
200
-
201
- $instance = wp_parse_args( (array) $instance, $defaults );
202
-
203
- ?>
204
- <div class="jr-container">
205
- <p>
206
- <label for="<?php echo $this->get_field_id( 'title' ); ?>"><strong><?php _e('Title:', 'jrinstaslider'); ?></strong></label>
207
- <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" />
208
- </p>
209
- <p>
210
- <strong><?php _e( 'Search Instagram for:', 'jrinstaslider' ); ?></strong>
211
- <span class="jr-search-for-container"><label class="jr-seach-for"><input type="radio" id="<?php echo $this->get_field_id( 'search_for' ); ?>" name="<?php echo $this->get_field_name( 'search_for' ); ?>" value="username" <?php checked( 'username', $instance['search_for'] ); ?> /> <?php _e( 'Username:', 'jrinstaslider' ); ?></label> <input id="<?php echo $this->get_field_id( 'username' ); ?>" class="inline-field-text" name="<?php echo $this->get_field_name( 'username' ); ?>" value="<?php echo $instance['username']; ?>" /></span>
212
- <span class="jr-search-for-container"><label class="jr-seach-for"><input type="radio" id="<?php echo $this->get_field_id( 'search_for' ); ?>" name="<?php echo $this->get_field_name( 'search_for' ); ?>" value="hashtag" <?php checked( 'hashtag', $instance['search_for'] ); ?> /> <?php _e( 'Hashtag:', 'jrinstaslider' ); ?></label> <input id="<?php echo $this->get_field_id( 'hashtag' ); ?>" class="inline-field-text" name="<?php echo $this->get_field_name( 'hashtag' ); ?>" value="<?php echo $instance['hashtag']; ?>" /> <small><?php _e('without # sign', 'jrinstaslider'); ?></small></span>
213
- </p>
214
- <p class="<?php if ( 'hashtag' != $instance['search_for'] ) echo 'hidden'; ?>">
215
- <label for="<?php echo $this->get_field_id( 'blocked_users' ); ?>"><?php _e( 'Block Users', 'jrinstaslider' ); ?>:</label>
216
- <input class="widefat" id="<?php echo $this->get_field_id( 'blocked_users' ); ?>" name="<?php echo $this->get_field_name( 'blocked_users' ); ?>" value="<?php echo $instance['blocked_users']; ?>" />
217
- <span class="jr-description"><?php _e( 'Enter usernames separated by commas whose images you don\'t want to show', 'jrinstaslider' ); ?></span>
218
- </p>
219
- <p class="<?php if ( 'username' != $instance['search_for'] ) echo 'hidden'; ?>"><strong><?php _e( 'Save in Media Library: ', 'jrinstaslider' ); ?></strong>
220
- <label class="switch" for="<?php echo $this->get_field_id( 'attachment' ); ?>">
221
- <input class="widefat" id="<?php echo $this->get_field_id( 'attachment' ); ?>" name="<?php echo $this->get_field_name( 'attachment' ); ?>" type="checkbox" value="1" <?php checked( '1', $instance['attachment'] ); ?> /><span class="slider round"></span></label>
222
- <br><span class="jr-description"><?php _e( ' Turn on to save Instagram Images into WordPress media library.', 'jrinstaslider') ?></span>
223
- <?php
224
- if ( isset ( $instance['username'] ) && !empty($instance['username'] ) ) {
225
- echo '<br><button class="button action jr-delete-instagram-dupes" type="button" data-username="'.$instance['username'].'"><strong>Remove</strong> duplicate images for <strong>'.$instance['username'].'</strong></button><span class="jr-spinner"></span>';
226
- echo '<br><br><strong><span class="deleted-dupes-info"></span></strong>';
227
- wp_nonce_field( 'jr_delete_instagram_dupes', 'delete_insta_dupes_nonce' );
228
- }
229
- ?>
230
- </p>
231
- <p>
232
- <label for="<?php echo $this->get_field_id( 'images_number' ); ?>"><strong><?php _e( 'Number of images to show:', 'jrinstaslider' ); ?></strong>
233
- <input class="small-text" id="<?php echo $this->get_field_id( 'images_number' ); ?>" name="<?php echo $this->get_field_name( 'images_number' ); ?>" value="<?php echo $instance['images_number']; ?>" />
234
- </label>
235
- </p>
236
- <p>
237
- <label for="<?php echo $this->get_field_id( 'refresh_hour' ); ?>"><strong><?php _e( 'Check for new images every:', 'jrinstaslider' ); ?></strong>
238
- <input class="small-text" id="<?php echo $this->get_field_id( 'refresh_hour' ); ?>" name="<?php echo $this->get_field_name( 'refresh_hour' ); ?>" value="<?php echo $instance['refresh_hour']; ?>" />
239
- <span><?php _e('hours', 'jrinstaslider'); ?></span>
240
- </label>
241
- </p>
242
- <p>
243
- <label for="<?php echo $this->get_field_id( 'template' ); ?>"><strong><?php _e( 'Template', 'jrinstaslider' ); ?></strong>
244
- <select class="widefat" name="<?php echo $this->get_field_name( 'template' ); ?>" id="<?php echo $this->get_field_id( 'template' ); ?>">
245
- <option value="slider" <?php echo ($instance['template'] == 'slider') ? ' selected="selected"' : ''; ?>><?php _e( 'Slider - Normal', 'jrinstaslider' ); ?></option>
246
- <option value="slider-overlay" <?php echo ($instance['template'] == 'slider-overlay') ? ' selected="selected"' : ''; ?>><?php _e( 'Slider - Overlay Text', 'jrinstaslider' ); ?></option>
247
- <option value="thumbs" <?php echo ($instance['template'] == 'thumbs') ? ' selected="selected"' : ''; ?>><?php _e( 'Thumbnails', 'jrinstaslider' ); ?></option>
248
- <option value="thumbs-no-border" <?php echo ($instance['template'] == 'thumbs-no-border') ? ' selected="selected"' : ''; ?>><?php _e( 'Thumbnails - Without Border', 'jrinstaslider' ); ?></option>
249
- </select>
250
- </label>
251
- </p>
252
- <p class="<?php if ( 'thumbs' != $instance['template'] && 'thumbs-no-border' != $instance['template'] ) echo 'hidden'; ?>">
253
- <label for="<?php echo $this->get_field_id( 'columns' ); ?>"><strong><?php _e( 'Number of Columns:', 'jrinstaslider' ); ?></strong>
254
- <input class="small-text" id="<?php echo $this->get_field_id( 'columns' ); ?>" name="<?php echo $this->get_field_name( 'columns' ); ?>" value="<?php echo $instance['columns']; ?>" />
255
- <span class='jr-description'><?php _e('max is 10 ( only for thumbnails template )', 'jrinstaslider'); ?></span>
256
- </label>
257
- </p>
258
- <p>
259
- <label for="<?php echo $this->get_field_id( 'image_size' ); ?>"><strong><?php _e( 'Image format', 'jrinstaslider' ); ?></strong></label>
260
- <select class="widefat" id="<?php echo $this->get_field_id( 'image_size' ); ?>" name="<?php echo $this->get_field_name( 'image_size' ); ?>">
261
- <option value="thumbnail" <?php echo ($instance['image_size'] == 'thumbnail') ? ' selected="selected"' : ''; ?>><?php _e( 'Thumbnail - 150x150', 'jrinstaslider' ); ?></option>
262
- <option value="low" <?php echo ($instance['image_size'] == 'low') ? ' selected="selected"' : ''; ?>><?php _e( 'Low - 320x320', 'jrinstaslider' ); ?></option>
263
- <option value="standard" <?php echo ($instance['image_size'] == 'standard') ? ' selected="selected"' : ''; ?>><?php _e( 'Standard - 640x640', 'jrinstaslider' ); ?></option>
264
- <option value="full" <?php echo ($instance['image_size'] == 'full') ? ' selected="selected"' : ''; ?>><?php _e( 'Full Size', 'jrinstaslider' ); ?></option>
265
- </select>
266
- <span class="jr-description"><?php _e( '<strong>Square - Cropped</strong> - option will show square cropped images in 640x640 pixels. <br/><strong>Original - No Crop</strong> - will display the original user uploaded image size.', 'jrinstaslider' ); ?></span>
267
- </p>
268
- <p>
269
- <label for="<?php echo $this->get_field_id( 'orderby' ); ?>"><strong><?php _e( 'Order by', 'jrinstaslider' ); ?></strong>
270
- <select class="widefat" name="<?php echo $this->get_field_name( 'orderby' ); ?>" id="<?php echo $this->get_field_id( 'orderby' ); ?>">
271
- <option value="date-ASC" <?php selected( $instance['orderby'], 'date-ASC', true); ?>><?php _e( 'Date - Ascending', 'jrinstaslider' ); ?></option>
272
- <option value="date-DESC" <?php selected( $instance['orderby'], 'date-DESC', true); ?>><?php _e( 'Date - Descending', 'jrinstaslider' ); ?></option>
273
- <option value="popular-ASC" <?php selected( $instance['orderby'], 'popular-ASC', true); ?>><?php _e( 'Popularity - Ascending', 'jrinstaslider' ); ?></option>
274
- <option value="popular-DESC" <?php selected( $instance['orderby'], 'popular-DESC', true); ?>><?php _e( 'Popularity - Descending', 'jrinstaslider' ); ?></option>
275
- <option value="rand" <?php selected( $instance['orderby'], 'rand', true); ?>><?php _e( 'Random', 'jrinstaslider' ); ?></option>
276
- </select>
277
- </label>
278
- </p>
279
- <p>
280
- <label for="<?php echo $this->get_field_id( 'images_link' ); ?>"><strong><?php _e( 'Link to', 'jrinstaslider' ); ?></strong>
281
- <select class="widefat" name="<?php echo $this->get_field_name( 'images_link' ); ?>" id="<?php echo $this->get_field_id( 'images_link' ); ?>">
282
- <option value="image_link" <?php selected( $instance['images_link'], 'image_link', true); ?>><?php _e( 'Instagram Image', 'jrinstaslider' ); ?></option>
283
- <option class="<?php if ( 'hashtag' == $instance['search_for'] ) echo 'hidden'; ?>" value="user_url" <?php selected( $instance['images_link'], 'user_url', true); ?>><?php _e( 'Instagram Profile', 'jrinstaslider' ); ?></option>
284
- <option value="image_url" <?php selected( $instance['images_link'], 'image_url', true); ?>><?php _e( 'Image URL', 'jrinstaslider' ); ?></option>
285
- <option class="<?php if ( ( !$instance['attachment'] ) || 'hashtag' == $instance['search_for'] ) echo 'hidden'; ?>" value="attachment" <?php selected( $instance['images_link'], 'attachment', true); ?>><?php _e( 'Attachment Page', 'jrinstaslider' ); ?></option>
286
- <option value="custom_url" <?php selected( $instance['images_link'], 'custom_url', true ); ?>><?php _e( 'Custom Link', 'jrinstaslider' ); ?></option>
287
- <option value="none" <?php selected( $instance['images_link'], 'none', true); ?>><?php _e( 'None', 'jrinstaslider' ); ?></option>
288
- </select>
289
- </label>
290
- </p>
291
- <p class="<?php if ( 'custom_url' != $instance['images_link'] ) echo 'hidden'; ?>">
292
- <label for="<?php echo $this->get_field_id( 'custom_url' ); ?>"><?php _e( 'Custom link:', 'jrinstaslider'); ?></label>
293
- <input class="widefat" id="<?php echo $this->get_field_id( 'custom_url' ); ?>" name="<?php echo $this->get_field_name( 'custom_url' ); ?>" value="<?php echo $instance['custom_url']; ?>" />
294
- <span><?php _e('* use this field only if the above option is set to <strong>Custom Link</strong>', 'jrinstaslider'); ?></span>
295
- </p>
296
- <p>
297
- <strong>Advanced Options</strong>
298
- <?php
299
- $advanced_class = '';
300
- $advanced_text = '[ - Close ]';
301
- if ( '' == trim( $instance['image_link_rel'] ) && '' == trim( $instance['image_link_class'] ) && '' == trim( $instance['image_size'] ) ) {
302
- $advanced_class = 'hidden';
303
- $advanced_text = '[ + Open ]';
304
- }
305
- ?>
306
- <a href="#" class="jr-advanced"><?php echo $advanced_text; ?></a>
307
- </p>
308
- <div class="jr-advanced-input <?php echo $advanced_class; ?>">
309
- <div class="jr-image-options">
310
- <h4 class="jr-advanced-title"><?php _e( 'Advanced Image Options', 'jrinstaslider'); ?></h4>
311
- <p>
312
- <label for="<?php echo $this->get_field_id( 'image_link_rel' ); ?>"><?php _e( 'Image Link rel attribute', 'jrinstaslider' ); ?>:</label>
313
- <input class="widefat" id="<?php echo $this->get_field_id( 'image_link_rel' ); ?>" name="<?php echo $this->get_field_name( 'image_link_rel' ); ?>" value="<?php echo $instance['image_link_rel']; ?>" />
314
- <span class="jr-description"><?php _e( 'Specifies the relationship between the current page and the linked website', 'jrinstaslider' ); ?></span>
315
- </p>
316
- <p>
317
- <label for="<?php echo $this->get_field_id( 'image_link_class' ); ?>"><?php _e( 'Image Link class', 'jrinstaslider' ); ?>:</label>
318
- <input class="widefat" id="<?php echo $this->get_field_id( 'image_link_class' ); ?>" name="<?php echo $this->get_field_name( 'image_link_class' ); ?>" value="<?php echo $instance['image_link_class']; ?>" />
319
- <span class="jr-description"><?php _e( 'Usefull if you are using jQuery lightbox plugins to open links', 'jrinstaslider' ); ?></span>
320
- </p>
321
- <p><strong><?php _e( 'Disable Pinning:', 'jrinstaslider' ); ?></strong>
322
- <label class="switch" for="<?php echo $this->get_field_id( 'no_pin' ); ?>">
323
- <input class="widefat" id="<?php echo $this->get_field_id( 'no_pin' ); ?>" name="<?php echo $this->get_field_name( 'no_pin' ); ?>" type="checkbox" value="1" <?php checked( '1', $instance['no_pin'] ); ?> /><span class="slider round"></span></label>
324
- <br><span class="jr-description"><?php _e( 'Disable pinning for Pinterest on all images from this widget!', 'jrinstaslider') ?></span>
325
- </p>
326
- </div>
327
- <div class="jr-slider-options <?php if ( 'thumbs' == $instance['template'] || 'thumbs-no-border' == $instance['template'] ) echo 'hidden'; ?>">
328
- <h4 class="jr-advanced-title"><?php _e( 'Advanced Slider Options', 'jrinstaslider'); ?></h4>
329
- <p>
330
- <?php _e( 'Slider Navigation Controls:', 'jrinstaslider' ); ?><br>
331
- <label class="jr-radio"><input type="radio" id="<?php echo $this->get_field_id( 'controls' ); ?>" name="<?php echo $this->get_field_name( 'controls' ); ?>" value="prev_next" <?php checked( 'prev_next', $instance['controls'] ); ?> /> <?php _e( 'Prev & Next', 'jrinstaslider' ); ?></label>
332
- <label class="jr-radio"><input type="radio" id="<?php echo $this->get_field_id( 'controls' ); ?>" name="<?php echo $this->get_field_name( 'controls' ); ?>" value="numberless" <?php checked( 'numberless', $instance['controls'] ); ?> /> <?php _e( 'Dotted', 'jrinstaslider' ); ?></label>
333
- <label class="jr-radio"><input type="radio" id="<?php echo $this->get_field_id( 'controls' ); ?>" name="<?php echo $this->get_field_name( 'controls' ); ?>" value="none" <?php checked( 'none', $instance['controls'] ); ?> /> <?php _e( 'No Navigation', 'jrinstaslider' ); ?></label>
334
- </p>
335
- <p>
336
- <?php _e( 'Slider Animation:', 'jrinstaslider' ); ?><br>
337
- <label class="jr-radio"><input type="radio" id="<?php echo $this->get_field_id( 'animation' ); ?>" name="<?php echo $this->get_field_name( 'animation' ); ?>" value="slide" <?php checked( 'slide', $instance['animation'] ); ?> /> <?php _e( 'Slide', 'jrinstaslider' ); ?></label>
338
- <label class="jr-radio"><input type="radio" id="<?php echo $this->get_field_id( 'animation' ); ?>" name="<?php echo $this->get_field_name( 'animation' ); ?>" value="fade" <?php checked( 'fade', $instance['animation'] ); ?> /> <?php _e( 'Fade', 'jrinstaslider' ); ?></label>
339
- </p>
340
- <p>
341
- <label for="<?php echo $this->get_field_id( 'caption_words' ); ?>"><?php _e( 'Number of words in caption:', 'jrinstaslider' ); ?>
342
- <input class="small-text" id="<?php echo $this->get_field_id( 'caption_words' ); ?>" name="<?php echo $this->get_field_name( 'caption_words' ); ?>" value="<?php echo $instance['caption_words']; ?>" />
343
- </label>
344
- </p>
345
- <p>
346
- <label for="<?php echo $this->get_field_id( 'slidespeed' ); ?>"><?php _e( 'Slide Speed:', 'jrinstaslider' ); ?>
347
- <input class="small-text" id="<?php echo $this->get_field_id( 'slidespeed' ); ?>" name="<?php echo $this->get_field_name( 'slidespeed' ); ?>" value="<?php echo $instance['slidespeed']; ?>" />
348
- <span><?php _e('milliseconds', 'jrinstaslider'); ?></span>
349
- <span class='jr-description'><?php _e('1000 milliseconds = 1 second', 'jrinstaslider'); ?></span>
350
- </label>
351
- </p>
352
- <p>
353
- <label for="<?php echo $this->get_field_id('description'); ?>"><?php _e( 'Slider Text Description:', 'jrinstaslider' ); ?></label>
354
- <select size=3 class='widefat' id="<?php echo $this->get_field_id('description'); ?>" name="<?php echo $this->get_field_name('description'); ?>[]" multiple="multiple">
355
- <option class="<?php if ( 'hashtag' == $instance['search_for'] ) echo 'hidden'; ?>" value='username' <?php $this->selected( $instance['description'], 'username' ); ?>><?php _e( 'Username', 'jrinstaslider'); ?></option>
356
- <option value='time'<?php $this->selected( $instance['description'], 'time' ); ?>><?php _e( 'Time', 'jrinstaslider'); ?></option>
357
- <option value='caption'<?php $this->selected( $instance['description'], 'caption' ); ?>><?php _e( 'Caption', 'jrinstaslider'); ?></option>
358
- </select>
359
- <span class="jr-description"><?php _e( 'Hold ctrl and click the fields you want to show/hide on your slider. Leave all unselected to hide them all. Default all selected.', 'jrinstaslider') ?></span>
360
- </p>
361
- </div>
362
- </div>
363
- <?php $widget_id = preg_replace( '/[^0-9]/', '', $this->id ); if ( $widget_id != '' ) : ?>
364
- <p>
365
- <label for="jr_insta_shortcode"><?php _e('Shortcode of this Widget:', 'jrinstaslider'); ?></label>
366
- <input id="jr_insta_shortcode" onclick="this.setSelectionRange(0, this.value.length)" type="text" class="widefat" value="[jr_instagram id=&quot;<?php echo $widget_id ?>&quot;]" readonly="readonly" style="border:none; color:black; font-family:monospace;">
367
- <span class="jr-description"><?php _e( 'Use this shortcode in any page or post to display images with this widget configuration!', 'jrinstaslider') ?></span>
368
- </p>
369
- <?php endif; ?>
370
- <div class="jr-advanced-input">
371
- <div class="jr-image-options">
372
- <h4 class="jr-advanced-title"><?php _e( 'Help us, help you!', 'jrinstaslider'); ?></h4>
373
- <p><strong><?php _e( 'Show "Powered by Link"', 'jrinstaslider' ); ?></strong>
374
- <label class="switch" for="<?php echo $this->get_field_id( 'support_author' ); ?>">
375
- <input class="widefat" id="<?php echo $this->get_field_id( 'support_author' ); ?>" name="<?php echo $this->get_field_name( 'support_author' ); ?>" type="checkbox" value="1" <?php checked( '1', $instance['support_author'] ); ?> /><span class="slider round"></span></label>
376
- <br><span class="jr-description"><?php _e( 'When enabled, the author is notified and a backlink website is visible at the bottom of the plugin. <br> <strong>If you enable this option you will have privileged support from our team!</strong>', 'jrinstaslider') ?></span>
377
- </p>
378
- <div class="donate-buttons">
379
- <a target="_blank" title="Donate with Paypal!" href="http://bit.ly/2EseW2p"><p class="donate"><span></span>Donate with Paypal!</p></a>
380
- </div>
381
- </div></div>
382
- </div><br>
383
- <?php
384
- }
385
-
386
- /**
387
- * Selected array function echoes selected if in array
388
- *
389
- * @param array $haystack The array to search in
390
- * @param string $current The string value to search in array;
391
- *
392
- * @return string
393
- */
394
- public function selected( $haystack, $current ) {
395
-
396
- if( is_array( $haystack ) && in_array( $current, $haystack ) ) {
397
- selected( 1, 1, true );
398
- }
399
- }
400
-
401
-
402
- /**
403
- * Add shorcode function
404
- * @param array $atts shortcode attributes
405
- * @return mixed
406
- */
407
- public function shortcode( $atts ) {
408
-
409
- $atts = shortcode_atts( array( 'id' => '' ), $atts, 'jr_instagram' );
410
- $args = get_option( 'widget_jr_insta_slider' );
411
- if ( isset($args[$atts['id']] ) ) {
412
- $args[$atts['id']]['widget_id'] = $atts['id'];
413
- return $this->display_images( $args[$atts['id']] );
414
- }
415
- }
416
-
417
- /**
418
- * Echoes the Display Instagram Images method
419
- *
420
- * @param array $args
421
- *
422
- * @return void
423
- */
424
- public function instagram_images( $args ) {
425
- echo $this->display_images( $args );
426
- }
427
-
428
- /**
429
- * Cron Trigger Function
430
- * @param [type] $username [description]
431
- * @param [type] $refresh_hour [description]
432
- * @param [type] $images [description]
433
- * @return [type] [description]
434
- */
435
- public function jr_cron_trigger( $username, $refresh_hour, $images ) {
436
- $search_for = array();
437
- $search_for['username'] = $username;
438
- $this->instagram_data( $search_for, $refresh_hour, $images, true );
439
- }
440
-
441
- /**
442
- * Runs the query for images and returns the html
443
- *
444
- * @param array $args
445
- *
446
- * @return string
447
- */
448
- private function display_images( $args ) {
449
-
450
- $username = isset( $args['username'] ) && !empty( $args['username'] ) ? $args['username'] : false;
451
- $hashtag = isset( $args['hashtag'] ) && !empty( $args['hashtag'] ) ? str_replace( '#', '', $args['hashtag'] ) : false;
452
- $blocked_users = isset( $args['blocked_users'] ) && !empty( $args['blocked_users'] ) ? $args['blocked_users'] : false;
453
- $attachment = isset( $args['attachment'] ) ? true : false;
454
- $template = isset( $args['template'] ) ? $args['template'] : 'slider';
455
- $orderby = isset( $args['orderby'] ) ? $args['orderby'] : 'rand';
456
- $images_link = isset( $args['images_link'] ) ? $args['images_link'] : 'image_url';
457
- $custom_url = isset( $args['custom_url'] ) ? $args['custom_url'] : '';
458
- $images_number = isset( $args['images_number'] ) ? absint( $args['images_number'] ) : 5;
459
- $columns = isset( $args['columns'] ) ? absint( $args['columns'] ) : 4;
460
- $refresh_hour = isset( $args['refresh_hour'] ) ? absint( $args['refresh_hour'] ) : 5;
461
- $image_size = isset( $args['image_size'] ) ? $args['image_size'] : 'standard';
462
- $image_link_rel = isset( $args['image_link_rel'] ) ? $args['image_link_rel'] : '';
463
- $no_pin = isset( $args['no_pin'] ) ? $args['no_pin'] : 0;
464
- $image_link_class = isset( $args['image_link_class'] ) ? $args['image_link_class'] : '';
465
- $controls = isset( $args['controls'] ) ? $args['controls'] : 'prev_next';
466
- $animation = isset( $args['animation'] ) ? $args['animation'] : 'slide';
467
- $caption_words = isset( $args['caption_words'] ) ? $args['caption_words'] : 100;
468
- $slidespeed = isset( $args['slidespeed'] ) ? $args['slidespeed'] : 7000;
469
- $description = isset( $args['description'] ) ? $args['description'] : array();
470
- $widget_id = isset( $args['widget_id'] ) ? $args['widget_id'] : preg_replace( '/[^0-9]/', '', $this->id );
471
- $powered_by_link = isset( $args['support_author'] ) ? true : false;
472
-
473
- if ( !empty( $description ) && !is_array( $description ) ) {
474
- $description = explode( ',', $description );
475
- }
476
-
477
- if ( isset ( $args['search_for'] ) && $args['search_for'] == 'hashtag' ) {
478
- $search = 'hashtag';
479
- $search_for['hashtag'] = $hashtag;
480
- $search_for['blocked_users'] = $blocked_users;
481
- } else {
482
- $search = 'user';
483
- $search_for['username'] = $username;
484
- }
485
-
486
- if ( $refresh_hour == 0 ) {
487
- $refresh_hour = 5;
488
- }
489
-
490
- $template_args = array(
491
- 'search_for' => $search,
492
- 'attachment' => $attachment,
493
- 'image_size' => $image_size,
494
- 'link_rel' => $image_link_rel,
495
- 'link_class' => $image_link_class,
496
- 'no_pin' => $no_pin,
497
- 'caption_words' => $caption_words
498
- );
499
-
500
- $images_div_class = 'jr-insta-thumb';
501
- $ul_class = ( $template == 'thumbs-no-border' ) ? 'thumbnails no-border jr_col_' . $columns : 'thumbnails jr_col_' . $columns;
502
- $slider_script = '';
503
-
504
- if ( $template != 'thumbs' && $template != 'thumbs-no-border' ) {
505
-
506
- $template_args['description'] = $description;
507
- $direction_nav = ( $controls == 'prev_next' ) ? 'true' : 'false';
508
- $control_nav = ( $controls == 'numberless' ) ? 'true': 'false';
509
- $ul_class = 'slides';
510
-
511
- if ( $template == 'slider' ) {
512
- $images_div_class = 'pllexislider pllexislider-normal instaslider-nr-'. $widget_id;
513
- $slider_script =
514
- "<script type='text/javascript'>" . "\n" .
515
- " jQuery(document).ready(function($) {" . "\n" .
516
- " $('.instaslider-nr-{$widget_id}').pllexislider({" . "\n" .
517
- " animation: '{$animation}'," . "\n" .
518
- " slideshowSpeed: {$slidespeed}," . "\n" .
519
- " directionNav: {$direction_nav}," . "\n" .
520
- " controlNav: {$control_nav}," . "\n" .
521
- " prevText: ''," . "\n" .
522
- " nextText: ''," . "\n" .
523
- " });" . "\n" .
524
- " });" . "\n" .
525
- "</script>" . "\n";
526
- } else {
527
- $images_div_class = 'pllexislider pllexislider-overlay instaslider-nr-'. $widget_id;
528
- $slider_script =
529
- "<script type='text/javascript'>" . "\n" .
530
- " jQuery(document).ready(function($) {" . "\n" .
531
- " $('.instaslider-nr-{$widget_id}').pllexislider({" . "\n" .
532
- " animation: '{$animation}'," . "\n" .
533
- " slideshowSpeed: {$slidespeed}," . "\n" .
534
- " directionNav: {$direction_nav}," . "\n" .
535
- " controlNav: {$control_nav}," . "\n" .
536
- " prevText: ''," . "\n" .
537
- " nextText: ''," . "\n" .
538
- " start: function(slider){" . "\n" .
539
- " slider.hover(" . "\n" .
540
- " function () {" . "\n" .
541
- " slider.find('.jr-insta-datacontainer, .pllex-control-nav, .pllex-direction-nav').stop(true,true).fadeIn();" . "\n" .
542
- " }," . "\n" .
543
- " function () {" . "\n" .
544
- " slider.find('.jr-insta-datacontainer, .pllex-control-nav, .pllex-direction-nav').stop(true,true).fadeOut();" . "\n" .
545
- " }" . "\n" .
546
- " );" . "\n" .
547
- " }" . "\n" .
548
- " });" . "\n" .
549
- " });" . "\n" .
550
- "</script>" . "\n";
551
- }
552
- }
553
-
554
- $images_div = "<div class='{$images_div_class}'>\n";
555
- $images_ul = "<ul class='no-bullet {$ul_class}'>\n";
556
-
557
- $output = __( 'No images found! <br> Try some other hashtag or username', 'jrinstaslider' );
558
-
559
- if ( ( $search == 'user' && $attachment ) ) {
560
-
561
- if ( !wp_next_scheduled( 'jr_insta_cron', array( $search_for['username'], $refresh_hour, $images_number ) ) ) {
562
- wp_schedule_single_event( time(), 'jr_insta_cron', array( $search_for['username'], $refresh_hour, $images_number ) );
563
- }
564
-
565
- $opt_name = 'jr_insta_' . md5( $search . '_' . $search_for['username'] );
566
- $attachment_ids = (array) get_option( $opt_name );
567
-
568
- $query_args = array(
569
- 'post_type' => 'attachment',
570
- 'post_status' => 'inherit',
571
- 'post_mime_type' => 'image',
572
- 'posts_per_page' => $images_number,
573
- 'no_found_rows' => true
574
- );
575
-
576
- if ( $orderby != 'rand' ) {
577
-
578
- $orderby = explode( '-', $orderby );
579
- $meta_key = $orderby[0] == 'date' ? 'jr_insta_timestamp' : 'jr_insta_popularity';
580
-
581
- $query_args['meta_key'] = $meta_key;
582
- $query_args['orderby'] = 'meta_value_num';
583
- $query_args['order'] = $orderby[1];
584
- }
585
-
586
- if ( isset( $attachment_ids['saved_images'] ) && !empty( $attachment_ids['saved_images'] ) ) {
587
-
588
- $query_args['post__in'] = $attachment_ids['saved_images'];
589
-
590
- } else {
591
-
592
- $query_args['meta_query'] = array(
593
- array(
594
- 'key' => 'jr_insta_username',
595
- 'value' => $username,
596
- 'compare' => '='
597
- )
598
- );
599
- }
600
-
601
- $instagram_images = new WP_Query( $query_args );
602
-
603
- if ( $instagram_images->have_posts() ) {
604
-
605
- $output = $slider_script . $images_div . $images_ul;
606
-
607
- while ( $instagram_images->have_posts() ) : $instagram_images->the_post();
608
-
609
- $id = get_the_id();
610
-
611
- if ( 'image_link' == $images_link ) {
612
- $template_args['link_to'] = get_post_meta( $id, 'jr_insta_link', true );
613
- } elseif ( 'user_url' == $images_link ) {
614
- $template_args['link_to'] = 'https://www.instagram.com/' . $username . '/';
615
- } elseif ( 'image_url' == $images_link ) {
616
- $template_args['link_to'] = wp_get_attachment_url( $id );
617
- } elseif ( 'attachment' == $images_link ) {
618
- $template_args['link_to'] = get_permalink( $id );
619
- } elseif ( 'custom_url' == $images_link ) {
620
- $template_args['link_to'] = $custom_url;
621
- }
622
-
623
- $image_thumb_url = get_post_meta( $id, 'jr_insta_sizes', true );
624
- $template_args['image'] = $image_thumb_url[$image_size];
625
-
626
- $output .= $this->get_template( $template, $template_args );
627
-
628
- endwhile;
629
-
630
- $output .= "</ul>\n</div>" . $this->powered_by_link( $powered_by_link );
631
-
632
- } else {
633
-
634
- $images_data = $this->instagram_data( $search_for, $refresh_hour, $images_number, false );
635
-
636
- if ( is_array( $images_data ) && !empty( $images_data ) ) {
637
-
638
- if ( $orderby != 'rand' ) {
639
-
640
- $func = $orderby[0] == 'date' ? 'sort_timestamp_' . $orderby[1] : 'sort_popularity_' . $orderby[1];
641
-
642
- usort( $images_data, array( $this, $func ) );
643
-
644
- } else {
645
-
646
- shuffle( $images_data );
647
- }
648
-
649
- $output = $slider_script . $images_div . $images_ul;
650
-
651
- foreach ( $images_data as $image_data ) {
652
-
653
- if ( 'image_link' == $images_link ) {
654
- $template_args['link_to'] = $image_data['link'];
655
- } elseif ( 'user_url' == $images_link ) {
656
- $template_args['link_to'] = 'https://www.instagram.com/' . $username . '/';
657
- } elseif ( 'image_url' == $images_link ) {
658
- $template_args['link_to'] = $image_data['url'];
659
- } elseif ( 'custom_url' == $images_link ) {
660
- $template_args['link_to'] = $custom_url;
661
- }
662
-
663
- $template_args['image'] = $image_data['sizes'][$image_size];
664
- $template_args['caption'] = $image_data['caption'];
665
- $template_args['timestamp'] = $image_data['timestamp'];
666
- $template_args['username'] = isset( $image_data['username'] ) ? $image_data['username'] : '';
667
- $template_args['attachment'] = false;
668
-
669
- $output .= $this->get_template( $template, $template_args );
670
- }
671
-
672
- $output .= "</ul>\n</div>" . $this->powered_by_link( $powered_by_link );
673
- }
674
-
675
- }
676
-
677
- wp_reset_postdata();
678
-
679
- } else {
680
-
681
- $images_data = $this->instagram_data( $search_for, $refresh_hour, $images_number, false );
682
-
683
- if ( is_array( $images_data ) && !empty( $images_data ) ) {
684
-
685
- if ( $orderby != 'rand' ) {
686
-
687
- $orderby = explode( '-', $orderby );
688
- $func = $orderby[0] == 'date' ? 'sort_timestamp_' . $orderby[1] : 'sort_popularity_' . $orderby[1];
689
-
690
- usort( $images_data, array( $this, $func ) );
691
-
692
- } else {
693
-
694
- shuffle( $images_data );
695
- }
696
-
697
- $output = $slider_script . $images_div . $images_ul;
698
-
699
- foreach ( $images_data as $image_data ) {
700
-
701
- if ( 'image_link' == $images_link ) {
702
- $template_args['link_to'] = $image_data['link'];
703
- } elseif ( 'user_url' == $images_link ) {
704
- $template_args['link_to'] = 'https://www.instagram.com/' . $username . '/';
705
- } elseif ( 'image_url' == $images_link ) {
706
- $template_args['link_to'] = $image_data['url'];
707
- } elseif ( 'custom_url' == $images_link ) {
708
- $template_args['link_to'] = $custom_url;
709
- }
710
-
711
- $template_args['image'] = $image_data['sizes'][$image_size];
712
- $template_args['caption'] = $image_data['caption'];
713
- $template_args['timestamp'] = $image_data['timestamp'];
714
- $template_args['username'] = isset( $image_data['username'] ) ? $image_data['username'] : '';
715
-
716
- $output .= $this->get_template( $template, $template_args );
717
- }
718
-
719
- $output .= "</ul>\n</div>" . $this->powered_by_link( $powered_by_link );
720
- }
721
- }
722
-
723
- return $output;
724
-
725
- }
726
-
727
-
728
- /**
729
- * Function to display Templates styles
730
- *
731
- * @param string $template
732
- * @param array $args
733
- *
734
- * return mixed
735
- */
736
- private function get_template( $template, $args ) {
737
-
738
- $link_to = isset( $args['link_to'] ) ? $args['link_to'] : false;
739
- $image_url = isset( $args['image'] ) ? $args['image'] : false;
740
-
741
- if ( ( $args['search_for'] == 'user' && $args['attachment'] !== true ) || $args['search_for'] == 'hashtag' ) {
742
- $caption = $args['caption'];
743
- $time = $args['timestamp'];
744
- $username = $args['username'];
745
- } else {
746
- $attach_id = get_the_id();
747
- $caption = get_the_excerpt();
748
- $time = get_post_meta( $attach_id, 'jr_insta_timestamp', true );
749
- $username = get_post_meta( $attach_id, 'jr_insta_username', true );
750
- }
751
-
752
- $short_caption = wp_trim_words( $caption, 10, '' );
753
- $short_caption = preg_replace("/[^A-Za-z0-9?! ]/","", $short_caption);
754
- $caption = wp_trim_words( $caption, $args['caption_words'], '' );
755
- $nopin = ( 1 == $args['no_pin'] ) ? 'nopin="nopin"' : '';
756
-
757
- $image_src = '<img src="' . $image_url . '" alt="' . $short_caption . '" title="' . $short_caption . '" '. $nopin . '/>';
758
- $image_output = $image_src;
759
-
760
- if ( $link_to ) {
761
- $image_output = '<a href="' . $link_to . '" target="_blank"';
762
-
763
- if ( ! empty( $args['link_rel'] ) ) {
764
- $image_output .= ' rel="' . $args['link_rel'] . '"';
765
- }
766
-
767
- if ( ! empty( $args['link_class'] ) ) {
768
- $image_output .= ' class="' . $args['link_class'] . '"';
769
- }
770
- $image_output .= ' title="' . $short_caption . '">' . $image_src . '</a>';
771
- }
772
-
773
- $output = '';
774
-
775
- // Template : Normal Slider
776
- if ( $template == 'slider' ) {
777
-
778
- $output .= "<li>";
779
-
780
- $output .= $image_output;
781
-
782
- if ( is_array( $args['description'] ) && count( $args['description'] ) >= 1 ) {
783
-
784
- $output .= "<div class='jr-insta-datacontainer'>\n";
785
-
786
- if ( $time && in_array( 'time', $args['description'] ) ) {
787
- $time = human_time_diff( $time );
788
- $output .= "<span class='jr-insta-time'>{$time} ago</span>\n";
789
- }
790
- if ( in_array( 'username', $args['description'] ) && $username ) {
791
- $output .= "<span class='jr-insta-username'>by <a rel='nofollow' href='https://www.instagram.com/{$username}/' target='_blank'>{$username}</a></span>\n";
792
- }
793
-
794
- if ( $caption != '' && in_array( 'caption', $args['description'] ) ) {
795
- $caption = preg_replace( '/@([a-z0-9_]+)/i', '&nbsp;<a href="https://www.instagram.com/$1/" rel="nofollow" target="_blank">@$1</a>&nbsp;', $caption );
796
- $caption = preg_replace( '/\#([a-zA-Z0-9_-]+)/i', '&nbsp;<a href="https://www.instagram.com/explore/tags/$1/" rel="nofollow" target="_blank">$0</a>&nbsp;', $caption);
797
- $output .= "<span class='jr-insta-caption'>{$caption}</span>\n";
798
- }
799
-
800
- $output .= "</div>\n";
801
- }
802
-
803
- $output .= "</li>";
804
-
805
- // Template : Slider with text Overlay on mouse over
806
- } elseif ( $template == 'slider-overlay' ) {
807
-
808
- $output .= "<li>";
809
-
810
- $output .= $image_output;
811
-
812
- if ( is_array( $args['description'] ) && count( $args['description'] ) >= 1 ) {
813
-
814
- $output .= "<div class='jr-insta-wrap'>\n";
815
-
816
- $output .= "<div class='jr-insta-datacontainer'>\n";
817
-
818
- if ( $time && in_array( 'time', $args['description'] ) ) {
819
- $time = human_time_diff( $time );
820
- $output .= "<span class='jr-insta-time'>{$time} ago</span>\n";
821
- }
822
-
823
- if ( in_array( 'username', $args['description'] ) && $username ) {
824
- $output .= "<span class='jr-insta-username'>by <a rel='nofollow' target='_blank' href='https://www.instagram.com/{$username}/'>{$username}</a></span>\n";
825
- }
826
-
827
- if ( $caption != '' && in_array( 'caption', $args['description'] ) ) {
828
- $caption = preg_replace( '/@([a-z0-9_]+)/i', '&nbsp;<a href="https://www.instagram.com/$1/" rel="nofollow" target="_blank">@$1</a>&nbsp;', $caption );
829
- $caption = preg_replace( '/\#([a-zA-Z0-9_-]+)/i', '&nbsp;<a href="https://www.instagram.com/explore/tags/$1/" rel="nofollow" target="_blank">$0</a>&nbsp;', $caption);
830
- $output .= "<span class='jr-insta-caption'>{$caption}</span>\n";
831
- }
832
-
833
- $output .= "</div>\n";
834
-
835
- $output .= "</div>\n";
836
- }
837
-
838
- $output .= "</li>";
839
-
840
- // Template : Thumbnails no text
841
- } elseif ( $template == 'thumbs' || $template == 'thumbs-no-border' ) {
842
-
843
- $output .= "<li>";
844
- $output .= $image_output;
845
- $output .= "</li>";
846
-
847
- } else {
848
-
849
- $output .= 'This template does not exist!';
850
- }
851
-
852
- return $output;
853
- }
854
-
855
-
856
- /**
857
- * Trigger refresh for new data
858
- * @param bolean $instaData
859
- * @param array $old_args
860
- * @param array $new_args
861
- * @return bolean
862
- */
863
- private function trigger_refresh_data( $instaData, $old_args, $new_args ) {
864
-
865
- $trigger = 0;
866
-
867
- if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
868
- return false;
869
- }
870
 
871
- if ( false === $instaData ) {
872
- $trigger = 1;
873
- }
874
-
875
 
876
- if ( isset( $old_args['saved_images'] ) ) {
877
- unset($old_args['saved_images']);
878
- }
879
 
880
- if ( isset( $old_args['deleted_images'] ) ) {
881
- unset($old_args['deleted_images']);
882
- }
883
 
884
- if ( is_array( $old_args ) && is_array( $new_args ) && array_diff( $old_args, $new_args ) !== array_diff( $new_args, $old_args ) ) {
885
- $trigger = 1;
886
- }
887
-
888
- if ( $trigger == 1 ) {
889
- return true;
890
- }
891
-
892
- return false;
893
- }
894
-
895
-
896
- /**
897
- * Show powered by link at the end of the plugin
898
- * @param [type] $support_author [description]
899
- * @return [type] [description]
900
- */
901
- function powered_by_link( $support_author ) {
902
-
903
- if ( $support_author ) {
904
- $link = $this->domain_data();
905
-
906
- if ( isset( $link['text'] ) && !empty( $link['text'] ) && isset( $link['domain'] ) && !empty( $link['domain'] ) ) {
907
- $link = '<div style="clear:both;text-align:right;font-size:10px;" >Powered by <a href="'.$link['domain'].'" target="_blank">'.$link['text'].'</a></div>';
908
- } else if ( isset( $link['text'] ) && !empty( $link['text'] ) ) {
909
- $link = '<div style="clear:both;text-align:right;font-size:10px;" >Powered by '.$link['text'].'</div>';
910
- } else {
911
- $link = '';
912
- }
913
-
914
- return $link;
915
- }
916
- return false;
917
- }
918
-
919
-
920
- /**
921
- * Stores the fetched data from instagram in WordPress DB using transients
922
- *
923
- * @param string $username Instagram Username to fetch images from
924
- * @param string $cache_hours Cache hours for transient
925
- * @param string $nr_images Nr of images to fetch from instagram
926
- *
927
- * @return array of localy saved instagram data
928
- */
929
- private function instagram_data( $search_for, $cache_hours, $nr_images, $attachment ) {
930
-
931
- $nr_images = $nr_images <= 12 ? $nr_images : 12;
932
- $blocked_users = isset( $search_for['blocked_users'] ) && !empty( $search_for['blocked_users'] ) ? $search_for['blocked_users'] : false;
933
- if ( isset( $search_for['username'] ) && !empty( $search_for['username'] ) ) {
934
- $search = 'user';
935
- $search_string = $search_for['username'];
936
- } elseif ( isset( $search_for['hashtag'] ) && !empty( $search_for['hashtag'] ) ) {
937
- $search = 'hashtag';
938
- $search_string = $search_for['hashtag'];
939
- $blocked_users_array = $blocked_users ? $this->get_ids_from_usernames( $blocked_users ) : array();
940
- } else {
941
- return __( 'Nothing to search for', 'jrinstaslider');
942
- }
943
-
944
- $opt_name = 'jr_insta_' . md5( $search . '_' . $search_string );
945
- $instaData = get_transient( $opt_name );
946
- $old_opts = (array) get_option( $opt_name );
947
- $new_opts = array(
948
- 'search' => $search,
949
- 'search_string' => $search_string,
950
- 'blocked_users' => $blocked_users,
951
- 'cache_hours' => $cache_hours,
952
- 'nr_images' => $nr_images,
953
- 'attachment' => $attachment
954
- );
955
-
956
- if ( true === $this->trigger_refresh_data( $instaData, $old_opts, $new_opts ) ) {
957
-
958
- $instaData = array();
959
- $old_opts['search'] = $search;
960
- $old_opts['search_string'] = $search_string;
961
- $old_opts['blocked_users'] = $blocked_users;
962
- $old_opts['cache_hours'] = $cache_hours;
963
- $old_opts['nr_images'] = $nr_images;
964
- $old_opts['attachment'] = $attachment;
965
-
966
- if ( 'user' == $search ) {
967
- $url = str_replace( '{username}', urlencode( trim( $search_string ) ), self::USERNAME_URL );
968
- $response = wp_remote_get( $url, array( 'sslverify' => false, 'timeout' => 60 ) );
969
- } else {
970
- $url = str_replace( '{tag}', urlencode( trim( $search_string ) ), self::TAG_URL );
971
- $response = wp_remote_get( $url, array( 'sslverify' => false, 'timeout' => 60 ) );
972
-
973
- }
974
-
975
- if ( is_wp_error( $response ) ) {
976
-
977
- return $response->get_error_message();
978
- }
979
-
980
- if ( $response['response']['code'] == 200 ) {
981
-
982
- $results = json_decode( $response['body'], true );
983
-
984
- if ( $results && is_array( $results ) ) {
985
-
986
- if ( 'user' == $search ) {
987
- $entry_data = isset($results['graphql']['user']['edge_owner_to_timeline_media']['edges']) ? $results['graphql']['user']['edge_owner_to_timeline_media']['edges'] : array();
988
- } else {
989
- $entry_data = isset( $results['graphql']['hashtag']['edge_hashtag_to_media']['edges'] ) ? $results['graphql']['hashtag']['edge_hashtag_to_media']['edges'] : array();
990
- }
991
-
992
-
993
- if ( empty( $entry_data ) ) {
994
- return __( 'No images found', 'jrinstaslider');
995
- }
996
-
997
- foreach ( $entry_data as $current => $result ) {
998
-
999
-
1000
- $result = $result['node'];
1001
-
1002
- if ( 'hashtag' == $search ) {
1003
-
1004
- if ( in_array( $result['owner']['id'], $blocked_users_array ) ) {
1005
- $nr_images++;
1006
- continue;
1007
- }
1008
- }
1009
-
1010
- if ( $result['is_video'] == true ) {
1011
- $nr_images++;
1012
- continue;
1013
- }
1014
-
1015
-
1016
- if ( $current >= $nr_images ) {
1017
- break;
1018
- }
1019
-
1020
- $image_data = $this->media_model( $result );
1021
-
1022
- if ( 'user' == $search ) {
1023
- $image_data['username'] = $search_string;
1024
- }
1025
-
1026
- if ( ( $search == 'hashtag' ) || ( $search == 'user' && !$attachment ) ) {
1027
-
1028
- $instaData[] = $image_data;
1029
-
1030
- } else {
1031
-
1032
- if ( isset( $old_opts['saved_images'][$image_data['id']] ) ) {
1033
-
1034
- if ( is_string( get_post_status( $old_opts['saved_images'][$image_data['id']] ) ) ) {
1035
-
1036
- $this->update_wp_attachment( $old_opts['saved_images'][$image_data['id']], $image_data );
1037
-
1038
- $instaData[$image_data['id']] = $old_opts['saved_images'][$image_data['id']];
1039
-
1040
- } else {
1041
- unset( $old_opts['saved_images'][$image_data['id']] );
1042
- }
1043
-
1044
- } else {
1045
-
1046
- $id = $this->save_wp_attachment( $image_data );
1047
-
1048
- if ( $id && is_numeric( $id ) ) {
1049
-
1050
- $old_opts['saved_images'][$image_data['id']] = $id;
1051
-
1052
- $instaData[$image_data['id']] = $id;
1053
-
1054
- } else {
1055
-
1056
- return $id;
1057
- }
1058
-
1059
- } // end isset $saved_images
1060
-
1061
- } // false to save attachments
1062
-
1063
- } // end -> foreach
1064
-
1065
- } // end -> ( $results ) && is_array( $results ) )
1066
-
1067
- } else {
1068
-
1069
- return $response['response']['message'];
1070
-
1071
- } // end -> $response['response']['code'] === 200 )
1072
-
1073
- update_option( $opt_name, $old_opts );
1074
-
1075
- if ( is_array( $instaData ) && !empty( $instaData ) ) {
1076
-
1077
- set_transient( $opt_name, $instaData, $cache_hours * 60 * 60 );
1078
- }
1079
-
1080
- } // end -> false === $instaData
1081
-
1082
- return $instaData;
1083
- }
1084
-
1085
-
1086
- /**
1087
- * @param string $imageUrl
1088
- *
1089
- * @return array
1090
- */
1091
- private function get_thumbnail_urls( $thumbnails ) {
1092
-
1093
- $image_thumbnails = array();
1094
-
1095
- foreach ( $thumbnails as $thumbnail ) {
1096
-
1097
- switch ( $thumbnail['config_width'] ) {
1098
- case '150':
1099
- $image_thumbnails['thumbnail'] = $thumbnail['src'];
1100
- break;
1101
- case '320':
1102
- $image_thumbnails['low'] = $thumbnail['src'];
1103
- break;
1104
- case '640':
1105
- $image_thumbnails['standard'] = $thumbnail['src'];
1106
- break;
1107
- }
1108
- }
1109
-
1110
- return $image_thumbnails;
1111
- }
1112
-
1113
-
1114
- /**
1115
- * Media Model
1116
- * @param [type] $medias_array [description]
1117
- * @return [type] [description]
1118
- */
1119
- private function media_model( $medias_array ) {
1120
-
1121
- $medias_model = array();
1122
-
1123
- foreach ( $medias_array as $prop => $value ) {
1124
-
1125
- switch ( $prop ) {
1126
- case 'id':
1127
- $medias_model['id'] = $value;
1128
- break;
1129
- case 'code':
1130
- case 'shortcode':
1131
- $medias_model['code'] = $value;
1132
- $medias_model['link'] = 'https://www.instagram.com/p/'. $value . '/';
1133
- break;
1134
- case 'owner':
1135
- $medias_model['user_id'] = $value['id'];
1136
- break;
1137
- case 'caption':
1138
- $medias_model['caption'] = $this->sanitize( $value );
1139
- break;
1140
- case 'edge_media_to_caption':
1141
- if ( !empty( $value['edges'] ) ) {
1142
- $first_caption = $value['edges'][0];
1143
- if ( isset( $first_caption['node']['text'] ) ) {
1144
- $medias_model['caption'] = $this->sanitize( $value['edges'][0]['node']['text'] );
1145
- }
1146
- }
1147
- break;
1148
- case 'date':
1149
- case 'taken_at_timestamp':
1150
- $medias_model['timestamp'] = (float) $value;
1151
- break;
1152
- case 'dimensions':
1153
- $medias_model['height'] = $value['height'];
1154
- $medias_model['width'] = $value['width'];
1155
- break;
1156
- case 'display_url':
1157
- case 'display_src':
1158
- $medias_model['url'] = $value;
1159
- if ( isset( $medias_model['sizes'] ) ) {
1160
- $medias_model['sizes']['full'] = $value;
1161
- }
1162
- break;
1163
- case 'edge_liked_by':
1164
- case 'likes':
1165
- $medias_model['likes_count'] = $value['count'];
1166
- break;
1167
- case 'edge_media_to_comment':
1168
- case 'comments':
1169
- $medias_model['comment_count'] = $value['count'];
1170
- break;
1171
- case 'thumbnail_resources':
1172
- $medias_model['sizes'] = $this->get_thumbnail_urls( $value );
1173
- if ( isset( $medias_model['url'] ) ) {
1174
- $medias_model['sizes']['full'] = $medias_model['url'];
1175
- }
1176
- break;
1177
- }
1178
-
1179
- if ( isset( $medias_model['comment_count'] ) && isset( $medias_model['likes_count'] ) ) {
1180
- $medias_model['popularity'] = (int) ( $medias_model['comment_count'] ) + ( $medias_model['likes_count'] );
1181
- }
1182
- }
1183
-
1184
- return $medias_model;
1185
- }
1186
-
1187
-
1188
- /**
1189
- * Remove Duplicates
1190
- * @return [type] [description]
1191
- */
1192
- private function clean_duplicates( $username ) {
1193
-
1194
- $savedinsta_args = array(
1195
- 'post_type' => 'attachment',
1196
- 'post_status' => 'inherit',
1197
- 'post_mime_type' => 'image',
1198
- 'orderby' => 'rand',
1199
- 'posts_per_page' => -1,
1200
- 'meta_query' => array(
1201
- array(
1202
- 'key' => 'jr_insta_username',
1203
- 'compare' => '=',
1204
- 'value' => $username
1205
- ),
1206
- ),
1207
- );
1208
-
1209
- $savedinsta = new WP_Query( $savedinsta_args );
1210
-
1211
- $opt_name = 'jr_insta_' . md5( 'user' . '_' . $username );
1212
-
1213
- $attachment_ids = (array) get_option( $opt_name );
1214
-
1215
- $deleted_count = 0;
1216
-
1217
- foreach ( $savedinsta->posts as $post ) {
1218
-
1219
- if ( !in_array( $post->ID, $attachment_ids['saved_images'] ) ) {
1220
-
1221
- if ( false !== wp_delete_attachment( $post->ID, true ) ) {
1222
- $deleted_count++;
1223
- }
1224
- }
1225
- }
1226
-
1227
- wp_reset_postdata();
1228
-
1229
- return $deleted_count;
1230
- }
1231
-
1232
- /**
1233
- * Ajax Call to unblock images
1234
- * @return void
1235
- */
1236
- public function delete_dupes() {
1237
-
1238
- if (function_exists('check_ajax_referer')) {
1239
- check_ajax_referer( 'jr_delete_instagram_dupes' );
1240
- }
1241
-
1242
- $post = $_POST;
1243
- $return = array(
1244
- 'deleted' => $this->clean_duplicates( $post['username'] )
1245
- );
1246
-
1247
- wp_send_json( $return );
1248
- }
1249
-
1250
- /**
1251
- * Get Instagram Ids from Usernames into array
1252
- * @param string $usernames Comma separated string with instagram users
1253
- * @return array An array with instagram ids
1254
- */
1255
- private function get_ids_from_usernames( $usernames ) {
1256
-
1257
- $users = explode( ',', trim( $usernames ) );
1258
- $user_ids = (array) get_transient( 'jr_insta_user_ids' );
1259
- $return_ids = array();
1260
-
1261
- if ( is_array( $users ) && !empty( $users ) ) {
1262
-
1263
- foreach ( $users as $user ) {
1264
-
1265
- if ( isset( $user_ids[$user] ) ) {
1266
- continue;
1267
- }
1268
-
1269
- $url = str_replace( '{username}', urlencode( trim( $user ) ), self::USERNAME_URL );
1270
- $response = wp_remote_get( $url, array( 'sslverify' => false, 'timeout' => 60 ) );
1271
-
1272
- if ( is_wp_error( $response ) ) {
1273
-
1274
- return $response->get_error_message();
1275
- }
1276
-
1277
- if ( $response['response']['code'] == 200 ) {
1278
-
1279
- $results = json_decode( $response['body'], true );
1280
-
1281
- if ( $results && is_array( $results ) ) {
1282
-
1283
- $user_id = isset( $results['user']['id'] ) ? $results['user']['id'] : false;
1284
-
1285
- if ( $user_id ) {
1286
-
1287
- $user_ids[$user] = $user_id;
1288
-
1289
- set_transient( 'jr_insta_user_ids', $user_ids );
1290
- }
1291
- }
1292
- }
1293
- }
1294
- }
1295
-
1296
- foreach ( $users as $user ) {
1297
- if ( isset( $user_ids[$user] ) ) {
1298
- $return_ids[] = $user_ids[$user];
1299
- }
1300
- }
1301
-
1302
- return $return_ids;
1303
- }
1304
-
1305
-
1306
- /**
1307
- * Updates attachment using the id
1308
- * @param int $attachment_ID
1309
- * @param array image_data
1310
- * @return void
1311
- */
1312
- private function update_wp_attachment( $attachment_ID, $image_data ) {
1313
- update_post_meta( $attachment_ID, 'jr_insta_popularity', $image_data['popularity'] );
1314
- update_post_meta( $attachment_ID, 'jr_insta_likes_count', $image_data['likes_count'] );
1315
- update_post_meta( $attachment_ID, 'jr_insta_comment_count', $image_data['comment_count'] );
1316
- }
1317
-
1318
- /**
1319
- * Save Instagram images to upload folder and ads to media.
1320
- * If the upload fails it returns the remote image url.
1321
- *
1322
- * @param string $url Url of image to download
1323
- * @param string $file File path for image
1324
- *
1325
- * @return string $url Url to image
1326
- */
1327
- private function save_wp_attachment( $image_data ) {
1328
-
1329
- $image_info = pathinfo( $image_data['url'] );
1330
-
1331
- if ( !in_array( $image_info['extension'], array( 'jpg', 'jpe', 'jpeg' ) ) ) {
1332
- return false;
1333
- }
1334
-
1335
- $attachment = array(
1336
- 'guid' => $image_data['url'],
1337
- 'post_mime_type' => 'image/jpeg',
1338
- 'post_title' => preg_replace( '/\.[^.]+$/', '', $image_info['basename'] ),
1339
- 'post_excerpt' => $image_data['caption']
1340
- );
1341
-
1342
- $attachment_metadata = array( 'width' => $image_data['width'], 'height' => $image_data['height'], 'file' => $image_info['basename'] );
1343
- $attachment_metadata['sizes'] = array( 'full' => $attachment_metadata );
1344
- $id = wp_insert_attachment( $attachment );
1345
- wp_update_attachment_metadata( $id, $attachment_metadata );
1346
-
1347
-
1348
- unset( $image_data['caption'] );
1349
-
1350
- foreach ( $image_data as $meta_key => $meta_value ) {
1351
- update_post_meta( $id, 'jr_insta_' . $meta_key, $meta_value );
1352
- }
1353
-
1354
- return $id;
1355
- }
1356
-
1357
- /**
1358
- * Add new attachment Description only for instgram images
1359
- *
1360
- * @param array $form_fields
1361
- * @param object $post
1362
- *
1363
- * @return array
1364
- */
1365
- public function insta_attachment_fields( $form_fields, $post ) {
1366
-
1367
- $instagram_username = get_post_meta( $post->ID, 'jr_insta_username', true );
1368
-
1369
- if ( !empty( $instagram_username ) ) {
1370
-
1371
- $form_fields["jr_insta_username"] = array(
1372
- "label" => __( "Instagram Username" ),
1373
- "input" => "html",
1374
- "html" => "<span style='line-height:31px'><a target='_blank' href='https://www.instagram.com/{$instagram_username}/'>{$instagram_username}</a></span>"
1375
- );
1376
-
1377
- $instagram_link = get_post_meta( $post->ID, 'jr_insta_link', true );
1378
- if ( !empty( $instagram_link ) ) {
1379
- $form_fields["jr_insta_link"] = array(
1380
- "label" => __( "Instagram Image" ),
1381
- "input" => "html",
1382
- "html" => "<span style='line-height:31px'><a target='_blank' href='{$instagram_link}'>{$instagram_link}</a></span>"
1383
- );
1384
- }
1385
-
1386
- $instagram_date = get_post_meta( $post->ID, 'jr_insta_timestamp', true );
1387
- if ( !empty( $instagram_date ) ) {
1388
- $instagram_date = date( "F j, Y, g:i a", $instagram_date );
1389
- $form_fields["jr_insta_time"] = array(
1390
- "label" => __( "Posted on Instagram" ),
1391
- "input" => "html",
1392
- "html" => "<span style='line-height:31px'>{$instagram_date}</span>"
1393
- );
1394
- }
1395
- }
1396
-
1397
- return $form_fields;
1398
- }
1399
-
1400
- /**
1401
- * Sort Function for timestamp Ascending
1402
- */
1403
- public function sort_timestamp_ASC( $a, $b ) {
1404
- return $a['timestamp'] > $b['timestamp'];
1405
- }
1406
-
1407
- /**
1408
- * Sort Function for timestamp Descending
1409
- */
1410
- public function sort_timestamp_DESC( $a, $b ) {
1411
- return $a['timestamp'] < $b['timestamp'];
1412
- }
1413
-
1414
- /**
1415
- * Sort Function for popularity Ascending
1416
- */
1417
- public function sort_popularity_ASC( $a, $b ) {
1418
- return $a['popularity'] > $b['popularity'];
1419
- }
1420
-
1421
- /**
1422
- * Sort Function for popularity Descending
1423
- */
1424
- public function sort_popularity_DESC( $a, $b ) {
1425
- return $a['popularity'] < $b['popularity'];
1426
- }
1427
-
1428
- /**
1429
- * Plugin Data for better compatibility and Support
1430
- *
1431
- */
1432
- public function domain_data() {
1433
-
1434
- if ( false === $domain_data = get_transient( 'jr_domain_info' ) ) {
1435
-
1436
- $theme = wp_get_theme();
1437
- $domain = get_site_url();
1438
- $plugin = self::VERSION;
1439
- $url = 'http://jrwebstudio.com/wp-admin/admin-post.php';
1440
-
1441
- $response = wp_safe_remote_post( $url, array(
1442
- 'method' => 'POST',
1443
- 'timeout' => 45,
1444
- 'redirection' => 5,
1445
- 'httpversion' => '1.1',
1446
- 'blocking' => true,
1447
- 'user-agent' => 'Mozilla/4.0',
1448
- 'headers' => array(),
1449
- 'cookies' => array(),
1450
- 'body' => array(
1451
- 'action' => 'insta_users',
1452
- 'domain' => $domain,
1453
- 'theme_name' => $theme->get( 'Name' ),
1454
- 'theme_version' => $theme->get( 'Version' ),
1455
- 'plugin_version' => $plugin,
1456
- 'timestamp' => time()
1457
- )
1458
- )
1459
- );
1460
-
1461
- if ( $response['response']['code'] == 200 ) {
1462
- $domain_data = json_decode( wp_remote_retrieve_body( $response ), true );
1463
- if ( is_array( $domain_data) && !empty( $domain_data) ) {
1464
- set_transient( 'jr_domain_info', $domain_data, WEEK_IN_SECONDS );
1465
- }
1466
- }
1467
- }
1468
-
1469
- return $domain_data;
1470
- }
1471
-
1472
- /**
1473
- * Sanitize 4-byte UTF8 chars; no full utf8mb4 support in drupal7+mysql stack.
1474
- * This solution runs in O(n) time BUT assumes that all incoming input is
1475
- * strictly UTF8.
1476
- *
1477
- * @param string $input The input to be sanitised
1478
- *
1479
- * @return the sanitized input
1480
- */
1481
- private function sanitize( $input ) {
1482
-
1483
- if ( !empty( $input ) ) {
1484
- $utf8_2byte = 0xC0 /*1100 0000*/ ;
1485
- $utf8_2byte_bmask = 0xE0 /*1110 0000*/ ;
1486
- $utf8_3byte = 0xE0 /*1110 0000*/ ;
1487
- $utf8_3byte_bmask = 0XF0 /*1111 0000*/ ;
1488
- $utf8_4byte = 0xF0 /*1111 0000*/ ;
1489
- $utf8_4byte_bmask = 0xF8 /*1111 1000*/ ;
1490
-
1491
- $sanitized = "";
1492
- $len = strlen( $input );
1493
- for ( $i = 0; $i < $len; ++$i ) {
1494
-
1495
- $mb_char = $input[$i]; // Potentially a multibyte sequence
1496
- $byte = ord( $mb_char );
1497
-
1498
- if ( ( $byte & $utf8_2byte_bmask ) == $utf8_2byte ) {
1499
- $mb_char .= $input[++$i];
1500
- } else if ( ( $byte & $utf8_3byte_bmask ) == $utf8_3byte ) {
1501
- $mb_char .= $input[++$i];
1502
- $mb_char .= $input[++$i];
1503
- } else if ( ( $byte & $utf8_4byte_bmask ) == $utf8_4byte ) {
1504
- // Replace with ? to avoid MySQL exception
1505
- $mb_char = '';
1506
- $i += 3;
1507
- }
1508
-
1509
- $sanitized .= $mb_char;
1510
- }
1511
-
1512
- $input = $sanitized;
1513
- }
1514
-
1515
- return $input;
1516
- }
1517
-
1518
- } // end of class JR_InstagramSlider
1
  <?php
2
  /*
3
+ Plugin Name: Social Slider Widget
4
+ Plugin URI: https://cm-wp.com/instagram-slider-widget/
5
+ Version: 1.5.0
6
+ Description: Social Slider Widget is a responsive slider widget that shows 12 latest images from a public Instagram user and up to 18 images from a hashtag.
7
+ Author: creativemotion
8
+ Author URI: https://cm-wp.com/
9
+ Text Domain: instagram-slider-widget
10
+ Domain Path: /languages
11
+ License: GPL2
12
+ License URI: https://www.gnu.org/licenses/gpl-2.0.html
13
  */
14
 
15
+ // Exit if accessed directly
16
+ if ( ! defined( 'ABSPATH' ) ) {
17
+ exit;
18
+ }
19
+
20
+ // Подключаем класс проверки совместимости
21
+ require_once( dirname( __FILE__ ) . '/libs/factory/core/includes/class-factory-requirements.php' );
22
+
23
+ $plugin_info = array(
24
+ 'prefix' => 'wis_', // Префикс для базы данных и полей формы. Строка должна соответствовать условию [A-z0-9_].
25
+ 'plugin_name' => 'wbcr_isw', // Кодовое название плагина, используется как уникальный идентификатор. Строка должна соответствовать условию [A-z0-9_].
26
+ 'plugin_title' => __( 'Social Slider Widget', 'instagram-slider-widget' ), // Название плагина. То же что и Plugin Name. Используется в интерфейсе и сообщениях.
27
+ 'plugin_text_domain' => 'instagram-slider-widget', // Идентификатор перевода, указывается в load_plugin_textdomain()
28
+
29
+ // Служба поддержки
30
+ // Указываем ссылки и имена страниц сайта плагина, чтобы иметь к ним доступ внутри плагина.
31
+ 'support_details' => array(
32
+ 'url' => 'https://cm-wp.com/instagram-slider-widget',// Ссылка на сайт плагина
33
+ 'pages_map' => array(
34
+ 'features' => 'premium-features', // {site}/premium-features "страница возможности"
35
+ 'pricing' => 'pricing', // {site}/prices страница "цены"
36
+ 'support' => 'support', // {site}/support страница "служба поддержки"
37
+ 'docs' => 'docs' // {site}/docs страница "документация"
38
+ )
39
+ ),
40
+
41
+ // Настройка обновлений плагина
42
+ // Имеется ввиду настройка обновлений из удаленного репозитория. Это может быть wordpress.org, freemius.com, codecanyon.com
43
+ 'has_updates' => true, // Нужно ли проверять обновления для этого плагина
44
+ 'updates_settings' => array(
45
+ 'repository' => 'wordpress', // Тип репозитория из которого получаем обновления. Может быть wordpress, freemius
46
+ 'slug' => 'instagram-slider-widget', // Слаг плагина в удаленном репозитории
47
+ 'maybe_rollback' => true, // Можно ли делать откат к предыдущей версии плагина?
48
+ 'rollback_settings' => array(
49
+ 'prev_stable_version' => '0.0.0' // Нужно указать предыдущую стабильную версию, к которой нужно сделать откат.
50
+ )
51
+ ),
52
+
53
+ // Настройка премиум плагина
54
+ // Сюда входят настройки лицензирования и премиум обновлений плагина и его надстройки
55
+ 'has_premium' => false, // Есть ли у текущего плагина премиум? Если false, премиум модуль загружен не будет
56
+ 'license_settings' => array(
57
+ 'provider' => '', // Тип лицензионного поставщика, может быть freemius, codecanyon, templatemonster
58
+ 'slug' => 'instagram-slider-widget', // Слаг плагина в выбранном поставщике лицензий и обновлений
59
+ 'plugin_id' => '', // ID плагина в freemius.com
60
+ 'public_key' => '', // Публичный ключ плагина в freemius.com
61
+ 'price' => 0, // Минимальная цена плагина, выводится в рекламных блоках
62
+ // Настройка обновлений премиум плагина
63
+ 'updates_settings' => array(
64
+ 'maybe_rollback' => true, // Можно ли делать откат к предыдущей версии плагина?
65
+ 'rollback_settings' => array(
66
+ 'prev_stable_version' => '0.0.0' // Нужно указать предыдущую стабильную версию, к которой нужно сделать откат.
67
+ )
68
+ )
69
+ ),
70
+
71
+ // Настройки рекламы от CreativeMotion
72
+ 'render_adverts' => true, // Показывать рекламу CreativeMotion в админке Wordpress?
73
+ 'adverts_settings' => array(
74
+ 'dashboard_widget' => true, // если true, показывать виджет новостей на страницу Dashboard
75
+ 'right_sidebar' => true, // если true, показывать виджет в правом сайбаре интерфейса плагина
76
+ 'notice' => true, // если true, показывать сквозное уведомление на всех страницах админ панели Wordpress
77
+ ),
78
+
79
+ // Подключаемые модуль фреймворка
80
+ // Необходимые для ускоренной разработки продуктов Webcrfatic
81
+ 'load_factory_modules' => array(
82
+ array( 'libs/factory/bootstrap', 'factory_bootstrap_421', 'admin' ), // Модуль позволяет использовать различные js виджеты и стили оформление форм.
83
+ array( 'libs/factory/forms', 'factory_forms_418', 'admin' ), // Модуль позволяет быстро создавать формы и готовые поля настроек
84
+ array( 'libs/factory/pages', 'factory_pages_420', 'admin' ), // Модуль позволяет создавать страницы плагина, в том числе шаблонизированные страницы
85
+ array( 'libs/factory/freemius', 'factory_freemius_108', 'all' ), // Модуль для работы с freemius.com, содержит api библиотеку и провайдеры для премиум менеджера
86
+ array( 'libs/factory/adverts', 'factory_adverts_102', 'admin') // Модуль для показа рекламы в админпанели Wordpress, вся реклама вытягивается через API Creative Motion
87
+ )
88
+ );
89
+
90
+ $wis_compatibility = new Wbcr_Factory420_Requirements( __FILE__, array_merge( $plugin_info, array(
91
+ 'plugin_already_activate' => defined( 'WIS_PLUGIN_ACTIVE' ),
92
+ 'required_php_version' => '5.4',
93
+ 'required_wp_version' => '4.2.0',
94
+ 'required_clearfy_check_component' => false
95
+ ) ) );
96
 
97
  /**
98
+ * If the plugin is compatible, then it will continue its work, otherwise it will be stopped,
99
+ * and the user will throw a warning.
100
  */
101
+ if ( ! $wis_compatibility->check() ) {
102
+ return;
103
+ }
104
+ /********************************************/
105
+ // Устанавливает статус плагина, как активный
106
+ define( 'WIS_PLUGIN_ACTIVE', true );
107
+ // Версия плагина
108
+ define( 'WIS_PLUGIN_VERSION', $wis_compatibility->get_plugin_version() );
109
+ define( 'WIS_PLUGIN_FILE', __FILE__ );
110
+ define( 'WIS_ABSPATH', dirname( __FILE__ ) );
111
+ define( 'WIS_PLUGIN_BASENAME', plugin_basename( __FILE__ ));
112
+ define( 'WIS_PLUGIN_SLUG', dirname(plugin_basename( __FILE__ )));
113
+ // Ссылка к директории плагина
114
+ define( 'WIS_PLUGIN_URL', plugins_url( null, __FILE__ ) );
115
+ // Директория плагина
116
+ define( 'WIS_PLUGIN_DIR', dirname( __FILE__ ) );
117
+ /********************************************/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
 
 
 
 
 
119
 
 
 
 
120
 
 
 
 
121
 
122
+ /**
123
+ * -----------------------------------------------------------------------------
124
+ * PLUGIN INIT
125
+ * -----------------------------------------------------------------------------
126
+ */
127
+ require_once( WIS_PLUGIN_DIR . '/libs/factory/core/boot.php' );
128
+ require_once( WIS_PLUGIN_DIR . '/includes/class-wis-plugin.php' );
129
+
130
+ try {
131
+ new WIS_Plugin( __FILE__, array_merge( $plugin_info, array(
132
+ 'plugin_version' => WIS_PLUGIN_VERSION
133
+ ) ) );
134
+ } catch( Exception $e ) {
135
+ // Plugin wasn't initialized due to an error
136
+ define( 'WIS_PLUGIN_THROW_ERROR', true );
137
+
138
+ $wis_plugin_error_func = function () use ( $e ) {
139
+ $error = sprintf( "The %s plugin has stopped. <b>Error:</b> %s Code: %s", 'Social Slider Widget', $e->getMessage(), $e->getCode() );
140
+ echo '<div class="notice notice-error"><p>' . $error . '</p></div>';
141
+ };
142
+
143
+ add_action( 'admin_notices', $wis_plugin_error_func );
144
+ add_action( 'network_admin_notices', $wis_plugin_error_func );
145
+ }
146
+
147
+ /*******************************************************************************/
148
+ /**
149
+ * On widgets Init register Widget
150
+ */
151
+ require_once "includes/class-wis_instagram_slider.php";
152
+ add_action( 'widgets_init', array( 'WIS_InstagramSlider', 'register_widget' ) );
153
+ ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/adverts/assets/index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ // Silence is golden.
libs/factory/adverts/assets/js/index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ // Silence is golden.
libs/factory/adverts/assets/js/script.js ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(document).ready( function($) {
2
+ // Отправдяем запрос на маркировку нотиса, если пользователь его закрыл
3
+ $( '.wbcr-advt-notice' ).click( function() {
4
+ $.post(
5
+ ajaxurl,
6
+ {
7
+ action: 'wbcr_advt_mark_notice'
8
+ },
9
+ function(data) {
10
+ }
11
+ );
12
+ });
13
+ });
libs/factory/adverts/boot.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ use WBCR\Factory_Adverts_102\Base;
4
+
5
+ /**
6
+ * Factory Adverts
7
+ *
8
+ * @author Alexander Vitkalov <nechin.va@gmail.com>
9
+ * @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
10
+ * @since 1.0.0
11
+ *
12
+ * @package factory-ad-inserter
13
+ * @copyright (c) 2019, Webcraftic Ltd
14
+ *
15
+ * @version 1.2.3
16
+ */
17
+
18
+ // Exit if accessed directly
19
+ if ( ! defined( 'ABSPATH' ) ) {
20
+ exit;
21
+ }
22
+
23
+ if ( defined( 'FACTORY_ADVERTS_102_LOADED' ) || ( defined( 'FACTORY_ADVERTS_BLOCK' ) && FACTORY_ADVERTS_BLOCK ) ) {
24
+ return;
25
+ }
26
+
27
+ # Устанавливаем константу, что модуль уже загружен
28
+ define( 'FACTORY_ADVERTS_102_LOADED', true );
29
+
30
+ # Устанавливаем версию модуля
31
+ define( 'FACTORY_ADVERTS_102_VERSION', '1.0.2' );
32
+
33
+ # Регистрируем тектовый домен, для интернализации интерфейса модуля
34
+ load_plugin_textdomain( 'wbcr_factory_adverts_102', false, dirname( plugin_basename( __FILE__ ) ) . '/langs' );
35
+
36
+ # Устанавливаем директорию модуля
37
+ define( 'FACTORY_ADVERTS_102_DIR', dirname( __FILE__ ) );
38
+
39
+ # Устанавливаем url модуля
40
+ define( 'FACTORY_ADVERTS_102_URL', plugins_url( null, __FILE__ ) );
41
+
42
+ require_once( FACTORY_ADVERTS_102_DIR . '/includes/class-rest-request.php' );
43
+ require_once( FACTORY_ADVERTS_102_DIR . '/includes/class-base.php' );
44
+
45
+ /**
46
+ * @param Wbcr_Factory420_Plugin $plugin
47
+ */
48
+ add_action( 'wbcr_factory_adverts_102_plugin_created', function ( $plugin ) {
49
+ $plugin->set_adverts_manager( "WBCR\Factory_Adverts_102\Base" );
50
+ } );
libs/factory/adverts/includes/class-adverts-base.php ADDED
@@ -0,0 +1,261 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WBCR\Factory_Adverts_102;
4
+
5
+ // Exit if accessed directly
6
+ if ( ! defined( 'ABSPATH' ) ) {
7
+ exit;
8
+ }
9
+
10
+ /**
11
+ * Base class for adverts module.
12
+ *
13
+ * Contains methods for retrieving banner data for a specific position.
14
+ * With this class user cat get advert content for a specific position.
15
+ * This class use functional design pattern.
16
+ * It used in the main plugin file. Also some methods may used in any place of plugin.
17
+ *
18
+ * Example (main plugin file):
19
+ * // FRAMEWORK MODULES
20
+ * 'load_factory_modules' => array(
21
+ * ...
22
+ * array( 'libs/factory/adverts', 'factory_adverts_102', 'admin' ),
23
+ * ),
24
+ *
25
+ * if ( is_admin() ) {
26
+ * global $wbcr_PLUGIN_NAME_adinserter;
27
+ *
28
+ * $wbcr_PLUGIN_NAME_adinserter = new WBCR\Factory_Adverts_102\Base(
29
+ * __FILE__,
30
+ * array_merge(
31
+ * $plugin_info,
32
+ * array(
33
+ * 'dashboard_widget' => true, // show dashboard widget (default: false)
34
+ * 'right_sidebar' => true, // show adverts sidebar (default: false)
35
+ * 'notice' => true, // show notice message (default: false)
36
+ * )
37
+ * )
38
+ * );
39
+ * }
40
+ *
41
+ * Example (in any place):
42
+ * <?php
43
+ * global $wbcr_PLUGIN_NAME_adinserter;
44
+ * echo $wbcr_PLUGIN_NAME_adinserter->get_adverts( 'right_sidebar' );
45
+ * ?>
46
+ *
47
+ * Replace in the variable the phrase PLUGIN_NAME with the current plugin name!
48
+ *
49
+ * @author Alexander Vitkalov <nechin.va@gmail.com>
50
+ * @since 1.0.0 Added
51
+ * @package factory-adverts
52
+ * @copyright (c) 2019 Webcraftic Ltd
53
+ */
54
+ class Base {
55
+
56
+ /*
57
+ * Contain array data with the plugin information and the module settings.
58
+ * Mainly used to get the name of the plugin and how to get the adverts blocks.
59
+ *
60
+ * @since 1.0.0 Added
61
+ *
62
+ * @var array Example: array(
63
+ * 'prefix' => 'wbcr_inp_',
64
+ * 'plugin_name' => 'wbcr_insert_php',
65
+ * 'plugin_title' => 'Woody ad snippets',
66
+ * 'plugin_text_domain' => 'insert-php',
67
+ * 'dashboard_widget' => true,
68
+ * 'right_sidebar' => true,
69
+ * 'notice' => true,
70
+ * ...
71
+ * )
72
+ *
73
+ */
74
+ private $data = [];
75
+
76
+ /**
77
+ * Wbcr_Factory_Adinserter constructor.
78
+ *
79
+ * - Store plugin information and settings.
80
+ * - Add filter and actions.
81
+ * - Include dashboard widget.
82
+ *
83
+ * @since 1.0.0 Added
84
+ *
85
+ * @param string $plugin_path Path to plugin base file
86
+ * @param array $data Array data with plugin information and settings (@see $data property example)
87
+ */
88
+ public function __construct( $plugin_path, $data ) {
89
+ $this->data = $data;
90
+
91
+ add_filter( 'wbcr/factory/pages/impressive/widgets', [ $this, 'register_widgets' ], 10, 3 );
92
+
93
+ add_action( 'init', [ $this, 'add_notices' ] );
94
+ add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_scripts' ] );
95
+ add_action( 'wp_ajax_wbcr_advt_mark_notice', [ $this, 'mark_notice' ] );
96
+
97
+ $this->include_dashboard();
98
+ }
99
+
100
+ /**
101
+ * Include dashboard widget
102
+ *
103
+ * Include functionality the output of the widget on the dashboard.
104
+ * Only one dashboard widget must be shown for some plugins with this setting (dashboard_widget).
105
+ *
106
+ * @since 1.0.0 Added
107
+ */
108
+ private function include_dashboard() {
109
+ if ( isset( $this->data['dashboard_widget'] ) && $this->data['dashboard_widget'] && ! defined( 'FACTORY_ADVERTS_DASHBOARD_WIDGET' ) ) {
110
+ /**
111
+ * Dashboard widget is displays.
112
+ *
113
+ * Used only in this function.
114
+ *
115
+ * @since 1.0.0
116
+ * @var boolean Notes that the dashboard widget already displays.
117
+ */
118
+ define( 'FACTORY_ADVERTS_DASHBOARD_WIDGET', true );
119
+ require_once FACTORY_ADVERTS_102_DIR . '/includes/class-adverts-dashboard-widget.php';
120
+
121
+ new Dashboard_Widget( $this->data['plugin_name'] );
122
+ }
123
+ }
124
+
125
+ /**
126
+ * Get advert content for selected position.
127
+ *
128
+ * @since 1.0.0 Added
129
+ *
130
+ * @param string $position The position for advert
131
+ *
132
+ * @return string
133
+ */
134
+ private function get_content( $position ) {
135
+ $request = new Rest_Request( $this->data['plugin_name'], $position );
136
+
137
+ return $request->get_content();
138
+ }
139
+
140
+ /**
141
+ * Register widgets.
142
+ *
143
+ * Depending on the settings, register new widgets.
144
+ *
145
+ * @since 1.0.0 Added
146
+ *
147
+ * @param array $widgets Already existing registered widgets
148
+ * @param string $position Position for the widget
149
+ * @param string $plugin Plugin object for which the hook is run
150
+ *
151
+ * @return array array(
152
+ * 'adverts_widget' => '<p></p>',
153
+ * 'businnes_suggetion' => '<p></p>',
154
+ * 'support' => '<p></p>',
155
+ * ...
156
+ * )
157
+ */
158
+ public function register_widgets( $widgets, $position, $plugin ) {
159
+ if ( $plugin->getPluginName() == $this->data['plugin_name'] && ! empty( $this->data ) && 'right' == $position ) {
160
+ if ( isset( $this->data['right_sidebar'] ) && $this->data['right_sidebar'] ) {
161
+ $content = $this->get_content( 'right_sidebar' );
162
+
163
+ $widgets['adverts_widget'] = $content;
164
+ }
165
+
166
+ if ( isset( $this->data['businnes_suggetion'] ) && $this->data['businnes_suggetion'] ) {
167
+ $content = $this->get_content( 'businnes_suggetion' );
168
+
169
+ $widgets['businnes_suggetion'] = $content;
170
+ }
171
+
172
+ if ( isset( $this->data['support'] ) && $this->data['support'] ) {
173
+ $content = $this->get_content( 'support' );
174
+
175
+ $widgets['support'] = $content;
176
+ }
177
+ }
178
+
179
+ return $widgets;
180
+ }
181
+
182
+ /**
183
+ * Add notice message.
184
+ *
185
+ * Only one notice must be shown for some plugins with this setting (notice).
186
+ *
187
+ * @since 1.0.0 Added
188
+ */
189
+ public function add_notices() {
190
+ if ( isset( $this->data['notice'] ) && $this->data['notice'] && ! defined( 'FACTORY_ADINSERTER_NOTICE' ) ) {
191
+ /**
192
+ * Notice is displays.
193
+ *
194
+ * Used only in this function.
195
+ *
196
+ * @since 1.0.0
197
+ * @var boolean Notes that the notice already displays.
198
+ */
199
+ define( 'FACTORY_ADINSERTER_NOTICE', true );
200
+
201
+ $content = $this->get_content( 'notice' );
202
+ $hash = md5( $content );
203
+
204
+ /* If the notice has not been closed by the user or the content of the notice has changed,
205
+ then we show the notice. */
206
+ if ( ! get_option( 'wbcr-advt-notice-' . $this->data['plugin_name'] ) || get_option( 'wbcr-advt-notice-hash-' . $this->data['plugin_name'] ) != $hash ) {
207
+ update_option( 'wbcr-advt-notice-' . $this->data['plugin_name'], false );
208
+ update_option( 'wbcr-advt-notice-hash-' . $this->data['plugin_name'], $hash );
209
+ add_action( 'admin_notices', function () {
210
+ echo $this->get_content( 'notice' );
211
+ } );
212
+ }
213
+ }
214
+ }
215
+
216
+ /**
217
+ * Add javascript file.
218
+ *
219
+ * File contains code for intercept the click event and post ajax request.
220
+ *
221
+ * @since 1.0.0 Added
222
+ */
223
+ public function enqueue_scripts() {
224
+ if ( isset( $this->data['notice'] ) && $this->data['notice'] && ! get_option( 'wbcr-advt-notice-' . $this->data['plugin_name'] ) ) {
225
+ wp_enqueue_script( 'factory-adverts-notice', FACTORY_ADVERTS_102_URL . '/assets/js/script.js' );
226
+ }
227
+ }
228
+
229
+ /**
230
+ * Mark notice closed for this plugin.
231
+ *
232
+ * Callback for ajax action. Execute when user close the notice.
233
+ *
234
+ * @since 1.0.0 Added
235
+ * @see enqueue_scripts()
236
+ */
237
+ public function mark_notice() {
238
+ update_option( 'wbcr-advt-notice-' . $this->data['plugin_name'], true );
239
+ exit();
240
+ }
241
+
242
+ /**
243
+ * Directly get advert content for selected position.
244
+ *
245
+ * @since 1.0.0 Added
246
+ *
247
+ * @param string $position Custom position name
248
+ *
249
+ * @return string
250
+ */
251
+ public function get_adverts( $position ) {
252
+ $content = '';
253
+
254
+ if ( $position ) {
255
+ $content = $this->get_content( $position );
256
+ }
257
+
258
+ return $content;
259
+ }
260
+
261
+ }
libs/factory/adverts/includes/class-adverts-dashboard-widget.php ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WBCR\Factory_Adverts_102;
4
+
5
+ // Exit if accessed directly
6
+ if ( ! defined( 'ABSPATH' ) ) {
7
+ exit;
8
+ }
9
+
10
+ /**
11
+ * Adverts Dashboard Widget.
12
+ *
13
+ * Adds a widget with a banner or a list of news.
14
+ *
15
+ * @author Alexander Vitkalov <nechin.va@gmail.com>
16
+ * @since 1.0.0 Added
17
+ * @package factory-adverts
18
+ * @copyright (c) 2019 Webcraftic Ltd
19
+ */
20
+ class Dashboard_Widget extends Rest_Request {
21
+
22
+ /**
23
+ * Dashboard_Widget constructor.
24
+ *
25
+ * Call parent constructor. Registration hooks.
26
+ *
27
+ * @since 1.0.0 Added
28
+ *
29
+ * @param string $plugin_name Plugin name from parameter plugin_name
30
+ */
31
+ public function __construct( $plugin_name ) {
32
+ parent::__construct( $plugin_name, 'dashboard' );
33
+
34
+ $this->register_hooks();
35
+ }
36
+
37
+ /**
38
+ * Registration hooks.
39
+ *
40
+ * @since 1.0.0 Added
41
+ */
42
+ public function register_hooks() {
43
+ add_action( 'wp_dashboard_setup', array( $this, 'add_dashboard_widgets' ) );
44
+ }
45
+
46
+ /**
47
+ * Add the News widget to the dashboard.
48
+ *
49
+ * @since 1.0.0 Added
50
+ */
51
+ public function add_dashboard_widgets() {
52
+ $widget_id = 'wbcr-adinserter-dashboard-widget';
53
+ wp_add_dashboard_widget(
54
+ $widget_id,
55
+ __( 'News', '' ),
56
+ array( $this, 'dashboard_widget_adverts' )
57
+ );
58
+
59
+ /**
60
+ * Set dashboard widget first in order
61
+ *
62
+ * @since 1.2.3 Added
63
+ */
64
+ global $wp_meta_boxes;
65
+
66
+ $normal_core = $wp_meta_boxes['dashboard']['normal']['core'];
67
+ $widget_backup = array( $widget_id => $normal_core[ $widget_id ] );
68
+ unset( $normal_core[ $widget_id ] );
69
+ $sorted_core = array_merge( $widget_backup, $normal_core );
70
+
71
+ $wp_meta_boxes['dashboard']['normal']['core'] = $sorted_core;
72
+ }
73
+
74
+ /**
75
+ * Create the function to output the contents of the Dashboard Widget.
76
+ *
77
+ * @since 1.0.0 Added
78
+ */
79
+ public function dashboard_widget_adverts() {
80
+ $content = $this->get_content();
81
+ if ( ! empty( $content ) ) {
82
+ ?>
83
+ <div class="wordpress-news hide-if-no-js">
84
+ <?php $this->show_adverts( $content ); ?>
85
+ </div>
86
+ <?php
87
+ }
88
+ }
89
+
90
+ /**
91
+ * Output advert content.
92
+ *
93
+ * @since 1.0.0 Added
94
+ *
95
+ * @param $content string
96
+ */
97
+ public function show_adverts( $content ) {
98
+ if ( ! empty( $content ) ) :
99
+ ?>
100
+ <div class="rss-widget">
101
+ <?php echo $content; ?>
102
+ </div>
103
+ <?php
104
+ endif;
105
+ }
106
+
107
+ }
libs/factory/adverts/includes/class-adverts-rest-request.php ADDED
@@ -0,0 +1,180 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WBCR\Factory_Adverts_102;
4
+
5
+ // Exit if accessed directly
6
+ if ( ! defined( 'ABSPATH' ) ) {
7
+ exit;
8
+ }
9
+
10
+ /**
11
+ * Factory request class.
12
+ *
13
+ * Performs a server request, retrieves banner data and stores it in the cache.
14
+ *
15
+ * @author Alexander Vitkalov <nechin.va@gmail.com>
16
+ * @since 1.0.0 Added
17
+ * @package factory-adverts
18
+ * @copyright (c) 2019 Webcraftic Ltd
19
+ */
20
+ class Rest_Request {
21
+
22
+ /**
23
+ * Rest route path.
24
+ *
25
+ * Define rest route path for rest request.
26
+ *
27
+ * @since 1.0.0
28
+ * @var string
29
+ * @uses do_rest_request()
30
+ */
31
+ const FACTORY_ADVERTS_REST_ROUTE = '/adverds/v1/advt';
32
+
33
+ /**
34
+ * Plugin name.
35
+ *
36
+ * Set on class initialization from parameter plugin_name.
37
+ * Used as query parameter in rest request.
38
+ *
39
+ * @since 1.0.0 Added
40
+ *
41
+ * @var string
42
+ */
43
+ private $plugin_name = '';
44
+
45
+ /**
46
+ * Adverts position.
47
+ *
48
+ * Position for advert (dashboard_widget, right_sidebar, notice, businnes_suggetion, support)
49
+ *
50
+ * Set on class initialization.
51
+ * Used as query parameter in rest request.
52
+ *
53
+ * @since 1.0.0 Added
54
+ *
55
+ * @var string
56
+ */
57
+ private $ad_position = '';
58
+
59
+ /**
60
+ * Request constructor.
61
+ *
62
+ * Variable initialization.
63
+ *
64
+ * @since 1.0.0 Added
65
+ *
66
+ * @param string $plugin_name Plugin name from parameter plugin_name
67
+ * @param string $position Position for advert
68
+ */
69
+ public function __construct( $plugin_name, $position ) {
70
+ $this->plugin_name = $plugin_name;
71
+ $this->ad_position = $position;
72
+ }
73
+
74
+ /**
75
+ * Get key for cached data.
76
+ *
77
+ * Used for store and get cached data for current plugin and position.
78
+ *
79
+ * @since 1.0.0 Added
80
+ *
81
+ * @return string
82
+ */
83
+ private function get_key() {
84
+ return md5( self::FACTORY_ADVERTS_REST_ROUTE . $this->plugin_name . $this->ad_position );
85
+ }
86
+
87
+ /**
88
+ * Get data from cache.
89
+ *
90
+ * If data in the cache, not empty and not expired, then get data from cache. Or get data from server.
91
+ *
92
+ * @since 1.0.0 Added
93
+ *
94
+ * @return mixed array(
95
+ * 'plugin' => 'wbcr_insert_php',
96
+ * 'content' => '<p></p>',
97
+ * 'expires' => 1563542199,
98
+ * );
99
+ */
100
+ private function get_cache() {
101
+
102
+ $cached_data = defined( 'FACTORY_ADVERTS_DEBUG' ) && FACTORY_ADVERTS_DEBUG ? false : get_option( $this->get_key() );
103
+
104
+ if ( empty( $cached_data ) || ! isset( $cached_data['expires'] ) || ! isset( $cached_data['content'] ) || empty( $cached_data['expires'] ) || $cached_data['expires'] <= current_time( 'timestamp' ) ) {
105
+ $data = $this->do_rest_request();
106
+
107
+ if ( ! empty( $data ) && isset( $data['content'] ) && isset( $data['expires'] ) ) {
108
+ update_option( $this->get_key(), $data );
109
+ }
110
+ } else {
111
+ $data = $cached_data;
112
+ }
113
+
114
+ return $data;
115
+ }
116
+
117
+ /**
118
+ * Get adverts content.
119
+ *
120
+ * @since 1.0.0 Added
121
+ *
122
+ * @return string
123
+ */
124
+ public function get_content() {
125
+ $content = '';
126
+
127
+ $data = $this->get_cache();
128
+
129
+ if ( $data && isset( $data['content'] ) ) {
130
+ $content = $data['content'];
131
+ }
132
+
133
+ return $content;
134
+ }
135
+
136
+ /**
137
+ * Performs rest api request.
138
+ *
139
+ * If defined WBCR_ADINSERTER_REST_URL, then data requested from the remote server.
140
+ * Otherwise data will be requested from the same server.
141
+ * Defined in boot.php
142
+ *
143
+ * In some case on the server (Apache) in the .htaccess must be set
144
+ * RewriteRule ^wp-json/(.*)[?](.*) /?rest_route=/$1&$2 [L]
145
+ *
146
+ * @since 1.0.0 Added
147
+ *
148
+ * @return mixed array(
149
+ * 'plugin' => 'wbcr_insert_php',
150
+ * 'content' => '<p></p>',
151
+ * 'expires' => 1563542199,
152
+ * );
153
+ */
154
+ private function do_rest_request() {
155
+ $empty_data = [
156
+ 'plugin' => $this->plugin_name,
157
+ 'content' => '',
158
+ 'expires' => current_time( 'timestamp' ) + 60 * 60,
159
+ ];
160
+
161
+ $url = site_url();
162
+ if ( defined( 'WBCR_ADINSERTER_REST_URL' ) && '' != WBCR_ADINSERTER_REST_URL ) {
163
+ $url = WBCR_ADINSERTER_REST_URL;
164
+ }
165
+
166
+ // Remote rest request
167
+ $url = rtrim( $url, '/' ) . '/wp-json' . self::FACTORY_ADVERTS_REST_ROUTE;
168
+ $url = add_query_arg( 'plugin', $this->plugin_name, $url );
169
+ $url = add_query_arg( 'position', $this->ad_position, $url );
170
+
171
+ $response = wp_remote_get( $url );
172
+
173
+ $code = wp_remote_retrieve_response_code( $response );
174
+ $body = wp_remote_retrieve_body( $response );
175
+ $data = (array) json_decode( $body );
176
+
177
+ return 200 == $code && $data && isset( $data['expires'] ) ? $data : $empty_data;
178
+ }
179
+
180
+ }
libs/factory/adverts/includes/class-base.php ADDED
@@ -0,0 +1,323 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WBCR\Factory_Adverts_102;
4
+
5
+ // Exit if accessed directly
6
+ if ( ! defined( 'ABSPATH' ) ) {
7
+ exit;
8
+ }
9
+
10
+ /**
11
+ * Base class for adverts module.
12
+ *
13
+ * Contains methods for retrieving banner data for a specific position.
14
+ * With this class user cat get advert content for a specific position.
15
+ * This class use functional design pattern.
16
+ *
17
+ * @author Alexander Vitkalov <nechin.va@gmail.com>
18
+ * @since 1.0.0 Added
19
+ * @package factory-adverts
20
+ * @copyright (c) 2019 Webcraftic Ltd
21
+ */
22
+ class Base {
23
+
24
+ /**
25
+ * Экзепляр плагина с которым взаимодействует этот модуль
26
+ *
27
+ * @author Alexander Kovalev <alex.kovalevv@gmail.com>
28
+ * @since 1.0.1
29
+ * @var \Wbcr_Factory420_Plugin
30
+ */
31
+ private $plugin;
32
+
33
+ /*
34
+ * Contain array data with the plugin information and the module settings.
35
+ * Mainly used to get the name of the plugin and how to get the adverts blocks.
36
+ *
37
+ * @since 1.0.0 Added
38
+ *
39
+ * @var array Example: array(
40
+ * 'prefix' => 'wbcr_inp_',
41
+ * 'plugin_name' => 'wbcr_insert_php',
42
+ * 'plugin_title' => 'Woody ad snippets',
43
+ * 'plugin_text_domain' => 'insert-php',
44
+ * 'dashboard_widget' => true,
45
+ * 'right_sidebar' => true,
46
+ * 'notice' => true,
47
+ * ...
48
+ * )
49
+ *
50
+ */
51
+ private $settings = [];
52
+
53
+ /**
54
+ * Экземпляр класса для работы API CreativeMotion
55
+ *
56
+ * @author Alexander Kovalev <alex.kovalevv@gmail.com>
57
+ * @since 1.0.1
58
+ * @var \WBCR\Factory_Adverts_102\Creative_Motion_API
59
+ */
60
+ private $api;
61
+
62
+ /**
63
+ * Сохраняем уже полученные данные, для объектного кеширования
64
+ *
65
+ * @author Alexander Kovalev <alex.kovalevv@gmail.com>
66
+ * @since 1.0.1
67
+ * @var array
68
+ */
69
+ private $placements = [];
70
+
71
+ /**
72
+ * @author Alexander Kovalev <alex.kovalevv@gmail.com>
73
+ * @since 1.0.1
74
+ * @var array
75
+ */
76
+ private $errors = [];
77
+
78
+ /**
79
+ * Wbcr_Factory_Adinserter constructor.
80
+ *
81
+ * - Store plugin information and settings.
82
+ * - Add filter and actions.
83
+ * - Include dashboard widget.
84
+ *
85
+ * @since 1.0.0 Added
86
+ *
87
+ * @param \Wbcr_Factory420_Plugin $plugin
88
+ */
89
+ public function __construct( \Wbcr_Factory420_Plugin $plugin, $settings ) {
90
+ $this->plugin = $plugin;
91
+
92
+ $this->settings = wp_parse_args( $settings, [
93
+ 'dashboard_widget' => false, // show dashboard widget (default: false)
94
+ 'right_sidebar' => false, // show adverts sidebar (default: false)
95
+ 'notice' => false, // show notice message (default: false),
96
+ 'business_suggetion' => false,
97
+ 'support' => false
98
+ ] );
99
+
100
+ $this->api = new Creative_Motion_API( $this->plugin );
101
+
102
+ add_filter( 'wbcr/factory/pages/impressive/widgets', [ $this, 'register_plugin_widgets' ], 10, 3 );
103
+ add_action( 'wbcr_factory_notices_000_list', [ $this, 'register_plugin_notice' ], 10, 2 );
104
+ add_action( 'current_screen', [ $this, 'register_dashboard_widget' ], 10, 2 );
105
+ }
106
+
107
+ /**
108
+ * Directly get advert content for selected position.
109
+ *
110
+ * @since 1.0.1 Rename method. Content should now be printed.
111
+ * @since 1.0.0 Added
112
+ *
113
+ * @param string $position Custom position name
114
+ *
115
+ * @return void
116
+ */
117
+ public function render_placement( $position = 'right_sidebar' ) {
118
+ $content = '';
119
+
120
+ if ( $position ) {
121
+ $content = $this->get_content( $position );
122
+ }
123
+
124
+ echo $content;
125
+ }
126
+
127
+ /**
128
+ * Register widgets.
129
+ *
130
+ * Depending on the settings, register new widgets.
131
+ *
132
+ * @since 1.0.0 Added
133
+ *
134
+ * @param array $widgets Already existing registered widgets
135
+ * @param string $position Position for the widget
136
+ * @param string $plugin Plugin object for which the hook is run
137
+ *
138
+ * @return array array(
139
+ * 'adverts_widget' => '<p></p>',
140
+ * 'business_suggetion' => '<p></p>',
141
+ * 'support' => '<p></p>',
142
+ * ...
143
+ * )
144
+ */
145
+ public function register_plugin_widgets( $widgets, $position, $plugin ) {
146
+ if ( $plugin->getPluginName() == $this->plugin->getPluginName() && 'right' == $position ) {
147
+
148
+ if ( $this->settings['right_sidebar'] ) {
149
+ $content = $this->get_content( 'right_sidebar' );
150
+ $widgets['adverts_widget'] = $content;
151
+
152
+ if ( empty( $widgets['adverts_widget'] ) ) {
153
+ if ( defined( 'FACTORY_ADVERTS_DEBUG' ) && FACTORY_ADVERTS_DEBUG ) {
154
+ $debug_message = '<div style="background: #fff4f1;padding: 10px;color: #a58074;">';
155
+ $debug_message .= $this->get_debug_message( 'right_sidebar' );
156
+ $debug_message .= '</div>';
157
+
158
+ $widgets['adverts_widget'] = $debug_message;
159
+ } else {
160
+ unset( $widgets['adverts_widget'] );
161
+ }
162
+ }
163
+ }
164
+
165
+ if ( $this->settings['business_suggetion'] ) {
166
+ $content = $this->get_content( 'business_suggetion' );
167
+
168
+ if ( ! empty( $content ) ) {
169
+ $widgets['business_suggetion'] = $content;
170
+ }
171
+ }
172
+
173
+ if ( $this->settings['support'] ) {
174
+ $content = $this->get_content( 'support' );
175
+
176
+ if ( ! empty( $content ) ) {
177
+ $widgets['support'] = $content;
178
+ }
179
+ }
180
+ }
181
+
182
+ return $widgets;
183
+ }
184
+
185
+ /**
186
+ * Регистрирует уведомление для текущего плагина
187
+ *
188
+ * Мы добавляем уведомления в массив всех уведомлений плагина с ключем 'adverts_notice',
189
+ * то есть если другие плагины, тоже добавят свои рекламные уведомления, они просто
190
+ * будут перезаписывать друг друга, в итоге будет отображено только одно рекламное
191
+ * уведомеление. Это нужно для того, чтобы ограничить пользователя от спама.
192
+ *
193
+ * @author Alexander Kovalev <alex.kovalevv@gmail.com>
194
+ *
195
+ * @since 1.0.1 Переделан полностью под интферфейс фреймворка. Используем встроенную систему уведомлений.
196
+ * @since 1.0.0 Added
197
+ *
198
+ * @param array $notices Массив со списком всех уведомлений, которые будут напечатыны в админ панели
199
+ * @param string $plugin_name Имя плагина, передано для того, чтобы выводить уведомления условно, только для конкретного плагина
200
+ */
201
+ public function register_plugin_notice( $notices, $plugin_name ) {
202
+ if ( $plugin_name !== $this->plugin->getPluginName() ) {
203
+ return $notices;
204
+ }
205
+
206
+ if ( $this->settings['notice'] ) {
207
+ $notice_content = $this->get_content( 'notice' );
208
+
209
+ if ( empty( $notice_content ) ) {
210
+ # Информация для отладки
211
+ if ( defined( 'FACTORY_ADVERTS_DEBUG' ) && FACTORY_ADVERTS_DEBUG ) {
212
+ $debug_message = $this->get_debug_message( 'notice' );
213
+
214
+ $notices['adverts_notice'] = [
215
+ 'id' => 'adverts_debug',
216
+ 'type' => 'error',
217
+ 'dismissible' => false,
218
+ 'where' => [ 'plugins', 'themes', 'dashboard', 'edit' ],
219
+ 'dismiss_expires' => 0,
220
+ 'text' => '<p><b>' . $this->plugin->getPluginTitle() . '</b>:<br>' . $debug_message . '</p>'
221
+ ];
222
+ }
223
+
224
+ return $notices;
225
+ }
226
+
227
+ $hash = md5( $notice_content );
228
+
229
+ $notices['adverts_notice'] = [
230
+ 'id' => 'adverts_' . $hash,
231
+ 'type' => 'success',
232
+ 'dismissible' => true,
233
+ 'where' => [ 'plugins', 'themes', 'dashboard', 'edit' ],
234
+ 'dismiss_expires' => 0,
235
+ 'text' => '<p><b>' . $this->plugin->getPluginTitle() . '</b>:<br>' . $notice_content . '</p>'
236
+ ];
237
+ }
238
+
239
+ return $notices;
240
+ }
241
+
242
+ /**
243
+ * Include dashboard widget
244
+ *
245
+ * Include functionality the output of the widget on the dashboard.
246
+ * Only one dashboard widget must be shown for some plugins with this setting (dashboard_widget).
247
+ *
248
+ * @since 1.0.0 Added
249
+ */
250
+ public function register_dashboard_widget() {
251
+ if ( $this->settings['dashboard_widget'] && current_user_can( 'manage_options' ) ) {
252
+ $current_screen = get_current_screen();
253
+
254
+ if ( 'dashboard' !== $current_screen->id ) {
255
+ return;
256
+ }
257
+
258
+ $content = $this->get_content( 'dashboard_widget' );
259
+
260
+ if ( empty( $content ) && defined( 'FACTORY_ADVERTS_DEBUG' ) && FACTORY_ADVERTS_DEBUG ) {
261
+ $content = $this->get_debug_message( 'dashboard_widget' );
262
+ }
263
+
264
+ require_once FACTORY_ADVERTS_102_DIR . '/includes/class-dashboard-widget.php';
265
+ new Dashboard_Widget( $this->plugin, $content );
266
+ }
267
+ }
268
+
269
+ /**
270
+ * Позволяет получить сообщение об ошибках
271
+ *
272
+ * Метод проверяет последние ошибки, которые могли произойти в результате api запроса.
273
+ * Если ошибки есть, он выводит предупреждение и список последних ошибок. Если ошибок нет,
274
+ * метод вернет просто предупреждение, что реклама не настроена.
275
+ *
276
+ * @author Alexander Kovalev <alex.kovalevv@gmail.com>
277
+ * @since 1.0.1
278
+ *
279
+ * @param string $position Position for the widget
280
+ *
281
+ * @return string Возвращает сообщение с последниеми ошибками для отладки
282
+ */
283
+ private function get_debug_message( $position ) {
284
+ $debug_massage = 'Plugin ads not configured or server unavailable. See full error report below.<br>';
285
+
286
+ if ( isset( $this->errors[ $position ] ) && ! empty( $this->errors ) ) {
287
+ $debug_massage .= '<b>Last errors:</b><br>';
288
+ foreach ( $this->errors[ $position ] as $error_code => $error_message ) {
289
+ $debug_massage .= 'Code: ' . $error_code . ' Error: ' . $error_message . '<br>';
290
+ }
291
+ }
292
+
293
+ return $debug_massage;
294
+ }
295
+
296
+ /**
297
+ * Get advert content for selected position.
298
+ *
299
+ * @since 1.0.1 Полностью переписан
300
+ * @since 1.0.0 Added
301
+ *
302
+ * @param string $position The position for advert
303
+ *
304
+ * @return string
305
+ */
306
+ private function get_content( $position ) {
307
+ if ( isset( $this->placements[ $position ] ) ) {
308
+ return $this->placements[ $position ];
309
+ }
310
+
311
+ $content = $this->api->get_content( $position );
312
+
313
+ if ( is_wp_error( $content ) ) {
314
+ $this->errors[ $position ][ $content->get_error_code() ] = $content->get_error_message();
315
+
316
+ return null;
317
+ }
318
+
319
+ $this->placements[ $position ] = $content;
320
+
321
+ return $content;
322
+ }
323
+ }
libs/factory/adverts/includes/class-dashboard-widget.php ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WBCR\Factory_Adverts_102;
4
+
5
+ // Exit if accessed directly
6
+ if ( ! defined( 'ABSPATH' ) ) {
7
+ exit;
8
+ }
9
+
10
+ /**
11
+ * Adverts Dashboard Widget.
12
+ *
13
+ * Adds a widget with a banner or a list of news.
14
+ *
15
+ * @author Alexander Vitkalov <nechin.va@gmail.com>
16
+ * @since 1.0.0 Added
17
+ * @package factory-adverts
18
+ * @copyright (c) 2019 Webcraftic Ltd
19
+ */
20
+ class Dashboard_Widget {
21
+
22
+ /**
23
+ * Контент, который должен быть напечатан внутри дашбоард виджета
24
+ *
25
+ * @author Alexander Kovalev <alex.kovalevv@gmail.com>
26
+ * @since 1.0.1
27
+ * @var string
28
+ */
29
+ private $content;
30
+
31
+ /**
32
+ * Экзепляр плагина с которым взаимодействует этот модуль
33
+ *
34
+ * @author Alexander Kovalev <alex.kovalevv@gmail.com>
35
+ * @since 1.0.1
36
+ * @var \Wbcr_Factory420_Plugin
37
+ */
38
+ private $plugin;
39
+
40
+ /**
41
+ * Dashboard_Widget constructor.
42
+ *
43
+ * Call parent constructor. Registration hooks.
44
+ *
45
+ * @since 1.0.0 Added
46
+ *
47
+ * @param \Wbcr_Factory420_Plugin $plugin
48
+ * @param string $content
49
+ */
50
+ public function __construct( \Wbcr_Factory420_Plugin $plugin, $content ) {
51
+
52
+ $this->plugin = $plugin;
53
+ $this->content = $content;
54
+
55
+ if ( ! empty( $this->content ) ) {
56
+ add_action( 'wp_dashboard_setup', [ $this, 'add_dashboard_widgets' ], 999 );
57
+ }
58
+ }
59
+
60
+ /**
61
+ * Add the News widget to the dashboard.
62
+ *
63
+ * @since 1.0.0 Added
64
+ */
65
+ public function add_dashboard_widgets() {
66
+ global $wp_meta_boxes;
67
+
68
+ $widget_id = 'wbcr-factory-adverts-widget';
69
+
70
+ wp_add_dashboard_widget( $widget_id, $this->plugin->getPluginTitle() . ' News', [
71
+ $this,
72
+ 'print_widget_content'
73
+ ] );
74
+
75
+ # Set dashboard widget first in order
76
+ $normal_core = $wp_meta_boxes['dashboard']['normal']['core'];
77
+ $widget_backup = [ $widget_id => $normal_core[ $widget_id ] ];
78
+ unset( $normal_core[ $widget_id ] );
79
+ $sorted_core = array_merge( $widget_backup, $normal_core );
80
+
81
+ $wp_meta_boxes['dashboard']['normal']['core'] = $sorted_core;
82
+ }
83
+
84
+ /**
85
+ * Create the function to output the contents of the Dashboard Widget.
86
+ *
87
+ * @since 1.0.0 Added
88
+ */
89
+ public function print_widget_content() {
90
+ ?>
91
+ <div class="wordpress-news hide-if-no-js">
92
+ <div class="rss-widget">
93
+ <?php echo $this->content; ?>
94
+ </div>
95
+ </div>
96
+ <?php
97
+
98
+ }
99
+ }
libs/factory/adverts/includes/class-rest-request.php ADDED
@@ -0,0 +1,197 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WBCR\Factory_Adverts_102;
4
+
5
+ // Exit if accessed directly
6
+ if ( ! defined( 'ABSPATH' ) ) {
7
+ exit;
8
+ }
9
+
10
+ /**
11
+ * Factory request class.
12
+ *
13
+ * Performs a server request, retrieves banner data and stores it in the cache.
14
+ *
15
+ * @author Alexander Kovalev <alex.kovalevv@gmail.com>
16
+ * @author Alexander Vitkalov <nechin.va@gmail.com>
17
+ *
18
+ * @since 1.0.1 Изменил имя класса и доработал его.
19
+ * @since 1.0.0 Added
20
+ *
21
+ * @package factory-adverts
22
+ * @copyright (c) 2019 Webcraftic Ltd
23
+ */
24
+ class Creative_Motion_API {
25
+
26
+ /**
27
+ * Rest request url.
28
+ *
29
+ * Define rest request url for rest request to remote server.
30
+ *
31
+ * @since 1.2.1
32
+ */
33
+ const SERVER_URL = 'https://api.cm-wp.com';
34
+
35
+ /**
36
+ * Rest route path.
37
+ *
38
+ * Define rest route path for rest request.
39
+ *
40
+ * @since 1.0.0
41
+ */
42
+ const REST_ROUTE = '/adverds/v1/advt';
43
+
44
+ /**
45
+ * Интервал между запросами по умолчанию
46
+ *
47
+ * Значение в часах.
48
+ *
49
+ * @since 1.0.1
50
+ */
51
+ const DEFAULT_REQUESTS_INTERVAL = 24;
52
+
53
+ /**
54
+ * Интервал между запросами, если сервер недоступен
55
+ *
56
+ * Значение в часах.
57
+ *
58
+ * @since 1.0.1
59
+ */
60
+ const SERVER_UNAVAILABLE_INTERVAL = 4;
61
+
62
+
63
+ /**
64
+ * Экзепляр плагина с которым взаимодействует этот модуль
65
+ *
66
+ * @author Alexander Kovalev <alex.kovalevv@gmail.com>
67
+ * @since 1.0.1
68
+ * @var \Wbcr_Factory420_Plugin
69
+ */
70
+ private $plugin;
71
+
72
+
73
+ /**
74
+ * Request constructor.
75
+ *
76
+ * Variable initialization.
77
+ *
78
+ * @since 1.0.0 Added
79
+ *
80
+ * @param \Wbcr_Factory420_Plugin $plugin_name
81
+ */
82
+ public function __construct( \Wbcr_Factory420_Plugin $plugin ) {
83
+ $this->plugin = $plugin;
84
+ }
85
+
86
+ /**
87
+ * Get adverts content.
88
+ *
89
+ * @author Alexander Kovalev <alex.kovalevv@gmail.com>
90
+ * @since 1.0.1
91
+ *
92
+ * @param $position
93
+ *
94
+ * @return string|\WP_Error
95
+ */
96
+ public function get_content( $position ) {
97
+ $data = $this->get_cache( $position );
98
+
99
+ if ( is_wp_error( $data ) ) {
100
+ return $data;
101
+ }
102
+
103
+ return strip_tags( $data['content'], '<b>,<a>,<i>,<strong>,<img>,<ul>,<ol>,<li>' );
104
+ }
105
+
106
+ /**
107
+ * Get data from cache.
108
+ *
109
+ * If data in the cache, not empty and not expired, then get data from cache. Or get data from server.
110
+ *
111
+ * @author Alexander Kovalev <alex.kovalevv@gmail.com>
112
+ *
113
+ * @since 1.0.1 Полностью переписан, с перехватом api ошибок
114
+ * @since 1.0.0 Added
115
+ *
116
+ * @return mixed array(
117
+ * 'plugin' => 'wbcr_insert_php',
118
+ * 'content' => '<p></p>',
119
+ * 'expires' => 1563542199,
120
+ * );
121
+ */
122
+ private function get_cache( $position ) {
123
+
124
+ if ( defined( 'FACTORY_ADVERTS_DEBUG' ) && FACTORY_ADVERTS_DEBUG ) {
125
+ return $this->do_api_request( $position );
126
+ }
127
+
128
+ $key = $this->plugin->getPrefix() . md5( $position . 'advert_transient_' );
129
+
130
+ $cached = get_transient( $key );
131
+
132
+ if ( $cached !== false ) {
133
+ if ( isset( $cached['error_code'] ) && isset( $cached['error'] ) ) {
134
+ return new \WP_Error( $cached['error_code'], $cached['error'] );
135
+ }
136
+
137
+ return $cached;
138
+ }
139
+
140
+ $data = $this->do_api_request( $position );
141
+
142
+ if ( is_wp_error( $data ) ) {
143
+ set_transient( $key, [
144
+ 'error' => $data->get_error_message(),
145
+ 'error_code' => $data->get_error_code()
146
+ ], self::SERVER_UNAVAILABLE_INTERVAL * HOUR_IN_SECONDS );
147
+
148
+ return $data;
149
+ }
150
+
151
+ set_transient( $key, $data, $data['expires'] );
152
+
153
+ return $data;
154
+ }
155
+
156
+ /**
157
+ * Performs rest api request.
158
+ *
159
+ * In some case on the server (Apache) in the .htaccess must be set
160
+ * RewriteRule ^wp-json/(.*)[?](.*) /?rest_route=/$1&$2 [L]
161
+ *
162
+ * @since 1.0.1 Добавлен перехват ошибок, рефакторинг кода.
163
+ * @since 1.0.0 Added
164
+ *
165
+ * @return mixed array(
166
+ * 'plugin' => 'wbcr_insert_php',
167
+ * 'content' => '<p></p>',
168
+ * 'expires' => 1563542199,
169
+ * );
170
+ */
171
+ private function do_api_request( $position ) {
172
+ $default_result = [
173
+ 'content' => '',
174
+ 'expires' => self::DEFAULT_REQUESTS_INTERVAL * HOUR_IN_SECONDS,
175
+ ];
176
+
177
+ $url = untrailingslashit( self::SERVER_URL ) . '/wp-json' . self::REST_ROUTE;
178
+ $url = add_query_arg( [ 'plugin' => $this->plugin->getPluginName(), 'position' => $position ], $url );
179
+
180
+ $response = wp_remote_get( $url );
181
+
182
+ $code = wp_remote_retrieve_response_code( $response );
183
+ $body = wp_remote_retrieve_body( $response );
184
+
185
+ $data = @json_decode( $body, true );
186
+
187
+ if ( is_wp_error( $response ) ) {
188
+ return $response;
189
+ }
190
+
191
+ if ( 200 !== $code ) {
192
+ return new \WP_Error( 'http_request_error', 'Failed request to the remote server. Code: ' . $code );
193
+ }
194
+
195
+ return wp_parse_args( $data, $default_result );
196
+ }
197
+ }
libs/factory/adverts/includes/index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ // Silence is golden.
libs/factory/adverts/index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ // Silence is golden.
libs/factory/adverts/langs/wbcr_factory_adverts_102-ru_RU.mo ADDED
Binary file
libs/factory/adverts/langs/wbcr_factory_adverts_102-ru_RU.po ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: factory_forms\n"
4
+ "POT-Creation-Date: 2018-10-16 22:44+0300\n"
5
+ "PO-Revision-Date: 2018-10-16 22:45+0300\n"
6
+ "Last-Translator: \n"
7
+ "Language-Team: Alex Kovalev <alex.kovalevv@gmail.com>\n"
8
+ "Language: ru_RU\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 2.1.1\n"
13
+ "X-Poedit-Basepath: ..\n"
14
+ "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
15
+ "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
16
+ "X-Poedit-SourceCharset: UTF-8\n"
17
+ "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c\n"
18
+ "X-Poedit-SearchPath-0: .\n"
19
+
20
+ #: includes/check-compatibility.php:80
21
+ msgid "warning"
22
+ msgstr "предупреждение"
23
+
24
+ #: includes/check-compatibility.php:82
25
+ #, php-format
26
+ msgid "The %s plugin has stopped."
27
+ msgstr "Работа плагина %s была остановлена."
28
+
29
+ #: includes/check-compatibility.php:83
30
+ msgid "Possible reasons:"
31
+ msgstr "Возможные причины:"
32
+
33
+ #: includes/check-compatibility.php:89
34
+ #, php-format
35
+ msgid "You need to update the PHP version to %s or higher!"
36
+ msgstr "Вам нужно обновить версию PHP до %s или выше!"
37
+
38
+ #: includes/check-compatibility.php:94
39
+ #, php-format
40
+ msgid "You need to update WordPress to %s or higher!"
41
+ msgstr "Вам нужно обновить WordPress до %s или выше!"
42
+
43
+ #: includes/functions.php:132
44
+ #, php-format
45
+ msgid ""
46
+ "%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead."
47
+ msgstr ""
48
+ "%1$s является <strong>устаревшим,</strong> начиная с версии %2$s в "
49
+ "Wordpress! Используйте %3$s."
50
+
51
+ #: includes/functions.php:134
52
+ #, php-format
53
+ msgid ""
54
+ "%1$s is <strong>deprecated</strong> since version %2$s with no alternative "
55
+ "available."
56
+ msgstr ""
57
+ "%1$s был вызван с параметром, который является <strong>устаревшими</strong> "
58
+ "начиная с версии %2$s , в настоящее время доступных альтернатив нет."
59
+
60
+ #: includes/plugin.class.php:202 includes/plugin.class.php:237
61
+ msgid ""
62
+ "You are trying to call this earlier than the plugin menu will be registered."
63
+ msgstr ""
64
+ "Вы пытаетесь вызвать это раньше, чем будет зарегистрировано меню плагина."
65
+
66
+ #: includes/plugin.class.php:220
67
+ msgid ""
68
+ "You are trying to get a link to a page that does not have multisite mode. "
69
+ "Clicking this link will lead the user to a non-existent page."
70
+ msgstr ""
71
+ "Вы пытаетесь получить ссылку на страницу, которая не имеет "
72
+ "многопользовательского режима. Щелчок по этой ссылке приведет пользователя "
73
+ "к несуществующей странице."
74
+
75
+ #: includes/plugin.class.php:222
76
+ msgid ""
77
+ "Trying to get a link to an unregistered page. You are trying to call this "
78
+ "earlier than the plugin menu will be registered."
79
+ msgstr ""
80
+ "Попытка получить ссылку на незарегистрированную страницу. Вы пытаетесь "
81
+ "вызвать это раньше, чем будет зарегистрировано меню плагина."
82
+
83
+
libs/factory/adverts/readme.txt ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === Plugin Name ===
2
+ Contributors: nechii
3
+ Tags: ad, advertisment, module
4
+ Requires at least: 4.2
5
+ Tested up to: 5.2
6
+ Stable tag: 1.2.0
7
+ Requires PHP: 5.4
8
+
9
+ Module adds ad units to plugins.
10
+
11
+ == Description ==
12
+
13
+ The module allows you to add the specified ad blocks to the plugins.
14
+
15
+ Managing and storing the content of each block occurs in special side plugin.
16
+
17
+ To add the necessary blocks, you need to add the following code to the main plugin file:
18
+ if ( is_admin() ) {
19
+ global $wbcr_plugin_name_adinserter;
20
+
21
+ $wbcr_plugin_name_adinserter = new WBCR\Factory_Adverts_000\Base(
22
+ __FILE__,
23
+ array_merge(
24
+ $plugin_info,
25
+ array(
26
+ 'dashboard_widget' => true, // show dashboard widget (default: false)
27
+ 'right_sidebar' => true, // show adverts sidebar (default: false)
28
+ 'notice' => true, // show notice message (default: false)
29
+ )
30
+ )
31
+ );
32
+ }
33
+ In this example, three ad blocks will be added: dashboard_widget, right_sidebar and notice.
34
+
35
+ It is possible to add an ad block manually. To do this, in the specific place of the code you need to insert the following code:
36
+ global $wbcr_plugin_name_adinserter;
37
+ echo $wbcr_plugin_name_adinserter->get_adverts( 'right_sidebar' );
38
+ In this example will be displayed content for ad block 'right_sidebar';
39
+
40
+ == Changelog ==
41
+
42
+ = 1.2.3 =
43
+ * Set dashboard widget first in order
44
+
45
+ = 1.2.2 =
46
+ * Changed the name of a global variable and its use rule
47
+
48
+ = 1.2.1 =
49
+ * Moved constant for rest request url from wp-config.php to boot.php
50
+
51
+ = 1.2.0 =
52
+ * Removed rest request. Only get request available.
53
+ * Cleaning and refactoring code.
54
+
55
+ = 1.1.0 =
56
+ * Add new notice functions.
57
+ * Cleaning and refactoring code.
58
+
59
+ = 1.0.0 =
60
+ * Cleaning and refactoring code.
61
+ * Add doc blocks.
62
+ * Some fixes and changes.
63
+
64
+ = 0.9.0 =
65
+ * Added new blocks.
66
+ * Fixed widget functions.
67
+
68
+ = 0.8.0 =
69
+ * Added notice block.
70
+ * Added constants for unique dashboard notice.
71
+ * Fixed widget functions.
72
+
73
+ = 0.7.0 =
74
+ * Added constants for unique dashboard widget.
75
+ * Fixed widget functions.
76
+
77
+ = 0.6.0 =
78
+ * Improve widget functions.
79
+ * Fixed cache functions.
80
+
81
+ = 0.5.0 =
82
+ * Added default rest response.
83
+ * Fixed rest request.
84
+
85
+ = 0.4.0 =
86
+ * Fixed rest request response.
87
+ * Fixed base functions.
88
+
89
+ = 0.3.0 =
90
+ * Improve rest request.
91
+ * Fixed requests functions.
92
+
93
+ = 0.2.0 =
94
+ * Added expiration time for cached data.
95
+ * Fixed cache functions.
96
+
97
+ = 0.1.0 =
98
+ * Version with base functions.
libs/factory/bootstrap/assets/css-min/bootstrap.accordion.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .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-421 .factory-accordion>h3{border-bottom:1px solid #DDD;cursor:pointer;padding:8px 15px;margin:0}.factory-bootstrap-421 .factory-accordion>div{display:none;margin:0;border-bottom:1px solid #DDD}.factory-bootstrap-421 .factory-accordion-item{display:none}.factory-bootstrap-421 .inner-factory-accordion-item{padding:10px 0}.factory-bootstrap-421 .factory-accordion>h3.active:hover{cursor:default}
libs/factory/bootstrap/assets/css-min/bootstrap.blue.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .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-421 .btn-primary:focus,.factory-bootstrap-421 .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-421 .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-421 .btn-primary:disabled,.factory-bootstrap-421 .btn-primary[disabled]{color:#d1cdc7!important;background:#db9825!important;border-color:#bd831f!important;text-shadow:none!important}.factory-bootstrap-421 .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-421 .pagination>.active>a,.factory-bootstrap-421 .pagination>.active>a:focus,.factory-bootstrap-421 .pagination>.active>a:hover,.factory-bootstrap-421 .pagination>.active>span,.factory-bootstrap-421 .pagination>.active>span:focus,.factory-bootstrap-421 .pagination>.active>span:hover{background-color:#e1a948;border-color:#d39323}
libs/factory/bootstrap/assets/css-min/bootstrap.coffee.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .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-421 .btn-primary:focus,.factory-bootstrap-421 .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-421 .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-421 .btn-primary:disabled,.factory-bootstrap-421 .btn-primary[disabled]{color:#d1cbc7!important;background:#ba906d!important;border-color:#ae7d55!important;text-shadow:none!important}.factory-bootstrap-421 .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-421 .pagination>.active>a,.factory-bootstrap-421 .pagination>.active>a:focus,.factory-bootstrap-421 .pagination>.active>a:hover,.factory-bootstrap-421 .pagination>.active>span,.factory-bootstrap-421 .pagination>.active>span:focus,.factory-bootstrap-421 .pagination>.active>span:hover{background-color:#c7a589;border-color:#b78a66}
libs/factory/bootstrap/assets/css-min/bootstrap.core.min.css ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 article,.factory-bootstrap-421 aside,.factory-bootstrap-421 details,.factory-bootstrap-421 figcaption,.factory-bootstrap-421 figure,.factory-bootstrap-421 footer,.factory-bootstrap-421 header,.factory-bootstrap-421 hgroup,.factory-bootstrap-421 main,.factory-bootstrap-421 nav,.factory-bootstrap-421 section,.factory-bootstrap-421 summary{display:block}.factory-bootstrap-421 audio,.factory-bootstrap-421 canvas,.factory-bootstrap-421 video{display:inline-block}.factory-bootstrap-421 audio:not([controls]){display:none;height:0}.factory-bootstrap-421 [hidden],.factory-bootstrap-421 template{display:none}.factory-bootstrap-421 body{margin:0}.factory-bootstrap-421 a{background:0 0}.factory-bootstrap-421 a:focus{outline:thin dotted}.factory-bootstrap-421 a:active,.factory-bootstrap-421 a:hover{outline:0}.factory-bootstrap-421 h1{margin:.67em 0}.factory-bootstrap-421 b,.factory-bootstrap-421 strong{font-weight:700}.factory-bootstrap-421 dfn{font-style:italic}.factory-bootstrap-421 hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}.factory-bootstrap-421 mark{color:#000;background:#ff0}.factory-bootstrap-421 code,.factory-bootstrap-421 kbd,.factory-bootstrap-421 pre,.factory-bootstrap-421 samp{font-size:1em}.factory-bootstrap-421 pre{white-space:pre-wrap}.factory-bootstrap-421 q{quotes:"\201C" "\201D" "\2018" "\2019"}.factory-bootstrap-421 sub,.factory-bootstrap-421 sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}.factory-bootstrap-421 sup{top:-.5em}.factory-bootstrap-421 sub{bottom:-.25em}.factory-bootstrap-421 img{border:0}.factory-bootstrap-421 svg:not(:root){overflow:hidden}.factory-bootstrap-421 figure{margin:0}.factory-bootstrap-421 button,.factory-bootstrap-421 input,.factory-bootstrap-421 select,.factory-bootstrap-421 textarea{margin:0}.factory-bootstrap-421 button,.factory-bootstrap-421 select{text-transform:none}.factory-bootstrap-421 select{padding-right:4px!important}.factory-bootstrap-421 button,.factory-bootstrap-421 input[type=reset],.factory-bootstrap-421 input[type=submit],html .factory-bootstrap-421 input[type=button]{cursor:pointer;-webkit-appearance:button}.factory-bootstrap-421 button[disabled],html .factory-bootstrap-421 input[disabled]{cursor:default}.factory-bootstrap-421 input[type=checkbox],.factory-bootstrap-421 input[type=radio]{padding:0;box-sizing:border-box}.factory-bootstrap-421 input[type=search]{-webkit-appearance:textfield}.factory-bootstrap-421 input[type=search]::-webkit-search-cancel-button,.factory-bootstrap-421 input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.factory-bootstrap-421 button::-moz-focus-inner,.factory-bootstrap-421 input::-moz-focus-inner{padding:0;border:0}.factory-bootstrap-421 textarea{overflow:auto;vertical-align:top}.factory-bootstrap-421 table{border-collapse:collapse;border-spacing:0}@media print{.factory-bootstrap-421 *{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}.factory-bootstrap-421 a,.factory-bootstrap-421 a:visited{text-decoration:underline}.factory-bootstrap-421 a[href]:after{content:" (" attr(href) ")"}.factory-bootstrap-421 abbr[title]:after{content:" (" attr(title) ")"}.factory-bootstrap-421 a[href^="javascript:"]:after,.factory-bootstrap-421 a[href^="#"]:after{content:""}.factory-bootstrap-421 blockquote,.factory-bootstrap-421 pre{border:1px solid #999;page-break-inside:avoid}.factory-bootstrap-421 thead{display:table-header-group}.factory-bootstrap-421 img,.factory-bootstrap-421 tr{page-break-inside:avoid}.factory-bootstrap-421 img{max-width:100%!important}@page{margin:2cm .5cm}.factory-bootstrap-421 h2,.factory-bootstrap-421 h3,.factory-bootstrap-421 p{orphans:3;widows:3}.factory-bootstrap-421 h2,.factory-bootstrap-421 h3{page-break-after:avoid}.factory-bootstrap-421 select{background:#fff!important}.factory-bootstrap-421 .navbar{display:none}.factory-bootstrap-421 .table td,.factory-bootstrap-421 .table th{background-color:#fff!important}.factory-bootstrap-421 .btn>.caret,.factory-bootstrap-421 .dropup>.btn>.caret{border-top-color:#000!important}.factory-bootstrap-421 .label{border:1px solid #000}.factory-bootstrap-421 .table{border-collapse:collapse!important}.factory-bootstrap-421 .table-bordered td,.factory-bootstrap-421 .table-bordered th{border:1px solid #ddd!important}}.factory-bootstrap-421 *,.factory-bootstrap-421 :after,.factory-bootstrap-421 :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html .factory-bootstrap-421{-webkit-tap-highlight-color:rgba(0,0,0,0)}.factory-bootstrap-421 body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}.factory-bootstrap-421 button,.factory-bootstrap-421 input,.factory-bootstrap-421 select,.factory-bootstrap-421 textarea{font-family:inherit;font-size:inherit;line-height:inherit}.factory-bootstrap-421 img{vertical-align:middle}.factory-bootstrap-421 .img-responsive{display:block;height:auto;max-width:100%}.factory-bootstrap-421 .img-rounded{border-radius:6px}.factory-bootstrap-421 .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-421 .img-circle{border-radius:50%}.factory-bootstrap-421 hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.factory-bootstrap-421 .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.factory-bootstrap-421 .h1,.factory-bootstrap-421 .h2,.factory-bootstrap-421 .h3,.factory-bootstrap-421 .h4,.factory-bootstrap-421 .h5,.factory-bootstrap-421 .h6,.factory-bootstrap-421 h1,.factory-bootstrap-421 h2,.factory-bootstrap-421 h3,.factory-bootstrap-421 h4,.factory-bootstrap-421 h5,.factory-bootstrap-421 h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1;color:inherit}.factory-bootstrap-421 .h1 .small,.factory-bootstrap-421 .h1 small,.factory-bootstrap-421 .h2 .small,.factory-bootstrap-421 .h2 small,.factory-bootstrap-421 .h3 .small,.factory-bootstrap-421 .h3 small,.factory-bootstrap-421 .h4 .small,.factory-bootstrap-421 .h4 small,.factory-bootstrap-421 .h5 .small,.factory-bootstrap-421 .h5 small,.factory-bootstrap-421 .h6 .small,.factory-bootstrap-421 .h6 small,.factory-bootstrap-421 h1 .small,.factory-bootstrap-421 h1 small,.factory-bootstrap-421 h2 .small,.factory-bootstrap-421 h2 small,.factory-bootstrap-421 h3 .small,.factory-bootstrap-421 h3 small,.factory-bootstrap-421 h4 .small,.factory-bootstrap-421 h4 small,.factory-bootstrap-421 h5 .small,.factory-bootstrap-421 h5 small,.factory-bootstrap-421 h6 .small,.factory-bootstrap-421 h6 small{font-weight:400;line-height:1;color:#999}.factory-bootstrap-421 h1,.factory-bootstrap-421 h2,.factory-bootstrap-421 h3{margin-top:20px;margin-bottom:10px}.factory-bootstrap-421 h1 .small,.factory-bootstrap-421 h1 small,.factory-bootstrap-421 h2 .small,.factory-bootstrap-421 h2 small,.factory-bootstrap-421 h3 .small,.factory-bootstrap-421 h3 small{font-size:65%}.factory-bootstrap-421 h4,.factory-bootstrap-421 h5,.factory-bootstrap-421 h6{margin-top:10px;margin-bottom:10px}.factory-bootstrap-421 h4 .small,.factory-bootstrap-421 h4 small,.factory-bootstrap-421 h5 .small,.factory-bootstrap-421 h5 small,.factory-bootstrap-421 h6 .small,.factory-bootstrap-421 h6 small{font-size:75%}.factory-bootstrap-421 .h1,.factory-bootstrap-421 h1{font-size:36px}.factory-bootstrap-421 .h2,.factory-bootstrap-421 h2{font-size:30px}.factory-bootstrap-421 .h3,.factory-bootstrap-421 h3{font-size:24px}.factory-bootstrap-421 .h4,.factory-bootstrap-421 h4{font-size:18px}.factory-bootstrap-421 .h5,.factory-bootstrap-421 h5{font-size:14px}.factory-bootstrap-421 .h6,.factory-bootstrap-421 h6{font-size:12px}.factory-bootstrap-421 p{margin:0 0 10px}.factory-bootstrap-421 .lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.factory-bootstrap-421 .small,.factory-bootstrap-421 small{font-size:85%}.factory-bootstrap-421 cite{font-style:normal}.factory-bootstrap-421 .text-muted{color:#999}.factory-bootstrap-421 .text-primary{color:#428bca}.factory-bootstrap-421 .text-primary:hover{color:#3071a9}.factory-bootstrap-421 .text-warning{color:#8a6d3b}.factory-bootstrap-421 .text-warning:hover{color:#66512c}.factory-bootstrap-421 .text-danger{color:#a94442}.factory-bootstrap-421 .text-danger:hover{color:#843534}.factory-bootstrap-421 .text-success{color:#3c763d}.factory-bootstrap-421 .text-success:hover{color:#2b542c}.factory-bootstrap-421 .text-info{color:#31708f}.factory-bootstrap-421 .text-info:hover{color:#245269}.factory-bootstrap-421 .text-left{text-align:left}.factory-bootstrap-421 .text-right{text-align:right}.factory-bootstrap-421 .text-center{text-align:center}.factory-bootstrap-421 .page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}.factory-bootstrap-421 ol,.factory-bootstrap-421 ul{margin-top:0;margin-bottom:10px}.factory-bootstrap-421 ol ol,.factory-bootstrap-421 ol ul,.factory-bootstrap-421 ul ol,.factory-bootstrap-421 ul ul{margin-bottom:0}.factory-bootstrap-421 .list-inline,.factory-bootstrap-421 .list-unstyled{padding-left:0;list-style:none}.factory-bootstrap-421 .list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}.factory-bootstrap-421 .list-inline>li:first-child{padding-left:0}.factory-bootstrap-421 dl{margin-top:0;margin-bottom:20px}.factory-bootstrap-421 dd,.factory-bootstrap-421 dt{line-height:1.428571429}.factory-bootstrap-421 dt{font-weight:700}.factory-bootstrap-421 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-421 abbr[data-original-title],.factory-bootstrap-421 abbr[title]{cursor:help;border-bottom:1px dotted #999}.factory-bootstrap-421 .initialism{font-size:90%;text-transform:uppercase}.factory-bootstrap-421 blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}.factory-bootstrap-421 blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}.factory-bootstrap-421 blockquote p:last-child{margin-bottom:0}.factory-bootstrap-421 blockquote .small,.factory-bootstrap-421 blockquote small{display:block;line-height:1.428571429;color:#999}.factory-bootstrap-421 blockquote .small:before,.factory-bootstrap-421 blockquote small:before{content:'\2014 \00A0'}.factory-bootstrap-421 blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}.factory-bootstrap-421 blockquote.pull-right .small,.factory-bootstrap-421 blockquote.pull-right p,.factory-bootstrap-421 blockquote.pull-right small{text-align:right}.factory-bootstrap-421 blockquote.pull-right .small:before,.factory-bootstrap-421 blockquote.pull-right small:before{content:''}.factory-bootstrap-421 blockquote.pull-right .small:after,.factory-bootstrap-421 blockquote.pull-right small:after{content:'\00A0 \2014'}.factory-bootstrap-421 blockquote:after,.factory-bootstrap-421 blockquote:before{content:""}.factory-bootstrap-421 address{margin-bottom:20px;font-style:normal;line-height:1.428571429}.factory-bootstrap-421 code,.factory-bootstrap-421 kbd,.factory-bootstrap-421 pre,.factory-bootstrap-421 samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}.factory-bootstrap-421 code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}.factory-bootstrap-421 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-421 pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.factory-bootstrap-421 .pre-scrollable{max-height:340px;overflow-y:scroll}.factory-bootstrap-421 .container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.factory-bootstrap-421 .container:after,.factory-bootstrap-421 .container:before{display:table;content:" "}.factory-bootstrap-421 .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-421 .row{margin-right:-15px;margin-left:-15px}.factory-bootstrap-421 .row:after,.factory-bootstrap-421 .row:before{display:table;content:" "}.factory-bootstrap-421 .row:after{clear:both}.factory-bootstrap-421 .col-lg-1,.factory-bootstrap-421 .col-lg-10,.factory-bootstrap-421 .col-lg-11,.factory-bootstrap-421 .col-lg-12,.factory-bootstrap-421 .col-lg-2,.factory-bootstrap-421 .col-lg-3,.factory-bootstrap-421 .col-lg-4,.factory-bootstrap-421 .col-lg-5,.factory-bootstrap-421 .col-lg-6,.factory-bootstrap-421 .col-lg-7,.factory-bootstrap-421 .col-lg-8,.factory-bootstrap-421 .col-lg-9,.factory-bootstrap-421 .col-md-1,.factory-bootstrap-421 .col-md-10,.factory-bootstrap-421 .col-md-11,.factory-bootstrap-421 .col-md-12,.factory-bootstrap-421 .col-md-2,.factory-bootstrap-421 .col-md-3,.factory-bootstrap-421 .col-md-4,.factory-bootstrap-421 .col-md-5,.factory-bootstrap-421 .col-md-6,.factory-bootstrap-421 .col-md-7,.factory-bootstrap-421 .col-md-8,.factory-bootstrap-421 .col-md-9,.factory-bootstrap-421 .col-sm-1,.factory-bootstrap-421 .col-sm-10,.factory-bootstrap-421 .col-sm-11,.factory-bootstrap-421 .col-sm-12,.factory-bootstrap-421 .col-sm-2,.factory-bootstrap-421 .col-sm-3,.factory-bootstrap-421 .col-sm-4,.factory-bootstrap-421 .col-sm-5,.factory-bootstrap-421 .col-sm-6,.factory-bootstrap-421 .col-sm-7,.factory-bootstrap-421 .col-sm-8,.factory-bootstrap-421 .col-sm-9,.factory-bootstrap-421 .col-xs-1,.factory-bootstrap-421 .col-xs-10,.factory-bootstrap-421 .col-xs-11,.factory-bootstrap-421 .col-xs-12,.factory-bootstrap-421 .col-xs-2,.factory-bootstrap-421 .col-xs-3,.factory-bootstrap-421 .col-xs-4,.factory-bootstrap-421 .col-xs-5,.factory-bootstrap-421 .col-xs-6,.factory-bootstrap-421 .col-xs-7,.factory-bootstrap-421 .col-xs-8,.factory-bootstrap-421 .col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.factory-bootstrap-421 .col-xs-1,.factory-bootstrap-421 .col-xs-10,.factory-bootstrap-421 .col-xs-11,.factory-bootstrap-421 .col-xs-12,.factory-bootstrap-421 .col-xs-2,.factory-bootstrap-421 .col-xs-3,.factory-bootstrap-421 .col-xs-4,.factory-bootstrap-421 .col-xs-5,.factory-bootstrap-421 .col-xs-6,.factory-bootstrap-421 .col-xs-7,.factory-bootstrap-421 .col-xs-8,.factory-bootstrap-421 .col-xs-9{float:left}.factory-bootstrap-421 .col-xs-12{width:100%}.factory-bootstrap-421 .col-xs-11{width:91.66666666666666%}.factory-bootstrap-421 .col-xs-10{width:83.33333333333334%}.factory-bootstrap-421 .col-xs-9{width:75%}.factory-bootstrap-421 .col-xs-8{width:66.66666666666666%}.factory-bootstrap-421 .col-xs-7{width:58.333333333333336%}.factory-bootstrap-421 .col-xs-6{width:50%}.factory-bootstrap-421 .col-xs-5{width:41.66666666666667%}.factory-bootstrap-421 .col-xs-4{width:33.33333333333333%}.factory-bootstrap-421 .col-xs-3{width:25%}.factory-bootstrap-421 .col-xs-2{width:16.666666666666664%}.factory-bootstrap-421 .col-xs-1{width:8.333333333333332%}.factory-bootstrap-421 .col-xs-pull-12{right:100%}.factory-bootstrap-421 .col-xs-pull-11{right:91.66666666666666%}.factory-bootstrap-421 .col-xs-pull-10{right:83.33333333333334%}.factory-bootstrap-421 .col-xs-pull-9{right:75%}.factory-bootstrap-421 .col-xs-pull-8{right:66.66666666666666%}.factory-bootstrap-421 .col-xs-pull-7{right:58.333333333333336%}.factory-bootstrap-421 .col-xs-pull-6{right:50%}.factory-bootstrap-421 .col-xs-pull-5{right:41.66666666666667%}.factory-bootstrap-421 .col-xs-pull-4{right:33.33333333333333%}.factory-bootstrap-421 .col-xs-pull-3{right:25%}.factory-bootstrap-421 .col-xs-pull-2{right:16.666666666666664%}.factory-bootstrap-421 .col-xs-pull-1{right:8.333333333333332%}.factory-bootstrap-421 .col-xs-pull-0{right:0}.factory-bootstrap-421 .col-xs-push-12{left:100%}.factory-bootstrap-421 .col-xs-push-11{left:91.66666666666666%}.factory-bootstrap-421 .col-xs-push-10{left:83.33333333333334%}.factory-bootstrap-421 .col-xs-push-9{left:75%}.factory-bootstrap-421 .col-xs-push-8{left:66.66666666666666%}.factory-bootstrap-421 .col-xs-push-7{left:58.333333333333336%}.factory-bootstrap-421 .col-xs-push-6{left:50%}.factory-bootstrap-421 .col-xs-push-5{left:41.66666666666667%}.factory-bootstrap-421 .col-xs-push-4{left:33.33333333333333%}.factory-bootstrap-421 .col-xs-push-3{left:25%}.factory-bootstrap-421 .col-xs-push-2{left:16.666666666666664%}.factory-bootstrap-421 .col-xs-push-1{left:8.333333333333332%}.factory-bootstrap-421 .col-xs-push-0{left:0}.factory-bootstrap-421 .col-xs-offset-12{margin-left:100%}.factory-bootstrap-421 .col-xs-offset-11{margin-left:91.66666666666666%}.factory-bootstrap-421 .col-xs-offset-10{margin-left:83.33333333333334%}.factory-bootstrap-421 .col-xs-offset-9{margin-left:75%}.factory-bootstrap-421 .col-xs-offset-8{margin-left:66.66666666666666%}.factory-bootstrap-421 .col-xs-offset-7{margin-left:58.333333333333336%}.factory-bootstrap-421 .col-xs-offset-6{margin-left:50%}.factory-bootstrap-421 .col-xs-offset-5{margin-left:41.66666666666667%}.factory-bootstrap-421 .col-xs-offset-4{margin-left:33.33333333333333%}.factory-bootstrap-421 .col-xs-offset-3{margin-left:25%}.factory-bootstrap-421 .col-xs-offset-2{margin-left:16.666666666666664%}.factory-bootstrap-421 .col-xs-offset-1{margin-left:8.333333333333332%}.factory-bootstrap-421 .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-421 table{max-width:100%;background-color:transparent}.factory-bootstrap-421 th{text-align:left}.factory-bootstrap-421 .table{width:100%;margin-bottom:20px}.factory-bootstrap-421 .table>tbody>tr>td,.factory-bootstrap-421 .table>tbody>tr>th,.factory-bootstrap-421 .table>tfoot>tr>td,.factory-bootstrap-421 .table>tfoot>tr>th,.factory-bootstrap-421 .table>thead>tr>td,.factory-bootstrap-421 .table>thead>tr>th{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.factory-bootstrap-421 .table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.factory-bootstrap-421 .table>caption+thead>tr:first-child>td,.factory-bootstrap-421 .table>caption+thead>tr:first-child>th,.factory-bootstrap-421 .table>colgroup+thead>tr:first-child>td,.factory-bootstrap-421 .table>colgroup+thead>tr:first-child>th,.factory-bootstrap-421 .table>thead:first-child>tr:first-child>td,.factory-bootstrap-421 .table>thead:first-child>tr:first-child>th{border-top:0}.factory-bootstrap-421 .table>tbody+tbody{border-top:2px solid #ddd}.factory-bootstrap-421 .table .table{background-color:#fff}.factory-bootstrap-421 .table-condensed>tbody>tr>td,.factory-bootstrap-421 .table-condensed>tbody>tr>th,.factory-bootstrap-421 .table-condensed>tfoot>tr>td,.factory-bootstrap-421 .table-condensed>tfoot>tr>th,.factory-bootstrap-421 .table-condensed>thead>tr>td,.factory-bootstrap-421 .table-condensed>thead>tr>th{padding:5px}.factory-bootstrap-421 .table-bordered,.factory-bootstrap-421 .table-bordered>tbody>tr>td,.factory-bootstrap-421 .table-bordered>tbody>tr>th,.factory-bootstrap-421 .table-bordered>tfoot>tr>td,.factory-bootstrap-421 .table-bordered>tfoot>tr>th,.factory-bootstrap-421 .table-bordered>thead>tr>td,.factory-bootstrap-421 .table-bordered>thead>tr>th{border:1px solid #ddd}.factory-bootstrap-421 .table-bordered>thead>tr>td,.factory-bootstrap-421 .table-bordered>thead>tr>th{border-bottom-width:2px}.factory-bootstrap-421 .table-striped>tbody>tr:nth-child(odd)>td,.factory-bootstrap-421 .table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.factory-bootstrap-421 .table-hover>tbody>tr:hover>td,.factory-bootstrap-421 .table-hover>tbody>tr:hover>th{background-color:#f5f5f5}.factory-bootstrap-421 table col[class*=col-]{position:static;display:table-column;float:none}.factory-bootstrap-421 table td[class*=col-],.factory-bootstrap-421 table th[class*=col-]{display:table-cell;float:none}.factory-bootstrap-421 .table>tbody>.active>td,.factory-bootstrap-421 .table>tbody>.active>th,.factory-bootstrap-421 .table>tbody>tr>.active,.factory-bootstrap-421 .table>tfoot>.active>td,.factory-bootstrap-421 .table>tfoot>.active>th,.factory-bootstrap-421 .table>tfoot>tr>.active,.factory-bootstrap-421 .table>thead>.active>td,.factory-bootstrap-421 .table>thead>.active>th,.factory-bootstrap-421 .table>thead>tr>.active{background-color:#f5f5f5}.factory-bootstrap-421 .table-hover>tbody>.active:hover>td,.factory-bootstrap-421 .table-hover>tbody>.active:hover>th,.factory-bootstrap-421 .table-hover>tbody>tr>.active:hover{background-color:#e8e8e8}.factory-bootstrap-421 .table>tbody>.success>td,.factory-bootstrap-421 .table>tbody>.success>th,.factory-bootstrap-421 .table>tbody>tr>.success,.factory-bootstrap-421 .table>tfoot>.success>td,.factory-bootstrap-421 .table>tfoot>.success>th,.factory-bootstrap-421 .table>tfoot>tr>.success,.factory-bootstrap-421 .table>thead>.success>td,.factory-bootstrap-421 .table>thead>.success>th,.factory-bootstrap-421 .table>thead>tr>.success{background-color:#dff0d8}.factory-bootstrap-421 .table-hover>tbody>.success:hover>td,.factory-bootstrap-421 .table-hover>tbody>.success:hover>th,.factory-bootstrap-421 .table-hover>tbody>tr>.success:hover{background-color:#d0e9c6}.factory-bootstrap-421 .table>tbody>.danger>td,.factory-bootstrap-421 .table>tbody>.danger>th,.factory-bootstrap-421 .table>tbody>tr>.danger,.factory-bootstrap-421 .table>tfoot>.danger>td,.factory-bootstrap-421 .table>tfoot>.danger>th,.factory-bootstrap-421 .table>tfoot>tr>.danger,.factory-bootstrap-421 .table>thead>.danger>td,.factory-bootstrap-421 .table>thead>.danger>th,.factory-bootstrap-421 .table>thead>tr>.danger{background-color:#f2dede}.factory-bootstrap-421 .table-hover>tbody>.danger:hover>td,.factory-bootstrap-421 .table-hover>tbody>.danger:hover>th,.factory-bootstrap-421 .table-hover>tbody>tr>.danger:hover{background-color:#ebcccc}.factory-bootstrap-421 .table>tbody>.warning>td,.factory-bootstrap-421 .table>tbody>.warning>th,.factory-bootstrap-421 .table>tbody>tr>.warning,.factory-bootstrap-421 .table>tfoot>.warning>td,.factory-bootstrap-421 .table>tfoot>.warning>th,.factory-bootstrap-421 .table>tfoot>tr>.warning,.factory-bootstrap-421 .table>thead>.warning>td,.factory-bootstrap-421 .table>thead>.warning>th,.factory-bootstrap-421 .table>thead>tr>.warning{background-color:#fcf8e3}.factory-bootstrap-421 .table-hover>tbody>.warning:hover>td,.factory-bootstrap-421 .table-hover>tbody>.warning:hover>th,.factory-bootstrap-421 .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-421 fieldset{padding:0;margin:0;border:0}.factory-bootstrap-421 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-421 label{display:inline-block;margin-bottom:5px;font-weight:700}.factory-bootstrap-421 input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.factory-bootstrap-421 input[type=checkbox],.factory-bootstrap-421 input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}.factory-bootstrap-421 input[type=file]{display:block}.factory-bootstrap-421 select[multiple],.factory-bootstrap-421 select[size]{height:auto}.factory-bootstrap-421 select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}.factory-bootstrap-421 input[type=checkbox]:focus,.factory-bootstrap-421 input[type=file]:focus,.factory-bootstrap-421 input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-421 input[type=number]::-webkit-inner-spin-button,.factory-bootstrap-421 input[type=number]::-webkit-outer-spin-button{height:auto}.factory-bootstrap-421 output{display:block;padding-top:7px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle}.factory-bootstrap-421 .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-421 .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-421 .form-control:-moz-placeholder{color:#999}.factory-bootstrap-421 .form-control::-moz-placeholder{color:#999;opacity:1}.factory-bootstrap-421 .form-control:-ms-input-placeholder{color:#999}.factory-bootstrap-421 .form-control::-webkit-input-placeholder{color:#999}.factory-bootstrap-421 .form-control[disabled],.factory-bootstrap-421 .form-control[readonly],.factory-bootstrap-421 fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}.factory-bootstrap-421 textarea.form-control{height:auto}.factory-bootstrap-421 .form-group{margin-bottom:15px}.factory-bootstrap-421 .checkbox,.factory-bootstrap-421 .radio{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.factory-bootstrap-421 .checkbox label,.factory-bootstrap-421 .radio label{display:inline;margin-bottom:0;font-weight:400;cursor:pointer}.factory-bootstrap-421 .checkbox input[type=checkbox],.factory-bootstrap-421 .checkbox-inline input[type=checkbox],.factory-bootstrap-421 .radio input[type=radio],.factory-bootstrap-421 .radio-inline input[type=radio]{float:left;margin-left:-20px}.factory-bootstrap-421 .checkbox+.checkbox,.factory-bootstrap-421 .radio+.radio{margin-top:-5px}.factory-bootstrap-421 .checkbox-inline,.factory-bootstrap-421 .radio-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.factory-bootstrap-421 .checkbox-inline+.checkbox-inline,.factory-bootstrap-421 .radio-inline+.radio-inline{margin-top:0;margin-left:10px}.factory-bootstrap-421 .checkbox-inline[disabled],.factory-bootstrap-421 .checkbox[disabled],.factory-bootstrap-421 .radio-inline[disabled],.factory-bootstrap-421 .radio[disabled],.factory-bootstrap-421 fieldset[disabled] .checkbox,.factory-bootstrap-421 fieldset[disabled] .checkbox-inline,.factory-bootstrap-421 fieldset[disabled] .radio,.factory-bootstrap-421 fieldset[disabled] .radio-inline,.factory-bootstrap-421 fieldset[disabled] input[type=checkbox],.factory-bootstrap-421 fieldset[disabled] input[type=radio],.factory-bootstrap-421 input[type=checkbox][disabled],.factory-bootstrap-421 input[type=radio][disabled]{cursor:not-allowed}.factory-bootstrap-421 .input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-421 select.input-sm{height:30px;line-height:30px}.factory-bootstrap-421 textarea.input-sm{height:auto}.factory-bootstrap-421 .input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-421 select.input-lg{height:46px;line-height:46px}.factory-bootstrap-421 textarea.input-lg{height:auto}.factory-bootstrap-421 .has-warning .checkbox,.factory-bootstrap-421 .has-warning .checkbox-inline,.factory-bootstrap-421 .has-warning .control-label,.factory-bootstrap-421 .has-warning .help-block,.factory-bootstrap-421 .has-warning .radio,.factory-bootstrap-421 .has-warning .radio-inline{color:#8a6d3b}.factory-bootstrap-421 .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-421 .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-421 .has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.factory-bootstrap-421 .has-error .checkbox,.factory-bootstrap-421 .has-error .checkbox-inline,.factory-bootstrap-421 .has-error .control-label,.factory-bootstrap-421 .has-error .help-block,.factory-bootstrap-421 .has-error .radio,.factory-bootstrap-421 .has-error .radio-inline{color:#a94442}.factory-bootstrap-421 .controls{display:block}.factory-bootstrap-421 .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-421 .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-421 .has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.factory-bootstrap-421 .has-success .checkbox,.factory-bootstrap-421 .has-success .checkbox-inline,.factory-bootstrap-421 .has-success .control-label,.factory-bootstrap-421 .has-success .help-block,.factory-bootstrap-421 .has-success .radio,.factory-bootstrap-421 .has-success .radio-inline{color:#3c763d}.factory-bootstrap-421 .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-421 .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-421 .has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.factory-bootstrap-421 .form-control-static{margin-bottom:0}.factory-bootstrap-421 .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-421 .form-horizontal .checkbox,.factory-bootstrap-421 .form-horizontal .checkbox-inline,.factory-bootstrap-421 .form-horizontal .control-label,.factory-bootstrap-421 .form-horizontal .radio,.factory-bootstrap-421 .form-horizontal .radio-inline{position:relative;padding-top:7px;margin-top:0;margin-bottom:0}.factory-bootstrap-421 .form-horizontal .control-label{max-width:200px}.factory-bootstrap-421 .form-horizontal .checkbox,.factory-bootstrap-421 .form-horizontal .radio{min-height:27px}.factory-bootstrap-421 .form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.factory-bootstrap-421 .form-horizontal .form-group:after,.factory-bootstrap-421 .form-horizontal .form-group:before{display:table;content:" "}.factory-bootstrap-421 .form-horizontal .form-group:after{clear:both}.factory-bootstrap-421 .form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.factory-bootstrap-421 .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-421 .btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-421 .btn{text-decoration:none}.factory-bootstrap-421 .btn:focus,.factory-bootstrap-421 .btn:hover{color:#333;text-decoration:none}.factory-bootstrap-421 .btn.disabled,.factory-bootstrap-421 .btn[disabled],.factory-bootstrap-421 fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-421 .btn-default.active,.factory-bootstrap-421 .btn-default:active,.factory-bootstrap-421 .btn-default:focus,.factory-bootstrap-421 .btn-default:hover,.factory-bootstrap-421 .open .dropdown-toggle.btn-default{background:#fafafa;border-color:#999;color:#222}.factory-bootstrap-421 .btn-default.active,.factory-bootstrap-421 .btn-default:active,.factory-bootstrap-421 .open .dropdown-toggle.btn-default{background-image:none}.factory-bootstrap-421 .btn-default.disabled,.factory-bootstrap-421 .btn-default.disabled.active,.factory-bootstrap-421 .btn-default.disabled:active,.factory-bootstrap-421 .btn-default.disabled:focus,.factory-bootstrap-421 .btn-default.disabled:hover,.factory-bootstrap-421 .btn-default[disabled],.factory-bootstrap-421 .btn-default[disabled].active,.factory-bootstrap-421 .btn-default[disabled]:active,.factory-bootstrap-421 .btn-default[disabled]:focus,.factory-bootstrap-421 .btn-default[disabled]:hover,.factory-bootstrap-421 fieldset[disabled] .btn-default,.factory-bootstrap-421 fieldset[disabled] .btn-default.active,.factory-bootstrap-421 fieldset[disabled] .btn-default:active,.factory-bootstrap-421 fieldset[disabled] .btn-default:focus,.factory-bootstrap-421 fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.factory-bootstrap-421 .btn-default .badge{color:#fff;background-color:#fff}.factory-bootstrap-421 .btn-primary.active,.factory-bootstrap-421 .btn-primary:active,.factory-bootstrap-421 .btn-primary:focus,.factory-bootstrap-421 .btn-primary:hover,.factory-bootstrap-421 .open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.factory-bootstrap-421 .btn-primary.active,.factory-bootstrap-421 .btn-primary:active,.factory-bootstrap-421 .open .dropdown-toggle.btn-primary{background-image:none}.factory-bootstrap-421 .btn-primary.disabled,.factory-bootstrap-421 .btn-primary.disabled.active,.factory-bootstrap-421 .btn-primary.disabled:active,.factory-bootstrap-421 .btn-primary.disabled:focus,.factory-bootstrap-421 .btn-primary.disabled:hover,.factory-bootstrap-421 .btn-primary[disabled],.factory-bootstrap-421 .btn-primary[disabled].active,.factory-bootstrap-421 .btn-primary[disabled]:active,.factory-bootstrap-421 .btn-primary[disabled]:focus,.factory-bootstrap-421 .btn-primary[disabled]:hover,.factory-bootstrap-421 fieldset[disabled] .btn-primary,.factory-bootstrap-421 fieldset[disabled] .btn-primary.active,.factory-bootstrap-421 fieldset[disabled] .btn-primary:active,.factory-bootstrap-421 fieldset[disabled] .btn-primary:focus,.factory-bootstrap-421 fieldset[disabled] .btn-primary:hover{background-color:#428bca;border-color:#357ebd}.factory-bootstrap-421 .btn-primary .badge{color:#428bca;background-color:#fff}.factory-bootstrap-421 .btn-warning{color:#fff;background-color:#f0ad4e}.factory-bootstrap-421 .btn-warning.active,.factory-bootstrap-421 .btn-warning:active,.factory-bootstrap-421 .btn-warning:focus,.factory-bootstrap-421 .btn-warning:hover,.factory-bootstrap-421 .open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.factory-bootstrap-421 .btn-warning.active,.factory-bootstrap-421 .btn-warning:active,.factory-bootstrap-421 .open .dropdown-toggle.btn-warning{background-image:none}.factory-bootstrap-421 .btn-warning.disabled,.factory-bootstrap-421 .btn-warning.disabled.active,.factory-bootstrap-421 .btn-warning.disabled:active,.factory-bootstrap-421 .btn-warning.disabled:focus,.factory-bootstrap-421 .btn-warning.disabled:hover,.factory-bootstrap-421 .btn-warning[disabled],.factory-bootstrap-421 .btn-warning[disabled].active,.factory-bootstrap-421 .btn-warning[disabled]:active,.factory-bootstrap-421 .btn-warning[disabled]:focus,.factory-bootstrap-421 .btn-warning[disabled]:hover,.factory-bootstrap-421 fieldset[disabled] .btn-warning,.factory-bootstrap-421 fieldset[disabled] .btn-warning.active,.factory-bootstrap-421 fieldset[disabled] .btn-warning:active,.factory-bootstrap-421 fieldset[disabled] .btn-warning:focus,.factory-bootstrap-421 fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.factory-bootstrap-421 .btn-warning .badge{color:#f0ad4e;background-color:#fff}.factory-bootstrap-421 .btn-success{color:#fff;background-color:#5cb85c}.factory-bootstrap-421 .btn-success.active,.factory-bootstrap-421 .btn-success:active,.factory-bootstrap-421 .btn-success:focus,.factory-bootstrap-421 .btn-success:hover,.factory-bootstrap-421 .open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.factory-bootstrap-421 .btn-success.active,.factory-bootstrap-421 .btn-success:active,.factory-bootstrap-421 .open .dropdown-toggle.btn-success{background-image:none}.factory-bootstrap-421 .btn-success.disabled,.factory-bootstrap-421 .btn-success.disabled.active,.factory-bootstrap-421 .btn-success.disabled:active,.factory-bootstrap-421 .btn-success.disabled:focus,.factory-bootstrap-421 .btn-success.disabled:hover,.factory-bootstrap-421 .btn-success[disabled],.factory-bootstrap-421 .btn-success[disabled].active,.factory-bootstrap-421 .btn-success[disabled]:active,.factory-bootstrap-421 .btn-success[disabled]:focus,.factory-bootstrap-421 .btn-success[disabled]:hover,.factory-bootstrap-421 fieldset[disabled] .btn-success,.factory-bootstrap-421 fieldset[disabled] .btn-success.active,.factory-bootstrap-421 fieldset[disabled] .btn-success:active,.factory-bootstrap-421 fieldset[disabled] .btn-success:focus,.factory-bootstrap-421 fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.factory-bootstrap-421 .btn-success .badge{color:#5cb85c;background-color:#fff}.factory-bootstrap-421 .btn-info{color:#fff;background-color:#5bc0de}.factory-bootstrap-421 .btn-info.active,.factory-bootstrap-421 .btn-info:active,.factory-bootstrap-421 .btn-info:focus,.factory-bootstrap-421 .btn-info:hover,.factory-bootstrap-421 .open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.factory-bootstrap-421 .btn-info.active,.factory-bootstrap-421 .btn-info:active,.factory-bootstrap-421 .open .dropdown-toggle.btn-info{background-image:none}.factory-bootstrap-421 .btn-info.disabled,.factory-bootstrap-421 .btn-info.disabled.active,.factory-bootstrap-421 .btn-info.disabled:active,.factory-bootstrap-421 .btn-info.disabled:focus,.factory-bootstrap-421 .btn-info.disabled:hover,.factory-bootstrap-421 .btn-info[disabled],.factory-bootstrap-421 .btn-info[disabled].active,.factory-bootstrap-421 .btn-info[disabled]:active,.factory-bootstrap-421 .btn-info[disabled]:focus,.factory-bootstrap-421 .btn-info[disabled]:hover,.factory-bootstrap-421 fieldset[disabled] .btn-info,.factory-bootstrap-421 fieldset[disabled] .btn-info.active,.factory-bootstrap-421 fieldset[disabled] .btn-info:active,.factory-bootstrap-421 fieldset[disabled] .btn-info:focus,.factory-bootstrap-421 fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.factory-bootstrap-421 .btn-info .badge{color:#5bc0de;background-color:#fff}.factory-bootstrap-421 .btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.factory-bootstrap-421 .btn-link,.factory-bootstrap-421 .btn-link:active,.factory-bootstrap-421 .btn-link[disabled],.factory-bootstrap-421 fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-421 .btn-link,.factory-bootstrap-421 .btn-link:active,.factory-bootstrap-421 .btn-link:focus,.factory-bootstrap-421 .btn-link:hover{border-color:transparent}.factory-bootstrap-421 .btn-link:focus,.factory-bootstrap-421 .btn-link:hover{color:#2a6496;text-decoration:underline;background-color:transparent}.factory-bootstrap-421 .btn-link[disabled]:focus,.factory-bootstrap-421 .btn-link[disabled]:hover,.factory-bootstrap-421 fieldset[disabled] .btn-link:focus,.factory-bootstrap-421 fieldset[disabled] .btn-link:hover{color:#999;text-decoration:none}.factory-bootstrap-421 .btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-421 .btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-421 .btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-421 .btn-block{display:block;width:100%;padding-right:0;padding-left:0}.factory-bootstrap-421 .btn-block+.btn-block{margin-top:5px}.factory-bootstrap-421 input[type=button].btn-block,.factory-bootstrap-421 input[type=reset].btn-block,.factory-bootstrap-421 input[type=submit].btn-block{width:100%}.factory-bootstrap-421 .fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.factory-bootstrap-421 .fade.in{opacity:1}.factory-bootstrap-421 .collapse{display:none}.factory-bootstrap-421 .collapse.in{display:block}.factory-bootstrap-421 .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-421 .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-421 .glyphicon:empty{width:1em}.factory-bootstrap-421 .glyphicon-asterisk:before{content:"\2a"}.factory-bootstrap-421 .glyphicon-plus:before{content:"\2b"}.factory-bootstrap-421 .glyphicon-euro:before{content:"\20ac"}.factory-bootstrap-421 .glyphicon-minus:before{content:"\2212"}.factory-bootstrap-421 .glyphicon-cloud:before{content:"\2601"}.factory-bootstrap-421 .glyphicon-envelope:before{content:"\2709"}.factory-bootstrap-421 .glyphicon-pencil:before{content:"\270f"}.factory-bootstrap-421 .glyphicon-glass:before{content:"\e001"}.factory-bootstrap-421 .glyphicon-music:before{content:"\e002"}.factory-bootstrap-421 .glyphicon-search:before{content:"\e003"}.factory-bootstrap-421 .glyphicon-heart:before{content:"\e005"}.factory-bootstrap-421 .glyphicon-star:before{content:"\e006"}.factory-bootstrap-421 .glyphicon-star-empty:before{content:"\e007"}.factory-bootstrap-421 .glyphicon-user:before{content:"\e008"}.factory-bootstrap-421 .glyphicon-film:before{content:"\e009"}.factory-bootstrap-421 .glyphicon-th-large:before{content:"\e010"}.factory-bootstrap-421 .glyphicon-th:before{content:"\e011"}.factory-bootstrap-421 .glyphicon-th-list:before{content:"\e012"}.factory-bootstrap-421 .glyphicon-ok:before{content:"\e013"}.factory-bootstrap-421 .glyphicon-remove:before{content:"\e014"}.factory-bootstrap-421 .glyphicon-zoom-in:before{content:"\e015"}.factory-bootstrap-421 .glyphicon-zoom-out:before{content:"\e016"}.factory-bootstrap-421 .glyphicon-off:before{content:"\e017"}.factory-bootstrap-421 .glyphicon-signal:before{content:"\e018"}.factory-bootstrap-421 .glyphicon-cog:before{content:"\e019"}.factory-bootstrap-421 .glyphicon-trash:before{content:"\e020"}.factory-bootstrap-421 .glyphicon-home:before{content:"\e021"}.factory-bootstrap-421 .glyphicon-file:before{content:"\e022"}.factory-bootstrap-421 .glyphicon-time:before{content:"\e023"}.factory-bootstrap-421 .glyphicon-road:before{content:"\e024"}.factory-bootstrap-421 .glyphicon-download-alt:before{content:"\e025"}.factory-bootstrap-421 .glyphicon-download:before{content:"\e026"}.factory-bootstrap-421 .glyphicon-upload:before{content:"\e027"}.factory-bootstrap-421 .glyphicon-inbox:before{content:"\e028"}.factory-bootstrap-421 .glyphicon-play-circle:before{content:"\e029"}.factory-bootstrap-421 .glyphicon-repeat:before{content:"\e030"}.factory-bootstrap-421 .glyphicon-refresh:before{content:"\e031"}.factory-bootstrap-421 .glyphicon-list-alt:before{content:"\e032"}.factory-bootstrap-421 .glyphicon-lock:before{content:"\e033"}.factory-bootstrap-421 .glyphicon-flag:before{content:"\e034"}.factory-bootstrap-421 .glyphicon-headphones:before{content:"\e035"}.factory-bootstrap-421 .glyphicon-volume-off:before{content:"\e036"}.factory-bootstrap-421 .glyphicon-volume-down:before{content:"\e037"}.factory-bootstrap-421 .glyphicon-volume-up:before{content:"\e038"}.factory-bootstrap-421 .glyphicon-qrcode:before{content:"\e039"}.factory-bootstrap-421 .glyphicon-barcode:before{content:"\e040"}.factory-bootstrap-421 .glyphicon-tag:before{content:"\e041"}.factory-bootstrap-421 .glyphicon-tags:before{content:"\e042"}.factory-bootstrap-421 .glyphicon-book:before{content:"\e043"}.factory-bootstrap-421 .glyphicon-bookmark:before{content:"\e044"}.factory-bootstrap-421 .glyphicon-print:before{content:"\e045"}.factory-bootstrap-421 .glyphicon-camera:before{content:"\e046"}.factory-bootstrap-421 .glyphicon-font:before{content:"\e047"}.factory-bootstrap-421 .glyphicon-bold:before{content:"\e048"}.factory-bootstrap-421 .glyphicon-italic:before{content:"\e049"}.factory-bootstrap-421 .glyphicon-text-height:before{content:"\e050"}.factory-bootstrap-421 .glyphicon-text-width:before{content:"\e051"}.factory-bootstrap-421 .glyphicon-align-left:before{content:"\e052"}.factory-bootstrap-421 .glyphicon-align-center:before{content:"\e053"}.factory-bootstrap-421 .glyphicon-align-right:before{content:"\e054"}.factory-bootstrap-421 .glyphicon-align-justify:before{content:"\e055"}.factory-bootstrap-421 .glyphicon-list:before{content:"\e056"}.factory-bootstrap-421 .glyphicon-indent-left:before{content:"\e057"}.factory-bootstrap-421 .glyphicon-indent-right:before{content:"\e058"}.factory-bootstrap-421 .glyphicon-facetime-video:before{content:"\e059"}.factory-bootstrap-421 .glyphicon-picture:before{content:"\e060"}.factory-bootstrap-421 .glyphicon-map-marker:before{content:"\e062"}.factory-bootstrap-421 .glyphicon-adjust:before{content:"\e063"}.factory-bootstrap-421 .glyphicon-tint:before{content:"\e064"}.factory-bootstrap-421 .glyphicon-edit:before{content:"\e065"}.factory-bootstrap-421 .glyphicon-share:before{content:"\e066"}.factory-bootstrap-421 .glyphicon-check:before{content:"\e067"}.factory-bootstrap-421 .glyphicon-move:before{content:"\e068"}.factory-bootstrap-421 .glyphicon-step-backward:before{content:"\e069"}.factory-bootstrap-421 .glyphicon-fast-backward:before{content:"\e070"}.factory-bootstrap-421 .glyphicon-backward:before{content:"\e071"}.factory-bootstrap-421 .glyphicon-play:before{content:"\e072"}.factory-bootstrap-421 .glyphicon-pause:before{content:"\e073"}.factory-bootstrap-421 .glyphicon-stop:before{content:"\e074"}.factory-bootstrap-421 .glyphicon-forward:before{content:"\e075"}.factory-bootstrap-421 .glyphicon-fast-forward:before{content:"\e076"}.factory-bootstrap-421 .glyphicon-step-forward:before{content:"\e077"}.factory-bootstrap-421 .glyphicon-eject:before{content:"\e078"}.factory-bootstrap-421 .glyphicon-chevron-left:before{content:"\e079"}.factory-bootstrap-421 .glyphicon-chevron-right:before{content:"\e080"}.factory-bootstrap-421 .glyphicon-plus-sign:before{content:"\e081"}.factory-bootstrap-421 .glyphicon-minus-sign:before{content:"\e082"}.factory-bootstrap-421 .glyphicon-remove-sign:before{content:"\e083"}.factory-bootstrap-421 .glyphicon-ok-sign:before{content:"\e084"}.factory-bootstrap-421 .glyphicon-question-sign:before{content:"\e085"}.factory-bootstrap-421 .glyphicon-info-sign:before{content:"\e086"}.factory-bootstrap-421 .glyphicon-screenshot:before{content:"\e087"}.factory-bootstrap-421 .glyphicon-remove-circle:before{content:"\e088"}.factory-bootstrap-421 .glyphicon-ok-circle:before{content:"\e089"}.factory-bootstrap-421 .glyphicon-ban-circle:before{content:"\e090"}.factory-bootstrap-421 .glyphicon-arrow-left:before{content:"\e091"}.factory-bootstrap-421 .glyphicon-arrow-right:before{content:"\e092"}.factory-bootstrap-421 .glyphicon-arrow-up:before{content:"\e093"}.factory-bootstrap-421 .glyphicon-arrow-down:before{content:"\e094"}.factory-bootstrap-421 .glyphicon-share-alt:before{content:"\e095"}.factory-bootstrap-421 .glyphicon-resize-full:before{content:"\e096"}.factory-bootstrap-421 .glyphicon-resize-small:before{content:"\e097"}.factory-bootstrap-421 .glyphicon-exclamation-sign:before{content:"\e101"}.factory-bootstrap-421 .glyphicon-gift:before{content:"\e102"}.factory-bootstrap-421 .glyphicon-leaf:before{content:"\e103"}.factory-bootstrap-421 .glyphicon-fire:before{content:"\e104"}.factory-bootstrap-421 .glyphicon-eye-open:before{content:"\e105"}.factory-bootstrap-421 .glyphicon-eye-close:before{content:"\e106"}.factory-bootstrap-421 .glyphicon-warning-sign:before{content:"\e107"}.factory-bootstrap-421 .glyphicon-plane:before{content:"\e108"}.factory-bootstrap-421 .glyphicon-calendar:before{content:"\e109"}.factory-bootstrap-421 .glyphicon-random:before{content:"\e110"}.factory-bootstrap-421 .glyphicon-comment:before{content:"\e111"}.factory-bootstrap-421 .glyphicon-magnet:before{content:"\e112"}.factory-bootstrap-421 .glyphicon-chevron-up:before{content:"\e113"}.factory-bootstrap-421 .glyphicon-chevron-down:before{content:"\e114"}.factory-bootstrap-421 .glyphicon-retweet:before{content:"\e115"}.factory-bootstrap-421 .glyphicon-shopping-cart:before{content:"\e116"}.factory-bootstrap-421 .glyphicon-folder-close:before{content:"\e117"}.factory-bootstrap-421 .glyphicon-folder-open:before{content:"\e118"}.factory-bootstrap-421 .glyphicon-resize-vertical:before{content:"\e119"}.factory-bootstrap-421 .glyphicon-resize-horizontal:before{content:"\e120"}.factory-bootstrap-421 .glyphicon-hdd:before{content:"\e121"}.factory-bootstrap-421 .glyphicon-bullhorn:before{content:"\e122"}.factory-bootstrap-421 .glyphicon-bell:before{content:"\e123"}.factory-bootstrap-421 .glyphicon-certificate:before{content:"\e124"}.factory-bootstrap-421 .glyphicon-thumbs-up:before{content:"\e125"}.factory-bootstrap-421 .glyphicon-thumbs-down:before{content:"\e126"}.factory-bootstrap-421 .glyphicon-hand-right:before{content:"\e127"}.factory-bootstrap-421 .glyphicon-hand-left:before{content:"\e128"}.factory-bootstrap-421 .glyphicon-hand-up:before{content:"\e129"}.factory-bootstrap-421 .glyphicon-hand-down:before{content:"\e130"}.factory-bootstrap-421 .glyphicon-circle-arrow-right:before{content:"\e131"}.factory-bootstrap-421 .glyphicon-circle-arrow-left:before{content:"\e132"}.factory-bootstrap-421 .glyphicon-circle-arrow-up:before{content:"\e133"}.factory-bootstrap-421 .glyphicon-circle-arrow-down:before{content:"\e134"}.factory-bootstrap-421 .glyphicon-globe:before{content:"\e135"}.factory-bootstrap-421 .glyphicon-wrench:before{content:"\e136"}.factory-bootstrap-421 .glyphicon-tasks:before{content:"\e137"}.factory-bootstrap-421 .glyphicon-filter:before{content:"\e138"}.factory-bootstrap-421 .glyphicon-briefcase:before{content:"\e139"}.factory-bootstrap-421 .glyphicon-fullscreen:before{content:"\e140"}.factory-bootstrap-421 .glyphicon-dashboard:before{content:"\e141"}.factory-bootstrap-421 .glyphicon-paperclip:before{content:"\e142"}.factory-bootstrap-421 .glyphicon-heart-empty:before{content:"\e143"}.factory-bootstrap-421 .glyphicon-link:before{content:"\e144"}.factory-bootstrap-421 .glyphicon-phone:before{content:"\e145"}.factory-bootstrap-421 .glyphicon-pushpin:before{content:"\e146"}.factory-bootstrap-421 .glyphicon-usd:before{content:"\e148"}.factory-bootstrap-421 .glyphicon-gbp:before{content:"\e149"}.factory-bootstrap-421 .glyphicon-sort:before{content:"\e150"}.factory-bootstrap-421 .glyphicon-sort-by-alphabet:before{content:"\e151"}.factory-bootstrap-421 .glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.factory-bootstrap-421 .glyphicon-sort-by-order:before{content:"\e153"}.factory-bootstrap-421 .glyphicon-sort-by-order-alt:before{content:"\e154"}.factory-bootstrap-421 .glyphicon-sort-by-attributes:before{content:"\e155"}.factory-bootstrap-421 .glyphicon-sort-by-attributes-alt:before{content:"\e156"}.factory-bootstrap-421 .glyphicon-unchecked:before{content:"\e157"}.factory-bootstrap-421 .glyphicon-expand:before{content:"\e158"}.factory-bootstrap-421 .glyphicon-collapse-down:before{content:"\e159"}.factory-bootstrap-421 .glyphicon-collapse-up:before{content:"\e160"}.factory-bootstrap-421 .glyphicon-log-in:before{content:"\e161"}.factory-bootstrap-421 .glyphicon-flash:before{content:"\e162"}.factory-bootstrap-421 .glyphicon-log-out:before{content:"\e163"}.factory-bootstrap-421 .glyphicon-new-window:before{content:"\e164"}.factory-bootstrap-421 .glyphicon-record:before{content:"\e165"}.factory-bootstrap-421 .glyphicon-save:before{content:"\e166"}.factory-bootstrap-421 .glyphicon-open:before{content:"\e167"}.factory-bootstrap-421 .glyphicon-saved:before{content:"\e168"}.factory-bootstrap-421 .glyphicon-import:before{content:"\e169"}.factory-bootstrap-421 .glyphicon-export:before{content:"\e170"}.factory-bootstrap-421 .glyphicon-send:before{content:"\e171"}.factory-bootstrap-421 .glyphicon-floppy-disk:before{content:"\e172"}.factory-bootstrap-421 .glyphicon-floppy-saved:before{content:"\e173"}.factory-bootstrap-421 .glyphicon-floppy-remove:before{content:"\e174"}.factory-bootstrap-421 .glyphicon-floppy-save:before{content:"\e175"}.factory-bootstrap-421 .glyphicon-floppy-open:before{content:"\e176"}.factory-bootstrap-421 .glyphicon-credit-card:before{content:"\e177"}.factory-bootstrap-421 .glyphicon-transfer:before{content:"\e178"}.factory-bootstrap-421 .glyphicon-cutlery:before{content:"\e179"}.factory-bootstrap-421 .glyphicon-header:before{content:"\e180"}.factory-bootstrap-421 .glyphicon-compressed:before{content:"\e181"}.factory-bootstrap-421 .glyphicon-earphone:before{content:"\e182"}.factory-bootstrap-421 .glyphicon-phone-alt:before{content:"\e183"}.factory-bootstrap-421 .glyphicon-tower:before{content:"\e184"}.factory-bootstrap-421 .glyphicon-stats:before{content:"\e185"}.factory-bootstrap-421 .glyphicon-sd-video:before{content:"\e186"}.factory-bootstrap-421 .glyphicon-hd-video:before{content:"\e187"}.factory-bootstrap-421 .glyphicon-subtitles:before{content:"\e188"}.factory-bootstrap-421 .glyphicon-sound-stereo:before{content:"\e189"}.factory-bootstrap-421 .glyphicon-sound-dolby:before{content:"\e190"}.factory-bootstrap-421 .glyphicon-sound-5-1:before{content:"\e191"}.factory-bootstrap-421 .glyphicon-sound-6-1:before{content:"\e192"}.factory-bootstrap-421 .glyphicon-sound-7-1:before{content:"\e193"}.factory-bootstrap-421 .glyphicon-copyright-mark:before{content:"\e194"}.factory-bootstrap-421 .glyphicon-registration-mark:before{content:"\e195"}.factory-bootstrap-421 .glyphicon-cloud-download:before{content:"\e197"}.factory-bootstrap-421 .glyphicon-cloud-upload:before{content:"\e198"}.factory-bootstrap-421 .glyphicon-tree-conifer:before{content:"\e199"}.factory-bootstrap-421 .glyphicon-tree-deciduous:before{content:"\e200"}.factory-bootstrap-421 .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-421 .dropdown{position:relative}.factory-bootstrap-421 .dropdown-toggle:focus{outline:0}.factory-bootstrap-421 .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-421 .dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-421 .dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-421 .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-421 .dropdown-menu>li>a:focus,.factory-bootstrap-421 .dropdown-menu>li>a:hover{color:#262626;text-decoration:none}.factory-bootstrap-421 .dropdown-menu>.active>a,.factory-bootstrap-421 .dropdown-menu>.active>a:focus,.factory-bootstrap-421 .dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0}.factory-bootstrap-421 .dropdown-menu>.disabled>a,.factory-bootstrap-421 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-421 .dropdown-menu>.disabled>a:hover{color:#999}.factory-bootstrap-421 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-421 .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-421 .open>.dropdown-menu{display:block}.factory-bootstrap-421 .open>a{outline:0}.factory-bootstrap-421 .dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.factory-bootstrap-421 .dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.factory-bootstrap-421 .pull-right>.dropdown-menu{right:0;left:auto}.factory-bootstrap-421 .dropup .caret,.factory-bootstrap-421 .navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.factory-bootstrap-421 .dropup .dropdown-menu,.factory-bootstrap-421 .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-421 .btn-group,.factory-bootstrap-421 .btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.factory-bootstrap-421 .btn-group-vertical>.btn,.factory-bootstrap-421 .btn-group>.btn{position:relative;float:left}.factory-bootstrap-421 .btn-group-vertical>.btn.active,.factory-bootstrap-421 .btn-group-vertical>.btn:active,.factory-bootstrap-421 .btn-group-vertical>.btn:focus,.factory-bootstrap-421 .btn-group-vertical>.btn:hover,.factory-bootstrap-421 .btn-group>.btn.active,.factory-bootstrap-421 .btn-group>.btn:active,.factory-bootstrap-421 .btn-group>.btn:focus,.factory-bootstrap-421 .btn-group>.btn:hover{z-index:2}.factory-bootstrap-421 .btn-group-vertical>.btn:focus,.factory-bootstrap-421 .btn-group>.btn:focus{outline:0}.factory-bootstrap-421 .btn-group .btn+.btn,.factory-bootstrap-421 .btn-group .btn+.btn-group,.factory-bootstrap-421 .btn-group .btn-group+.btn,.factory-bootstrap-421 .btn-group .btn-group+.btn-group{margin-left:-1px}.factory-bootstrap-421 .btn-toolbar:after,.factory-bootstrap-421 .btn-toolbar:before{display:table;content:" "}.factory-bootstrap-421 .btn-toolbar:after{clear:both}.factory-bootstrap-421 .btn-toolbar .btn-group{float:left}.factory-bootstrap-421 .btn-toolbar>.btn+.btn,.factory-bootstrap-421 .btn-toolbar>.btn+.btn-group,.factory-bootstrap-421 .btn-toolbar>.btn-group+.btn,.factory-bootstrap-421 .btn-toolbar>.btn-group+.btn-group{margin-left:5px}.factory-bootstrap-421 .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.factory-bootstrap-421 .btn-group>.btn:first-child{margin-left:0}.factory-bootstrap-421 .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-421 .btn-group>.btn:last-child:not(:first-child),.factory-bootstrap-421 .btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-421 .btn-group>.btn-group{float:left}.factory-bootstrap-421 .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-421 .btn-group>.btn-group:first-child>.btn:last-child,.factory-bootstrap-421 .btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-421 .btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-421 .btn-group .dropdown-toggle:active,.factory-bootstrap-421 .btn-group.open .dropdown-toggle{outline:0}.factory-bootstrap-421 .btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-421 .btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-421 .btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-421 .btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.factory-bootstrap-421 .btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.factory-bootstrap-421 .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-421 .btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-421 .btn-group{border:4px solid #f9f9f9;border-radius:4px}.factory-bootstrap-421 .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-421 .btn .caret{margin-left:0}.factory-bootstrap-421 .btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.factory-bootstrap-421 .dropup .btn-lg .caret{border-width:0 5px 5px}.factory-bootstrap-421 .btn-group-vertical>.btn,.factory-bootstrap-421 .btn-group-vertical>.btn-group,.factory-bootstrap-421 .btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.factory-bootstrap-421 .btn-group-vertical>.btn-group:after,.factory-bootstrap-421 .btn-group-vertical>.btn-group:before{display:table;content:" "}.factory-bootstrap-421 .btn-group-vertical>.btn-group:after{clear:both}.factory-bootstrap-421 .btn-group-vertical>.btn-group>.btn{float:none}.factory-bootstrap-421 .btn-group-vertical>.btn+.btn,.factory-bootstrap-421 .btn-group-vertical>.btn+.btn-group,.factory-bootstrap-421 .btn-group-vertical>.btn-group+.btn,.factory-bootstrap-421 .btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.factory-bootstrap-421 .btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-421 .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-421 .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-421 .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-421 .btn-group-vertical>.btn-group:first-child>.btn:last-child,.factory-bootstrap-421 .btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-421 .btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-421 .btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.factory-bootstrap-421 .btn-group-justified>.btn,.factory-bootstrap-421 .btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.factory-bootstrap-421 .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-421 .input-group{position:relative;display:table;border-collapse:separate}.factory-bootstrap-421 .input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.factory-bootstrap-421 .input-group .form-control{width:100%;margin-bottom:0}.factory-bootstrap-421 .input-group-lg>.form-control,.factory-bootstrap-421 .input-group-lg>.input-group-addon,.factory-bootstrap-421 .input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-421 select.input-group-lg>.form-control,.factory-bootstrap-421 select.input-group-lg>.input-group-addon,.factory-bootstrap-421 select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}.factory-bootstrap-421 textarea.input-group-lg>.form-control,.factory-bootstrap-421 textarea.input-group-lg>.input-group-addon,.factory-bootstrap-421 textarea.input-group-lg>.input-group-btn>.btn{height:auto}.factory-bootstrap-421 .input-group-sm>.form-control,.factory-bootstrap-421 .input-group-sm>.input-group-addon,.factory-bootstrap-421 .input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-421 select.input-group-sm>.form-control,.factory-bootstrap-421 select.input-group-sm>.input-group-addon,.factory-bootstrap-421 select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}.factory-bootstrap-421 textarea.input-group-sm>.form-control,.factory-bootstrap-421 textarea.input-group-sm>.input-group-addon,.factory-bootstrap-421 textarea.input-group-sm>.input-group-btn>.btn{height:auto}.factory-bootstrap-421 .input-group .form-control,.factory-bootstrap-421 .input-group-addon,.factory-bootstrap-421 .input-group-btn{display:table-cell}.factory-bootstrap-421 .input-group .form-control:not(:first-child):not(:last-child),.factory-bootstrap-421 .input-group-addon:not(:first-child):not(:last-child),.factory-bootstrap-421 .input-group-btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-421 .input-group-addon,.factory-bootstrap-421 .input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.factory-bootstrap-421 .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-421 .input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.factory-bootstrap-421 .input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.factory-bootstrap-421 .input-group-addon input[type=checkbox],.factory-bootstrap-421 .input-group-addon input[type=radio]{margin-top:0}.factory-bootstrap-421 .input-group .form-control:first-child,.factory-bootstrap-421 .input-group-addon:first-child,.factory-bootstrap-421 .input-group-btn:first-child>.btn,.factory-bootstrap-421 .input-group-btn:first-child>.dropdown-toggle,.factory-bootstrap-421 .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-421 .input-group-addon:first-child{border-right:0}.factory-bootstrap-421 .input-group .form-control:last-child,.factory-bootstrap-421 .input-group-addon:last-child,.factory-bootstrap-421 .input-group-btn:first-child>.btn:not(:first-child),.factory-bootstrap-421 .input-group-btn:last-child>.btn,.factory-bootstrap-421 .input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-421 .input-group-addon:last-child{border-left:0}.factory-bootstrap-421 .input-group-btn{position:relative;white-space:nowrap}.factory-bootstrap-421 .input-group-btn:first-child>.btn{margin-right:-1px}.factory-bootstrap-421 .input-group-btn:last-child>.btn{margin-left:-1px}.factory-bootstrap-421 .input-group-btn>.btn{position:relative}.factory-bootstrap-421 .input-group-btn>.btn+.btn{margin-left:-4px}.factory-bootstrap-421 .input-group-btn>.btn:active,.factory-bootstrap-421 .input-group-btn>.btn:hover{z-index:2}.factory-bootstrap-421 .nav{padding-left:0;margin-bottom:0;list-style:none}.factory-bootstrap-421 .nav:after,.factory-bootstrap-421 .nav:before{display:table;content:" "}.factory-bootstrap-421 .nav:after{clear:both}.factory-bootstrap-421 .nav>li{position:relative;display:block}.factory-bootstrap-421 .nav>li>a{position:relative;display:block;padding:10px 15px}.factory-bootstrap-421 .nav>li>a:focus,.factory-bootstrap-421 .nav>li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-421 .nav>li.disabled>a{color:#999}.factory-bootstrap-421 .nav>li.disabled>a:focus,.factory-bootstrap-421 .nav>li.disabled>a:hover{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.factory-bootstrap-421 .nav .open>a,.factory-bootstrap-421 .nav .open>a:focus,.factory-bootstrap-421 .nav .open>a:hover{background-color:#eee;border-color:#428bca}.factory-bootstrap-421 .nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-421 .nav>li>a>img{max-width:none}.factory-bootstrap-421 .nav-tabs{border-bottom:1px solid #ddd}.factory-bootstrap-421 .nav-tabs>li{float:left;margin-bottom:-1px}.factory-bootstrap-421 .nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.factory-bootstrap-421 .nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.factory-bootstrap-421 .nav-tabs>li.active>a,.factory-bootstrap-421 .nav-tabs>li.active>a:focus,.factory-bootstrap-421 .nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.factory-bootstrap-421 .nav-tabs.nav-justified{width:100%;border-bottom:0}.factory-bootstrap-421 .nav-tabs.nav-justified>li{float:none}.factory-bootstrap-421 .nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-421 .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-421 .nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-421 .nav-tabs.nav-justified>.active>a,.factory-bootstrap-421 .nav-tabs.nav-justified>.active>a:focus,.factory-bootstrap-421 .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-421 .nav-pills>li{float:left}.factory-bootstrap-421 .nav-pills>li>a{border-radius:4px}.factory-bootstrap-421 .nav-pills>li+li{margin-left:2px}.factory-bootstrap-421 .nav-pills>li.active>a,.factory-bootstrap-421 .nav-pills>li.active>a:focus,.factory-bootstrap-421 .nav-pills>li.active>a:hover{color:#fff;background-color:#428bca}.factory-bootstrap-421 .nav-stacked>li{float:none}.factory-bootstrap-421 .nav-stacked>li+li{margin-top:2px;margin-left:0}.factory-bootstrap-421 .nav-justified{width:100%}.factory-bootstrap-421 .nav-justified>li{float:none}.factory-bootstrap-421 .nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-421 .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-421 .nav-tabs-justified{border-bottom:0}.factory-bootstrap-421 .nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-421 .nav-tabs-justified>.active>a,.factory-bootstrap-421 .nav-tabs-justified>.active>a:focus,.factory-bootstrap-421 .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-421 .tab-content>.tab-pane{display:none}.factory-bootstrap-421 .tab-content>.active{display:block}.factory-bootstrap-421 .nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-421 .navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.factory-bootstrap-421 .navbar:after,.factory-bootstrap-421 .navbar:before{display:table;content:" "}.factory-bootstrap-421 .navbar:after{clear:both}@media (min-width:768px){.navbar{border-radius:4px}}.factory-bootstrap-421 .navbar-header:after,.factory-bootstrap-421 .navbar-header:before{display:table;content:" "}.factory-bootstrap-421 .navbar-header:after{clear:both}@media (min-width:768px){.navbar-header{float:left}}.factory-bootstrap-421 .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-421 .navbar-collapse:after,.factory-bootstrap-421 .navbar-collapse:before{display:table;content:" "}.factory-bootstrap-421 .navbar-collapse:after{clear:both}.factory-bootstrap-421 .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-421 .container>.navbar-collapse,.factory-bootstrap-421 .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-421 .navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.factory-bootstrap-421 .navbar-fixed-bottom,.factory-bootstrap-421 .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-421 .navbar-fixed-top{top:0;border-width:0 0 1px}.factory-bootstrap-421 .navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.factory-bootstrap-421 .navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px}.factory-bootstrap-421 .navbar-brand:focus,.factory-bootstrap-421 .navbar-brand:hover{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.factory-bootstrap-421 .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-421 .navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.factory-bootstrap-421 .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.factory-bootstrap-421 .navbar-nav{margin:7.5px -15px}.factory-bootstrap-421 .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-421 .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-421 .navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-421 .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-421 .navbar-nav.pull-right>li>.dropdown-menu,.factory-bootstrap-421 .navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-421 .navbar-btn{margin-top:8px;margin-bottom:8px}.factory-bootstrap-421 .navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.factory-bootstrap-421 .navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.factory-bootstrap-421 .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-421 .navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.factory-bootstrap-421 .navbar-default .navbar-brand{color:#777}.factory-bootstrap-421 .navbar-default .navbar-brand:focus,.factory-bootstrap-421 .navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.factory-bootstrap-421 .navbar-default .navbar-nav>li>a,.factory-bootstrap-421 .navbar-default .navbar-text{color:#777}.factory-bootstrap-421 .navbar-default .navbar-nav>li>a:focus,.factory-bootstrap-421 .navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.factory-bootstrap-421 .navbar-default .navbar-nav>.active>a,.factory-bootstrap-421 .navbar-default .navbar-nav>.active>a:focus,.factory-bootstrap-421 .navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.factory-bootstrap-421 .navbar-default .navbar-nav>.disabled>a,.factory-bootstrap-421 .navbar-default .navbar-nav>.disabled>a:focus,.factory-bootstrap-421 .navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.factory-bootstrap-421 .navbar-default .navbar-toggle{border-color:#ddd}.factory-bootstrap-421 .navbar-default .navbar-toggle:focus,.factory-bootstrap-421 .navbar-default .navbar-toggle:hover{background-color:#ddd}.factory-bootstrap-421 .navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.factory-bootstrap-421 .navbar-default .navbar-collapse,.factory-bootstrap-421 .navbar-default .navbar-form{border-color:#e7e7e7}.factory-bootstrap-421 .navbar-default .navbar-nav>.open>a,.factory-bootstrap-421 .navbar-default .navbar-nav>.open>a:focus,.factory-bootstrap-421 .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-421 .navbar-default .navbar-link{color:#777}.factory-bootstrap-421 .navbar-default .navbar-link:hover{color:#333}.factory-bootstrap-421 .navbar-inverse{background-color:#222;border-color:#080808}.factory-bootstrap-421 .navbar-inverse .navbar-brand{color:#999}.factory-bootstrap-421 .navbar-inverse .navbar-brand:focus,.factory-bootstrap-421 .navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.factory-bootstrap-421 .navbar-inverse .navbar-nav>li>a,.factory-bootstrap-421 .navbar-inverse .navbar-text{color:#999}.factory-bootstrap-421 .navbar-inverse .navbar-nav>li>a:focus,.factory-bootstrap-421 .navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.factory-bootstrap-421 .navbar-inverse .navbar-nav>.active>a,.factory-bootstrap-421 .navbar-inverse .navbar-nav>.active>a:focus,.factory-bootstrap-421 .navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.factory-bootstrap-421 .navbar-inverse .navbar-nav>.disabled>a,.factory-bootstrap-421 .navbar-inverse .navbar-nav>.disabled>a:focus,.factory-bootstrap-421 .navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.factory-bootstrap-421 .navbar-inverse .navbar-toggle{border-color:#333}.factory-bootstrap-421 .navbar-inverse .navbar-toggle:focus,.factory-bootstrap-421 .navbar-inverse .navbar-toggle:hover{background-color:#333}.factory-bootstrap-421 .navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.factory-bootstrap-421 .navbar-inverse .navbar-collapse,.factory-bootstrap-421 .navbar-inverse .navbar-form{border-color:#101010}.factory-bootstrap-421 .navbar-inverse .navbar-nav>.open>a,.factory-bootstrap-421 .navbar-inverse .navbar-nav>.open>a:focus,.factory-bootstrap-421 .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-421 .navbar-inverse .navbar-link{color:#999}.factory-bootstrap-421 .navbar-inverse .navbar-link:hover{color:#fff}.factory-bootstrap-421 .breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.factory-bootstrap-421 .breadcrumb>li{display:inline-block}.factory-bootstrap-421 .breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.factory-bootstrap-421 .breadcrumb>.active{color:#999}.factory-bootstrap-421 .pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.factory-bootstrap-421 .pagination>li{display:inline}.factory-bootstrap-421 .pagination>li>a,.factory-bootstrap-421 .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-421 .pagination>li:first-child>a,.factory-bootstrap-421 .pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.factory-bootstrap-421 .pagination>li:last-child>a,.factory-bootstrap-421 .pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.factory-bootstrap-421 .pagination>li>a:focus,.factory-bootstrap-421 .pagination>li>a:hover,.factory-bootstrap-421 .pagination>li>span:focus,.factory-bootstrap-421 .pagination>li>span:hover{background-color:#eee}.factory-bootstrap-421 .pagination>.active>a,.factory-bootstrap-421 .pagination>.active>a:focus,.factory-bootstrap-421 .pagination>.active>a:hover,.factory-bootstrap-421 .pagination>.active>span,.factory-bootstrap-421 .pagination>.active>span:focus,.factory-bootstrap-421 .pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#1e8cbe;border-color:#0074a2}.factory-bootstrap-421 .pagination>.disabled>a,.factory-bootstrap-421 .pagination>.disabled>a:focus,.factory-bootstrap-421 .pagination>.disabled>a:hover,.factory-bootstrap-421 .pagination>.disabled>span,.factory-bootstrap-421 .pagination>.disabled>span:focus,.factory-bootstrap-421 .pagination>.disabled>span:hover{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.factory-bootstrap-421 .pagination-lg>li>a,.factory-bootstrap-421 .pagination-lg>li>span{padding:10px 16px;font-size:18px}.factory-bootstrap-421 .pagination-lg>li:first-child>a,.factory-bootstrap-421 .pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.factory-bootstrap-421 .pagination-lg>li:last-child>a,.factory-bootstrap-421 .pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.factory-bootstrap-421 .pagination-sm>li>a,.factory-bootstrap-421 .pagination-sm>li>span{padding:5px 10px;font-size:12px}.factory-bootstrap-421 .pagination-sm>li:first-child>a,.factory-bootstrap-421 .pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.factory-bootstrap-421 .pagination-sm>li:last-child>a,.factory-bootstrap-421 .pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.factory-bootstrap-421 .pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.factory-bootstrap-421 .pager:after,.factory-bootstrap-421 .pager:before{display:table;content:" "}.factory-bootstrap-421 .pager:after{clear:both}.factory-bootstrap-421 .pager li{display:inline}.factory-bootstrap-421 .pager li>a,.factory-bootstrap-421 .pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.factory-bootstrap-421 .pager li>a:focus,.factory-bootstrap-421 .pager li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-421 .pager .next>a,.factory-bootstrap-421 .pager .next>span{float:right}.factory-bootstrap-421 .pager .previous>a,.factory-bootstrap-421 .pager .previous>span{float:left}.factory-bootstrap-421 .pager .disabled>a,.factory-bootstrap-421 .pager .disabled>a:focus,.factory-bootstrap-421 .pager .disabled>a:hover,.factory-bootstrap-421 .pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.factory-bootstrap-421 .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-421 .label[href]:focus,.factory-bootstrap-421 .label[href]:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-421 .label:empty{display:none}.factory-bootstrap-421 .btn .label{position:relative;top:-1px}.factory-bootstrap-421 .label-default{background-color:#999}.factory-bootstrap-421 .label-default[href]:focus,.factory-bootstrap-421 .label-default[href]:hover{background-color:gray}.factory-bootstrap-421 .label-primary{background-color:#428bca}.factory-bootstrap-421 .label-primary[href]:focus,.factory-bootstrap-421 .label-primary[href]:hover{background-color:#3071a9}.factory-bootstrap-421 .label-success{background-color:#5cb85c}.factory-bootstrap-421 .label-success[href]:focus,.factory-bootstrap-421 .label-success[href]:hover{background-color:#449d44}.factory-bootstrap-421 .label-info{background-color:#5bc0de}.factory-bootstrap-421 .label-info[href]:focus,.factory-bootstrap-421 .label-info[href]:hover{background-color:#31b0d5}.factory-bootstrap-421 .label-warning{background-color:#f0ad4e}.factory-bootstrap-421 .label-warning[href]:focus,.factory-bootstrap-421 .label-warning[href]:hover{background-color:#ec971f}.factory-bootstrap-421 .label-danger{background-color:#d9534f}.factory-bootstrap-421 .label-danger[href]:focus,.factory-bootstrap-421 .label-danger[href]:hover{background-color:#c9302c}.factory-bootstrap-421 .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-421 .badge:empty{display:none}.factory-bootstrap-421 .btn .badge{position:relative;top:-1px}.factory-bootstrap-421 a.badge:focus,.factory-bootstrap-421 a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-421 .nav-pills>.active>a>.badge,.factory-bootstrap-421 a.list-group-item.active>.badge{color:#428bca;background-color:#fff}.factory-bootstrap-421 .nav-pills>li>a>.badge{margin-left:3px}.factory-bootstrap-421 .jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.factory-bootstrap-421 .jumbotron .h1,.factory-bootstrap-421 .jumbotron h1{line-height:1;color:inherit}.factory-bootstrap-421 .jumbotron p{line-height:1.4}.factory-bootstrap-421 .container .jumbotron{border-radius:6px}.factory-bootstrap-421 .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-421 .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-421 .thumbnail a>img,.factory-bootstrap-421 .thumbnail>img{display:block;height:auto;max-width:100%;margin-right:auto;margin-left:auto}.factory-bootstrap-421 a.thumbnail.active,.factory-bootstrap-421 a.thumbnail:focus,.factory-bootstrap-421 a.thumbnail:hover{border-color:#428bca}.factory-bootstrap-421 .thumbnail .caption{padding:9px;color:#333}.factory-bootstrap-421 .alert{border:1px solid transparent;border-radius:4px}.factory-bootstrap-421 .alert h4{margin-top:0;color:inherit}.factory-bootstrap-421 .alert .alert-link{font-weight:700}.factory-bootstrap-421 .alert>p,.factory-bootstrap-421 .alert>ul{margin-bottom:0}.factory-bootstrap-421 .alert>p+p{margin-top:5px}.factory-bootstrap-421 .alert-dismissable{padding-right:35px}.factory-bootstrap-421 .alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.factory-bootstrap-421 .alert-info{color:#31708f;background-color:#d9edf7}.factory-bootstrap-421 .alert-info hr{border-top-color:#a6e1ec}.factory-bootstrap-421 .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-421 .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-421 .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-421 .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-421 .progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.factory-bootstrap-421 .progress-bar-success{background-color:#5cb85c}.factory-bootstrap-421 .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-421 .progress-bar-info{background-color:#5bc0de}.factory-bootstrap-421 .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-421 .progress-bar-warning{background-color:#f0ad4e}.factory-bootstrap-421 .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-421 .progress-bar-danger{background-color:#d9534f}.factory-bootstrap-421 .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-421 .media,.factory-bootstrap-421 .media-body{overflow:hidden;zoom:1}.factory-bootstrap-421 .media,.factory-bootstrap-421 .media .media{margin-top:15px}.factory-bootstrap-421 .media:first-child{margin-top:0}.factory-bootstrap-421 .media-object{display:block}.factory-bootstrap-421 .media-heading{margin:0 0 5px}.factory-bootstrap-421 .media>.pull-left{margin-right:10px}.factory-bootstrap-421 .media>.pull-right{margin-left:10px}.factory-bootstrap-421 .media-list{padding-left:0;list-style:none}.factory-bootstrap-421 .list-group{padding-left:0;margin-bottom:20px}.factory-bootstrap-421 .list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.factory-bootstrap-421 .list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.factory-bootstrap-421 .list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.factory-bootstrap-421 .list-group-item>.badge{float:right}.factory-bootstrap-421 .list-group-item>.badge+.badge{margin-right:5px}.factory-bootstrap-421 a.list-group-item{color:#555}.factory-bootstrap-421 a.list-group-item .list-group-item-heading{color:#333}.factory-bootstrap-421 a.list-group-item:focus,.factory-bootstrap-421 a.list-group-item:hover{text-decoration:none;background-color:#f5f5f5}.factory-bootstrap-421 a.list-group-item.active,.factory-bootstrap-421 a.list-group-item.active:focus,.factory-bootstrap-421 a.list-group-item.active:hover{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-421 a.list-group-item.active .list-group-item-heading,.factory-bootstrap-421 a.list-group-item.active:focus .list-group-item-heading,.factory-bootstrap-421 a.list-group-item.active:hover .list-group-item-heading{color:inherit}.factory-bootstrap-421 a.list-group-item.active .list-group-item-text,.factory-bootstrap-421 a.list-group-item.active:focus .list-group-item-text,.factory-bootstrap-421 a.list-group-item.active:hover .list-group-item-text{color:#e1edf7}.factory-bootstrap-421 .list-group-item-heading{margin-top:0;margin-bottom:5px}.factory-bootstrap-421 .list-group-item-text{margin-bottom:0;line-height:1.3}.factory-bootstrap-421 .panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px}.factory-bootstrap-421 .panel-body{padding:15px}.factory-bootstrap-421 .panel-body:after,.factory-bootstrap-421 .panel-body:before{display:table;content:" "}.factory-bootstrap-421 .panel-body:after{clear:both}.factory-bootstrap-421 .panel>.list-group{margin-bottom:0}.factory-bootstrap-421 .panel>.list-group .list-group-item{border-width:1px 0}.factory-bootstrap-421 .panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-421 .panel>.list-group .list-group-item:last-child{border-bottom:0}.factory-bootstrap-421 .panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.factory-bootstrap-421 .panel>.table,.factory-bootstrap-421 .panel>.table-responsive>.table{margin-bottom:0}.factory-bootstrap-421 .panel>.panel-body+.table,.factory-bootstrap-421 .panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.factory-bootstrap-421 .panel>.table>tbody:first-child td,.factory-bootstrap-421 .panel>.table>tbody:first-child th{border-top:0}.factory-bootstrap-421 .panel>.table-bordered,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered{border:0}.factory-bootstrap-421 .panel>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-421 .panel>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-421 .panel>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-421 .panel>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-421 .panel>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-421 .panel>.table-bordered>thead>tr>th:first-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.factory-bootstrap-421 .panel>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-421 .panel>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-421 .panel>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-421 .panel>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-421 .panel>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-421 .panel>.table-bordered>thead>tr>th:last-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.factory-bootstrap-421 .panel>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-421 .panel>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-421 .panel>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-421 .panel>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-421 .panel>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-421 .panel>.table-bordered>thead>tr:last-child>th,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>thead>tr:last-child>th{border-bottom:0}.factory-bootstrap-421 .panel>.table-responsive{margin-bottom:0;border:0}.factory-bootstrap-421 .panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.factory-bootstrap-421 .panel-heading>.dropdown .dropdown-toggle{color:inherit}.factory-bootstrap-421 .panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.factory-bootstrap-421 .panel-title>a{color:inherit}.factory-bootstrap-421 .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-421 .panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.factory-bootstrap-421 .panel-group .panel+.panel{margin-top:5px}.factory-bootstrap-421 .panel-group .panel-heading{border-bottom:0}.factory-bootstrap-421 .panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.factory-bootstrap-421 .panel-group .panel-footer{border-top:0}.factory-bootstrap-421 .panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.factory-bootstrap-421 .panel-default{border-color:#ddd}.factory-bootstrap-421 .panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.factory-bootstrap-421 .panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.factory-bootstrap-421 .panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.factory-bootstrap-421 .panel-primary{border-color:#428bca}.factory-bootstrap-421 .panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-421 .panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.factory-bootstrap-421 .panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.factory-bootstrap-421 .panel-success{border-color:#d6e9c6}.factory-bootstrap-421 .panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.factory-bootstrap-421 .panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.factory-bootstrap-421 .panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.factory-bootstrap-421 .panel-warning{border-color:#faebcc}.factory-bootstrap-421 .panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.factory-bootstrap-421 .panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.factory-bootstrap-421 .panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.factory-bootstrap-421 .panel-danger{border-color:#ebccd1}.factory-bootstrap-421 .panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.factory-bootstrap-421 .panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.factory-bootstrap-421 .panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.factory-bootstrap-421 .panel-info{border-color:#bce8f1}.factory-bootstrap-421 .panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.factory-bootstrap-421 .panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.factory-bootstrap-421 .panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.factory-bootstrap-421 .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px}.factory-bootstrap-421 .well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.factory-bootstrap-421 .well-lg{padding:24px;border-radius:6px}.factory-bootstrap-421 .well-sm{padding:9px;border-radius:3px}.factory-bootstrap-421 .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-421 .alert .close{position:relative;top:-8px;right:-7px}.factory-bootstrap-421 .close:focus,.factory-bootstrap-421 .close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-421 button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.factory-bootstrap-421 .modal-open{overflow:hidden}.factory-bootstrap-421 .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-421 .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-421 .modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.factory-bootstrap-421 .modal-dialog{position:relative;z-index:1050;width:auto;margin:10px}.factory-bootstrap-421 .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-421 .modal-backdrop,.factory-bootstrap-421-modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.factory-bootstrap-421 .modal-backdrop.fade,.factory-bootstrap-421-modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.factory-bootstrap-421 .modal-backdrop.in,.factory-bootstrap-421-modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-421 .modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.factory-bootstrap-421 .modal-header .close{margin-top:-2px}.factory-bootstrap-421 .modal-title{margin:0;line-height:1.428571429}.factory-bootstrap-421 .modal-body{position:relative;padding:20px;max-height:none}.factory-bootstrap-421 .modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.factory-bootstrap-421 .modal-footer:after,.factory-bootstrap-421 .modal-footer:before{display:table;content:" "}.factory-bootstrap-421 .modal-footer:after{clear:both}.factory-bootstrap-421 .modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.factory-bootstrap-421 .modal-footer .btn-group .btn+.btn{margin-left:-1px}.factory-bootstrap-421 .modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.factory-bootstrap-421 .modal-dialog{width:600px;margin:30px auto}.factory-bootstrap-421 .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-421 .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-421 .tooltip.in{opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-421 .tooltip.top{padding:5px 0;margin-top:-3px}.factory-bootstrap-421 .tooltip.right{padding:0 5px;margin-left:3px}.factory-bootstrap-421 .tooltip.bottom{padding:5px 0;margin-top:3px}.factory-bootstrap-421 .tooltip.left{padding:0 5px;margin-left:-3px}.factory-bootstrap-421 .tooltip-inner{width:400px;padding:15px 20px;color:#fff;text-align:left;text-decoration:none;background-color:#673ab7;border-radius:3px}.factory-bootstrap-421 .tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-421 .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-421 .tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-421 .tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-421 .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#673ab7;border-width:5px 5px 5px 0}.factory-bootstrap-421 .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#673ab7;border-width:5px 0 5px 5px}.factory-bootstrap-421 .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-421 .tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-421 .tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-421 .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-421 .popover.top{margin-top:-10px}.factory-bootstrap-421 .popover.right{margin-left:10px}.factory-bootstrap-421 .popover.bottom{margin-top:10px}.factory-bootstrap-421 .popover.left{margin-left:-10px}.factory-bootstrap-421 .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-421 .popover-content{padding:9px 14px}.factory-bootstrap-421 .popover .arrow,.factory-bootstrap-421 .popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-421 .popover .arrow{border-width:11px}.factory-bootstrap-421 .popover .arrow:after{border-width:10px;content:""}.factory-bootstrap-421 .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-421 .popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.factory-bootstrap-421 .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-421 .popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.factory-bootstrap-421 .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-421 .popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.factory-bootstrap-421 .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-421 .popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.factory-bootstrap-421 .carousel{position:relative}.factory-bootstrap-421 .carousel-inner{position:relative;width:100%;overflow:hidden}.factory-bootstrap-421 .carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.factory-bootstrap-421 .carousel-inner>.item>a>img,.factory-bootstrap-421 .carousel-inner>.item>img{display:block;height:auto;max-width:100%;line-height:1}.factory-bootstrap-421 .carousel-inner>.active,.factory-bootstrap-421 .carousel-inner>.next,.factory-bootstrap-421 .carousel-inner>.prev{display:block}.factory-bootstrap-421 .carousel-inner>.active{left:0}.factory-bootstrap-421 .carousel-inner>.next,.factory-bootstrap-421 .carousel-inner>.prev{position:absolute;top:0;width:100%}.factory-bootstrap-421 .carousel-inner>.next{left:100%}.factory-bootstrap-421 .carousel-inner>.prev{left:-100%}.factory-bootstrap-421 .carousel-inner>.next.left,.factory-bootstrap-421 .carousel-inner>.prev.right{left:0}.factory-bootstrap-421 .carousel-inner>.active.left{left:-100%}.factory-bootstrap-421 .carousel-inner>.active.right{left:100%}.factory-bootstrap-421 .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-421 .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-421 .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-421 .carousel-control:focus,.factory-bootstrap-421 .carousel-control:hover{color:#fff;text-decoration:none;outline:0;opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-421 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-421 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-421 .carousel-control .icon-next,.factory-bootstrap-421 .carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.factory-bootstrap-421 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-421 .carousel-control .icon-prev{left:50%}.factory-bootstrap-421 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-421 .carousel-control .icon-next{right:50%}.factory-bootstrap-421 .carousel-control .icon-next,.factory-bootstrap-421 .carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.factory-bootstrap-421 .carousel-control .icon-prev:before{content:'\2039'}.factory-bootstrap-421 .carousel-control .icon-next:before{content:'\203a'}.factory-bootstrap-421 .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-421 .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-421 .carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.factory-bootstrap-421 .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-421 .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-421 .clearfix:after,.factory-bootstrap-421 .clearfix:before{display:table;content:" "}.factory-bootstrap-421 .clearfix:after{clear:both}.factory-bootstrap-421 .center-block{display:block;margin-right:auto;margin-left:auto}.factory-bootstrap-421 .pull-right{float:right!important}.factory-bootstrap-421 .pull-left{float:left!important}.factory-bootstrap-421 .hide{display:none!important}.factory-bootstrap-421 .show{display:block!important}.factory-bootstrap-421 .invisible{visibility:hidden}.factory-bootstrap-421 .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.factory-bootstrap-421 .hidden{display:none!important;visibility:hidden!important}.factory-bootstrap-421 .affix{position:fixed}@-ms-viewport{width:device-width}.factory-bootstrap-421 .visible-lg,.factory-bootstrap-421 .visible-md,.factory-bootstrap-421 .visible-sm,.factory-bootstrap-421 .visible-xs,.factory-bootstrap-421 td.visible-lg,.factory-bootstrap-421 td.visible-md,.factory-bootstrap-421 td.visible-sm,.factory-bootstrap-421 td.visible-xs,.factory-bootstrap-421 th.visible-lg,.factory-bootstrap-421 th.visible-md,.factory-bootstrap-421 th.visible-sm,.factory-bootstrap-421 th.visible-xs,.factory-bootstrap-421 tr.visible-lg,.factory-bootstrap-421 tr.visible-md,.factory-bootstrap-421 tr.visible-sm,.factory-bootstrap-421 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-421 .hidden-xs{display:block!important}.factory-bootstrap-421 table.hidden-xs{display:table}.factory-bootstrap-421 tr.hidden-xs{display:table-row!important}.factory-bootstrap-421 td.hidden-xs,.factory-bootstrap-421 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-421 .hidden-sm{display:block!important}.factory-bootstrap-421 table.hidden-sm{display:table}.factory-bootstrap-421 tr.hidden-sm{display:table-row!important}.factory-bootstrap-421 td.hidden-sm,.factory-bootstrap-421 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-421 .hidden-md{display:block!important}.factory-bootstrap-421 table.hidden-md{display:table}.factory-bootstrap-421 tr.hidden-md{display:table-row!important}.factory-bootstrap-421 td.hidden-md,.factory-bootstrap-421 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-421 .hidden-lg{display:block!important}.factory-bootstrap-421 table.hidden-lg{display:table}.factory-bootstrap-421 tr.hidden-lg{display:table-row!important}.factory-bootstrap-421 td.hidden-lg,.factory-bootstrap-421 th.hidden-lg{display:table-cell!important}@media (max-width:767px){.factory-bootstrap-421 .hidden-lg.hidden-xs,.factory-bootstrap-421 td.hidden-lg.hidden-xs,.factory-bootstrap-421 th.hidden-lg.hidden-xs,.factory-bootstrap-421 tr.hidden-lg.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.factory-bootstrap-421 .hidden-lg.hidden-sm,.factory-bootstrap-421 td.hidden-lg.hidden-sm,.factory-bootstrap-421 th.hidden-lg.hidden-sm,.factory-bootstrap-421 tr.hidden-lg.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.factory-bootstrap-421 .hidden-lg.hidden-md,.factory-bootstrap-421 td.hidden-lg.hidden-md,.factory-bootstrap-421 th.hidden-lg.hidden-md,.factory-bootstrap-421 tr.hidden-lg.hidden-md{display:none!important}}@media (min-width:1200px){.factory-bootstrap-421 .hidden-lg,.factory-bootstrap-421 td.hidden-lg,.factory-bootstrap-421 th.hidden-lg,.factory-bootstrap-421 tr.hidden-lg{display:none!important}}.factory-bootstrap-421 .visible-print,.factory-bootstrap-421 td.visible-print,.factory-bootstrap-421 th.visible-print,.factory-bootstrap-421 tr.visible-print{display:none!important}@media print{.factory-bootstrap-421 .visible-print{display:block!important}.factory-bootstrap-421 table.visible-print{display:table}.factory-bootstrap-421 tr.visible-print{display:table-row!important}.factory-bootstrap-421 td.visible-print,.factory-bootstrap-421 th.visible-print{display:table-cell!important}.factory-bootstrap-421 .hidden-print,.factory-bootstrap-421 td.hidden-print,.factory-bootstrap-421 th.hidden-print,.factory-bootstrap-421 tr.hidden-print{display:none!important}}/*!
12
+ * Factory Default Bootstrap Theme
13
+ *
14
+ * The code is based on Bootstrap v2.1.1
15
+ *
16
+ * Bootstrap v3.0.3 (http://getbootstrap.com)
17
+ * Copyright 2013 Twitter, Inc.
18
+ * Licensed under http://www.apache.org/licenses/LICENSE-2.0
19
+ *
20
+ * @author Paul Kashtanoff <paul@byonepress.com>
21
+ * @copyright (c) 2013, OnePress Ltd
22
+ *
23
+ * @package factory-bootstrap
24
+ * @since 1.0.0
25
+ */.factory-bootstrap-421 .btn-danger,.factory-bootstrap-421 .btn-default,.factory-bootstrap-421 .btn-info,.factory-bootstrap-421 .btn-primary,.factory-bootstrap-421 .btn-success,.factory-bootstrap-421 .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-421 .btn-danger.active,.factory-bootstrap-421 .btn-danger:active,.factory-bootstrap-421 .btn-default.active,.factory-bootstrap-421 .btn-default:active,.factory-bootstrap-421 .btn-info.active,.factory-bootstrap-421 .btn-info:active,.factory-bootstrap-421 .btn-primary.active,.factory-bootstrap-421 .btn-primary:active,.factory-bootstrap-421 .btn-success.active,.factory-bootstrap-421 .btn-success:active,.factory-bootstrap-421 .btn-warning.active,.factory-bootstrap-421 .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-421 .btn.active,.factory-bootstrap-421 .btn:active{background-image:none}.factory-bootstrap-421 .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-421 .btn-default.active,.factory-bootstrap-421 .btn-default:active{background-color:#fff;border-color:#dbdbdb}.factory-bootstrap-421 .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-421 .btn-gold:focus,.factory-bootstrap-421 .btn-gold:hover{background:#fef0a1}.factory-bootstrap-421 .btn-gold.active,.factory-bootstrap-421 .btn-gold:active{background:#fef0a1;-webkit-box-shadow:inset 0 3px 8px 0 #f8ba36;box-shadow:inset 0 3px 8px 0 #f8ba36}.factory-bootstrap-421 .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-421 .btn-primary:focus,.factory-bootstrap-421 .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-421 .btn-primary.active,.factory-bootstrap-421 .btn-primary:active{background-color:#2d6ca2;border-color:#2b669a}.factory-bootstrap-421 .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-421 .btn-success:focus,.factory-bootstrap-421 .btn-success:hover{background-color:#419641;background-position:0 -15px}.factory-bootstrap-421 .btn-success.active,.factory-bootstrap-421 .btn-success:active{background-color:#419641;border-color:#3e8f3e}.factory-bootstrap-421 .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-421 .btn-warning:focus,.factory-bootstrap-421 .btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.factory-bootstrap-421 .btn-warning.active,.factory-bootstrap-421 .btn-warning:active{background-color:#eb9316;border-color:#e38d13}.factory-bootstrap-421 .btn-danger{color:#fff;background:#d9534f;border-color:#d43f3a}.factory-bootstrap-421 .btn-danger.active,.factory-bootstrap-421 .btn-danger:active,.factory-bootstrap-421 .btn-danger:focus,.factory-bootstrap-421 .btn-danger:hover,.factory-bootstrap-421 .open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.factory-bootstrap-421 .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-421 .btn-info:focus,.factory-bootstrap-421 .btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.factory-bootstrap-421 .btn-info.active,.factory-bootstrap-421 .btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.factory-bootstrap-421 .img-thumbnail,.factory-bootstrap-421 .thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.factory-bootstrap-421 .dropdown-menu>li>a:focus,.factory-bootstrap-421 .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-421 .dropdown-menu>.active>a,.factory-bootstrap-421 .dropdown-menu>.active>a:focus,.factory-bootstrap-421 .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-421 .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-421 .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-421 .navbar-brand,.factory-bootstrap-421 .navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.factory-bootstrap-421 .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-421 .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-421 .navbar-inverse .navbar-brand,.factory-bootstrap-421 .navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.factory-bootstrap-421 .navbar-fixed-bottom,.factory-bootstrap-421 .navbar-fixed-top,.factory-bootstrap-421 .navbar-static-top{border-radius:0}.factory-bootstrap-421 .alert{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-421 .alert .actions{padding-top:10px}.factory-bootstrap-421 .alert-success{color:#3c763d;background-color:#dff0d8;border-bottom:2px solid #c8e5bc}.factory-bootstrap-421 .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-421 .alert{text-shadow:none;box-shadow:none;margin:0;margin-top:10px;margin-bottom:10px;padding:10px}.factory-bootstrap-421 .alert-normal,.factory-bootstrap-421 .alert-warning{background:#fcf8e3;color:#8a6d3b;border:1px solid #b8823b}.factory-bootstrap-421 .alert-danger{background:#cf4944;color:#fff;border-bottom:2px solid #b23e3a}.factory-bootstrap-421 .alert-danger a:not(.btn),.factory-bootstrap-421 .alert-error a:not(.btn){color:#fff}.factory-bootstrap-421 .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-421 .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-421 .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-421 .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-421 .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-421 .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-421 .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-421 .list-group-item.active,.factory-bootstrap-421 .list-group-item.active:focus,.factory-bootstrap-421 .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-421 .panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-421 .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-421 .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-421 .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-421 .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-421 .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-421 .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-421 .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-421 .factory-after{margin-left:7px;display:inline-block}.factory-bootstrap-421 .factory-hidden{display:none}.factory-bootstrap-421 .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.datepicker.min.css ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ /*!
12
+ * Datepicker for Bootstrap v1.5.0-dev (https://github.com/eternicode/bootstrap-datepicker)
13
+ *
14
+ * Copyright 2012 Stefan Petre
15
+ * Improvements by Andrew Rowls
16
+ * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
17
+ */.datepicker{border-radius:4px;direction:ltr}.datepicker-inline{width:220px}.datepicker.datepicker-rtl{direction:rtl}.datepicker.datepicker-rtl table tr td span{float:right}.datepicker-dropdown{top:0;left:0}.datepicker-dropdown:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-top:0;border-bottom-color:rgba(0,0,0,.2);position:absolute}.datepicker-dropdown:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;border-top:0;position:absolute}.datepicker-dropdown.datepicker-orient-left:before{left:6px}.datepicker-dropdown.datepicker-orient-left:after{left:7px}.datepicker-dropdown.datepicker-orient-right:before{right:6px}.datepicker-dropdown.datepicker-orient-right:after{right:7px}.datepicker-dropdown.datepicker-orient-top:before{top:-7px}.datepicker-dropdown.datepicker-orient-top:after{top:-6px}.datepicker-dropdown.datepicker-orient-bottom:before{bottom:-7px;border-bottom:0;border-top:7px solid #999}.datepicker-dropdown.datepicker-orient-bottom:after{bottom:-6px;border-bottom:0;border-top:6px solid #fff}.datepicker>div{display:none}.datepicker.days .datepicker-days,.datepicker.months .datepicker-months,.datepicker.years .datepicker-years{display:block}.datepicker table{margin:0;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.datepicker table tr td,.datepicker table tr th{text-align:center;width:30px;height:30px;border-radius:4px;border:0}.table-striped .datepicker table tr td,.table-striped .datepicker table tr th{background-color:transparent}.datepicker table tr td.day.focused,.datepicker table tr td.day:hover{background:#eee;cursor:pointer}.datepicker table tr td.new,.datepicker table tr td.old{color:#999}.datepicker table tr td.disabled,.datepicker table tr td.disabled:hover{background:0 0;color:#999;cursor:default}.datepicker table tr td.today,.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today:hover{color:#000;background-color:#ffdb99;border-color:#ffb733}.datepicker table tr td.today.active,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:focus,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today.disabled:hover.active,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today.disabled:hover:focus,.datepicker table tr td.today.disabled:hover:hover,.datepicker table tr td.today:active,.datepicker table tr td.today:focus,.datepicker table tr td.today:hover,.datepicker table tr td.today:hover.active,.datepicker table tr td.today:hover:active,.datepicker table tr td.today:hover:focus,.datepicker table tr td.today:hover:hover,.open .dropdown-toggle.datepicker table tr td.today,.open .dropdown-toggle.datepicker table tr td.today.disabled,.open .dropdown-toggle.datepicker table tr td.today.disabled:hover,.open .dropdown-toggle.datepicker table tr td.today:hover{color:#000;background-color:#ffcd70;border-color:#f59e00}.datepicker table tr td.today.active,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:hover.active,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today:active,.datepicker table tr td.today:hover.active,.datepicker table tr td.today:hover:active,.open .dropdown-toggle.datepicker table tr td.today,.open .dropdown-toggle.datepicker table tr td.today.disabled,.open .dropdown-toggle.datepicker table tr td.today.disabled:hover,.open .dropdown-toggle.datepicker table tr td.today:hover{background-image:none}.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled.disabled,.datepicker table tr td.today.disabled.disabled.active,.datepicker table tr td.today.disabled.disabled:active,.datepicker table tr td.today.disabled.disabled:focus,.datepicker table tr td.today.disabled.disabled:hover,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:focus,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today.disabled:hover.disabled,.datepicker table tr td.today.disabled:hover.disabled.active,.datepicker table tr td.today.disabled:hover.disabled:active,.datepicker table tr td.today.disabled:hover.disabled:focus,.datepicker table tr td.today.disabled:hover.disabled:hover,.datepicker table tr td.today.disabled:hover[disabled],.datepicker table tr td.today.disabled:hover[disabled].active,.datepicker table tr td.today.disabled:hover[disabled]:active,.datepicker table tr td.today.disabled:hover[disabled]:focus,.datepicker table tr td.today.disabled:hover[disabled]:hover,.datepicker table tr td.today.disabled[disabled],.datepicker table tr td.today.disabled[disabled].active,.datepicker table tr td.today.disabled[disabled]:active,.datepicker table tr td.today.disabled[disabled]:focus,.datepicker table tr td.today.disabled[disabled]:hover,.datepicker table tr td.today:hover.disabled,.datepicker table tr td.today:hover.disabled.active,.datepicker table tr td.today:hover.disabled:active,.datepicker table tr td.today:hover.disabled:focus,.datepicker table tr td.today:hover.disabled:hover,.datepicker table tr td.today:hover[disabled],.datepicker table tr td.today:hover[disabled].active,.datepicker table tr td.today:hover[disabled]:active,.datepicker table tr td.today:hover[disabled]:focus,.datepicker table tr td.today:hover[disabled]:hover,.datepicker table tr td.today[disabled],.datepicker table tr td.today[disabled].active,.datepicker table tr td.today[disabled]:active,.datepicker table tr td.today[disabled]:focus,.datepicker table tr td.today[disabled]:hover,fieldset[disabled] .datepicker table tr td.today,fieldset[disabled] .datepicker table tr td.today.active,fieldset[disabled] .datepicker table tr td.today.disabled,fieldset[disabled] .datepicker table tr td.today.disabled.active,fieldset[disabled] .datepicker table tr td.today.disabled:active,fieldset[disabled] .datepicker table tr td.today.disabled:focus,fieldset[disabled] .datepicker table tr td.today.disabled:hover,fieldset[disabled] .datepicker table tr td.today.disabled:hover.active,fieldset[disabled] .datepicker table tr td.today.disabled:hover:active,fieldset[disabled] .datepicker table tr td.today.disabled:hover:focus,fieldset[disabled] .datepicker table tr td.today.disabled:hover:hover,fieldset[disabled] .datepicker table tr td.today:active,fieldset[disabled] .datepicker table tr td.today:focus,fieldset[disabled] .datepicker table tr td.today:hover,fieldset[disabled] .datepicker table tr td.today:hover.active,fieldset[disabled] .datepicker table tr td.today:hover:active,fieldset[disabled] .datepicker table tr td.today:hover:focus,fieldset[disabled] .datepicker table tr td.today:hover:hover{background-color:#ffdb99;border-color:#ffb733}.datepicker table tr td.today:hover:hover{color:#000}.datepicker table tr td.today.active:hover{color:#fff}.datepicker table tr td.range,.datepicker table tr td.range.disabled,.datepicker table tr td.range.disabled:hover,.datepicker table tr td.range:hover{background:#eee;border-radius:0}.datepicker table tr td.range.today,.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today:hover{color:#000;background-color:#f7ca77;border-color:#f1a417;border-radius:0}.datepicker table tr td.range.today.active,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:focus,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today.disabled:hover.active,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today.disabled:hover:focus,.datepicker table tr td.range.today.disabled:hover:hover,.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:focus,.datepicker table tr td.range.today:hover,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today:hover:active,.datepicker table tr td.range.today:hover:focus,.datepicker table tr td.range.today:hover:hover,.open .dropdown-toggle.datepicker table tr td.range.today,.open .dropdown-toggle.datepicker table tr td.range.today.disabled,.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover,.open .dropdown-toggle.datepicker table tr td.range.today:hover{color:#000;background-color:#f4bb51;border-color:#bf800c}.datepicker table tr td.range.today.active,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:hover.active,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today:hover:active,.open .dropdown-toggle.datepicker table tr td.range.today,.open .dropdown-toggle.datepicker table tr td.range.today.disabled,.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover,.open .dropdown-toggle.datepicker table tr td.range.today:hover{background-image:none}.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled.disabled,.datepicker table tr td.range.today.disabled.disabled.active,.datepicker table tr td.range.today.disabled.disabled:active,.datepicker table tr td.range.today.disabled.disabled:focus,.datepicker table tr td.range.today.disabled.disabled:hover,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:focus,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today.disabled:hover.disabled,.datepicker table tr td.range.today.disabled:hover.disabled.active,.datepicker table tr td.range.today.disabled:hover.disabled:active,.datepicker table tr td.range.today.disabled:hover.disabled:focus,.datepicker table tr td.range.today.disabled:hover.disabled:hover,.datepicker table tr td.range.today.disabled:hover[disabled],.datepicker table tr td.range.today.disabled:hover[disabled].active,.datepicker table tr td.range.today.disabled:hover[disabled]:active,.datepicker table tr td.range.today.disabled:hover[disabled]:focus,.datepicker table tr td.range.today.disabled:hover[disabled]:hover,.datepicker table tr td.range.today.disabled[disabled],.datepicker table tr td.range.today.disabled[disabled].active,.datepicker table tr td.range.today.disabled[disabled]:active,.datepicker table tr td.range.today.disabled[disabled]:focus,.datepicker table tr td.range.today.disabled[disabled]:hover,.datepicker table tr td.range.today:hover.disabled,.datepicker table tr td.range.today:hover.disabled.active,.datepicker table tr td.range.today:hover.disabled:active,.datepicker table tr td.range.today:hover.disabled:focus,.datepicker table tr td.range.today:hover.disabled:hover,.datepicker table tr td.range.today:hover[disabled],.datepicker table tr td.range.today:hover[disabled].active,.datepicker table tr td.range.today:hover[disabled]:active,.datepicker table tr td.range.today:hover[disabled]:focus,.datepicker table tr td.range.today:hover[disabled]:hover,.datepicker table tr td.range.today[disabled],.datepicker table tr td.range.today[disabled].active,.datepicker table tr td.range.today[disabled]:active,.datepicker table tr td.range.today[disabled]:focus,.datepicker table tr td.range.today[disabled]:hover,fieldset[disabled] .datepicker table tr td.range.today,fieldset[disabled] .datepicker table tr td.range.today.active,fieldset[disabled] .datepicker table tr td.range.today.disabled,fieldset[disabled] .datepicker table tr td.range.today.disabled.active,fieldset[disabled] .datepicker table tr td.range.today.disabled:active,fieldset[disabled] .datepicker table tr td.range.today.disabled:focus,fieldset[disabled] .datepicker table tr td.range.today.disabled:hover,fieldset[disabled] .datepicker table tr td.range.today.disabled:hover.active,fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:active,fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:focus,fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:hover,fieldset[disabled] .datepicker table tr td.range.today:active,fieldset[disabled] .datepicker table tr td.range.today:focus,fieldset[disabled] .datepicker table tr td.range.today:hover,fieldset[disabled] .datepicker table tr td.range.today:hover.active,fieldset[disabled] .datepicker table tr td.range.today:hover:active,fieldset[disabled] .datepicker table tr td.range.today:hover:focus,fieldset[disabled] .datepicker table tr td.range.today:hover:hover{background-color:#f7ca77;border-color:#f1a417}.datepicker table tr td.selected,.datepicker table tr td.selected.disabled,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected:hover{color:#fff;background-color:#999;border-color:#555;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.selected.active,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:focus,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected.disabled:hover.active,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected.disabled:hover:focus,.datepicker table tr td.selected.disabled:hover:hover,.datepicker table tr td.selected:active,.datepicker table tr td.selected:focus,.datepicker table tr td.selected:hover,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected:hover:active,.datepicker table tr td.selected:hover:focus,.datepicker table tr td.selected:hover:hover,.open .dropdown-toggle.datepicker table tr td.selected,.open .dropdown-toggle.datepicker table tr td.selected.disabled,.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover,.open .dropdown-toggle.datepicker table tr td.selected:hover{color:#fff;background-color:#858585;border-color:#373737}.datepicker table tr td.selected.active,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:hover.active,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected:active,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected:hover:active,.open .dropdown-toggle.datepicker table tr td.selected,.open .dropdown-toggle.datepicker table tr td.selected.disabled,.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover,.open .dropdown-toggle.datepicker table tr td.selected:hover{background-image:none}.datepicker table tr td.selected.disabled,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled.disabled,.datepicker table tr td.selected.disabled.disabled.active,.datepicker table tr td.selected.disabled.disabled:active,.datepicker table tr td.selected.disabled.disabled:focus,.datepicker table tr td.selected.disabled.disabled:hover,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:focus,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected.disabled:hover.disabled,.datepicker table tr td.selected.disabled:hover.disabled.active,.datepicker table tr td.selected.disabled:hover.disabled:active,.datepicker table tr td.selected.disabled:hover.disabled:focus,.datepicker table tr td.selected.disabled:hover.disabled:hover,.datepicker table tr td.selected.disabled:hover[disabled],.datepicker table tr td.selected.disabled:hover[disabled].active,.datepicker table tr td.selected.disabled:hover[disabled]:active,.datepicker table tr td.selected.disabled:hover[disabled]:focus,.datepicker table tr td.selected.disabled:hover[disabled]:hover,.datepicker table tr td.selected.disabled[disabled],.datepicker table tr td.selected.disabled[disabled].active,.datepicker table tr td.selected.disabled[disabled]:active,.datepicker table tr td.selected.disabled[disabled]:focus,.datepicker table tr td.selected.disabled[disabled]:hover,.datepicker table tr td.selected:hover.disabled,.datepicker table tr td.selected:hover.disabled.active,.datepicker table tr td.selected:hover.disabled:active,.datepicker table tr td.selected:hover.disabled:focus,.datepicker table tr td.selected:hover.disabled:hover,.datepicker table tr td.selected:hover[disabled],.datepicker table tr td.selected:hover[disabled].active,.datepicker table tr td.selected:hover[disabled]:active,.datepicker table tr td.selected:hover[disabled]:focus,.datepicker table tr td.selected:hover[disabled]:hover,.datepicker table tr td.selected[disabled],.datepicker table tr td.selected[disabled].active,.datepicker table tr td.selected[disabled]:active,.datepicker table tr td.selected[disabled]:focus,.datepicker table tr td.selected[disabled]:hover,fieldset[disabled] .datepicker table tr td.selected,fieldset[disabled] .datepicker table tr td.selected.active,fieldset[disabled] .datepicker table tr td.selected.disabled,fieldset[disabled] .datepicker table tr td.selected.disabled.active,fieldset[disabled] .datepicker table tr td.selected.disabled:active,fieldset[disabled] .datepicker table tr td.selected.disabled:focus,fieldset[disabled] .datepicker table tr td.selected.disabled:hover,fieldset[disabled] .datepicker table tr td.selected.disabled:hover.active,fieldset[disabled] .datepicker table tr td.selected.disabled:hover:active,fieldset[disabled] .datepicker table tr td.selected.disabled:hover:focus,fieldset[disabled] .datepicker table tr td.selected.disabled:hover:hover,fieldset[disabled] .datepicker table tr td.selected:active,fieldset[disabled] .datepicker table tr td.selected:focus,fieldset[disabled] .datepicker table tr td.selected:hover,fieldset[disabled] .datepicker table tr td.selected:hover.active,fieldset[disabled] .datepicker table tr td.selected:hover:active,fieldset[disabled] .datepicker table tr td.selected:hover:focus,fieldset[disabled] .datepicker table tr td.selected:hover:hover{background-color:#999;border-color:#555}.datepicker table tr td.active,.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active:hover{color:#fff;background-color:#428bca;border-color:#357ebd;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.active.active,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:focus,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active.disabled:hover.active,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active.disabled:hover:focus,.datepicker table tr td.active.disabled:hover:hover,.datepicker table tr td.active:active,.datepicker table tr td.active:focus,.datepicker table tr td.active:hover,.datepicker table tr td.active:hover.active,.datepicker table tr td.active:hover:active,.datepicker table tr td.active:hover:focus,.datepicker table tr td.active:hover:hover,.open .dropdown-toggle.datepicker table tr td.active,.open .dropdown-toggle.datepicker table tr td.active.disabled,.open .dropdown-toggle.datepicker table tr td.active.disabled:hover,.open .dropdown-toggle.datepicker table tr td.active:hover{color:#fff;background-color:#3276b1;border-color:#285e8e}.datepicker table tr td.active.active,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:hover.active,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active:active,.datepicker table tr td.active:hover.active,.datepicker table tr td.active:hover:active,.open .dropdown-toggle.datepicker table tr td.active,.open .dropdown-toggle.datepicker table tr td.active.disabled,.open .dropdown-toggle.datepicker table tr td.active.disabled:hover,.open .dropdown-toggle.datepicker table tr td.active:hover{background-image:none}.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled.disabled,.datepicker table tr td.active.disabled.disabled.active,.datepicker table tr td.active.disabled.disabled:active,.datepicker table tr td.active.disabled.disabled:focus,.datepicker table tr td.active.disabled.disabled:hover,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:focus,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active.disabled:hover.disabled,.datepicker table tr td.active.disabled:hover.disabled.active,.datepicker table tr td.active.disabled:hover.disabled:active,.datepicker table tr td.active.disabled:hover.disabled:focus,.datepicker table tr td.active.disabled:hover.disabled:hover,.datepicker table tr td.active.disabled:hover[disabled],.datepicker table tr td.active.disabled:hover[disabled].active,.datepicker table tr td.active.disabled:hover[disabled]:active,.datepicker table tr td.active.disabled:hover[disabled]:focus,.datepicker table tr td.active.disabled:hover[disabled]:hover,.datepicker table tr td.active.disabled[disabled],.datepicker table tr td.active.disabled[disabled].active,.datepicker table tr td.active.disabled[disabled]:active,.datepicker table tr td.active.disabled[disabled]:focus,.datepicker table tr td.active.disabled[disabled]:hover,.datepicker table tr td.active:hover.disabled,.datepicker table tr td.active:hover.disabled.active,.datepicker table tr td.active:hover.disabled:active,.datepicker table tr td.active:hover.disabled:focus,.datepicker table tr td.active:hover.disabled:hover,.datepicker table tr td.active:hover[disabled],.datepicker table tr td.active:hover[disabled].active,.datepicker table tr td.active:hover[disabled]:active,.datepicker table tr td.active:hover[disabled]:focus,.datepicker table tr td.active:hover[disabled]:hover,.datepicker table tr td.active[disabled],.datepicker table tr td.active[disabled].active,.datepicker table tr td.active[disabled]:active,.datepicker table tr td.active[disabled]:focus,.datepicker table tr td.active[disabled]:hover,fieldset[disabled] .datepicker table tr td.active,fieldset[disabled] .datepicker table tr td.active.active,fieldset[disabled] .datepicker table tr td.active.disabled,fieldset[disabled] .datepicker table tr td.active.disabled.active,fieldset[disabled] .datepicker table tr td.active.disabled:active,fieldset[disabled] .datepicker table tr td.active.disabled:focus,fieldset[disabled] .datepicker table tr td.active.disabled:hover,fieldset[disabled] .datepicker table tr td.active.disabled:hover.active,fieldset[disabled] .datepicker table tr td.active.disabled:hover:active,fieldset[disabled] .datepicker table tr td.active.disabled:hover:focus,fieldset[disabled] .datepicker table tr td.active.disabled:hover:hover,fieldset[disabled] .datepicker table tr td.active:active,fieldset[disabled] .datepicker table tr td.active:focus,fieldset[disabled] .datepicker table tr td.active:hover,fieldset[disabled] .datepicker table tr td.active:hover.active,fieldset[disabled] .datepicker table tr td.active:hover:active,fieldset[disabled] .datepicker table tr td.active:hover:focus,fieldset[disabled] .datepicker table tr td.active:hover:hover{background-color:#428bca;border-color:#357ebd}.datepicker table tr td span{display:block;width:23%;height:54px;line-height:54px;float:left;margin:1%;cursor:pointer;border-radius:4px}.datepicker table tr td span:hover{background:#eee}.datepicker table tr td span.disabled,.datepicker table tr td span.disabled:hover{background:0 0;color:#999;cursor:default}.datepicker table tr td span.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active:hover{color:#fff;background-color:#428bca;border-color:#357ebd;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td span.active.active,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:focus,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active.disabled:hover:focus,.datepicker table tr td span.active.disabled:hover:hover,.datepicker table tr td span.active:active,.datepicker table tr td span.active:focus,.datepicker table tr td span.active:hover,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active:hover:active,.datepicker table tr td span.active:hover:focus,.datepicker table tr td span.active:hover:hover,.open .dropdown-toggle.datepicker table tr td span.active,.open .dropdown-toggle.datepicker table tr td span.active.disabled,.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover,.open .dropdown-toggle.datepicker table tr td span.active:hover{color:#fff;background-color:#3276b1;border-color:#285e8e}.datepicker table tr td span.active.active,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active:hover:active,.open .dropdown-toggle.datepicker table tr td span.active,.open .dropdown-toggle.datepicker table tr td span.active.disabled,.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover,.open .dropdown-toggle.datepicker table tr td span.active:hover{background-image:none}.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled.disabled,.datepicker table tr td span.active.disabled.disabled.active,.datepicker table tr td span.active.disabled.disabled:active,.datepicker table tr td span.active.disabled.disabled:focus,.datepicker table tr td span.active.disabled.disabled:hover,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:focus,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover.disabled,.datepicker table tr td span.active.disabled:hover.disabled.active,.datepicker table tr td span.active.disabled:hover.disabled:active,.datepicker table tr td span.active.disabled:hover.disabled:focus,.datepicker table tr td span.active.disabled:hover.disabled:hover,.datepicker table tr td span.active.disabled:hover[disabled],.datepicker table tr td span.active.disabled:hover[disabled].active,.datepicker table tr td span.active.disabled:hover[disabled]:active,.datepicker table tr td span.active.disabled:hover[disabled]:focus,.datepicker table tr td span.active.disabled:hover[disabled]:hover,.datepicker table tr td span.active.disabled[disabled],.datepicker table tr td span.active.disabled[disabled].active,.datepicker table tr td span.active.disabled[disabled]:active,.datepicker table tr td span.active.disabled[disabled]:focus,.datepicker table tr td span.active.disabled[disabled]:hover,.datepicker table tr td span.active:hover.disabled,.datepicker table tr td span.active:hover.disabled.active,.datepicker table tr td span.active:hover.disabled:active,.datepicker table tr td span.active:hover.disabled:focus,.datepicker table tr td span.active:hover.disabled:hover,.datepicker table tr td span.active:hover[disabled],.datepicker table tr td span.active:hover[disabled].active,.datepicker table tr td span.active:hover[disabled]:active,.datepicker table tr td span.active:hover[disabled]:focus,.datepicker table tr td span.active:hover[disabled]:hover,.datepicker table tr td span.active[disabled],.datepicker table tr td span.active[disabled].active,.datepicker table tr td span.active[disabled]:active,.datepicker table tr td span.active[disabled]:focus,.datepicker table tr td span.active[disabled]:hover,fieldset[disabled] .datepicker table tr td span.active,fieldset[disabled] .datepicker table tr td span.active.active,fieldset[disabled] .datepicker table tr td span.active.disabled,fieldset[disabled] .datepicker table tr td span.active.disabled.active,fieldset[disabled] .datepicker table tr td span.active.disabled:active,fieldset[disabled] .datepicker table tr td span.active.disabled:focus,fieldset[disabled] .datepicker table tr td span.active.disabled:hover,fieldset[disabled] .datepicker table tr td span.active.disabled:hover.active,fieldset[disabled] .datepicker table tr td span.active.disabled:hover:active,fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus,fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover,fieldset[disabled] .datepicker table tr td span.active:active,fieldset[disabled] .datepicker table tr td span.active:focus,fieldset[disabled] .datepicker table tr td span.active:hover,fieldset[disabled] .datepicker table tr td span.active:hover.active,fieldset[disabled] .datepicker table tr td span.active:hover:active,fieldset[disabled] .datepicker table tr td span.active:hover:focus,fieldset[disabled] .datepicker table tr td span.active:hover:hover{background-color:#428bca;border-color:#357ebd}.datepicker table tr td span.new,.datepicker table tr td span.old{color:#999}.datepicker .datepicker-switch{width:145px}.datepicker tfoot tr th,.datepicker thead tr:first-child th{cursor:pointer}.datepicker tfoot tr th:hover,.datepicker thead tr:first-child th:hover{background:#eee}.datepicker .cw{font-size:10px;width:12px;padding:0 2px 0 5px;vertical-align:middle}.datepicker thead tr:first-child .cw{cursor:default;background-color:transparent}.input-group.date .input-group-addon{cursor:pointer}.input-daterange{width:100%}.input-daterange input{text-align:center}.input-daterange input:first-child{border-radius:3px 0 0 3px}.input-daterange input:last-child{border-radius:0 3px 3px 0}.input-daterange .input-group-addon{width:auto;min-width:16px;padding:4px 5px;font-weight:400;line-height:1.42857143;text-align:center;text-shadow:0 1px 0 #fff;vertical-align:middle;background-color:#eee;border:solid #ccc;border-width:1px 0;margin-left:-5px;margin-right:-5px}.datepicker.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;display:none;min-width:160px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:5px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;*border-right-width:2px;*border-bottom-width:2px;color:#333;font-size:13px;line-height:1.42857143}.datepicker.datepicker-inline td,.datepicker.datepicker-inline th,.datepicker.dropdown-menu td,.datepicker.dropdown-menu th{padding:0 5px}
libs/factory/bootstrap/assets/css-min/bootstrap.datetimepicker.min.css ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ /*!
12
+ * Datetimepicker for Bootstrap 3
13
+ * version : 4.17.47
14
+ * https://github.com/Eonasdan/bootstrap-datetimepicker/
15
+ */.factory-bootstrap-421 .bootstrap-datetimepicker-widget{list-style:none}.factory-bootstrap-421 .bootstrap-datetimepicker-widget.dropdown-menu{display:block;margin:2px 0;padding:4px;width:19em}@media (min-width:768px){.factory-bootstrap-421 .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:992px){.factory-bootstrap-421 .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:1200px){.factory-bootstrap-421 .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}.factory-bootstrap-421 .bootstrap-datetimepicker-widget.dropdown-menu:after,.factory-bootstrap-421 .bootstrap-datetimepicker-widget.dropdown-menu:before{content:'';display:inline-block;position:absolute}.factory-bootstrap-421 .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-421 .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-421 .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-421 .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-421 .bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before{left:auto;right:6px}.factory-bootstrap-421 .bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after{left:auto;right:7px}.factory-bootstrap-421 .bootstrap-datetimepicker-widget .list-unstyled{margin:0}.factory-bootstrap-421 .bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.factory-bootstrap-421 .bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.factory-bootstrap-421 .bootstrap-datetimepicker-widget .timepicker-hour,.factory-bootstrap-421 .bootstrap-datetimepicker-widget .timepicker-minute,.factory-bootstrap-421 .bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:700;font-size:1.2em;margin:0}.factory-bootstrap-421 .bootstrap-datetimepicker-widget button[data-action]{padding:6px}.factory-bootstrap-421 .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-421 .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-421 .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-421 .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-421 .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-421 .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-421 .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-421 .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-421 .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-421 .bootstrap-datetimepicker-widget .picker-switch{text-align:center}.factory-bootstrap-421 .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-421 .bootstrap-datetimepicker-widget .picker-switch td{padding:0;margin:0;height:auto;width:auto;line-height:inherit}.factory-bootstrap-421 .bootstrap-datetimepicker-widget .picker-switch td span{line-height:2.5;height:2.5em;width:100%}.factory-bootstrap-421 .bootstrap-datetimepicker-widget table{width:100%;margin:0}.factory-bootstrap-421 .bootstrap-datetimepicker-widget table td,.factory-bootstrap-421 .bootstrap-datetimepicker-widget table th{text-align:center;border-radius:4px}.factory-bootstrap-421 .bootstrap-datetimepicker-widget table th{height:20px;line-height:20px;width:20px}.factory-bootstrap-421 .bootstrap-datetimepicker-widget table th.picker-switch{width:145px}.factory-bootstrap-421 .bootstrap-datetimepicker-widget table th.disabled,.factory-bootstrap-421 .bootstrap-datetimepicker-widget table th.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.factory-bootstrap-421 .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-421 .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-421 .bootstrap-datetimepicker-widget table thead tr:first-child th{cursor:pointer}.factory-bootstrap-421 .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#eee}.factory-bootstrap-421 .bootstrap-datetimepicker-widget table td{height:54px;line-height:54px;width:54px}.factory-bootstrap-421 .bootstrap-datetimepicker-widget table td.cw{font-size:.8em;height:20px;line-height:20px;color:#777}.factory-bootstrap-421 .bootstrap-datetimepicker-widget table td.day{height:20px;line-height:20px;width:20px}.factory-bootstrap-421 .bootstrap-datetimepicker-widget table td.day:hover,.factory-bootstrap-421 .bootstrap-datetimepicker-widget table td.hour:hover,.factory-bootstrap-421 .bootstrap-datetimepicker-widget table td.minute:hover,.factory-bootstrap-421 .bootstrap-datetimepicker-widget table td.second:hover{background:#eee;cursor:pointer}.factory-bootstrap-421 .bootstrap-datetimepicker-widget table td.new,.factory-bootstrap-421 .bootstrap-datetimepicker-widget table td.old{color:#777}.factory-bootstrap-421 .bootstrap-datetimepicker-widget table td.today{position:relative}.factory-bootstrap-421 .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-421 .bootstrap-datetimepicker-widget table td.active,.factory-bootstrap-421 .bootstrap-datetimepicker-widget table td.active:hover{background-color:#337ab7;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.factory-bootstrap-421 .bootstrap-datetimepicker-widget table td.active.today:before{border-bottom-color:#fff}.factory-bootstrap-421 .bootstrap-datetimepicker-widget table td.disabled,.factory-bootstrap-421 .bootstrap-datetimepicker-widget table td.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.factory-bootstrap-421 .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-421 .bootstrap-datetimepicker-widget table td span:hover{background:#eee}.factory-bootstrap-421 .bootstrap-datetimepicker-widget table td span.active{background-color:#337ab7;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.factory-bootstrap-421 .bootstrap-datetimepicker-widget table td span.old{color:#777}.factory-bootstrap-421 .bootstrap-datetimepicker-widget table td span.disabled,.factory-bootstrap-421 .bootstrap-datetimepicker-widget table td span.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.factory-bootstrap-421 .bootstrap-datetimepicker-widget.usetwentyfour td.hour{height:27px;line-height:27px}.factory-bootstrap-421 .bootstrap-datetimepicker-widget.wider{width:21em}.factory-bootstrap-421 .bootstrap-datetimepicker-widget .datepicker-decades .decade{line-height:1.8em!important}.factory-bootstrap-421 .input-group.date .input-group-addon{cursor:pointer}.factory-bootstrap-421 .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 ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .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-421 .btn-primary:focus,.factory-bootstrap-421 .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-421 .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-421 .btn-primary:disabled,.factory-bootstrap-421 .btn-primary[disabled]{color:#cfd1c7!important;background:#89993a!important;border-color:#727f30!important;text-shadow:none!important}.factory-bootstrap-421 .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-421 .pagination>.active>a,.factory-bootstrap-421 .pagination>.active>a:focus,.factory-bootstrap-421 .pagination>.active>a:hover,.factory-bootstrap-421 .pagination>.active>span,.factory-bootstrap-421 .pagination>.active>span:focus,.factory-bootstrap-421 .pagination>.active>span:hover{background-color:#a3b745;border-color:#839237}
libs/factory/bootstrap/assets/css-min/bootstrap.form-group.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .factory-form-group .factory-legend{padding:9px 12px;background-color:#f9f9f9}.factory-bootstrap-421 .factory-form-group .factory-title{font-weight:700;font-size:14px;line-height:14px;color:#555;margin:0}.factory-bootstrap-421 .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-421 .factory-form-group .factory-hint-icon.factory-hint-icon-green{background:#8bc34a}.factory-bootstrap-421 .factory-form-group .factory-hint-icon.factory-hint-icon-grey{background:#9e9e9e}.factory-bootstrap-421 .factory-form-group .factory-hint-icon.factory-hint-icon-red{background:#E91E63}.factory-bootstrap-421 .factory-form-group .factory-hint{margin:0;font-size:12px;line-height:16px;margin-top:6px}.factory-bootstrap-421 .factory-form-group+.factory-form-group{margin-top:30px}.factory-bootstrap-421 .factory-form-group legend+.control-group{margin-top:0}
libs/factory/bootstrap/assets/css-min/bootstrap.form-metabox.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
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-421 .control-label{float:left;width:100%;text-align:left;position:relative;top:1px}#side-sortables .factory-bootstrap-421 .control-icon{float:left;margin:0 6px 0 0}#side-sortables .factory-bootstrap-421 input{float:right;position:relative;top:-25px}#side-sortables .factory-bootstrap-421 .col-sm-10{margin:0;width:100%}#side-sortables .factory-bootstrap-421 .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-421 .form-group:first-child{border-top:0;padding-top:0;margin-top:0}
libs/factory/bootstrap/assets/css-min/bootstrap.light.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .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-421 .btn-primary:focus,.factory-bootstrap-421 .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-421 .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-421 .btn-primary:disabled,.factory-bootstrap-421 .btn-primary[disabled]{color:#c7cfd1!important;background:#0384a4!important;border-color:#036881!important;text-shadow:none!important}.factory-bootstrap-421 .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-421 .pagination>.active>a,.factory-bootstrap-421 .pagination>.active>a:focus,.factory-bootstrap-421 .pagination>.active>a:hover,.factory-bootstrap-421 .pagination>.active>span,.factory-bootstrap-421 .pagination>.active>span:focus,.factory-bootstrap-421 .pagination>.active>span:hover{background-color:#04a4cc;border-color:#037c9a}
libs/factory/bootstrap/assets/css-min/bootstrap.midnight.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .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-421 .btn-primary:focus,.factory-bootstrap-421 .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-421 .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-421 .btn-primary:disabled,.factory-bootstrap-421 .btn-primary[disabled]{color:#d1c7c7!important;background:#d92c23!important;border-color:#ba251e!important;text-shadow:none!important}.factory-bootstrap-421 .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-421 .pagination>.active>a,.factory-bootstrap-421 .pagination>.active>a:focus,.factory-bootstrap-421 .pagination>.active>a:hover,.factory-bootstrap-421 .pagination>.active>span,.factory-bootstrap-421 .pagination>.active>span:focus,.factory-bootstrap-421 .pagination>.active>span:hover{background-color:#e14d43;border-color:#d02a21}
libs/factory/bootstrap/assets/css-min/bootstrap.ocean.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .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-421 .btn-primary:focus,.factory-bootstrap-421 .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-421 .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-421 .btn-primary:disabled,.factory-bootstrap-421 .btn-primary[disabled]{color:#c7d1c8!important;background:#86a988!important;border-color:#719a74!important;text-shadow:none!important}.factory-bootstrap-421 .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-421 .pagination>.active>a,.factory-bootstrap-421 .pagination>.active>a:focus,.factory-bootstrap-421 .pagination>.active>a:hover,.factory-bootstrap-421 .pagination>.active>span,.factory-bootstrap-421 .pagination>.active>span:focus,.factory-bootstrap-421 .pagination>.active>span:hover{background-color:#9ebaa0;border-color:#80a583}
libs/factory/bootstrap/assets/css-min/bootstrap.separator.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .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 ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .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-421 .btn-primary:focus,.factory-bootstrap-421 .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-421 .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-421 .btn-primary:disabled,.factory-bootstrap-421 .btn-primary[disabled]{color:#d1cbc7!important;background:#cc6c23!important;border-color:#ad5c1e!important;text-shadow:none!important}.factory-bootstrap-421 .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-421 .pagination>.active>a,.factory-bootstrap-421 .pagination>.active>a:focus,.factory-bootstrap-421 .pagination>.active>a:hover,.factory-bootstrap-421 .pagination>.active>span,.factory-bootstrap-421 .pagination>.active>span:focus,.factory-bootstrap-421 .pagination>.active>span:hover{background-color:#dd823b;border-color:#c36822}
libs/factory/bootstrap/assets/css-min/bootstrap.tab.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .factory-tab{overflow:hidden;margin-bottom:25px}.factory-bootstrap-421 .factory-tab .form-group{overflow:hidden}.factory-bootstrap-421 .factory-tab+.form-group{margin-top:30px}.factory-bootstrap-421 .nav-tabs a{text-decoration:none}.factory-bootstrap-421 .factory-align-horizontal .nav-tabs{border-bottom:0}.factory-bootstrap-421 .factory-align-vertical .factory-headers{float:left;width:150px}.factory-bootstrap-421 .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-421 .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-421 .factory-align-vertical .factory-bodies{min-height:250px;margin-left:150px}.factory-bootstrap-421 .factory-align-vertical .factory-bodies .actory-tab-item{clear:both}.factory-bootstrap-421 .form-horizontal .factory-align-vertical .form-group{margin-left:-5px}.factory-bootstrap-421 .factory-align-vertical .nav-tabs li{float:none}.factory-bootstrap-421 .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-421 .factory-align-vertical .nav-tabs>.active>a{border:1px solid #DDD!important;border-right:1px solid #fff!important}.factory-bootstrap-421 .factory-align-vertical .nav-tabs>li a:hover{color:#21759B;z-index:5;border-color:transparent}.factory-bootstrap-421 .factory-align-vertical .control-label{width:20%;max-width:140px}.factory-bootstrap-421 .factory-align-vertical .control-group{width:80%}.factory-bootstrap-421 .factory-align-vertical .control-group input[type=text],.factory-bootstrap-421 .factory-align-vertical .control-group textarea{width:90%}
libs/factory/bootstrap/assets/css-min/bootstrap.wp-editor.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .wp-editor-wrap *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.factory-bootstrap-421 .wp-editor-wrap .button,.factory-bootstrap-421 .wp-editor-wrap input,.factory-bootstrap-421 .wp-editor-wrap textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.factory-bootstrap-421 .switch-html,.factory-bootstrap-421 .switch-tmce{color:#777}.factory-bootstrap-421 .html-active .switch-html,.factory-bootstrap-421 .tmce-active .switch-tmce{color:#555}.factory-bootstrap-421 .switch-html:hover,.factory-bootstrap-421 .switch-tmce:hover{color:#777}
libs/factory/bootstrap/assets/css-min/control.checkbox.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ #side-sortables .factory-bootstrap-421 .factory-buttons-way{float:right;position:relative;top:-25px;left:5px;border:3px solid #f9f9f9;border-radius:4px}.factory-bootstrap-421 .factory-buttons-way{border:3px solid #f9f9f9;border-radius:4px}.factory-bootstrap-421 .factory-buttons-way button{padding-left:10px;padding-right:10px}.factory-bootstrap-421 .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-421 .factory-checkbox-tumbler-hint{margin-top:5px}.factory-bootstrap-421 .factory-checkbox-tumbler-hint .factory-tumbler-content{display:inline-block;background-color:#ffd;padding:1px 5px}.admin-color-light .factory-bootstrap-421 .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-421 .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-421 .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-421 .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-421 .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-421 .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-421 .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 ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .factory-control-row{padding-left:105px;position:relative}.factory-bootstrap-421 .factory-control-row .factory-color-wrap{position:absolute;left:0;top:0}.factory-bootstrap-421 .factory-control-row .factory-opacity-wrap{width:100%}.factory-bootstrap-421 .iris-picker{margin-top:10px}
libs/factory/bootstrap/assets/css-min/control.color.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .factory-color{position:relative}.factory-bootstrap-421 .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-421 .factory-color .factory-background,.factory-bootstrap-421 .factory-color .factory-pattern{cursor:pointer;height:26px;width:26px;position:absolute;border-radius:5px;background:transparent url(../../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-421 .factory-color .factory-background{z-index:2;border-radius:3px}
libs/factory/bootstrap/assets/css-min/control.dropdown-and-colors.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .factory-dropdown-and-colors .factory-colors-wrap,.factory-bootstrap-421 .factory-dropdown-and-colors .factory-dropdown-wrap{display:inline-block}.factory-bootstrap-421 .factory-dropdown-and-colors .factory-dropdown-wrap{min-width:200px;max-width:300px}
libs/factory/bootstrap/assets/css-min/control.dropdown.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .factory-dropdown.factory-buttons-way .fa{margin-right:6px;position:relative}.factory-bootstrap-421 .factory-dropdown.factory-buttons-way{border:0;border-radius:0}.factory-bootstrap-421 .factory-hints .factory-hint{margin-top:5px;display:inline-block;background-color:#ffd;padding:1px 5px}.admin-color-light .factory-bootstrap-421 .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-421 .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-421 .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-421 .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-421 .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-421 .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-421 .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-421 .factory-dropdown.factory-ddslick-way .dd-select{background-color:#fff!important}.factory-bootstrap-421 .factory-dropdown.factory-ddslick-way label{margin-bottom:1px}.factory-bootstrap-421 .factory-dropdown.factory-ddslick-way .dd-option,.factory-bootstrap-421 .factory-dropdown.factory-ddslick-way .dd-selected{padding:8px 12px 8px 11px!important}
libs/factory/bootstrap/assets/css-min/control.fonts.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .factory-font .factory-control-row{padding:0;vertical-align:top}.factory-bootstrap-421 .factory-font .factory-color-wrap{position:static;display:inline-block;vertical-align:top}.factory-bootstrap-421 .factory-font .factory-size-wrap{display:inline-block;width:70px;vertical-align:top}.factory-bootstrap-421 .iris-picker{margin-top:10px}.factory-bootstrap-421 .factory-font .factory-family-wrap{padding-bottom:10px}.factory-bootstrap-421 .factory-font .chosen-results{max-height:150px}
libs/factory/bootstrap/assets/css-min/control.list.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .factory-list li input{margin:0 5px 0 0;position:relative;top:1px;outline:0!important}.factory-bootstrap-421 .factory-list li span{vertical-align:bottom;line-height:100%}.factory-bootstrap-421 .factory-list .factory-error{position:relative;display:inline-block}.factory-bootstrap-421 .factory-list .factory-error i{color:#f47665;margin:0 7px 0 1px;cursor:help}.factory-bootstrap-421 .factory-list .factory-error-text{display:none;position:absolute;width:300px}.factory-bootstrap-421 .factory-list .factory-error-text,.factory-bootstrap-421 .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-421 .factory-list-error{padding:5px 10px;max-width:500px;display:inline-block}.factory-bootstrap-421 .factory-list-error i{margin:0 7px 0 1px}.factory-bootstrap-421 .factory-list .factory-error-text a{color:#fff;font-weight:700}.factory-bootstrap-421 .factory-list .factory-has-error:hover .factory-error-text{display:block}.factory-bootstrap-421 .factory-list .factory-has-error{cursor:default}.opanda-connect-buttons .opanda-has-error .opanda-error{display:inline-block}.factory-bootstrap-421 .factory-checklist-way.factory-empty{font-style:italic;margin-top:7px}
libs/factory/bootstrap/assets/css-min/control.multiple-textbox.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .factory-mtextbox-item{position:relative;margin-bottom:5px}.factory-bootstrap-421 .factory-mtextbox-item input,.factory-mtextbox-remove-item{display:inline-block}.factory-bootstrap-421 .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-421 .factory-mtextbox-item .factory-mtextbox-remove-item:focus,.factory-bootstrap-421 .factory-mtextbox-item .factory-mtextbox-remove-item:hover{box-shadow:none;outline:0}.factory-bootstrap-421 .factory-mtextbox-add-item{display:block;margin-top:10px}
libs/factory/bootstrap/assets/css-min/control.pattern.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .factory-pattern .factory-pattern-controls{vertical-align:middle}.factory-bootstrap-421 .factory-pattern .factory-preview-wrap{display:inline-block;vertical-align:middle}.factory-bootstrap-421 .factory-pattern .factory-preview{width:100px;height:26px;background:transparent url(../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-421 .factory-pattern .factory-preview.factory-empty{background:transparent url(../assets/images/color_picker_pattern.jpg) repeat!important}.factory-bootstrap-421 .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-421 .factory-pattern .factory-preview span:hover{background:#161616}.factory-bootstrap-421 .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-421 .factory-pattern.factory-patterns-panel-active .factory-preview span:after{border-top-color:transparent;border-bottom-color:#96a6a6;top:4px}.factory-bootstrap-421 .factory-pattern .factory-color-panel{padding:10px;margin-top:10px;background:rgba(255,255,255,.04);border-radius:3px;display:none}.factory-bootstrap-421 .factory-pattern.factory-color-panel-active .factory-color-panel{display:block}.factory-bootstrap-421 .factory-pattern .factory-color-label{margin-right:5px}.factory-bootstrap-421 .factory-pattern .factory-color,.factory-bootstrap-421 .factory-pattern .factory-color-label{display:inline-block;vertical-align:middle}.factory-bootstrap-421 .factory-pattern .factory-color-panel .factory-hint{margin-top:7px}.factory-bootstrap-421 .factory-pattern .factory-patterns-panel{display:none;margin-top:10px;padding:2px 0 0;border-top:1px solid #272727;overflow:visible}.factory-bootstrap-421 .factory-pattern .factory-patterns-group{clear:both;padding:2px 0 0;border-bottom:1px solid #272727;padding-bottom:10px}.factory-bootstrap-421 .factory-pattern .factory-patterns-group-title{margin-top:10px}.factory-bootstrap-421 .factory-pattern .factory-patterns-row{padding-top:10px}.factory-bootstrap-421 .factory-pattern.factory-patterns-panel-active .factory-patterns-panel{display:block}.factory-bootstrap-421 .factory-pattern .factory-patterns-item,.factory-bootstrap-421 .factory-pattern .factory-patterns-item div{width:46px;height:46px}.factory-bootstrap-421 .factory-pattern .factory-patterns-item{display:inline-block;cursor:pointer;position:relative;vertical-align:top}.factory-bootstrap-421 .factory-pattern .factory-patterns-item+.factory-patterns-item{margin-left:10px}.factory-bootstrap-421 .factory-pattern .factory-patterns-item div{position:absolute;border-radius:100%;border:4px solid #333}.factory-bootstrap-421 .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-421 .factory-pattern .factory-no-preview{background:#2f2f2f;line-height:46px;border-radius:100%;text-align:center;font-size:20px}.factory-bootstrap-421 .factory-pattern .factory-no-preview:hover{background:#333}.factory-bootstrap-421 .factory-pattern .factory-button .fa{font-size:14px;margin-right:1px}.factory-bootstrap-421 .factory-pattern .factory-button span{position:relative;top:-1px}.factory-bootstrap-421 .factory-pattern .factory-button+.factory-button{margin-left:3px}.factory-bootstrap-421 .factory-pattern .factory-change-color-btn{margin-left:5px}
libs/factory/bootstrap/assets/css-min/control.radio-colors.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .factory-from-radio-label,.factory-bootstrap-421 .factory-from-radio-label>span{-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;transition:all .3s}.factory-bootstrap-421 .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-421 .factory-from-radio-label:hover{background-color:#f5f2f2;border:1px solid rgba(0,0,0,.2)}.factory-bootstrap-421 .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-421 .factory-from-radio-label .factory-radio-color:checked+span{border:5px solid #fff}.factory-bootstrap-421 .factory-radio-color{opacity:0}
libs/factory/bootstrap/assets/css-min/holder.conrol-group.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-control-group .factory-header{margin-bottom:7px;display:block}.factory-control-group-nav{width:284px;margin:10px 8px}.factory-control-group-nav li{display:inline-block;padding:8px 15px;margin:0;background-color:#444;color:#fff;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;cursor:pointer}.factory-control-group-nav li.current{background-color:#222}.factory-control-group-item{display:none}.factory-control-group-item.current{display:block}
libs/factory/bootstrap/assets/css-min/holder.more-link.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .factory-more-link-content{border-top:1px dashed #DDD;padding-top:25px;width:100%;padding-right:20px;position:relative}.factory-bootstrap-421 .factory-tab .factory-more-link-show{display:inline-block;text-decoration:none;border-bottom:1px dotted #21759b;position:relative}.factory-bootstrap-421 .factory-tab .factory-more-link-show:hover{border-color:#d54e21}.factory-bootstrap-421 .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-421 .factory-tab .factory-more-link-hide:hover{color:#999}
libs/factory/bootstrap/assets/css-min/plugin.chosen.min.css ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ /*!
12
+ Chosen, a Select Box Enhancer for jQuery and Prototype
13
+ by Patrick Filler for Harvest, http://getharvest.com
14
+
15
+ Version 1.1.0
16
+ Full source at https://github.com/harvesthq/chosen
17
+ Copyright (c) 2011 Harvest http://getharvest.com
18
+
19
+ MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
20
+ This file is generated by `grunt build`, do not edit it by hand.
21
+ */.chosen-container{position:relative;display:inline-block;vertical-align:middle;font-size:13px;zoom:1;*display:inline;-webkit-user-select:none;-moz-user-select:none;user-select:none}.chosen-container .chosen-drop{position:absolute;top:100%;left:-9999px;z-index:1010;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;border:1px solid #aaa;border-top:0;background:#fff;box-shadow:0 4px 5px rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{left:0}.chosen-container a{cursor:pointer}.chosen-container-single .chosen-single{position:relative;display:block;overflow:hidden;padding:0 0 0 8px;height:23px;border:1px solid #aaa;border-radius:5px;background:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#fff),color-stop(50%,#f6f6f6),color-stop(52%,#eee),color-stop(100%,#f4f4f4));background:-webkit-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-moz-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-o-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background-clip:padding-box;box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);color:#444;text-decoration:none;white-space:nowrap;line-height:24px;-moz-box-sizing:border-box;box-sizing:border-box}.chosen-container-single .chosen-default{color:#999}.chosen-container-single .chosen-single span{display:block;overflow:hidden;margin-right:26px;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:6px;right:26px;display:block;width:12px;height:12px;background:url(../../images/chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-single .chosen-single abbr:hover,.chosen-container-single.chosen-disabled .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;width:18px;height:100%}.chosen-container-single .chosen-single div b{display:block;width:100%;height:100%;background:url(../../images/chosen-sprite.png) no-repeat 0 2px}.chosen-container-single .chosen-search{position:relative;z-index:1010;margin:0;padding:3px 4px;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:1px 0;padding:4px 20px 4px 5px;width:100%;height:auto;outline:0;border:1px solid #aaa;background:#fff url(../../images/chosen-sprite.png) no-repeat 100% -20px;font-size:1em;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-single .chosen-drop{margin-top:-1px;border-radius:0 0 4px 4px;background-clip:padding-box}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{position:relative;overflow-x:hidden;overflow-y:auto;margin:0 4px 4px 0;padding:0 0 0 4px;max-height:240px;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;margin:0;padding:5px 6px;list-style:none;line-height:15px;-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{background-color:#3875d7;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#3875d7),color-stop(90%,#2a62bc));background-image:-webkit-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-moz-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-o-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:linear-gradient(#3875d7 20%,#2a62bc 90%);color:#fff}.chosen-container .chosen-results li.no-results{display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;width:100%;height:auto!important;height:1%;border:1px solid #aaa;background-color:#fff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(1%,#eee),color-stop(15%,#fff));background-image:-webkit-linear-gradient(#eee 1%,#fff 15%);background-image:-moz-linear-gradient(#eee 1%,#fff 15%);background-image:-o-linear-gradient(#eee 1%,#fff 15%);background-image:linear-gradient(#eee 1%,#fff 15%);cursor:text}.chosen-container-multi .chosen-choices li{float:left;list-style:none}.chosen-container-multi .chosen-choices li.search-field{margin:0;padding:0;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{margin:1px 0;padding:5px;height:15px;outline:0;border:0!important;background:transparent!important;box-shadow:none;color:#666;font-size:100%;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-multi .chosen-choices li.search-field .default{color:#999}.chosen-container-multi .chosen-choices li.search-choice{position:relative;margin:3px 0 3px 5px;padding:3px 20px 3px 5px;border:1px solid #aaa;border-radius:3px;background-color:#e4e4e4;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-clip:padding-box;box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);color:#333;line-height:13px;cursor:default}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:4px;right:3px;display:block;width:12px;height:12px;background:url(../../images/chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{background-position:-42px -10px}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;border:1px solid #ccc;background-color:#e4e4e4;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);color:#666}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{margin:0;padding:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #aaa;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#eee),color-stop(80%,#fff));background-image:-webkit-linear-gradient(#eee 20%,#fff 80%);background-image:-moz-linear-gradient(#eee 20%,#fff 80%);background-image:-o-linear-gradient(#eee 20%,#fff 80%);background-image:linear-gradient(#eee 20%,#fff 80%);box-shadow:0 1px 0 #fff inset}.chosen-container-active.chosen-with-drop .chosen-single div{border-left:0;background:0 0}.chosen-container-active.chosen-with-drop .chosen-single div b{background-position:-18px 2px}.chosen-container-active .chosen-choices{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#111!important}.chosen-disabled{opacity:.5!important;cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close,.chosen-disabled .chosen-single{cursor:default}.chosen-rtl{text-align:right}.chosen-rtl .chosen-single{overflow:visible;padding:0 8px 0 0}.chosen-rtl .chosen-single span{margin-right:0;margin-left:26px;direction:rtl}.chosen-rtl .chosen-single-with-deselect span{margin-left:38px}.chosen-rtl .chosen-single div{right:auto;left:3px}.chosen-rtl .chosen-single abbr{right:auto;left:26px}.chosen-rtl .chosen-choices li{float:right}.chosen-rtl .chosen-choices li.search-field input[type=text]{direction:rtl}.chosen-rtl .chosen-choices li.search-choice{margin:3px 5px 3px 0;padding:3px 5px 3px 19px}.chosen-rtl .chosen-choices li.search-choice .search-choice-close{right:auto;left:4px}.chosen-rtl .chosen-drop,.chosen-rtl.chosen-container-single-nosearch .chosen-search{left:9999px}.chosen-rtl.chosen-container-single .chosen-results{margin:0 0 4px 4px;padding:0 4px 0 0}.chosen-rtl .chosen-results li.group-option{padding-right:15px;padding-left:0}.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div{border-right:0}.chosen-rtl .chosen-search input[type=text]{padding:4px 5px 4px 20px;background:#fff url(../../images/chosen-sprite.png) no-repeat -30px -20px;direction:rtl}.chosen-rtl.chosen-container-single .chosen-single div b{background-position:6px 2px}.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b{background-position:-12px 2px}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-resolution:144dpi){.chosen-container .chosen-results-scroll-down span,.chosen-container .chosen-results-scroll-up span,.chosen-container-multi .chosen-choices .search-choice .search-choice-close,.chosen-container-single .chosen-search input[type=text],.chosen-container-single .chosen-single abbr,.chosen-container-single .chosen-single div b,.chosen-rtl .chosen-search input[type=text]{background-image:url(../../images/chosen-sprite@2x.png)!important;background-size:52px 37px!important;background-repeat:no-repeat!important}}
libs/factory/bootstrap/assets/css-min/plugin.gradient-picker.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .factory-gradient-picker-wrap{margin-bottom:20px}.factory-bootstrap-421 .gradientPicker-preview{width:100%;height:30px;border-radius:3px;background:transparent url(../../images/color_picker_pattern.jpg) repeat}.factory-bootstrap-421 .factory-color-picker-container{display:none;padding-top:15px}.factory-bootstrap-421 .factory-point,.factory-bootstrap-421 .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-421 .factory-point-color{border-radius:0}.factory-bootstrap-421 .factory-point{background:transparent url(../../images/color_picker_pattern.jpg) repeat}.factory-bootstrap-421 .factory-current-point{-ms-transform:rotate(180deg);-webkit-transform:rotate(180deg);transform:rotate(180deg)}.factory-bootstrap-421 .factory-points{position:relative;height:10px;width:100%;cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAWCAYAAADAQbwGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ1JREFUeNq8VAEKwCAITOn%2FX3ZzTBCxUicTBsvsOO9EIKJhAwCe5H0H4xBvLQgOegV8yZ8AZwJHc8zKI4c53bk6IGNqMH3GCJuMlkeG4p4G1e5Lq1KXatmCM7AdrbLLq7FC0agycx7oXOmk8%2FY%2FPNjRR7s6ZFHFqY5AcasLFDPtpAC7WH7aNkxgO9gdLNv3oWdKiKXX7r8bu6rlJcAA9ZRfMt5oHoIAAAAASUVORK5CYII%3D) 5 0,pointer}.factory-bootstrap-421 .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-421 .gradientPicker-iris-wrap .iris-border,.factory-bootstrap-421 .gradientPicker-iris-wrap .iris-picker{border:0;background:#111}.factory-bootstrap-421 .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-421 .factory-preset-gradient,.factory-bootstrap-421 .factory-secondary-color{width:22px;height:22px;border-radius:100%}.factory-bootstrap-421 .factory-preset-gradient{display:inline-block;cursor:pointer;margin-bottom:3px;position:relative}.factory-bootstrap-421 .factory-preset-gradient:hover{opacity:.9}.factory-bootstrap-421 .factory-preset-gradient+.factory-preset-gradient{margin-left:5px}.factory-bootstrap-421 .factory-secondary-color-wrap{width:11px;height:22px;position:absolute;overflow:hidden;right:0}.factory-bootstrap-421 .factory-secondary-color{position:absolute;left:-11px;background-color:red}.factory-bootstrap-421 .gradientPicker-filldirection{width:200px;margin-top:5px}.factory-bootstrap-421 .gradientPicker-ptConfig .color-chooser{float:left}.factory-bootstrap-421 .factory-color-picker-container .factory-slider{padding-left:75px;padding-right:60px;position:relative}.factory-bootstrap-421 .factory-color-picker-container .factory-color-hex{top:0;left:0;position:absolute;width:65px}
libs/factory/bootstrap/assets/css-min/plugin.nouislider.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-user-select:none;-ms-touch-action:none;-ms-user-select:none;-moz-user-select:none;-moz-box-sizing:border-box;box-sizing:border-box}.noUi-base{width:100%;height:100%;position:relative}.noUi-origin{position:absolute;right:0;top:0;left:0;bottom:0}.noUi-handle{position:relative;z-index:1}.noUi-stacking .noUi-handle{z-index:10}.noUi-stacking+.noUi-origin{*z-index:-1}.noUi-state-tap .noUi-origin{-webkit-transition:left .3s,top .3s;transition:left .3s,top .3s}.noUi-state-drag *{cursor:inherit!important}.noUi-horizontal{height:18px}.noUi-horizontal .noUi-handle{width:34px;height:28px;left:-17px;top:-6px}.noUi-horizontal.noUi-extended{padding:0 15px}.noUi-horizontal.noUi-extended .noUi-origin{right:-15px}.noUi-vertical{width:18px}.noUi-vertical .noUi-handle{width:28px;height:34px;left:-6px;top:-17px}.noUi-vertical.noUi-extended{padding:15px 0}.noUi-vertical.noUi-extended .noUi-origin{bottom:-15px}.noUi-background{background:#FAFAFA;box-shadow:inset 0 1px 1px #f0f0f0}.noUi-connect{background:#3FB8AF;box-shadow:inset 0 0 3px rgba(51,51,51,.45);-webkit-transition:background 450ms;transition:background 450ms}.noUi-origin{border-radius:2px}.noUi-target{border-radius:4px;border:1px solid #D3D3D3;box-shadow:inset 0 1px 1px #F0F0F0,0 3px 6px -5px #BBB}.noUi-target.noUi-connect{box-shadow:inset 0 0 3px rgba(51,51,51,.45),0 3px 6px -5px #BBB}.noUi-dragable{cursor:w-resize}.noUi-vertical .noUi-dragable{cursor:n-resize}.noUi-handle{border:1px solid #D9D9D9;border-radius:3px;background:#FFF;cursor:default;box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #EBEBEB,0 3px 6px -3px #BBB}.noUi-active{box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #DDD,0 3px 6px -3px #BBB}.noUi-handle:after,.noUi-handle:before{content:"";display:block;position:absolute;height:14px;width:1px;background:#E8E7E6;left:14px;top:6px}.noUi-handle:after{left:17px}.noUi-vertical .noUi-handle:after,.noUi-vertical .noUi-handle:before{width:14px;height:1px;left:6px;top:14px}.noUi-vertical .noUi-handle:after{top:17px}[disabled] .noUi-connect,[disabled].noUi-connect{background:#B8B8B8}[disabled] .noUi-handle{cursor:not-allowed}
libs/factory/bootstrap/assets/css-min/plugin.paddings-editor.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+
11
+ .factory-bootstrap-421 .factory-paddings-editor{padding-left:135px;height:90px;position:relative}.factory-bootstrap-421 .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-421 .factory-paddings-editor .factory-side{width:100%;height:100%;position:absolute}.factory-bootstrap-421 .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-421 .factory-paddings-editor .factory-side-center:hover{background-color:#c0cece}.factory-bootstrap-421 .factory-paddings-editor .factory-side-center.factory-active{background-color:#829595}.factory-bootstrap-421 .factory-paddings-editor .factory-side-top{height:30px;top:0;left:0}.factory-bootstrap-421 .factory-paddings-editor .factory-side-right{width:45px;top:0;right:0}.factory-bootstrap-421 .factory-paddings-editor .factory-side-bottom{height:30px;bottom:0;left:0}.factory-bootstrap-421 .factory-paddings-editor .factory-side-left{width:45px;top:0;left:0}.factory-bootstrap-421 .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-421 .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-421 .factory-paddings-editor .factory-visible-value em{font-style:normal}.factory-bootstrap-421 .factory-paddings-editor .factory-side-bottom,.factory-bootstrap-421 .factory-paddings-editor .factory-side-top{text-align:center;line-height:30px}.factory-bootstrap-421 .factory-paddings-editor .factory-side-left,.factory-bootstrap-421 .factory-paddings-editor .factory-side-right{line-height:90px;text-align:center}.factory-bootstrap-421 .factory-paddings-editor .factory-slider-container{font-style:italic}.factory-bootstrap-421 .factory-paddings-editor .factory-slider{padding-right:0;margin-top:7px}
libs/factory/bootstrap/assets/images/chosen-sprite.png ADDED
Binary file
libs/factory/bootstrap/assets/images/chosen-sprite@2x.png ADDED
Binary file
libs/factory/bootstrap/assets/images/color_picker_pattern.jpg ADDED
Binary file
libs/factory/bootstrap/assets/images/drop-menu_arrow.png ADDED
Binary file
libs/factory/bootstrap/assets/images/loader-sm-f6f6f6.gif ADDED
Binary file
libs/factory/bootstrap/assets/images/loader-sm-tr.gif ADDED
Binary file
libs/factory/bootstrap/assets/images/no-pattern-background-control.png ADDED
Binary file
libs/factory/bootstrap/assets/js-min/bootstrap.accordion.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ !function(a,b,c,d){"use strict";a.fn.factoryBootstrap421_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-421 .factory-accordion").factoryBootstrap421_accordion()})}(jQuery,window,document);
libs/factory/bootstrap/assets/js-min/bootstrap.affix.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ +function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top()),"function"==typeof h&&(h=f.bottom());var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;this.affixed!==i&&(this.unpin&&this.$element.css("top",""),this.affixed=i,this.unpin="bottom"==i?e.top-d:null,this.$element.removeClass(b.RESET).addClass("affix"+(i?"-"+i:"")),"bottom"==i&&this.$element.offset({top:document.body.offsetHeight-h-this.$element.height()}))}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery);
libs/factory/bootstrap/assets/js-min/bootstrap.alert.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ +function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery);
libs/factory/bootstrap/assets/js-min/bootstrap.button.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
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)};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.is("input")?"val":"html",e=c.data();a+="Text",e.resetText||c.data("resetText",c[d]()),c[d](e[a]||this.options[a]),setTimeout(function(){"loadingText"==a?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.closest('[data-toggle="buttons"]'),b=!0;if(a.length){var c=this.$element.find("input");"radio"===c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?b=!1:a.find(".active").removeClass("active")),b&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}b&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery);
libs/factory/bootstrap/assets/js-min/bootstrap.carousel.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ +function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}this.sliding=!0,f&&this.pause();var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});if(!e.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(j),j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(600)}else{if(this.$element.trigger(j),j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")}return f&&this.cycle(),this}};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery);
libs/factory/bootstrap/assets/js-min/bootstrap.collapse.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
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.factoryBootstrap421_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.factoryBootstrap421_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.datepicker.min.js ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ /*!
11
+ * Datepicker for Bootstrap v1.5.0-dev (https://github.com/eternicode/bootstrap-datepicker)
12
+ *
13
+ * Copyright 2012 Stefan Petre
14
+ * Improvements by Andrew Rowls
15
+ * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
16
+ */
17
+ !function(a,b){function c(){return new Date(Date.UTC.apply(Date,arguments))}function d(){var a=new Date;return c(a.getFullYear(),a.getMonth(),a.getDate())}function e(a,b){return a.getUTCFullYear()===b.getUTCFullYear()&&a.getUTCMonth()===b.getUTCMonth()&&a.getUTCDate()===b.getUTCDate()}function f(a){return function(){return this[a].apply(this,arguments)}}function g(b,c){function d(a,b){return b.toLowerCase()}var e,f=a(b).data(),g={},h=new RegExp("^"+c.toLowerCase()+"([A-Z])");c=new RegExp("^"+c.toLowerCase());for(var i in f)c.test(i)&&(e=i.replace(h,d),g[e]=f[i]);return g}function h(b){var c={};if(p[b]||(b=b.split("-")[0],p[b])){var d=p[b];return a.each(o,function(a,b){b in d&&(c[b]=d[b])}),c}}var i=function(){var b={get:function(a){return this.slice(a)[0]},contains:function(a){for(var b=a&&a.valueOf(),c=0,d=this.length;d>c;c++)if(this[c].valueOf()===b)return c;return-1},remove:function(a){this.splice(a,1)},replace:function(b){b&&(a.isArray(b)||(b=[b]),this.clear(),this.push.apply(this,b))},clear:function(){this.length=0},copy:function(){var a=new i;return a.replace(this),a}};return function(){var c=[];return c.push.apply(c,arguments),a.extend(c,b),c}}(),j=function(b,c){this._process_options(c),this.dates=new i,this.viewDate=this.o.defaultViewDate,this.focusDate=null,this.element=a(b),this.isInline=!1,this.isInput=this.element.is("input"),this.component=this.element.hasClass("date")?this.element.find(".add-on, .input-group-addon, .btn"):!1,this.hasInput=this.component&&this.element.find("input").length,this.component&&0===this.component.length&&(this.component=!1),this.picker=a(q.template),this._buildEvents(),this._attachEvents(),this.isInline?this.picker.addClass("datepicker-inline").appendTo(this.element):this.picker.addClass("datepicker-dropdown dropdown-menu"),this.o.rtl&&this.picker.addClass("datepicker-rtl"),this.viewMode=this.o.startView,this.o.calendarWeeks&&this.picker.find("tfoot .today, tfoot .clear").attr("colspan",function(a,b){return parseInt(b)+1}),this._allow_update=!1,this.setStartDate(this._o.startDate),this.setEndDate(this._o.endDate),this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled),this.setDatesDisabled(this.o.datesDisabled),this.fillDow(),this.fillMonths(),this._allow_update=!0,this.update(),this.showMode(),this.isInline&&this.show()};j.prototype={constructor:j,_process_options:function(e){this._o=a.extend({},this._o,e);var f=this.o=a.extend({},this._o),g=f.language;switch(p[g]||(g=g.split("-")[0],p[g]||(g=n.language)),f.language=g,f.startView){case 2:case"decade":f.startView=2;break;case 1:case"year":f.startView=1;break;default:f.startView=0}switch(f.minViewMode){case 1:case"months":f.minViewMode=1;break;case 2:case"years":f.minViewMode=2;break;default:f.minViewMode=0}f.startView=Math.max(f.startView,f.minViewMode),f.multidate!==!0&&(f.multidate=Number(f.multidate)||!1,f.multidate!==!1&&(f.multidate=Math.max(0,f.multidate))),f.multidateSeparator=String(f.multidateSeparator),f.weekStart%=7,f.weekEnd=(f.weekStart+6)%7;var h=q.parseFormat(f.format);if(f.startDate!==-(1/0)&&(f.startDate?f.startDate instanceof Date?f.startDate=this._local_to_utc(this._zero_time(f.startDate)):f.startDate=q.parseDate(f.startDate,h,f.language):f.startDate=-(1/0)),f.endDate!==1/0&&(f.endDate?f.endDate instanceof Date?f.endDate=this._local_to_utc(this._zero_time(f.endDate)):f.endDate=q.parseDate(f.endDate,h,f.language):f.endDate=1/0),f.daysOfWeekDisabled=f.daysOfWeekDisabled||[],a.isArray(f.daysOfWeekDisabled)||(f.daysOfWeekDisabled=f.daysOfWeekDisabled.split(/[,\s]*/)),f.daysOfWeekDisabled=a.map(f.daysOfWeekDisabled,function(a){return parseInt(a,10)}),f.datesDisabled=f.datesDisabled||[],!a.isArray(f.datesDisabled)){var i=[];i.push(q.parseDate(f.datesDisabled,h,f.language)),f.datesDisabled=i}f.datesDisabled=a.map(f.datesDisabled,function(a){return q.parseDate(a,h,f.language)});var j=String(f.orientation).toLowerCase().split(/\s+/g),k=f.orientation.toLowerCase();if(j=a.grep(j,function(a){return/^auto|left|right|top|bottom$/.test(a)}),f.orientation={x:"auto",y:"auto"},k&&"auto"!==k)if(1===j.length)switch(j[0]){case"top":case"bottom":f.orientation.y=j[0];break;case"left":case"right":f.orientation.x=j[0]}else k=a.grep(j,function(a){return/^left|right$/.test(a)}),f.orientation.x=k[0]||"auto",k=a.grep(j,function(a){return/^top|bottom$/.test(a)}),f.orientation.y=k[0]||"auto";else;if(f.defaultViewDate){var l=f.defaultViewDate.year||(new Date).getFullYear(),m=f.defaultViewDate.month||0,o=f.defaultViewDate.day||1;f.defaultViewDate=c(l,m,o)}else f.defaultViewDate=d();f.showOnFocus=f.showOnFocus!==b?f.showOnFocus:!0},_events:[],_secondaryEvents:[],_applyEvents:function(a){for(var c,d,e,f=0;f<a.length;f++)c=a[f][0],2===a[f].length?(d=b,e=a[f][1]):3===a[f].length&&(d=a[f][1],e=a[f][2]),c.on(e,d)},_unapplyEvents:function(a){for(var c,d,e,f=0;f<a.length;f++)c=a[f][0],2===a[f].length?(e=b,d=a[f][1]):3===a[f].length&&(e=a[f][1],d=a[f][2]),c.off(d,e)},_buildEvents:function(){var b={keyup:a.proxy(function(b){-1===a.inArray(b.keyCode,[27,37,39,38,40,32,13,9])&&this.update()},this),keydown:a.proxy(this.keydown,this),paste:a.proxy(this.paste,this)};this.o.showOnFocus===!0&&(b.focus=a.proxy(this.show,this)),this.isInput?this._events=[[this.element,b]]:this.component&&this.hasInput?this._events=[[this.element.find("input"),b],[this.component,{click:a.proxy(this.show,this)}]]:this.element.is("div")?this.isInline=!0:this._events=[[this.element,{click:a.proxy(this.show,this)}]],this._events.push([this.element,"*",{blur:a.proxy(function(a){this._focused_from=a.target},this)}],[this.element,{blur:a.proxy(function(a){this._focused_from=a.target},this)}]),this.o.immediateUpdates&&this._events.push([this.element,{"changeYear changeMonth":a.proxy(function(a){this.update(a.date)},this)}]),this._secondaryEvents=[[this.picker,{click:a.proxy(this.click,this)}],[a(window),{resize:a.proxy(this.place,this)}],[a(document),{mousedown:a.proxy(function(b){this.element.is(b.target)||this.element.find(b.target).length||this.picker.is(b.target)||this.picker.find(b.target).length||a(this.picker).hide()},this)}]]},_attachEvents:function(){this._detachEvents(),this._applyEvents(this._events)},_detachEvents:function(){this._unapplyEvents(this._events)},_attachSecondaryEvents:function(){this._detachSecondaryEvents(),this._applyEvents(this._secondaryEvents)},_detachSecondaryEvents:function(){this._unapplyEvents(this._secondaryEvents)},_trigger:function(b,c){var d=c||this.dates.get(-1),e=this._utc_to_local(d);this.element.trigger({type:b,date:e,dates:a.map(this.dates,this._utc_to_local),format:a.proxy(function(a,b){0===arguments.length?(a=this.dates.length-1,b=this.o.format):"string"==typeof a&&(b=a,a=this.dates.length-1),b=b||this.o.format;var c=this.dates.get(a);return q.formatDate(c,b,this.o.language)},this)})},show:function(){return this.element.attr("readonly")&&this.o.enableOnReadonly===!1?void 0:(this.isInline||this.picker.appendTo(this.o.container),this.place(),this.picker.show(),this._attachSecondaryEvents(),this._trigger("show"),(window.navigator.msMaxTouchPoints||"ontouchstart"in document)&&this.o.disableTouchKeyboard&&a(this.element).blur(),this)},hide:function(){return this.isInline?this:this.picker.is(":visible")?(this.focusDate=null,this.picker.hide().detach(),this._detachSecondaryEvents(),this.viewMode=this.o.startView,this.showMode(),this.o.forceParse&&(this.isInput&&this.element.val()||this.hasInput&&this.element.find("input").val())&&this.setValue(),this._trigger("hide"),this):this},remove:function(){return this.hide(),this._detachEvents(),this._detachSecondaryEvents(),this.picker.remove(),delete this.element.data().datepicker,this.isInput||delete this.element.data().date,this},paste:function(b){var c;if(b.originalEvent.clipboardData&&b.originalEvent.clipboardData.types&&-1!==a.inArray("text/plain",b.originalEvent.clipboardData.types))c=b.originalEvent.clipboardData.getData("text/plain");else{if(!window.clipboardData)return;c=window.clipboardData.getData("Text")}this.setDate(c),this.update(),b.preventDefault()},_utc_to_local:function(a){return a&&new Date(a.getTime()+6e4*a.getTimezoneOffset())},_local_to_utc:function(a){return a&&new Date(a.getTime()-6e4*a.getTimezoneOffset())},_zero_time:function(a){return a&&new Date(a.getFullYear(),a.getMonth(),a.getDate())},_zero_utc_time:function(a){return a&&new Date(Date.UTC(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate()))},getDates:function(){return a.map(this.dates,this._utc_to_local)},getUTCDates:function(){return a.map(this.dates,function(a){return new Date(a)})},getDate:function(){return this._utc_to_local(this.getUTCDate())},getUTCDate:function(){var a=this.dates.get(-1);return"undefined"!=typeof a?new Date(a):null},clearDates:function(){var a;this.isInput?a=this.element:this.component&&(a=this.element.find("input")),a&&a.val("").change(),this.update(),this._trigger("changeDate"),this.o.autoclose&&this.hide()},setDates:function(){var b=a.isArray(arguments[0])?arguments[0]:arguments;return this.update.apply(this,b),this._trigger("changeDate"),this.setValue(),this},setUTCDates:function(){var b=a.isArray(arguments[0])?arguments[0]:arguments;return this.update.apply(this,a.map(b,this._utc_to_local)),this._trigger("changeDate"),this.setValue(),this},setDate:f("setDates"),setUTCDate:f("setUTCDates"),setValue:function(){var a=this.getFormattedDate();return this.isInput?this.element.val(a).change():this.component&&this.element.find("input").val(a).change(),this},getFormattedDate:function(c){c===b&&(c=this.o.format);var d=this.o.language;return a.map(this.dates,function(a){return q.formatDate(a,c,d)}).join(this.o.multidateSeparator)},setStartDate:function(a){return this._process_options({startDate:a}),this.update(),this.updateNavArrows(),this},setEndDate:function(a){return this._process_options({endDate:a}),this.update(),this.updateNavArrows(),this},setDaysOfWeekDisabled:function(a){return this._process_options({daysOfWeekDisabled:a}),this.update(),this.updateNavArrows(),this},setDatesDisabled:function(a){this._process_options({datesDisabled:a}),this.update(),this.updateNavArrows()},place:function(){if(this.isInline)return this;var b=this.picker.outerWidth(),c=this.picker.outerHeight(),d=10,e=a(this.o.container).width(),f=a(this.o.container).height(),g=a(this.o.container).scrollTop(),h=a(this.o.container).offset(),i=[];this.element.parents().each(function(){var b=a(this).css("z-index");"auto"!==b&&0!==b&&i.push(parseInt(b))});var j=Math.max.apply(Math,i)+10,k=this.component?this.component.parent().offset():this.element.offset(),l=this.component?this.component.outerHeight(!0):this.element.outerHeight(!1),m=this.component?this.component.outerWidth(!0):this.element.outerWidth(!1),n=k.left-h.left,o=k.top-h.top;this.picker.removeClass("datepicker-orient-top datepicker-orient-bottom datepicker-orient-right datepicker-orient-left"),"auto"!==this.o.orientation.x?(this.picker.addClass("datepicker-orient-"+this.o.orientation.x),"right"===this.o.orientation.x&&(n-=b-m)):k.left<0?(this.picker.addClass("datepicker-orient-left"),n-=k.left-d):n+b>e?(this.picker.addClass("datepicker-orient-right"),n=k.left+m-b):this.picker.addClass("datepicker-orient-left");var p,q,r=this.o.orientation.y;if("auto"===r&&(p=-g+o-c,q=g+f-(o+l+c),r=Math.max(p,q)===q?"top":"bottom"),this.picker.addClass("datepicker-orient-"+r),"top"===r?o+=l:o-=c+parseInt(this.picker.css("padding-top")),this.o.rtl){var s=e-(n+m);this.picker.css({top:o,right:s,zIndex:j})}else this.picker.css({top:o,left:n,zIndex:j});return this},_allow_update:!0,update:function(){if(!this._allow_update)return this;var b=this.dates.copy(),c=[],d=!1;return arguments.length?(a.each(arguments,a.proxy(function(a,b){b instanceof Date&&(b=this._local_to_utc(b)),c.push(b)},this)),d=!0):(c=this.isInput?this.element.val():this.element.data("date")||this.element.find("input").val(),c=c&&this.o.multidate?c.split(this.o.multidateSeparator):[c],delete this.element.data().date),c=a.map(c,a.proxy(function(a){return q.parseDate(a,this.o.format,this.o.language)},this)),c=a.grep(c,a.proxy(function(a){return a<this.o.startDate||a>this.o.endDate||!a},this),!0),this.dates.replace(c),this.dates.length?this.viewDate=new Date(this.dates.get(-1)):this.viewDate<this.o.startDate?this.viewDate=new Date(this.o.startDate):this.viewDate>this.o.endDate&&(this.viewDate=new Date(this.o.endDate)),d?this.setValue():c.length&&String(b)!==String(this.dates)&&this._trigger("changeDate"),!this.dates.length&&b.length&&this._trigger("clearDate"),this.fill(),this},fillDow:function(){var a=this.o.weekStart,b="<tr>";if(this.o.calendarWeeks){this.picker.find(".datepicker-days thead tr:first-child .datepicker-switch").attr("colspan",function(a,b){return parseInt(b)+1});var c='<th class="cw">&#160;</th>';b+=c}for(;a<this.o.weekStart+7;)b+='<th class="dow">'+p[this.o.language].daysMin[a++%7]+"</th>";b+="</tr>",this.picker.find(".datepicker-days thead").append(b)},fillMonths:function(){for(var a="",b=0;12>b;)a+='<span class="month">'+p[this.o.language].monthsShort[b++]+"</span>";this.picker.find(".datepicker-months td").html(a)},setRange:function(b){b&&b.length?this.range=a.map(b,function(a){return a.valueOf()}):delete this.range,this.fill()},getClassNames:function(b){var c=[],d=this.viewDate.getUTCFullYear(),f=this.viewDate.getUTCMonth(),g=new Date;return b.getUTCFullYear()<d||b.getUTCFullYear()===d&&b.getUTCMonth()<f?c.push("old"):(b.getUTCFullYear()>d||b.getUTCFullYear()===d&&b.getUTCMonth()>f)&&c.push("new"),this.focusDate&&b.valueOf()===this.focusDate.valueOf()&&c.push("focused"),this.o.todayHighlight&&b.getUTCFullYear()===g.getFullYear()&&b.getUTCMonth()===g.getMonth()&&b.getUTCDate()===g.getDate()&&c.push("today"),-1!==this.dates.contains(b)&&c.push("active"),(b.valueOf()<this.o.startDate||b.valueOf()>this.o.endDate||-1!==a.inArray(b.getUTCDay(),this.o.daysOfWeekDisabled))&&c.push("disabled"),this.o.datesDisabled.length>0&&a.grep(this.o.datesDisabled,function(a){return e(b,a)}).length>0&&c.push("disabled","disabled-date"),this.range&&(b>this.range[0]&&b<this.range[this.range.length-1]&&c.push("range"),-1!==a.inArray(b.valueOf(),this.range)&&c.push("selected")),c},fill:function(){var d,e=new Date(this.viewDate),f=e.getUTCFullYear(),g=e.getUTCMonth(),h=this.o.startDate!==-(1/0)?this.o.startDate.getUTCFullYear():-(1/0),i=this.o.startDate!==-(1/0)?this.o.startDate.getUTCMonth():-(1/0),j=this.o.endDate!==1/0?this.o.endDate.getUTCFullYear():1/0,k=this.o.endDate!==1/0?this.o.endDate.getUTCMonth():1/0,l=p[this.o.language].today||p.en.today||"",m=p[this.o.language].clear||p.en.clear||"";if(!isNaN(f)&&!isNaN(g)){this.picker.find(".datepicker-days thead .datepicker-switch").text(p[this.o.language].months[g]+" "+f),this.picker.find("tfoot .today").text(l).toggle(this.o.todayBtn!==!1),this.picker.find("tfoot .clear").text(m).toggle(this.o.clearBtn!==!1),this.updateNavArrows(),this.fillMonths();var n=c(f,g-1,28),o=q.getDaysInMonth(n.getUTCFullYear(),n.getUTCMonth());n.setUTCDate(o),n.setUTCDate(o-(n.getUTCDay()-this.o.weekStart+7)%7);var r=new Date(n);r.setUTCDate(r.getUTCDate()+42),r=r.valueOf();for(var s,t=[];n.valueOf()<r;){if(n.getUTCDay()===this.o.weekStart&&(t.push("<tr>"),this.o.calendarWeeks)){var u=new Date(+n+(this.o.weekStart-n.getUTCDay()-7)%7*864e5),v=new Date(Number(u)+(11-u.getUTCDay())%7*864e5),w=new Date(Number(w=c(v.getUTCFullYear(),0,1))+(11-w.getUTCDay())%7*864e5),x=(v-w)/864e5/7+1;t.push('<td class="cw">'+x+"</td>")}if(s=this.getClassNames(n),s.push("day"),this.o.beforeShowDay!==a.noop){var y=this.o.beforeShowDay(this._utc_to_local(n));y===b?y={}:"boolean"==typeof y?y={enabled:y}:"string"==typeof y&&(y={classes:y}),y.enabled===!1&&s.push("disabled"),y.classes&&(s=s.concat(y.classes.split(/\s+/))),y.tooltip&&(d=y.tooltip)}s=a.unique(s),t.push('<td class="'+s.join(" ")+'"'+(d?' title="'+d+'"':"")+">"+n.getUTCDate()+"</td>"),d=null,n.getUTCDay()===this.o.weekEnd&&t.push("</tr>"),n.setUTCDate(n.getUTCDate()+1)}this.picker.find(".datepicker-days tbody").empty().append(t.join(""));var z=this.picker.find(".datepicker-months").find("th:eq(1)").text(f).end().find("span").removeClass("active");if(a.each(this.dates,function(a,b){b.getUTCFullYear()===f&&z.eq(b.getUTCMonth()).addClass("active")}),(h>f||f>j)&&z.addClass("disabled"),f===h&&z.slice(0,i).addClass("disabled"),f===j&&z.slice(k+1).addClass("disabled"),this.o.beforeShowMonth!==a.noop){var A=this;a.each(z,function(b,c){if(!a(c).hasClass("disabled")){var d=new Date(f,b,1),e=A.o.beforeShowMonth(d);e===!1&&a(c).addClass("disabled")}})}t="",f=10*parseInt(f/10,10);var B=this.picker.find(".datepicker-years").find("th:eq(1)").text(f+"-"+(f+9)).end().find("td");f-=1;for(var C,D=a.map(this.dates,function(a){return a.getUTCFullYear()}),E=-1;11>E;E++)C=["year"],-1===E?C.push("old"):10===E&&C.push("new"),-1!==a.inArray(f,D)&&C.push("active"),(h>f||f>j)&&C.push("disabled"),t+='<span class="'+C.join(" ")+'">'+f+"</span>",f+=1;B.html(t)}},updateNavArrows:function(){if(this._allow_update){var a=new Date(this.viewDate),b=a.getUTCFullYear(),c=a.getUTCMonth();switch(this.viewMode){case 0:this.o.startDate!==-(1/0)&&b<=this.o.startDate.getUTCFullYear()&&c<=this.o.startDate.getUTCMonth()?this.picker.find(".prev").css({visibility:"hidden"}):this.picker.find(".prev").css({visibility:"visible"}),this.o.endDate!==1/0&&b>=this.o.endDate.getUTCFullYear()&&c>=this.o.endDate.getUTCMonth()?this.picker.find(".next").css({visibility:"hidden"}):this.picker.find(".next").css({visibility:"visible"});break;case 1:case 2:this.o.startDate!==-(1/0)&&b<=this.o.startDate.getUTCFullYear()?this.picker.find(".prev").css({visibility:"hidden"}):this.picker.find(".prev").css({visibility:"visible"}),this.o.endDate!==1/0&&b>=this.o.endDate.getUTCFullYear()?this.picker.find(".next").css({visibility:"hidden"}):this.picker.find(".next").css({visibility:"visible"})}}},click:function(b){b.preventDefault();var d,e,f,g=a(b.target).closest("span, td, th");if(1===g.length)switch(g[0].nodeName.toLowerCase()){case"th":switch(g[0].className){case"datepicker-switch":this.showMode(1);break;case"prev":case"next":var h=q.modes[this.viewMode].navStep*("prev"===g[0].className?-1:1);switch(this.viewMode){case 0:this.viewDate=this.moveMonth(this.viewDate,h),this._trigger("changeMonth",this.viewDate);break;case 1:case 2:this.viewDate=this.moveYear(this.viewDate,h),1===this.viewMode&&this._trigger("changeYear",this.viewDate)}this.fill();break;case"today":var i=new Date;i=c(i.getFullYear(),i.getMonth(),i.getDate(),0,0,0),this.showMode(-2);var j="linked"===this.o.todayBtn?null:"view";this._setDate(i,j);break;case"clear":this.clearDates()}break;case"span":g.hasClass("disabled")||(this.viewDate.setUTCDate(1),g.hasClass("month")?(f=1,e=g.parent().find("span").index(g),d=this.viewDate.getUTCFullYear(),this.viewDate.setUTCMonth(e),this._trigger("changeMonth",this.viewDate),1===this.o.minViewMode?(this._setDate(c(d,e,f)),this.showMode()):this.showMode(-1)):(f=1,e=0,d=parseInt(g.text(),10)||0,this.viewDate.setUTCFullYear(d),this._trigger("changeYear",this.viewDate),2===this.o.minViewMode&&this._setDate(c(d,e,f)),this.showMode(-1)),this.fill());break;case"td":g.hasClass("day")&&!g.hasClass("disabled")&&(f=parseInt(g.text(),10)||1,d=this.viewDate.getUTCFullYear(),e=this.viewDate.getUTCMonth(),g.hasClass("old")?0===e?(e=11,d-=1):e-=1:g.hasClass("new")&&(11===e?(e=0,d+=1):e+=1),this._setDate(c(d,e,f)))}this.picker.is(":visible")&&this._focused_from&&a(this._focused_from).focus(),delete this._focused_from},_toggle_multidate:function(a){var b=this.dates.contains(a);if(a||this.dates.clear(),-1!==b?(this.o.multidate===!0||this.o.multidate>1||this.o.toggleActive)&&this.dates.remove(b):this.o.multidate===!1?(this.dates.clear(),this.dates.push(a)):this.dates.push(a),"number"==typeof this.o.multidate)for(;this.dates.length>this.o.multidate;)this.dates.remove(0)},_setDate:function(a,b){b&&"date"!==b||this._toggle_multidate(a&&new Date(a)),b&&"view"!==b||(this.viewDate=a&&new Date(a)),this.fill(),this.setValue(),b&&"view"===b||this._trigger("changeDate");var c;this.isInput?c=this.element:this.component&&(c=this.element.find("input")),c&&c.change(),!this.o.autoclose||b&&"date"!==b||this.hide()},moveMonth:function(a,c){if(!a)return b;if(!c)return a;var d,e,f=new Date(a.valueOf()),g=f.getUTCDate(),h=f.getUTCMonth(),i=Math.abs(c);if(c=c>0?1:-1,1===i)e=-1===c?function(){return f.getUTCMonth()===h}:function(){return f.getUTCMonth()!==d},d=h+c,f.setUTCMonth(d),(0>d||d>11)&&(d=(d+12)%12);else{for(var j=0;i>j;j++)f=this.moveMonth(f,c);d=f.getUTCMonth(),f.setUTCDate(g),e=function(){return d!==f.getUTCMonth()}}for(;e();)f.setUTCDate(--g),f.setUTCMonth(d);return f},moveYear:function(a,b){return this.moveMonth(a,12*b)},dateWithinRange:function(a){return a>=this.o.startDate&&a<=this.o.endDate},keydown:function(a){if(!this.picker.is(":visible"))return void((40===a.keyCode||27===a.keyCode)&&this.show());var b,c,e,f=!1,g=this.focusDate||this.viewDate;switch(a.keyCode){case 27:this.focusDate?(this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill()):this.hide(),a.preventDefault();break;case 37:case 39:if(!this.o.keyboardNavigation)break;b=37===a.keyCode?-1:1,a.ctrlKey?(c=this.moveYear(this.dates.get(-1)||d(),b),e=this.moveYear(g,b),this._trigger("changeYear",this.viewDate)):a.shiftKey?(c=this.moveMonth(this.dates.get(-1)||d(),b),e=this.moveMonth(g,b),this._trigger("changeMonth",this.viewDate)):(c=new Date(this.dates.get(-1)||d()),c.setUTCDate(c.getUTCDate()+b),e=new Date(g),e.setUTCDate(g.getUTCDate()+b)),this.dateWithinRange(e)&&(this.focusDate=this.viewDate=e,this.setValue(),this.fill(),a.preventDefault());break;case 38:case 40:if(!this.o.keyboardNavigation)break;b=38===a.keyCode?-1:1,a.ctrlKey?(c=this.moveYear(this.dates.get(-1)||d(),b),e=this.moveYear(g,b),this._trigger("changeYear",this.viewDate)):a.shiftKey?(c=this.moveMonth(this.dates.get(-1)||d(),b),e=this.moveMonth(g,b),this._trigger("changeMonth",this.viewDate)):(c=new Date(this.dates.get(-1)||d()),c.setUTCDate(c.getUTCDate()+7*b),e=new Date(g),e.setUTCDate(g.getUTCDate()+7*b)),this.dateWithinRange(e)&&(this.focusDate=this.viewDate=e,this.setValue(),this.fill(),a.preventDefault());break;case 32:break;case 13:g=this.focusDate||this.dates.get(-1)||this.viewDate,this.o.keyboardNavigation&&(this._toggle_multidate(g),f=!0),this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.setValue(),this.fill(),this.picker.is(":visible")&&(a.preventDefault(),"function"==typeof a.stopPropagation?a.stopPropagation():a.cancelBubble=!0,this.o.autoclose&&this.hide());break;case 9:this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill(),this.hide()}if(f){this.dates.length?this._trigger("changeDate"):this._trigger("clearDate");var h;this.isInput?h=this.element:this.component&&(h=this.element.find("input")),h&&h.change()}},showMode:function(a){a&&(this.viewMode=Math.max(this.o.minViewMode,Math.min(2,this.viewMode+a))),this.picker.children("div").hide().filter(".datepicker-"+q.modes[this.viewMode].clsName).css("display","block"),this.updateNavArrows()}};var k=function(b,c){this.element=a(b),this.inputs=a.map(c.inputs,function(a){return a.jquery?a[0]:a}),delete c.inputs,m.call(a(this.inputs),c).on("changeDate",a.proxy(this.dateUpdated,this)),this.pickers=a.map(this.inputs,function(b){return a(b).data("datepicker")}),this.updateDates()};k.prototype={updateDates:function(){this.dates=a.map(this.pickers,function(a){return a.getUTCDate()}),this.updateRanges()},updateRanges:function(){var b=a.map(this.dates,function(a){return a.valueOf()});a.each(this.pickers,function(a,c){c.setRange(b)})},dateUpdated:function(b){if(!this.updating){this.updating=!0;var c=a(b.target).data("datepicker"),d=c.getUTCDate(),e=a.inArray(b.target,this.inputs),f=e-1,g=e+1,h=this.inputs.length;if(-1!==e){if(a.each(this.pickers,function(a,b){b.getUTCDate()||b.setUTCDate(d)}),d<this.dates[f])for(;f>=0&&d<this.dates[f];)this.pickers[f--].setUTCDate(d);else if(d>this.dates[g])for(;h>g&&d>this.dates[g];)this.pickers[g++].setUTCDate(d);this.updateDates(),delete this.updating}}},remove:function(){a.map(this.pickers,function(a){a.remove()}),delete this.element.data().datepicker}};var l=a.fn.datepicker,m=function(c){var d=Array.apply(null,arguments);d.shift();var e;return this.each(function(){var f=a(this),i=f.data("datepicker"),l="object"==typeof c&&c;if(!i){var m=g(this,"date"),o=a.extend({},n,m,l),p=h(o.language),q=a.extend({},n,p,m,l);if(f.hasClass("input-daterange")||q.inputs){var r={inputs:q.inputs||f.find("input").toArray()};f.data("datepicker",i=new k(this,a.extend(q,r)))}else f.data("datepicker",i=new j(this,q))}return"string"==typeof c&&"function"==typeof i[c]&&(e=i[c].apply(i,d),e!==b)?!1:void 0}),e!==b?e:this};a.fn.datepicker=m;var n=a.fn.datepicker.defaults={autoclose:!1,beforeShowDay:a.noop,beforeShowMonth:a.noop,calendarWeeks:!1,clearBtn:!1,toggleActive:!1,daysOfWeekDisabled:[],datesDisabled:[],endDate:1/0,forceParse:!0,format:"mm/dd/yyyy",keyboardNavigation:!0,language:"en",minViewMode:0,multidate:!1,multidateSeparator:",",orientation:"auto",rtl:!1,startDate:-(1/0),startView:0,todayBtn:!1,todayHighlight:!1,weekStart:0,disableTouchKeyboard:!1,enableOnReadonly:!0,container:"body",immediateUpdates:!1},o=a.fn.datepicker.locale_opts=["format","rtl","weekStart"];a.fn.datepicker.Constructor=j;var p=a.fn.datepicker.dates={en:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",clear:"Clear"},ru:{days:["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"],daysShort:["Вск","Пнд","Втр","Срд","Чтв","Птн","Суб"],daysMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],months:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthsShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],today:"Сегодня",clear:"Очистить",format:"dd/mm/yyyy",weekStart:1,monthsTitle:"Месяцы"}},q={modes:[{clsName:"days",navFnc:"Month",navStep:1},{clsName:"months",navFnc:"FullYear",navStep:1},{clsName:"years",navFnc:"FullYear",navStep:10}],isLeapYear:function(a){return a%4===0&&a%100!==0||a%400===0},getDaysInMonth:function(a,b){return[31,q.isLeapYear(a)?29:28,31,30,31,30,31,31,30,31,30,31][b]},validParts:/dd?|DD?|mm?|MM?|yy(?:yy)?/g,nonpunctuation:/[^ -\/:-@\[\u3400-\u9fff-`{-~\t\n\r]+/g,parseFormat:function(a){var b=a.replace(this.validParts,"\x00").split("\x00"),c=a.match(this.validParts);if(!b||!b.length||!c||0===c.length)throw new Error("Invalid date format.");return{separators:b,parts:c}},parseDate:function(d,e,f){function g(){var a=this.slice(0,m[k].length),b=m[k].slice(0,a.length);return a.toLowerCase()===b.toLowerCase()}if(!d)return b;if(d instanceof Date)return d;"string"==typeof e&&(e=q.parseFormat(e));var h,i,k,l=/([\-+]\d+)([dmwy])/,m=d.match(/([\-+]\d+)([dmwy])/g);if(/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(d)){for(d=new Date,k=0;k<m.length;k++)switch(h=l.exec(m[k]),i=parseInt(h[1]),h[2]){case"d":d.setUTCDate(d.getUTCDate()+i);break;case"m":d=j.prototype.moveMonth.call(j.prototype,d,i);break;case"w":d.setUTCDate(d.getUTCDate()+7*i);break;case"y":d=j.prototype.moveYear.call(j.prototype,d,i)}return c(d.getUTCFullYear(),d.getUTCMonth(),d.getUTCDate(),0,0,0)}m=d&&d.match(this.nonpunctuation)||[],d=new Date;var n,o,r={},s=["yyyy","yy","M","MM","m","mm","d","dd"],t={yyyy:function(a,b){return a.setUTCFullYear(b)},yy:function(a,b){return a.setUTCFullYear(2e3+b)},m:function(a,b){if(isNaN(a))return a;for(b-=1;0>b;)b+=12;for(b%=12,a.setUTCMonth(b);a.getUTCMonth()!==b;)a.setUTCDate(a.getUTCDate()-1);return a},d:function(a,b){return a.setUTCDate(b)}};t.M=t.MM=t.mm=t.m,t.dd=t.d,d=c(d.getFullYear(),d.getMonth(),d.getDate(),0,0,0);var u=e.parts.slice();if(m.length!==u.length&&(u=a(u).filter(function(b,c){return-1!==a.inArray(c,s)}).toArray()),m.length===u.length){var v;for(k=0,v=u.length;v>k;k++){if(n=parseInt(m[k],10),h=u[k],isNaN(n))switch(h){case"MM":o=a(p[f].months).filter(g),n=a.inArray(o[0],p[f].months)+1;break;case"M":o=a(p[f].monthsShort).filter(g),n=a.inArray(o[0],p[f].monthsShort)+1}r[h]=n}var w,x;for(k=0;k<s.length;k++)x=s[k],x in r&&!isNaN(r[x])&&(w=new Date(d),t[x](w,r[x]),isNaN(w)||(d=w))}return d},formatDate:function(b,c,d){if(!b)return"";"string"==typeof c&&(c=q.parseFormat(c));var e={d:b.getUTCDate(),D:p[d].daysShort[b.getUTCDay()],DD:p[d].days[b.getUTCDay()],m:b.getUTCMonth()+1,M:p[d].monthsShort[b.getUTCMonth()],MM:p[d].months[b.getUTCMonth()],yy:b.getUTCFullYear().toString().substring(2),yyyy:b.getUTCFullYear()};e.dd=(e.d<10?"0":"")+e.d,e.mm=(e.m<10?"0":"")+e.m,b=[];for(var f=a.extend([],c.separators),g=0,h=c.parts.length;h>=g;g++)f.length&&b.push(f.shift()),b.push(e[c.parts[g]]);return b.join("")},headTemplate:'<thead><tr><th class="prev">&#171;</th><th colspan="5" class="datepicker-switch"></th><th class="next">&#187;</th></tr></thead>',contTemplate:'<tbody><tr><td colspan="7"></td></tr></tbody>',footTemplate:'<tfoot><tr><th colspan="7" class="today"></th></tr><tr><th colspan="7" class="clear"></th></tr></tfoot>'};q.template='<div class="datepicker"><div class="datepicker-days"><table class=" table-condensed">'+q.headTemplate+"<tbody></tbody>"+q.footTemplate+'</table></div><div class="datepicker-months"><table class="table-condensed">'+q.headTemplate+q.contTemplate+q.footTemplate+'</table></div><div class="datepicker-years"><table class="table-condensed">'+q.headTemplate+q.contTemplate+q.footTemplate+"</table></div></div>",a.fn.datepicker.DPGlobal=q,a.fn.datepicker.noConflict=function(){return a.fn.datepicker=l,this},a.fn.datepicker.version="1.4.1-dev",a(document).on("focus.datepicker.data-api click.datepicker.data-api",'[data-provide="datepicker"]',function(b){var c=a(this);c.data("datepicker")||(b.preventDefault(),m.call(c,"show"))}),a(function(){m.call(a('[data-provide="datepicker-inline"]'))})}(window.jQuery);
libs/factory/bootstrap/assets/js-min/bootstrap.datetimepicker.min.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ /*! version : 4.17.47
11
+ =========================================================
12
+ bootstrap-datetimejs
13
+ https://github.com/Eonasdan/bootstrap-datetimepicker
14
+ Copyright (c) 2015 Jonathan Peterson
15
+ =========================================================
16
+ */
17
+ !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");
18
+ 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.factoryBootstrap421_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.factoryBootstrap421_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.factoryBootstrap421_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.factoryBootstrap421_DatetimePickerControl}),function(a){a(function(){a(".factory-bootstrap-421 .factory-datetimepicker").factoryBootstrap421_DatetimePickerControl(),a(".factory-bootstrap-421 .factory-datetimepicker-range-0").factoryBootstrap421_DatetimePickerControl(),a(".factory-bootstrap-421 .factory-datetimepicker-range-1").factoryBootstrap421_DatetimePickerControl({useCurrent:!1}),a(".factory-bootstrap-421 .factory-datetimepicker-range-0").on("dp.change",function(b){a(".factory-bootstrap-421 .factory-datetimepicker-range-1").data("DateTimePicker").minDate(b.date)}),a(".factory-bootstrap-421 .factory-datetimepicker-range-1").on("dp.change",function(b){a(".factory-bootstrap-421 .factory-datetimepicker-range-0").data("DateTimePicker").maxDate(b.date)})})}(jQuery);
libs/factory/bootstrap/assets/js-min/bootstrap.dropdown.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
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.factoryBootstrap421_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.factoryBootstrap421_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 ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
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-421-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.factoryBootstrap421_modal;a.fn.factoryBootstrap421_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.factoryBootstrap421_modal.Constructor=b,a.fn.factoryBootstrap421_modal.noConflict=function(){return a.fn.factoryBootstrap421_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.factoryBootstrap421_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/bootstrap.popover.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ +function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");b.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery);
libs/factory/bootstrap/assets/js-min/bootstrap.scrollspy.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ +function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(a(c).is("body")?window:c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#\w/.test(e)&&a(e);return f&&f.length&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parents(".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery);
libs/factory/bootstrap/assets/js-min/bootstrap.tab.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ +function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery);
libs/factory/bootstrap/assets/js-min/bootstrap.tooltip.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ +function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focus",i="hover"==g?"mouseleave":"blur";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(b),b.isDefaultPrevented())return;var c=this.tip();this.setContent(),this.options.animation&&c.addClass("fade");var d="function"==typeof this.options.placement?this.options.placement.call(this,c[0],this.$element[0]):this.options.placement,e=/\s?auto?\s?/i,f=e.test(d);f&&(d=d.replace(e,"")||"top"),c.detach().css({top:0,left:0,display:"block"}).addClass(d),this.options.container?c.appendTo(this.options.container):c.insertAfter(this.$element);var g=this.getPosition(),h=c[0].offsetWidth,i=c[0].offsetHeight;if(f){var j=this.$element.parent(),k=d,l=document.documentElement.scrollTop||document.body.scrollTop,m="body"==this.options.container?window.innerWidth:j.outerWidth(),n="body"==this.options.container?window.innerHeight:j.outerHeight(),o="body"==this.options.container?0:j.offset().left;d="bottom"==d&&g.top+g.height+i-l>n?"top":"top"==d&&g.top-l-i<0?"bottom":"right"==d&&g.right+h>m?"left":"left"==d&&g.left-h<o?"right":d,c.removeClass(k).addClass(d)}var p=this.getCalculatedOffset(d,g,h,i);this.applyPlacement(p,d),this.$element.trigger("shown.bs."+this.type)}},b.prototype.applyPlacement=function(a,b){var c,d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),a.top=a.top+g,a.left=a.left+h,d.offset(a).addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;if("top"==b&&j!=f&&(c=!0,a.top=a.top+f-j),/bottom|top/.test(b)){var k=0;a.left<0&&(k=-2*a.left,a.left=0,d.offset(a),i=d[0].offsetWidth,j=d[0].offsetHeight),this.replaceArrow(k-e+i,i,"left")}else this.replaceArrow(j-f,j,"top");c&&d.offset(a)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach()}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,b).emulateTransitionEnd(150):b(),this.$element.trigger("hidden.bs."+this.type),this)},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},"function"==typeof b.getBoundingClientRect?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enable=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof c&&c;e||d.data("bs.tooltip",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this},a(function(){a('[data-toggle="factory-tooltip"]').tooltip({html:!0})})}(jQuery);
libs/factory/bootstrap/assets/js-min/bootstrap.transition.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ +function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]}}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()}),a(function(){a(function(){a.support.transition=b()})})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.checkbox.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
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.attr("checked","checked"),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.removeAttr("checked"),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]&&(console.log(l[m]),a(m).val(l[m]))}}}},this.executeEvents(this.$result)};a.fn.factoryBootstrap421_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.factoryBootstrap421_checkboxControl.Constructor=b,a(function(){a(".factory-bootstrap-421 .factory-checkbox.factory-buttons-way").factoryBootstrap421_checkboxControl()})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.color-and-opacity.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ !function(a,b){a(function(){a(function(){a(".factory-bootstrap-421 .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 ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ !function(a){a.widget("factoryBootstrap421.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.factoryBootstrap421_iris(d),this.$picker.off("focus"),a(document).on("click.color.factory",function(){c.$picker.factoryBootstrap421_iris("hide")}),this.$picker.add(this.$background).on("click.color.factory",function(a){a.stopPropagation(),c.$picker.factoryBootstrap421_iris("show")})},togglePicker:function(){this.$element.hasClass("factory-picker-active")?this.hidePicker():this.showPicker()},hidePicker:function(){this.$element.removeClass("factory-picker-active"),this.$picker.factoryBootstrap421_iris("hide")},showPicker:function(){this.$element.addClass("factory-picker-active"),this.$picker.factoryBootstrap421_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("factoryBootstrap421_colorControl",a.factoryBootstrap421.colorControl),a(".factory-bootstrap-421 .factory-color").factoryBootstrap421_colorControl({})})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.dropdown-and-colors.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
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.factoryBootstrap421_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.factoryBootstrap421_dropdownAndColors.Constructor=b,a(function(){a(".factory-bootstrap-421 .factory-dropdown-and-colors").factoryBootstrap421_dropdownAndColors()})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.dropdown.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
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.factoryBootstrap421_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.factoryBootstrap421_dropdownControl.Constructor=b,a(function(){a(".factory-bootstrap-421 .factory-dropdown").factoryBootstrap421_dropdownControl()})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.fonts.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ !function(a){a.widget("factoryBootstrap421.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("factoryBootstrap421_fontControl",a.factoryBootstrap421.fontControl),a(".factory-bootstrap-421 .factory-font").factoryBootstrap421_fontControl({})})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.gradient.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
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.factoryBootstrap421_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.factoryBootstrap421_gradientControl.Constructor=b,a(function(){a(".factory-bootstrap-421 .factory-gradient").factoryBootstrap421_gradientControl()})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.integer.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
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.factoryBootstrap421_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.factoryBootstrap421_integerControl.Constructor=b,a(function(){a(".factory-bootstrap-421 .factory-integer").factoryBootstrap421_integerControl()})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.list.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
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.factoryBootstrap421_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.factoryBootstrap421_listControl.Constructor=b,a(function(){a(".factory-bootstrap-421 .factory-list").factoryBootstrap421_listControl()})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.multiple-textbox.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
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.factoryBootstrap421_MultipleTextboxControl=function(){return this.each(function(){new b(this)})},a(function(){a(".factory-bootstrap-421 .factory-multiple-textbox-group").factoryBootstrap421_MultipleTextboxControl()})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.pattern.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ !function(a){a.widget("factoryBootstrap421.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.factoryBootstrap421_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("factoryBootstrap421_patternControl",a.factoryBootstrap421.patternControl),a(".factory-bootstrap-421 .factory-pattern").factoryBootstrap421_patternControl({})})}(jQuery);
libs/factory/bootstrap/assets/js-min/global.color-functions.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ function hexToRgb(a){var b=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;a=a.replace(b,function(a,b,c,d){return b+b+c+c+d+d});var c=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(a);return c?{r:parseInt(c[1],16),g:parseInt(c[2],16),b:parseInt(c[3],16)}:null}function rgb2hex(a){return a=a.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/),"#"+("0"+parseInt(a[1],10).toString(16)).slice(-2)+("0"+parseInt(a[2],10).toString(16)).slice(-2)+("0"+parseInt(a[3],10).toString(16)).slice(-2)}
libs/factory/bootstrap/assets/js-min/holder.conrol-group.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ !function(a){a(document).ready(function(){a(".factory-control-group-nav-label").on("click",function(){var b=a(this).parents(".factory-control-group");return a(this).hasClass("active")||(a(".factory-control-group-nav-label",b).add(".factory-control-group-item",b).removeClass("current"),a(".factory-control-is-active",b).val(0),a(this).add(a("."+a(this).data("control-id"),b)).addClass("current"),b.children('input[type="hidden"]').val(a(this).data("control-name")).trigger("change"),a(".factory-control-is-active",a("."+a(this).data("control-id"),b)).val(1)),!1})})}(jQuery);
libs/factory/bootstrap/assets/js-min/holder.more-link.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ !function(a,b,c,d){"use strict";var e="factoryBootstrap421_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-421 .factory-more-link").factoryBootstrap421_moreLink()})}(jQuery,window,document);
libs/factory/bootstrap/assets/js-min/plugin.chosen.min.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ /*!
11
+ Chosen, a Select Box Enhancer for jQuery and Prototype
12
+ by Patrick Filler for Harvest, http://getharvest.com
13
+
14
+ Version 1.1.0
15
+ Full source at https://github.com/harvesthq/chosen
16
+ Copyright (c) 2011 Harvest http://getharvest.com
17
+
18
+ MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
19
+ This file is generated by `grunt build`, do not edit it by hand.
20
+ */
21
+ (function(){var a,b,c,d,e,f={}.hasOwnProperty,g=function(a,b){function c(){this.constructor=a}for(var d in b)f.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};d=function(){function a(){this.options_index=0,this.parsed=[]}return a.prototype.add_node=function(a){return"OPTGROUP"===a.nodeName.toUpperCase()?this.add_group(a):this.add_option(a)},a.prototype.add_group=function(a){var b,c,d,e,f,g;for(b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:this.escapeExpression(a.label),children:0,disabled:a.disabled}),f=a.childNodes,g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},a.prototype.add_option=function(a,b,c){return"OPTION"===a.nodeName.toUpperCase()?(""!==a.text?(null!=b&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1):void 0},a.prototype.escapeExpression=function(a){var b,c;return null==a||a===!1?"":/[\&\<\>\"\'\`]/.test(a)?(b={"<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},c=/&(?!\w+;)|[\<\>\"\'\`]/g,a.replace(c,function(a){return b[a]||"&amp;"})):a},a}(),d.select_to_array=function(a){var b,c,e,f,g;for(c=new d,g=a.childNodes,e=0,f=g.length;f>e;e++)b=g[e],c.add_node(b);return c.parsed},b=function(){function a(b,c){this.form_field=b,this.options=null!=c?c:{},a.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers())}return a.prototype.set_default_values=function(){var a=this;return this.click_test_action=function(b){return a.test_active_click(b)},this.activate_action=function(b){return a.activate_field(b)},this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&""===this.form_field.options[0].text?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null!=this.options.enable_split_word_search?this.options.enable_split_word_search:!0,this.group_search=null!=this.options.group_search?this.options.group_search:!0,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null!=this.options.single_backstroke_delete?this.options.single_backstroke_delete:!0,this.max_selected_options=this.options.max_selected_options||1/0,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null!=this.options.display_selected_options?this.options.display_selected_options:!0,this.display_disabled_options=null!=this.options.display_disabled_options?this.options.display_disabled_options:!0},a.prototype.set_default_text=function(){return this.form_field.getAttribute("data-placeholder")?this.default_text=this.form_field.getAttribute("data-placeholder"):this.is_multiple?this.default_text=this.options.placeholder_text_multiple||this.options.placeholder_text||a.default_multiple_text:this.default_text=this.options.placeholder_text_single||this.options.placeholder_text||a.default_single_text,this.results_none_found=this.form_field.getAttribute("data-no_results_text")||this.options.no_results_text||a.default_no_result_text},a.prototype.mouse_enter=function(){return this.mouse_on_container=!0},a.prototype.mouse_leave=function(){return this.mouse_on_container=!1},a.prototype.input_focus=function(a){var b=this;if(this.is_multiple){if(!this.active_field)return setTimeout(function(){return b.container_mousedown()},50)}else if(!this.active_field)return this.activate_field()},a.prototype.input_blur=function(a){var b=this;return this.mouse_on_container?void 0:(this.active_field=!1,setTimeout(function(){return b.blur_test()},100))},a.prototype.results_option_build=function(a){var b,c,d,e,f;for(b="",f=this.results_data,d=0,e=f.length;e>d;d++)c=f[d],b+=c.group?this.result_add_group(c):this.result_add_option(c),(null!=a?a.first:void 0)&&(c.selected&&this.is_multiple?this.choice_build(c):c.selected&&!this.is_multiple&&this.single_set_selected_text(c.text));return b},a.prototype.result_add_option=function(a){var b,c;return a.search_match&&this.include_option_in_results(a)?(b=[],a.disabled||a.selected&&this.is_multiple||b.push("active-result"),!a.disabled||a.selected&&this.is_multiple||b.push("disabled-result"),a.selected&&b.push("result-selected"),null!=a.group_array_index&&b.push("group-option"),""!==a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.style.cssText=a.style,c.setAttribute("data-option-array-index",a.array_index),c.innerHTML=a.search_text,this.outerHTML(c)):""},a.prototype.result_add_group=function(a){var b;return(a.search_match||a.group_match)&&a.active_options>0?(b=document.createElement("li"),b.className="group-result",b.innerHTML=a.search_text,this.outerHTML(b)):""},a.prototype.results_update_field=function(){return this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.results_build(),this.results_showing?this.winnow_results():void 0},a.prototype.reset_single_select_options=function(){var a,b,c,d,e;for(d=this.results_data,e=[],b=0,c=d.length;c>b;b++)a=d[b],a.selected?e.push(a.selected=!1):e.push(void 0);return e},a.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},a.prototype.results_search=function(a){return this.results_showing?this.winnow_results():this.results_show()},a.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l,m;for(this.no_results_clear(),e=0,g=this.get_search_text(),a=g.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),d=this.search_contains?"":"^",c=new RegExp(d+a,"i"),j=new RegExp(a,"i"),m=this.results_data,k=0,l=m.length;l>k;k++)b=m[k],b.search_match=!1,f=null,this.include_option_in_results(b)&&(b.group&&(b.group_match=!1,b.active_options=0),null!=b.group_array_index&&this.results_data[b.group_array_index]&&(f=this.results_data[b.group_array_index],0===f.active_options&&f.search_match&&(e+=1),f.active_options+=1),(!b.group||this.group_search)&&(b.search_text=b.group?b.label:b.html,b.search_match=this.search_string_match(b.search_text,c),b.search_match&&!b.group&&(e+=1),b.search_match?(g.length&&(h=b.search_text.search(j),i=b.search_text.substr(0,h+g.length)+"</em>"+b.search_text.substr(h+g.length),b.search_text=i.substr(0,h)+"<em>"+i.substr(h)),null!=f&&(f.group_match=!0)):null!=b.group_array_index&&this.results_data[b.group_array_index].search_match&&(b.search_match=!0)));return this.result_clear_highlight(),1>e&&g.length?(this.update_results_content(""),this.no_results(g)):(this.update_results_content(this.results_option_build()),this.winnow_results_set_highlight())},a.prototype.search_string_match=function(a,b){var c,d,e,f;if(b.test(a))return!0;if(this.enable_split_word_search&&(a.indexOf(" ")>=0||0===a.indexOf("["))&&(d=a.replace(/\[|\]/g,"").split(" "),d.length))for(e=0,f=d.length;f>e;e++)if(c=d[e],b.test(c))return!0},a.prototype.choices_count=function(){var a,b,c,d;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,d=this.form_field.options,b=0,c=d.length;c>b;b++)a=d[b],a.selected&&(this.selected_option_count+=1);return this.selected_option_count},a.prototype.choices_click=function(a){return a.preventDefault(),this.results_showing||this.is_disabled?void 0:this.results_show()},a.prototype.keyup_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:if(a.preventDefault(),this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},a.prototype.clipboard_event_checker=function(a){var b=this;return setTimeout(function(){return b.results_search()},50)},a.prototype.container_width=function(){return null!=this.options.width?this.options.width:""+this.form_field.offsetWidth+"px"},a.prototype.include_option_in_results=function(a){return this.is_multiple&&!this.display_selected_options&&a.selected?!1:!this.display_disabled_options&&a.disabled?!1:a.empty?!1:!0},a.prototype.search_results_touchstart=function(a){return this.touch_started=!0,this.search_results_mouseover(a)},a.prototype.search_results_touchmove=function(a){return this.touch_started=!1,this.search_results_mouseout(a)},a.prototype.search_results_touchend=function(a){return this.touch_started?this.search_results_mouseup(a):void 0},a.prototype.outerHTML=function(a){var b;return a.outerHTML?a.outerHTML:(b=document.createElement("div"),b.appendChild(a),b.innerHTML)},a.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:/iP(od|hone)/i.test(window.navigator.userAgent)?!1:/Android/i.test(window.navigator.userAgent)&&/Mobile/i.test(window.navigator.userAgent)?!1:!0},a.default_multiple_text="Select Some Options",a.default_single_text="Select an Option",a.default_no_result_text="No results match",a}(),a=jQuery,a.fn.extend({chosen:function(d){return b.browser_is_supported()?this.each(function(b){var e,f;e=a(this),f=e.data("chosen"),"destroy"===d&&f?f.destroy():f||e.data("chosen",new c(this,d))}):this}}),c=function(b){function c(){return e=c.__super__.constructor.apply(this,arguments)}return g(c,b),c.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex,this.is_rtl=this.form_field_jq.hasClass("chosen-rtl")},c.prototype.set_up_html=function(){var b,c;return b=["chosen-container"],b.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&b.push(this.form_field.className),this.is_rtl&&b.push("chosen-rtl"),c={"class":b.join(" "),style:"width: "+this.container_width()+";",title:this.form_field.title},this.form_field.id.length&&(c.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=a("<div />",c),this.is_multiple?this.container.html('<ul class="chosen-choices"><li class="search-field"><input type="text" value="'+this.default_text+'" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chosen-drop"><ul class="chosen-results"></ul></div>'):this.container.html('<a class="chosen-single chosen-default" tabindex="-1"><span>'+this.default_text+'</span><div><b></b></div></a><div class="chosen-drop"><div class="chosen-search"><input type="text" autocomplete="off" /></div><ul class="chosen-results"></ul></div>'),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior(),this.form_field_jq.trigger("chosen:ready",{chosen:this})},c.prototype.register_observers=function(){var a=this;return this.container.bind("mousedown.chosen",function(b){a.container_mousedown(b)}),this.container.bind("mouseup.chosen",function(b){a.container_mouseup(b)}),this.container.bind("mouseenter.chosen",function(b){a.mouse_enter(b)}),this.container.bind("mouseleave.chosen",function(b){a.mouse_leave(b)}),this.search_results.bind("mouseup.chosen",function(b){a.search_results_mouseup(b)}),this.search_results.bind("mouseover.chosen",function(b){a.search_results_mouseover(b)}),this.search_results.bind("mouseout.chosen",function(b){a.search_results_mouseout(b)}),this.search_results.bind("mousewheel.chosen DOMMouseScroll.chosen",function(b){a.search_results_mousewheel(b)}),this.search_results.bind("touchstart.chosen",function(b){a.search_results_touchstart(b)}),this.search_results.bind("touchmove.chosen",function(b){a.search_results_touchmove(b)}),this.search_results.bind("touchend.chosen",function(b){a.search_results_touchend(b)}),this.form_field_jq.bind("chosen:updated.chosen",function(b){a.results_update_field(b)}),this.form_field_jq.bind("chosen:activate.chosen",function(b){a.activate_field(b)}),this.form_field_jq.bind("chosen:open.chosen",function(b){a.container_mousedown(b)}),this.form_field_jq.bind("chosen:close.chosen",function(b){a.input_blur(b)}),this.search_field.bind("blur.chosen",function(b){a.input_blur(b)}),this.search_field.bind("keyup.chosen",function(b){a.keyup_checker(b)}),this.search_field.bind("keydown.chosen",function(b){a.keydown_checker(b)}),this.search_field.bind("focus.chosen",function(b){a.input_focus(b)}),this.search_field.bind("cut.chosen",function(b){a.clipboard_event_checker(b)}),this.search_field.bind("paste.chosen",function(b){a.clipboard_event_checker(b)}),this.is_multiple?this.search_choices.bind("click.chosen",function(b){a.choices_click(b)}):this.container.bind("click.chosen",function(a){a.preventDefault()})},c.prototype.destroy=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.search_field[0].tabIndex&&(this.form_field_jq[0].tabIndex=this.search_field[0].tabIndex),this.container.remove(),this.form_field_jq.removeData("chosen"),this.form_field_jq.show()},c.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field_jq[0].disabled,this.is_disabled?(this.container.addClass("chosen-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus.chosen",this.activate_action),this.close_field()):(this.container.removeClass("chosen-disabled"),this.search_field[0].disabled=!1,this.is_multiple?void 0:this.selected_item.bind("focus.chosen",this.activate_action))},c.prototype.container_mousedown=function(b){return this.is_disabled||(b&&"mousedown"===b.type&&!this.results_showing&&b.preventDefault(),null!=b&&a(b.target).hasClass("search-choice-close"))?void 0:(this.active_field?this.is_multiple||!b||a(b.target)[0]!==this.selected_item[0]&&!a(b.target).parents("a.chosen-single").length||(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(this.container[0].ownerDocument).bind("click.chosen",this.click_test_action),this.results_show()),this.activate_field())},c.prototype.container_mouseup=function(a){return"ABBR"!==a.target.nodeName||this.is_disabled?void 0:this.results_reset(a)},c.prototype.search_results_mousewheel=function(a){var b;return a.originalEvent&&(b=-a.originalEvent.wheelDelta||a.originalEvent.detail),null!=b?(a.preventDefault(),"DOMMouseScroll"===a.type&&(b=40*b),this.search_results.scrollTop(b+this.search_results.scrollTop())):void 0},c.prototype.blur_test=function(a){return!this.active_field&&this.container.hasClass("chosen-container-active")?this.close_field():void 0},c.prototype.close_field=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},c.prototype.activate_field=function(){return this.container.addClass("chosen-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},c.prototype.test_active_click=function(b){var c;return c=a(b.target).closest(".chosen-container"),c.length&&this.container[0]===c[0]?this.active_field=!0:this.close_field()},c.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=d.select_to_array(this.form_field),this.is_multiple?this.search_choices.find("li.search-choice").remove():this.is_multiple||(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field[0].readOnly=!0,this.container.addClass("chosen-container-single-nosearch")):(this.search_field[0].readOnly=!1,this.container.removeClass("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},c.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){if(this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight(),b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(f>c)return this.search_results.scrollTop(c)}},c.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClass("highlighted"),this.result_highlight=null},c.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.container.addClass("chosen-with-drop"),this.results_showing=!0,this.search_field.focus(),this.search_field.val(this.search_field.val()),this.winnow_results(),this.form_field_jq.trigger("chosen:showing_dropdown",{chosen:this}))},c.prototype.update_results_content=function(a){return this.search_results.html(a)},c.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:hiding_dropdown",{chosen:this})),this.results_showing=!1},c.prototype.set_tab_index=function(a){var b;return this.form_field.tabIndex?(b=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field[0].tabIndex=b):void 0},c.prototype.set_label_behavior=function(){var b=this;return this.form_field_label=this.form_field_jq.parents("label"),!this.form_field_label.length&&this.form_field.id.length&&(this.form_field_label=a("label[for='"+this.form_field.id+"']")),this.form_field_label.length>0?this.form_field_label.bind("click.chosen",function(a){return b.is_multiple?b.container_mousedown(a):b.activate_field()}):void 0},c.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},c.prototype.search_results_mouseup=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c.length?(this.result_highlight=c,this.result_select(b),this.search_field.focus()):void 0},c.prototype.search_results_mouseover=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c?this.result_do_highlight(c):void 0},c.prototype.search_results_mouseout=function(b){return a(b.target).hasClass("active-result")?this.result_clear_highlight():void 0},c.prototype.choice_build=function(b){var c,d,e=this;return c=a("<li />",{"class":"search-choice"}).html("<span>"+b.html+"</span>"),b.disabled?c.addClass("search-choice-disabled"):(d=a("<a />",{"class":"search-choice-close","data-option-array-index":b.array_index}),d.bind("click.chosen",function(a){return e.choice_destroy_link_click(a)}),c.append(d)),this.search_container.before(c)},c.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),b.stopPropagation(),this.is_disabled?void 0:this.choice_destroy(a(b.target))},c.prototype.choice_destroy=function(a){return this.result_deselect(a[0].getAttribute("data-option-array-index"))?(this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.search_field.val().length<1&&this.results_hide(),a.parents("li").first().remove(),this.search_field_scale()):void 0},c.prototype.results_reset=function(){return this.reset_single_select_options(),this.form_field.options[0].selected=!0,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.form_field_jq.trigger("change"),this.active_field?this.results_hide():void 0},c.prototype.results_reset_cleanup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.selected_item.find("abbr").remove()},c.prototype.result_select=function(a){var b,c;return this.result_highlight?(b=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?b.removeClass("active-result"):this.reset_single_select_options(),c=this.results_data[b[0].getAttribute("data-option-array-index")],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(c):this.single_set_selected_text(c.text),(a.metaKey||a.ctrlKey)&&this.is_multiple||this.results_hide(),this.search_field.val(""),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.form_field_jq.trigger("change",{selected:this.form_field.options[c.options_index].value}),this.current_selectedIndex=this.form_field.selectedIndex,this.search_field_scale())):void 0},c.prototype.single_set_selected_text=function(a){return null==a&&(a=this.default_text),a===this.default_text?this.selected_item.addClass("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClass("chosen-default")),this.selected_item.find("span").text(a)},c.prototype.result_deselect=function(a){var b;return b=this.results_data[a],this.form_field.options[b.options_index].disabled?!1:(b.selected=!1,this.form_field.options[b.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.form_field_jq.trigger("change",{deselected:this.form_field.options[b.options_index].value}),this.search_field_scale(),!0)},c.prototype.single_deselect_control_build=function(){return this.allow_single_deselect?(this.selected_item.find("abbr").length||this.selected_item.find("span").first().after('<abbr class="search-choice-close"></abbr>'),this.selected_item.addClass("chosen-single-with-deselect")):void 0},c.prototype.get_search_text=function(){return this.search_field.val()===this.default_text?"":a("<div/>").text(a.trim(this.search_field.val())).html()},c.prototype.winnow_results_set_highlight=function(){var a,b;return b=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),a=b.length?b.first():this.search_results.find(".active-result").first(),null!=a?this.result_do_highlight(a):void 0},c.prototype.no_results=function(b){var c;return c=a('<li class="no-results">'+this.results_none_found+' "<span></span>"</li>'),c.find("span").first().html(b),this.search_results.append(c),this.form_field_jq.trigger("chosen:no_results",{chosen:this})},c.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},c.prototype.keydown_arrow=function(){var a;return this.results_showing&&this.result_highlight?(a=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(a):void 0:this.results_show()},c.prototype.keyup_arrow=function(){var a;return this.results_showing||this.is_multiple?this.result_highlight?(a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight())):void 0:this.results_show()},c.prototype.keydown_backstroke=function(){var a;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(a=this.search_container.siblings("li.search-choice").last(),a.length&&!a.hasClass("search-choice-disabled")?(this.pending_backstroke=a,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")):void 0)},c.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},c.prototype.keydown_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),8!==b&&this.pending_backstroke&&this.clear_backstroke(),b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:a.preventDefault(),this.keydown_arrow()}},c.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){for(d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"],i=0,j=g.length;j>i;i++)e=g[i],f+=e+":"+this.search_field.css(e)+";";return b=a("<div />",{style:f}),b.text(this.search_field.val()),a("body").append(b),h=b.width()+25,b.remove(),c=this.container.outerWidth(),h>c-10&&(h=c-10),this.search_field.css({width:h+"px"})}},c}(b)}).call(this);
libs/factory/bootstrap/assets/js-min/plugin.color.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ !function(a,b){var c=function(a,b){return this instanceof c?this._init(a,b):new c(a,b)};c.fn=c.prototype={_color:0,_alpha:1,error:!1,_hsl:{h:0,s:0,l:0},_hsv:{h:0,s:0,v:0},_hSpace:"hsl",_init:function(a){var c="noop";switch(typeof a){case"object":return a.a!==b&&this.a(a.a),c=a.r!==b?"fromRgb":a.l!==b?"fromHsl":a.v!==b?"fromHsv":c,this[c](a);case"string":return this.fromCSS(a);case"number":return this.fromInt(parseInt(a,10))}return this},_error:function(){return this.error=!0,this},clone:function(){for(var a=new c(this.toInt()),b=["_alpha","_hSpace","_hsl","_hsv","error"],d=b.length-1;d>=0;d--)a[b[d]]=this[b[d]];return a},setHSpace:function(a){return this._hSpace="hsv"===a?a:"hsl",this},noop:function(){return this},fromCSS:function(a){var b,c=/^(rgb|hs(l|v))a?\(/;if(this.error=!1,a=a.replace(/^\s+/,"").replace(/\s+$/,"").replace(/;$/,""),a.match(c)&&a.match(/\)$/)){if(b=a.replace(/(\s|%)/g,"").replace(c,"").replace(/,?\);?$/,"").split(","),b.length<3)return this._error();if(4===b.length&&(this.a(parseFloat(b.pop())),this.error))return this;for(var d=b.length-1;d>=0;d--)if(b[d]=parseInt(b[d],10),isNaN(b[d]))return this._error();return a.match(/^rgb/)?this.fromRgb({r:b[0],g:b[1],b:b[2]}):a.match(/^hsv/)?this.fromHsv({h:b[0],s:b[1],v:b[2]}):this.fromHsl({h:b[0],s:b[1],l:b[2]})}return this.fromHex(a)},fromRgb:function(a,c){return"object"!=typeof a||a.r===b||a.g===b||a.b===b?this._error():(this.error=!1,this.fromInt(parseInt((a.r<<16)+(a.g<<8)+a.b,10),c))},fromHex:function(a){return a=a.replace(/^#/,"").replace(/^0x/,""),3===a.length&&(a=a[0]+a[0]+a[1]+a[1]+a[2]+a[2]),this.error=!/^[0-9A-F]{6}$/i.test(a),this.fromInt(parseInt(a,16))},fromHsl:function(a){var c,d,e,f,g,h,i,j;return"object"!=typeof a||a.h===b||a.s===b||a.l===b?this._error():(this._hsl=a,this._hSpace="hsl",h=a.h/360,i=a.s/100,j=a.l/100,0===i?c=d=e=j:(f=.5>j?j*(1+i):j+i-j*i,g=2*j-f,c=this.hue2rgb(g,f,h+1/3),d=this.hue2rgb(g,f,h),e=this.hue2rgb(g,f,h-1/3)),this.fromRgb({r:255*c,g:255*d,b:255*e},!0))},fromHsv:function(a){var c,d,e,f,g,h,i,j,k,l,m;if("object"!=typeof a||a.h===b||a.s===b||a.v===b)return this._error();switch(this._hsv=a,this._hSpace="hsv",c=a.h/360,d=a.s/100,e=a.v/100,i=Math.floor(6*c),j=6*c-i,k=e*(1-d),l=e*(1-j*d),m=e*(1-(1-j)*d),i%6){case 0:f=e,g=m,h=k;break;case 1:f=l,g=e,h=k;break;case 2:f=k,g=e,h=m;break;case 3:f=k,g=l,h=e;break;case 4:f=m,g=k,h=e;break;case 5:f=e,g=k,h=l}return this.fromRgb({r:255*f,g:255*g,b:255*h},!0)},fromInt:function(a,c){return this._color=parseInt(a,10),isNaN(this._color)&&(this._color=0),this._color>16777215?this._color=16777215:this._color<0&&(this._color=0),c===b&&(this._hsv.h=this._hsv.s=this._hsl.h=this._hsl.s=0),this},hue2rgb:function(a,b,c){return 0>c&&(c+=1),c>1&&(c-=1),1/6>c?a+6*(b-a)*c:.5>c?b:2/3>c?a+(b-a)*(2/3-c)*6:a},toString:function(){var a=parseInt(this._color,10).toString(16);if(this.error)return"";if(a.length<6)for(var b=6-a.length-1;b>=0;b--)a="0"+a;return"#"+a},toCSS:function(a,b){switch(a=a||"hex",b=parseFloat(b||this._alpha),a){case"rgb":case"rgba":var c=this.toRgb();return 1>b?"rgba( "+c.r+", "+c.g+", "+c.b+", "+b+" )":"rgb( "+c.r+", "+c.g+", "+c.b+" )";case"hsl":case"hsla":var d=this.toHsl();return 1>b?"hsla( "+d.h+", "+d.s+"%, "+d.l+"%, "+b+" )":"hsl( "+d.h+", "+d.s+"%, "+d.l+"% )";default:return this.toString()}},toRgb:function(){return{r:255&this._color>>16,g:255&this._color>>8,b:255&this._color}},toHsl:function(){var a,b,c=this.toRgb(),d=c.r/255,e=c.g/255,f=c.b/255,g=Math.max(d,e,f),h=Math.min(d,e,f),i=(g+h)/2;if(g===h)a=b=0;else{var j=g-h;switch(b=i>.5?j/(2-g-h):j/(g+h),g){case d:a=(e-f)/j+(f>e?6:0);break;case e:a=(f-d)/j+2;break;case f:a=(d-e)/j+4}a/=6}return a=Math.round(360*a),0===a&&this._hsl.h!==a&&(a=this._hsl.h),b=Math.round(100*b),0===b&&this._hsl.s&&(b=this._hsl.s),{h:a,s:b,l:Math.round(100*i)}},toHsv:function(){var a,b,c=this.toRgb(),d=c.r/255,e=c.g/255,f=c.b/255,g=Math.max(d,e,f),h=Math.min(d,e,f),i=g,j=g-h;if(b=0===g?0:j/g,g===h)a=b=0;else{switch(g){case d:a=(e-f)/j+(f>e?6:0);break;case e:a=(f-d)/j+2;break;case f:a=(d-e)/j+4}a/=6}return a=Math.round(360*a),0===a&&this._hsv.h!==a&&(a=this._hsv.h),b=Math.round(100*b),0===b&&this._hsv.s&&(b=this._hsv.s),{h:a,s:b,v:Math.round(100*i)}},toInt:function(){return this._color},toIEOctoHex:function(){var a=this.toString(),b=parseInt(255*this._alpha,10).toString(16);return 1===b.length&&(b="0"+b),"#"+b+a.replace(/^#/,"")},toLuminosity:function(){var a=this.toRgb();return.2126*Math.pow(a.r/255,2.2)+.7152*Math.pow(a.g/255,2.2)+.0722*Math.pow(a.b/255,2.2)},getDistanceLuminosityFrom:function(a){if(!(a instanceof c))throw"getDistanceLuminosityFrom requires a Color object";var b=this.toLuminosity(),d=a.toLuminosity();return b>d?(b+.05)/(d+.05):(d+.05)/(b+.05)},getMaxContrastColor:function(){var a=this.toLuminosity(),b=a>=.5?"000000":"ffffff";return new c(b)},getReadableContrastingColor:function(a,d){if(!a instanceof c)return this;var e=d===b?5:d,f=a.getDistanceLuminosityFrom(this),g=a.getMaxContrastColor(),h=g.getDistanceLuminosityFrom(a);if(e>=h)return g;if(f>=e)return this;for(var i=0===g.toInt()?-1:1;e>f&&(this.l(i,!0),f=this.getDistanceLuminosityFrom(a),0!==this._color&&16777215!==this._color););return this},a:function(a){if(a===b)return this._alpha;var c=parseFloat(a);return isNaN(c)?this._error():(this._alpha=c,this)},darken:function(a){return a=a||5,this.l(-a,!0)},lighten:function(a){return a=a||5,this.l(a,!0)},saturate:function(a){return a=a||15,this.s(a,!0)},desaturate:function(a){return a=a||15,this.s(-a,!0)},toGrayscale:function(){return this.setHSpace("hsl").s(0)},getComplement:function(){return this.h(180,!0)},getSplitComplement:function(a){a=a||1;var b=180+30*a;return this.h(b,!0)},getAnalog:function(a){a=a||1;var b=30*a;return this.h(b,!0)},getTetrad:function(a){a=a||1;var b=60*a;return this.h(b,!0)},getTriad:function(a){a=a||1;var b=120*a;return this.h(b,!0)},_partial:function(a){var c=d[a];return function(d,e){var f=this._spaceFunc("to",c.space);return d===b?f[a]:(e===!0&&(d=f[a]+d),c.mod&&(d%=c.mod),c.range&&(d=d<c.range[0]?c.range[0]:d>c.range[1]?c.range[1]:d),f[a]=d,this._spaceFunc("from",c.space,f))}},_spaceFunc:function(a,b,c){var d=b||this._hSpace,e=a+d.charAt(0).toUpperCase()+d.substr(1);return this[e](c)}};var d={h:{mod:360},s:{range:[0,100]},l:{space:"hsl",range:[0,100]},v:{space:"hsv",range:[0,100]},r:{space:"rgb",range:[0,255]},g:{space:"rgb",range:[0,255]},b:{space:"rgb",range:[0,255]}};for(var e in d)d.hasOwnProperty(e)&&(c.fn[e]=c.fn._partial(e));"object"==typeof exports?module.exports=c:a.Color=c}(this);
libs/factory/bootstrap/assets/js-min/plugin.ddslick.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ !function(a){function b(a,b){var c=a.data("ddslick"),f=a.find(".dd-selected"),g=f.siblings(".dd-selected-value"),h=(a.find(".dd-options"),f.siblings(".dd-pointer"),a.find(".dd-option").eq(b)),i=h.closest("li"),j=c.settings,k=c.settings.data[b];a.find(".dd-option").removeClass("dd-option-selected"),h.addClass("dd-option-selected"),c.selectedIndex=b,c.selectedItem=i,c.selectedData=k,j.showSelectedHTML?f.html((k.imageSrc?'<img class="dd-selected-image'+("right"==j.imagePosition?" dd-image-right":"")+'" src="'+k.imageSrc+'" />':"")+(k.text?'<label class="dd-selected-text">'+k.text+"</label>":"")+(k.description?'<small class="dd-selected-description dd-desc'+(j.truncateDescription?" dd-selected-description-truncated":"")+'" >'+k.description+"</small>":"")):f.html(k.text),g.val(k.value),c.original.val(k.value),a.data("ddslick",c),d(a),e(a),"function"==typeof j.onSelected&&j.onSelected.call(this,c)}function c(b){var c=b.find(".dd-select"),d=c.siblings(".dd-options"),e=c.find(".dd-pointer"),g=d.is(":visible");a(".dd-click-off-close").not(d).slideUp(50),a(".dd-pointer").removeClass("dd-pointer-up"),g?(d.slideUp("fast"),e.removeClass("dd-pointer-up")):(d.slideDown("fast"),e.addClass("dd-pointer-up")),f(b)}function d(a){a.find(".dd-options").slideUp(50),a.find(".dd-pointer").removeClass("dd-pointer-up").removeClass("dd-pointer-up")}function e(a){var b=a.find(".dd-select").css("height"),c=a.find(".dd-selected-description"),d=a.find(".dd-selected-image");c.length<=0&&d.length>0&&a.find(".dd-selected-text").css("lineHeight",b)}function f(b){b.find(".dd-option").each(function(){var c=a(this),d=c.css("height"),e=c.find(".dd-option-description"),f=b.find(".dd-option-image");e.length<=0&&f.length>0&&c.find(".dd-option-text").css("lineHeight",d)})}a.fn.ddslick=function(b){return g[b]?g[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?void a.error("Method "+b+" does not exists."):g.init.apply(this,arguments)};var g={},h={data:[],keepJSONItemsOnTop:!1,width:260,height:null,background:"#eee",selectText:"",defaultSelectedIndex:null,truncateDescription:!0,imagePosition:"left",showSelectedHTML:!0,clickOffToClose:!0,onSelected:function(){}},i='<div class="dd-select"><input class="dd-selected-value" type="hidden" /><a class="dd-selected"></a><span class="dd-pointer dd-pointer-down"></span></div>',j='<ul class="dd-options"></ul>',k='<style id="css-ddslick" type="text/css">.dd-select{ border-radius:2px; border:solid 1px #ccc; position:relative; cursor:pointer;}.dd-desc { color:#aaa; display:block; overflow: hidden; font-weight:normal; line-height: 1.4em; }.dd-selected{ overflow:hidden; display:block; padding:10px; font-weight:bold;}.dd-pointer{ width:0; height:0; position:absolute; right:10px; top:50%; margin-top:-3px;}.dd-pointer-down{ border:solid 5px transparent; border-top:solid 5px #000; }.dd-pointer-up{border:solid 5px transparent !important; border-bottom:solid 5px #000 !important; margin-top:-8px;}.dd-options{ border:solid 1px #ccc; border-top:none; list-style:none; box-shadow:0px 1px 5px #ddd; display:none; position:absolute; z-index:2000; margin:0; padding:0;background:#fff; overflow:auto;}.dd-option{ padding:10px; display:block; border-bottom:solid 1px #ddd; overflow:hidden; text-decoration:none; color:#333; cursor:pointer;-webkit-transition: all 0.25s ease-in-out; -moz-transition: all 0.25s ease-in-out;-o-transition: all 0.25s ease-in-out;-ms-transition: all 0.25s ease-in-out; }.dd-options > li:last-child > .dd-option{ border-bottom:none;}.dd-option:hover{ background:#f3f3f3; color:#000;}.dd-selected-description-truncated { text-overflow: ellipsis; white-space:nowrap; }.dd-option-selected { background:#f6f6f6; }.dd-option-image, .dd-selected-image { vertical-align:middle; float:left; margin-right:5px; max-width:64px;}.dd-image-right { float:right; margin-right:15px; margin-left:5px;}.dd-container{ position:relative;}​ .dd-selected-text { font-weight:bold}​</style>';a("#css-ddslick").length<=0&&a(k).appendTo("head"),g.init=function(d){var d=a.extend({},h,d);return this.each(function(){var e=a(this),f=e.data("ddslick");if(!f){var g=[];d.data;e.find("option").each(function(){var b=a(this),c=b.data();g.push({text:a.trim(b.text()),value:b.val(),selected:b.is(":selected"),description:c.description,imageSrc:c.imagesrc})}),d.keepJSONItemsOnTop?a.merge(d.data,g):d.data=a.merge(g,d.data);var h=e,k=a('<div id="'+e.attr("id")+'"></div>');e.replaceWith(k),e=k,e.addClass("dd-container").append(i).append(j);var g=e.find(".dd-select"),l=e.find(".dd-options");l.css({width:d.width}),g.css({width:d.width,background:d.background}),e.css({width:d.width}),null!=d.height&&l.css({height:d.height,overflow:"auto"}),a.each(d.data,function(a,b){b.selected&&(d.defaultSelectedIndex=a),l.append('<li><a class="dd-option">'+(b.value?' <input class="dd-option-value" type="hidden" value="'+b.value+'" />':"")+(b.imageSrc?' <img class="dd-option-image'+("right"==d.imagePosition?" dd-image-right":"")+'" src="'+b.imageSrc+'" />':"")+(b.text?' <label class="dd-option-text">'+b.text+"</label>":"")+(b.description?' <small class="dd-option-description dd-desc">'+b.description+"</small>":"")+"</a></li>")});var m={settings:d,original:h,selectedIndex:-1,selectedItem:null,selectedData:null};if(e.data("ddslick",m),d.selectText.length>0&&null==d.defaultSelectedIndex)e.find(".dd-selected").html(d.selectText);else{var n=null!=d.defaultSelectedIndex&&d.defaultSelectedIndex>=0&&d.defaultSelectedIndex<d.data.length?d.defaultSelectedIndex:0;b(e,n)}e.find(".dd-select").on("click.ddslick",function(){c(e)}),e.find(".dd-option").on("click.ddslick",function(){b(e,a(this).closest("li").index())}),d.clickOffToClose&&(l.addClass("dd-click-off-close"),e.on("click.ddslick",function(a){a.stopPropagation()}),a("body").on("click",function(){a(".dd-click-off-close").slideUp(50).siblings(".dd-select").find(".dd-pointer").removeClass("dd-pointer-up")}))}})},g.select=function(c){return this.each(function(){c.index&&b(a(this),c.index)})},g.open=function(){return this.each(function(){var b=a(this),d=b.data("ddslick");d&&c(b)})},g.close=function(){return this.each(function(){var b=a(this),c=b.data("ddslick");c&&d(b)})},g.destroy=function(){return this.each(function(){var b=a(this),c=b.data("ddslick");if(c){var d=c.original;b.removeData("ddslick").unbind(".ddslick").replaceWith(d)}})}}(jQuery);
libs/factory/bootstrap/assets/js-min/plugin.gradient-picker.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
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.factoryBootstrap421_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.factoryBootstrap421_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.factoryBootstrap421_iris("show"),this.$colorPicker.factoryBootstrap421_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);
libs/factory/bootstrap/assets/js-min/plugin.iris.min.js ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ /*! Iris Color Picker - v1.0.4 - 2013-11-18
11
+ * https://github.com/Automattic/Iris
12
+ * Copyright (c) 2013 Matt Wiebe; Licensed GPLv2 */
13
+ !function(a,b){function c(){var b,c;j?k="filter":(b=a('<div id="iris-gradtest" />'),c="linear-gradient(top,#fff,#000)",a.each(l,function(a,d){return b.css("backgroundImage",d+c),b.css("backgroundImage").match("gradient")?(k=a,!1):void 0}),k===!1&&(b.css("background","-webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#000))"),b.css("backgroundImage").match("gradient")&&(k="webkit")),b.remove())}function d(b,c){return b="top"===b?"top":"left",c=a.isArray(c)?c:Array.prototype.slice.call(arguments,1),"webkit"===k?f(b,c):l[k]+"linear-gradient("+b+", "+c.join(", ")+")"}function e(b,c){var d,e,f,h,i,j,k,l,m;b="top"===b?"top":"left",c=a.isArray(c)?c:Array.prototype.slice.call(arguments,1),d="top"===b?0:1,e=a(this),f=c.length-1,h="filter",i=1===d?"left":"top",j=1===d?"right":"bottom",k=1===d?"height":"width",l='<div class="iris-ie-gradient-shim" style="position:absolute;'+k+":100%;"+i+":%start%;"+j+":%end%;"+h+':%filter%;" data-color:"%color%"></div>',m="","static"===e.css("position")&&e.css({position:"relative"}),c=g(c),a.each(c,function(a,b){var e,g,h;return a===f?!1:(e=c[a+1],void(b.stop!==e.stop&&(g=100-parseFloat(e.stop)+"%",b.octoHex=new Color(b.color).toIEOctoHex(),e.octoHex=new Color(e.color).toIEOctoHex(),h="progid:DXImageTransform.Microsoft.Gradient(GradientType="+d+", StartColorStr='"+b.octoHex+"', EndColorStr='"+e.octoHex+"')",m+=l.replace("%start%",b.stop).replace("%end%",g).replace("%filter%",h))))}),e.find(".iris-ie-gradient-shim").remove(),a(m).prependTo(e)}function f(b,c){var d=[];return b="top"===b?"0% 0%,0% 100%,":"0% 100%,100% 100%,",c=g(c),a.each(c,function(a,b){d.push("color-stop("+parseFloat(b.stop)/100+", "+b.color+")")}),"-webkit-gradient(linear,"+b+d.join(",")+")"}function g(b){var c=[],d=[],e=[],f=b.length-1;return a.each(b,function(a,b){var e=b,f=!1,g=b.match(/1?[0-9]{1,2}%$/);g&&(e=b.replace(/\s?1?[0-9]{1,2}%$/,""),f=g.shift()),c.push(e),d.push(f)}),d[0]===!1&&(d[0]="0%"),d[f]===!1&&(d[f]="100%"),d=h(d),a.each(d,function(a){e[a]={color:c[a],stop:d[a]}}),e}function h(b){var c,d,e,f,g=0,i=b.length-1,j=0,k=!1;if(b.length<=2||a.inArray(!1,b)<0)return b;for(;j<b.length-1;)k||b[j]!==!1?k&&b[j]!==!1&&(i=j,j=b.length):(g=j-1,k=!0),j++;for(d=i-g,f=parseInt(b[g].replace("%"),10),c=(parseFloat(b[i].replace("%"))-f)/d,j=g+1,e=1;i>j;)b[j]=f+e*c+"%",e++,j++;return h(b)}var i,j,k,l,m,n,o,p,q;return i='<div class="iris-picker"><div class="iris-picker-inner"><div class="iris-square"><a class="iris-square-value" href="#"><span class="iris-square-handle ui-slider-handle"></span></a><div class="iris-square-inner iris-square-horiz"></div><div class="iris-square-inner iris-square-vert"></div></div><div class="iris-slider iris-strip"><div class="iris-slider-offset"></div></div></div></div>',o=navigator.userAgent.toLowerCase(),p="Microsoft Internet Explorer"===navigator.appName,q=p?parseFloat(o.match(/msie ([0-9]{1,}[\.0-9]{0,})/)[1]):0,j=p&&10>q,k=!1,l=["-moz-","-webkit-","-o-","-ms-"],m='.iris-picker{display:block;position:relative}.iris-picker,.iris-picker *{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input+.iris-picker{margin-top:4px}.iris-error{background-color:#ffafaf}.iris-border{border-radius:3px;border:1px solid #aaa;width:200px;background-color:#fff}.iris-picker-inner{position:absolute;top:0;right:0;left:0;bottom:0}.iris-border .iris-picker-inner{top:10px;right:10px;left:10px;bottom:10px}.iris-picker .iris-square-inner{position:absolute;left:0;right:0;top:0;bottom:0}.iris-picker .iris-square,.iris-picker .iris-slider,.iris-picker .iris-square-inner,.iris-picker .iris-palette{border-radius:3px;box-shadow:inset 0 0 5px rgba(0,0,0,.4);height:100%;width:12.5%;float:left;margin-right:5%}.iris-picker .iris-square{width:76%;margin-right:10%;position:relative}.iris-picker .iris-square-inner{width:auto;margin:0}.iris-ie-9 .iris-square,.iris-ie-9 .iris-slider,.iris-ie-9 .iris-square-inner,.iris-ie-9 .iris-palette{box-shadow:none;border-radius:0}.iris-ie-9 .iris-square,.iris-ie-9 .iris-slider,.iris-ie-9 .iris-palette{outline:1px solid rgba(0,0,0,.1)}.iris-ie-lt9 .iris-square,.iris-ie-lt9 .iris-slider,.iris-ie-lt9 .iris-square-inner,.iris-ie-lt9 .iris-palette{outline:1px solid #aaa}.iris-ie-lt9 .iris-square .ui-slider-handle{outline:1px solid #aaa;background-color:#fff;-ms-filter:"alpha(Opacity=30)"}.iris-ie-lt9 .iris-square .iris-square-handle{background:0;border:3px solid #fff;-ms-filter:"alpha(Opacity=50)"}.iris-picker .iris-strip{margin-right:0;position:relative}.iris-picker .iris-strip .ui-slider-handle{position:absolute;background:0;margin:0;right:-3px;left:-3px;border:4px solid #aaa;border-width:4px 3px;width:auto;height:6px;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.2);opacity:.9;z-index:5;cursor:ns-resize}.iris-strip .ui-slider-handle:before{content:" ";position:absolute;left:-2px;right:-2px;top:-3px;bottom:-3px;border:2px solid #fff;border-radius:3px}.iris-picker .iris-slider-offset{position:absolute;top:11px;left:0;right:0;bottom:-3px;width:auto;height:auto;background:transparent;border:0;top:none;border-radius:0}.iris-picker .iris-square-handle{background:transparent;border:5px solid #aaa;border-radius:50%;border-color:rgba(128,128,128,.5);box-shadow:none;width:12px;height:12px;position:absolute;left:-10px;top:-10px;cursor:move;opacity:1;z-index:10}.iris-picker .ui-state-focus .iris-square-handle{opacity:.8}.iris-picker .iris-square-handle:hover{border-color:#999}.iris-picker .iris-square-value:focus .iris-square-handle{box-shadow:0 0 2px rgba(0,0,0,.75);opacity:.8}.iris-picker .iris-square-handle:hover::after{border-color:#fff}.iris-picker .iris-square-handle::after{position:absolute;bottom:-4px;right:-4px;left:-4px;top:-4px;border:3px solid #f9f9f9;border-color:rgba(255,255,255,.8);border-radius:50%;content:" "}.iris-picker .iris-square-value{width:8px;height:8px;position:absolute}.iris-ie-lt9 .iris-square-value,.iris-mozilla .iris-square-value{width:1px;height:1px}.iris-palette-container{position:absolute;bottom:0;left:0;margin:0;padding:0}.iris-border .iris-palette-container{left:10px;bottom:10px}.iris-picker .iris-palette{margin:0;cursor:pointer}',j&&7>=q?(a.fn.iris=a.noop,void(a.support.iris=!1)):(a.support.factoryBootstrap421_iris=!0,a.fn.factoryBootstrap421_gradient=function(){var b=arguments;return this.each(function(){j?e.apply(this,b):a(this).css("backgroundImage",d.apply(this,b))})},a.fn.factoryBootstrap421_raninbowGradient=function(b,c){var d,e,f,g;for(b=b||"top",d=a.extend({},{s:100,l:50},c),e="hsl(%h%,"+d.s+"%,"+d.l+"%)",f=0,g=[];360>=f;)g.push(e.replace("%h%",f)),f+=30;return this.each(function(){a(this).factoryBootstrap421_gradient(b,g)})},n={options:{color:!1,mode:"hsl",controls:{horiz:"s",vert:"l",strip:"h"},hide:!0,border:!0,target:!1,width:200,palettes:!1},_color:"",_palettes:["#000","#fff","#d33","#d93","#ee2","#81d742","#1e73be","#8224e3"],_inited:!1,_defaultHSLControls:{horiz:"s",vert:"l",strip:"h"},_defaultHSVControls:{horiz:"h",vert:"v",strip:"s"},_scale:{h:360,s:100,l:100,v:100},_create:function(){var b=this,d=b.element,e=b.options.color||d.val();k===!1&&c(),d.is("input")?(b.options.target?b.picker=a(i).appendTo(b.options.target):b.picker=a(i).insertAfter(d),b._addInputListeners(d)):(d.append(i),b.picker=d.find(".iris-picker")),p?9===q?b.picker.addClass("iris-ie-9"):8>=q&&b.picker.addClass("iris-ie-lt9"):o.indexOf("compatible")<0&&o.indexOf("khtml")<0&&o.match(/mozilla/)&&b.picker.addClass("iris-mozilla"),b.options.palettes&&b._addPalettes(),b._color=new Color(e).setHSpace(b.options.mode),b.options.color=b._color.toString(),b.controls={square:b.picker.find(".iris-square"),squareDrag:b.picker.find(".iris-square-value"),horiz:b.picker.find(".iris-square-horiz"),vert:b.picker.find(".iris-square-vert"),strip:b.picker.find(".iris-strip"),stripSlider:b.picker.find(".iris-strip .iris-slider-offset")},"hsv"===b.options.mode&&b._has("l",b.options.controls)?b.options.controls=b._defaultHSVControls:"hsl"===b.options.mode&&b._has("v",b.options.controls)&&(b.options.controls=b._defaultHSLControls),b.hue=b._color.h(),b.options.hide&&b.picker.hide(),b.options.border&&b.picker.addClass("iris-border"),b._initControls(),b.active="external",b._dimensions(),b._change()},_has:function(b,c){var d=!1;return a.each(c,function(a,c){return b===c?(d=!0,!1):void 0}),d},_addPalettes:function(){var b=a('<div class="iris-palette-container" />'),c=a('<a class="iris-palette" tabindex="0" />'),d=a.isArray(this.options.palettes)?this.options.palettes:this._palettes;this.picker.find(".iris-palette-container").length&&(b=this.picker.find(".iris-palette-container").detach().html("")),a.each(d,function(a,d){c.clone().data("color",d).css("backgroundColor",d).appendTo(b).height(10).width(10)}),this.picker.append(b)},_paint:function(){var a=this;a._paintDimension("top","strip"),a._paintDimension("top","vert"),a._paintDimension("left","horiz")},_paintDimension:function(a,b){var c,d=this,e=d._color,f=d.options.mode,g=d._getHSpaceColor(),h=d.controls[b],i=d.options.controls;if(b!==d.active&&("square"!==d.active||"strip"===b))switch(i[b]){case"h":if("hsv"===f){switch(g=e.clone(),b){case"horiz":g[i.vert](100);break;case"vert":g[i.horiz](100);break;case"strip":g.setHSpace("hsl")}c=g.toHsl()}else c="strip"===b?{s:g.s,l:g.l}:{s:100,l:g.l};h.factoryBootstrap421_raninbowGradient(a,c);break;case"s":"hsv"===f?"vert"===b?c=[e.clone().a(0).s(0).toCSS("rgba"),e.clone().a(1).s(0).toCSS("rgba")]:"strip"===b?c=[e.clone().s(100).toCSS("hsl"),e.clone().s(0).toCSS("hsl")]:"horiz"===b&&(c=["#fff","hsl("+g.h+",100%,50%)"]):c="vert"===b&&"h"===d.options.controls.horiz?["hsla(0, 0%, "+g.l+"%, 0)","hsla(0, 0%, "+g.l+"%, 1)"]:["hsl("+g.h+",0%,50%)","hsl("+g.h+",100%,50%)"],h.factoryBootstrap421_gradient(a,c);break;case"l":c="strip"===b?["hsl("+g.h+",100%,100%)","hsl("+g.h+", "+g.s+"%,50%)","hsl("+g.h+",100%,0%)"]:["#fff","rgba(255,255,255,0) 50%","rgba(0,0,0,0) 50%","rgba(0,0,0,1)"],h.factoryBootstrap421_gradient(a,c);break;case"v":c="strip"===b?[e.clone().v(100).toCSS(),e.clone().v(0).toCSS()]:["rgba(0,0,0,0)","#000"],h.factoryBootstrap421_gradient(a,c)}},_getHSpaceColor:function(){return"hsv"===this.options.mode?this._color.toHsv():this._color.toHsl()},_dimensions:function(b){var c,d,e,f,g=this,h=g.options,i=g.controls,j=i.square,k=g.picker.find(".iris-strip"),l="77.5%",m="12%",n=20,o=h.border?h.width-n:h.width,p=a.isArray(h.palettes)?h.palettes.length:g._palettes.length;return b&&(j.css("width",""),k.css("width",""),g.picker.css({width:"",height:""})),l=o*(parseFloat(l)/100),m=o*(parseFloat(m)/100),c=h.border?l+n:l,j.width(l).height(l),k.height(l).width(m),g.picker.css({width:h.width,height:c}),h.palettes?(d=2*l/100,f=l-(p-1)*d,e=f/p,g.picker.find(".iris-palette").each(function(b){var c=0===b?0:d;a(this).css({width:e,height:e,marginLeft:c})}),g.picker.css("paddingBottom",e+d),void k.height(e+d+l)):g.picker.css("paddingBottom","")},_addInputListeners:function(a){var b=this,c=100,d=function(c){var d=new Color(a.val()),e=a.val().replace(/^#/,"");a.removeClass("iris-error"),d.error?""!==e&&a.addClass("iris-error"):d.toString()!==b._color.toString()&&("keyup"===c.type&&e.match(/^[0-9a-fA-F]{3}$/)||b._setOption("color",d.toString()))};a.on("change",d).on("keyup",b._debounce(d,c)),b.options.hide&&a.one("focus",function(){b.show()})},_initControls:function(){var b=this,c=b.controls,d=c.square,e=b.options.controls,f=b._scale[e.strip];c.stripSlider.slider({orientation:"vertical",max:f,slide:function(a,c){b.active="strip","h"===e.strip&&(c.value=f-c.value),b._color[e.strip](c.value),b._change.apply(b,arguments)}}),c.squareDrag.draggable({containment:"parent",zIndex:1e3,cursor:"move",drag:function(a,c){b._squareDrag(a,c)},start:function(){d.addClass("iris-dragging"),a(this).addClass("ui-state-focus")},stop:function(){d.removeClass("iris-dragging"),a(this).removeClass("ui-state-focus")}}).on("mousedown mouseup",function(c){var d="ui-state-focus";c.preventDefault(),"mousedown"===c.type?(b.picker.find("."+d).removeClass(d).blur(),a(this).addClass(d).focus()):a(this).removeClass(d)}).on("keydown",function(a){var d=c.square,e=c.squareDrag,f=e.position(),g=b.options.width/100;switch(a.altKey&&(g*=10),a.keyCode){case 37:f.left-=g;break;case 38:f.top-=g;break;case 39:f.left+=g;break;case 40:f.top+=g;break;default:return!0}f.left=Math.max(0,Math.min(f.left,d.width())),f.top=Math.max(0,Math.min(f.top,d.height())),e.css(f),b._squareDrag(a,{position:f}),a.preventDefault()}),d.mousedown(function(c){var d,e;1===c.which&&a(c.target).is("div")&&(d=b.controls.square.offset(),e={top:c.pageY-d.top,left:c.pageX-d.left},c.preventDefault(),b._squareDrag(c,{position:e}),c.target=b.controls.squareDrag.get(0),b.controls.squareDrag.css(e).trigger(c))}),b.options.palettes&&b._paletteListeners()},_paletteListeners:function(){var b=this;b.picker.find(".iris-palette-container").on("click.palette",".iris-palette",function(){b._color.fromCSS(a(this).data("color")),b.active="external",b._change()}).on("keydown.palette",".iris-palette",function(b){return 13!==b.keyCode&&32!==b.keyCode?!0:(b.stopPropagation(),void a(this).click())})},_squareDrag:function(a,b){var c=this,d=c.options.controls,e=c._squareDimensions(),f=Math.round((e.h-b.position.top)/e.h*c._scale[d.vert]),g=c._scale[d.horiz]-Math.round((e.w-b.position.left)/e.w*c._scale[d.horiz]);c._color[d.horiz](g)[d.vert](f),c.active="square",c._change.apply(c,arguments)},_setOption:function(b,c){var d,e,f,g=this,h=g.options[b],i=!1;switch(g.options[b]=c,b){case"color":c=""+c,d=c.replace(/^#/,""),e=new Color(c).setHSpace(g.options.mode),e.error?g.options[b]=h:(g._color=e,g.options.color=g.options[b]=g._color.toString(),g.active="external",g._change());break;case"palettes":i=!0,c?g._addPalettes():g.picker.find(".iris-palette-container").remove(),h||g._paletteListeners();break;case"width":i=!0;break;case"border":i=!0,f=c?"addClass":"removeClass",g.picker[f]("iris-border");break;case"mode":case"controls":if(h===c)return;return f=g.element,h=g.options,h.hide=!g.picker.is(":visible"),g.destroy(),g.picker.remove(),a(g.element).iris(h)}i&&g._dimensions(!0)},_squareDimensions:function(a){var c,d,e=this.controls.square;return a!==b&&e.data("dimensions")?e.data("dimensions"):(d=this.controls.squareDrag,c={w:e.width(),h:e.height()},e.data("dimensions",c),c)},_isNonHueControl:function(a,b){return"square"===a&&"h"===this.options.controls.strip?!0:"external"===b||"h"===b&&"strip"===a?!1:!0},_change:function(){var b=this,c=b.controls,d=b._getHSpaceColor(),e=["square","strip"],f=b.options.controls,g=f[b.active]||"external",h=b.hue;"strip"===b.active?e=[]:"external"!==b.active&&e.pop(),a.each(e,function(a,e){var g,h,i;if(e!==b.active)switch(e){case"strip":g="h"===f.strip?b._scale[f.strip]-d[f.strip]:d[f.strip],c.stripSlider.slider("value",g);break;case"square":h=b._squareDimensions(),i={left:d[f.horiz]/b._scale[f.horiz]*h.w,top:h.h-d[f.vert]/b._scale[f.vert]*h.h},b.controls.squareDrag.css(i)}}),d.h!==h&&b._isNonHueControl(b.active,g)&&b._color.h(h),b.hue=b._color.h(),b.options.color=b._color.toString(),b._inited&&b._trigger("change",{type:b.active},{color:b._color}),b.element.is(":input")&&!b._color.error&&(b.element.removeClass("iris-error"),b.element.val()!==b._color.toString()&&b.element.val(b._color.toString())),b._paint(),b._inited=!0,b.active=!1},_debounce:function(a,b,c){var d,e;return function(){var f,g,h=this,i=arguments;return f=function(){d=null,c||(e=a.apply(h,i))},g=c&&!d,clearTimeout(d),d=setTimeout(f,b),g&&(e=a.apply(h,i)),e}},show:function(){this.picker.show()},hide:function(){this.picker.hide()},toggle:function(){this.picker.toggle()},color:function(a){return a===!0?this._color.clone():a===b?this._color.toString():void this.option("color",a)}},a.widget("a8c.factoryBootstrap421_iris",n),void a('<style id="iris-css">'+m+"</style>").appendTo("head"))}(jQuery);
libs/factory/bootstrap/assets/js-min/plugin.moment-with-locales.min.js ADDED
@@ -0,0 +1,526 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ !function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){"use strict";function a(){return ze.apply(null,arguments)}function b(a){ze=a}function c(a){return a instanceof Array||"[object Array]"===Object.prototype.toString.call(a)}function d(a){return null!=a&&"[object Object]"===Object.prototype.toString.call(a)}function e(a){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(a).length;var b;for(b in a)if(a.hasOwnProperty(b))return!1;return!0}function f(a){return void 0===a}function g(a){return"number"==typeof a||"[object Number]"===Object.prototype.toString.call(a)}function h(a){return a instanceof Date||"[object Date]"===Object.prototype.toString.call(a)}function i(a,b){var c,d=[];for(c=0;c<a.length;++c)d.push(b(a[c],c));return d}function j(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function k(a,b){for(var c in b)j(b,c)&&(a[c]=b[c]);return j(b,"toString")&&(a.toString=b.toString),j(b,"valueOf")&&(a.valueOf=b.valueOf),a}function l(a,b,c,d){return yb(a,b,c,d,!0).utc()}function m(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function n(a){return null==a._pf&&(a._pf=m()),a._pf}function o(a){if(null==a._isValid){var b=n(a),c=Ae.call(b.parsedDateParts,function(a){return null!=a}),d=!isNaN(a._d.getTime())&&b.overflow<0&&!b.empty&&!b.invalidMonth&&!b.invalidWeekday&&!b.weekdayMismatch&&!b.nullInput&&!b.invalidFormat&&!b.userInvalidated&&(!b.meridiem||b.meridiem&&c);if(a._strict&&(d=d&&0===b.charsLeftOver&&0===b.unusedTokens.length&&void 0===b.bigHour),null!=Object.isFrozen&&Object.isFrozen(a))return d;a._isValid=d}return a._isValid}function p(a){var b=l(NaN);return null!=a?k(n(b),a):n(b).userInvalidated=!0,b}function q(a,b){var c,d,e;if(f(b._isAMomentObject)||(a._isAMomentObject=b._isAMomentObject),f(b._i)||(a._i=b._i),f(b._f)||(a._f=b._f),f(b._l)||(a._l=b._l),f(b._strict)||(a._strict=b._strict),f(b._tzm)||(a._tzm=b._tzm),f(b._isUTC)||(a._isUTC=b._isUTC),f(b._offset)||(a._offset=b._offset),f(b._pf)||(a._pf=n(b)),f(b._locale)||(a._locale=b._locale),Be.length>0)for(c=0;c<Be.length;c++)d=Be[c],e=b[d],f(e)||(a[d]=e);return a}function r(b){q(this,b),this._d=new Date(null!=b._d?b._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),Ce===!1&&(Ce=!0,a.updateOffset(this),Ce=!1)}function s(a){return a instanceof r||null!=a&&null!=a._isAMomentObject}function t(a){return 0>a?Math.ceil(a)||0:Math.floor(a)}function u(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=t(b)),c}function v(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;e>d;d++)(c&&a[d]!==b[d]||!c&&u(a[d])!==u(b[d]))&&g++;return g+f}function w(b){a.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+b)}function x(b,c){var d=!0;return k(function(){if(null!=a.deprecationHandler&&a.deprecationHandler(null,b),d){for(var e,f=[],g=0;g<arguments.length;g++){if(e="","object"==typeof arguments[g]){e+="\n["+g+"] ";for(var h in arguments[0])e+=h+": "+arguments[0][h]+", ";e=e.slice(0,-2)}else e=arguments[g];f.push(e)}w(b+"\nArguments: "+Array.prototype.slice.call(f).join("")+"\n"+(new Error).stack),d=!1}return c.apply(this,arguments)},c)}function y(b,c){null!=a.deprecationHandler&&a.deprecationHandler(b,c),De[b]||(w(c),De[b]=!0)}function z(a){return a instanceof Function||"[object Function]"===Object.prototype.toString.call(a)}function A(a){var b,c;for(c in a)b=a[c],z(b)?this[c]=b:this["_"+c]=b;this._config=a,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function B(a,b){var c,e=k({},a);for(c in b)j(b,c)&&(d(a[c])&&d(b[c])?(e[c]={},k(e[c],a[c]),k(e[c],b[c])):null!=b[c]?e[c]=b[c]:delete e[c]);for(c in a)j(a,c)&&!j(b,c)&&d(a[c])&&(e[c]=k({},e[c]));return e}function C(a){null!=a&&this.set(a)}function D(a,b,c){var d=this._calendar[a]||this._calendar.sameElse;return z(d)?d.call(b,c):d}function E(a){var b=this._longDateFormat[a],c=this._longDateFormat[a.toUpperCase()];return b||!c?b:(this._longDateFormat[a]=c.replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a])}function F(){return this._invalidDate}function G(a){return this._ordinal.replace("%d",a)}function H(a,b,c,d){var e=this._relativeTime[c];return z(e)?e(a,b,c,d):e.replace(/%d/i,a)}function I(a,b){var c=this._relativeTime[a>0?"future":"past"];return z(c)?c(b):c.replace(/%s/i,b)}function J(a,b){var c=a.toLowerCase();Le[c]=Le[c+"s"]=Le[b]=a}function K(a){return"string"==typeof a?Le[a]||Le[a.toLowerCase()]:void 0}function L(a){var b,c,d={};for(c in a)j(a,c)&&(b=K(c),b&&(d[b]=a[c]));return d}function M(a,b){Me[a]=b}function N(a){var b=[];for(var c in a)b.push({unit:c,priority:Me[c]});return b.sort(function(a,b){return a.priority-b.priority}),b}function O(a,b,c){var d=""+Math.abs(a),e=b-d.length,f=a>=0;return(f?c?"+":"":"-")+Math.pow(10,Math.max(0,e)).toString().substr(1)+d}function P(a,b,c,d){var e=d;"string"==typeof d&&(e=function(){return this[d]()}),a&&(Qe[a]=e),b&&(Qe[b[0]]=function(){return O(e.apply(this,arguments),b[1],b[2])}),c&&(Qe[c]=function(){return this.localeData().ordinal(e.apply(this,arguments),a)})}function Q(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function R(a){var b,c,d=a.match(Ne);for(b=0,c=d.length;c>b;b++)Qe[d[b]]?d[b]=Qe[d[b]]:d[b]=Q(d[b]);return function(b){var e,f="";for(e=0;c>e;e++)f+=z(d[e])?d[e].call(b,a):d[e];return f}}function S(a,b){return a.isValid()?(b=T(b,a.localeData()),Pe[b]=Pe[b]||R(b),Pe[b](a)):a.localeData().invalidDate()}function T(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Oe.lastIndex=0;d>=0&&Oe.test(a);)a=a.replace(Oe,c),Oe.lastIndex=0,d-=1;return a}function U(a,b,c){gf[a]=z(b)?b:function(a,d){return a&&c?c:b}}function V(a,b){return j(gf,a)?gf[a](b._strict,b._locale):new RegExp(W(a))}function W(a){return X(a.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e}))}function X(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Y(a,b){var c,d=b;for("string"==typeof a&&(a=[a]),g(b)&&(d=function(a,c){c[b]=u(a)}),c=0;c<a.length;c++)hf[a[c]]=d}function Z(a,b){Y(a,function(a,c,d,e){d._w=d._w||{},b(a,d._w,d,e)})}function $(a,b,c){null!=b&&j(hf,a)&&hf[a](b,c._a,c,a)}function _(a){return aa(a)?366:365}function aa(a){return a%4===0&&a%100!==0||a%400===0}function ba(){return aa(this.year())}function ca(b,c){return function(d){return null!=d?(ea(this,b,d),a.updateOffset(this,c),this):da(this,b)}}function da(a,b){return a.isValid()?a._d["get"+(a._isUTC?"UTC":"")+b]():NaN}function ea(a,b,c){a.isValid()&&!isNaN(c)&&("FullYear"===b&&aa(a.year())&&1===a.month()&&29===a.date()?a._d["set"+(a._isUTC?"UTC":"")+b](c,a.month(),ia(c,a.month())):a._d["set"+(a._isUTC?"UTC":"")+b](c))}function fa(a){return a=K(a),z(this[a])?this[a]():this}function ga(a,b){if("object"==typeof a){a=L(a);for(var c=N(a),d=0;d<c.length;d++)this[c[d].unit](a[c[d].unit])}else if(a=K(a),z(this[a]))return this[a](b);return this}function ha(a,b){return(a%b+b)%b}function ia(a,b){if(isNaN(a)||isNaN(b))return NaN;var c=ha(b,12);return a+=(b-c)/12,1===c?aa(a)?29:28:31-c%7%2}function ja(a,b){return a?c(this._months)?this._months[a.month()]:this._months[(this._months.isFormat||uf).test(b)?"format":"standalone"][a.month()]:c(this._months)?this._months:this._months.standalone}function ka(a,b){return a?c(this._monthsShort)?this._monthsShort[a.month()]:this._monthsShort[uf.test(b)?"format":"standalone"][a.month()]:c(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function la(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],d=0;12>d;++d)f=l([2e3,d]),this._shortMonthsParse[d]=this.monthsShort(f,"").toLocaleLowerCase(),this._longMonthsParse[d]=this.months(f,"").toLocaleLowerCase();return c?"MMM"===b?(e=sf.call(this._shortMonthsParse,g),-1!==e?e:null):(e=sf.call(this._longMonthsParse,g),-1!==e?e:null):"MMM"===b?(e=sf.call(this._shortMonthsParse,g),-1!==e?e:(e=sf.call(this._longMonthsParse,g),-1!==e?e:null)):(e=sf.call(this._longMonthsParse,g),-1!==e?e:(e=sf.call(this._shortMonthsParse,g),-1!==e?e:null))}function ma(a,b,c){var d,e,f;if(this._monthsParseExact)return la.call(this,a,b,c);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),d=0;12>d;d++){if(e=l([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}}function na(a,b){var c;if(!a.isValid())return a;if("string"==typeof b)if(/^\d+$/.test(b))b=u(b);else if(b=a.localeData().monthsParse(b),!g(b))return a;return c=Math.min(a.date(),ia(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a}function oa(b){return null!=b?(na(this,b),a.updateOffset(this,!0),this):da(this,"Month")}function pa(){return ia(this.year(),this.month())}function qa(a){return this._monthsParseExact?(j(this,"_monthsRegex")||sa.call(this),a?this._monthsShortStrictRegex:this._monthsShortRegex):(j(this,"_monthsShortRegex")||(this._monthsShortRegex=xf),this._monthsShortStrictRegex&&a?this._monthsShortStrictRegex:this._monthsShortRegex)}function ra(a){return this._monthsParseExact?(j(this,"_monthsRegex")||sa.call(this),a?this._monthsStrictRegex:this._monthsRegex):(j(this,"_monthsRegex")||(this._monthsRegex=yf),this._monthsStrictRegex&&a?this._monthsStrictRegex:this._monthsRegex)}function sa(){function a(a,b){return b.length-a.length}var b,c,d=[],e=[],f=[];for(b=0;12>b;b++)c=l([2e3,b]),d.push(this.monthsShort(c,"")),e.push(this.months(c,"")),f.push(this.months(c,"")),f.push(this.monthsShort(c,""));for(d.sort(a),e.sort(a),f.sort(a),b=0;12>b;b++)d[b]=X(d[b]),e[b]=X(e[b]);for(b=0;24>b;b++)f[b]=X(f[b]);this._monthsRegex=new RegExp("^("+f.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+e.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+d.join("|")+")","i")}function ta(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 100>a&&a>=0&&isFinite(h.getFullYear())&&h.setFullYear(a),h}function ua(a){var b=new Date(Date.UTC.apply(null,arguments));return 100>a&&a>=0&&isFinite(b.getUTCFullYear())&&b.setUTCFullYear(a),b}function va(a,b,c){var d=7+b-c,e=(7+ua(a,0,d).getUTCDay()-b)%7;return-e+d-1}function wa(a,b,c,d,e){var f,g,h=(7+c-d)%7,i=va(a,d,e),j=1+7*(b-1)+h+i;return 0>=j?(f=a-1,g=_(f)+j):j>_(a)?(f=a+1,g=j-_(a)):(f=a,g=j),{year:f,dayOfYear:g}}function xa(a,b,c){var d,e,f=va(a.year(),b,c),g=Math.floor((a.dayOfYear()-f-1)/7)+1;return 1>g?(e=a.year()-1,d=g+ya(e,b,c)):g>ya(a.year(),b,c)?(d=g-ya(a.year(),b,c),e=a.year()+1):(e=a.year(),d=g),{week:d,year:e}}function ya(a,b,c){var d=va(a,b,c),e=va(a+1,b,c);return(_(a)-d+e)/7}function za(a){return xa(a,this._week.dow,this._week.doy).week}function Aa(){return this._week.dow}function Ba(){return this._week.doy}function Ca(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")}function Da(a){var b=xa(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")}function Ea(a,b){return"string"!=typeof a?a:isNaN(a)?(a=b.weekdaysParse(a),"number"==typeof a?a:null):parseInt(a,10)}function Fa(a,b){return"string"==typeof a?b.weekdaysParse(a)%7||7:isNaN(a)?null:a}function Ga(a,b){return a?c(this._weekdays)?this._weekdays[a.day()]:this._weekdays[this._weekdays.isFormat.test(b)?"format":"standalone"][a.day()]:c(this._weekdays)?this._weekdays:this._weekdays.standalone}function Ha(a){return a?this._weekdaysShort[a.day()]:this._weekdaysShort}function Ia(a){return a?this._weekdaysMin[a.day()]:this._weekdaysMin}function Ja(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],d=0;7>d;++d)f=l([2e3,1]).day(d),this._minWeekdaysParse[d]=this.weekdaysMin(f,"").toLocaleLowerCase(),this._shortWeekdaysParse[d]=this.weekdaysShort(f,"").toLocaleLowerCase(),this._weekdaysParse[d]=this.weekdays(f,"").toLocaleLowerCase();return c?"dddd"===b?(e=sf.call(this._weekdaysParse,g),-1!==e?e:null):"ddd"===b?(e=sf.call(this._shortWeekdaysParse,g),-1!==e?e:null):(e=sf.call(this._minWeekdaysParse,g),-1!==e?e:null):"dddd"===b?(e=sf.call(this._weekdaysParse,g),-1!==e?e:(e=sf.call(this._shortWeekdaysParse,g),-1!==e?e:(e=sf.call(this._minWeekdaysParse,g),-1!==e?e:null))):"ddd"===b?(e=sf.call(this._shortWeekdaysParse,g),-1!==e?e:(e=sf.call(this._weekdaysParse,g),-1!==e?e:(e=sf.call(this._minWeekdaysParse,g),-1!==e?e:null))):(e=sf.call(this._minWeekdaysParse,g),-1!==e?e:(e=sf.call(this._weekdaysParse,g),-1!==e?e:(e=sf.call(this._shortWeekdaysParse,g),-1!==e?e:null)))}function Ka(a,b,c){var d,e,f;if(this._weekdaysParseExact)return Ja.call(this,a,b,c);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),d=0;7>d;d++){if(e=l([2e3,1]).day(d),c&&!this._fullWeekdaysParse[d]&&(this._fullWeekdaysParse[d]=new RegExp("^"+this.weekdays(e,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[d]=new RegExp("^"+this.weekdaysShort(e,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[d]=new RegExp("^"+this.weekdaysMin(e,"").replace(".",".?")+"$","i")),this._weekdaysParse[d]||(f="^"+this.weekdays(e,"")+"|^"+this.weekdaysShort(e,"")+"|^"+this.weekdaysMin(e,""),this._weekdaysParse[d]=new RegExp(f.replace(".",""),"i")),c&&"dddd"===b&&this._fullWeekdaysParse[d].test(a))return d;if(c&&"ddd"===b&&this._shortWeekdaysParse[d].test(a))return d;if(c&&"dd"===b&&this._minWeekdaysParse[d].test(a))return d;if(!c&&this._weekdaysParse[d].test(a))return d}}function La(a){if(!this.isValid())return null!=a?this:NaN;var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=Ea(a,this.localeData()),this.add(a-b,"d")):b}function Ma(a){if(!this.isValid())return null!=a?this:NaN;var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")}function Na(a){if(!this.isValid())return null!=a?this:NaN;if(null!=a){var b=Fa(a,this.localeData());return this.day(this.day()%7?b:b-7)}return this.day()||7}function Oa(a){return this._weekdaysParseExact?(j(this,"_weekdaysRegex")||Ra.call(this),a?this._weekdaysStrictRegex:this._weekdaysRegex):(j(this,"_weekdaysRegex")||(this._weekdaysRegex=Df),this._weekdaysStrictRegex&&a?this._weekdaysStrictRegex:this._weekdaysRegex)}function Pa(a){return this._weekdaysParseExact?(j(this,"_weekdaysRegex")||Ra.call(this),a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(j(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Ef),this._weekdaysShortStrictRegex&&a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Qa(a){return this._weekdaysParseExact?(j(this,"_weekdaysRegex")||Ra.call(this),a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(j(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ff),this._weekdaysMinStrictRegex&&a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Ra(){function a(a,b){return b.length-a.length}var b,c,d,e,f,g=[],h=[],i=[],j=[];for(b=0;7>b;b++)c=l([2e3,1]).day(b),d=this.weekdaysMin(c,""),e=this.weekdaysShort(c,""),f=this.weekdays(c,""),g.push(d),h.push(e),i.push(f),j.push(d),j.push(e),j.push(f);for(g.sort(a),h.sort(a),i.sort(a),j.sort(a),b=0;7>b;b++)h[b]=X(h[b]),i[b]=X(i[b]),j[b]=X(j[b]);this._weekdaysRegex=new RegExp("^("+j.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+g.join("|")+")","i")}function Sa(){return this.hours()%12||12}function Ta(){return this.hours()||24}function Ua(a,b){P(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}function Va(a,b){return b._meridiemParse}function Wa(a){return"p"===(a+"").toLowerCase().charAt(0)}function Xa(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"}function Ya(a){return a?a.toLowerCase().replace("_","-"):a}function Za(a){for(var b,c,d,e,f=0;f<a.length;){for(e=Ya(a[f]).split("-"),b=e.length,c=Ya(a[f+1]),c=c?c.split("-"):null;b>0;){if(d=$a(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&v(e,c,!0)>=b-1)break;b--}f++}return null}function $a(a){var b=null;if(!Kf[a]&&"undefined"!=typeof module&&module&&module.exports)try{b=Gf._abbr;var c=require;c("./locale/"+a),_a(b)}catch(d){}return Kf[a]}function _a(a,b){var c;return a&&(c=f(b)?cb(a):ab(a,b),c&&(Gf=c)),Gf._abbr}function ab(a,b){if(null!==b){var c=Jf;if(b.abbr=a,null!=Kf[a])y("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),c=Kf[a]._config;else if(null!=b.parentLocale){if(null==Kf[b.parentLocale])return Lf[b.parentLocale]||(Lf[b.parentLocale]=[]),Lf[b.parentLocale].push({name:a,config:b}),null;c=Kf[b.parentLocale]._config}return Kf[a]=new C(B(c,b)),Lf[a]&&Lf[a].forEach(function(a){ab(a.name,a.config)}),_a(a),Kf[a]}return delete Kf[a],null}function bb(a,b){if(null!=b){var c,d,e=Jf;d=$a(a),null!=d&&(e=d._config),b=B(e,b),c=new C(b),c.parentLocale=Kf[a],Kf[a]=c,_a(a)}else null!=Kf[a]&&(null!=Kf[a].parentLocale?Kf[a]=Kf[a].parentLocale:null!=Kf[a]&&delete Kf[a]);return Kf[a]}function cb(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return Gf;if(!c(a)){if(b=$a(a))return b;a=[a]}return Za(a)}function db(){return Ee(Kf)}function eb(a){var b,c=a._a;return c&&-2===n(a).overflow&&(b=c[kf]<0||c[kf]>11?kf:c[lf]<1||c[lf]>ia(c[jf],c[kf])?lf:c[mf]<0||c[mf]>24||24===c[mf]&&(0!==c[nf]||0!==c[of]||0!==c[pf])?mf:c[nf]<0||c[nf]>59?nf:c[of]<0||c[of]>59?of:c[pf]<0||c[pf]>999?pf:-1,n(a)._overflowDayOfYear&&(jf>b||b>lf)&&(b=lf),n(a)._overflowWeeks&&-1===b&&(b=qf),n(a)._overflowWeekday&&-1===b&&(b=rf),n(a).overflow=b),a}function fb(a,b,c){return null!=a?a:null!=b?b:c}function gb(b){var c=new Date(a.now());return b._useUTC?[c.getUTCFullYear(),c.getUTCMonth(),c.getUTCDate()]:[c.getFullYear(),c.getMonth(),c.getDate()]}function hb(a){var b,c,d,e,f=[];if(!a._d){for(d=gb(a),a._w&&null==a._a[lf]&&null==a._a[kf]&&ib(a),null!=a._dayOfYear&&(e=fb(a._a[jf],d[jf]),(a._dayOfYear>_(e)||0===a._dayOfYear)&&(n(a)._overflowDayOfYear=!0),c=ua(e,0,a._dayOfYear),a._a[kf]=c.getUTCMonth(),a._a[lf]=c.getUTCDate()),b=0;3>b&&null==a._a[b];++b)a._a[b]=f[b]=d[b];for(;7>b;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b];24===a._a[mf]&&0===a._a[nf]&&0===a._a[of]&&0===a._a[pf]&&(a._nextDay=!0,a._a[mf]=0),a._d=(a._useUTC?ua:ta).apply(null,f),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[mf]=24),a._w&&"undefined"!=typeof a._w.d&&a._w.d!==a._d.getDay()&&(n(a).weekdayMismatch=!0)}}function ib(a){var b,c,d,e,f,g,h,i;if(b=a._w,null!=b.GG||null!=b.W||null!=b.E)f=1,g=4,c=fb(b.GG,a._a[jf],xa(zb(),1,4).year),d=fb(b.W,1),e=fb(b.E,1),(1>e||e>7)&&(i=!0);else{f=a._locale._week.dow,g=a._locale._week.doy;var j=xa(zb(),f,g);c=fb(b.gg,a._a[jf],j.year),d=fb(b.w,j.week),null!=b.d?(e=b.d,(0>e||e>6)&&(i=!0)):null!=b.e?(e=b.e+f,(b.e<0||b.e>6)&&(i=!0)):e=f}1>d||d>ya(c,f,g)?n(a)._overflowWeeks=!0:null!=i?n(a)._overflowWeekday=!0:(h=wa(c,d,e,f,g),a._a[jf]=h.year,a._dayOfYear=h.dayOfYear)}function jb(a){var b,c,d,e,f,g,h=a._i,i=Mf.exec(h)||Nf.exec(h);if(i){for(n(a).iso=!0,b=0,c=Pf.length;c>b;b++)if(Pf[b][1].exec(i[1])){e=Pf[b][0],d=Pf[b][2]!==!1;break}if(null==e)return void(a._isValid=!1);if(i[3]){for(b=0,c=Qf.length;c>b;b++)if(Qf[b][1].exec(i[3])){f=(i[2]||" ")+Qf[b][0];break}if(null==f)return void(a._isValid=!1)}if(!d&&null!=f)return void(a._isValid=!1);if(i[4]){if(!Of.exec(i[4]))return void(a._isValid=!1);g="Z"}a._f=e+(f||"")+(g||""),rb(a)}else a._isValid=!1}function kb(a,b,c,d,e,f){var g=[lb(a),wf.indexOf(b),parseInt(c,10),parseInt(d,10),parseInt(e,10)];return f&&g.push(parseInt(f,10)),g}function lb(a){var b=parseInt(a,10);return 49>=b?2e3+b:999>=b?1900+b:b}function mb(a){return a.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}function nb(a,b,c){if(a){var d=Bf.indexOf(a),e=new Date(b[0],b[1],b[2]).getDay();if(d!==e)return n(c).weekdayMismatch=!0,c._isValid=!1,!1}return!0}function ob(a,b,c){if(a)return Tf[a];if(b)return 0;var d=parseInt(c,10),e=d%100,f=(d-e)/100;return 60*f+e}function pb(a){var b=Sf.exec(mb(a._i));if(b){var c=kb(b[4],b[3],b[2],b[5],b[6],b[7]);if(!nb(b[1],c,a))return;a._a=c,a._tzm=ob(b[8],b[9],b[10]),a._d=ua.apply(null,a._a),a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),n(a).rfc2822=!0}else a._isValid=!1}function qb(b){var c=Rf.exec(b._i);return null!==c?void(b._d=new Date(+c[1])):(jb(b),void(b._isValid===!1&&(delete b._isValid,pb(b),b._isValid===!1&&(delete b._isValid,a.createFromInputFallback(b)))))}function rb(b){if(b._f===a.ISO_8601)return void jb(b);if(b._f===a.RFC_2822)return void pb(b);b._a=[],n(b).empty=!0;var c,d,e,f,g,h=""+b._i,i=h.length,j=0;for(e=T(b._f,b._locale).match(Ne)||[],c=0;c<e.length;c++)f=e[c],d=(h.match(V(f,b))||[])[0],d&&(g=h.substr(0,h.indexOf(d)),g.length>0&&n(b).unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),j+=d.length),Qe[f]?(d?n(b).empty=!1:n(b).unusedTokens.push(f),$(f,d,b)):b._strict&&!d&&n(b).unusedTokens.push(f);n(b).charsLeftOver=i-j,h.length>0&&n(b).unusedInput.push(h),b._a[mf]<=12&&n(b).bigHour===!0&&b._a[mf]>0&&(n(b).bigHour=void 0),n(b).parsedDateParts=b._a.slice(0),n(b).meridiem=b._meridiem,b._a[mf]=sb(b._locale,b._a[mf],b._meridiem),hb(b),eb(b)}function sb(a,b,c){var d;return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&12>b&&(b+=12),d||12!==b||(b=0),b):b}function tb(a){var b,c,d,e,f;if(0===a._f.length)return n(a).invalidFormat=!0,void(a._d=new Date(NaN));for(e=0;e<a._f.length;e++)f=0,b=q({},a),null!=a._useUTC&&(b._useUTC=a._useUTC),b._f=a._f[e],rb(b),o(b)&&(f+=n(b).charsLeftOver,f+=10*n(b).unusedTokens.length,n(b).score=f,(null==d||d>f)&&(d=f,c=b));k(a,c||b)}function ub(a){if(!a._d){var b=L(a._i);a._a=i([b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],function(a){return a&&parseInt(a,10)}),hb(a)}}function vb(a){var b=new r(eb(wb(a)));return b._nextDay&&(b.add(1,"d"),b._nextDay=void 0),b}function wb(a){var b=a._i,d=a._f;return a._locale=a._locale||cb(a._l),null===b||void 0===d&&""===b?p({nullInput:!0}):("string"==typeof b&&(a._i=b=a._locale.preparse(b)),s(b)?new r(eb(b)):(h(b)?a._d=b:c(d)?tb(a):d?rb(a):xb(a),o(a)||(a._d=null),a))}function xb(b){var e=b._i;f(e)?b._d=new Date(a.now()):h(e)?b._d=new Date(e.valueOf()):"string"==typeof e?qb(b):c(e)?(b._a=i(e.slice(0),function(a){return parseInt(a,10)}),hb(b)):d(e)?ub(b):g(e)?b._d=new Date(e):a.createFromInputFallback(b)}function yb(a,b,f,g,h){var i={};return(f===!0||f===!1)&&(g=f,f=void 0),(d(a)&&e(a)||c(a)&&0===a.length)&&(a=void 0),i._isAMomentObject=!0,i._useUTC=i._isUTC=h,i._l=f,i._i=a,i._f=b,i._strict=g,vb(i)}function zb(a,b,c,d){return yb(a,b,c,d,!1)}function Ab(a,b){var d,e;if(1===b.length&&c(b[0])&&(b=b[0]),!b.length)return zb();for(d=b[0],e=1;e<b.length;++e)(!b[e].isValid()||b[e][a](d))&&(d=b[e]);return d}function Bb(){var a=[].slice.call(arguments,0);return Ab("isBefore",a)}function Cb(){var a=[].slice.call(arguments,0);return Ab("isAfter",a)}function Db(a){for(var b in a)if(-1===sf.call(Xf,b)||null!=a[b]&&isNaN(a[b]))return!1;for(var c=!1,d=0;d<Xf.length;++d)if(a[Xf[d]]){if(c)return!1;parseFloat(a[Xf[d]])!==u(a[Xf[d]])&&(c=!0)}return!0}function Eb(){return this._isValid}function Fb(){return Yb(NaN)}function Gb(a){var b=L(a),c=b.year||0,d=b.quarter||0,e=b.month||0,f=b.week||0,g=b.day||0,h=b.hour||0,i=b.minute||0,j=b.second||0,k=b.millisecond||0;this._isValid=Db(b),this._milliseconds=+k+1e3*j+6e4*i+1e3*h*60*60,this._days=+g+7*f,this._months=+e+3*d+12*c,this._data={},this._locale=cb(),this._bubble()}function Hb(a){return a instanceof Gb}function Ib(a){return 0>a?-1*Math.round(-1*a):Math.round(a)}function Jb(a,b){P(a,0,0,function(){var a=this.utcOffset(),c="+";return 0>a&&(a=-a,c="-"),c+O(~~(a/60),2)+b+O(~~a%60,2)})}function Kb(a,b){var c=(b||"").match(a);if(null===c)return null;var d=c[c.length-1]||[],e=(d+"").match(Yf)||["-",0,0],f=+(60*e[1])+u(e[2]);return 0===f?0:"+"===e[0]?f:-f}function Lb(b,c){var d,e;return c._isUTC?(d=c.clone(),e=(s(b)||h(b)?b.valueOf():zb(b).valueOf())-d.valueOf(),d._d.setTime(d._d.valueOf()+e),a.updateOffset(d,!1),d):zb(b).local()}function Mb(a){return 15*-Math.round(a._d.getTimezoneOffset()/15)}function Nb(b,c,d){var e,f=this._offset||0;if(!this.isValid())return null!=b?this:NaN;if(null!=b){if("string"==typeof b){if(b=Kb(df,b),null===b)return this}else Math.abs(b)<16&&!d&&(b=60*b);return!this._isUTC&&c&&(e=Mb(this)),this._offset=b,this._isUTC=!0,null!=e&&this.add(e,"m"),f!==b&&(!c||this._changeInProgress?bc(this,Yb(b-f,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?f:Mb(this)}function Ob(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function Pb(a){return this.utcOffset(0,a)}function Qb(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Mb(this),"m")),this}function Rb(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var a=Kb(cf,this._i);null!=a?this.utcOffset(a):this.utcOffset(0,!0)}return this}function Sb(a){return this.isValid()?(a=a?zb(a).utcOffset():0,(this.utcOffset()-a)%60===0):!1}function Tb(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ub(){if(!f(this._isDSTShifted))return this._isDSTShifted;var a={};if(q(a,this),a=wb(a),a._a){var b=a._isUTC?l(a._a):zb(a._a);this._isDSTShifted=this.isValid()&&v(a._a,b.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Vb(){return this.isValid()?!this._isUTC:!1}function Wb(){return this.isValid()?this._isUTC:!1}function Xb(){return this.isValid()?this._isUTC&&0===this._offset:!1}function Yb(a,b){var c,d,e,f=a,h=null;return Hb(a)?f={ms:a._milliseconds,d:a._days,M:a._months}:g(a)?(f={},b?f[b]=a:f.milliseconds=a):(h=Zf.exec(a))?(c="-"===h[1]?-1:1,f={y:0,d:u(h[lf])*c,h:u(h[mf])*c,m:u(h[nf])*c,s:u(h[of])*c,ms:u(Ib(1e3*h[pf]))*c}):(h=$f.exec(a))?(c="-"===h[1]?-1:("+"===h[1],1),f={y:Zb(h[2],c),M:Zb(h[3],c),w:Zb(h[4],c),d:Zb(h[5],c),h:Zb(h[6],c),m:Zb(h[7],c),s:Zb(h[8],c)}):null==f?f={}:"object"==typeof f&&("from"in f||"to"in f)&&(e=_b(zb(f.from),zb(f.to)),f={},f.ms=e.milliseconds,f.M=e.months),d=new Gb(f),Hb(a)&&j(a,"_locale")&&(d._locale=a._locale),d}function Zb(a,b){var c=a&&parseFloat(a.replace(",","."));return(isNaN(c)?0:c)*b}function $b(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function _b(a,b){var c;return a.isValid()&&b.isValid()?(b=Lb(b,a),a.isBefore(b)?c=$b(a,b):(c=$b(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c):{milliseconds:0,months:0}}function ac(a,b){return function(c,d){var e,f;return null===d||isNaN(+d)||(y(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=Yb(c,d),bc(this,e,a),this}}function bc(b,c,d,e){var f=c._milliseconds,g=Ib(c._days),h=Ib(c._months);b.isValid()&&(e=null==e?!0:e,h&&na(b,da(b,"Month")+h*d),g&&ea(b,"Date",da(b,"Date")+g*d),f&&b._d.setTime(b._d.valueOf()+f*d),e&&a.updateOffset(b,g||h))}function cc(a,b){var c=a.diff(b,"days",!0);return-6>c?"sameElse":-1>c?"lastWeek":0>c?"lastDay":1>c?"sameDay":2>c?"nextDay":7>c?"nextWeek":"sameElse"}function dc(b,c){var d=b||zb(),e=Lb(d,this).startOf("day"),f=a.calendarFormat(this,e)||"sameElse",g=c&&(z(c[f])?c[f].call(this,d):c[f]);return this.format(g||this.localeData().calendar(f,this,zb(d)))}function ec(){return new r(this)}function fc(a,b){var c=s(a)?a:zb(a);return this.isValid()&&c.isValid()?(b=K(f(b)?"millisecond":b),"millisecond"===b?this.valueOf()>c.valueOf():c.valueOf()<this.clone().startOf(b).valueOf()):!1}function gc(a,b){var c=s(a)?a:zb(a);return this.isValid()&&c.isValid()?(b=K(f(b)?"millisecond":b),"millisecond"===b?this.valueOf()<c.valueOf():this.clone().endOf(b).valueOf()<c.valueOf()):!1}function hc(a,b,c,d){return d=d||"()",("("===d[0]?this.isAfter(a,c):!this.isBefore(a,c))&&(")"===d[1]?this.isBefore(b,c):!this.isAfter(b,c))}function ic(a,b){var c,d=s(a)?a:zb(a);return this.isValid()&&d.isValid()?(b=K(b||"millisecond"),"millisecond"===b?this.valueOf()===d.valueOf():(c=d.valueOf(),this.clone().startOf(b).valueOf()<=c&&c<=this.clone().endOf(b).valueOf())):!1}function jc(a,b){return this.isSame(a,b)||this.isAfter(a,b)}function kc(a,b){return this.isSame(a,b)||this.isBefore(a,b)}function lc(a,b,c){var d,e,f;if(!this.isValid())return NaN;if(d=Lb(a,this),!d.isValid())return NaN;switch(e=6e4*(d.utcOffset()-this.utcOffset()),b=K(b)){case"year":f=mc(this,d)/12;break;case"month":f=mc(this,d);break;case"quarter":f=mc(this,d)/3;break;case"second":f=(this-d)/1e3;break;case"minute":f=(this-d)/6e4;break;case"hour":f=(this-d)/36e5;break;case"day":f=(this-d-e)/864e5;break;case"week":f=(this-d-e)/6048e5;break;default:f=this-d}return c?f:t(f)}function mc(a,b){var c,d,e=12*(b.year()-a.year())+(b.month()-a.month()),f=a.clone().add(e,"months");return 0>b-f?(c=a.clone().add(e-1,"months"),d=(b-f)/(f-c)):(c=a.clone().add(e+1,"months"),d=(b-f)/(c-f)),-(e+d)||0}function nc(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function oc(){if(!this.isValid())return null;var a=this.clone().utc();return a.year()<0||a.year()>9999?S(a,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):z(Date.prototype.toISOString)?this.toDate().toISOString():S(a,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function pc(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var a="moment",b="";this.isLocal()||(a=0===this.utcOffset()?"moment.utc":"moment.parseZone",b="Z");var c="["+a+'("]',d=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",e="-MM-DD[T]HH:mm:ss.SSS",f=b+'[")]';return this.format(c+d+e+f)}function qc(b){b||(b=this.isUtc()?a.defaultFormatUtc:a.defaultFormat);var c=S(this,b);return this.localeData().postformat(c)}function rc(a,b){return this.isValid()&&(s(a)&&a.isValid()||zb(a).isValid())?Yb({to:this,from:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function sc(a){return this.from(zb(),a)}function tc(a,b){return this.isValid()&&(s(a)&&a.isValid()||zb(a).isValid())?Yb({from:this,to:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function uc(a){return this.to(zb(),a)}function vc(a){var b;return void 0===a?this._locale._abbr:(b=cb(a),null!=b&&(this._locale=b),this)}function wc(){return this._locale}function xc(a){switch(a=K(a)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===a&&this.weekday(0),"isoWeek"===a&&this.isoWeekday(1),"quarter"===a&&this.month(3*Math.floor(this.month()/3)),this}function yc(a){return a=K(a),void 0===a||"millisecond"===a?this:("date"===a&&(a="day"),this.startOf(a).add(1,"isoWeek"===a?"week":a).subtract(1,"ms"))}function zc(){return this._d.valueOf()-6e4*(this._offset||0)}function Ac(){
11
+ return Math.floor(this.valueOf()/1e3)}function Bc(){return new Date(this.valueOf())}function Cc(){var a=this;return[a.year(),a.month(),a.date(),a.hour(),a.minute(),a.second(),a.millisecond()]}function Dc(){var a=this;return{years:a.year(),months:a.month(),date:a.date(),hours:a.hours(),minutes:a.minutes(),seconds:a.seconds(),milliseconds:a.milliseconds()}}function Ec(){return this.isValid()?this.toISOString():null}function Fc(){return o(this)}function Gc(){return k({},n(this))}function Hc(){return n(this).overflow}function Ic(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Jc(a,b){P(0,[a,a.length],0,b)}function Kc(a){return Oc.call(this,a,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Lc(a){return Oc.call(this,a,this.isoWeek(),this.isoWeekday(),1,4)}function Mc(){return ya(this.year(),1,4)}function Nc(){var a=this.localeData()._week;return ya(this.year(),a.dow,a.doy)}function Oc(a,b,c,d,e){var f;return null==a?xa(this,d,e).year:(f=ya(a,d,e),b>f&&(b=f),Pc.call(this,a,b,c,d,e))}function Pc(a,b,c,d,e){var f=wa(a,b,c,d,e),g=ua(f.year,0,f.dayOfYear);return this.year(g.getUTCFullYear()),this.month(g.getUTCMonth()),this.date(g.getUTCDate()),this}function Qc(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)}function Rc(a){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")}function Sc(a,b){b[pf]=u(1e3*("0."+a))}function Tc(){return this._isUTC?"UTC":""}function Uc(){return this._isUTC?"Coordinated Universal Time":""}function Vc(a){return zb(1e3*a)}function Wc(){return zb.apply(null,arguments).parseZone()}function Xc(a){return a}function Yc(a,b,c,d){var e=cb(),f=l().set(d,b);return e[c](f,a)}function Zc(a,b,c){if(g(a)&&(b=a,a=void 0),a=a||"",null!=b)return Yc(a,b,c,"month");var d,e=[];for(d=0;12>d;d++)e[d]=Yc(a,d,c,"month");return e}function $c(a,b,c,d){"boolean"==typeof a?(g(b)&&(c=b,b=void 0),b=b||""):(b=a,c=b,a=!1,g(b)&&(c=b,b=void 0),b=b||"");var e=cb(),f=a?e._week.dow:0;if(null!=c)return Yc(b,(c+f)%7,d,"day");var h,i=[];for(h=0;7>h;h++)i[h]=Yc(b,(h+f)%7,d,"day");return i}function _c(a,b){return Zc(a,b,"months")}function ad(a,b){return Zc(a,b,"monthsShort")}function bd(a,b,c){return $c(a,b,c,"weekdays")}function cd(a,b,c){return $c(a,b,c,"weekdaysShort")}function dd(a,b,c){return $c(a,b,c,"weekdaysMin")}function ed(){var a=this._data;return this._milliseconds=jg(this._milliseconds),this._days=jg(this._days),this._months=jg(this._months),a.milliseconds=jg(a.milliseconds),a.seconds=jg(a.seconds),a.minutes=jg(a.minutes),a.hours=jg(a.hours),a.months=jg(a.months),a.years=jg(a.years),this}function fd(a,b,c,d){var e=Yb(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()}function gd(a,b){return fd(this,a,b,1)}function hd(a,b){return fd(this,a,b,-1)}function id(a){return 0>a?Math.floor(a):Math.ceil(a)}function jd(){var a,b,c,d,e,f=this._milliseconds,g=this._days,h=this._months,i=this._data;return f>=0&&g>=0&&h>=0||0>=f&&0>=g&&0>=h||(f+=864e5*id(ld(h)+g),g=0,h=0),i.milliseconds=f%1e3,a=t(f/1e3),i.seconds=a%60,b=t(a/60),i.minutes=b%60,c=t(b/60),i.hours=c%24,g+=t(c/24),e=t(kd(g)),h+=e,g-=id(ld(e)),d=t(h/12),h%=12,i.days=g,i.months=h,i.years=d,this}function kd(a){return 4800*a/146097}function ld(a){return 146097*a/4800}function md(a){if(!this.isValid())return NaN;var b,c,d=this._milliseconds;if(a=K(a),"month"===a||"year"===a)return b=this._days+d/864e5,c=this._months+kd(b),"month"===a?c:c/12;switch(b=this._days+Math.round(ld(this._months)),a){case"week":return b/7+d/6048e5;case"day":return b+d/864e5;case"hour":return 24*b+d/36e5;case"minute":return 1440*b+d/6e4;case"second":return 86400*b+d/1e3;case"millisecond":return Math.floor(864e5*b)+d;default:throw new Error("Unknown unit "+a)}}function nd(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*u(this._months/12):NaN}function od(a){return function(){return this.as(a)}}function pd(){return Yb(this)}function qd(a){return a=K(a),this.isValid()?this[a+"s"]():NaN}function rd(a){return function(){return this.isValid()?this._data[a]:NaN}}function sd(){return t(this.days()/7)}function td(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function ud(a,b,c){var d=Yb(a).abs(),e=zg(d.as("s")),f=zg(d.as("m")),g=zg(d.as("h")),h=zg(d.as("d")),i=zg(d.as("M")),j=zg(d.as("y")),k=e<=Ag.ss&&["s",e]||e<Ag.s&&["ss",e]||1>=f&&["m"]||f<Ag.m&&["mm",f]||1>=g&&["h"]||g<Ag.h&&["hh",g]||1>=h&&["d"]||h<Ag.d&&["dd",h]||1>=i&&["M"]||i<Ag.M&&["MM",i]||1>=j&&["y"]||["yy",j];return k[2]=b,k[3]=+a>0,k[4]=c,td.apply(null,k)}function vd(a){return void 0===a?zg:"function"==typeof a?(zg=a,!0):!1}function wd(a,b){return void 0===Ag[a]?!1:void 0===b?Ag[a]:(Ag[a]=b,"s"===a&&(Ag.ss=b-1),!0)}function xd(a){if(!this.isValid())return this.localeData().invalidDate();var b=this.localeData(),c=ud(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function yd(a){return(a>0)-(0>a)||+a}function zd(){if(!this.isValid())return this.localeData().invalidDate();var a,b,c,d=Bg(this._milliseconds)/1e3,e=Bg(this._days),f=Bg(this._months);a=t(d/60),b=t(a/60),d%=60,a%=60,c=t(f/12),f%=12;var g=c,h=f,i=e,j=b,k=a,l=d?d.toFixed(3).replace(/\.?0+$/,""):"",m=this.asSeconds();if(!m)return"P0D";var n=0>m?"-":"",o=yd(this._months)!==yd(m)?"-":"",p=yd(this._days)!==yd(m)?"-":"",q=yd(this._milliseconds)!==yd(m)?"-":"";return n+"P"+(g?o+g+"Y":"")+(h?o+h+"M":"")+(i?p+i+"D":"")+(j||k||l?"T":"")+(j?q+j+"H":"")+(k?q+k+"M":"")+(l?q+l+"S":"")}
12
+ //! moment.js locale configuration
13
+ //! locale : Belarusian [be]
14
+ //! author : Dmitry Demidov : https://github.com/demidov91
15
+ //! author: Praleska: http://praleska.pro/
16
+ //! Author : Menelion Elensúle : https://github.com/Oire
17
+ function Ad(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function Bd(a,b,c){var d={mm:b?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:b?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"};return"m"===c?b?"хвіліна":"хвіліну":"h"===c?b?"гадзіна":"гадзіну":a+" "+Ad(d[c],+a)}
18
+ //! moment.js locale configuration
19
+ //! locale : Breton [br]
20
+ //! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
21
+ function Cd(a,b,c){var d={mm:"munutenn",MM:"miz",dd:"devezh"};return a+" "+Fd(d[c],a)}function Dd(a){switch(Ed(a)){case 1:case 3:case 4:case 5:case 9:return a+" bloaz";default:return a+" vloaz"}}function Ed(a){return a>9?Ed(a%10):a}function Fd(a,b){return 2===b?Gd(a):a}function Gd(a){var b={m:"v",b:"v",d:"z"};return void 0===b[a.charAt(0)]?a:b[a.charAt(0)]+a.substring(1)}
22
+ //! moment.js locale configuration
23
+ //! locale : Bosnian [bs]
24
+ //! author : Nedim Cholich : https://github.com/frontyard
25
+ //! based on (hr) translation by Bojan Marković
26
+ function Hd(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}function Id(a){return a>1&&5>a&&1!==~~(a/10)}function Jd(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"pár sekund":"pár sekundami";case"m":return b?"minuta":d?"minutu":"minutou";case"mm":return b||d?e+(Id(a)?"minuty":"minut"):e+"minutami";case"h":return b?"hodina":d?"hodinu":"hodinou";case"hh":return b||d?e+(Id(a)?"hodiny":"hodin"):e+"hodinami";case"d":return b||d?"den":"dnem";case"dd":return b||d?e+(Id(a)?"dny":"dní"):e+"dny";case"M":return b||d?"měsíc":"měsícem";case"MM":return b||d?e+(Id(a)?"měsíce":"měsíců"):e+"měsíci";case"y":return b||d?"rok":"rokem";case"yy":return b||d?e+(Id(a)?"roky":"let"):e+"lety"}}
27
+ //! moment.js locale configuration
28
+ //! locale : German (Austria) [de-at]
29
+ //! author : lluchs : https://github.com/lluchs
30
+ //! author: Menelion Elensúle: https://github.com/Oire
31
+ //! author : Martin Groller : https://github.com/MadMG
32
+ //! author : Mikolaj Dadela : https://github.com/mik01aj
33
+ function Kd(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]}
34
+ //! moment.js locale configuration
35
+ //! locale : German (Switzerland) [de-ch]
36
+ //! author : sschueller : https://github.com/sschueller
37
+ function Ld(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]}
38
+ //! moment.js locale configuration
39
+ //! locale : German [de]
40
+ //! author : lluchs : https://github.com/lluchs
41
+ //! author: Menelion Elensúle: https://github.com/Oire
42
+ //! author : Mikolaj Dadela : https://github.com/mik01aj
43
+ function Md(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]}
44
+ //! moment.js locale configuration
45
+ //! locale : Estonian [et]
46
+ //! author : Henry Kehlmann : https://github.com/madhenry
47
+ //! improvements : Illimar Tambek : https://github.com/ragulka
48
+ function Nd(a,b,c,d){var e={s:["mõne sekundi","mõni sekund","paar sekundit"],m:["ühe minuti","üks minut"],mm:[a+" minuti",a+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[a+" tunni",a+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[a+" kuu",a+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[a+" aasta",a+" aastat"]};return b?e[c][2]?e[c][2]:e[c][1]:d?e[c][0]:e[c][1]}function Od(a,b,c,d){var e="";switch(c){case"s":return d?"muutaman sekunnin":"muutama sekunti";case"m":return d?"minuutin":"minuutti";case"mm":e=d?"minuutin":"minuuttia";break;case"h":return d?"tunnin":"tunti";case"hh":e=d?"tunnin":"tuntia";break;case"d":return d?"päivän":"päivä";case"dd":e=d?"päivän":"päivää";break;case"M":return d?"kuukauden":"kuukausi";case"MM":e=d?"kuukauden":"kuukautta";break;case"y":return d?"vuoden":"vuosi";case"yy":e=d?"vuoden":"vuotta"}return e=Pd(a,d)+" "+e}function Pd(a,b){return 10>a?b?kh[a]:jh[a]:a}
49
+ //! moment.js locale configuration
50
+ //! locale : Konkani Latin script [gom-latn]
51
+ //! author : The Discoverer : https://github.com/WikiDiscoverer
52
+ function Qd(a,b,c,d){var e={s:["thodde secondanim","thodde second"],m:["eka mintan","ek minute"],mm:[a+" mintanim",a+" mintam"],h:["eka horan","ek hor"],hh:[a+" horanim",a+" hor"],d:["eka disan","ek dis"],dd:[a+" disanim",a+" dis"],M:["eka mhoinean","ek mhoino"],MM:[a+" mhoineanim",a+" mhoine"],y:["eka vorsan","ek voros"],yy:[a+" vorsanim",a+" vorsam"]};return b?e[c][0]:e[c][1]}
53
+ //! moment.js locale configuration
54
+ //! locale : Croatian [hr]
55
+ //! author : Bojan Marković : https://github.com/bmarkovic
56
+ function Rd(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}function Sd(a,b,c,d){var e=a;switch(c){case"s":return d||b?"néhány másodperc":"néhány másodperce";case"m":return"egy"+(d||b?" perc":" perce");case"mm":return e+(d||b?" perc":" perce");case"h":return"egy"+(d||b?" óra":" órája");case"hh":return e+(d||b?" óra":" órája");case"d":return"egy"+(d||b?" nap":" napja");case"dd":return e+(d||b?" nap":" napja");case"M":return"egy"+(d||b?" hónap":" hónapja");case"MM":return e+(d||b?" hónap":" hónapja");case"y":return"egy"+(d||b?" év":" éve");case"yy":return e+(d||b?" év":" éve")}return""}function Td(a){return(a?"":"[múlt] ")+"["+wh[this.day()]+"] LT[-kor]"}
57
+ //! moment.js locale configuration
58
+ //! locale : Icelandic [is]
59
+ //! author : Hinrik Örn Sigurðsson : https://github.com/hinrik
60
+ function Ud(a){return a%100===11?!0:a%10===1?!1:!0}function Vd(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"nokkrar sekúndur":"nokkrum sekúndum";case"m":return b?"mínúta":"mínútu";case"mm":return Ud(a)?e+(b||d?"mínútur":"mínútum"):b?e+"mínúta":e+"mínútu";case"hh":return Ud(a)?e+(b||d?"klukkustundir":"klukkustundum"):e+"klukkustund";case"d":return b?"dagur":d?"dag":"degi";case"dd":return Ud(a)?b?e+"dagar":e+(d?"daga":"dögum"):b?e+"dagur":e+(d?"dag":"degi");case"M":return b?"mánuður":d?"mánuð":"mánuði";case"MM":return Ud(a)?b?e+"mánuðir":e+(d?"mánuði":"mánuðum"):b?e+"mánuður":e+(d?"mánuð":"mánuði");case"y":return b||d?"ár":"ári";case"yy":return Ud(a)?e+(b||d?"ár":"árum"):e+(b||d?"ár":"ári")}}
61
+ //! moment.js locale configuration
62
+ //! locale : Luxembourgish [lb]
63
+ //! author : mweimerskirch : https://github.com/mweimerskirch
64
+ //! author : David Raison : https://github.com/kwisatz
65
+ function Wd(a,b,c,d){var e={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return b?e[c][0]:e[c][1]}function Xd(a){var b=a.substr(0,a.indexOf(" "));return Zd(b)?"a "+a:"an "+a}function Yd(a){var b=a.substr(0,a.indexOf(" "));return Zd(b)?"viru "+a:"virun "+a}function Zd(a){if(a=parseInt(a,10),isNaN(a))return!1;if(0>a)return!0;if(10>a)return a>=4&&7>=a?!0:!1;if(100>a){var b=a%10,c=a/10;return Zd(0===b?c:b)}if(1e4>a){for(;a>=10;)a/=10;return Zd(a)}return a/=1e3,Zd(a)}function $d(a,b,c,d){return b?"kelios sekundės":d?"kelių sekundžių":"kelias sekundes"}function _d(a,b,c,d){return b?be(c)[0]:d?be(c)[1]:be(c)[2]}function ae(a){return a%10===0||a>10&&20>a}function be(a){return Bh[a].split("_")}function ce(a,b,c,d){var e=a+" ";return 1===a?e+_d(a,b,c[0],d):b?e+(ae(a)?be(c)[1]:be(c)[0]):d?e+be(c)[1]:e+(ae(a)?be(c)[1]:be(c)[2])}function de(a,b,c){return c?b%10===1&&b%100!==11?a[2]:a[3]:b%10===1&&b%100!==11?a[0]:a[1]}function ee(a,b,c){return a+" "+de(Ch[c],a,b)}function fe(a,b,c){return de(Ch[c],a,b)}function ge(a,b){return b?"dažas sekundes":"dažām sekundēm"}function he(a,b,c,d){var e="";if(b)switch(c){case"s":e="काही सेकंद";break;case"m":e="एक मिनिट";break;case"mm":e="%d मिनिटे";break;case"h":e="एक तास";break;case"hh":e="%d तास";break;case"d":e="एक दिवस";break;case"dd":e="%d दिवस";break;case"M":e="एक महिना";break;case"MM":e="%d महिने";break;case"y":e="एक वर्ष";break;case"yy":e="%d वर्षे"}else switch(c){case"s":e="काही सेकंदां";break;case"m":e="एका मिनिटा";break;case"mm":e="%d मिनिटां";break;case"h":e="एका तासा";break;case"hh":e="%d तासां";break;case"d":e="एका दिवसा";break;case"dd":e="%d दिवसां";break;case"M":e="एका महिन्या";break;case"MM":e="%d महिन्यां";break;case"y":e="एका वर्षा";break;case"yy":e="%d वर्षां"}return e.replace(/%d/i,a)}function ie(a){return 5>a%10&&a%10>1&&~~(a/10)%10!==1}function je(a,b,c){var d=a+" ";switch(c){case"m":return b?"minuta":"minutę";case"mm":return d+(ie(a)?"minuty":"minut");case"h":return b?"godzina":"godzinę";case"hh":return d+(ie(a)?"godziny":"godzin");case"MM":return d+(ie(a)?"miesiące":"miesięcy");case"yy":return d+(ie(a)?"lata":"lat")}}
66
+ //! moment.js locale configuration
67
+ //! locale : Romanian [ro]
68
+ //! author : Vlad Gurdiga : https://github.com/gurdiga
69
+ //! author : Valentin Agachi : https://github.com/avaly
70
+ function ke(a,b,c){var d={mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},e=" ";return(a%100>=20||a>=100&&a%100===0)&&(e=" de "),a+e+d[c]}
71
+ //! moment.js locale configuration
72
+ //! locale : Russian [ru]
73
+ //! author : Viktorminator : https://github.com/Viktorminator
74
+ //! Author : Menelion Elensúle : https://github.com/Oire
75
+ //! author : Коренберг Марк : https://github.com/socketpair
76
+ function le(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function me(a,b,c){var d={mm:b?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===c?b?"минута":"минуту":a+" "+le(d[c],+a)}function ne(a){return a>1&&5>a}function oe(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"pár sekúnd":"pár sekundami";case"m":return b?"minúta":d?"minútu":"minútou";case"mm":return b||d?e+(ne(a)?"minúty":"minút"):e+"minútami";case"h":return b?"hodina":d?"hodinu":"hodinou";case"hh":return b||d?e+(ne(a)?"hodiny":"hodín"):e+"hodinami";case"d":return b||d?"deň":"dňom";case"dd":return b||d?e+(ne(a)?"dni":"dní"):e+"dňami";case"M":return b||d?"mesiac":"mesiacom";case"MM":return b||d?e+(ne(a)?"mesiace":"mesiacov"):e+"mesiacmi";case"y":return b||d?"rok":"rokom";case"yy":return b||d?e+(ne(a)?"roky":"rokov"):e+"rokmi"}}
77
+ //! moment.js locale configuration
78
+ //! locale : Slovenian [sl]
79
+ //! author : Robert Sedovšek : https://github.com/sedovsek
80
+ function pe(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"nekaj sekund":"nekaj sekundami";case"m":return b?"ena minuta":"eno minuto";case"mm":return e+=1===a?b?"minuta":"minuto":2===a?b||d?"minuti":"minutama":5>a?b||d?"minute":"minutami":b||d?"minut":"minutami";case"h":return b?"ena ura":"eno uro";case"hh":return e+=1===a?b?"ura":"uro":2===a?b||d?"uri":"urama":5>a?b||d?"ure":"urami":b||d?"ur":"urami";case"d":return b||d?"en dan":"enim dnem";case"dd":return e+=1===a?b||d?"dan":"dnem":2===a?b||d?"dni":"dnevoma":b||d?"dni":"dnevi";case"M":return b||d?"en mesec":"enim mesecem";case"MM":return e+=1===a?b||d?"mesec":"mesecem":2===a?b||d?"meseca":"mesecema":5>a?b||d?"mesece":"meseci":b||d?"mesecev":"meseci";case"y":return b||d?"eno leto":"enim letom";case"yy":return e+=1===a?b||d?"leto":"letom":2===a?b||d?"leti":"letoma":5>a?b||d?"leta":"leti":b||d?"let":"leti"}}function qe(a){var b=a;return b=-1!==a.indexOf("jaj")?b.slice(0,-3)+"leS":-1!==a.indexOf("jar")?b.slice(0,-3)+"waQ":-1!==a.indexOf("DIS")?b.slice(0,-3)+"nem":b+" pIq"}function re(a){var b=a;return b=-1!==a.indexOf("jaj")?b.slice(0,-3)+"Hu’":-1!==a.indexOf("jar")?b.slice(0,-3)+"wen":-1!==a.indexOf("DIS")?b.slice(0,-3)+"ben":b+" ret"}function se(a,b,c,d){var e=te(a);switch(c){case"mm":return e+" tup";case"hh":return e+" rep";case"dd":return e+" jaj";case"MM":return e+" jar";case"yy":return e+" DIS"}}function te(a){var b=Math.floor(a%1e3/100),c=Math.floor(a%100/10),d=a%10,e="";return b>0&&(e+=di[b]+"vatlh"),c>0&&(e+=(""!==e?" ":"")+di[c]+"maH"),d>0&&(e+=(""!==e?" ":"")+di[d]),""===e?"pagh":e}function ue(a,b,c,d){var e={s:["viensas secunds","'iensas secunds"],m:["'n míut","'iens míut"],mm:[a+" míuts",""+a+" míuts"],h:["'n þora","'iensa þora"],hh:[a+" þoras",""+a+" þoras"],d:["'n ziua","'iensa ziua"],dd:[a+" ziuas",""+a+" ziuas"],M:["'n mes","'iens mes"],MM:[a+" mesen",""+a+" mesen"],y:["'n ar","'iens ar"],yy:[a+" ars",""+a+" ars"]};return d?e[c][0]:b?e[c][0]:e[c][1]}
81
+ //! moment.js locale configuration
82
+ //! locale : Ukrainian [uk]
83
+ //! author : zemlanin : https://github.com/zemlanin
84
+ //! Author : Menelion Elensúle : https://github.com/Oire
85
+ function ve(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function we(a,b,c){var d={mm:b?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:b?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===c?b?"хвилина":"хвилину":"h"===c?b?"година":"годину":a+" "+ve(d[c],+a)}function xe(a,b){var c={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")};if(!a)return c.nominative;var d=/(\[[ВвУу]\]) ?dddd/.test(b)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(b)?"genitive":"nominative";return c[d][a.day()]}function ye(a){return function(){return a+"о"+(11===this.hours()?"б":"")+"] LT"}}var ze,Ae;Ae=Array.prototype.some?Array.prototype.some:function(a){for(var b=Object(this),c=b.length>>>0,d=0;c>d;d++)if(d in b&&a.call(this,b[d],d,b))return!0;return!1};var Be=a.momentProperties=[],Ce=!1,De={};a.suppressDeprecationWarnings=!1,a.deprecationHandler=null;var Ee;Ee=Object.keys?Object.keys:function(a){var b,c=[];for(b in a)j(a,b)&&c.push(b);return c};var Fe={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Ge={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},He="Invalid date",Ie="%d",Je=/\d{1,2}/,Ke={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},Le={},Me={},Ne=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Oe=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Pe={},Qe={},Re=/\d/,Se=/\d\d/,Te=/\d{3}/,Ue=/\d{4}/,Ve=/[+-]?\d{6}/,We=/\d\d?/,Xe=/\d\d\d\d?/,Ye=/\d\d\d\d\d\d?/,Ze=/\d{1,3}/,$e=/\d{1,4}/,_e=/[+-]?\d{1,6}/,af=/\d+/,bf=/[+-]?\d+/,cf=/Z|[+-]\d\d:?\d\d/gi,df=/Z|[+-]\d\d(?::?\d\d)?/gi,ef=/[+-]?\d+(\.\d{1,3})?/,ff=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,gf={},hf={},jf=0,kf=1,lf=2,mf=3,nf=4,of=5,pf=6,qf=7,rf=8;P("Y",0,0,function(){var a=this.year();return 9999>=a?""+a:"+"+a}),P(0,["YY",2],0,function(){return this.year()%100}),P(0,["YYYY",4],0,"year"),P(0,["YYYYY",5],0,"year"),P(0,["YYYYYY",6,!0],0,"year"),J("year","y"),M("year",1),U("Y",bf),U("YY",We,Se),U("YYYY",$e,Ue),U("YYYYY",_e,Ve),U("YYYYYY",_e,Ve),Y(["YYYYY","YYYYYY"],jf),Y("YYYY",function(b,c){c[jf]=2===b.length?a.parseTwoDigitYear(b):u(b)}),Y("YY",function(b,c){c[jf]=a.parseTwoDigitYear(b)}),Y("Y",function(a,b){b[jf]=parseInt(a,10)}),a.parseTwoDigitYear=function(a){return u(a)+(u(a)>68?1900:2e3)};var sf,tf=ca("FullYear",!0);sf=Array.prototype.indexOf?Array.prototype.indexOf:function(a){var b;for(b=0;b<this.length;++b)if(this[b]===a)return b;return-1},P("M",["MM",2],"Mo",function(){return this.month()+1}),P("MMM",0,0,function(a){return this.localeData().monthsShort(this,a)}),P("MMMM",0,0,function(a){return this.localeData().months(this,a)}),J("month","M"),M("month",8),U("M",We),U("MM",We,Se),U("MMM",function(a,b){return b.monthsShortRegex(a)}),U("MMMM",function(a,b){return b.monthsRegex(a)}),Y(["M","MM"],function(a,b){b[kf]=u(a)-1}),Y(["MMM","MMMM"],function(a,b,c,d){var e=c._locale.monthsParse(a,d,c._strict);null!=e?b[kf]=e:n(c).invalidMonth=a});var uf=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,vf="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),wf="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),xf=ff,yf=ff;P("w",["ww",2],"wo","week"),P("W",["WW",2],"Wo","isoWeek"),J("week","w"),J("isoWeek","W"),M("week",5),M("isoWeek",5),U("w",We),U("ww",We,Se),U("W",We),U("WW",We,Se),Z(["w","ww","W","WW"],function(a,b,c,d){b[d.substr(0,1)]=u(a)});var zf={dow:0,doy:6};P("d",0,"do","day"),P("dd",0,0,function(a){return this.localeData().weekdaysMin(this,a)}),P("ddd",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),P("dddd",0,0,function(a){return this.localeData().weekdays(this,a)}),P("e",0,0,"weekday"),P("E",0,0,"isoWeekday"),J("day","d"),J("weekday","e"),J("isoWeekday","E"),M("day",11),M("weekday",11),M("isoWeekday",11),U("d",We),U("e",We),U("E",We),U("dd",function(a,b){return b.weekdaysMinRegex(a)}),U("ddd",function(a,b){return b.weekdaysShortRegex(a)}),U("dddd",function(a,b){return b.weekdaysRegex(a)}),Z(["dd","ddd","dddd"],function(a,b,c,d){var e=c._locale.weekdaysParse(a,d,c._strict);null!=e?b.d=e:n(c).invalidWeekday=a}),Z(["d","e","E"],function(a,b,c,d){b[d]=u(a)});var Af="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Bf="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Cf="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Df=ff,Ef=ff,Ff=ff;P("H",["HH",2],0,"hour"),P("h",["hh",2],0,Sa),P("k",["kk",2],0,Ta),P("hmm",0,0,function(){return""+Sa.apply(this)+O(this.minutes(),2)}),P("hmmss",0,0,function(){return""+Sa.apply(this)+O(this.minutes(),2)+O(this.seconds(),2)}),P("Hmm",0,0,function(){return""+this.hours()+O(this.minutes(),2)}),P("Hmmss",0,0,function(){return""+this.hours()+O(this.minutes(),2)+O(this.seconds(),2)}),Ua("a",!0),Ua("A",!1),J("hour","h"),M("hour",13),U("a",Va),U("A",Va),U("H",We),U("h",We),U("k",We),U("HH",We,Se),U("hh",We,Se),U("kk",We,Se),U("hmm",Xe),U("hmmss",Ye),U("Hmm",Xe),U("Hmmss",Ye),Y(["H","HH"],mf),Y(["k","kk"],function(a,b,c){var d=u(a);b[mf]=24===d?0:d}),Y(["a","A"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),Y(["h","hh"],function(a,b,c){b[mf]=u(a),n(c).bigHour=!0}),Y("hmm",function(a,b,c){var d=a.length-2;b[mf]=u(a.substr(0,d)),b[nf]=u(a.substr(d)),n(c).bigHour=!0}),Y("hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[mf]=u(a.substr(0,d)),b[nf]=u(a.substr(d,2)),b[of]=u(a.substr(e)),n(c).bigHour=!0}),Y("Hmm",function(a,b,c){var d=a.length-2;b[mf]=u(a.substr(0,d)),b[nf]=u(a.substr(d))}),Y("Hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[mf]=u(a.substr(0,d)),b[nf]=u(a.substr(d,2)),b[of]=u(a.substr(e))});var Gf,Hf=/[ap]\.?m?\.?/i,If=ca("Hours",!0),Jf={calendar:Fe,longDateFormat:Ge,invalidDate:He,ordinal:Ie,dayOfMonthOrdinalParse:Je,relativeTime:Ke,months:vf,monthsShort:wf,week:zf,weekdays:Af,weekdaysMin:Cf,weekdaysShort:Bf,meridiemParse:Hf},Kf={},Lf={},Mf=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Nf=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Of=/Z|[+-]\d\d(?::?\d\d)?/,Pf=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Qf=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Rf=/^\/?Date\((\-?\d+)/i,Sf=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Tf={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};a.createFromInputFallback=x("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}),a.ISO_8601=function(){},a.RFC_2822=function(){};var Uf=x("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var a=zb.apply(null,arguments);return this.isValid()&&a.isValid()?this>a?this:a:p()}),Vf=x("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var a=zb.apply(null,arguments);return this.isValid()&&a.isValid()?a>this?this:a:p()}),Wf=function(){return Date.now?Date.now():+new Date},Xf=["year","quarter","month","week","day","hour","minute","second","millisecond"];Jb("Z",":"),Jb("ZZ",""),U("Z",df),U("ZZ",df),Y(["Z","ZZ"],function(a,b,c){c._useUTC=!0,c._tzm=Kb(df,a)});var Yf=/([\+\-]|\d\d)/gi;a.updateOffset=function(){};var Zf=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,$f=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;Yb.fn=Gb.prototype,Yb.invalid=Fb;var _f=ac(1,"add"),ag=ac(-1,"subtract");a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",a.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var bg=x("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(a){return void 0===a?this.localeData():this.locale(a)});P(0,["gg",2],0,function(){return this.weekYear()%100}),P(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Jc("gggg","weekYear"),Jc("ggggg","weekYear"),Jc("GGGG","isoWeekYear"),Jc("GGGGG","isoWeekYear"),J("weekYear","gg"),J("isoWeekYear","GG"),M("weekYear",1),M("isoWeekYear",1),U("G",bf),U("g",bf),U("GG",We,Se),U("gg",We,Se),U("GGGG",$e,Ue),U("gggg",$e,Ue),U("GGGGG",_e,Ve),U("ggggg",_e,Ve),Z(["gggg","ggggg","GGGG","GGGGG"],function(a,b,c,d){b[d.substr(0,2)]=u(a)}),Z(["gg","GG"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}),P("Q",0,"Qo","quarter"),J("quarter","Q"),M("quarter",7),U("Q",Re),Y("Q",function(a,b){b[kf]=3*(u(a)-1)}),P("D",["DD",2],"Do","date"),J("date","D"),M("date",9),U("D",We),U("DD",We,Se),U("Do",function(a,b){return a?b._dayOfMonthOrdinalParse||b._ordinalParse:b._dayOfMonthOrdinalParseLenient}),Y(["D","DD"],lf),Y("Do",function(a,b){b[lf]=u(a.match(We)[0],10)});var cg=ca("Date",!0);P("DDD",["DDDD",3],"DDDo","dayOfYear"),J("dayOfYear","DDD"),M("dayOfYear",4),U("DDD",Ze),U("DDDD",Te),Y(["DDD","DDDD"],function(a,b,c){c._dayOfYear=u(a)}),P("m",["mm",2],0,"minute"),J("minute","m"),M("minute",14),U("m",We),U("mm",We,Se),Y(["m","mm"],nf);var dg=ca("Minutes",!1);P("s",["ss",2],0,"second"),J("second","s"),M("second",15),U("s",We),U("ss",We,Se),Y(["s","ss"],of);var eg=ca("Seconds",!1);P("S",0,0,function(){return~~(this.millisecond()/100)}),P(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),P(0,["SSS",3],0,"millisecond"),P(0,["SSSS",4],0,function(){return 10*this.millisecond()}),P(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),P(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),P(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),P(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),P(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),J("millisecond","ms"),M("millisecond",16),U("S",Ze,Re),U("SS",Ze,Se),U("SSS",Ze,Te);var fg;for(fg="SSSS";fg.length<=9;fg+="S")U(fg,af);for(fg="S";fg.length<=9;fg+="S")Y(fg,Sc);var gg=ca("Milliseconds",!1);P("z",0,0,"zoneAbbr"),P("zz",0,0,"zoneName");var hg=r.prototype;hg.add=_f,hg.calendar=dc,hg.clone=ec,hg.diff=lc,hg.endOf=yc,hg.format=qc,hg.from=rc,hg.fromNow=sc,hg.to=tc,hg.toNow=uc,hg.get=fa,hg.invalidAt=Hc,hg.isAfter=fc,hg.isBefore=gc,hg.isBetween=hc,hg.isSame=ic,hg.isSameOrAfter=jc,hg.isSameOrBefore=kc,hg.isValid=Fc,hg.lang=bg,hg.locale=vc,hg.localeData=wc,hg.max=Vf,hg.min=Uf,hg.parsingFlags=Gc,hg.set=ga,hg.startOf=xc,hg.subtract=ag,hg.toArray=Cc,hg.toObject=Dc,hg.toDate=Bc,hg.toISOString=oc,hg.inspect=pc,hg.toJSON=Ec,hg.toString=nc,hg.unix=Ac,hg.valueOf=zc,hg.creationData=Ic,hg.year=tf,hg.isLeapYear=ba,hg.weekYear=Kc,hg.isoWeekYear=Lc,hg.quarter=hg.quarters=Qc,hg.month=oa,hg.daysInMonth=pa,hg.week=hg.weeks=Ca,hg.isoWeek=hg.isoWeeks=Da,hg.weeksInYear=Nc,hg.isoWeeksInYear=Mc,hg.date=cg,hg.day=hg.days=La,hg.weekday=Ma,hg.isoWeekday=Na,hg.dayOfYear=Rc,hg.hour=hg.hours=If,hg.minute=hg.minutes=dg,hg.second=hg.seconds=eg,hg.millisecond=hg.milliseconds=gg,hg.utcOffset=Nb,hg.utc=Pb,hg.local=Qb,hg.parseZone=Rb,hg.hasAlignedHourOffset=Sb,hg.isDST=Tb,hg.isLocal=Vb,hg.isUtcOffset=Wb,hg.isUtc=Xb,hg.isUTC=Xb,hg.zoneAbbr=Tc,hg.zoneName=Uc,hg.dates=x("dates accessor is deprecated. Use date instead.",cg),hg.months=x("months accessor is deprecated. Use month instead",oa),hg.years=x("years accessor is deprecated. Use year instead",tf),hg.zone=x("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Ob),hg.isDSTShifted=x("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Ub);var ig=C.prototype;ig.calendar=D,ig.longDateFormat=E,ig.invalidDate=F,ig.ordinal=G,ig.preparse=Xc,ig.postformat=Xc,ig.relativeTime=H,ig.pastFuture=I,ig.set=A,ig.months=ja,ig.monthsShort=ka,ig.monthsParse=ma,ig.monthsRegex=ra,ig.monthsShortRegex=qa,ig.week=za,ig.firstDayOfYear=Ba,ig.firstDayOfWeek=Aa,ig.weekdays=Ga,ig.weekdaysMin=Ia,ig.weekdaysShort=Ha,ig.weekdaysParse=Ka,ig.weekdaysRegex=Oa,ig.weekdaysShortRegex=Pa,ig.weekdaysMinRegex=Qa,ig.isPM=Wa,ig.meridiem=Xa,_a("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===u(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),a.lang=x("moment.lang is deprecated. Use moment.locale instead.",_a),a.langData=x("moment.langData is deprecated. Use moment.localeData instead.",cb);var jg=Math.abs,kg=od("ms"),lg=od("s"),mg=od("m"),ng=od("h"),og=od("d"),pg=od("w"),qg=od("M"),rg=od("y"),sg=rd("milliseconds"),tg=rd("seconds"),ug=rd("minutes"),vg=rd("hours"),wg=rd("days"),xg=rd("months"),yg=rd("years"),zg=Math.round,Ag={ss:44,s:45,m:45,h:22,d:26,M:11},Bg=Math.abs,Cg=Gb.prototype;Cg.isValid=Eb,Cg.abs=ed,Cg.add=gd,Cg.subtract=hd,Cg.as=md,Cg.asMilliseconds=kg,Cg.asSeconds=lg,Cg.asMinutes=mg,Cg.asHours=ng,Cg.asDays=og,Cg.asWeeks=pg,Cg.asMonths=qg,Cg.asYears=rg,Cg.valueOf=nd,Cg._bubble=jd,Cg.clone=pd,Cg.get=qd,Cg.milliseconds=sg,Cg.seconds=tg,Cg.minutes=ug,Cg.hours=vg,Cg.days=wg,Cg.weeks=sd,Cg.months=xg,Cg.years=yg,Cg.humanize=xd,Cg.toISOString=zd,Cg.toString=zd,Cg.toJSON=zd,Cg.locale=vc,Cg.localeData=wc,Cg.toIsoString=x("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",zd),Cg.lang=bg,P("X",0,0,"unix"),P("x",0,0,"valueOf"),U("x",bf),U("X",ef),Y("X",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),Y("x",function(a,b,c){c._d=new Date(u(a))}),
86
+ //! moment.js
87
+ //! version : 2.19.2
88
+ //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
89
+ //! license : MIT
90
+ //! momentjs.com
91
+ a.version="2.19.2",b(zb),a.fn=hg,a.min=Bb,a.max=Cb,a.now=Wf,a.utc=l,a.unix=Vc,a.months=_c,a.isDate=h,a.locale=_a,a.invalid=p,a.duration=Yb,a.isMoment=s,a.weekdays=bd,a.parseZone=Wc,a.localeData=cb,a.isDuration=Hb,a.monthsShort=ad,a.weekdaysMin=dd,a.defineLocale=ab,a.updateLocale=bb,a.locales=db,a.weekdaysShort=cd,a.normalizeUnits=K,a.relativeTimeRounding=vd,a.relativeTimeThreshold=wd,a.calendarFormat=cc,a.prototype=hg,
92
+ //! moment.js locale configuration
93
+ //! locale : Afrikaans [af]
94
+ //! author : Werner Mollentze : https://github.com/wernerm
95
+ a.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(a){return/^nm$/i.test(a)},meridiem:function(a,b,c){return 12>a?c?"vm":"VM":c?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}}),
96
+ //! moment.js locale configuration
97
+ //! locale : Arabic (Algeria) [ar-dz]
98
+ //! author : Noureddine LOUAHEDJ : https://github.com/noureddineme
99
+ a.defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:4}}),
100
+ //! moment.js locale configuration
101
+ //! locale : Arabic (Kuwait) [ar-kw]
102
+ //! author : Nusret Parlak: https://github.com/nusretparlak
103
+ a.defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}});
104
+ //! moment.js locale configuration
105
+ //! locale : Arabic (Lybia) [ar-ly]
106
+ //! author : Ali Hmer: https://github.com/kikoanis
107
+ var Dg={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},Eg=function(a){return 0===a?0:1===a?1:2===a?2:a%100>=3&&10>=a%100?3:a%100>=11?4:5},Fg={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},Gg=function(a){return function(b,c,d,e){var f=Eg(b),g=Fg[a][Eg(b)];return 2===f&&(g=g[c?0:1]),g.replace(/%d/i,b)}},Hg=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];a.defineLocale("ar-ly",{months:Hg,monthsShort:Hg,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return 12>a?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:Gg("s"),m:Gg("m"),mm:Gg("m"),h:Gg("h"),hh:Gg("h"),d:Gg("d"),dd:Gg("d"),M:Gg("M"),MM:Gg("M"),y:Gg("y"),yy:Gg("y")},preparse:function(a){return a.replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return Dg[a]}).replace(/,/g,"،")},week:{dow:6,doy:12}}),
108
+ //! moment.js locale configuration
109
+ //! locale : Arabic (Morocco) [ar-ma]
110
+ //! author : ElFadili Yassine : https://github.com/ElFadiliY
111
+ //! author : Abdel Said : https://github.com/abdelsaid
112
+ a.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}});
113
+ //! moment.js locale configuration
114
+ //! locale : Arabic (Saudi Arabia) [ar-sa]
115
+ //! author : Suhail Alkowaileet : https://github.com/xsoh
116
+ var Ig={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},Jg={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};a.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return 12>a?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(a){return a.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return Jg[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return Ig[a]}).replace(/,/g,"،")},week:{dow:0,doy:6}}),
117
+ //! moment.js locale configuration
118
+ //! locale : Arabic (Tunisia) [ar-tn]
119
+ //! author : Nader Toukabri : https://github.com/naderio
120
+ a.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}});
121
+ //! moment.js locale configuration
122
+ //! locale : Arabic [ar]
123
+ //! author : Abdel Said: https://github.com/abdelsaid
124
+ //! author : Ahmed Elkhatib
125
+ //! author : forabi https://github.com/forabi
126
+ var Kg={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},Lg={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},Mg=function(a){return 0===a?0:1===a?1:2===a?2:a%100>=3&&10>=a%100?3:a%100>=11?4:5},Ng={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},Og=function(a){return function(b,c,d,e){var f=Mg(b),g=Ng[a][Mg(b)];return 2===f&&(g=g[c?0:1]),g.replace(/%d/i,b)}},Pg=["كانون الثاني يناير","شباط فبراير","آذار مارس","نيسان أبريل","أيار مايو","حزيران يونيو","تموز يوليو","آب أغسطس","أيلول سبتمبر","تشرين الأول أكتوبر","تشرين الثاني نوفمبر","كانون الأول ديسمبر"];a.defineLocale("ar",{months:Pg,monthsShort:Pg,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return 12>a?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:Og("s"),m:Og("m"),mm:Og("m"),h:Og("h"),hh:Og("h"),d:Og("d"),dd:Og("d"),M:Og("M"),MM:Og("M"),y:Og("y"),yy:Og("y")},preparse:function(a){return a.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return Lg[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return Kg[a]}).replace(/,/g,"،")},week:{dow:6,doy:12}});
127
+ //! moment.js locale configuration
128
+ //! locale : Azerbaijani [az]
129
+ //! author : topchiyev : https://github.com/topchiyev
130
+ var Qg={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};a.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(a){return/^(gündüz|axşam)$/.test(a)},meridiem:function(a,b,c){return 4>a?"gecə":12>a?"səhər":17>a?"gündüz":"axşam"},dayOfMonthOrdinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(a){if(0===a)return a+"-ıncı";var b=a%10,c=a%100-b,d=a>=100?100:null;return a+(Qg[b]||Qg[c]||Qg[d])},week:{dow:1,doy:7}}),a.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:Bd,mm:Bd,h:Bd,hh:Bd,d:"дзень",dd:Bd,M:"месяц",MM:Bd,y:"год",yy:Bd},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(a){return/^(дня|вечара)$/.test(a)},meridiem:function(a,b,c){return 4>a?"ночы":12>a?"раніцы":17>a?"дня":"вечара"},dayOfMonthOrdinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a%10!==2&&a%10!==3||a%100===12||a%100===13?a+"-ы":a+"-і";case"D":return a+"-га";default:return a}},week:{dow:1,doy:7}}),
131
+ //! moment.js locale configuration
132
+ //! locale : Bulgarian [bg]
133
+ //! author : Krasen Borisov : https://github.com/kraz
134
+ a.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&20>c?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,doy:7}}),
135
+ //! moment.js locale configuration
136
+ //! locale : Bambara [bm]
137
+ //! author : Estelle Comment : https://github.com/estellecomment
138
+ a.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des".split("_"),weekdays:"Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm"},calendar:{sameDay:"[Bi lɛrɛ] LT",nextDay:"[Sini lɛrɛ] LT",nextWeek:"dddd [don lɛrɛ] LT",lastDay:"[Kunu lɛrɛ] LT",lastWeek:"dddd [tɛmɛnen lɛrɛ] LT",sameElse:"L"},relativeTime:{future:"%s kɔnɔ",past:"a bɛ %s bɔ",s:"sanga dama dama",m:"miniti kelen",mm:"miniti %d",h:"lɛrɛ kelen",hh:"lɛrɛ %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}});
139
+ //! moment.js locale configuration
140
+ //! locale : Bengali [bn]
141
+ //! author : Kaushik Gandhi : https://github.com/kaushikgandhi
142
+ var Rg={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},Sg={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};a.defineLocale("bn",{months:"জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(a){return a.replace(/[১২৩৪৫৬৭৮৯০]/g,function(a){return Sg[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Rg[a]})},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(a,b){return 12===a&&(a=0),"রাত"===b&&a>=4||"দুপুর"===b&&5>a||"বিকাল"===b?a+12:a},meridiem:function(a,b,c){return 4>a?"রাত":10>a?"সকাল":17>a?"দুপুর":20>a?"বিকাল":"রাত"},week:{dow:0,doy:6}});
143
+ //! moment.js locale configuration
144
+ //! locale : Tibetan [bo]
145
+ //! author : Thupten N. Chakrishar : https://github.com/vajradog
146
+ var Tg={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},Ug={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"};a.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(a){return a.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,function(a){return Ug[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Tg[a]})},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(a,b){return 12===a&&(a=0),"མཚན་མོ"===b&&a>=4||"ཉིན་གུང"===b&&5>a||"དགོང་དག"===b?a+12:a},meridiem:function(a,b,c){return 4>a?"མཚན་མོ":10>a?"ཞོགས་ཀས":17>a?"ཉིན་གུང":20>a?"དགོང་དག":"མཚན་མོ"},week:{dow:0,doy:6}}),a.defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",m:"ur vunutenn",mm:Cd,h:"un eur",hh:"%d eur",d:"un devezh",dd:Cd,M:"ur miz",MM:Cd,y:"ur bloaz",yy:Dd},dayOfMonthOrdinalParse:/\d{1,2}(añ|vet)/,ordinal:function(a){var b=1===a?"añ":"vet";return a+b},week:{dow:1,doy:4}}),a.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:Hd,mm:Hd,h:Hd,hh:Hd,d:"dan",dd:Hd,M:"mjesec",MM:Hd,y:"godinu",yy:Hd},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),
147
+ //! moment.js locale configuration
148
+ //! locale : Catalan [ca]
149
+ //! author : Juan G. Hurtado : https://github.com/juanghurtado
150
+ a.defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(a,b){var c=1===a?"r":2===a?"n":3===a?"r":4===a?"t":"è";return("w"===b||"W"===b)&&(c="a"),a+c},week:{dow:1,doy:4}});
151
+ //! moment.js locale configuration
152
+ //! locale : Czech [cs]
153
+ //! author : petrbela : https://github.com/petrbela
154
+ var Vg="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),Wg="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_");a.defineLocale("cs",{months:Vg,monthsShort:Wg,monthsParse:function(a,b){var c,d=[];for(c=0;12>c;c++)d[c]=new RegExp("^"+a[c]+"$|^"+b[c]+"$","i");return d}(Vg,Wg),shortMonthsParse:function(a){var b,c=[];for(b=0;12>b;b++)c[b]=new RegExp("^"+a[b]+"$","i");return c}(Wg),longMonthsParse:function(a){var b,c=[];for(b=0;12>b;b++)c[b]=new RegExp("^"+a[b]+"$","i");return c}(Vg),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:Jd,m:Jd,mm:Jd,h:Jd,hh:Jd,d:Jd,dd:Jd,M:Jd,MM:Jd,y:Jd,yy:Jd},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),
155
+ //! moment.js locale configuration
156
+ //! locale : Chuvash [cv]
157
+ //! author : Anatoly Mironov : https://github.com/mirontoli
158
+ a.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(a){var b=/сехет$/i.exec(a)?"рен":/ҫул$/i.exec(a)?"тан":"ран";return a+b},past:"%s каялла",s:"пӗр-ик ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},dayOfMonthOrdinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,doy:7}}),
159
+ //! moment.js locale configuration
160
+ //! locale : Welsh [cy]
161
+ //! author : Robert Allen : https://github.com/robgallen
162
+ //! author : https://github.com/ryangreaves
163
+ a.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(a){var b=a,c="",d=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"];return b>20?c=40===b||50===b||60===b||80===b||100===b?"fed":"ain":b>0&&(c=d[b]),a+c},week:{dow:1,doy:4}}),
164
+ //! moment.js locale configuration
165
+ //! locale : Danish [da]
166
+ //! author : Ulrik Nielsen : https://github.com/mrbase
167
+ a.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),a.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:Kd,mm:"%d Minuten",h:Kd,hh:"%d Stunden",d:Kd,dd:Kd,M:Kd,MM:Kd,y:Kd,yy:Kd},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),a.defineLocale("de-ch",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH.mm",LLLL:"dddd, D. MMMM YYYY HH.mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:Ld,mm:"%d Minuten",h:Ld,hh:"%d Stunden",d:Ld,dd:Ld,M:Ld,MM:Ld,y:Ld,yy:Ld},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),a.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:Md,mm:"%d Minuten",h:Md,hh:"%d Stunden",d:Md,dd:Md,M:Md,MM:Md,y:Md,yy:Md},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});
168
+ //! moment.js locale configuration
169
+ //! locale : Maldivian [dv]
170
+ //! author : Jawish Hameed : https://github.com/jawish
171
+ var Xg=["ޖެނުއަރީ","ފެބްރުއަރީ","މާރިޗު","އޭޕްރީލު","މޭ","ޖޫން","ޖުލައި","އޯގަސްޓު","ސެޕްޓެމްބަރު","އޮކްޓޯބަރު","ނޮވެމްބަރު","ޑިސެމްބަރު"],Yg=["އާދިއްތަ","ހޯމަ","އަންގާރަ","ބުދަ","ބުރާސްފަތި","ހުކުރު","ހޮނިހިރު"];a.defineLocale("dv",{months:Xg,monthsShort:Xg,weekdays:Yg,weekdaysShort:Yg,weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/މކ|މފ/,isPM:function(a){return"މފ"===a},meridiem:function(a,b,c){return 12>a?"މކ":"މފ"},calendar:{sameDay:"[މިއަދު] LT",nextDay:"[މާދަމާ] LT",nextWeek:"dddd LT",lastDay:"[އިއްޔެ] LT",lastWeek:"[ފާއިތުވި] dddd LT",sameElse:"L"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"},preparse:function(a){return a.replace(/،/g,",")},postformat:function(a){return a.replace(/,/g,"،")},week:{dow:7,doy:12}}),
172
+ //! moment.js locale configuration
173
+ //! locale : Greek [el]
174
+ //! author : Aggelos Karalias : https://github.com/mehiel
175
+ a.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(a,b){return a?"string"==typeof b&&/D/.test(b.substring(0,b.indexOf("MMMM")))?this._monthsGenitiveEl[a.month()]:this._monthsNominativeEl[a.month()]:this._monthsNominativeEl},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(a,b,c){return a>11?c?"μμ":"ΜΜ":c?"πμ":"ΠΜ"},isPM:function(a){return"μ"===(a+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(a,b){var c=this._calendarEl[a],d=b&&b.hours();return z(c)&&(c=c.apply(b)),c.replace("{}",d%12===1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},dayOfMonthOrdinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}}),
176
+ //! moment.js locale configuration
177
+ //! locale : English (Australia) [en-au]
178
+ //! author : Jared Morse : https://github.com/jarcoal
179
+ a.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}),
180
+ //! moment.js locale configuration
181
+ //! locale : English (Canada) [en-ca]
182
+ //! author : Jonathan Abourbih : https://github.com/jonbca
183
+ a.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),
184
+ //! moment.js locale configuration
185
+ //! locale : English (United Kingdom) [en-gb]
186
+ //! author : Chris Gedrim : https://github.com/chrisgedrim
187
+ a.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}),
188
+ //! moment.js locale configuration
189
+ //! locale : English (Ireland) [en-ie]
190
+ //! author : Chris Cartlidge : https://github.com/chriscartlidge
191
+ a.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}),
192
+ //! moment.js locale configuration
193
+ //! locale : English (New Zealand) [en-nz]
194
+ //! author : Luke McGregor : https://github.com/lukemcgregor
195
+ a.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}),
196
+ //! moment.js locale configuration
197
+ //! locale : Esperanto [eo]
198
+ //! author : Colin Dean : https://github.com/colindean
199
+ //! author : Mia Nordentoft Imperatori : https://github.com/miestasmia
200
+ //! comment : miestasmia corrected the translation by colindean
201
+ a.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-a de] MMMM, YYYY",LLL:"D[-a de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-a de] MMMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(a){return"p"===a.charAt(0).toLowerCase()},meridiem:function(a,b,c){return a>11?c?"p.t.m.":"P.T.M.":c?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}});
202
+ //! moment.js locale configuration
203
+ //! locale : Spanish (Dominican Republic) [es-do]
204
+ var Zg="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),$g="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),_g=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],ah=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;a.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(a,b){return a?/-MMM-/.test(b)?$g[a.month()]:Zg[a.month()]:Zg},monthsRegex:ah,monthsShortRegex:ah,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:_g,longMonthsParse:_g,shortMonthsParse:_g,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}});
205
+ //! moment.js locale configuration
206
+ //! locale : Spanish(United State) [es-us]
207
+ //! author : bustta : https://github.com/bustta
208
+ var bh="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),ch="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");a.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(a,b){return a?/-MMM-/.test(b)?ch[a.month()]:bh[a.month()]:bh},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"MM/DD/YYYY",LL:"MMMM [de] D [de] YYYY",LLL:"MMMM [de] D [de] YYYY H:mm",LLLL:"dddd, MMMM [de] D [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:0,doy:6}});
209
+ //! moment.js locale configuration
210
+ //! locale : Spanish [es]
211
+ //! author : Julio Napurí : https://github.com/julionc
212
+ var dh="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),eh="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),fh=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],gh=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;a.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(a,b){return a?/-MMM-/.test(b)?eh[a.month()]:dh[a.month()]:dh},monthsRegex:gh,monthsShortRegex:gh,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:fh,longMonthsParse:fh,shortMonthsParse:fh,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}),a.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:Nd,m:Nd,mm:Nd,h:Nd,hh:Nd,d:Nd,dd:"%d päeva",M:Nd,MM:Nd,y:Nd,yy:Nd},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),
213
+ //! moment.js locale configuration
214
+ //! locale : Basque [eu]
215
+ //! author : Eneko Illarramendi : https://github.com/eillarra
216
+ a.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});
217
+ //! moment.js locale configuration
218
+ //! locale : Persian [fa]
219
+ //! author : Ebrahim Byagowi : https://github.com/ebraminio
220
+ var hh={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},ih={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};a.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(a){return/بعد از ظهر/.test(a)},meridiem:function(a,b,c){return 12>a?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(a){return a.replace(/[۰-۹]/g,function(a){return ih[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return hh[a]}).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}});
221
+ //! moment.js locale configuration
222
+ //! locale : Finnish [fi]
223
+ //! author : Tarmo Aidantausta : https://github.com/bleadof
224
+ var jh="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),kh=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",jh[7],jh[8],jh[9]];a.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:Od,m:Od,mm:Od,h:Od,hh:Od,d:Od,dd:Od,M:Od,MM:Od,y:Od,yy:Od},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),
225
+ //! moment.js locale configuration
226
+ //! locale : Faroese [fo]
227
+ //! author : Ragnar Johannesen : https://github.com/ragnar123
228
+ a.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",m:"ein minutt",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaði",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),
229
+ //! moment.js locale configuration
230
+ //! locale : French (Canada) [fr-ca]
231
+ //! author : Jonathan Abourbih : https://github.com/jonbca
232
+ a.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(a,b){switch(b){default:case"M":case"Q":case"D":case"DDD":case"d":return a+(1===a?"er":"e");case"w":case"W":return a+(1===a?"re":"e")}}}),
233
+ //! moment.js locale configuration
234
+ //! locale : French (Switzerland) [fr-ch]
235
+ //! author : Gaspard Bucher : https://github.com/gaspard
236
+ a.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(a,b){switch(b){default:case"M":case"Q":case"D":case"DDD":case"d":return a+(1===a?"er":"e");case"w":case"W":return a+(1===a?"re":"e")}},week:{dow:1,doy:4}}),
237
+ //! moment.js locale configuration
238
+ //! locale : French [fr]
239
+ //! author : John Fischer : https://github.com/jfroffice
240
+ a.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(a,b){switch(b){case"D":return a+(1===a?"er":"");default:case"M":case"Q":case"DDD":case"d":return a+(1===a?"er":"e");case"w":case"W":return a+(1===a?"re":"e")}},week:{dow:1,doy:4}});
241
+ //! moment.js locale configuration
242
+ //! locale : Frisian [fy]
243
+ //! author : Robin van der Vliet : https://github.com/robin0van0der0v
244
+ var lh="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),mh="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");a.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(a,b){return a?/-MMM-/.test(b)?mh[a.month()]:lh[a.month()]:lh},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}});
245
+ //! moment.js locale configuration
246
+ //! locale : Scottish Gaelic [gd]
247
+ //! author : Jon Ashdown : https://github.com/jonashdown
248
+ var nh=["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"],oh=["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],ph=["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],qh=["Did","Dil","Dim","Dic","Dia","Dih","Dis"],rh=["Dò","Lu","Mà","Ci","Ar","Ha","Sa"];a.defineLocale("gd",{months:nh,monthsShort:oh,monthsParseExact:!0,weekdays:ph,weekdaysShort:qh,weekdaysMin:rh,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(a){var b=1===a?"d":a%10===2?"na":"mh";return a+b},week:{dow:1,doy:4}}),
249
+ //! moment.js locale configuration
250
+ //! locale : Galician [gl]
251
+ //! author : Juan G. Hurtado : https://github.com/juanghurtado
252
+ a.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(a){return 0===a.indexOf("un")?"n"+a:"en "+a},past:"hai %s",s:"uns segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}),a.defineLocale("gom-latn",{months:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Ieta to] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fatlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:Qd,m:Qd,mm:Qd,h:Qd,hh:Qd,d:Qd,dd:Qd,M:Qd,MM:Qd,y:Qd,yy:Qd},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(a,b){switch(b){case"D":return a+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return a}},week:{dow:1,doy:4},meridiemParse:/rati|sokalli|donparam|sanje/,meridiemHour:function(a,b){return 12===a&&(a=0),"rati"===b?4>a?a:a+12:"sokalli"===b?a:"donparam"===b?a>12?a:a+12:"sanje"===b?a+12:void 0},meridiem:function(a,b,c){return 4>a?"rati":12>a?"sokalli":16>a?"donparam":20>a?"sanje":"rati"}});
253
+ //! moment.js locale configuration
254
+ //! locale : Gujarati [gu]
255
+ //! author : Kaushik Thanki : https://github.com/Kaushik1987
256
+ var sh={1:"૧",2:"૨",3:"૩",4:"૪",5:"૫",6:"૬",7:"૭",8:"૮",9:"૯",0:"૦"},th={"૧":"1","૨":"2","૩":"3","૪":"4","૫":"5","૬":"6","૭":"7","૮":"8","૯":"9","૦":"0"};a.defineLocale("gu",{months:"જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર".split("_"),monthsShort:"જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.".split("_"),monthsParseExact:!0,weekdays:"રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર".split("_"),weekdaysShort:"રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ".split("_"),weekdaysMin:"ર_સો_મં_બુ_ગુ_શુ_શ".split("_"),longDateFormat:{LT:"A h:mm વાગ્યે",LTS:"A h:mm:ss વાગ્યે",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm વાગ્યે",LLLL:"dddd, D MMMM YYYY, A h:mm વાગ્યે"},calendar:{sameDay:"[આજ] LT",nextDay:"[કાલે] LT",nextWeek:"dddd, LT",lastDay:"[ગઇકાલે] LT",lastWeek:"[પાછલા] dddd, LT",sameElse:"L"},relativeTime:{future:"%s મા",past:"%s પેહલા",s:"અમુક પળો",m:"એક મિનિટ",mm:"%d મિનિટ",h:"એક કલાક",hh:"%d કલાક",d:"એક દિવસ",dd:"%d દિવસ",M:"એક મહિનો",MM:"%d મહિનો",y:"એક વર્ષ",yy:"%d વર્ષ"},preparse:function(a){return a.replace(/[૧૨૩૪૫૬૭૮૯૦]/g,function(a){return th[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return sh[a]})},meridiemParse:/રાત|બપોર|સવાર|સાંજ/,meridiemHour:function(a,b){return 12===a&&(a=0),"રાત"===b?4>a?a:a+12:"સવાર"===b?a:"બપોર"===b?a>=10?a:a+12:"સાંજ"===b?a+12:void 0},meridiem:function(a,b,c){return 4>a?"રાત":10>a?"સવાર":17>a?"બપોર":20>a?"સાંજ":"રાત"},week:{dow:0,doy:6}}),
257
+ //! moment.js locale configuration
258
+ //! locale : Hebrew [he]
259
+ //! author : Tomer Cohen : https://github.com/tomer
260
+ //! author : Moshe Simantov : https://github.com/DevelopmentIL
261
+ //! author : Tal Ater : https://github.com/TalAter
262
+ a.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(a){return 2===a?"שעתיים":a+" שעות"},d:"יום",dd:function(a){return 2===a?"יומיים":a+" ימים"},M:"חודש",MM:function(a){return 2===a?"חודשיים":a+" חודשים"},y:"שנה",yy:function(a){return 2===a?"שנתיים":a%10===0&&10!==a?a+" שנה":a+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(a){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(a)},meridiem:function(a,b,c){return 5>a?"לפנות בוקר":10>a?"בבוקר":12>a?c?'לפנה"צ':"לפני הצהריים":18>a?c?'אחה"צ':"אחרי הצהריים":"בערב"}});
263
+ //! moment.js locale configuration
264
+ //! locale : Hindi [hi]
265
+ //! author : Mayank Singhal : https://github.com/mayanksinghal
266
+ var uh={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},vh={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return vh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return uh[a]})},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(a,b){return 12===a&&(a=0),"रात"===b?4>a?a:a+12:"सुबह"===b?a:"दोपहर"===b?a>=10?a:a+12:"शाम"===b?a+12:void 0},meridiem:function(a,b,c){return 4>a?"रात":10>a?"सुबह":17>a?"दोपहर":20>a?"शाम":"रात"},week:{dow:0,doy:6}}),a.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:Rd,mm:Rd,h:Rd,hh:Rd,d:"dan",dd:Rd,M:"mjesec",MM:Rd,y:"godinu",yy:Rd},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});
267
+ //! moment.js locale configuration
268
+ //! locale : Hungarian [hu]
269
+ //! author : Adam Brunner : https://github.com/adambrunner
270
+ var wh="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");a.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(a){return"u"===a.charAt(1).toLowerCase()},meridiem:function(a,b,c){return 12>a?c===!0?"de":"DE":c===!0?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return Td.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return Td.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:Sd,m:Sd,mm:Sd,h:Sd,hh:Sd,d:Sd,dd:Sd,M:Sd,MM:Sd,y:Sd,yy:Sd},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),
271
+ //! moment.js locale configuration
272
+ //! locale : Armenian [hy-am]
273
+ //! author : Armendarabyan : https://github.com/armendarabyan
274
+ a.defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(a){return/^(ցերեկվա|երեկոյան)$/.test(a)},meridiem:function(a){return 4>a?"գիշերվա":12>a?"առավոտվա":17>a?"ցերեկվա":"երեկոյան"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(a,b){switch(b){case"DDD":case"w":case"W":case"DDDo":return 1===a?a+"-ին":a+"-րդ";default:return a}},week:{dow:1,doy:7}}),
275
+ //! moment.js locale configuration
276
+ //! locale : Indonesian [id]
277
+ //! author : Mohammad Satrio Utomo : https://github.com/tyok
278
+ //! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
279
+ a.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"siang"===b?a>=11?a:a+12:"sore"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return 11>a?"pagi":15>a?"siang":19>a?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),a.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:Vd,m:Vd,mm:Vd,h:"klukkustund",hh:Vd,d:Vd,dd:Vd,M:Vd,MM:Vd,y:Vd,yy:Vd},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),
280
+ //! moment.js locale configuration
281
+ //! locale : Italian [it]
282
+ //! author : Lorenzo : https://github.com/aliem
283
+ //! author: Mattia Larentis: https://github.com/nostalgiaz
284
+ a.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(a){return(/^[0-9].+$/.test(a)?"tra":"in")+" "+a},past:"%s fa",s:"alcuni secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}),
285
+ //! moment.js locale configuration
286
+ //! locale : Japanese [ja]
287
+ //! author : LI Long : https://github.com/baryon
288
+ a.defineLocale("ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 HH:mm dddd",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日 HH:mm dddd"},meridiemParse:/午前|午後/i,isPM:function(a){return"午後"===a},meridiem:function(a,b,c){return 12>a?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";default:return a}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}}),
289
+ //! moment.js locale configuration
290
+ //! locale : Javanese [jv]
291
+ //! author : Rony Lantip : https://github.com/lantip
292
+ //! reference: http://jv.wikipedia.org/wiki/Basa_Jawa
293
+ a.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(a,b){return 12===a&&(a=0),"enjing"===b?a:"siyang"===b?a>=11?a:a+12:"sonten"===b||"ndalu"===b?a+12:void 0},meridiem:function(a,b,c){return 11>a?"enjing":15>a?"siyang":19>a?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}}),
294
+ //! moment.js locale configuration
295
+ //! locale : Georgian [ka]
296
+ //! author : Irakli Janiashvili : https://github.com/irakli-janiashvili
297
+ a.defineLocale("ka",{months:{standalone:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),format:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(a){return/(წამი|წუთი|საათი|წელი)/.test(a)?a.replace(/ი$/,"ში"):a+"ში"},past:function(a){return/(წამი|წუთი|საათი|დღე|თვე)/.test(a)?a.replace(/(ი|ე)$/,"ის უკან"):/წელი/.test(a)?a.replace(/წელი$/,"წლის უკან"):void 0},s:"რამდენიმე წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(a){return 0===a?a:1===a?a+"-ლი":20>a||100>=a&&a%20===0||a%100===0?"მე-"+a:a+"-ე"},week:{dow:1,doy:7}});
298
+ //! moment.js locale configuration
299
+ //! locale : Kazakh [kk]
300
+ //! authors : Nurlan Rakhimzhanov : https://github.com/nurlan
301
+ var xh={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"};a.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(a){var b=a%10,c=a>=100?100:null;return a+(xh[a]||xh[b]||xh[c])},week:{dow:1,doy:7}}),
302
+ //! moment.js locale configuration
303
+ //! locale : Cambodian [km]
304
+ //! author : Kruy Vanna : https://github.com/kruyvanna
305
+ a.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysMin:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},week:{dow:1,doy:4}});
306
+ //! moment.js locale configuration
307
+ //! locale : Kannada [kn]
308
+ //! author : Rajeev Naik : https://github.com/rajeevnaikte
309
+ var yh={1:"೧",2:"೨",3:"೩",4:"೪",5:"೫",6:"೬",7:"೭",8:"೮",9:"೯",0:"೦"},zh={"೧":"1","೨":"2","೩":"3","೪":"4","೫":"5","೬":"6","೭":"7","೮":"8","೯":"9","೦":"0"};a.defineLocale("kn",{months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬ_ಅಕ್ಟೋಬ_ನವೆಂಬ_ಡಿಸೆಂಬ".split("_"),monthsParseExact:!0,weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[ಇಂದು] LT",nextDay:"[ನಾಳೆ] LT",nextWeek:"dddd, LT",lastDay:"[ನಿನ್ನೆ] LT",lastWeek:"[ಕೊನೆಯ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"},preparse:function(a){return a.replace(/[೧೨೩೪೫೬೭೮೯೦]/g,function(a){return zh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return yh[a]})},meridiemParse:/ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,meridiemHour:function(a,b){return 12===a&&(a=0),"ರಾತ್ರಿ"===b?4>a?a:a+12:"ಬೆಳಿಗ್ಗೆ"===b?a:"ಮಧ್ಯಾಹ್ನ"===b?a>=10?a:a+12:"ಸಂಜೆ"===b?a+12:void 0},meridiem:function(a,b,c){return 4>a?"ರಾತ್ರಿ":10>a?"ಬೆಳಿಗ್ಗೆ":17>a?"ಮಧ್ಯಾಹ್ನ":20>a?"ಸಂಜೆ":"ರಾತ್ರಿ"},dayOfMonthOrdinalParse:/\d{1,2}(ನೇ)/,ordinal:function(a){return a+"ನೇ"},week:{dow:0,doy:6}}),
310
+ //! moment.js locale configuration
311
+ //! locale : Korean [ko]
312
+ //! author : Kyungwook, Park : https://github.com/kyungw00k
313
+ //! author : Jeeeyul Lee <jeeeyul@gmail.com>
314
+ a.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}(일|월|주)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"일";case"M":return a+"월";case"w":case"W":return a+"주";default:return a}},meridiemParse:/오전|오후/,isPM:function(a){return"오후"===a},meridiem:function(a,b,c){return 12>a?"오전":"오후"}});
315
+ //! moment.js locale configuration
316
+ //! locale : Kyrgyz [ky]
317
+ //! author : Chyngyz Arystan uulu : https://github.com/chyngyz
318
+ var Ah={0:"-чү",1:"-чи",2:"-чи",3:"-чү",4:"-чү",5:"-чи",6:"-чы",7:"-чи",8:"-чи",9:"-чу",10:"-чу",20:"-чы",30:"-чу",40:"-чы",50:"-чү",60:"-чы",70:"-чи",80:"-чи",90:"-чу",100:"-чү"};a.defineLocale("ky",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгүн саат] LT",nextDay:"[Эртең саат] LT",nextWeek:"dddd [саат] LT",lastDay:"[Кече саат] LT",lastWeek:"[Өткен аптанын] dddd [күнү] [саат] LT",sameElse:"L"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(a){var b=a%10,c=a>=100?100:null;return a+(Ah[a]||Ah[b]||Ah[c])},week:{dow:1,doy:7}}),a.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:Xd,past:Yd,s:"e puer Sekonnen",m:Wd,mm:"%d Minutten",h:Wd,hh:"%d Stonnen",d:Wd,dd:"%d Deeg",M:Wd,MM:"%d Méint",y:Wd,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),
319
+ //! moment.js locale configuration
320
+ //! locale : Lao [lo]
321
+ //! author : Ryan Hart : https://github.com/ryanhart2
322
+ a.defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(a){return"ຕອນແລງ"===a},meridiem:function(a,b,c){return 12>a?"ຕອນເຊົ້າ":"ຕອນແລງ"},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},dayOfMonthOrdinalParse:/(ທີ່)\d{1,2}/,ordinal:function(a){return"ທີ່"+a}});
323
+ //! moment.js locale configuration
324
+ //! locale : Lithuanian [lt]
325
+ //! author : Mindaugas Mozūras : https://github.com/mmozuras
326
+ var Bh={m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};a.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:$d,m:_d,mm:ce,h:_d,hh:ce,d:_d,dd:ce,M:_d,MM:ce,y:_d,yy:ce},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(a){return a+"-oji"},week:{dow:1,doy:4}});
327
+ //! moment.js locale configuration
328
+ //! locale : Latvian [lv]
329
+ //! author : Kristaps Karlsons : https://github.com/skakri
330
+ //! author : Jānis Elmeris : https://github.com/JanisE
331
+ var Ch={m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};a.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:ge,m:fe,mm:ee,h:fe,hh:ee,d:fe,dd:ee,M:fe,MM:ee,y:fe,yy:ee},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});
332
+ //! moment.js locale configuration
333
+ //! locale : Montenegrin [me]
334
+ //! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac
335
+ var Dh={words:{m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&4>=a?b[1]:b[2]},translate:function(a,b,c){var d=Dh.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+Dh.correctGrammaticalCase(a,d)}};a.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",m:Dh.translate,mm:Dh.translate,h:Dh.translate,hh:Dh.translate,d:"dan",dd:Dh.translate,M:"mjesec",MM:Dh.translate,y:"godinu",yy:Dh.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),
336
+ //! moment.js locale configuration
337
+ //! locale : Maori [mi]
338
+ //! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal
339
+ a.defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}),
340
+ //! moment.js locale configuration
341
+ //! locale : Macedonian [mk]
342
+ //! author : Borislav Mickov : https://github.com/B0k0
343
+ a.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&20>c?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,doy:7}}),
344
+ //! moment.js locale configuration
345
+ //! locale : Malayalam [ml]
346
+ //! author : Floyd Pink : https://github.com/floydpink
347
+ a.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),monthsParseExact:!0,weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(a,b){return 12===a&&(a=0),"രാത്രി"===b&&a>=4||"ഉച്ച കഴിഞ്ഞ്"===b||"വൈകുന്നേരം"===b?a+12:a},meridiem:function(a,b,c){return 4>a?"രാത്രി":12>a?"രാവിലെ":17>a?"ഉച്ച കഴിഞ്ഞ്":20>a?"വൈകുന്നേരം":"രാത്രി"}});
348
+ //! moment.js locale configuration
349
+ //! locale : Marathi [mr]
350
+ //! author : Harshad Kale : https://github.com/kalehv
351
+ //! author : Vivek Athalye : https://github.com/vnathalye
352
+ var Eh={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},Fh={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:he,m:he,mm:he,h:he,hh:he,d:he,dd:he,M:he,MM:he,y:he,yy:he},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return Fh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Eh[a]})},meridiemParse:/रात्री|सकाळी|दुपारी|सायंकाळी/,meridiemHour:function(a,b){return 12===a&&(a=0),"रात्री"===b?4>a?a:a+12:"सकाळी"===b?a:"दुपारी"===b?a>=10?a:a+12:"सायंकाळी"===b?a+12:void 0},meridiem:function(a,b,c){return 4>a?"रात्री":10>a?"सकाळी":17>a?"दुपारी":20>a?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}}),
353
+ //! moment.js locale configuration
354
+ //! locale : Malay [ms-my]
355
+ //! note : DEPRECATED, the correct one is [ms]
356
+ //! author : Weldan Jamili : https://github.com/weldan
357
+ a.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"tengahari"===b?a>=11?a:a+12:"petang"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return 11>a?"pagi":15>a?"tengahari":19>a?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),
358
+ //! moment.js locale configuration
359
+ //! locale : Malay [ms]
360
+ //! author : Weldan Jamili : https://github.com/weldan
361
+ a.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"tengahari"===b?a>=11?a:a+12:"petang"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return 11>a?"pagi":15>a?"tengahari":19>a?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}});
362
+ //! moment.js locale configuration
363
+ //! locale : Burmese [my]
364
+ //! author : Squar team, mysquar.com
365
+ //! author : David Rossellat : https://github.com/gholadr
366
+ //! author : Tin Aung Lin : https://github.com/thanyawzinmin
367
+ var Gh={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},Hh={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"};a.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(a){return a.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,function(a){return Hh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Gh[a]})},week:{dow:1,doy:4}}),
368
+ //! moment.js locale configuration
369
+ //! locale : Norwegian Bokmål [nb]
370
+ //! authors : Espen Hovlandsdal : https://github.com/rexxars
371
+ //! Sigurd Gartmann : https://github.com/sigurdga
372
+ a.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});
373
+ //! moment.js locale configuration
374
+ //! locale : Nepalese [ne]
375
+ //! author : suvash : https://github.com/suvash
376
+ var Ih={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},Jh={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return Jh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Ih[a]})},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(a,b){return 12===a&&(a=0),"राति"===b?4>a?a:a+12:"बिहान"===b?a:"दिउँसो"===b?a>=10?a:a+12:"साँझ"===b?a+12:void 0},meridiem:function(a,b,c){return 3>a?"राति":12>a?"बिहान":16>a?"दिउँसो":20>a?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}});
377
+ //! moment.js locale configuration
378
+ //! locale : Dutch (Belgium) [nl-be]
379
+ //! author : Joris Röling : https://github.com/jorisroling
380
+ //! author : Jacob Middag : https://github.com/middagj
381
+ var Kh="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),Lh="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),Mh=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],Nh=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;a.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,b){return a?/-MMM-/.test(b)?Lh[a.month()]:Kh[a.month()]:Kh},monthsRegex:Nh,monthsShortRegex:Nh,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:Mh,longMonthsParse:Mh,shortMonthsParse:Mh,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}});
382
+ //! moment.js locale configuration
383
+ //! locale : Dutch [nl]
384
+ //! author : Joris Röling : https://github.com/jorisroling
385
+ //! author : Jacob Middag : https://github.com/middagj
386
+ var Oh="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),Ph="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),Qh=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],Rh=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;a.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,b){return a?/-MMM-/.test(b)?Ph[a.month()]:Oh[a.month()]:Oh},monthsRegex:Rh,monthsShortRegex:Rh,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:Qh,longMonthsParse:Qh,shortMonthsParse:Qh,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}}),
387
+ //! moment.js locale configuration
388
+ //! locale : Nynorsk [nn]
389
+ //! author : https://github.com/mechuwind
390
+ a.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});
391
+ //! moment.js locale configuration
392
+ //! locale : Punjabi (India) [pa-in]
393
+ //! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit
394
+ var Sh={1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"},Th={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"};a.defineLocale("pa-in",{months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(a){return a.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,function(a){return Th[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Sh[a]})},meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(a,b){return 12===a&&(a=0),"ਰਾਤ"===b?4>a?a:a+12:"ਸਵੇਰ"===b?a:"ਦੁਪਹਿਰ"===b?a>=10?a:a+12:"ਸ਼ਾਮ"===b?a+12:void 0},meridiem:function(a,b,c){return 4>a?"ਰਾਤ":10>a?"ਸਵੇਰ":17>a?"ਦੁਪਹਿਰ":20>a?"ਸ਼ਾਮ":"ਰਾਤ"},week:{dow:0,doy:6}});
395
+ //! moment.js locale configuration
396
+ //! locale : Polish [pl]
397
+ //! author : Rafal Hirsz : https://github.com/evoL
398
+ var Uh="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),Vh="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");a.defineLocale("pl",{months:function(a,b){return a?""===b?"("+Vh[a.month()]+"|"+Uh[a.month()]+")":/D MMMM/.test(b)?Vh[a.month()]:Uh[a.month()]:Uh},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedzielę o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W środę o] LT";case 6:return"[W sobotę o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:je,mm:je,h:je,hh:je,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:je,y:"rok",yy:je},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),
399
+ //! moment.js locale configuration
400
+ //! locale : Portuguese (Brazil) [pt-br]
401
+ //! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
402
+ a.defineLocale("pt-br",{months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"}),
403
+ //! moment.js locale configuration
404
+ //! locale : Portuguese [pt]
405
+ //! author : Jefferson : https://github.com/jalex79
406
+ a.defineLocale("pt",{months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}),a.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",m:"un minut",mm:ke,h:"o oră",hh:ke,d:"o zi",dd:ke,M:"o lună",MM:ke,y:"un an",yy:ke},week:{dow:1,doy:7}});var Wh=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];a.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:Wh,longMonthsParse:Wh,shortMonthsParse:Wh,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(a){if(a.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В следующее] dddd [в] LT";case 1:case 2:case 4:return"[В следующий] dddd [в] LT";case 3:case 5:case 6:return"[В следующую] dddd [в] LT"}},lastWeek:function(a){if(a.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:me,mm:me,h:"час",hh:me,d:"день",dd:me,M:"месяц",MM:me,y:"год",yy:me},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(a){return/^(дня|вечера)$/.test(a)},meridiem:function(a,b,c){return 4>a?"ночи":12>a?"утра":17>a?"дня":"вечера"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":return a+"-й";case"D":return a+"-го";case"w":case"W":return a+"-я";default:return a}},week:{dow:1,doy:4}});
407
+ //! moment.js locale configuration
408
+ //! locale : Sindhi [sd]
409
+ //! author : Narain Sagar : https://github.com/narainsagar
410
+ var Xh=["جنوري","فيبروري","مارچ","اپريل","مئي","جون","جولاءِ","آگسٽ","سيپٽمبر","آڪٽوبر","نومبر","ڊسمبر"],Yh=["آچر","سومر","اڱارو","اربع","خميس","جمع","ڇنڇر"];a.defineLocale("sd",{months:Xh,monthsShort:Xh,weekdays:Yh,weekdaysShort:Yh,weekdaysMin:Yh,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(a){return"شام"===a},meridiem:function(a,b,c){return 12>a?"صبح":"شام"},calendar:{sameDay:"[اڄ] LT",nextDay:"[سڀاڻي] LT",nextWeek:"dddd [اڳين هفتي تي] LT",lastDay:"[ڪالهه] LT",lastWeek:"[گزريل هفتي] dddd [تي] LT",sameElse:"L"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"},preparse:function(a){return a.replace(/،/g,",")},postformat:function(a){return a.replace(/,/g,"،")},week:{dow:1,doy:4}}),
411
+ //! moment.js locale configuration
412
+ //! locale : Northern Sami [se]
413
+ //! authors : Bård Rolstad Henriksen : https://github.com/karamell
414
+ a.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),
415
+ //! moment.js locale configuration
416
+ //! locale : Sinhalese [si]
417
+ //! author : Sampath Sitinamaluwa : https://github.com/sampathsris
418
+ a.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},dayOfMonthOrdinalParse:/\d{1,2} වැනි/,ordinal:function(a){return a+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(a){return"ප.ව."===a||"පස් වරු"===a},meridiem:function(a,b,c){return a>11?c?"ප.ව.":"පස් වරු":c?"පෙ.ව.":"පෙර වරු"}});
419
+ //! moment.js locale configuration
420
+ //! locale : Slovak [sk]
421
+ //! author : Martin Minka : https://github.com/k2s
422
+ //! based on work of petrbela : https://github.com/petrbela
423
+ var Zh="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),$h="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");a.defineLocale("sk",{months:Zh,monthsShort:$h,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:oe,m:oe,mm:oe,h:oe,hh:oe,d:oe,dd:oe,M:oe,MM:oe,y:oe,yy:oe},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),a.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:pe,m:pe,mm:pe,h:pe,hh:pe,d:pe,dd:pe,M:pe,MM:pe,y:pe,yy:pe},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),
424
+ //! moment.js locale configuration
425
+ //! locale : Albanian [sq]
426
+ //! author : Flakërim Ismani : https://github.com/flakerimi
427
+ //! author : Menelion Elensúle : https://github.com/Oire
428
+ //! author : Oerd Cukalla : https://github.com/oerd
429
+ a.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(a){return"M"===a.charAt(0)},meridiem:function(a,b,c){return 12>a?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});
430
+ //! moment.js locale configuration
431
+ //! locale : Serbian Cyrillic [sr-cyrl]
432
+ //! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
433
+ var _h={words:{m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&4>=a?b[1]:b[2]},translate:function(a,b,c){var d=_h.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+_h.correctGrammaticalCase(a,d)}};a.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){var a=["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",m:_h.translate,mm:_h.translate,h:_h.translate,hh:_h.translate,d:"дан",dd:_h.translate,M:"месец",MM:_h.translate,y:"годину",yy:_h.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});
434
+ //! moment.js locale configuration
435
+ //! locale : Serbian [sr]
436
+ //! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
437
+ var ai={words:{m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&4>=a?b[1]:b[2]},translate:function(a,b,c){var d=ai.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+ai.correctGrammaticalCase(a,d)}};a.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",m:ai.translate,mm:ai.translate,h:ai.translate,hh:ai.translate,d:"dan",dd:ai.translate,M:"mesec",MM:ai.translate,y:"godinu",yy:ai.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),
438
+ //! moment.js locale configuration
439
+ //! locale : siSwati [ss]
440
+ //! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies
441
+ a.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(a,b,c){return 11>a?"ekuseni":15>a?"emini":19>a?"entsambama":"ebusuku"},meridiemHour:function(a,b){return 12===a&&(a=0),"ekuseni"===b?a:"emini"===b?a>=11?a:a+12:"entsambama"===b||"ebusuku"===b?0===a?0:a+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}}),
442
+ //! moment.js locale configuration
443
+ //! locale : Swedish [sv]
444
+ //! author : Jens Alm : https://github.com/ulmus
445
+ a.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(e|a)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"e":1===b?"a":2===b?"a":"e";return a+c},week:{dow:1,doy:4}}),
446
+ //! moment.js locale configuration
447
+ //! locale : Swahili [sw]
448
+ //! author : Fahad Kassim : https://github.com/fadsel
449
+ a.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}});
450
+ //! moment.js locale configuration
451
+ //! locale : Tamil [ta]
452
+ //! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404
453
+ var bi={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},ci={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"};a.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},dayOfMonthOrdinalParse:/\d{1,2}வது/,ordinal:function(a){return a+"வது"},preparse:function(a){return a.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,function(a){return ci[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return bi[a]})},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(a,b,c){return 2>a?" யாமம்":6>a?" வைகறை":10>a?" காலை":14>a?" நண்பகல்":18>a?" எற்பாடு":22>a?" மாலை":" யாமம்"},meridiemHour:function(a,b){return 12===a&&(a=0),"யாமம்"===b?2>a?a:a+12:"வைகறை"===b||"காலை"===b?a:"நண்பகல்"===b&&a>=10?a:a+12},week:{dow:0,doy:6}}),
454
+ //! moment.js locale configuration
455
+ //! locale : Telugu [te]
456
+ //! author : Krishna Chaitanya Thota : https://github.com/kcthota
457
+ a.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:!0,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},dayOfMonthOrdinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(a,b){return 12===a&&(a=0),"రాత్రి"===b?4>a?a:a+12:"ఉదయం"===b?a:"మధ్యాహ్నం"===b?a>=10?a:a+12:"సాయంత్రం"===b?a+12:void 0},meridiem:function(a,b,c){return 4>a?"రాత్రి":10>a?"ఉదయం":17>a?"మధ్యాహ్నం":20>a?"సాయంత్రం":"రాత్రి"},week:{dow:0,doy:6}}),
458
+ //! moment.js locale configuration
459
+ //! locale : Tetun Dili (East Timor) [tet]
460
+ //! author : Joshua Brooks : https://github.com/joshbrooks
461
+ //! author : Onorio De J. Afonso : https://github.com/marobo
462
+ a.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sext_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Sex_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",m:"minutu ida",mm:"minutus %d",h:"horas ida",hh:"horas %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}),
463
+ //! moment.js locale configuration
464
+ //! locale : Thai [th]
465
+ //! author : Kridsada Thanabulpong : https://github.com/sirn
466
+ a.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(a){return"หลังเที่ยง"===a},meridiem:function(a,b,c){return 12>a?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}}),
467
+ //! moment.js locale configuration
468
+ //! locale : Tagalog (Philippines) [tl-ph]
469
+ //! author : Dan Hagman : https://github.com/hagmandan
470
+ a.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,doy:4}});
471
+ //! moment.js locale configuration
472
+ //! locale : Klingon [tlh]
473
+ //! author : Dominika Kruk : https://github.com/amaranthrose
474
+ var di="pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");a.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:qe,past:re,s:"puS lup",m:"wa’ tup",mm:se,h:"wa’ rep",hh:se,d:"wa’ jaj",dd:se,M:"wa’ jar",MM:se,y:"wa’ DIS",yy:se},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});
475
+ //! moment.js locale configuration
476
+ //! locale : Turkish [tr]
477
+ //! authors : Erhan Gundogan : https://github.com/erhangundogan,
478
+ //! Burak Yiğit Kaya: https://github.com/BYK
479
+ var ei={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};a.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},dayOfMonthOrdinalParse:/\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,ordinal:function(a){if(0===a)return a+"'ıncı";var b=a%10,c=a%100-b,d=a>=100?100:null;return a+(ei[b]||ei[c]||ei[d])},week:{dow:1,doy:7}}),
480
+ //! moment.js locale configuration
481
+ //! locale : Talossan [tzl]
482
+ //! author : Robin van der Vliet : https://github.com/robin0van0der0v
483
+ //! author : Iustì Canun
484
+ a.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(a){return"d'o"===a.toLowerCase()},meridiem:function(a,b,c){return a>11?c?"d'o":"D'O":c?"d'a":"D'A"},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:ue,m:ue,mm:ue,h:ue,hh:ue,d:ue,dd:ue,M:ue,MM:ue,y:ue,yy:ue},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),
485
+ //! moment.js locale configuration
486
+ //! locale : Central Atlas Tamazight Latin [tzm-latn]
487
+ //! author : Abdel Said : https://github.com/abdelsaid
488
+ a.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}}),
489
+ //! moment.js locale configuration
490
+ //! locale : Central Atlas Tamazight [tzm]
491
+ //! author : Abdel Said : https://github.com/abdelsaid
492
+ a.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}}),a.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:xe,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:ye("[Сьогодні "),nextDay:ye("[Завтра "),lastDay:ye("[Вчора "),nextWeek:ye("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return ye("[Минулої] dddd [").call(this);case 1:case 2:case 4:return ye("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:we,mm:we,h:"годину",hh:we,d:"день",dd:we,M:"місяць",MM:we,y:"рік",yy:we},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(a){return/^(дня|вечора)$/.test(a)},meridiem:function(a,b,c){return 4>a?"ночі":12>a?"ранку":17>a?"дня":"вечора"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a+"-й";case"D":return a+"-го";default:return a}},week:{dow:1,doy:7}});
493
+ //! moment.js locale configuration
494
+ //! locale : Urdu [ur]
495
+ //! author : Sawood Alam : https://github.com/ibnesayeed
496
+ //! author : Zack : https://github.com/ZackVision
497
+ var fi=["جنوری","فروری","مارچ","اپریل","مئی","جون","جولائی","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],gi=["اتوار","پیر","منگل","بدھ","جمعرات","جمعہ","ہفتہ"];
498
+ //! moment.js locale configuration
499
+ //! locale : Uzbek Latin [uz-latn]
500
+ //! author : Rasulbek Mirzayev : github.com/Rasulbeeek
501
+ //! moment.js locale configuration
502
+ //! locale : Uzbek [uz]
503
+ //! author : Sardor Muminov : https://github.com/muminoff
504
+ //! moment.js locale configuration
505
+ //! locale : Vietnamese [vi]
506
+ //! author : Bang Nguyen : https://github.com/bangnk
507
+ //! moment.js locale configuration
508
+ //! locale : Pseudo [x-pseudo]
509
+ //! author : Andrew Hood : https://github.com/andrewhood125
510
+ //! moment.js locale configuration
511
+ //! locale : Yoruba Nigeria [yo]
512
+ //! author : Atolagbe Abisoye : https://github.com/andela-batolagbe
513
+ //! moment.js locale configuration
514
+ //! locale : Chinese (China) [zh-cn]
515
+ //! author : suupic : https://github.com/suupic
516
+ //! author : Zeno Zeng : https://github.com/zenozeng
517
+ //! moment.js locale configuration
518
+ //! locale : Chinese (Hong Kong) [zh-hk]
519
+ //! author : Ben : https://github.com/ben-lin
520
+ //! author : Chris Lam : https://github.com/hehachris
521
+ //! author : Konstantin : https://github.com/skfd
522
+ //! moment.js locale configuration
523
+ //! locale : Chinese (Taiwan) [zh-tw]
524
+ //! author : Ben : https://github.com/ben-lin
525
+ //! author : Chris Lam : https://github.com/hehachris
526
+ return a.defineLocale("ur",{months:fi,monthsShort:fi,weekdays:gi,weekdaysShort:gi,weekdaysMin:gi,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(a){return"شام"===a},meridiem:function(a,b,c){return 12>a?"صبح":"شام"},calendar:{sameDay:"[آج بوقت] LT",nextDay:"[کل بوقت] LT",nextWeek:"dddd [بوقت] LT",lastDay:"[گذشتہ روز بوقت] LT",lastWeek:"[گذشتہ] dddd [بوقت] LT",sameElse:"L"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"},preparse:function(a){return a.replace(/،/g,",")},postformat:function(a){return a.replace(/,/g,"،")},week:{dow:1,doy:4}}),a.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}}),a.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}}),a.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(a){return/^ch$/i.test(a)},meridiem:function(a,b,c){return 12>a?c?"sa":"SA":c?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,doy:4}}),a.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:!0,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}),a.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},dayOfMonthOrdinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,doy:4}}),a.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah点mm分",LLLL:"YYYY年MMMD日ddddAh点mm分",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"下午"===b||"晚上"===b?a+12:a>=11?a:a+12},meridiem:function(a,b,c){var d=100*a+b;return 600>d?"凌晨":900>d?"早上":1130>d?"上午":1230>d?"中午":1800>d?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"周";default:return a}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}}),a.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日 HH:mm",LLLL:"YYYY年MMMD日dddd HH:mm",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"中午"===b?a>=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return 600>d?"凌晨":900>d?"早上":1130>d?"上午":1230>d?"中午":1800>d?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}}),a.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日 HH:mm",LLLL:"YYYY年MMMD日dddd HH:mm",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"中午"===b?a>=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return 600>d?"凌晨":900>d?"早上":1130>d?"上午":1230>d?"中午":1800>d?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}}),a.locale("en"),a});
libs/factory/bootstrap/assets/js-min/plugin.nouislider.min.js ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ /*! $.noUiSlider - WTFPL - refreshless.com/nouislider/ */
11
+ !function(a){function b(a){throw new RangeError("noUiSlider: "+a)}function c(a,c,d){(a[c]||a[d])&&a[c]===a[d]&&b("(Link) '"+c+"' can't match '"+d+"'.'")}function d(a){return"number"==typeof a&&!isNaN(a)&&isFinite(a)}function e(b){return a.isArray(b)?b:[b]}function f(a,b){a.addClass(b),setTimeout(function(){a.removeClass(b)},300)}function g(a,b){return 100*b/(a[1]-a[0])}function h(a,b){if(b>=a.d.slice(-1)[0])return 100;for(var c,d,e,f=1;b>=a.d[f];)f++;return c=a.d[f-1],d=a.d[f],e=a.c[f-1],c=[c,d],e+g(c,0>c[0]?b+Math.abs(c[0]):b-c[0])/(100/(a.c[f]-e))}function i(a,b){for(var c,d=1;b>=a.c[d];)d++;return a.m?(c=a.c[d-1],d=a.c[d],b-c>(d-c)/2?d:c):(a.h[d-1]?(c=a.h[d-1],d=a.c[d-1]+Math.round((b-a.c[d-1])/c)*c):d=b,d)}function j(d){void 0===d&&(d={}),"object"!=typeof d&&b("(Format) 'format' option must be an object.");var e={};a(J).each(function(a,c){void 0===d[c]?e[c]=K[a]:typeof d[c]==typeof K[a]?("decimals"===c&&(0>d[c]||7<d[c])&&b("(Format) 'format.decimals' option must be between 0 and 7."),e[c]=d[c]):b("(Format) 'format."+c+"' must be a "+typeof K[a]+".")}),c(e,"mark","thousand"),c(e,"prefix","negative"),c(e,"prefix","negativeBefore"),this.B=e}function k(b,c){if(!(this instanceof k))throw Error("Link: Don't use Link as a function. Use the 'new' keyword.");if(!b)throw new RangeError("Link: missing parameters.");this.g=b.format||{},this.update=!c;var d=this,e=b.target||function(){},f=b.method,g="string"==typeof e&&0===e.indexOf("-tooltip-"),h="string"==typeof e&&0!==e.indexOf("-"),i="function"==typeof e,j=e instanceof a||a.zepto&&a.zepto.isZ(e),l=j&&e.is("input, select, textarea"),m=j&&"function"==typeof f,n=j&&"string"==typeof f&&e[f];if(g)this.method=f||"html",this.j=a(e.replace("-tooltip-","")||"<div/>")[0];else if(h)this.method="val",this.j=document.createElement("input"),this.j.name=e,this.j.type="hidden";else{if(!i){if(j){if(f&&(m||n))return this.target=e,void(this.method=f);if(!f&&l)return this.method="val",this.target=e,void this.target.on("change",function(b){b=a(b.target).val();var c=d.q;d.u.val([c?null:b,c?b:null],{link:d})});if(!f&&!l)return this.method="html",void(this.target=e)}throw new RangeError("Link: Invalid Link.")}this.target=!1,this.method=e}}function l(a,c){d(c)||b("'step' is not numeric."),a.h[0]=c}function m(c,e){("object"!=typeof e||a.isArray(e))&&b("'range' is not an object."),a.each(e,function(e,f){var g;"number"==typeof f&&(f=[f]),a.isArray(f)||b("'range' contains invalid value."),g="min"===e?0:"max"===e?100:parseFloat(e),d(g)&&d(f[0])||b("'range' value isn't numeric."),c.c.push(g),c.d.push(f[0]),g?c.h.push(isNaN(f[1])?!1:f[1]):isNaN(f[1])||(c.h[0]=f[1])}),a.each(c.h,function(a,b){return b?void(c.h[a]=g([c.d[a],c.d[a+1]],b)/(100/(c.c[a+1]-c.c[a]))):!0})}function n(c,d){"number"==typeof d&&(d=[d]),(!a.isArray(d)||!d.length||2<d.length)&&b("'start' option is incorrect."),c.a=d.length,c.start=d}function o(a,c){a.m=c,"boolean"!=typeof c&&b("'snap' option must be a boolean.")}function p(a,c){"lower"===c&&1===a.a?a.i=1:"upper"===c&&1===a.a?a.i=2:!0===c&&2===a.a?a.i=3:!1===c?a.i=0:b("'connect' option was doesn't match handle count.")}function q(a,c){switch(c){case"horizontal":a.k=0;break;case"vertical":a.k=1;break;default:b("'orientation' option is invalid.")}}function r(a,c){2<a.c.length&&b("'margin' option is only supported on linear sliders."),a.margin=g(a.d,c),d(c)||b("'margin' option must be numeric.")}function s(a,c){switch(c){case"ltr":a.dir=0;break;case"rtl":a.dir=1,a.i=[0,2,1,3][a.i];break;default:b("'direction' option was not recognized.")}}function t(a,c){"string"!=typeof c&&b("'behaviour' must be a string containing options.");var d=0<=c.indexOf("snap");a.n={p:0<=c.indexOf("tap")||d,extend:0<=c.indexOf("extend"),s:0<=c.indexOf("drag"),fixed:0<=c.indexOf("fixed"),m:d}}function u(c,d,e){c.o=[d.lower,d.upper],c.g=new j(d.format),a.each(c.o,function(c,f){a.isArray(f)||b("'serialization."+(c?"upper":"lower")+"' must be an array."),a.each(f,function(){this instanceof k||b("'serialization."+(c?"upper":"lower")+"' can only contain Link instances."),this.q=c,this.u=e,this.scope=this.scope||e,this.g=new j(a.extend({},d.format,this.g))})}),c.dir&&1<c.a&&c.o.reverse()}function v(c,d){var e,f={c:[],d:[],h:[!1],margin:0};return e={step:{e:!1,f:l},range:{e:!0,f:m},start:{e:!0,f:n},snap:{e:!1,f:o},connect:{e:!0,f:p},orientation:{e:!1,f:q},margin:{e:!1,f:r},direction:{e:!0,f:s},behaviour:{e:!0,f:t},serialization:{e:!0,f:u}},c=a.extend({connect:!1,direction:"ltr",behaviour:"tap",orientation:"horizontal"},c),c.serialization=a.extend({lower:[],upper:[],format:{}},c.serialization),a.each(e,function(a,e){if(void 0===c[a]){if(!e.e)return!0;b("'"+a+"' is required.")}e.f(f,c[a],d)}),f.style=f.k?"top":"left",f}function w(b,c){var d=a("<div><div/></div>").addClass(I[2]),e=["-lower","-upper"];return b.dir&&e.reverse(),d.children().addClass(I[3]+" "+I[3]+e[c]),d}function x(b,c){return c.j&&(c=new k({target:a(c.j).clone().appendTo(b),method:c.method,format:c.g},!0)),c}function y(a,b){var c,d=[];for(c=0;c<a.a;c++){var e=d,f=c,g=a.o[c],h=b[c].children(),i=void 0,j=[];for(j.push(new k({format:a.g},!0)),i=0;i<g.length;i++)j.push(x(h,g[i]));e[f]=j}return d}function z(a,b,c){switch(a){case 1:b.addClass(I[7]),c[0].addClass(I[6]);break;case 3:c[1].addClass(I[6]);case 2:c[0].addClass(I[7]);case 0:b.addClass(I[6])}}function A(a,b){var c,d=[];for(c=0;c<a.a;c++)d.push(w(a,c).appendTo(b));return d}function B(b,c){return c.addClass([I[0],I[8+b.dir],I[4+b.k]].join(" ")),a("<div/>").appendTo(c).addClass(I[1])}function C(b,c,d){function e(){return r[["width","height"][c.k]]()}function g(a){var b,c=[u.val()];for(b=0;b<a.length;b++)u.trigger(a[b],c)}function j(b,d,e){var f=b[0]!==t[0][0]?1:0,g=v[0]+c.margin,h=v[1]-c.margin;return e&&1<t.length&&(d=f?Math.max(d,g):Math.min(d,h)),100>d&&(d=i(c,d)),d=Math.max(Math.min(parseFloat(d.toFixed(7)),100),0),d===v[f]?1===t.length?!1:d===g||d===h?0:!1:(b.css(c.style,d+"%"),b.is(":first-child")&&b.toggleClass(I[17],d>50),v[f]=d,c.dir&&(d=100-d),a(s[f]).each(function(){this.write(c,d,b.children(),u)}),!0)}function k(a,b,c){c||f(u,I[14]),j(a,b,!1),g(["slide","set","change"])}function l(a,b,d,e){a=a.replace(/\s/g,".nui ")+".nui",b.on(a,function(a){var b=u.attr("disabled");if(u.hasClass(I[14])||void 0!==b&&null!==b)return!1;a.preventDefault();var f,g,b=0===a.type.indexOf("touch"),h=0===a.type.indexOf("mouse"),i=0===a.type.indexOf("pointer"),j=a;0===a.type.indexOf("MSPointer")&&(i=!0),a.originalEvent&&(a=a.originalEvent),b&&(f=a.changedTouches[0].pageX,g=a.changedTouches[0].pageY),(h||i)&&(i||void 0!==window.pageXOffset||(window.pageXOffset=document.documentElement.scrollLeft,window.pageYOffset=document.documentElement.scrollTop),f=a.clientX+window.pageXOffset,g=a.clientY+window.pageYOffset),j.v=[f,g],j.cursor=h,a=j,a.l=a.v[c.k],d(a,e)})}function m(a,b){var c,d=b.a||t,f=!1,f=100*(a.l-b.start)/e(),h=d[0][0]!==t[0][0]?1:0,i=b.w;c=f+i[0],f+=i[1],1<d.length?(0>c&&(f+=Math.abs(c)),f>100&&(c-=f-100),c=[Math.max(Math.min(c,100),0),Math.max(Math.min(f,100),0)]):c=[c,f],f=j(d[0],c[h],1===d.length),1<d.length&&(f=j(d[1],c[h?0:1],!1)||f),f&&g(["slide"])}function n(b){a("."+I[15]).removeClass(I[15]),b.cursor&&a("body").css("cursor","").off(".nui"),F.off(".nui"),u.removeClass(I[12]),g(["set","change"])}function o(b,c){1===c.a.length&&c.a[0].children().addClass(I[15]),b.stopPropagation(),l(H.move,F,m,{start:b.l,a:c.a,w:[v[0],v[t.length-1]]}),l(H.end,F,n,null),b.cursor&&(a("body").css("cursor",a(b.target).css("cursor")),1<t.length&&u.addClass(I[12]),a("body").on("selectstart.nui",!1))}function p(b){var d=b.l,f=0;b.stopPropagation(),a.each(t,function(){f+=this.offset()[c.style]}),f=f/2>d||1===t.length?0:1,d-=r.offset()[c.style],d=100*d/e(),k(t[f],d,c.n.m),c.n.m&&o(b,{a:[t[f]]})}function q(a){var b=(a=a.l<r.offset()[c.style])?0:100;a=a?0:t.length-1,k(t[a],b,!1)}var r,s,t,u=a(b),v=[-1,-1];if(!u.is(":empty"))throw Error("Slider was already initialized.");r=B(c,u),t=A(c,r),s=y(c,t),z(c.i,u,t),function(a){var b;if(!a.fixed)for(b=0;b<t.length;b++)l(H.start,t[b].children(),o,{a:[t[b]]});a.p&&l(H.start,r,p,{a:t}),a.extend&&(u.addClass(I[16]),a.p&&l(H.start,u,q,{a:t})),a.s&&(b=r.find("."+I[7]).addClass(I[10]),a.fixed&&(b=b.add(r.children().not(b).children())),l(H.start,b,o,{a:t}))}(c.n),b.F=function(b,d,e,i,k){var l;for(c.dir&&1<c.a&&b.reverse(),k&&f(u,I[14]),l=0;l<(1<t.length?3:1);l++)k=e||s[l%2][0],k=k.valueOf(b[l%2]),!1!==k&&(k=h(c,k),c.dir&&(k=100-k),!0!==j(t[l%2],k,!0)&&a(s[l%2]).each(function(){this.write(c,v[l%2],t[l%2].children(),u,i)}));!0===d&&g(["set"])},b.D=function(){var a,b=[];for(a=0;a<c.a;a++)b[a]=s[a][0].A;return 1===b.length?b[0]:c.dir&&1<c.a?b.reverse():b},b.r=function(){return a.each(s,function(){a.each(this,function(){this.target&&this.target.off(".nui")})}),a(this).off(".nui").removeClass(I.join(" ")).empty(),d},u.val(c.start)}function D(a){this.length||b("Can't initialize slider on empty selection.");var c=v(a,this);return this.each(function(){C(this,c,a)})}function E(b){return this.each(function(){var c=a(this).val(),d=this.r(),e=a.extend({},d,b);a(this).noUiSlider(e),d.start===e.start&&a(this).val(c)})}var F=a(document),G=a.fn.val,H=window.navigator.G?{start:"pointerdown",move:"pointermove",end:"pointerup"}:window.navigator.msPointerEnabled?{start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}:{start:"mousedown touchstart",move:"mousemove touchmove",end:"mouseup touchend"},I="noUi-target noUi-base noUi-origin noUi-handle noUi-horizontal noUi-vertical noUi-background noUi-connect noUi-ltr noUi-rtl noUi-dragable noUi-state-drag noUi-state-tap noUi-active noUi-extended noUi-stacking".split(" "),J="decimals mark thousand prefix postfix encoder decoder negative negativeBefore".split(" "),K=[2,".","","","",function(a){return a},function(a){return a},"-",""];j.prototype.b=function(a){return this.B[a]},j.prototype.C=function(a){function b(a){return a.split("").reverse().join("")}a=this.b("encoder")(a);var c="",d="",e="",f="";return 0>a&&(c=this.b("negative"),d=this.b("negativeBefore")),a=Math.abs(a).toFixed(this.b("decimals")).toString(),a=a.split("."),0===parseFloat(a)&&(a[0]="0"),this.b("thousand")?(e=b(a[0]).match(/.{1,3}/g),e=b(e.join(b(this.b("thousand"))))):e=a[0],this.b("mark")&&1<a.length&&(f=this.b("mark")+a[1]),d+this.b("prefix")+c+e+f+this.b("postfix")},j.prototype.t=function(a){function b(a){return a.replace(/[\-\/\\\^$*+?.()|\[\]{}]/g,"\\$&")}var c;return null===a||void 0===a?!1:(a=a.toString(),c=a.replace(RegExp("^"+b(this.b("negativeBefore"))),""),a!==c?(a=c,c="-"):c="",a=a.replace(RegExp("^"+b(this.b("prefix"))),""),this.b.negative&&(c="",a=a.replace(RegExp("^"+b(this.b("negative"))),"-")),a=a.replace(RegExp(b(this.b("postfix"))+"$"),"").replace(RegExp(b(this.b("thousand")),"g"),"").replace(this.b("mark"),"."),a=this.b("decoder")(parseFloat(c+a)),isNaN(a)?!1:a)},k.prototype.write=function(a,b,c,d,e){if(!this.update||!1!==e){if(b>=100)b=a.d.slice(-1)[0];else{e=1;for(var f,g,h;b>=a.c[e];)e++;f=a.d[e-1],g=a.d[e],h=a.c[e-1],f=[f,g],b=100/(a.c[e]-h)*(b-h)*(f[1]-f[0])/100+f[0]}this.A=b=this.format(b),"function"==typeof this.method?this.method.call(this.target[0]||d[0],b,c,d):this.target[this.method](b,c,d)}},k.prototype.format=function(a){return this.g.C(a)},k.prototype.valueOf=function(a){return this.g.t(a)},a.noUiSlider={Link:k},a.fn.noUiSlider=function(a,b){return(b?E:D).call(this,a)},a.fn.val=function(){var b,c,d,f,g=Array.prototype.slice.call(arguments,0);return g.length?("object"==typeof g[1]?(b=g[1].set,c=g[1].link,d=g[1].update,f=g[1].animate):!0===g[1]&&(b=!0),this.each(function(){a(this).hasClass(I[0])?this.F(e(g[0]),b,c,d,f):G.apply(a(this),g)})):this.hasClass(I[0])?this[0].D():G.apply(this)}}(window.jQuery||window.Zepto);
libs/factory/bootstrap/assets/js-min/plugin.paddings-editor.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
3
+ * Webcraftic factory build
4
+ *
5
+ * Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Site: http://webcraftic.com
7
+ * Support: http://webcraftic.com/contact-us/
8
+ */
9
+
10
+ !function(a){var b=function(b){this.$element=a(b),this.$rectangle=this.$element.find(".factory-rectangle"),this.$center=this.$element.find(".factory-side-center"),this.$bar=this.$element.find(".factory-bar"),this.$sides=this.$element.find(".factory-side"),this.$result=this.$element.find(".factory-result"),this.units=this.$element.data("units"),this.rangeStart=this.$element.data("range-start"),this.rangeEnd=this.$element.data("range-end"),this.step=this.$element.data("step"),this._createCanvas(),this._createSlider(),this._initMouse(),this.selectSide("center")};b.prototype._createCanvas=function(){var b=this;this._recalculateSizes(),this.$canvas=a("<canvas width='"+b.elementWidth+"' height='"+b.elementHeight+"'>").appendTo(this.$rectangle),this.canvasContext=this.$canvas.get(0).getContext("2d"),this._redraw()},b.prototype._createSlider=function(){var a=this;this.$bar.noUiSlider({start:parseInt(a.$center.data("value")),range:{min:a.rangeStart,max:a.rangeEnd},step:a.step}),this.$bar.on("slide",function(){var b=parseInt(a.$bar.val()),c=b+a.units;"center"===a.activeSide?(a.$sides.data("value",b),a.$sides.find(".factory-visible-value").text(c)):(a.$activeSide.data("value",b),a.$activeSide.find(".factory-visible-value").text(c))}),this.$bar.on("set",function(){a.$result.val(a.getValue()),a.$result.trigger("change")})},b.prototype.getValue=function(){var a=this.$element.find(".factory-side-top").data("value"),b=this.$element.find(".factory-side-right").data("value"),c=this.$element.find(".factory-side-bottom").data("value"),d=this.$element.find(".factory-side-left").data("value");return a+this.units+" "+b+this.units+" "+c+this.units+" "+d+this.units},b.prototype.selectSide=function(a){this.activeSide!==a&&(this.activeSide=a,this.$activeSide=this.$element.find(".factory-side-"+this.activeSide),this.$element.find(".factory-side.factory-active").removeClass("factory-active"),this.$activeSide.addClass("factory-active"),this._redraw(),this.$bar.val(this.$activeSide.data("value")))},b.prototype._initMouse=function(){var a=this;this._recalculateSizes(),this.$rectangle.on("mousemove.paddings-editor",function(b){a.hoveredSide=a._getCurrentSide(b.pageX,b.pageY),a.hoveredSide!==a.lastHoveredSide&&(a.lastHoveredSide=a.hoveredSide,a._redraw())}),this.$rectangle.on("mouseleave.paddings-editor",function(b){a.hoveredSide=a.lastHoveredSide=null,a._redraw()}),this.$rectangle.on("click.paddings-editor",function(b){var c=a._getCurrentSide(b.pageX,b.pageY);a.selectSide(c)})},b.prototype._getCurrentSide=function(a,b){var c=this.$element.offset(),d=a-c.left,e=b-c.top,f=d-this.centerX,g=e-this.centerY,h=Math.sqrt(Math.pow(f,2)+Math.pow(g,2));if(h<=this.centerR)return"center";var i=this.elementHeight,j=this.elementWidth,k=-this.elementWidth*this.elementHeight,l=-(k+i*d)/j,m=-this.elementHeight,n=this.elementWidth,o=0,p=-(o+m*d)/n;return e>l&&p>e?"right":l>e&&e>p?"left":l>e&&p>e?"top":e>l&&e>p?"bottom":null},b.prototype._redraw=function(){this.canvasContext.clearRect(0,0,this.elementWidth,this.elementHeight),this._highlightSide("top","#a6b6b6"),this._highlightSide("bottom","#a6b6b6"),this._highlightSide("left","#aec0c0"),this._highlightSide("right","#aec0c0"),this._highlightSide(this.hoveredSide,"#c0cece"),this.activeSide&&this._highlightSide(this.activeSide,"#829595")},b.prototype._highlightSide=function(a,b){a&&"center"!==a&&(this.canvasContext.fillStyle=b,this.canvasContext.beginPath(),"top"===a?(this.canvasContext.moveTo(0,0),this.canvasContext.lineTo(this.centerX,this.centerY),this.canvasContext.lineTo(this.elementWidth,0)):"bottom"===a?(this.canvasContext.moveTo(0,this.elementHeight),this.canvasContext.lineTo(this.centerX,this.centerY),this.canvasContext.lineTo(this.elementWidth,this.elementHeight)):"left"===a?(this.canvasContext.moveTo(0,0),this.canvasContext.lineTo(this.centerX,this.centerY),this.canvasContext.lineTo(0,this.elementHeight)):"right"===a&&(this.canvasContext.moveTo(this.elementWidth,0),this.canvasContext.lineTo(this.centerX,this.centerY),this.canvasContext.lineTo(this.elementWidth,this.elementHeight)),this.canvasContext.closePath(),this.canvasContext.fill())},b.prototype._recalculateSizes=function(){this.elementOffset=this.$element.offset(),this.elementWidth=this.$rectangle.innerWidth(),this.elementHeight=this.$rectangle.innerHeight(),this.centerSize=this.$center.innerWidth(),this.centerR=this.centerSize/2,this.centerX=this.elementWidth/2,this.centerY=this.elementHeight/2},a.fn.factoryBootstrap421_paddingsEditor=function(c){if("string"==typeof c){var d=a(this).data("factory.paddings-editor");return d?d[c]():null}return this.each(function(){var c=a(this),d=c.data("factory.paddings-editor");d||c.data("factory.paddings-editor",d=new b(this))})},a.fn.factoryBootstrap421_paddingsEditor.Constructor=b,a(function(){a(".factory-bootstrap-421 .factory-paddings-editor").factoryBootstrap421_paddingsEditor()})}(jQuery);
libs/factory/bootstrap/boot.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Factory Bootstrap
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @since 1.0.0
7
+ * @package factory-bootstrap
8
+ * @copyright (c) 2018, Webcraftic Ltd
9
+ *
10
+ */
11
+
12
+ // Exit if accessed directly
13
+ if ( ! defined( 'ABSPATH' ) ) {
14
+ exit;
15
+ }
16
+
17
+ // module provides function only for the admin area
18
+ if ( ! is_admin() ) {
19
+ return;
20
+ }
21
+
22
+ if ( defined( 'FACTORY_BOOTSTRAP_421_LOADED' ) ) {
23
+ return;
24
+ }
25
+
26
+ define( 'FACTORY_BOOTSTRAP_421_VERSION', '4.2.1' );
27
+ define( 'FACTORY_BOOTSTRAP_421_LOADED', true );
28
+
29
+ if ( ! defined( 'FACTORY_FLAT_ADMIN' ) ) {
30
+ define( 'FACTORY_FLAT_ADMIN', true );
31
+ }
32
+
33
+ define( 'FACTORY_BOOTSTRAP_421_DIR', dirname( __FILE__ ) );
34
+ define( 'FACTORY_BOOTSTRAP_421_URL', plugins_url( null, __FILE__ ) );
35
+
36
+ require_once( FACTORY_BOOTSTRAP_421_DIR . '/includes/functions.php' );
37
+
38
+ /**
39
+ * @param Wbcr_Factory420_Plugin $plugin
40
+ */
41
+ add_action( 'wbcr_factory_bootstrap_421_plugin_created', function ( $plugin ) {
42
+ $manager = new Wbcr_FactoryBootstrap421_Manager( $plugin );
43
+ $plugin->setBootstap( $manager );
44
+ } );
45
+
46
+
libs/factory/bootstrap/includes/functions.php ADDED
@@ -0,0 +1,286 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This file manages assets of the Factory Bootstap.
4
+ *
5
+ * @author Alex Kovalev <alex@byonepress.com>
6
+ * @author Paul Kashtanoff <paul@byonepress.com>
7
+ * @since 1.0.0
8
+ * @package factory-bootstrap
9
+ * @copyright (c) 2018, OnePress Ltd
10
+ *
11
+ */
12
+
13
+ // Exit if accessed directly
14
+ if ( ! defined( 'ABSPATH' ) ) {
15
+ exit;
16
+ }
17
+
18
+ /**
19
+ * The Bootstrap Manager class.
20
+ *
21
+ * @since 3.2.0
22
+ */
23
+ class Wbcr_FactoryBootstrap421_Manager {
24
+
25
+ /**
26
+ * A plugin for which the manager was created.
27
+ *
28
+ * @since 3.2.0
29
+ * @var Wbcr_Factory420_Plugin
30
+ */
31
+ public $plugin;
32
+
33
+ /**
34
+ * Contains scripts to include.
35
+ *
36
+ * @since 3.2.0
37
+ * @var string[]
38
+ */
39
+ public $scripts = [];
40
+
41
+ /**
42
+ * Contains styles to include.
43
+ *
44
+ * @since 3.2.0
45
+ * @var string[]
46
+ */
47
+ public $styles = [];
48
+
49
+ /**
50
+ * Createas a new instance of the license api for a given plugin.
51
+ *
52
+ * @since 1.0.0
53
+ */
54
+ public function __construct( Wbcr_Factory420_Plugin $plugin ) {
55
+ $this->plugin = $plugin;
56
+
57
+ add_action( 'admin_enqueue_scripts', [ $this, 'loadAssets' ] );
58
+ add_filter( 'admin_body_class', [ $this, 'adminBodyClass' ] );
59
+ }
60
+
61
+ /**
62
+ * Includes the Bootstrap scripts.
63
+ *
64
+ * @since 3.2.0
65
+ *
66
+ * @param array|string $scripts
67
+ */
68
+ public function enqueueScript( $scripts ) {
69
+ if ( is_array( $scripts ) ) {
70
+ foreach ( $scripts as $script ) {
71
+ if ( ! in_array( $script, $this->scripts ) ) {
72
+ $this->scripts[] = $script;
73
+ }
74
+ }
75
+ } else {
76
+ if ( ! in_array( $scripts, $this->scripts ) ) {
77
+ $this->scripts[] = $scripts;
78
+ }
79
+ }
80
+ }
81
+
82
+ /**
83
+ * * Includes the Bootstrap styles.
84
+ *
85
+ * @since 3.2.0
86
+ *
87
+ * @param array|string $styles
88
+ */
89
+ public function enqueueStyle( $styles ) {
90
+
91
+ if ( is_array( $styles ) ) {
92
+ foreach ( $styles as $style ) {
93
+ if ( ! in_array( $style, $this->styles ) ) {
94
+ $this->styles[] = $style;
95
+ }
96
+ }
97
+ } else {
98
+ if ( ! in_array( $styles, $this->styles ) ) {
99
+ $this->styles[] = $styles;
100
+ }
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Loads Bootstrap assets.
106
+ *
107
+ * @since 3.2.0
108
+ * @return void
109
+ * @see admin_enqueue_scripts
110
+ *
111
+ */
112
+ public function loadAssets( $hook ) {
113
+
114
+ do_action( 'wbcr_factory_420_bootstrap_enqueue_scripts', $hook );
115
+ do_action( 'wbcr_factory_420_bootstrap_enqueue_scripts_' . $this->plugin->getPluginName(), $hook );
116
+
117
+ $dependencies = [];
118
+ if ( ! empty( $this->scripts ) ) {
119
+ $dependencies[] = 'jquery';
120
+ $dependencies[] = 'jquery-ui-core';
121
+ $dependencies[] = 'jquery-ui-widget';
122
+ }
123
+
124
+ foreach ( $this->scripts as $script ) {
125
+ switch ( $script ) {
126
+ case 'plugin.iris':
127
+ $dependencies[] = 'jquery-ui-widget';
128
+ $dependencies[] = 'jquery-ui-slider';
129
+ $dependencies[] = 'jquery-ui-draggable';
130
+ break;
131
+ }
132
+ }
133
+
134
+ if ( ! empty( $this->scripts ) ) {
135
+ $this->enqueueScripts( $this->scripts, 'js', $dependencies );
136
+ }
137
+ if ( ! empty( $this->styles ) ) {
138
+ $this->enqueueScripts( $this->styles, 'css', $dependencies );
139
+ }
140
+
141
+ $user_id = get_current_user_id();
142
+ $color_name = get_user_meta( $user_id, 'admin_color', true );
143
+
144
+ if ( $color_name !== 'fresh' ) {
145
+ if ( file_exists( FACTORY_BOOTSTRAP_421_DIR . '/assets/flat/css/bootstrap.' . $color_name . '.css' ) ) {
146
+ wp_enqueue_style( 'wbcr-factory-bootstrap-421-colors', FACTORY_BOOTSTRAP_421_URL . '/assets/flat/css/bootstrap.' . $color_name . '.css' );
147
+ }
148
+ }
149
+
150
+ if ( $color_name == 'light' ) {
151
+ $primary_dark = '#037c9a';
152
+ $primary_light = '#04a4cc';
153
+ } else if ( $color_name == 'blue' ) {
154
+ $primary_dark = '#d39323';
155
+ $primary_light = '#e1a948';
156
+ } else if ( $color_name == 'coffee' ) {
157
+ $primary_dark = '#b78a66';
158
+ $primary_light = '#c7a589';
159
+ } else if ( $color_name == 'ectoplasm' ) {
160
+ $primary_dark = '#839237';
161
+ $primary_light = '#a3b745';
162
+ } else if ( $color_name == 'ocean' ) {
163
+ $primary_dark = '#80a583';
164
+ $primary_light = '#9ebaa0';
165
+ } else if ( $color_name == 'midnight' ) {
166
+ $primary_dark = '#d02a21';
167
+ $primary_light = '#e14d43';
168
+ } else if ( $color_name == 'sunrise' ) {
169
+ $primary_dark = '#c36822';
170
+ $primary_light = '#dd823b';
171
+ } else {
172
+ $primary_dark = '#0074a2';
173
+ $primary_light = '#2ea2cc';
174
+ }
175
+
176
+ ?>
177
+ <script>
178
+ if( !window.factory ) {
179
+ window.factory = {};
180
+ }
181
+ if( !window.factory.factoryBootstrap421 ) {
182
+ window.factory.factoryBootstrap421 = {};
183
+ }
184
+ window.factory.factoryBootstrap421.colors = {
185
+ primaryDark: '<?php echo $primary_dark ?>',
186
+ primaryLight: '<?php echo $primary_light ?>'
187
+ };
188
+ </script>
189
+ <?php
190
+ }
191
+
192
+ /**
193
+ * @param array $sripts
194
+ * @param string $type
195
+ * @param array $dependencies
196
+ */
197
+ protected function enqueueScripts( array $sripts, $type = 'js', array $dependencies ) {
198
+
199
+ $is_first = true;
200
+
201
+ /**
202
+ * Sets permission for file caching and combining into one file.
203
+ *
204
+ * @since 4.1.0
205
+ */
206
+ $cache_enable = apply_filters( 'wbcr/factory/bootstrap/cache_enable', true );
207
+
208
+ $cache_id = md5( implode( ',', $this->scripts ) . $type . $this->plugin->getPluginVersion() );
209
+ $cache_dir_path = FACTORY_BOOTSTRAP_421_DIR . '/assets/cache/';
210
+ $cache_dir_url = FACTORY_BOOTSTRAP_421_URL . '/assets/cache/';
211
+
212
+ $cache_filepath = $cache_dir_path . $cache_id . ".min." . $type;
213
+ $cache_fileurl = $cache_dir_url . $cache_id . ".min." . $type;
214
+
215
+ if ( $cache_enable && file_exists( $cache_filepath ) ) {
216
+ if ( $type == 'js' ) {
217
+ wp_enqueue_script( 'wbcr-factory-bootstrap-' . $cache_id, $cache_fileurl, $dependencies, $this->plugin->getPluginVersion() );
218
+ } else {
219
+ wp_enqueue_style( 'wbcr-factory-bootstrap-' . $cache_id, $cache_fileurl, [], $this->plugin->getPluginVersion() );
220
+ }
221
+ } else {
222
+ $cache_dir_exists = false;
223
+ if ( ! file_exists( $cache_dir_path ) ) {
224
+ if ( @mkdir( $cache_dir_path, 0755 ) && wp_is_writable( $cache_dir_path ) ) {
225
+ $cache_dir_exists = true;
226
+ }
227
+ } else {
228
+ if ( wp_is_writable( $cache_dir_path ) ) {
229
+ $cache_dir_exists = true;
230
+ }
231
+ }
232
+
233
+ $concat_files = [];
234
+ foreach ( $sripts as $script_to_load ) {
235
+ $script_to_load = sanitize_text_field( $script_to_load );
236
+ if ( $cache_enable && $cache_dir_exists ) {
237
+ $fname = FACTORY_BOOTSTRAP_421_DIR . "/assets/$type-min/$script_to_load.min." . $type;
238
+ if ( file_exists( $fname ) ) {
239
+ $f = @fopen( $fname, 'r' );
240
+ $concat_files[] = @fread( $f, filesize( $fname ) );
241
+ @fclose( $f );
242
+ }
243
+ } else {
244
+ if ( $type == 'js' ) {
245
+ wp_enqueue_script( md5( $script_to_load ), FACTORY_BOOTSTRAP_421_URL . "/assets/$type-min/$script_to_load.min." . $type, $is_first ? $dependencies : false, $this->plugin->getPluginVersion() );
246
+ } else {
247
+ wp_enqueue_style( md5( $script_to_load ), FACTORY_BOOTSTRAP_421_URL . "/assets/$type-min/$script_to_load.min." . $type, [], $this->plugin->getPluginVersion() );
248
+ }
249
+ $is_first = false;
250
+ }
251
+ }
252
+
253
+ if ( $cache_enable && $cache_dir_exists && ! empty( $concat_files ) ) {
254
+
255
+ $cf = @fopen( $cache_filepath, 'w' );
256
+ $write_content = implode( PHP_EOL, $concat_files );
257
+ @fwrite( $cf, $write_content );
258
+ @fclose( $cf );
259
+ chmod( $cache_filepath, 0755 );
260
+
261
+ if ( file_exists( $cache_filepath ) ) {
262
+ if ( $type == 'js' ) {
263
+ wp_enqueue_script( 'wbcr-factory-bootstrap-' . $cache_id, $cache_fileurl, $dependencies, $this->plugin->getPluginVersion() );
264
+ } else {
265
+ wp_enqueue_style( 'wbcr-factory-bootstrap-' . $cache_id, $cache_fileurl, [], $this->plugin->getPluginVersion() );
266
+ }
267
+ }
268
+ }
269
+ }
270
+ }
271
+
272
+ /**
273
+ * Adds the body classes: 'factory-flat or 'factory-volumetric'.
274
+ *
275
+ * @since 3.2.0
276
+ *
277
+ * @param string $classes
278
+ *
279
+ * @return string
280
+ */
281
+ public function adminBodyClass( $classes ) {
282
+ $classes .= FACTORY_FLAT_ADMIN ? ' factory-flat ' : ' factory-volumetric ';
283
+
284
+ return $classes;
285
+ }
286
+ }
libs/factory/bootstrap/includes/index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ // Silence is golden.
libs/factory/bootstrap/index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ // Silence is golden.
libs/factory/core/README.md ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ # Core Factory Framework
2
+
3
+ It performs the connection of system modules of the framework, is responsible for migrations, plugin updates, admin notifications, initialization of the plugin.
libs/factory/core/boot.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Factory Plugin
4
+ *
5
+ * @author @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
6
+ * @since 1.0.0
7
+ * @package core
8
+ * @copyright (c) 2018, Webcraftic Ltd
9
+ *
10
+ */
11
+
12
+ // Exit if accessed directly
13
+ if ( ! defined( 'ABSPATH' ) ) {
14
+ exit;
15
+ }
16
+
17
+ if ( defined( 'FACTORY_420_LOADED' ) ) {
18
+ return;
19
+ }
20
+
21
+ define( 'FACTORY_420_LOADED', true );
22
+
23
+ define( 'FACTORY_420_VERSION', '4.2.0' );
24
+
25
+ define( 'FACTORY_420_DIR', dirname( __FILE__ ) );
26
+ define( 'FACTORY_420_URL', plugins_url( null, __FILE__ ) );
27
+
28
+ load_plugin_textdomain( 'wbcr_factory_420', false, dirname( plugin_basename( __FILE__ ) ) . '/langs' );
29
+
30
+ #comp merge
31
+ require_once( FACTORY_420_DIR . '/includes/functions.php' );
32
+
33
+ require_once( FACTORY_420_DIR . '/includes/entities/class-factory-paths.php' );
34
+ require_once( FACTORY_420_DIR . '/includes/entities/class-factory-support.php' );
35
+
36
+ require_once( FACTORY_420_DIR . '/includes/class-factory-requests.php' );
37
+ require_once( FACTORY_420_DIR . '/includes/class-factory-options.php' );
38
+ require_once( FACTORY_420_DIR . '/includes/class-factory-plugin-base.php' );
39
+ require_once( FACTORY_420_DIR . '/includes/class-factory-migrations.php' );
40
+ require_once( FACTORY_420_DIR . '/includes/class-factory-notices.php' );
41
+
42
+ // ASSETS
43
+ require_once( FACTORY_420_DIR . '/includes/assets-managment/class-factory-assets-list.php' );
44
+ require_once( FACTORY_420_DIR . '/includes/assets-managment/class-factory-script-list.php' );
45
+ require_once( FACTORY_420_DIR . '/includes/assets-managment/class-factory-style-list.php' );
46
+
47
+ // PREMIUM
48
+ require_once( FACTORY_420_DIR . '/includes/premium/class-factory-license-interface.php' );
49
+ require_once( FACTORY_420_DIR . '/includes/premium/class-factory-provider-abstract.php' );
50
+ require_once( FACTORY_420_DIR . '/includes/premium/class-factory-manager.php' );
51
+
52
+ // UPDATES
53
+ require_once( FACTORY_420_DIR . '/includes/updates/repositories/class-factory-repository-abstract.php' );
54
+ require_once( FACTORY_420_DIR . '/includes/updates/repositories/class-factory-wordpress.php' );
55
+ require_once( FACTORY_420_DIR . '/includes/updates/class-factory-upgrader.php' );
56
+ require_once( FACTORY_420_DIR . '/includes/updates/class-factory-premium-upgrader.php' );
57
+
58
+ require_once( FACTORY_420_DIR . '/includes/class-factory-plugin-abstract.php' );
59
+
60
+ require_once( FACTORY_420_DIR . '/includes/activation/class-factory-activator.php' );
61
+ require_once( FACTORY_420_DIR . '/includes/activation/class-factory-update.php' );
62
+ #endcomp
libs/factory/core/includes/activation/class-factory-activator.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The file contains a base class for plugin activators.
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
6
+ * @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
7
+ *
8
+ * @package factory-core
9
+ * @since 1.0.0
10
+ */
11
+ // Exit if accessed directly
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
+
16
+
17
+ /**
18
+ * Plugin Activator
19
+ *
20
+ * @since 1.0.0
21
+ */
22
+ abstract class Wbcr_Factory420_Activator {
23
+
24
+ /**
25
+ * Curent plugin.
26
+ *
27
+ * @var Wbcr_Factory420_Plugin
28
+ */
29
+ public $plugin;
30
+
31
+ public function __construct( Wbcr_Factory420_Plugin $plugin ) {
32
+ $this->plugin = $plugin;
33
+ }
34
+
35
+ public function activate() {
36
+ }
37
+
38
+ public function deactivate() {
39
+ }
40
+
41
+ public function update() {
42
+ }
43
+ }
libs/factory/core/includes/activation/class-factory-update.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The file contains a base class for update items of plugins.
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
6
+ * @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
7
+ *
8
+ * @package factory-core
9
+ * @since 1.0.0
10
+ */
11
+
12
+ // Exit if accessed directly
13
+ if ( ! defined( 'ABSPATH' ) ) {
14
+ exit;
15
+ }
16
+
17
+
18
+ /**
19
+ * Plugin Activator
20
+ *
21
+ * @since 1.0.0
22
+ */
23
+ abstract class Wbcr_Factory420_Update {
24
+
25
+ /**
26
+ * Current plugin
27
+ *
28
+ * @var Wbcr_Factory420_Plugin
29
+ */
30
+ var $plugin;
31
+
32
+ public function __construct( Wbcr_Factory420_Plugin $plugin ) {
33
+ $this->plugin = $plugin;
34
+ }
35
+
36
+ abstract function install();
37
+
38
+ //abstract function rollback();
39
+ }
libs/factory/core/includes/activation/index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ // Silence is golden.
libs/factory/core/includes/assets-managment/class-factory-assets-list.php ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The class contains a base class for all lists of assets.
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
6
+ * @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
7
+ *
8
+ * @package factory-core
9
+ * @since 1.0.0
10
+ */
11
+
12
+ // Exit if accessed directly
13
+ if ( ! defined( 'ABSPATH' ) ) {
14
+ exit;
15
+ }
16
+
17
+ /**
18
+ * Assets List
19
+ *
20
+ * @since 1.0.0
21
+ */
22
+ class Wbcr_Factory420_AssetsList {
23
+
24
+ protected $all = [];
25
+ public $header_place = [];
26
+ public $footer_place = [];
27
+ public $required = [];
28
+
29
+ protected $default_place;
30
+
31
+ /**
32
+ * @var Wbcr_Factory420_Plugin
33
+ */
34
+ protected $plugin;
35
+
36
+ /**
37
+ * @param Wbcr_Factory420_Plugin $plugin
38
+ * @param bool $defaultIsFooter
39
+ */
40
+ public function __construct( Wbcr_Factory420_Plugin $plugin, $defaultIsFooter = true ) {
41
+ $this->plugin = $plugin;
42
+
43
+ if ( $defaultIsFooter ) {
44
+ $this->default_place = &$this->footer_place;
45
+ }
46
+ if ( ! $defaultIsFooter ) {
47
+ $this->default_place = &$this->header_place;
48
+ }
49
+ }
50
+
51
+ /**
52
+ * Remove items from the collection
53
+ *
54
+ * @return $this
55
+ */
56
+ public function deregister() {
57
+ foreach ( func_get_args() as $item ) {
58
+
59
+ if ( ! is_string( $item ) ) {
60
+ return $this;
61
+ }
62
+
63
+ $key_in_all = array_search( $item, $this->all );
64
+ $key_in_default_place = array_search( $item, $this->default_place );
65
+ $key_in_header_place = array_search( $item, $this->header_place );
66
+ $key_inFooterPlace = array_search( $item, $this->footer_place );
67
+
68
+ if ( $key_in_all ) {
69
+ unset( $this->all[ $key_in_all ] );
70
+ }
71
+ if ( $key_in_default_place ) {
72
+ unset( $this->default_place[ $key_in_default_place ] );
73
+ }
74
+ if ( $key_in_header_place ) {
75
+ unset( $this->header_place[ $key_in_header_place ] );
76
+ }
77
+ if ( $key_inFooterPlace ) {
78
+ unset( $this->footer_place[ $key_inFooterPlace ] );
79
+ }
80
+ }
81
+
82
+ return $this;
83
+ }
84
+
85
+ /**
86
+ * Checks whether the collection is empty.
87
+ *
88
+ * @param string $source if the 'bootstrap' specified, checks only whether the bootstrap assets were required.
89
+ *
90
+ * @return boolean
91
+ */
92
+ public function isEmpty( $source = 'wordpress' ) {
93
+ if ( 'bootstrap' === $source ) {
94
+ return empty( $this->required[ $source ] );
95
+ }
96
+
97
+ return empty( $this->all ) && empty( $this->required );
98
+ }
99
+
100
+ public function IsHeaderEmpty() {
101
+ return empty( $this->header_place );
102
+ }
103
+
104
+ public function IsFooterEmpty() {
105
+ return empty( $this->footer_place );
106
+ }
107
+
108
+ /**
109
+ * Adds new items to the requried collection.
110
+ *
111
+ * @param mixed
112
+ */
113
+ public function request( $items, $source = 'wordpress' ) {
114
+
115
+ if ( is_array( $items ) ) {
116
+ foreach ( $items as $item ) {
117
+ $this->required[ $source ][] = $item;
118
+ }
119
+ } else {
120
+ $this->required[ $source ][] = $items;
121
+ }
122
+
123
+ return $this;
124
+ }
125
+ }
126
+
libs/factory/core/includes/assets-managment/class-factory-script-list.php ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The file contains a class to manage script assets.
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
6
+ * @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
7
+ *
8
+ * @package factory-core
9
+ * @since 1.0.0
10
+ */
11
+
12
+ // Exit if accessed directly
13
+ if ( ! defined( 'ABSPATH' ) ) {
14
+ exit;
15
+ }
16
+
17
+
18
+ /**
19
+ * Script List
20
+ *
21
+ * @since 1.0.0
22
+ */
23
+ class Wbcr_Factory420_ScriptList extends Wbcr_Factory420_AssetsList {
24
+
25
+ public $localize_data = [];
26
+ public $use_ajax = false;
27
+
28
+ /**
29
+ * Adds new items to the collection (default place).
30
+ *
31
+ * @param mixed
32
+ *
33
+ * @version 2.0
34
+ */
35
+ public function add( $file_url, $deps = [ 'jquery' ], $handle = null, $version = false, $place = 'default' ) {
36
+
37
+ if ( empty( $file_url ) ) {
38
+ return $this;
39
+ }
40
+
41
+ $resource = [];
42
+ $resource['file_url'] = $file_url;
43
+ $resource['deps'] = $deps;
44
+ $resource['handle'] = $handle;
45
+ $resource['version'] = $version;
46
+
47
+ $this->all[] = $resource;
48
+
49
+ switch ( $place ) {
50
+ case 'header':
51
+ $this->header_place[] = $resource;
52
+ break;
53
+ case 'footer':
54
+ $this->footer_place[] = $resource;
55
+ break;
56
+ default:
57
+ $this->default_place[] = $resource;
58
+ break;
59
+ }
60
+
61
+ return $this;
62
+ }
63
+
64
+ /**
65
+ * Adds new items to the collection (header).
66
+ *
67
+ * @param mixed
68
+ */
69
+ public function addToHeader( $file_url, $deps = [ 'jquery' ], $handle = null ) {
70
+ return $this->add( $file_url, $deps, $handle, 'header' );
71
+ }
72
+
73
+ /**
74
+ * Adds new items to the collection (footer).
75
+ *
76
+ * @param mixed
77
+ */
78
+ public function addToFooter( $file_url, $deps = [ 'jquery' ], $handle = null ) {
79
+ return $this->add( $file_url, $deps, $handle, 'footer' );
80
+ }
81
+
82
+ /**
83
+ * Осуществляет подключение всех зарегистрированных скриптов
84
+ *
85
+ * @param string $source
86
+ */
87
+ public function connect( $source = 'wordpress' ) {
88
+
89
+ // register all global required scripts
90
+ if ( ! empty( $this->required[ $source ] ) ) {
91
+ foreach ( $this->required[ $source ] as $script ) {
92
+ if ( 'wordpress' === $source ) {
93
+ wp_enqueue_script( $script );
94
+ } else if ( 'bootstrap' === $source ) {
95
+ $this->plugin->bootstrap->enqueueScript( $script );
96
+ }
97
+ }
98
+ }
99
+
100
+ if ( $source == 'bootstrap' ) {
101
+ return;
102
+ }
103
+
104
+ $is_first_script = true;
105
+ $is_footer = false;
106
+
107
+ // register all other scripts
108
+ foreach ( [ $this->header_place, $this->footer_place ] as $script_place ) {
109
+ foreach ( $script_place as $script ) {
110
+
111
+ if ( empty( $script['file_url'] ) ) {
112
+ continue;
113
+ }
114
+
115
+ $handle = ! empty( $script['handle'] ) ? $script['handle'] : $script['file_url'];
116
+ $deps = ! is_array( $script['deps'] ) ? [] : $script['deps'];
117
+ $version = ! empty( $script['version'] ) ? $script['version'] : $this->plugin->getPluginVersion();
118
+
119
+ wp_register_script( $handle, $script['file_url'], $deps, $version, $is_footer );
120
+
121
+ if ( $is_first_script && $this->use_ajax ) {
122
+ wp_localize_script( $handle, 'factory', [ 'ajaxurl' => admin_url( 'admin-ajax.php' ) ] );
123
+ }
124
+
125
+ if ( ! empty( $this->localize_data[ $handle ] ) ) {
126
+ wp_localize_script( $handle, $this->localize_data[ $handle ][0], $this->localize_data[ $handle ][1] );
127
+ }
128
+
129
+ wp_enqueue_script( $handle );
130
+
131
+ $is_first_script = false;
132
+ }
133
+
134
+ $is_footer = true;
135
+ }
136
+ }
137
+
138
+ /**
139
+ * Если вызвать этот метод, на странице будет обязательно добавлена
140
+ * глобальная JS переменная с ссылкой на ajax обработчик
141
+ */
142
+ public function useAjax() {
143
+ $this->use_ajax = true;
144
+ }
145
+
146
+ /**
147
+ * Регистрирует глобальную JS переменную с пользовательскими данными
148
+ *
149
+ * @param string $varname
150
+ * @param string $data
151
+ *
152
+ * @return Wbcr_Factory420_ScriptList $this
153
+ */
154
+ public function localize( $varname, $data ) {
155
+ $bindTo = count( $this->all ) == 0 ? null : end( $this->all );
156
+
157
+ if ( ! $bindTo ) {
158
+ return $this;
159
+ }
160
+
161
+ $this->localize_data[ $bindTo ] = [ $varname, $data ];
162
+
163
+ return $this;
164
+ }
165
+ }
166
+
libs/factory/core/includes/assets-managment/class-factory-style-list.php ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The file contains a class to manage style assets.
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
6
+ * @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
7
+ *
8
+ * @package factory-core
9
+ * @since 1.0.0
10
+ */
11
+
12
+ // Exit if accessed directly
13
+ if ( ! defined( 'ABSPATH' ) ) {
14
+ exit;
15
+ }
16
+
17
+
18
+ /**
19
+ * Style List
20
+ *
21
+ * @since 1.0.0
22
+ */
23
+ class Wbcr_Factory420_StyleList extends Wbcr_Factory420_AssetsList {
24
+
25
+ /**
26
+ * Adds new items to the collection (default place).
27
+ *
28
+ * @param mixed
29
+ *
30
+ * @version 2.0
31
+ */
32
+ public function add( $file_url, $deps = [], $handle = null, $version = false, $media = 'all' ) {
33
+
34
+ if ( empty( $file_url ) ) {
35
+ return $this;
36
+ }
37
+
38
+ $resource = [];
39
+ $resource['file_url'] = $file_url;
40
+ $resource['deps'] = $deps;
41
+ $resource['handle'] = $handle;
42
+ $resource['version'] = $version;
43
+ $resource['media'] = $media;
44
+
45
+ $this->all[] = $resource;
46
+
47
+ return $this;
48
+ }
49
+
50
+ public function connect( $source = 'wordpress' ) {
51
+ // register all global required scripts
52
+ if ( ! empty( $this->required[ $source ] ) ) {
53
+
54
+ foreach ( $this->required[ $source ] as $style ) {
55
+ if ( 'wordpress' === $source ) {
56
+ wp_enqueue_style( $style );
57
+ } else if ( 'bootstrap' === $source ) {
58
+ $this->plugin->bootstrap->enqueueStyle( $style );
59
+ }
60
+ }
61
+ }
62
+
63
+ if ( $source == 'bootstrap' ) {
64
+ return;
65
+ }
66
+
67
+ if ( empty( $this->all ) ) {
68
+ return;
69
+ }
70
+
71
+ // register all other styles
72
+ foreach ( $this->all as $style ) {
73
+
74
+ if ( empty( $style['file_url'] ) ) {
75
+ continue;
76
+ }
77
+
78
+ $handle = ! empty( $style['handle'] ) ? $style['handle'] : md5( $style['file_url'] );
79
+ $deps = ! is_array( $style['deps'] ) ? [] : $style['deps'];
80
+ $version = ! empty( $style['version'] ) ? $style['version'] : $this->plugin->getPluginVersion();
81
+
82
+ wp_enqueue_style( $handle, $style['file_url'], $deps, $version );
83
+ }
84
+ }
85
+ }
86
+
libs/factory/core/includes/assets-managment/index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ // Silence is golden.
libs/factory/core/includes/class-check-compatibility.php ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Проверяет совместимость с плагинами Webcraftic, с версиями php, с версиями Wordpress
5
+ *
6
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
7
+ * @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
8
+ *
9
+ * @version 1.0.0
10
+ * @since 4.0.8
11
+ */
12
+
13
+ if ( ! class_exists( 'Wbcr_Factory_Compatibility' ) ) {
14
+ class Wbcr_Factory_Compatibility {
15
+
16
+ protected $plugin_prefix;
17
+ protected $plugin_class_prefix;
18
+ protected $plugin_name;
19
+ protected $plugin_title = "(no title)";
20
+ protected $required_php_version = '5.3';
21
+ protected $required_wp_version = '4.2.0';
22
+
23
+ function __construct( array $plugin_info ) {
24
+ foreach ( (array) $plugin_info as $property => $value ) {
25
+ $this->$property = $value;
26
+ }
27
+
28
+ add_action( 'admin_init', [ $this, 'registerNotices' ] );
29
+ }
30
+
31
+ /**
32
+ * Метод проверяет совместимость плагина с php и wordpress версией
33
+ *
34
+ * @return bool
35
+ */
36
+ public function check() {
37
+ if ( ! $this->isPhpCompatibility() ) {
38
+ return false;
39
+ }
40
+
41
+ if ( ! $this->isWpCompatibility() ) {
42
+ return false;
43
+ }
44
+
45
+ return true;
46
+ }
47
+
48
+ /**
49
+ * Метод проверяет совместимость плагина с php версией сервера
50
+ *
51
+ * @return mixed
52
+ */
53
+ public function isPhpCompatibility() {
54
+ return version_compare( PHP_VERSION, $this->required_php_version, '>=' );
55
+ }
56
+
57
+ /**
58
+ * Метод проверяет совместимость плагина с Wordpress версией сайта
59
+ *
60
+ * @return mixed
61
+ */
62
+ public function isWpCompatibility() {
63
+ // Get the WP Version global.
64
+ global $wp_version;
65
+
66
+ return version_compare( $wp_version, $this->required_wp_version, '>=' );
67
+ }
68
+
69
+ /**
70
+ * Метод возвращает текст уведомления
71
+ *
72
+ * @return string
73
+ */
74
+ public function getNoticeText() {
75
+ $notice_text = $notice_default_text = '';
76
+ $notice_default_text .= '<b>' . $this->plugin_title . ' ' . __( 'warning', '' ) . ':</b>' . '<br>';
77
+
78
+ $notice_default_text .= sprintf( __( 'The %s plugin has stopped.', 'wbcr_factory_clearfy_000' ), $this->plugin_title ) . ' ';
79
+ $notice_default_text .= __( 'Possible reasons:', '' ) . ' <br>';
80
+
81
+ $has_one = false;
82
+
83
+ if ( ! $this->isPhpCompatibility() ) {
84
+ $has_one = true;
85
+ $notice_text .= '- ' . sprintf( __( 'You need to update the PHP version to %s or higher!', 'wbcr_factory_420' ), $this->required_php_version ) . '<br>';
86
+ }
87
+
88
+ if ( ! $this->isWpCompatibility() ) {
89
+ $has_one = true;
90
+ $notice_text .= '- ' . sprintf( __( 'You need to update WordPress to %s or higher!', 'wbcr_factory_420' ), $this->required_wp_version ) . '<br>';
91
+ }
92
+
93
+ if ( $has_one ) {
94
+ $notice_text = $notice_default_text . $notice_text;
95
+ }
96
+
97
+ return $notice_text;
98
+ }
99
+
100
+ public function registerNotices() {
101
+ if ( current_user_can( 'activate_plugins' ) && current_user_can( 'edit_plugins' ) && current_user_can( 'install_plugins' ) ) {
102
+ if ( is_multisite() ) {
103
+ add_action( 'network_admin_notices', [ $this, 'showNotice' ] );
104
+ }
105
+
106
+ add_action( 'admin_notices', [ $this, 'showNotice' ] );
107
+ }
108
+ }
109
+
110
+ public function showNotice() {
111
+ $notice_text = $this->getNoticeText();
112
+
113
+ if ( empty( $notice_text ) ) {
114
+ return;
115
+ }
116
+
117
+ $notice_text = '<p>' . $this->getNoticeText() . '</p>';
118
+
119
+ echo '<div class="notice notice-error">' . apply_filters( 'wbcr/factory/check_compatibility/notice_text', $notice_text, $this->plugin_name ) . '</div>';
120
+ }
121
+ }
122
+ }
libs/factory/core/includes/class-factory-migrations.php ADDED
@@ -0,0 +1,541 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WBCR\Factory_420;
4
+
5
+ use Exception;
6
+ use Wbcr_Factory420_Plugin;
7
+
8
+ if ( ! defined( 'ABSPATH' ) ) {
9
+ exit;
10
+ }
11
+
12
+ /**
13
+ * Often when updating plugins, you need to make some changes to the database.
14
+ * This class automatically checks for plugin migrations and executes them when
15
+ * updating.
16
+ *
17
+ * The class has a debug mode, to enable the debug mode add constants to your plugin:
18
+ * define ('FACTORY_MIGRATIONS_DEBUG', true) - enables/disables debugging mode
19
+ * define ('FACTORY_MIGRATIONS_FORCE_OLD_VERSION', '1.1.9') - sets previous version
20
+ * for the plugin, if constant isn't set, then the previous version is taken from
21
+ * the database.
22
+ *
23
+ * todo: get_option and get_site_option are used because some caching plugins caching options, which causes problems
24
+ *
25
+ *
26
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
27
+ * @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
28
+ *
29
+ * @since 4.1.1
30
+ */
31
+ class Migrations {
32
+
33
+ protected $plugin;
34
+
35
+ /**
36
+ * Migrations constructor.
37
+ *
38
+ * @param Wbcr_Factory420_Plugin $plugin
39
+ *
40
+ * @throws Exception
41
+ */
42
+ public function __construct( Wbcr_Factory420_Plugin $plugin ) {
43
+
44
+ $this->plugin = $plugin;
45
+ $plugin_name = $plugin->getPluginName();
46
+
47
+ if ( ! file_exists( $this->plugin->get_paths()->migrations ) ) {
48
+ throw new Exception( 'Starting with version 4.1.1 of the Core for Factory framework module, you must create a "migrations" folder in the root of your plugin to store the migration of the plugin.' );
49
+ }
50
+
51
+ if ( is_admin() ) {
52
+ add_action( "admin_init", [ $this, "check_migrations" ] );
53
+
54
+ add_action( "wbcr/factory/plugin_{$plugin_name}_activated", [ $this, 'activation_hook' ] );
55
+ add_action( "wbcr_factory_notices_000_list", [ $this, "debug_bar_notice" ], 10, 2 );
56
+ add_action( "wbcr_factory_notices_000_list", [ $this, "migration_error_notice" ], 10, 2 );
57
+ }
58
+ }
59
+
60
+ /**
61
+ * @author Alexander Kovalev <alex.kovalevv@gmail.com>
62
+ * @since 4.1.1
63
+ * @return mixed|void
64
+ */
65
+ public function get_plugin_activated_time() {
66
+ if ( $this->plugin->isNetworkActive() ) {
67
+ return get_site_option( $this->plugin->getOptionName( 'plugin_activated' ), 0 );
68
+ }
69
+
70
+ return get_option( $this->plugin->getOptionName( 'plugin_activated' ), 0 );
71
+ }
72
+
73
+ /**
74
+ * Check if migration is necessary for plugin and if there are errors from previous migrations.
75
+ * In debug mode, migrations are not performed automatically.
76
+ */
77
+ public function check_migrations() {
78
+ if ( $this->is_migration_error() && isset( $_GET['wbcr_factory_fix_migration_error'] ) ) {
79
+ $this->fix_migration_error();
80
+ wp_redirect( remove_query_arg( 'wbcr_factory_fix_migration_error' ) );
81
+ die();
82
+ }
83
+
84
+ if ( $this->is_debug() && isset( $_GET['wbcr_factory_test_migration'] ) ) {
85
+ $this->make_migration();
86
+ wp_redirect( remove_query_arg( 'wbcr_factory_test_migration' ) );
87
+ die();
88
+ }
89
+
90
+ if ( $this->need_migration() && ! $this->is_debug() ) {
91
+ $this->make_migration();
92
+ }
93
+ }
94
+
95
+ /**
96
+ * Notification displays the errors of outstanding migrations to fix errors
97
+ * you need to follow the instructions in the notification and click
98
+ * "I fixed, confirm migration".
99
+ *
100
+ * What is it for. Migrations are performed in background and on some sites,
101
+ * due to php errors or for some other reason, migration may be
102
+ * interrupted, because of what plugin will work incorrectly, you may lose settings.
103
+ *
104
+ * When creating new migrations, developer will add error handlers,
105
+ * and framework will intercept them safely for user and display them
106
+ * in this notice.
107
+ *
108
+ * @param array $notices
109
+ * @param static $plugin_name
110
+ *
111
+ * @return array
112
+ */
113
+ public function migration_error_notice( $notices, $plugin_name ) {
114
+
115
+ if ( $this->plugin->getPluginName() !== $plugin_name ) {
116
+ return $notices;
117
+ }
118
+
119
+ if ( ! $this->is_migration_error() || ! current_user_can( 'update_plugins' ) ) {
120
+ return $notices;
121
+ }
122
+
123
+ if ( $this->plugin->isNetworkActive() ) {
124
+ $migration_error_text = get_site_option( $this->plugin->getOptionName( 'plugin_migration_error' ), '' );
125
+ } else {
126
+ $migration_error_text = get_option( $this->plugin->getOptionName( 'plugin_migration_error' ), '' );
127
+ }
128
+
129
+ $fix_migration_error_url = add_query_arg( 'wbcr_factory_fix_migration_error', 1 );
130
+
131
+ $notice_text = $migration_error_text;
132
+ $notice_text .= "<br><br><a href='{$fix_migration_error_url}' class='button button-default'>" . __( 'I fixed, confirm migration', 'wbcr_factory_420' ) . "</a>";
133
+
134
+ $notices[] = [
135
+ 'id' => 'migration_debug_bar',
136
+ 'type' => 'error',
137
+ 'dismissible' => false,
138
+ 'dismiss_expires' => 0,
139
+ 'text' => '<p><b>' . $this->plugin->getPluginTitle() . ' ' . __( 'migration error', 'wbcr_factory_420' ) . '</b><br>' . $notice_text . '</p>'
140
+ ];
141
+
142
+ return $notices;
143
+ }
144
+
145
+ /**
146
+ * Debug panel, display some information from the database. Also allows
147
+ * perform manual migrations to test new migrations.
148
+ *
149
+ * @param array $notices
150
+ * @param string $plugin_name
151
+ *
152
+ * @return array
153
+ */
154
+ public function debug_bar_notice( $notices, $plugin_name ) {
155
+
156
+ if ( $this->plugin->getPluginName() !== $plugin_name ) {
157
+ return $notices;
158
+ }
159
+ if ( ! $this->is_debug() || ! current_user_can( 'update_plugins' ) ) {
160
+ return $notices;
161
+ }
162
+
163
+ $migrate_url = add_query_arg( 'wbcr_factory_test_migration', 1 );
164
+
165
+ $notice_text = __( "Plugin activated:", "wbcr_factory_420" ) . ' ' . date( "Y-m-d H:i:s", $this->get_plugin_activated_time() ) . "<br>";
166
+
167
+ $notice_text .= __( "Old plugin version (debug):", "wbcr_factory_420" ) . ' ' . $this->get_old_plugin_version() . "<br>";
168
+ $notice_text .= __( "Current plugin version:", "wbcr_factory_420" ) . ' ' . $this->get_current_plugin_version() . "<br>";
169
+ $notice_text .= __( "Need migration:", "wbcr_factory_420" ) . ' ' . ( $this->need_migration() ? "true" : "false" ) . "<br><br>";
170
+ $notice_text .= "<a href='{$migrate_url}' class='button button-default'>" . __( "Migrate now", "wbcr_factory_420" ) . "</a><br>";
171
+
172
+ $notices[] = [
173
+ 'id' => 'migration_debug_bar',
174
+ 'type' => 'warning',
175
+ 'dismissible' => false,
176
+ 'dismiss_expires' => 0,
177
+ 'text' => '<p><b style="color:red;">' . $this->plugin->getPluginTitle() . ' ' . __( 'migrations DEBUG bar', 'wbcr_factory_420' ) . '</b><br>' . $notice_text . '</p>'
178
+ ];
179
+
180
+ return $notices;
181
+ }
182
+
183
+ /**
184
+ * Runs when plugin is activated. Checks if you need to migrate
185
+ * and if necessary it does it. Also adds a option when the plugin
186
+ * was activated for the first time.
187
+ */
188
+ public function activation_hook() {
189
+ /*if ( $this->need_migration() && ! $this->is_debug() ) {
190
+ $this->make_migration();
191
+ }*/
192
+
193
+ // just time to know when the plugin was activated the first time
194
+ $activated = $this->get_plugin_activated_time();
195
+
196
+ if ( ! $activated ) {
197
+ if ( $this->plugin->isNetworkActive() ) {
198
+ update_site_option( $this->plugin->getOptionName( 'plugin_activated' ), time() );
199
+ update_site_option( $this->plugin->getOptionName( 'plugin_version' ), $this->get_current_plugin_version() );
200
+ } else {
201
+ update_option( $this->plugin->getOptionName( 'plugin_activated' ), time() );
202
+ update_option( $this->plugin->getOptionName( 'plugin_version' ), $this->get_current_plugin_version() );
203
+ }
204
+ }
205
+ }
206
+
207
+ /**
208
+ * Checks if debug mode of migrations from version x.x.x to x.x.y is enabled.
209
+ *
210
+ * @return bool
211
+ */
212
+ protected function is_debug() {
213
+ return defined( 'FACTORY_MIGRATIONS_DEBUG' ) && FACTORY_MIGRATIONS_DEBUG;
214
+ }
215
+
216
+ /**
217
+ * Gets previous version of plugin that plugin had before updating to the new version.
218
+ *
219
+ * @return string|null
220
+ */
221
+ protected function get_old_plugin_version() {
222
+
223
+ if ( $this->is_debug() && defined( 'FACTORY_MIGRATIONS_FORCE_OLD_VERSION' ) ) {
224
+ return FACTORY_MIGRATIONS_FORCE_OLD_VERSION;
225
+ }
226
+
227
+ if ( $this->plugin->isNetworkActive() ) {
228
+ $plugin_version = get_site_option( $this->plugin->getOptionName( 'plugin_version' ), null );
229
+ } else {
230
+ $plugin_version = get_option( $this->plugin->getOptionName( 'plugin_version' ), null );
231
+ }
232
+
233
+ if ( ! empty( $plugin_version ) ) {
234
+ return $plugin_version;
235
+ }
236
+
237
+ # TODO: Remove after few releases
238
+ # This block for compatibility code with old version of framework < 4.1.1
239
+ #-------------------------------------------
240
+ if ( $this->plugin->isNetworkActive() ) {
241
+ $plugin_versions = get_site_option( 'factory_plugin_versions', [] );
242
+ } else {
243
+ $plugin_versions = get_option( 'factory_plugin_versions', [] );
244
+ }
245
+
246
+ $plugin_version = isset( $plugin_versions[ $this->plugin->getPluginName() ] ) ? $plugin_versions[ $this->plugin->getPluginName() ] : null;
247
+
248
+ if ( ! empty( $plugin_version ) ) {
249
+ $plugin_version = str_replace( [ 'free-', 'premium-', 'offline-' ], '', $plugin_version );
250
+ }
251
+
252
+ #-------------------------------------------
253
+
254
+ return $plugin_version;
255
+ }
256
+
257
+ /**
258
+ * Gets the current version of plugin.
259
+ *
260
+ * @return string
261
+ */
262
+ protected function get_current_plugin_version() {
263
+ return $this->plugin->getPluginVersion();
264
+ }
265
+
266
+ /**
267
+ * Do I need migration for plugin? If previous migration was with a error, then
268
+ * method will always return false to prevent looping.
269
+ *
270
+ * @return mixed
271
+ */
272
+ protected function need_migration() {
273
+ if ( $this->is_migration_error() ) {
274
+ return false;
275
+ }
276
+
277
+ return version_compare( $this->get_old_plugin_version(), $this->get_current_plugin_version(), '<' );
278
+ }
279
+
280
+ /**
281
+ * Are there errors from previous migrations?
282
+ *
283
+ * @return bool
284
+ */
285
+ protected function is_migration_error() {
286
+ if ( $this->plugin->isNetworkActive() ) {
287
+ $error = get_site_option( $this->plugin->getOptionName( 'plugin_migration_error' ), false );
288
+ } else {
289
+ $error = get_option( $this->plugin->getOptionName( 'plugin_migration_error' ), false );
290
+ }
291
+
292
+ return $error !== false;
293
+ }
294
+
295
+ /**
296
+ * Remove an option in database, thereby fix errors of the previous migration.
297
+ */
298
+ protected function fix_migration_error() {
299
+ if ( $this->plugin->isNetworkActive() ) {
300
+ delete_site_option( $this->plugin->getOptionName( 'plugin_migration_error' ) );
301
+
302
+ return;
303
+ }
304
+
305
+ delete_option( $this->plugin->getOptionName( 'plugin_migration_error' ) );
306
+ }
307
+
308
+ /**
309
+ * Migrates the plugin from version x.x.x to x.x.y. Automatically searches for files
310
+ * migrations to the plugin's root directory and executes them. Default files
311
+ * migrations are stored in wp-content/plugins/plugin-name/migrations and have names
312
+ * 0x0x0x.php, which corresponds to the version x.x.x. Method executes those migration files
313
+ * versions of which are between the previous version of plugin and current one.
314
+ *
315
+ */
316
+ protected function make_migration() {
317
+
318
+ if ( ! current_user_can( 'update_plugins' ) ) {
319
+ return;
320
+ }
321
+
322
+ $old_plugin_version = $this->get_old_plugin_version();
323
+ $new_plugin_version = $this->get_current_plugin_version();
324
+
325
+ if ( empty( $old_plugin_version ) ) {
326
+ $this->update_plugin_version_in_db();
327
+ }
328
+
329
+ // converts versions like 0.0.0 to 000000
330
+ $old_number = $this->get_version_number( $old_plugin_version );
331
+ $new_number = $this->get_version_number( $new_plugin_version );
332
+
333
+ try {
334
+
335
+ $update_files = $this->plugin->get_paths()->migrations;
336
+ $files = $this->find_files( $update_files );
337
+
338
+ if ( empty( $files ) ) {
339
+ $this->update_plugin_version_in_db();
340
+
341
+ return;
342
+ }
343
+
344
+ // finds updates that has intermediate version
345
+ foreach ( (array) $files as $item ) {
346
+ if ( ! preg_match( '/^\d+$/', $item['name'] ) ) {
347
+ continue;
348
+ }
349
+
350
+ $item_number = intval( $item['name'] );
351
+
352
+ if ( $item_number > $old_number && $item_number <= $new_number ) {
353
+ $classes = $this->get_classes( $item['path'] );
354
+
355
+ if ( count( $classes ) == 0 ) {
356
+ continue;
357
+ }
358
+
359
+ foreach ( $classes as $path => $class_data ) {
360
+ include_once( $path );
361
+ $update_class = $class_data['name'];
362
+
363
+ $update = new $update_class( $this->plugin );
364
+ $update->install();
365
+ }
366
+ }
367
+ }
368
+
369
+ $this->update_plugin_version_in_db();
370
+ } catch( Exception $e ) {
371
+ if ( $this->plugin->isNetworkActive() ) {
372
+ update_site_option( $this->plugin->getOptionName( 'plugin_migration_error' ), $e->getMessage() );
373
+
374
+ return;
375
+ }
376
+ update_option( $this->plugin->getOptionName( 'plugin_migration_error' ), $e->getMessage() );
377
+ }
378
+ }
379
+
380
+ /**
381
+ * Updates version of plugin in database. So that we can track which
382
+ * previous version of plugin was at the user, before he updated
383
+ * plugin.
384
+ */
385
+ protected function update_plugin_version_in_db() {
386
+
387
+ # TODO: Delete after few releases
388
+ # This block for compatibility code with the old version of framework.
389
+ # Cleans up old data, after the transition to new version of framework.
390
+ #-------------------------------------------
391
+ if ( $this->plugin->isNetworkActive() ) {
392
+ $plugin_versions = get_site_option( 'factory_plugin_versions', [] );
393
+ } else {
394
+ $plugin_versions = get_option( 'factory_plugin_versions', [] );
395
+ }
396
+
397
+ if ( isset( $plugin_versions[ $this->plugin->getPluginName() ] ) ) {
398
+ unset( $plugin_versions[ $this->plugin->getPluginName() ] );
399
+ }
400
+
401
+ if ( $this->plugin->isNetworkActive() ) {
402
+ if ( empty( $plugin_versions ) ) {
403
+ delete_site_option( 'factory_plugin_versions' );
404
+ }
405
+ update_site_option( 'factory_plugin_versions', $plugin_versions );
406
+ update_site_option( $this->plugin->getOptionName( 'plugin_version' ), $this->get_current_plugin_version() );
407
+
408
+ return;
409
+ }
410
+
411
+ if ( empty( $plugin_versions ) ) {
412
+ delete_option( 'factory_plugin_versions' );
413
+ }
414
+
415
+ update_option( 'factory_plugin_versions', $plugin_versions );
416
+ update_option( $this->plugin->getOptionName( 'plugin_version' ), $this->get_current_plugin_version() );
417
+ }
418
+
419
+ /**
420
+ * Converts string representation of the version to the numeric.
421
+ *
422
+ * @since 1.0.0
423
+ *
424
+ * @param string $version A string version to convert.
425
+ *
426
+ * @return integer
427
+ */
428
+ protected function get_version_number( $version ) {
429
+ preg_match( '/(\d+)\.(\d+)\.(\d+)/', $version, $matches );
430
+ if ( count( $matches ) == 0 ) {
431
+ return false;
432
+ }
433
+
434
+ $number = '';
435
+ $number .= ( strlen( $matches[1] ) == 1 ) ? '0' . $matches[1] : $matches[1];
436
+ $number .= ( strlen( $matches[2] ) == 1 ) ? '0' . $matches[2] : $matches[2];
437
+ $number .= ( strlen( $matches[3] ) == 1 ) ? '0' . $matches[3] : $matches[3];
438
+
439
+ return intval( $number );
440
+ }
441
+
442
+ /**
443
+ * Returns a list of files at a given path.
444
+ *
445
+ * @param string $path path for search
446
+ */
447
+ private function find_files( $path ) {
448
+ return $this->find_file_or_folders( $path, true );
449
+ }
450
+
451
+ /**
452
+ * Returns a list of folders at a given path.
453
+ *
454
+ * @param string $path path for search
455
+ */
456
+ /*private function find_folders( $path ) {
457
+ return $this->find_file_or_folders( $path, false );
458
+ }*/
459
+
460
+ /**
461
+ * Returns a list of files or folders at a given path.
462
+ *
463
+ * @param string $path path for search
464
+ * @param bool $files files or folders?
465
+ */
466
+ private function find_file_or_folders( $path, $areFiles = true ) {
467
+ if ( ! is_dir( $path ) ) {
468
+ return [];
469
+ }
470
+
471
+ $entries = scandir( $path );
472
+ if ( empty( $entries ) ) {
473
+ return [];
474
+ }
475
+
476
+ $files = [];
477
+ foreach ( $entries as $entryName ) {
478
+ if ( $entryName == '.' || $entryName == '..' ) {
479
+ continue;
480
+ }
481
+
482
+ $filename = $path . '/' . $entryName;
483
+ if ( ( $areFiles && is_file( $filename ) ) || ( ! $areFiles && is_dir( $filename ) ) ) {
484
+ $files[] = [
485
+ 'path' => str_replace( "\\", "/", $filename ),
486
+ 'name' => $areFiles ? str_replace( '.php', '', $entryName ) : $entryName
487
+ ];
488
+ }
489
+ }
490
+
491
+ return $files;
492
+ }
493
+
494
+ /**
495
+ * Gets php classes defined in a specified file.
496
+ *
497
+ * @param string $path
498
+ *
499
+ * @throws Exception
500
+ */
501
+ private function get_classes( $path ) {
502
+
503
+ $phpCode = file_get_contents( $path );
504
+
505
+ $classes = [];
506
+
507
+ if ( ! function_exists( 'token_get_all' ) ) {
508
+ throw new Exception( __( 'There is no PHP Tokenizer extension installed on your server, you cannot use the token_get_all function.', 'wbcr_factory_420' ) );
509
+ }
510
+
511
+ $tokens = token_get_all( $phpCode );
512
+
513
+ $count = count( $tokens );
514
+ for ( $i = 2; $i < $count; $i ++ ) {
515
+ if ( is_array( $tokens ) && $tokens[ $i - 2 ][0] == T_CLASS && $tokens[ $i - 1 ][0] == T_WHITESPACE && $tokens[ $i ][0] == T_STRING ) {
516
+
517
+ $extends = null;
518
+ if ( $tokens[ $i + 2 ][0] == T_EXTENDS && $tokens[ $i + 4 ][0] == T_STRING ) {
519
+ $extends = $tokens[ $i + 4 ][1];
520
+ }
521
+
522
+ $class_name = $tokens[ $i ][1];
523
+ $classes[ $path ] = [
524
+ 'name' => $class_name,
525
+ 'extends' => $extends
526
+ ];
527
+ }
528
+ }
529
+
530
+ /**
531
+ * result example:
532
+ *
533
+ * $classes['/plugin/items/filename.php'] = array(
534
+ * 'name' => 'PluginNameItem',
535
+ * 'extendes' => 'PluginNameItemBase'
536
+ * )
537
+ */
538
+
539
+ return $classes;
540
+ }
541
+ }
libs/factory/core/includes/class-factory-notices.php ADDED
@@ -0,0 +1,281 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WBCR\Factory_420;
4
+
5
+ use Wbcr_Factory420_Plugin;
6
+
7
+ // Exit if accessed directly
8
+ if ( ! defined( 'ABSPATH' ) ) {
9
+ exit;
10
+ }
11
+
12
+ /**
13
+ * A class to manage notices.
14
+ *
15
+ * @since 1.0.0
16
+ */
17
+
18
+ /**
19
+ * A group of classes and methods to create and manage notices.
20
+ *
21
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
22
+ * @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
23
+ *
24
+ * @package factory-notices
25
+ * @since 1.0.0
26
+ */
27
+ class Notices {
28
+
29
+ /**
30
+ * @var Wbcr_Factory420_Plugin
31
+ */
32
+ protected $plugin;
33
+ /**
34
+ * @var array
35
+ */
36
+ protected $notices = [];
37
+
38
+ /**
39
+ * @var array
40
+ */
41
+ protected $default_where = [
42
+ 'plugins',
43
+ 'themes',
44
+ 'dashboard',
45
+ 'edit',
46
+ 'settings',
47
+ 'dashboard-network',
48
+ 'plugins-network',
49
+ 'themes-network',
50
+ 'settings-network',
51
+ ];
52
+
53
+ /**
54
+ * @var array
55
+ */
56
+ private $dissmised_notices;
57
+
58
+ /**
59
+ * Инициализируем уведомлений сразу после загрузки модуля уведомлений
60
+ *
61
+ * @param Wbcr_Factory420_Plugin $plugin
62
+ */
63
+ public function __construct( $plugin ) {
64
+ //default notices
65
+ //---
66
+
67
+ $this->plugin = $plugin;
68
+ $this->dissmised_notices = $this->plugin->getPopulateOption( 'factory_dismissed_notices', [] );
69
+
70
+ add_action( 'current_screen', [ $this, 'currentScreenAction' ] );
71
+
72
+ if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
73
+ add_action( 'wp_ajax_' . $this->plugin->getPluginName() . '_dismiss_notice', [
74
+ $this,
75
+ 'dismissNotice'
76
+ ] );
77
+ }
78
+ }
79
+
80
+ /**
81
+ * Регистрирует экшены для работы с уведомлениями на текущем экране странице.
82
+ * Уведомления собираются через фильтр wbcr_factory_admin_notices, если в массиве уведомлений,
83
+ * хотя бы одно, соответствует условиям в параметре $notice['where'], то метод печает вспомогательные скрипты и уведомления.
84
+ */
85
+ public function currentScreenAction() {
86
+ $this->notices = apply_filters( 'wbcr_factory_notices_000_list', $this->notices, $this->plugin->getPluginName() );
87
+
88
+ if ( count( $this->notices ) == 0 ) {
89
+ return;
90
+ }
91
+
92
+ $screen = get_current_screen();
93
+
94
+ $has_notices = false;
95
+ foreach ( (array) $this->notices as $notice ) {
96
+ if ( ! isset( $notice['id'] ) ) {
97
+ continue;
98
+ }
99
+
100
+ $where = ! isset( $notice['where'] ) || empty( $notice['where'] ) ? $this->default_where : $notice['where'];
101
+
102
+ if ( in_array( $screen->base, $where ) && ! $this->isDissmissed( $notice['id'] ) ) {
103
+ $has_notices = true;
104
+ break;
105
+ };
106
+ }
107
+
108
+ if ( $has_notices ) {
109
+ add_action( 'admin_footer', [ $this, 'printNoticesScripts' ] );
110
+
111
+ if ( $this->plugin->isNetworkActive() ) {
112
+ if ( current_user_can( 'manage_network' ) ) {
113
+ add_action( 'network_admin_notices', [ $this, 'showNotices' ] );
114
+ add_action( 'admin_notices', [ $this, 'showNotices' ] );
115
+ }
116
+ } else {
117
+ add_action( 'admin_notices', [ $this, 'showNotices' ] );
118
+ }
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Показывает все зарегистрированные уведомления для текущего плагина.
124
+ * Уведомления показываются только на определенных страницах через параметр $notice['where'],
125
+ * если уведомление ранее было скрыто или не соотвествует правилам $notice['where'], оно не будет показано!
126
+ */
127
+ public function showNotices() {
128
+ if ( count( $this->notices ) == 0 ) {
129
+ return;
130
+ }
131
+
132
+ if ( ! current_user_can( 'activate_plugins' ) || ! current_user_can( 'edit_plugins' ) || ! current_user_can( 'install_plugins' ) ) {
133
+ return;
134
+ }
135
+
136
+ $screen = get_current_screen();
137
+
138
+ foreach ( $this->notices as $notice ) {
139
+
140
+ if ( ! isset( $notice['id'] ) ) {
141
+ continue;
142
+ }
143
+
144
+ $where = ! isset( $notice['where'] ) || empty( $notice['where'] ) ? $this->default_where : $notice['where'];
145
+
146
+ if ( in_array( $screen->base, $where ) && ! $this->isDissmissed( $notice['id'] ) ) {
147
+ $this->showNotice( $notice );
148
+ };
149
+ }
150
+ }
151
+
152
+ /**
153
+ * Показывает уведомление, по переданным параметрам
154
+ *
155
+ * @param array $data - Параметры уведомления
156
+ * $data['id'] - Индентификатор уведомления
157
+ * $data['type'] - Тип уведомления (error, warning, success)
158
+ * $notice['where'] - На каких страницах показывать уведомление ('plugins', 'dashboard', 'edit')
159
+ * $data['text'] - Текст уведомления
160
+ * $data['dismissible'] - Если true, уведомление будет с кнопкой закрыть
161
+ * $data['dismiss_expires'] - Когда снова показать уведомление, нужно указывать время в unix timestamp.
162
+ * Пример time() + 3600 (1ч), уведомление будет скрыто на 1 час.
163
+ * $data['classes'] - Произвольный классы для контейнера уведомления.
164
+ */
165
+ public function showNotice( $data ) {
166
+ if ( ! isset( $data['id'] ) || empty( $data['id'] ) ) {
167
+ return;
168
+ }
169
+
170
+ if ( ! isset( $data['text'] ) || empty( $data['text'] ) ) {
171
+ return;
172
+ }
173
+
174
+ $type = ! isset( $data['type'] ) || empty( $data['type'] ) ? 'error' : $data['type'];
175
+
176
+ $dismissible = ! isset( $data['dismissible'] ) || empty( $data['dismissible'] ) ? false : $data['dismissible'];
177
+
178
+ $dismiss_expires = ! isset( $data['dismiss_expires'] ) || empty( $data['dismiss_expires'] ) ? 0 : $data['dismiss_expires'];
179
+
180
+ $classes = ! isset( $data['classes'] ) || empty( $data['classes'] ) ? [] : $data['classes'];
181
+
182
+ $plugin_name = str_replace( '_', '-', $this->plugin->getPluginName() );
183
+
184
+ $classes = array_merge( [
185
+ 'notice',
186
+ 'notice-' . $type,
187
+ $plugin_name . '-factory-notice'
188
+ ], $classes );
189
+
190
+ if ( $dismissible ) {
191
+ $classes[] = 'is-dismissible';
192
+ $classes[] = $plugin_name . '-factory-notice-dismiss';
193
+ }
194
+ ?>
195
+ <div data-name="wbcr_factory_notice_<?= esc_attr( $data['id'] ) ?>" data-expires="<?= esc_attr( $dismiss_expires ) ?>" data-nonce="<?= esc_attr( wp_create_nonce( $this->plugin->getPluginName() . '_factory_dismiss_notice' ) ); ?>" class="<?= esc_attr( implode( ' ', $classes ) ) ?>">
196
+ <?= $data['text'] ?>
197
+ </div>
198
+ <?php
199
+ }
200
+
201
+ /**
202
+ * Когда пользователь нажимает кнопку закрыть уведомление,
203
+ * отправляется ajax запрос с вызовом текущего метода
204
+ */
205
+ public function dismissNotice() {
206
+ check_admin_referer( $this->plugin->getPluginName() . '_factory_dismiss_notice', 'nonce' );
207
+
208
+ // Имя уведомления (идентификатор)
209
+ $name = empty( $_POST['name'] ) ? null : sanitize_text_field( $_POST['name'] );
210
+
211
+ // Время в Unix timestamp, по истечению, которого уведомление снова будет показано
212
+ // Если передан 0, то уведомление будет скрыто навсегда
213
+ $expires = ! isset( $_POST['expires'] ) || empty( $_POST['expires'] ) ? 0 : (int) $_POST['expires'];
214
+
215
+ if ( empty( $name ) ) {
216
+ echo json_encode( [ 'error' => 'Attribute name is empty!' ] );
217
+ exit;
218
+ }
219
+
220
+ $notices = $this->plugin->getPopulateOption( "factory_dismissed_notices", [] );
221
+
222
+ if ( ! empty( $notices ) ) {
223
+ foreach ( (array) $notices as $notice_id => $notice_expires ) {
224
+ if ( $notice_expires !== 0 && $notice_expires < time() ) {
225
+ unset( $notices[ $notice_id ] );
226
+ }
227
+ }
228
+ }
229
+
230
+ $notices[ $name ] = $expires;
231
+
232
+ $this->plugin->updatePopulateOption( 'factory_dismissed_notices', $notices );
233
+
234
+ echo json_encode( [ 'success' => 'ok' ] );
235
+ exit;
236
+ }
237
+
238
+ /**
239
+ * Javascript code
240
+ * Печает в подвале страницы код, для взаимодействия с сервером через ajax,
241
+ * код используется при нажатии на кнопку закрыть уведомление. *
242
+ */
243
+ public function printNoticesScripts() {
244
+ $plugin_name = str_replace( '_', '-', $this->plugin->getPluginName() );
245
+
246
+ ?>
247
+ <script type="text/javascript">
248
+ jQuery(function($) {
249
+
250
+ $(document).on('click', '.<?php echo $plugin_name; ?>-factory-notice-dismiss .notice-dismiss', function() {
251
+ $.post(ajaxurl, {
252
+ 'action': '<?php echo $this->plugin->getPluginName(); ?>_dismiss_notice',
253
+ 'name': $(this).parent().data('name'),
254
+ 'expires': $(this).parent().data('expires'),
255
+ 'nonce': $(this).parent()