Spam protection, AntiSpam, FireWall by CleanTalk - Version 5.133

Version Description

January 20 2020 = * Upd: Rebuilding users/comments scan * Fix: UltimateMember - form validation checking fixed. * Fix: Exclusion for login form. * Fix: Disable scripts on excluded pages. * Fix: PHP 7.4 compability. * Minor fixes. * Spam protection improved.

Download this release

Release Info

Developer glomberg
Plugin Icon 128x128 Spam protection, AntiSpam, FireWall by CleanTalk
Version 5.133
Comparing to
See all releases

Code changes from version 5.132.3 to 5.133

Files changed (51) hide show
  1. cleantalk.php +4 -4
  2. css/cleantalk-admin-settings-page.min.css +1 -1
  3. css/cleantalk-spam-check.min.css +1 -1
  4. css/jquery-ui.min.css +4 -4
  5. css/jquery-ui.theme.min.css +5 -0
  6. i18n/cleantalk-ru_RU.mo +0 -0
  7. i18n/cleantalk-ru_RU.po +1536 -1536
  8. inc/ClassApbctListTable.php +1434 -0
  9. inc/cleantalk-admin.php +29 -99
  10. inc/cleantalk-ajax.php +1 -0
  11. inc/cleantalk-autoloader.php +21 -21
  12. inc/cleantalk-comments.php +0 -726
  13. inc/cleantalk-find-spam.php +57 -0
  14. inc/cleantalk-public.php +11 -2
  15. inc/cleantalk-updater.php +19 -0
  16. inc/cleantalk-users.php +0 -802
  17. inc/find-spam/ClassCleantalkCommentsListTable.php +302 -0
  18. inc/find-spam/ClassCleantalkCommentsListTableLogs.php +63 -0
  19. inc/find-spam/ClassCleantalkCommentsListTableScan.php +42 -0
  20. inc/find-spam/ClassCleantalkCommentsListTableSpam.php +42 -0
  21. inc/find-spam/ClassCleantalkFindSpamChecker.php +132 -0
  22. inc/find-spam/ClassCleantalkFindSpamCommentsChecker.php +448 -0
  23. inc/find-spam/ClassCleantalkFindSpamPage.php +136 -0
  24. inc/find-spam/ClassCleantalkFindSpamUsersChecker.php +535 -0
  25. inc/find-spam/ClassCleantalkUsersListTable.php +263 -0
  26. inc/find-spam/ClassCleantalkUsersListTableLogs.php +63 -0
  27. inc/find-spam/ClassCleantalkUsersListTableScan.php +47 -0
  28. inc/find-spam/ClassCleantalkUsersListTableSpam.php +55 -0
  29. js/apbct-disable-comments.min.js +2 -0
  30. js/apbct-disable-comments.min.js.map +1 -0
  31. js/apbct-public.min.js +2 -2
  32. js/apbct-public.min.js.map +1 -1
  33. js/cleantalk-comments-checkspam.min.js +2 -2
  34. js/cleantalk-comments-checkspam.min.js.map +1 -1
  35. js/cleantalk-users-checkspam.min.js +2 -2
  36. js/cleantalk-users-checkspam.min.js.map +1 -1
  37. js/cleantalk_nocache.min.js +1 -1
  38. js/cleantalk_nocache.min.js.map +1 -1
  39. js/jquery-ui.min.js +10 -7
  40. lib/Cleantalk/Antispam/Helper.php +3 -3
  41. lib/Cleantalk/Common/Cookie.php +51 -51
  42. lib/Cleantalk/Common/Get.php +51 -51
  43. lib/Cleantalk/Common/Post.php +52 -52
  44. lib/Cleantalk/Common/Request.php +47 -47
  45. lib/Cleantalk/Common/Server.php +82 -82
  46. lib/Cleantalk/Common/ServerVariables.php +83 -83
  47. lib/CleantalkState.php +19 -3
  48. lib/CleantalkUpgraderSkin_Deprecated.php +44 -44
  49. lib/autoloader.php +23 -0
  50. readme.txt +15 -19
  51. templates/empty_comments.php +2 -0
cleantalk.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Anti-Spam by CleanTalk
4
  Plugin URI: https://cleantalk.org
5
  Description: Max power, all-in-one, no Captcha, premium anti-spam plugin. No comment spam, no registration spam, no contact spam, protects any WordPress forms.
6
- Version: 5.132.3
7
  Author: СleanTalk <welcome@cleantalk.org>
8
  Author URI: https://cleantalk.org
9
  Text Domain: cleantalk
@@ -120,6 +120,7 @@ if( !defined( 'CLEANTALK_PLUGIN_DIR' ) ){
120
  define('APBCT_TBL_FIREWALL_DATA', $apbct->db_prefix . 'cleantalk_sfw'); // Table with firewall data.
121
  define('APBCT_TBL_FIREWALL_LOG', $apbct->db_prefix . 'cleantalk_sfw_logs'); // Table with firewall logs.
122
  define('APBCT_TBL_SESSIONS', $apbct->db_prefix . 'cleantalk_sessions'); // Table with session data.
 
123
  define('APBCT_SELECT_LIMIT', 5000); // Select limit for logs.
124
  define('APBCT_WRITE_LIMIT', 5000); // Write limit for firewall data.
125
 
@@ -273,9 +274,8 @@ if( !defined( 'CLEANTALK_PLUGIN_DIR' ) ){
273
 
274
  // Admin panel actions
275
  if (is_admin() || is_network_admin()){
276
-
277
- require_once(CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-comments.php');
278
- require_once(CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-users.php');
279
  require_once(CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-admin.php');
280
  require_once(CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-settings.php');
281
 
3
  Plugin Name: Anti-Spam by CleanTalk
4
  Plugin URI: https://cleantalk.org
5
  Description: Max power, all-in-one, no Captcha, premium anti-spam plugin. No comment spam, no registration spam, no contact spam, protects any WordPress forms.
6
+ Version: 5.133
7
  Author: СleanTalk <welcome@cleantalk.org>
8
  Author URI: https://cleantalk.org
9
  Text Domain: cleantalk
120
  define('APBCT_TBL_FIREWALL_DATA', $apbct->db_prefix . 'cleantalk_sfw'); // Table with firewall data.
121
  define('APBCT_TBL_FIREWALL_LOG', $apbct->db_prefix . 'cleantalk_sfw_logs'); // Table with firewall logs.
122
  define('APBCT_TBL_SESSIONS', $apbct->db_prefix . 'cleantalk_sessions'); // Table with session data.
123
+ define('APBCT_SPAMSCAN_LOGS', $apbct->db_prefix . 'cleantalk_spamscan_logs'); // Table with session data.
124
  define('APBCT_SELECT_LIMIT', 5000); // Select limit for logs.
125
  define('APBCT_WRITE_LIMIT', 5000); // Write limit for firewall data.
126
 
274
 
275
  // Admin panel actions
276
  if (is_admin() || is_network_admin()){
277
+
278
+ require_once( CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-find-spam.php' );
 
279
  require_once(CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-admin.php');
280
  require_once(CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-settings.php');
281
 
css/cleantalk-admin-settings-page.min.css CHANGED
@@ -1 +1 @@
1
- #apbctTopWarning{margin-bottom:5px}#apbctTopWarning h3{margin:10px 0 5px}#apbctTopWarning h4{margin:10px}#apbctTopWarning h4 span{margin-top:5px}.apbct_settings-subtitle{position:relative;top:-15px;margin:0}.apbct_settings-field_wrapper{margin:15px 0}.apbct_settings-field_wrapper--sub{margin-left:30px!important}.apbct_settings__label{margin-right:10px;font-size:17px;vertical-align:text-bottom}.apbct_settings-field_content{display:inline-block}.apbct_settings-field_content--radio{width:70%}.apbct_settings-field_title--radio{display:inline-block;margin:0;width:210px;padding-right:10px;font-size:14px;vertical-align:top}.apbct_input_text{min-width:255px;width:400px}.apbct_settings-field--api_key{font-size:14pt}.apbct_settings-long_description---show:hover{color:#aaa;cursor:pointer}.cleantalk_link{text-decoration:none;font-size:13px;line-height:26px;margin:0;padding:0 10px 1px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.cleantalk_link-auto{background:#ccc;border-color:#999;-webkit-box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);color:#000;display:inline-block;height:28px;-webkit-border-radius:2px;border-radius:2px}.cleantalk_link-auto:hover{color:#fff}.cleantalk_link-manual{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;display:inline-block;-webkit-border-radius:3px;border-radius:3px;text-align:center}.cleantalk_link-manual:hover{color:#000}.cleantalk_link[disabled=disabled]{background:#5d9db5;color:#000}.apbct_status_icon{vertical-align:text-bottom;margin:0 5px 0 8px}a.ct_support_link{color:#666;margin-right:.5em;font-size:10pt;font-weight:400}.ct-warning-test-failed{display:inline-block;position:relative;padding:5px;margin:4px;border:3px solid rgba(240,50,50,1);border-radius:5px;background-color:rgba(255,200,200,1)}.ct_settings_banner{text-align:right;display:inline-block;width:100%;margin:1em 0;vertical-align:top}#ct_translate_plugin{margin-left:0}.ct_rate_block{display:inline-block;width:370px;margin-right:3em;padding:.8em .8em 15px;text-align:center;border:1px dashed #666}#ct_translate_plugin .apbct_button_rate{margin-bottom:10px}.apbct_long_desc{position:absolute;background:#5a5a5a;min-width:80px;min-height:80px;max-width:500px;padding:10px;color:#fff;z-index:10}i.animate-spin{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;display:inline-block;font-size:25px;line-height:20px;color:rgba(120,200,230,1);margin:25px}@keyframes spin{to{transform:rotate(359deg)}}.apbct_long_desc__cancel{position:absolute;top:5px;right:5px;color:rgba(255,255,255,.5)}.apbct_long_desc__cancel:hover{color:#fff}.apbct_long_desc__angle{position:absolute;top:5px;left:-17px;width:10px;height:10px;background:#5a5a5a;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.apbct_long_desc__title{color:rgba(120,200,230,1);margin:0}
1
+ .apbct_settings-field_content,.cleantalk_link-auto,.cleantalk_link-manual,.ct-warning-test-failed,.ct_rate_block,.ct_settings_banner,i.animate-spin{display:inline-block}#apbctTopWarning{margin-bottom:5px}#apbctTopWarning h3{margin:10px 0 5px}#apbctTopWarning h4{margin:10px}#apbctTopWarning h4 span{margin-top:5px}.apbct_settings-subtitle{position:relative;top:-15px;margin:0}.apbct_settings-field_wrapper{margin:15px 0}.apbct_settings-field_wrapper--sub{margin-left:30px!important}.apbct_settings__label{margin-right:10px;font-size:17px;vertical-align:text-bottom}.apbct_settings-field_content--radio{width:70%}.apbct_settings-field_title--radio{display:inline-block;margin:0;width:210px;padding-right:10px;font-size:14px;vertical-align:top}.apbct_input_text{min-width:255px;width:400px}.apbct_settings-field--api_key{font-size:14pt}.apbct_settings-long_description---show:hover{color:#aaa;cursor:pointer}.cleantalk_link{text-decoration:none;font-size:13px;line-height:26px;margin:0;padding:0 10px 1px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.cleantalk_link-auto{background:#ccc;border-color:#999;-webkit-box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);color:#000;height:28px;-webkit-border-radius:2px;border-radius:2px}.cleantalk_link-auto:hover{color:#fff}.cleantalk_link-manual{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;-webkit-border-radius:3px;border-radius:3px;text-align:center}.cleantalk_link-manual:hover{color:#000}.cleantalk_link[disabled=disabled]{background:#5d9db5;color:#000}.apbct_status_icon{vertical-align:text-bottom;margin:0 5px 0 8px}a.ct_support_link{color:#666;margin-right:.5em;font-size:10pt;font-weight:400}.ct-warning-test-failed{position:relative;padding:5px;margin:4px;border:3px solid rgba(240,50,50,1);border-radius:5px;background-color:rgba(255,200,200,1)}.ct_settings_banner{text-align:right;width:100%;margin:1em 0;vertical-align:top}#ct_translate_plugin{margin-left:0}.ct_rate_block{width:370px;margin-right:3em;padding:.8em .8em 15px;text-align:center;border:1px dashed #666}#ct_translate_plugin .apbct_button_rate{margin-bottom:10px}.apbct_long_desc{position:absolute;background:#5a5a5a;min-width:80px;min-height:80px;max-width:500px;padding:10px;color:#fff;z-index:10}i.animate-spin{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;font-size:25px;line-height:20px;color:rgba(120,200,230,1);margin:25px}@keyframes spin{to{transform:rotate(359deg)}}.apbct_long_desc__cancel{position:absolute;top:5px;right:5px;color:rgba(255,255,255,.5)}.apbct_long_desc__cancel:hover{color:#fff}.apbct_long_desc__angle{position:absolute;top:5px;left:-17px;width:10px;height:10px;background:#5a5a5a;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.apbct_long_desc__title{color:rgba(120,200,230,1);margin:0}
css/cleantalk-spam-check.min.css CHANGED
@@ -1 +1 @@
1
- #ct_checking_status,#ct_cooling_notice,#ct_error_message h3,#ct_error_message h4{text-align:center;width:90%}#ct_preloader{display:none;width:100%;text-align:center}#ct_working_message{display:none;margin:1em auto auto;padding:3px;width:70%;border:2px dotted gray;background:#ff9}#ct_pause{display:none}.ct_check_params_elem_sub{margin:15px 0 0 25px;width:150px;display:inline-block}.ct_check_params_elem_sub_sub{margin:15px 0 0 50px}button#ct_check_spam_button{background:#2ea2cc;border-color:#0074a2;color:#fff;-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)}button#ct_check_spam_button:hover{color:#000}.ct_date{display:inline;width:150px}.ct_check_params_desc{display:inline-block;margin:5px 10px 10px 15px}div.pagination{margin:10px}ul.pagination{display:inline-block;margin:0}li.pagination{display:inline-block;margin-left:10px}span.current_page{font-size:1.3em;font-weight:600}
1
+ #ct_checking_status,#ct_cooling_notice,#ct_error_message h3,#ct_error_message h4{text-align:center;width:90%}#ct_preloader{display:none;width:100%;text-align:center}#ct_preloader img{border:none!important}#ct_working_message{display:none;margin:1em auto auto;padding:3px;width:70%;border:2px dotted gray;background:#ff9}#ct_pause{display:none}.ct_check_params_elem_sub{margin:15px 0 0 25px;width:150px;display:inline-block}.ct_check_params_elem_sub_sub{margin:15px 0 0 50px}button#ct_check_spam_button{background:#2ea2cc;border-color:#0074a2;color:#fff;-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)}button#ct_check_spam_button:hover{color:#000}.ct_date{display:inline;width:150px}.ct_check_params_desc{display:inline-block;margin:5px 10px 10px 15px}#ct_check_tabs{border:1px solid #c5c5c5;border-radius:3px;padding:.2em;background:#fff}#ct_check_tabs ul{margin:0;padding:.2em .2em 0;border:1px solid #c5c5c5;border-radius:3px;background:#e9e9e9;color:#333;font-weight:700;display:flex}#ct_check_tabs ul li{list-style:none;position:relative;margin:1px .2em -1px 0;padding:0;white-space:nowrap;border:1px solid #c5c5c5;border-radius:3px 3px 0 0;background:#f6f6f6;font-weight:400}#ct_check_tabs ul li.active{border-color:#003eff;background:#007fff}#ct_check_tabs ul li a{display:block;padding:.5em 1em;text-decoration:none}#ct_check_tabs ul li.active a{color:#fff}#ct_check_content{display:block;border-width:0;padding:1em 1.4em;background:0 0}
css/jquery-ui.min.css CHANGED
@@ -1,7 +1,7 @@
1
- /*! jQuery UI - v1.12.1 - 2018-05-17
2
  * http://jqueryui.com
3
- * Includes: draggable.css, core.css, resizable.css, accordion.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, progressbar.css, theme.css
4
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=custom-theme&bgImgOpacityError=&bgImgOpacityHighlight=&bgImgOpacityActive=&bgImgOpacityHover=&bgImgOpacityDefault=&bgImgOpacityContent=&bgImgOpacityHeader=&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=%23666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=%23aaaaaa&iconColorError=%23cc0000&fcError=%235f3f3f&borderColorError=%23f1a899&bgTextureError=flat&bgColorError=%23fddfdf&iconColorHighlight=%23777620&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgTextureHighlight=flat&bgColorHighlight=%23fffa90&iconColorActive=%23ffffff&fcActive=%23ffffff&borderColorActive=%23246b85&bgTextureActive=flat&bgColorActive=%232ea2cc&iconColorHover=%23555555&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgTextureHover=flat&bgColorHover=%23ededed&iconColorDefault=%23777777&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgTextureDefault=flat&bgColorDefault=%23f6f6f6&iconColorContent=%23444444&fcContent=%23333333&borderColorContent=%23dddddd&bgTextureContent=flat&bgColorContent=%23ffffff&iconColorHeader=%23444444&fcHeader=%23333333&borderColorHeader=%23dddddd&bgTextureHeader=flat&bgColorHeader=%23e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif
5
  * Copyright jQuery Foundation and other contributors; Licensed MIT */
6
 
7
- .ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup > .ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup > .ui-controlgroup-item:focus,.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical > .ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc( 100% - 2.4em )}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,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");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #c5c5c5}.ui-widget-content{border:1px solid #ddd;background:#fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #ddd;background:#e9e9e9;color:#333;font-weight:bold}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:normal;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#454545;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #ccc;background:#ededed;font-weight:normal;color:#2b2b2b}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#2b2b2b;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #246b85;background:#2ea2cc;font-weight:normal;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#246b85;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-checked{border:1px solid #dad55e;background:#fffa90}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("images/ui-icons_555555_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_777620_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cc0000_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_777777_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:3px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:3px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{-webkit-box-shadow:0 0 5px #666;box-shadow:0 0 5px #666}
1
+ /*! jQuery UI - v1.12.1 - 2020-01-10
2
  * http://jqueryui.com
3
+ * Includes: draggable.css, core.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
4
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif
5
  * Copyright jQuery Foundation and other contributors; Licensed MIT */
6
 
7
+ .ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup > .ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup > .ui-controlgroup-item:focus,.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical > .ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc( 100% - 2.4em )}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,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");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #c5c5c5}.ui-widget-content{border:1px solid #ddd;background:#fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #ddd;background:#e9e9e9;color:#333;font-weight:bold}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:normal;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#454545;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #ccc;background:#ededed;font-weight:normal;color:#2b2b2b}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#2b2b2b;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #003eff;background:#007fff;font-weight:normal;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#003eff;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-checked{border:1px solid #dad55e;background:#fffa90}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("images/ui-icons_555555_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_777620_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cc0000_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_777777_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:3px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:3px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{-webkit-box-shadow:0 0 5px #666;box-shadow:0 0 5px #666}
css/jquery-ui.theme.min.css ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ /*! jQuery UI - v1.12.1 - 2020-01-10
2
+ * http://jqueryui.com
3
+ * Copyright jQuery Foundation and other contributors; Licensed MIT */
4
+
5
+ .ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #c5c5c5}.ui-widget-content{border:1px solid #ddd;background:#fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #ddd;background:#e9e9e9;color:#333;font-weight:bold}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:normal;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#454545;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #ccc;background:#ededed;font-weight:normal;color:#2b2b2b}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#2b2b2b;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #003eff;background:#007fff;font-weight:normal;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#003eff;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-checked{border:1px solid #dad55e;background:#fffa90}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("images/ui-icons_555555_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_777620_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cc0000_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_777777_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:3px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:3px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{-webkit-box-shadow:0 0 5px #666;box-shadow:0 0 5px #666}
i18n/cleantalk-ru_RU.mo CHANGED
Binary file
i18n/cleantalk-ru_RU.po CHANGED
@@ -1,1536 +1,1536 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: Anti-Spam by CleanTalk\n"
4
- "POT-Creation-Date: 2019-10-27 16:02+0000\n"
5
- "PO-Revision-Date: 2019-12-16 16:16+0500\n"
6
- "Last-Translator: admin <ievlev@cleantalk.org>\n"
7
- "Language-Team: Русский\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 1.8.6\n"
13
- "X-Poedit-Basepath: ..\n"
14
- "X-Poedit-WPHeader: cleantalk.php\n"
15
- "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
16
- "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
17
- "X-Poedit-SourceCharset: UTF-8\n"
18
- "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
19
- "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
20
- "_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
21
- "Report-Msgid-Bugs-To: \n"
22
- "X-Loco-Version: 2.3.0; wp-5.2.4\n"
23
- "X-Poedit-SearchPath-0: .\n"
24
- "X-Poedit-SearchPathExcluded-0: *.js\n"
25
-
26
- #: inc/classCleantalkComments.php:32 inc/cleantalk-comments.php:16
27
- #: inc/cleantalk-users.php:15
28
- msgid "Check for spam"
29
- msgstr "Проверить на спам"
30
-
31
- #: inc/classCleantalkComments.php:33 inc/cleantalk-admin.php:350
32
- #: inc/cleantalk-comments.php:16
33
- msgid "Find spam comments"
34
- msgstr "Найти спам в комментариях"
35
-
36
- #: inc/classCleantalkComments.php:66 inc/cleantalk-comments.php:26
37
- #: inc/cleantalk-users.php:25
38
- msgid "Plugin Settings"
39
- msgstr "Настройки плагина"
40
-
41
- #: inc/classCleantalkComments.php:76 inc/cleantalk-comments.php:35
42
- #: inc/cleantalk-users.php:34
43
- #, php-format
44
- msgid ""
45
- "Antispam hosting tariff does not allow you to use this feature. To do so, "
46
- "you need to enter an Access Key in the %splugin settings%s."
47
- msgstr ""
48
- "Тариф на антиспам хостинг не позволяет использовать эту функцию. Для этого "
49
- "вам необходимо ввести ключ доступа в %sнастройках плагина%s."
50
-
51
- #: inc/classCleantalkComments.php:101 inc/cleantalk-comments.php:60
52
- #: inc/cleantalk-users.php:60
53
- msgid ""
54
- "Ajax error. Process will be automatically restarted in 3 seconds. Status: "
55
- msgstr ""
56
- "Ajax ошибка. Процесс проверки будет автоматически возобновлен через 3 "
57
- "секунды. Статус:"
58
-
59
- #: inc/classCleantalkComments.php:108 inc/cleantalk-comments.php:67
60
- msgid ""
61
- "Please wait for a while. CleanTalk is deleting spam comments. Comments left: "
62
- msgstr "Пожалуйста, подождите. CleanTalk удаляет спам-комментарии. Осталось:"
63
-
64
- #: inc/classCleantalkComments.php:118 inc/cleantalk-comments.php:77
65
- #: inc/cleantalk-users.php:77
66
- msgid "Start check"
67
- msgstr "Начать проверку"
68
-
69
- #: inc/classCleantalkComments.php:119 inc/cleantalk-comments.php:78
70
- #: inc/cleantalk-users.php:78
71
- msgid "Continue check"
72
- msgstr "Продолжить проверку"
73
-
74
- #: inc/classCleantalkComments.php:120 inc/cleantalk-comments.php:79
75
- msgid ""
76
- "The plugin will check all comments against blacklists database and show you "
77
- "senders that have spam activity on other websites."
78
- msgstr ""
79
- "Пожалуйста, подождите. CleanTalk проверяет комментарии по черным спискам на "
80
- "cleantalk.org. Вы сможете удалить комментарии со спамом после окончания "
81
- "работы."
82
-
83
- #: inc/classCleantalkComments.php:123 inc/cleantalk-comments.php:82
84
- #: inc/cleantalk-users.php:82
85
- msgid "Accurate check"
86
- msgstr "Точная проверка"
87
-
88
- #: inc/classCleantalkComments.php:125 inc/cleantalk-comments.php:84
89
- msgid ""
90
- "Allows to use comment's dates to perform more accurate check. Could "
91
- "seriously slow down the check."
92
- msgstr ""
93
- "Позволяет использовать даты комментариев для выполения более тщательной "
94
- "проверки. Может серьезно замедлить проверку."
95
-
96
- #: inc/classCleantalkComments.php:128 inc/cleantalk-comments.php:87
97
- #: inc/cleantalk-users.php:87
98
- msgid "Specify date range"
99
- msgstr "Указать диапазон дат"
100
-
101
- #: inc/classCleantalkComments.php:149 inc/cleantalk-comments.php:108
102
- msgid ""
103
- "Please wait! CleanTalk is checking all approved and pending comments via "
104
- "blacklist database at cleantalk.org. You will have option to delete found "
105
- "spam comments after plugin finish."
106
- msgstr ""
107
- "Пожалуйста, подождите! CleanTalk проверяет комментарии по черным спискам на "
108
- "cleantalk.org. Вы сможете удалить комментарии со спамом после окончания "
109
- "работы."
110
-
111
- #: inc/classCleantalkCommentsListTable.php:24
112
- msgid "Author"
113
- msgstr "Автор"
114
-
115
- #: inc/classCleantalkCommentsListTable.php:25 inc/cleantalk-comments.php:158
116
- msgid "Comment"
117
- msgstr "Комментарий"
118
-
119
- #: inc/classCleantalkCommentsListTable.php:26 inc/cleantalk-comments.php:159
120
- msgid "In Response To"
121
- msgstr "В ответ на"
122
-
123
- #: inc/classCleantalkCommentsListTable.php:33
124
- msgid "No spam comments."
125
- msgstr "Нет спам комментариев."
126
-
127
- #: inc/cleantalk-admin.php:27
128
- #, php-format
129
- msgid "Find spam %s"
130
- msgstr "Найти спам %s"
131
-
132
- #: inc/cleantalk-admin.php:31
133
- msgid "CleanTalk Anti-Spam Log"
134
- msgstr "CleanTalk Anti-Spam лог"
135
-
136
- #: inc/cleantalk-admin.php:50
137
- #, php-format
138
- msgid "%sRefresh%s"
139
- msgstr "%sОбновить%s"
140
-
141
- #: inc/cleantalk-admin.php:51
142
- #, php-format
143
- msgid "%sConfigure%s"
144
- msgstr "%sКонфигурация%s"
145
-
146
- #: inc/cleantalk-admin.php:68
147
- msgid "7 days anti-spam stats"
148
- msgstr "Статистика атак за 7 дней"
149
-
150
- #: inc/cleantalk-admin.php:72
151
- msgid "Top 5 spam IPs blocked"
152
- msgstr "Топ 5 cамых заблокированных IP"
153
-
154
- #: inc/cleantalk-admin.php:78
155
- msgid "Get Access key to activate Anti-Spam protection!"
156
- msgstr "Получите ключ доступа для активации спам защиты!"
157
-
158
- #: inc/cleantalk-admin.php:86
159
- #, php-format
160
- msgid "Something went wrong! Error: \"%s\"."
161
- msgstr "Что-то пошло не так: Ошибка: \"%s\"."
162
-
163
- #: inc/cleantalk-admin.php:90
164
- msgid "Please, visit your dashboard."
165
- msgstr "Пожалуйста, посетите панель управления."
166
-
167
- #: inc/cleantalk-admin.php:104
168
- msgid "IP"
169
- msgstr "IP"
170
-
171
- #: inc/cleantalk-admin.php:105
172
- msgid "Country"
173
- msgstr "Страна"
174
-
175
- #: inc/cleantalk-admin.php:106
176
- msgid "Block Count"
177
- msgstr "Заблкирован раз"
178
-
179
- #: inc/cleantalk-admin.php:134
180
- #, php-format
181
- msgid ""
182
- "This is the count from the %s's cloud and could be different to admin bar "
183
- "counters"
184
- msgstr ""
185
- "Это счетчик из %s облака, эти данные могут отличаться от данных счетчика в "
186
- "админ-баре."
187
-
188
- #. %s: Number of spam messages
189
- #: inc/cleantalk-admin.php:137
190
- #, php-format
191
- msgid ""
192
- "%s%s%s has blocked %s spam for all time. The statistics are automatically "
193
- "updated every 24 hours."
194
- msgstr ""
195
- "%s%s%s заблокировал %s спама за все время. Статистика автоматически "
196
- "обновляется каждый 24 часа."
197
-
198
- #: inc/cleantalk-admin.php:148 inc/cleantalk-settings.php:544
199
- #, php-format
200
- msgid "Do you like CleanTalk? %sPost your feedback here%s."
201
- msgstr "Вам понравился CleanTalk?%s Напишите свой отзыв здесь%s."
202
-
203
- #: inc/cleantalk-admin.php:234
204
- msgid "Translate"
205
- msgstr "Перевести"
206
-
207
- #: inc/cleantalk-admin.php:237
208
- msgid "Start here"
209
- msgstr "Начать здесь"
210
-
211
- #: inc/cleantalk-admin.php:238
212
- msgid "FAQ"
213
- msgstr "FAQ"
214
-
215
- #: inc/cleantalk-admin.php:239 inc/cleantalk-admin.php:644
216
- #: inc/cleantalk-settings.php:575
217
- msgid "Support"
218
- msgstr "Поддержка"
219
-
220
- #: inc/cleantalk-admin.php:306 inc/cleantalk-settings.php:523
221
- msgid "Hosting AntiSpam"
222
- msgstr "Hosting AntiSpam"
223
-
224
- #: inc/cleantalk-admin.php:333
225
- msgid "Failed from timeout. Going to check comments again."
226
- msgstr "Ошибка по таймауту. Попробовать еще раз?"
227
-
228
- #: inc/cleantalk-admin.php:334
229
- msgid "Added"
230
- msgstr "Добавлены"
231
-
232
- #: inc/cleantalk-admin.php:335 inc/cleantalk-admin.php:386
233
- msgid "Deleted"
234
- msgstr "Удалено"
235
-
236
- #: inc/cleantalk-admin.php:336
237
- msgid "comments"
238
- msgstr "комментарии"
239
-
240
- #: inc/cleantalk-admin.php:337
241
- msgid "Delete all spam comments?"
242
- msgstr "Удалить ВСЕ найденные спам-комментарии?"
243
-
244
- #: inc/cleantalk-admin.php:338
245
- msgid "Delete checked comments?"
246
- msgstr "Удалить отмеченые спам-комментарии?"
247
-
248
- #: inc/cleantalk-admin.php:339
249
- #, php-format
250
- msgid ""
251
- "Total comments %s. Checked %s. Found %s spam comments. %s bad comments "
252
- "(without IP or email)."
253
- msgstr ""
254
- "Всего комментариев %s. Проверено %s. Найдено %s спам комментариев. %s плохих "
255
- "комментариев (без IP и Email'а)."
256
-
257
- #: inc/cleantalk-admin.php:340 inc/cleantalk-admin.php:393
258
- #: inc/cleantalk-users.php:531
259
- msgid "Please do backup of WordPress database before delete any accounts!"
260
- msgstr ""
261
- "Пожалуйста, сделайте резервную копию базы данных Wordpress перед удалением "
262
- "аккаунтов."
263
-
264
- #: inc/cleantalk-admin.php:351
265
- msgid "The sender has been whitelisted."
266
- msgstr "Отправитель был добавлен в белый список."
267
-
268
- #: inc/cleantalk-admin.php:352
269
- msgid "The sender has been blacklisted."
270
- msgstr "Отправитель был добавлен в черный список."
271
-
272
- #: inc/cleantalk-admin.php:353 inc/cleantalk-public.php:3321
273
- #, php-format
274
- msgid "Feedback has been sent to %sCleanTalk Dashboard%s."
275
- msgstr "Обратная связь отправлена в панель управления %sCleanTalk%s."
276
-
277
- #: inc/cleantalk-admin.php:383
278
- msgid "Failed from timeout. Going to check users again."
279
- msgstr "Ошибка по таймауту. Попробовать еще раз?"
280
-
281
- #: inc/cleantalk-admin.php:384
282
- msgid "Failed from timeout. Going to run a new attempt to delete spam users."
283
- msgstr "Ошибка по таймауту. Попробовать еще раз?"
284
-
285
- #: inc/cleantalk-admin.php:385
286
- msgid "Inserted"
287
- msgstr "Добавлено"
288
-
289
- #: inc/cleantalk-admin.php:387
290
- msgid "users."
291
- msgstr "пользователей."
292
-
293
- #: inc/cleantalk-admin.php:388
294
- msgid "Delete all spam users?"
295
- msgstr "Удалить ВСЕХ найденых спам-пользователей?"
296
-
297
- #: inc/cleantalk-admin.php:389
298
- msgid "Delete checked users?"
299
- msgstr "Удалить отмеченых спам-пользователей?"
300
-
301
- #: inc/cleantalk-admin.php:392
302
- #, php-format
303
- msgid ""
304
- "Total users %s, checked %s, found %s spam users and %s bad users (without IP "
305
- "or email)"
306
- msgstr ""
307
- "Всего пользователей %s, проверено %s, найдено %s спам пользователей и %s "
308
- "плохих пользователей (без IP и Email'а)"
309
-
310
- #: inc/cleantalk-admin.php:401
311
- msgid "Find spam-users"
312
- msgstr "Найти спам-пользователей"
313
-
314
- #: inc/cleantalk-admin.php:449
315
- #, php-format
316
- msgid "Unable to get Access key automatically: %s"
317
- msgstr "Невозможно получить ключ автоматически: %s"
318
-
319
- #: inc/cleantalk-admin.php:450
320
- msgid "Get the Access key"
321
- msgstr "Получить ключ вручную"
322
-
323
- #: inc/cleantalk-admin.php:459
324
- #, php-format
325
- msgid "Please enter Access Key in %s settings to enable anti spam protection!"
326
- msgstr ""
327
- "Пожалуйста, укажите Ключ доступа в настройках %s для активации защиты от "
328
- "спама!"
329
-
330
- #: inc/cleantalk-admin.php:469
331
- #, php-format
332
- msgid "%s trial period ends, please upgrade to %s!"
333
- msgstr ""
334
- "%s заканчивается ознакомительный срок пользования антиспам плагином "
335
- "CleanTalk, пожалуйста продлите подключение %s."
336
-
337
- #: inc/cleantalk-admin.php:481
338
- msgid "RENEW ANTI-SPAM"
339
- msgstr "ПРОДЛИТЬ АНТИСПАМ"
340
-
341
- #: inc/cleantalk-admin.php:482
342
- msgid "next year"
343
- msgstr "следующий год"
344
-
345
- #: inc/cleantalk-admin.php:486
346
- #, php-format
347
- msgid "Please renew your anti-spam license for %s."
348
- msgstr "Пожалуйста, продлите свою антиспам-лицензию на %s."
349
-
350
- #: inc/cleantalk-admin.php:511
351
- msgid "Make it right!"
352
- msgstr "Сделай все правильно!"
353
-
354
- #: inc/cleantalk-admin.php:513
355
- #, php-format
356
- msgid "%sGet premium%s"
357
- msgstr "%sПолучить премиум%s"
358
-
359
- #: inc/cleantalk-admin.php:552
360
- msgid "Since"
361
- msgstr "От"
362
-
363
- #: inc/cleantalk-admin.php:558
364
- msgid ""
365
- "All / Allowed / Blocked submissions. The number of submissions is being "
366
- "counted since CleanTalk plugin installation."
367
- msgstr "Все / Разрешенные / Запрещенные запросы с момента установки CleanTalk."
368
-
369
- #: inc/cleantalk-admin.php:558
370
- msgid "All"
371
- msgstr "Все"
372
-
373
- #: inc/cleantalk-admin.php:566
374
- msgid ""
375
- "Allowed / Blocked submissions. The number of submissions for past 24 hours. "
376
- msgstr "Разрешенные / Запрещенные запросы за последние 24 часа."
377
-
378
- #: inc/cleantalk-admin.php:566
379
- msgid "Day"
380
- msgstr "За день"
381
-
382
- #: inc/cleantalk-admin.php:572
383
- msgid ""
384
- "All / Blocked events. Access attempts regitred by SpamFireWall counted since "
385
- "the last plugin activation."
386
- msgstr ""
387
- "Все / Запрещенные попытки просмотра сайта. Отображет попытки с момента "
388
- "последней активации плагина."
389
-
390
- #: inc/cleantalk-admin.php:582
391
- msgid ""
392
- "Allowed / Blocked submissions. The number of submissions is being counted "
393
- "since "
394
- msgstr "Разрешенные / Запрещенные попытки."
395
-
396
- #: inc/cleantalk-admin.php:593
397
- msgid "dashboard"
398
- msgstr "панель управления"
399
-
400
- #: inc/cleantalk-admin.php:600
401
- msgid "Settings"
402
- msgstr "Настройки"
403
-
404
- #: inc/cleantalk-admin.php:608
405
- msgid "Bulk spam comments removal tool."
406
- msgstr "Инструмент массового удаления пользователей."
407
-
408
- #: inc/cleantalk-admin.php:608 inc/cleantalk-settings.php:882
409
- msgid "Check comments for spam"
410
- msgstr "Проверка комментариев"
411
-
412
- #: inc/cleantalk-admin.php:618 inc/cleantalk-settings.php:885
413
- msgid "Check users for spam"
414
- msgstr "Проверить пользователей на спам"
415
-
416
- #: inc/cleantalk-admin.php:627
417
- msgid "Reset first counter"
418
- msgstr "Сбросить первый счетчик"
419
-
420
- #: inc/cleantalk-admin.php:635
421
- msgid "Reset all counters"
422
- msgstr "Сбросить все счетчики"
423
-
424
- #: inc/cleantalk-comments.php:221 inc/cleantalk-users.php:220
425
- msgid "Approve"
426
- msgstr "Одобрить"
427
-
428
- #: inc/cleantalk-comments.php:223 inc/cleantalk-users.php:222
429
- msgid "Delete"
430
- msgstr "Удалить"
431
-
432
- #: inc/cleantalk-comments.php:265
433
- msgid "Delete all comments from the list"
434
- msgstr "Удалить все сообщения в списке"
435
-
436
- #: inc/cleantalk-comments.php:266 inc/cleantalk-users.php:268
437
- msgid "Delete selected"
438
- msgstr "Удалить отмеченные"
439
-
440
- #: inc/cleantalk-comments.php:270
441
- msgid "Insert comments"
442
- msgstr "Добавить комментарии"
443
-
444
- #: inc/cleantalk-comments.php:271
445
- msgid "Delete comments"
446
- msgstr "Удалить тестовые спам-комментарии?"
447
-
448
- #: inc/cleantalk-comments.php:276 inc/cleantalk-users.php:279
449
- msgid ""
450
- "There is some differencies between blacklists database and our API "
451
- "mechanisms. Blacklists shows all history of spam activity, but our API (that "
452
- "used in spam checking) used another parameters, too: last day of activity, "
453
- "number of spam attacks during last days etc. This mechanisms help us to "
454
- "reduce number of false positivitie. So, there is nothing strange, if some "
455
- "emails/IPs will be not found by this checking."
456
- msgstr ""
457
- "Есть некоторые отличия между проверкой через базу данных черных списков и "
458
- "через механизм API. В черных списках отображается вся история о спам-"
459
- "активности, но наш API используетс другие механизмы: последний день "
460
- "активности, количество спам-атак в течение последних дней и т. д. Эти "
461
- "механизмы помогают нам сократить количество ложных обнаружений. Поэтому, нет "
462
- "ничего странного, если некоторые письма/IP не будут обнаружены при этой "
463
- "проверке."
464
-
465
- #: inc/cleantalk-comments.php:281 inc/cleantalk-users.php:284
466
- msgid "Stop deletion"
467
- msgstr "Остановить удаление"
468
-
469
- #: inc/cleantalk-comments.php:495
470
- #, php-format
471
- msgid ""
472
- "Total comments %s. Checked %s. Last check %s. Found %s spam comments. %s bad "
473
- "comments (without IP or email)."
474
- msgstr ""
475
- "Всего комментариев %s. Проверено %s. Последняя проверка %s. Найдено %s спам-"
476
- "комментариев. %s плохие комментарии (без IP или электронной почты)."
477
-
478
- #: inc/cleantalk-comments.php:499
479
- msgid "Please do backup of WordPress database before delete any comments!"
480
- msgstr ""
481
- "Пожалуйста, сделайте резервную копию базы данных Wordpress перед удалением "
482
- "комментариев."
483
-
484
- #: inc/cleantalk-public.php:500 inc/cleantalk-public.php:641
485
- #: inc/cleantalk-public.php:743 inc/cleantalk-public.php:2363
486
- #: inc/cleantalk-public.php:3052
487
- msgid "Spam protection by CleanTalk"
488
- msgstr "Спам защита CleanTalk"
489
-
490
- #: inc/cleantalk-public.php:1233 inc/cleantalk-public.php:1361
491
- #: inc/cleantalk-public.php:1379
492
- msgid "Spam protection"
493
- msgstr "Защита от спама"
494
-
495
- #: inc/cleantalk-public.php:1332
496
- msgid "CleanTalk AntiSpam: This message is possible spam."
497
- msgstr "CleanTalk AntiSpam: Это сообщение, возможно, является спамом."
498
-
499
- #: inc/cleantalk-public.php:1333
500
- msgid "You could check it in CleanTalk's anti-spam database:"
501
- msgstr "Вы можете проверить это по антиспам-базе CleanTalk:"
502
-
503
- #: inc/cleantalk-public.php:1569
504
- #, php-format
505
- msgid "Registration approved by %s."
506
- msgstr "Регистрация одобрена %s."
507
-
508
- #: inc/cleantalk-public.php:1849
509
- msgid "CleanTalk AntiSpam: This registration is spam."
510
- msgstr "CleanTalk AntiSpam: Эта регистрация - спам."
511
-
512
- #: inc/cleantalk-public.php:1850 inc/cleantalk-public.php:2219
513
- #: inc/cleantalk-public.php:2387 inc/cleantalk-public.php:2542
514
- msgid "CleanTalk's anti-spam database:"
515
- msgstr "Антиспам-база CleanTalk:"
516
-
517
- #: inc/cleantalk-public.php:2218 inc/cleantalk-public.php:2386
518
- #: inc/cleantalk-public.php:2541
519
- msgid "CleanTalk AntiSpam: This message is spam."
520
- msgstr "CleanTalk AntiSpam: Это сообщение - спам."
521
-
522
- #: inc/cleantalk-public.php:2666
523
- msgid "Comment approved. Anti-spam by CleanTalk."
524
- msgstr "Комментарий одобрен. Антиспам от CleanTalk."
525
-
526
- #: inc/cleantalk-public.php:3219
527
- msgid "Attention, please!"
528
- msgstr "Внимание!"
529
-
530
- #: inc/cleantalk-public.php:3220
531
- #, php-format
532
- msgid "\"%s\" plugin error on your site \"%s\":"
533
- msgstr "\"%s\" ошибка плагина на сайте \"%s\":"
534
-
535
- #: inc/cleantalk-public.php:3222
536
- #, php-format
537
- msgid "[%s] \"%s\" error!"
538
- msgstr "[%s] \"%s\" ошибка!"
539
-
540
- #: inc/cleantalk-public.php:3271
541
- msgid ""
542
- "By using this form you agree with the storage and processing of your data by "
543
- "using the Privacy Policy on this website."
544
- msgstr ""
545
- "Используя эту форму, вы соглашаетесь с хранением и обработкой ваших данных, "
546
- "в соответствии с Политикой конфиденциальности на этом сайте."
547
-
548
- #: inc/cleantalk-public.php:3319
549
- msgid "Error occured while sending feedback."
550
- msgstr "Случилась ошибка при отправке обратной связи."
551
-
552
- #: inc/cleantalk-public.php:3320
553
- msgid "Feedback wasn't sent. There is no associated request."
554
- msgstr "Обратная связь не была отправлена. Нет связанного запроса."
555
-
556
- #: inc/cleantalk-public.php:3364
557
- msgid "Sender info"
558
- msgstr "Информация об отправителе"
559
-
560
- #: inc/cleantalk-public.php:3367
561
- msgid "by"
562
- msgstr " от"
563
-
564
- #: inc/cleantalk-public.php:3378
565
- msgid "No email"
566
- msgstr "Email отсутствует"
567
-
568
- #: inc/cleantalk-public.php:3388
569
- msgid "No IP"
570
- msgstr "IP отсутствует"
571
-
572
- #: inc/cleantalk-public.php:3391
573
- msgid "Mark as spam"
574
- msgstr "Отметить как спам"
575
-
576
- #: inc/cleantalk-public.php:3392
577
- msgid "Unspam"
578
- msgstr "Вернуть из спама"
579
-
580
- #: inc/cleantalk-public.php:3394
581
- msgid "Marked as spam."
582
- msgstr "Отмечено как спам."
583
-
584
- #: inc/cleantalk-public.php:3395
585
- msgid "Marked as not spam."
586
- msgstr "Отмечено как не спам."
587
-
588
- #: inc/cleantalk-settings.php:96
589
- msgid "SpamFireWall"
590
- msgstr "SpamFireWall"
591
-
592
- #: inc/cleantalk-settings.php:97
593
- msgid ""
594
- "This option allows to filter spam bots before they access website. Also "
595
- "reduces CPU usage on hosting server and accelerates pages load time."
596
- msgstr ""
597
- "Эта опция позволяет фильтровать спам-ботов прежде, чем они войдут на сайт. "
598
- "Также уменьшает загрузку процессора на хостинге и ускоряет время загрузки "
599
- "страниц."
600
-
601
- #: inc/cleantalk-settings.php:104
602
- msgid "Forms to protect"
603
- msgstr "Защищаемые формы"
604
-
605
- #: inc/cleantalk-settings.php:110
606
- msgid "Advanced settings"
607
- msgstr "Продвинутые настройки"
608
-
609
- #: inc/cleantalk-settings.php:117
610
- msgid "Registration Forms"
611
- msgstr "Формы регистрации"
612
-
613
- #: inc/cleantalk-settings.php:118
614
- msgid "WordPress, BuddyPress, bbPress, S2Member, WooCommerce."
615
- msgstr "WordPress, BuddyPress, bbPress, S2Member, WooCommerce."
616
-
617
- #: inc/cleantalk-settings.php:121
618
- msgid "Comments form"
619
- msgstr "Комментарии в блоге"
620
-
621
- #: inc/cleantalk-settings.php:122
622
- msgid "WordPress, JetPack, WooCommerce."
623
- msgstr "WordPress, JetPack, WooCommerce."
624
-
625
- #: inc/cleantalk-settings.php:125 inc/cleantalk-settings.php:761
626
- msgid "Contact forms"
627
- msgstr "Контактные формы"
628
-
629
- #: inc/cleantalk-settings.php:126
630
- msgid ""
631
- "Contact Form 7, Formidable forms, JetPack, Fast Secure Contact Form, "
632
- "WordPress Landing Pages, Gravity Forms."
633
- msgstr ""
634
- "Contact Form 7, Formidable Forms, Jetpack, Fast Secure Contact Form, "
635
- "WordPress Landing Pages, Gravity Forms."
636
-
637
- #: inc/cleantalk-settings.php:129 inc/cleantalk-settings.php:762
638
- msgid "Custom contact forms"
639
- msgstr "Произвольные контактные формы"
640
-
641
- #: inc/cleantalk-settings.php:130
642
- msgid "Anti spam test for any WordPress themes or contacts forms."
643
- msgstr "Защита от спама любой контактной формы или темы."
644
-
645
- #: inc/cleantalk-settings.php:133 inc/cleantalk-settings.php:775
646
- msgid "WooCommerce checkout form"
647
- msgstr "Форма заказа WooCommerce"
648
-
649
- #: inc/cleantalk-settings.php:134
650
- msgid "Anti spam test for WooCommerce checkout form."
651
- msgstr "Спам тест для формы заказа WooCommerce"
652
-
653
- #: inc/cleantalk-settings.php:138
654
- msgid "Spam test for registration during checkout"
655
- msgstr "Регистрация на странице заказа"
656
-
657
- #: inc/cleantalk-settings.php:139
658
- msgid ""
659
- "Enable anti spam test for registration process which during woocommerce's "
660
- "checkout."
661
- msgstr ""
662
- "Включить защиту от спама в регистрациях, которые проходят во время "
663
- "оформления заказа."
664
-
665
- #: inc/cleantalk-settings.php:145
666
- msgid "Test default Wordpress search form for spam"
667
- msgstr "Стандартная форма поиска Wordpress"
668
-
669
- #: inc/cleantalk-settings.php:146
670
- msgid "Spam protection for Search form."
671
- msgstr "Защита от спама для Форм поиска."
672
-
673
- #: inc/cleantalk-settings.php:148
674
- #, php-format
675
- msgid "Read more about %sspam protection for Search form%s on our blog."
676
- msgstr "Прочтите о %sспам-защите для Форм поиска%s на нашем блоге."
677
-
678
- #: inc/cleantalk-settings.php:156
679
- msgid "Protect external forms"
680
- msgstr "Защита внешних форм"
681
-
682
- #: inc/cleantalk-settings.php:157
683
- msgid ""
684
- "Turn this option on to protect forms on your WordPress that send data to "
685
- "third-part servers (like MailChimp)."
686
- msgstr ""
687
- "Включите эту опцию, что бы защитить формы, которые отсылают данные на "
688
- "сторонние ресурсы, например MailChimp."
689
-
690
- #: inc/cleantalk-settings.php:161
691
- msgid "Capture buffer"
692
- msgstr "Захват буфера"
693
-
694
- #: inc/cleantalk-settings.php:162
695
- msgid ""
696
- "This setting gives you more sophisticated and strengthened protection for "
697
- "external forms. But it could break plugins which use a buffer like Ninja "
698
- "Forms."
699
- msgstr ""
700
- "Этот параметр дает вам более сложную и усиленную защиту для внешних форм. Но "
701
- "это может сломать плагины, которые используют буфер, такой как Ninja Forms."
702
-
703
- #: inc/cleantalk-settings.php:167
704
- msgid "Protect internal forms"
705
- msgstr "Защита внутренних форм"
706
-
707
- #: inc/cleantalk-settings.php:168
708
- msgid ""
709
- "This option will enable protection for custom (hand-made) AJAX forms with "
710
- "PHP scripts handlers on your WordPress."
711
- msgstr "Эта опция обеспечит защиту созданных вручную форм, использующих AJAX."
712
-
713
- #: inc/cleantalk-settings.php:175
714
- msgid "Comments and Messages"
715
- msgstr "Комментарии и сообщения"
716
-
717
- #: inc/cleantalk-settings.php:178
718
- msgid "BuddyPress Private Messages"
719
- msgstr "Личные сообщения buddyPress"
720
-
721
- #: inc/cleantalk-settings.php:179
722
- msgid "Check buddyPress private messages."
723
- msgstr "Проверять личные сообщения buddyPress "
724
-
725
- #: inc/cleantalk-settings.php:182
726
- msgid "Don't check trusted user's comments"
727
- msgstr "Не проверять доверенных пользователей"
728
-
729
- #: inc/cleantalk-settings.php:183
730
- #, php-format
731
- msgid "Don't check comments for users with above %d comments."
732
- msgstr "Не проверять комментарии пользователей с более %d комментариями."
733
-
734
- #: inc/cleantalk-settings.php:186
735
- msgid "Automatically delete spam comments"
736
- msgstr "Автоматически удалять спам-комментарии"
737
-
738
- #: inc/cleantalk-settings.php:187
739
- #, php-format
740
- msgid "Delete spam comments older than %d days."
741
- msgstr "Удалять комментарии старше %d дней."
742
-
743
- #: inc/cleantalk-settings.php:190
744
- msgid "Remove links from approved comments"
745
- msgstr "Удалять ссылки из одобреных комментариев"
746
-
747
- #: inc/cleantalk-settings.php:191
748
- msgid "Remove links from approved comments. Replace it with \"[Link deleted]\""
749
- msgstr "Удалять ссылки из одобренных сообщений"
750
-
751
- #: inc/cleantalk-settings.php:194
752
- msgid "Show links to check Emails, IPs for spam."
753
- msgstr "Отобразить ссылки для проверки Email'ов и IP адресов."
754
-
755
- #: inc/cleantalk-settings.php:195
756
- msgid ""
757
- "Shows little icon near IP addresses and Emails allowing you to check it via "
758
- "CleanTalk's database. Also allowing you to manage comments from the public "
759
- "post's page."
760
- msgstr ""
761
- "Показывает маленькую иконку около IP и Email'a позволяющую проверить их "
762
- "через базу данных. Так же позволяет управлять комментариями с публичной "
763
- "страницы записи."
764
-
765
- #: inc/cleantalk-settings.php:203
766
- msgid "Data Processing"
767
- msgstr "Обработка данных"
768
-
769
- #: inc/cleantalk-settings.php:206
770
- msgid "Protect logged in Users"
771
- msgstr "Проверять залогиненых пользователей"
772
-
773
- #: inc/cleantalk-settings.php:207
774
- msgid ""
775
- "Turn this option on to check for spam any submissions (comments, contact "
776
- "forms and etc.) from registered Users."
777
- msgstr "Включите, чтобы проверять зарегистрированных пользователей."
778
-
779
- #: inc/cleantalk-settings.php:210
780
- msgid "Use AJAX for JavaScript check"
781
- msgstr "Использовать AJAX для проверки JavaScript"
782
-
783
- #: inc/cleantalk-settings.php:211
784
- msgid ""
785
- "Options helps protect WordPress against spam with any caching plugins. Turn "
786
- "this option on to avoid issues with caching plugins."
787
- msgstr "Данная настройка помогает избежать конфликтов с кеширующими плагинами."
788
-
789
- #: inc/cleantalk-settings.php:214
790
- msgid "Use static keys for JS check."
791
- msgstr "Использовать постоянный (статичный) ключ для проверки JS."
792
-
793
- #: inc/cleantalk-settings.php:215
794
- msgid ""
795
- "Could help if you have cache for AJAX requests and you are dealing with "
796
- "false positives. Slightly decreases protection quality. Auto - Static key "
797
- "will be used if caching plugin is spotted."
798
- msgstr ""
799
- "Может помочь, если у вас кешируются запросы AJAX и вы имеете дело с ложными "
800
- "срабатываниями. Немного снижает качество защиты. Статический ключ будет "
801
- "использоваться автоматически, если обнаружен плагин кэширования."
802
-
803
- #: inc/cleantalk-settings.php:223
804
- msgid "Check all post data"
805
- msgstr "Проверять все POST-данные"
806
-
807
- #: inc/cleantalk-settings.php:224
808
- msgid ""
809
- "Check all POST submissions from website visitors. Enable this option if you "
810
- "have spam misses on website."
811
- msgstr ""
812
- "Проверять все POST-данные, отправляемые посетителями. Активируйте, если у "
813
- "вас есть спам на сайте."
814
-
815
- #: inc/cleantalk-settings.php:226
816
- msgid " Or you don`t have records about missed spam here:"
817
- msgstr " Или у вас нет записей о спаме здесь:"
818
-
819
- #: inc/cleantalk-settings.php:226
820
- msgid "CleanTalk dashboard"
821
- msgstr "панель управления CleanTalk"
822
-
823
- #: inc/cleantalk-settings.php:229
824
- msgid "СAUTION! Option can catch POST requests in WordPress backend"
825
- msgstr ""
826
- "ВНИМАНИЕ! Опция может перехватывать все POST запросы в панели управления "
827
- "Wordpress. Отключите, если возникают проблемы/ошибки."
828
-
829
- #: inc/cleantalk-settings.php:232
830
- msgid "Set cookies"
831
- msgstr "Устанавливать куки"
832
-
833
- #: inc/cleantalk-settings.php:233
834
- msgid ""
835
- "Turn this option off to deny plugin generates any cookies on website front-"
836
- "end. This option is helpful if you use Varnish. But most of contact forms "
837
- "will not be protected if the option is turned off! <b>Warning: We strongly "
838
- "recommend you to enable this otherwise it could cause false positives spam "
839
- "detection.</b>"
840
- msgstr ""
841
- "Отключите эту опцию, чтобы запретить плагину создавать любые файлы cookies "
842
- "на веб-сайте. Эта опция полезна, если вы используете Varnish. Но большинство "
843
- "контактных форм не будут защищены, если опция отключена! <b>ВНИМАНИЕ! Мы "
844
- "настоятельно рекомендуем не отключать опцию, иначе это может привести к "
845
- "ложному обнаружению спама.</b>"
846
-
847
- #: inc/cleantalk-settings.php:237
848
- msgid "Use alternative mechanism for cookies"
849
- msgstr "Использовать альтернативный механизм хранения файлов cookie"
850
-
851
- #: inc/cleantalk-settings.php:238 inc/cleantalk-settings.php:360
852
- msgid "Doesn't use cookie or PHP sessions. Collect data for all types of bots."
853
- msgstr ""
854
- "Не использовать файлы cookies или PHP-сессии. Собирать данные обо всех типах "
855
- "ботов."
856
-
857
- #: inc/cleantalk-settings.php:243
858
- msgid "Use SSL"
859
- msgstr "Использовать SSL"
860
-
861
- #: inc/cleantalk-settings.php:244
862
- msgid "Turn this option on to use encrypted (SSL) connection with servers."
863
- msgstr ""
864
- "Включите эту опцию для использования защищенного (SSL) соединения между "
865
- "серверами."
866
-
867
- #: inc/cleantalk-settings.php:247
868
- msgid "Use Wordpress HTTP API"
869
- msgstr "Использовать стандартное Wordpress HTTP API"
870
-
871
- #: inc/cleantalk-settings.php:248
872
- msgid ""
873
- "Alternative way to connect the Cloud. Use this if you have connection "
874
- "problems."
875
- msgstr ""
876
- "Альтернативный способ подключения к CleanTalk Cloud. Используйте, если вы "
877
- "имеете проблемы с подключением."
878
-
879
- #: inc/cleantalk-settings.php:255
880
- msgid "Exclusions"
881
- msgstr "Исключения"
882
-
883
- #: inc/cleantalk-settings.php:259
884
- msgid "URL exclusions"
885
- msgstr "Исключения по URL"
886
-
887
- #: inc/cleantalk-settings.php:260
888
- msgid "You could type here URL you want to exclude. Use comma as separator."
889
- msgstr ""
890
- "Вы можете ввести здесь URL, который вы хотите исключить. Используйте запятую "
891
- "в качестве разделителя."
892
-
893
- #: inc/cleantalk-settings.php:264
894
- msgid "Use Regular Expression in URL Exclusions"
895
- msgstr "Использовать регулярное выражение в исключении по URL"
896
-
897
- #: inc/cleantalk-settings.php:268
898
- msgid "Field name exclusions"
899
- msgstr "Исключение по имени поля"
900
-
901
- #: inc/cleantalk-settings.php:269
902
- msgid ""
903
- "You could type here fields names you want to exclude. Use comma as separator."
904
- msgstr ""
905
- "Вы можете ввести здесь имена полей, которые вы хотите исключить. Используйте "
906
- "запятую в качестве разделителя."
907
-
908
- #: inc/cleantalk-settings.php:273
909
- msgid "Use Regular Expression in Field Exclusions"
910
- msgstr "Использовать регулярное выражение в исключении по полю формы."
911
-
912
- #: inc/cleantalk-settings.php:280
913
- msgid "Roles which bypass spam test. Hold CTRL to select multiple roles."
914
- msgstr ""
915
- "Роли, которые обходят проверку на спам. Удерживайте CTRL, чтобы выбрать "
916
- "несколько ролей."
917
-
918
- #: inc/cleantalk-settings.php:287
919
- msgid "Admin bar"
920
- msgstr "Админ-бар"
921
-
922
- #: inc/cleantalk-settings.php:294
923
- msgid "Show statistics in admin bar"
924
- msgstr "Показывать статистику в админбаре"
925
-
926
- #: inc/cleantalk-settings.php:295
927
- msgid ""
928
- "Show/hide icon in top level menu in WordPress backend. The number of "
929
- "submissions is being counted for past 24 hours."
930
- msgstr ""
931
- "Показать/скрыть иконку CleanTalk в админ-баре WordPress. Статистика "
932
- "подсчитывается за последние 24 часа."
933
-
934
- #: inc/cleantalk-settings.php:299
935
- msgid "Show All-time counter"
936
- msgstr "Счетчик за все время"
937
-
938
- #: inc/cleantalk-settings.php:300
939
- msgid ""
940
- "Display all-time requests counter in the admin bar. Counter displays number "
941
- "of requests since plugin installation."
942
- msgstr ""
943
- "Отображать счетчик запросов за все время в админ-баре. Счетчик показывает "
944
- "записи с момента установки."
945
-
946
- #: inc/cleantalk-settings.php:305
947
- msgid "Show 24 hours counter"
948
- msgstr "24-х часовой счетчик"
949
-
950
- #: inc/cleantalk-settings.php:306
951
- msgid ""
952
- "Display daily requests counter in the admin bar. Counter displays number of "
953
- "requests of the past 24 hours."
954
- msgstr ""
955
- "Отображать 24-х часовой счетчик запросов в админ-баре. Отображает запросы за "
956
- "последние 24 часа."
957
-
958
- #: inc/cleantalk-settings.php:311
959
- msgid "SpamFireWall counter"
960
- msgstr "Счетчик SpamFireWall"
961
-
962
- #: inc/cleantalk-settings.php:312
963
- msgid ""
964
- "Display SpamFireWall requests in the admin bar. Counter displays number of "
965
- "requests since plugin installation."
966
- msgstr ""
967
- "Отображать счетчик SpamFireWall запросов в админ-баре. Отображает количество "
968
- "запросов с момента установки плагина."
969
-
970
- #: inc/cleantalk-settings.php:325
971
- msgid "Collect details about browsers"
972
- msgstr "Собирать данные браузера"
973
-
974
- #: inc/cleantalk-settings.php:326
975
- msgid ""
976
- "Checking this box you allow plugin store information about screen size and "
977
- "browser plugins of website visitors. The option in a beta state."
978
- msgstr ""
979
- "Включая эту опцию, Вы разрешаете плагину хранить информацию о размере экрана "
980
- "и плагинах браузера посетителей. Бета опция."
981
-
982
- #: inc/cleantalk-settings.php:330
983
- msgid "Send connection reports"
984
- msgstr "Отправлять отчеты о соединении"
985
-
986
- #: inc/cleantalk-settings.php:331
987
- msgid ""
988
- "Checking this box you allow plugin to send the information about your "
989
- "connection. The option in a beta state."
990
- msgstr ""
991
- "Ставя эту галочку вы разрешаете плагину отрпавлять информацию о интернет-"
992
- "соединении. Опция находится на бета-тестировании."
993
-
994
- #: inc/cleantalk-settings.php:335
995
- msgid "Async JavaScript loading"
996
- msgstr "Асинхронная загрузка JavaScript"
997
-
998
- #: inc/cleantalk-settings.php:336
999
- msgid ""
1000
- "Use async loading for scripts. Warning: This could reduce filtration quality."
1001
- msgstr ""
1002
- "Использовать асинхронную загрузку JS-скриптов. ВНИМАНИЕ! это может понизить "
1003
- "качество спам-фильтра."
1004
-
1005
- #: inc/cleantalk-settings.php:340
1006
- msgid "Allow to add GDPR notice via shortcode"
1007
- msgstr "Разрешить добавление GDPR-уведомления с помощью шордкода"
1008
-
1009
- #: inc/cleantalk-settings.php:341
1010
- msgid ""
1011
- " Adds small checkbox under your website form. To add it you should use the "
1012
- "shortcode on the form's page: [cleantalk_gdpr_form id=\"FORM_ID\"]"
1013
- msgstr ""
1014
- "Добавить не большой чекбокс в форму. Для добавления уведомления вставьте на "
1015
- "странице с формой этот шорткод: [cleantalk_gdpr_form id=\"FORM_ID\"]"
1016
-
1017
- #: inc/cleantalk-settings.php:346
1018
- msgid "GDPR text notice"
1019
- msgstr "Текст GDPR-уведомления"
1020
-
1021
- #: inc/cleantalk-settings.php:347
1022
- msgid "This text will be added as a description to the GDPR checkbox."
1023
- msgstr "Этот текст будет добавлен к чекбоксу как описание."
1024
-
1025
- #: inc/cleantalk-settings.php:353
1026
- msgid "Store visited URLs"
1027
- msgstr "Хранить посещенные URL-ы"
1028
-
1029
- #: inc/cleantalk-settings.php:354
1030
- msgid ""
1031
- "Plugin stores last 10 visited URLs (HTTP REFFERERS) before visitor submits "
1032
- "form on the site. You can see stored visited URLS for each visitor in your "
1033
- "Dashboard. Turn the option on to improve Anti-Spam protection."
1034
- msgstr ""
1035
- "Плагин хранит последние 10 посещенных URL (HTTP REFFERERS) до того, как "
1036
- "посетитель отправит форму на сайт. Вы можете видеть сохраненные посещенные "
1037
- "URL-адреса для каждого посетителя на своей панели инструментов. Включите эту "
1038
- "опцию, чтобы улучшить защиту от спама."
1039
-
1040
- #: inc/cleantalk-settings.php:359
1041
- msgid "Use cookies less sessions"
1042
- msgstr "Использовать сеансы без cookies"
1043
-
1044
- #: inc/cleantalk-settings.php:366
1045
- msgid ""
1046
- "Notify users with selected roles about new approved comments. Hold CTRL to "
1047
- "select multiple roles."
1048
- msgstr ""
1049
- "Уведомлять пользователей с выбранными ролями о новых одобренных "
1050
- "комментариях. Удерживайте CTRL для выбора нескольких ролей."
1051
-
1052
- #: inc/cleantalk-settings.php:367
1053
- #, php-format
1054
- msgid "If enabled, overrides similar Wordpress %sdiscussion settings%s."
1055
- msgstr "Если включено, переопределяет аналогичные %sнастройки Wordpress%s."
1056
-
1057
- #: inc/cleantalk-settings.php:380
1058
- msgid "Complete deactivation"
1059
- msgstr "Полная деактивация"
1060
-
1061
- #: inc/cleantalk-settings.php:381
1062
- msgid "Leave no trace in the system after deactivation."
1063
- msgstr "Не оставлять следов в системе после деактивации."
1064
-
1065
- #: inc/cleantalk-settings.php:398
1066
- msgid "Enable White Label Mode"
1067
- msgstr "Активировать White Label Mode."
1068
-
1069
- #: inc/cleantalk-settings.php:399
1070
- #, php-format
1071
- msgid "Learn more information %shere%s."
1072
- msgstr "Узнать болье информации %sздесь%s"
1073
-
1074
- #: inc/cleantalk-settings.php:404
1075
- msgid "Hoster API Key"
1076
- msgstr "Хостинг API ключ"
1077
-
1078
- #: inc/cleantalk-settings.php:405
1079
- #, php-format
1080
- msgid "You can get it in %sCleantalk's Control Panel%s"
1081
- msgstr "Вы можете получить это в вашей %sпанели управления CleanTalk%s"
1082
-
1083
- #: inc/cleantalk-settings.php:413
1084
- msgid "Plugin name"
1085
- msgstr "Наименование плагина"
1086
-
1087
- #: inc/cleantalk-settings.php:414
1088
- #, php-format
1089
- msgid "Specify plugin name. Leave empty for deafult %sAntispam by Cleantalk%s"
1090
- msgstr ""
1091
- "Укажите название плагина. Оставьте пустым для названия по умолчанию "
1092
- "%sAntispam by Cleantalk%s"
1093
-
1094
- #: inc/cleantalk-settings.php:423
1095
- msgid "Allow users to use other key"
1096
- msgstr "Позволяет пользователям использовать другой ключ."
1097
-
1098
- #: inc/cleantalk-settings.php:424
1099
- msgid ""
1100
- "Allow users to use different Access key in their plugin settings on child "
1101
- "blogs. They could use different CleanTalk account."
1102
- msgstr ""
1103
- "Позволяет пользователям использовать разные Ключи доступа в настройках "
1104
- "плагина на их дочерних блогах. Они могут использовать разные аккаунты "
1105
- "CleanTalk."
1106
-
1107
- #: inc/cleantalk-settings.php:427
1108
- msgid ""
1109
- "Constant <b>CLEANTALK_ACCESS_KEY</b> is set. All websites will use API key "
1110
- "from this constant. Look into wp-config.php"
1111
- msgstr ""
1112
- "Константа <b>CLEANTALK_ACCESS_KEY</b> установлена. Все дочерние сайты будут "
1113
- "использовать ключ доступа из этой контсанты. Смотри в wp-config.php"
1114
-
1115
- #: inc/cleantalk-settings.php:533
1116
- msgid "CleanTalk's tech support:"
1117
- msgstr "Техническия поддержка CleanTalk: "
1118
-
1119
- #: inc/cleantalk-settings.php:539
1120
- msgid "Plugin Homepage at"
1121
- msgstr "Домашняя страница плагина на"
1122
-
1123
- #: inc/cleantalk-settings.php:540
1124
- msgid "GDPR compliance"
1125
- msgstr "Соответствие GDPR"
1126
-
1127
- #: inc/cleantalk-settings.php:541
1128
- msgid "Use s@cleantalk.org to test plugin in any WordPress form."
1129
- msgstr ""
1130
- "Используйте s@cleantalk.org чтобы проверить плагин в любой форме в WordPress."
1131
-
1132
- #: inc/cleantalk-settings.php:542
1133
- msgid "CleanTalk is registered Trademark. All rights reserved."
1134
- msgstr "CleanTalk - это зарегистрированая торговая марка. Все права защищены."
1135
-
1136
- #: inc/cleantalk-settings.php:559
1137
- #, php-format
1138
- msgid "%s has blocked <b>%s</b> spam."
1139
- msgstr "%s заблокировал <b>%s</b> спама."
1140
-
1141
- #: inc/cleantalk-settings.php:571
1142
- msgid "Click here to get anti-spam statistics"
1143
- msgstr "Щелкните, чтобы получить статистику"
1144
-
1145
- #: inc/cleantalk-settings.php:614
1146
- #, php-format
1147
- msgid "Please, enter the %splugin settings%s in main site dashboard."
1148
- msgstr ""
1149
- "Пожалуйста, перейдите в %sнастройки плагина%s в панели управления на главном "
1150
- "сайте."
1151
-
1152
- #: inc/cleantalk-settings.php:633
1153
- msgid "Error occured while API key validating. Error: "
1154
- msgstr "Произошла ошибка при проверке ключа API. Ошибка: "
1155
-
1156
- #: inc/cleantalk-settings.php:634
1157
- msgid "Error occured while automatically gettings access key. Error: "
1158
- msgstr "Произошла ошибка при автоматическом получении ключа доступа. Ошибка: "
1159
-
1160
- #: inc/cleantalk-settings.php:635
1161
- msgid "Error occured while sending sending SpamFireWall logs. Error: "
1162
- msgstr "Произошла ошибка при отправке логов Spam FireWall. Ошибка: "
1163
-
1164
- #: inc/cleantalk-settings.php:636
1165
- msgid "Error occured while updating SpamFireWall local base. Error: "
1166
- msgstr "Произошла ошибка при обновлении локальной базы Spam FireWall. Ошибка: "
1167
-
1168
- #: inc/cleantalk-settings.php:637
1169
- msgid "Error occured while checking account status. Error: "
1170
- msgstr "Произошла ошибка при проверке статуса аккаунта. Ошибка: "
1171
-
1172
- #: inc/cleantalk-settings.php:638
1173
- msgid "Error occured while excuting API call. Error: "
1174
- msgstr "Произошла ошибка при выполнении вызова API. Ошибка: "
1175
-
1176
- #: inc/cleantalk-settings.php:646
1177
- msgid "Unknown error. Error: "
1178
- msgstr "Неизвестная ошибка. Ошибка: "
1179
-
1180
- #: inc/cleantalk-settings.php:677
1181
- msgid "Errors:"
1182
- msgstr "Ошибки: "
1183
-
1184
- #: inc/cleantalk-settings.php:682
1185
- #, php-format
1186
- msgid "You can get support any time here: %s."
1187
- msgstr "Вы всегда можете получить техническую поддержку здесь: %s."
1188
-
1189
- #: inc/cleantalk-settings.php:757
1190
- msgid "Protection is active"
1191
- msgstr "Защита включена"
1192
-
1193
- #: inc/cleantalk-settings.php:759
1194
- msgid "Registration forms"
1195
- msgstr "Регистрации пользователей"
1196
-
1197
- #: inc/cleantalk-settings.php:760
1198
- msgid "Comments forms"
1199
- msgstr "Формы комментариев"
1200
-
1201
- #: inc/cleantalk-settings.php:765
1202
- msgid "Validate email for existence"
1203
- msgstr "Проверка e-mail на существование"
1204
-
1205
- #: inc/cleantalk-settings.php:769
1206
- msgid "Auto update"
1207
- msgstr "Автообновлние"
1208
-
1209
- #: inc/cleantalk-settings.php:793
1210
- msgid "<h3>Key is provided by Super Admin.</h3>"
1211
- msgstr "<h3>Ключ доступа предоставлен Супер Администратором.</h3>"
1212
-
1213
- #: inc/cleantalk-settings.php:797
1214
- msgid "Access key"
1215
- msgstr "Ключ доступа"
1216
-
1217
- #: inc/cleantalk-settings.php:812
1218
- msgid "Enter the key"
1219
- msgstr "Введите ключ"
1220
-
1221
- #: inc/cleantalk-settings.php:818
1222
- #, php-format
1223
- msgid "Account at cleantalk.org is %s."
1224
- msgstr "Аккаунт на cleantalk.org %s."
1225
-
1226
- #: inc/cleantalk-settings.php:827
1227
- msgid "Show the access key"
1228
- msgstr "Показать ключ доступа"
1229
-
1230
- #: inc/cleantalk-settings.php:838
1231
- msgid "Get Access Key Automatically"
1232
- msgstr "Получить ключ доступа автоматически"
1233
-
1234
- #: inc/cleantalk-settings.php:846
1235
- #, php-format
1236
- msgid ""
1237
- "Admin e-mail (%s) will be used for registration, if you want to use other "
1238
- "email please %sGet Access Key Manually%s."
1239
- msgstr ""
1240
- "E-mail администратора (%s) будет использован для регистрации. Если вы хотите "
1241
- "использовать другой e-mail, пожлуйста, %sполучите ключ доступа самостоятельно"
1242
- "%s."
1243
-
1244
- #: inc/cleantalk-settings.php:862
1245
- #, php-format
1246
- msgid "I accept %sLicense Agreement%s."
1247
- msgstr "Я принимаю %sЛицензионно Соглашение%s."
1248
-
1249
- #: inc/cleantalk-settings.php:888
1250
- msgid "Statistics & Reports"
1251
- msgstr "Статистика и отчеты"
1252
-
1253
- #: inc/cleantalk-settings.php:904
1254
- #, php-format
1255
- msgid "Last spam check request to %s server was at %s."
1256
- msgstr "Последний запрос проверки спама на сервере %s был произведен %s."
1257
-
1258
- #: inc/cleantalk-settings.php:905 inc/cleantalk-settings.php:906
1259
- #: inc/cleantalk-settings.php:915 inc/cleantalk-settings.php:922
1260
- #: inc/cleantalk-settings.php:923 inc/cleantalk-settings.php:931
1261
- #: inc/cleantalk-settings.php:932 inc/cleantalk-settings.php:939
1262
- #: inc/cleantalk-settings.php:940
1263
- msgid "unknown"
1264
- msgstr "неизвестно"
1265
-
1266
- #: inc/cleantalk-settings.php:912
1267
- #, php-format
1268
- msgid "Average request time for past 7 days: %s seconds."
1269
- msgstr "Среднее время запроса за последние 7 дней: %s секунд."
1270
-
1271
- #: inc/cleantalk-settings.php:921
1272
- #, php-format
1273
- msgid "Last time SpamFireWall was triggered for %s IP at %s"
1274
- msgstr "В последний раз SpamFireWall сработал на %s IP %s"
1275
-
1276
- #: inc/cleantalk-settings.php:930
1277
- #, php-format
1278
- msgid "SpamFireWall was updated %s. Now contains %s entries."
1279
- msgstr "SpamFireWall был обновлен %s. Содержится %s записей."
1280
-
1281
- #: inc/cleantalk-settings.php:938
1282
- #, php-format
1283
- msgid "SpamFireWall sent %s events at %s."
1284
- msgstr "SpamFireWall отправил %s событий %s."
1285
-
1286
- #: inc/cleantalk-settings.php:948
1287
- msgid "There are no failed connections to server."
1288
- msgstr "Проблем с подключением к серверу нет."
1289
-
1290
- #: inc/cleantalk-settings.php:975
1291
- msgid "Send report"
1292
- msgstr "Отправить отчет"
1293
-
1294
- #: inc/cleantalk-settings.php:979
1295
- msgid ""
1296
- "Please, enable \"Send connection reports\" setting to be able to send reports"
1297
- msgstr ""
1298
- "Пожалуйста, активируйте опцию \"Отправлять отчеты о соединении\" для "
1299
- "возможности отправлять отчеты."
1300
-
1301
- #: inc/cleantalk-settings.php:1327
1302
- msgid "Testing is failed. Please check the Access key."
1303
- msgstr "Ошибка тестирования. Пожалуйста, проверьте ключ доступа."
1304
-
1305
- #: inc/cleantalk-settings.php:1442
1306
- msgid "XSS check"
1307
- msgstr "Проверка XSS уязвимости"
1308
-
1309
- #: inc/cleantalk-settings.php:1443
1310
- msgid ""
1311
- "Cross-Site Scripting (XSS) — prevents malicious code to be executed/sent to "
1312
- "any user. As a result malicious scripts can not get access to the cookie "
1313
- "files, session tokens and any other confidential information browsers use "
1314
- "and store. Such scripts can even overwrite content of HTML pages. CleanTalk "
1315
- "WAF monitors for patterns of these parameters and block them."
1316
- msgstr ""
1317
- "Межсайтовый скриптинг (XSS) - предотвращает выполнение / отправку "
1318
- "вредоносного кода любому пользователю. В результате вредоносные сценарии не "
1319
- "могут получить доступ к файлам cookie, токенам сеансов и любой другой "
1320
- "конфиденциальной информации, которую используют и хранят браузеры. Такие "
1321
- "сценарии могут даже перезаписывать содержимое HTML-страниц. CleanTalk WAF "
1322
- "отслеживает шаблоны этих параметров и блокирует их."
1323
-
1324
- #: inc/cleantalk-settings.php:1446
1325
- msgid "SQL-injection check"
1326
- msgstr "Проверка на наличие SQL-injection"
1327
-
1328
- #: inc/cleantalk-settings.php:1447
1329
- msgid ""
1330
- "SQL Injection — one of the most popular ways to hack websites and programs "
1331
- "that work with databases. It is based on injection of a custom SQL code into "
1332
- "database queries. It could transmit data through GET, POST requests or "
1333
- "cookie files in an SQL code. If a website is vulnerable and execute such "
1334
- "injections then it would allow attackers to apply changes to the website's "
1335
- "MySQL database."
1336
- msgstr ""
1337
- "SQL-инъекция - один из самых популярных способов взлома сайтов и программ, "
1338
- "работающих с базами данных. Он основан на внедрении пользовательского кода "
1339
- "SQL в запросы к базе данных. Он может передавать данные через запросы GET, "
1340
- "POST или файлы cookie в коде SQL. Если веб-сайт уязвим и выполняет такие "
1341
- "инъекции, это позволит злоумышленникам применить изменения к базе данных "
1342
- "MySQL веб-сайта."
1343
-
1344
- #: inc/cleantalk-settings.php:1450
1345
- msgid "Check uploaded files"
1346
- msgstr "Проверка загруженных файлов"
1347
-
1348
- #: inc/cleantalk-settings.php:1451
1349
- msgid ""
1350
- "The option checks each uploaded file to a website for malicious code. If "
1351
- "it's possible for visitors to upload files to a website, for instance a work "
1352
- "resume, then attackers could abuse it and upload an infected file to execute "
1353
- "it later and get access to your website."
1354
- msgstr ""
1355
- "Опция проверяет каждый загруженный файл на веб-сайт на наличие вредоносного "
1356
- "кода. Если посетители могут загружать на сайт файлы, например, резюме, то "
1357
- "злоумышленники могут злоупотреблять им и загружать зараженный файл, чтобы "
1358
- "выполнить его позднее и получить доступ к вашему сайту."
1359
-
1360
- #: inc/cleantalk-users.php:15
1361
- msgid "Find spam users"
1362
- msgstr "Найти спам-пользователей"
1363
-
1364
- #: inc/cleantalk-users.php:67
1365
- msgid "Please wait for a while. CleanTalk is deleting spam users. Users left: "
1366
- msgstr "Пожалуйста, подождите. CleanTalk удаляет спам-пользователей. Осталось:"
1367
-
1368
- #: inc/cleantalk-users.php:79
1369
- msgid ""
1370
- "The plugin will check all users against blacklists database and show you "
1371
- "senders that have spam activity on other websites."
1372
- msgstr ""
1373
- "Плагин проверит всех пользователей по базе данных чёрных списков и покажет "
1374
- "отправителей, которые занимаются спамом на других сайтах."
1375
-
1376
- #: inc/cleantalk-users.php:84
1377
- msgid ""
1378
- "Allows to use user's dates to perform more accurate check. Could seriously "
1379
- "slow down the check."
1380
- msgstr ""
1381
- "Позволяет использовать даты пользователей для выполения более тщательной "
1382
- "проверки. Может серьезно замедлить проверку."
1383
-
1384
- #: inc/cleantalk-users.php:108
1385
- msgid ""
1386
- "Please wait for a while. CleanTalk is checking all users via blacklist "
1387
- "database at cleantalk.org. You will have option to delete found spam users "
1388
- "after plugin finish."
1389
- msgstr ""
1390
- "Пожалуйста, подождите. ClenTalk проверяет всех пользователей по чёрным "
1391
- "спискам на cleantalk.org. У вас появится возможность удалить обнаруженных "
1392
- "спам-пользователей как только плагин закончит."
1393
-
1394
- #: inc/cleantalk-users.php:267
1395
- msgid "Delete all users from list"
1396
- msgstr "Удалить всех пользователей в списке"
1397
-
1398
- #: inc/cleantalk-users.php:269
1399
- msgid "Download results in CSV"
1400
- msgstr "Загрузить результаты (CSV)"
1401
-
1402
- #: inc/cleantalk-users.php:273
1403
- msgid "Insert accounts"
1404
- msgstr "Добавить аккаунты"
1405
-
1406
- #: inc/cleantalk-users.php:274
1407
- msgid "Delete accounts"
1408
- msgstr "Удалить тестовые спам-аккаунты"
1409
-
1410
- #: inc/cleantalk-users.php:527
1411
- #, php-format
1412
- msgid ""
1413
- "Total users %s, checked %s, last check %s, found %s spam users and %s bad "
1414
- "users (without IP or email)"
1415
- msgstr ""
1416
- "Всего пользователей %s, проверено %s, последняя проверка %s, найдено %s спам-"
1417
- "пользователей и %s плохих пользователей (без IP или электронной почты)"
1418
-
1419
- #: inc/cleantalk-widget.php:22
1420
- msgid "CleanTalk Widget"
1421
- msgstr "Виджет CleanTalk"
1422
-
1423
- #: inc/cleantalk-widget.php:25
1424
- msgid "CleanTalk widget"
1425
- msgstr "виджет CleanTalk"
1426
-
1427
- #: inc/cleantalk-widget.php:72
1428
- msgid "CleanTalk's main page"
1429
- msgstr "Главная страница CleanTalk"
1430
-
1431
- #: inc/cleantalk-widget.php:73
1432
- msgid "spam"
1433
- msgstr "спама"
1434
-
1435
- #: inc/cleantalk-widget.php:73
1436
- msgid "blocked by"
1437
- msgstr "заблокировано"
1438
-
1439
- #: inc/cleantalk-widget.php:85
1440
- msgid "Spam blocked"
1441
- msgstr "Спама заблокировано"
1442
-
1443
- #: inc/cleantalk-widget.php:90
1444
- msgid "Title:"
1445
- msgstr "Заголовок:"
1446
-
1447
- #: inc/cleantalk-widget.php:95
1448
- msgid "Style:"
1449
- msgstr "Стиль:"
1450
-
1451
- #: inc/cleantalk-widget.php:97
1452
- msgid "CleanTalk's Style"
1453
- msgstr "Фирменный стиль CleanTalk"
1454
-
1455
- #: inc/cleantalk-widget.php:98
1456
- msgid "Light"
1457
- msgstr "Лёгкий"
1458
-
1459
- #: inc/cleantalk-widget.php:99
1460
- msgid "Extremely Light"
1461
- msgstr "Очень легкий"
1462
-
1463
- #: inc/cleantalk-widget.php:100
1464
- msgid "Dark"
1465
- msgstr "Темный"
1466
-
1467
- #: inc/cleantalk-widget.php:105
1468
- msgid "Referal link ID:"
1469
- msgstr "ID партнера:"
1470
-
1471
- #: lib/CleantalkSFW.php:71
1472
- msgid "SpamFireWall is activated for your IP "
1473
- msgstr "Спам Фаервол заблокировал ваш IP"
1474
-
1475
- #: lib/CleantalkSFW.php:72
1476
- msgid ""
1477
- "To continue working with web site, please make sure that you have enabled "
1478
- "JavaScript."
1479
- msgstr ""
1480
- "Что бы продолжить работу с сайтом, пожалуйста, убедитесь что у вас включен "
1481
- "JavaScript."
1482
-
1483
- #: lib/CleantalkSFW.php:73
1484
- msgid "Please click below to pass protection,"
1485
- msgstr "Пожалуйста, нажмите, чтобы пройти защиту,"
1486
-
1487
- #: lib/CleantalkSFW.php:74
1488
- #, php-format
1489
- msgid ""
1490
- "Or you will be automatically redirected to the requested page after %d "
1491
- "seconds."
1492
- msgstr ""
1493
- "Или вы будете автоматически переадресованы на запрашиваемую страницу через "
1494
- "%d секунд."
1495
-
1496
- #: lib/CleantalkSFW.php:75
1497
- msgid "Antispam by CleanTalk"
1498
- msgstr "Антиспам от CleanTalk"
1499
-
1500
- #: lib/CleantalkSFW.php:76
1501
- msgid "This is the testing page for SpamFireWall"
1502
- msgstr "Это тестовая страница SpamFireWall"
1503
-
1504
- #: templates/translate_banner.php:6
1505
- msgid "Help others use the plugin in your language."
1506
- msgstr "Помогите другим пользователям использовать плагин на их языке."
1507
-
1508
- #: templates/translate_banner.php:7
1509
- msgid ""
1510
- "We ask you to help with the translation of the plugin in your language. "
1511
- "Please take a few minutes to make the plugin more comfortable."
1512
- msgstr ""
1513
- "Мы просим Вас помочь с переводом плагина на ваш язык. Пожалуйста, потратьте "
1514
- "несколько минут, чтобы сделать плагин более удобным."
1515
-
1516
- #: templates/translate_banner.php:10
1517
- msgid "TRANSLATE"
1518
- msgstr "ПЕРЕВЕСТИ"
1519
-
1520
- #. Description of the plugin/theme
1521
- msgid ""
1522
- "Max power, all-in-one, no Captcha, premium anti-spam plugin. No comment "
1523
- "spam, no registration spam, no contact spam, protects any WordPress forms."
1524
- msgstr ""
1525
- "Максимальная эффективность, проверка всех форм, без Сaptcha, премиум "
1526
- "антиспам плагин. Нет спаму в комментариях, нет спаму в регистрациях, нету "
1527
- "спаму в контактных формах, защита любых форм в WordPress."
1528
-
1529
- #. Plugin URI of the plugin/theme
1530
- #. Author URI of the plugin/theme
1531
- msgid "http://cleantalk.org"
1532
- msgstr "http://cleantalk.org"
1533
-
1534
- #. Author of the plugin/theme
1535
- msgid "СleanTalk <welcome@cleantalk.org>"
1536
- msgstr "СleanTalk <welcome@cleantalk.org>"
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Anti-Spam by CleanTalk\n"
4
+ "POT-Creation-Date: 2019-10-27 16:02+0000\n"
5
+ "PO-Revision-Date: 2020-01-20 15:11+0000\n"
6
+ "Last-Translator: admin <ievlev@cleantalk.org>\n"
7
+ "Language-Team: Русский\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: Loco https://localise.biz/\n"
13
+ "X-Poedit-Basepath: ..\n"
14
+ "X-Poedit-WPHeader: cleantalk.php\n"
15
+ "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
16
+ "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
17
+ "X-Poedit-SourceCharset: UTF-8\n"
18
+ "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
19
+ "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
20
+ "_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
21
+ "Report-Msgid-Bugs-To: \n"
22
+ "X-Loco-Version: 2.3.1; wp-5.3.2\n"
23
+ "X-Poedit-SearchPath-0: .\n"
24
+ "X-Poedit-SearchPathExcluded-0: *.js\n"
25
+
26
+ #: inc/classCleantalkComments.php:32 inc/cleantalk-comments.php:16
27
+ #: inc/cleantalk-users.php:15
28
+ msgid "Check for spam"
29
+ msgstr "Проверить на спам"
30
+
31
+ #: inc/classCleantalkComments.php:33 inc/cleantalk-admin.php:350
32
+ #: inc/cleantalk-comments.php:16
33
+ msgid "Find spam comments"
34
+ msgstr "Найти спам в комментариях"
35
+
36
+ #: inc/classCleantalkComments.php:66 inc/cleantalk-comments.php:26
37
+ #: inc/cleantalk-users.php:25
38
+ msgid "Plugin Settings"
39
+ msgstr "Настройки плагина"
40
+
41
+ #: inc/classCleantalkComments.php:76 inc/cleantalk-comments.php:35
42
+ #: inc/cleantalk-users.php:34
43
+ #, php-format
44
+ msgid ""
45
+ "Antispam hosting tariff does not allow you to use this feature. To do so, "
46
+ "you need to enter an Access Key in the %splugin settings%s."
47
+ msgstr ""
48
+ "Тариф на антиспам хостинг не позволяет использовать эту функцию. Для этого "
49
+ "вам необходимо ввести ключ доступа в %sнастройках плагина%s."
50
+
51
+ #: inc/classCleantalkComments.php:101 inc/cleantalk-comments.php:60
52
+ #: inc/cleantalk-users.php:60
53
+ msgid ""
54
+ "Ajax error. Process will be automatically restarted in 3 seconds. Status: "
55
+ msgstr ""
56
+ "Ajax ошибка. Процесс проверки будет автоматически возобновлен через 3 "
57
+ "секунды. Статус:"
58
+
59
+ #: inc/classCleantalkComments.php:108 inc/cleantalk-comments.php:67
60
+ msgid ""
61
+ "Please wait for a while. CleanTalk is deleting spam comments. Comments left: "
62
+ msgstr "Пожалуйста, подождите. CleanTalk удаляет спам-комментарии. Осталось:"
63
+
64
+ #: inc/classCleantalkComments.php:118 inc/cleantalk-comments.php:77
65
+ #: inc/cleantalk-users.php:77
66
+ msgid "Start check"
67
+ msgstr "Начать проверку"
68
+
69
+ #: inc/classCleantalkComments.php:119 inc/cleantalk-comments.php:78
70
+ #: inc/cleantalk-users.php:78
71
+ msgid "Continue check"
72
+ msgstr "Продолжить проверку"
73
+
74
+ #: inc/classCleantalkComments.php:120 inc/cleantalk-comments.php:79
75
+ msgid ""
76
+ "The plugin will check all comments against blacklists database and show you "
77
+ "senders that have spam activity on other websites."
78
+ msgstr ""
79
+ "Пожалуйста, подождите. CleanTalk проверяет комментарии по черным спискам на "
80
+ "cleantalk.org. Вы сможете удалить комментарии со спамом после окончания "
81
+ "работы."
82
+
83
+ #: inc/classCleantalkComments.php:123 inc/cleantalk-comments.php:82
84
+ #: inc/cleantalk-users.php:82
85
+ msgid "Accurate check"
86
+ msgstr "Точная проверка"
87
+
88
+ #: inc/classCleantalkComments.php:125 inc/cleantalk-comments.php:84
89
+ msgid ""
90
+ "Allows to use comment's dates to perform more accurate check. Could "
91
+ "seriously slow down the check."
92
+ msgstr ""
93
+ "Позволяет использовать даты комментариев для выполения более тщательной "
94
+ "проверки. Может серьезно замедлить проверку."
95
+
96
+ #: inc/classCleantalkComments.php:128 inc/cleantalk-comments.php:87
97
+ #: inc/cleantalk-users.php:87
98
+ msgid "Specify date range"
99
+ msgstr "Указать диапазон дат"
100
+
101
+ #: inc/classCleantalkComments.php:149 inc/cleantalk-comments.php:108
102
+ msgid ""
103
+ "Please wait! CleanTalk is checking all approved and pending comments via "
104
+ "blacklist database at cleantalk.org. You will have option to delete found "
105
+ "spam comments after plugin finish."
106
+ msgstr ""
107
+ "Пожалуйста, подождите! CleanTalk проверяет комментарии по черным спискам на "
108
+ "cleantalk.org. Вы сможете удалить комментарии со спамом после окончания "
109
+ "работы."
110
+
111
+ #: inc/classCleantalkCommentsListTable.php:24
112
+ msgid "Author"
113
+ msgstr "Автор"
114
+
115
+ #: inc/classCleantalkCommentsListTable.php:25 inc/cleantalk-comments.php:158
116
+ msgid "Comment"
117
+ msgstr "Комментарий"
118
+
119
+ #: inc/classCleantalkCommentsListTable.php:26 inc/cleantalk-comments.php:159
120
+ msgid "In Response To"
121
+ msgstr "В ответ на"
122
+
123
+ #: inc/classCleantalkCommentsListTable.php:33
124
+ msgid "No spam comments."
125
+ msgstr "Нет спам комментариев."
126
+
127
+ #: inc/cleantalk-admin.php:27
128
+ #, php-format
129
+ msgid "Find spam %s"
130
+ msgstr "Найти спам %s"
131
+
132
+ #: inc/cleantalk-admin.php:31
133
+ msgid "CleanTalk Anti-Spam Log"
134
+ msgstr "CleanTalk Anti-Spam лог"
135
+
136
+ #: inc/cleantalk-admin.php:50
137
+ #, php-format
138
+ msgid "%sRefresh%s"
139
+ msgstr "%sОбновить%s"
140
+
141
+ #: inc/cleantalk-admin.php:51
142
+ #, php-format
143
+ msgid "%sConfigure%s"
144
+ msgstr "%sКонфигурация%s"
145
+
146
+ #: inc/cleantalk-admin.php:68
147
+ msgid "7 days anti-spam stats"
148
+ msgstr "Статистика атак за 7 дней"
149
+
150
+ #: inc/cleantalk-admin.php:72
151
+ msgid "Top 5 spam IPs blocked"
152
+ msgstr "Топ 5 cамых заблокированных IP"
153
+
154
+ #: inc/cleantalk-admin.php:78
155
+ msgid "Get Access key to activate Anti-Spam protection!"
156
+ msgstr "Получите ключ доступа для активации спам защиты!"
157
+
158
+ #: inc/cleantalk-admin.php:86
159
+ #, php-format
160
+ msgid "Something went wrong! Error: \"%s\"."
161
+ msgstr "Что-то пошло не так: Ошибка: \"%s\"."
162
+
163
+ #: inc/cleantalk-admin.php:90
164
+ msgid "Please, visit your dashboard."
165
+ msgstr "Пожалуйста, посетите панель управления."
166
+
167
+ #: inc/cleantalk-admin.php:104
168
+ msgid "IP"
169
+ msgstr "IP"
170
+
171
+ #: inc/cleantalk-admin.php:105
172
+ msgid "Country"
173
+ msgstr "Страна"
174
+
175
+ #: inc/cleantalk-admin.php:106
176
+ msgid "Block Count"
177
+ msgstr "Заблкирован раз"
178
+
179
+ #: inc/cleantalk-admin.php:134
180
+ #, php-format
181
+ msgid ""
182
+ "This is the count from the %s's cloud and could be different to admin bar "
183
+ "counters"
184
+ msgstr ""
185
+ "Это счетчик из %s облака, эти данные могут отличаться от данных счетчика в "
186
+ "админ-баре."
187
+
188
+ #. %s: Number of spam messages
189
+ #: inc/cleantalk-admin.php:137
190
+ #, php-format
191
+ msgid ""
192
+ "%s%s%s has blocked %s spam for all time. The statistics are automatically "
193
+ "updated every 24 hours."
194
+ msgstr ""
195
+ "%s%s%s заблокировал %s спама за все время. Статистика автоматически "
196
+ "обновляется каждый 24 часа."
197
+
198
+ #: inc/cleantalk-admin.php:148 inc/cleantalk-settings.php:544
199
+ #, php-format
200
+ msgid "Do you like CleanTalk? %sPost your feedback here%s."
201
+ msgstr "Вам понравился CleanTalk?%s Напишите свой отзыв здесь%s."
202
+
203
+ #: inc/cleantalk-admin.php:234
204
+ msgid "Translate"
205
+ msgstr "Перевести"
206
+
207
+ #: inc/cleantalk-admin.php:237
208
+ msgid "Start here"
209
+ msgstr "Начать здесь"
210
+
211
+ #: inc/cleantalk-admin.php:238
212
+ msgid "FAQ"
213
+ msgstr "FAQ"
214
+
215
+ #: inc/cleantalk-admin.php:239 inc/cleantalk-admin.php:644
216
+ #: inc/cleantalk-settings.php:575
217
+ msgid "Support"
218
+ msgstr "Поддержка"
219
+
220
+ #: inc/cleantalk-admin.php:306 inc/cleantalk-settings.php:523
221
+ msgid "Hosting AntiSpam"
222
+ msgstr "Hosting AntiSpam"
223
+
224
+ #: inc/cleantalk-admin.php:333
225
+ msgid "Failed from timeout. Going to check comments again."
226
+ msgstr "Ошибка по таймауту. Попробовать еще раз?"
227
+
228
+ #: inc/cleantalk-admin.php:334
229
+ msgid "Added"
230
+ msgstr "Добавлены"
231
+
232
+ #: inc/cleantalk-admin.php:335 inc/cleantalk-admin.php:386
233
+ msgid "Deleted"
234
+ msgstr "Удалено"
235
+
236
+ #: inc/cleantalk-admin.php:336
237
+ msgid "comments"
238
+ msgstr "комментарии"
239
+
240
+ #: inc/cleantalk-admin.php:337
241
+ msgid "Delete all spam comments?"
242
+ msgstr "Удалить ВСЕ найденные спам-комментарии?"
243
+
244
+ #: inc/cleantalk-admin.php:338
245
+ msgid "Delete checked comments?"
246
+ msgstr "Удалить отмеченые спам-комментарии?"
247
+
248
+ #: inc/cleantalk-admin.php:339
249
+ #, php-format
250
+ msgid ""
251
+ "Total comments %s. Checked %s. Found %s spam comments. %s bad comments "
252
+ "(without IP or email)."
253
+ msgstr ""
254
+ "Всего комментариев %s. Проверено %s. Найдено %s спам комментариев. %s плохих "
255
+ "комментариев (без IP и Email'а)."
256
+
257
+ #: inc/cleantalk-admin.php:340 inc/cleantalk-admin.php:393
258
+ #: inc/cleantalk-users.php:531
259
+ msgid "Please do backup of WordPress database before delete any accounts!"
260
+ msgstr ""
261
+ "Пожалуйста, сделайте резервную копию базы данных Wordpress перед удалением "
262
+ "аккаунтов."
263
+
264
+ #: inc/cleantalk-admin.php:351
265
+ msgid "The sender has been whitelisted."
266
+ msgstr "Отправитель был добавлен в белый список."
267
+
268
+ #: inc/cleantalk-admin.php:352
269
+ msgid "The sender has been blacklisted."
270
+ msgstr "Отправитель был добавлен в черный список."
271
+
272
+ #: inc/cleantalk-admin.php:353 inc/cleantalk-public.php:3321
273
+ #, php-format
274
+ msgid "Feedback has been sent to %sCleanTalk Dashboard%s."
275
+ msgstr "Обратная связь отправлена в панель управления %sCleanTalk%s."
276
+
277
+ #: inc/cleantalk-admin.php:383
278
+ msgid "Failed from timeout. Going to check users again."
279
+ msgstr "Ошибка по таймауту. Попробовать еще раз?"
280
+
281
+ #: inc/cleantalk-admin.php:384
282
+ msgid "Failed from timeout. Going to run a new attempt to delete spam users."
283
+ msgstr "Ошибка по таймауту. Попробовать еще раз?"
284
+
285
+ #: inc/cleantalk-admin.php:385
286
+ msgid "Inserted"
287
+ msgstr "Добавлено"
288
+
289
+ #: inc/cleantalk-admin.php:387
290
+ msgid "users."
291
+ msgstr "пользователей."
292
+
293
+ #: inc/cleantalk-admin.php:388
294
+ msgid "Delete all spam users?"
295
+ msgstr "Удалить ВСЕХ найденых спам-пользователей?"
296
+
297
+ #: inc/cleantalk-admin.php:389
298
+ msgid "Delete checked users?"
299
+ msgstr "Удалить отмеченых спам-пользователей?"
300
+
301
+ #: inc/cleantalk-admin.php:392
302
+ #, php-format
303
+ msgid ""
304
+ "Total users %s, checked %s, found %s spam users and %s bad users (without IP "
305
+ "or email)"
306
+ msgstr ""
307
+ "Всего пользователей %s, проверено %s, найдено %s спам пользователей и %s "
308
+ "плохих пользователей (без IP и Email'а)"
309
+
310
+ #: inc/cleantalk-admin.php:401
311
+ msgid "Find spam-users"
312
+ msgstr "Найти спам-пользователей"
313
+
314
+ #: inc/cleantalk-admin.php:449
315
+ #, php-format
316
+ msgid "Unable to get Access key automatically: %s"
317
+ msgstr "Невозможно получить ключ автоматически: %s"
318
+
319
+ #: inc/cleantalk-admin.php:450
320
+ msgid "Get the Access key"
321
+ msgstr "Получить ключ вручную"
322
+
323
+ #: inc/cleantalk-admin.php:459
324
+ #, php-format
325
+ msgid "Please enter Access Key in %s settings to enable anti spam protection!"
326
+ msgstr ""
327
+ "Пожалуйста, укажите Ключ доступа в настройках %s для активации защиты от "
328
+ "спама!"
329
+
330
+ #: inc/cleantalk-admin.php:469
331
+ #, php-format
332
+ msgid "%s trial period ends, please upgrade to %s!"
333
+ msgstr ""
334
+ "%s заканчивается ознакомительный срок пользования антиспам плагином "
335
+ "CleanTalk, пожалуйста продлите подключение %s."
336
+
337
+ #: inc/cleantalk-admin.php:481
338
+ msgid "RENEW ANTI-SPAM"
339
+ msgstr "ПРОДЛИТЬ АНТИСПАМ"
340
+
341
+ #: inc/cleantalk-admin.php:482
342
+ msgid "next year"
343
+ msgstr "следующий год"
344
+
345
+ #: inc/cleantalk-admin.php:486
346
+ #, php-format
347
+ msgid "Please renew your anti-spam license for %s."
348
+ msgstr "Пожалуйста, продлите свою антиспам-лицензию на %s."
349
+
350
+ #: inc/cleantalk-admin.php:511
351
+ msgid "Make it right!"
352
+ msgstr "Сделай все правильно!"
353
+
354
+ #: inc/cleantalk-admin.php:513
355
+ #, php-format
356
+ msgid "%sGet premium%s"
357
+ msgstr "%sПолучить премиум%s"
358
+
359
+ #: inc/cleantalk-admin.php:552
360
+ msgid "Since"
361
+ msgstr "От"
362
+
363
+ #: inc/cleantalk-admin.php:558
364
+ msgid ""
365
+ "All / Allowed / Blocked submissions. The number of submissions is being "
366
+ "counted since CleanTalk plugin installation."
367
+ msgstr "Все / Разрешенные / Запрещенные запросы с момента установки CleanTalk."
368
+
369
+ #: inc/cleantalk-admin.php:558
370
+ msgid "All"
371
+ msgstr "Все"
372
+
373
+ #: inc/cleantalk-admin.php:566
374
+ msgid ""
375
+ "Allowed / Blocked submissions. The number of submissions for past 24 hours. "
376
+ msgstr "Разрешенные / Запрещенные запросы за последние 24 часа."
377
+
378
+ #: inc/cleantalk-admin.php:566
379
+ msgid "Day"
380
+ msgstr "За день"
381
+
382
+ #: inc/cleantalk-admin.php:572
383
+ msgid ""
384
+ "All / Blocked events. Access attempts regitred by SpamFireWall counted since "
385
+ "the last plugin activation."
386
+ msgstr ""
387
+ "Все / Запрещенные попытки просмотра сайта. Отображет попытки с момента "
388
+ "последней активации плагина."
389
+
390
+ #: inc/cleantalk-admin.php:582
391
+ msgid ""
392
+ "Allowed / Blocked submissions. The number of submissions is being counted "
393
+ "since "
394
+ msgstr "Разрешенные / Запрещенные попытки."
395
+
396
+ #: inc/cleantalk-admin.php:593
397
+ msgid "dashboard"
398
+ msgstr "панель управления"
399
+
400
+ #: inc/cleantalk-admin.php:600
401
+ msgid "Settings"
402
+ msgstr "Настройки"
403
+
404
+ #: inc/cleantalk-admin.php:608
405
+ msgid "Bulk spam comments removal tool."
406
+ msgstr "Инструмент массового удаления пользователей."
407
+
408
+ #: inc/cleantalk-admin.php:608 inc/cleantalk-settings.php:882
409
+ msgid "Check comments for spam"
410
+ msgstr "Проверка комментариев"
411
+
412
+ #: inc/cleantalk-admin.php:618 inc/cleantalk-settings.php:885
413
+ msgid "Check users for spam"
414
+ msgstr "Проверить пользователей на спам"
415
+
416
+ #: inc/cleantalk-admin.php:627
417
+ msgid "Reset first counter"
418
+ msgstr "Сбросить первый счетчик"
419
+
420
+ #: inc/cleantalk-admin.php:635
421
+ msgid "Reset all counters"
422
+ msgstr "Сбросить все счетчики"
423
+
424
+ #: inc/cleantalk-comments.php:221 inc/cleantalk-users.php:220
425
+ msgid "Approve"
426
+ msgstr "Одобрить"
427
+
428
+ #: inc/cleantalk-comments.php:223 inc/cleantalk-users.php:222
429
+ msgid "Delete"
430
+ msgstr "Удалить"
431
+
432
+ #: inc/cleantalk-comments.php:265
433
+ msgid "Delete all comments from the list"
434
+ msgstr "Удалить все сообщения в списке"
435
+
436
+ #: inc/cleantalk-comments.php:266 inc/cleantalk-users.php:268
437
+ msgid "Delete selected"
438
+ msgstr "Удалить отмеченные"
439
+
440
+ #: inc/cleantalk-comments.php:270
441
+ msgid "Insert comments"
442
+ msgstr "Добавить комментарии"
443
+
444
+ #: inc/cleantalk-comments.php:271
445
+ msgid "Delete comments"
446
+ msgstr "Удалить тестовые спам-комментарии?"
447
+
448
+ #: inc/cleantalk-comments.php:276 inc/cleantalk-users.php:279
449
+ msgid ""
450
+ "There is some differencies between blacklists database and our API "
451
+ "mechanisms. Blacklists shows all history of spam activity, but our API (that "
452
+ "used in spam checking) used another parameters, too: last day of activity, "
453
+ "number of spam attacks during last days etc. This mechanisms help us to "
454
+ "reduce number of false positivitie. So, there is nothing strange, if some "
455
+ "emails/IPs will be not found by this checking."
456
+ msgstr ""
457
+ "Есть некоторые отличия между проверкой через базу данных черных списков и "
458
+ "через механизм API. В черных списках отображается вся история о спам-"
459
+ "активности, но наш API используетс другие механизмы: последний день "
460
+ "активности, количество спам-атак в течение последних дней и т. д. Эти "
461
+ "механизмы помогают нам сократить количество ложных обнаружений. Поэтому, нет "
462
+ "ничего странного, если некоторые письма/IP не будут обнаружены при этой "
463
+ "проверке."
464
+
465
+ #: inc/cleantalk-comments.php:281 inc/cleantalk-users.php:284
466
+ msgid "Stop deletion"
467
+ msgstr "Остановить удаление"
468
+
469
+ #: inc/cleantalk-comments.php:495
470
+ #, php-format
471
+ msgid ""
472
+ "Total comments %s. Checked %s. Last check %s. Found %s spam comments. %s bad "
473
+ "comments (without IP or email)."
474
+ msgstr ""
475
+ "Всего комментариев %s. Проверено %s. Последняя проверка %s. Найдено %s спам-"
476
+ "комментариев. %s плохие комментарии (без IP или электронной почты)."
477
+
478
+ #: inc/cleantalk-comments.php:499
479
+ msgid "Please do backup of WordPress database before delete any comments!"
480
+ msgstr ""
481
+ "Пожалуйста, сделайте резервную копию базы данных Wordpress перед удалением "
482
+ "комментариев."
483
+
484
+ #: inc/cleantalk-public.php:500 inc/cleantalk-public.php:641
485
+ #: inc/cleantalk-public.php:743 inc/cleantalk-public.php:2363
486
+ #: inc/cleantalk-public.php:3052
487
+ msgid "Spam protection by CleanTalk"
488
+ msgstr "Спам защита CleanTalk"
489
+
490
+ #: inc/cleantalk-public.php:1233 inc/cleantalk-public.php:1361
491
+ #: inc/cleantalk-public.php:1379
492
+ msgid "Spam protection"
493
+ msgstr "Защита от спама"
494
+
495
+ #: inc/cleantalk-public.php:1332
496
+ msgid "CleanTalk AntiSpam: This message is possible spam."
497
+ msgstr "CleanTalk AntiSpam: Это сообщение, возможно, является спамом."
498
+
499
+ #: inc/cleantalk-public.php:1333
500
+ msgid "You could check it in CleanTalk's anti-spam database:"
501
+ msgstr "Вы можете проверить это по антиспам-базе CleanTalk:"
502
+
503
+ #: inc/cleantalk-public.php:1569
504
+ #, php-format
505
+ msgid "Registration approved by %s."
506
+ msgstr "Регистрация одобрена %s."
507
+
508
+ #: inc/cleantalk-public.php:1849
509
+ msgid "CleanTalk AntiSpam: This registration is spam."
510
+ msgstr "CleanTalk AntiSpam: Эта регистрация - спам."
511
+
512
+ #: inc/cleantalk-public.php:1850 inc/cleantalk-public.php:2219
513
+ #: inc/cleantalk-public.php:2387 inc/cleantalk-public.php:2542
514
+ msgid "CleanTalk's anti-spam database:"
515
+ msgstr "Антиспам-база CleanTalk:"
516
+
517
+ #: inc/cleantalk-public.php:2218 inc/cleantalk-public.php:2386
518
+ #: inc/cleantalk-public.php:2541
519
+ msgid "CleanTalk AntiSpam: This message is spam."
520
+ msgstr "CleanTalk AntiSpam: Это сообщение - спам."
521
+
522
+ #: inc/cleantalk-public.php:2666
523
+ msgid "Comment approved. Anti-spam by CleanTalk."
524
+ msgstr "Комментарий одобрен. Антиспам от CleanTalk."
525
+
526
+ #: inc/cleantalk-public.php:3219
527
+ msgid "Attention, please!"
528
+ msgstr "Внимание!"
529
+
530
+ #: inc/cleantalk-public.php:3220
531
+ #, php-format
532
+ msgid "\"%s\" plugin error on your site \"%s\":"
533
+ msgstr "\"%s\" ошибка плагина на сайте \"%s\":"
534
+
535
+ #: inc/cleantalk-public.php:3222
536
+ #, php-format
537
+ msgid "[%s] \"%s\" error!"
538
+ msgstr "[%s] \"%s\" ошибка!"
539
+
540
+ #: inc/cleantalk-public.php:3271
541
+ msgid ""
542
+ "By using this form you agree with the storage and processing of your data by "
543
+ "using the Privacy Policy on this website."
544
+ msgstr ""
545
+ "Используя эту форму, вы соглашаетесь с хранением и обработкой ваших данных, "
546
+ "в соответствии с Политикой конфиденциальности на этом сайте."
547
+
548
+ #: inc/cleantalk-public.php:3319
549
+ msgid "Error occured while sending feedback."
550
+ msgstr "Случилась ошибка при отправке обратной связи."
551
+
552
+ #: inc/cleantalk-public.php:3320
553
+ msgid "Feedback wasn't sent. There is no associated request."
554
+ msgstr "Обратная связь не была отправлена. Нет связанного запроса."
555
+
556
+ #: inc/cleantalk-public.php:3364
557
+ msgid "Sender info"
558
+ msgstr "Информация об отправителе"
559
+
560
+ #: inc/cleantalk-public.php:3367
561
+ msgid "by"
562
+ msgstr " от"
563
+
564
+ #: inc/cleantalk-public.php:3378
565
+ msgid "No email"
566
+ msgstr "Email отсутствует"
567
+
568
+ #: inc/cleantalk-public.php:3388
569
+ msgid "No IP"
570
+ msgstr "IP отсутствует"
571
+
572
+ #: inc/cleantalk-public.php:3391
573
+ msgid "Mark as spam"
574
+ msgstr "Отметить как спам"
575
+
576
+ #: inc/cleantalk-public.php:3392
577
+ msgid "Unspam"
578
+ msgstr "Вернуть из спама"
579
+
580
+ #: inc/cleantalk-public.php:3394
581
+ msgid "Marked as spam."
582
+ msgstr "Отмечено как спам."
583
+
584
+ #: inc/cleantalk-public.php:3395
585
+ msgid "Marked as not spam."
586
+ msgstr "Отмечено как не спам."
587
+
588
+ #: inc/cleantalk-settings.php:96
589
+ msgid "SpamFireWall"
590
+ msgstr "SpamFireWall"
591
+
592
+ #: inc/cleantalk-settings.php:97
593
+ msgid ""
594
+ "This option allows to filter spam bots before they access website. Also "
595
+ "reduces CPU usage on hosting server and accelerates pages load time."
596
+ msgstr ""
597
+ "Эта опция позволяет фильтровать спам-ботов прежде, чем они войдут на сайт. "
598
+ "Также уменьшает загрузку процессора на хостинге и ускоряет время загрузки "
599
+ "страниц."
600
+
601
+ #: inc/cleantalk-settings.php:104
602
+ msgid "Forms to protect"
603
+ msgstr "Защищаемые формы"
604
+
605
+ #: inc/cleantalk-settings.php:110
606
+ msgid "Advanced settings"
607
+ msgstr "Продвинутые настройки"
608
+
609
+ #: inc/cleantalk-settings.php:117
610
+ msgid "Registration Forms"
611
+ msgstr "Формы регистрации"
612
+
613
+ #: inc/cleantalk-settings.php:118
614
+ msgid "WordPress, BuddyPress, bbPress, S2Member, WooCommerce."
615
+ msgstr "WordPress, BuddyPress, bbPress, S2Member, WooCommerce."
616
+
617
+ #: inc/cleantalk-settings.php:121
618
+ msgid "Comments form"
619
+ msgstr "Комментарии в блоге"
620
+
621
+ #: inc/cleantalk-settings.php:122
622
+ msgid "WordPress, JetPack, WooCommerce."
623
+ msgstr "WordPress, JetPack, WooCommerce."
624
+
625
+ #: inc/cleantalk-settings.php:125 inc/cleantalk-settings.php:761
626
+ msgid "Contact forms"
627
+ msgstr "Контактные формы"
628
+
629
+ #: inc/cleantalk-settings.php:126
630
+ msgid ""
631
+ "Contact Form 7, Formidable forms, JetPack, Fast Secure Contact Form, "
632
+ "WordPress Landing Pages, Gravity Forms."
633
+ msgstr ""
634
+ "Contact Form 7, Formidable Forms, Jetpack, Fast Secure Contact Form, "
635
+ "WordPress Landing Pages, Gravity Forms."
636
+
637
+ #: inc/cleantalk-settings.php:129 inc/cleantalk-settings.php:762
638
+ msgid "Custom contact forms"
639
+ msgstr "Произвольные контактные формы"
640
+
641
+ #: inc/cleantalk-settings.php:130
642
+ msgid "Anti spam test for any WordPress themes or contacts forms."
643
+ msgstr "Защита от спама любой контактной формы или темы."
644
+
645
+ #: inc/cleantalk-settings.php:133 inc/cleantalk-settings.php:775
646
+ msgid "WooCommerce checkout form"
647
+ msgstr "Форма заказа WooCommerce"
648
+
649
+ #: inc/cleantalk-settings.php:134
650
+ msgid "Anti spam test for WooCommerce checkout form."
651
+ msgstr "Спам тест для формы заказа WooCommerce"
652
+
653
+ #: inc/cleantalk-settings.php:138
654
+ msgid "Spam test for registration during checkout"
655
+ msgstr "Регистрация на странице заказа"
656
+
657
+ #: inc/cleantalk-settings.php:139
658
+ msgid ""
659
+ "Enable anti spam test for registration process which during woocommerce's "
660
+ "checkout."
661
+ msgstr ""
662
+ "Включить защиту от спама в регистрациях, которые проходят во время "
663
+ "оформления заказа."
664
+
665
+ #: inc/cleantalk-settings.php:145
666
+ msgid "Test default Wordpress search form for spam"
667
+ msgstr "Стандартная форма поиска Wordpress"
668
+
669
+ #: inc/cleantalk-settings.php:146
670
+ msgid "Spam protection for Search form."
671
+ msgstr "Защита от спама для Форм поиска."
672
+
673
+ #: inc/cleantalk-settings.php:148
674
+ #, php-format
675
+ msgid "Read more about %sspam protection for Search form%s on our blog."
676
+ msgstr "Прочтите о %sспам-защите для Форм поиска%s на нашем блоге."
677
+
678
+ #: inc/cleantalk-settings.php:156
679
+ msgid "Protect external forms"
680
+ msgstr "Защита внешних форм"
681
+
682
+ #: inc/cleantalk-settings.php:157
683
+ msgid ""
684
+ "Turn this option on to protect forms on your WordPress that send data to "
685
+ "third-part servers (like MailChimp)."
686
+ msgstr ""
687
+ "Включите эту опцию, что бы защитить формы, которые отсылают данные на "
688
+ "сторонние ресурсы, например MailChimp."
689
+
690
+ #: inc/cleantalk-settings.php:161
691
+ msgid "Capture buffer"
692
+ msgstr "Захват буфера"
693
+
694
+ #: inc/cleantalk-settings.php:162
695
+ msgid ""
696
+ "This setting gives you more sophisticated and strengthened protection for "
697
+ "external forms. But it could break plugins which use a buffer like Ninja "
698
+ "Forms."
699
+ msgstr ""
700
+ "Этот параметр дает вам более сложную и усиленную защиту для внешних форм. Но "
701
+ "это может сломать плагины, которые используют буфер, такой как Ninja Forms."
702
+
703
+ #: inc/cleantalk-settings.php:167
704
+ msgid "Protect internal forms"
705
+ msgstr "Защита внутренних форм"
706
+
707
+ #: inc/cleantalk-settings.php:168
708
+ msgid ""
709
+ "This option will enable protection for custom (hand-made) AJAX forms with "
710
+ "PHP scripts handlers on your WordPress."
711
+ msgstr "Эта опция обеспечит защиту созданных вручную форм, использующих AJAX."
712
+
713
+ #: inc/cleantalk-settings.php:175
714
+ msgid "Comments and Messages"
715
+ msgstr "Комментарии и сообщения"
716
+
717
+ #: inc/cleantalk-settings.php:178
718
+ msgid "BuddyPress Private Messages"
719
+ msgstr "Личные сообщения buddyPress"
720
+
721
+ #: inc/cleantalk-settings.php:179
722
+ msgid "Check buddyPress private messages."
723
+ msgstr "Проверять личные сообщения buddyPress "
724
+
725
+ #: inc/cleantalk-settings.php:182
726
+ msgid "Don't check trusted user's comments"
727
+ msgstr "Не проверять доверенных пользователей"
728
+
729
+ #: inc/cleantalk-settings.php:183
730
+ #, php-format
731
+ msgid "Don't check comments for users with above %d comments."
732
+ msgstr "Не проверять комментарии пользователей с более %d комментариями."
733
+
734
+ #: inc/cleantalk-settings.php:186
735
+ msgid "Automatically delete spam comments"
736
+ msgstr "Автоматически удалять спам-комментарии"
737
+
738
+ #: inc/cleantalk-settings.php:187
739
+ #, php-format
740
+ msgid "Delete spam comments older than %d days."
741
+ msgstr "Удалять комментарии старше %d дней."
742
+
743
+ #: inc/cleantalk-settings.php:190
744
+ msgid "Remove links from approved comments"
745
+ msgstr "Удалять ссылки из одобреных комментариев"
746
+
747
+ #: inc/cleantalk-settings.php:191
748
+ msgid "Remove links from approved comments. Replace it with \"[Link deleted]\""
749
+ msgstr "Удалять ссылки из одобренных сообщений"
750
+
751
+ #: inc/cleantalk-settings.php:194
752
+ msgid "Show links to check Emails, IPs for spam."
753
+ msgstr "Отобразить ссылки для проверки Email'ов и IP адресов."
754
+
755
+ #: inc/cleantalk-settings.php:195
756
+ msgid ""
757
+ "Shows little icon near IP addresses and Emails allowing you to check it via "
758
+ "CleanTalk's database. Also allowing you to manage comments from the public "
759
+ "post's page."
760
+ msgstr ""
761
+ "Показывает маленькую иконку около IP и Email'a позволяющую проверить их "
762
+ "через базу данных. Так же позволяет управлять комментариями с публичной "
763
+ "страницы записи."
764
+
765
+ #: inc/cleantalk-settings.php:203
766
+ msgid "Data Processing"
767
+ msgstr "Обработка данных"
768
+
769
+ #: inc/cleantalk-settings.php:206
770
+ msgid "Protect logged in Users"
771
+ msgstr "Проверять залогиненых пользователей"
772
+
773
+ #: inc/cleantalk-settings.php:207
774
+ msgid ""
775
+ "Turn this option on to check for spam any submissions (comments, contact "
776
+ "forms and etc.) from registered Users."
777
+ msgstr "Включите, чтобы проверять зарегистрированных пользователей."
778
+
779
+ #: inc/cleantalk-settings.php:210
780
+ msgid "Use AJAX for JavaScript check"
781
+ msgstr "Использовать AJAX для проверки JavaScript"
782
+
783
+ #: inc/cleantalk-settings.php:211
784
+ msgid ""
785
+ "Options helps protect WordPress against spam with any caching plugins. Turn "
786
+ "this option on to avoid issues with caching plugins."
787
+ msgstr "Данная настройка помогает избежать конфликтов с кеширующими плагинами."
788
+
789
+ #: inc/cleantalk-settings.php:214
790
+ msgid "Use static keys for JS check."
791
+ msgstr "Использовать постоянный (статичный) ключ для проверки JS."
792
+
793
+ #: inc/cleantalk-settings.php:215
794
+ msgid ""
795
+ "Could help if you have cache for AJAX requests and you are dealing with "
796
+ "false positives. Slightly decreases protection quality. Auto - Static key "
797
+ "will be used if caching plugin is spotted."
798
+ msgstr ""
799
+ "Может помочь, если у вас кешируются запросы AJAX и вы имеете дело с ложными "
800
+ "срабатываниями. Немного снижает качество защиты. Статический ключ будет "
801
+ "использоваться автоматически, если обнаружен плагин кэширования."
802
+
803
+ #: inc/cleantalk-settings.php:223
804
+ msgid "Check all post data"
805
+ msgstr "Проверять все POST-данные"
806
+
807
+ #: inc/cleantalk-settings.php:224
808
+ msgid ""
809
+ "Check all POST submissions from website visitors. Enable this option if you "
810
+ "have spam misses on website."
811
+ msgstr ""
812
+ "Проверять все POST-данные, отправляемые посетителями. Активируйте, если у "
813
+ "вас есть спам на сайте."
814
+
815
+ #: inc/cleantalk-settings.php:226
816
+ msgid " Or you don`t have records about missed spam here:"
817
+ msgstr " Или у вас нет записей о спаме здесь:"
818
+
819
+ #: inc/cleantalk-settings.php:226
820
+ msgid "CleanTalk dashboard"
821
+ msgstr "панель управления CleanTalk"
822
+
823
+ #: inc/cleantalk-settings.php:229
824
+ msgid "СAUTION! Option can catch POST requests in WordPress backend"
825
+ msgstr ""
826
+ "ВНИМАНИЕ! Опция может перехватывать все POST запросы в панели управления "
827
+ "Wordpress. Отключите, если возникают проблемы/ошибки."
828
+
829
+ #: inc/cleantalk-settings.php:232
830
+ msgid "Set cookies"
831
+ msgstr "Устанавливать куки"
832
+
833
+ #: inc/cleantalk-settings.php:233
834
+ msgid ""
835
+ "Turn this option off to deny plugin generates any cookies on website front-"
836
+ "end. This option is helpful if you use Varnish. But most of contact forms "
837
+ "will not be protected if the option is turned off! <b>Warning: We strongly "
838
+ "recommend you to enable this otherwise it could cause false positives spam "
839
+ "detection.</b>"
840
+ msgstr ""
841
+ "Отключите эту опцию, чтобы запретить плагину создавать любые файлы cookies "
842
+ "на веб-сайте. Эта опция полезна, если вы используете Varnish. Но большинство "
843
+ "контактных форм не будут защищены, если опция отключена! <b>ВНИМАНИЕ! Мы "
844
+ "настоятельно рекомендуем не отключать опцию, иначе это может привести к "
845
+ "ложному обнаружению спама.</b>"
846
+
847
+ #: inc/cleantalk-settings.php:237
848
+ msgid "Use alternative mechanism for cookies"
849
+ msgstr "Использовать альтернативный механизм хранения файлов cookie"
850
+
851
+ #: inc/cleantalk-settings.php:238 inc/cleantalk-settings.php:360
852
+ msgid "Doesn't use cookie or PHP sessions. Collect data for all types of bots."
853
+ msgstr ""
854
+ "Не использовать файлы cookies или PHP-сессии. Собирать данные обо всех типах "
855
+ "ботов."
856
+
857
+ #: inc/cleantalk-settings.php:243
858
+ msgid "Use SSL"
859
+ msgstr "Использовать SSL"
860
+
861
+ #: inc/cleantalk-settings.php:244
862
+ msgid "Turn this option on to use encrypted (SSL) connection with servers."
863
+ msgstr ""
864
+ "Включите эту опцию для использования защищенного (SSL) соединения между "
865
+ "серверами."
866
+
867
+ #: inc/cleantalk-settings.php:247
868
+ msgid "Use Wordpress HTTP API"
869
+ msgstr "Использовать стандартное Wordpress HTTP API"
870
+
871
+ #: inc/cleantalk-settings.php:248
872
+ msgid ""
873
+ "Alternative way to connect the Cloud. Use this if you have connection "
874
+ "problems."
875
+ msgstr ""
876
+ "Альтернативный способ подключения к CleanTalk Cloud. Используйте, если вы "
877
+ "имеете проблемы с подключением."
878
+
879
+ #: inc/cleantalk-settings.php:255
880
+ msgid "Exclusions"
881
+ msgstr "Исключения"
882
+
883
+ #: inc/cleantalk-settings.php:259
884
+ msgid "URL exclusions"
885
+ msgstr "Исключения по URL"
886
+
887
+ #: inc/cleantalk-settings.php:260
888
+ msgid "You could type here URL you want to exclude. Use comma as separator."
889
+ msgstr ""
890
+ "Вы можете ввести здесь URL, который вы хотите исключить. Используйте запятую "
891
+ "в качестве разделителя."
892
+
893
+ #: inc/cleantalk-settings.php:264
894
+ msgid "Use Regular Expression in URL Exclusions"
895
+ msgstr "Использовать регулярное выражение в исключении по URL"
896
+
897
+ #: inc/cleantalk-settings.php:268
898
+ msgid "Field name exclusions"
899
+ msgstr "Исключение по имени поля"
900
+
901
+ #: inc/cleantalk-settings.php:269
902
+ msgid ""
903
+ "You could type here fields names you want to exclude. Use comma as separator."
904
+ msgstr ""
905
+ "Вы можете ввести здесь имена полей, которые вы хотите исключить. Используйте "
906
+ "запятую в качестве разделителя."
907
+
908
+ #: inc/cleantalk-settings.php:273
909
+ msgid "Use Regular Expression in Field Exclusions"
910
+ msgstr "Использовать регулярное выражение в исключении по полю формы."
911
+
912
+ #: inc/cleantalk-settings.php:280
913
+ msgid "Roles which bypass spam test. Hold CTRL to select multiple roles."
914
+ msgstr ""
915
+ "Роли, которые обходят проверку на спам. Удерживайте CTRL, чтобы выбрать "
916
+ "несколько ролей."
917
+
918
+ #: inc/cleantalk-settings.php:287
919
+ msgid "Admin bar"
920
+ msgstr "Админ-бар"
921
+
922
+ #: inc/cleantalk-settings.php:294
923
+ msgid "Show statistics in admin bar"
924
+ msgstr "Показывать статистику в админбаре"
925
+
926
+ #: inc/cleantalk-settings.php:295
927
+ msgid ""
928
+ "Show/hide icon in top level menu in WordPress backend. The number of "
929
+ "submissions is being counted for past 24 hours."
930
+ msgstr ""
931
+ "Показать/скрыть иконку в админ-баре WordPress. Статистика подсчитывается за "
932
+ "последние 24 часа."
933
+
934
+ #: inc/cleantalk-settings.php:299
935
+ msgid "Show All-time counter"
936
+ msgstr "Счетчик за все время"
937
+
938
+ #: inc/cleantalk-settings.php:300
939
+ msgid ""
940
+ "Display all-time requests counter in the admin bar. Counter displays number "
941
+ "of requests since plugin installation."
942
+ msgstr ""
943
+ "Отображать счетчик запросов за все время в админ-баре. Счетчик показывает "
944
+ "записи с момента установки."
945
+
946
+ #: inc/cleantalk-settings.php:305
947
+ msgid "Show 24 hours counter"
948
+ msgstr "24-х часовой счетчик"
949
+
950
+ #: inc/cleantalk-settings.php:306
951
+ msgid ""
952
+ "Display daily requests counter in the admin bar. Counter displays number of "
953
+ "requests of the past 24 hours."
954
+ msgstr ""
955
+ "Отображать 24-х часовой счетчик запросов в админ-баре. Отображает запросы за "
956
+ "последние 24 часа."
957
+
958
+ #: inc/cleantalk-settings.php:311
959
+ msgid "SpamFireWall counter"
960
+ msgstr "Счетчик SpamFireWall"
961
+
962
+ #: inc/cleantalk-settings.php:312
963
+ msgid ""
964
+ "Display SpamFireWall requests in the admin bar. Counter displays number of "
965
+ "requests since plugin installation."
966
+ msgstr ""
967
+ "Отображать счетчик SpamFireWall запросов в админ-баре. Отображает количество "
968
+ "запросов с момента установки плагина."
969
+
970
+ #: inc/cleantalk-settings.php:325
971
+ msgid "Collect details about browsers"
972
+ msgstr "Собирать данные браузера"
973
+
974
+ #: inc/cleantalk-settings.php:326
975
+ msgid ""
976
+ "Checking this box you allow plugin store information about screen size and "
977
+ "browser plugins of website visitors. The option in a beta state."
978
+ msgstr ""
979
+ "Включая эту опцию, Вы разрешаете плагину хранить информацию о размере экрана "
980
+ "и плагинах браузера посетителей. Бета опция."
981
+
982
+ #: inc/cleantalk-settings.php:330
983
+ msgid "Send connection reports"
984
+ msgstr "Отправлять отчеты о соединении"
985
+
986
+ #: inc/cleantalk-settings.php:331
987
+ msgid ""
988
+ "Checking this box you allow plugin to send the information about your "
989
+ "connection. The option in a beta state."
990
+ msgstr ""
991
+ "Ставя эту галочку вы разрешаете плагину отрпавлять информацию о интернет-"
992
+ "соединении. Опция находится на бета-тестировании."
993
+
994
+ #: inc/cleantalk-settings.php:335
995
+ msgid "Async JavaScript loading"
996
+ msgstr "Асинхронная загрузка JavaScript"
997
+
998
+ #: inc/cleantalk-settings.php:336
999
+ msgid ""
1000
+ "Use async loading for scripts. Warning: This could reduce filtration quality."
1001
+ msgstr ""
1002
+ "Использовать асинхронную загрузку JS-скриптов. ВНИМАНИЕ! это может понизить "
1003
+ "качество спам-фильтра."
1004
+
1005
+ #: inc/cleantalk-settings.php:340
1006
+ msgid "Allow to add GDPR notice via shortcode"
1007
+ msgstr "Разрешить добавление GDPR-уведомления с помощью шордкода"
1008
+
1009
+ #: inc/cleantalk-settings.php:341
1010
+ msgid ""
1011
+ " Adds small checkbox under your website form. To add it you should use the "
1012
+ "shortcode on the form's page: [cleantalk_gdpr_form id=\"FORM_ID\"]"
1013
+ msgstr ""
1014
+ "Добавить не большой чекбокс в форму. Для добавления уведомления вставьте на "
1015
+ "странице с формой этот шорткод: [cleantalk_gdpr_form id=\"FORM_ID\"]"
1016
+
1017
+ #: inc/cleantalk-settings.php:346
1018
+ msgid "GDPR text notice"
1019
+ msgstr "Текст GDPR-уведомления"
1020
+
1021
+ #: inc/cleantalk-settings.php:347
1022
+ msgid "This text will be added as a description to the GDPR checkbox."
1023
+ msgstr "Этот текст будет добавлен к чекбоксу как описание."
1024
+
1025
+ #: inc/cleantalk-settings.php:353
1026
+ msgid "Store visited URLs"
1027
+ msgstr "Хранить посещенные URL-ы"
1028
+
1029
+ #: inc/cleantalk-settings.php:354
1030
+ msgid ""
1031
+ "Plugin stores last 10 visited URLs (HTTP REFFERERS) before visitor submits "
1032
+ "form on the site. You can see stored visited URLS for each visitor in your "
1033
+ "Dashboard. Turn the option on to improve Anti-Spam protection."
1034
+ msgstr ""
1035
+ "Плагин хранит последние 10 посещенных URL (HTTP REFFERERS) до того, как "
1036
+ "посетитель отправит форму на сайт. Вы можете видеть сохраненные посещенные "
1037
+ "URL-адреса для каждого посетителя на своей панели инструментов. Включите эту "
1038
+ "опцию, чтобы улучшить защиту от спама."
1039
+
1040
+ #: inc/cleantalk-settings.php:359
1041
+ msgid "Use cookies less sessions"
1042
+ msgstr "Использовать сеансы без cookies"
1043
+
1044
+ #: inc/cleantalk-settings.php:366
1045
+ msgid ""
1046
+ "Notify users with selected roles about new approved comments. Hold CTRL to "
1047
+ "select multiple roles."
1048
+ msgstr ""
1049
+ "Уведомлять пользователей с выбранными ролями о новых одобренных комментариях."
1050
+ " Удерживайте CTRL для выбора нескольких ролей."
1051
+
1052
+ #: inc/cleantalk-settings.php:367
1053
+ #, php-format
1054
+ msgid "If enabled, overrides similar Wordpress %sdiscussion settings%s."
1055
+ msgstr "Если включено, переопределяет аналогичные %sнастройки Wordpress%s."
1056
+
1057
+ #: inc/cleantalk-settings.php:380
1058
+ msgid "Complete deactivation"
1059
+ msgstr "Полная деактивация"
1060
+
1061
+ #: inc/cleantalk-settings.php:381
1062
+ msgid "Leave no trace in the system after deactivation."
1063
+ msgstr "Не оставлять следов в системе после деактивации."
1064
+
1065
+ #: inc/cleantalk-settings.php:398
1066
+ msgid "Enable White Label Mode"
1067
+ msgstr "Активировать White Label Mode."
1068
+
1069
+ #: inc/cleantalk-settings.php:399
1070
+ #, php-format
1071
+ msgid "Learn more information %shere%s."
1072
+ msgstr "Узнать больше информации %sздесь%s"
1073
+
1074
+ #: inc/cleantalk-settings.php:404
1075
+ msgid "Hoster API Key"
1076
+ msgstr "Хостинг API ключ"
1077
+
1078
+ #: inc/cleantalk-settings.php:405
1079
+ #, php-format
1080
+ msgid "You can get it in %sCleantalk's Control Panel%s"
1081
+ msgstr "Вы можете получить ключ в вашей %sпанели управления CleanTalk%s"
1082
+
1083
+ #: inc/cleantalk-settings.php:413
1084
+ msgid "Plugin name"
1085
+ msgstr "Наименование плагина"
1086
+
1087
+ #: inc/cleantalk-settings.php:414
1088
+ #, php-format
1089
+ msgid "Specify plugin name. Leave empty for deafult %sAntispam by Cleantalk%s"
1090
+ msgstr ""
1091
+ "Укажите название плагина. Оставьте пустым для названия по умолчанию "
1092
+ "%sAntispam by Cleantalk%s"
1093
+
1094
+ #: inc/cleantalk-settings.php:423
1095
+ msgid "Allow users to use other key"
1096
+ msgstr "Позволяет пользователям использовать другой ключ."
1097
+
1098
+ #: inc/cleantalk-settings.php:424
1099
+ msgid ""
1100
+ "Allow users to use different Access key in their plugin settings on child "
1101
+ "blogs. They could use different CleanTalk account."
1102
+ msgstr ""
1103
+ "Позволяет пользователям использовать разные Ключи доступа в настройках "
1104
+ "плагина на их дочерних блогах. Они могут использовать разные аккаунты "
1105
+ "CleanTalk."
1106
+
1107
+ #: inc/cleantalk-settings.php:427
1108
+ msgid ""
1109
+ "Constant <b>CLEANTALK_ACCESS_KEY</b> is set. All websites will use API key "
1110
+ "from this constant. Look into wp-config.php"
1111
+ msgstr ""
1112
+ "Константа <b>CLEANTALK_ACCESS_KEY</b> установлена. Все дочерние сайты будут "
1113
+ "использовать ключ доступа из этой контсанты. Смотри в wp-config.php"
1114
+
1115
+ #: inc/cleantalk-settings.php:533
1116
+ msgid "CleanTalk's tech support:"
1117
+ msgstr "Техническия поддержка CleanTalk: "
1118
+
1119
+ #: inc/cleantalk-settings.php:539
1120
+ msgid "Plugin Homepage at"
1121
+ msgstr "Домашняя страница плагина на"
1122
+
1123
+ #: inc/cleantalk-settings.php:540
1124
+ msgid "GDPR compliance"
1125
+ msgstr "Соответствие GDPR"
1126
+
1127
+ #: inc/cleantalk-settings.php:541
1128
+ msgid "Use s@cleantalk.org to test plugin in any WordPress form."
1129
+ msgstr ""
1130
+ "Используйте s@cleantalk.org чтобы проверить плагин в любой форме в WordPress."
1131
+
1132
+ #: inc/cleantalk-settings.php:542
1133
+ msgid "CleanTalk is registered Trademark. All rights reserved."
1134
+ msgstr "CleanTalk - это зарегистрированая торговая марка. Все права защищены."
1135
+
1136
+ #: inc/cleantalk-settings.php:559
1137
+ #, php-format
1138
+ msgid "%s has blocked <b>%s</b> spam."
1139
+ msgstr "%s заблокировал <b>%s</b> спама."
1140
+
1141
+ #: inc/cleantalk-settings.php:571
1142
+ msgid "Click here to get anti-spam statistics"
1143
+ msgstr "Щелкните, чтобы получить статистику"
1144
+
1145
+ #: inc/cleantalk-settings.php:614
1146
+ #, php-format
1147
+ msgid "Please, enter the %splugin settings%s in main site dashboard."
1148
+ msgstr ""
1149
+ "Пожалуйста, перейдите в %sнастройки плагина%s в панели управления на главном "
1150
+ "сайте."
1151
+
1152
+ #: inc/cleantalk-settings.php:633
1153
+ msgid "Error occured while API key validating. Error: "
1154
+ msgstr "Произошла ошибка при проверке ключа API. Ошибка: "
1155
+
1156
+ #: inc/cleantalk-settings.php:634
1157
+ msgid "Error occured while automatically gettings access key. Error: "
1158
+ msgstr "Произошла ошибка при автоматическом получении ключа доступа. Ошибка: "
1159
+
1160
+ #: inc/cleantalk-settings.php:635
1161
+ msgid "Error occured while sending sending SpamFireWall logs. Error: "
1162
+ msgstr "Произошла ошибка при отправке логов Spam FireWall. Ошибка: "
1163
+
1164
+ #: inc/cleantalk-settings.php:636
1165
+ msgid "Error occured while updating SpamFireWall local base. Error: "
1166
+ msgstr "Произошла ошибка при обновлении локальной базы Spam FireWall. Ошибка: "
1167
+
1168
+ #: inc/cleantalk-settings.php:637
1169
+ msgid "Error occured while checking account status. Error: "
1170
+ msgstr "Произошла ошибка при проверке статуса аккаунта. Ошибка: "
1171
+
1172
+ #: inc/cleantalk-settings.php:638
1173
+ msgid "Error occured while excuting API call. Error: "
1174
+ msgstr "Произошла ошибка при выполнении вызова API. Ошибка: "
1175
+
1176
+ #: inc/cleantalk-settings.php:646
1177
+ msgid "Unknown error. Error: "
1178
+ msgstr "Неизвестная ошибка. Ошибка: "
1179
+
1180
+ #: inc/cleantalk-settings.php:677
1181
+ msgid "Errors:"
1182
+ msgstr "Ошибки: "
1183
+
1184
+ #: inc/cleantalk-settings.php:682
1185
+ #, php-format
1186
+ msgid "You can get support any time here: %s."
1187
+ msgstr "Вы всегда можете получить техническую поддержку здесь: %s."
1188
+
1189
+ #: inc/cleantalk-settings.php:757
1190
+ msgid "Protection is active"
1191
+ msgstr "Защита включена"
1192
+
1193
+ #: inc/cleantalk-settings.php:759
1194
+ msgid "Registration forms"
1195
+ msgstr "Регистрации пользователей"
1196
+
1197
+ #: inc/cleantalk-settings.php:760
1198
+ msgid "Comments forms"
1199
+ msgstr "Формы комментариев"
1200
+
1201
+ #: inc/cleantalk-settings.php:765
1202
+ msgid "Validate email for existence"
1203
+ msgstr "Проверка e-mail на существование"
1204
+
1205
+ #: inc/cleantalk-settings.php:769
1206
+ msgid "Auto update"
1207
+ msgstr "Автообновлние"
1208
+
1209
+ #: inc/cleantalk-settings.php:793
1210
+ msgid "<h3>Key is provided by Super Admin.</h3>"
1211
+ msgstr "<h3>Ключ доступа предоставлен Супер Администратором.</h3>"
1212
+
1213
+ #: inc/cleantalk-settings.php:797
1214
+ msgid "Access key"
1215
+ msgstr "Ключ доступа"
1216
+
1217
+ #: inc/cleantalk-settings.php:812
1218
+ msgid "Enter the key"
1219
+ msgstr "Введите ключ"
1220
+
1221
+ #: inc/cleantalk-settings.php:818
1222
+ #, php-format
1223
+ msgid "Account at cleantalk.org is %s."
1224
+ msgstr "Аккаунт на cleantalk.org %s."
1225
+
1226
+ #: inc/cleantalk-settings.php:827
1227
+ msgid "Show the access key"
1228
+ msgstr "Показать ключ доступа"
1229
+
1230
+ #: inc/cleantalk-settings.php:838
1231
+ msgid "Get Access Key Automatically"
1232
+ msgstr "Получить ключ доступа автоматически"
1233
+
1234
+ #: inc/cleantalk-settings.php:846
1235
+ #, php-format
1236
+ msgid ""
1237
+ "Admin e-mail (%s) will be used for registration, if you want to use other "
1238
+ "email please %sGet Access Key Manually%s."
1239
+ msgstr ""
1240
+ "E-mail администратора (%s) будет использован для регистрации. Если вы хотите "
1241
+ "использовать другой e-mail, пожлуйста, %sполучите ключ доступа "
1242
+ "самостоятельно%s."
1243
+
1244
+ #: inc/cleantalk-settings.php:862
1245
+ #, php-format
1246
+ msgid "I accept %sLicense Agreement%s."
1247
+ msgstr "Я принимаю %sЛицензионно Соглашение%s."
1248
+
1249
+ #: inc/cleantalk-settings.php:888
1250
+ msgid "Statistics & Reports"
1251
+ msgstr "Статистика и отчеты"
1252
+
1253
+ #: inc/cleantalk-settings.php:904
1254
+ #, php-format
1255
+ msgid "Last spam check request to %s server was at %s."
1256
+ msgstr "Последний запрос проверки спама на сервере %s был произведен %s."
1257
+
1258
+ #: inc/cleantalk-settings.php:905 inc/cleantalk-settings.php:906
1259
+ #: inc/cleantalk-settings.php:915 inc/cleantalk-settings.php:922
1260
+ #: inc/cleantalk-settings.php:923 inc/cleantalk-settings.php:931
1261
+ #: inc/cleantalk-settings.php:932 inc/cleantalk-settings.php:939
1262
+ #: inc/cleantalk-settings.php:940
1263
+ msgid "unknown"
1264
+ msgstr "неизвестно"
1265
+
1266
+ #: inc/cleantalk-settings.php:912
1267
+ #, php-format
1268
+ msgid "Average request time for past 7 days: %s seconds."
1269
+ msgstr "Среднее время запроса за последние 7 дней: %s секунд."
1270
+
1271
+ #: inc/cleantalk-settings.php:921
1272
+ #, php-format
1273
+ msgid "Last time SpamFireWall was triggered for %s IP at %s"
1274
+ msgstr "В последний раз SpamFireWall сработал на %s IP %s"
1275
+
1276
+ #: inc/cleantalk-settings.php:930
1277
+ #, php-format
1278
+ msgid "SpamFireWall was updated %s. Now contains %s entries."
1279
+ msgstr "SpamFireWall был обновлен %s. Содержится %s записей."
1280
+
1281
+ #: inc/cleantalk-settings.php:938
1282
+ #, php-format
1283
+ msgid "SpamFireWall sent %s events at %s."
1284
+ msgstr "SpamFireWall отправил %s событий %s."
1285
+
1286
+ #: inc/cleantalk-settings.php:948
1287
+ msgid "There are no failed connections to server."
1288
+ msgstr "Проблем с подключением к серверу нет."
1289
+
1290
+ #: inc/cleantalk-settings.php:975
1291
+ msgid "Send report"
1292
+ msgstr "Отправить отчет"
1293
+
1294
+ #: inc/cleantalk-settings.php:979
1295
+ msgid ""
1296
+ "Please, enable \"Send connection reports\" setting to be able to send reports"
1297
+ msgstr ""
1298
+ "Пожалуйста, активируйте опцию \"Отправлять отчеты о соединении\" для "
1299
+ "возможности отправлять отчеты."
1300
+
1301
+ #: inc/cleantalk-settings.php:1327
1302
+ msgid "Testing is failed. Please check the Access key."
1303
+ msgstr "Ошибка тестирования. Пожалуйста, проверьте ключ доступа."
1304
+
1305
+ #: inc/cleantalk-settings.php:1442
1306
+ msgid "XSS check"
1307
+ msgstr "Проверка XSS уязвимости"
1308
+
1309
+ #: inc/cleantalk-settings.php:1443
1310
+ msgid ""
1311
+ "Cross-Site Scripting (XSS) — prevents malicious code to be executed/sent to "
1312
+ "any user. As a result malicious scripts can not get access to the cookie "
1313
+ "files, session tokens and any other confidential information browsers use "
1314
+ "and store. Such scripts can even overwrite content of HTML pages. CleanTalk "
1315
+ "WAF monitors for patterns of these parameters and block them."
1316
+ msgstr ""
1317
+ "Межсайтовый скриптинг (XSS) - предотвращает выполнение / отправку "
1318
+ "вредоносного кода любому пользователю. В результате вредоносные сценарии не "
1319
+ "могут получить доступ к файлам cookie, токенам сеансов и любой другой "
1320
+ "конфиденциальной информации, которую используют и хранят браузеры. Такие "
1321
+ "сценарии могут даже перезаписывать содержимое HTML-страниц. CleanTalk WAF "
1322
+ "отслеживает шаблоны этих параметров и блокирует их."
1323
+
1324
+ #: inc/cleantalk-settings.php:1446
1325
+ msgid "SQL-injection check"
1326
+ msgstr "Проверка на наличие SQL-injection"
1327
+
1328
+ #: inc/cleantalk-settings.php:1447
1329
+ msgid ""
1330
+ "SQL Injection — one of the most popular ways to hack websites and programs "
1331
+ "that work with databases. It is based on injection of a custom SQL code into "
1332
+ "database queries. It could transmit data through GET, POST requests or "
1333
+ "cookie files in an SQL code. If a website is vulnerable and execute such "
1334
+ "injections then it would allow attackers to apply changes to the website's "
1335
+ "MySQL database."
1336
+ msgstr ""
1337
+ "SQL-инъекция - один из самых популярных способов взлома сайтов и программ, "
1338
+ "работающих с базами данных. Он основан на внедрении пользовательского кода "
1339
+ "SQL в запросы к базе данных. Он может передавать данные через запросы GET, "
1340
+ "POST или файлы cookie в коде SQL. Если веб-сайт уязвим и выполняет такие "
1341
+ "инъекции, это позволит злоумышленникам применить изменения к базе данных "
1342
+ "MySQL веб-сайта."
1343
+
1344
+ #: inc/cleantalk-settings.php:1450
1345
+ msgid "Check uploaded files"
1346
+ msgstr "Проверка загруженных файлов"
1347
+
1348
+ #: inc/cleantalk-settings.php:1451
1349
+ msgid ""
1350
+ "The option checks each uploaded file to a website for malicious code. If "
1351
+ "it's possible for visitors to upload files to a website, for instance a work "
1352
+ "resume, then attackers could abuse it and upload an infected file to execute "
1353
+ "it later and get access to your website."
1354
+ msgstr ""
1355
+ "Опция проверяет каждый загруженный файл на веб-сайт на наличие вредоносного "
1356
+ "кода. Если посетители могут загружать на сайт файлы, например, резюме, то "
1357
+ "злоумышленники могут злоупотреблять им и загружать зараженный файл, чтобы "
1358
+ "выполнить его позднее и получить доступ к вашему сайту."
1359
+
1360
+ #: inc/cleantalk-users.php:15
1361
+ msgid "Find spam users"
1362
+ msgstr "Найти спам-пользователей"
1363
+
1364
+ #: inc/cleantalk-users.php:67
1365
+ msgid "Please wait for a while. CleanTalk is deleting spam users. Users left: "
1366
+ msgstr "Пожалуйста, подождите. CleanTalk удаляет спам-пользователей. Осталось:"
1367
+
1368
+ #: inc/cleantalk-users.php:79
1369
+ msgid ""
1370
+ "The plugin will check all users against blacklists database and show you "
1371
+ "senders that have spam activity on other websites."
1372
+ msgstr ""
1373
+ "Плагин проверит всех пользователей по базе данных чёрных списков и покажет "
1374
+ "отправителей, которые занимаются спамом на других сайтах."
1375
+
1376
+ #: inc/cleantalk-users.php:84
1377
+ msgid ""
1378
+ "Allows to use user's dates to perform more accurate check. Could seriously "
1379
+ "slow down the check."
1380
+ msgstr ""
1381
+ "Позволяет использовать даты пользователей для выполения более тщательной "
1382
+ "проверки. Может серьезно замедлить проверку."
1383
+
1384
+ #: inc/cleantalk-users.php:108
1385
+ msgid ""
1386
+ "Please wait for a while. CleanTalk is checking all users via blacklist "
1387
+ "database at cleantalk.org. You will have option to delete found spam users "
1388
+ "after plugin finish."
1389
+ msgstr ""
1390
+ "Пожалуйста, подождите. ClenTalk проверяет всех пользователей по чёрным "
1391
+ "спискам на cleantalk.org. У вас появится возможность удалить обнаруженных "
1392
+ "спам-пользователей как только плагин закончит."
1393
+
1394
+ #: inc/cleantalk-users.php:267
1395
+ msgid "Delete all users from list"
1396
+ msgstr "Удалить всех пользователей в списке"
1397
+
1398
+ #: inc/cleantalk-users.php:269
1399
+ msgid "Download results in CSV"
1400
+ msgstr "Загрузить результаты (CSV)"
1401
+
1402
+ #: inc/cleantalk-users.php:273
1403
+ msgid "Insert accounts"
1404
+ msgstr "Добавить аккаунты"
1405
+
1406
+ #: inc/cleantalk-users.php:274
1407
+ msgid "Delete accounts"
1408
+ msgstr "Удалить тестовые спам-аккаунты"
1409
+
1410
+ #: inc/cleantalk-users.php:527
1411
+ #, php-format
1412
+ msgid ""
1413
+ "Total users %s, checked %s, last check %s, found %s spam users and %s bad "
1414
+ "users (without IP or email)"
1415
+ msgstr ""
1416
+ "Всего пользователей %s, проверено %s, последняя проверка %s, найдено %s спам-"
1417
+ "пользователей и %s плохих пользователей (без IP или электронной почты)"
1418
+
1419
+ #: inc/cleantalk-widget.php:22
1420
+ msgid "CleanTalk Widget"
1421
+ msgstr "Виджет CleanTalk"
1422
+
1423
+ #: inc/cleantalk-widget.php:25
1424
+ msgid "CleanTalk widget"
1425
+ msgstr "виджет CleanTalk"
1426
+
1427
+ #: inc/cleantalk-widget.php:72
1428
+ msgid "CleanTalk's main page"
1429
+ msgstr "Главная страница CleanTalk"
1430
+
1431
+ #: inc/cleantalk-widget.php:73
1432
+ msgid "spam"
1433
+ msgstr "спама"
1434
+
1435
+ #: inc/cleantalk-widget.php:73
1436
+ msgid "blocked by"
1437
+ msgstr "заблокировано"
1438
+
1439
+ #: inc/cleantalk-widget.php:85
1440
+ msgid "Spam blocked"
1441
+ msgstr "Спама заблокировано"
1442
+
1443
+ #: inc/cleantalk-widget.php:90
1444
+ msgid "Title:"
1445
+ msgstr "Заголовок:"
1446
+
1447
+ #: inc/cleantalk-widget.php:95
1448
+ msgid "Style:"
1449
+ msgstr "Стиль:"
1450
+
1451
+ #: inc/cleantalk-widget.php:97
1452
+ msgid "CleanTalk's Style"
1453
+ msgstr "Фирменный стиль CleanTalk"
1454
+
1455
+ #: inc/cleantalk-widget.php:98
1456
+ msgid "Light"
1457
+ msgstr "Лёгкий"
1458
+
1459
+ #: inc/cleantalk-widget.php:99
1460
+ msgid "Extremely Light"
1461
+ msgstr "Очень легкий"
1462
+
1463
+ #: inc/cleantalk-widget.php:100
1464
+ msgid "Dark"
1465
+ msgstr "Темный"
1466
+
1467
+ #: inc/cleantalk-widget.php:105
1468
+ msgid "Referal link ID:"
1469
+ msgstr "ID партнера:"
1470
+
1471
+ #: lib/CleantalkSFW.php:71
1472
+ msgid "SpamFireWall is activated for your IP "
1473
+ msgstr "Спам Фаервол заблокировал ваш IP"
1474
+
1475
+ #: lib/CleantalkSFW.php:72
1476
+ msgid ""
1477
+ "To continue working with web site, please make sure that you have enabled "
1478
+ "JavaScript."
1479
+ msgstr ""
1480
+ "Что бы продолжить работу с сайтом, пожалуйста, убедитесь что у вас включен "
1481
+ "JavaScript."
1482
+
1483
+ #: lib/CleantalkSFW.php:73
1484
+ msgid "Please click below to pass protection,"
1485
+ msgstr "Пожалуйста, нажмите, чтобы пройти защиту,"
1486
+
1487
+ #: lib/CleantalkSFW.php:74
1488
+ #, php-format
1489
+ msgid ""
1490
+ "Or you will be automatically redirected to the requested page after %d "
1491
+ "seconds."
1492
+ msgstr ""
1493
+ "Или вы будете автоматически переадресованы на запрашиваемую страницу через "
1494
+ "%d секунд."
1495
+
1496
+ #: lib/CleantalkSFW.php:75
1497
+ msgid "Antispam by CleanTalk"
1498
+ msgstr "Антиспам от CleanTalk"
1499
+
1500
+ #: lib/CleantalkSFW.php:76
1501
+ msgid "This is the testing page for SpamFireWall"
1502
+ msgstr "Это тестовая страница SpamFireWall"
1503
+
1504
+ #: templates/translate_banner.php:6
1505
+ msgid "Help others use the plugin in your language."
1506
+ msgstr "Помогите другим пользователям использовать плагин на их языке."
1507
+
1508
+ #: templates/translate_banner.php:7
1509
+ msgid ""
1510
+ "We ask you to help with the translation of the plugin in your language. "
1511
+ "Please take a few minutes to make the plugin more comfortable."
1512
+ msgstr ""
1513
+ "Мы просим Вас помочь с переводом плагина на ваш язык. Пожалуйста, потратьте "
1514
+ "несколько минут, чтобы сделать плагин более удобным."
1515
+
1516
+ #: templates/translate_banner.php:10
1517
+ msgid "TRANSLATE"
1518
+ msgstr "ПЕРЕВЕСТИ"
1519
+
1520
+ #. Description of the plugin/theme
1521
+ msgid ""
1522
+ "Max power, all-in-one, no Captcha, premium anti-spam plugin. No comment spam,"
1523
+ " no registration spam, no contact spam, protects any WordPress forms."
1524
+ msgstr ""
1525
+ "Максимальная эффективность, проверка всех форм, без Сaptcha, премиум "
1526
+ "антиспам плагин. Нет спаму в комментариях, нет спаму в регистрациях, нету "
1527
+ "спаму в контактных формах, защита любых форм в WordPress."
1528
+
1529
+ #. Plugin URI of the plugin/theme
1530
+ #. Author URI of the plugin/theme
1531
+ msgid "http://cleantalk.org"
1532
+ msgstr "http://cleantalk.org"
1533
+
1534
+ #. Author of the plugin/theme
1535
+ msgid "СleanTalk <welcome@cleantalk.org>"
1536
+ msgstr "СleanTalk <welcome@cleantalk.org>"
inc/ClassApbctListTable.php ADDED
@@ -0,0 +1,1434 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This is copy of the WP_List_Table class for the future compability
4
+ */
5
+
6
+ /**
7
+ * Administration API: WP_List_Table class
8
+ *
9
+ * @package WordPress
10
+ * @subpackage List_Table
11
+ * @since 3.1.0
12
+ */
13
+
14
+ /**
15
+ * Base class for displaying a list of items in an ajaxified HTML table.
16
+ *
17
+ * @since 3.1.0
18
+ * @access private
19
+ */
20
+ class ABPCT_List_Table {
21
+
22
+ /**
23
+ * The current list of items.
24
+ *
25
+ * @since 3.1.0
26
+ * @var array
27
+ */
28
+ public $items;
29
+
30
+ /**
31
+ * Various information about the current table.
32
+ *
33
+ * @since 3.1.0
34
+ * @var array
35
+ */
36
+ protected $_args;
37
+
38
+ /**
39
+ * Various information needed for displaying the pagination.
40
+ *
41
+ * @since 3.1.0
42
+ * @var array
43
+ */
44
+ protected $_pagination_args = array();
45
+
46
+ /**
47
+ * The current screen.
48
+ *
49
+ * @since 3.1.0
50
+ * @var object
51
+ */
52
+ protected $screen;
53
+
54
+ /**
55
+ * Cached bulk actions.
56
+ *
57
+ * @since 3.1.0
58
+ * @var array
59
+ */
60
+ private $_actions;
61
+
62
+ /**
63
+ * Cached pagination output.
64
+ *
65
+ * @since 3.1.0
66
+ * @var string
67
+ */
68
+ private $_pagination;
69
+
70
+ /**
71
+ * The view switcher modes.
72
+ *
73
+ * @since 4.1.0
74
+ * @var array
75
+ */
76
+ protected $modes = array();
77
+
78
+ /**
79
+ * Stores the value returned by ->get_column_info().
80
+ *
81
+ * @since 4.1.0
82
+ * @var array
83
+ */
84
+ protected $_column_headers;
85
+
86
+ /**
87
+ * {@internal Missing Summary}
88
+ *
89
+ * @var array
90
+ */
91
+ protected $compat_fields = array( '_args', '_pagination_args', 'screen', '_actions', '_pagination' );
92
+
93
+ /**
94
+ * {@internal Missing Summary}
95
+ *
96
+ * @var array
97
+ */
98
+ protected $compat_methods = array(
99
+ 'set_pagination_args',
100
+ 'get_views',
101
+ 'get_bulk_actions',
102
+ 'bulk_actions',
103
+ 'row_actions',
104
+ 'months_dropdown',
105
+ 'view_switcher',
106
+ 'comments_bubble',
107
+ 'get_items_per_page',
108
+ 'pagination',
109
+ 'get_sortable_columns',
110
+ 'get_column_info',
111
+ 'get_table_classes',
112
+ 'display_tablenav',
113
+ 'extra_tablenav',
114
+ 'single_row_columns',
115
+ );
116
+
117
+ /**
118
+ * Constructor.
119
+ *
120
+ * The child class should call this constructor from its own constructor to override
121
+ * the default $args.
122
+ *
123
+ * @since 3.1.0
124
+ *
125
+ * @param array|string $args {
126
+ * Array or string of arguments.
127
+ *
128
+ * @type string $plural Plural value used for labels and the objects being listed.
129
+ * This affects things such as CSS class-names and nonces used
130
+ * in the list table, e.g. 'posts'. Default empty.
131
+ * @type string $singular Singular label for an object being listed, e.g. 'post'.
132
+ * Default empty
133
+ * @type bool $ajax Whether the list table supports Ajax. This includes loading
134
+ * and sorting data, for example. If true, the class will call
135
+ * the _js_vars() method in the footer to provide variables
136
+ * to any scripts handling Ajax events. Default false.
137
+ * @type string $screen String containing the hook name used to determine the current
138
+ * screen. If left null, the current screen will be automatically set.
139
+ * Default null.
140
+ * }
141
+ */
142
+ public function __construct( $args = array() ) {
143
+ $args = wp_parse_args(
144
+ $args,
145
+ array(
146
+ 'plural' => '',
147
+ 'singular' => '',
148
+ 'ajax' => false,
149
+ 'screen' => null,
150
+ )
151
+ );
152
+
153
+ $this->screen = convert_to_screen( $args['screen'] );
154
+
155
+ add_filter( "manage_{$this->screen->id}_columns", array( $this, 'get_columns' ), 0 );
156
+
157
+ if ( ! $args['plural'] ) {
158
+ $args['plural'] = $this->screen->base;
159
+ }
160
+
161
+ $args['plural'] = sanitize_key( $args['plural'] );
162
+ $args['singular'] = sanitize_key( $args['singular'] );
163
+
164
+ $this->_args = $args;
165
+
166
+ if ( $args['ajax'] ) {
167
+ // wp_enqueue_script( 'list-table' );
168
+ add_action( 'admin_footer', array( $this, '_js_vars' ) );
169
+ }
170
+
171
+ if ( empty( $this->modes ) ) {
172
+ $this->modes = array(
173
+ 'list' => __( 'List View' ),
174
+ 'excerpt' => __( 'Excerpt View' ),
175
+ );
176
+ }
177
+ }
178
+
179
+ /**
180
+ * Make private properties readable for backward compatibility.
181
+ *
182
+ * @since 4.0.0
183
+ *
184
+ * @param string $name Property to get.
185
+ * @return mixed Property.
186
+ */
187
+ public function __get( $name ) {
188
+ if ( in_array( $name, $this->compat_fields ) ) {
189
+ return $this->$name;
190
+ }
191
+ }
192
+
193
+ /**
194
+ * Make private properties settable for backward compatibility.
195
+ *
196
+ * @since 4.0.0
197
+ *
198
+ * @param string $name Property to check if set.
199
+ * @param mixed $value Property value.
200
+ * @return mixed Newly-set property.
201
+ */
202
+ public function __set( $name, $value ) {
203
+ if ( in_array( $name, $this->compat_fields ) ) {
204
+ return $this->$name = $value;
205
+ }
206
+ }
207
+
208
+ /**
209
+ * Make private properties checkable for backward compatibility.
210
+ *
211
+ * @since 4.0.0
212
+ *
213
+ * @param string $name Property to check if set.
214
+ * @return bool Whether the property is set.
215
+ */
216
+ public function __isset( $name ) {
217
+ if ( in_array( $name, $this->compat_fields ) ) {
218
+ return isset( $this->$name );
219
+ }
220
+ }
221
+
222
+ /**
223
+ * Make private properties un-settable for backward compatibility.
224
+ *
225
+ * @since 4.0.0
226
+ *
227
+ * @param string $name Property to unset.
228
+ */
229
+ public function __unset( $name ) {
230
+ if ( in_array( $name, $this->compat_fields ) ) {
231
+ unset( $this->$name );
232
+ }
233
+ }
234
+
235
+ /**
236
+ * Make private/protected methods readable for backward compatibility.
237
+ *
238
+ * @since 4.0.0
239
+ *
240
+ * @param string $name Method to call.
241
+ * @param array $arguments Arguments to pass when calling.
242
+ * @return mixed|bool Return value of the callback, false otherwise.
243
+ */
244
+ public function __call( $name, $arguments ) {
245
+ if ( in_array( $name, $this->compat_methods ) ) {
246
+ return $this->$name( ...$arguments );
247
+ }
248
+ return false;
249
+ }
250
+
251
+ /**
252
+ * Checks the current user's permissions
253
+ *
254
+ * @since 3.1.0
255
+ * @abstract
256
+ */
257
+ public function ajax_user_can() {
258
+ die( 'function WP_List_Table::ajax_user_can() must be over-ridden in a sub-class.' );
259
+ }
260
+
261
+ /**
262
+ * Prepares the list of items for displaying.
263
+ *
264
+ * @uses WP_List_Table::set_pagination_args()
265
+ *
266
+ * @since 3.1.0
267
+ * @abstract
268
+ */
269
+ public function prepare_items() {
270
+ die( 'function WP_List_Table::prepare_items() must be over-ridden in a sub-class.' );
271
+ }
272
+
273
+ /**
274
+ * An internal method that sets all the necessary pagination arguments
275
+ *
276
+ * @since 3.1.0
277
+ *
278
+ * @param array|string $args Array or string of arguments with information about the pagination.
279
+ */
280
+ protected function set_pagination_args( $args ) {
281
+ $args = wp_parse_args(
282
+ $args,
283
+ array(
284
+ 'total_items' => 0,
285
+ 'total_pages' => 0,
286
+ 'per_page' => 0,
287
+ )
288
+ );
289
+
290
+ if ( ! $args['total_pages'] && $args['per_page'] > 0 ) {
291
+ $args['total_pages'] = ceil( $args['total_items'] / $args['per_page'] );
292
+ }
293
+
294
+ // Redirect if page number is invalid and headers are not already sent.
295
+ if ( ! headers_sent() && ! wp_doing_ajax() && $args['total_pages'] > 0 && $this->get_pagenum() > $args['total_pages'] ) {
296
+ wp_redirect( add_query_arg( 'paged', $args['total_pages'] ) );
297
+ exit;
298
+ }
299
+
300
+ $this->_pagination_args = $args;
301
+ }
302
+
303
+ /**
304
+ * Access the pagination args.
305
+ *
306
+ * @since 3.1.0
307
+ *
308
+ * @param string $key Pagination argument to retrieve. Common values include 'total_items',
309
+ * 'total_pages', 'per_page', or 'infinite_scroll'.
310
+ * @return int Number of items that correspond to the given pagination argument.
311
+ */
312
+ public function get_pagination_arg( $key ) {
313
+ if ( 'page' === $key ) {
314
+ return $this->get_pagenum();
315
+ }
316
+
317
+ if ( isset( $this->_pagination_args[ $key ] ) ) {
318
+ return $this->_pagination_args[ $key ];
319
+ }
320
+ }
321
+
322
+ /**
323
+ * Whether the table has items to display or not
324
+ *
325
+ * @since 3.1.0
326
+ *
327
+ * @return bool
328
+ */
329
+ public function has_items() {
330
+ return ! empty( $this->items );
331
+ }
332
+
333
+ /**
334
+ * Message to be displayed when there are no items
335
+ *
336
+ * @since 3.1.0
337
+ */
338
+ public function no_items() {
339
+ _e( 'No items found.' );
340
+ }
341
+
342
+ /**
343
+ * Displays the search box.
344
+ *
345
+ * @since 3.1.0
346
+ *
347
+ * @param string $text The 'submit' button label.
348
+ * @param string $input_id ID attribute value for the search input field.
349
+ */
350
+ public function search_box( $text, $input_id ) {
351
+ if ( empty( $_REQUEST['s'] ) && ! $this->has_items() ) {
352
+ return;
353
+ }
354
+
355
+ $input_id = $input_id . '-search-input';
356
+
357
+ if ( ! empty( $_REQUEST['orderby'] ) ) {
358
+ echo '<input type="hidden" name="orderby" value="' . esc_attr( $_REQUEST['orderby'] ) . '" />';
359
+ }
360
+ if ( ! empty( $_REQUEST['order'] ) ) {
361
+ echo '<input type="hidden" name="order" value="' . esc_attr( $_REQUEST['order'] ) . '" />';
362
+ }
363
+ if ( ! empty( $_REQUEST['post_mime_type'] ) ) {
364
+ echo '<input type="hidden" name="post_mime_type" value="' . esc_attr( $_REQUEST['post_mime_type'] ) . '" />';
365
+ }
366
+ if ( ! empty( $_REQUEST['detached'] ) ) {
367
+ echo '<input type="hidden" name="detached" value="' . esc_attr( $_REQUEST['detached'] ) . '" />';
368
+ }
369
+ ?>
370
+ <p class="search-box">
371
+ <label class="screen-reader-text" for="<?php echo esc_attr( $input_id ); ?>"><?php echo $text; ?>:</label>
372
+ <input type="search" id="<?php echo esc_attr( $input_id ); ?>" name="s" value="<?php _admin_search_query(); ?>" />
373
+ <?php submit_button( $text, '', '', false, array( 'id' => 'search-submit' ) ); ?>
374
+ </p>
375
+ <?php
376
+ }
377
+
378
+ /**
379
+ * Get an associative array ( id => link ) with the list
380
+ * of views available on this table.
381
+ *
382
+ * @since 3.1.0
383
+ *
384
+ * @return array
385
+ */
386
+ protected function get_views() {
387
+ return array();
388
+ }
389
+
390
+ /**
391
+ * Display the list of views available on this table.
392
+ *
393
+ * @since 3.1.0
394
+ */
395
+ public function views() {
396
+ $views = $this->get_views();
397
+ /**
398
+ * Filters the list of available list table views.
399
+ *
400
+ * The dynamic portion of the hook name, `$this->screen->id`, refers
401
+ * to the ID of the current screen, usually a string.
402
+ *
403
+ * @since 3.5.0
404
+ *
405
+ * @param string[] $views An array of available list table views.
406
+ */
407
+ $views = apply_filters( "views_{$this->screen->id}", $views );
408
+
409
+ if ( empty( $views ) ) {
410
+ return;
411
+ }
412
+
413
+ $this->screen->render_screen_reader_content( 'heading_views' );
414
+
415
+ echo "<ul class='subsubsub'>\n";
416
+ foreach ( $views as $class => $view ) {
417
+ $views[ $class ] = "\t<li class='$class'>$view";
418
+ }
419
+ echo implode( " |</li>\n", $views ) . "</li>\n";
420
+ echo '</ul>';
421
+ }
422
+
423
+ /**
424
+ * Get an associative array ( option_name => option_title ) with the list
425
+ * of bulk actions available on this table.
426
+ *
427
+ * @since 3.1.0
428
+ *
429
+ * @return array
430
+ */
431
+ protected function get_bulk_actions() {
432
+ return array();
433
+ }
434
+
435
+ /**
436
+ * Display the bulk actions dropdown.
437
+ *
438
+ * @since 3.1.0
439
+ *
440
+ * @param string $which The location of the bulk actions: 'top' or 'bottom'.
441
+ * This is designated as optional for backward compatibility.
442
+ */
443
+ protected function bulk_actions( $which = '' ) {
444
+ if ( is_null( $this->_actions ) ) {
445
+ $this->_actions = $this->get_bulk_actions();
446
+ /**
447
+ * Filters the list table Bulk Actions drop-down.
448
+ *
449
+ * The dynamic portion of the hook name, `$this->screen->id`, refers
450
+ * to the ID of the current screen, usually a string.
451
+ *
452
+ * This filter can currently only be used to remove bulk actions.
453
+ *
454
+ * @since 3.5.0
455
+ *
456
+ * @param string[] $actions An array of the available bulk actions.
457
+ */
458
+ $this->_actions = apply_filters( "bulk_actions-{$this->screen->id}", $this->_actions ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
459
+ $two = '';
460
+ } else {
461
+ $two = '2';
462
+ }
463
+
464
+ if ( empty( $this->_actions ) ) {
465
+ return;
466
+ }
467
+
468
+ echo '<label for="bulk-action-selector-' . esc_attr( $which ) . '" class="screen-reader-text">' . __( 'Select bulk action' ) . '</label>';
469
+ echo '<select name="action' . $two . '" id="bulk-action-selector-' . esc_attr( $which ) . "\">\n";
470
+ echo '<option value="-1">' . __( 'Bulk Actions' ) . "</option>\n";
471
+
472
+ foreach ( $this->_actions as $name => $title ) {
473
+ $class = 'edit' === $name ? ' class="hide-if-no-js"' : '';
474
+
475
+ echo "\t" . '<option value="' . $name . '"' . $class . '>' . $title . "</option>\n";
476
+ }
477
+
478
+ echo "</select>\n";
479
+
480
+ submit_button( __( 'Apply' ), 'action', '', false, array( 'id' => "doaction$two" ) );
481
+ echo "\n";
482
+ }
483
+
484
+ /**
485
+ * Get the current action selected from the bulk actions dropdown.
486
+ *
487
+ * @since 3.1.0
488
+ *
489
+ * @return string|false The action name or False if no action was selected
490
+ */
491
+ public function current_action() {
492
+ if ( isset( $_REQUEST['filter_action'] ) && ! empty( $_REQUEST['filter_action'] ) ) {
493
+ return false;
494
+ }
495
+
496
+ if ( isset( $_REQUEST['action'] ) && -1 != $_REQUEST['action'] ) {
497
+ return $_REQUEST['action'];
498
+ }
499
+
500
+ if ( isset( $_REQUEST['action2'] ) && -1 != $_REQUEST['action2'] ) {
501
+ return $_REQUEST['action2'];
502
+ }
503
+
504
+ return false;
505
+ }
506
+
507
+ /**
508
+ * Generate row actions div
509
+ *
510
+ * @since 3.1.0
511
+ *
512
+ * @param string[] $actions An array of action links.
513
+ * @param bool $always_visible Whether the actions should be always visible.
514
+ * @return string
515
+ */
516
+ protected function row_actions( $actions, $always_visible = false ) {
517
+ $action_count = count( $actions );
518
+ $i = 0;
519
+
520
+ if ( ! $action_count ) {
521
+ return '';
522
+ }
523
+
524
+ $out = '<div class="' . ( $always_visible ? 'row-actions visible' : 'row-actions' ) . '">';
525
+ foreach ( $actions as $action => $link ) {
526
+ ++$i;
527
+ ( $i == $action_count ) ? $sep = '' : $sep = ' | ';
528
+ $out .= "<span class='$action'>$link$sep</span>";
529
+ }
530
+ $out .= '</div>';
531
+
532
+ $out .= '<button type="button" class="toggle-row"><span class="screen-reader-text">' . __( 'Show more details' ) . '</span></button>';
533
+
534
+ return $out;
535
+ }
536
+
537
+ /**
538
+ * Display a monthly dropdown for filtering items
539
+ *
540
+ * @since 3.1.0
541
+ *
542
+ * @global wpdb $wpdb WordPress database abstraction object.
543
+ * @global WP_Locale $wp_locale WordPress date and time locale object.
544
+ *
545
+ * @param string $post_type
546
+ */
547
+ protected function months_dropdown( $post_type ) {
548
+ global $wpdb, $wp_locale;
549
+
550
+ /**
551
+ * Filters whether to remove the 'Months' drop-down from the post list table.
552
+ *
553
+ * @since 4.2.0
554
+ *
555
+ * @param bool $disable Whether to disable the drop-down. Default false.
556
+ * @param string $post_type The post type.
557
+ */
558
+ if ( apply_filters( 'disable_months_dropdown', false, $post_type ) ) {
559
+ return;
560
+ }
561
+
562
+ $extra_checks = "AND post_status != 'auto-draft'";
563
+ if ( ! isset( $_GET['post_status'] ) || 'trash' !== $_GET['post_status'] ) {
564
+ $extra_checks .= " AND post_status != 'trash'";
565
+ } elseif ( isset( $_GET['post_status'] ) ) {
566
+ $extra_checks = $wpdb->prepare( ' AND post_status = %s', $_GET['post_status'] );
567
+ }
568
+
569
+ $months = $wpdb->get_results(
570
+ $wpdb->prepare(
571
+ "
572
+ SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month
573
+ FROM $wpdb->posts
574
+ WHERE post_type = %s
575
+ $extra_checks
576
+ ORDER BY post_date DESC
577
+ ",
578
+ $post_type
579
+ )
580
+ );
581
+
582
+ /**
583
+ * Filters the 'Months' drop-down results.
584
+ *
585
+ * @since 3.7.0
586
+ *
587
+ * @param object $months The months drop-down query results.
588
+ * @param string $post_type The post type.
589
+ */
590
+ $months = apply_filters( 'months_dropdown_results', $months, $post_type );
591
+
592
+ $month_count = count( $months );
593
+
594
+ if ( ! $month_count || ( 1 == $month_count && 0 == $months[0]->month ) ) {
595
+ return;
596
+ }
597
+
598
+ $m = isset( $_GET['m'] ) ? (int) $_GET['m'] : 0;
599
+ ?>
600
+ <label for="filter-by-date" class="screen-reader-text"><?php _e( 'Filter by date' ); ?></label>
601
+ <select name="m" id="filter-by-date">
602
+ <option<?php selected( $m, 0 ); ?> value="0"><?php _e( 'All dates' ); ?></option>
603
+ <?php
604
+ foreach ( $months as $arc_row ) {
605
+ if ( 0 == $arc_row->year ) {
606
+ continue;
607
+ }
608
+
609
+ $month = zeroise( $arc_row->month, 2 );
610
+ $year = $arc_row->year;
611
+
612
+ printf(
613
+ "<option %s value='%s'>%s</option>\n",
614
+ selected( $m, $year . $month, false ),
615
+ esc_attr( $arc_row->year . $month ),
616
+ /* translators: 1: Month name, 2: 4-digit year. */
617
+ sprintf( __( '%1$s %2$d' ), $wp_locale->get_month( $month ), $year )
618
+ );
619
+ }
620
+ ?>
621
+ </select>
622
+ <?php
623
+ }
624
+
625
+ /**
626
+ * Display a view switcher
627
+ *
628
+ * @since 3.1.0
629
+ *
630
+ * @param string $current_mode
631
+ */
632
+ protected function view_switcher( $current_mode ) {
633
+ ?>
634
+ <input type="hidden" name="mode" value="<?php echo esc_attr( $current_mode ); ?>" />
635
+ <div class="view-switch">
636
+ <?php
637
+ foreach ( $this->modes as $mode => $title ) {
638
+ $classes = array( 'view-' . $mode );
639
+ $aria_current = '';
640
+
641
+ if ( $current_mode === $mode ) {
642
+ $classes[] = 'current';
643
+ $aria_current = ' aria-current="page"';
644
+ }
645
+ printf(
646
+ "<a href='%s' class='%s' id='view-switch-$mode'$aria_current><span class='screen-reader-text'>%s</span></a>\n",
647
+ esc_url( add_query_arg( 'mode', $mode ) ),
648
+ implode( ' ', $classes ),
649
+ $title
650
+ );
651
+ }
652
+ ?>
653
+ </div>
654
+ <?php
655
+ }
656
+
657
+ /**
658
+ * Display a comment count bubble
659
+ *
660
+ * @since 3.1.0
661
+ *
662
+ * @param int $post_id The post ID.
663
+ * @param int $pending_comments Number of pending comments.
664
+ */
665
+ protected function comments_bubble( $post_id, $pending_comments ) {
666
+ $approved_comments = get_comments_number();
667
+
668
+ $approved_comments_number = number_format_i18n( $approved_comments );
669
+ $pending_comments_number = number_format_i18n( $pending_comments );
670
+
671
+ $approved_only_phrase = sprintf(
672
+ /* translators: %s: Number of comments. */
673
+ _n( '%s comment', '%s comments', $approved_comments ),
674
+ $approved_comments_number
675
+ );
676
+
677
+ $approved_phrase = sprintf(
678
+ /* translators: %s: Number of comments. */
679
+ _n( '%s approved comment', '%s approved comments', $approved_comments ),
680
+ $approved_comments_number
681
+ );
682
+
683
+ $pending_phrase = sprintf(
684
+ /* translators: %s: Number of comments. */
685
+ _n( '%s pending comment', '%s pending comments', $pending_comments ),
686
+ $pending_comments_number
687
+ );
688
+
689
+ // No comments at all.
690
+ if ( ! $approved_comments && ! $pending_comments ) {
691
+ printf(
692
+ '<span aria-hidden="true">&#8212;</span><span class="screen-reader-text">%s</span>',
693
+ __( 'No comments' )
694
+ );
695
+ // Approved comments have different display depending on some conditions.
696
+ } elseif ( $approved_comments ) {
697
+ printf(
698
+ '<a href="%s" class="post-com-count post-com-count-approved"><span class="comment-count-approved" aria-hidden="true">%s</span><span class="screen-reader-text">%s</span></a>',
699
+ esc_url(
700
+ add_query_arg(
701
+ array(
702
+ 'p' => $post_id,
703
+ 'comment_status' => 'approved',
704
+ ),
705
+ admin_url( 'edit-comments.php' )
706
+ )
707
+ ),
708
+ $approved_comments_number,
709
+ $pending_comments ? $approved_phrase : $approved_only_phrase
710
+ );
711
+ } else {
712
+ printf(
713
+ '<span class="post-com-count post-com-count-no-comments"><span class="comment-count comment-count-no-comments" aria-hidden="true">%s</span><span class="screen-reader-text">%s</span></span>',
714
+ $approved_comments_number,
715
+ $pending_comments ? __( 'No approved comments' ) : __( 'No comments' )
716
+ );
717
+ }
718
+
719
+ if ( $pending_comments ) {
720
+ printf(
721
+ '<a href="%s" class="post-com-count post-com-count-pending"><span class="comment-count-pending" aria-hidden="true">%s</span><span class="screen-reader-text">%s</span></a>',
722
+ esc_url(
723
+ add_query_arg(
724
+ array(
725
+ 'p' => $post_id,
726
+ 'comment_status' => 'moderated',
727
+ ),
728
+ admin_url( 'edit-comments.php' )
729
+ )
730
+ ),
731
+ $pending_comments_number,
732
+ $pending_phrase
733
+ );
734
+ } else {
735
+ printf(
736
+ '<span class="post-com-count post-com-count-pending post-com-count-no-pending"><span class="comment-count comment-count-no-pending" aria-hidden="true">%s</span><span class="screen-reader-text">%s</span></span>',
737
+ $pending_comments_number,
738
+ $approved_comments ? __( 'No pending comments' ) : __( 'No comments' )
739
+ );
740
+ }
741
+ }
742
+
743
+ /**
744
+ * Get the current page number
745
+ *
746
+ * @since 3.1.0
747
+ *
748
+ * @return int
749
+ */
750
+ public function get_pagenum() {
751
+ $pagenum = isset( $_REQUEST['paged'] ) ? absint( $_REQUEST['paged'] ) : 0;
752
+
753
+ if ( isset( $this->_pagination_args['total_pages'] ) && $pagenum > $this->_pagination_args['total_pages'] ) {
754
+ $pagenum = $this->_pagination_args['total_pages'];
755
+ }
756
+
757
+ return max( 1, $pagenum );
758
+ }
759
+
760
+ /**
761
+ * Get number of items to display on a single page
762
+ *
763
+ * @since 3.1.0
764
+ *
765
+ * @param string $option
766
+ * @param int $default
767
+ * @return int
768
+ */
769
+ protected function get_items_per_page( $option, $default = 20 ) {
770
+ $per_page = (int) get_user_option( $option );
771
+ if ( empty( $per_page ) || $per_page < 1 ) {
772
+ $per_page = $default;
773
+ }
774
+
775
+ /**
776
+ * Filters the number of items to be displayed on each page of the list table.
777
+ *
778
+ * The dynamic hook name, $option, refers to the `per_page` option depending
779
+ * on the type of list table in use. Possible values include: 'edit_comments_per_page',
780
+ * 'sites_network_per_page', 'site_themes_network_per_page', 'themes_network_per_page',
781
+ * 'users_network_per_page', 'edit_post_per_page', 'edit_page_per_page',
782
+ * 'edit_{$post_type}_per_page', etc.
783
+ *
784
+ * @since 2.9.0
785
+ *
786
+ * @param int $per_page Number of items to be displayed. Default 20.
787
+ */
788
+ return (int) apply_filters( "{$option}", $per_page );
789
+ }
790
+
791
+ /**
792
+ * Display the pagination.
793
+ *
794
+ * @since 3.1.0
795
+ *
796
+ * @param string $which
797
+ */
798
+ protected function pagination( $which ) {
799
+ if ( empty( $this->_pagination_args ) ) {
800
+ return;
801
+ }
802
+
803
+ $total_items = $this->_pagination_args['total_items'];
804
+ $total_pages = $this->_pagination_args['total_pages'];
805
+ $infinite_scroll = false;
806
+ if ( isset( $this->_pagination_args['infinite_scroll'] ) ) {
807
+ $infinite_scroll = $this->_pagination_args['infinite_scroll'];
808
+ }
809
+
810
+ if ( 'top' === $which && $total_pages > 1 ) {
811
+ $this->screen->render_screen_reader_content( 'heading_pagination' );
812
+ }
813
+
814
+ $output = '<span class="displaying-num">' . sprintf(
815
+ /* translators: %s: Number of items. */
816
+ _n( '%s item', '%s items', $total_items ),
817
+ number_format_i18n( $total_items )
818
+ ) . '</span>';
819
+
820
+ $current = $this->get_pagenum();
821
+ $removable_query_args = wp_removable_query_args();
822
+
823
+ $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
824
+
825
+ $current_url = remove_query_arg( $removable_query_args, $current_url );
826
+
827
+ $page_links = array();
828
+
829
+ $total_pages_before = '<span class="paging-input">';
830
+ $total_pages_after = '</span></span>';
831
+
832
+ $disable_first = false;
833
+ $disable_last = false;
834
+ $disable_prev = false;
835
+ $disable_next = false;
836
+
837
+ if ( $current == 1 ) {
838
+ $disable_first = true;
839
+ $disable_prev = true;
840
+ }
841
+ if ( $current == 2 ) {
842
+ $disable_first = true;
843
+ }
844
+ if ( $current == $total_pages ) {
845
+ $disable_last = true;
846
+ $disable_next = true;
847
+ }
848
+ if ( $current == $total_pages - 1 ) {
849
+ $disable_last = true;
850
+ }
851
+
852
+ if ( $disable_first ) {
853
+ $page_links[] = '<span class="tablenav-pages-navspan button disabled" aria-hidden="true">&laquo;</span>';
854
+ } else {
855
+ $page_links[] = sprintf(
856
+ "<a class='first-page button' href='%s'><span class='screen-reader-text'>%s</span><span aria-hidden='true'>%s</span></a>",
857
+ esc_url( remove_query_arg( 'paged', $current_url ) ),
858
+ __( 'First page' ),
859
+ '&laquo;'
860
+ );
861
+ }
862
+
863
+ if ( $disable_prev ) {
864
+ $page_links[] = '<span class="tablenav-pages-navspan button disabled" aria-hidden="true">&lsaquo;</span>';
865
+ } else {
866
+ $page_links[] = sprintf(
867
+ "<a class='prev-page button' href='%s'><span class='screen-reader-text'>%s</span><span aria-hidden='true'>%s</span></a>",
868
+ esc_url( add_query_arg( 'paged', max( 1, $current - 1 ), $current_url ) ),
869
+ __( 'Previous page' ),
870
+ '&lsaquo;'
871
+ );
872
+ }
873
+
874
+ if ( 'bottom' === $which ) {
875
+ $html_current_page = $current;
876
+ $total_pages_before = '<span class="screen-reader-text">' . __( 'Current Page' ) . '</span><span id="table-paging" class="paging-input"><span class="tablenav-paging-text">';
877
+ } else {
878
+ $html_current_page = sprintf(
879
+ "%s<input class='current-page' id='current-page-selector' type='text' name='paged' value='%s' size='%d' aria-describedby='table-paging' /><span class='tablenav-paging-text'>",
880
+ '<label for="current-page-selector" class="screen-reader-text">' . __( 'Current Page' ) . '</label>',
881
+ $current,
882
+ strlen( $total_pages )
883
+ );
884
+ }
885
+ $html_total_pages = sprintf( "<span class='total-pages'>%s</span>", number_format_i18n( $total_pages ) );
886
+ $page_links[] = $total_pages_before . sprintf(
887
+ /* translators: 1: Current page, 2: Total pages. */
888
+ _x( '%1$s of %2$s', 'paging' ),
889
+ $html_current_page,
890
+ $html_total_pages
891
+ ) . $total_pages_after;
892
+
893
+ if ( $disable_next ) {
894
+ $page_links[] = '<span class="tablenav-pages-navspan button disabled" aria-hidden="true">&rsaquo;</span>';
895
+ } else {
896
+ $page_links[] = sprintf(
897
+ "<a class='next-page button' href='%s'><span class='screen-reader-text'>%s</span><span aria-hidden='true'>%s</span></a>",
898
+ esc_url( add_query_arg( 'paged', min( $total_pages, $current + 1 ), $current_url ) ),
899
+ __( 'Next page' ),
900
+ '&rsaquo;'
901
+ );
902
+ }
903
+
904
+ if ( $disable_last ) {
905
+ $page_links[] = '<span class="tablenav-pages-navspan button disabled" aria-hidden="true">&raquo;</span>';
906
+ } else {
907
+ $page_links[] = sprintf(
908
+ "<a class='last-page button' href='%s'><span class='screen-reader-text'>%s</span><span aria-hidden='true'>%s</span></a>",
909
+ esc_url( add_query_arg( 'paged', $total_pages, $current_url ) ),
910
+ __( 'Last page' ),
911
+ '&raquo;'
912
+ );
913
+ }
914
+
915
+ $pagination_links_class = 'pagination-links';
916
+ if ( ! empty( $infinite_scroll ) ) {
917
+ $pagination_links_class .= ' hide-if-js';
918
+ }
919
+ $output .= "\n<span class='$pagination_links_class'>" . join( "\n", $page_links ) . '</span>';
920
+
921
+ if ( $total_pages ) {
922
+ $page_class = $total_pages < 2 ? ' one-page' : '';
923
+ } else {
924
+ $page_class = ' no-pages';
925
+ }
926
+ $this->_pagination = "<div class='tablenav-pages{$page_class}'>$output</div>";
927
+
928
+ echo $this->_pagination;
929
+ }
930
+
931
+ /**
932
+ * Get a list of columns. The format is:
933
+ * 'internal-name' => 'Title'
934
+ *
935
+ * @since 3.1.0
936
+ * @abstract
937
+ *
938
+ * @return array
939
+ */
940
+ public function get_columns() {
941
+ die( 'function WP_List_Table::get_columns() must be over-ridden in a sub-class.' );
942
+ }
943
+
944
+ /**
945
+ * Get a list of sortable columns. The format is:
946
+ * 'internal-name' => 'orderby'
947
+ * or
948
+ * 'internal-name' => array( 'orderby', true )
949
+ *
950
+ * The second format will make the initial sorting order be descending
951
+ *
952
+ * @since 3.1.0
953
+ *
954
+ * @return array
955
+ */
956
+ protected function get_sortable_columns() {
957
+ return array();
958
+ }
959
+
960
+ /**
961
+ * Gets the name of the default primary column.
962
+ *
963
+ * @since 4.3.0
964
+ *
965
+ * @return string Name of the default primary column, in this case, an empty string.
966
+ */
967
+ protected function get_default_primary_column_name() {
968
+ $columns = $this->get_columns();
969
+ $column = '';
970
+
971
+ if ( empty( $columns ) ) {
972
+ return $column;
973
+ }
974
+
975
+ // We need a primary defined so responsive views show something,
976
+ // so let's fall back to the first non-checkbox column.
977
+ foreach ( $columns as $col => $column_name ) {
978
+ if ( 'cb' === $col ) {
979
+ continue;
980
+ }
981
+
982
+ $column = $col;
983
+ break;
984
+ }
985
+
986
+ return $column;
987
+ }
988
+
989
+ /**
990
+ * Public wrapper for WP_List_Table::get_default_primary_column_name().
991
+ *
992
+ * @since 4.4.0
993
+ *
994
+ * @return string Name of the default primary column.
995
+ */
996
+ public function get_primary_column() {
997
+ return $this->get_primary_column_name();
998
+ }
999
+
1000
+ /**
1001
+ * Gets the name of the primary column.
1002
+ *
1003
+ * @since 4.3.0
1004
+ *
1005
+ * @return string The name of the primary column.
1006
+ */
1007
+ protected function get_primary_column_name() {
1008
+ $columns = get_column_headers( $this->screen );
1009
+ $default = $this->get_default_primary_column_name();
1010
+
1011
+ // If the primary column doesn't exist fall back to the
1012
+ // first non-checkbox column.
1013
+ if ( ! isset( $columns[ $default ] ) ) {
1014
+ $default = ABPCT_List_Table::get_default_primary_column_name();
1015
+ }
1016
+
1017
+ /**
1018
+ * Filters the name of the primary column for the current list table.
1019
+ *
1020
+ * @since 4.3.0
1021
+ *
1022
+ * @param string $default Column name default for the specific list table, e.g. 'name'.
1023
+ * @param string $context Screen ID for specific list table, e.g. 'plugins'.
1024
+ */
1025
+ $column = apply_filters( 'list_table_primary_column', $default, $this->screen->id );
1026
+
1027
+ if ( empty( $column ) || ! isset( $columns[ $column ] ) ) {
1028
+ $column = $default;
1029
+ }
1030
+
1031
+ return $column;
1032
+ }
1033
+
1034
+ /**
1035
+ * Get a list of all, hidden and sortable columns, with filter applied
1036
+ *
1037
+ * @since 3.1.0
1038
+ *
1039
+ * @return array
1040
+ */
1041
+ protected function get_column_info() {
1042
+ // $_column_headers is already set / cached
1043
+ if ( isset( $this->_column_headers ) && is_array( $this->_column_headers ) ) {
1044
+ // Back-compat for list tables that have been manually setting $_column_headers for horse reasons.
1045
+ // In 4.3, we added a fourth argument for primary column.
1046
+ $column_headers = array( array(), array(), array(), $this->get_primary_column_name() );
1047
+ foreach ( $this->_column_headers as $key => $value ) {
1048
+ $column_headers[ $key ] = $value;
1049
+ }
1050
+
1051
+ return $column_headers;
1052
+ }
1053
+
1054
+ $columns = get_column_headers( $this->screen );
1055
+ $hidden = get_hidden_columns( $this->screen );
1056
+
1057
+ $sortable_columns = $this->get_sortable_columns();
1058
+ /**
1059
+ * Filters the list table sortable columns for a specific screen.
1060
+ *
1061
+ * The dynamic portion of the hook name, `$this->screen->id`, refers
1062
+ * to the ID of the current screen, usually a string.
1063
+ *
1064
+ * @since 3.5.0
1065
+ *
1066
+ * @param array $sortable_columns An array of sortable columns.
1067
+ */
1068
+ $_sortable = apply_filters( "manage_{$this->screen->id}_sortable_columns", $sortable_columns );
1069
+
1070
+ $sortable = array();
1071
+ foreach ( $_sortable as $id => $data ) {
1072
+ if ( empty( $data ) ) {
1073
+ continue;
1074
+ }
1075
+
1076
+ $data = (array) $data;
1077
+ if ( ! isset( $data[1] ) ) {
1078
+ $data[1] = false;
1079
+ }
1080
+
1081
+ $sortable[ $id ] = $data;
1082
+ }
1083
+
1084
+ $primary = $this->get_primary_column_name();
1085
+ $this->_column_headers = array( $columns, $hidden, $sortable, $primary );
1086
+
1087
+ return $this->_column_headers;
1088
+ }
1089
+
1090
+ /**
1091
+ * Return number of visible columns
1092
+ *
1093
+ * @since 3.1.0
1094
+ *
1095
+ * @return int
1096
+ */
1097
+ public function get_column_count() {
1098
+ list ( $columns, $hidden ) = $this->get_column_info();
1099
+ $hidden = array_intersect( array_keys( $columns ), array_filter( $hidden ) );
1100
+ return count( $columns ) - count( $hidden );
1101
+ }
1102
+
1103
+ /**
1104
+ * Print column headers, accounting for hidden and sortable columns.
1105
+ *
1106
+ * @since 3.1.0
1107
+ *
1108
+ * @staticvar int $cb_counter
1109
+ *
1110
+ * @param bool $with_id Whether to set the id attribute or not
1111
+ */
1112
+ public function print_column_headers( $with_id = true ) {
1113
+ list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info();
1114
+
1115
+ $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
1116
+ $current_url = remove_query_arg( 'paged', $current_url );
1117
+
1118
+ if ( isset( $_GET['orderby'] ) ) {
1119
+ $current_orderby = $_GET['orderby'];
1120
+ } else {
1121
+ $current_orderby = '';
1122
+ }
1123
+
1124
+ if ( isset( $_GET['order'] ) && 'desc' === $_GET['order'] ) {
1125
+ $current_order = 'desc';
1126
+ } else {
1127
+ $current_order = 'asc';
1128
+ }
1129
+
1130
+ if ( ! empty( $columns['cb'] ) ) {
1131
+ static $cb_counter = 1;
1132
+ $columns['cb'] = '<label class="screen-reader-text" for="cb-select-all-' . $cb_counter . '">' . __( 'Select All' ) . '</label>'
1133
+ . '<input id="cb-select-all-' . $cb_counter . '" type="checkbox" />';
1134
+ $cb_counter++;
1135
+ }
1136
+
1137
+ foreach ( $columns as $column_key => $column_display_name ) {
1138
+ $class = array( 'manage-column', "column-$column_key" );
1139
+
1140
+ if ( in_array( $column_key, $hidden ) ) {
1141
+ $class[] = 'hidden';
1142
+ }
1143
+
1144
+ if ( 'cb' === $column_key ) {
1145
+ $class[] = 'check-column';
1146
+ } elseif ( in_array( $column_key, array( 'posts', 'comments', 'links' ) ) ) {
1147
+ $class[] = 'num';
1148
+ }
1149
+
1150
+ if ( $column_key === $primary ) {
1151
+ $class[] = 'column-primary';
1152
+ }
1153
+
1154
+ if ( isset( $sortable[ $column_key ] ) ) {
1155
+ list( $orderby, $desc_first ) = $sortable[ $column_key ];
1156
+
1157
+ if ( $current_orderby === $orderby ) {
1158
+ $order = 'asc' === $current_order ? 'desc' : 'asc';
1159
+ $class[] = 'sorted';
1160
+ $class[] = $current_order;
1161
+ } else {
1162
+ $order = $desc_first ? 'desc' : 'asc';
1163
+ $class[] = 'sortable';
1164
+ $class[] = $desc_first ? 'asc' : 'desc';
1165
+ }
1166
+
1167
+ $column_display_name = '<a href="' . esc_url( add_query_arg( compact( 'orderby', 'order' ), $current_url ) ) . '"><span>' . $column_display_name . '</span><span class="sorting-indicator"></span></a>';
1168
+ }
1169
+
1170
+ $tag = ( 'cb' === $column_key ) ? 'td' : 'th';
1171
+ $scope = ( 'th' === $tag ) ? 'scope="col"' : '';
1172
+ $id = $with_id ? "id='$column_key'" : '';
1173
+
1174
+ if ( ! empty( $class ) ) {
1175
+ $class = "class='" . join( ' ', $class ) . "'";
1176
+ }
1177
+
1178
+ echo "<$tag $scope $id $class>$column_display_name</$tag>";
1179
+ }
1180
+ }
1181
+
1182
+ /**
1183
+ * Displays the table.
1184
+ *
1185
+ * @since 3.1.0
1186
+ */
1187
+ public function display() {
1188
+ $singular = $this->_args['singular'];
1189
+
1190
+ $this->display_tablenav( 'top' );
1191
+
1192
+ $this->screen->render_screen_reader_content( 'heading_list' );
1193
+ ?>
1194
+ <table class="wp-list-table <?php echo implode( ' ', $this->get_table_classes() ); ?>">
1195
+ <thead>
1196
+ <tr>
1197
+ <?php $this->print_column_headers(); ?>
1198
+ </tr>
1199
+ </thead>
1200
+
1201
+ <tbody id="the-list"
1202
+ <?php
1203
+ if ( $singular ) {
1204
+ echo " data-wp-lists='list:$singular'";
1205
+ }
1206
+ ?>
1207
+ >
1208
+ <?php $this->display_rows_or_placeholder(); ?>
1209
+ </tbody>
1210
+
1211
+ <tfoot>
1212
+ <tr>
1213
+ <?php $this->print_column_headers( false ); ?>
1214
+ </tr>
1215
+ </tfoot>
1216
+
1217
+ </table>
1218
+ <?php
1219
+ $this->display_tablenav( 'bottom' );
1220
+ }
1221
+
1222
+ /**
1223
+ * Get a list of CSS classes for the WP_List_Table table tag.
1224
+ *
1225
+ * @since 3.1.0
1226
+ *
1227
+ * @return array List of CSS classes for the table tag.
1228
+ */
1229
+ protected function get_table_classes() {
1230
+ return array( 'widefat', 'fixed', 'striped', $this->_args['plural'] );
1231
+ }
1232
+
1233
+ /**
1234
+ * Generate the table navigation above or below the table
1235
+ *
1236
+ * @since 3.1.0
1237
+ * @param string $which
1238
+ */
1239
+ protected function display_tablenav( $which ) {
1240
+ if ( 'top' === $which ) {
1241
+ wp_nonce_field( 'bulk-' . $this->_args['plural'] );
1242
+ }
1243
+ ?>
1244
+ <div class="tablenav <?php echo esc_attr( $which ); ?>">
1245
+
1246
+ <?php if ( $this->has_items() ) : ?>
1247
+ <div class="alignleft actions bulkactions">
1248
+ <?php $this->bulk_actions( $which ); ?>
1249
+ </div>
1250
+ <?php
1251
+ endif;
1252
+ $this->extra_tablenav( $which );
1253
+ $this->pagination( $which );
1254
+ ?>
1255
+
1256
+ <br class="clear" />
1257
+ </div>
1258
+ <?php
1259
+ }
1260
+
1261
+ /**
1262
+ * Extra controls to be displayed between bulk actions and pagination
1263
+ *
1264
+ * @since 3.1.0
1265
+ *
1266
+ * @param string $which
1267
+ */
1268
+ protected function extra_tablenav( $which ) {}
1269
+
1270
+ /**
1271
+ * Generate the tbody element for the list table.
1272
+ *
1273
+ * @since 3.1.0
1274
+ */
1275
+ public function display_rows_or_placeholder() {
1276
+ if ( $this->has_items() ) {
1277
+ $this->display_rows();
1278
+ } else {
1279
+ echo '<tr class="no-items"><td class="colspanchange" colspan="' . $this->get_column_count() . '">';
1280
+ $this->no_items();
1281
+ echo '</td></tr>';
1282
+ }
1283
+ }
1284
+
1285
+ /**
1286
+ * Generate the table rows
1287
+ *
1288
+ * @since 3.1.0
1289
+ */
1290
+ public function display_rows() {
1291
+ foreach ( $this->items as $item ) {
1292
+ $this->single_row( $item );
1293
+ }
1294
+ }
1295
+
1296
+ /**
1297
+ * Generates content for a single row of the table
1298
+ *
1299
+ * @since 3.1.0
1300
+ *
1301
+ * @param object $item The current item
1302
+ */
1303
+ public function single_row( $item ) {
1304
+ echo '<tr>';
1305
+ $this->single_row_columns( $item );
1306
+ echo '</tr>';
1307
+ }
1308
+
1309
+ /**
1310
+ * @param object $item
1311
+ * @param string $column_name
1312
+ */
1313
+ protected function column_default( $item, $column_name ) {}
1314
+
1315
+ /**
1316
+ * @param object $item
1317
+ */
1318
+ protected function column_cb( $item ) {}
1319
+
1320
+ /**
1321
+ * Generates the columns for a single row of the table
1322
+ *
1323
+ * @since 3.1.0
1324
+ *
1325
+ * @param object $item The current item
1326
+ */
1327
+ protected function single_row_columns( $item ) {
1328
+ list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info();
1329
+
1330
+ foreach ( $columns as $column_name => $column_display_name ) {
1331
+ $classes = "$column_name column-$column_name";
1332
+ if ( $primary === $column_name ) {
1333
+ $classes .= ' has-row-actions column-primary';
1334
+ }
1335
+
1336
+ if ( in_array( $column_name, $hidden ) ) {
1337
+ $classes .= ' hidden';
1338
+ }
1339
+
1340
+ // Comments column uses HTML in the display name with screen reader text.
1341
+ // Instead of using esc_attr(), we strip tags to get closer to a user-friendly string.
1342
+ $data = 'data-colname="' . wp_strip_all_tags( $column_display_name ) . '"';
1343
+
1344
+ $attributes = "class='$classes' $data";
1345
+
1346
+ if ( 'cb' === $column_name ) {
1347
+ echo '<th scope="row" class="check-column">';
1348
+ echo $this->column_cb( $item );
1349
+ echo '</th>';
1350
+ } elseif ( method_exists( $this, '_column_' . $column_name ) ) {
1351
+ echo call_user_func(
1352
+ array( $this, '_column_' . $column_name ),
1353
+ $item,
1354
+ $classes,
1355
+ $data,
1356
+ $primary
1357
+ );
1358
+ } elseif ( method_exists( $this, 'column_' . $column_name ) ) {
1359
+ echo "<td $attributes>";
1360
+ echo call_user_func( array( $this, 'column_' . $column_name ), $item );
1361
+ echo $this->handle_row_actions( $item, $column_name, $primary );
1362
+ echo '</td>';
1363
+ } else {
1364
+ echo "<td $attributes>";
1365
+ echo $this->column_default( $item, $column_name );
1366
+ echo $this->handle_row_actions( $item, $column_name, $primary );
1367
+ echo '</td>';
1368
+ }
1369
+ }
1370
+ }
1371
+
1372
+ /**
1373
+ * Generates and display row actions links for the list table.
1374
+ *
1375
+ * @since 4.3.0
1376
+ *
1377
+ * @param object $item The item being acted upon.
1378
+ * @param string $column_name Current column name.
1379
+ * @param string $primary Primary column name.
1380
+ * @return string The row actions HTML, or an empty string if the current column is the primary column.
1381
+ */
1382
+ protected function handle_row_actions( $item, $column_name, $primary ) {
1383
+ return $column_name === $primary ? '<button type="button" class="toggle-row"><span class="screen-reader-text">' . __( 'Show more details' ) . '</span></button>' : '';
1384
+ }
1385
+
1386
+ /**
1387
+ * Handle an incoming ajax request (called from admin-ajax.php)
1388
+ *
1389
+ * @since 3.1.0
1390
+ */
1391
+ public function ajax_response() {
1392
+ $this->prepare_items();
1393
+
1394
+ ob_start();
1395
+ if ( ! empty( $_REQUEST['no_placeholder'] ) ) {
1396
+ $this->display_rows();
1397
+ } else {
1398
+ $this->display_rows_or_placeholder();
1399
+ }
1400
+
1401
+ $rows = ob_get_clean();
1402
+
1403
+ $response = array( 'rows' => $rows );
1404
+
1405
+ if ( isset( $this->_pagination_args['total_items'] ) ) {
1406
+ $response['total_items_i18n'] = sprintf(
1407
+ /* translators: Number of items. */
1408
+ _n( '%s item', '%s items', $this->_pagination_args['total_items'] ),
1409
+ number_format_i18n( $this->_pagination_args['total_items'] )
1410
+ );
1411
+ }
1412
+ if ( isset( $this->_pagination_args['total_pages'] ) ) {
1413
+ $response['total_pages'] = $this->_pagination_args['total_pages'];
1414
+ $response['total_pages_i18n'] = number_format_i18n( $this->_pagination_args['total_pages'] );
1415
+ }
1416
+
1417
+ die( wp_json_encode( $response ) );
1418
+ }
1419
+
1420
+ /**
1421
+ * Send required variables to JavaScript land
1422
+ */
1423
+ public function _js_vars() {
1424
+ $args = array(
1425
+ 'class' => get_class( $this ),
1426
+ 'screen' => array(
1427
+ 'id' => $this->screen->id,
1428
+ 'base' => $this->screen->base,
1429
+ ),
1430
+ );
1431
+
1432
+ printf( "<script type='text/javascript'>list_args = %s;</script>\n", wp_json_encode( $args ) );
1433
+ }
1434
+ }
inc/cleantalk-admin.php CHANGED
@@ -307,104 +307,31 @@ function apbct_admin__enqueue_scripts($hook){
307
  'ip_license' => $apbct->ip_license ? true : false,
308
  ));
309
  }
310
-
311
- // COMMENTS's page JavaScript and CSS
312
- if( $hook == 'comments_page_ct_check_spam' || $hook == 'edit-comments.php'){
313
-
314
- // Preparing data
315
- if(!empty($_COOKIE['ct_paused_comments_check']))
316
- $prev_check = json_decode(stripslashes($_COOKIE['ct_paused_comments_check']), true);
317
-
318
- // jQueryUI
319
- wp_enqueue_script('jqueryui', plugins_url('/cleantalk-spam-protect/js/jquery-ui.min.js'), array('jquery'), '1.12.1');
320
- wp_enqueue_style('jqueryui_css', plugins_url('/cleantalk-spam-protect/css/jquery-ui.min.css'),array(), '1.21.1', 'all');
321
-
322
- // CSS
323
- wp_enqueue_style('cleantalk_admin_css_settings_page', plugins_url('/cleantalk-spam-protect/css/cleantalk-spam-check.min.css'), array(), APBCT_VERSION, 'all');
324
-
325
- // CHECK COMMENTS page JavaScript
326
- if($hook == 'comments_page_ct_check_spam'){
327
- wp_enqueue_script('ct_comments_checkspam', plugins_url('/cleantalk-spam-protect/js/cleantalk-comments-checkspam.min.js'), array(), APBCT_VERSION);
328
- wp_localize_script( 'jquery', 'ctCommentsCheck', array(
329
- 'ct_ajax_nonce' => wp_create_nonce('ct_secret_nonce'),
330
- 'ct_prev_accurate' => !empty($prev_check['accurate']) ? true : false,
331
- 'ct_prev_from' => !empty($prev_check['from']) ? $prev_check['from'] : false,
332
- 'ct_prev_till' => !empty($prev_check['till']) ? $prev_check['till'] : false,
333
- 'ct_timeout_confirm' => __('Failed from timeout. Going to check comments again.', 'cleantalk'),
334
- 'ct_comments_added' => __('Added', 'cleantalk'),
335
- 'ct_comments_deleted' => __('Deleted', 'cleantalk'),
336
- 'ct_comments_added_after' => __('comments', 'cleantalk'),
337
- 'ct_confirm_deletion_all' => __('Delete all spam comments?', 'cleantalk'),
338
- 'ct_confirm_deletion_checked' => __('Delete checked comments?', 'cleantalk'),
339
- 'ct_status_string' => __('Total comments %s. Checked %s. Found %s spam comments. %s bad comments (without IP or email).', 'cleantalk'),
340
- 'ct_status_string_warning' => '<p>'.__('Please do backup of WordPress database before delete any accounts!', 'cleantalk').'</p>',
341
- 'start' => !empty($_COOKIE['ct_comments_start_check']) ? true : false,
342
- ));
343
- }
344
-
345
- // COMMENTS page JavaScript
346
- if($hook == 'edit-comments.php'){
347
- wp_enqueue_script('ct_comments_editscreen', plugins_url('/cleantalk-spam-protect/js/cleantalk-comments-editscreen.min.js'), array(), APBCT_VERSION);
348
- wp_localize_script( 'jquery', 'ctCommentsScreen', array(
349
- 'ct_ajax_nonce' => wp_create_nonce('ct_secret_nonce'),
350
- 'spambutton_text' => __("Find spam comments", 'cleantalk'),
351
- 'ct_feedback_msg_whitelisted' => __("The sender has been whitelisted.", 'cleantalk'),
352
- 'ct_feedback_msg_blacklisted' => __("The sender has been blacklisted.", 'cleantalk'),
353
- 'ct_feedback_msg' => sprintf(__("Feedback has been sent to %sCleanTalk Dashboard%s.", 'cleantalk'), $apbct->user_token ? "<a target='_blank' href=https://cleantalk.org/my?user_token={$apbct->user_token}&cp_mode=antispam>" : '', $apbct->user_token ? "</a>" : ''),
354
- 'ct_show_check_links' => (bool)$apbct->settings['show_check_links'],
355
- 'ct_img_src_new_tab' => plugin_dir_url(__FILE__)."images/new_window.gif",
356
- ));
357
- }
358
- }
359
-
360
- // USERS's page JavaScript and CSS
361
- if( $hook == 'users_page_ct_check_users' || $hook == 'users.php'){
362
-
363
- // Preparing data
364
- $current_user = wp_get_current_user();
365
- if(!empty($_COOKIE['ct_paused_users_check']))
366
- $prev_check = json_decode(stripslashes($_COOKIE['ct_paused_users_check']), true);
367
-
368
- // jQueryUI
369
- wp_enqueue_script('jqueryui', plugins_url('/cleantalk-spam-protect/js/jquery-ui.min.js'), array('jquery'), '1.12.1');
370
- wp_enqueue_style('jqueryui_css', plugins_url('/cleantalk-spam-protect/css/jquery-ui.min.css'),array(), '1.21.1', 'all');
371
-
372
- // CSS
373
- wp_enqueue_style('cleantalk_admin_css_settings_page', plugins_url().'/cleantalk-spam-protect/css/cleantalk-spam-check.min.css', array(), APBCT_VERSION, 'all');
374
-
375
- // CHECK USERS page JavaScript
376
- if($hook == 'users_page_ct_check_users'){
377
- wp_enqueue_script('ct_users_checkspam', plugins_url('/cleantalk-spam-protect/js/cleantalk-users-checkspam.min.js'), array(), APBCT_VERSION);
378
- wp_localize_script( 'jquery', 'ctUsersCheck', array(
379
- 'ct_ajax_nonce' => wp_create_nonce('ct_secret_nonce'),
380
- 'ct_prev_accurate' => !empty($prev_check['accurate']) ? true : false,
381
- 'ct_prev_from' => !empty($prev_check['from']) ? $prev_check['from'] : false,
382
- 'ct_prev_till' => !empty($prev_check['till']) ? $prev_check['till'] : false,
383
- 'ct_timeout' => __('Failed from timeout. Going to check users again.', 'cleantalk'),
384
- 'ct_timeout_delete' => __('Failed from timeout. Going to run a new attempt to delete spam users.', 'cleantalk'),
385
- 'ct_inserted' => __('Inserted', 'cleantalk'),
386
- 'ct_deleted' => __('Deleted', 'cleantalk'),
387
- 'ct_iusers' => __('users.', 'cleantalk'),
388
- 'ct_confirm_deletion_all' => __('Delete all spam users?', 'cleantalk'),
389
- 'ct_confirm_deletion_checked' => __('Delete checked users?', 'cleantalk'),
390
- 'ct_csv_filename' => "user_check_by_".$current_user->user_login,
391
- 'ct_bad_csv' => __("File doesn't exist. File will be generated while checking. Please, press \"Check for spam\"."),
392
- 'ct_status_string' => __("Total users %s, checked %s, found %s spam users and %s bad users (without IP or email)", 'cleantalk'),
393
- 'ct_status_string_warning' => "<p>".__("Please do backup of WordPress database before delete any accounts!", 'cleantalk')."</p>"
394
- ));
395
- }
396
-
397
- // USERS page JavaScript
398
- if($hook == 'users.php'){
399
- wp_enqueue_script('ct_users_editscreen', plugins_url('/cleantalk-spam-protect/js/cleantalk-users-editscreen.min.js'), array(), APBCT_VERSION);
400
- wp_localize_script( 'jquery', 'ctUsersScreen', array(
401
- 'spambutton_text' => __("Find spam-users", 'cleantalk'),
402
- 'ct_show_check_links' => (bool)$apbct->settings['show_check_links'],
403
- 'ct_img_src_new_tab' => plugin_dir_url(__FILE__)."images/new_window.gif"
404
- ));
405
- }
406
-
407
- }
408
  }
409
 
410
  /**
@@ -664,7 +591,10 @@ function apbct_comment__unmark_red($message) {
664
  function apbct_comment__send_feedback($comment_id = null, $comment_status = null, $change_status = false, $direct_call = null){
665
 
666
  // For AJAX call
667
- check_ajax_referer('ct_secret_nonce', 'security');
 
 
 
668
  $comment_id = !empty($_POST['comment_id']) ? $_POST['comment_id'] : false;
669
  $comment_status = !empty($_POST['comment_status']) ? $_POST['comment_status'] : false;
670
  $change_status = !empty($_POST['change_status']) ? $_POST['change_status'] : false;
307
  'ip_license' => $apbct->ip_license ? true : false,
308
  ));
309
  }
310
+
311
+ // COMMENTS page JavaScript
312
+ if($hook == 'edit-comments.php'){
313
+ wp_enqueue_script('ct_comments_editscreen', plugins_url('/cleantalk-spam-protect/js/cleantalk-comments-editscreen.min.js'), array(), APBCT_VERSION);
314
+ wp_localize_script( 'jquery', 'ctCommentsScreen', array(
315
+ 'ct_ajax_nonce' => wp_create_nonce('ct_secret_nonce'),
316
+ 'spambutton_text' => __("Find spam comments", 'cleantalk'),
317
+ 'ct_feedback_msg_whitelisted' => __("The sender has been whitelisted.", 'cleantalk'),
318
+ 'ct_feedback_msg_blacklisted' => __("The sender has been blacklisted.", 'cleantalk'),
319
+ 'ct_feedback_msg' => sprintf(__("Feedback has been sent to %sCleanTalk Dashboard%s.", 'cleantalk'), $apbct->user_token ? "<a target='_blank' href=https://cleantalk.org/my?user_token={$apbct->user_token}&cp_mode=antispam>" : '', $apbct->user_token ? "</a>" : ''),
320
+ 'ct_show_check_links' => (bool)$apbct->settings['show_check_links'],
321
+ 'ct_img_src_new_tab' => plugin_dir_url(__FILE__)."images/new_window.gif",
322
+ ));
323
+ }
324
+
325
+ // USERS page JavaScript
326
+ if($hook == 'users.php'){
327
+ wp_enqueue_script('ct_users_editscreen', plugins_url('/cleantalk-spam-protect/js/cleantalk-users-editscreen.min.js'), array(), APBCT_VERSION);
328
+ wp_localize_script( 'jquery', 'ctUsersScreen', array(
329
+ 'spambutton_text' => __("Find spam-users", 'cleantalk'),
330
+ 'ct_show_check_links' => (bool)$apbct->settings['show_check_links'],
331
+ 'ct_img_src_new_tab' => plugin_dir_url(__FILE__)."images/new_window.gif"
332
+ ));
333
+ }
334
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
335
  }
336
 
337
  /**
591
  function apbct_comment__send_feedback($comment_id = null, $comment_status = null, $change_status = false, $direct_call = null){
592
 
593
  // For AJAX call
594
+ if( ! $direct_call ){
595
+ check_ajax_referer('ct_secret_nonce', 'security');
596
+ }
597
+
598
  $comment_id = !empty($_POST['comment_id']) ? $_POST['comment_id'] : false;
599
  $comment_status = !empty($_POST['comment_status']) ? $_POST['comment_status'] : false;
600
  $change_status = !empty($_POST['change_status']) ? $_POST['change_status'] : false;
inc/cleantalk-ajax.php CHANGED
@@ -287,6 +287,7 @@ function ct_ajax_hook($message_obj = false, $additional = false)
287
  'formcraft3_save_form_progress', // FormCraft – Contact Form Builder for WordPress. Save progress.
288
  'wpdmpp_save_settings', // PayPal save settings.
289
  'give_process_donation', // GiveWP will be checked by feedback_general_contact_form
 
290
  );
291
 
292
  // Skip test if
287
  'formcraft3_save_form_progress', // FormCraft – Contact Form Builder for WordPress. Save progress.
288
  'wpdmpp_save_settings', // PayPal save settings.
289
  'give_process_donation', // GiveWP will be checked by feedback_general_contact_form
290
+ 'iwj_login', // Fix for unknown plugin for user #133315
291
  );
292
 
293
  // Skip test if
inc/cleantalk-autoloader.php CHANGED
@@ -1,21 +1,21 @@
1
- <?php
2
-
3
- /**
4
- * Autoloader for \Cleantalk\* classes
5
- *
6
- * @param string $class
7
- *
8
- * @return void
9
- */
10
- function apbct_autoloader( $class ){
11
- // Register class auto loader
12
- // Custom modules
13
- if( strpos( $class, 'Cleantalk' ) !== false && ! class_exists( '\\' . $class )) {
14
- $class_file = CLEANTALK_PLUGIN_DIR . 'lib' . DIRECTORY_SEPARATOR . $class . '.php';
15
- if( file_exists( $class_file ) ){
16
- require_once( $class_file );
17
- }
18
- }
19
- }
20
-
21
- spl_autoload_register( 'apbct_autoloader' );
1
+ <?php
2
+
3
+ /**
4
+ * Autoloader for \Cleantalk\* classes
5
+ *
6
+ * @param string $class
7
+ *
8
+ * @return void
9
+ */
10
+ function apbct_autoloader( $class ){
11
+ // Register class auto loader
12
+ // Custom modules
13
+ if( strpos( $class, 'Cleantalk' ) !== false && ! class_exists( '\\' . $class )) {
14
+ $class_file = CLEANTALK_PLUGIN_DIR . 'lib' . DIRECTORY_SEPARATOR . $class . '.php';
15
+ if( file_exists( $class_file ) ){
16
+ require_once( $class_file );
17
+ }
18
+ }
19
+ }
20
+
21
+ spl_autoload_register( 'apbct_autoloader' );
inc/cleantalk-comments.php DELETED
@@ -1,726 +0,0 @@
1
- <?php
2
-
3
- add_action('admin_menu', 'ct_add_comments_menu');
4
- add_action( 'wp_ajax_ajax_check_comments', 'ct_ajax_check_comments' );
5
- add_action( 'wp_ajax_ajax_info_comments', 'ct_ajax_info_comments' );
6
- add_action( 'wp_ajax_ajax_insert_comments', 'ct_ajax_insert_comments' );
7
- add_action( 'wp_ajax_ajax_delete_checked', 'ct_ajax_delete_checked' );
8
- add_action( 'wp_ajax_ajax_delete_all', 'ct_ajax_delete_all' );
9
- add_action( 'wp_ajax_ajax_clear_comments', 'ct_ajax_clear_comments' );
10
- add_action( 'wp_ajax_ajax_ct_approve_comment', 'ct_comment_check_approve_comment' );
11
-
12
- function ct_add_comments_menu(){
13
- if(current_user_can('activate_plugins'))
14
- add_comments_page( __("Check for spam", 'cleantalk'), __("Find spam comments", 'cleantalk'), 'read', 'ct_check_spam', 'ct_show_checkspam_page');
15
- }
16
-
17
- function ct_show_checkspam_page(){
18
-
19
- global $apbct;
20
-
21
- ?>
22
- <div class="wrap">
23
- <h2><img src="<?php echo $apbct->logo__small__colored; ?>" /> <?php echo $apbct->plugin_name; ?></h2>
24
- <a style="color: gray; margin-left: 23px;" href="<?php echo $apbct->settings_link; ?>"><?php _e('Plugin Settings', 'cleantalk'); ?></a>
25
- <br />
26
- <?php
27
-
28
- // If access key is unset in
29
- if(!apbct_api_key__is_correct()){
30
- if($apbct->moderate_ip == 1){
31
- echo '<h3>'
32
- .sprintf(
33
- __('Antispam hosting tariff does not allow you to use this feature. To do so, you need to enter an Access Key in the %splugin settings%s.', 'cleantalk'),
34
- '<a href="' . (is_network_admin() ? 'settings.php?page=cleantalk' : 'options-general.php?page=cleantalk').'">',
35
- '</a>'
36
- )
37
- .'</h3>';
38
- return;
39
- }
40
- }
41
-
42
- // Getting total spam comments
43
- $args_spam = array(
44
- 'meta_query' => array(
45
- Array(
46
- 'key' => 'ct_marked_as_spam',
47
- 'compare' => 'EXISTS'
48
- )
49
- ),
50
- 'count'=>true
51
- );
52
- $cnt_spam = get_comments($args_spam);
53
-
54
- ?>
55
- <!-- AJAX error message -->
56
- <div id="ct_error_message" style="display:none">
57
- <h3>
58
- <?php _e("Ajax error. Process will be automatically restarted in 3 seconds. Status: ", 'cleantalk'); ?><span id="cleantalk_ajax_error"></span> (<span id="cleantalk_js_func"></span>)
59
- </h3>
60
- <h4>Please, check for JavaScript errors in your dashboard and and repair it.</h4>
61
- </div>
62
-
63
- <!-- Deleting message -->
64
- <div id="ct_deleting_message" style="display:none;">
65
- <?php _e("Please wait for a while. CleanTalk is deleting spam comments. Comments left: ", 'cleantalk'); ?> <span id="cleantalk_comments_left">
66
- <?php echo $cnt_spam; ?>
67
- </span>
68
- </div>
69
-
70
- <!-- Main info -->
71
- <h3 id="ct_checking_status"><?php echo ct_ajax_info_comments(true);?></h3>
72
-
73
- <!-- Check options -->
74
- <div class="ct_to_hide" id="ct_check_params_wrapper">
75
- <button class="button ct_check_params_elem" id="ct_check_spam_button" <?php echo !$apbct->data['moderate'] ? 'disabled="disabled"' : ''; ?>><?php _e("Start check", 'cleantalk'); ?></button>
76
- <?php if(!empty($_COOKIE['ct_paused_comments_check'])) { ?><button class="button ct_check_params_elem" id="ct_proceed_check_button"><?php _e("Continue check", 'cleantalk'); ?></button><?php } ?>
77
- <p class="ct_check_params_desc"><?php _e("The plugin will check all comments against blacklists database and show you senders that have spam activity on other websites.", 'cleantalk'); ?></p>
78
- <br />
79
- <div class="ct_check_params_elem ct_check_params_elem_sub">
80
- <input id="ct_accurate_check" type="checkbox" value="1" /><b><label for="ct_accurate_check"><?php _e("Accurate check", 'cleantalk'); ?></b></label>
81
- </div>
82
- <p class="ct_check_params_desc"><?php _e("Allows to use comment's dates to perform more accurate check. Could seriously slow down the check.", 'cleantalk'); ?></p>
83
- <br />
84
- <div class="ct_check_params_elem ct_check_params_elem_sub">
85
- <input id="ct_allow_date_range" type="checkbox" value="1" /><label for="ct_allow_date_range"><b><?php _e("Specify date range", 'cleantalk'); ?></b></label>
86
- </div>
87
- <div class="ct_check_params_desc">
88
- <input class="ct_date" type="text" id="ct_date_range_from" value="<?php echo ct_last_checked_comment(); ?>" disabled readonly />
89
- <input class="ct_date" type="text" id="ct_date_range_till" value="<?php echo date( "M j Y"); ?>" disabled readonly />
90
- </div>
91
- <div class="ct_check_params_desc">
92
- <p>Begin/end dates of creation comments to check. If no date is specified, the plugin uses the last comments check date.</p>
93
- </div>
94
- <br>
95
- <?php apbct_admin__badge__get_premium(); ?>
96
- </div>
97
-
98
- <!-- Cooling notice -->
99
- <h3 id="ct_cooling_notice"></h3>
100
-
101
- <!-- Preloader and working message -->
102
- <div id="ct_preloader">
103
- <img border=0 src="<?php print plugin_dir_url(__FILE__); ?>images/preloader.gif" />
104
- </div>
105
- <div id="ct_working_message">
106
- <?php _e("Please wait! CleanTalk is checking all approved and pending comments via blacklist database at cleantalk.org. You will have option to delete found spam comments after plugin finish.", 'cleantalk'); ?>
107
- </div>
108
-
109
- <!-- Pause button -->
110
- <button class="button" id="ct_pause">Pause check</button>
111
-
112
- <?php
113
-
114
- // Pagination
115
- $page = !empty($_GET['spam_page']) ? intval($_GET['spam_page']) : 1;
116
- $on_page = 20;
117
-
118
- $args_spam = array(
119
- 'meta_query' => array(
120
- Array(
121
- 'key' => 'ct_marked_as_spam',
122
- 'value' => '1',
123
- 'compare' => 'NUMERIC'
124
- )
125
- ),
126
- 'number'=>$on_page,
127
- 'offset'=>($page-1)*$on_page
128
- );
129
-
130
- $c_spam = get_comments($args_spam);
131
- if($cnt_spam>0){
132
-
133
- $pages = ceil(intval($cnt_spam)/$on_page);
134
- if($pages && $pages != 1){
135
- echo "<div class='ct_to_hide pagination'>"
136
- ."<b>Pages:</b>"
137
- ."<ul class='pagination'>";
138
- for($i = 1; $i <= $pages; $i++){
139
- echo "<li class='pagination'>"
140
- ."<a href='edit-comments.php?page=ct_check_spam&spam_page=$i&ct_worked=1'>"
141
- .($i == $page ? "<span class='current_page'>$i</span>" : $i)
142
- ."</a>"
143
- ."</li>";
144
- }
145
- echo "</ul>";
146
- echo "</div>";
147
- }
148
- ?>
149
- <table class="ct_to_hide widefat fixed comments" id="ct_check_comments_table">
150
- <thead>
151
- <th scope="col" id="cb" class="manage-column column-cb check-column">
152
- <label class="screen-reader-text" for="cb-select-all-1">Select All</label>
153
- <input id="cb-select-all-1" type="checkbox" style="margin-top:0;"/>
154
- </th>
155
- <th scope="col" id="author" class="manage-column column-slug"><?php print _e( 'Author' ); ?></th>
156
- <th scope="col" id="comment" class="manage-column column-comment"><?php _e( 'Comment', 'cleantalk'); ?></th>
157
- <th scope="col" id="response" class="manage-column column-response sortable desc"><?php _e( 'In Response To', 'cleantalk' );?></th>
158
- </thead>
159
- <tbody id="the-comment-list" data-wp-lists="list:comment">
160
- <?php
161
- for($i=0;$i<sizeof($c_spam);$i++){
162
- $id = $c_spam[$i]->comment_ID;
163
- $post_id = $c_spam[$i]->comment_post_ID;
164
- $login = $c_spam[$i]->comment_author;
165
- $email = $c_spam[$i]->comment_author_email;
166
- $ip = $c_spam[$i]->comment_author_IP;
167
-
168
- echo "<tr id='comment-$id' class='comment even thread-even depth-1 approved cleantalk_comment' data-id='$id'>"
169
- ."<th scope='row' class='check-column'>"
170
- ."<label class='screen-reader-text' for='cb-select-$id'>Select comment</label>"
171
- ."<input id='cb-select-$id' type='checkbox' name='del_comments[]' value='$id'/>"
172
- ."</th>"
173
- ."<td class='author column-author' nowrap>"
174
- ."<strong>"
175
- .get_avatar( $c_spam[$i]->user_id , 32)
176
- ."$login"
177
- ."</strong>"
178
- ."<br />"
179
- ."<br />";
180
-
181
- // Outputs email if exists
182
- if($email)
183
- echo "<a href='mailto:$email'>$email</a>"
184
- .(!$apbct->white_label
185
- ? "<a href='https://cleantalk.org/blacklists/$email' target='_blank'>"
186
- ."&nbsp;<img src='".plugin_dir_url(__FILE__)."images/new_window.gif' border='0' style='float:none' />"
187
- ."</a>"
188
- : '');
189
- else
190
- echo "No email";
191
- echo "<br/>";
192
-
193
- // Outputs IP if exists
194
- if($ip)
195
- echo "<a href='edit-comments.php?s=$ip&mode=detail'>$ip </a>"
196
- .(!$apbct->white_label
197
- ?"<a href='https://cleantalk.org/blacklists/$ip ' target='_blank'>"
198
- ."&nbsp;<img src='".plugin_dir_url(__FILE__)."images/new_window.gif' border='0' style='float:none'/>"
199
- ."</a>"
200
- : '');
201
- else
202
- echo "No IP adress";
203
- echo "</td>";
204
- ?>
205
- <td class="comment column-comment">
206
- <div class="submitted-on">
207
- <?php printf( __( 'Submitted on <a href="%1$s">%2$s at %3$s</a>' ), get_comment_link($id),
208
- /* translators: comment date format. See http://php.net/date */
209
- get_comment_date( __( 'Y/m/d' ),$id ),
210
- get_comment_date( get_option( 'time_format' ),$id )
211
- );
212
- ?>
213
-
214
- </div>
215
- <p>
216
- <?php print $c_spam[$i]->comment_content; ?>
217
- </p>
218
- <div style="height:16px; display: none;" id='cleantalk_button_set_<?php print $id; ?>'>
219
- <a href="#" class="cleantalk_delete_from_list_button" data-id="<?php print $id; ?>" style="color:#0a0;" onclick="return false;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';"><?php _e("Approve", "cleantalk"); ?></a>
220
- &nbsp;|&nbsp;
221
- <a href="#" class="cleantalk_delete_button" data-id="<?php print $id; ?>" style="color:#a00;" onclick="return false;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';"><?php _e("Delete", "cleantalk"); ?></a>
222
- </div>
223
- </td>
224
- <td class="response column-response">
225
- <div>
226
- <span>
227
- <a href="/wp-admin/post.php?post=<?php print $post_id; ?>&action=edit"><?php print get_the_title($post_id); ?></a>
228
- <br/>
229
- <a href="/wp-admin/edit-comments.php?p=<?php print $post_id; ?>" class="post-com-count">
230
- <span class="comment-count"><?php
231
- $p_cnt=wp_count_comments();
232
- print $p_cnt->total_comments;
233
- ?></span>
234
- </a>
235
- </span>
236
- <a href="<?php print get_permalink($post_id); ?>"><?php print _e('View Post');?></a>
237
- </div>
238
- </td>
239
- </tr>
240
- <?php
241
- }
242
- ?>
243
- </tbody>
244
- </table>
245
- <?php
246
- // Pagination
247
- if($pages && $pages != 1){
248
- echo "<div class='ct_to_hide pagination'>"
249
- ."<b>Pages:</b>"
250
- ."<ul class='pagination'>";
251
- for($i = 1; $i <= $pages; $i++){
252
- echo "<li class='pagination'>"
253
- ."<a href='edit-comments.php?page=ct_check_spam&spam_page=$i&ct_worked=1'>"
254
- .($i == $page ? "<span class='current_page'>$i</span>" : $i)
255
- ."</a>"
256
- ."</li>";
257
- }
258
- echo "</ul>";
259
- echo "</div>";
260
- }
261
- ?>
262
- <div class="ct_to_hide" id="ct_tools_buttons" style="margin-top: 10px;">
263
- <button class= "button" id="ct_delete_all"><?php _e('Delete all comments from the list', 'cleantalk'); ?></button>
264
- <button class="button" id="ct_delete_checked"><?php _e('Delete selected', 'cleantalk'); ?></button><br /><br />
265
- </div>
266
- <?php
267
- }
268
- echo apbct_get_server_variable( 'REMOTE_ADDR' )=='127.0.0.1' ? '<button class="button ct_to_hide" id="ct_insert_comments">'. __('Insert comments', 'cleantalk') .' (100)</button> ' : '';
269
- echo apbct_get_server_variable( 'REMOTE_ADDR' )=='127.0.0.1' ? '<button class="button ct_to_hide" id="ct_delete_comments">'. __('Delete comments', 'cleantalk') .' (110)</button>' : '';
270
-
271
- if($cnt_spam > 0){
272
- echo "<div id='ct_search_info'>"
273
- ."<br />"
274
- .__('There is some differencies between blacklists database and our API mechanisms. Blacklists shows all history of spam activity, but our API (that used in spam checking) used another parameters, too: last day of activity, number of spam attacks during last days etc. This mechanisms help us to reduce number of false positivitie. So, there is nothing strange, if some emails/IPs will be not found by this checking.', 'cleantalk')
275
- ."</div>";
276
- }
277
- ?>
278
- <div>
279
- <button class="button" id="ct_stop_deletion" style="display:none;"><?php _e("Stop deletion", 'cleantalk'); ?></button>
280
- </div>
281
- </div>
282
- <?php
283
- }
284
-
285
- function ct_ajax_check_comments(){
286
-
287
- check_ajax_referer( 'ct_secret_nonce', 'security' );
288
-
289
- global $wpdb, $apbct;
290
-
291
- if(isset($_POST['from'], $_POST['till'])){
292
- $from_date = date('Y-m-d', intval(strtotime($_POST['from'])));
293
- $till_date = date('Y-m-d', intval(strtotime($_POST['till'])));
294
- }
295
-
296
- // Gettings comments 100 unchecked comments
297
- if(isset($_COOKIE['ct_comments_safe_check'])){
298
- $c = $wpdb->get_results("
299
- SELECT comment_ID, comment_date_gmt, comment_author_IP, comment_author_email
300
- FROM {$wpdb->comments} as comm
301
- WHERE
302
- (comm.comment_approved = '1' OR comm.comment_approved = '0')
303
- AND NOT EXISTS(
304
- SELECT comment_id, meta_key
305
- FROM {$wpdb->commentmeta} as meta
306
- WHERE comm.comment_ID = meta.comment_id AND (meta_key = 'ct_checked' OR meta_key = 'ct_bad')
307
- )
308
- ORDER BY comment_date_gmt
309
- LIMIT 100",
310
- ARRAY_A
311
- );
312
- }else{
313
- $params = array(
314
- 'meta_query' => array(
315
- 'relation' => 'AND',
316
- array(
317
- 'key' => 'ct_checked',
318
- 'compare' => 'NOT EXISTS'
319
- ),
320
- array(
321
- 'key' => 'ct_bad',
322
- 'compare' => 'NOT EXISTS'
323
- )
324
- ),
325
- 'orderby' => 'comment_date_gmt',
326
- 'order' => 'ASC',
327
- 'number' => 100
328
- );
329
- if(isset($from_date, $till_date)){
330
- $params['date_query'] = array(
331
- 'column' => 'comment_date_gmt',
332
- 'after' => $from_date,
333
- 'before' => $till_date,
334
- 'inclusive' => true,
335
- );
336
- }
337
- $c = get_comments( $params );
338
- }
339
-
340
- $check_result = array(
341
- 'end' => 0,
342
- 'checked' => 0,
343
- 'spam' => 0,
344
- 'bad' => 0,
345
- 'error' => 0
346
- );
347
-
348
- if(sizeof($c)>0){
349
-
350
- // Coverting $c to objects
351
- if(is_array($c[0])){
352
- foreach($c as $key => $value){
353
- $c[$key] = (object)$value;
354
- } unset($key, $value);
355
- }
356
-
357
- if(!empty($_POST['accurate_check'])){
358
- // Leaving comments only with first comment's date. Unsetting others.
359
-
360
- foreach($c as $comment_index => $comment){
361
-
362
- if(!isset($curr_date))
363
- $curr_date = (substr($comment->comment_date_gmt, 0, 10) ? substr($comment->comment_date_gmt, 0, 10) : '');
364
-
365
- if(substr($comment->comment_date_gmt, 0, 10) != $curr_date)
366
- unset($c[$comment_index]);
367
-
368
- }
369
- unset($comment_index, $comment);
370
- }
371
-
372
- // Checking comments IP/Email. Gathering $data for check.
373
- $data = Array();
374
- for($i=0;$i<sizeof($c);$i++){
375
-
376
- $curr_ip = $c[$i]->comment_author_IP;
377
- $curr_email = $c[$i]->comment_author_email;
378
-
379
- // Check for identity
380
- $curr_ip = preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $curr_ip) === 1 ? $curr_ip : null;
381
- $curr_email = preg_match('/^\S+@\S+\.\S+$/', $curr_email) === 1 ? $curr_email : null;
382
-
383
- if(empty($curr_ip) && empty($curr_email)){
384
- $check_result['bad']++;
385
- update_comment_meta($c[$i]->comment_ID,'ct_bad','1');
386
- unset($c[$i]);
387
- }else{
388
- if(!empty($curr_ip))
389
- $data[] = $curr_ip;
390
- if(!empty($curr_email))
391
- $data[] = $curr_email;
392
- // Patch for empty IP/Email
393
- $c[$i]->comment_author_IP = empty($curr_ip) ? 'none' : $curr_ip;
394
- $c[$i]->comment_author_email = empty($curr_email) ? 'none' : $curr_email;
395
- }
396
- }
397
-
398
- // Recombining after checking and unsettting
399
- $c = array_values($c);
400
-
401
- // Drop if data empty and there's no comments to check
402
- if(count($data) == 0){
403
- if($_POST['unchecked'] === 0)
404
- $check_result['end'] = 1;
405
- print json_encode($check_result);
406
- die();
407
- }
408
-
409
- $result = CleantalkAPI::method__spam_check_cms($apbct->api_key, $data, !empty($_POST['accurate_check']) ? $curr_date : null);
410
-
411
- if(empty($result['error'])){
412
-
413
- for($i=0;$i<sizeof($c);$i++){
414
-
415
- $mark_spam_ip = false;
416
- $mark_spam_email = false;
417
-
418
- $check_result['checked']++;
419
- update_comment_meta($c[$i]->comment_ID,'ct_checked',date("Y-m-d H:m:s"));
420
- $uip=$c[$i]->comment_author_IP;
421
- $uim=$c[$i]->comment_author_email;
422
-
423
- if(isset($result[$uip]) && $result[$uip]['appears'] == 1)
424
- $mark_spam_ip = true;
425
-
426
- if(isset($result[$uim]) && $result[$uim]['appears'] == 1)
427
- $mark_spam_email = true;
428
-
429
- if ($mark_spam_ip || $mark_spam_email){
430
- $check_result['spam']++;
431
- update_comment_meta($c[$i]->comment_ID,'ct_marked_as_spam','1');
432
- }
433
- }
434
- print json_encode($check_result);
435
-
436
- }else{
437
- $check_result['error'] = 1;
438
- $check_result['error_message'] = $result['error'];
439
- echo json_encode($check_result);
440
- }
441
- }else{
442
- $check_result['end'] = 1;
443
- print json_encode($check_result);
444
- }
445
-
446
- die;
447
- }
448
-
449
- function ct_ajax_info_comments($direct_call = false){
450
-
451
- if (!$direct_call)
452
- check_ajax_referer( 'ct_secret_nonce', 'security' );
453
-
454
- global $wpdb;
455
-
456
- $metas = array('', 'ct_marked_as_spam', 'ct_checked', 'ct_bad');
457
-
458
- $result = array();
459
- foreach($metas as $meta){
460
- if(isset($_COOKIE['ct_comments_safe_check'])){
461
- $res = $wpdb->get_results("
462
- SELECT COUNT(DISTINCT comment_ID) AS cnt
463
- FROM {$wpdb->comments} AS comm
464
- WHERE comm.comment_approved IN ('1','0')".
465
- (!empty($meta)
466
- ? " AND EXISTS (SELECT comment_id, meta_key
467
- FROM {$wpdb->commentmeta} meta
468
- WHERE comm.comment_ID = meta.comment_id AND meta_key = '$meta')"
469
- : ''),
470
- ARRAY_A);
471
- $result[] = $res[0]['cnt'];
472
- }else{
473
- $params = array('fields' => 'ids', 'count' => true);
474
- if(!empty($meta))
475
- $params['meta_key'] = $meta;
476
- $result[] = get_comments( $params );
477
- }
478
- }
479
-
480
- $cnt = $result[0]; // Total comments
481
- $cnt_spam = $result[1]; // Spam comments
482
- $cnt_checked = $result[2]; // Checked comments
483
- $cnt_bad = $result[3]; // Bad comments (without IP and Email)
484
-
485
- $return = array(
486
- 'message' => '',
487
- 'total' => $cnt,
488
- 'spam' => $cnt_spam,
489
- 'checked' => $cnt_checked,
490
- 'bad' => $cnt_bad,
491
- );
492
-
493
- $return['message'] .= sprintf (__("Total comments %s. Checked %s. Last check %s. Found %s spam comments. %s bad comments (without IP or email).", 'cleantalk'), $cnt, $cnt_checked, ct_get_last_comment_check_date(), $cnt_spam, $cnt_bad);
494
-
495
- $backup_notice = '&nbsp;';
496
- if ($cnt_spam > 0){
497
- $backup_notice = __("Please do backup of WordPress database before delete any comments!", 'cleantalk');
498
- }
499
- $return['message'] .= "<p>$backup_notice</p>";
500
-
501
- if($direct_call){
502
- return $return['message'];
503
- }else{
504
- echo json_encode($return);
505
- die();
506
- }
507
-
508
- }
509
-
510
-
511
- function ct_ajax_insert_comments(){
512
-
513
- check_ajax_referer( 'ct_secret_nonce', 'security' );
514
-
515
- //* DELETION
516
- if(!empty($_POST['delete'])){
517
- $comments = get_comments(array('author_email' => 'stop_email@example.com'));
518
- $deleted = 0;
519
- $amount_to_delete = 15;
520
- foreach($comments as $comment){
521
- if($deleted >= $amount_to_delete)
522
- break;
523
- if(wp_delete_comment($comment->comment_ID, true))
524
- $deleted++;
525
- }
526
- print "$deleted";
527
- die();
528
- }
529
-
530
- //* INSERTION
531
- global $wpdb;
532
-
533
- $to_insert = 100;
534
- $time = current_time('timestamp')-(730*86400);
535
-
536
- $result = $wpdb->get_results('SELECT network FROM `'. APBCT_TBL_FIREWALL_DATA .'` LIMIT '. $to_insert .';', ARRAY_A);
537
-
538
- if($result){
539
- $ip = array();
540
- foreach($result as $value){
541
- $ips[] = long2ip($value['network']);
542
- }
543
- unset($value);
544
-
545
- $inserted = 0;
546
- for($i=0, $j=0; $i<$to_insert; $i++, $j++){
547
-
548
- if(!isset($ips[$j]))
549
- $j=0;
550
-
551
- $rnd=mt_rand(1,100);
552
-
553
- $email="stop_email@example.com";
554
-
555
- $data = array(
556
- 'comment_post_ID' => 1,
557
- 'comment_author' => "author_$rnd",
558
- 'comment_author_email' => $email,
559
- 'comment_author_url' => 'http://',
560
- 'comment_content' => "comment content ".mt_rand(1,10000)." ".mt_rand(1,10000)." ".mt_rand(1,10000),
561
- 'comment_type' => '',
562
- 'comment_parent' => 0,
563
- 'user_id' => 1,
564
- 'comment_author_IP' => $ips[$j],
565
- 'comment_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)',
566
- 'comment_date' => date('Y-m-d H:i:s', $time),
567
- 'comment_approved' => 1,
568
- );
569
-
570
- wp_insert_comment($data);
571
- $time = $time + 86400;
572
- $inserted++;
573
- }
574
- }else{
575
- $inserted = '0';
576
- }
577
-
578
- print $inserted;
579
- die();
580
- }
581
-
582
- function ct_ajax_delete_checked(){
583
- check_ajax_referer( 'ct_secret_nonce', 'security' );
584
- foreach($_POST['ids'] as $key=>$value){
585
- wp_delete_comment($value, false);
586
- }
587
- die();
588
- }
589
-
590
- function ct_ajax_delete_all(){
591
- check_ajax_referer( 'ct_secret_nonce', 'security' );
592
- $args_spam = array(
593
- 'number'=>100,
594
- 'meta_query' => array(
595
- Array(
596
- 'key' => 'ct_marked_as_spam',
597
- 'value' => '1',
598
- 'compare' => 'NUMERIC'
599
- )
600
- )
601
- );
602
- $c_spam=get_comments($args_spam);
603
-
604
- $cnt=sizeof($c_spam);
605
-
606
- $args_spam = array(
607
- 'count'=>true,
608
- 'meta_query' => array(
609
- Array(
610
- 'key' => 'ct_marked_as_spam',
611
- 'value' => '1',
612
- 'compare' => 'NUMERIC'
613
- )
614
- )
615
- );
616
- $cnt_all=get_comments($args_spam);
617
-
618
- for($i=0;$i<sizeof($c_spam);$i++){
619
- wp_delete_comment($c_spam[$i]->comment_ID, false);
620
- usleep(10000);
621
- }
622
- print $cnt_all;
623
- die();
624
- }
625
-
626
- function ct_ajax_clear_comments(){
627
-
628
- check_ajax_referer( 'ct_secret_nonce', 'security' );
629
-
630
- if ( isset($_POST['from']) && isset($_POST['till']) ) {
631
- if ( preg_match('/[a-zA-Z]{3}\s{1}\d{1,2}\s{1}\d{4}/', $_POST['from'] ) && preg_match('/[a-zA-Z]{3}\s{1}\d{1,2}\s{1}\d{4}/', $_POST['till'] ) ) {
632
-
633
- $from = date('Y-m-d', intval(strtotime($_POST['from']))) . ' 00:00:00';
634
- $till = date('Y-m-d', intval(strtotime($_POST['till']))) . ' 23:59:59';
635
-
636
- global $wpdb;
637
- $query_result = $wpdb->query("DELETE FROM {$wpdb->commentmeta} WHERE
638
- meta_key IN ('ct_checked', 'ct_marked_as_spam', 'ct_bad')
639
- AND meta_value >= '{$from}'
640
- AND meta_value <= '{$till}';");
641
-
642
- die();
643
-
644
- }
645
- }
646
-
647
- }
648
-
649
- /**
650
- * Admin action 'comment_unapproved_to_approved' - Approve comment, delete from the deleting list
651
- */
652
- function ct_comment_check_approve_comment(){
653
-
654
- check_ajax_referer( 'ct_secret_nonce', 'security' );
655
-
656
- $id=$_POST['id'];
657
- $comment = get_comment($id, 'ARRAY_A');
658
- $comment['comment_content'] = apbct_comment__unmark_red($comment['comment_content']);
659
- $comment['comment_approved'] = 1;
660
- update_comment_meta($id, 'ct_marked_as_spam', 0);
661
- wp_update_comment($comment);
662
-
663
- die();
664
- }
665
-
666
- /**
667
- * Get date last checked comment or date of the first comment
668
- *
669
- * @return string date "M j Y"
670
- */
671
- function ct_last_checked_comment() {
672
-
673
- $params = array(
674
- 'fields' => 'ids',
675
- 'meta_key' => 'ct_checked',
676
- 'orderby' => 'ct_checked',
677
- 'order' => 'ASC'
678
- );
679
- $checked_comments = get_comments( $params );
680
-
681
- if ( ! empty($checked_comments) ) {
682
-
683
- return get_comment_date( "M j Y", end( $checked_comments ) );
684
-
685
- } else {
686
-
687
- $params = array(
688
- 'fields' => 'ids',
689
- 'orderby' => 'comment_date_gmt',
690
- 'order' => 'ASC',
691
- 'number' => 1
692
- );
693
- $first_comment = get_comments( $params );
694
-
695
- return get_comment_date( "M j Y", current( $first_comment ) );
696
-
697
- }
698
-
699
- }
700
-
701
- /**
702
- * Get last comments check date.
703
- *
704
- * @return string|null Date format"M j Y" or datetime format or null
705
- */
706
- function ct_get_last_comment_check_date( $timestamp = false ) {
707
-
708
- $params = array(
709
- 'fields' => 'ids',
710
- 'meta_key' => 'ct_checked',
711
- 'orderby' => 'comment_date_gmt',
712
- 'order' => 'ASC'
713
- );
714
- $checked_comments = get_comments( $params );
715
-
716
- $last_check = null;
717
-
718
- if( ! empty( $checked_comments ) ) {
719
-
720
- $last_check = $timestamp ? get_comment_meta( end( $checked_comments ), 'ct_checked', true ) : date( "M j Y", strtotime( get_comment_meta( end( $checked_comments ), 'ct_checked', true ) ) );
721
-
722
- }
723
-
724
- return $last_check;
725
-
726
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/cleantalk-find-spam.php ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once(CLEANTALK_PLUGIN_DIR . 'inc/find-spam/ClassCleantalkFindSpamPage.php');
4
+ require_once(CLEANTALK_PLUGIN_DIR . 'inc/find-spam/ClassCleantalkFindSpamChecker.php');
5
+ require_once(CLEANTALK_PLUGIN_DIR . 'inc/find-spam/ClassCleantalkFindSpamUsersChecker.php');
6
+ require_once(CLEANTALK_PLUGIN_DIR . 'inc/find-spam/ClassCleantalkFindSpamCommentsChecker.php');
7
+
8
+ // Adding menu items for USERS and COMMENTS spam checking pages
9
+ add_action( 'admin_menu', 'ct_add_find_spam_pages' );
10
+ function ct_add_find_spam_pages(){
11
+
12
+ // Check users pages
13
+ $ct_check_users = add_users_page( __( "Check for spam", 'cleantalk' ), __( "Find spam users", 'cleantalk' ), 'activate_plugins', 'ct_check_users', array( 'ClassCleantalkFindSpamPage', 'showFindSpamPage' ) );
14
+ $ct_check_users_total = add_users_page( __( "Total spam found", 'cleantalk' ), '', 'activate_plugins', 'ct_check_users_total', array( 'ClassCleantalkFindSpamPage', 'showFindSpamPage' ) );
15
+ $ct_check_users_logs = add_users_page( __( "Scan logs", 'cleantalk' ), '', 'activate_plugins', 'ct_check_users_logs', array( 'ClassCleantalkFindSpamPage', 'showFindSpamPage' ) );
16
+
17
+ // Cheack comments pages
18
+ $ct_check_spam = add_comments_page( __( "Check for spam", 'cleantalk' ), __( "Find spam comments", 'cleantalk' ), 'activate_plugins', 'ct_check_spam', array( 'ClassCleantalkFindSpamPage', 'showFindSpamPage' ) );
19
+ $ct_check_spam_total = add_comments_page( __( "Total spam found", 'cleantalk' ), '', 'activate_plugins', 'ct_check_spam_total', array( 'ClassCleantalkFindSpamPage', 'showFindSpamPage' ) );
20
+ $ct_check_spam_logs = add_comments_page( __( "Scan logs", 'cleantalk' ), '', 'activate_plugins', 'ct_check_spam_logs', array( 'ClassCleantalkFindSpamPage', 'showFindSpamPage' ) );
21
+
22
+ // Remove some pages from main menu
23
+ remove_submenu_page( 'users.php', 'ct_check_users_total' );
24
+ remove_submenu_page( 'users.php', 'ct_check_users_logs' );
25
+ remove_submenu_page( 'edit-comments.php', 'ct_check_spam_total' );
26
+ remove_submenu_page( 'edit-comments.php', 'ct_check_spam_logs' );
27
+
28
+ // Set screen option for every pages
29
+ add_action( "load-$ct_check_users", array( 'ClassCleantalkFindSpamPage', 'setScreenOption' ) );
30
+ add_action( "load-$ct_check_users_total", array( 'ClassCleantalkFindSpamPage', 'setScreenOption' ) );
31
+ add_action( "load-$ct_check_users_logs", array( 'ClassCleantalkFindSpamPage', 'setScreenOption' ) );
32
+ add_action( "load-$ct_check_spam", array( 'ClassCleantalkFindSpamPage', 'setScreenOption' ) );
33
+ add_action( "load-$ct_check_spam_total", array( 'ClassCleantalkFindSpamPage', 'setScreenOption' ) );
34
+ add_action( "load-$ct_check_spam_logs", array( 'ClassCleantalkFindSpamPage', 'setScreenOption' ) );
35
+
36
+ }
37
+
38
+ // Set AJAX actions
39
+ add_action( 'wp_ajax_ajax_clear_users', array( 'ClassCleantalkFindSpamUsersChecker', 'ct_ajax_clear_users' ) );
40
+ add_action( 'wp_ajax_ajax_check_users', array( 'ClassCleantalkFindSpamUsersChecker', 'ct_ajax_check_users' ) );
41
+ add_action( 'wp_ajax_ajax_info_users', array( 'ClassCleantalkFindSpamUsersChecker', 'ct_ajax_info' ) );
42
+ add_action( 'wp_ajax_ajax_ct_get_csv_file', array( 'ClassCleantalkFindSpamUsersChecker', 'ct_get_csv_file' ) );
43
+
44
+ add_action( 'wp_ajax_ajax_clear_comments', array( 'ClassCleantalkFindSpamCommentsChecker', 'ct_ajax_clear_comments' ) );
45
+ add_action( 'wp_ajax_ajax_check_comments', array( 'ClassCleantalkFindSpamCommentsChecker', 'ct_ajax_check_comments' ) );
46
+ add_action( 'wp_ajax_ajax_info_comments', array( 'ClassCleantalkFindSpamCommentsChecker', 'ct_ajax_info' ) );
47
+
48
+ // Hook for saving "per_page" option
49
+ add_action( 'wp_loaded', 'ct_save_screen_option' );
50
+ function ct_save_screen_option() {
51
+
52
+ // Saving screen option for the pagination (per page option)
53
+ add_filter( 'set-screen-option', function( $status, $option, $value ){
54
+ return ( $option == 'spam_per_page' ) ? (int) $value : $status;
55
+ }, 10, 3 );
56
+
57
+ }
inc/cleantalk-public.php CHANGED
@@ -1475,7 +1475,7 @@ function apbct_js_test($field_name = 'ct_checkjs', $data = null) {
1475
  $apbct->settings['use_static_js_key'] == 1 ||
1476
  ( $apbct->settings['use_static_js_key'] == - 1 &&
1477
  ( apbct_is_cache_plugins_exists() ||
1478
- ( apbct_is_post() && $apbct->data['cache_detected'] == 1 )
1479
  )
1480
  )
1481
  ){
@@ -1950,6 +1950,11 @@ function apbct_registration__Wordpress__changeMailNotification($wp_new_user_noti
1950
  */
1951
  function apbct_registration__UltimateMembers__check( $args ){
1952
 
 
 
 
 
 
1953
  global $apbct, $cleantalk_executed;
1954
 
1955
  if ($apbct->settings['registrations_test'] == 0)
@@ -3294,7 +3299,8 @@ function ct_contact_form_validate_postdata() {
3294
  (isset($_GET['wc-ajax']) && $_GET['wc-ajax'] == 'sa_wc_buy_now_get_ajax_buy_now_button') || //BuyNow add to cart
3295
  apbct_is_in_uri('/wp-json/wpstatistics/v1/hit') || //WPStatistics
3296
  (isset($_POST['ihcaction']) && $_POST['ihcaction'] == 'login') || //Skip login form
3297
- (isset($_POST['action']) && $_POST['action'] == 'infinite_scroll') //Scroll
 
3298
  ) {
3299
  return null;
3300
  }
@@ -3413,6 +3419,9 @@ function ct_enqueue_scripts_public($hook){
3413
 
3414
  global $current_user, $apbct;
3415
 
 
 
 
3416
  if($apbct->settings['registrations_test'] || $apbct->settings['comments_test'] || $apbct->settings['contact_forms_test'] || $apbct->settings['general_contact_forms_test'] || $apbct->settings['wc_checkout_test'] || $apbct->settings['check_external'] || $apbct->settings['check_internal'] || $apbct->settings['bp_private_messages'] || $apbct->settings['general_postdata_test']){
3417
 
3418
  // Differnt JS params
1475
  $apbct->settings['use_static_js_key'] == 1 ||
1476
  ( $apbct->settings['use_static_js_key'] == - 1 &&
1477
  ( apbct_is_cache_plugins_exists() ||
1478
+ ( apbct_is_post() && isset($apbct->data['cache_detected']) && $apbct->data['cache_detected'] == 1 )
1479
  )
1480
  )
1481
  ){
1950
  */
1951
  function apbct_registration__UltimateMembers__check( $args ){
1952
 
1953
+ if ( isset( UM()->form()->errors ) ) {
1954
+ $sender_info['previous_form_validation'] = true;
1955
+ $sender_info['validation_notice'] = json_encode( UM()->form()->errors );
1956
+ }
1957
+
1958
  global $apbct, $cleantalk_executed;
1959
 
1960
  if ($apbct->settings['registrations_test'] == 0)
3299
  (isset($_GET['wc-ajax']) && $_GET['wc-ajax'] == 'sa_wc_buy_now_get_ajax_buy_now_button') || //BuyNow add to cart
3300
  apbct_is_in_uri('/wp-json/wpstatistics/v1/hit') || //WPStatistics
3301
  (isset($_POST['ihcaction']) && $_POST['ihcaction'] == 'login') || //Skip login form
3302
+ (isset($_POST['action']) && $_POST['action'] == 'infinite_scroll') || //Scroll
3303
+ isset($_POST['gform_submit']) //Skip gravity checking because of direct integration
3304
  ) {
3305
  return null;
3306
  }
3419
 
3420
  global $current_user, $apbct;
3421
 
3422
+ if (apbct_exclusions_check__url()) {
3423
+ return;
3424
+ }
3425
  if($apbct->settings['registrations_test'] || $apbct->settings['comments_test'] || $apbct->settings['contact_forms_test'] || $apbct->settings['general_contact_forms_test'] || $apbct->settings['wc_checkout_test'] || $apbct->settings['check_external'] || $apbct->settings['check_internal'] || $apbct->settings['bp_private_messages'] || $apbct->settings['general_postdata_test']){
3426
 
3427
  // Differnt JS params
inc/cleantalk-updater.php CHANGED
@@ -392,3 +392,22 @@ function apbct_update_to_5_128_0(){
392
  $apbct->remote_calls = array();
393
  $apbct->save('remote_calls');
394
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
392
  $apbct->remote_calls = array();
393
  $apbct->save('remote_calls');
394
  }
395
+
396
+ function apbct_update_to_5_133_0() {
397
+
398
+ global $wpdb;
399
+
400
+ // Scan comment/user log
401
+ $sqls[] = 'CREATE TABLE IF NOT EXISTS `%scleantalk_spamscan_logs` (
402
+ `id` int(11) NOT NULL AUTO_INCREMENT,
403
+ `scan_type` varchar(11) NOT NULL,
404
+ `start_time` datetime NOT NULL,
405
+ `finish_time` datetime NOT NULL,
406
+ `count_to_scan` int(11) DEFAULT NULL,
407
+ `found_spam` int(11) DEFAULT NULL,
408
+ `found_bad` int(11) DEFAULT NULL,
409
+ PRIMARY KEY (`id`));';
410
+
411
+ apbct_activation__create_tables($sqls);
412
+
413
+ }
inc/cleantalk-users.php DELETED
@@ -1,802 +0,0 @@
1
- <?php
2
-
3
- add_action('admin_menu', 'ct_add_users_menu');
4
- add_action( 'wp_ajax_ajax_check_users', 'ct_ajax_check_users' );
5
- add_action( 'wp_ajax_ajax_info_users', 'ct_ajax_info_users' );
6
- add_action( 'wp_ajax_ajax_insert_users', 'ct_ajax_insert_users' );
7
- add_action( 'wp_ajax_ajax_delete_checked_users', 'ct_ajax_delete_checked_users' );
8
- add_action( 'wp_ajax_ajax_delete_all_users', 'ct_ajax_delete_all_users' );
9
- add_action( 'wp_ajax_ajax_clear_users', 'ct_ajax_clear_users' );
10
- add_action( 'wp_ajax_ajax_ct_approve_user', 'ct_usercheck_approve_user' );
11
- add_action( 'wp_ajax_ajax_ct_get_csv_file', 'ct_usercheck_get_csv_file' );
12
-
13
- function ct_add_users_menu(){
14
- if(current_user_can('activate_plugins'))
15
- add_users_page( __("Check for spam", 'cleantalk'), __("Find spam users", 'cleantalk'), 'read', 'ct_check_users', 'ct_show_users_page');
16
- }
17
-
18
- function ct_show_users_page(){
19
-
20
- global $wpdb, $apbct;
21
-
22
- ?>
23
- <div class="wrap">
24
- <h2><img src="<?php echo $apbct->logo__small__colored; ?>" /> <?php echo $apbct->plugin_name; ?></h2>
25
- <a style="color: gray; margin-left: 23px;" href="<?php echo $apbct->settings_link; ?>"><?php _e('Plugin Settings', 'cleantalk'); ?></a>
26
- <br />
27
- <?php
28
-
29
- // If access key is unset in
30
- if(!apbct_api_key__is_correct()){
31
- if($apbct->moderate_ip == 1){
32
- echo '<h3>'
33
- .sprintf(
34
- __('Antispam hosting tariff does not allow you to use this feature. To do so, you need to enter an Access Key in the %splugin settings%s.', 'cleantalk'),
35
- '<a href="' . (is_network_admin() ? 'settings.php?page=cleantalk' : 'options-general.php?page=cleantalk').'">',
36
- '</a>'
37
- )
38
- .'</h3>';
39
- return;
40
- }
41
- }
42
-
43
-
44
- // Getting total spam users
45
- $r = $wpdb->get_results("
46
- SELECT
47
- DISTINCT COUNT($wpdb->users.ID) AS cnt
48
- FROM $wpdb->users
49
- INNER JOIN $wpdb->usermeta
50
- ON $wpdb->users.ID = $wpdb->usermeta.user_id
51
- WHERE $wpdb->usermeta.meta_key='ct_marked_as_spam';"
52
- , ARRAY_A);
53
- $cnt_spam1=$r[0]['cnt'];
54
-
55
- ?>
56
-
57
- <!-- AJAX error message -->
58
- <div id="ct_error_message" style="display:none">
59
- <h3>
60
- <?php _e("Ajax error. Process will be automatically restarted in 3 seconds. Status: ", 'cleantalk'); ?><span id="cleantalk_ajax_error"></span> (<span id="cleantalk_js_func"></span>)
61
- </h3>
62
- <h4>Please, check for JavaScript errors in your dashboard and and repair it.</h4>
63
- </div>
64
-
65
- <!-- Deleting message -->
66
- <div id="ct_deleting_message" style="display:none">
67
- <?php _e("Please wait for a while. CleanTalk is deleting spam users. Users left: ", 'cleantalk'); ?> <span id="cleantalk_users_left">
68
- <?php echo $cnt_spam1;?>
69
- </span>
70
- </div>
71
-
72
- <!-- Main info -->
73
- <h3 id="ct_checking_status"><?php echo ct_ajax_info_users(true); ?></h3>
74
-
75
- <!-- Check options -->
76
- <div class="ct_to_hide" id="ct_check_params_wrapper">
77
- <button class="button ct_check_params_elem" id="ct_check_spam_button" <?php echo !$apbct->data['moderate'] ? 'disabled="disabled"' : ''; ?>><?php _e("Start check", 'cleantalk'); ?></button>
78
- <?php if(!empty($_COOKIE['ct_paused_users_check'])) { ?><button class="button ct_check_params_elem" id="ct_proceed_check_button"><?php _e("Continue check", 'cleantalk'); ?></button><?php } ?>
79
- <p class="ct_check_params_desc"><?php _e("The plugin will check all users against blacklists database and show you senders that have spam activity on other websites.", 'cleantalk'); ?></p>
80
- <br />
81
- <div class="ct_check_params_elem ct_check_params_elem_sub">
82
- <input id="ct_accurate_check" type="checkbox" value="1" /><b><label for="ct_accurate_check"><?php _e("Accurate check", 'cleantalk'); ?></b></label>
83
- </div>
84
- <p class="ct_check_params_desc"><?php _e("Allows to use user's dates to perform more accurate check. Could seriously slow down the check.", 'cleantalk'); ?></p>
85
- <br />
86
- <div class="ct_check_params_elem ct_check_params_elem_sub">
87
- <input id="ct_allow_date_range" type="checkbox" value="1" /><label for="ct_allow_date_range"><b><?php _e("Specify date range", 'cleantalk'); ?></b></label>
88
- </div>
89
- <div class="ct_check_params_desc">
90
- <input class="ct_date" type="text" id="ct_date_range_from" value="<?php echo ct_last_checked_user_register(); ?>" disabled readonly />
91
- <input class="ct_date" type="text" id="ct_date_range_till" value="<?php echo date( "M j Y"); ?>" disabled readonly />
92
- </div>
93
- <div class="ct_check_params_desc">
94
- <p>Begin/end dates of creation user to check. If no date is specified, the plugin uses the last users check date.</p>
95
- </div>
96
- <br>
97
- <?php apbct_admin__badge__get_premium(); ?>
98
- </div>
99
-
100
- <!-- Cooling notice -->
101
- <h3 id="ct_cooling_notice"></h3>
102
-
103
- <!-- Preloader and working message -->
104
- <div id="ct_preloader">
105
- <img border=0 src="<?php print plugin_dir_url(__FILE__); ?>images/preloader.gif" />
106
- </div>
107
- <div id="ct_working_message">
108
- <?php _e("Please wait for a while. CleanTalk is checking all users via blacklist database at cleantalk.org. You will have option to delete found spam users after plugin finish.", 'cleantalk'); ?>
109
- </div>
110
-
111
- <!-- Pause button -->
112
- <button class="button" id="ct_pause">Pause check</button>
113
-
114
- <?php
115
-
116
- // Pagination
117
- $page = !empty($_GET['spam_page']) ? intval($_GET['spam_page']) : 1;
118
- $on_page = 20;
119
-
120
- $args_spam = array(
121
- 'meta_query' => array(
122
- Array(
123
- 'key' => 'ct_marked_as_spam',
124
- 'value' => '1',
125
- 'compare' => 'NUMERIC'
126
- )
127
- ),
128
- 'number'=>$on_page,
129
- 'offset'=>($page-1)*$on_page
130
- );
131
-
132
- $c_spam=get_users($args_spam);
133
- if($cnt_spam1 > 0){
134
-
135
- $pages = ceil(intval($cnt_spam1)/$on_page);
136
- if($pages && $pages != 1){
137
- echo "<div class='ct_to_hide pagination'>"
138
- ."<b>Pages:</b>"
139
- ."<ul class='pagination'>";
140
- for($i = 1; $i <= $pages; $i++){
141
- echo "<li class='pagination'>"
142
- ."<a href='users.php?page=ct_check_users&spam_page=$i&ct_worked=1'>"
143
- .($i == $page ? "<span class='current_page'>$i</span>" : $i)
144
- ."</a>"
145
- ."</li>";
146
- }
147
- echo "</ul>";
148
- echo "</div>";
149
- }
150
- ?>
151
- <table class="ct_to_hide widefat fixed comments" id="ct_check_users_table">
152
- <thead>
153
- <th scope="col" id="cb" class="manage-column column-cb check-column">
154
- <label class="screen-reader-text" for="cb-select-all-1">Select All</label>
155
- <input id="cb-select-all-1" type="checkbox"/>
156
- </th>
157
- <th scope="col" id="author" class="manage-column column-slug"><?php _e('Username');?></th>
158
- <th scope="col" id="comment" class="manage-column column-comment"><?php _e('Name');?></th>
159
- <th scope="col" id="response" class="manage-column column-comment"><?php _e('E-mail');?></th>
160
- <th scope="col" id="signed_up" class="manage-column column-comment"><?php _e('Signed up');?></th>
161
- <th scope="col" id="role" class="manage-column column-response sortable desc"><?php _e('Role');?></th>
162
- <th scope="col" id="posts" class="manage-column column-response sortable desc"><?php _e('Posts');?></th>
163
- </thead>
164
- <tbody id="the-comment-list" data-wp-lists="list:comment">
165
- <?php
166
- for($i=0;$i<sizeof($c_spam);$i++){
167
- $id = $c_spam[$i]->ID;
168
- $login = $c_spam[$i]->data->user_login;
169
- $email = $c_spam[$i]->data->user_email;
170
- $signed = substr($c_spam[$i]->data->user_registered, 0, -3);
171
-
172
- echo "<tr id='comment-$id' class='comment even thread-even depth-1 approved cleantalk_user' data-id='$id'>"
173
- ."<th scope='row' class='check-column'>"
174
- ."<label class='screen-reader-text' for='cb-select-$id'>Select user</label>"
175
- ."<input id='cb-select-$id' type='checkbox' name='del_comments[]' />"
176
- ."</th>"
177
- ."<td class='author column-author' nowrap>"
178
- ."<strong>"
179
- .get_avatar( $c_spam[$i]->data->ID , 32)
180
- .$login
181
- ."</strong>"
182
- ."<br/>"
183
- ."<br/>";
184
-
185
- // Outputs email if exists
186
- if(!empty($email)){
187
- echo "<a href='mailto:$email'>$email</a>"
188
- .(!$apbct->white_label
189
- ? "<a href='https://cleantalk.org/blacklists/$email' target='_blank'>"
190
- ."&nbsp;<img src='".plugin_dir_url(__FILE__)."images/new_window.gif' border='0' style='float:none' />"
191
- ."</a>"
192
- : '');
193
- }else{
194
- echo "No email";
195
- }
196
- echo "<br/>";
197
-
198
- // Outputs IP if exists
199
- $user_meta = get_user_meta($id, 'session_tokens', true);
200
- if(!empty($user_meta) && is_array($user_meta)){
201
- $user_meta=array_values($user_meta);
202
- if(!empty($user_meta[0]['ip'])){
203
- $ip = $user_meta[0]['ip'];
204
- echo "<a href='user-edit.php?user_id=$id'>$ip</a>"
205
- .(!$apbct->white_label
206
- ?"<a href='https://cleantalk.org/blacklists/$ip ' target='_blank'>"
207
- ."&nbsp;<img src='".plugin_dir_url(__FILE__)."images/new_window.gif' border='0' style='float:none' />"
208
- ."</a>"
209
- : '');
210
- }else
211
- echo "No IP adress";
212
- }else
213
- echo "No IP adress";
214
- echo "</td>";
215
- ?>
216
- <td class="comment column-comment">
217
- <div class="submitted-on">
218
- <?php print $c_spam[$i]->data->display_name; ?>
219
- <div style="height:16px; display: none;" id="cleantalk_button_set_<?php print $id; ?>">
220
- <a href="#" class="cleantalk_delete_from_list_button" data-id="<?php print $id; ?>" style="color:#0a0;" onclick="return false;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';"><?php _e("Approve", "cleantalk"); ?></a>
221
- &nbsp;|&nbsp;
222
- <a href="#" class="cleantalk_delete_user_button" id="cleantalk_delete_user_<?php print $id; ?>" data-id="<?php print $id; ?>" style="color:#a00;display:none;" onclick="return false;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';"><?php _e("Delete", "cleantalk"); ?></a>
223
- </div>
224
- </div>
225
- </td>
226
- <td class="comment column-comment">
227
- <?php print $email; ?>
228
- </td>
229
- <td class="comment column-comment">
230
- <?php print $signed; ?>
231
- </td>
232
- <td class="comment column-comment">
233
- <?php
234
- $info=get_userdata( $id );
235
- print implode(', ', $info->roles);
236
- ?>
237
- </td>
238
- <td class="comment column-comment">
239
- <?php
240
- print count_user_posts($id);
241
- ?>
242
- </td>
243
- </tr>
244
- <?php
245
- }
246
- ?>
247
- </tbody>
248
- </table>
249
- <?php
250
- // Pagination
251
- if($pages && $pages != 1){
252
- echo "<div class='ct_to_hide pagination'>"
253
- ."<b>Pages:</b>"
254
- ."<ul class='pagination'>";
255
- for($i = 1; $i <= $pages; $i++){
256
- echo "<li class='pagination'>"
257
- ."<a href='users.php?page=ct_check_users&spam_page=$i&ct_worked=1'>"
258
- .($i == $page ? "<span class='current_page'>$i</span>" : $i)
259
- ."</a>"
260
- ."</li>";
261
- }
262
- echo "</ul>";
263
- echo "</div>";
264
- }
265
- ?>
266
- <div class="ct_to_hide" id="ct_tools_buttons" style="margin-top: 10px;">
267
- <button class="button" id="ct_delete_all_users"><?php _e('Delete all users from list', 'cleantalk'); ?></button>
268
- <button class="button" id="ct_delete_checked_users"><?php _e('Delete selected', 'cleantalk'); ?></button>
269
- <button class="button" id="ct_get_csv_file"><?php _e('Download results in CSV', 'cleantalk'); ?></button>
270
- </div>
271
- <?php
272
- }
273
- echo apbct_get_server_variable( 'REMOTE_ADDR' )=='127.0.0.1' ? '<br /><button class=" ct_to_hide button" id="ct_insert_users">'. __('Insert accounts', 'cleantalk'). ' (100)</button> ' : '';
274
- echo apbct_get_server_variable( 'REMOTE_ADDR' )=='127.0.0.1' ? '<button class="ct_to_hide button" id="ct_delete_users">'. __('Delete accounts', 'cleantalk'). ' (110)</button><br />' : '';
275
-
276
- if($cnt_spam1 > 0){
277
- echo "<div id='ct_search_info'>"
278
- ."<br />"
279
- .__("There is some differencies between blacklists database and our API mechanisms. Blacklists shows all history of spam activity, but our API (that used in spam checking) used another parameters, too: last day of activity, number of spam attacks during last days etc. This mechanisms help us to reduce number of false positivitie. So, there is nothing strange, if some emails/IPs will be not found by this checking.", 'cleantalk')
280
- ."</div>";
281
- }
282
- ?>
283
- <div>
284
- <button class="button" id="ct_stop_deletion" style="display:none;"><?php _e("Stop deletion", 'cleantalk'); ?></button>
285
- </div>
286
- <div id='ct_csv_wrapper' style="display: none;"></div>
287
- </div>
288
- <?php
289
- }
290
-
291
- function ct_ajax_check_users(){
292
-
293
- check_ajax_referer('ct_secret_nonce', 'security');
294
-
295
- $amount = !empty($_POST['amount']) && intval($_POST['amount'])
296
- ? intval($_POST['amount'])
297
- : 100;
298
-
299
- global $apbct;
300
-
301
- $skip_roles = array(
302
- 'administrator'
303
- );
304
-
305
- $params = array(
306
- // 'fields' => array(
307
- // 'ID',
308
- // 'user_login',
309
- // 'user_email',
310
- // 'user_registered',
311
- // ),
312
- 'meta_query' => array(
313
- 'relation' => 'AND',
314
- array(
315
- 'key' => 'ct_checked',
316
- 'compare' => 'NOT EXISTS'
317
- ),
318
- array(
319
- 'key' => 'ct_bad',
320
- 'compare' => 'NOT EXISTS'
321
- ),
322
- ),
323
- 'orderby' => 'registered',
324
- 'order' => 'ASC',
325
- 'number' => $amount,
326
- );
327
-
328
- if(isset($_POST['from'], $_POST['till'])){
329
-
330
- $from_date = date('Y-m-d', intval(strtotime($_POST['from'])));
331
- $till_date = date('Y-m-d', intval(strtotime($_POST['till'])));
332
-
333
- $params['date_query'] = array(
334
- 'column' => 'user_registered',
335
- 'after' => $from_date,
336
- 'before' => $till_date,
337
- 'inclusive' => true,
338
- );
339
- }
340
-
341
- $u = get_users( $params );
342
-
343
- $check_result = array(
344
- 'end' => 0,
345
- 'checked' => 0,
346
- 'spam' => 0,
347
- 'bad' => 0,
348
- 'error' => 0
349
- );
350
-
351
- if(count($u) > 0){
352
-
353
- if(!empty($_POST['accurate_check'])){
354
- // Leaving users only with first comment's date. Unsetting others.
355
- foreach($u as $user_index => $user){
356
-
357
- if(!isset($curr_date))
358
- $curr_date = (substr($user->data->user_registered, 0, 10) ? substr($user->data->user_registered, 0, 10) : '');
359
-
360
- if(substr($user->data->user_registered, 0, 10) != $curr_date)
361
- unset($u[$user_index]);
362
-
363
- }
364
- unset($user_index, $user);
365
- }
366
-
367
- // Checking comments IP/Email. Gathering $data for check.
368
- $data=Array();
369
- for($i=0; $i < count($u); $i++){
370
-
371
- $user_meta = get_user_meta($u[$i]->ID, 'session_tokens', true);
372
- if(is_array($user_meta))
373
- $user_meta = array_values($user_meta);
374
-
375
- $curr_ip = !empty($user_meta[0]['ip']) ? trim($user_meta[0]['ip']) : '';
376
- $curr_email = !empty($u[$i]->data->user_email) ? trim($u[$i]->data->user_email) : '';
377
-
378
- // Check for identity
379
- $curr_ip = preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $curr_ip) === 1 ? $curr_ip : null;
380
- $curr_email = preg_match('/^\S+@\S+\.\S+$/', $curr_email) === 1 ? $curr_email : null;
381
-
382
- if(empty($curr_ip) && empty($curr_email)){
383
- $check_result['bad']++;
384
- update_user_meta($u[$i]->ID,'ct_bad','1',true);
385
- unset($u[$i]);
386
- }else{
387
- if(!empty($curr_ip))
388
- $data[] = $curr_ip;
389
- if(!empty($curr_email))
390
- $data[] = $curr_email;
391
- // Patch for empty IP/Email
392
- $u[$i]->data->user_ip = empty($curr_ip) ? 'none' : $curr_ip;
393
- $u[$i]->data->user_email = empty($curr_email) ? 'none' : $curr_email;
394
- }
395
- }
396
-
397
- // Recombining after checking and unsettting
398
- $u = array_values($u);
399
-
400
- // Drop if data empty and there's no users to check
401
- if(count($data) == 0){
402
- if($_POST['unchecked'] === 0)
403
- $check_result['end'] = 1;
404
- print json_encode($check_result);
405
- die();
406
- }
407
-
408
- $result = CleantalkAPI::method__spam_check_cms($apbct->api_key, $data, !empty($_POST['accurate_check']) ? $curr_date : null);
409
-
410
- if(empty($result['error'])){
411
-
412
- for($i=0;$i<sizeof($u);$i++){
413
-
414
- $check_result['checked']++;
415
- update_user_meta($u[$i]->ID,'ct_checked',date("Y-m-d H:m:s"),true);
416
-
417
- // Do not display forbidden roles.
418
- foreach ($skip_roles as $role) {
419
- if (in_array($role, $u[$i]->roles)){
420
- delete_user_meta($u[$i]->ID, 'ct_marked_as_spam');
421
- continue 2;
422
- }
423
- }
424
-
425
- $mark_spam_ip = false;
426
- $mark_spam_email = false;
427
-
428
- $uip = $u[$i]->data->user_ip;
429
- $uim = $u[$i]->data->user_email;
430
-
431
- if(isset($result[$uip]) && $result[$uip]['appears'] == 1)
432
- $mark_spam_ip = true;
433
-
434
- if(isset($result[$uim]) && $result[$uim]['appears'] == 1)
435
- $mark_spam_email = true;
436
-
437
- if ($mark_spam_ip || $mark_spam_email){
438
- $check_result['spam']++;
439
- update_user_meta($u[$i]->ID,'ct_marked_as_spam','1',true);
440
- }
441
-
442
- }
443
- print json_encode($check_result);
444
- }else{
445
- $check_result['error'] = 1;
446
- $check_result['error_message'] = $result['error'];
447
- echo json_encode($check_result);
448
- }
449
- }else{
450
- $check_result['end'] = 1;
451
- print json_encode($check_result);
452
- }
453
- die;
454
- }
455
-
456
- function ct_ajax_info_users($direct_call = false)
457
- {
458
- if (!$direct_call)
459
- check_ajax_referer( 'ct_secret_nonce', 'security' );
460
-
461
- // Total users
462
- $params_total = array(
463
- 'fields' => 'ID',
464
- 'count'=>true,
465
- 'orderby' => 'user_registered'
466
- );
467
- $total_users = new WP_User_Query($params_total);
468
- $cnt = $total_users->get_total();
469
-
470
- // Checked users
471
- $params_checked = array(
472
- 'fields' => 'ID',
473
- 'meta_key' => 'ct_checked',
474
- 'count_total' => true,
475
- 'orderby' => 'ct_checked'
476
- );
477
- $checked_users = new WP_User_Query($params_checked);
478
- $cnt_checked = $checked_users->get_total();
479
-
480
- // Spam users
481
- $params_spam = array(
482
- 'fields' => 'ID',
483
- 'meta_key' => 'ct_marked_as_spam',
484
- 'count_total' => true,
485
- );
486
- $spam_users = new WP_User_Query($params_spam);
487
- $cnt_spam = $spam_users->get_total();
488
-
489
- // Bad users (without IP and Email)
490
- $params_bad = array(
491
- 'fields' => 'ID',
492
- 'meta_key' => 'ct_bad',
493
- 'count_total' => true,
494
- );
495
- $bad_users = new WP_User_Query($params_bad);
496
- $cnt_bad = $bad_users->get_total();
497
-
498
- $return = array(
499
- 'message' => '',
500
- 'total' => $cnt,
501
- 'spam' => $cnt_spam,
502
- 'checked' => $cnt_checked,
503
- 'bad' => $cnt_bad,
504
- );
505
-
506
- $return['message'] .= sprintf (__("Total users %s, checked %s, last check %s, found %s spam users and %s bad users (without IP or email)", 'cleantalk'), $cnt, $cnt_checked, ct_get_last_check_date(), $cnt_spam, $cnt_bad);
507
-
508
- $backup_notice = '&nbsp;';
509
- if ($cnt_spam > 0) {
510
- $backup_notice = __("Please do backup of WordPress database before delete any accounts!", 'cleantalk');
511
- }
512
- $return['message'] .= "<p>$backup_notice</p>";
513
-
514
- if($direct_call){
515
- return $return['message'];
516
- }else{
517
- echo json_encode($return);
518
- die();
519
- }
520
-
521
- return null;
522
- }
523
-
524
- function ct_ajax_insert_users()
525
- {
526
- check_ajax_referer( 'ct_secret_nonce', 'security' );
527
-
528
- //* DELETION
529
- if(!empty($_POST['delete'])){
530
- $users = get_users(array('search' => '*user_*', 'search_columns' => array('login', 'nicename')));
531
- $deleted = 0;
532
- $amount_to_delete = 15;
533
- foreach($users as $user){
534
- if($deleted >= $amount_to_delete)
535
- break;
536
- if(wp_delete_user($user->ID))
537
- $deleted++;
538
- }
539
- print "$deleted";
540
- die();
541
- }
542
- //*/
543
-
544
- //* INSERTION
545
- global $wpdb;
546
- $to_insert = 100;
547
- $result = $wpdb->get_results('SELECT network FROM `'. APBCT_TBL_FIREWALL_DATA .'` LIMIT '. $to_insert .';', ARRAY_A);
548
-
549
- if($result){
550
- $ip = array();
551
- foreach($result as $value){
552
- $ips[] = long2ip($value['network']);
553
- }
554
- unset($value);
555
-
556
- $inserted = 0;
557
- for($i=0; $i<$to_insert; $i++){
558
- $rnd=mt_rand(1,10000000);
559
-
560
- $user_name = "user_$rnd";
561
- $email="stop_email_$rnd@example.com";
562
-
563
- $user_id = wp_create_user(
564
- $user_name,
565
- rand(),
566
- $email
567
- );
568
-
569
- $curr_user = get_user_by('email', $email);
570
-
571
- update_user_meta($curr_user->ID, 'session_tokens', array($rnd => array('ip' => $ips[$i])));
572
-
573
- if (is_int($user_id))
574
- $inserted++;
575
-
576
- }
577
- }else{
578
- $inserted = '0';
579
- }
580
- //*/
581
-
582
- print "$inserted";
583
- die();
584
- }
585
-
586
- function ct_ajax_delete_checked_users()
587
- {
588
- check_ajax_referer( 'ct_secret_nonce', 'security' );
589
- foreach($_POST['ids'] as $key=>$value)
590
- {
591
- wp_delete_user($value);
592
- }
593
- die();
594
- }
595
-
596
- function ct_ajax_delete_all_users($count_all = 0)
597
- {
598
- check_ajax_referer( 'ct_secret_nonce', 'security' );
599
-
600
- global $wpdb;
601
-
602
- $r = $wpdb->get_results("select count(*) as cnt from $wpdb->usermeta where meta_key='ct_marked_as_spam';", OBJECT );
603
-
604
- if(!empty($r)){
605
-
606
- $count_all = $r ? $r[0]->cnt : 0;
607
-
608
- $args = array(
609
- 'meta_key' => 'ct_marked_as_spam',
610
- 'meta_value' => '1',
611
- 'fields' => array('ID'),
612
- 'number' => 50
613
- );
614
- $users = get_users($args);
615
-
616
- if ($users){
617
- foreach($users as $user){
618
- wp_delete_user($user->ID);
619
- usleep(5000);
620
- }
621
- }
622
- }
623
-
624
- die($count_all);
625
- }
626
-
627
- function ct_ajax_clear_users()
628
- {
629
- check_ajax_referer( 'ct_secret_nonce', 'security' );
630
-
631
- if ( isset($_POST['from']) && isset($_POST['till']) ) {
632
- if ( preg_match('/[a-zA-Z]{3}\s{1}\d{1,2}\s{1}\d{4}/', $_POST['from'] ) && preg_match('/[a-zA-Z]{3}\s{1}\d{1,2}\s{1}\d{4}/', $_POST['till'] ) ) {
633
-
634
- $from = date('Y-m-d', intval(strtotime($_POST['from']))) . ' 00:00:00';
635
- $till = date('Y-m-d', intval(strtotime($_POST['till']))) . ' 23:59:59';
636
-
637
- global $wpdb;
638
- $query_result = $wpdb->query("DELETE FROM {$wpdb->usermeta} WHERE
639
- meta_key IN ('ct_checked', 'ct_marked_as_spam', 'ct_bad')
640
- AND meta_value >= '{$from}'
641
- AND meta_value <= '{$till}';");
642
-
643
- die();
644
-
645
- }
646
- }
647
- }
648
-
649
- /**
650
- * Admin action 'user_unapproved_to_approved' - Approve user, delete from the deleting list
651
- */
652
- function ct_usercheck_approve_user() {
653
-
654
- check_ajax_referer( 'ct_secret_nonce', 'security' );
655
-
656
- delete_metadata('user', $_POST['id'], 'ct_marked_as_spam');
657
-
658
- die();
659
- }
660
-
661
- /**
662
- * Admin action 'wp_ajax_ajax_ct_get_csv_file' - prints CSV file to AJAX
663
- */
664
- function ct_usercheck_get_csv_file() {
665
-
666
- check_ajax_referer( 'ct_secret_nonce', 'security' );
667
-
668
- // Opening CSV file
669
- if(!is_dir(APBCT_DIR_PATH .'/check-results/'))
670
- mkdir(APBCT_DIR_PATH .'/check-results');
671
-
672
- $current_user = wp_get_current_user();
673
-
674
- $filename = APBCT_DIR_PATH ."/check-results/user_check_by_{$current_user->user_nicename}.csv";
675
-
676
- //Delete old file
677
- if (file_exists($filename))
678
- unlink($filename);
679
-
680
- $file_desc = fopen($filename, 'w');
681
- $text = 'login,email,ip'.PHP_EOL;
682
-
683
- $params = array(
684
- 'meta_query' => array(
685
- array(
686
- 'key' => 'ct_marked_as_spam',
687
- 'compare' => '1'
688
- ),
689
- ),
690
- 'orderby' => 'registered',
691
- 'order' => 'ASC',
692
- );
693
-
694
- $u = get_users( $params );
695
-
696
- for($i=0; $i < count($u); $i++){
697
- $user_meta = get_user_meta($u[$i]->ID, 'session_tokens', true);
698
- if(is_array($user_meta))
699
- $user_meta = array_values($user_meta);
700
- $text .= $u[$i]->user_login.',';
701
- $text .= $u[$i]->data->user_email.',';
702
- $text .= !empty($user_meta[0]['ip']) ? trim($user_meta[0]['ip']) : ''.PHP_EOL;
703
- }
704
- if($file_desc){
705
- fwrite($file_desc, $text);
706
- fclose($file_desc);
707
- }
708
-
709
- $filename = !empty($_POST['filename']) ? $_POST['filename'] : false;
710
-
711
- if($filename !== false && file_exists(WP_PLUGIN_DIR."/cleantalk-spam-protect/check-results/{$filename}.csv"))
712
- $output = 1;
713
- else
714
- $output = 0;
715
-
716
- echo $output;
717
-
718
- die();
719
-
720
- }
721
-
722
- /**
723
- * Get date user registered
724
- *
725
- * @param $user_id
726
- * @return string Date format"M j Y"
727
- */
728
- function ct_get_user_register($user_id ) {
729
-
730
- $user_data = get_userdata( $user_id );
731
- $registered = $user_data->user_registered;
732
-
733
- return date( "M j Y", strtotime( $registered ) );
734
-
735
- }
736
-
737
- /**
738
- * Get date last checked user or date first registered user
739
- *
740
- * @return string date "M j Y"
741
- */
742
- function ct_last_checked_user_register() {
743
-
744
- // Checked users
745
- $params = array(
746
- 'fields' => 'ID',
747
- 'meta_key' => 'ct_checked',
748
- 'count_total' => true,
749
- 'orderby' => 'ct_checked'
750
- );
751
- $tmp = new WP_User_Query($params);
752
- $cnt_checked = $tmp->get_total();
753
-
754
- if( $cnt_checked > 0 ) {
755
-
756
- // If we have checked users return last user reg date
757
- $users = $tmp->get_results();
758
- return ct_get_user_register( end( $users ) );
759
-
760
- } else {
761
-
762
- // If we have not any checked users return first user registered date
763
- $params = array(
764
- 'fields' => 'ID',
765
- 'number' => 1,
766
- 'orderby' => 'user_registered'
767
- );
768
- $tmp = new WP_User_Query($params);
769
-
770
- return ct_get_user_register( current( $tmp->get_results() ) );
771
-
772
- }
773
-
774
- }
775
-
776
- /**
777
- * Get last users check date.
778
- *
779
- * @return string|null Date format"M j Y" or datetime format or null
780
- */
781
- function ct_get_last_check_date( $timestamp = false ) {
782
-
783
- // Checked users
784
- $params = array(
785
- 'fields' => 'ID',
786
- 'meta_key' => 'ct_checked',
787
- 'count_total' => true,
788
- 'orderby' => 'ct_checked'
789
- );
790
- $tmp = new WP_User_Query($params);
791
- $cnt_checked = $tmp->get_total();
792
- $last_check = null;
793
-
794
- if( $cnt_checked > 0 ) {
795
-
796
- $users = $tmp->get_results();
797
- $last_check = $timestamp ? get_user_meta( end( $users ), 'ct_checked', true ) : date( "M j Y", strtotime( get_user_meta( end( $users ), 'ct_checked', true ) ) );
798
- }
799
-
800
- return $last_check;
801
-
802
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/find-spam/ClassCleantalkCommentsListTable.php ADDED
@@ -0,0 +1,302 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class ABPCTCommentsListTable extends ABPCT_List_Table
5
+ {
6
+ protected $apbct;
7
+
8
+ function __construct(){
9
+
10
+ parent::__construct(array(
11
+ 'singular' => 'spam',
12
+ 'plural' => 'spam'
13
+ ));
14
+
15
+ $this->bulk_actions_handler();
16
+
17
+ $this->row_actions_handler();
18
+
19
+ $this->prepare_items();
20
+
21
+ global $apbct;
22
+ $this->apbct = $apbct;
23
+
24
+ }
25
+ // Set columns
26
+ function get_columns(){
27
+ return array(
28
+ 'cb' => '<input type="checkbox" />',
29
+ 'ct_author' => esc_html__( 'Author', 'cleantalk' ),
30
+ 'ct_comment' => esc_html__( 'Comment', 'cleantalk' ),
31
+ 'ct_response_to' => esc_html__( ' In Response To', 'cleantalk' ),
32
+ );
33
+ }
34
+
35
+ // CheckBox column
36
+ function column_cb( $item ){
37
+ echo '<input type="checkbox" name="spamids[]" id="cb-select-'. $item['ct_id'] .'" value="'. $item['ct_id'] .'" />';
38
+ }
39
+
40
+ // Author (first) column
41
+ function column_ct_author( $item ) {
42
+
43
+ $column_content = '';
44
+ $email = $item['ct_comment']->comment_author_email;
45
+ $ip = $item['ct_comment']->comment_author_IP;
46
+
47
+ // Avatar, nickname
48
+ $column_content .= '<strong>'. $item['ct_comment']->comment_author . '</strong>';
49
+ $column_content .= '<br /><br />';
50
+
51
+ // Email
52
+ if( ! empty( $email ) ){
53
+ $column_content .= "<a href='mailto:$email'>$email</a>"
54
+ .( ! $this->apbct->white_label
55
+ ? "<a href='https://cleantalk.org/blacklists/$email' target='_blank'>"
56
+ ."&nbsp;<img src='" . APBCT_URL_PATH . "/inc/images/new_window.gif' alt='Ico: open in new window' border='0' style='float:none' />"
57
+ ."</a>"
58
+ : '');
59
+ } else {
60
+ $column_content .= esc_html__( 'No email', 'cleantalk' );
61
+ }
62
+
63
+ $column_content .= '<br/>';
64
+
65
+ // IP
66
+ if( ! empty( $ip ) ) {
67
+ $column_content .= "<a href='edit-comments.php?s=$ip&mode=detail'>$ip</a>"
68
+ .( ! $this->apbct->white_label
69
+ ?"<a href='https://cleantalk.org/blacklists/$ip ' target='_blank'>"
70
+ ."&nbsp;<img src='" . APBCT_URL_PATH . "/inc/images/new_window.gif' alt='Ico: open in new window' border='0' style='float:none' />"
71
+ ."</a>"
72
+ : '');
73
+ }else
74
+ $column_content .= esc_html__( 'No IP adress', 'cleantalk' );
75
+
76
+ return $column_content;
77
+
78
+ }
79
+
80
+ function column_ct_comment( $item ){
81
+
82
+ $id = $item['ct_id'];
83
+ $column_content = '';
84
+
85
+ $column_content .= '<div class="column-comment">';
86
+
87
+ $column_content .= '<div class="submitted-on">';
88
+
89
+ $column_content .= sprintf( __( 'Submitted on <a href="%1$s">%2$s at %3$s</a>' ), get_comment_link($id),
90
+ get_comment_date( __( 'Y/m/d' ),$id ),
91
+ get_comment_date( get_option( 'time_format' ),$id )
92
+ );
93
+
94
+ $column_content .= '</div>';
95
+
96
+ $column_content .= '<p>' . $item['ct_comment']->comment_content . '</p>';
97
+
98
+ $column_content .= '</div>';
99
+
100
+ $actions = array(
101
+ 'approve' => sprintf( '<span class="approve"><a href="?page=%s&action=%s&spam=%s">Approve</a></span>', $_REQUEST['page'],'approve', $id ),
102
+ 'delete' => sprintf( '<a href="?page=%s&action=%s&spam=%s">Delete</a>', $_REQUEST['page'],'delete', $id ),
103
+ );
104
+
105
+ return sprintf( '%1$s %2$s', $column_content, $this->row_actions( $actions ) );
106
+
107
+ }
108
+
109
+ function column_ct_response_to( $item ) {
110
+ $post_id = $item['ct_response_to'];
111
+ ?>
112
+ <div>
113
+ <span>
114
+ <a href="/wp-admin/post.php?post=<?php echo $post_id; ?>&action=edit"><?php print get_the_title( $post_id ); ?></a>
115
+ <br/>
116
+ <a href="/wp-admin/edit-comments.php?p=<?php echo $post_id; ?>" class="post-com-count">
117
+ <span class="comment-count"><?php
118
+ $p_cnt = wp_count_comments( $post_id );
119
+ echo $p_cnt->total_comments;
120
+ ?></span>
121
+ </a>
122
+ </span>
123
+ <a href="<?php print get_permalink( $post_id ); ?>"><?php _e( 'View Post' );?></a>
124
+ </div>
125
+ <?php
126
+ }
127
+
128
+ // Rest of columns
129
+ function column_default( $item, $column_name ) {
130
+ switch( $column_name ) {
131
+ case 'ct_author':
132
+ case 'ct_comment':
133
+ case 'ct_response_to':
134
+ case 'ct_start':
135
+ case 'ct_checked':
136
+ case 'ct_spam':
137
+ case 'ct_bad':
138
+ return $item[ $column_name ];
139
+ default:
140
+ return print_r( $item, true ) ;
141
+ }
142
+ }
143
+
144
+ function get_bulk_actions() {
145
+ $actions = array(
146
+ 'delete' => 'Delete'
147
+ );
148
+ return $actions;
149
+ }
150
+
151
+ function bulk_actions_handler() {
152
+
153
+ if( empty($_POST['spamids']) || empty($_POST['_wpnonce']) ) return;
154
+
155
+ if ( ! $action = $this->current_action() ) return;
156
+
157
+ if( ! wp_verify_nonce( $_POST['_wpnonce'], 'bulk-' . $this->_args['plural'] ) )
158
+ wp_die('nonce error');
159
+
160
+ if( 'delete' == $action ) {
161
+ $this->removeSpam( $_POST['spamids'] );
162
+ }
163
+
164
+ }
165
+
166
+ function row_actions_handler() {
167
+
168
+ if( empty($_GET['action']) ) return;
169
+
170
+ if( $_GET['action'] == 'approve' ) {
171
+
172
+ $id = filter_input( INPUT_GET, 'spam', FILTER_SANITIZE_NUMBER_INT );
173
+ $this->approveSpam( $id );
174
+
175
+ }
176
+
177
+ if( $_GET['action'] == 'delete' ) {
178
+
179
+ $id = filter_input( INPUT_GET, 'spam', FILTER_SANITIZE_NUMBER_INT );
180
+ $this->removeSpam( array( $id ) );
181
+
182
+ }
183
+
184
+ }
185
+
186
+ function no_items() {
187
+ esc_html_e( 'No spam found.', 'cleantalk' );
188
+ }
189
+
190
+ //********************************************//
191
+ // LOGIC //
192
+ //*******************************************//
193
+
194
+ function approveSpam( $ids ) {
195
+
196
+ $comment = get_comment($id, 'ARRAY_A');
197
+ $comment['comment_approved'] = 1;
198
+ delete_comment_meta( $id, 'ct_marked_as_spam' );
199
+ wp_update_comment( $comment );
200
+
201
+ apbct_comment__send_feedback( $id, 'approve', false, true );
202
+
203
+ }
204
+
205
+ function removeSpam( $ids ) {
206
+
207
+ $ids_string = implode( ', ', $ids );
208
+ global $wpdb;
209
+
210
+ $wpdb->query("DELETE FROM {$wpdb->comments} WHERE
211
+ comment_ID IN ($ids_string)");
212
+
213
+ }
214
+
215
+ public function getTotal() {
216
+
217
+ $total_comments = new WP_Comment_Query();
218
+ return $total_comments;
219
+
220
+ }
221
+
222
+ public function getChecked() {
223
+
224
+ $params_spam = array(
225
+ 'meta_key' => 'ct_checked',
226
+ );
227
+ $spam_comments = new WP_Comment_Query($params_spam);
228
+ return $spam_comments;
229
+
230
+ }
231
+
232
+ public function getCheckedNow() {
233
+
234
+ $params_spam = array(
235
+ 'meta_key' => 'ct_checked_now',
236
+ );
237
+ $spam_comments = new WP_Comment_Query($params_spam);
238
+ return $spam_comments;
239
+
240
+ }
241
+
242
+ public function getSpam() {
243
+
244
+ $params_spam = array(
245
+ 'meta_key' => 'ct_marked_as_spam',
246
+ );
247
+ $spam_comments = new WP_Comment_Query($params_spam);
248
+ return $spam_comments;
249
+
250
+ }
251
+
252
+ public function getSpamNow() {
253
+
254
+ // Spam comments
255
+ $params_spam = array(
256
+ 'meta_query' => array(
257
+ 'relation' => 'AND',
258
+ array(
259
+ 'key' => 'ct_marked_as_spam',
260
+ 'compare' => 'EXISTS'
261
+ ),
262
+ array(
263
+ 'key' => 'ct_checked_now',
264
+ 'compare' => 'EXISTS'
265
+ ),
266
+ )
267
+ );
268
+ $spam_comments = new WP_Comment_Query($params_spam);
269
+ return $spam_comments;
270
+
271
+ }
272
+
273
+ public function getBad() { // Without IP and EMAIL
274
+
275
+ $params_bad = array(
276
+ 'meta_key' => 'ct_bad',
277
+ );
278
+ $bad_users = new WP_Comment_Query($params_bad);
279
+ return $bad_users;
280
+
281
+ }
282
+
283
+ public function getScansLogs() {
284
+
285
+ global $wpdb;
286
+ $query = "SELECT * FROM " . APBCT_SPAMSCAN_LOGS . " WHERE scan_type = 'comments'";
287
+ $res = $wpdb->get_results( $query, ARRAY_A );
288
+ return $res;
289
+
290
+ }
291
+
292
+ protected function removeLogs( $ids ) {
293
+
294
+ $ids_string = implode( ', ', $ids );
295
+ global $wpdb;
296
+
297
+ $wpdb->query("DELETE FROM " . APBCT_SPAMSCAN_LOGS . " WHERE
298
+ ID IN ($ids_string)");
299
+
300
+ }
301
+
302
+ }
inc/find-spam/ClassCleantalkCommentsListTableLogs.php ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class ABPCTCommentsListTableLogs extends ABPCTCommentsListTable
5
+ {
6
+
7
+ // Set columns
8
+ function get_columns(){
9
+ return array(
10
+ 'cb' => '<input type="checkbox" />',
11
+ 'ct_start' => esc_html__( 'Start time', 'cleantalk' ),
12
+ 'ct_checked' => esc_html__( 'Checked', 'cleantalk' ),
13
+ 'ct_spam' => esc_html__( 'Found spam', 'cleantalk' ),
14
+ 'ct_bad' => esc_html__( 'Found bad', 'cleantalk' ),
15
+ );
16
+ }
17
+
18
+ function prepare_items(){
19
+
20
+ $columns = $this->get_columns();
21
+ $this->_column_headers = array( $columns, array(), array() );
22
+
23
+ $logs = $this->getScansLogs();
24
+
25
+ foreach( $logs as $log ) {
26
+
27
+ $this->items[] = array(
28
+ 'ct_id' => $log['id'],
29
+ 'ct_start' => $log['start_time'],
30
+ 'ct_checked' => $log['count_to_scan'],
31
+ 'ct_spam' => $log['found_spam'],
32
+ 'ct_bad' => $log['found_bad'],
33
+ );
34
+
35
+ }
36
+
37
+ }
38
+
39
+ function get_bulk_actions() {
40
+ $actions = array(
41
+ 'delete' => 'Delete'
42
+ );
43
+ return $actions;
44
+ }
45
+
46
+ function bulk_actions_handler() {
47
+
48
+ if( empty($_POST['spamids']) || empty($_POST['_wpnonce']) ) return;
49
+
50
+ if ( ! $action = $this->current_action() ) return;
51
+
52
+ if( ! wp_verify_nonce( $_POST['_wpnonce'], 'bulk-' . $this->_args['plural'] ) )
53
+ wp_die('nonce error');
54
+
55
+ $this->removeLogs( $_POST['spamids'] );
56
+
57
+ }
58
+
59
+ function no_items() {
60
+ esc_html_e( 'No logs found.', 'cleantalk' );
61
+ }
62
+
63
+ }
inc/find-spam/ClassCleantalkCommentsListTableScan.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class ABPCTCommentsListTableScan extends ABPCTCommentsListTable
5
+ {
6
+
7
+ function prepare_items() {
8
+
9
+ $columns = $this->get_columns();
10
+ $this->_column_headers = array( $columns, array(), array() );
11
+
12
+ $per_page_option = get_current_screen()->get_option( 'per_page', 'option' );
13
+ $per_page = get_user_meta( get_current_user_id(), $per_page_option, true );
14
+ if( ! $per_page ) {
15
+ $per_page = 10;
16
+ }
17
+
18
+ $scanned_comments = $this->getSpamNow();
19
+
20
+ $this->set_pagination_args( array(
21
+ 'total_items' => count( $scanned_comments->get_comments() ),
22
+ 'per_page' => $per_page,
23
+ ) );
24
+
25
+ $current_page = (int) $this->get_pagenum();
26
+
27
+ $scanned_comments_to_show = array_slice( $scanned_comments->get_comments(), ( ( $current_page - 1 ) * $per_page ), $per_page );
28
+
29
+ foreach( $scanned_comments_to_show as $comment ) {
30
+
31
+ $this->items[] = array(
32
+ 'ct_id' => $comment->comment_ID,
33
+ 'ct_author' => $comment->comment_author,
34
+ 'ct_comment' => $comment,
35
+ 'ct_response_to' => $comment->comment_post_ID,
36
+ );
37
+
38
+ }
39
+
40
+ }
41
+
42
+ }
inc/find-spam/ClassCleantalkCommentsListTableSpam.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class ABPCTCommentsListTableSpam extends ABPCTCommentsListTable
5
+ {
6
+
7
+ function prepare_items() {
8
+
9
+ $columns = $this->get_columns();
10
+ $this->_column_headers = array( $columns, array(), array() );
11
+
12
+ $per_page_option = get_current_screen()->get_option( 'per_page', 'option' );
13
+ $per_page = get_user_meta( get_current_user_id(), $per_page_option, true );
14
+ if( ! $per_page ) {
15
+ $per_page = 10;
16
+ }
17
+
18
+ $scanned_comments = $this->getSpam();
19
+
20
+ $this->set_pagination_args( array(
21
+ 'total_items' => count( $scanned_comments->get_comments() ),
22
+ 'per_page' => $per_page,
23
+ ) );
24
+
25
+ $current_page = (int) $this->get_pagenum();
26
+
27
+ $scanned_comments_to_show = array_slice( $scanned_comments->get_comments(), ( ( $current_page - 1 ) * $per_page ), $per_page );
28
+
29
+ foreach( $scanned_comments_to_show as $comment ) {
30
+
31
+ $this->items[] = array(
32
+ 'ct_id' => $comment->comment_ID,
33
+ 'ct_author' => $comment->comment_author,
34
+ 'ct_comment' => $comment,
35
+ 'ct_response_to' => $comment->comment_post_ID,
36
+ );
37
+
38
+ }
39
+
40
+ }
41
+
42
+ }
inc/find-spam/ClassCleantalkFindSpamChecker.php ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ abstract class ClassCleantalkFindSpamChecker
5
+ {
6
+
7
+ protected $page_title = '';
8
+
9
+ protected $apbct;
10
+
11
+ protected $page_script_name;
12
+
13
+ protected $page_slug;
14
+
15
+ protected $list_table;
16
+
17
+ public function __construct() {
18
+
19
+ global $apbct;
20
+ $this->apbct = $apbct;
21
+
22
+ // jQueryUI
23
+ wp_enqueue_script( 'jqueryui', plugins_url('/cleantalk-spam-protect/js/jquery-ui.min.js'), array('jquery'), '1.12.1' );
24
+ wp_enqueue_style( 'jqueryui_css', plugins_url('/cleantalk-spam-protect/css/jquery-ui.min.css'), array(), '1.21.1', 'all' );
25
+ wp_enqueue_style( 'jqueryui_theme_css', plugins_url('/cleantalk-spam-protect/css/jquery-ui.theme.min.css'), array(), '1.21.1', 'all' );
26
+
27
+ // Common CSS
28
+ wp_enqueue_style( 'cleantalk_admin_css_settings_page', plugins_url('/cleantalk-spam-protect/css/cleantalk-spam-check.min.css'), array( 'jqueryui_css' ), APBCT_VERSION, 'all' );
29
+
30
+ require_once(CLEANTALK_PLUGIN_DIR . 'inc/ClassApbctListTable.php');
31
+
32
+ }
33
+
34
+ public function getPageTitle() {
35
+
36
+ return $this->page_title;
37
+
38
+ }
39
+
40
+ public function getPageScriptName() {
41
+
42
+ return $this->page_script_name;
43
+
44
+ }
45
+
46
+ /**
47
+ * @return mixed
48
+ */
49
+ public function getPageSlug()
50
+ {
51
+ return $this->page_slug;
52
+ }
53
+
54
+ /**
55
+ * @return mixed
56
+ */
57
+ public function getApbct()
58
+ {
59
+ return $this->apbct;
60
+ }
61
+
62
+ abstract function getCurrentScanPage();
63
+
64
+ abstract function getTotalSpamPage();
65
+
66
+ abstract function getSpamLogsPage();
67
+
68
+ protected function getCurrentScanPanel( $spam_checker ) {
69
+ ?>
70
+
71
+ <!-- Main info -->
72
+ <h3 id="ct_checking_status"><?php echo $spam_checker::ct_ajax_info(true) ; ?></h3>
73
+
74
+ <!-- Check options -->
75
+ <div class="ct_to_hide" id="ct_check_params_wrapper">
76
+ <button class="button ct_check_params_elem" id="ct_check_spam_button" <?php echo !$this->apbct->data['moderate'] ? 'disabled="disabled"' : ''; ?>><?php _e("Start check", 'cleantalk'); ?></button>
77
+ <?php if(!empty($_COOKIE['ct_paused_'.$this->page_slug.'_check'])) { ?><button class="button ct_check_params_elem" id="ct_proceed_check_button"><?php _e("Continue check", 'cleantalk'); ?></button><?php } ?>
78
+ <p class="ct_check_params_desc"><?php _e("The plugin will check all $this->page_slug against blacklists database and show you senders that have spam activity on other websites.", 'cleantalk'); ?></p>
79
+ <br />
80
+ <div class="ct_check_params_elem ct_check_params_elem_sub">
81
+ <input id="ct_accurate_check" type="checkbox" value="1" /><label for="ct_accurate_check"><strong><?php _e("Accurate check", 'cleantalk'); ?></strong></label>
82
+ </div>
83
+ <p class="ct_check_params_desc"><?php _e("Allows to use $this->page_slug's dates to perform more accurate check. Could seriously slow down the check.", 'cleantalk'); ?></p>
84
+ <br />
85
+ <div class="ct_check_params_elem ct_check_params_elem_sub">
86
+ <input id="ct_allow_date_range" type="checkbox" value="1" /><label for="ct_allow_date_range"><strong><?php _e("Specify date range", 'cleantalk'); ?></strong></label>
87
+ </div>
88
+ <div class="ct_check_params_desc">
89
+ <label for="ct_date_range_from"></label><input class="ct_date" type="text" id="ct_date_range_from" value="<?php echo $this->lastCheckDate(); ?>" disabled readonly />
90
+ <label for="ct_date_range_till"></label><input class="ct_date" type="text" id="ct_date_range_till" value="<?php echo date( "M j Y"); ?>" disabled readonly />
91
+ </div>
92
+ <div class="ct_check_params_desc">
93
+ <p><?php esc_html_e( "Begin/end dates of creation $this->page_slug to check. If no date is specified, the plugin uses the last $this->page_slug check date.", 'cleantalk'); ?></p>
94
+ </div>
95
+ <br>
96
+ <?php apbct_admin__badge__get_premium(); ?>
97
+ </div>
98
+
99
+ <!-- Cooling notice -->
100
+ <h3 id="ct_cooling_notice"></h3>
101
+
102
+ <!-- Preloader and working message -->
103
+ <div id="ct_preloader">
104
+ <img src="<?php echo APBCT_URL_PATH . '/inc/images/preloader.gif'; ?>" alt="Cleantalk preloader" />
105
+ </div>
106
+ <div id="ct_working_message">
107
+ <?php _e("Please wait for a while. CleanTalk is checking all $this->page_slug via blacklist database at cleantalk.org. You will have option to delete found spam $this->page_slug after plugin finish.", 'cleantalk'); ?>
108
+ </div>
109
+
110
+ <!-- Pause button -->
111
+ <button class="button" id="ct_pause">Pause check</button>
112
+ <?php
113
+ }
114
+
115
+ public static function writeSpamLog( $scan_type, $scan_date, $cnt_checked, $cnt_spam, $cnt_bad ) {
116
+
117
+ global $wpdb;
118
+ $wpdb->insert(
119
+ APBCT_SPAMSCAN_LOGS,
120
+ array(
121
+ 'scan_type' => $scan_type,
122
+ 'start_time' => $scan_date, //@ToDo this is the END date. Need to place both: start and and of scanning
123
+ 'count_to_scan' => $cnt_checked,
124
+ 'found_spam' => $cnt_spam,
125
+ 'found_bad' => $cnt_bad
126
+ ),
127
+ array( '%s', '%s', '%d', '%d', '%d' )
128
+ );
129
+
130
+ }
131
+
132
+ }
inc/find-spam/ClassCleantalkFindSpamCommentsChecker.php ADDED
@@ -0,0 +1,448 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class ClassCleantalkFindSpamCommentsChecker extends ClassCleantalkFindSpamChecker
5
+ {
6
+
7
+ public function __construct() {
8
+
9
+ parent::__construct();
10
+
11
+ $this->page_title = esc_html__( 'Check comments for spam', 'cleantalk' );
12
+ $this->page_script_name = 'edit-comments.php';
13
+ $this->page_slug = 'spam';
14
+
15
+ // Preparing data
16
+ if(!empty($_COOKIE['ct_paused_comments_check']))
17
+ $prev_check = json_decode(stripslashes($_COOKIE['ct_paused_comments_check']), true);
18
+
19
+ wp_enqueue_script( 'ct_comments_checkspam', plugins_url('/cleantalk-spam-protect/js/cleantalk-comments-checkspam.min.js'), array( 'jquery', 'jqueryui' ), APBCT_VERSION );
20
+ wp_localize_script( 'ct_comments_checkspam', 'ctCommentsCheck', array(
21
+ 'ct_ajax_nonce' => wp_create_nonce('ct_secret_nonce'),
22
+ 'ct_prev_accurate' => !empty($prev_check['accurate']) ? true : false,
23
+ 'ct_prev_from' => !empty($prev_check['from']) ? $prev_check['from'] : false,
24
+ 'ct_prev_till' => !empty($prev_check['till']) ? $prev_check['till'] : false,
25
+ 'ct_timeout_confirm' => __('Failed from timeout. Going to check comments again.', 'cleantalk'),
26
+ 'ct_comments_added_after' => __('comments', 'cleantalk'),
27
+ 'ct_status_string' => __('Checked %s, found %s spam comments and %s bad comments (without IP or email).', 'cleantalk'),
28
+ 'ct_status_string_warning' => '<p>'.__('Please do backup of WordPress database before delete any accounts!', 'cleantalk').'</p>',
29
+ 'start' => !empty($_COOKIE['ct_comments_start_check']) ? true : false,
30
+ ));
31
+
32
+ require_once(CLEANTALK_PLUGIN_DIR . 'inc/find-spam/ClassCleantalkCommentsListTable.php');
33
+
34
+ }
35
+
36
+ public function getCurrentScanPage() {
37
+
38
+ require_once(CLEANTALK_PLUGIN_DIR . 'inc/find-spam/ClassCleantalkCommentsListTableScan.php');
39
+ $this->list_table = new ABPCTCommentsListTableScan();
40
+
41
+ $this->getCurrentScanPanel( $this );
42
+ echo '<form action="" method="POST">';
43
+ $this->list_table->display();
44
+ echo '</form>';
45
+
46
+ }
47
+
48
+ public function getTotalSpamPage(){
49
+
50
+ require_once(CLEANTALK_PLUGIN_DIR . 'inc/find-spam/ClassCleantalkCommentsListTableSpam.php');
51
+ $this->list_table = new ABPCTCommentsListTableSpam();
52
+
53
+ echo '<form action="" method="POST">';
54
+ $this->list_table->display();
55
+ echo '</form>';
56
+
57
+ }
58
+
59
+ public function getSpamLogsPage(){
60
+
61
+ require_once(CLEANTALK_PLUGIN_DIR . 'inc/find-spam/ClassCleantalkCommentsListTableLogs.php');
62
+ $this->list_table = new ABPCTCommentsListTableLogs();
63
+
64
+ echo '<form action="" method="POST">';
65
+ $this->list_table->display();
66
+ echo '</form>';
67
+
68
+ }
69
+
70
+ /**
71
+ * Get date last checked comment or date of the first comment
72
+ *
73
+ * @return string date "M j Y"
74
+ */
75
+ public static function lastCheckDate() {
76
+
77
+ $params = array(
78
+ 'fields' => 'ids',
79
+ 'meta_key' => 'ct_checked',
80
+ 'orderby' => 'ct_checked',
81
+ 'order' => 'ASC'
82
+ );
83
+ $checked_comments = get_comments( $params );
84
+
85
+ if ( ! empty($checked_comments) ) {
86
+
87
+ return get_comment_date( "M j Y", end( $checked_comments ) );
88
+
89
+ } else {
90
+
91
+ $params = array(
92
+ 'fields' => 'ids',
93
+ 'orderby' => 'comment_date_gmt',
94
+ 'order' => 'ASC',
95
+ 'number' => 1
96
+ );
97
+ $first_comment = get_comments( $params );
98
+
99
+ return get_comment_date( "M j Y", current( $first_comment ) );
100
+
101
+ }
102
+
103
+ }
104
+
105
+ public static function ct_ajax_check_comments(){
106
+
107
+ check_ajax_referer( 'ct_secret_nonce', 'security' );
108
+
109
+ global $wpdb, $apbct;
110
+
111
+ if(isset($_POST['from'], $_POST['till'])){
112
+ $from_date = date('Y-m-d', intval(strtotime($_POST['from'])));
113
+ $till_date = date('Y-m-d', intval(strtotime($_POST['till'])));
114
+ }
115
+
116
+ // Gettings comments 100 unchecked comments
117
+ if(isset($_COOKIE['ct_comments_safe_check'])){
118
+ $c = $wpdb->get_results("
119
+ SELECT comment_ID, comment_date_gmt, comment_author_IP, comment_author_email
120
+ FROM {$wpdb->comments} as comm
121
+ WHERE
122
+ (comm.comment_approved = '1' OR comm.comment_approved = '0')
123
+ AND NOT EXISTS(
124
+ SELECT comment_id, meta_key
125
+ FROM {$wpdb->commentmeta} as meta
126
+ WHERE comm.comment_ID = meta.comment_id AND (meta_key = 'ct_checked' OR meta_key = 'ct_bad')
127
+ )
128
+ ORDER BY comment_date_gmt
129
+ LIMIT 100",
130
+ ARRAY_A
131
+ );
132
+ }else{
133
+ $params = array(
134
+ 'meta_query' => array(
135
+ 'relation' => 'AND',
136
+ array(
137
+ 'key' => 'ct_checked_now',
138
+ 'compare' => 'NOT EXISTS'
139
+ ),
140
+ array(
141
+ 'key' => 'ct_checked',
142
+ 'compare' => 'NOT EXISTS'
143
+ ),
144
+ array(
145
+ 'key' => 'ct_bad',
146
+ 'compare' => 'NOT EXISTS'
147
+ )
148
+ ),
149
+ 'orderby' => 'comment_date_gmt',
150
+ 'order' => 'ASC',
151
+ 'number' => 100
152
+ );
153
+ if(isset($from_date, $till_date)){
154
+ $params['date_query'] = array(
155
+ 'column' => 'comment_date_gmt',
156
+ 'after' => $from_date,
157
+ 'before' => $till_date,
158
+ 'inclusive' => true,
159
+ );
160
+ }
161
+ $c = get_comments( $params );
162
+ }
163
+
164
+ $check_result = array(
165
+ 'end' => 0,
166
+ 'checked' => 0,
167
+ 'spam' => 0,
168
+ 'bad' => 0,
169
+ 'error' => 0
170
+ );
171
+
172
+ if(sizeof($c)>0){
173
+
174
+ // Coverting $c to objects
175
+ if(is_array($c[0])){
176
+ foreach($c as $key => $value){
177
+ $c[$key] = (object)$value;
178
+ } unset($key, $value);
179
+ }
180
+
181
+ if(!empty($_POST['accurate_check'])){
182
+ // Leaving comments only with first comment's date. Unsetting others.
183
+
184
+ foreach($c as $comment_index => $comment){
185
+
186
+ if(!isset($curr_date))
187
+ $curr_date = (substr($comment->comment_date_gmt, 0, 10) ? substr($comment->comment_date_gmt, 0, 10) : '');
188
+
189
+ if(substr($comment->comment_date_gmt, 0, 10) != $curr_date)
190
+ unset($c[$comment_index]);
191
+
192
+ }
193
+ unset($comment_index, $comment);
194
+ }
195
+
196
+ // Checking comments IP/Email. Gathering $data for check.
197
+ $data = Array();
198
+ for($i=0;$i<sizeof($c);$i++){
199
+
200
+ $curr_ip = $c[$i]->comment_author_IP;
201
+ $curr_email = $c[$i]->comment_author_email;
202
+
203
+ // Check for identity
204
+ $curr_ip = preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $curr_ip) === 1 ? $curr_ip : null;
205
+ $curr_email = preg_match('/^\S+@\S+\.\S+$/', $curr_email) === 1 ? $curr_email : null;
206
+
207
+ if(empty($curr_ip) && empty($curr_email)){
208
+ $check_result['bad']++;
209
+ update_comment_meta($c[$i]->comment_ID,'ct_bad','1');
210
+ update_comment_meta($c[$i]->comment_ID,'ct_checked','1');
211
+ unset($c[$i]);
212
+ }else{
213
+ if(!empty($curr_ip))
214
+ $data[] = $curr_ip;
215
+ if(!empty($curr_email))
216
+ $data[] = $curr_email;
217
+ // Patch for empty IP/Email
218
+ $c[$i]->comment_author_IP = empty($curr_ip) ? 'none' : $curr_ip;
219
+ $c[$i]->comment_author_email = empty($curr_email) ? 'none' : $curr_email;
220
+ }
221
+ }
222
+
223
+ // Recombining after checking and unsettting
224
+ $c = array_values($c);
225
+
226
+ // Drop if data empty and there's no comments to check
227
+ if(count($data) == 0){
228
+ if($_POST['unchecked'] === 0)
229
+ $check_result['end'] = 1;
230
+ print json_encode($check_result);
231
+ die();
232
+ }
233
+
234
+ $result = CleantalkAPI::method__spam_check_cms($apbct->api_key, $data, !empty($_POST['accurate_check']) ? $curr_date : null);
235
+
236
+ if(empty($result['error'])){
237
+
238
+ for($i=0;$i<sizeof($c);$i++){
239
+
240
+ $mark_spam_ip = false;
241
+ $mark_spam_email = false;
242
+
243
+ $check_result['checked']++;
244
+ update_comment_meta($c[$i]->comment_ID,'ct_checked',date("Y-m-d H:m:s"));
245
+ update_comment_meta( $c[$i]->comment_ID, 'ct_checked_now', date("Y-m-d H:m:s"), true) ;
246
+
247
+ $uip=$c[$i]->comment_author_IP;
248
+ $uim=$c[$i]->comment_author_email;
249
+
250
+ if(isset($result[$uip]) && $result[$uip]['appears'] == 1)
251
+ $mark_spam_ip = true;
252
+
253
+ if(isset($result[$uim]) && $result[$uim]['appears'] == 1)
254
+ $mark_spam_email = true;
255
+
256
+ if ($mark_spam_ip || $mark_spam_email){
257
+ $check_result['spam']++;
258
+ update_comment_meta($c[$i]->comment_ID,'ct_marked_as_spam','1');
259
+ }
260
+ }
261
+ print json_encode($check_result);
262
+
263
+ }else{
264
+ $check_result['error'] = 1;
265
+ $check_result['error_message'] = $result['error'];
266
+ echo json_encode($check_result);
267
+ }
268
+ }else{
269
+
270
+ $check_result['end'] = 1;
271
+
272
+ $log_data = static::get_log_data();
273
+ static::writeSpamLog( 'comments', date("Y-m-d H:i:s"), $log_data['checked'], $log_data['spam'], $log_data['bad'] );
274
+
275
+ print json_encode($check_result);
276
+
277
+ }
278
+
279
+ die;
280
+ }
281
+
282
+ public static function ct_ajax_info($direct_call = false){
283
+
284
+ if (!$direct_call)
285
+ check_ajax_referer( 'ct_secret_nonce', 'security' );
286
+
287
+ // Checked comments
288
+ $params_checked = array(
289
+ 'meta_key' => 'ct_checked_now',
290
+ 'orderby' => 'ct_checked_now'
291
+ );
292
+ $checked_comments = new WP_Comment_Query($params_checked);
293
+ $cnt_checked = count( $checked_comments->get_comments() );
294
+
295
+ // Spam comments
296
+ $params_spam = array(
297
+ 'meta_query' => array(
298
+ 'relation' => 'AND',
299
+ array(
300
+ 'key' => 'ct_marked_as_spam',
301
+ 'compare' => 'EXISTS'
302
+ ),
303
+ array(
304
+ 'key' => 'ct_checked_now',
305
+ 'compare' => 'EXISTS'
306
+ ),
307
+ ),
308
+ );
309
+ $spam_comments = new WP_Comment_Query($params_spam);
310
+ $cnt_spam = count( $spam_comments->get_comments() );
311
+
312
+ // Bad comments (without IP and Email)
313
+ $params_bad = array(
314
+ 'meta_query' => array(
315
+ 'relation' => 'AND',
316
+ array(
317
+ 'key' => 'ct_bad',
318
+ 'compare' => 'EXISTS'
319
+ ),
320
+ array(
321
+ 'key' => 'ct_checked_now',
322
+ 'compare' => 'EXISTS'
323
+ ),
324
+ ),
325
+ );
326
+ $bad_comments = new WP_Comment_Query($params_bad);
327
+ $cnt_bad = count( $bad_comments->get_comments() );
328
+
329
+ $return = array(
330
+ 'message' => '',
331
+ 'spam' => $cnt_spam,
332
+ 'checked' => $cnt_checked,
333
+ 'bad' => $cnt_bad,
334
+ );
335
+
336
+ if( ! $direct_call ) {
337
+ $return['message'] .= sprintf (
338
+ esc_html__('Checked %s, found %s spam comments and %s bad comments (without IP or email)', 'cleantalk'),
339
+ $cnt_checked,
340
+ $cnt_spam,
341
+ $cnt_bad
342
+ );
343
+ } else {
344
+ if( isset( $return['checked'] ) && 0 == $return['checked'] ) {
345
+ $return['message'] = esc_html__( 'Never checked yet or no new spam.', 'cleantalk' );
346
+ } else {
347
+ $return['message'] .= sprintf (
348
+ __("Last check %s: checked %s comments, found %s spam comments and %s bad comments (without IP or email).", 'cleantalk'),
349
+ self::lastCheckDate(),
350
+ $cnt_checked,
351
+ $cnt_spam,
352
+ $cnt_bad
353
+ );
354
+ }
355
+ }
356
+
357
+ $backup_notice = '&nbsp;';
358
+ if ($cnt_spam > 0){
359
+ $backup_notice = __("Please do backup of WordPress database before delete any comments!", 'cleantalk');
360
+ }
361
+ $return['message'] .= "<p>$backup_notice</p>";
362
+
363
+ if($direct_call){
364
+ return $return['message'];
365
+ }else{
366
+ echo json_encode($return);
367
+ die();
368
+ }
369
+
370
+ }
371
+
372
+ public static function ct_ajax_clear_comments(){
373
+
374
+ check_ajax_referer( 'ct_secret_nonce', 'security' );
375
+
376
+ global $wpdb;
377
+ $wpdb->query("DELETE FROM {$wpdb->commentmeta} WHERE meta_key IN ('ct_checked_now')");
378
+
379
+ if ( isset($_POST['from']) && isset($_POST['till']) ) {
380
+ if ( preg_match('/[a-zA-Z]{3}\s{1}\d{1,2}\s{1}\d{4}/', $_POST['from'] ) && preg_match('/[a-zA-Z]{3}\s{1}\d{1,2}\s{1}\d{4}/', $_POST['till'] ) ) {
381
+
382
+ $from = date('Y-m-d', intval(strtotime($_POST['from']))) . ' 00:00:00';
383
+ $till = date('Y-m-d', intval(strtotime($_POST['till']))) . ' 23:59:59';
384
+
385
+ $wpdb->query("DELETE FROM {$wpdb->commentmeta} WHERE
386
+ meta_key IN ('ct_checked','ct_marked_as_spam','ct_bad')
387
+ AND meta_value >= '{$from}'
388
+ AND meta_value <= '{$till}';");
389
+
390
+ die();
391
+
392
+ }
393
+ }
394
+
395
+ }
396
+
397
+ private static function get_log_data() {
398
+
399
+ // Checked users
400
+ $params_spam = array(
401
+ 'meta_key' => 'ct_checked_now',
402
+ );
403
+ $spam_comments = new WP_Comment_Query($params_spam);
404
+ $cnt_checked = count( $spam_comments->get_comments() );
405
+
406
+ // Spam users
407
+ $params_spam = array(
408
+ 'meta_query' => array(
409
+ 'relation' => 'AND',
410
+ array(
411
+ 'key' => 'ct_marked_as_spam',
412
+ 'compare' => 'EXISTS'
413
+ ),
414
+ array(
415
+ 'key' => 'ct_checked_now',
416
+ 'compare' => 'EXISTS'
417
+ ),
418
+ ),
419
+ );
420
+ $spam_comments = new WP_Comment_Query($params_spam);
421
+ $cnt_spam = count( $spam_comments->get_comments() );
422
+
423
+ // Bad users (without IP and Email)
424
+ $params_bad = array(
425
+ 'meta_query' => array(
426
+ 'relation' => 'AND',
427
+ array(
428
+ 'key' => 'ct_bad',
429
+ 'compare' => 'EXISTS'
430
+ ),
431
+ array(
432
+ 'key' => 'ct_checked_now',
433
+ 'compare' => 'EXISTS'
434
+ ),
435
+ ),
436
+ );
437
+ $spam_comments = new WP_Comment_Query($params_bad);
438
+ $cnt_bad = count( $spam_comments->get_comments() );
439
+
440
+ return array(
441
+ 'spam' => $cnt_spam,
442
+ 'checked' => $cnt_checked,
443
+ 'bad' => $cnt_bad,
444
+ );
445
+
446
+ }
447
+
448
+ }
inc/find-spam/ClassCleantalkFindSpamPage.php ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class ClassCleantalkFindSpamPage
5
+ {
6
+
7
+ private $spam_checker;
8
+
9
+ private $current_tab;
10
+
11
+ public function __construct( ClassCleantalkFindSpamChecker $apbct_spam_checker ) {
12
+
13
+ $this->spam_checker = $apbct_spam_checker;
14
+
15
+ switch ( current_action() ) {
16
+
17
+ case 'users_page_ct_check_users' :
18
+ case 'comments_page_ct_check_spam' :
19
+ $this->current_tab = 1;
20
+ $this->generatePageHeader();
21
+ $this->spam_checker->getCurrentScanPage();
22
+ break;
23
+
24
+ case 'users_page_ct_check_users_total' :
25
+ case 'comments_page_ct_check_spam_total' :
26
+ $this->current_tab = 2;
27
+ $this->generatePageHeader();
28
+ $this->spam_checker->getTotalSpamPage();
29
+ break;
30
+
31
+ case 'users_page_ct_check_users_logs' :
32
+ case 'comments_page_ct_check_spam_logs' :
33
+ $this->current_tab = 3;
34
+ $this->generatePageHeader();
35
+ $this->spam_checker->getSpamLogsPage();
36
+ break;
37
+
38
+ }
39
+
40
+ }
41
+
42
+ /**
43
+ * Output header section of the FindSpam pages
44
+ *
45
+ * @return void (HTML layout output)
46
+ */
47
+ public static function showFindSpamPage() {
48
+ switch ( current_action() ) {
49
+
50
+ case 'users_page_ct_check_users' :
51
+ case 'users_page_ct_check_users_total' :
52
+ case 'users_page_ct_check_users_logs' :
53
+ self::generateCheckUsersPage();
54
+ break;
55
+
56
+ case 'comments_page_ct_check_spam' :
57
+ case 'comments_page_ct_check_spam_total' :
58
+ case 'comments_page_ct_check_spam_logs' :
59
+ self::generateCheckSpamPage();
60
+ break;
61
+
62
+ }
63
+
64
+ }
65
+
66
+ private static function generateCheckUsersPage() {
67
+
68
+ new self( new ClassCleantalkFindSpamUsersChecker() );
69
+
70
+ self::closeTags();
71
+
72
+ }
73
+
74
+ private static function generateCheckSpamPage() {
75
+
76
+ new self( new ClassCleantalkFindSpamCommentsChecker() );
77
+
78
+ self::closeTags();
79
+
80
+ }
81
+
82
+ private function generatePageHeader() {
83
+
84
+ // If access key is unset in
85
+ if( ! apbct_api_key__is_correct() ){
86
+ if( 1 == $this->spam_checker->getApbct()->moderate_ip ){
87
+ echo '<h3>'
88
+ .sprintf(
89
+ __('Antispam hosting tariff does not allow you to use this feature. To do so, you need to enter an Access Key in the %splugin settings%s.', 'cleantalk'),
90
+ '<a href="' . ( is_network_admin() ? 'settings.php?page=cleantalk' : 'options-general.php?page=cleantalk' ).'">',
91
+ '</a>'
92
+ )
93
+ .'</h3>';
94
+ }
95
+ return;
96
+ }
97
+
98
+ ?>
99
+ <div class="wrap">
100
+ <h2><img src="<?php echo $this->spam_checker->getApbct()->logo__small__colored; ?>" alt="CleanTalk logo" /> <?php echo $this->spam_checker->getApbct()->plugin_name; ?></h2>
101
+ <a style="color: gray; margin-left: 23px;" href="<?php echo $this->spam_checker->getApbct()->settings_link; ?>"><?php _e('Plugin Settings', 'cleantalk'); ?></a>
102
+ <br />
103
+ <h3><?php echo $this->spam_checker->getPageTitle(); ?></h3>
104
+ <div id="ct_check_tabs">
105
+ <ul>
106
+ <li <?php echo (1 == $this->current_tab) ? 'class="active"' : ''; ?>><a href="<?php echo $this->spam_checker->getPageScriptName(); ?>?page=ct_check_<?php echo $this->spam_checker->getPageSlug(); ?>"><?php esc_html_e( 'Current scan results', 'cleantalk' ) ?></a></li>
107
+ <li <?php echo (2 == $this->current_tab) ? 'class="active"' : ''; ?>><a href="<?php echo $this->spam_checker->getPageScriptName(); ?>?page=ct_check_<?php echo $this->spam_checker->getPageSlug(); ?>_total"><?php esc_html_e( 'Total spam found', 'cleantalk' ) ?></a></li>
108
+ <li <?php echo (3 == $this->current_tab) ? 'class="active"' : ''; ?>><a href="<?php echo $this->spam_checker->getPageScriptName(); ?>?page=ct_check_<?php echo $this->spam_checker->getPageSlug(); ?>_logs"><?php esc_html_e( 'Scan logs', 'cleantalk' ) ?></a></li>
109
+ </ul>
110
+ <div id="ct_check_content">
111
+ <?php
112
+
113
+ }
114
+
115
+ public static function setScreenOption() {
116
+
117
+ $option = 'per_page';
118
+ $args = array(
119
+ 'label' => esc_html__( 'Show per page', 'cleantalk' ),
120
+ 'default' => 10,
121
+ 'option' => 'spam_per_page',
122
+ );
123
+ add_screen_option( $option, $args );
124
+
125
+ }
126
+
127
+ private static function closeTags() {
128
+
129
+ ?>
130
+ </div>
131
+ </div>
132
+ <?php
133
+
134
+ }
135
+
136
+ }
inc/find-spam/ClassCleantalkFindSpamUsersChecker.php ADDED
@@ -0,0 +1,535 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class ClassCleantalkFindSpamUsersChecker extends ClassCleantalkFindSpamChecker
5
+ {
6
+
7
+ public function __construct() {
8
+
9
+ parent::__construct();
10
+
11
+ $this->page_title = esc_html__( 'Check users for spam', 'cleantalk' );
12
+ $this->page_script_name = 'users.php';
13
+ $this->page_slug = 'users';
14
+
15
+ // Preparing data
16
+ $current_user = wp_get_current_user();
17
+ if( ! empty( $_COOKIE['ct_paused_users_check'] ) )
18
+ $prev_check = json_decode( stripslashes( $_COOKIE['ct_paused_users_check'] ), true );
19
+
20
+ wp_enqueue_script( 'ct_users_checkspam', plugins_url('/cleantalk-spam-protect/js/cleantalk-users-checkspam.min.js'), array( 'jquery', 'jqueryui' ), APBCT_VERSION );
21
+ wp_localize_script( 'ct_users_checkspam', 'ctUsersCheck', array(
22
+ 'ct_ajax_nonce' => wp_create_nonce('ct_secret_nonce'),
23
+ 'ct_prev_accurate' => !empty($prev_check['accurate']) ? true : false,
24
+ 'ct_prev_from' => !empty($prev_check['from']) ? $prev_check['from'] : false,
25
+ 'ct_prev_till' => !empty($prev_check['till']) ? $prev_check['till'] : false,
26
+ 'ct_timeout' => __('Failed from timeout. Going to check users again.', 'cleantalk'),
27
+ 'ct_timeout_delete' => __('Failed from timeout. Going to run a new attempt to delete spam users.', 'cleantalk'),
28
+ 'ct_iusers' => __('users.', 'cleantalk'),
29
+ 'ct_csv_filename' => "user_check_by_".$current_user->user_login,
30
+ 'ct_status_string' => __("Checked %s, found %s spam users and %s bad users (without IP or email)", 'cleantalk'),
31
+ 'ct_status_string_warning' => "<p>".__("Please do backup of WordPress database before delete any accounts!", 'cleantalk')."</p>"
32
+ ));
33
+
34
+ wp_enqueue_style( 'cleantalk_admin_css_settings_page', plugins_url().'/cleantalk-spam-protect/css/cleantalk-spam-check.min.css', array(), APBCT_VERSION, 'all' );
35
+
36
+ require_once(CLEANTALK_PLUGIN_DIR . 'inc/find-spam/ClassCleantalkUsersListTable.php');
37
+
38
+ }
39
+
40
+ public function getCurrentScanPage() {
41
+
42
+ require_once(CLEANTALK_PLUGIN_DIR . 'inc/find-spam/ClassCleantalkUsersListTableScan.php');
43
+ $this->list_table = new ABPCTUsersListTableScan();
44
+
45
+ $this->getCurrentScanPanel( $this );
46
+ echo '<form action="" method="POST">';
47
+ $this->list_table->display();
48
+ echo '</form>';
49
+
50
+ }
51
+
52
+ public function getTotalSpamPage(){
53
+
54
+ require_once(CLEANTALK_PLUGIN_DIR . 'inc/find-spam/ClassCleantalkUsersListTableSpam.php');
55
+ $this->list_table = new ABPCTUsersListTableSpam();
56
+
57
+ echo '<form action="" method="POST">';
58
+ $this->list_table->display();
59
+ echo '</form>';
60
+
61
+ }
62
+
63
+ public function getSpamLogsPage(){
64
+
65
+ require_once(CLEANTALK_PLUGIN_DIR . 'inc/find-spam/ClassCleantalkUsersListTableLogs.php');
66
+ $this->list_table = new ABPCTUsersListTableLogs();
67
+
68
+ echo '<form action="" method="POST">';
69
+ $this->list_table->display();
70
+ echo '</form>';
71
+
72
+ }
73
+
74
+ /**
75
+ * Get date last checked user or date first registered user
76
+ *
77
+ * @return string date "M j Y"
78
+ */
79
+ public static function lastCheckDate() {
80
+
81
+ // Checked users
82
+ $params = array(
83
+ 'fields' => 'ID',
84
+ 'meta_key' => 'ct_checked',
85
+ 'count_total' => true,
86
+ 'orderby' => 'ct_checked'
87
+ );
88
+ $tmp = new WP_User_Query( $params );
89
+ $cnt_checked = $tmp->get_total();
90
+
91
+ if( $cnt_checked > 0 ) {
92
+
93
+ // If we have checked users return last user reg date
94
+ $users = $tmp->get_results();
95
+ return self::getUserRegister( end( $users ) );
96
+
97
+ } else {
98
+
99
+ // If we have not any checked users return first user registered date
100
+ $params = array(
101
+ 'fields' => 'ID',
102
+ 'number' => 1,
103
+ 'orderby' => 'user_registered'
104
+ );
105
+ $tmp = new WP_User_Query( $params );
106
+
107
+ return self::getUserRegister( current( $tmp->get_results() ) );
108
+
109
+ }
110
+
111
+ }
112
+
113
+ /**
114
+ * Get date user registered
115
+ *
116
+ * @param $user_id
117
+ * @return string Date format"M j Y"
118
+ */
119
+ private static function getUserRegister( $user_id ) {
120
+
121
+ $user_data = get_userdata( $user_id );
122
+ $registered = $user_data->user_registered;
123
+
124
+ return date( "M j Y", strtotime( $registered ) );
125
+
126
+ }
127
+
128
+ static function ct_ajax_check_users(){
129
+
130
+ check_ajax_referer('ct_secret_nonce', 'security');
131
+
132
+ global $apbct;
133
+
134
+ $amount = !empty($_POST['amount']) && intval($_POST['amount'])
135
+ ? intval($_POST['amount'])
136
+ : 100;
137
+
138
+ $skip_roles = array(
139
+ 'administrator'
140
+ );
141
+
142
+ $params = array(
143
+ 'meta_query' => array(
144
+ 'relation' => 'AND',
145
+ array(
146
+ 'key' => 'ct_checked_now',
147
+ 'compare' => 'NOT EXISTS'
148
+ ),
149
+ array(
150
+ 'key' => 'ct_checked',
151
+ 'compare' => 'NOT EXISTS'
152
+ ),
153
+ array(
154
+ 'key' => 'ct_bad',
155
+ 'compare' => 'NOT EXISTS'
156
+ )
157
+ ),
158
+ 'orderby' => 'registered',
159
+ 'order' => 'ASC',
160
+ 'number' => $amount,
161
+ );
162
+
163
+ if(isset($_POST['from'], $_POST['till'])){
164
+
165
+ $from_date = date('Y-m-d', intval(strtotime($_POST['from'])));
166
+ $till_date = date('Y-m-d', intval(strtotime($_POST['till'])));
167
+
168
+ $params['date_query'] = array(
169
+ 'column' => 'user_registered',
170
+ 'after' => $from_date,
171
+ 'before' => $till_date,
172
+ 'inclusive' => true,
173
+ );
174
+ }
175
+
176
+ $u = get_users( $params );
177
+
178
+ $check_result = array(
179
+ 'end' => 0,
180
+ 'checked' => 0,
181
+ 'spam' => 0,
182
+ 'bad' => 0,
183
+ 'error' => 0
184
+ );
185
+
186
+ if( count($u) > 0 ){
187
+
188
+ if( ! empty( $_POST['accurate_check'] ) ){
189
+ // Leaving users only with first comment's date. Unsetting others.
190
+ foreach( $u as $user_index => $user ){
191
+
192
+ if( ! isset( $curr_date ) )
193
+ $curr_date = ( substr( $user->data->user_registered, 0, 10 ) ? substr( $user->data->user_registered, 0, 10 ) : '' );
194
+
195
+ if( substr( $user->data->user_registered, 0, 10 ) != $curr_date )
196
+ unset( $u[$user_index] );
197
+
198
+ }
199
+ unset( $user_index, $user );
200
+ }
201
+
202
+ // Checking comments IP/Email. Gathering $data for check.
203
+ $data = array();
204
+
205
+ for( $i=0; $i < count($u); $i++ ){
206
+
207
+ $user_meta = get_user_meta( $u[$i]->ID, 'session_tokens', true );
208
+ if( is_array( $user_meta ) )
209
+ $user_meta = array_values( $user_meta );
210
+
211
+ $curr_ip = !empty( $user_meta[0]['ip' ]) ? trim( $user_meta[0]['ip'] ) : '';
212
+ $curr_email = !empty( $u[$i]->data->user_email ) ? trim( $u[$i]->data->user_email ) : '';
213
+
214
+ // Check for identity
215
+ $curr_ip = preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $curr_ip) === 1 ? $curr_ip : null;
216
+ $curr_email = preg_match('/^\S+@\S+\.\S+$/', $curr_email) === 1 ? $curr_email : null;
217
+
218
+ if( empty( $curr_ip ) && empty( $curr_email ) ){
219
+ $check_result['bad']++;
220
+ update_user_meta( $u[$i]->ID,'ct_bad','1',true );
221
+ update_user_meta( $u[$i]->ID, 'ct_checked', date("Y-m-d H:m:s"), true) ;
222
+ unset( $u[$i] );
223
+ }else{
224
+ if( !empty( $curr_ip ) )
225
+ $data[] = $curr_ip;
226
+ if( !empty( $curr_email ) )
227
+ $data[] = $curr_email;
228
+ // Patch for empty IP/Email
229
+ $u[$i]->data->user_ip = empty($curr_ip) ? 'none' : $curr_ip;
230
+ $u[$i]->data->user_email = empty($curr_email) ? 'none' : $curr_email;
231
+ }
232
+ }
233
+
234
+ // Recombining after checking and unsettting
235
+ $u = array_values( $u );
236
+
237
+ // Drop if data empty and there's no users to check
238
+ if( count( $data ) == 0 ){
239
+ if( $_POST['unchecked'] === 0 )
240
+ $check_result['end'] = 1;
241
+ print json_encode( $check_result );
242
+ die();
243
+ }
244
+
245
+ $result = CleantalkAPI::method__spam_check_cms( $apbct->api_key, $data, !empty($_POST['accurate_check']) ? $curr_date : null );
246
+
247
+ if( empty( $result['error'] ) ){
248
+
249
+ for( $i=0; $i < sizeof( $u ); $i++ ) {
250
+
251
+ $check_result['checked']++;
252
+ update_user_meta( $u[$i]->ID, 'ct_checked', date("Y-m-d H:m:s"), true) ;
253
+ update_user_meta( $u[$i]->ID, 'ct_checked_now', date("Y-m-d H:m:s"), true) ;
254
+
255
+ // Do not display forbidden roles.
256
+ foreach ( $skip_roles as $role ) {
257
+ if ( in_array( $role, $u[$i]->roles ) ){
258
+ delete_user_meta( $u[$i]->ID, 'ct_marked_as_spam' );
259
+ continue 2;
260
+ }
261
+ }
262
+
263
+ $mark_spam_ip = false;
264
+ $mark_spam_email = false;
265
+
266
+ $uip = $u[$i]->data->user_ip;
267
+ $uim = $u[$i]->data->user_email;
268
+
269
+ if( isset( $result[$uip] ) && $result[$uip]['appears'] == 1 )
270
+ $mark_spam_ip = true;
271
+
272
+ if( isset($result[$uim]) && $result[$uim]['appears'] == 1 )
273
+ $mark_spam_email = true;
274
+
275
+ if ( $mark_spam_ip || $mark_spam_email ){
276
+ $check_result['spam']++;
277
+ update_user_meta( $u[$i]->ID, 'ct_marked_as_spam', '1', true );
278
+ }
279
+
280
+ }
281
+
282
+ echo json_encode( $check_result );
283
+
284
+ } else {
285
+
286
+ $check_result['error'] = 1;
287
+ $check_result['error_message'] = $result['error'];
288
+
289
+ echo json_encode( $check_result );
290
+
291
+ }
292
+ } else {
293
+
294
+ $check_result['end'] = 1;
295
+
296
+ $log_data = static::get_log_data();
297
+ static::writeSpamLog( 'users', date("Y-m-d H:i:s"), $log_data['checked'], $log_data['spam'], $log_data['bad'] );
298
+
299
+ echo json_encode( $check_result );
300
+
301
+ }
302
+
303
+ die;
304
+
305
+ }
306
+
307
+ /**
308
+ * Run query for deleting 'ct_checked_now' meta. Need for the new scan.
309
+ *
310
+ * @return void
311
+ */
312
+ public static function ct_ajax_clear_users()
313
+ {
314
+ check_ajax_referer( 'ct_secret_nonce', 'security' );
315
+
316
+ global $wpdb;
317
+ $wpdb->query("DELETE FROM {$wpdb->usermeta} WHERE meta_key IN ('ct_checked_now')");
318
+
319
+ if ( isset($_POST['from']) && isset($_POST['till']) ) {
320
+ if ( preg_match('/[a-zA-Z]{3}\s{1}\d{1,2}\s{1}\d{4}/', $_POST['from'] ) && preg_match('/[a-zA-Z]{3}\s{1}\d{1,2}\s{1}\d{4}/', $_POST['till'] ) ) {
321
+
322
+ $from = date('Y-m-d', intval(strtotime($_POST['from']))) . ' 00:00:00';
323
+ $till = date('Y-m-d', intval(strtotime($_POST['till']))) . ' 23:59:59';
324
+
325
+ $wpdb->query("DELETE FROM {$wpdb->usermeta} WHERE
326
+ meta_key IN ('ct_checked','ct_marked_as_spam','ct_bad')
327
+ AND meta_value >= '{$from}'
328
+ AND meta_value <= '{$till}';");
329
+
330
+ die();
331
+
332
+ }
333
+ }
334
+
335
+ die();
336
+ }
337
+
338
+ public static function ct_ajax_info($direct_call = false) {
339
+
340
+ if (!$direct_call)
341
+ check_ajax_referer( 'ct_secret_nonce', 'security' );
342
+
343
+ // Checked users
344
+ $params_checked = array(
345
+ 'fields' => 'ID',
346
+ 'meta_key' => 'ct_checked_now',
347
+ 'count_total' => true,
348
+ 'orderby' => 'ct_checked_now'
349
+ );
350
+ $checked_users = new WP_User_Query($params_checked);
351
+ $cnt_checked = $checked_users->get_total();
352
+
353
+ // Spam users
354
+ $params_spam = array(
355
+ 'fields' => 'ID',
356
+ 'meta_query' => array(
357
+ 'relation' => 'AND',
358
+ array(
359
+ 'key' => 'ct_marked_as_spam',
360
+ 'compare' => 'EXISTS'
361
+ ),
362
+ array(
363
+ 'key' => 'ct_checked_now',
364
+ 'compare' => 'EXISTS'
365
+ ),
366
+ ),
367
+ 'count_total' => true,
368
+ );
369
+ $spam_users = new WP_User_Query($params_spam);
370
+ $cnt_spam = $spam_users->get_total();
371
+
372
+ // Bad users (without IP and Email)
373
+ $params_bad = array(
374
+ 'fields' => 'ID',
375
+ 'meta_query' => array(
376
+ 'relation' => 'AND',
377
+ array(
378
+ 'key' => 'ct_bad',
379
+ 'compare' => 'EXISTS'
380
+ ),
381
+ array(
382
+ 'key' => 'ct_checked_now',
383
+ 'compare' => 'EXISTS'
384
+ ),
385
+ ),
386
+ 'count_total' => true,
387
+ );
388
+ $bad_users = new WP_User_Query($params_bad);
389
+ $cnt_bad = $bad_users->get_total();
390
+
391
+ $return = array(
392
+ 'message' => '',
393
+ 'spam' => $cnt_spam,
394
+ 'checked' => $cnt_checked,
395
+ 'bad' => $cnt_bad,
396
+ );
397
+
398
+ if( ! $direct_call ) {
399
+ $return['message'] .= sprintf (
400
+ esc_html__('Checked %s, found %s spam users and %s bad users (without IP or email)', 'cleantalk'),
401
+ $cnt_checked,
402
+ $cnt_spam,
403
+ $cnt_bad
404
+ );
405
+ } else {
406
+ if( isset( $return['checked'] ) && 0 == $return['checked'] ) {
407
+ $return['message'] = esc_html__( 'Never checked yet or no new spam.', 'cleantalk' );
408
+ } else {
409
+ $return['message'] .= sprintf (
410
+ __("Last check %s: checked %s users, found %s spam users and %s bad users (without IP or email).", 'cleantalk'),
411
+ self::lastCheckDate(),
412
+ $cnt_checked,
413
+ $cnt_spam,
414
+ $cnt_bad
415
+ );
416
+ }
417
+ }
418
+
419
+ $backup_notice = '&nbsp;';
420
+ if ($cnt_spam > 0) {
421
+ $backup_notice = __("Please do backup of WordPress database before delete any accounts!", 'cleantalk');
422
+ }
423
+ $return['message'] .= "<p>$backup_notice</p>";
424
+
425
+ if($direct_call){
426
+ return $return['message'];
427
+ }else{
428
+ echo json_encode($return);
429
+ die();
430
+ }
431
+ }
432
+
433
+ private static function get_log_data() {
434
+
435
+ // Checked users
436
+ $params_checked = array(
437
+ 'fields' => 'ID',
438
+ 'meta_key' => 'ct_checked_now',
439
+ 'count_total' => true,
440
+ 'orderby' => 'ct_checked_now'
441
+ );
442
+ $checked_users = new WP_User_Query($params_checked);
443
+ $cnt_checked = $checked_users->get_total();
444
+
445
+ // Spam users
446
+ $params_spam = array(
447
+ 'fields' => 'ID',
448
+ 'meta_query' => array(
449
+ 'relation' => 'AND',
450
+ array(
451
+ 'key' => 'ct_marked_as_spam',
452
+ 'compare' => 'EXISTS'
453
+ ),
454
+ array(
455
+ 'key' => 'ct_checked_now',
456
+ 'compare' => 'EXISTS'
457
+ ),
458
+ ),
459
+ 'count_total' => true,
460
+ );
461
+ $spam_users = new WP_User_Query($params_spam);
462
+ $cnt_spam = $spam_users->get_total();
463
+
464
+ // Bad users (without IP and Email)
465
+ $params_bad = array(
466
+ 'fields' => 'ID',
467
+ 'meta_query' => array(
468
+ 'relation' => 'AND',
469
+ array(
470
+ 'key' => 'ct_bad',
471
+ 'compare' => 'EXISTS'
472
+ ),
473
+ array(
474
+ 'key' => 'ct_checked_now',
475
+ 'compare' => 'EXISTS'
476
+ ),
477
+ ),
478
+ 'count_total' => true,
479
+ );
480
+ $bad_users = new WP_User_Query($params_bad);
481
+ $cnt_bad = $bad_users->get_total();
482
+
483
+ return array(
484
+ 'spam' => $cnt_spam,
485
+ 'checked' => $cnt_checked,
486
+ 'bad' => $cnt_bad,
487
+ );
488
+
489
+ }
490
+
491
+ /**
492
+ * Admin action 'wp_ajax_ajax_ct_get_csv_file' - prints CSV file to AJAX
493
+ */
494
+ public static function ct_get_csv_file() {
495
+
496
+ check_ajax_referer( 'ct_secret_nonce', 'security' );
497
+
498
+ $text = 'login,email,ip' . PHP_EOL;
499
+
500
+ $params = array(
501
+ 'meta_query' => array(
502
+ array(
503
+ 'key' => 'ct_marked_as_spam',
504
+ 'compare' => '1'
505
+ ),
506
+ ),
507
+ 'orderby' => 'registered',
508
+ 'order' => 'ASC',
509
+ );
510
+
511
+ $u = get_users( $params );
512
+
513
+ for( $i=0; $i < count($u); $i++ ){
514
+ $user_meta = get_user_meta( $u[$i]->ID, 'session_tokens', true );
515
+ if( is_array( $user_meta ) )
516
+ $user_meta = array_values( $user_meta );
517
+ $text .= $u[$i]->user_login.',';
518
+ $text .= $u[$i]->data->user_email.',';
519
+ $text .= ! empty( $user_meta[0]['ip']) ? trim( $user_meta[0]['ip'] ) : '';
520
+ $text .= PHP_EOL;
521
+ }
522
+
523
+ $filename = ! empty( $_POST['filename'] ) ? $_POST['filename'] : false;
524
+
525
+ if( $filename !== false ) {
526
+ header('Content-Type: text/csv');
527
+ echo $text;
528
+ } else {
529
+ echo 'Export error.'; // file not exists or empty $_POST['filename']
530
+ }
531
+ die();
532
+
533
+ }
534
+
535
+ }
inc/find-spam/ClassCleantalkUsersListTable.php ADDED
@@ -0,0 +1,263 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class ABPCTUsersListTable extends ABPCT_List_Table
5
+ {
6
+
7
+ protected $apbct;
8
+
9
+ function __construct(){
10
+
11
+ parent::__construct(array(
12
+ 'singular' => 'spam',
13
+ 'plural' => 'spam'
14
+ ));
15
+
16
+ $this->bulk_actions_handler();
17
+
18
+ $this->row_actions_handler();
19
+
20
+ $this->prepare_items();
21
+
22
+ global $apbct;
23
+ $this->apbct = $apbct;
24
+
25
+ }
26
+
27
+ // Set columns
28
+ function get_columns(){
29
+ return array(
30
+ 'cb' => '<input type="checkbox" />',
31
+ 'ct_username' => esc_html__( 'Username', 'cleantalk' ),
32
+ 'ct_name' => esc_html__( 'Name', 'cleantalk' ),
33
+ 'ct_email' => esc_html__( 'E-mail', 'cleantalk' ),
34
+ 'ct_signed_up' => esc_html__( 'Signed up', 'cleantalk' ),
35
+ 'ct_role' => esc_html__( 'Role', 'cleantalk' ),
36
+ 'ct_posts' => esc_html__( 'Posts', 'cleantalk' ),
37
+ );
38
+ }
39
+
40
+ // CheckBox column
41
+ function column_cb( $item ){
42
+ echo '<input type="checkbox" name="spamids[]" id="cb-select-'. $item['ct_id'] .'" value="'. $item['ct_id'] .'" />';
43
+ }
44
+
45
+ // Username (first) column
46
+ function column_ct_username( $item ) {
47
+ $user_obj = $item['ct_username'];
48
+ $email = $user_obj->user_email;
49
+ $column_content = '';
50
+
51
+ // Avatar, nickname
52
+ $column_content .= '<strong>' . get_avatar( $user_obj->ID , 32) . '&nbsp;' . $user_obj->user_login . '</strong>';
53
+ $column_content .= '<br /><br />';
54
+
55
+ // Email
56
+ if( ! empty( $email ) ){
57
+ $column_content .= "<a href='mailto:$email'>$email</a>"
58
+ .( ! $this->apbct->white_label
59
+ ? "<a href='https://cleantalk.org/blacklists/$email' target='_blank'>"
60
+ ."&nbsp;<img src='" . APBCT_URL_PATH . "/inc/images/new_window.gif' alt='Ico: open in new window' border='0' style='float:none' />"
61
+ ."</a>"
62
+ : '');
63
+ } else {
64
+ $column_content .= esc_html__( 'No email', 'cleantalk' );
65
+ }
66
+ $column_content .= '<br/>';
67
+
68
+ // IP
69
+ $user_meta = get_user_meta( $user_obj->ID, 'session_tokens', true );
70
+ if( ! empty( $user_meta ) && is_array( $user_meta ) ){
71
+ $user_meta = array_values( $user_meta );
72
+ if( ! empty( $user_meta[0]['ip'] ) ) {
73
+ $ip = $user_meta[0]['ip'];
74
+ $column_content .= "<a href='user-edit.php?user_id=$user_obj->ID'>$ip</a>"
75
+ .( ! $this->apbct->white_label
76
+ ?"<a href='https://cleantalk.org/blacklists/$ip ' target='_blank'>"
77
+ ."&nbsp;<img src='" . APBCT_URL_PATH . "/inc/images/new_window.gif' alt='Ico: open in new window' border='0' style='float:none' />"
78
+ ."</a>"
79
+ : '');
80
+ }else
81
+ $column_content .= esc_html__( 'No IP adress', 'cleantalk' );
82
+ }else
83
+ $column_content .= esc_html__( 'No IP adress', 'cleantalk' );
84
+
85
+ $actions = array(
86
+ 'delete' => sprintf( '<a href="?page=%s&action=%s&spam=%s">Delete</a>', $_REQUEST['page'],'delete', $user_obj->ID ),
87
+ );
88
+
89
+ return sprintf( '%1$s %2$s', $column_content, $this->row_actions( $actions ) );
90
+
91
+ }
92
+
93
+ // Rest of columns
94
+ function column_default( $item, $column_name ) {
95
+ switch( $column_name ) {
96
+ case 'ct_name':
97
+ case 'ct_email':
98
+ case 'ct_signed_up':
99
+ case 'ct_role':
100
+ case 'ct_posts':
101
+ case 'ct_start':
102
+ case 'ct_checked':
103
+ case 'ct_spam':
104
+ case 'ct_bad':
105
+ return $item[ $column_name ];
106
+ default:
107
+ return print_r( $item, true ) ;
108
+ }
109
+ }
110
+
111
+ function get_bulk_actions() {
112
+ $actions = array(
113
+ 'delete' => 'Delete'
114
+ );
115
+ return $actions;
116
+ }
117
+
118
+ function bulk_actions_handler() {
119
+
120
+ if( empty($_POST['spamids']) || empty($_POST['_wpnonce']) ) return;
121
+
122
+ if ( ! $action = $this->current_action() ) return;
123
+
124
+ if( ! wp_verify_nonce( $_POST['_wpnonce'], 'bulk-' . $this->_args['plural'] ) )
125
+ wp_die('nonce error');
126
+
127
+ $this->removeSpam( $_POST['spamids'] );
128
+
129
+ }
130
+
131
+ function row_actions_handler() {
132
+
133
+ if( empty($_GET['action']) ) return;
134
+
135
+ if( $_GET['action'] == 'delete' ) {
136
+
137
+ $id = filter_input( INPUT_GET, 'spam', FILTER_SANITIZE_NUMBER_INT );
138
+ $this->removeSpam( array( $id ) );
139
+
140
+ }
141
+
142
+ }
143
+
144
+ function no_items() {
145
+ esc_html_e( 'No spam found.', 'cleantalk' );
146
+ }
147
+
148
+ //********************************************//
149
+ // LOGIC //
150
+ //*******************************************//
151
+
152
+ function removeSpam( $ids ) {
153
+
154
+ $ids_string = implode( ', ', $ids );
155
+ global $wpdb;
156
+
157
+ $wpdb->query("DELETE FROM {$wpdb->users} WHERE
158
+ ID IN ($ids_string)");
159
+
160
+ }
161
+
162
+ public function getTotal() {
163
+
164
+ $params_total = array(
165
+ 'fields' => 'ID',
166
+ 'count'=>true,
167
+ 'orderby' => 'user_registered'
168
+ );
169
+ $total_users = new WP_User_Query($params_total);
170
+ return $total_users;
171
+
172
+ }
173
+
174
+ public function getChecked() {
175
+
176
+ $params_spam = array(
177
+ 'fields' => 'ID',
178
+ 'meta_key' => 'ct_checked',
179
+ 'count_total' => true,
180
+ );
181
+ $spam_users = new WP_User_Query($params_spam);
182
+ return $spam_users;
183
+
184
+ }
185
+
186
+ public function getCheckedNow() {
187
+
188
+ $params_spam = array(
189
+ 'fields' => 'ID',
190
+ 'meta_key' => 'ct_checked_now',
191
+ 'count_total' => true,
192
+ );
193
+ $spam_users = new WP_User_Query($params_spam);
194
+ return $spam_users;
195
+
196
+ }
197
+
198
+ public function getSpam() {
199
+
200
+ $params_spam = array(
201
+ 'fields' => 'ID',
202
+ 'meta_key' => 'ct_marked_as_spam',
203
+ 'count_total' => true,
204
+ );
205
+ $spam_users = new WP_User_Query($params_spam);
206
+ return $spam_users;
207
+
208
+ }
209
+
210
+ public function getSpamNow() {
211
+
212
+ $params_spam = array(
213
+ 'fields' => 'ID',
214
+ 'meta_query' => array(
215
+ 'relation' => 'AND',
216
+ array(
217
+ 'key' => 'ct_marked_as_spam',
218
+ 'compare' => 'EXISTS'
219
+ ),
220
+ array(
221
+ 'key' => 'ct_checked_now',
222
+ 'compare' => 'EXISTS'
223
+ ),
224
+ ),
225
+ 'count_total' => true,
226
+ );
227
+ $spam_users = new WP_User_Query($params_spam);
228
+ return $spam_users;
229
+
230
+ }
231
+
232
+ public function getBad() { // Without IP and EMAIL
233
+
234
+ $params_bad = array(
235
+ 'fields' => 'ID',
236
+ 'meta_key' => 'ct_bad',
237
+ 'count_total' => true,
238
+ );
239
+ $bad_users = new WP_User_Query($params_bad);
240
+ return $bad_users;
241
+
242
+ }
243
+
244
+ public function getScansLogs() {
245
+
246
+ global $wpdb;
247
+ $query = "SELECT * FROM " . APBCT_SPAMSCAN_LOGS . " WHERE scan_type = 'users'";
248
+ $res = $wpdb->get_results( $query, ARRAY_A );
249
+ return $res;
250
+
251
+ }
252
+
253
+ protected function removeLogs( $ids ) {
254
+
255
+ $ids_string = implode( ', ', $ids );
256
+ global $wpdb;
257
+
258
+ $wpdb->query("DELETE FROM " . APBCT_SPAMSCAN_LOGS . " WHERE
259
+ ID IN ($ids_string)");
260
+
261
+ }
262
+
263
+ }
inc/find-spam/ClassCleantalkUsersListTableLogs.php ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class ABPCTUsersListTableLogs extends ABPCTUsersListTable
5
+ {
6
+
7
+ // Set columns
8
+ function get_columns(){
9
+ return array(
10
+ 'cb' => '<input type="checkbox" />',
11
+ 'ct_start' => esc_html__( 'Start time', 'cleantalk' ),
12
+ 'ct_checked' => esc_html__( 'Checked', 'cleantalk' ),
13
+ 'ct_spam' => esc_html__( 'Found spam', 'cleantalk' ),
14
+ 'ct_bad' => esc_html__( 'Found bad', 'cleantalk' ),
15
+ );
16
+ }
17
+
18
+ function prepare_items(){
19
+
20
+ $columns = $this->get_columns();
21
+ $this->_column_headers = array( $columns, array(), array() );
22
+
23
+ $logs = $this->getScansLogs();
24
+
25
+ foreach( $logs as $log ) {
26
+
27
+ $this->items[] = array(
28
+ 'ct_id' => $log['id'],
29
+ 'ct_start' => $log['start_time'],
30
+ 'ct_checked' => $log['count_to_scan'],
31
+ 'ct_spam' => $log['found_spam'],
32
+ 'ct_bad' => $log['found_bad'],
33
+ );
34
+
35
+ }
36
+
37
+ }
38
+
39
+ function get_bulk_actions() {
40
+ $actions = array(
41
+ 'delete' => 'Delete'
42
+ );
43
+ return $actions;
44
+ }
45
+
46
+ function bulk_actions_handler() {
47
+
48
+ if( empty($_POST['spamids']) || empty($_POST['_wpnonce']) ) return;
49
+
50
+ if ( ! $action = $this->current_action() ) return;
51
+
52
+ if( ! wp_verify_nonce( $_POST['_wpnonce'], 'bulk-' . $this->_args['plural'] ) )
53
+ wp_die('nonce error');
54
+
55
+ $this->removeLogs( $_POST['spamids'] );
56
+
57
+ }
58
+
59
+ function no_items() {
60
+ esc_html_e( 'No logs found.', 'cleantalk' );
61
+ }
62
+
63
+ }
inc/find-spam/ClassCleantalkUsersListTableScan.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class ABPCTUsersListTableScan extends ABPCTUsersListTable
5
+ {
6
+
7
+ function prepare_items() {
8
+
9
+ $columns = $this->get_columns();
10
+ $this->_column_headers = array( $columns, array(), array() );
11
+
12
+ $per_page_option = get_current_screen()->get_option( 'per_page', 'option' );
13
+ $per_page = get_user_meta( get_current_user_id(), $per_page_option, true );
14
+ if( ! $per_page ) {
15
+ $per_page = 10;
16
+ }
17
+
18
+ $scanned_users = $this->getSpamNow();
19
+
20
+ $this->set_pagination_args( array(
21
+ 'total_items' => $scanned_users->get_total(),
22
+ 'per_page' => $per_page,
23
+ ) );
24
+
25
+ $current_page = (int) $this->get_pagenum();
26
+
27
+ $scanned_users_to_show = array_slice( $scanned_users->get_results(), ( ( $current_page - 1 ) * $per_page ), $per_page );
28
+
29
+ foreach( $scanned_users_to_show as $user_id ) {
30
+
31
+ $user_obj = get_userdata( $user_id );
32
+
33
+ $this->items[] = array(
34
+ 'ct_id' => $user_obj->ID,
35
+ 'ct_username' => $user_obj,
36
+ 'ct_name' => $user_obj->display_name,
37
+ 'ct_email' => $user_obj->user_email,
38
+ 'ct_signed_up' => $user_obj->user_registered,
39
+ 'ct_role' => implode( ', ', $user_obj->roles ),
40
+ 'ct_posts' => count_user_posts( $user_id ),
41
+ );
42
+
43
+ }
44
+
45
+ }
46
+
47
+ }
inc/find-spam/ClassCleantalkUsersListTableSpam.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class ABPCTUsersListTableSpam extends ABPCTUsersListTable
5
+ {
6
+
7
+ function prepare_items(){
8
+
9
+ $columns = $this->get_columns();
10
+ $this->_column_headers = array( $columns, array(), array() );
11
+
12
+ $per_page_option = get_current_screen()->get_option( 'per_page', 'option' );
13
+ $per_page = get_user_meta( get_current_user_id(), $per_page_option, true );
14
+ if( ! $per_page ) {
15
+ $per_page = 10;
16
+ }
17
+
18
+ $spam_users = $this->getSpam();
19
+
20
+ $this->set_pagination_args( array(
21
+ 'total_items' => $spam_users->get_total(),
22
+ 'per_page' => $per_page,
23
+ ) );
24
+
25
+ $current_page = (int) $this->get_pagenum();
26
+
27
+ $spam_users_to_show = array_slice( $spam_users->get_results(), ( ( $current_page - 1 ) * $per_page ), $per_page );
28
+
29
+ foreach( $spam_users_to_show as $user_id ) {
30
+
31
+ $user_obj = get_userdata( $user_id );
32
+
33
+ $this->items[] = array(
34
+ 'ct_id' => $user_obj->ID,
35
+ 'ct_username' => $user_obj,
36
+ 'ct_name' => $user_obj->display_name,
37
+ 'ct_email' => $user_obj->user_email,
38
+ 'ct_signed_up' => $user_obj->user_registered,
39
+ 'ct_role' => implode( ', ', $user_obj->roles ),
40
+ 'ct_posts' => count_user_posts( $user_id ),
41
+ );
42
+
43
+ }
44
+
45
+ }
46
+
47
+ function extra_tablenav( $which ) {
48
+ ?>
49
+ <div class="alignleft actions bulkactions">
50
+ <button type="button" id="ct_get_csv_file" class="button action"><?php esc_html_e( 'Download results in CSV', 'cleantalk' ) ?></button>
51
+ </div>
52
+ <?php
53
+ }
54
+
55
+ }
js/apbct-disable-comments.min.js ADDED
@@ -0,0 +1,2 @@
 
 
1
+ "use strict";wp.domReady(function(){wp.blocks&&wp.blocks.getBlockTypes().forEach(function(e){apbctDisableComments.disabled_blocks.includes(e.name)&&wp.blocks.unregisterBlockType(e.name)})});
2
+ //# sourceMappingURL=apbct-disable-comments.min.js.map
js/apbct-disable-comments.min.js.map ADDED
@@ -0,0 +1 @@
 
1
+ {"version":3,"sources":["apbct-disable-comments.js"],"names":["wp","domReady","blocks","getBlockTypes","forEach","block","apbctDisableComments","disabled_blocks","includes","name","unregisterBlockType"],"mappings":"AAAA,aACAA,GAAGC,SAAS,WACPD,GAAGE,QACNF,GAAGE,OAAOC,gBAAgBC,QAAQ,SAAUC,GACvCC,qBAAqBC,gBAAgBC,SAASH,EAAMI,OACvDT,GAAGE,OAAOQ,oBAAoBL,EAAMI","file":"apbct-disable-comments.min.js","sourcesContent":["\"use strict\";\r\nwp.domReady(function () {\r\n\tif (wp.blocks) {\r\n\t\twp.blocks.getBlockTypes().forEach(function (block) {\r\n\t\t\tif (apbctDisableComments.disabled_blocks.includes(block.name)) {\r\n\t\t\t\twp.blocks.unregisterBlockType(block.name);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n});\r\n"]}
js/apbct-public.min.js CHANGED
@@ -1,2 +1,2 @@
1
- function apbct_js_keys__set_input_value(e,t,n,o){if(null!==document.getElementById(n.input_name)){var i=document.getElementById(n.input_name).value;document.getElementById(n.input_name).value=document.getElementById(n.input_name).value.replace(i,e.js_key)}}if(function(){var e=new Date,t=(new Date).getTime(),n=!0,o=[],i=0;function a(e,t){document.cookie=e+"="+encodeURIComponent(t)+"; path=/"}function c(e,t,n){"function"==typeof window.addEventListener?e.addEventListener(t,n):e.attachEvent(t,n)}function r(e,t,n){"function"==typeof window.removeEventListener?e.removeEventListener(t,n):e.detachEvent(t,n)}a("ct_ps_timestamp",Math.floor((new Date).getTime()/1e3)),a("ct_fkp_timestamp","0"),a("ct_pointer_data","0"),a("ct_timezone","0"),setTimeout(function(){a("ct_timezone",e.getTimezoneOffset()/60*-1)},1e3);var u=function(e){a("ct_fkp_timestamp",Math.floor((new Date).getTime()/1e3)),r(window,"mousedown",u),r(window,"keydown",u)},l=setInterval(function(){n=!0},150),m=setInterval(function(){a("ct_pointer_data",JSON.stringify(o))},1200),s=function(e){!0===n&&(o.push([Math.round(e.clientY),Math.round(e.clientX),Math.round((new Date).getTime()-t)]),n=!1,50<=++i&&(r(window,"mousemove",s),clearInterval(l),clearInterval(m)))};c(window,"mousemove",s),c(window,"mousedown",u),c(window,"keydown",u);var d,p,f,v,_,g,b=!0,w={orientation:{alpha:{},beta:{},gamma:{}},motion:{x:{},y:{},z:{}}};var y=setInterval(function(){var e=+new Date;w.orientation.alpha[e]=d,w.orientation.beta[e]=p,w.orientation.gamma[e]=f,w.motion.x[e]=v,w.motion.y[e]=_,w.motion.z[e]=g,a("abpct_hyro_acc_collect",JSON.stringify(w))},1e3);setTimeout(function(){clearInterval(y)},1e4),window.DeviceOrientationEvent&&c(window,"deviceorientation",function(e){var t,n,o,i=0,a=0,c=0;if(b)return i=e.alpha,a=e.beta,c=e.gamma,void(b=!1);t=e.alpha-i,n=e.beta-a,o=e.gamma-c,d=parseInt(t,10),p=parseInt(n,10),f=parseInt(o,10)}),window.DeviceMotionEvent&&c(window,"devicemotion",function(e){v=parseInt(e.accelerationIncludingGravity.x,10),_=parseInt(e.accelerationIncludingGravity.y,10),g=parseInt(e.accelerationIncludingGravity.z,10)}),c(window,"DOMContentLoaded",function(){a("apbct_visible_fields",0),a("apbct_visible_fields_count",0),setTimeout(function(){for(var e=0;e<document.forms.length;e++){var t=document.forms[e];t.onsubmit_prev=t.onsubmit,t.onsubmit=function(e){var t=[];for(var n in this.elements)isNaN(+n)||(t[n]=this.elements[n]);var o=(t=t.filter(function(o){return"none"!==getComputedStyle(o).display&&"hidden"!==getComputedStyle(o).visibility&&"0"!==getComputedStyle(o).opacity&&"hidden"!==o.getAttribute("type")&&"submit"!==o.getAttribute("type")&&""!==o.value&&null!==o.getAttribute("name")&&("radio"===o.getAttribute("type")&&t.forEach(function(e,t,n){o.getAttribute("name")!==e.getAttribute("name")||!1}),!0)})).length,i="";t.forEach(function(e,t,n){i+=" "+e.getAttribute("name")}),a("apbct_visible_fields",i=i.trim()),a("apbct_visible_fields_count",o),e.target.onsubmit_prev instanceof Function&&setTimeout(function(){e.target.onsubmit_prev.call(e.target,e)},500)}}},1e3)})}(),"undefined"!=typeof jQuery){function apbct_sendAJAXRequest(o,t,n){var i=t.callback||null,a=t.notJson||null,e=t.timeout||15e3;n=n||null;o._ajax_nonce=ctPublic._ajax_nonce,jQuery.ajax({type:"POST",url:ctPublic._ajax_url,data:o,success:function(e){a||(e=JSON.parse(e)),e.error||i&&i(e,o,t,n)},error:function(e,t,n){console.log("APBCT_AJAX_ERROR"),console.log(o),console.log(e),console.log(t),console.log(n)},timeout:e})}jQuery(document).ajaxComplete(function(e,t,n){var o;t.responseText&&-1!==t.responseText.indexOf('"apbct')&&void 0!==(o=JSON.parse(t.responseText)).apbct&&(o=o.apbct).blocked&&alert(o.comment)})}
2
- //# sourceMappingURL=apbct-public.min.js.map
1
+ function apbct_js_keys__set_input_value(e,t,n,o){if(null!==document.getElementById(n.input_name)){var i=document.getElementById(n.input_name).value;document.getElementById(n.input_name).value=document.getElementById(n.input_name).value.replace(i,e.js_key)}}if(!function(){var e=new Date,t=(new Date).getTime(),n=!0,o=[],i=0;function a(e,t){document.cookie=e+"="+encodeURIComponent(t)+"; path=/"}function c(e,t,n){"function"==typeof window.addEventListener?e.addEventListener(t,n):e.attachEvent(t,n)}function r(e,t,n){"function"==typeof window.removeEventListener?e.removeEventListener(t,n):e.detachEvent(t,n)}a("ct_ps_timestamp",Math.floor((new Date).getTime()/1e3)),a("ct_fkp_timestamp","0"),a("ct_pointer_data","0"),a("ct_timezone","0"),setTimeout(function(){a("ct_timezone",e.getTimezoneOffset()/60*-1)},1e3);var u=function(){a("ct_fkp_timestamp",Math.floor((new Date).getTime()/1e3)),r(window,"mousedown",u),r(window,"keydown",u)},l=setInterval(function(){n=!0},150),m=setInterval(function(){a("ct_pointer_data",JSON.stringify(o))},1200),s=function(e){!0===n&&(o.push([Math.round(e.clientY),Math.round(e.clientX),Math.round((new Date).getTime()-t)]),n=!1,50<=++i&&(r(window,"mousemove",s),clearInterval(l),clearInterval(m)))};c(window,"mousemove",s),c(window,"mousedown",u),c(window,"keydown",u);var d,p,f,v,_,g,b=!0,w={orientation:{alpha:{},beta:{},gamma:{}},motion:{x:{},y:{},z:{}}};var y=setInterval(function(){var e=+new Date;w.orientation.alpha[e]=d,w.orientation.beta[e]=p,w.orientation.gamma[e]=f,w.motion.x[e]=v,w.motion.y[e]=_,w.motion.z[e]=g,a("abpct_hyro_acc_collect",JSON.stringify(w))},1e3);setTimeout(function(){clearInterval(y)},1e4),window.DeviceOrientationEvent&&c(window,"deviceorientation",function(e){var t,n,o,i=0,a=0,c=0;if(b)return i=e.alpha,a=e.beta,c=e.gamma,void(b=!1);t=e.alpha-i,n=e.beta-a,o=e.gamma-c,d=parseInt(t,10),p=parseInt(n,10),f=parseInt(o,10)}),window.DeviceMotionEvent&&c(window,"devicemotion",function(e){v=parseInt(e.accelerationIncludingGravity.x,10),_=parseInt(e.accelerationIncludingGravity.y,10),g=parseInt(e.accelerationIncludingGravity.z,10)}),c(window,"DOMContentLoaded",function(){a("apbct_visible_fields",0),a("apbct_visible_fields_count",0),setTimeout(function(){for(var e=0;e<document.forms.length;e++){var t=document.forms[e];t.onsubmit_prev=t.onsubmit,t.onsubmit=function(e){var t=[];for(var n in this.elements)isNaN(+n)||(t[n]=this.elements[n]);var o=(t=t.filter(function(o){return"none"!==getComputedStyle(o).display&&"hidden"!==getComputedStyle(o).visibility&&"0"!==getComputedStyle(o).opacity&&"hidden"!==o.getAttribute("type")&&"submit"!==o.getAttribute("type")&&""!==o.value&&null!==o.getAttribute("name")&&("radio"===o.getAttribute("type")&&t.forEach(function(e,t,n){o.getAttribute("name")!==e.getAttribute("name")||!1}),!0)})).length,i="";t.forEach(function(e,t,n){i+=" "+e.getAttribute("name")}),a("apbct_visible_fields",i=i.trim()),a("apbct_visible_fields_count",o),e.target.onsubmit_prev instanceof Function&&setTimeout(function(){e.target.onsubmit_prev.call(e.target,e)},500)}}},1e3)})}(),"undefined"!=typeof jQuery){function apbct_sendAJAXRequest(o,t,n){var i=t.callback||null,a=t.notJson||null,e=t.timeout||15e3;n=n||null;o._ajax_nonce=ctPublic._ajax_nonce,jQuery.ajax({type:"POST",url:ctPublic._ajax_url,data:o,success:function(e){a||(e=JSON.parse(e)),e.error||i&&i(e,o,t,n)},error:function(e,t,n){console.log("APBCT_AJAX_ERROR"),console.log(o),console.log(e),console.log(t),console.log(n)},timeout:e})}jQuery(document).ajaxComplete(function(e,t,n){var o;t.responseText&&-1!==t.responseText.indexOf('"apbct')&&void 0!==(o=JSON.parse(t.responseText)).apbct&&(o=o.apbct).blocked&&alert(o.comment)})}
2
+ //# sourceMappingURL=apbct-public.min.js.map
js/apbct-public.min.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["apbct-public.js"],"names":["apbct_js_keys__set_input_value","result","data","params","obj","document","getElementById","input_name","ct_input_value","value","replace","js_key","ct_date","Date","ctTimeMs","getTime","ctMouseEventTimerFlag","ctMouseData","ctMouseDataCounter","ctSetCookieSec","c_name","cookie","encodeURIComponent","apbct_attach_event_handler","elem","event","callback","window","addEventListener","attachEvent","apbct_remove_event_handler","removeEventListener","detachEvent","Math","floor","setTimeout","getTimezoneOffset","ctFunctionFirstKey","ctMouseReadInterval","setInterval","ctMouseWriteDataInterval","JSON","stringify","ctFunctionMouseMove","push","round","clientY","clientX","clearInterval","globalAlpha","globalBeta","globalGamma","globalAccX","globalAccY","globalAccZ","isFirstTimeHyro","output","orientation","alpha","beta","gamma","motion","x","y","z","collect","timestamp","DeviceOrientationEvent","alphaOffset","betaOffset","gammaOffset","parseInt","DeviceMotionEvent","accelerationIncludingGravity","i","forms","length","form","onsubmit_prev","onsubmit","elements","key","this","isNaN","visible_fields_count","filter","getComputedStyle","display","visibility","opacity","getAttribute","forEach","el","j","els","visible_fields","trim","target","Function","call","jQuery","apbct_sendAJAXRequest","notJson","timeout","_ajax_nonce","ctPublic","ajax","type","url","_ajax_url","success","parse","error","jqXHR","textStatus","errorThrown","console","log","ajaxComplete","xhr","settings","response","responseText","indexOf","apbct","blocked","alert","comment"],"mappings":"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","file":"apbct-public.min.js","sourcesContent":["(function() {\r\n\r\n\tvar ct_date = new Date(),\r\n\t\tctTimeMs = new Date().getTime(),\r\n\t\tctMouseEventTimerFlag = true, //Reading interval flag\r\n\t\tctMouseData = [],\r\n\t\tctMouseDataCounter = 0;\r\n\r\n\tfunction ctSetCookieSec(c_name, value) {\r\n\t\tdocument.cookie = c_name + \"=\" + encodeURIComponent(value) + \"; path=/\";\r\n\t}\r\n\r\n\tfunction apbct_attach_event_handler(elem, event, callback){\r\n\t\tif(typeof window.addEventListener === \"function\") elem.addEventListener(event, callback);\r\n\t\telse elem.attachEvent(event, callback);\r\n\t}\r\n\r\n\tfunction apbct_remove_event_handler(elem, event, callback){\r\n\t\tif(typeof window.removeEventListener === \"function\") elem.removeEventListener(event, callback);\r\n\t\telse elem.detachEvent(event, callback);\r\n\t}\r\n\r\n\tctSetCookieSec(\"ct_ps_timestamp\", Math.floor(new Date().getTime()/1000));\r\n\tctSetCookieSec(\"ct_fkp_timestamp\", \"0\");\r\n\tctSetCookieSec(\"ct_pointer_data\", \"0\");\r\n\tctSetCookieSec(\"ct_timezone\", \"0\");\r\n\r\n\tsetTimeout(function(){\r\n\t\tctSetCookieSec(\"ct_timezone\", ct_date.getTimezoneOffset()/60*(-1));\r\n\t},1000);\r\n\r\n\t//Writing first key press timestamp\r\n\tvar ctFunctionFirstKey = function output(event){\r\n\t\tvar KeyTimestamp = Math.floor(new Date().getTime()/1000);\r\n\t\tctSetCookieSec(\"ct_fkp_timestamp\", KeyTimestamp);\r\n\t\tctKeyStopStopListening();\r\n\t};\r\n\r\n\t//Reading interval\r\n\tvar ctMouseReadInterval = setInterval(function(){\r\n\t\tctMouseEventTimerFlag = true;\r\n\t}, 150);\r\n\r\n\t//Writting interval\r\n\tvar ctMouseWriteDataInterval = setInterval(function(){\r\n\t\tctSetCookieSec(\"ct_pointer_data\", JSON.stringify(ctMouseData));\r\n\t}, 1200);\r\n\r\n\t//Logging mouse position each 150 ms\r\n\tvar ctFunctionMouseMove = function output(event){\r\n\t\tif(ctMouseEventTimerFlag === true){\r\n\r\n\t\t\tctMouseData.push([\r\n\t\t\t\tMath.round(event.clientY),\r\n\t\t\t\tMath.round(event.clientX),\r\n\t\t\t\tMath.round(new Date().getTime() - ctTimeMs)\r\n\t\t\t]);\r\n\r\n\t\t\tctMouseDataCounter++;\r\n\t\t\tctMouseEventTimerFlag = false;\r\n\t\t\tif(ctMouseDataCounter >= 50){\r\n\t\t\t\tctMouseStopData();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t//Stop mouse observing function\r\n\tfunction ctMouseStopData(){\r\n\t\tapbct_remove_event_handler(window, \"mousemove\", ctFunctionMouseMove);\r\n\t\tclearInterval(ctMouseReadInterval);\r\n\t\tclearInterval(ctMouseWriteDataInterval);\r\n\t}\r\n\r\n\t//Stop key listening function\r\n\tfunction ctKeyStopStopListening(){\r\n\t\tapbct_remove_event_handler(window, \"mousedown\", ctFunctionFirstKey);\r\n\t\tapbct_remove_event_handler(window, \"keydown\", ctFunctionFirstKey);\r\n\t}\r\n\r\n\tapbct_attach_event_handler(window, \"mousemove\", ctFunctionMouseMove);\r\n\tapbct_attach_event_handler(window, \"mousedown\", ctFunctionFirstKey);\r\n\tapbct_attach_event_handler(window, \"keydown\", ctFunctionFirstKey);\r\n\r\n\t// Hyroscope && Accelerometer data\r\n\r\n var isFirstTimeHyro = true;\r\n\r\n var output = {\r\n 'orientation' : {\r\n 'alpha' : {},\r\n 'beta' : {},\r\n 'gamma' : {}\r\n },\r\n 'motion' : {\r\n 'x' : {},\r\n 'y' : {},\r\n 'z' : {}\r\n }\r\n };\r\n\r\n var globalAlpha, globalBeta, globalGamma, globalAccX, globalAccY, globalAccZ;\r\n\r\n function handleOrientation(event) {\r\n\r\n var alphaOffset = 0;\r\n var betaOffset = 0;\r\n var gammaOffset = 0;\r\n var alpha = 0;\r\n var beta = 0;\r\n var gamma = 0;\r\n if(isFirstTimeHyro){\r\n alphaOffset = event.alpha;\r\n betaOffset = event.beta;\r\n gammaOffset = event.gamma;\r\n isFirstTimeHyro = false;\r\n return;\r\n }\r\n\r\n alpha = event.alpha - alphaOffset;\r\n beta = event.beta - betaOffset;\r\n gamma = event.gamma - gammaOffset;\r\n globalAlpha = parseInt( alpha, 10 );\r\n globalBeta = parseInt( beta, 10 );\r\n globalGamma = parseInt( gamma, 10 );\r\n\r\n }\r\n\r\n function handleMotion(event) {\r\n\r\n globalAccX = parseInt( event.accelerationIncludingGravity.x, 10 );\r\n globalAccY = parseInt( event.accelerationIncludingGravity.y, 10 );\r\n globalAccZ = parseInt( event.accelerationIncludingGravity.z, 10 );\r\n\r\n }\r\n\r\n var collect = setInterval( function(){\r\n var timestamp = ( + new Date() );\r\n output.orientation.alpha[timestamp] = globalAlpha;\r\n output.orientation.beta[timestamp] = globalBeta;\r\n output.orientation.gamma[timestamp] = globalGamma;\r\n output.motion.x[timestamp] = globalAccX;\r\n output.motion.y[timestamp] = globalAccY;\r\n output.motion.z[timestamp] = globalAccZ;\r\n ctSetCookieSec(\"abpct_hyro_acc_collect\", JSON.stringify(output))\r\n }, 1000 );\r\n setTimeout( function(){\r\n clearInterval( collect );\r\n }, 10000 );\r\n\r\n if (window.DeviceOrientationEvent) {\r\n apbct_attach_event_handler(window, \"deviceorientation\", handleOrientation);\r\n }\r\n if (window.DeviceMotionEvent) {\r\n apbct_attach_event_handler(window, \"devicemotion\", handleMotion);\r\n }\r\n\r\n\t// Ready function\r\n\tfunction apbct_ready(){\r\n\t\tctSetCookieSec(\"apbct_visible_fields\", 0);\r\n\t\tctSetCookieSec(\"apbct_visible_fields_count\", 0);\r\n\t\tsetTimeout(function(){\r\n\t\t\tfor(var i = 0; i < document.forms.length; i++){\r\n\t\t\t\tvar form = document.forms[i];\r\n\r\n\t\t\t\tform.onsubmit_prev = form.onsubmit;\r\n\t\t\t\tform.onsubmit = function(event){\r\n\r\n\t\t\t\t\t// Get only fields\r\n\t\t\t\t\tvar elements = [];\r\n\t\t\t\t\tfor(var key in this.elements){\r\n\t\t\t\t\t\tif(!isNaN(+key))\r\n\t\t\t\t\t\t\telements[key] = this.elements[key];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Filter fields\r\n\t\t\t\t\telements = elements.filter(function(elem){\r\n\r\n\t\t\t\t\t\tvar pass = true;\r\n\r\n\t\t\t\t\t\t// Filter fields\r\n\t\t\t\t\t\tif( getComputedStyle(elem).display === \"none\" || // hidden\r\n\t\t\t\t\t\t\tgetComputedStyle(elem).visibility === \"hidden\" || // hidden\r\n\t\t\t\t\t\t\tgetComputedStyle(elem).opacity === \"0\" || // hidden\r\n\t\t\t\t\t\t\telem.getAttribute(\"type\") === \"hidden\" || // type == hidden\r\n\t\t\t\t\t\t\telem.getAttribute(\"type\") === \"submit\" || // type == submit\r\n\t\t\t\t\t\t\telem.value === \"\" || // empty value\r\n\t\t\t\t\t\t\telem.getAttribute('name') === null\r\n\t\t\t\t\t\t){\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Filter elements with same names for type == radio\r\n\t\t\t\t\t\tif(elem.getAttribute(\"type\") === \"radio\"){\r\n\t\t\t\t\t\t\telements.forEach(function(el, j, els){\r\n\t\t\t\t\t\t\t\tif(elem.getAttribute('name') === el.getAttribute('name')){\r\n\t\t\t\t\t\t\t\t\tpass = false;\r\n\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// Visible fields count\r\n\t\t\t\t\tvar visible_fields_count = elements.length;\r\n\r\n\t\t\t\t\t// Visible fields\r\n\t\t\t\t\tvar visible_fields = '';\r\n\t\t\t\t\telements.forEach(function(elem, i, elements){\r\n\t\t\t\t\t\tvisible_fields += \" \" + elem.getAttribute(\"name\");\r\n\t\t\t\t\t});\r\n\t\t\t\t\tvisible_fields = visible_fields.trim();\r\n\r\n\t\t\t\t\tctSetCookieSec(\"apbct_visible_fields\", visible_fields);\r\n\t\t\t\t\tctSetCookieSec(\"apbct_visible_fields_count\", visible_fields_count);\r\n\r\n\t\t\t\t\t// Call previous submit action\r\n\t\t\t\t\tif(event.target.onsubmit_prev instanceof Function){\r\n\t\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\t\tevent.target.onsubmit_prev.call(event.target, event);\r\n\t\t\t\t\t\t}, 500);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}, 1000);\r\n\t}\r\n\tapbct_attach_event_handler(window, \"DOMContentLoaded\", apbct_ready);\r\n\r\n\t//(function(open) {\r\n\t// XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {\r\n\t// this.addEventListener(\"readystatechange\", function() {\r\n\t// }, false);\r\n\t// open.call(this, method, url, async, user, pass);\r\n\t// };\r\n\t//})(XMLHttpRequest.prototype.open);\r\n\r\n}());\r\n\r\nfunction apbct_js_keys__set_input_value(result, data, params, obj){\r\n\tif (document.getElementById(params.input_name) !== null) {\r\n\t\tvar ct_input_value = document.getElementById(params.input_name).value;\r\n\t\tdocument.getElementById(params.input_name).value = document.getElementById(params.input_name).value.replace(ct_input_value, result.js_key);\r\n\t}\r\n}\r\n\r\nif(typeof jQuery !== 'undefined') {\r\n\r\n\t// Capturing responses and output block message for unknown AJAX forms\r\n\tjQuery(document).ajaxComplete(function (event, xhr, settings) {\r\n\t\tif (xhr.responseText && xhr.responseText.indexOf('\"apbct') !== -1) {\r\n\t\t\tvar response = JSON.parse(xhr.responseText);\r\n\t\t\tif (typeof response.apbct !== 'undefined') {\r\n\t\t\t\tvar response = response.apbct;\r\n\t\t\t\tif (response.blocked) {\r\n\t\t\t\t\talert(response.comment);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tfunction apbct_sendAJAXRequest(data, params, obj) {\r\n\r\n\t\t// Default params\r\n\t\tvar callback = params.callback || null;\r\n\t\tvar notJson = params.notJson || null;\r\n\t\tvar timeout = params.timeout || 15000;\r\n\t\tvar obj = obj || null;\r\n\r\n\t\tdata._ajax_nonce = ctPublic._ajax_nonce;\r\n\r\n\t\tjQuery.ajax({\r\n\t\t\ttype: \"POST\",\r\n\t\t\turl: ctPublic._ajax_url,\r\n\t\t\tdata: data,\r\n\t\t\tsuccess: function (result) {\r\n\t\t\t\tif (!notJson) result = JSON.parse(result);\r\n\t\t\t\tif (result.error) {\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (callback)\r\n\t\t\t\t\t\tcallback(result, data, params, obj);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\terror: function (jqXHR, textStatus, errorThrown) {\r\n\t\t\t\tconsole.log('APBCT_AJAX_ERROR');\r\n\t\t\t\tconsole.log(data);\r\n\t\t\t\tconsole.log(jqXHR);\r\n\t\t\t\tconsole.log(textStatus);\r\n\t\t\t\tconsole.log(errorThrown);\r\n\t\t\t},\r\n\t\t\ttimeout: timeout\r\n\t\t});\r\n\t}\r\n}"]}
1
+ {"version":3,"sources":["apbct-public.js"],"names":["apbct_js_keys__set_input_value","result","data","params","obj","document","getElementById","input_name","ct_input_value","value","replace","js_key","ct_date","Date","ctTimeMs","getTime","ctMouseEventTimerFlag","ctMouseData","ctMouseDataCounter","ctSetCookieSec","c_name","cookie","encodeURIComponent","apbct_attach_event_handler","elem","event","callback","window","addEventListener","attachEvent","apbct_remove_event_handler","removeEventListener","detachEvent","Math","floor","setTimeout","getTimezoneOffset","ctFunctionFirstKey","ctMouseReadInterval","setInterval","ctMouseWriteDataInterval","JSON","stringify","ctFunctionMouseMove","push","round","clientY","clientX","clearInterval","globalAlpha","globalBeta","globalGamma","globalAccX","globalAccY","globalAccZ","isFirstTimeHyro","output","orientation","alpha","beta","gamma","motion","x","y","z","collect","timestamp","DeviceOrientationEvent","alphaOffset","betaOffset","gammaOffset","parseInt","DeviceMotionEvent","accelerationIncludingGravity","i","forms","length","form","onsubmit_prev","onsubmit","elements","key","this","isNaN","visible_fields_count","filter","getComputedStyle","display","visibility","opacity","getAttribute","forEach","el","j","els","visible_fields","trim","target","Function","call","jQuery","apbct_sendAJAXRequest","notJson","timeout","_ajax_nonce","ctPublic","ajax","type","url","_ajax_url","success","parse","error","jqXHR","textStatus","errorThrown","console","log","ajaxComplete","xhr","settings","response","responseText","indexOf","apbct","blocked","alert","comment"],"mappings":"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","file":"apbct-public.min.js","sourcesContent":["(function() {\r\n\r\n\tvar ct_date = new Date(),\r\n\t\tctTimeMs = new Date().getTime(),\r\n\t\tctMouseEventTimerFlag = true, //Reading interval flag\r\n\t\tctMouseData = [],\r\n\t\tctMouseDataCounter = 0;\r\n\r\n\tfunction ctSetCookieSec(c_name, value) {\r\n\t\tdocument.cookie = c_name + \"=\" + encodeURIComponent(value) + \"; path=/\";\r\n\t}\r\n\r\n\tfunction apbct_attach_event_handler(elem, event, callback){\r\n\t\tif(typeof window.addEventListener === \"function\") elem.addEventListener(event, callback);\r\n\t\telse elem.attachEvent(event, callback);\r\n\t}\r\n\r\n\tfunction apbct_remove_event_handler(elem, event, callback){\r\n\t\tif(typeof window.removeEventListener === \"function\") elem.removeEventListener(event, callback);\r\n\t\telse elem.detachEvent(event, callback);\r\n\t}\r\n\r\n\tctSetCookieSec(\"ct_ps_timestamp\", Math.floor(new Date().getTime()/1000));\r\n\tctSetCookieSec(\"ct_fkp_timestamp\", \"0\");\r\n\tctSetCookieSec(\"ct_pointer_data\", \"0\");\r\n\tctSetCookieSec(\"ct_timezone\", \"0\");\r\n\r\n\tsetTimeout(function(){\r\n\t\tctSetCookieSec(\"ct_timezone\", ct_date.getTimezoneOffset()/60*(-1));\r\n\t},1000);\r\n\r\n\t//Writing first key press timestamp\r\n\tvar ctFunctionFirstKey = function output(event){\r\n\t\tvar KeyTimestamp = Math.floor(new Date().getTime()/1000);\r\n\t\tctSetCookieSec(\"ct_fkp_timestamp\", KeyTimestamp);\r\n\t\tctKeyStopStopListening();\r\n\t};\r\n\r\n\t//Reading interval\r\n\tvar ctMouseReadInterval = setInterval(function(){\r\n\t\tctMouseEventTimerFlag = true;\r\n\t}, 150);\r\n\r\n\t//Writting interval\r\n\tvar ctMouseWriteDataInterval = setInterval(function(){\r\n\t\tctSetCookieSec(\"ct_pointer_data\", JSON.stringify(ctMouseData));\r\n\t}, 1200);\r\n\r\n\t//Logging mouse position each 150 ms\r\n\tvar ctFunctionMouseMove = function output(event){\r\n\t\tif(ctMouseEventTimerFlag === true){\r\n\r\n\t\t\tctMouseData.push([\r\n\t\t\t\tMath.round(event.clientY),\r\n\t\t\t\tMath.round(event.clientX),\r\n\t\t\t\tMath.round(new Date().getTime() - ctTimeMs)\r\n\t\t\t]);\r\n\r\n\t\t\tctMouseDataCounter++;\r\n\t\t\tctMouseEventTimerFlag = false;\r\n\t\t\tif(ctMouseDataCounter >= 50){\r\n\t\t\t\tctMouseStopData();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t//Stop mouse observing function\r\n\tfunction ctMouseStopData(){\r\n\t\tapbct_remove_event_handler(window, \"mousemove\", ctFunctionMouseMove);\r\n\t\tclearInterval(ctMouseReadInterval);\r\n\t\tclearInterval(ctMouseWriteDataInterval);\r\n\t}\r\n\r\n\t//Stop key listening function\r\n\tfunction ctKeyStopStopListening(){\r\n\t\tapbct_remove_event_handler(window, \"mousedown\", ctFunctionFirstKey);\r\n\t\tapbct_remove_event_handler(window, \"keydown\", ctFunctionFirstKey);\r\n\t}\r\n\r\n\tapbct_attach_event_handler(window, \"mousemove\", ctFunctionMouseMove);\r\n\tapbct_attach_event_handler(window, \"mousedown\", ctFunctionFirstKey);\r\n\tapbct_attach_event_handler(window, \"keydown\", ctFunctionFirstKey);\r\n\r\n\t// Hyroscope && Accelerometer data\r\n\r\n var isFirstTimeHyro = true;\r\n\r\n var output = {\r\n 'orientation' : {\r\n 'alpha' : {},\r\n 'beta' : {},\r\n 'gamma' : {}\r\n },\r\n 'motion' : {\r\n 'x' : {},\r\n 'y' : {},\r\n 'z' : {}\r\n }\r\n };\r\n\r\n var globalAlpha, globalBeta, globalGamma, globalAccX, globalAccY, globalAccZ;\r\n\r\n function handleOrientation(event) {\r\n\r\n var alphaOffset = 0;\r\n var betaOffset = 0;\r\n var gammaOffset = 0;\r\n var alpha = 0;\r\n var beta = 0;\r\n var gamma = 0;\r\n if(isFirstTimeHyro){\r\n alphaOffset = event.alpha;\r\n betaOffset = event.beta;\r\n gammaOffset = event.gamma;\r\n isFirstTimeHyro = false;\r\n return;\r\n }\r\n\r\n alpha = event.alpha - alphaOffset;\r\n beta = event.beta - betaOffset;\r\n gamma = event.gamma - gammaOffset;\r\n globalAlpha = parseInt( alpha, 10 );\r\n globalBeta = parseInt( beta, 10 );\r\n globalGamma = parseInt( gamma, 10 );\r\n\r\n }\r\n\r\n function handleMotion(event) {\r\n\r\n globalAccX = parseInt( event.accelerationIncludingGravity.x, 10 );\r\n globalAccY = parseInt( event.accelerationIncludingGravity.y, 10 );\r\n globalAccZ = parseInt( event.accelerationIncludingGravity.z, 10 );\r\n\r\n }\r\n\r\n var collect = setInterval( function(){\r\n var timestamp = ( + new Date() );\r\n output.orientation.alpha[timestamp] = globalAlpha;\r\n output.orientation.beta[timestamp] = globalBeta;\r\n output.orientation.gamma[timestamp] = globalGamma;\r\n output.motion.x[timestamp] = globalAccX;\r\n output.motion.y[timestamp] = globalAccY;\r\n output.motion.z[timestamp] = globalAccZ;\r\n ctSetCookieSec(\"abpct_hyro_acc_collect\", JSON.stringify(output))\r\n }, 1000 );\r\n setTimeout( function(){\r\n clearInterval( collect );\r\n }, 10000 );\r\n\r\n if (window.DeviceOrientationEvent) {\r\n apbct_attach_event_handler(window, \"deviceorientation\", handleOrientation);\r\n }\r\n if (window.DeviceMotionEvent) {\r\n apbct_attach_event_handler(window, \"devicemotion\", handleMotion);\r\n }\r\n\r\n\t// Ready function\r\n\tfunction apbct_ready(){\r\n\t\tctSetCookieSec(\"apbct_visible_fields\", 0);\r\n\t\tctSetCookieSec(\"apbct_visible_fields_count\", 0);\r\n\t\tsetTimeout(function(){\r\n\t\t\tfor(var i = 0; i < document.forms.length; i++){\r\n\t\t\t\tvar form = document.forms[i];\r\n\r\n\t\t\t\tform.onsubmit_prev = form.onsubmit;\r\n\t\t\t\tform.onsubmit = function(event){\r\n\r\n\t\t\t\t\t// Get only fields\r\n\t\t\t\t\tvar elements = [];\r\n\t\t\t\t\tfor(var key in this.elements){\r\n\t\t\t\t\t\tif(!isNaN(+key))\r\n\t\t\t\t\t\t\telements[key] = this.elements[key];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Filter fields\r\n\t\t\t\t\telements = elements.filter(function(elem){\r\n\r\n\t\t\t\t\t\tvar pass = true;\r\n\r\n\t\t\t\t\t\t// Filter fields\r\n\t\t\t\t\t\tif( getComputedStyle(elem).display === \"none\" || // hidden\r\n\t\t\t\t\t\t\tgetComputedStyle(elem).visibility === \"hidden\" || // hidden\r\n\t\t\t\t\t\t\tgetComputedStyle(elem).opacity === \"0\" || // hidden\r\n\t\t\t\t\t\t\telem.getAttribute(\"type\") === \"hidden\" || // type == hidden\r\n\t\t\t\t\t\t\telem.getAttribute(\"type\") === \"submit\" || // type == submit\r\n\t\t\t\t\t\t\telem.value === \"\" || // empty value\r\n\t\t\t\t\t\t\telem.getAttribute('name') === null\r\n\t\t\t\t\t\t){\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Filter elements with same names for type == radio\r\n\t\t\t\t\t\tif(elem.getAttribute(\"type\") === \"radio\"){\r\n\t\t\t\t\t\t\telements.forEach(function(el, j, els){\r\n\t\t\t\t\t\t\t\tif(elem.getAttribute('name') === el.getAttribute('name')){\r\n\t\t\t\t\t\t\t\t\tpass = false;\r\n\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// Visible fields count\r\n\t\t\t\t\tvar visible_fields_count = elements.length;\r\n\r\n\t\t\t\t\t// Visible fields\r\n\t\t\t\t\tvar visible_fields = '';\r\n\t\t\t\t\telements.forEach(function(elem, i, elements){\r\n\t\t\t\t\t\tvisible_fields += \" \" + elem.getAttribute(\"name\");\r\n\t\t\t\t\t});\r\n\t\t\t\t\tvisible_fields = visible_fields.trim();\r\n\r\n\t\t\t\t\tctSetCookieSec(\"apbct_visible_fields\", visible_fields);\r\n\t\t\t\t\tctSetCookieSec(\"apbct_visible_fields_count\", visible_fields_count);\r\n\r\n\t\t\t\t\t// Call previous submit action\r\n\t\t\t\t\tif(event.target.onsubmit_prev instanceof Function){\r\n\t\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\t\tevent.target.onsubmit_prev.call(event.target, event);\r\n\t\t\t\t\t\t}, 500);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}, 1000);\r\n\t}\r\n\tapbct_attach_event_handler(window, \"DOMContentLoaded\", apbct_ready);\r\n\r\n\t//(function(open) {\r\n\t// XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {\r\n\t// this.addEventListener(\"readystatechange\", function() {\r\n\t// }, false);\r\n\t// open.call(this, method, url, async, user, pass);\r\n\t// };\r\n\t//})(XMLHttpRequest.prototype.open);\r\n\r\n}());\r\n\r\nfunction apbct_js_keys__set_input_value(result, data, params, obj){\r\n\tif (document.getElementById(params.input_name) !== null) {\r\n\t\tvar ct_input_value = document.getElementById(params.input_name).value;\r\n\t\tdocument.getElementById(params.input_name).value = document.getElementById(params.input_name).value.replace(ct_input_value, result.js_key);\r\n\t}\r\n}\r\n\r\nif(typeof jQuery !== 'undefined') {\r\n\r\n\t// Capturing responses and output block message for unknown AJAX forms\r\n\tjQuery(document).ajaxComplete(function (event, xhr, settings) {\r\n\t\tif (xhr.responseText && xhr.responseText.indexOf('\"apbct') !== -1) {\r\n\t\t\tvar response = JSON.parse(xhr.responseText);\r\n\t\t\tif (typeof response.apbct !== 'undefined') {\r\n\t\t\t\tvar response = response.apbct;\r\n\t\t\t\tif (response.blocked) {\r\n\t\t\t\t\talert(response.comment);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tfunction apbct_sendAJAXRequest(data, params, obj) {\r\n\r\n\t\t// Default params\r\n\t\tvar callback = params.callback || null;\r\n\t\tvar notJson = params.notJson || null;\r\n\t\tvar timeout = params.timeout || 15000;\r\n\t\tvar obj = obj || null;\r\n\r\n\t\tdata._ajax_nonce = ctPublic._ajax_nonce;\r\n\r\n\t\tjQuery.ajax({\r\n\t\t\ttype: \"POST\",\r\n\t\t\turl: ctPublic._ajax_url,\r\n\t\t\tdata: data,\r\n\t\t\tsuccess: function (result) {\r\n\t\t\t\tif (!notJson) result = JSON.parse(result);\r\n\t\t\t\tif (result.error) {\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (callback)\r\n\t\t\t\t\t\tcallback(result, data, params, obj);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\terror: function (jqXHR, textStatus, errorThrown) {\r\n\t\t\t\tconsole.log('APBCT_AJAX_ERROR');\r\n\t\t\t\tconsole.log(data);\r\n\t\t\t\tconsole.log(jqXHR);\r\n\t\t\t\tconsole.log(textStatus);\r\n\t\t\t\tconsole.log(errorThrown);\r\n\t\t\t},\r\n\t\t\ttimeout: timeout\r\n\t\t});\r\n\t}\r\n}"]}
js/cleantalk-comments-checkspam.min.js CHANGED
@@ -1,2 +1,2 @@
1
- var ct_working=!(String.prototype.printf=function(){var e=this;for(var t in arguments){var c=e.substring(0,e.indexOf("%s",0)),_=e.substring(e.indexOf("%s",0)+2,e.length);e=c+arguments[t]+_}return e}),ct_new_check=!0,ct_cooling_down_flag=!1,ct_close_animate=!0,ct_accurate_check=!1,ct_pause=!1,ct_prev_accurate=ctCommentsCheck.ct_prev_accurate,ct_prev_from=ctCommentsCheck.ct_prev_from,ct_prev_till=ctCommentsCheck.ct_prev_till,ct_cool_down_time=9e4,ct_requests_counter=0,ct_max_requests=60,ct_ajax_nonce=ctCommentsCheck.ct_ajax_nonce,ct_comments_total=0,ct_comments_checked=0,ct_comments_spam=0,ct_comments_bad=0,ct_unchecked="unset",ct_date_from=0,ct_date_till=0;function animate_comment(e,t){ct_close_animate?.3==e?jQuery("#comment-"+t).fadeTo(200,e,function(){animate_comment(1,t)}):jQuery("#comment-"+t).fadeTo(200,e,function(){animate_comment(.3,t)}):ct_close_animate=!0}function ct_clear_comments(){var e=0,t=0;jQuery("#ct_allow_date_range").is(":checked")&&(e=jQuery("#ct_date_range_from").val(),t=jQuery("#ct_date_range_till").val());var c={action:"ajax_clear_comments",security:ct_ajax_nonce,from:e,till:t};jQuery.ajax({type:"POST",url:ajaxurl,data:c,success:function(e){ct_show_info(),ct_send_comments()}})}function ct_cooling_down_toggle(){ct_cooling_down_flag=!1,ct_send_comments(),ct_show_info()}function ct_send_comments(){if(1!=ct_cooling_down_flag){if(ct_max_requests<=ct_requests_counter)return setTimeout(ct_cooling_down_toggle,ct_cool_down_time),void(ct_cooling_down_flag=!(ct_requests_counter=0));ct_requests_counter++;var e={action:"ajax_check_comments",security:ct_ajax_nonce,new_check:ct_new_check,unchecked:ct_unchecked};ct_accurate_check&&(e.accurate_check=!0),ct_date_from&&ct_date_till&&(e.from=ct_date_from,e.till=ct_date_till),jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){if(e=jQuery.parseJSON(e),parseInt(e.error))if(ct_working=!1,confirm(e.error_message+". Do you want to proceed?"))ct_send_comments();else{var t="edit-comments.php?page=ct_check_spam";0!=ct_date_from&&0!=ct_date_till&&(t+="&from="+ct_date_from+"&till="+ct_date_till),location.href=t}else if(ct_new_check=!1,1==parseInt(e.end)||!0===ct_pause){1==parseInt(e.end)&&(document.cookie="ct_paused_comments_check=0; path=/"),ct_working=!1,jQuery("#ct_working_message").hide();t="edit-comments.php?page=ct_check_spam";0!=ct_date_from&&0!=ct_date_till&&(t+="&from="+ct_date_from+"&till="+ct_date_till),location.href=t}else if(0==parseInt(e.end)){ct_comments_checked=+ct_comments_checked+ +e.checked,ct_comments_spam=+ct_comments_spam+ +e.spam,ct_comments_bad=+ct_comments_bad+ +e.bad,ct_unchecked=ct_comments_total-ct_comments_checked-ct_comments_bad;var c=(c=String(ctCommentsCheck.ct_status_string)).printf(ct_comments_total,ct_comments_checked,ct_comments_spam,ct_comments_bad);0<parseInt(ct_comments_spam)&&(c+=ctCommentsCheck.ct_status_string_warning),jQuery("#ct_checking_status").html(c),jQuery("#ct_error_message").hide(),+ct_comments_total<ct_comments_checked+ct_comments_bad&&(document.cookie="ct_comments_start_check=1; path=/",document.cookie="ct_comments_safe_check=1; path=/",location.href="edit-comments.php?page=ct_check_spam"),ct_send_comments()}},error:function(e,t,c){jQuery("#ct_error_message").show(),jQuery("#cleantalk_ajax_error").html(t),jQuery("#cleantalk_js_func").html("Check comments"),setTimeout(ct_send_comments(),3e3)},timeout:25e3})}}function ct_show_info(){if(ct_working){if(1==ct_cooling_down_flag)return jQuery("#ct_cooling_notice").html("Waiting for API to cool down. (About a minute)"),void jQuery("#ct_cooling_notice").show();if(jQuery("#ct_cooling_notice").hide(),setTimeout(ct_show_info,3e3),!ct_comments_total){var e={action:"ajax_info_comments",security:ct_ajax_nonce};ct_date_from&&ct_date_till&&(e.from=ct_date_from,e.till=ct_date_till),jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){e=jQuery.parseJSON(e),jQuery("#ct_checking_status").html(e.message),ct_comments_total=e.total,ct_comments_spam=e.spam,ct_comments_checked=e.checked,ct_comments_bad=e.bad},error:function(e,t,c){jQuery("#ct_error_message").show(),jQuery("#cleantalk_ajax_error").html(t),jQuery("#cleantalk_js_func").html("Check comments"),setTimeout(ct_show_info(),3e3)},timeout:15e3})}}}function ct_insert_comments(t){var e={action:"ajax_insert_comments",security:ct_ajax_nonce};(t=t||null)&&(e.delete=!0),jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){t?alert(ctCommentsCheck.ct_comments_deleted+" "+e+" "+ctCommentsCheck.ct_comments_added_after):alert(ctCommentsCheck.ct_comments_added+" "+e+" "+ctCommentsCheck.ct_comments_added_after)}})}function ct_delete_all(){var e={action:"ajax_delete_all",security:ct_ajax_nonce};jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){0<e?(jQuery("#cleantalk_comments_left").html(e),ct_delete_all()):location.href="edit-comments.php?page=ct_check_spam"},error:function(e,t,c){jQuery("#ct_error_message").show(),jQuery("#cleantalk_ajax_error").html(t),jQuery("#cleantalk_js_func").html("Check comments"),setTimeout(ct_delete_all(),3e3)},timeout:25e3})}function ct_delete_checked(){ids=Array();var e=0;jQuery("input[id^=cb-select-][id!=cb-select-all-1]").each(function(){jQuery(this).prop("checked")&&(ids[e]=jQuery(this).attr("id").substring(10),e++)});var t={action:"ajax_delete_checked",security:ct_ajax_nonce,ids:ids};jQuery.ajax({type:"POST",url:ajaxurl,data:t,success:function(e){location.href="edit-comments.php?page=ct_check_spam"},error:function(e,t,c){jQuery("#ct_error_message").show(),jQuery("#cleantalk_ajax_error").html(t),jQuery("#cleantalk_js_func").html("Check comments"),setTimeout(ct_delete_checked(),3e3)},timeout:15e3})}function ct_toggle_depended(e,t){t=t||null;var c=jQuery(e.data("depended"));e.data("state")||t?(e.data("state",!1),c.prop("disabled",!0),c.removeProp("checked"),c.data("depended")&&ct_toggle_depended(c,!0)):(e.data("state",!0),c.removeProp("disabled"))}jQuery(document).ready(function(){jQuery("#ct_allow_date_range").data({depended:".ct_date",state:!1}),ct_prev_accurate&&jQuery("#ct_accurate_check").prop("checked",!0),ct_prev_from&&(jQuery("#ct_allow_date_range").prop("checked",!0).data("state",!0),jQuery("#ct_date_range_from").removeProp("disabled").val(ct_prev_from),jQuery("#ct_date_range_till").removeProp("disabled").val(ct_prev_till)),jQuery("#ct_allow_date_range, #ct_accurate_check").on("change",function(){ct_toggle_depended(jQuery(this))});var a=jQuery("#ct_date_range_from, #ct_date_range_till").datepicker({dateFormat:"M d yy",maxDate:"+0D",changeMonth:!0,changeYear:!0,showAnim:"slideDown",onSelect:function(e){var t="ct_date_range_from"==this.id?"minDate":"maxDate",c=jQuery(this).data("datepicker"),_=jQuery.datepicker.parseDate(c.settings.dateFormat||jQuery.datepicker._defaults.dateFormat,e,c.settings);a.not(this).datepicker("option",t,_)}});function e(e){e=e||null,jQuery("#ct_allow_date_range").is(":checked")&&(ct_date_from=jQuery("#ct_date_range_from").val(),ct_date_till=jQuery("#ct_date_range_till").val(),""==ct_date_from||""==ct_date_till)?alert("Please, specify a date range."):(jQuery("#ct_accurate_check").is(":checked")&&(ct_accurate_check=!0),jQuery(".ct_to_hide").hide(),jQuery("#ct_working_message").show(),jQuery("#ct_preloader").show(),jQuery("#ct_pause").show(),ct_working=!0,e?(ct_show_info(),ct_send_comments()):ct_clear_comments())}jQuery("#ct_check_spam_button").click(function(){e(!(document.cookie="ct_paused_comments_check=0; path=/"))}),jQuery("#ct_proceed_check_button").click(function(){e(!0)}),jQuery("#ct_pause").on("click",function(){ct_pause=!0;var e={accurate:ct_accurate_check,from:ct_date_from,till:ct_date_till};document.cookie="ct_paused_comments_check="+JSON.stringify(e)+"; path=/"}),jQuery("#ct_insert_comments").click(function(){ct_insert_comments()}),jQuery("#ct_delete_comments").click(function(){ct_insert_comments(!0)}),jQuery("#ct_delete_all").click(function(){if(!confirm(ctCommentsCheck.ct_confirm_deletion_all))return!1;jQuery(".ct_to_hide").hide(),jQuery("#ct_checking_status").hide(),jQuery("#ct_search_info").hide(),jQuery("#ct_preloader").show(),jQuery("#ct_deleting_message").show(),jQuery("#ct_stop_deletion").show(),jQuery("html, body").animate({scrollTop:0},"slow"),ct_delete_all()}),jQuery("#ct_delete_checked").click(function(){if(!confirm(ctCommentsCheck.ct_confirm_deletion_checked))return!1;ct_delete_checked()}),jQuery("#ct_stop_deletion").click(function(){location.href="edit-comments.php?page=ct_check_spam"}),jQuery(".cleantalk_delete_button").click(function(){id=jQuery(this).attr("data-id"),ids=Array(),ids[0]=id;var e={action:"ajax_delete_checked",security:ct_ajax_nonce,ids:ids};jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){ct_close_animate=!1,jQuery("#comment-"+id).hide(),jQuery("#comment-"+id).remove(),ct_close_animate=!0}})}),jQuery(".cleantalk_delete_button").click(function(){id=jQuery(this).attr("data-id"),animate_comment(.3,id)}),jQuery(".cleantalk_comment").mouseover(function(){id=jQuery(this).attr("data-id"),jQuery("#cleantalk_button_set_"+id).show()}),jQuery(".cleantalk_comment").mouseout(function(){id=jQuery(this).attr("data-id"),jQuery("#cleantalk_button_set_"+id).hide()}),jQuery(".cleantalk_delete_from_list_button").click(function(){var t=jQuery(this).attr("data-id"),e={action:"ajax_ct_approve_comment",security:ct_ajax_nonce,id:t};jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){jQuery("#comment-"+t).fadeOut("slow",function(){jQuery("#comment-"+t).remove()})}});e={action:"ct_feedback_comment",security:ct_ajax_nonce,comment_id:t,comment_status:"approve"};jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){},error:function(e,t,c){},timeout:5e3})}),"1"===ctCommentsCheck.start&&(document.cookie="ct_comments_start_check=0; expires="+new Date(0).toUTCString()+"; path=/",jQuery("#ct_check_spam_button").click())});
2
- //# sourceMappingURL=cleantalk-comments-checkspam.min.js.map
1
+ var ct_working=!(String.prototype.printf=function(){var t=this;for(var e in arguments){var c=t.substring(0,t.indexOf("%s",0)),_=t.substring(t.indexOf("%s",0)+2,t.length);t=c+arguments[e]+_}return t}),ct_new_check=!0,ct_cooling_down_flag=!1,ct_close_animate=!0,ct_accurate_check=!1,ct_pause=!1,ct_prev_accurate=ctCommentsCheck.ct_prev_accurate,ct_prev_from=ctCommentsCheck.ct_prev_from,ct_prev_till=ctCommentsCheck.ct_prev_till,ct_cool_down_time=9e4,ct_requests_counter=0,ct_max_requests=60,ct_ajax_nonce=ctCommentsCheck.ct_ajax_nonce,ct_comments_total=0,ct_comments_checked=0,ct_comments_spam=0,ct_comments_bad=0,ct_unchecked="unset",ct_date_from=0,ct_date_till=0;function animate_comment(t,e){ct_close_animate?.3==t?jQuery("#comment-"+e).fadeTo(200,t,function(){animate_comment(1,e)}):jQuery("#comment-"+e).fadeTo(200,t,function(){animate_comment(.3,e)}):ct_close_animate=!0}function ct_clear_comments(){var t=0,e=0;jQuery("#ct_allow_date_range").is(":checked")&&(t=jQuery("#ct_date_range_from").val(),e=jQuery("#ct_date_range_till").val());var c={action:"ajax_clear_comments",security:ct_ajax_nonce,from:t,till:e};jQuery.ajax({type:"POST",url:ajaxurl,data:c,success:function(t){ct_show_info(),ct_send_comments()}})}function ct_cooling_down_toggle(){ct_cooling_down_flag=!1,ct_send_comments(),ct_show_info()}function ct_send_comments(){if(!0!==ct_cooling_down_flag){if(ct_max_requests<=ct_requests_counter)return setTimeout(ct_cooling_down_toggle,ct_cool_down_time),void(ct_cooling_down_flag=!(ct_requests_counter=0));ct_requests_counter++;var t={action:"ajax_check_comments",security:ct_ajax_nonce,new_check:ct_new_check,unchecked:ct_unchecked};ct_accurate_check&&(t.accurate_check=!0),ct_date_from&&ct_date_till&&(t.from=ct_date_from,t.till=ct_date_till),jQuery.ajax({type:"POST",url:ajaxurl,data:t,success:function(t){if(t=jQuery.parseJSON(t),parseInt(t.error))if(ct_working=!1,confirm(t.error_message+". Do you want to proceed?"))ct_send_comments();else{var e="edit-comments.php?page=ct_check_spam";0!=ct_date_from&&0!=ct_date_till&&(e+="&from="+ct_date_from+"&till="+ct_date_till),location.href=e}else if(ct_new_check=!1,1==parseInt(t.end)||!0===ct_pause){1==parseInt(t.end)&&(document.cookie="ct_paused_comments_check=0; path=/"),ct_working=!1,jQuery("#ct_working_message").hide();e="edit-comments.php?page=ct_check_spam";0!=ct_date_from&&0!=ct_date_till&&(e+="&from="+ct_date_from+"&till="+ct_date_till),location.href=e}else if(0==parseInt(t.end)){ct_comments_checked+=t.checked,ct_comments_spam+=t.spam,ct_comments_bad+=t.bad,ct_unchecked=ct_comments_total-ct_comments_checked-ct_comments_bad;var c=(c=String(ctCommentsCheck.ct_status_string)).printf(ct_comments_total,ct_comments_checked,ct_comments_spam,ct_comments_bad);0<parseInt(ct_comments_spam)&&(c+=ctCommentsCheck.ct_status_string_warning),jQuery("#ct_checking_status").html(c),jQuery("#ct_error_message").hide(),+ct_comments_total<ct_comments_checked+ct_comments_bad&&(document.cookie="ct_comments_start_check=1; path=/",document.cookie="ct_comments_safe_check=1; path=/",location.href="edit-comments.php?page=ct_check_spam"),ct_send_comments()}},error:function(t,e,c){jQuery("#ct_error_message").show(),jQuery("#cleantalk_ajax_error").html(e),jQuery("#cleantalk_js_func").html("Check comments"),setTimeout(ct_send_comments(),3e3)},timeout:25e3})}}function ct_show_info(){if(ct_working){if(1==ct_cooling_down_flag)return jQuery("#ct_cooling_notice").html("Waiting for API to cool down. (About a minute)"),void jQuery("#ct_cooling_notice").show();if(jQuery("#ct_cooling_notice").hide(),setTimeout(ct_show_info,3e3),!ct_comments_total){var t={action:"ajax_info_comments",security:ct_ajax_nonce};ct_date_from&&ct_date_till&&(t.from=ct_date_from,t.till=ct_date_till),jQuery.ajax({type:"POST",url:ajaxurl,data:t,success:function(t){t=jQuery.parseJSON(t),jQuery("#ct_checking_status").html(t.message),ct_comments_total=t.total,ct_comments_spam=t.spam,ct_comments_checked=t.checked,ct_comments_bad=t.bad},error:function(t,e,c){jQuery("#ct_error_message").show(),jQuery("#cleantalk_ajax_error").html(e),jQuery("#cleantalk_js_func").html("Check comments"),setTimeout(ct_show_info(),3e3)},timeout:15e3})}}}function ct_toggle_depended(t,e){e=e||null;var c=jQuery(t.data("depended"));t.data("state")||e?(t.data("state",!1),c.prop("disabled",!0),c.removeProp("checked"),c.data("depended")&&ct_toggle_depended(c,!0)):(t.data("state",!0),c.removeProp("disabled"))}jQuery(document).ready(function(){jQuery("#ct_allow_date_range").data({depended:".ct_date",state:!1}),ct_prev_accurate&&jQuery("#ct_accurate_check").prop("checked",!0),ct_prev_from&&(jQuery("#ct_allow_date_range").prop("checked",!0).data("state",!0),jQuery("#ct_date_range_from").removeProp("disabled").val(ct_prev_from),jQuery("#ct_date_range_till").removeProp("disabled").val(ct_prev_till)),jQuery("#ct_allow_date_range, #ct_accurate_check").on("change",function(){ct_toggle_depended(jQuery(this))}),jQuery.datepicker.setDefaults(jQuery.datepicker.regional.en);var a=jQuery("#ct_date_range_from, #ct_date_range_till").datepicker({dateFormat:"M d yy",maxDate:"+0D",changeMonth:!0,changeYear:!0,showAnim:"slideDown",onSelect:function(t){var e="ct_date_range_from"==this.id?"minDate":"maxDate",c=jQuery(this).data("datepicker"),_=jQuery.datepicker.parseDate(c.settings.dateFormat||jQuery.datepicker._defaults.dateFormat,t,c.settings);a.not(this).datepicker("option",e,_)}});function t(t){t=t||null,jQuery("#ct_allow_date_range").is(":checked")&&(ct_date_from=jQuery("#ct_date_range_from").val(),ct_date_till=jQuery("#ct_date_range_till").val(),""==ct_date_from||""==ct_date_till)?alert("Please, specify a date range."):(jQuery("#ct_accurate_check").is(":checked")&&(ct_accurate_check=!0),jQuery(".ct_to_hide").hide(),jQuery("#ct_working_message").show(),jQuery("#ct_preloader").show(),jQuery("#ct_pause").show(),ct_working=!0,t?(ct_show_info(),ct_send_comments()):ct_clear_comments())}jQuery("#ct_check_spam_button").click(function(){t(!(document.cookie="ct_paused_comments_check=0; path=/"))}),jQuery("#ct_proceed_check_button").click(function(){t(!0)}),jQuery("#ct_pause").on("click",function(){ct_pause=!0;var t={accurate:ct_accurate_check,from:ct_date_from,till:ct_date_till};document.cookie="ct_paused_comments_check="+JSON.stringify(t)+"; path=/"}),"1"===ctCommentsCheck.start&&(document.cookie="ct_comments_start_check=0; expires="+new Date(0).toUTCString()+"; path=/",jQuery("#ct_check_spam_button").click())});
2
+ //# sourceMappingURL=cleantalk-comments-checkspam.min.js.map
js/cleantalk-comments-checkspam.min.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["cleantalk-comments-checkspam.js"],"names":["ct_working","String","prototype","printf","formatted","this","arg","arguments","before_formatted","substring","indexOf","after_formatted","length","ct_new_check","ct_cooling_down_flag","ct_close_animate","ct_accurate_check","ct_pause","ct_prev_accurate","ctCommentsCheck","ct_prev_from","ct_prev_till","ct_cool_down_time","ct_requests_counter","ct_max_requests","ct_ajax_nonce","ct_comments_total","ct_comments_checked","ct_comments_spam","ct_comments_bad","ct_unchecked","ct_date_from","ct_date_till","animate_comment","to","id","jQuery","fadeTo","ct_clear_comments","from","till","is","val","data","action","security","ajax","type","url","ajaxurl","success","msg","ct_show_info","ct_send_comments","ct_cooling_down_toggle","setTimeout","new_check","unchecked","parseJSON","parseInt","error","confirm","error_message","new_href","location","href","end","document","cookie","hide","checked","spam","bad","status_string","ct_status_string","ct_status_string_warning","html","jqXHR","textStatus","errorThrown","show","timeout","message","total","ct_insert_comments","delete_comments","alert","ct_comments_deleted","ct_comments_added_after","ct_comments_added","ct_delete_all","ct_delete_checked","ids","Array","cnt","each","prop","attr","ct_toggle_depended","obj","secondary","depended","removeProp","ready","state","on","dates","datepicker","dateFormat","maxDate","changeMonth","changeYear","showAnim","onSelect","selectedDate","option","instance","date","parseDate","settings","_defaults","not","ct_start_check","continue_check","click","ct_check","accurate","JSON","stringify","ct_confirm_deletion_all","animate","scrollTop","ct_confirm_deletion_checked","remove","mouseover","mouseout","ct_id","fadeOut","comment_id","comment_status","start","Date","toUTCString"],"mappings":"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","file":"cleantalk-comments-checkspam.min.js","sourcesContent":["// Printf for JS\r\nString.prototype.printf = function(){\r\n var formatted = this;\r\n for( var arg in arguments ) {\r\n\t\tvar before_formatted = formatted.substring(0, formatted.indexOf(\"%s\", 0));\r\n\t\tvar after_formatted = formatted.substring(formatted.indexOf(\"%s\", 0)+2, formatted.length);\r\n\t\tformatted = before_formatted + arguments[arg] + after_formatted;\r\n }\r\n return formatted;\r\n};\r\n\r\n// Flags\r\nvar ct_working = false,\r\n\tct_new_check = true,\r\n\tct_cooling_down_flag = false,\r\n\tct_close_animate = true,\r\n\tct_accurate_check = false,\r\n\tct_pause = false,\r\n\tct_prev_accurate = ctCommentsCheck.ct_prev_accurate,\r\n\tct_prev_from = ctCommentsCheck.ct_prev_from,\t\r\n\tct_prev_till = ctCommentsCheck.ct_prev_till;\r\n// Settings\r\nvar ct_cool_down_time = 90000,\r\n\tct_requests_counter = 0,\r\n\tct_max_requests = 60;\r\n// Variables\r\nvar ct_ajax_nonce = ctCommentsCheck.ct_ajax_nonce,\r\n\tct_comments_total = 0,\r\n\tct_comments_checked = 0,\r\n\tct_comments_spam = 0,\r\n\tct_comments_bad = 0,\r\n\tct_unchecked = 'unset',\r\n\tct_date_from = 0,\r\n\tct_date_till = 0;\r\n\r\nfunction animate_comment(to,id){\r\n\tif(ct_close_animate){\r\n\t\tif(to==0.3){\r\n\t\t\tjQuery('#comment-'+id).fadeTo(200,to,function(){\r\n\t\t\t\tanimate_comment(1,id)\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tjQuery('#comment-'+id).fadeTo(200,to,function(){\r\n\t\t\t\tanimate_comment(0.3,id)\r\n\t\t\t});\r\n\t\t}\r\n\t}else{\r\n\t\tct_close_animate=true;\r\n\t}\r\n}\r\n\r\nfunction ct_clear_comments(){\r\n\r\n\tvar from = 0, till = 0;\r\n\tif(jQuery('#ct_allow_date_range').is(':checked')) {\r\n\t\tfrom = jQuery('#ct_date_range_from').val();\r\n\t\ttill = jQuery('#ct_date_range_till').val();\r\n\t}\r\n\tvar data = {\r\n\t\t'action' : 'ajax_clear_comments',\r\n\t\t'security' : ct_ajax_nonce,\r\n\t\t'from' : from,\r\n\t\t'till' : till\r\n\t};\r\n\r\n\tjQuery.ajax({\r\n\t\ttype: \"POST\",\r\n\t\turl: ajaxurl,\r\n\t\tdata: data,\r\n\t\tsuccess: function(msg){\r\n\t\t\tct_show_info();\r\n\t\t\tct_send_comments();\r\n\t\t}\r\n\t});\r\n}\r\n\r\n//Continues the check after cooldown time\r\n//Called by ct_send_users();\r\nfunction ct_cooling_down_toggle(){\r\n\tct_cooling_down_flag = false;\r\n\tct_send_comments();\r\n\tct_show_info();\r\n}\r\n\r\nfunction ct_send_comments(){\r\n\t\r\n\tif(ct_cooling_down_flag == true)\r\n\t\treturn;\r\n\t\r\n\tif(ct_requests_counter >= ct_max_requests){\r\n\t\tsetTimeout(ct_cooling_down_toggle, ct_cool_down_time);\r\n\t\tct_requests_counter = 0;\r\n\t\tct_cooling_down_flag = true;\r\n\t\treturn;\r\n\t}else{\r\n\t\tct_requests_counter++;\r\n\t}\r\n\t\r\n\tvar data = {\r\n\t\t'action': 'ajax_check_comments',\r\n\t\t'security': ct_ajax_nonce,\r\n\t\t'new_check': ct_new_check,\r\n\t\t'unchecked': ct_unchecked\r\n\t};\r\n\t\r\n\tif(ct_accurate_check)\r\n\t\tdata['accurate_check'] = true;\r\n\t\r\n\tif(ct_date_from && ct_date_till){\r\n\t\tdata['from'] = ct_date_from;\r\n\t\tdata['till'] = ct_date_till;\r\n\t}\r\n\t\r\n\tjQuery.ajax({\r\n\t\ttype: \"POST\",\r\n\t\turl: ajaxurl,\r\n\t\tdata: data,\r\n\t\tsuccess: function(msg){\r\n\t\t\t\r\n\t\t\tmsg = jQuery.parseJSON(msg);\r\n\t\t\t\r\n\t\t\tif(parseInt(msg.error)){\r\n\t\t\t\tct_working=false;\r\n\t\t\t\tif(!confirm(msg.error_message+\". Do you want to proceed?\")){\r\n\t\t\t\t\tvar new_href = 'edit-comments.php?page=ct_check_spam';\r\n\t\t\t\t\tif(ct_date_from != 0 && ct_date_till != 0)\r\n\t\t\t\t\t\tnew_href+='&from='+ct_date_from+'&till='+ct_date_till;\r\n\t\t\t\t\tlocation.href = new_href;\r\n\t\t\t\t}else\r\n\t\t\t\t\tct_send_comments();\r\n\t\t\t}else{\r\n\t\t\t\tct_new_check = false;\r\n\t\t\t\tif(parseInt(msg.end) == 1 || ct_pause === true){\r\n\t\t\t\t\tif(parseInt(msg.end) == 1)\r\n\t\t\t\t\t\tdocument.cookie = 'ct_paused_comments_check=0; path=/';\r\n\t\t\t\t\tct_working=false;\r\n\t\t\t\t\tjQuery('#ct_working_message').hide();\r\n\t\t\t\t\tvar new_href = 'edit-comments.php?page=ct_check_spam';\r\n\t\t\t\t\tif(ct_date_from != 0 && ct_date_till != 0)\r\n\t\t\t\t\t\tnew_href+='&from='+ct_date_from+'&till='+ct_date_till;\r\n\t\t\t\t\tlocation.href = new_href;\r\n\t\t\t\t}else if(parseInt(msg.end) == 0){\r\n\t\t\t\t\tct_comments_checked = +ct_comments_checked + +msg.checked;\r\n\t\t\t\t\tct_comments_spam = +ct_comments_spam + +msg.spam;\r\n\t\t\t\t\tct_comments_bad = +ct_comments_bad + +msg.bad;\r\n\t\t\t\t\tct_unchecked = ct_comments_total - ct_comments_checked - ct_comments_bad;\r\n\t\t\t\t\tvar status_string = String(ctCommentsCheck.ct_status_string);\r\n\t\t\t\t\tvar status_string = status_string.printf(ct_comments_total, ct_comments_checked, ct_comments_spam, ct_comments_bad);\r\n\t\t\t\t\tif(parseInt(ct_comments_spam) > 0)\r\n\t\t\t\t\t\tstatus_string += ctCommentsCheck.ct_status_string_warning;\r\n\t\t\t\t\tjQuery('#ct_checking_status').html(status_string);\r\n\t\t\t\t\tjQuery('#ct_error_message').hide();\r\n\t\t\t\t\t// If DB woks not properly\r\n\t\t\t\t\tif(+ct_comments_total < ct_comments_checked + ct_comments_bad){\r\n\t\t\t\t\t\tdocument.cookie = 'ct_comments_start_check=1; path=/';\r\n\t\t\t\t\t\tdocument.cookie = 'ct_comments_safe_check=1; path=/';\r\n\t\t\t\t\t\tlocation.href = 'edit-comments.php?page=ct_check_spam';\r\n\t\t\t\t\t}\r\n\t\t\t\t\tct_send_comments();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n error: function(jqXHR, textStatus, errorThrown) {\r\n\t\t\tjQuery('#ct_error_message').show();\r\n\t\t\tjQuery('#cleantalk_ajax_error').html(textStatus);\r\n\t\t\tjQuery('#cleantalk_js_func').html('Check comments');\r\n\t\t\tsetTimeout(ct_send_comments(), 3000); \r\n },\r\n timeout: 25000\r\n\t});\r\n}\r\nfunction ct_show_info(){\r\n\t\r\n\tif(ct_working){\r\n\t\t\r\n\t\tif(ct_cooling_down_flag == true){\r\n\t\t\tjQuery('#ct_cooling_notice').html('Waiting for API to cool down. (About a minute)');\r\n\t\t\tjQuery('#ct_cooling_notice').show();\r\n\t\t\treturn;\t\t\t\r\n\t\t}else{\r\n\t\t\tjQuery('#ct_cooling_notice').hide();\r\n\t\t}\t\r\n\t\t\r\n\t\tsetTimeout(ct_show_info, 3000);\r\n\t\t\r\n\t\tif(!ct_comments_total){\r\n\t\t\t\r\n\t\t\tvar data = {\r\n\t\t\t\t'action': 'ajax_info_comments',\r\n\t\t\t\t'security': ct_ajax_nonce\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tif(ct_date_from && ct_date_till){\r\n\t\t\t\tdata['from'] = ct_date_from;\r\n\t\t\t\tdata['till'] = ct_date_till;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tjQuery.ajax({\r\n\t\t\t\ttype: \"POST\",\r\n\t\t\t\turl: ajaxurl,\r\n\t\t\t\tdata: data,\r\n\t\t\t\tsuccess: function(msg){\r\n\t\t\t\t\tmsg = jQuery.parseJSON(msg);\r\n\t\t\t\t\tjQuery('#ct_checking_status').html(msg.message);\r\n\t\t\t\t\tct_comments_total = msg.total;\r\n\t\t\t\t\tct_comments_spam = msg.spam;\r\n\t\t\t\t\tct_comments_checked = msg.checked;\r\n\t\t\t\t\tct_comments_bad = msg.bad;\r\n\t\t\t\t},\r\n\t\t\t\terror: function(jqXHR, textStatus, errorThrown) {\r\n\t\t\t\t\tjQuery('#ct_error_message').show();\r\n\t\t\t\t\tjQuery('#cleantalk_ajax_error').html(textStatus);\r\n\t\t\t\t\tjQuery('#cleantalk_js_func').html('Check comments');\r\n\t\t\t\t\tsetTimeout(ct_show_info(), 3000); \r\n\t\t\t\t},\r\n\t\t\t\ttimeout: 15000\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\nfunction ct_insert_comments(delete_comments){\r\n\r\n delete_comments = delete_comments || null;\r\n\r\n\tvar data = {\r\n\t\t'action': 'ajax_insert_comments',\r\n\t\t'security': ct_ajax_nonce\r\n\t};\r\n\t\r\n\tif(delete_comments)\r\n\t\tdata['delete'] = true;\r\n\t\r\n\tjQuery.ajax({\r\n\t\ttype: \"POST\",\r\n\t\turl: ajaxurl,\r\n\t\tdata: data,\r\n\t\tsuccess: function(msg){\r\n\t\t\tif(delete_comments)\r\n\t\t\t\talert(ctCommentsCheck.ct_comments_deleted + ' ' + msg + ' ' + ctCommentsCheck.ct_comments_added_after);\r\n\t\t\telse\r\n\t\t\t\talert(ctCommentsCheck.ct_comments_added + ' ' + msg + ' ' + ctCommentsCheck.ct_comments_added_after);\r\n\t\t}\r\n\t});\r\n}\r\nfunction ct_delete_all(){\r\n\t\r\n\tvar data = {\r\n\t\t'action': 'ajax_delete_all',\r\n\t\t'security': ct_ajax_nonce\r\n\t};\r\n\t\r\n\tjQuery.ajax({\r\n\t\ttype: \"POST\",\r\n\t\turl: ajaxurl,\r\n\t\tdata: data,\r\n\t\tsuccess: function(msg){\r\n\t\t\tif(msg>0){\r\n\t\t\t\tjQuery('#cleantalk_comments_left').html(msg);\r\n\t\t\t\tct_delete_all();\r\n\t\t\t}else{\r\n\t\t\t\tlocation.href='edit-comments.php?page=ct_check_spam';\r\n\t\t\t}\r\n\t\t},\t\t\t\r\n\t\terror: function(jqXHR, textStatus, errorThrown) {\r\n\t\t\tjQuery('#ct_error_message').show();\r\n\t\t\tjQuery('#cleantalk_ajax_error').html(textStatus);\r\n\t\t\tjQuery('#cleantalk_js_func').html('Check comments');\r\n\t\t\tsetTimeout(ct_delete_all(), 3000); \r\n\t\t},\r\n\t\ttimeout: 25000\r\n\t});\r\n}\r\nfunction ct_delete_checked(){\r\n\t\r\n\tids=Array();\r\n\tvar cnt=0;\r\n\tjQuery('input[id^=cb-select-][id!=cb-select-all-1]').each(function(){\r\n\t\tif(jQuery(this).prop('checked')){\r\n\t\t\tids[cnt]=jQuery(this).attr('id').substring(10);\r\n\t\t\tcnt++;\r\n\t\t}\r\n\t});\r\n\tvar data = {\r\n\t\t'action': 'ajax_delete_checked',\r\n\t\t'security': ct_ajax_nonce,\r\n\t\t'ids':ids\r\n\t};\r\n\t\r\n\tjQuery.ajax({\r\n\t\ttype: \"POST\",\r\n\t\turl: ajaxurl,\r\n\t\tdata: data,\r\n\t\tsuccess: function(msg){\r\n\t\t\tlocation.href='edit-comments.php?page=ct_check_spam';\r\n\t\t},\r\n\t\terror: function(jqXHR, textStatus, errorThrown) {\r\n\t\t\tjQuery('#ct_error_message').show();\r\n\t\t\tjQuery('#cleantalk_ajax_error').html(textStatus);\r\n\t\t\tjQuery('#cleantalk_js_func').html('Check comments');\r\n\t\t\tsetTimeout(ct_delete_checked(), 3000); \r\n\t\t},\r\n\t\ttimeout: 15000\r\n\t});\r\n}\r\n\r\n// Function to toggle dependences\r\nfunction ct_toggle_depended(obj, secondary){\r\n\r\n secondary = secondary || null;\r\n\r\n\tvar depended = jQuery(obj.data('depended')),\r\n\t\tstate = obj.data('state');\r\n\t\t\r\n\tif(!state && !secondary){\r\n\t\tobj.data('state', true);\r\n\t\tdepended.removeProp('disabled');\r\n\t}else{\r\n\t\tobj.data('state', false);\r\n\t\tdepended.prop('disabled', true);\r\n\t\tdepended.removeProp('checked');\r\n\t\tif(depended.data('depended'))\r\n\t\t\tct_toggle_depended(depended, true);\r\n\t}\r\n}\r\n\r\njQuery(document).ready(function(){\r\n\t\r\n\t// Setting dependences\r\n\t// jQuery('#ct_accurate_check') .data({'depended': '#ct_allow_date_range', 'state': false});\r\n\tjQuery('#ct_allow_date_range').data({'depended': '.ct_date', 'state': false});\r\n\t\r\n\t// Prev check parameters\r\n\tif(ct_prev_accurate){\r\n\t\tjQuery(\"#ct_accurate_check\").prop('checked', true);\r\n\t}\r\n\tif(ct_prev_from){\r\n\t\tjQuery(\"#ct_allow_date_range\").prop('checked', true).data('state', true);\r\n\t\tjQuery(\"#ct_date_range_from\").removeProp('disabled').val(ct_prev_from);\r\n\t\tjQuery(\"#ct_date_range_till\").removeProp('disabled').val(ct_prev_till);\r\n\t}\r\n\t\r\n\t// Toggle dependences\r\n\tjQuery(\"#ct_allow_date_range, #ct_accurate_check\").on('change', function(){\r\n\t\tct_toggle_depended(jQuery(this));\r\n\t});\r\n\t\t\t\r\n\tvar dates = jQuery('#ct_date_range_from, #ct_date_range_till').datepicker(\r\n\t\t{\r\n\t\t\tdateFormat: 'M d yy',\r\n\t\t\tmaxDate:\"+0D\",\r\n\t\t\tchangeMonth:true,\r\n\t\t\tchangeYear:true,\r\n\t\t\tshowAnim: 'slideDown',\r\n\t\t\tonSelect: function(selectedDate){\r\n\t\t\tvar option = this.id == \"ct_date_range_from\" ? \"minDate\" : \"maxDate\",\r\n\t\t\t\tinstance = jQuery( this ).data( \"datepicker\" ),\r\n\t\t\t\tdate = jQuery.datepicker.parseDate(\r\n\t\t\t\t\tinstance.settings.dateFormat || jQuery.datepicker._defaults.dateFormat,\r\n\t\t\t\t\tselectedDate, instance.settings);\r\n\t\t\t\tdates.not(this).datepicker(\"option\", option, date);\r\n\t\t\t}\r\n\t\t}\r\n\t);\r\n\t\r\n\tfunction ct_start_check(continue_check){\r\n\r\n continue_check = continue_check || null;\r\n\r\n\t\tif(jQuery('#ct_allow_date_range').is(':checked')){\r\n\t\t\t\r\n\t\t\tct_date_from = jQuery('#ct_date_range_from').val(),\r\n\t\t\tct_date_till = jQuery('#ct_date_range_till').val();\r\n\t\t\t\t\t\t\r\n\t\t\tif(!(ct_date_from != '' && ct_date_till != '')){\r\n\t\t\t\talert('Please, specify a date range.');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(jQuery('#ct_accurate_check').is(':checked')){\r\n\t\t\tct_accurate_check = true;\r\n\t\t}\r\n\t\t\r\n\t\tjQuery('.ct_to_hide').hide();\r\n\t\tjQuery('#ct_working_message').show();\r\n\t\tjQuery('#ct_preloader').show();\r\n\t\tjQuery('#ct_pause').show();\r\n\r\n\t\tct_working=true;\r\n\t\t\r\n\t\tif(continue_check){\r\n\t\t\tct_show_info();\r\n\t\t\tct_send_comments();\r\n\t\t}else\r\n\t\t\tct_clear_comments();\r\n\t\t\r\n\t}\r\n\t\r\n\t// Check comments\r\n\tjQuery(\"#ct_check_spam_button\").click(function(){\r\n\t\tdocument.cookie = 'ct_paused_comments_check=0; path=/';\r\n\t\tct_start_check(false);\r\n\t});\r\n\tjQuery(\"#ct_proceed_check_button\").click(function(){\r\n\t\tct_start_check(true);\r\n\t});\r\n\r\n\t// Pause the check\r\n\tjQuery('#ct_pause').on('click', function(){\r\n\t\tct_pause = true;\r\n\t\tvar ct_check = {\r\n\t\t\t'accurate': ct_accurate_check,\r\n\t\t\t'from' : ct_date_from,\r\n\t\t\t'till' : ct_date_till\r\n\t\t};\r\n\t\tdocument.cookie = 'ct_paused_comments_check=' + JSON.stringify(ct_check) + '; path=/';\r\n\t});\r\n\t\r\n\tjQuery(\"#ct_insert_comments\").click(function(){\r\n\t\tct_insert_comments();\r\n\t});\r\n\t\r\n\tjQuery(\"#ct_delete_comments\").click(function(){\r\n\t\tct_insert_comments(true);\r\n\t});\r\n\t\r\n\t// Delete all spam comments\r\n\tjQuery(\"#ct_delete_all\").click(function(){\r\n\t\t\r\n\t\tif (!confirm(ctCommentsCheck.ct_confirm_deletion_all))\r\n\t\t\treturn false;\r\n\t\t\r\n\t\tjQuery('.ct_to_hide').hide();\r\n\t\tjQuery('#ct_checking_status').hide();\r\n\t\tjQuery('#ct_search_info').hide();\r\n\t\tjQuery('#ct_preloader').show();\r\n\t\tjQuery('#ct_deleting_message').show();\r\n\t\tjQuery('#ct_stop_deletion').show();\r\n\t\tjQuery(\"html, body\").animate({ scrollTop: 0 }, \"slow\");\r\n\t\tct_delete_all();\r\n\t});\r\n\tjQuery(\"#ct_delete_checked\").click(function(){\r\n\t\tif (!confirm(ctCommentsCheck.ct_confirm_deletion_checked))\r\n\t\t\treturn false;\r\n\t\tct_delete_checked();\r\n\t});\r\n\t\r\n\tjQuery(\"#ct_stop_deletion\").click(function(){\r\n\t\tlocation.href='edit-comments.php?page=ct_check_spam';\r\n\t});\r\n\t\r\n\tjQuery(\".cleantalk_delete_button\").click(function(){\r\n\t\tid = jQuery(this).attr(\"data-id\");\r\n\t\tids=Array();\r\n\t\tids[0]=id;\r\n\t\tvar data = {\r\n\t\t\t'action': 'ajax_delete_checked',\r\n\t\t\t'security': ct_ajax_nonce,\r\n\t\t\t'ids':ids\r\n\t\t};\r\n\t\tjQuery.ajax({\r\n\t\t\ttype: \"POST\",\r\n\t\t\turl: ajaxurl,\r\n\t\t\tdata: data,\r\n\t\t\tsuccess: function(msg){\r\n\t\t\t\tct_close_animate=false;\r\n\t\t\t\tjQuery(\"#comment-\"+id).hide();\r\n\t\t\t\tjQuery(\"#comment-\"+id).remove();\r\n\t\t\t\tct_close_animate=true;\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n\t\r\n\tjQuery(\".cleantalk_delete_button\").click(function(){\r\n\t\tid = jQuery(this).attr(\"data-id\");\r\n\t\tanimate_comment(0.3, id);\r\n\t});\r\n\t\r\n\t//Show/hide action on mouse over/out\r\n\tjQuery(\".cleantalk_comment\").mouseover(function(){\r\n\t\tid = jQuery(this).attr(\"data-id\");\r\n\t\tjQuery(\"#cleantalk_button_set_\"+id).show();\r\n\t});\r\n\tjQuery(\".cleantalk_comment\").mouseout(function(){\r\n\t\tid = jQuery(this).attr(\"data-id\");\r\n\t\tjQuery(\"#cleantalk_button_set_\"+id).hide();\r\n\t});\r\n\t\r\n\t//Approve button\t\r\n\tjQuery(\".cleantalk_delete_from_list_button\").click(function(){\r\n\t\tvar ct_id = jQuery(this).attr(\"data-id\");\r\n\t\t\r\n\t\t// Approving\r\n\t\tvar data = {\r\n\t\t\t'action': 'ajax_ct_approve_comment',\r\n\t\t\t'security': ct_ajax_nonce,\r\n\t\t\t'id': ct_id\r\n\t\t};\r\n\t\tjQuery.ajax({\r\n\t\t\ttype: \"POST\",\r\n\t\t\turl: ajaxurl,\r\n\t\t\tdata: data,\r\n\t\t\tsuccess: function(msg){\r\n\t\t\t\tjQuery(\"#comment-\"+ct_id).fadeOut('slow', function(){\r\n\t\t\t\t\tjQuery(\"#comment-\"+ct_id).remove();\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t});\r\n\t\t\r\n\t\t// Positive feedback\r\n\t\tvar data = {\r\n\t\t\t'action': 'ct_feedback_comment',\r\n\t\t\t'security': ct_ajax_nonce,\r\n\t\t\t'comment_id': ct_id,\r\n\t\t\t'comment_status': 'approve'\r\n\t\t};\r\n\t\tjQuery.ajax({\r\n\t\t\ttype: \"POST\",\r\n\t\t\turl: ajaxurl,\r\n\t\t\tdata: data,\r\n\t\t\tsuccess: function(msg){\r\n\t\t\t\tif(msg == 1){\r\n\t\t\t\t\t// Success\r\n\t\t\t\t}\r\n\t\t\t\tif(msg == 0){\r\n\t\t\t\t\t// Error occurred\r\n\t\t\t\t}\r\n\t\t\t\tif(msg == 'no_hash'){\r\n\t\t\t\t\t// No hash\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\terror: function(jqXHR, textStatus, errorThrown) {\r\n\t\t\t\t\r\n\t\t\t},\r\n\t\t\ttimeout: 5000\r\n\t\t});\r\n\t});\r\n\tif(ctCommentsCheck.start === '1'){\r\n\t\tdocument.cookie = 'ct_comments_start_check=0; expires=' + new Date(0).toUTCString() + '; path=/';\r\n\t\tjQuery('#ct_check_spam_button').click();\t\r\n\t}\r\n});"]}
1
+ {"version":3,"sources":["cleantalk-comments-checkspam.js"],"names":["ct_working","String","prototype","printf","formatted","this","arg","arguments","before_formatted","substring","indexOf","after_formatted","length","ct_new_check","ct_cooling_down_flag","ct_close_animate","ct_accurate_check","ct_pause","ct_prev_accurate","ctCommentsCheck","ct_prev_from","ct_prev_till","ct_cool_down_time","ct_requests_counter","ct_max_requests","ct_ajax_nonce","ct_comments_total","ct_comments_checked","ct_comments_spam","ct_comments_bad","ct_unchecked","ct_date_from","ct_date_till","animate_comment","to","id","jQuery","fadeTo","ct_clear_comments","from","till","is","val","data","action","security","ajax","type","url","ajaxurl","success","msg","ct_show_info","ct_send_comments","ct_cooling_down_toggle","setTimeout","new_check","unchecked","parseJSON","parseInt","error","confirm","error_message","new_href","location","href","end","document","cookie","hide","checked","spam","bad","status_string","ct_status_string","ct_status_string_warning","html","jqXHR","textStatus","errorThrown","show","timeout","message","total","ct_toggle_depended","obj","secondary","depended","prop","removeProp","ready","state","on","datepicker","setDefaults","regional","dates","dateFormat","maxDate","changeMonth","changeYear","showAnim","onSelect","selectedDate","option","instance","date","parseDate","settings","_defaults","not","ct_start_check","continue_check","alert","click","ct_check","accurate","JSON","stringify","start","Date","toUTCString"],"mappings":"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","file":"cleantalk-comments-checkspam.min.js","sourcesContent":["// Printf for JS\r\nString.prototype.printf = function(){\r\n var formatted = this;\r\n for( var arg in arguments ) {\r\n\t\tvar before_formatted = formatted.substring(0, formatted.indexOf(\"%s\", 0));\r\n\t\tvar after_formatted = formatted.substring(formatted.indexOf(\"%s\", 0)+2, formatted.length);\r\n\t\tformatted = before_formatted + arguments[arg] + after_formatted;\r\n }\r\n return formatted;\r\n};\r\n\r\n// Flags\r\nvar ct_working = false,\r\n\tct_new_check = true,\r\n\tct_cooling_down_flag = false,\r\n\tct_close_animate = true,\r\n\tct_accurate_check = false,\r\n\tct_pause = false,\r\n\tct_prev_accurate = ctCommentsCheck.ct_prev_accurate,\r\n\tct_prev_from = ctCommentsCheck.ct_prev_from,\t\r\n\tct_prev_till = ctCommentsCheck.ct_prev_till;\r\n// Settings\r\nvar ct_cool_down_time = 90000,\r\n\tct_requests_counter = 0,\r\n\tct_max_requests = 60;\r\n// Variables\r\nvar ct_ajax_nonce = ctCommentsCheck.ct_ajax_nonce,\r\n\tct_comments_total = 0,\r\n\tct_comments_checked = 0,\r\n\tct_comments_spam = 0,\r\n\tct_comments_bad = 0,\r\n\tct_unchecked = 'unset',\r\n\tct_date_from = 0,\r\n\tct_date_till = 0;\r\n\r\nfunction animate_comment(to,id){\r\n\tif(ct_close_animate){\r\n\t\tif(to==0.3){\r\n\t\t\tjQuery('#comment-'+id).fadeTo(200,to,function(){\r\n\t\t\t\tanimate_comment(1,id)\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tjQuery('#comment-'+id).fadeTo(200,to,function(){\r\n\t\t\t\tanimate_comment(0.3,id)\r\n\t\t\t});\r\n\t\t}\r\n\t}else{\r\n\t\tct_close_animate=true;\r\n\t}\r\n}\r\n\r\nfunction ct_clear_comments(){\r\n\r\n\tvar from = 0, till = 0;\r\n\tif(jQuery('#ct_allow_date_range').is(':checked')) {\r\n\t\tfrom = jQuery('#ct_date_range_from').val();\r\n\t\ttill = jQuery('#ct_date_range_till').val();\r\n\t}\r\n\tvar data = {\r\n\t\t'action' : 'ajax_clear_comments',\r\n\t\t'security' : ct_ajax_nonce,\r\n\t\t'from' : from,\r\n\t\t'till' : till\r\n\t};\r\n\r\n\tjQuery.ajax({\r\n\t\ttype: \"POST\",\r\n\t\turl: ajaxurl,\r\n\t\tdata: data,\r\n\t\tsuccess: function(msg){\r\n\t\t\tct_show_info();\r\n\t\t\tct_send_comments();\r\n\t\t}\r\n\t});\r\n}\r\n\r\n//Continues the check after cooldown time\r\n//Called by ct_send_users();\r\nfunction ct_cooling_down_toggle(){\r\n\tct_cooling_down_flag = false;\r\n\tct_send_comments();\r\n\tct_show_info();\r\n}\r\n\r\nfunction ct_send_comments(){\r\n\t\r\n\tif(ct_cooling_down_flag === true)\r\n\t\treturn;\r\n\t\r\n\tif(ct_requests_counter >= ct_max_requests){\r\n\t\tsetTimeout(ct_cooling_down_toggle, ct_cool_down_time);\r\n\t\tct_requests_counter = 0;\r\n\t\tct_cooling_down_flag = true;\r\n\t\treturn;\r\n\t}else{\r\n\t\tct_requests_counter++;\r\n\t}\r\n\t\r\n\tvar data = {\r\n\t\t'action': 'ajax_check_comments',\r\n\t\t'security': ct_ajax_nonce,\r\n\t\t'new_check': ct_new_check,\r\n\t\t'unchecked': ct_unchecked\r\n\t};\r\n\t\r\n\tif(ct_accurate_check)\r\n\t\tdata['accurate_check'] = true;\r\n\t\r\n\tif(ct_date_from && ct_date_till){\r\n\t\tdata['from'] = ct_date_from;\r\n\t\tdata['till'] = ct_date_till;\r\n\t}\r\n\t\r\n\tjQuery.ajax({\r\n\t\ttype: \"POST\",\r\n\t\turl: ajaxurl,\r\n\t\tdata: data,\r\n\t\tsuccess: function(msg){\r\n\t\t\t\r\n\t\t\tmsg = jQuery.parseJSON(msg);\r\n\t\t\t\r\n\t\t\tif(parseInt(msg.error)){\r\n\t\t\t\tct_working=false;\r\n\t\t\t\tif(!confirm(msg.error_message+\". Do you want to proceed?\")){\r\n\t\t\t\t\tvar new_href = 'edit-comments.php?page=ct_check_spam';\r\n\t\t\t\t\tif(ct_date_from != 0 && ct_date_till != 0)\r\n\t\t\t\t\t\tnew_href+='&from='+ct_date_from+'&till='+ct_date_till;\r\n\t\t\t\t\tlocation.href = new_href;\r\n\t\t\t\t}else\r\n\t\t\t\t\tct_send_comments();\r\n\t\t\t}else{\r\n\t\t\t\tct_new_check = false;\r\n\t\t\t\tif(parseInt(msg.end) == 1 || ct_pause === true){\r\n\t\t\t\t\tif(parseInt(msg.end) == 1)\r\n\t\t\t\t\t\tdocument.cookie = 'ct_paused_comments_check=0; path=/';\r\n\t\t\t\t\tct_working=false;\r\n\t\t\t\t\tjQuery('#ct_working_message').hide();\r\n\t\t\t\t\tvar new_href = 'edit-comments.php?page=ct_check_spam';\r\n\t\t\t\t\tif(ct_date_from != 0 && ct_date_till != 0)\r\n\t\t\t\t\t\tnew_href+='&from='+ct_date_from+'&till='+ct_date_till;\r\n\t\t\t\t\tlocation.href = new_href;\r\n\t\t\t\t}else if(parseInt(msg.end) == 0){\r\n\t\t\t\t\tct_comments_checked += msg.checked;\r\n\t\t\t\t\tct_comments_spam += msg.spam;\r\n\t\t\t\t\tct_comments_bad += msg.bad;\r\n\t\t\t\t\tct_unchecked = ct_comments_total - ct_comments_checked - ct_comments_bad;\r\n\t\t\t\t\tvar status_string = String(ctCommentsCheck.ct_status_string);\r\n\t\t\t\t\tvar status_string = status_string.printf(ct_comments_total, ct_comments_checked, ct_comments_spam, ct_comments_bad);\r\n\t\t\t\t\tif(parseInt(ct_comments_spam) > 0)\r\n\t\t\t\t\t\tstatus_string += ctCommentsCheck.ct_status_string_warning;\r\n\t\t\t\t\tjQuery('#ct_checking_status').html(status_string);\r\n\t\t\t\t\tjQuery('#ct_error_message').hide();\r\n\t\t\t\t\t// If DB woks not properly\r\n\t\t\t\t\tif(+ct_comments_total < ct_comments_checked + ct_comments_bad){\r\n\t\t\t\t\t\tdocument.cookie = 'ct_comments_start_check=1; path=/';\r\n\t\t\t\t\t\tdocument.cookie = 'ct_comments_safe_check=1; path=/';\r\n\t\t\t\t\t\tlocation.href = 'edit-comments.php?page=ct_check_spam';\r\n\t\t\t\t\t}\r\n\t\t\t\t\tct_send_comments();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n error: function(jqXHR, textStatus, errorThrown) {\r\n\t\t\tjQuery('#ct_error_message').show();\r\n\t\t\tjQuery('#cleantalk_ajax_error').html(textStatus);\r\n\t\t\tjQuery('#cleantalk_js_func').html('Check comments');\r\n\t\t\tsetTimeout(ct_send_comments(), 3000); \r\n },\r\n timeout: 25000\r\n\t});\r\n}\r\nfunction ct_show_info(){\r\n\t\r\n\tif(ct_working){\r\n\t\t\r\n\t\tif(ct_cooling_down_flag == true){\r\n\t\t\tjQuery('#ct_cooling_notice').html('Waiting for API to cool down. (About a minute)');\r\n\t\t\tjQuery('#ct_cooling_notice').show();\r\n\t\t\treturn;\t\t\t\r\n\t\t}else{\r\n\t\t\tjQuery('#ct_cooling_notice').hide();\r\n\t\t}\t\r\n\t\t\r\n\t\tsetTimeout(ct_show_info, 3000);\r\n\t\t\r\n\t\tif(!ct_comments_total){\r\n\t\t\t\r\n\t\t\tvar data = {\r\n\t\t\t\t'action': 'ajax_info_comments',\r\n\t\t\t\t'security': ct_ajax_nonce\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tif(ct_date_from && ct_date_till){\r\n\t\t\t\tdata['from'] = ct_date_from;\r\n\t\t\t\tdata['till'] = ct_date_till;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tjQuery.ajax({\r\n\t\t\t\ttype: \"POST\",\r\n\t\t\t\turl: ajaxurl,\r\n\t\t\t\tdata: data,\r\n\t\t\t\tsuccess: function(msg){\r\n\t\t\t\t\tmsg = jQuery.parseJSON(msg);\r\n\t\t\t\t\tjQuery('#ct_checking_status').html(msg.message);\r\n\t\t\t\t\tct_comments_total = msg.total;\r\n\t\t\t\t\tct_comments_spam = msg.spam;\r\n\t\t\t\t\tct_comments_checked = msg.checked;\r\n\t\t\t\t\tct_comments_bad = msg.bad;\r\n\t\t\t\t},\r\n\t\t\t\terror: function(jqXHR, textStatus, errorThrown) {\r\n\t\t\t\t\tjQuery('#ct_error_message').show();\r\n\t\t\t\t\tjQuery('#cleantalk_ajax_error').html(textStatus);\r\n\t\t\t\t\tjQuery('#cleantalk_js_func').html('Check comments');\r\n\t\t\t\t\tsetTimeout(ct_show_info(), 3000); \r\n\t\t\t\t},\r\n\t\t\t\ttimeout: 15000\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// Function to toggle dependences\r\nfunction ct_toggle_depended(obj, secondary){\r\n\r\n secondary = secondary || null;\r\n\r\n\tvar depended = jQuery(obj.data('depended')),\r\n\t\tstate = obj.data('state');\r\n\t\t\r\n\tif(!state && !secondary){\r\n\t\tobj.data('state', true);\r\n\t\tdepended.removeProp('disabled');\r\n\t}else{\r\n\t\tobj.data('state', false);\r\n\t\tdepended.prop('disabled', true);\r\n\t\tdepended.removeProp('checked');\r\n\t\tif(depended.data('depended'))\r\n\t\t\tct_toggle_depended(depended, true);\r\n\t}\r\n}\r\n\r\njQuery(document).ready(function(){\r\n\r\n\t// Setting dependences\r\n\t// jQuery('#ct_accurate_check') .data({'depended': '#ct_allow_date_range', 'state': false});\r\n\tjQuery('#ct_allow_date_range').data({'depended': '.ct_date', 'state': false});\r\n\t\r\n\t// Prev check parameters\r\n\tif(ct_prev_accurate){\r\n\t\tjQuery(\"#ct_accurate_check\").prop('checked', true);\r\n\t}\r\n\tif(ct_prev_from){\r\n\t\tjQuery(\"#ct_allow_date_range\").prop('checked', true).data('state', true);\r\n\t\tjQuery(\"#ct_date_range_from\").removeProp('disabled').val(ct_prev_from);\r\n\t\tjQuery(\"#ct_date_range_till\").removeProp('disabled').val(ct_prev_till);\r\n\t}\r\n\t\r\n\t// Toggle dependences\r\n\tjQuery(\"#ct_allow_date_range, #ct_accurate_check\").on('change', function(){\r\n\t\tct_toggle_depended(jQuery(this));\r\n\t});\r\n\r\n jQuery.datepicker.setDefaults(jQuery.datepicker.regional['en']);\r\n\tvar dates = jQuery('#ct_date_range_from, #ct_date_range_till').datepicker(\r\n\t\t{\r\n\t\t\tdateFormat: 'M d yy',\r\n\t\t\tmaxDate:\"+0D\",\r\n\t\t\tchangeMonth:true,\r\n\t\t\tchangeYear:true,\r\n\t\t\tshowAnim: 'slideDown',\r\n\t\t\tonSelect: function(selectedDate){\r\n\t\t\tvar option = this.id == \"ct_date_range_from\" ? \"minDate\" : \"maxDate\",\r\n\t\t\t\tinstance = jQuery( this ).data( \"datepicker\" ),\r\n\t\t\t\tdate = jQuery.datepicker.parseDate(\r\n\t\t\t\t\tinstance.settings.dateFormat || jQuery.datepicker._defaults.dateFormat,\r\n\t\t\t\t\tselectedDate, instance.settings);\r\n\t\t\t\tdates.not(this).datepicker(\"option\", option, date);\r\n\t\t\t}\r\n\t\t}\r\n\t);\r\n\t\r\n\tfunction ct_start_check(continue_check){\r\n\r\n continue_check = continue_check || null;\r\n\r\n\t\tif(jQuery('#ct_allow_date_range').is(':checked')){\r\n\t\t\t\r\n\t\t\tct_date_from = jQuery('#ct_date_range_from').val(),\r\n\t\t\tct_date_till = jQuery('#ct_date_range_till').val();\r\n\t\t\t\t\t\t\r\n\t\t\tif(!(ct_date_from != '' && ct_date_till != '')){\r\n\t\t\t\talert('Please, specify a date range.');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(jQuery('#ct_accurate_check').is(':checked')){\r\n\t\t\tct_accurate_check = true;\r\n\t\t}\r\n\t\t\r\n\t\tjQuery('.ct_to_hide').hide();\r\n\t\tjQuery('#ct_working_message').show();\r\n\t\tjQuery('#ct_preloader').show();\r\n\t\tjQuery('#ct_pause').show();\r\n\r\n\t\tct_working=true;\r\n\t\t\r\n\t\tif(continue_check){\r\n\t\t\tct_show_info();\r\n\t\t\tct_send_comments();\r\n\t\t}else\r\n\t\t\tct_clear_comments();\r\n\t\t\r\n\t}\r\n\t\r\n\t// Check comments\r\n\tjQuery(\"#ct_check_spam_button\").click(function(){\r\n\t\tdocument.cookie = 'ct_paused_comments_check=0; path=/';\r\n\t\tct_start_check(false);\r\n\t});\r\n\tjQuery(\"#ct_proceed_check_button\").click(function(){\r\n\t\tct_start_check(true);\r\n\t});\r\n\r\n\t// Pause the check\r\n\tjQuery('#ct_pause').on('click', function(){\r\n\t\tct_pause = true;\r\n\t\tvar ct_check = {\r\n\t\t\t'accurate': ct_accurate_check,\r\n\t\t\t'from' : ct_date_from,\r\n\t\t\t'till' : ct_date_till\r\n\t\t};\r\n\t\tdocument.cookie = 'ct_paused_comments_check=' + JSON.stringify(ct_check) + '; path=/';\r\n\t});\r\n\r\n\r\n\tif(ctCommentsCheck.start === '1'){\r\n\t\tdocument.cookie = 'ct_comments_start_check=0; expires=' + new Date(0).toUTCString() + '; path=/';\r\n\t\tjQuery('#ct_check_spam_button').click();\t\r\n\t}\r\n\r\n});"]}
js/cleantalk-users-checkspam.min.js CHANGED
@@ -1,2 +1,2 @@
1
- String.prototype.printf=function(){var e=this;for(var t in arguments){var c=e.substring(0,e.indexOf("%s",0)),_=e.substring(e.indexOf("%s",0)+2,e.length);e=c+arguments[t]+_}return e};var ct_working=!(document.cookie="ct_check_users__amount=100; path=/"),ct_new_check=!0,ct_cooling_down_flag=!1,ct_close_animate=!0,ct_accurate_check=!1,ct_pause=!1,ct_prev_accurate=ctUsersCheck.ct_prev_accurate,ct_prev_from=ctUsersCheck.ct_prev_from,ct_prev_till=ctUsersCheck.ct_prev_till,ct_cool_down_time=9e4,ct_requests_counter=0,ct_max_requests=60,ct_ajax_nonce=ctUsersCheck.ct_ajax_nonce,ct_users_total=0,ct_users_checked=0,ct_users_spam=0,ct_users_bad=0,ct_unchecked="unset",ct_date_from=0,ct_date_till=0;function apbct_cookie__get(r,a){var s={};return"string"==typeof(r=r||null)&&(r=r.split()),"none"==(a=a||["apbct_","ct_"])&&(a=null),"string"==typeof a&&(a=a.split()),document.cookie.split(";").forEach(function(e,t,c){var _=e.trim().split("=");r&&r.forEach(function(e,t,c){_[0]===e&&(s[_[0]]=_[1])}),a&&a.forEach(function(e,t,c){0===_[0].indexOf(e)&&(s[_[0]]=_[1])})}),s}function apbct_get_cookie(e){var t=apbct_cookie__get(e,e);return"object"==typeof t&&void 0!==t[e]?t[e]:null}function animate_comment(e,t){ct_close_animate?.3==e?jQuery("#comment-"+t).fadeTo(200,e,function(){animate_comment(1,t)}):jQuery("#comment-"+t).fadeTo(200,e,function(){animate_comment(.3,t)}):ct_close_animate=!0}function ct_clear_users(){var e=0,t=0;jQuery("#ct_allow_date_range").is(":checked")&&(e=jQuery("#ct_date_range_from").val(),t=jQuery("#ct_date_range_till").val());var c={action:"ajax_clear_users",security:ct_ajax_nonce,from:e,till:t};jQuery.ajax({type:"POST",url:ajaxurl,data:c,success:function(e){ct_show_users_info(),ct_send_users()}})}function ct_cooling_down_toggle(){ct_cooling_down_flag=!1,ct_send_users(),ct_show_users_info()}function ct_send_users(){if(1!=ct_cooling_down_flag){if(ct_max_requests<=ct_requests_counter)return setTimeout(ct_cooling_down_toggle,ct_cool_down_time),void(ct_cooling_down_flag=!(ct_requests_counter=0));ct_requests_counter++;var e={action:"ajax_check_users",security:ct_ajax_nonce,new_check:ct_new_check,unchecked:ct_unchecked,amount:apbct_get_cookie("ct_check_users__amount")};ct_accurate_check&&(e.accurate_check=!0),ct_date_from&&ct_date_till&&(e.from=ct_date_from,e.till=ct_date_till),jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){if(e=jQuery.parseJSON(e),parseInt(e.error))if(ct_working=!1,confirm(e.error_message+". Do you want to proceed?"))ct_send_users();else{var t="users.php?page=ct_check_users";0!=ct_date_from&&0!=ct_date_till&&(t+="&from="+ct_date_from+"&till="+ct_date_till),location.href=t}else if(ct_new_check=!1,1==parseInt(e.end)||1==ct_pause){1==parseInt(e.end)&&(document.cookie="ct_paused_users_check=0; path=/"),ct_working=!1,jQuery("#ct_working_message").hide();t="users.php?page=ct_check_users&ct_worked=1";0!=ct_date_from&&0!=ct_date_till&&(t+="&from="+ct_date_from+"&till="+ct_date_till),location.href=t}else if(0==parseInt(e.end)){ct_users_checked+=e.checked,ct_users_spam+=e.spam,ct_users_bad+=e.bad,ct_unchecked=ct_users_total-ct_users_checked-ct_users_bad;var c=(c=String(ctUsersCheck.ct_status_string)).printf(ct_users_total,ct_users_checked,ct_users_spam,ct_users_bad);0<parseInt(ct_users_spam)&&(c+=ctUsersCheck.ct_status_string_warning),jQuery("#ct_checking_status").html(c),jQuery("#ct_error_message").hide(),ct_send_users()}},error:function(e,t,c){20<check_amount&&(check_amount-=20,document.cookie="ct_check_users__amount="+check_amount+"; path=/"),jQuery("#ct_error_message").show(),jQuery("#cleantalk_ajax_error").html(t),jQuery("#cleantalk_js_func").html("Check users"),setTimeout(ct_send_users(),3e3)},timeout:25e3})}}function ct_show_users_info(){if(ct_working){if(1==ct_cooling_down_flag)return jQuery("#ct_cooling_notice").html("Waiting for API to cool down. (About a minute)"),void jQuery("#ct_cooling_notice").show();if(jQuery("#ct_cooling_notice").hide(),setTimeout(ct_show_users_info,3e3),!ct_users_total){var e={action:"ajax_info_users",security:ct_ajax_nonce};ct_date_from&&ct_date_till&&(e.from=ct_date_from,e.till=ct_date_till),jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){e=jQuery.parseJSON(e),jQuery("#ct_checking_status").html(e.message),ct_users_total=e.total,ct_users_spam=e.spam,ct_users_checked=e.checked,ct_users_bad=e.bad},error:function(e,t,c){jQuery("#ct_error_message").show(),jQuery("#cleantalk_ajax_error").html(t),jQuery("#cleantalk_js_func").html("Show users"),setTimeout(ct_show_users_info(),3e3)},timeout:15e3})}}}function ct_insert_users(t){var e={action:"ajax_insert_users",security:ct_ajax_nonce};(t=t||null)&&(e.delete=!0),jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){t?alert(ctUsersCheck.ct_deleted+" "+e+" "+ctUsersCheck.ct_iusers):alert(ctUsersCheck.ct_inserted+" "+e+" "+ctUsersCheck.ct_iusers)}})}function ct_delete_all_users(){var e={action:"ajax_delete_all_users",security:ct_ajax_nonce};jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){0<e?(jQuery("#cleantalk_users_left").html(e),ct_delete_all_users()):location.href="users.php?page=ct_check_users&ct_worked=1"},error:function(e,t,c){jQuery("#ct_error_message").show(),jQuery("#cleantalk_ajax_error").html(t),jQuery("#cleantalk_js_func").html("All users deleteion"),setTimeout(ct_delete_all_users(),3e3)},timeout:25e3})}function ct_delete_checked_users(){ids=Array();var e=0;jQuery("input[id^=cb-select-][id!=cb-select-all-1]").each(function(){jQuery(this).prop("checked")&&(ids[e]=jQuery(this).attr("id").substring(10),e++)});var t={action:"ajax_delete_checked_users",security:ct_ajax_nonce,ids:ids};jQuery.ajax({type:"POST",url:ajaxurl,data:t,success:function(e){location.href="users.php?page=ct_check_users&ct_worked=1"},error:function(e,t,c){jQuery("#ct_error_message").show(),jQuery("#cleantalk_ajax_error").html(t),jQuery("#cleantalk_js_func").html("All users deleteion"),setTimeout(ct_delete_checked_users(),3e3)},timeout:15e3})}function ct_toggle_depended(e,t){t=t||null;var c=jQuery(e.data("depended"));e.data("state")||t?(e.data("state",!1),c.prop("disabled",!0),c.removeProp("checked"),c.data("depended")&&ct_toggle_depended(c,!0)):(e.data("state",!0),c.removeProp("disabled"))}jQuery(document).ready(function(){jQuery("#ct_allow_date_range").data({depended:".ct_date",state:!1}),ct_prev_accurate&&jQuery("#ct_accurate_check").prop("checked",!0),ct_prev_from&&(jQuery("#ct_allow_date_range").prop("checked",!0).data("state",!0),jQuery("#ct_date_range_from").removeProp("disabled").val(ct_prev_from),jQuery("#ct_date_range_till").removeProp("disabled").val(ct_prev_till)),jQuery("#ct_allow_date_range, #ct_accurate_check").on("change",function(){ct_toggle_depended(jQuery(this))});var r=jQuery("#ct_date_range_from, #ct_date_range_till").datepicker({dateFormat:"M d yy",maxDate:"+0D",changeMonth:!0,changeYear:!0,showAnim:"slideDown",onSelect:function(e){var t="ct_date_range_from"==this.id?"minDate":"maxDate",c=jQuery(this).data("datepicker"),_=jQuery.datepicker.parseDate(c.settings.dateFormat||jQuery.datepicker._defaults.dateFormat,e,c.settings);r.not(this).datepicker("option",t,_)}});function e(e){e=e||null,jQuery("#ct_allow_date_range").is(":checked")&&(ct_date_from=jQuery("#ct_date_range_from").val(),ct_date_till=jQuery("#ct_date_range_till").val(),""===ct_date_from||""===ct_date_till)?alert("Please, specify a date range."):(jQuery("#ct_accurate_check").is(":checked")&&(ct_accurate_check=!0),jQuery(".ct_to_hide").hide(),jQuery("#ct_working_message").show(),jQuery("#ct_preloader").show(),jQuery("#ct_pause").show(),ct_working=!0,e?(ct_show_users_info(),ct_send_users()):ct_clear_users())}jQuery("#ct_check_spam_button").click(function(){e(!(document.cookie="ct_paused_users_check=0; path=/"))}),jQuery("#ct_proceed_check_button").click(function(){e(!0)}),jQuery("#ct_pause").on("click",function(){ct_pause=!0;var e={accurate:ct_accurate_check,from:ct_date_from,till:ct_date_till};document.cookie="ct_paused_users_check="+JSON.stringify(e)+"; path=/"}),jQuery("#ct_insert_users").click(function(){ct_insert_users()}),jQuery("#ct_delete_users").click(function(){ct_insert_users(!0)}),jQuery("#ct_delete_all_users").click(function(){if(!confirm(ctUsersCheck.ct_confirm_deletion_all))return!1;jQuery(".ct_to_hide").hide(),jQuery("#ct_checking_status").hide(),jQuery("#ct_search_info").hide(),jQuery("#ct_preloader").show(),jQuery("#ct_deleting_message").show(),jQuery("#ct_stop_deletion").show(),jQuery("html, body").animate({scrollTop:0},"slow"),ct_delete_all_users()}),jQuery("#ct_delete_checked_users").click(function(){if(!confirm(ctUsersCheck.ct_confirm_deletion_checked))return!1;ct_delete_checked_users()}),jQuery("#ct_stop_deletion").click(function(){location.href="users.php?page=ct_check_users"}),jQuery(".cleantalk_delete_user_button").click(function(){id=jQuery(this).attr("data-id"),ids=Array(),ids[0]=id;var e={action:"ajax_delete_checked_users",security:ct_ajax_nonce,ids:ids};jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){ct_close_animate=!1,jQuery("#comment-"+id).hide(),jQuery("#comment-"+id).remove(),ct_close_animate=!0},timeout:15e3})}),jQuery(".cleantalk_delete_user_button").click(function(){id=jQuery(this).attr("data-id"),animate_comment(.3,id)}),jQuery(".cleantalk_user").mouseover(function(){id=jQuery(this).attr("data-id"),jQuery("#cleantalk_delete_user_"+id).show()}),jQuery(".cleantalk_user").mouseout(function(){id=jQuery(this).attr("data-id"),jQuery("#cleantalk_delete_user_"+id).hide()}),jQuery(".cleantalk_delete_from_list_button").click(function(){ct_id=jQuery(this).attr("data-id");var e={action:"ajax_ct_approve_user",security:ct_ajax_nonce,id:ct_id};jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){jQuery("#comment-"+ct_id).fadeOut("slow",function(){jQuery("#comment-"+ct_id).remove()})}});e={action:"ct_feedback_user",security:ct_ajax_nonce,user_id:ct_id,status:"approve"};jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){},error:function(e,t,c){},timeout:5e3})}),jQuery("#ct_get_csv_file").click(function(){var e={action:"ajax_ct_get_csv_file",security:ct_ajax_nonce,filename:ctUsersCheck.ct_csv_filename};jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){0==parseInt(e)?alert(ctUsersCheck.ct_bad_csv):jQuery("#ct_csv_wrapper").html("<iframe src='"+location.protocol+"//"+location.hostname+"/wp-content/plugins/cleantalk-spam-protect/check-results/"+ctUsersCheck.ct_csv_filename+".csv'></iframe>")}})})});
2
- //# sourceMappingURL=cleantalk-users-checkspam.min.js.map
1
+ String.prototype.printf=function(){var e=this;for(var t in arguments){var c=e.substring(0,e.indexOf("%s",0)),_=e.substring(e.indexOf("%s",0)+2,e.length);e=c+arguments[t]+_}return e};var ct_working=!(document.cookie="ct_check_users__amount=100; path=/"),ct_new_check=!0,ct_cooling_down_flag=!1,ct_close_animate=!0,ct_accurate_check=!1,ct_pause=!1,ct_prev_accurate=ctUsersCheck.ct_prev_accurate,ct_prev_from=ctUsersCheck.ct_prev_from,ct_prev_till=ctUsersCheck.ct_prev_till,ct_cool_down_time=9e4,ct_requests_counter=0,ct_max_requests=60,ct_ajax_nonce=ctUsersCheck.ct_ajax_nonce,ct_users_total=0,ct_users_checked=0,ct_users_spam=0,ct_users_bad=0,ct_unchecked="unset",ct_date_from=0,ct_date_till=0;function apbct_cookie__get(a,r){var s={};return"string"==typeof(a=a||null)&&(a=a.split()),"none"===(r=r||["apbct_","ct_"])&&(r=null),"string"==typeof r&&(r=r.split()),document.cookie.split(";").forEach(function(e,t,c){var _=e.trim().split("=");a&&a.forEach(function(e,t,c){_[0]===e&&(s[_[0]]=_[1])}),r&&r.forEach(function(e,t,c){0===_[0].indexOf(e)&&(s[_[0]]=_[1])})}),s}function apbct_get_cookie(e){var t=apbct_cookie__get(e,e);return"object"==typeof t&&void 0!==t[e]?t[e]:null}function animate_comment(e,t){ct_close_animate?.3===e?jQuery("#comment-"+t).fadeTo(200,e,function(){animate_comment(1,t)}):jQuery("#comment-"+t).fadeTo(200,e,function(){animate_comment(.3,t)}):ct_close_animate=!0}function ct_clear_users(){var e=0,t=0;jQuery("#ct_allow_date_range").is(":checked")&&(e=jQuery("#ct_date_range_from").val(),t=jQuery("#ct_date_range_till").val());var c={action:"ajax_clear_users",security:ct_ajax_nonce,from:e,till:t};jQuery.ajax({type:"POST",url:ajaxurl,data:c,success:function(e){ct_show_users_info(),ct_send_users()}})}function ct_cooling_down_toggle(){ct_cooling_down_flag=!1,ct_send_users(),ct_show_users_info()}function ct_send_users(){if(!0!==ct_cooling_down_flag){if(ct_max_requests<=ct_requests_counter)return setTimeout(ct_cooling_down_toggle,ct_cool_down_time),void(ct_cooling_down_flag=!(ct_requests_counter=0));ct_requests_counter++;var _=apbct_get_cookie("ct_check_users__amount"),e={action:"ajax_check_users",security:ct_ajax_nonce,new_check:ct_new_check,unchecked:ct_unchecked,amount:_};ct_accurate_check&&(e.accurate_check=!0),ct_date_from&&ct_date_till&&(e.from=ct_date_from,e.till=ct_date_till),jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){if(e=jQuery.parseJSON(e),parseInt(e.error))if(ct_working=!1,confirm(e.error_message+". Do you want to proceed?"))ct_send_users();else{var t="users.php?page=ct_check_users";0!=ct_date_from&&0!=ct_date_till&&(t+="&from="+ct_date_from+"&till="+ct_date_till),location.href=t}else if(ct_new_check=!1,1==parseInt(e.end)||1==ct_pause){1==parseInt(e.end)&&(document.cookie="ct_paused_users_check=0; path=/"),ct_working=!1,jQuery("#ct_working_message").hide();t="users.php?page=ct_check_users&ct_worked=1";0!=ct_date_from&&0!=ct_date_till&&(t+="&from="+ct_date_from+"&till="+ct_date_till),location.href=t}else if(0==parseInt(e.end)){ct_users_checked+=e.checked,ct_users_spam+=e.spam,ct_users_bad+=e.bad,ct_unchecked=ct_users_total-ct_users_checked-ct_users_bad;var c=(c=String(ctUsersCheck.ct_status_string)).printf(ct_users_checked,ct_users_spam,ct_users_bad);0<parseInt(ct_users_spam)&&(c+=ctUsersCheck.ct_status_string_warning),jQuery("#ct_checking_status").html(c),jQuery("#ct_error_message").hide(),ct_send_users()}},error:function(e,t,c){20<_&&(_-=20,document.cookie="ct_check_users__amount="+_+"; path=/"),jQuery("#ct_error_message").show(),jQuery("#cleantalk_ajax_error").html(t),jQuery("#cleantalk_js_func").html("Check users"),setTimeout(ct_send_users(),3e3)},timeout:25e3})}}function ct_show_users_info(){if(ct_working){if(1==ct_cooling_down_flag)return jQuery("#ct_cooling_notice").html("Waiting for API to cool down. (About a minute)"),void jQuery("#ct_cooling_notice").show();if(jQuery("#ct_cooling_notice").hide(),setTimeout(ct_show_users_info,3e3),!ct_users_total){var e={action:"ajax_info_users",security:ct_ajax_nonce};ct_date_from&&ct_date_till&&(e.from=ct_date_from,e.till=ct_date_till),jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){e=jQuery.parseJSON(e),jQuery("#ct_checking_status").html(e.message),ct_users_spam=e.spam,ct_users_checked=e.checked,ct_users_bad=e.bad},error:function(e,t,c){jQuery("#ct_error_message").show(),jQuery("#cleantalk_ajax_error").html(t),jQuery("#cleantalk_js_func").html("Show users"),setTimeout(ct_show_users_info(),3e3)},timeout:15e3})}}}function ct_toggle_depended(e,t){t=t||null;var c=jQuery(e.data("depended"));e.data("state")||t?(e.data("state",!1),c.prop("disabled",!0),c.removeProp("checked"),c.data("depended")&&ct_toggle_depended(c,!0)):(e.data("state",!0),c.removeProp("disabled"))}function ct_start_check(e){e=e||null,jQuery("#ct_allow_date_range").is(":checked")&&(ct_date_from=jQuery("#ct_date_range_from").val(),ct_date_till=jQuery("#ct_date_range_till").val(),""===ct_date_from||""===ct_date_till)?alert("Please, specify a date range."):(jQuery("#ct_accurate_check").is(":checked")&&(ct_accurate_check=!0),jQuery(".ct_to_hide").hide(),jQuery("#ct_working_message").show(),jQuery("#ct_preloader").show(),jQuery("#ct_pause").show(),ct_working=!0,e?(ct_show_users_info(),ct_send_users()):ct_clear_users())}jQuery(document).ready(function(){jQuery("#ct_allow_date_range").data({depended:".ct_date",state:!1}),ct_prev_accurate&&jQuery("#ct_accurate_check").prop("checked",!0),ct_prev_from&&(jQuery("#ct_allow_date_range").prop("checked",!0).data("state",!0),jQuery("#ct_date_range_from").removeProp("disabled").val(ct_prev_from),jQuery("#ct_date_range_till").removeProp("disabled").val(ct_prev_till)),jQuery("#ct_allow_date_range, #ct_accurate_check").on("change",function(){ct_toggle_depended(jQuery(this))}),jQuery.datepicker.setDefaults(jQuery.datepicker.regional.en);var a=jQuery("#ct_date_range_from, #ct_date_range_till").datepicker({dateFormat:"M d yy",maxDate:"+0D",changeMonth:!0,changeYear:!0,showAnim:"slideDown",onSelect:function(e){var t="ct_date_range_from"==this.id?"minDate":"maxDate",c=jQuery(this).data("datepicker"),_=jQuery.datepicker.parseDate(c.settings.dateFormat||jQuery.datepicker._defaults.dateFormat,e,c.settings);a.not(this).datepicker("option",t,_)}});jQuery("#ct_check_spam_button").click(function(){ct_start_check(!(document.cookie="ct_paused_users_check=0; path=/"))}),jQuery("#ct_proceed_check_button").click(function(){ct_start_check(!0)}),jQuery("#ct_pause").on("click",function(){ct_pause=!0;var e={accurate:ct_accurate_check,from:ct_date_from,till:ct_date_till};document.cookie="ct_paused_users_check="+JSON.stringify(e)+"; path=/"}),jQuery(".cleantalk_delete_from_list_button").click(function(){ct_id=jQuery(this).attr("data-id");var e={action:"ajax_ct_approve_user",security:ct_ajax_nonce,id:ct_id};jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){jQuery("#comment-"+ct_id).fadeOut("slow",function(){jQuery("#comment-"+ct_id).remove()})}});e={action:"ct_feedback_user",security:ct_ajax_nonce,user_id:ct_id,status:"approve"};jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){},error:function(e,t,c){},timeout:5e3})}),jQuery("#ct_get_csv_file").click(function(_){var e={action:"ajax_ct_get_csv_file",security:ct_ajax_nonce,filename:ctUsersCheck.ct_csv_filename};jQuery("#"+_.target.id).addClass("disabled"),jQuery.ajax({type:"POST",url:ajaxurl,data:e,success:function(e){if(0===parseInt(e))alert(ctUsersCheck.ct_bad_csv);else{var t=URL.createObjectURL(new Blob([e])),c=document.createElement("a");c.href=t,c.download=ctUsersCheck.ct_csv_filename+".csv",document.body.appendChild(c),c.click()}jQuery("#"+_.target.id).removeClass("disabled")}})})});
2
+ //# sourceMappingURL=cleantalk-users-checkspam.min.js.map
js/cleantalk-users-checkspam.min.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["cleantalk-users-checkspam.js"],"names":["String","prototype","printf","formatted","this","arg","arguments","before_formatted","substring","indexOf","after_formatted","length","ct_working","document","cookie","ct_new_check","ct_cooling_down_flag","ct_close_animate","ct_accurate_check","ct_pause","ct_prev_accurate","ctUsersCheck","ct_prev_from","ct_prev_till","ct_cool_down_time","ct_requests_counter","ct_max_requests","ct_ajax_nonce","ct_users_total","ct_users_checked","ct_users_spam","ct_users_bad","ct_unchecked","ct_date_from","ct_date_till","apbct_cookie__get","names","prefixes","split","forEach","item","i","arr","curr","trim","name","all","prefix","apbct_get_cookie","animate_comment","to","id","jQuery","fadeTo","ct_clear_users","from","till","is","val","data","action","security","ajax","type","url","ajaxurl","success","msg","ct_show_users_info","ct_send_users","ct_cooling_down_toggle","setTimeout","new_check","unchecked","amount","parseJSON","parseInt","error","confirm","error_message","new_href","location","href","end","hide","checked","spam","bad","status_string","ct_status_string","ct_status_string_warning","html","jqXHR","textStatus","errorThrown","check_amount","show","timeout","message","total","ct_insert_users","delete_accounts","alert","ct_deleted","ct_iusers","ct_inserted","ct_delete_all_users","ct_delete_checked_users","ids","Array","cnt","each","prop","attr","ct_toggle_depended","obj","secondary","depended","removeProp","ready","state","on","dates","datepicker","dateFormat","maxDate","changeMonth","changeYear","showAnim","onSelect","selectedDate","option","instance","date","parseDate","settings","_defaults","not","ct_start_check","continue_check","click","ct_check","accurate","JSON","stringify","ct_confirm_deletion_all","animate","scrollTop","ct_confirm_deletion_checked","remove","mouseover","mouseout","ct_id","fadeOut","user_id","status","filename","ct_csv_filename","ct_bad_csv","protocol","hostname"],"mappings":"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","file":"cleantalk-users-checkspam.min.js","sourcesContent":["// Printf for JS\r\nString.prototype.printf = function(){\r\n var formatted = this;\r\n for( var arg in arguments ) {\r\n\t\tvar before_formatted = formatted.substring(0, formatted.indexOf(\"%s\", 0));\r\n\t\tvar after_formatted = formatted.substring(formatted.indexOf(\"%s\", 0)+2, formatted.length);\r\n\t\tformatted = before_formatted + arguments[arg] + after_formatted;\r\n }\r\n return formatted;\r\n};\r\n\r\n// Set deafult amount to check by request.\r\ndocument.cookie = \"ct_check_users__amount=\" + 100 + \"; path=/\";\r\n\r\n// Flags\r\nvar ct_working = false,\r\n\tct_new_check = true,\r\n\tct_cooling_down_flag = false,\r\n\tct_close_animate = true,\r\n\tct_accurate_check = false,\r\n\tct_pause = false,\r\n\tct_prev_accurate = ctUsersCheck.ct_prev_accurate,\r\n\tct_prev_from = ctUsersCheck.ct_prev_from,\t\r\n\tct_prev_till = ctUsersCheck.ct_prev_till;\r\n// Settings\r\nvar ct_cool_down_time = 90000,\r\n\tct_requests_counter = 0,\r\n\tct_max_requests = 60;\r\n// Variables\r\nvar ct_ajax_nonce = ctUsersCheck.ct_ajax_nonce,\r\n\tct_users_total = 0,\r\n\tct_users_checked = 0,\r\n\tct_users_spam = 0,\r\n\tct_users_bad = 0,\r\n\tct_unchecked = 'unset',\r\n\tct_date_from = 0,\r\n\tct_date_till = 0;\r\n\r\n/* Function: Reuturns cookie with prefix */\r\nfunction apbct_cookie__get(names, prefixes){\r\n\tvar cookie = {};\r\n\tnames = names || null;\r\n\tif(typeof names == 'string') names = names.split();\r\n\tprefixes = prefixes || ['apbct_', 'ct_'];\r\n\tif(prefixes == 'none') prefixes = null;\r\n\tif(typeof prefixes == 'string') prefixes = prefixes.split();\r\n\tdocument.cookie.split(';').forEach(function(item, i, arr){\r\n\t\tvar curr = item.trim().split('=');\r\n\t\t// Detect by full cookie name\r\n\t\tif(names){\r\n\t\t\tnames.forEach(function(name, i, all){\r\n\t\t\t\tif(curr[0] === name)\r\n\t\t\t\t\tcookie[curr[0]] = (curr[1]);\r\n\t\t\t});\r\n\t\t}\r\n\t\t// Detect by name prefix\r\n\t\tif(prefixes){\r\n\t\t\tprefixes.forEach(function(prefix, i, all){\r\n\t\t\t\tif(curr[0].indexOf(prefix) === 0)\r\n\t\t\t\t\tcookie[curr[0]] = (curr[1]);\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n\treturn cookie;\r\n}\r\n\r\nfunction apbct_get_cookie( name ){\r\n\tvar cookie = apbct_cookie__get( name, name );\r\n\tif(typeof cookie === 'object' && typeof cookie[name] != 'undefined'){\r\n\t\treturn cookie[name];\r\n\t}else\r\n\t\treturn null;\r\n}\r\n\r\nfunction animate_comment(to,id){\r\n\tif(ct_close_animate){\r\n\t\tif(to==0.3){\r\n\t\t\tjQuery('#comment-'+id).fadeTo(200,to,function(){\r\n\t\t\t\tanimate_comment(1,id)\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tjQuery('#comment-'+id).fadeTo(200,to,function(){\r\n\t\t\t\tanimate_comment(0.3,id)\r\n\t\t\t});\r\n\t\t}\r\n\t}else{\r\n\t\tct_close_animate=true;\r\n\t}\r\n}\r\n\r\nfunction ct_clear_users(){\r\n\r\n\tvar from = 0, till = 0;\r\n\tif(jQuery('#ct_allow_date_range').is(':checked')) {\r\n\t\tfrom = jQuery('#ct_date_range_from').val();\r\n\t\ttill = jQuery('#ct_date_range_till').val();\r\n\t}\r\n\tvar data = {\r\n\t\t'action' : 'ajax_clear_users',\r\n\t\t'security' : ct_ajax_nonce,\r\n\t\t'from' : from,\r\n\t\t'till' : till\r\n\t};\r\n\r\n\tjQuery.ajax({\r\n\t\ttype: \"POST\",\r\n\t\turl: ajaxurl,\r\n\t\tdata: data,\r\n\t\tsuccess: function(msg){\r\n\t\t\tct_show_users_info();\r\n\t\t\tct_send_users();\r\n\t\t}\r\n\t});\r\n\r\n}\r\n\r\n//Continues the check after cooldown time\r\n//Called by ct_send_users();\r\nfunction ct_cooling_down_toggle(){\r\n\tct_cooling_down_flag = false;\r\n\tct_send_users();\r\n\tct_show_users_info();\r\n}\r\n\r\nfunction ct_send_users(){\r\n\t\r\n\tif(ct_cooling_down_flag == true)\r\n\t\treturn;\r\n\t\r\n\tif(ct_requests_counter >= ct_max_requests){\r\n\t\tsetTimeout(ct_cooling_down_toggle, ct_cool_down_time);\r\n\t\tct_requests_counter = 0;\r\n\t\tct_cooling_down_flag = true;\r\n\t\treturn;\r\n\t}else{\r\n\t\tct_requests_counter++;\r\n\t}\r\n\r\n\tvar data = {\r\n\t\taction: 'ajax_check_users',\r\n\t\tsecurity: ct_ajax_nonce,\r\n\t\tnew_check: ct_new_check,\r\n\t\tunchecked: ct_unchecked,\r\n\t\tamount: apbct_get_cookie('ct_check_users__amount'),\r\n\t};\r\n\t\r\n\tif(ct_accurate_check)\r\n\t\tdata['accurate_check'] = true;\r\n\t\r\n\tif(ct_date_from && ct_date_till){\r\n\t\tdata['from'] = ct_date_from;\r\n\t\tdata['till'] = ct_date_till;\r\n\t}\r\n\t\r\n\tjQuery.ajax({\r\n\t\ttype: \"POST\",\r\n\t\turl: ajaxurl,\r\n\t\tdata: data,\r\n\t\tsuccess: function(msg){\r\n\t\t\t\r\n\t\t\tmsg = jQuery.parseJSON(msg);\r\n\t\t\t\r\n\t\t\tif(parseInt(msg.error)){\r\n\t\t\t\tct_working=false;\r\n\t\t\t\tif(!confirm(msg.error_message+\". Do you want to proceed?\")){\r\n\t\t\t\t\tvar new_href = 'users.php?page=ct_check_users';\r\n\t\t\t\t\tif(ct_date_from != 0 && ct_date_till != 0)\r\n\t\t\t\t\t\tnew_href+='&from='+ct_date_from+'&till='+ct_date_till;\r\n\t\t\t\t\tlocation.href = new_href;\r\n\t\t\t\t}else\r\n\t\t\t\t\tct_send_users();\r\n\t\t\t}else{\r\n\t\t\t\tct_new_check = false;\r\n\t\t\t\tif(parseInt(msg.end) == 1 || ct_pause == true){\r\n\t\t\t\t\tif(parseInt(msg.end) == 1)\r\n\t\t\t\t\t\tdocument.cookie = 'ct_paused_users_check=0; path=/';\r\n\t\t\t\t\tct_working=false;\r\n\t\t\t\t\tjQuery('#ct_working_message').hide();\r\n\t\t\t\t\tvar new_href = 'users.php?page=ct_check_users&ct_worked=1';\r\n\t\t\t\t\tif(ct_date_from != 0 && ct_date_till != 0)\r\n\t\t\t\t\t\tnew_href+='&from='+ct_date_from+'&till='+ct_date_till;\r\n\t\t\t\t\tlocation.href = new_href;\r\n\t\t\t\t}else if(parseInt(msg.end) == 0){\r\n\t\t\t\t\tct_users_checked += msg.checked;\r\n\t\t\t\t\tct_users_spam += msg.spam;\r\n\t\t\t\t\tct_users_bad += msg.bad;\r\n\t\t\t\t\tct_unchecked = ct_users_total - ct_users_checked - ct_users_bad;\r\n\t\t\t\t\tvar status_string = String(ctUsersCheck.ct_status_string);\r\n\t\t\t\t\tvar status_string = status_string.printf(ct_users_total, ct_users_checked, ct_users_spam, ct_users_bad);\r\n\t\t\t\t\tif(parseInt(ct_users_spam) > 0)\r\n\t\t\t\t\t\tstatus_string += ctUsersCheck.ct_status_string_warning;\r\n\t\t\t\t\tjQuery('#ct_checking_status').html(status_string);\r\n\t\t\t\t\tjQuery('#ct_error_message').hide();\r\n\t\t\t\t\tct_send_users();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n error: function(jqXHR, textStatus, errorThrown) {\r\n\t\t\tif(check_amount > 20){\r\n\t\t\t\tcheck_amount -= 20;\r\n\t\t\t\tdocument.cookie = \"ct_check_users__amount=\" + check_amount + \"; path=/\";\r\n\t\t\t}\r\n\t\t\tjQuery('#ct_error_message').show();\r\n\t\t\tjQuery('#cleantalk_ajax_error').html(textStatus);\r\n\t\t\tjQuery('#cleantalk_js_func').html('Check users');\r\n\t\t\tsetTimeout(ct_send_users(), 3000);\r\n },\r\n timeout: 25000\r\n\t});\r\n}\r\nfunction ct_show_users_info(){\r\n\t\r\n\tif(ct_working){\r\n\t\t\r\n\t\tif(ct_cooling_down_flag == true){\r\n\t\t\tjQuery('#ct_cooling_notice').html('Waiting for API to cool down. (About a minute)');\r\n\t\t\tjQuery('#ct_cooling_notice').show();\r\n\t\t\treturn;\t\t\t\r\n\t\t}else{\r\n\t\t\tjQuery('#ct_cooling_notice').hide();\r\n\t\t}\r\n\t\t\r\n\t\tsetTimeout(ct_show_users_info, 3000);\r\n\t\t\r\n\t\tif(!ct_users_total){\r\n\t\t\t\r\n\t\t\tvar data = {\r\n\t\t\t\t'action': 'ajax_info_users',\r\n\t\t\t\t'security': ct_ajax_nonce\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tif(ct_date_from && ct_date_till){\r\n\t\t\t\tdata['from'] = ct_date_from;\r\n\t\t\t\tdata['till'] = ct_date_till;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tjQuery.ajax({\r\n\t\t\t\ttype: \"POST\",\r\n\t\t\t\turl: ajaxurl,\r\n\t\t\t\tdata: data,\r\n\t\t\t\tsuccess: function(msg){\r\n\t\t\t\t\tmsg = jQuery.parseJSON(msg);\r\n\t\t\t\t\tjQuery('#ct_checking_status').html(msg.message);\r\n\t\t\t\t\tct_users_total = msg.total;\r\n\t\t\t\t\tct_users_spam = msg.spam;\r\n\t\t\t\t\tct_users_checked = msg.checked;\r\n\t\t\t\t\tct_users_bad = msg.bad;\r\n\t\t\t\t},\r\n\t\t\t\terror: function (jqXHR, textStatus, errorThrown){\r\n\t\t\t\t\tjQuery('#ct_error_message').show();\r\n\t\t\t\t\tjQuery('#cleantalk_ajax_error').html(textStatus);\r\n\t\t\t\t\tjQuery('#cleantalk_js_func').html('Show users');\r\n\t\t\t\t\tsetTimeout(ct_show_users_info(), 3000);\r\n\t\t\t\t},\r\n\t\t\t\ttimeout: 15000\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\nfunction ct_insert_users(delete_accounts){\r\n\r\n delete_accounts = delete_accounts || null;\r\n\r\n\tvar data = {\r\n\t\t'action': 'ajax_insert_users',\r\n\t\t'security': ct_ajax_nonce\r\n\t};\r\n\t\r\n\tif(delete_accounts)\r\n\t\tdata['delete'] = true;\r\n\t\r\n\tjQuery.ajax({\r\n\t\ttype: \"POST\",\r\n\t\turl: ajaxurl,\r\n\t\tdata: data,\r\n\t\tsuccess: function(msg){\r\n\t\t\tif(delete_accounts)\r\n\t\t\t\talert(ctUsersCheck.ct_deleted + ' ' + msg + ' ' + ctUsersCheck.ct_iusers);\r\n\t\t\telse\r\n\t\t\t\talert(ctUsersCheck.ct_inserted + ' ' + msg + ' ' + ctUsersCheck.ct_iusers);\r\n\t\t}\r\n\t});\r\n}\r\nfunction ct_delete_all_users(){\r\n\t\r\n\tvar data = {\r\n\t\t'action': 'ajax_delete_all_users',\r\n\t\t'security': ct_ajax_nonce\r\n\t};\r\n\t\r\n\tjQuery.ajax({\r\n\t\ttype: \"POST\",\r\n\t\turl: ajaxurl,\r\n\t\tdata: data,\r\n\t\tsuccess: function(msg){\r\n\t\t\tif(msg>0){\r\n\t\t\t\tjQuery('#cleantalk_users_left').html(msg);\r\n\t\t\t\tct_delete_all_users();\r\n\t\t\t}else{\r\n\t\t\t\tlocation.href='users.php?page=ct_check_users&ct_worked=1';\r\n\t\t\t}\r\n\t\t},\r\n error: function(jqXHR, textStatus, errorThrown) {\r\n\t\t\tjQuery('#ct_error_message').show();\r\n\t\t\tjQuery('#cleantalk_ajax_error').html(textStatus);\r\n\t\t\tjQuery('#cleantalk_js_func').html('All users deleteion');\r\n\t\t\tsetTimeout(ct_delete_all_users(), 3000);\r\n },\r\n timeout: 25000\r\n\t});\r\n}\r\nfunction ct_delete_checked_users(){\r\n\t\r\n\tids=Array();\r\n\tvar cnt=0;\r\n\tjQuery('input[id^=cb-select-][id!=cb-select-all-1]').each(function(){\r\n\t\tif(jQuery(this).prop('checked')){\r\n\t\t\tids[cnt]=jQuery(this).attr('id').substring(10);\r\n\t\t\tcnt++;\r\n\t\t}\r\n\t});\r\n\tvar data = {\r\n\t\t'action': 'ajax_delete_checked_users',\r\n\t\t'security': ct_ajax_nonce,\r\n\t\t'ids':ids\r\n\t};\r\n\t\r\n\tjQuery.ajax({\r\n\t\ttype: \"POST\",\r\n\t\turl: ajaxurl,\r\n\t\tdata: data,\r\n\t\tsuccess: function(msg){\r\n\t\t\tlocation.href='users.php?page=ct_check_users&ct_worked=1';\r\n\t\t},\r\n\t\terror: function(jqXHR, textStatus, errorThrown) {\r\n\t\t\tjQuery('#ct_error_message').show();\r\n\t\t\tjQuery('#cleantalk_ajax_error').html(textStatus);\r\n\t\t\tjQuery('#cleantalk_js_func').html('All users deleteion');\r\n\t\t\tsetTimeout(ct_delete_checked_users(), 3000);\r\n\t\t},\r\n\t\ttimeout: 15000\r\n\t});\r\n}\r\n\r\n// Function to toggle dependences\r\nfunction ct_toggle_depended(obj, secondary){\r\n\r\n secondary = secondary || null;\r\n\r\n\tvar depended = jQuery(obj.data('depended')),\r\n\t\tstate = obj.data('state');\r\n\t\t\r\n\tif(!state && !secondary){\r\n\t\tobj.data('state', true);\r\n\t\tdepended.removeProp('disabled');\r\n\t}else{\r\n\t\tobj.data('state', false);\r\n\t\tdepended.prop('disabled', true);\r\n\t\tdepended.removeProp('checked');\r\n\t\tif(depended.data('depended'))\r\n\t\t\tct_toggle_depended(depended, true);\r\n\t}\r\n}\r\n\r\njQuery(document).ready(function(){\r\n\t\r\n\t// Setting dependences\r\n\t// jQuery('#ct_accurate_check') .data({'depended': '#ct_allow_date_range', 'state': false});\r\n\tjQuery('#ct_allow_date_range').data({'depended': '.ct_date', 'state': false});\r\n\t\r\n\t// Prev check parameters\r\n\tif(ct_prev_accurate){\r\n\t\tjQuery(\"#ct_accurate_check\").prop('checked', true);\r\n\t}\r\n\tif(ct_prev_from){\r\n\t\tjQuery(\"#ct_allow_date_range\").prop('checked', true).data('state', true);\r\n\t\tjQuery(\"#ct_date_range_from\").removeProp('disabled').val(ct_prev_from);\r\n\t\tjQuery(\"#ct_date_range_till\").removeProp('disabled').val(ct_prev_till);\r\n\t}\r\n\t\r\n\t// Toggle dependences\r\n\tjQuery(\"#ct_allow_date_range, #ct_accurate_check\").on('change', function(){\r\n\t\tct_toggle_depended(jQuery(this));\r\n\t});\r\n\t\t\r\n\tvar dates = jQuery('#ct_date_range_from, #ct_date_range_till').datepicker(\r\n\t\t{\r\n\t\t\tdateFormat: 'M d yy',\r\n\t\t\tmaxDate:\"+0D\",\r\n\t\t\tchangeMonth:true,\r\n\t\t\tchangeYear:true,\r\n\t\t\tshowAnim: 'slideDown',\r\n\t\t\tonSelect: function(selectedDate){\r\n\t\t\tvar option = this.id == \"ct_date_range_from\" ? \"minDate\" : \"maxDate\",\r\n\t\t\t\tinstance = jQuery( this ).data( \"datepicker\" ),\r\n\t\t\t\tdate = jQuery.datepicker.parseDate(\r\n\t\t\t\t\tinstance.settings.dateFormat || jQuery.datepicker._defaults.dateFormat,\r\n\t\t\t\t\tselectedDate, instance.settings);\r\n\t\t\t\tdates.not(this).datepicker(\"option\", option, date);\r\n\t\t\t}\r\n\t\t}\r\n\t);\r\n\t\t\r\n\tfunction ct_start_check(continue_check){\r\n\r\n\t continue_check = continue_check || null;\r\n\t\t\r\n\t\tif(jQuery('#ct_allow_date_range').is(':checked')){\r\n\t\t\t\r\n\t\t\tct_date_from = jQuery('#ct_date_range_from').val();\r\n\t\t\tct_date_till = jQuery('#ct_date_range_till').val();\r\n\t\t\t\t\t\t\r\n\t\t\tif(!(ct_date_from !== '' && ct_date_till !== '')){\r\n\t\t\t\talert('Please, specify a date range.');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(jQuery('#ct_accurate_check').is(':checked')){\r\n\t\t\tct_accurate_check = true;\r\n\t\t}\r\n\t\t\r\n\t\tjQuery('.ct_to_hide').hide();\r\n\t\tjQuery('#ct_working_message').show();\r\n\t\tjQuery('#ct_preloader').show();\r\n\t\tjQuery('#ct_pause').show();\r\n\t\t\r\n\t\tct_working=true;\r\n\t\t\r\n\t\tif(continue_check){\r\n\t\t\tct_show_users_info();\r\n\t\t\tct_send_users();\r\n\t\t}else\r\n\t\t\tct_clear_users();\r\n\t\t\r\n\t}\r\n\t\r\n\t// Check users\r\n\tjQuery(\"#ct_check_spam_button\").click(function(){\r\n\t\tdocument.cookie = 'ct_paused_users_check=0; path=/';\r\n\t\tct_start_check(false);\r\n\t});\r\n\tjQuery(\"#ct_proceed_check_button\").click(function(){\r\n\t\tct_start_check(true);\r\n\t});\r\n\t\r\n\t// Pause the check\r\n\tjQuery('#ct_pause').on('click', function(){\r\n\t\tct_pause = true;\r\n\t\tvar ct_check = {\r\n\t\t\t'accurate': ct_accurate_check,\r\n\t\t\t'from' : ct_date_from,\r\n\t\t\t'till' : ct_date_till\r\n\t\t};\r\n\t\tdocument.cookie = 'ct_paused_users_check=' + JSON.stringify(ct_check) + '; path=/';\r\n\t});\r\n\t\r\n\tjQuery(\"#ct_insert_users\").click(function(){\r\n\t\tct_insert_users();\r\n\t});\r\n\t\r\n\tjQuery(\"#ct_delete_users\").click(function(){\r\n\t\tct_insert_users(true);\r\n\t});\r\n\t\r\n\t// Delete all spam users\r\n\tjQuery(\"#ct_delete_all_users\").click(function(){\r\n\t\t\r\n\t\tif (!confirm(ctUsersCheck.ct_confirm_deletion_all))\r\n\t\t\treturn false;\r\n\t\t\r\n\t\tjQuery('.ct_to_hide').hide();\r\n\t\tjQuery('#ct_checking_status').hide();\r\n\t\tjQuery('#ct_search_info').hide();\r\n\t\tjQuery('#ct_preloader').show();\r\n\t\tjQuery('#ct_deleting_message').show();\r\n\t\tjQuery('#ct_stop_deletion').show();\r\n\t\tjQuery(\"html, body\").animate({ scrollTop: 0 }, \"slow\");\r\n\t\tct_delete_all_users();\r\n\t});\r\n\tjQuery(\"#ct_delete_checked_users\").click(function(){\r\n\t\tif (!confirm(ctUsersCheck.ct_confirm_deletion_checked))\r\n\t\t\treturn false;\r\n\t\tct_delete_checked_users();\r\n\t});\r\n\t\r\n\tjQuery(\"#ct_stop_deletion\").click(function(){\r\n\t\tlocation.href='users.php?page=ct_check_users';\r\n\t});\r\n\t\r\n\tjQuery(\".cleantalk_delete_user_button\").click(function(){\r\n\t\tid = jQuery(this).attr(\"data-id\");\r\n\t\tids=Array();\r\n\t\tids[0]=id;\r\n\t\tvar data = {\r\n\t\t\t'action': 'ajax_delete_checked_users',\r\n\t\t\t'security': ct_ajax_nonce,\r\n\t\t\t'ids':ids\r\n\t\t};\r\n\t\tjQuery.ajax({\r\n\t\t\ttype: \"POST\",\r\n\t\t\turl: ajaxurl,\r\n\t\t\tdata: data,\r\n\t\t\tsuccess: function(msg){\r\n\t\t\t\tct_close_animate=false;\r\n\t\t\t\tjQuery(\"#comment-\"+id).hide();\r\n\t\t\t\tjQuery(\"#comment-\"+id).remove();\r\n\t\t\t\tct_close_animate=true;\r\n\t\t\t},\r\n\t\t\ttimeout: 15000\r\n\t\t});\r\n\t});\r\n\t\r\n\tjQuery(\".cleantalk_delete_user_button\").click(function(){\r\n\t\tid = jQuery(this).attr(\"data-id\");\r\n\t\tanimate_comment(0.3, id);\r\n\t});\r\n\t\t\r\n\t//Show/hide action on mouse over/out\r\n\tjQuery(\".cleantalk_user\").mouseover(function(){\r\n\t\tid = jQuery(this).attr(\"data-id\");\r\n\t\tjQuery(\"#cleantalk_delete_user_\"+id).show();\r\n\t});\r\n\tjQuery(\".cleantalk_user\").mouseout(function(){\r\n\t\tid = jQuery(this).attr(\"data-id\");\r\n\t\tjQuery(\"#cleantalk_delete_user_\"+id).hide();\r\n\t});\r\n\t\t\r\n\t//Approve button\r\n\tjQuery(\".cleantalk_delete_from_list_button\").click(function(){\r\n\t\tct_id = jQuery(this).attr(\"data-id\");\r\n\t\t\r\n\t\t// Approving\r\n\t\tvar data = {\r\n\t\t\t'action': 'ajax_ct_approve_user',\r\n\t\t\t'security': ct_ajax_nonce,\r\n\t\t\t'id': ct_id\r\n\t\t};\r\n\t\tjQuery.ajax({\r\n\t\t\ttype: \"POST\",\r\n\t\t\turl: ajaxurl,\r\n\t\t\tdata: data,\r\n\t\t\tsuccess: function(msg){\r\n\t\t\t\tjQuery(\"#comment-\"+ct_id).fadeOut('slow', function(){\r\n\t\t\t\t\tjQuery(\"#comment-\"+ct_id).remove();\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t});\r\n\t\t\r\n\t\t// Positive feedback\r\n\t\tvar data = {\r\n\t\t\t'action': 'ct_feedback_user',\r\n\t\t\t'security': ct_ajax_nonce,\r\n\t\t\t'user_id': ct_id,\r\n\t\t\t'status': 'approve'\r\n\t\t};\r\n\t\tjQuery.ajax({\r\n\t\t\ttype: \"POST\",\r\n\t\t\turl: ajaxurl,\r\n\t\t\tdata: data,\r\n\t\t\tsuccess: function(msg){\r\n\t\t\t\tif(msg == 1){\r\n\t\t\t\t\t// Success\r\n\t\t\t\t}\r\n\t\t\t\tif(msg == 0){\r\n\t\t\t\t\t// Error occurred\r\n\t\t\t\t}\r\n\t\t\t\tif(msg == 'no_hash'){\r\n\t\t\t\t\t// No hash\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\terror: function(jqXHR, textStatus, errorThrown) {\r\n\t\t\t\t\r\n\t\t\t},\r\n\t\t\ttimeout: 5000\r\n\t\t});\r\n\t\t\r\n\t});\r\n\t\r\n\t// Request to Download CSV file.\r\n\tjQuery(\"#ct_get_csv_file\").click(function(){\r\n\t\tvar data = {\r\n\t\t\t'action': 'ajax_ct_get_csv_file',\r\n\t\t\t'security': ct_ajax_nonce,\r\n\t\t\t'filename': ctUsersCheck.ct_csv_filename\r\n\t\t};\r\n\t\tjQuery.ajax({\r\n\t\t\ttype: \"POST\",\r\n\t\t\turl: ajaxurl,\r\n\t\t\tdata: data,\r\n\t\t\tsuccess: function(msg){\r\n\t\t\t\tif(parseInt(msg)==0)\r\n\t\t\t\t\talert(ctUsersCheck.ct_bad_csv);\r\n\t\t\t\telse\r\n\t\t\t\t\tjQuery(\"#ct_csv_wrapper\").html(\"<iframe src='\"+location.protocol+\"//\"+location.hostname+\"/wp-content/plugins/cleantalk-spam-protect/check-results/\"+ctUsersCheck.ct_csv_filename+\".csv'></iframe>\");\r\n\t\t\t},\r\n\t\t});\r\n\t});\r\n});"]}
1
+ {"version":3,"sources":["cleantalk-users-checkspam.js"],"names":["String","prototype","printf","formatted","this","arg","arguments","before_formatted","substring","indexOf","after_formatted","length","ct_working","document","cookie","ct_new_check","ct_cooling_down_flag","ct_close_animate","ct_accurate_check","ct_pause","ct_prev_accurate","ctUsersCheck","ct_prev_from","ct_prev_till","ct_cool_down_time","ct_requests_counter","ct_max_requests","ct_ajax_nonce","ct_users_total","ct_users_checked","ct_users_spam","ct_users_bad","ct_unchecked","ct_date_from","ct_date_till","apbct_cookie__get","names","prefixes","split","forEach","item","i","arr","curr","trim","name","all","prefix","apbct_get_cookie","animate_comment","to","id","jQuery","fadeTo","ct_clear_users","from","till","is","val","data","action","security","ajax","type","url","ajaxurl","success","msg","ct_show_users_info","ct_send_users","ct_cooling_down_toggle","setTimeout","check_amount","new_check","unchecked","amount","parseJSON","parseInt","error","confirm","error_message","new_href","location","href","end","hide","checked","spam","bad","status_string","ct_status_string","ct_status_string_warning","html","jqXHR","textStatus","errorThrown","show","timeout","message","ct_toggle_depended","obj","secondary","depended","prop","removeProp","ct_start_check","continue_check","alert","ready","state","on","datepicker","setDefaults","regional","dates","dateFormat","maxDate","changeMonth","changeYear","showAnim","onSelect","selectedDate","option","instance","date","parseDate","settings","_defaults","not","click","ct_check","accurate","JSON","stringify","ct_id","attr","fadeOut","remove","user_id","status","e","filename","ct_csv_filename","target","addClass","ct_bad_csv","URL","createObjectURL","Blob","dummy","createElement","download","body","appendChild","removeClass"],"mappings":"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","file":"cleantalk-users-checkspam.min.js","sourcesContent":["// Printf for JS\r\nString.prototype.printf = function(){\r\n var formatted = this;\r\n for( var arg in arguments ) {\r\n\t\tvar before_formatted = formatted.substring(0, formatted.indexOf(\"%s\", 0));\r\n\t\tvar after_formatted = formatted.substring(formatted.indexOf(\"%s\", 0)+2, formatted.length);\r\n\t\tformatted = before_formatted + arguments[arg] + after_formatted;\r\n }\r\n return formatted;\r\n};\r\n\r\n// Set deafult amount to check by request.\r\ndocument.cookie = \"ct_check_users__amount=\" + 100 + \"; path=/\";\r\n\r\n// Flags\r\nvar ct_working = false,\r\n\tct_new_check = true,\r\n\tct_cooling_down_flag = false,\r\n\tct_close_animate = true,\r\n\tct_accurate_check = false,\r\n\tct_pause = false,\r\n\tct_prev_accurate = ctUsersCheck.ct_prev_accurate,\r\n\tct_prev_from = ctUsersCheck.ct_prev_from,\t\r\n\tct_prev_till = ctUsersCheck.ct_prev_till;\r\n// Settings\r\nvar ct_cool_down_time = 90000,\r\n\tct_requests_counter = 0,\r\n\tct_max_requests = 60;\r\n// Variables\r\nvar ct_ajax_nonce = ctUsersCheck.ct_ajax_nonce,\r\n\tct_users_total = 0,\r\n\tct_users_checked = 0,\r\n\tct_users_spam = 0,\r\n\tct_users_bad = 0,\r\n\tct_unchecked = 'unset',\r\n\tct_date_from = 0,\r\n\tct_date_till = 0;\r\n\r\n/* Function: Reuturns cookie with prefix */\r\nfunction apbct_cookie__get(names, prefixes){\r\n\tvar cookie = {};\r\n\tnames = names || null;\r\n\tif(typeof names == 'string') names = names.split();\r\n\tprefixes = prefixes || ['apbct_', 'ct_'];\r\n\tif(prefixes === 'none') prefixes = null;\r\n\tif(typeof prefixes == 'string') prefixes = prefixes.split();\r\n\tdocument.cookie.split(';').forEach(function(item, i, arr){\r\n\t\tvar curr = item.trim().split('=');\r\n\t\t// Detect by full cookie name\r\n\t\tif(names){\r\n\t\t\tnames.forEach(function(name, i, all){\r\n\t\t\t\tif(curr[0] === name)\r\n\t\t\t\t\tcookie[curr[0]] = (curr[1]);\r\n\t\t\t});\r\n\t\t}\r\n\t\t// Detect by name prefix\r\n\t\tif(prefixes){\r\n\t\t\tprefixes.forEach(function(prefix, i, all){\r\n\t\t\t\tif(curr[0].indexOf(prefix) === 0)\r\n\t\t\t\t\tcookie[curr[0]] = (curr[1]);\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n\treturn cookie;\r\n}\r\n\r\nfunction apbct_get_cookie( name ){\r\n\tvar cookie = apbct_cookie__get( name, name );\r\n\tif(typeof cookie === 'object' && typeof cookie[name] != 'undefined'){\r\n\t\treturn cookie[name];\r\n\t}else\r\n\t\treturn null;\r\n}\r\n\r\nfunction animate_comment(to,id){\r\n\tif(ct_close_animate){\r\n\t\tif(to === 0.3){\r\n\t\t\tjQuery('#comment-'+id).fadeTo(200,to,function(){\r\n\t\t\t\tanimate_comment(1,id)\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tjQuery('#comment-'+id).fadeTo(200,to,function(){\r\n\t\t\t\tanimate_comment(0.3,id)\r\n\t\t\t});\r\n\t\t}\r\n\t}else{\r\n\t\tct_close_animate=true;\r\n\t}\r\n}\r\n\r\nfunction ct_clear_users(){\r\n\r\n\tvar from = 0, till = 0;\r\n\tif(jQuery('#ct_allow_date_range').is(':checked')) {\r\n\t\tfrom = jQuery('#ct_date_range_from').val();\r\n\t\ttill = jQuery('#ct_date_range_till').val();\r\n\t}\r\n\tvar data = {\r\n\t\t'action' : 'ajax_clear_users',\r\n\t\t'security' : ct_ajax_nonce,\r\n\t\t'from' : from,\r\n\t\t'till' : till\r\n\t};\r\n\r\n\tjQuery.ajax({\r\n\t\ttype: \"POST\",\r\n\t\turl: ajaxurl,\r\n\t\tdata: data,\r\n\t\tsuccess: function(msg){\r\n\t\t\tct_show_users_info();\r\n\t\t\tct_send_users();\r\n\t\t}\r\n\t});\r\n\r\n}\r\n\r\n//Continues the check after cooldown time\r\n//Called by ct_send_users();\r\nfunction ct_cooling_down_toggle(){\r\n\tct_cooling_down_flag = false;\r\n\tct_send_users();\r\n\tct_show_users_info();\r\n}\r\n\r\nfunction ct_send_users(){\r\n\t\r\n\tif(ct_cooling_down_flag === true)\r\n\t\treturn;\r\n\t\r\n\tif(ct_requests_counter >= ct_max_requests){\r\n\t\tsetTimeout(ct_cooling_down_toggle, ct_cool_down_time);\r\n\t\tct_requests_counter = 0;\r\n\t\tct_cooling_down_flag = true;\r\n\t\treturn;\r\n\t}else{\r\n\t\tct_requests_counter++;\r\n\t}\r\n\r\n\tvar check_amount = apbct_get_cookie('ct_check_users__amount');\r\n\r\n\tvar data = {\r\n\t\taction: 'ajax_check_users',\r\n\t\tsecurity: ct_ajax_nonce,\r\n\t\tnew_check: ct_new_check,\r\n\t\tunchecked: ct_unchecked,\r\n\t\tamount: check_amount\r\n\t};\r\n\t\r\n\tif(ct_accurate_check)\r\n\t\tdata['accurate_check'] = true;\r\n\t\r\n\tif(ct_date_from && ct_date_till){\r\n\t\tdata['from'] = ct_date_from;\r\n\t\tdata['till'] = ct_date_till;\r\n\t}\r\n\t\r\n\tjQuery.ajax({\r\n\t\ttype: \"POST\",\r\n\t\turl: ajaxurl,\r\n\t\tdata: data,\r\n\t\tsuccess: function(msg){\r\n\t\t\t\r\n\t\t\tmsg = jQuery.parseJSON(msg);\r\n\t\t\t\r\n\t\t\tif(parseInt(msg.error)){\r\n\t\t\t\tct_working=false;\r\n\t\t\t\tif(!confirm(msg.error_message+\". Do you want to proceed?\")){\r\n\t\t\t\t\tvar new_href = 'users.php?page=ct_check_users';\r\n\t\t\t\t\tif(ct_date_from != 0 && ct_date_till != 0)\r\n\t\t\t\t\t\tnew_href+='&from='+ct_date_from+'&till='+ct_date_till;\r\n\t\t\t\t\tlocation.href = new_href;\r\n\t\t\t\t}else\r\n\t\t\t\t\tct_send_users();\r\n\t\t\t}else{\r\n\t\t\t\tct_new_check = false;\r\n\t\t\t\tif(parseInt(msg.end) == 1 || ct_pause == true){\r\n\t\t\t\t\tif(parseInt(msg.end) == 1)\r\n\t\t\t\t\t\tdocument.cookie = 'ct_paused_users_check=0; path=/';\r\n\t\t\t\t\tct_working=false;\r\n\t\t\t\t\tjQuery('#ct_working_message').hide();\r\n\t\t\t\t\tvar new_href = 'users.php?page=ct_check_users&ct_worked=1';\r\n\t\t\t\t\tif(ct_date_from != 0 && ct_date_till != 0)\r\n\t\t\t\t\t\tnew_href+='&from='+ct_date_from+'&till='+ct_date_till;\r\n\t\t\t\t\tlocation.href = new_href;\r\n\t\t\t\t}else if(parseInt(msg.end) == 0){\r\n\t\t\t\t\tct_users_checked += msg.checked;\r\n\t\t\t\t\tct_users_spam += msg.spam;\r\n\t\t\t\t\tct_users_bad += msg.bad;\r\n\t\t\t\t\tct_unchecked = ct_users_total - ct_users_checked - ct_users_bad;\r\n\t\t\t\t\tvar status_string = String(ctUsersCheck.ct_status_string);\r\n\t\t\t\t\tvar status_string = status_string.printf(ct_users_checked, ct_users_spam, ct_users_bad);\r\n\t\t\t\t\tif(parseInt(ct_users_spam) > 0)\r\n\t\t\t\t\t\tstatus_string += ctUsersCheck.ct_status_string_warning;\r\n\t\t\t\t\tjQuery('#ct_checking_status').html(status_string);\r\n\t\t\t\t\tjQuery('#ct_error_message').hide();\r\n\t\t\t\t\tct_send_users();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n error: function(jqXHR, textStatus, errorThrown) {\r\n\t\t\tif(check_amount > 20){\r\n\t\t\t\tcheck_amount -= 20;\r\n\t\t\t\tdocument.cookie = \"ct_check_users__amount=\" + check_amount + \"; path=/\";\r\n\t\t\t}\r\n\t\t\tjQuery('#ct_error_message').show();\r\n\t\t\tjQuery('#cleantalk_ajax_error').html(textStatus);\r\n\t\t\tjQuery('#cleantalk_js_func').html('Check users');\r\n\t\t\tsetTimeout(ct_send_users(), 3000);\r\n },\r\n timeout: 25000\r\n\t});\r\n}\r\nfunction ct_show_users_info(){\r\n\t\r\n\tif( ct_working ){\r\n\t\t\r\n\t\tif(ct_cooling_down_flag == true){\r\n\t\t\tjQuery('#ct_cooling_notice').html('Waiting for API to cool down. (About a minute)');\r\n\t\t\tjQuery('#ct_cooling_notice').show();\r\n\t\t\treturn;\t\t\t\r\n\t\t}else{\r\n\t\t\tjQuery('#ct_cooling_notice').hide();\r\n\t\t}\r\n\t\t\r\n\t\tsetTimeout(ct_show_users_info, 3000);\r\n\t\t\r\n\t\tif( ! ct_users_total ){\r\n\t\t\t\r\n\t\t\tvar data = {\r\n\t\t\t\t'action': 'ajax_info_users',\r\n\t\t\t\t'security': ct_ajax_nonce\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tif( ct_date_from && ct_date_till ){\r\n\t\t\t\tdata['from'] = ct_date_from;\r\n\t\t\t\tdata['till'] = ct_date_till;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tjQuery.ajax({\r\n\t\t\t\ttype: \"POST\",\r\n\t\t\t\turl: ajaxurl,\r\n\t\t\t\tdata: data,\r\n\t\t\t\tsuccess: function(msg){\r\n\t\t\t\t\tmsg = jQuery.parseJSON(msg);\r\n\t\t\t\t\tjQuery('#ct_checking_status').html(msg.message);\r\n\t\t\t\t\tct_users_spam = msg.spam;\r\n\t\t\t\t\tct_users_checked = msg.checked;\r\n\t\t\t\t\tct_users_bad = msg.bad;\r\n\t\t\t\t},\r\n\t\t\t\terror: function (jqXHR, textStatus, errorThrown){\r\n\t\t\t\t\tjQuery('#ct_error_message').show();\r\n\t\t\t\t\tjQuery('#cleantalk_ajax_error').html(textStatus);\r\n\t\t\t\t\tjQuery('#cleantalk_js_func').html('Show users');\r\n\t\t\t\t\tsetTimeout(ct_show_users_info(), 3000);\r\n\t\t\t\t},\r\n\t\t\t\ttimeout: 15000\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n// Function to toggle dependences\r\nfunction ct_toggle_depended(obj, secondary){\r\n\r\n secondary = secondary || null;\r\n\r\n\tvar depended = jQuery(obj.data('depended')),\r\n\t\tstate = obj.data('state');\r\n\t\t\r\n\tif(!state && !secondary){\r\n\t\tobj.data('state', true);\r\n\t\tdepended.removeProp('disabled');\r\n\t}else{\r\n\t\tobj.data('state', false);\r\n\t\tdepended.prop('disabled', true);\r\n\t\tdepended.removeProp('checked');\r\n\t\tif(depended.data('depended'))\r\n\t\t\tct_toggle_depended(depended, true);\r\n\t}\r\n}\r\n\r\n// Main function of checking\r\nfunction ct_start_check( continue_check ){\r\n\r\n\tcontinue_check = continue_check || null;\r\n\r\n\tif(jQuery('#ct_allow_date_range').is(':checked')){\r\n\r\n\t\tct_date_from = jQuery('#ct_date_range_from').val();\r\n\t\tct_date_till = jQuery('#ct_date_range_till').val();\r\n\r\n\t\tif(!(ct_date_from !== '' && ct_date_till !== '')){\r\n\t\t\talert('Please, specify a date range.');\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\tif(jQuery('#ct_accurate_check').is(':checked')){\r\n\t\tct_accurate_check = true;\r\n\t}\r\n\r\n\tjQuery('.ct_to_hide').hide();\r\n\tjQuery('#ct_working_message').show();\r\n\tjQuery('#ct_preloader').show();\r\n\tjQuery('#ct_pause').show();\r\n\r\n\tct_working = true;\r\n\r\n\tif( continue_check ){\r\n\t\tct_show_users_info();\r\n\t\tct_send_users();\r\n\t} else {\r\n\t\tct_clear_users();\r\n\t}\r\n\r\n}\r\n\r\njQuery(document).ready(function(){\r\n\r\n\t// Setting dependences\r\n\t// jQuery('#ct_accurate_check') .data({'depended': '#ct_allow_date_range', 'state': false});\r\n\tjQuery('#ct_allow_date_range').data({'depended': '.ct_date', 'state': false});\r\n\t\r\n\t// Prev check parameters\r\n\tif(ct_prev_accurate){\r\n\t\tjQuery(\"#ct_accurate_check\").prop('checked', true);\r\n\t}\r\n\tif(ct_prev_from){\r\n\t\tjQuery(\"#ct_allow_date_range\").prop('checked', true).data('state', true);\r\n\t\tjQuery(\"#ct_date_range_from\").removeProp('disabled').val(ct_prev_from);\r\n\t\tjQuery(\"#ct_date_range_till\").removeProp('disabled').val(ct_prev_till);\r\n\t}\r\n\t\r\n\t// Toggle dependences\r\n\tjQuery(\"#ct_allow_date_range, #ct_accurate_check\").on('change', function(){\r\n\t\tct_toggle_depended(jQuery(this));\r\n\t});\r\n\r\n\tjQuery.datepicker.setDefaults(jQuery.datepicker.regional['en']);\r\n\tvar dates = jQuery('#ct_date_range_from, #ct_date_range_till').datepicker(\r\n\t\t{\r\n\t\t\tdateFormat: 'M d yy',\r\n\t\t\tmaxDate:\"+0D\",\r\n\t\t\tchangeMonth:true,\r\n\t\t\tchangeYear:true,\r\n\t\t\tshowAnim: 'slideDown',\r\n\t\t\tonSelect: function(selectedDate){\r\n\t\t\tvar option = this.id == \"ct_date_range_from\" ? \"minDate\" : \"maxDate\",\r\n\t\t\t\tinstance = jQuery( this ).data( \"datepicker\" ),\r\n\t\t\t\tdate = jQuery.datepicker.parseDate(\r\n\t\t\t\t\tinstance.settings.dateFormat || jQuery.datepicker._defaults.dateFormat,\r\n\t\t\t\t\tselectedDate, instance.settings);\r\n\t\t\t\tdates.not(this).datepicker(\"option\", option, date);\r\n\t\t\t}\r\n\t\t}\r\n\t);\r\n\t\r\n\t// Check users\r\n\tjQuery(\"#ct_check_spam_button\").click(function(){\r\n\t\tdocument.cookie = 'ct_paused_users_check=0; path=/';\r\n\t\tct_start_check(false);\r\n\t});\r\n\tjQuery(\"#ct_proceed_check_button\").click(function(){\r\n\t\tct_start_check(true);\r\n\t});\r\n\t\r\n\t// Pause the check\r\n\tjQuery('#ct_pause').on('click', function(){\r\n\t\tct_pause = true;\r\n\t\tvar ct_check = {\r\n\t\t\t'accurate': ct_accurate_check,\r\n\t\t\t'from' : ct_date_from,\r\n\t\t\t'till' : ct_date_till\r\n\t\t};\r\n\t\tdocument.cookie = 'ct_paused_users_check=' + JSON.stringify(ct_check) + '; path=/';\r\n\t});\r\n\t\t\r\n\t//Approve button\r\n\tjQuery(\".cleantalk_delete_from_list_button\").click(function(){\r\n\t\tct_id = jQuery(this).attr(\"data-id\");\r\n\t\t\r\n\t\t// Approving\r\n\t\tvar data = {\r\n\t\t\t'action': 'ajax_ct_approve_user',\r\n\t\t\t'security': ct_ajax_nonce,\r\n\t\t\t'id': ct_id\r\n\t\t};\r\n\t\tjQuery.ajax({\r\n\t\t\ttype: \"POST\",\r\n\t\t\turl: ajaxurl,\r\n\t\t\tdata: data,\r\n\t\t\tsuccess: function(msg){\r\n\t\t\t\tjQuery(\"#comment-\"+ct_id).fadeOut('slow', function(){\r\n\t\t\t\t\tjQuery(\"#comment-\"+ct_id).remove();\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t});\r\n\t\t\r\n\t\t// Positive feedback\r\n\t\tvar data = {\r\n\t\t\t'action': 'ct_feedback_user',\r\n\t\t\t'security': ct_ajax_nonce,\r\n\t\t\t'user_id': ct_id,\r\n\t\t\t'status': 'approve'\r\n\t\t};\r\n\t\tjQuery.ajax({\r\n\t\t\ttype: \"POST\",\r\n\t\t\turl: ajaxurl,\r\n\t\t\tdata: data,\r\n\t\t\tsuccess: function(msg){\r\n\t\t\t\tif(msg == 1){\r\n\t\t\t\t\t// Success\r\n\t\t\t\t}\r\n\t\t\t\tif(msg == 0){\r\n\t\t\t\t\t// Error occurred\r\n\t\t\t\t}\r\n\t\t\t\tif(msg == 'no_hash'){\r\n\t\t\t\t\t// No hash\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\terror: function(jqXHR, textStatus, errorThrown) {\r\n\t\t\t\t\r\n\t\t\t},\r\n\t\t\ttimeout: 5000\r\n\t\t});\r\n\t\t\r\n\t});\r\n\t\r\n\t// Request to Download CSV file.\r\n\tjQuery(\"#ct_get_csv_file\").click(function( e ){\r\n\t\tvar data = {\r\n\t\t\t'action': 'ajax_ct_get_csv_file',\r\n\t\t\t'security': ct_ajax_nonce,\r\n\t\t\t'filename': ctUsersCheck.ct_csv_filename\r\n\t\t};\r\n\t\tjQuery('#' + e.target.id).addClass('disabled');\r\n\t\tjQuery.ajax({\r\n\t\t\ttype: \"POST\",\r\n\t\t\turl: ajaxurl,\r\n\t\t\tdata: data,\r\n\t\t\tsuccess: function(msg){\r\n\t\t\t\tif( parseInt(msg) === 0 ) {\r\n\t\t\t\t\talert(ctUsersCheck.ct_bad_csv);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar url = URL.createObjectURL(new Blob([msg]));\r\n\r\n\t\t\t\t\tvar dummy = document.createElement('a');\r\n\t\t\t\t\tdummy.href = url;\r\n\t\t\t\t\tdummy.download = ctUsersCheck.ct_csv_filename + '.csv';\r\n\r\n\t\t\t\t\tdocument.body.appendChild(dummy);\r\n\t\t\t\t\tdummy.click();\r\n\t\t\t\t}\r\n\t\t\t\tjQuery('#' + e.target.id).removeClass('disabled');\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n});"]}
js/cleantalk_nocache.min.js CHANGED
@@ -1,2 +1,2 @@
1
- function sendRequest(e,t,n){var c=createXMLHTTPObject();if(c){var i=n?"POST":"GET";e="https:"===location.protocol?e.replace("http:","https:"):e.replace("https:","http:"),c.open(i,e,!0),n&&c.setRequestHeader("Content-type","application/x-www-form-urlencoded"),c.onreadystatechange=function(){4==c.readyState&&(200!=c.status&&304!=c.status||t(c))},4!=c.readyState&&c.send(n)}}"undefined"==typeof ctNocache&&(ctNocache.set_cookies_flag=!0,ctNocache.ajaxurl="/wp-admin/admin-ajax.php");var XMLHttpFactories=[function(){return new XMLHttpRequest},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml3.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")}];function createXMLHTTPObject(){for(var e=!1,t=0;t<XMLHttpFactories.length;t++){try{e=XMLHttpFactories[t]()}catch(e){continue}break}return e}function ct_getCookie(e){var t=document.cookie.match(new RegExp("(?:^|; )"+e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)"));return t?decodeURIComponent(t[1]):void 0}function ct_setCookie(e,t){if(ctNocache.set_cookies_flag){document.cookie=e+" =; expires=Thu, 01 Jan 1970 00:00:01 GMT; path = /",document.cookie=e+" =; expires=Thu, 01 Jan 1970 00:00:01 GMT";var n=new Date;n.setDate(n.getDate()+1),setTimeout(function(){document.cookie=e+"="+t+"; expires="+n.toUTCString()+"; path = /;"},500)}return null}function ct_callback(t){for(ct_cookie=t.responseText.trim(),ct_setCookie("ct_checkjs",ct_cookie),i=0;i<document.forms.length;i++)for(f=document.forms[i],j=0;j<f.elements.length;j++)e=f.elements[j],void 0!==e.name&&-1!=e.name.indexOf("ct_checkjs")&&(e.value=ct_cookie)}if(Date.now||(Date.now=function(){return(new Date).getTime()}),null==ct_nocache_executed){var ct_nocache_executed=!0,checkjs_cookie=ct_getCookie("ct_checkjs");if(null!=checkjs_cookie)for(i=0;i<document.forms.length;i++)for(f=document.forms[i],j=0;j<f.elements.length;j++)e=f.elements[j],void 0!==e.name&&-1!=e.name.indexOf("ct_checkjs")&&(e.value=checkjs_cookie);if(null==checkjs_cookie&&sendRequest(ctNocache.ajaxurl+"?"+Math.random(),ct_callback,"action=ct_get_cookie"),void 0!==ctNocache.info_flag&&ctNocache.info_flag){var cleantalk_user_info={},cleantalk_screen_info={};for(var prop in screen)navigator[prop]instanceof Object||""===screen[prop]||(cleantalk_screen_info[prop]=screen[prop]);cleantalk_user_info.screen=cleantalk_screen_info;for(var prev,cleantalk_plugins=Array(),cnt=0,i=0;i<navigator.plugins.length;i++){var plugin;prev!=(plugin=(plugin=navigator.plugins[i]).name+" "+(plugin.version||""))&&(cleantalk_plugins[cnt]=plugin,cnt++,prev=plugin)}cleantalk_user_info.plugins=cleantalk_plugins,cleantalk_user_info.timezone_offset=-(new Date).getTimezoneOffset()/60,cleantalk_user_info.datetime=Math.round((new Date).getTime()/1e3),cleantalk_user_info.browser_x=document.documentElement.clientWidth,cleantalk_user_info.browser_y=document.documentElement.clientHeight;var ua=navigator.userAgent.toLowerCase(),flashInstalled=0;if(void 0!==navigator.plugins&&"object"==typeof navigator.plugins["Shockwave Flash"])flashInstalled=1;else if(void 0!==window.ActiveXObject)try{new ActiveXObject("ShockwaveFlash.ShockwaveFlash")&&(flashInstalled=1)}catch(e){}cleantalk_user_info.is_flash=flashInstalled,isVisitedMain=-1,location.href!="http://"+location.hostname+"/"&&location.href!="https://"+location.hostname+"/"||(isVisitedMain=1,setTimeout(function(){document.cookie="ct_visited_main = 1; path = /;"},1500)),ct_visited_main=ct_getCookie("ct_visited_main"),null==ct_visited_main&&-1==isVisitedMain?isVisitedMain=0:isVisitedMain=1,cleantalk_user_info.is_main=isVisitedMain,setTimeout(function(){document.cookie="ct_user_info = "+escape(JSON.stringify(cleantalk_user_info))+"; path = /;"},1500)}}
2
  //# sourceMappingURL=cleantalk_nocache.min.js.map
1
+ function sendRequest(e,t,n){var c=createXMLHTTPObject();if(c){var o=n?"POST":"GET";e="https:"===location.protocol?e.replace("http:","https:"):e.replace("https:","http:"),c.open(o,e,!0),n&&c.setRequestHeader("Content-type","application/x-www-form-urlencoded"),c.onreadystatechange=function(){4==c.readyState&&(200!=c.status&&304!=c.status||t(c))},4!=c.readyState&&c.send(n)}}"undefined"==typeof ctNocache&&(ctNocache.set_cookies_flag=!0,ctNocache.ajaxurl="/wp-admin/admin-ajax.php");var XMLHttpFactories=[function(){return new XMLHttpRequest},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml3.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")}];function createXMLHTTPObject(){for(var e=!1,t=0;t<XMLHttpFactories.length;t++){try{e=XMLHttpFactories[t]()}catch(e){continue}break}return e}function ct_getCookie(e){var t=document.cookie.match(new RegExp("(?:^|; )"+e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)"));return t?decodeURIComponent(t[1]):void 0}function ct_setCookie(e,t){if(ctNocache.set_cookies_flag){document.cookie=e+" =; expires=Thu, 01 Jan 1970 00:00:01 GMT; path = /",document.cookie=e+" =; expires=Thu, 01 Jan 1970 00:00:01 GMT";var n=new Date;n.setDate(n.getDate()+1),setTimeout(function(){document.cookie=e+"="+t+"; expires="+n.toUTCString()+"; path = /;"},500)}return null}function ct_callback(t){for(ct_cookie=t.responseText.trim(),ct_setCookie("ct_checkjs",ct_cookie),i=0;i<document.forms.length;i++)for(f=document.forms[i],j=0;j<f.elements.length;j++)e=f.elements[j],void 0!==e.name&&-1!=e.name.indexOf("ct_checkjs")&&(e.value=ct_cookie)}if(Date.now||(Date.now=function(){return(new Date).getTime()}),null==ct_nocache_executed){var ct_nocache_executed=!0,checkjs_cookie=ct_getCookie("ct_checkjs");if(null!=checkjs_cookie)for(i=0;i<document.forms.length;i++)for(f=document.forms[i],j=0;j<f.elements.length;j++)e=f.elements[j],void 0!==e.name&&-1!=e.name.indexOf("ct_checkjs")&&(e.value=checkjs_cookie);if(null==checkjs_cookie&&sendRequest(ctNocache.ajaxurl+"?"+Math.random(),ct_callback,"action=ct_get_cookie"),void 0!==ctNocache.info_flag&&ctNocache.info_flag){var cleantalk_user_info={},cleantalk_screen_info={};for(var prop in screen)navigator[prop]instanceof Object||""===screen[prop]||(cleantalk_screen_info[prop]=screen[prop]);cleantalk_user_info.screen=cleantalk_screen_info;for(var prev,cleantalk_plugins=Array(),cnt=0,i=0;i<navigator.plugins.length;i++){var plugin;prev!=(plugin=(plugin=navigator.plugins[i]).name+" "+(plugin.version||""))&&(cleantalk_plugins[cnt]=plugin,cnt++,prev=plugin)}cleantalk_user_info.plugins=cleantalk_plugins,cleantalk_user_info.timezone_offset=-(new Date).getTimezoneOffset()/60,cleantalk_user_info.datetime=Math.round((new Date).getTime()/1e3),cleantalk_user_info.browser_x=document.documentElement.clientWidth,cleantalk_user_info.browser_y=document.documentElement.clientHeight;var ua=navigator.userAgent.toLowerCase(),flashInstalled=0;if(void 0!==navigator.plugins&&"object"==typeof navigator.plugins["Shockwave Flash"])flashInstalled=1;else if(void 0!==window.ActiveXObject)try{new ActiveXObject("ShockwaveFlash.ShockwaveFlash")&&(flashInstalled=1)}catch(e){}cleantalk_user_info.is_flash=flashInstalled,isVisitedMain=-1,location.href!="http://"+location.hostname+"/"&&location.href!="https://"+location.hostname+"/"||(isVisitedMain=1,setTimeout(function(){document.cookie="ct_visited_main = 1; path = /;"},1500)),ct_visited_main=ct_getCookie("ct_visited_main"),isVisitedMain=null==ct_visited_main&&-1==isVisitedMain?0:1,cleantalk_user_info.is_main=isVisitedMain,setTimeout(function(){document.cookie="ct_user_info = "+escape(JSON.stringify(cleantalk_user_info))+"; path = /;"},1500)}}
2
  //# sourceMappingURL=cleantalk_nocache.min.js.map
js/cleantalk_nocache.min.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["cleantalk_nocache.js"],"names":["sendRequest","url","callback","postData","req","createXMLHTTPObject","method","location","protocol","replace","open","setRequestHeader","onreadystatechange","readyState","status","send","ctNocache","set_cookies_flag","ajaxurl","XMLHttpFactories","XMLHttpRequest","ActiveXObject","xmlhttp","i","length","e","ct_getCookie","name","matches","document","cookie","match","RegExp","decodeURIComponent","undefined","ct_setCookie","value","date","Date","setDate","getDate","setTimeout","toUTCString","ct_callback","ct_cookie","responseText","trim","forms","f","j","elements","indexOf","now","getTime","ct_nocache_executed","checkjs_cookie","Math","random","info_flag","cleantalk_user_info","cleantalk_screen_info","prop","screen","navigator","Object","prev","cleantalk_plugins","Array","cnt","plugins","plugin","version","timezone_offset","getTimezoneOffset","datetime","round","browser_x","documentElement","clientWidth","browser_y","clientHeight","ua","userAgent","toLowerCase","flashInstalled","window","is_flash","isVisitedMain","href","hostname","ct_visited_main","is_main","escape","JSON","stringify"],"mappings":"AAQA,SAASA,YAAYC,EAAIC,EAASC,GAC9B,IAAIC,EAAMC,sBACV,GAAKD,EAAL,CACA,IAAIE,EAAS,EAAa,OAAS,MAI/BL,EADa,WADFM,SAASC,SAEdP,EAAIQ,QAAQ,QAAS,UAErBR,EAAIQ,QAAQ,SAAU,SAGhCL,EAAIM,KAAKJ,EAAOL,GAAI,GAChBE,GACAC,EAAIO,iBAAiB,eAAe,qCACxCP,EAAIQ,mBAAqB,WACC,GAAlBR,EAAIS,aACU,KAAdT,EAAIU,QAA+B,KAAdV,EAAIU,QAI7BZ,EAASE,KAES,GAAlBA,EAAIS,YACRT,EAAIW,KAAKZ,IA7BY,oBAAda,YACPA,UAAUC,kBAAmB,EAC7BD,UAAUE,QAAU,4BA8BxB,IAAIC,iBAAmB,CACnB,WAAa,OAAO,IAAIC,gBACxB,WAAa,OAAO,IAAIC,cAAc,mBACtC,WAAa,OAAO,IAAIA,cAAc,mBACtC,WAAa,OAAO,IAAIA,cAAc,uBAG1C,SAAShB,sBAEL,IADA,IAAIiB,GAAU,EACLC,EAAE,EAAEA,EAAEJ,iBAAiBK,OAAOD,IAAK,CACxC,IACID,EAAUH,iBAAiBI,KAE/B,MAAOE,GACH,SAEJ,MAEJ,OAAOH,EAGX,SAASI,aAAaC,GACpB,IAAIC,EAAUC,SAASC,OAAOC,MAAM,IAAIC,OACtC,WAAaL,EAAKlB,QAAQ,+BAAgC,QAAU,aAEtE,OAAOmB,EAAUK,mBAAmBL,EAAQ,SAAMM,EAGpD,SAASC,aAAaR,EAAMS,GAExB,GAAIpB,UAAUC,iBAAkB,CAC5BY,SAASC,OAASH,EAAK,sDACvBE,SAASC,OAASH,EAAK,4CAEvB,IAAIU,EAAO,IAAIC,KACfD,EAAKE,QAAQF,EAAKG,UAAY,GAC9BC,WAAW,WAAaZ,SAASC,OAASH,EAAK,IAAMS,EAAQ,aAAeC,EAAKK,cAAgB,eAAgB,KAGrH,OAAO,KAGX,SAASC,YAAYvC,GAOpB,IALAwC,UAAYxC,EAAIyC,aAAaC,OAG7BX,aAAa,aAAcS,WAEvBrB,EAAE,EAAEA,EAAEM,SAASkB,MAAMvB,OAAOD,IAG/B,IADAyB,EAAEnB,SAASkB,MAAMxB,GACb0B,EAAE,EAAEA,EAAED,EAAEE,SAAS1B,OAAOyB,IAE3BxB,EAAEuB,EAAEE,SAASD,QACDf,IAATT,EAAEE,OAAiD,GAA/BF,EAAEE,KAAKwB,QAAQ,gBAErC1B,EAAEW,MAAMQ,WAaZ,GAJKN,KAAKc,MACTd,KAAKc,IAAM,WAAa,OAAO,IAAId,MAAOe,YAGnBnB,MAArBoB,oBACH,CACC,IAAIA,qBAAoB,EAEpBC,eAAe7B,aAAa,cAEhC,GAAmBQ,MAAhBqB,eAEF,IAAIhC,EAAE,EAAEA,EAAEM,SAASkB,MAAMvB,OAAOD,IAG/B,IADAyB,EAAEnB,SAASkB,MAAMxB,GACb0B,EAAE,EAAEA,EAAED,EAAEE,SAAS1B,OAAOyB,IAE3BxB,EAAEuB,EAAEE,SAASD,QACDf,IAATT,EAAEE,OAAiD,GAA/BF,EAAEE,KAAKwB,QAAQ,gBAErC1B,EAAEW,MAAMmB,gBAYZ,GALmBrB,MAAhBqB,gBAEFvD,YAAYgB,UAAUE,QAAQ,IAAIsC,KAAKC,SAASd,YAAY,6BAG3B,IAAxB3B,UAAU0C,WAA6B1C,UAAU0C,UAC3D,CAEC,IAAIC,oBAAoB,GAEpBC,sBAAsB,GAC1B,IAAI,IAAIC,QAAQC,OAEXC,UAAUF,gBAAiBG,QAAyB,KAAfF,OAAOD,QAEhDD,sBAAsBC,MAAMC,OAAOD,OAGpCF,oBAAoBG,OAAOF,sBAK3B,IAHA,IACIK,KADAC,kBAAkBC,QAElBC,IAAI,EACA7C,EAAE,EAAEA,EAAEwC,UAAUM,QAAQ7C,OAAOD,IACvC,CACC,IACI+C,OACAL,OADAK,QADAA,OAASP,UAAUM,QAAQ9C,IACXI,KAAK,KAAK2C,OAAOC,SAAW,OAEhDL,kBAAkBE,KAAKE,OACvBF,MACAH,KAAOK,QAERX,oBAAoBU,QAAQH,kBAE5BP,oBAAoBa,kBAAmB,IAAIlC,MAAOmC,oBAAoB,GACtEd,oBAAoBe,SAAWlB,KAAKmB,OAAO,IAAIrC,MAAOe,UAAW,KAEjEM,oBAAoBiB,UAAU/C,SAASgD,gBAAgBC,YACvDnB,oBAAoBoB,UAAUlD,SAASgD,gBAAgBG,aAEvD,IAAIC,GAAKlB,UAAUmB,UAAUC,cACzBC,eAAiB,EACrB,QAA+B,IAApBrB,UAAiB,SAA8D,iBAAvCA,UAAUM,QAAQ,mBAEpEe,eAAiB,OAEb,QAAmC,IAAxBC,OAAOhE,cAEtB,IAEK,IAAIA,cAAc,mCAErB+D,eAAiB,GAEjB,MAAM3D,IAGTkC,oBAAoB2B,SAASF,eAE7BG,eAAe,EACZhF,SAASiF,MAAM,UAAUjF,SAASkF,SAAS,KAAOlF,SAASiF,MAAM,WAAWjF,SAASkF,SAAS,MAEhGF,cAAc,EACd9C,WAAW,WAAaZ,SAASC,OAAS,kCAAmC,OAI9E4D,gBAAkBhE,aAAa,mBACXQ,MAAjBwD,kBAA8C,GAAhBH,cAEhCA,cAAc,EAIdA,cAAc,EAGf5B,oBAAoBgC,QAAQJ,cAE5B9C,WAAW,WAAaZ,SAASC,OAAS,kBAAkB8D,OAAOC,KAAKC,UAAUnC,sBAAsB,eAAgB","file":"cleantalk_nocache.min.js","sourcesContent":["/*\r\n Assign default values for backend variables.\r\n*/\r\nif (typeof ctNocache === 'undefined') {\r\n ctNocache.set_cookies_flag = true;\r\n ctNocache.ajaxurl = '/wp-admin/admin-ajax.php';\r\n}\r\n\r\nfunction sendRequest(url,callback,postData) {\r\n var req = createXMLHTTPObject();\r\n if (!req) return;\r\n var method = (postData) ? \"POST\" : \"GET\";\r\n \r\n var protocol = location.protocol;\r\n if (protocol === 'https:') {\r\n url = url.replace('http:', 'https:');\r\n } else {\r\n url = url.replace('https:', 'http:');\r\n }\r\n \r\n req.open(method,url,true);\r\n if (postData)\r\n req.setRequestHeader('Content-type','application/x-www-form-urlencoded');\r\n req.onreadystatechange = function () {\r\n if (req.readyState != 4) return;\r\n if (req.status != 200 && req.status != 304) {\r\n// alert('HTTP error ' + req.status);\r\n return;\r\n }\r\n callback(req);\r\n };\r\n if (req.readyState == 4) return;\r\n req.send(postData);\r\n}\r\n\r\nvar XMLHttpFactories = [\r\n function () {return new XMLHttpRequest()},\r\n function () {return new ActiveXObject(\"Msxml2.XMLHTTP\")},\r\n function () {return new ActiveXObject(\"Msxml3.XMLHTTP\")},\r\n function () {return new ActiveXObject(\"Microsoft.XMLHTTP\")}\r\n];\r\n\r\nfunction createXMLHTTPObject() {\r\n var xmlhttp = false;\r\n for (var i=0;i<XMLHttpFactories.length;i++) {\r\n try {\r\n xmlhttp = XMLHttpFactories[i]();\r\n }\r\n catch (e) {\r\n continue;\r\n }\r\n break;\r\n }\r\n return xmlhttp;\r\n}\r\n\r\nfunction ct_getCookie(name) {\r\n var matches = document.cookie.match(new RegExp(\r\n \"(?:^|; )\" + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + \"=([^;]*)\"\r\n ));\r\n return matches ? decodeURIComponent(matches[1]) : undefined;\r\n}\r\n\r\nfunction ct_setCookie(name, value)\r\n{\r\n if (ctNocache.set_cookies_flag) {\r\n document.cookie = name+\" =; expires=Thu, 01 Jan 1970 00:00:01 GMT; path = /\";\r\n document.cookie = name+\" =; expires=Thu, 01 Jan 1970 00:00:01 GMT\";\r\n \r\n var date = new Date;\r\n date.setDate(date.getDate() + 1);\r\n setTimeout(function() { document.cookie = name+\"=\" + value + \"; expires=\" + date.toUTCString() + \"; path = /;\"}, 500);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction ct_callback(req)\r\n{\r\n\tct_cookie = req.responseText.trim();\r\n\t//alert('Key value: ' + ct_cookie);\r\n\t\r\n\tct_setCookie('ct_checkjs', ct_cookie);\r\n\t\r\n\tfor(i=0;i<document.forms.length;i++)\r\n\t{\r\n\t\tf=document.forms[i];\r\n\t\tfor(j=0;j<f.elements.length;j++)\r\n\t\t{\r\n\t\t\te=f.elements[j];\r\n\t\t\tif(e.name!==undefined&&e.name.indexOf('ct_checkjs')!=-1)\r\n\t\t\t{\r\n\t\t\t\te.value=ct_cookie;\r\n\t\t\t\t//alert('Form #' + i + ', field ' + e.name + ' = ' + ct_cookie);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//alert('Set cookie: \\n' + document.cookie);\r\n}\r\n\r\nif (!Date.now) {\r\n\tDate.now = function() { return new Date().getTime(); }\r\n}\r\n\r\nif(ct_nocache_executed==undefined)\r\n{\r\n\tvar ct_nocache_executed=true;\r\n\t\r\n\tvar checkjs_cookie=ct_getCookie('ct_checkjs');\r\n\t\r\n\tif(checkjs_cookie!=undefined)\r\n\t{\r\n\t\tfor(i=0;i<document.forms.length;i++)\r\n\t\t{\r\n\t\t\tf=document.forms[i];\r\n\t\t\tfor(j=0;j<f.elements.length;j++)\r\n\t\t\t{\r\n\t\t\t\te=f.elements[j];\r\n\t\t\t\tif(e.name!==undefined&&e.name.indexOf('ct_checkjs')!=-1)\r\n\t\t\t\t{\r\n\t\t\t\t\te.value=checkjs_cookie;\r\n\t\t\t\t\t//alert('Form #' + i + ', field ' + e.name + ' = ' + ct_cookie);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\t\r\n\t\r\n\tif(checkjs_cookie==undefined) //86400 is 24 hours\r\n\t{\r\n\t\tsendRequest(ctNocache.ajaxurl+'?'+Math.random(),ct_callback,'action=ct_get_cookie');\r\n\t}\r\n\t\r\n\tif(typeof ctNocache.info_flag !== 'undefined' && ctNocache.info_flag)\r\n\t{\r\n\t\r\n\t\tvar cleantalk_user_info={};\r\n\t\t\r\n\t\tvar cleantalk_screen_info={};\r\n\t\tfor(var prop in screen)\r\n\t\t{\r\n\t\t\tif (navigator[prop] instanceof Object || screen[prop]==='')\r\n\t\t\t\tcontinue;\r\n\t\t\tcleantalk_screen_info[prop]=screen[prop];\r\n\t\t}\r\n\t\t\r\n\t\tcleantalk_user_info.screen=cleantalk_screen_info;\r\n\t\t\r\n\t\tvar cleantalk_plugins=Array();\r\n\t\tvar prev;\r\n\t\tvar cnt=0;\r\n\t\tfor(var i=0;i<navigator.plugins.length;i++)\r\n\t\t{\r\n\t\t\tvar plugin = navigator.plugins[i];\r\n\t\t\tvar plugin = plugin.name+\" \"+(plugin.version || '')\r\n\t\t\tif (prev == plugin ) continue;\r\n\t\t\tcleantalk_plugins[cnt]=plugin;\r\n\t\t\tcnt++;\r\n\t\t\tprev = plugin;\r\n\t\t}\r\n\t\tcleantalk_user_info.plugins=cleantalk_plugins;\r\n\t\t\r\n\t\tcleantalk_user_info.timezone_offset = -new Date().getTimezoneOffset()/60;\r\n\t\tcleantalk_user_info.datetime = Math.round((new Date().getTime())/1000);\r\n\t\t\r\n\t\tcleantalk_user_info.browser_x=document.documentElement.clientWidth;\r\n\t\tcleantalk_user_info.browser_y=document.documentElement.clientHeight;\r\n\t\t\r\n\t\tvar ua = navigator.userAgent.toLowerCase();\r\n\t\tvar flashInstalled = 0;\r\n\t\tif (typeof(navigator.plugins)!=\"undefined\"&&typeof(navigator.plugins[\"Shockwave Flash\"])==\"object\")\r\n\t\t{\r\n\t\t\tflashInstalled = 1;\r\n\t\t}\r\n\t\telse if (typeof window.ActiveXObject != \"undefined\")\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tif (new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\"))\r\n\t\t\t\t{\r\n\t\t\t\t\tflashInstalled = 1;\r\n\t\t\t\t}\r\n\t\t\t} catch(e) {};\r\n\t\t};\r\n\t\t\r\n\t\tcleantalk_user_info.is_flash=flashInstalled;\r\n\t\t\r\n\t\tisVisitedMain=-1;\r\n\t\tif(location.href=='http://'+location.hostname+'/' || location.href=='https://'+location.hostname+'/')\r\n\t\t{\r\n\t\t\tisVisitedMain=1;\r\n\t\t\tsetTimeout(function() { document.cookie = \"ct_visited_main = 1; path = /;\"}, 1500);\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\tct_visited_main = ct_getCookie('ct_visited_main');\r\n\t\tif(ct_visited_main==undefined && isVisitedMain==-1)\r\n\t\t{\r\n\t\t\tisVisitedMain=0;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tisVisitedMain=1;\r\n\t\t}\r\n\t\t\r\n\t\tcleantalk_user_info.is_main=isVisitedMain;\r\n\t\t\r\n\t\tsetTimeout(function() { document.cookie = \"ct_user_info = \"+escape(JSON.stringify(cleantalk_user_info))+\"; path = /;\"}, 1500);\r\n\t}\r\n}"]}
1
+ {"version":3,"sources":["cleantalk_nocache.js"],"names":["sendRequest","url","callback","postData","req","createXMLHTTPObject","method","location","protocol","replace","open","setRequestHeader","onreadystatechange","readyState","status","send","ctNocache","set_cookies_flag","ajaxurl","XMLHttpFactories","XMLHttpRequest","ActiveXObject","xmlhttp","i","length","e","ct_getCookie","name","matches","document","cookie","match","RegExp","decodeURIComponent","undefined","ct_setCookie","value","date","Date","setDate","getDate","setTimeout","toUTCString","ct_callback","ct_cookie","responseText","trim","forms","f","j","elements","indexOf","now","getTime","ct_nocache_executed","checkjs_cookie","Math","random","info_flag","cleantalk_user_info","cleantalk_screen_info","prop","screen","navigator","Object","prev","cleantalk_plugins","Array","cnt","plugins","plugin","version","timezone_offset","getTimezoneOffset","datetime","round","browser_x","documentElement","clientWidth","browser_y","clientHeight","ua","userAgent","toLowerCase","flashInstalled","window","is_flash","isVisitedMain","href","hostname","ct_visited_main","is_main","escape","JSON","stringify"],"mappings":"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","file":"cleantalk_nocache.min.js","sourcesContent":["/*\r\n Assign default values for backend variables.\r\n*/\r\nif (typeof ctNocache === 'undefined') {\r\n ctNocache.set_cookies_flag = true;\r\n ctNocache.ajaxurl = '/wp-admin/admin-ajax.php';\r\n}\r\n\r\nfunction sendRequest(url,callback,postData) {\r\n var req = createXMLHTTPObject();\r\n if (!req) return;\r\n var method = (postData) ? \"POST\" : \"GET\";\r\n \r\n var protocol = location.protocol;\r\n if (protocol === 'https:') {\r\n url = url.replace('http:', 'https:');\r\n } else {\r\n url = url.replace('https:', 'http:');\r\n }\r\n \r\n req.open(method,url,true);\r\n if (postData)\r\n req.setRequestHeader('Content-type','application/x-www-form-urlencoded');\r\n req.onreadystatechange = function () {\r\n if (req.readyState != 4) return;\r\n if (req.status != 200 && req.status != 304) {\r\n// alert('HTTP error ' + req.status);\r\n return;\r\n }\r\n callback(req);\r\n };\r\n if (req.readyState == 4) return;\r\n req.send(postData);\r\n}\r\n\r\nvar XMLHttpFactories = [\r\n function () {return new XMLHttpRequest()},\r\n function () {return new ActiveXObject(\"Msxml2.XMLHTTP\")},\r\n function () {return new ActiveXObject(\"Msxml3.XMLHTTP\")},\r\n function () {return new ActiveXObject(\"Microsoft.XMLHTTP\")}\r\n];\r\n\r\nfunction createXMLHTTPObject() {\r\n var xmlhttp = false;\r\n for (var i=0;i<XMLHttpFactories.length;i++) {\r\n try {\r\n xmlhttp = XMLHttpFactories[i]();\r\n }\r\n catch (e) {\r\n continue;\r\n }\r\n break;\r\n }\r\n return xmlhttp;\r\n}\r\n\r\nfunction ct_getCookie(name) {\r\n var matches = document.cookie.match(new RegExp(\r\n \"(?:^|; )\" + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + \"=([^;]*)\"\r\n ));\r\n return matches ? decodeURIComponent(matches[1]) : undefined;\r\n}\r\n\r\nfunction ct_setCookie(name, value)\r\n{\r\n if (ctNocache.set_cookies_flag) {\r\n document.cookie = name+\" =; expires=Thu, 01 Jan 1970 00:00:01 GMT; path = /\";\r\n document.cookie = name+\" =; expires=Thu, 01 Jan 1970 00:00:01 GMT\";\r\n \r\n var date = new Date;\r\n date.setDate(date.getDate() + 1);\r\n setTimeout(function() { document.cookie = name+\"=\" + value + \"; expires=\" + date.toUTCString() + \"; path = /;\"}, 500);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction ct_callback(req)\r\n{\r\n\tct_cookie = req.responseText.trim();\r\n\t//alert('Key value: ' + ct_cookie);\r\n\t\r\n\tct_setCookie('ct_checkjs', ct_cookie);\r\n\t\r\n\tfor(i=0;i<document.forms.length;i++)\r\n\t{\r\n\t\tf=document.forms[i];\r\n\t\tfor(j=0;j<f.elements.length;j++)\r\n\t\t{\r\n\t\t\te=f.elements[j];\r\n\t\t\tif(e.name!==undefined&&e.name.indexOf('ct_checkjs')!=-1)\r\n\t\t\t{\r\n\t\t\t\te.value=ct_cookie;\r\n\t\t\t\t//alert('Form #' + i + ', field ' + e.name + ' = ' + ct_cookie);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//alert('Set cookie: \\n' + document.cookie);\r\n}\r\n\r\nif (!Date.now) {\r\n\tDate.now = function() { return new Date().getTime(); }\r\n}\r\n\r\nif(ct_nocache_executed==undefined)\r\n{\r\n\tvar ct_nocache_executed=true;\r\n\t\r\n\tvar checkjs_cookie=ct_getCookie('ct_checkjs');\r\n\t\r\n\tif(checkjs_cookie!=undefined)\r\n\t{\r\n\t\tfor(i=0;i<document.forms.length;i++)\r\n\t\t{\r\n\t\t\tf=document.forms[i];\r\n\t\t\tfor(j=0;j<f.elements.length;j++)\r\n\t\t\t{\r\n\t\t\t\te=f.elements[j];\r\n\t\t\t\tif(e.name!==undefined&&e.name.indexOf('ct_checkjs')!=-1)\r\n\t\t\t\t{\r\n\t\t\t\t\te.value=checkjs_cookie;\r\n\t\t\t\t\t//alert('Form #' + i + ', field ' + e.name + ' = ' + ct_cookie);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\t\r\n\t\r\n\tif(checkjs_cookie==undefined) //86400 is 24 hours\r\n\t{\r\n\t\tsendRequest(ctNocache.ajaxurl+'?'+Math.random(),ct_callback,'action=ct_get_cookie');\r\n\t}\r\n\t\r\n\tif(typeof ctNocache.info_flag !== 'undefined' && ctNocache.info_flag)\r\n\t{\r\n\t\r\n\t\tvar cleantalk_user_info={};\r\n\t\t\r\n\t\tvar cleantalk_screen_info={};\r\n\t\tfor(var prop in screen)\r\n\t\t{\r\n\t\t\tif (navigator[prop] instanceof Object || screen[prop]==='')\r\n\t\t\t\tcontinue;\r\n\t\t\tcleantalk_screen_info[prop]=screen[prop];\r\n\t\t}\r\n\t\t\r\n\t\tcleantalk_user_info.screen=cleantalk_screen_info;\r\n\t\t\r\n\t\tvar cleantalk_plugins=Array();\r\n\t\tvar prev;\r\n\t\tvar cnt=0;\r\n\t\tfor(var i=0;i<navigator.plugins.length;i++)\r\n\t\t{\r\n\t\t\tvar plugin = navigator.plugins[i];\r\n\t\t\tvar plugin = plugin.name+\" \"+(plugin.version || '')\r\n\t\t\tif (prev == plugin ) continue;\r\n\t\t\tcleantalk_plugins[cnt]=plugin;\r\n\t\t\tcnt++;\r\n\t\t\tprev = plugin;\r\n\t\t}\r\n\t\tcleantalk_user_info.plugins=cleantalk_plugins;\r\n\t\t\r\n\t\tcleantalk_user_info.timezone_offset = -new Date().getTimezoneOffset()/60;\r\n\t\tcleantalk_user_info.datetime = Math.round((new Date().getTime())/1000);\r\n\t\t\r\n\t\tcleantalk_user_info.browser_x=document.documentElement.clientWidth;\r\n\t\tcleantalk_user_info.browser_y=document.documentElement.clientHeight;\r\n\t\t\r\n\t\tvar ua = navigator.userAgent.toLowerCase();\r\n\t\tvar flashInstalled = 0;\r\n\t\tif (typeof(navigator.plugins)!=\"undefined\"&&typeof(navigator.plugins[\"Shockwave Flash\"])==\"object\")\r\n\t\t{\r\n\t\t\tflashInstalled = 1;\r\n\t\t}\r\n\t\telse if (typeof window.ActiveXObject != \"undefined\")\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tif (new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\"))\r\n\t\t\t\t{\r\n\t\t\t\t\tflashInstalled = 1;\r\n\t\t\t\t}\r\n\t\t\t} catch(e) {};\r\n\t\t};\r\n\t\t\r\n\t\tcleantalk_user_info.is_flash=flashInstalled;\r\n\t\t\r\n\t\tisVisitedMain=-1;\r\n\t\tif(location.href=='http://'+location.hostname+'/' || location.href=='https://'+location.hostname+'/')\r\n\t\t{\r\n\t\t\tisVisitedMain=1;\r\n\t\t\tsetTimeout(function() { document.cookie = \"ct_visited_main = 1; path = /;\"}, 1500);\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\tct_visited_main = ct_getCookie('ct_visited_main');\r\n\t\tif(ct_visited_main==undefined && isVisitedMain==-1)\r\n\t\t{\r\n\t\t\tisVisitedMain=0;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tisVisitedMain=1;\r\n\t\t}\r\n\t\t\r\n\t\tcleantalk_user_info.is_main=isVisitedMain;\r\n\t\t\r\n\t\tsetTimeout(function() { document.cookie = \"ct_user_info = \"+escape(JSON.stringify(cleantalk_user_info))+\"; path = /;\"}, 1500);\r\n\t}\r\n}"]}
js/jquery-ui.min.js CHANGED
@@ -1,10 +1,13 @@
1
- /*! jQuery UI - v1.12.1 - 2018-05-17
2
  * http://jqueryui.com
3
- * Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/draggable.js, widgets/resizable.js, widgets/accordion.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/mouse.js, widgets/progressbar.js
4
  * Copyright jQuery Foundation and other contributors; Licensed MIT */
5
 
6
- (function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}function i(t){for(var e,i;t.length&&t[0]!==document;){if(e=t.css("position"),("absolute"===e||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=n(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(u.inline?u.dpDiv.parent()[0]:u.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}t.ui=t.ui||{},t.ui.version="1.12.1";var r=0,l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},l=e.split(".")[0];e=e.split(".")[1];var h=l+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][h.toLowerCase()]=function(e){return!!t.data(e,h)},t[l]=t[l]||{},n=t[l][e],o=t[l][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:l,widgetName:e,widgetFullName:h}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;a>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(e[i]=t.isPlainObject(s)?t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=r++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var l=s.match(/^([\w:-]*)\s*(.*)$/),h=l[1]+o.eventNamespace,c=l[2];c?n.on(h,c,r):i.on(h,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,l=/top|center|bottom/,h=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,g,m,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),k={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,g=_.offset,m=t.extend({},g),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):l.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=l.test(i[1])?i[1]:"center",t=h.exec(i[0]),e=h.exec(i[1]),k[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?m.left+=p:"center"===n.at[0]&&(m.left+=p/2),"bottom"===n.at[1]?m.top+=f:"center"===n.at[1]&&(m.top+=f/2),u=e(k.at,p,f),m.left+=u[0],m.top+=u[1],this.each(function(){var s,r,l=t(this),h=l.outerWidth(),c=l.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),x=h+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},m),T=e(k.my,l.outerWidth(),l.outerHeight());"right"===n.my[0]?D.left-=h:"center"===n.my[0]&&(D.left-=h/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=T[0],D.top+=T[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:h,elemHeight:c,collisionPosition:s,collisionWidth:x,collisionHeight:C,offset:[u[0]+T[0],u[1]+T[1]],my:n.my,at:n.at,within:b,elem:l})}),n.using&&(r=function(t){var e=g.left-D.left,i=e+p-h,s=g.top-D.top,r=s+f-c,u={target:{element:v,left:g.left,top:g.top,width:p,height:f},element:{element:l,left:D.left,top:D.top,width:h,height:c},horizontal:0>i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};h>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),l.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,l=n-r,h=r+e.collisionWidth-a-n;e.collisionWidth>a?l>0&&0>=h?(i=t.left+l+e.collisionWidth-a-n,t.left+=l-i):t.left=h>0&&0>=l?n:l>h?n+a-e.collisionWidth:n:l>0?t.left+=l:h>0?t.left-=h:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,l=n-r,h=r+e.collisionHeight-a-n;e.collisionHeight>a?l>0&&0>=h?(i=t.top+l+e.collisionHeight-a-n,t.top+=l-i):t.top=h>0&&0>=l?n:l>h?n+a-e.collisionHeight:n:l>0?t.top+=l:h>0?t.top-=h:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,l=n.isWindow?n.scrollLeft:n.offset.left,h=t.left-e.collisionPosition.marginLeft,c=h-l,u=h+e.collisionWidth-r-l,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-l,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,l=n.isWindow?n.scrollTop:n.offset.top,h=t.top-e.collisionPosition.marginTop,c=h-l,u=h+e.collisionHeight-r-l,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-l,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,l,h=i.nodeName.toLowerCase();return"area"===h?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(h)?(r=!i.disabled,r&&(l=t(i).closest("fieldset")[0],l&&(r=!l.disabled))):r="a"===h?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var h=!1;t(document).on("mouseup",function(){h=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!h){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,n="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),h=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,h=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blurActiveElement(e),this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("<div>").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)
7
- },_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),l=t.pageX,h=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(l=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(h=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(l=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(h=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,h=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((l-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,l=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(l=this.originalPageX),"x"===a.axis&&(h=this.originalPageY)),{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:l-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body"),o=s.options;n.css("cursor")&&(o._cursor=n.css("cursor")),n.css("cursor",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t("body").css("cursor",n._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("opacity")&&(o._opacity=n.css("opacity")),n.css("opacity",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css("opacity",n._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY<n.scrollSensitivity?a.scrollTop=o=a.scrollTop+n.scrollSpeed:e.pageY-s.overflowOffset.top<n.scrollSensitivity&&(a.scrollTop=o=a.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+a.offsetWidth-e.pageX<n.scrollSensitivity?a.scrollLeft=o=a.scrollLeft+n.scrollSpeed:e.pageX-s.overflowOffset.left<n.scrollSensitivity&&(a.scrollLeft=o=a.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(e.pageY-t(r).scrollTop()<n.scrollSensitivity?o=t(r).scrollTop(t(r).scrollTop()-n.scrollSpeed):t(window).height()-(e.pageY-t(r).scrollTop())<n.scrollSensitivity&&(o=t(r).scrollTop(t(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(e.pageX-t(r).scrollLeft()<n.scrollSensitivity?o=t(r).scrollLeft(t(r).scrollLeft()-n.scrollSpeed):t(window).width()-(e.pageX-t(r).scrollLeft())<n.scrollSensitivity&&(o=t(r).scrollLeft(t(r).scrollLeft()+n.scrollSpeed)))),o!==!1&&t.ui.ddmanager&&!n.dropBehaviour&&t.ui.ddmanager.prepareOffsets(s,e)}}),t.ui.plugin.add("draggable","snap",{start:function(e,i,s){var n=s.options;s.snapElements=[],t(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var e=t(this),i=e.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:e.outerWidth(),height:e.outerHeight(),top:i.top,left:i.left})})},drag:function(e,i,s){var n,o,a,r,l,h,c,u,d,p,f=s.options,g=f.snapTolerance,m=i.offset.left,_=m+s.helperProportions.width,v=i.offset.top,b=v+s.helperProportions.height;for(d=s.snapElements.length-1;d>=0;d--)l=s.snapElements[d].left-s.margins.left,h=l+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,l-g>_||m>h+g||c-g>b||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(n=g>=Math.abs(c-b),o=g>=Math.abs(u-v),a=g>=Math.abs(l-_),r=g>=Math.abs(h-m),n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left)),p=n||o||a||r,"outer"!==f.snapMode&&(n=g>=Math.abs(c-v),o=g>=Math.abs(u-b),a=g>=Math.abs(l-m),r=g>=Math.abs(h-_),n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(n=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",n+e)}),this.css("zIndex",n+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("zIndex")&&(o._zIndex=n.css("zIndex")),n.css("zIndex",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css("zIndex",n._zIndex)}}),t.ui.draggable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,l=this._change[o];return this._updatePrevProperties(),l?(i=l.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,l,h=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,l=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,h.animate||this.element.css(t.extend(a,{top:l,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!h.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,l=this.originalPosition.top+this.originalSize.height,h=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&h&&(t.left=r-e.minWidth),s&&h&&(t.left=r-e.maxWidth),a&&c&&(t.top=l-e.minHeight),n&&c&&(t.top=l-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,l={width:i.size.width-r,height:i.size.height-a},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(l,c&&h?{top:c,left:h}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,l=t(this).resizable("instance"),h=l.options,c=l.element,u=h.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(l.containerElement=t(d),/document/.test(u)||u===document?(l.containerOffset={left:0,top:0},l.containerPosition={left:0,top:0},l.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=l._num(e.css("padding"+s))}),l.containerOffset=e.offset(),l.containerPosition=e.position(),l.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=l.containerOffset,n=l.containerSize.height,o=l.containerSize.width,a=l._hasScroll(d,"left")?d.scrollWidth:o,r=l._hasScroll(d)?d.scrollHeight:n,l.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,l=a.containerOffset,h=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=l),h.left<(a._helper?l.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-l.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?l.left:0),h.top<(a._helper?l.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-l.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?l.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-l.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-l.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),l=a.outerWidth()-e.sizeDiff.width,h=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:l,height:h}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:l,height:h})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,l="number"==typeof s.grid?[s.grid,s.grid]:s.grid,h=l[0]||1,c=l[1]||1,u=Math.round((n.width-o.width)/h)*h,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&p>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=l,_&&(p+=h),v&&(f+=c),g&&(p-=h),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-h)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-h>0?(i.size.width=p,i.position.left=a.left-u):(p=h-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t("<span>"),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void 0)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");
8
- e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],l=r&&n.collapsible,h=l?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:l?t():a,newPanel:h};e.preventDefault(),r&&!n.collapsible||this._trigger("beforeActivate",e,u)===!1||(n.active=l?!1:this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,l=t.css("box-sizing"),h=t.length&&(!e.length||t.index()<e.index()),c=this.options.animate||{},u=h&&c.down||c,d=function(){a._toggleComplete(i)};return"number"==typeof u&&(o=u),"string"==typeof u&&(n=u),n=n||u.easing||c.easing,o=o||u.duration||c.duration,e.length?t.length?(s=t.show().outerHeight(),e.animate(this.hideProps,{duration:o,easing:n,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(this.showProps,{duration:o,easing:n,complete:d,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?"content-box"===l&&(r+=i.now):"content"!==a.options.heightStyle&&(i.now=Math.round(s-e.outerHeight()-r),r=0)}}),void 0):e.animate(this.hideProps,o,n,d):t.animate(this.showProps,o,n,d)},_toggleComplete:function(t){var e=t.oldPanel,i=e.prev();this._removeClass(e,"ui-accordion-content-active"),this._removeClass(i,"ui-accordion-header-active")._addClass(i,"ui-accordion-header-collapsed"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}});var c=/ui-corner-([a-z]){2,6}/g;t.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"<div>",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,function(s,n){var o,a={};return n?"controlgroupLabel"===s?(o=e.element.find(n),o.each(function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("<span class='ui-controlgroup-label-contents'></span>")}),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),i=i.concat(o.get()),void 0):(t.fn[s]&&(a=e["_"+s+"Options"]?e["_"+s+"Options"]("middle"):{classes:{}},e.element.find(n).each(function(){var n=t(this),o=n[s]("instance"),r=t.widget.extend({},a);if("button"!==s||!n.parent(".ui-spinner").length){o||(o=n[s]()[s]("instance")),o&&(r.classes=e._resolveClassesValues(r.classes,o)),n[s](r);var l=n[s]("widget");t.data(l[0],"ui-controlgroup-data",o?o:n[s]("instance")),i.push(l[0])}})),void 0):void 0}),this.childWidgets=t(t.unique(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var i=t(this),s=i.data("ui-controlgroup-data");s&&s[e]&&s[e]()})},_updateCornerClass:function(t,e){var i="ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all",s=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,i),this._addClass(t,null,s)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e?"auto":!1,classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var s={};return t.each(e,function(n){var o=i.options.classes[n]||"";o=t.trim(o.replace(c,"")),s[n]=(o+" "+e[n]).replace(/\s+/g," ")}),s},_setOption:function(t,e){return"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"===t?(this._callChildMethod(e?"disable":"enable"),void 0):(this.refresh(),void 0)},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,this.options.onlyVisible&&(e=e.filter(":visible")),e.length&&(t.each(["first","last"],function(t,s){var n=e[s]().data("ui-controlgroup-data");if(n&&i["_"+n.widgetName+"Options"]){var o=i["_"+n.widgetName+"Options"](1===e.length?"only":s);o.classes=i._resolveClassesValues(o.classes,n),n.element[n.widgetName](o)}else i._updateCornerClass(e[s](),s)}),this._callChildMethod("refresh"))}}),t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i,s=this,n=this._super()||{};return this._readType(),i=this.element.labels(),this.label=t(i[i.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){s.originalLabel+=3===this.nodeType?t(this).text():this.outerHTML}),this.originalLabel&&(n.label=this.originalLabel),e=this.element[0].disabled,null!=e&&(n.disabled=e),n},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e,i=this.element[0].name,s="input[name='"+t.ui.escapeSelector(i)+"']";return i?(e=this.form.length?t(this.form[0].elements).filter(s):t(s).filter(function(){return 0===t(this).form().length}),e.not(this.element)):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each(function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){return"label"!==t||e?(this._super(t,e),"disabled"===t?(this._toggleClass(this.label,null,"ui-state-disabled",e),this.element[0].disabled=e,void 0):(this.refresh(),void 0)):void 0},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t("<span>"),this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),t.ui.checkboxradio,t.widget("ui.button",{version:"1.12.1",defaultElement:"<button>",options:{classes:{"ui-button":"ui-corner-all"},disabled:null,icon:null,iconPosition:"beginning",label:null,showLabel:!0},_getCreateOptions:function(){var t,e=this._super()||{};return this.isInput=this.element.is("input"),t=this.element[0].disabled,null!=t&&(e.disabled=t),this.originalLabel=this.isInput?this.element.val():this.element.html(),this.originalLabel&&(e.label=this.originalLabel),e},_create:function(){!this.option.showLabel&!this.options.icon&&(this.options.showLabel=!0),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled||!1),this.hasTitle=!!this.element.attr("title"),this.options.label&&this.options.label!==this.originalLabel&&(this.isInput?this.element.val(this.options.label):this.element.html(this.options.label)),this._addClass("ui-button","ui-widget"),this._setOption("disabled",this.options.disabled),this._enhance(),this.element.is("a")&&this._on({keyup:function(e){e.keyCode===t.ui.keyCode.SPACE&&(e.preventDefault(),this.element[0].click?this.element[0].click():this.element.trigger("click"))}})},_enhance:function(){this.element.is("button")||this.element.attr("role","button"),this.options.icon&&(this._updateIcon("icon",this.options.icon),this._updateTooltip())},_updateTooltip:function(){this.title=this.element.attr("title"),this.options.showLabel||this.title||this.element.attr("title",this.options.label)},_updateIcon:function(e,i){var s="iconPosition"!==e,n=s?this.options.iconPosition:i,o="top"===n||"bottom"===n;this.icon?s&&this._removeClass(this.icon,null,this.options.icon):(this.icon=t("<span>"),this._addClass(this.icon,"ui-button-icon","ui-icon"),this.options.showLabel||this._addClass("ui-button-icon-only")),s&&this._addClass(this.icon,null,i),this._attachIcon(n),o?(this._addClass(this.icon,null,"ui-widget-icon-block"),this.iconSpace&&this.iconSpace.remove()):(this.iconSpace||(this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-button-icon-space")),this._removeClass(this.icon,null,"ui-wiget-icon-block"),this._attachIconSpace(n))},_destroy:function(){this.element.removeAttr("role"),this.icon&&this.icon.remove(),this.iconSpace&&this.iconSpace.remove(),this.hasTitle||this.element.removeAttr("title")},_attachIconSpace:function(t){this.icon[/^(?:end|bottom)/.test(t)?"before":"after"](this.iconSpace)},_attachIcon:function(t){this.element[/^(?:end|bottom)/.test(t)?"append":"prepend"](this.icon)},_setOptions:function(t){var e=void 0===t.showLabel?this.options.showLabel:t.showLabel,i=void 0===t.icon?this.options.icon:t.icon;e||i||(t.showLabel=!0),this._super(t)},_setOption:function(t,e){"icon"===t&&(e?this._updateIcon(t,e):this.icon&&(this.icon.remove(),this.iconSpace&&this.iconSpace.remove())),"iconPosition"===t&&this._updateIcon(t,e),"showLabel"===t&&(this._toggleClass("ui-button-icon-only",null,!e),this._updateTooltip()),"label"===t&&(this.isInput?this.element.val(e):(this.element.html(e),this.icon&&(this._attachIcon(this.options.iconPosition),this._attachIconSpace(this.options.iconPosition)))),this._super(t,e),"disabled"===t&&(this._toggleClass(null,"ui-state-disabled",e),this.element[0].disabled=e,e&&this.element.blur())},refresh:function(){var t=this.element.is("input, button")?this.element[0].disabled:this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOptions({disabled:t}),this._updateTooltip()}}),t.uiBackCompat!==!1&&(t.widget("ui.button",t.ui.button,{options:{text:!0,icons:{primary:null,secondary:null}},_create:function(){this.options.showLabel&&!this.options.text&&(this.options.showLabel=this.options.text),!this.options.showLabel&&this.options.text&&(this.options.text=this.options.showLabel),this.options.icon||!this.options.icons.primary&&!this.options.icons.secondary?this.options.icon&&(this.options.icons.primary=this.options.icon):this.options.icons.primary?this.options.icon=this.options.icons.primary:(this.options.icon=this.options.icons.secondary,this.options.iconPosition="end"),this._super()},_setOption:function(t,e){return"text"===t?(this._super("showLabel",e),void 0):("showLabel"===t&&(this.options.text=e),"icon"===t&&(this.options.icons.primary=e),"icons"===t&&(e.primary?(this._super("icon",e.primary),this._super("iconPosition","beginning")):e.secondary&&(this._super("icon",e.secondary),this._super("iconPosition","end"))),this._superApply(arguments),void 0)}}),t.fn.button=function(e){return function(){return!this.length||this.length&&"INPUT"!==this[0].tagName||this.length&&"INPUT"===this[0].tagName&&"checkbox"!==this.attr("type")&&"radio"!==this.attr("type")?e.apply(this,arguments):(t.ui.checkboxradio||t.error("Checkboxradio widget missing"),0===arguments.length?this.checkboxradio({icon:!1}):this.checkboxradio.apply(this,arguments))}}(t.fn.button),t.fn.buttonset=function(){return t.ui.controlgroup||t.error("Controlgroup widget missing"),"option"===arguments[0]&&"items"===arguments[1]&&arguments[2]?this.controlgroup.apply(this,[arguments[0],"items.button",arguments[2]]):"option"===arguments[0]&&"items"===arguments[1]?this.controlgroup.apply(this,[arguments[0],"items.button"]):("object"==typeof arguments[0]&&arguments[0].items&&(arguments[0].items={button:arguments[0].items}),this.controlgroup.apply(this,arguments))}),t.ui.button,t.extend(t.ui,{datepicker:{version:"1.12.1"}});var u;t.extend(s.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return a(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,o;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),o=this._newInst(t(e),n),o.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,o):n&&this._inlineDatepicker(e,o)},_newInst:function(e,i){var s=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?n(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(i),t.data(e,"datepicker",i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,o,a=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),a&&(i.append=t("<span class='"+this._appendClass+"'>"+a+"</span>"),e[r?"before":"after"](i.append)),e.off("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.on("focus",this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),o=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:o,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(o?t("<img/>").attr({src:o,alt:n,title:n}):n)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var r,l,h,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+r+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),d=this._dialogInst=this._newInst(this._dialogInput,!1),d.settings={},t.data(this._dialogInput[0],"datepicker",d)),a(d.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(l=document.documentElement.clientWidth,h=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[l/2-100+c,h/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),u===n&&(u=null))},_enableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,r,l,h=this._getInst(e);return 2===arguments.length&&"string"==typeof i?"defaults"===i?t.extend({},t.datepicker._defaults):h?"all"===i?t.extend({},h.settings):this._get(h,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),h&&(this._curInst===h&&this._hideDatepicker(),o=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(h,"min"),l=this._getMinMaxDate(h,"max"),a(h.settings,n),null!==r&&void 0!==n.dateFormat&&void 0===n.minDate&&(h.settings.minDate=this._formatDate(h,r)),null!==l&&void 0!==n.dateFormat&&void 0===n.maxDate&&(h.settings.maxDate=this._formatDate(h,l)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),h),this._autoSize(h),this._setDate(h,o),this._updateAlternate(h),this._updateDatepicker(h)),void 0)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv),n[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,n[0]),i=t.datepicker._get(o,"onSelect"),i?(s=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[s,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s,n=t.datepicker._getInst(e.target);return t.datepicker._get(n,"constrainInput")?(i=t.datepicker._possibleChars(t.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var s,n,o,r,l,h,c;s=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==s&&(t.datepicker._curInst.dpDiv.stop(!0,!0),s&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),n=t.datepicker._get(s,"beforeShow"),o=n?n.apply(e,[e,s]):{},o!==!1&&(a(s.settings,o),s.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(s),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),l={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,s.dpDiv.empty(),s.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(s),l=t.datepicker._checkOffset(s,l,r),s.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:l.left+"px",top:l.top+"px"}),s.inline||(h=t.datepicker._get(s,"showAnim"),c=t.datepicker._get(s,"duration"),s.dpDiv.css("z-index",i(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[h]?s.dpDiv.show(h,t.datepicker._get(s,"showOptions"),c):s.dpDiv[h||"show"](h?c:null),t.datepicker._shouldFocusInput(s)&&s.input.trigger("focus"),t.datepicker._curInst=s))}},_updateDatepicker:function(e){this.maxRows=4,u=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),n=s[1],a=17,r=e.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,l=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),h=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>l&&l>n?Math.abs(i.left+n-l):0),i.top-=Math.min(i.top,i.top+o>h&&h>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),s=this._get(a,"duration"),n=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),s,n):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,o=this._get(a,"onClose"),o&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),o=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(o,i+("M"===s?this._get(o,"showCurrentAtPos"):0),s),this._updateDatepicker(o))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);
9
- this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),o=this._getInst(n[0]);o["selected"+("M"===s?"Month":"Year")]=o["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(n)},_selectDay:function(e,i,s,n){var o,a=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||(o=this._getInst(a[0]),o.selectedDay=o.currentDay=t("a",n).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),o=this._getInst(n[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),s=this._get(o,"onSelect"),s?s.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(o).val(n))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,o,a,r,l=0,h=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof h?h:(new Date).getFullYear()%100+parseInt(h,10),u=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,d=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,_=-1,v=-1,b=!1,y=function(t){var i=e.length>n+1&&e.charAt(n+1)===t;return i&&n++,i},w=function(t){var e=y(t),s="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n="y"===t?s:1,o=RegExp("^\\d{"+n+","+s+"}"),a=i.substring(l).match(o);if(!a)throw"Missing number at position "+l;return l+=a[0].length,parseInt(a[0],10)},k=function(e,s,n){var o=-1,a=t.map(y(e)?n:s,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var s=e[1];return i.substr(l,s.length).toLowerCase()===s.toLowerCase()?(o=e[0],l+=s.length,!1):void 0}),-1!==o)return o+1;throw"Unknown name at position "+l},x=function(){if(i.charAt(l)!==e.charAt(n))throw"Unexpected literal at position "+l;l++};for(n=0;e.length>n;n++)if(b)"'"!==e.charAt(n)||y("'")?x():b=!1;else switch(e.charAt(n)){case"d":_=w("d");break;case"D":k("D",u,d);break;case"o":v=w("o");break;case"m":m=w("m");break;case"M":m=k("M",p,f);break;case"y":g=w("y");break;case"@":r=new Date(w("@")),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"!":r=new Date((w("!")-this._ticksTo1970)/1e4),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"'":y("'")?x():b=!0;break;default:x()}if(i.length>l&&(a=i.substr(l),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c>=g?0:-100)),v>-1)for(m=1,_=v;;){if(o=this._getDaysInMonth(g,m-1),o>=_)break;m++,_-=o}if(r=this._daylightSavingAdjust(new Date(g,m-1,_)),r.getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==_)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,l=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},h=function(t,e,i){var s=""+e;if(l(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return l(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||l("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=h("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,o);break;case"o":u+=h("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=h("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=l("y")?e.getFullYear():(10>e.getFullYear()%100?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":l("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(r){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},o=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,o=n.getFullYear(),a=n.getMonth(),r=n.getDate(),l=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,h=l.exec(i);h;){switch(h[2]||"d"){case"d":case"D":r+=parseInt(h[1],10);break;case"w":case"W":r+=7*parseInt(h[1],10);break;case"m":case"M":a+=parseInt(h[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a));break;case"y":case"Y":o+=parseInt(h[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a))}h=l.exec(i)}return new Date(o,a,r)},a=null==i||""===i?s:"string"==typeof i?o(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return a=a&&"Invalid Date"==""+a?s:a,a&&(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0)),this._daylightSavingAdjust(a)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,l,h,c,u,d,p,f,g,m,_,v,b,y,w,k,x,C,D,T,I,M,P,S,N,H,A,z,O,E,W,F,L,R=new Date,Y=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),B=this._get(t,"isRTL"),j=this._get(t,"showButtonPanel"),q=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),U=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),X=this._get(t,"stepMonths"),$=1!==U[0]||1!==U[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),J=this._getMinMaxDate(t,"min"),Q=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),Q)for(e=this._daylightSavingAdjust(new Date(Q.getFullYear(),Q.getMonth()-U[0]*U[1]+1,Q.getDate())),e=J&&J>e?J:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-X,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(B?"e":"w")+"'>"+i+"</span></a>":q?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(B?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+X,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(B?"w":"e")+"'>"+n+"</span></a>":q?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(B?"w":"e")+"'>"+n+"</span></a>",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:Y,a=K?this.formatDate(a,r,this._getFormatConfig(t)):a,l=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",h=j?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(B?l:"")+(this._isInRange(t,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+a+"</button>":"")+(B?"":l)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),_=this._get(t,"showOtherMonths"),v=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;U[0]>k;k++){for(x="",this.maxRows=4,C=0;U[1]>C;C++){if(D=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),T=" ui-corner-all",I="",$){if(I+="<div class='ui-datepicker-group",U[1]>1)switch(C){case 0:I+=" ui-datepicker-group-first",T=" ui-corner-"+(B?"right":"left");break;case U[1]-1:I+=" ui-datepicker-group-last",T=" ui-corner-"+(B?"left":"right");break;default:I+=" ui-datepicker-group-middle",T=""}I+="'>"}for(I+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+T+"'>"+(/all|left/.test(T)&&0===k?B?o:s:"")+(/all|right/.test(T)&&0===k?B?s:o:"")+this._generateMonthYearHeader(t,Z,te,J,Q,k>0||C>0,f,g)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",M=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",w=0;7>w;w++)P=(w+c)%7,M+="<th scope='col'"+((w+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[P]+"'>"+p[P]+"</span></th>";for(I+=M+"</tr></thead><tbody>",S=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),N=(this._getFirstDayOfMonth(te,Z)-c+7)%7,H=Math.ceil((N+S)/7),A=$?this.maxRows>H?this.maxRows:H:H,this.maxRows=A,z=this._daylightSavingAdjust(new Date(te,Z,1-N)),O=0;A>O;O++){for(I+="<tr>",E=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(z)+"</td>":"",w=0;7>w;w++)W=m?m.apply(t.input?t.input[0]:null,[z]):[!0,""],F=z.getMonth()!==Z,L=F&&!v||!W[0]||J&&J>z||Q&&z>Q,E+="<td class='"+((w+c+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(z.getTime()===D.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===z.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!_?"":" "+W[1]+(z.getTime()===G.getTime()?" "+this._currentClass:"")+(z.getTime()===Y.getTime()?" ui-datepicker-today":""))+"'"+(F&&!_||!W[2]?"":" title='"+W[2].replace(/'/g,"&#39;")+"'")+(L?"":" data-handler='selectDay' data-event='click' data-month='"+z.getMonth()+"' data-year='"+z.getFullYear()+"'")+">"+(F&&!_?"&#xa0;":L?"<span class='ui-state-default'>"+z.getDate()+"</span>":"<a class='ui-state-default"+(z.getTime()===Y.getTime()?" ui-state-highlight":"")+(z.getTime()===G.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+"' href='#'>"+z.getDate()+"</a>")+"</td>",z.setDate(z.getDate()+1),z=this._daylightSavingAdjust(z);I+=E+"</tr>"}Z++,Z>11&&(Z=0,te++),I+="</tbody></table>"+($?"</div>"+(U[0]>0&&C===U[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),x+=I}y+=x}return y+=h,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var l,h,c,u,d,p,f,g,m=this._get(t,"changeMonth"),_=this._get(t,"changeYear"),v=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(o||!m)y+="<span class='ui-datepicker-month'>"+a[e]+"</span>";else{for(l=s&&s.getFullYear()===i,h=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!l||c>=s.getMonth())&&(!h||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+r[c]+"</option>");y+="</select>"}if(v||(b+=y+(!o&&m&&_?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",o||!_)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";g>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),v&&(b+=(!o&&m&&_?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,l=this._get(t,"yearRange");return l&&(i=l.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1",t.datepicker,t.widget("ui.dialog",{version:"1.12.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get(),o=Math.max.apply(null,n);return o>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",o+1),s=!0),s&&!i&&this._trigger("focus",e),s},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(e){function i(){var e=t.ui.safeActiveElement(this.document[0]),i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),void 0;if(e.keyCode===t.ui.keyCode.TAB&&!e.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){n.trigger("focus")}),e.preventDefault()):(this._delay(function(){s.trigger("focus")}),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>"),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("<button type='button'></button>").button({label:t("<a>").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html("&#160;")},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>"),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this._removeClass(this.uiDialog,"ui-dialog-buttons"),void 0):(t.each(i,function(i,s){var n,o;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,o={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel,icons:s.icons,text:s.text},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,delete s.icons,"boolean"==typeof s.text&&delete s.text,t("<button></button>",s).button(o).appendTo(e.uiButtonSet).on("click",function(){n.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,o){var a=o.offset.left-i.document.scrollLeft(),r=o.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(a>=0?"+":"")+a+" "+"top"+(r>=0?"+":"")+r,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,o=this.uiDialog.css("position"),a="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:a,start:function(s,n){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,o){var a=i.uiDialog.offset(),r=a.left-i.document.scrollLeft(),l=a.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(l>=0?"+":"")+l,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(o))}}).css("position",o)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,s=!1,n={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,i){var s,n,o=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("<a>").text(""+this.options.closeText).html()}),"draggable"===e&&(s=o.is(":data(ui-draggable)"),s&&!i&&o.draggable("destroy"),!s&&i&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(n=o.is(":data(ui-resizable)"),n&&!i&&o.resizable("destroy"),n&&"string"==typeof i&&o.resizable("option","handles",i),n||i===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=t("<div>").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.progressbar",{version:"1.12.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("<div>").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){return void 0===t?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),void 0)},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))
10
- },_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div>").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}})});
 
 
 
1
+ /*! jQuery UI - v1.12.1 - 2020-01-10
2
  * http://jqueryui.com
3
+ * Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/draggable.js, widgets/droppable.js, widgets/resizable.js, widgets/selectable.js, widgets/sortable.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/selectmenu.js, widgets/slider.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js
4
  * Copyright jQuery Foundation and other contributors; Licensed MIT */
5
 
6
+ (function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}function i(t){for(var e,i;t.length&&t[0]!==document;){if(e=t.css("position"),("absolute"===e||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=n(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(p.inline?p.dpDiv.parent()[0]:p.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}function r(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{},t.ui.version="1.12.1";var h=0,l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;a>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(e[i]=t.isPlainObject(s)?t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=h++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,g,m,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),k={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,g=_.offset,m=t.extend({},g),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):h.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=h.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),k[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?m.left+=p:"center"===n.at[0]&&(m.left+=p/2),"bottom"===n.at[1]?m.top+=f:"center"===n.at[1]&&(m.top+=f/2),u=e(k.at,p,f),m.left+=u[0],m.top+=u[1],this.each(function(){var s,r,h=t(this),l=h.outerWidth(),c=h.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),x=l+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},m),I=e(k.my,h.outerWidth(),h.outerHeight());"right"===n.my[0]?D.left-=l:"center"===n.my[0]&&(D.left-=l/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=I[0],D.top+=I[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:l,elemHeight:c,collisionPosition:s,collisionWidth:x,collisionHeight:C,offset:[u[0]+I[0],u[1]+I[1]],my:n.my,at:n.at,within:b,elem:h})}),n.using&&(r=function(t){var e=g.left-D.left,i=e+p-l,s=g.top-D.top,r=s+f-c,u={target:{element:v,left:g.left,top:g.top,width:p,height:f},element:{element:h,left:D.left,top:D.top,width:l,height:c},horizontal:0>i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-h,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,.\/:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var c=!1;t(document).on("mouseup",function(){c=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!c){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,n="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),c=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,c=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blurActiveElement(e),this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("<div>").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)
7
+ },_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),h=t.pageX,l=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,h=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(h=this.originalPageX),"x"===a.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body"),o=s.options;n.css("cursor")&&(o._cursor=n.css("cursor")),n.css("cursor",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t("body").css("cursor",n._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("opacity")&&(o._opacity=n.css("opacity")),n.css("opacity",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css("opacity",n._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY<n.scrollSensitivity?a.scrollTop=o=a.scrollTop+n.scrollSpeed:e.pageY-s.overflowOffset.top<n.scrollSensitivity&&(a.scrollTop=o=a.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+a.offsetWidth-e.pageX<n.scrollSensitivity?a.scrollLeft=o=a.scrollLeft+n.scrollSpeed:e.pageX-s.overflowOffset.left<n.scrollSensitivity&&(a.scrollLeft=o=a.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(e.pageY-t(r).scrollTop()<n.scrollSensitivity?o=t(r).scrollTop(t(r).scrollTop()-n.scrollSpeed):t(window).height()-(e.pageY-t(r).scrollTop())<n.scrollSensitivity&&(o=t(r).scrollTop(t(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(e.pageX-t(r).scrollLeft()<n.scrollSensitivity?o=t(r).scrollLeft(t(r).scrollLeft()-n.scrollSpeed):t(window).width()-(e.pageX-t(r).scrollLeft())<n.scrollSensitivity&&(o=t(r).scrollLeft(t(r).scrollLeft()+n.scrollSpeed)))),o!==!1&&t.ui.ddmanager&&!n.dropBehaviour&&t.ui.ddmanager.prepareOffsets(s,e)}}),t.ui.plugin.add("draggable","snap",{start:function(e,i,s){var n=s.options;s.snapElements=[],t(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var e=t(this),i=e.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:e.outerWidth(),height:e.outerHeight(),top:i.top,left:i.left})})},drag:function(e,i,s){var n,o,a,r,h,l,c,u,d,p,f=s.options,g=f.snapTolerance,m=i.offset.left,_=m+s.helperProportions.width,v=i.offset.top,b=v+s.helperProportions.height;for(d=s.snapElements.length-1;d>=0;d--)h=s.snapElements[d].left-s.margins.left,l=h+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,h-g>_||m>l+g||c-g>b||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(n=g>=Math.abs(c-b),o=g>=Math.abs(u-v),a=g>=Math.abs(h-_),r=g>=Math.abs(l-m),n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||o||a||r,"outer"!==f.snapMode&&(n=g>=Math.abs(c-v),o=g>=Math.abs(u-b),a=g>=Math.abs(h-m),r=g>=Math.abs(l-_),n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(n=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",n+e)}),this.css("zIndex",n+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("zIndex")&&(o._zIndex=n.css("zIndex")),n.css("zIndex",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css("zIndex",n._zIndex)}}),t.ui.draggable,t.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){return arguments.length?(e=arguments[0],void 0):e?e:e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var s=t.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&u(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var u=t.ui.intersect=function(){function t(t,e,i){return t>=e&&e+i>t}return function(e,i,s,n){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,h=a+e.helperProportions.height,l=i.offset.left,c=i.offset.top,u=l+i.proportions().width,d=c+i.proportions().height;switch(s){case"fit":return o>=l&&u>=r&&a>=c&&d>=h;case"intersect":return o+e.helperProportions.width/2>l&&u>r-e.helperProportions.width/2&&a+e.helperProportions.height/2>c&&d>h-e.helperProportions.height/2;case"pointer":return t(n.pageY,c,i.proportions().height)&&t(n.pageX,l,i.proportions().width);case"touch":return(a>=c&&d>=a||h>=c&&d>=h||c>a&&h>d)&&(o>=l&&u>=o||r>=l&&u>=r||l>o&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;o.length>s;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&u(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,o,a=u(e,this,this.options.tolerance,i),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===n}),o.length&&(s=t(o[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},t.uiBackCompat!==!1&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};
8
+ t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&p>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),g&&(p-=l),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget("ui.selectable",t.ui.mouse,{version:"1.12.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),s=i.offset(),n={left:s.left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:n.left,top:n.top,right:n.left+i.outerWidth(),bottom:n.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("<div>"),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,"ui-selected"),s.selected=!1,i._addClass(s.$element,"ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),i._removeClass(n.$element,s?"ui-unselecting":"ui-selected")._addClass(n.$element,s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,h=e.pageY;return o>r&&(i=r,r=o,o=i),a>h&&(i=h,h=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:h-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),l=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,"touch"===n.tolerance?l=!(c.left>r||o>c.right||c.top>h||a>c.bottom):"fit"===n.tolerance&&(l=c.left>o&&r>c.right&&c.top>a&&h>c.bottom),l?(i.selected&&(s._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,"ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,s._addClass(i.$element,"ui-selected"),i.selected=!0):(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,"ui-selected"),i.selected=!1,s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-selecting")._addClass(s.$element,"ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.sortable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return t>=e&&e+i>t},_isFloating:function(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))},_create:function(){this.containerCache={},this._addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),"handle"===t&&this._setHandleClassName()},_setHandleClassName:function(){var e=this;this._removeClass(this.element.find(".ui-sortable-handle"),"ui-sortable-handle"),t.each(this.items,function(){e._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,"ui-sortable-handle")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(e,i){var s=null,n=!1,o=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,o.widgetName+"-item")===o?(s=t(this),!1):void 0}),t.data(e.target,o.widgetName+"-item")===o&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,o,a=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),a.containment&&this._setContainment(),a.cursor&&"auto"!==a.cursor&&(o=this.document.find("body"),this.storedCursor=o.css("cursor"),o.css("cursor",a.cursor),this.storedStylesheet=t("<style>*{ cursor: "+a.cursor+" !important; }</style>").appendTo(o)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<a.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+a.scrollSpeed:e.pageY-this.overflowOffset.top<a.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-a.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<a.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+a.scrollSpeed:e.pageX-this.overflowOffset.left<a.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-a.scrollSpeed)):(e.pageY-this.document.scrollTop()<a.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-a.scrollSpeed):this.window.height()-(e.pageY-this.document.scrollTop())<a.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+a.scrollSpeed)),e.pageX-this.document.scrollLeft()<a.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-a.scrollSpeed):this.window.width()-(e.pageX-this.document.scrollLeft())<a.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+a.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],o=this._intersectsWithPointer(s),o&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===o?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),o=this.options.axis,a={};o&&"x"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp(new t.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>o&&a>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>o&&a>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var e,i,s="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),n="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width),o=s&&n;return o?(e=this._getDragVerticalDirection(),i=this._getDragHorizontalDirection(),this.floating?"right"===i||"down"===e?2:1:e&&("down"===e?2:1)):!1},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&e||"up"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){function i(){r.push(this)}var s,n,o,a,r=[],h=[],l=this._connectWith();if(l&&e)for(s=l.length-1;s>=0;s--)for(o=t(l[s],this.document[0]),n=o.length-1;n>=0;n--)a=t.data(o[n],this.widgetFullName),a&&a!==this&&!a.options.disabled&&h.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(h.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return t(r)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,a,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i],this.document[0]),s=n.length-1;s>=0;s--)o=t.data(n[s],this.widgetFullName),o&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",a),c.push({item:h,instance:a,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,o;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),o=n.offset(),s.left=o.left,s.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]);return e._addClass(n,"ui-sortable-placeholder",i||e.currentItem[0].className)._removeClass(n,"ui-sortable-helper"),"tbody"===s?e._createTrPlaceholder(e.currentItem.find("tr").eq(0),t("<tr>",e.document[0]).appendTo(n)):"tr"===s?e._createTrPlaceholder(e.currentItem,n):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var s=this;e.children().each(function(){t("<td>&#160;</td>",s.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(e){var i,s,n,o,a,r,h,l,c,u,d=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,o=null,c=d.floating||this._isFloating(this.currentItem),a=c?"left":"top",r=c?"width":"height",u=c?"pageX":"pageY",s=this.items.length-1;s>=0;s--)t.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[a],l=!1,e[u]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(e[u]-h)&&(n=Math.abs(e[u]-h),o=this.items[s],this.direction=l?"up":"down"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;o?this._rearrange(e,o,null,!0):this._rearrange(e,null,this.containers[p].element,!0),this._trigger("change",e,this._uiHash()),this.containers[p]._trigger("change",e,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,o=e.pageX,a=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(o=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(a=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/n.grid[1])*n.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){function i(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&n.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||n.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(n.push(function(t){this._trigger("remove",t,this._uiHash())}),n.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)e||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(s=0;n.length>s;s++)n[s].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t("<span>"),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.activeHeader)._addClass(this.headers,"ui-accordion-icons"))
9
+ },_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void 0)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],h=r&&n.collapsible,l=h?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:h?t():a,newPanel:l};e.preventDefault(),r&&!n.collapsible||this._trigger("beforeActivate",e,u)===!1||(n.active=h?!1:this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,h=t.css("box-sizing"),l=t.length&&(!e.length||t.index()<e.index()),c=this.options.animate||{},u=l&&c.down||c,d=function(){a._toggleComplete(i)};return"number"==typeof u&&(o=u),"string"==typeof u&&(n=u),n=n||u.easing||c.easing,o=o||u.duration||c.duration,e.length?t.length?(s=t.show().outerHeight(),e.animate(this.hideProps,{duration:o,easing:n,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(this.showProps,{duration:o,easing:n,complete:d,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?"content-box"===h&&(r+=i.now):"content"!==a.options.heightStyle&&(i.now=Math.round(s-e.outerHeight()-r),r=0)}}),void 0):e.animate(this.hideProps,o,n,d):t.animate(this.showProps,o,n,d)},_toggleComplete:function(t){var e=t.oldPanel,i=e.prev();this._removeClass(e,"ui-accordion-content-active"),this._removeClass(i,"ui-accordion-header-active")._addClass(i,"ui-accordion-header-collapsed"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}}),t.widget("ui.menu",{version:"1.12.1",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,h=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=h.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("<span>").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=h.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)},_filterMenuItems:function(e){var i=e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return s.test(t.trim(t(this).children(".ui-menu-item-wrapper").text()))})}}),t.widget("ui.autocomplete",{version:"1.12.1",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("<ul>").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&t.trim(s).length&&(this.liveRegion.children().hide(),t("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger("select",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t("<div>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;(!e||e&&!i&&!s)&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):this._trigger("search",e)!==!1?this._search(t):void 0},_search:function(t){this.pending++,this._addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var e=++this.requestIndex;return t.proxy(function(t){e===this.requestIndex&&this.__response(t),this.pending--,this.pending||this._removeClass("ui-autocomplete-loading")},this)},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,"mousedown"),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({},e,{label:e.label||e.value,value:e.value||e.label})})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:"_closeOnClickOutside"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<div>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("<div>").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete;var d=/ui-corner-([a-z]){2,6}/g;t.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"<div>",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,function(s,n){var o,a={};return n?"controlgroupLabel"===s?(o=e.element.find(n),o.each(function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("<span class='ui-controlgroup-label-contents'></span>")}),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),i=i.concat(o.get()),void 0):(t.fn[s]&&(a=e["_"+s+"Options"]?e["_"+s+"Options"]("middle"):{classes:{}},e.element.find(n).each(function(){var n=t(this),o=n[s]("instance"),r=t.widget.extend({},a);if("button"!==s||!n.parent(".ui-spinner").length){o||(o=n[s]()[s]("instance")),o&&(r.classes=e._resolveClassesValues(r.classes,o)),n[s](r);var h=n[s]("widget");t.data(h[0],"ui-controlgroup-data",o?o:n[s]("instance")),i.push(h[0])}})),void 0):void 0}),this.childWidgets=t(t.unique(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var i=t(this),s=i.data("ui-controlgroup-data");s&&s[e]&&s[e]()})},_updateCornerClass:function(t,e){var i="ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all",s=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,i),this._addClass(t,null,s)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e?"auto":!1,classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var s={};return t.each(e,function(n){var o=i.options.classes[n]||"";o=t.trim(o.replace(d,"")),s[n]=(o+" "+e[n]).replace(/\s+/g," ")}),s},_setOption:function(t,e){return"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"===t?(this._callChildMethod(e?"disable":"enable"),void 0):(this.refresh(),void 0)},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,this.options.onlyVisible&&(e=e.filter(":visible")),e.length&&(t.each(["first","last"],function(t,s){var n=e[s]().data("ui-controlgroup-data");if(n&&i["_"+n.widgetName+"Options"]){var o=i["_"+n.widgetName+"Options"](1===e.length?"only":s);o.classes=i._resolveClassesValues(o.classes,n),n.element[n.widgetName](o)}else i._updateCornerClass(e[s](),s)}),this._callChildMethod("refresh"))}}),t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i,s=this,n=this._super()||{};return this._readType(),i=this.element.labels(),this.label=t(i[i.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){s.originalLabel+=3===this.nodeType?t(this).text():this.outerHTML}),this.originalLabel&&(n.label=this.originalLabel),e=this.element[0].disabled,null!=e&&(n.disabled=e),n},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e,i=this.element[0].name,s="input[name='"+t.ui.escapeSelector(i)+"']";return i?(e=this.form.length?t(this.form[0].elements).filter(s):t(s).filter(function(){return 0===t(this).form().length}),e.not(this.element)):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each(function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){return"label"!==t||e?(this._super(t,e),"disabled"===t?(this._toggleClass(this.label,null,"ui-state-disabled",e),this.element[0].disabled=e,void 0):(this.refresh(),void 0)):void 0},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t("<span>"),this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)
10
+ },_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),t.ui.checkboxradio,t.widget("ui.button",{version:"1.12.1",defaultElement:"<button>",options:{classes:{"ui-button":"ui-corner-all"},disabled:null,icon:null,iconPosition:"beginning",label:null,showLabel:!0},_getCreateOptions:function(){var t,e=this._super()||{};return this.isInput=this.element.is("input"),t=this.element[0].disabled,null!=t&&(e.disabled=t),this.originalLabel=this.isInput?this.element.val():this.element.html(),this.originalLabel&&(e.label=this.originalLabel),e},_create:function(){!this.option.showLabel&!this.options.icon&&(this.options.showLabel=!0),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled||!1),this.hasTitle=!!this.element.attr("title"),this.options.label&&this.options.label!==this.originalLabel&&(this.isInput?this.element.val(this.options.label):this.element.html(this.options.label)),this._addClass("ui-button","ui-widget"),this._setOption("disabled",this.options.disabled),this._enhance(),this.element.is("a")&&this._on({keyup:function(e){e.keyCode===t.ui.keyCode.SPACE&&(e.preventDefault(),this.element[0].click?this.element[0].click():this.element.trigger("click"))}})},_enhance:function(){this.element.is("button")||this.element.attr("role","button"),this.options.icon&&(this._updateIcon("icon",this.options.icon),this._updateTooltip())},_updateTooltip:function(){this.title=this.element.attr("title"),this.options.showLabel||this.title||this.element.attr("title",this.options.label)},_updateIcon:function(e,i){var s="iconPosition"!==e,n=s?this.options.iconPosition:i,o="top"===n||"bottom"===n;this.icon?s&&this._removeClass(this.icon,null,this.options.icon):(this.icon=t("<span>"),this._addClass(this.icon,"ui-button-icon","ui-icon"),this.options.showLabel||this._addClass("ui-button-icon-only")),s&&this._addClass(this.icon,null,i),this._attachIcon(n),o?(this._addClass(this.icon,null,"ui-widget-icon-block"),this.iconSpace&&this.iconSpace.remove()):(this.iconSpace||(this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-button-icon-space")),this._removeClass(this.icon,null,"ui-wiget-icon-block"),this._attachIconSpace(n))},_destroy:function(){this.element.removeAttr("role"),this.icon&&this.icon.remove(),this.iconSpace&&this.iconSpace.remove(),this.hasTitle||this.element.removeAttr("title")},_attachIconSpace:function(t){this.icon[/^(?:end|bottom)/.test(t)?"before":"after"](this.iconSpace)},_attachIcon:function(t){this.element[/^(?:end|bottom)/.test(t)?"append":"prepend"](this.icon)},_setOptions:function(t){var e=void 0===t.showLabel?this.options.showLabel:t.showLabel,i=void 0===t.icon?this.options.icon:t.icon;e||i||(t.showLabel=!0),this._super(t)},_setOption:function(t,e){"icon"===t&&(e?this._updateIcon(t,e):this.icon&&(this.icon.remove(),this.iconSpace&&this.iconSpace.remove())),"iconPosition"===t&&this._updateIcon(t,e),"showLabel"===t&&(this._toggleClass("ui-button-icon-only",null,!e),this._updateTooltip()),"label"===t&&(this.isInput?this.element.val(e):(this.element.html(e),this.icon&&(this._attachIcon(this.options.iconPosition),this._attachIconSpace(this.options.iconPosition)))),this._super(t,e),"disabled"===t&&(this._toggleClass(null,"ui-state-disabled",e),this.element[0].disabled=e,e&&this.element.blur())},refresh:function(){var t=this.element.is("input, button")?this.element[0].disabled:this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOptions({disabled:t}),this._updateTooltip()}}),t.uiBackCompat!==!1&&(t.widget("ui.button",t.ui.button,{options:{text:!0,icons:{primary:null,secondary:null}},_create:function(){this.options.showLabel&&!this.options.text&&(this.options.showLabel=this.options.text),!this.options.showLabel&&this.options.text&&(this.options.text=this.options.showLabel),this.options.icon||!this.options.icons.primary&&!this.options.icons.secondary?this.options.icon&&(this.options.icons.primary=this.options.icon):this.options.icons.primary?this.options.icon=this.options.icons.primary:(this.options.icon=this.options.icons.secondary,this.options.iconPosition="end"),this._super()},_setOption:function(t,e){return"text"===t?(this._super("showLabel",e),void 0):("showLabel"===t&&(this.options.text=e),"icon"===t&&(this.options.icons.primary=e),"icons"===t&&(e.primary?(this._super("icon",e.primary),this._super("iconPosition","beginning")):e.secondary&&(this._super("icon",e.secondary),this._super("iconPosition","end"))),this._superApply(arguments),void 0)}}),t.fn.button=function(e){return function(){return!this.length||this.length&&"INPUT"!==this[0].tagName||this.length&&"INPUT"===this[0].tagName&&"checkbox"!==this.attr("type")&&"radio"!==this.attr("type")?e.apply(this,arguments):(t.ui.checkboxradio||t.error("Checkboxradio widget missing"),0===arguments.length?this.checkboxradio({icon:!1}):this.checkboxradio.apply(this,arguments))}}(t.fn.button),t.fn.buttonset=function(){return t.ui.controlgroup||t.error("Controlgroup widget missing"),"option"===arguments[0]&&"items"===arguments[1]&&arguments[2]?this.controlgroup.apply(this,[arguments[0],"items.button",arguments[2]]):"option"===arguments[0]&&"items"===arguments[1]?this.controlgroup.apply(this,[arguments[0],"items.button"]):("object"==typeof arguments[0]&&arguments[0].items&&(arguments[0].items={button:arguments[0].items}),this.controlgroup.apply(this,arguments))}),t.ui.button,t.extend(t.ui,{datepicker:{version:"1.12.1"}});var p;t.extend(s.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return a(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,o;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),o=this._newInst(t(e),n),o.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,o):n&&this._inlineDatepicker(e,o)},_newInst:function(e,i){var s=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?n(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(i),t.data(e,"datepicker",i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,o,a=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),a&&(i.append=t("<span class='"+this._appendClass+"'>"+a+"</span>"),e[r?"before":"after"](i.append)),e.off("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.on("focus",this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),o=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:o,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(o?t("<img/>").attr({src:o,alt:n,title:n}):n)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var r,h,l,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+r+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),d=this._dialogInst=this._newInst(this._dialogInput,!1),d.settings={},t.data(this._dialogInput[0],"datepicker",d)),a(d.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+c,l/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),p===n&&(p=null))},_enableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,r,h,l=this._getInst(e);return 2===arguments.length&&"string"==typeof i?"defaults"===i?t.extend({},t.datepicker._defaults):l?"all"===i?t.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),o=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),a(l.settings,n),null!==r&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,r)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),l),this._autoSize(l),this._setDate(l,o),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv),n[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,n[0]),i=t.datepicker._get(o,"onSelect"),i?(s=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[s,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s,n=t.datepicker._getInst(e.target);return t.datepicker._get(n,"constrainInput")?(i=t.datepicker._possibleChars(t.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var s,n,o,r,h,l,c;s=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==s&&(t.datepicker._curInst.dpDiv.stop(!0,!0),s&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),n=t.datepicker._get(s,"beforeShow"),o=n?n.apply(e,[e,s]):{},o!==!1&&(a(s.settings,o),s.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(s),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),h={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,s.dpDiv.empty(),s.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(s),h=t.datepicker._checkOffset(s,h,r),s.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),s.inline||(l=t.datepicker._get(s,"showAnim"),c=t.datepicker._get(s,"duration"),s.dpDiv.css("z-index",i(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[l]?s.dpDiv.show(l,t.datepicker._get(s,"showOptions"),c):s.dpDiv[l||"show"](l?c:null),t.datepicker._shouldFocusInput(s)&&s.input.trigger("focus"),t.datepicker._curInst=s))}},_updateDatepicker:function(e){this.maxRows=4,p=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),n=s[1],a=17,r=e.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+o>l&&l>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),s=this._get(a,"duration"),n=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),s,n):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,o=this._get(a,"onClose"),o&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),o=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(o,i+("M"===s?this._get(o,"showCurrentAtPos"):0),s),this._updateDatepicker(o))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),o=this._getInst(n[0]);o["selected"+("M"===s?"Month":"Year")]=o["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(n)},_selectDay:function(e,i,s,n){var o,a=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||(o=this._getInst(a[0]),o.selectedDay=o.currentDay=t("a",n).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),o=this._getInst(n[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),s=this._get(o,"onSelect"),s?s.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(o).val(n))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,o,a,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),u=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,d=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,_=-1,v=-1,b=!1,y=function(t){var i=e.length>n+1&&e.charAt(n+1)===t;return i&&n++,i},w=function(t){var e=y(t),s="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n="y"===t?s:1,o=RegExp("^\\d{"+n+","+s+"}"),a=i.substring(h).match(o);if(!a)throw"Missing number at position "+h;return h+=a[0].length,parseInt(a[0],10)},k=function(e,s,n){var o=-1,a=t.map(y(e)?n:s,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var s=e[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(o=e[0],h+=s.length,!1):void 0}),-1!==o)return o+1;throw"Unknown name at position "+h},x=function(){if(i.charAt(h)!==e.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;e.length>n;n++)if(b)"'"!==e.charAt(n)||y("'")?x():b=!1;else switch(e.charAt(n)){case"d":_=w("d");break;case"D":k("D",u,d);break;case"o":v=w("o");break;case"m":m=w("m");break;case"M":m=k("M",p,f);break;case"y":g=w("y");break;case"@":r=new Date(w("@")),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"!":r=new Date((w("!")-this._ticksTo1970)/1e4),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"'":y("'")?x():b=!0;break;default:x()}if(i.length>h&&(a=i.substr(h),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c>=g?0:-100)),v>-1)for(m=1,_=v;;){if(o=this._getDaysInMonth(g,m-1),o>=_)break;m++,_-=o}if(r=this._daylightSavingAdjust(new Date(g,m-1,_)),r.getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==_)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,o);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=h("y")?e.getFullYear():(10>e.getFullYear()%100?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(r){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},o=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,o=n.getFullYear(),a=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":a+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a));break;case"y":case"Y":o+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a))}l=h.exec(i)}return new Date(o,a,r)},a=null==i||""===i?s:"string"==typeof i?o(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return a=a&&"Invalid Date"==""+a?s:a,a&&(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0)),this._daylightSavingAdjust(a)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,h,l,c,u,d,p,f,g,m,_,v,b,y,w,k,x,C,D,I,T,P,M,S,H,z,O,A,N,W,E,F,L,R=new Date,B=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),j=this._get(t,"showButtonPanel"),q=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),U=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),$=this._get(t,"stepMonths"),X=1!==U[0]||1!==U[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),Q=this._getMinMaxDate(t,"min"),J=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),J)for(e=this._daylightSavingAdjust(new Date(J.getFullYear(),J.getMonth()-U[0]*U[1]+1,J.getDate())),e=Q&&Q>e?Q:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-$,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":q?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+$,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":q?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:B,a=K?this.formatDate(a,r,this._getFormatConfig(t)):a,h=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",l=j?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(t,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+a+"</button>":"")+(Y?"":h)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),_=this._get(t,"showOtherMonths"),v=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;U[0]>k;k++){for(x="",this.maxRows=4,C=0;U[1]>C;C++){if(D=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),I=" ui-corner-all",T="",X){if(T+="<div class='ui-datepicker-group",U[1]>1)switch(C){case 0:T+=" ui-datepicker-group-first",I=" ui-corner-"+(Y?"right":"left");
11
+ break;case U[1]-1:T+=" ui-datepicker-group-last",I=" ui-corner-"+(Y?"left":"right");break;default:T+=" ui-datepicker-group-middle",I=""}T+="'>"}for(T+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+I+"'>"+(/all|left/.test(I)&&0===k?Y?o:s:"")+(/all|right/.test(I)&&0===k?Y?s:o:"")+this._generateMonthYearHeader(t,Z,te,Q,J,k>0||C>0,f,g)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",P=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",w=0;7>w;w++)M=(w+c)%7,P+="<th scope='col'"+((w+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[M]+"'>"+p[M]+"</span></th>";for(T+=P+"</tr></thead><tbody>",S=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),H=(this._getFirstDayOfMonth(te,Z)-c+7)%7,z=Math.ceil((H+S)/7),O=X?this.maxRows>z?this.maxRows:z:z,this.maxRows=O,A=this._daylightSavingAdjust(new Date(te,Z,1-H)),N=0;O>N;N++){for(T+="<tr>",W=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(A)+"</td>":"",w=0;7>w;w++)E=m?m.apply(t.input?t.input[0]:null,[A]):[!0,""],F=A.getMonth()!==Z,L=F&&!v||!E[0]||Q&&Q>A||J&&A>J,W+="<td class='"+((w+c+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(A.getTime()===D.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===A.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!_?"":" "+E[1]+(A.getTime()===G.getTime()?" "+this._currentClass:"")+(A.getTime()===B.getTime()?" ui-datepicker-today":""))+"'"+(F&&!_||!E[2]?"":" title='"+E[2].replace(/'/g,"&#39;")+"'")+(L?"":" data-handler='selectDay' data-event='click' data-month='"+A.getMonth()+"' data-year='"+A.getFullYear()+"'")+">"+(F&&!_?"&#xa0;":L?"<span class='ui-state-default'>"+A.getDate()+"</span>":"<a class='ui-state-default"+(A.getTime()===B.getTime()?" ui-state-highlight":"")+(A.getTime()===G.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+"' href='#'>"+A.getDate()+"</a>")+"</td>",A.setDate(A.getDate()+1),A=this._daylightSavingAdjust(A);T+=W+"</tr>"}Z++,Z>11&&(Z=0,te++),T+="</tbody></table>"+(X?"</div>"+(U[0]>0&&C===U[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),x+=T}y+=x}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var h,l,c,u,d,p,f,g,m=this._get(t,"changeMonth"),_=this._get(t,"changeYear"),v=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(o||!m)y+="<span class='ui-datepicker-month'>"+a[e]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!h||c>=s.getMonth())&&(!l||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+r[c]+"</option>");y+="</select>"}if(v||(b+=y+(!o&&m&&_?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",o||!_)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";g>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),v&&(b+=(!o&&m&&_?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1",t.datepicker,t.widget("ui.dialog",{version:"1.12.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get(),o=Math.max.apply(null,n);return o>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",o+1),s=!0),s&&!i&&this._trigger("focus",e),s},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(e){function i(){var e=t.ui.safeActiveElement(this.document[0]),i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),void 0;if(e.keyCode===t.ui.keyCode.TAB&&!e.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){n.trigger("focus")}),e.preventDefault()):(this._delay(function(){s.trigger("focus")}),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>"),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("<button type='button'></button>").button({label:t("<a>").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html("&#160;")},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>"),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this._removeClass(this.uiDialog,"ui-dialog-buttons"),void 0):(t.each(i,function(i,s){var n,o;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,o={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel,icons:s.icons,text:s.text},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,delete s.icons,"boolean"==typeof s.text&&delete s.text,t("<button></button>",s).button(o).appendTo(e.uiButtonSet).on("click",function(){n.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,o){var a=o.offset.left-i.document.scrollLeft(),r=o.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(a>=0?"+":"")+a+" "+"top"+(r>=0?"+":"")+r,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,o=this.uiDialog.css("position"),a="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:a,start:function(s,n){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,o){var a=i.uiDialog.offset(),r=a.left-i.document.scrollLeft(),h=a.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(o))}}).css("position",o)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,s=!1,n={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,i){var s,n,o=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("<a>").text(""+this.options.closeText).html()}),"draggable"===e&&(s=o.is(":data(ui-draggable)"),s&&!i&&o.draggable("destroy"),!s&&i&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(n=o.is(":data(ui-resizable)"),n&&!i&&o.resizable("destroy"),n&&"string"==typeof i&&o.resizable("option","handles",i),n||i===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=t("<div>").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.progressbar",{version:"1.12.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("<div>").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){return void 0===t?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),void 0)},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div>").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.12.1",defaultElement:"<select>",options:{appendTo:null,classes:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"},disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=t()},_drawButton:function(){var e,i=this,s=this._parseOption(this.element.find("option:selected"),this.element[0].selectedIndex);this.labels=this.element.labels().attr("for",this.ids.button),this._on(this.labels,{click:function(t){this.button.focus(),t.preventDefault()}}),this.element.hide(),this.button=t("<span>",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true",title:this.element.attr("title")}).insertAfter(this.element),this._addClass(this.button,"ui-selectmenu-button ui-selectmenu-button-closed","ui-button ui-widget"),e=t("<span>").appendTo(this.button),this._addClass(e,"ui-selectmenu-icon","ui-icon "+this.options.icons.button),this.buttonItem=this._renderButtonItem(s).appendTo(this.button),this.options.width!==!1&&this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){i._rendered||i._refreshMenu()})},_drawMenu:function(){var e=this;this.menu=t("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=t("<div>").append(this.menu),this._addClass(this.menuWrap,"ui-selectmenu-menu","ui-front"),this.menuWrap.appendTo(this._appendTo()),this.menuInstance=this.menu.menu({classes:{"ui-menu":"ui-corner-bottom"},role:"listbox",select:function(t,i){t.preventDefault(),e._setSelection(),e._select(i.item.data("ui-selectmenu-item"),t)},focus:function(t,i){var s=i.item.data("ui-selectmenu-item");null!=e.focusIndex&&s.index!==e.focusIndex&&(e._trigger("focus",t,{item:s}),e.isOpen||e._select(s,t)),e.focusIndex=s.index,e.button.attr("aria-activedescendant",e.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item")||{})),null===this.options.width&&this._resizeButton()},_refreshMenu:function(){var t,e=this.element.find("option");this.menu.empty(),this._parseOptions(e),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"),this._rendered=!0,e.length&&(t=this._getSelectedItem(),this.menuInstance.focus(null,t),this._setAria(t.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(t){this.options.disabled||(this._rendered?(this._removeClass(this.menu.find(".ui-state-active"),null,"ui-state-active"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.menuItems.length&&(this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",t)))},_position:function(){this.menuWrap.position(t.extend({of:this.button},this.options.position))},close:function(t){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",t))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderButtonItem:function(e){var i=t("<span>");return this._setText(i,e.label),this._addClass(i,"ui-selectmenu-text"),i},_renderMenu:function(e,i){var s=this,n="";t.each(i,function(i,o){var a;o.optgroup!==n&&(a=t("<li>",{text:o.optgroup}),s._addClass(a,"ui-selectmenu-optgroup","ui-menu-divider"+(o.element.parent("optgroup").prop("disabled")?" ui-state-disabled":"")),a.appendTo(e),n=o.optgroup),s._renderItemData(e,o)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-selectmenu-item",e)},_renderItem:function(e,i){var s=t("<li>"),n=t("<div>",{title:i.element.attr("title")});return i.disabled&&this._addClass(s,null,"ui-state-disabled"),this._setText(n,i.label),s.append(n).appendTo(e)},_setText:function(t,e){e?t.text(e):t.html("&#160;")},_move:function(t,e){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex).parent("li"):(i=this.menuItems.eq(this.element[0].selectedIndex).parent("li"),n+=":not(.ui-state-disabled)"),s="first"===t||"last"===t?i["first"===t?"prevAll":"nextAll"](n).eq(-1):i[t+"All"](n).eq(0),s.length&&this.menuInstance.focus(e,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex).parent("li")},_toggle:function(t){this[this.isOpen?"close":"open"](t)},_setSelection:function(){var t;this.range&&(window.getSelection?(t=window.getSelection(),t.removeAllRanges(),t.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(e){this.isOpen&&(t(e.target).closest(".ui-selectmenu-menu, #"+t.ui.escapeSelector(this.ids.button)).length||this.close(e))}},_buttonEvents:{mousedown:function(){var t;window.getSelection?(t=window.getSelection(),t.rangeCount&&(this.range=t.getRangeAt(0))):this.range=document.selection.createRange()},click:function(t){this._setSelection(),this._toggle(t)},keydown:function(e){var i=!0;switch(e.keyCode){case t.ui.keyCode.TAB:case t.ui.keyCode.ESCAPE:this.close(e),i=!1;break;case t.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(e);break;case t.ui.keyCode.UP:e.altKey?this._toggle(e):this._move("prev",e);break;case t.ui.keyCode.DOWN:e.altKey?this._toggle(e):this._move("next",e);break;case t.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(e):this._toggle(e);break;case t.ui.keyCode.LEFT:this._move("prev",e);break;case t.ui.keyCode.RIGHT:this._move("next",e);break;case t.ui.keyCode.HOME:case t.ui.keyCode.PAGE_UP:this._move("first",e);break;case t.ui.keyCode.END:case t.ui.keyCode.PAGE_DOWN:this._move("last",e);break;default:this.menu.trigger(e),i=!1}i&&e.preventDefault()}},_selectFocusedItem:function(t){var e=this.menuItems.eq(this.focusIndex).parent("li");e.hasClass("ui-state-disabled")||this._select(e.data("ui-selectmenu-item"),t)},_select:function(t,e){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=t.index,this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(t)),this._setAria(t),this._trigger("select",e,{item:t}),t.index!==i&&this._trigger("change",e,{item:t}),this.close(e)},_setAria:function(t){var e=this.menuItems.eq(t.index).attr("id");this.button.attr({"aria-labelledby":e,"aria-activedescendant":e}),this.menu.attr("aria-activedescendant",e)},_setOption:function(t,e){if("icons"===t){var i=this.button.find("span.ui-icon");this._removeClass(i,null,this.options.icons.button)._addClass(i,null,e.button)}this._super(t,e),"appendTo"===t&&this.menuWrap.appendTo(this._appendTo()),"width"===t&&this._resizeButton()},_setOptionDisabled:function(t){this._super(t),this.menuInstance.option("disabled",t),this.button.attr("aria-disabled",t),this._toggleClass(this.button,null,"ui-state-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_toggleAttr:function(){this.button.attr("aria-expanded",this.isOpen),this._removeClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"closed":"open"))._addClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"open":"closed"))._toggleClass(this.menuWrap,"ui-selectmenu-open",null,this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var t=this.options.width;return t===!1?(this.button.css("width",""),void 0):(null===t&&(t=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(t),void 0)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){var t=this._super();return t.disabled=this.element.prop("disabled"),t},_parseOptions:function(e){var i=this,s=[];e.each(function(e,n){s.push(i._parseOption(t(n),e))}),this.items=s},_parseOption:function(t,e){var i=t.parent("optgroup");return{element:t,index:e,value:t.val(),label:t.text(),optgroup:i.attr("label")||"",disabled:i.prop("disabled")||t.prop("disabled")}},_destroy:function(){this._unbindFormResetHandler(),this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.labels.attr("for",this.ids.element)}}]),t.widget("ui.slider",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider ui-slider-"+this.orientation,"ui-widget ui-widget-content"),this._refresh(),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle"),o="<span tabindex='0'></span>",a=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)a.push(o);this.handles=n.add(t(a.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e).attr("tabIndex",0)})},_createRange:function(){var e=this.options;e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=t("<div>").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),("min"===e.range||"max"===e.range)&&this._addClass(this.range,"ui-slider-range-"+e.range)):(this.range&&this.range.remove(),this.range=null)
12
+ },_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,o,a,r,h,l,c=this,u=this.options;return u.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-c.values(e));(n>i||n===i&&(e===c._lastChangedValue||c.values(e)===u.min))&&(n=i,o=t(this),a=e)}),r=this._start(e,a),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=a,this._addClass(o,null,"ui-state-active"),o.trigger("focus"),h=o.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-o.width()/2,top:e.pageY-h.top-o.height()/2-(parseInt(o.css("borderTopWidth"),10)||0)-(parseInt(o.css("borderBottomWidth"),10)||0)+(parseInt(o.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,a,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this._removeClass(this.handles,null,"ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,o;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),o=this._valueMin()+s*n,this._trimAlignValue(o)},_uiHash:function(t,e,i){var s={handle:this.handles[t],handleIndex:t,value:void 0!==e?e:this.value()};return this._hasMultipleValues()&&(s.value=void 0!==e?e:this.values(t),s.values=i||this.values()),s},_hasMultipleValues:function(){return this.options.values&&this.options.values.length},_start:function(t,e){return this._trigger("start",t,this._uiHash(e))},_slide:function(t,e,i){var s,n,o=this.value(),a=this.values();this._hasMultipleValues()&&(n=this.values(e?0:1),o=this.values(e),2===this.options.values.length&&this.options.range===!0&&(i=0===e?Math.min(n,i):Math.max(n,i)),a[e]=i),i!==o&&(s=this._trigger("slide",t,this._uiHash(e,i,a)),s!==!1&&(this._hasMultipleValues()?this.values(e,i):this.value(i)))},_stop:function(t,e){this._trigger("stop",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger("change",t,this._uiHash(e)))},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(e,i){var s,n,o;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),void 0;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this._hasMultipleValues()?this._values(e):this.value();for(s=this.options.values,n=arguments[0],o=0;s.length>o;o+=1)s[o]=this._trimAlignValue(n[o]),this._change(null,o);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),this._super(e,i),e){case"orientation":this._detectOrientation(),this._removeClass("ui-slider-horizontal ui-slider-vertical")._addClass("ui-slider-"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(i),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=n-1;s>=0;s--)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,"ui-state-disabled",!!t)},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this._hasMultipleValues()){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var t=this.options.max,e=this._valueMin(),i=this.options.step,s=Math.round((t-e)/i)*i;t=s+e,t>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){"vertical"===t&&this.range.css({width:"",left:""}),"horizontal"===t&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var e,i,s,n,o,a=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,c={};this._hasMultipleValues()?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),c["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](c,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),o=this._valueMax(),i=o!==n?100*((s-n)/(o-n)):0,c["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](c,r.animate),"min"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:100-i+"%"},r.animate),"min"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:100-i+"%"},r.animate))},_handleEvents:{keydown:function(e){var i,s,n,o,a=t(e.target).data("ui-slider-handle-index");switch(e.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(e.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(t(e.target),null,"ui-state-active"),i=this._start(e,a),i===!1))return}switch(o=this.options.step,s=n=this._hasMultipleValues()?this.values(a):this.value(),e.keyCode){case t.ui.keyCode.HOME:n=this._valueMin();break;case t.ui.keyCode.END:n=this._valueMax();break;case t.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-o)}this._slide(e,a,n)},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),this._removeClass(t(e.target),null,"ui-state-active"))}}}),t.widget("ui.spinner",{version:"1.12.1",defaultElement:"<input>",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);null!=n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var e=this.element[0]===t.ui.safeActiveElement(this.document[0]);e||(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===t.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("<span>").parent().append("<a></a><a></a>")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&this.uiSpinner.height()>0&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,s,n;return"culture"===t||"numberFormat"===t?(i=this._parse(this.element.val()),this.options[t]=e,this.element.val(this._format(i)),void 0):(("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(s=this.buttons.first().find(".ui-icon"),this._removeClass(s,null,this.options.icons.up),this._addClass(s,null,e.up),n=this.buttons.last().find(".ui-icon"),this._removeClass(n,null,this.options.icons.down),this._addClass(n,null,e.down)),this._super(t,e),void 0)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:r(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null===t?!1:t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:r(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:r(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:r(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:r(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(r(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),t.uiBackCompat!==!1&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return"<span>"},_buttonHtml:function(){return"<a></a><a></a>"}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.12.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var t=/#.*$/;return function(e){var i,s;i=e.href.replace(t,""),s=location.href.replace(t,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return e.hash.length>1&&i===s}}(),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===e&&(s&&this.tabs.each(function(i,n){return t(n).attr("aria-controls")===s?(e=i,!1):void 0}),null===e&&(e=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===e||-1===e)&&(e=this.tabs.length?0:!1)),e!==!1&&(e=this.tabs.index(this.tabs.eq(e)),-1===e&&(e=i?!1:0)),!i&&e===!1&&this.anchors.length&&(e=0),e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(t.ui.safeActiveElement(this.document[0])).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:s++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:n=!1,s--;break;case t.ui.keyCode.END:s=this.anchors.length-1;break;case t.ui.keyCode.HOME:s=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}e.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e),void 0)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,s){var n,o,a,r=t(s).uniqueId().attr("id"),h=t(s).closest("li"),l=h.attr("aria-controls");e._isLocal(s)?(n=s.hash,a=n.substring(1),o=e.element.find(e._sanitizeSelector(n))):(a=h.attr("aria-controls")||t({}).uniqueId()[0].id,n="#"+a,o=e.element.find(n),o.length||(o=e._createPanel(a),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":a,"aria-labelledby":r}),o.attr("aria-labelledby",r)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,s,n;for(t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),n=0;s=this.tabs[n];n++)i=t(s),e===!0||-1!==t.inArray(n,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,e===!0)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n.closest("li"),a=o[0]===s[0],r=a&&i.collapsible,h=r?t():this._getPanelForTab(o),l=s.length?this._getPanelForTab(s):t(),c={oldTab:s,oldPanel:l,newTab:r?t():o,newPanel:h};e.preventDefault(),o.hasClass("ui-state-disabled")||o.hasClass("ui-tabs-loading")||this.running||a&&!i.collapsible||this._trigger("beforeActivate",e,c)===!1||(i.active=r?!1:this.tabs.index(o),this.active=a?t():o,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(o),e),this._toggle(e,c))},_toggle:function(e,i){function s(){o.running=!1,o._trigger("activate",e,i)}function n(){o._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,s):(a.show(),s())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){o._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+t.ui.escapeSelector(e)+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;i!==!1&&(void 0===e?i=!1:(e=this._getIndex(e),i=t.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(i!==!0){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=t.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){e=this._getIndex(e);var s=this,n=this.tabs.eq(e),o=n.find(".ui-tabs-anchor"),a=this._getPanelForTab(n),r={tab:n,panel:a},h=function(t,e){"abort"===e&&s.panels.stop(!1,!0),s._removeClass(n,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===s.xhr&&delete s.xhr};this._isLocal(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(n,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,n){setTimeout(function(){a.html(t),s._trigger("load",i,r),h(n,e)},1)}).fail(function(t,e){setTimeout(function(){h(t,e)},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href").replace(/#.*$/,""),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),t.uiBackCompat!==!1&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);return e.is("[title]")?e.data("ui-tooltip-title",e.attr("title")).removeAttr("title"):void 0}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;return"string"==typeof s||s.nodeType||s.jquery?this._open(e,t,s):(i=s.call(t[0],function(i){n._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}),i&&this._open(e,t,i),void 0)},_open:function(e,i,s){function n(t){l.of=t,a.is(":hidden")||a.position(l)}var o,a,r,h,l=t.extend({},this.options.position);if(s){if(o=this._find(i))return o.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),h=t("<div>").html(a.find(".ui-tooltip-content").html()),h.removeAttr("name").find("[name]").removeAttr("name"),h.removeAttr("id").find("[id]").removeAttr("id"),h.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:n}),n(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var s={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var s=t.Event(e);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);return o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]
13
+ }),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(e){var i=t("<div>").attr("role","tooltip"),s=t("<div>").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur"),o=s.element;n.target=n.currentTarget=o[0],e.close(n,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),t.uiBackCompat!==!1&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip;var f="ui-effects-",g="ui-effects-style",m="ui-effects-animated",_=t;t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,o){var a,r=o.re.exec(i),h=r&&o.parse(r),l=o.space||"rgba";return h?(a=s[l](h),s[c[l].cache]=a[c[l].cache],n=s._rgba=a._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,o.transparent),s):o[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var o,a="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("<p>")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,a,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(a),a=e);var u=this,d=t.type(n),p=this._rgba=[];return a!==e&&(n=[n,a,r,h],d="array"),"string"===d?this.parse(s(n)||o._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var o=s.cache;f(s.props,function(t,e){if(!u[o]&&s.to){if("alpha"===t||null==n[t])return;u[o]=s.to(u._rgba)}u[o][e.idx]=i(n[t],e,!0)}),u[o]&&0>t.inArray(null,u[o].slice(0,3))&&(u[o][3]=1,s.from&&(u._rgba=s.from(u[o])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,o){var a,r=i[o.cache];return r&&(a=n[o.cache]||o.to&&o.to(n._rgba)||[],f(o.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===a[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),o=c[n],a=0===this.alpha()?l("transparent"):this,r=a[o.cache]||o.to(a._rgba),h=r.slice();return s=s[o.cache],f(o.props,function(t,n){var o=n.idx,a=r[o],l=s[o],c=u[n.type]||{};null!==l&&(null===a?h[o]=l:(c.mod&&(l-a>c.mod/2?a+=c.mod:a-l>c.mod/2&&(a-=c.mod)),h[o]=i((l-a)*e+a,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),h=Math.min(s,n,o),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-o)/l+360:n===r?60*(o-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],o=t[3],a=.5>=s?s*(1+i):s+i-s*i,r=2*s-a;return[Math.round(255*n(r,a,e+1/3)),Math.round(255*n(r,a,e)),Math.round(255*n(r,a,e-1/3)),o]},f(c,function(s,n){var o=n.props,a=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[a]&&(this[a]=h(this._rgba)),s===e)return this[a].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[a].slice();return f(o,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[a]=d,n):l(d)},f(o,function(e,i){l.fn[e]||(l.fn[e]=function(n){var o,a=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===a?c:("function"===a&&(n=n.call(this,c),a=t.type(n)),null==n&&i.empty?this:("string"===a&&(o=r.exec(n),o&&(n=c+parseFloat(o[2])*("+"===o[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var o,a,r="";if("transparent"!==n&&("string"!==t.type(n)||(o=s(n)))){if(n=l(o||n),!d.rgba&&1!==n._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(a),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(_),function(){function e(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(o[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(o[i]=n[i]);return o}function i(e,i){var s,o,a={};for(s in i)o=i[s],e[s]!==o&&(n[s]||(t.fx.step[s]||!isNaN(parseFloat(o)))&&(a[s]=o));return a}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(_.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(n,o,a,r){var h=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",l=h.children?a.find("*").addBack():a;l=l.map(function(){var i=t(this);return{el:i,start:e(this)}}),o=function(){t.each(s,function(t,e){n[e]&&a[e+"Class"](n[e])})},o(),l=l.map(function(){return this.end=e(this.el[0]),this.diff=i(this.start,this.end),this}),a.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,o){return s?t.effects.animateClass.call(this,{add:i},s,n,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(e){return function(i,s,n,o,a){return"boolean"==typeof s||void 0===s?n?t.effects.animateClass.call(this,s?{add:i}:{remove:i},n,o,a):e.apply(this,arguments):t.effects.animateClass.call(this,{toggle:i},s,n,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}})}(),function(){function e(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function i(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}function s(t,e){var i=e.outerWidth(),s=e.outerHeight(),n=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,o=n.exec(t)||["",0,i,s,0];return{top:parseFloat(o[1])||0,right:"auto"===o[2]?i:parseFloat(o[2]),bottom:"auto"===o[3]?s:parseFloat(o[3]),left:parseFloat(o[4])||0}}t.expr&&t.expr.filters&&t.expr.filters.animated&&(t.expr.filters.animated=function(e){return function(i){return!!t(i).data(m)||e(i)}}(t.expr.filters.animated)),t.uiBackCompat!==!1&&t.extend(t.effects,{save:function(t,e){for(var i=0,s=e.length;s>i;i++)null!==e[i]&&t.data(f+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;n>s;s++)null!==e[s]&&(i=t.data(f+e[s]),t.css(e[s],i))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(a){o=document.body}return e.wrap(s),(e[0]===o||t.contains(e[0],o))&&t(o).trigger("focus"),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.12.1",define:function(e,i,s){return s||(s=i,i="effect"),t.effects.effect[e]=s,t.effects.effect[e].mode=i,s},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,n="vertical"!==i?(e||100)/100:1;return{height:t.height()*n,width:t.width()*s,outerHeight:t.outerHeight()*n,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();e>1&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(g,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(g)||"",t.removeData(g)},mode:function(t,e){var i=t.is(":hidden");return"toggle"===e&&(e=i?"show":"hide"),(i?"hide"===e:"show"===e)&&(e="none"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(e){var i,s=e.css("position"),n=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(s)&&(s="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),"float":e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data(f+"placeholder",i)),e.css({position:s,left:n.left,top:n.top}),i},removePlaceholder:function(t){var e=f+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(n[i]=o[0]*s+o[1])}),n}}),t.fn.extend({effect:function(){function i(e){function i(){r.removeData(m),t.effects.cleanUp(r),"hide"===s.mode&&r.hide(),a()}function a(){t.isFunction(h)&&h.call(r[0]),t.isFunction(e)&&e()}var r=t(this);s.mode=c.shift(),t.uiBackCompat===!1||o?"none"===s.mode?(r[l](),a()):n.call(r[0],s,i):(r.is(":hidden")?"hide"===l:"show"===l)?(r[l](),a()):n.call(r[0],s,a)}var s=e.apply(this,arguments),n=t.effects.effect[s.effect],o=n.mode,a=s.queue,r=a||"fx",h=s.complete,l=s.mode,c=[],u=function(e){var i=t(this),s=t.effects.mode(i,l)||o;i.data(m,!0),c.push(s),o&&("show"===s||s===o&&"hide"===s)&&i.show(),o&&"none"===s||t.effects.saveStyle(i),t.isFunction(e)&&e()};return t.fx.off||!n?l?this[l](s.duration,h):this.each(function(){h&&h.call(this)}):a===!1?this.each(u).each(i):this.queue(r,u).queue(r,i)},show:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="show",this.effect.call(this,n)}}(t.fn.show),hide:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(t.fn.hide),toggle:function(t){return function(s){if(i(s)||"boolean"==typeof s)return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):s(this.css("clip"),this)},transfer:function(e,i){var s=t(this),n=t(e.to),o="fixed"===n.css("position"),a=t("body"),r=o?a.scrollTop():0,h=o?a.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo("body").addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),t.isFunction(i)&&i()})}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=s(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})}}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}();var v=t.effects;t.effects.define("blind","hide",function(e,i){var s={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},n=t(this),o=e.direction||"up",a=n.cssClip(),r={clip:t.extend({},a)},h=t.effects.createPlaceholder(n);r.clip[s[o][0]]=r.clip[s[o][1]],"show"===e.mode&&(n.cssClip(r.clip),h&&h.css(t.effects.clipToBox(r)),r.clip=a),h&&h.animate(t.effects.clipToBox(r),e.duration,e.easing),n.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("bounce",function(e,i){var s,n,o,a=t(this),r=e.mode,h="hide"===r,l="show"===r,c=e.direction||"up",u=e.distance,d=e.times||5,p=2*d+(l||h?1:0),f=e.duration/p,g=e.easing,m="up"===c||"down"===c?"top":"left",_="up"===c||"left"===c,v=0,b=a.queue().length;for(t.effects.createPlaceholder(a),o=a.css(m),u||(u=a["top"===m?"outerHeight":"outerWidth"]()/3),l&&(n={opacity:1},n[m]=o,a.css("opacity",0).css(m,_?2*-u:2*u).animate(n,f,g)),h&&(u/=Math.pow(2,d-1)),n={},n[m]=o;d>v;v++)s={},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g).animate(n,f,g),u=h?2*u:u/2;h&&(s={opacity:0},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g)),a.queue(i),t.effects.unshift(a,b,p+1)}),t.effects.define("clip","hide",function(e,i){var s,n={},o=t(this),a=e.direction||"vertical",r="both"===a,h=r||"horizontal"===a,l=r||"vertical"===a;s=o.cssClip(),n.clip={top:l?(s.bottom-s.top)/2:s.top,right:h?(s.right-s.left)/2:s.right,bottom:l?(s.bottom-s.top)/2:s.bottom,left:h?(s.right-s.left)/2:s.left},t.effects.createPlaceholder(o),"show"===e.mode&&(o.cssClip(n.clip),n.clip=s),o.animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("drop","hide",function(e,i){var s,n=t(this),o=e.mode,a="show"===o,r=e.direction||"left",h="up"===r||"down"===r?"top":"left",l="up"===r||"left"===r?"-=":"+=",c="+="===l?"-=":"+=",u={opacity:0};t.effects.createPlaceholder(n),s=e.distance||n["top"===h?"outerHeight":"outerWidth"](!0)/2,u[h]=l+s,a&&(n.css(u),u[h]=c+s,u.opacity=1),n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("explode","hide",function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),i()}var o,a,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=e.mode,g="show"===f,m=p.show().css("visibility","hidden").offset(),_=Math.ceil(p.outerWidth()/d),v=Math.ceil(p.outerHeight()/u),b=[];for(o=0;u>o;o++)for(h=m.top+o*v,c=o-(u-1)/2,a=0;d>a;a++)r=m.left+a*_,l=a-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-a*_,top:-o*v}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:_,height:v,left:r+(g?l*_:0),top:h+(g?c*v:0),opacity:g?0:1}).animate({left:r+(g?0:l*_),top:h+(g?0:c*v),opacity:g?1:0},e.duration||500,e.easing,s)}),t.effects.define("fade","toggle",function(e,i){var s="show"===e.mode;t(this).css("opacity",s?0:1).animate({opacity:s?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("fold","hide",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=e.size||15,h=/([0-9]+)%/.exec(r),l=!!e.horizFirst,c=l?["right","bottom"]:["bottom","right"],u=e.duration/2,d=t.effects.createPlaceholder(s),p=s.cssClip(),f={clip:t.extend({},p)},g={clip:t.extend({},p)},m=[p[c[0]],p[c[1]]],_=s.queue().length;h&&(r=parseInt(h[1],10)/100*m[a?0:1]),f.clip[c[0]]=r,g.clip[c[0]]=r,g.clip[c[1]]=0,o&&(s.cssClip(g.clip),d&&d.css(t.effects.clipToBox(g)),g.clip=p),s.queue(function(i){d&&d.animate(t.effects.clipToBox(f),u,e.easing).animate(t.effects.clipToBox(g),u,e.easing),i()}).animate(f,u,e.easing).animate(g,u,e.easing).queue(i),t.effects.unshift(s,_,4)}),t.effects.define("highlight","show",function(e,i){var s=t(this),n={backgroundColor:s.css("backgroundColor")};"hide"===e.mode&&(n.opacity=0),t.effects.saveStyle(s),s.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("size",function(e,i){var s,n,o,a=t(this),r=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],l=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],c=e.mode,u="effect"!==c,d=e.scale||"both",p=e.origin||["middle","center"],f=a.css("position"),g=a.position(),m=t.effects.scaledDimensions(a),_=e.from||m,v=e.to||t.effects.scaledDimensions(a,0);t.effects.createPlaceholder(a),"show"===c&&(o=_,_=v,v=o),n={from:{y:_.height/m.height,x:_.width/m.width},to:{y:v.height/m.height,x:v.width/m.width}},("box"===d||"both"===d)&&(n.from.y!==n.to.y&&(_=t.effects.setTransition(a,h,n.from.y,_),v=t.effects.setTransition(a,h,n.to.y,v)),n.from.x!==n.to.x&&(_=t.effects.setTransition(a,l,n.from.x,_),v=t.effects.setTransition(a,l,n.to.x,v))),("content"===d||"both"===d)&&n.from.y!==n.to.y&&(_=t.effects.setTransition(a,r,n.from.y,_),v=t.effects.setTransition(a,r,n.to.y,v)),p&&(s=t.effects.getBaseline(p,m),_.top=(m.outerHeight-_.outerHeight)*s.y+g.top,_.left=(m.outerWidth-_.outerWidth)*s.x+g.left,v.top=(m.outerHeight-v.outerHeight)*s.y+g.top,v.left=(m.outerWidth-v.outerWidth)*s.x+g.left),a.css(_),("content"===d||"both"===d)&&(h=h.concat(["marginTop","marginBottom"]).concat(r),l=l.concat(["marginLeft","marginRight"]),a.find("*[width]").each(function(){var i=t(this),s=t.effects.scaledDimensions(i),o={height:s.height*n.from.y,width:s.width*n.from.x,outerHeight:s.outerHeight*n.from.y,outerWidth:s.outerWidth*n.from.x},a={height:s.height*n.to.y,width:s.width*n.to.x,outerHeight:s.height*n.to.y,outerWidth:s.width*n.to.x};n.from.y!==n.to.y&&(o=t.effects.setTransition(i,h,n.from.y,o),a=t.effects.setTransition(i,h,n.to.y,a)),n.from.x!==n.to.x&&(o=t.effects.setTransition(i,l,n.from.x,o),a=t.effects.setTransition(i,l,n.to.x,a)),u&&t.effects.saveStyle(i),i.css(o),i.animate(a,e.duration,e.easing,function(){u&&t.effects.restoreStyle(i)})})),a.animate(v,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=a.offset();0===v.opacity&&a.css("opacity",_.opacity),u||(a.css("position","static"===f?"relative":f).offset(e),t.effects.saveStyle(a)),i()}})}),t.effects.define("scale",function(e,i){var s=t(this),n=e.mode,o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"effect"!==n?0:100),a=t.extend(!0,{from:t.effects.scaledDimensions(s),to:t.effects.scaledDimensions(s,o,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(a.from.opacity=1,a.to.opacity=0),t.effects.effect.size.call(this,a,i)}),t.effects.define("puff","hide",function(e,i){var s=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150});t.effects.effect.scale.call(this,s,i)}),t.effects.define("pulsate","show",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=o||a,h=2*(e.times||5)+(r?1:0),l=e.duration/h,c=0,u=1,d=s.queue().length;for((o||!s.is(":visible"))&&(s.css("opacity",0).show(),c=1);h>u;u++)s.animate({opacity:c},l,e.easing),c=1-c;s.animate({opacity:c},l,e.easing),s.queue(i),t.effects.unshift(s,d,h+1)}),t.effects.define("shake",function(e,i){var s=1,n=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,h=2*r+1,l=Math.round(e.duration/h),c="up"===o||"down"===o?"top":"left",u="up"===o||"left"===o,d={},p={},f={},g=n.queue().length;for(t.effects.createPlaceholder(n),d[c]=(u?"-=":"+=")+a,p[c]=(u?"+=":"-=")+2*a,f[c]=(u?"-=":"+=")+2*a,n.animate(d,l,e.easing);r>s;s++)n.animate(p,l,e.easing).animate(f,l,e.easing);n.animate(p,l,e.easing).animate(d,l/2,e.easing).queue(i),t.effects.unshift(n,g,h+1)}),t.effects.define("slide","show",function(e,i){var s,n,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u=e.distance||o["top"===l?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),s=o.cssClip(),n=o.position()[l],d[l]=(c?-1:1)*u+n,d.clip=o.cssClip(),d.clip[a[h][1]]=d.clip[a[h][0]],"show"===r&&(o.cssClip(d.clip),o.css(l,d[l]),d.clip=s,d[l]=n),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})});var v;t.uiBackCompat!==!1&&(v=t.effects.define("transfer",function(e,i){t(this).transfer(e,i)}))});
lib/Cleantalk/Antispam/Helper.php CHANGED
@@ -121,7 +121,7 @@ class Helper
121
  // Detect IP type
122
  $ip_type = self::ip__validate(isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : '');
123
  if($ip_type)
124
- $ips['real'] = $ip_type == 'v6' ? self::ip__v6_normalize(isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : '') : isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : '';
125
 
126
  // Cloud Flare
127
  if(isset($headers['CF-Connecting-IP'], $headers['CF-IPCountry'], $headers['CF-RAY']) || isset($headers['Cf-Connecting-Ip'], $headers['Cf-Ipcountry'], $headers['Cf-Ray'])){
@@ -256,8 +256,8 @@ class Helper
256
  $ip_xtets = explode($ip_type == 'v4' ? '.' : ':', $ip);
257
 
258
  // Standartizing. Getting current octets/hextets. Adding leading zeros.
259
- $net_xtet = str_pad(decbin($ip_type == 'v4' ? $net_ip_xtets[$xtet_count] : hexdec($net_ip_xtets[$xtet_count])), $xtet_base, 0, STR_PAD_LEFT);
260
- $ip_xtet = str_pad(decbin($ip_type == 'v4' ? $ip_xtets[$xtet_count] : hexdec($ip_xtets[$xtet_count])), $xtet_base, 0, STR_PAD_LEFT);
261
 
262
  // Comparing bit by bit
263
  for($i = 0, $result = true; $mask != 0; $mask--, $i++){
121
  // Detect IP type
122
  $ip_type = self::ip__validate(isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : '');
123
  if($ip_type)
124
+ $ips['real'] = ($ip_type == 'v6' ? self::ip__v6_normalize(isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : '' ) : isset( $_SERVER['REMOTE_ADDR'] )) ? $_SERVER['REMOTE_ADDR'] : '';
125
 
126
  // Cloud Flare
127
  if(isset($headers['CF-Connecting-IP'], $headers['CF-IPCountry'], $headers['CF-RAY']) || isset($headers['Cf-Connecting-Ip'], $headers['Cf-Ipcountry'], $headers['Cf-Ray'])){
256
  $ip_xtets = explode($ip_type == 'v4' ? '.' : ':', $ip);
257
 
258
  // Standartizing. Getting current octets/hextets. Adding leading zeros.
259
+ $net_xtet = str_pad(decbin($ip_type == 'v4' ? $net_ip_xtets[$xtet_count] : @hexdec($net_ip_xtets[$xtet_count])), $xtet_base, 0, STR_PAD_LEFT);
260
+ $ip_xtet = str_pad(decbin($ip_type == 'v4' ? $ip_xtets[$xtet_count] : @hexdec($ip_xtets[$xtet_count])), $xtet_base, 0, STR_PAD_LEFT);
261
 
262
  // Comparing bit by bit
263
  for($i = 0, $result = true; $mask != 0; $mask--, $i++){
lib/Cleantalk/Common/Cookie.php CHANGED
@@ -1,52 +1,52 @@
1
- <?php
2
-
3
- namespace Cleantalk\Common;
4
-
5
- /**
6
- * Class Cookie
7
- * Safety handler for $_COOKIE
8
- *
9
- * @usage \Cleantalk\Common\Cookie::get( $name );
10
- *
11
- * @package Cleantalk\Common
12
- */
13
- class Cookie extends ServerVariables{
14
-
15
- static $instance;
16
-
17
- /**
18
- * Constructor
19
- * @return $this
20
- */
21
- public static function getInstance(){
22
- if (!isset(static::$instance)) {
23
- static::$instance = new static;
24
- static::$instance->init();
25
- }
26
- return static::$instance;
27
- }
28
-
29
- /**
30
- * Gets given $_COOKIE variable and seva it to memory
31
- * @param $name
32
- *
33
- * @return mixed|string
34
- */
35
- protected function get_variable( $name ){
36
-
37
- // Return from memory. From $this->variables
38
- if(isset(static::$instance->variables[$name]))
39
- return static::$instance->variables[$name];
40
-
41
- if( function_exists( 'filter_input' ) )
42
- $value = filter_input( INPUT_COOKIE, $name );
43
-
44
- if( empty( $value ) )
45
- $value = isset( $_COOKIE[ $name ] ) ? $_COOKIE[ $name ] : '';
46
-
47
- // Remember for thurther calls
48
- static::getInstance()->remebmer_variable( $name, $value );
49
-
50
- return $value;
51
- }
52
  }
1
+ <?php
2
+
3
+ namespace Cleantalk\Common;
4
+
5
+ /**
6
+ * Class Cookie
7
+ * Safety handler for $_COOKIE
8
+ *
9
+ * @usage \Cleantalk\Common\Cookie::get( $name );
10
+ *
11
+ * @package Cleantalk\Common
12
+ */
13
+ class Cookie extends ServerVariables{
14
+
15
+ static $instance;
16
+
17
+ /**
18
+ * Constructor
19
+ * @return $this
20
+ */
21
+ public static function getInstance(){
22
+ if (!isset(static::$instance)) {
23
+ static::$instance = new static;
24
+ static::$instance->init();
25
+ }
26
+ return static::$instance;
27
+ }
28
+
29
+ /**
30
+ * Gets given $_COOKIE variable and seva it to memory
31
+ * @param $name
32
+ *
33
+ * @return mixed|string
34
+ */
35
+ protected function get_variable( $name ){
36
+
37
+ // Return from memory. From $this->variables
38
+ if(isset(static::$instance->variables[$name]))
39
+ return static::$instance->variables[$name];
40
+
41
+ if( function_exists( 'filter_input' ) )
42
+ $value = filter_input( INPUT_COOKIE, $name );
43
+
44
+ if( empty( $value ) )
45
+ $value = isset( $_COOKIE[ $name ] ) ? $_COOKIE[ $name ] : '';
46
+
47
+ // Remember for thurther calls
48
+ static::getInstance()->remebmer_variable( $name, $value );
49
+
50
+ return $value;
51
+ }
52
  }
lib/Cleantalk/Common/Get.php CHANGED
@@ -1,52 +1,52 @@
1
- <?php
2
-
3
- namespace Cleantalk\Common;
4
-
5
- /**
6
- * Class Get
7
- * Safety handler for $_GET
8
- *
9
- * @usage \Cleantalk\Common\Get::get( $name );
10
- *
11
- * @package Cleantalk\Common
12
- */
13
- class Get extends ServerVariables{
14
-
15
- static $instance;
16
-
17
- /**
18
- * Constructor
19
- * @return $this
20
- */
21
- public static function getInstance(){
22
- if (!isset(static::$instance)) {
23
- static::$instance = new static;
24
- static::$instance->init();
25
- }
26
- return static::$instance;
27
- }
28
-
29
- /**
30
- * Gets given $_GET variable and seva it to memory
31
- * @param $name
32
- *
33
- * @return mixed|string
34
- */
35
- protected function get_variable( $name ){
36
-
37
- // Return from memory. From $this->variables
38
- if(isset(static::$instance->variables[$name]))
39
- return static::$instance->variable[$name];
40
-
41
- if( function_exists( 'filter_input' ) )
42
- $value = filter_input( INPUT_GET, $name );
43
-
44
- if( empty( $value ) )
45
- $value = isset( $_GET[ $name ] ) ? $_GET[ $name ] : '';
46
-
47
- // Remember for thurther calls
48
- static::getInstance()->remebmer_variable( $name, $value );
49
-
50
- return $value;
51
- }
52
  }
1
+ <?php
2
+
3
+ namespace Cleantalk\Common;
4
+
5
+ /**
6
+ * Class Get
7
+ * Safety handler for $_GET
8
+ *
9
+ * @usage \Cleantalk\Common\Get::get( $name );
10
+ *
11
+ * @package Cleantalk\Common
12
+ */
13
+ class Get extends ServerVariables{
14
+
15
+ static $instance;
16
+
17
+ /**
18
+ * Constructor
19
+ * @return $this
20
+ */
21
+ public static function getInstance(){
22
+ if (!isset(static::$instance)) {
23
+ static::$instance = new static;
24
+ static::$instance->init();
25
+ }
26
+ return static::$instance;
27
+ }
28
+
29
+ /**
30
+ * Gets given $_GET variable and seva it to memory
31
+ * @param $name
32
+ *
33
+ * @return mixed|string
34
+ */
35
+ protected function get_variable( $name ){
36
+
37
+ // Return from memory. From $this->variables
38
+ if(isset(static::$instance->variables[$name]))
39
+ return static::$instance->variable[$name];
40
+
41
+ if( function_exists( 'filter_input' ) )
42
+ $value = filter_input( INPUT_GET, $name );
43
+
44
+ if( empty( $value ) )
45
+ $value = isset( $_GET[ $name ] ) ? $_GET[ $name ] : '';
46
+
47
+ // Remember for thurther calls
48
+ static::getInstance()->remebmer_variable( $name, $value );
49
+
50
+ return $value;
51
+ }
52
  }
lib/Cleantalk/Common/Post.php CHANGED
@@ -1,53 +1,53 @@
1
- <?php
2
-
3
-
4
- namespace Cleantalk\Common;
5
-
6
- /**
7
- * Class Post
8
- * Safety handler for $_POST
9
- *
10
- * @usage \Cleantalk\Common\Post::get( $name );
11
- *
12
- * @package Cleantalk\Common
13
- */
14
- class Post extends ServerVariables{
15
-
16
- static $instance;
17
-
18
- /**
19
- * Constructor
20
- * @return $this
21
- */
22
- public static function getInstance(){
23
- if (!isset(static::$instance)) {
24
- static::$instance = new static;
25
- static::$instance->init();
26
- }
27
- return static::$instance;
28
- }
29
-
30
- /**
31
- * Gets given $_POST variable and seva it to memory
32
- * @param $name
33
- *
34
- * @return mixed|string
35
- */
36
- protected function get_variable( $name ){
37
-
38
- // Return from memory. From $this->variables
39
- if(isset(static::$instance->variables[$name]))
40
- return static::$instance->variables[$name];
41
-
42
- if( function_exists( 'filter_input' ) )
43
- $value = filter_input( INPUT_POST, $name );
44
-
45
- if( empty( $value ) )
46
- $value = isset( $_POST[ $name ] ) ? $_POST[ $name ] : '';
47
-
48
- // Remember for thurther calls
49
- static::getInstance()->remebmer_variable( $name, $value );
50
-
51
- return $value;
52
- }
53
  }
1
+ <?php
2
+
3
+
4
+ namespace Cleantalk\Common;
5
+
6
+ /**
7
+ * Class Post
8
+ * Safety handler for $_POST
9
+ *
10
+ * @usage \Cleantalk\Common\Post::get( $name );
11
+ *
12
+ * @package Cleantalk\Common
13
+ */
14
+ class Post extends ServerVariables{
15
+
16
+ static $instance;
17
+
18
+ /**
19
+ * Constructor
20
+ * @return $this
21
+ */
22
+ public static function getInstance(){
23
+ if (!isset(static::$instance)) {
24
+ static::$instance = new static;
25
+ static::$instance->init();
26
+ }
27
+ return static::$instance;
28
+ }
29
+
30
+ /**
31
+ * Gets given $_POST variable and seva it to memory
32
+ * @param $name
33
+ *
34
+ * @return mixed|string
35
+ */
36
+ protected function get_variable( $name ){
37
+
38
+ // Return from memory. From $this->variables
39
+ if(isset(static::$instance->variables[$name]))
40
+ return static::$instance->variables[$name];
41
+
42
+ if( function_exists( 'filter_input' ) )
43
+ $value = filter_input( INPUT_POST, $name );
44
+
45
+ if( empty( $value ) )
46
+ $value = isset( $_POST[ $name ] ) ? $_POST[ $name ] : '';
47
+
48
+ // Remember for thurther calls
49
+ static::getInstance()->remebmer_variable( $name, $value );
50
+
51
+ return $value;
52
+ }
53
  }
lib/Cleantalk/Common/Request.php CHANGED
@@ -1,48 +1,48 @@
1
- <?php
2
-
3
- namespace Cleantalk\Common;
4
-
5
- /**
6
- * Class Request
7
- * Safety handler for $_REQUEST
8
- *
9
- * @usage \Cleantalk\Common\Request::get( $name );
10
- *
11
- * @package Cleantalk\Common
12
- */
13
- class Request extends ServerVariables{
14
-
15
- static $instance;
16
-
17
- /**
18
- * Constructor
19
- * @return $this
20
- */
21
- public static function getInstance(){
22
- if (!isset(static::$instance)) {
23
- static::$instance = new static;
24
- static::$instance->init();
25
- }
26
- return static::$instance;
27
- }
28
-
29
- /**
30
- * Gets given $_REQUEST variable and seva it to memory
31
- * @param $name
32
- *
33
- * @return mixed|string
34
- */
35
- protected function get_variable( $name ){
36
-
37
- // Return from memory. From $this->variables
38
- if(isset(static::$instance->variables[$name]))
39
- return static::$instance->variables[$name];
40
-
41
- $value = isset( $_REQUEST[ $name ] ) ? $_REQUEST[ $name ] : '';
42
-
43
- // Remember for thurther calls
44
- static::getInstance()->remebmer_variable( $name, $value );
45
-
46
- return $value;
47
- }
48
  }
1
+ <?php
2
+
3
+ namespace Cleantalk\Common;
4
+
5
+ /**
6
+ * Class Request
7
+ * Safety handler for $_REQUEST
8
+ *
9
+ * @usage \Cleantalk\Common\Request::get( $name );
10
+ *
11
+ * @package Cleantalk\Common
12
+ */
13
+ class Request extends ServerVariables{
14
+
15
+ static $instance;
16
+
17
+ /**
18
+ * Constructor
19
+ * @return $this
20
+ */
21
+ public static function getInstance(){
22
+ if (!isset(static::$instance)) {
23
+ static::$instance = new static;
24
+ static::$instance->init();
25
+ }
26
+ return static::$instance;
27
+ }
28
+
29
+ /**
30
+ * Gets given $_REQUEST variable and seva it to memory
31
+ * @param $name
32
+ *
33
+ * @return mixed|string
34
+ */
35
+ protected function get_variable( $name ){
36
+
37
+ // Return from memory. From $this->variables
38
+ if(isset(static::$instance->variables[$name]))
39
+ return static::$instance->variables[$name];
40
+
41
+ $value = isset( $_REQUEST[ $name ] ) ? $_REQUEST[ $name ] : '';
42
+
43
+ // Remember for thurther calls
44
+ static::getInstance()->remebmer_variable( $name, $value );
45
+
46
+ return $value;
47
+ }
48
  }
lib/Cleantalk/Common/Server.php CHANGED
@@ -1,83 +1,83 @@
1
- <?php
2
-
3
- namespace Cleantalk\Common;
4
-
5
- /**
6
- * Class Server
7
- * Wrapper to safely get $_SERVER variables
8
- *
9
- * @package Cleantalk\Common
10
- */
11
- class Server extends ServerVariables{
12
-
13
- static $instance;
14
-
15
- /**
16
- * Constructor
17
- * @return $this
18
- */
19
- public static function getInstance(){
20
- if (!isset(static::$instance)) {
21
- static::$instance = new static;
22
- static::$instance->init();
23
- }
24
- return static::$instance;
25
- }
26
-
27
- /**
28
- * Gets given $_SERVER variable and seva it to memory
29
- *
30
- * @param string $name
31
- *
32
- * @return mixed|string
33
- */
34
- protected function get_variable( $name ){
35
-
36
- // Return from memory. From $this->server
37
- if(isset(static::$instance->variable[$name]))
38
- return static::$instance->variable[$name];
39
-
40
- $name = strtoupper( $name );
41
-
42
- if( function_exists( 'filter_input' ) )
43
- $value = filter_input( INPUT_SERVER, $name );
44
-
45
- if( empty( $value ) )
46
- $value = isset( $_SERVER[ $name ] ) ? $_SERVER[ $name ] : '';
47
-
48
- // Convert to upper case for REQUEST_METHOD
49
- if( in_array( $name, array( 'REQUEST_METHOD' ) ) )
50
- $value = strtoupper( $value );
51
-
52
- // Convert HTML chars for HTTP_USER_AGENT, HTTP_USER_AGENT, SERVER_NAME
53
- if( in_array( $name, array( 'HTTP_USER_AGENT', 'HTTP_USER_AGENT', 'SERVER_NAME' ) ) )
54
- $value = htmlspecialchars( $value );
55
-
56
- // Remember for thurther calls
57
- static::getInstance()->remebmer_variable( $name, $value );
58
-
59
- return $value;
60
- }
61
-
62
- /**
63
- * Checks if $_SERVER['REQUEST_URI'] contains string
64
- *
65
- * @param string $string needle
66
- *
67
- * @return bool|int
68
- */
69
- public function in_uri( $string ){
70
- return self::has_string( 'REQUEST_URI', $string );
71
- }
72
-
73
- /**
74
- * Checks if $_SERVER['REQUEST_URI'] contains string
75
- *
76
- * @param string $string needle
77
- *
78
- * @return bool|int
79
- */
80
- public function in_referer( $string ){
81
- return self::has_string( 'HTTP_REFERER', $string );
82
- }
83
  }
1
+ <?php
2
+
3
+ namespace Cleantalk\Common;
4
+
5
+ /**
6
+ * Class Server
7
+ * Wrapper to safely get $_SERVER variables
8
+ *
9
+ * @package Cleantalk\Common
10
+ */
11
+ class Server extends ServerVariables{
12
+
13
+ static $instance;
14
+
15
+ /**
16
+ * Constructor
17
+ * @return $this
18
+ */
19
+ public static function getInstance(){
20
+ if (!isset(static::$instance)) {
21
+ static::$instance = new static;
22
+ static::$instance->init();
23
+ }
24
+ return static::$instance;
25
+ }
26
+
27
+ /**
28
+ * Gets given $_SERVER variable and seva it to memory
29
+ *
30
+ * @param string $name
31
+ *
32
+ * @return mixed|string
33
+ */
34
+ protected function get_variable( $name ){
35
+
36
+ // Return from memory. From $this->server
37
+ if(isset(static::$instance->variable[$name]))
38
+ return static::$instance->variable[$name];
39
+
40
+ $name = strtoupper( $name );
41
+
42
+ if( function_exists( 'filter_input' ) )
43
+ $value = filter_input( INPUT_SERVER, $name );
44
+
45
+ if( empty( $value ) )
46
+ $value = isset( $_SERVER[ $name ] ) ? $_SERVER[ $name ] : '';
47
+
48
+ // Convert to upper case for REQUEST_METHOD
49
+ if( in_array( $name, array( 'REQUEST_METHOD' ) ) )
50
+ $value = strtoupper( $value );
51
+
52
+ // Convert HTML chars for HTTP_USER_AGENT, HTTP_USER_AGENT, SERVER_NAME
53
+ if( in_array( $name, array( 'HTTP_USER_AGENT', 'HTTP_USER_AGENT', 'SERVER_NAME' ) ) )
54
+ $value = htmlspecialchars( $value );
55
+
56
+ // Remember for thurther calls
57
+ static::getInstance()->remebmer_variable( $name, $value );
58
+
59
+ return $value;
60
+ }
61
+
62
+ /**
63
+ * Checks if $_SERVER['REQUEST_URI'] contains string
64
+ *
65
+ * @param string $string needle
66
+ *
67
+ * @return bool|int
68
+ */
69
+ public function in_uri( $string ){
70
+ return self::has_string( 'REQUEST_URI', $string );
71
+ }
72
+
73
+ /**
74
+ * Checks if $_SERVER['REQUEST_URI'] contains string
75
+ *
76
+ * @param string $string needle
77
+ *
78
+ * @return bool|int
79
+ */
80
+ public function in_referer( $string ){
81
+ return self::has_string( 'HTTP_REFERER', $string );
82
+ }
83
  }
lib/Cleantalk/Common/ServerVariables.php CHANGED
@@ -1,84 +1,84 @@
1
- <?php
2
-
3
- namespace Cleantalk\Common;
4
-
5
- /**
6
- * Class ServerVariables
7
- * Safety handler for ${_SOMETHING}
8
- *
9
- * @usage \Cleantalk\Common\{SOMETHING}::get( $name );
10
- *
11
- * @package Cleantalk\Common
12
- */
13
- class ServerVariables{
14
-
15
- static $instance;
16
- public $variables = [];
17
-
18
- public function __construct(){}
19
- public function __wakeup(){}
20
- public function __clone(){}
21
-
22
- /**
23
- * Constructor
24
- * @return $this
25
- */
26
- public static function getInstance(){
27
- if (!isset(static::$instance)) {
28
- static::$instance = new static;
29
- static::$instance->init();
30
- }
31
- return static::$instance;
32
- }
33
-
34
- /**
35
- * Alternative constructor
36
- */
37
- protected function init(){
38
-
39
- }
40
-
41
- /**
42
- * Gets variable from ${_SOMETHING}
43
- *
44
- * @param $name
45
- *
46
- * @return string ${_SOMETHING}[ $name ]
47
- */
48
- public static function get( $name ){
49
- return static::getInstance()->get_variable( $name );
50
- }
51
-
52
- /**
53
- * BLUEPRINT
54
- * Gets given ${_SOMETHING} variable and seva it to memory
55
- * @param $name
56
- *
57
- * @return mixed|string
58
- */
59
- protected function get_variable( $name ){
60
- return true;
61
- }
62
-
63
- /**
64
- * Save variable to $this->variables[]
65
- *
66
- * @param string $name
67
- * @param string $value
68
- */
69
- protected function remebmer_variable( $name, $value ){
70
- static::$instance->variables[$name] = $value;
71
- }
72
-
73
- /**
74
- * Checks if variable contains given string
75
- *
76
- * @param string $var Haystack to search in
77
- * @param string $string Needle to search
78
- *
79
- * @return bool|int
80
- */
81
- static function has_string( $var, $string ){
82
- return stripos( self::get( $var ), $string ) !== false;
83
- }
84
  }
1
+ <?php
2
+
3
+ namespace Cleantalk\Common;
4
+
5
+ /**
6
+ * Class ServerVariables
7
+ * Safety handler for ${_SOMETHING}
8
+ *
9
+ * @usage \Cleantalk\Common\{SOMETHING}::get( $name );
10
+ *
11
+ * @package Cleantalk\Common
12
+ */
13
+ class ServerVariables{
14
+
15
+ static $instance;
16
+ public $variables = [];
17
+
18
+ public function __construct(){}
19
+ public function __wakeup(){}
20
+ public function __clone(){}
21
+
22
+ /**
23
+ * Constructor
24
+ * @return $this
25
+ */
26
+ public static function getInstance(){
27
+ if (!isset(static::$instance)) {
28
+ static::$instance = new static;
29
+ static::$instance->init();
30
+ }
31
+ return static::$instance;
32
+ }
33
+
34
+ /**
35
+ * Alternative constructor
36
+ */
37
+ protected function init(){
38
+
39
+ }
40
+
41
+ /**
42
+ * Gets variable from ${_SOMETHING}
43
+ *
44
+ * @param $name
45
+ *
46
+ * @return string ${_SOMETHING}[ $name ]
47
+ */
48
+ public static function get( $name ){
49
+ return static::getInstance()->get_variable( $name );
50
+ }
51
+
52
+ /**
53
+ * BLUEPRINT
54
+ * Gets given ${_SOMETHING} variable and seva it to memory
55
+ * @param $name
56
+ *
57
+ * @return mixed|string
58
+ */
59
+ protected function get_variable( $name ){
60
+ return true;
61
+ }
62
+
63
+ /**
64
+ * Save variable to $this->variables[]
65
+ *
66
+ * @param string $name
67
+ * @param string $value
68
+ */
69
+ protected function remebmer_variable( $name, $value ){
70
+ static::$instance->variables[$name] = $value;
71
+ }
72
+
73
+ /**
74
+ * Checks if variable contains given string
75
+ *
76
+ * @param string $var Haystack to search in
77
+ * @param string $string Needle to search
78
+ *
79
+ * @return bool|int
80
+ */
81
+ static function has_string( $var, $string ){
82
+ return stripos( self::get( $var ), $string ) !== false;
83
+ }
84
  }
lib/CleantalkState.php CHANGED
@@ -499,7 +499,7 @@ class CleantalkState
499
  public function __set($name, $value)
500
  {
501
  $this->storage[$name] = $value;
502
- if(isset($this->storage['data']) && array_key_exists($name, $this->storage['data'])){
503
  $this->storage['data'][$name] = $value;
504
  }
505
  }
@@ -515,11 +515,11 @@ class CleantalkState
515
  public function __get($name)
516
  {
517
  // First check in storage
518
- if (array_key_exists($name, $this->storage)){
519
  return $this->storage[$name];
520
 
521
  // Then in data
522
- }elseif(array_key_exists($name, $this->storage['data'])){
523
  $this->$name = $this->storage['data'][$name];
524
  return $this->storage['data'][$name];
525
 
@@ -541,4 +541,20 @@ class CleantalkState
541
  {
542
  unset($this->storage[$name]);
543
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
544
  }
499
  public function __set($name, $value)
500
  {
501
  $this->storage[$name] = $value;
502
+ if(isset($this->storage['data'][$name])){
503
  $this->storage['data'][$name] = $value;
504
  }
505
  }
515
  public function __get($name)
516
  {
517
  // First check in storage
518
+ if (isset($this->storage[$name])){
519
  return $this->storage[$name];
520
 
521
  // Then in data
522
+ }elseif(isset($this->storage['data'][$name])){
523
  $this->$name = $this->storage['data'][$name];
524
  return $this->storage['data'][$name];
525
 
541
  {
542
  unset($this->storage[$name]);
543
  }
544
+
545
+ public function server(){
546
+ return \Cleantalk\Common\Server::getInstance();
547
+ }
548
+ public function cookie(){
549
+ return \Cleantalk\Common\Cookie::getInstance();
550
+ }
551
+ public function request(){
552
+ return \Cleantalk\Common\Request::getInstance();
553
+ }
554
+ public function post(){
555
+ return \Cleantalk\Common\Post::getInstance();
556
+ }
557
+ public function get(){
558
+ return \Cleantalk\Common\Get::getInstance();
559
+ }
560
  }
lib/CleantalkUpgraderSkin_Deprecated.php CHANGED
@@ -1,44 +1,44 @@
1
- <?php
2
-
3
- class CleantalkUpgraderSkin_Deprecated extends WP_Upgrader_Skin
4
- {
5
-
6
- public $upgrader;
7
- public $done_header = false;
8
- public $done_footer = false;
9
-
10
- /**
11
- * Holds the result of an upgrade.
12
- *
13
- * @since 2.8.0
14
- * @var string|bool|WP_Error
15
- */
16
- public $result = false;
17
- public $options = array();
18
-
19
- /**
20
- */
21
- public function header() { }
22
-
23
- /**
24
- */
25
- public function footer() { }
26
-
27
- /**
28
- *
29
- * @param string $string
30
- */
31
- public function feedback($string) { }
32
-
33
- /**
34
- *
35
- * @param string|WP_Error $errors
36
- */
37
- public function error($errors) {
38
- if(is_wp_error($errors)){
39
- $this->upgrader->apbct_result = $errors->get_error_code();
40
- }else{
41
- $this->upgrader->apbct_result = $this->upgrader->strings[$errors];
42
- }
43
- }
44
- }
1
+ <?php
2
+
3
+ class CleantalkUpgraderSkin_Deprecated extends WP_Upgrader_Skin
4
+ {
5
+
6
+ public $upgrader;
7
+ public $done_header = false;
8
+ public $done_footer = false;
9
+
10
+ /**
11
+ * Holds the result of an upgrade.
12
+ *
13
+ * @since 2.8.0
14
+ * @var string|bool|WP_Error
15
+ */
16
+ public $result = false;
17
+ public $options = array();
18
+
19
+ /**
20
+ */
21
+ public function header() { }
22
+
23
+ /**
24
+ */
25
+ public function footer() { }
26
+
27
+ /**
28
+ *
29
+ * @param string $string
30
+ */
31
+ public function feedback($string) { }
32
+
33
+ /**
34
+ *
35
+ * @param string|WP_Error $errors
36
+ */
37
+ public function error($errors) {
38
+ if(is_wp_error($errors)){
39
+ $this->upgrader->apbct_result = $errors->get_error_code();
40
+ }else{
41
+ $this->upgrader->apbct_result = $this->upgrader->strings[$errors];
42
+ }
43
+ }
44
+ }
lib/autoloader.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Autoloader for \Cleantalk\* classes
5
+ *
6
+ * @param string $class
7
+ *
8
+ * @return void
9
+ */
10
+ spl_autoload_register( function( $class ){
11
+
12
+ // Register class auto loader
13
+ // Custom modules1
14
+ if(strpos($class, 'Cleantalk') !== false){
15
+ $class = str_replace('\\', DIRECTORY_SEPARATOR, $class);
16
+ $class_file = __DIR__ . DIRECTORY_SEPARATOR . $class . '.php';
17
+ if(file_exists($class_file)){
18
+ require_once($class_file);
19
+ }
20
+ }
21
+ });
22
+
23
+
readme.txt CHANGED
@@ -4,7 +4,7 @@ Tags: spam, antispam, woocommerce, comments, firewall
4
  Requires at least: 3.0
5
  Tested up to: 5.3
6
  Requires PHP: 5.4
7
- Stable tag: 5.132.3
8
  License: GPLv2
9
 
10
  Spam protection, antispam, firewall, premium plugin. No spam comments & users, no spam contact form & WooCommerce anti-spam.
@@ -432,26 +432,12 @@ or
432
  define('CLEANTALK_AJAX_USE_FOOTER_HEADER', false); //false - don't use wp_footer() and wp_header() for including AJAX script, true - use it
433
 
434
  = Can I add exclusions for some pages of my site? =
435
- Yes, you can. Add this string in your wp-config.php file before defining database constants:
436
-
437
- $cleantalk_url_exclusions = array('url1', 'url2', 'url3');
438
-
439
- Now, all pages containing strings 'url1', 'url2', or 'url3' will be excluded from anti-spam checking. Remember, that this option will not be applied in registration and comment checking - they are always protected from spam. This is similar to regular expression /.*url1.*/ or wildcard like *url1*.
440
-
441
- For example: If you need to except these URLs:
442
- example.com/some/thing
443
- example.com/some/one
444
- example.com/some/body
445
- You should type this in wp-config.php:
446
-
447
- $cleantalk_url_exclusions = array('some');
448
 
449
  = Can I not send my personal data to CleanTalk servers? =
450
- Yes, you can exclude your data. Add this string in your wp-config.php file before defining database constants:
451
-
452
- $cleantalk_key_exclusions = Array('key1', 'key2', 'key3');
453
-
454
- Now all fields in your submissions with the keys named 'key1', 'key2' or 'key3' will be excluded from spam checking.
455
 
456
  = How to test Spam FireWall? =
457
  Use special IP 10.10.10.10 in URL to test Spam FireWall. For example,
@@ -579,6 +565,16 @@ If your website has forms that send data to external sources, you can enable opt
579
  10. Website's options.
580
 
581
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
582
  = 5.132.3 December 19 2019 =
583
  * Fix: The disable comments functionality.
584
 
4
  Requires at least: 3.0
5
  Tested up to: 5.3
6
  Requires PHP: 5.4
7
+ Stable tag: 5.133
8
  License: GPLv2
9
 
10
  Spam protection, antispam, firewall, premium plugin. No spam comments & users, no spam contact form & WooCommerce anti-spam.
432
  define('CLEANTALK_AJAX_USE_FOOTER_HEADER', false); //false - don't use wp_footer() and wp_header() for including AJAX script, true - use it
433
 
434
  = Can I add exclusions for some pages of my site? =
435
+ Yes, you can. There is a special setting in plugin settings.
436
+ You could use this guide to learn more: https://cleantalk.org/help/exclusion-from-anti-spam-checking#wordpress
 
 
 
 
 
 
 
 
 
 
 
437
 
438
  = Can I not send my personal data to CleanTalk servers? =
439
+ Yes, you can exclude your data. There is a special setting in plugin settings.
440
+ You could use this guide to learn more: https://cleantalk.org/help/exclusion-from-anti-spam-checking#WordPress_field_exclusions
 
 
 
441
 
442
  = How to test Spam FireWall? =
443
  Use special IP 10.10.10.10 in URL to test Spam FireWall. For example,
565
  10. Website's options.
566
 
567
  == Changelog ==
568
+
569
+ = 5.133 January 20 2020 =
570
+ * Upd: Rebuilding users/comments scan
571
+ * Fix: UltimateMember - form validation checking fixed.
572
+ * Fix: Exclusion for login form.
573
+ * Fix: Disable scripts on excluded pages.
574
+ * Fix: PHP 7.4 compability.
575
+ * Minor fixes.
576
+ * Spam protection improved.
577
+
578
  = 5.132.3 December 19 2019 =
579
  * Fix: The disable comments functionality.
580
 
templates/empty_comments.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ // Empty comments template