WP Job Manager - Version 1.32.0

Version Description

  • Enhancement: Switched from Chosen to Select2 for enhanced dropdown handling and better mobile support. May require theme update.
  • Enhancement: Draft and unsubmitted job listings now appear in [job_dashboard], allowing users to complete their submission.
  • Enhancement: Filled and expired positions are now hidden from WordPress search. (@felipeelia)
  • Enhancement: Adds additional support for the new block editor. Restricted to classic block for compatibility with frontend editor.
  • Enhancement: Job types can be preselected in [jobs] shortcode with ?search_job_type=term-slug. (@felipeelia)
  • Enhancement: Author selection in WP admin now uses a searchable dropdown.
  • Enhancement: Setup wizard is accessed with a flash message instead of an automatic redirect upon activation.
  • Enhancement: When using supported themes, job listing archive slug can be changed in Permalink settings.
  • Fix: Company tagline alignment issue with company name. (@0xDELS)
  • Fix: "Load Previous Listings" link unnecessarily shows up on [jobs] shortcode. (@tonytettinger)
  • Fix: Category selector fixed in the job listings page in WP Admin. (@AmandaJBell)
  • Fix: Issue with quote encoding on Apply for Job email link.
  • Fix: Link target attributes have been removed in templates.
  • Dev: Allow for job submission flow to be interrupted using before argument on form steps.
  • Dev: HTML allowed in custom company field labels. (@tripflex)
  • Dev: Job feed slug name can be customized with the job_manager_job_feed_name filter.
  • Deprecated: Unreleased REST API implementation using WPJM_REST_API_ENABLED was replaced with standard WP REST API.
Download this release

Release Info

Developer jakeom
Plugin Icon 128x128 WP Job Manager
Version 1.32.0
Comparing to
See all releases

Code changes from version 1.31.3 to 1.32.0

Files changed (44) hide show
  1. assets/css/admin.css +1 -1
  2. assets/css/frontend.css +1 -1
  3. assets/js/admin.min.js +1 -1
  4. assets/js/ajax-filters.min.js +1 -1
  5. assets/js/job-application.min.js +1 -1
  6. assets/js/multiselect.min.js +1 -1
  7. assets/js/select2/select2.full.min.js +1 -0
  8. assets/js/select2/select2.min.css +1 -0
  9. assets/js/term-multiselect.min.js +1 -1
  10. changelog.txt +19 -0
  11. includes/3rd-party/polylang.php +13 -0
  12. includes/abstracts/abstract-wp-job-manager-form.php +20 -1
  13. includes/admin/class-wp-job-manager-admin-notices.php +227 -0
  14. includes/admin/class-wp-job-manager-admin.php +23 -3
  15. includes/admin/class-wp-job-manager-cpt.php +9 -1
  16. includes/admin/class-wp-job-manager-permalink-settings.php +28 -5
  17. includes/admin/class-wp-job-manager-setup.php +41 -234
  18. includes/admin/class-wp-job-manager-writepanels.php +31 -56
  19. includes/admin/views/html-admin-notice-core-setup.php +23 -0
  20. includes/admin/views/html-admin-setup-footer.php +13 -0
  21. includes/admin/views/html-admin-setup-header.php +24 -0
  22. includes/admin/views/html-admin-setup-opt-in-usage-tracking.php +26 -0
  23. includes/admin/views/html-admin-setup-step-1.php +33 -0
  24. includes/admin/views/html-admin-setup-step-2.php +77 -0
  25. includes/admin/views/html-admin-setup-step-3.php +74 -0
  26. includes/class-wp-job-manager-ajax.php +134 -0
  27. includes/class-wp-job-manager-blocks.php +56 -0
  28. includes/class-wp-job-manager-data-cleaner.php +2 -0
  29. includes/class-wp-job-manager-install.php +12 -1
  30. includes/class-wp-job-manager-post-types.php +192 -25
  31. includes/class-wp-job-manager-shortcodes.php +2 -1
  32. includes/class-wp-job-manager-usage-tracking.php +2 -2
  33. includes/forms/class-wp-job-manager-form-submit-job.php +15 -3
  34. includes/rest-api/class-wp-job-manager-registrable-job-listings.php +2 -1
  35. includes/rest-api/class-wp-job-manager-registrable-taxonomy-type.php +4 -3
  36. languages/wp-job-manager.pot +447 -373
  37. readme.txt +21 -2
  38. templates/content-single-job_listing-company.php +2 -2
  39. templates/job-application-url.php +2 -2
  40. templates/job-dashboard.php +5 -1
  41. templates/job-submit.php +2 -2
  42. wp-job-manager-functions.php +1 -1
  43. wp-job-manager-template.php +6 -4
  44. wp-job-manager.php +117 -55
assets/css/admin.css CHANGED
@@ -1 +1 @@
1
- .clearfix{zoom:1}.clearfix:after,.clearfix:before{content:"";display:table}.clearfix:after{clear:both}@font-face{font-family:job-manager;src:url(../font/job-manager.eot?4963673);src:url(../font/job-manager.eot?4963673#iefix) format('embedded-opentype'),url(../font/job-manager.woff?4963673) format('woff'),url(../font/job-manager.ttf?4963673) format('truetype'),url(../font/job-manager.svg?4963673#job-manager) format('svg');font-weight:400;font-style:normal}@font-face{font-family:jm-logo;src:url(../font/jm-logo/jm.eot?ycsbky);src:url(../font/jm-logo/jm.eot?#iefixycsbky) format('embedded-opentype'),url(../font/jm-logo/jm.woff?ycsbky) format('woff'),url(../font/jm-logo/jm.ttf?ycsbky) format('truetype'),url(../font/jm-logo/jm.svg?ycsbky#icomoon) format('svg');font-weight:400;font-style:normal}.jm-icon{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em}.job-manager-settings-wrap .updated{display:none}.job-manager-settings-wrap .job-manager-updated{display:block;margin:1em 0 0}a.wpjm-activate-licence-link,a.wpjm-activate-licence-link:active,a.wpjm-activate-licence-link:hover,a.wpjm-activate-licence-link:link,a.wpjm-activate-licence-link:visited{color:#ff4500}.wpjm-licences{margin-top:10px}.wpjm-licences .licence-row{align-items:center;border:solid 1px #e2e0e2;display:flex;background-color:#fff;flex-wrap:wrap;min-height:82px;margin-bottom:20px;position:relative}.wpjm-licences .plugin-info{font-size:18px;flex-basis:320px;padding:0 20px;margin-right:10px}.wpjm-licences .plugin-info .plugin-author{font-size:12px}.wpjm-licences .plugin-licence{flex:1;flex-basis:40%;padding-bottom:5px}.wpjm-licences .plugin-licence label{white-space:nowrap}.widefat td.column-featured_job,.widefat td.column-filled,.widefat td.column-job_status{width:46px;text-align:left;padding-left:11px}.widefat th.column-featured_job,.widefat th.column-filled,.widefat th.column-job_status{width:1em}.widefat th.column-featured_job span,.widefat th.column-filled span,.widefat th.column-job_status span{display:block;width:1em;height:1em;line-height:1em;padding:1px 0 0 0;overflow:hidden}.widefat th.column-featured_job span:before,.widefat th.column-filled span:before,.widefat th.column-job_status span:before{content:'\e803';font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em}.widefat th.column-filled span:before{content:'\e807'}.widefat th.column-job_status span:before{content:'\e828'}.widefat .column-job_posted strong{display:block;margin-bottom:.2em}.widefat td.column-job_status span{position:relative;font-size:1em;line-height:1.5em;width:1em;height:0;padding:2em 0 0 0;overflow:hidden;display:block}.widefat td.column-job_status span:before{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;position:absolute;top:0;left:0;line-height:1.5em;vertical-align:middle;color:#999;content:'\e829'}.widefat td.column-job_status .status-trash:before{content:'\e82b';color:#a00}.widefat td.column-job_status .status-pending:before{content:'\e82c';color:#ffba00}.widefat td.column-job_status .status-publish:before{content:'\e82f';color:#73a724}.widefat td.column-job_status .status-expired:before{content:'\e82e';color:#a00}.widefat .column-job_listing_type{text-align:left;width:6em;word-wrap:normal!important}.widefat .column-job_listing_type .job-type{color:#fff;padding:4px;font-size:11px;-webkit-border-radius:2px;border-radius:2px;display:block;background-color:#f08d3c;text-align:center}.widefat .column-job_listing_type .full-time{background-color:#90da36}.widefat .column-job_listing_type .part-time{background-color:#f08d3c}.widefat .column-job_listing_type .temporary{background-color:#d93674}.widefat .column-job_listing_type .freelance{background-color:#39c}.widefat .column-job_listing_type .internship{background-color:#6033cc}.widefat th.column-job_position{width:20%}.widefat td.column-job_position{width:20%;height:34px}.widefat td.column-job_position .job_position{position:relative;padding-right:50px!important}.widefat td.column-job_position a.job_title{font-weight:700}.widefat td.column-job_position img{width:32px;height:32px;position:absolute;right:7px;top:0;-webkit-border-radius:50%;border-radius:50%;box-shadow:0 1px 0 1px rgba(0,0,0,.1);-webkit-box-shadow:0 1px 0 1px rgba(0,0,0,.1);-moz-box-shadow:0 1px 0 1px rgba(0,0,0,.1);border:1px solid #fff}.widefat td.column-job_position .company{margin-top:.2em;display:block;padding-top:2px;color:#bbb}.widefat .column-job_location{width:10%}.widefat .column-job_actions{text-align:right;width:128px}.widefat .column-job_actions strong{display:block;margin-bottom:.2em}.widefat .column-job_actions .actions{padding-top:2px}.widefat .column-job_actions a.button{display:inline-block;margin:0 0 2px 4px;cursor:pointer;padding:0 6px!important;font-size:1em!important;line-height:2em!important;overflow:hidden}.widefat .column-job_actions a.button-icon{width:2em!important;padding:0!important}.widefat .column-job_actions a.button-icon:before{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;float:left;width:2em!important;line-height:2em}.widefat .column-job_actions .icon-view:before{content:'\e805'}.widefat .column-job_actions .icon-edit:before{content:'\e804'}.widefat .column-job_actions .icon-delete:before{content:'\e82b'}.widefat .column-job_actions .icon-approve:before{content:'\e802'}.wp_job_manager_meta_data{zoom:1}.wp_job_manager_meta_data:after,.wp_job_manager_meta_data:before{content:"";display:table}.wp_job_manager_meta_data:after{clear:both}.wp_job_manager_meta_data .form-field{width:50%;line-height:2em;float:left;box-sizing:border-box;padding:0 12px 0 0;margin:0 0 12px;clear:both}.wp_job_manager_meta_data .form-field:nth-child(even){float:right;padding:0 0 0 12px;clear:right}.wp_job_manager_meta_data .form-field:nth-last-child(-n+2){margin-bottom:0;padding-bottom:0;border-bottom:0}.wp_job_manager_meta_data .form-field label{vertical-align:middle;display:block;font-weight:700;margin:0}.wp_job_manager_meta_data .form-field .tips{cursor:help;float:right;font-weight:400;color:#999}.wp_job_manager_meta_data .form-field input{width:100%;margin:1px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:middle}.wp_job_manager_meta_data .form-field input.checkbox,.wp_job_manager_meta_data .form-field input.radio{width:auto;margin:4px 2px;display:inline-block}.wp_job_manager_meta_data .form-field .description{display:block;color:#999}.wp_job_manager_meta_data .form-field.form-field-checkbox .description{display:inline}.wp_job_manager_meta_data .form-field .file_url input{width:75%}.wp_job_manager_meta_data .form-field .button{margin-left:4px}.wp_job_manager_meta_data .form-field .file_no_url{-o-animation:flash .3s linear infinite alternate;-webkit-animation:flash .3s linear infinite alternate;-moz-animation:flash .3s linear infinite alternate;animation:flash .3s linear infinite alternate}@-o-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@-ms-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@-moz-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@-webkit-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@keyframes flash{from{background-color:unset}to{background-color:#dc3232}}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{padding-bottom:5px}#tiptip_holder.tip_bottom{padding-top:5px}#tiptip_holder.tip_right{padding-left:5px}#tiptip_holder.tip_left{padding-right:5px}#tiptip_content{font-size:11px;color:#fff;padding:4px 8px;background:#464646;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;box-shadow:1px 1px 3px rgba(0,0,0,.1);-webkit-box-shadow:1px 1px 3px rgba(0,0,0,.1);-moz-box-shadow:1px 1px 3px rgba(0,0,0,.1);text-align:center}#tiptip_content code{background:#999;padding:1px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#464646}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#464646}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#464646}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#464646}.wp_job_manager_add_ons_wrap .products{overflow:hidden}.wp_job_manager_add_ons_wrap .products li{float:left;margin:0 1em 1em 0!important;padding:0;vertical-align:top;width:350px}.wp_job_manager_add_ons_wrap .products li a{text-decoration:none;color:inherit;border:1px solid #ddd;display:block;min-height:220px;overflow:hidden;background:#f6f6f6;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),inset 0 -1px 0 rgba(0,0,0,.1)}.wp_job_manager_add_ons_wrap .products li img{display:inline-block;width:auto;max-height:60px;max-width:90px;margin:0 5px 0 0;float:left}.wp_job_manager_add_ons_wrap .products li h2{margin:0!important;padding:20px!important;background:#fff;height:20px;font-size:16px}.wp_job_manager_add_ons_wrap .products li p{padding:20px!important;margin:0!important;border-top:1px solid #f1f1f1}.wp_job_manager_add_ons_wrap .products li .price{display:none}.rtl .widefat .column-job_actions a.button-icon:before{float:right}.rtl .wp_job_manager_meta_data p{padding:0 20% 0 0}.rtl .wp_job_manager_meta_data label{left:auto;right:0}table.form-table.settings tr{border-bottom:1px solid rgba(0,0,0,.1)}table.form-table.settings tr.no-separator,table.form-table.settings tr:last-child{border-bottom:0}div.setting-enable-expand{border:1px solid rgba(0,0,0,.1);padding:15px 10px}div.setting-enable-expand .sub-settings-expandable{display:none;padding-left:25px}div.setting-enable-expand .sub-settings-expandable.expanded{display:block}tr.email-setting-row td{padding:5px}@media only screen and (max-width:782px){.wpjm-licences .plugin-info{padding:10px}.wpjm-licences .plugin-licence{padding:10px}.widefat .job_position.column-primary{display:table-cell!important}.widefat .toggle-row:before{top:5px}.widefat .column-job_actions{text-align:left}.widefat .column-job_actions a.button-icon:before{float:left}.rtl .widefat .column-job_actions{text-align:right}.rtl .widefat .column-job_actions a.button-icon:before{float:right}.wp_job_manager_meta_data .form-field{width:100%;padding:0}.wp_job_manager_meta_data .form-field:nth-child(even){float:none;padding:0;margin-bottom:12px;clear:both}.wp_job_manager_meta_data .form-field:nth-last-child(-n+2){float:none;padding:0;margin-bottom:12px;clear:both}}
1
+ .clearfix{zoom:1}.clearfix:after,.clearfix:before{content:"";display:table}.clearfix:after{clear:both}@font-face{font-family:job-manager;src:url(../font/job-manager.eot?4963673);src:url(../font/job-manager.eot?4963673#iefix) format('embedded-opentype'),url(../font/job-manager.woff?4963673) format('woff'),url(../font/job-manager.ttf?4963673) format('truetype'),url(../font/job-manager.svg?4963673#job-manager) format('svg');font-weight:400;font-style:normal}@font-face{font-family:jm-logo;src:url(../font/jm-logo/jm.eot?ycsbky);src:url(../font/jm-logo/jm.eot?#iefixycsbky) format('embedded-opentype'),url(../font/jm-logo/jm.woff?ycsbky) format('woff'),url(../font/jm-logo/jm.ttf?ycsbky) format('truetype'),url(../font/jm-logo/jm.svg?ycsbky#icomoon) format('svg');font-weight:400;font-style:normal}.jm-icon{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em}.job-manager-settings-wrap .job-manager-updated{display:block;margin:1em 0 0}a.wpjm-activate-licence-link,a.wpjm-activate-licence-link:active,a.wpjm-activate-licence-link:hover,a.wpjm-activate-licence-link:link,a.wpjm-activate-licence-link:visited{color:#ff4500}.wpjm-licences{margin-top:10px}.wpjm-licences .licence-row{align-items:center;border:solid 1px #e2e0e2;display:flex;background-color:#fff;flex-wrap:wrap;min-height:82px;margin-bottom:20px;position:relative}.wpjm-licences .plugin-info{font-size:18px;flex-basis:320px;padding:0 20px;margin-right:10px}.wpjm-licences .plugin-info .plugin-author{font-size:12px}.wpjm-licences .plugin-licence{flex:1;flex-basis:40%;padding-bottom:5px}.wpjm-licences .plugin-licence label{white-space:nowrap}.widefat td.column-featured_job,.widefat td.column-filled,.widefat td.column-job_status{width:46px;text-align:left;padding-left:11px}.widefat th.column-featured_job,.widefat th.column-filled,.widefat th.column-job_status{width:1em}.widefat th.column-featured_job span,.widefat th.column-filled span,.widefat th.column-job_status span{display:block;width:1em;height:1em;line-height:1em;padding:1px 0 0 0;overflow:hidden}.widefat th.column-featured_job span:before,.widefat th.column-filled span:before,.widefat th.column-job_status span:before{content:'\e803';font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em}.widefat th.column-filled span:before{content:'\e807'}.widefat th.column-job_status span:before{content:'\e828'}.widefat .column-job_posted strong{display:block;margin-bottom:.2em}.widefat td.column-job_status span{position:relative;font-size:1em;line-height:1.5em;width:1em;height:0;padding:2em 0 0 0;overflow:hidden;display:block}.widefat td.column-job_status span:before{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;position:absolute;top:0;left:0;line-height:1.5em;vertical-align:middle;color:#999;content:'\e829'}.widefat td.column-job_status .status-trash:before{content:'\e82b';color:#a00}.widefat td.column-job_status .status-pending:before{content:'\e82c';color:#ffba00}.widefat td.column-job_status .status-publish:before{content:'\e82f';color:#73a724}.widefat td.column-job_status .status-expired:before{content:'\e82e';color:#a00}.widefat .column-job_listing_type{text-align:left;width:6em;word-wrap:normal!important}.widefat .column-job_listing_type .job-type{color:#fff;padding:4px;font-size:11px;-webkit-border-radius:2px;border-radius:2px;display:block;background-color:#f08d3c;text-align:center}.widefat .column-job_listing_type .full-time{background-color:#90da36}.widefat .column-job_listing_type .part-time{background-color:#f08d3c}.widefat .column-job_listing_type .temporary{background-color:#d93674}.widefat .column-job_listing_type .freelance{background-color:#39c}.widefat .column-job_listing_type .internship{background-color:#6033cc}.widefat th.column-job_position{width:20%}.widefat td.column-job_position{width:20%;height:34px}.widefat td.column-job_position .job_position{position:relative;padding-right:50px!important}.widefat td.column-job_position a.job_title{font-weight:700}.widefat td.column-job_position img{width:32px;height:32px;position:absolute;right:7px;top:0;-webkit-border-radius:50%;border-radius:50%;box-shadow:0 1px 0 1px rgba(0,0,0,.1);-webkit-box-shadow:0 1px 0 1px rgba(0,0,0,.1);-moz-box-shadow:0 1px 0 1px rgba(0,0,0,.1);border:1px solid #fff}.widefat td.column-job_position .company{margin-top:.2em;display:block;padding-top:2px;color:#bbb}.widefat .column-job_location{width:10%}.widefat .column-job_actions{text-align:right;width:128px}.widefat .column-job_actions strong{display:block;margin-bottom:.2em}.widefat .column-job_actions .actions{padding-top:2px}.widefat .column-job_actions a.button{display:inline-block;margin:0 0 2px 4px;cursor:pointer;padding:0 6px!important;font-size:1em!important;line-height:2em!important;overflow:hidden}.widefat .column-job_actions a.button-icon{width:2em!important;padding:0!important}.widefat .column-job_actions a.button-icon:before{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;float:left;width:2em!important;line-height:2em}.widefat .column-job_actions .icon-view:before{content:'\e805'}.widefat .column-job_actions .icon-edit:before{content:'\e804'}.widefat .column-job_actions .icon-delete:before{content:'\e82b'}.widefat .column-job_actions .icon-approve:before{content:'\e802'}.wp_job_manager_meta_data{zoom:1}.wp_job_manager_meta_data:after,.wp_job_manager_meta_data:before{content:"";display:table}.wp_job_manager_meta_data:after{clear:both}.wp_job_manager_meta_data .form-field{width:50%;line-height:2em;float:left;box-sizing:border-box;padding:0 12px 0 0;margin:0 0 12px;clear:both}.wp_job_manager_meta_data .form-field:nth-child(even){float:right;padding:0 0 0 12px;clear:right}.wp_job_manager_meta_data .form-field:nth-last-child(-n+2){margin-bottom:0;padding-bottom:0;border-bottom:0}.wp_job_manager_meta_data .form-field label{vertical-align:middle;display:block;font-weight:700;margin:0}.wp_job_manager_meta_data .form-field .tips{cursor:help;float:right;font-weight:400;color:#999}.wp_job_manager_meta_data .form-field input{width:100%;margin:1px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:middle}.wp_job_manager_meta_data .form-field input.checkbox,.wp_job_manager_meta_data .form-field input.radio{width:auto;margin:4px 2px;display:inline-block}.wp_job_manager_meta_data .form-field .description{display:block;color:#999}.wp_job_manager_meta_data .form-field.form-field-checkbox .description{display:inline}.wp_job_manager_meta_data .form-field .file_url input{width:75%}.wp_job_manager_meta_data .form-field .button{margin-left:4px}.wp_job_manager_meta_data .form-field .file_no_url{-o-animation:flash .3s linear infinite alternate;-webkit-animation:flash .3s linear infinite alternate;-moz-animation:flash .3s linear infinite alternate;animation:flash .3s linear infinite alternate}@-o-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@-ms-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@-moz-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@-webkit-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@keyframes flash{from{background-color:unset}to{background-color:#dc3232}}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{padding-bottom:5px}#tiptip_holder.tip_bottom{padding-top:5px}#tiptip_holder.tip_right{padding-left:5px}#tiptip_holder.tip_left{padding-right:5px}#tiptip_content{font-size:11px;color:#fff;padding:4px 8px;background:#464646;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;box-shadow:1px 1px 3px rgba(0,0,0,.1);-webkit-box-shadow:1px 1px 3px rgba(0,0,0,.1);-moz-box-shadow:1px 1px 3px rgba(0,0,0,.1);text-align:center}#tiptip_content code{background:#999;padding:1px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#464646}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#464646}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#464646}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#464646}.wp_job_manager_add_ons_wrap .products{overflow:hidden}.wp_job_manager_add_ons_wrap .products li{float:left;margin:0 1em 1em 0!important;padding:0;vertical-align:top;width:350px}.wp_job_manager_add_ons_wrap .products li a{text-decoration:none;color:inherit;border:1px solid #ddd;display:block;min-height:220px;overflow:hidden;background:#f6f6f6;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),inset 0 -1px 0 rgba(0,0,0,.1)}.wp_job_manager_add_ons_wrap .products li img{display:inline-block;width:auto;max-height:60px;max-width:90px;margin:0 5px 0 0;float:left}.wp_job_manager_add_ons_wrap .products li h2{margin:0!important;padding:20px!important;background:#fff;height:20px;font-size:16px}.wp_job_manager_add_ons_wrap .products li p{padding:20px!important;margin:0!important;border-top:1px solid #f1f1f1}.wp_job_manager_add_ons_wrap .products li .price{display:none}.rtl .widefat .column-job_actions a.button-icon:before{float:right}.rtl .wp_job_manager_meta_data p{padding:0 20% 0 0}.rtl .wp_job_manager_meta_data label{left:auto;right:0}table.form-table.settings tr{border-bottom:1px solid rgba(0,0,0,.1)}table.form-table.settings tr.no-separator,table.form-table.settings tr:last-child{border-bottom:0}div.setting-enable-expand{border:1px solid rgba(0,0,0,.1);padding:15px 10px}div.setting-enable-expand .sub-settings-expandable{display:none;padding-left:25px}div.setting-enable-expand .sub-settings-expandable.expanded{display:block}tr.email-setting-row td{padding:5px}@media only screen and (max-width:782px){.wpjm-licences .plugin-info{padding:10px}.wpjm-licences .plugin-licence{padding:10px}.widefat .job_position.column-primary{display:table-cell!important}.widefat .toggle-row:before{top:5px}.widefat .column-job_actions{text-align:left}.widefat .column-job_actions a.button-icon:before{float:left}.rtl .widefat .column-job_actions{text-align:right}.rtl .widefat .column-job_actions a.button-icon:before{float:right}.wp_job_manager_meta_data .form-field{width:100%;padding:0}.wp_job_manager_meta_data .form-field:nth-child(even){float:none;padding:0;margin-bottom:12px;clear:both}.wp_job_manager_meta_data .form-field:nth-last-child(-n+2){float:none;padding:0;margin-bottom:12px;clear:both}}
assets/css/frontend.css CHANGED
@@ -1 +1 @@
1
- .clearfix{zoom:1}.clearfix:after,.clearfix:before{content:"";display:table}.clearfix:after{clear:both}@font-face{font-family:job-manager;src:url(../font/job-manager.eot?4963673);src:url(../font/job-manager.eot?4963673#iefix) format('embedded-opentype'),url(../font/job-manager.woff?4963673) format('woff'),url(../font/job-manager.ttf?4963673) format('truetype'),url(../font/job-manager.svg?4963673#job-manager) format('svg');font-weight:400;font-style:normal}@font-face{font-family:jm-logo;src:url(../font/jm-logo/jm.eot?ycsbky);src:url(../font/jm-logo/jm.eot?#iefixycsbky) format('embedded-opentype'),url(../font/jm-logo/jm.woff?ycsbky) format('woff'),url(../font/jm-logo/jm.ttf?ycsbky) format('truetype'),url(../font/jm-logo/jm.svg?ycsbky#icomoon) format('svg');font-weight:400;font-style:normal}.jm-icon{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em}.rp4wp-related-job_listing>ul,ul.job_listings{padding:0;margin:0;border-top:1px solid #eee}.rp4wp-related-job_listing>ul.loading,ul.job_listings.loading{min-height:96px;border-bottom:1px solid #eee;background:url(../images/ajax-loader.gif) no-repeat center 32px}.rp4wp-related-job_listing>ul li.job_listing,.rp4wp-related-job_listing>ul li.no_job_listings_found,ul.job_listings li.job_listing,ul.job_listings li.no_job_listings_found{list-style:none outside;padding:0;margin:0;border-bottom:1px solid #eee}.rp4wp-related-job_listing>ul li.job_listing.job_position_filled a,.rp4wp-related-job_listing>ul li.no_job_listings_found.job_position_filled a,ul.job_listings li.job_listing.job_position_filled a,ul.job_listings li.no_job_listings_found.job_position_filled a{opacity:.25}.rp4wp-related-job_listing>ul li.job_listing.no_job_listings_found,.rp4wp-related-job_listing>ul li.no_job_listings_found.no_job_listings_found,ul.job_listings li.job_listing.no_job_listings_found,ul.job_listings li.no_job_listings_found.no_job_listings_found{padding:1em;border-bottom:1px solid #eee}.rp4wp-related-job_listing>ul li.job_listing a,.rp4wp-related-job_listing>ul li.no_job_listings_found a,ul.job_listings li.job_listing a,ul.job_listings li.no_job_listings_found a{display:block;padding:1em 1em 1em 2em;border:0;overflow:hidden;zoom:1;position:relative;line-height:1.5em;text-decoration:none}.rp4wp-related-job_listing>ul li.job_listing a:focus,.rp4wp-related-job_listing>ul li.job_listing a:hover,.rp4wp-related-job_listing>ul li.no_job_listings_found a:focus,.rp4wp-related-job_listing>ul li.no_job_listings_found a:hover,ul.job_listings li.job_listing a:focus,ul.job_listings li.job_listing a:hover,ul.job_listings li.no_job_listings_found a:focus,ul.job_listings li.no_job_listings_found a:hover{background-color:#fcfcfc}.rp4wp-related-job_listing>ul li.job_listing a img.company_logo,.rp4wp-related-job_listing>ul li.no_job_listings_found a img.company_logo,ul.job_listings li.job_listing a img.company_logo,ul.job_listings li.no_job_listings_found a img.company_logo{width:42px;height:42px;position:absolute;left:1em;float:left;margin-right:1em;vertical-align:middle;box-shadow:none}.rp4wp-related-job_listing>ul li.job_listing a div.location,.rp4wp-related-job_listing>ul li.job_listing a div.position,.rp4wp-related-job_listing>ul li.job_listing a ul.meta,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.location,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position,.rp4wp-related-job_listing>ul li.no_job_listings_found a ul.meta,ul.job_listings li.job_listing a div.location,ul.job_listings li.job_listing a div.position,ul.job_listings li.job_listing a ul.meta,ul.job_listings li.no_job_listings_found a div.location,ul.job_listings li.no_job_listings_found a div.position,ul.job_listings li.no_job_listings_found a ul.meta{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.rp4wp-related-job_listing>ul li.job_listing a div.position,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position,ul.job_listings li.job_listing a div.position,ul.job_listings li.no_job_listings_found a div.position{float:left;width:55%;padding:0 0 0 42px;line-height:1.5em}.rp4wp-related-job_listing>ul li.job_listing a div.position h3,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position h3,ul.job_listings li.job_listing a div.position h3,ul.job_listings li.no_job_listings_found a div.position h3{margin:0;padding:0;line-height:inherit;font-size:inherit}.rp4wp-related-job_listing>ul li.job_listing a div.position .company,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position .company,ul.job_listings li.job_listing a div.position .company,ul.job_listings li.no_job_listings_found a div.position .company{color:#999}.rp4wp-related-job_listing>ul li.job_listing a div.position .company .tagline,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position .company .tagline,ul.job_listings li.job_listing a div.position .company .tagline,ul.job_listings li.no_job_listings_found a div.position .company .tagline{margin-left:.5em}.rp4wp-related-job_listing>ul li.job_listing a div.location,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.location,ul.job_listings li.job_listing a div.location,ul.job_listings li.no_job_listings_found a div.location{float:left;text-align:left;width:25%;padding:0 0 0 1em;color:#999;line-height:1.5em}.rp4wp-related-job_listing>ul li.job_listing a .meta,.rp4wp-related-job_listing>ul li.no_job_listings_found a .meta,ul.job_listings li.job_listing a .meta,ul.job_listings li.no_job_listings_found a .meta{float:right;text-align:right;width:20%;padding:0 0 0 1em;margin:0;line-height:1.5em;color:#999;list-style:none outside}.rp4wp-related-job_listing>ul li.job_listing a .meta li,.rp4wp-related-job_listing>ul li.no_job_listings_found a .meta li,ul.job_listings li.job_listing a .meta li,ul.job_listings li.no_job_listings_found a .meta li{list-style:none outside;display:block;margin:0}.rp4wp-related-job_listing>ul li.job_listing a .meta .job-type,.rp4wp-related-job_listing>ul li.no_job_listings_found a .meta .job-type,ul.job_listings li.job_listing a .meta .job-type,ul.job_listings li.no_job_listings_found a .meta .job-type{font-weight:700}.rp4wp-related-job_listing>ul li.job_listing.job_position_featured a,.rp4wp-related-job_listing>ul li.no_job_listings_found.job_position_featured a,ul.job_listings li.job_listing.job_position_featured a,ul.job_listings li.no_job_listings_found.job_position_featured a{background:#fefee5}.rp4wp-related-job_listing>ul li.job_listing.job_position_featured a:focus,.rp4wp-related-job_listing>ul li.job_listing.job_position_featured a:hover,.rp4wp-related-job_listing>ul li.no_job_listings_found.job_position_featured a:focus,.rp4wp-related-job_listing>ul li.no_job_listings_found.job_position_featured a:hover,ul.job_listings li.job_listing.job_position_featured a:focus,ul.job_listings li.job_listing.job_position_featured a:hover,ul.job_listings li.no_job_listings_found.job_position_featured a:focus,ul.job_listings li.no_job_listings_found.job_position_featured a:hover{background-color:#fefed8}.widget ul.job_listings li.job_listing a{padding:1em 0}.widget ul.job_listings li.job_listing .image{float:left}.widget ul.job_listings li.job_listing .image img{left:0;position:relative}.widget ul.job_listings li.job_listing .content{overflow:hidden}.widget ul.job_listings li.job_listing .position{float:none;width:auto;padding:0}.widget ul.job_listings li.job_listing ul.meta{float:none;width:auto;padding:0;margin:0;text-align:left}.widget ul.job_listings li.job_listing ul.meta li{float:none;display:inline;padding:0;margin:0 .5em 0 0;font-weight:400}.widget ul.job_listings li.job_listing ul.meta li:after{padding:0 0 0 .5em;content:"\2023"}.widget ul.job_listings li.job_listing ul.meta li:last-child:after{content:''}.job-manager .job-type,.job-types .job-type,.job_listing .job-type{color:#f08d3c}.job-manager .full-time,.job-types .full-time,.job_listing .full-time{color:#90da36}.job-manager .part-time,.job-types .part-time,.job_listing .part-time{color:#f08d3c}.job-manager .temporary,.job-types .temporary,.job_listing .temporary{color:#d93674}.job-manager .freelance,.job-types .freelance,.job_listing .freelance{color:#39c}.job-manager .internship,.job-types .internship,.job_listing .internship{color:#6033cc}@media only screen and (max-width:767px){ul.job_listings li.job_listing a,ul.job_listings li.no_job_listings_found a{padding:1em}ul.job_listings li.job_listing a img.company_logo,ul.job_listings li.no_job_listings_found a img.company_logo{visibility:hidden}ul.job_listings li.job_listing a div.position,ul.job_listings li.no_job_listings_found a div.position{float:left;width:60%;padding:0}ul.job_listings li.job_listing a div.location,ul.job_listings li.no_job_listings_found a div.location{float:right;width:40%;line-height:2em;font-size:.75em;padding:0 0 0 1em;text-align:right}ul.job_listings li.job_listing a .meta,ul.job_listings li.no_job_listings_found a .meta{float:right;width:40%;line-height:2em;font-size:.75em}ul.job_listings li.job_listing a .meta li,ul.job_listings li.no_job_listings_found a .meta li{font-size:1em}}.twenty-eleven ul.job_listings li.job_listing,.twenty-eleven ul.job_listings li.no_job_listings_found{padding:0!important}.display-icon{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0}.job-manager-error,.job-manager-info,.job-manager-message{padding:1em 2em 1em 3.5em!important;margin:0 0 2em!important;position:relative;background-color:#fff;color:#666;border-top:3px solid #999;list-style:none outside!important;width:auto;zoom:1;box-shadow:0 1px 1px rgba(0,0,0,.2)}.job-manager-error:after,.job-manager-error:before,.job-manager-info:after,.job-manager-info:before,.job-manager-message:after,.job-manager-message:before{content:"";display:table}.job-manager-error:after,.job-manager-info:after,.job-manager-message:after{clear:both}.job-manager-error:before,.job-manager-info:before,.job-manager-message:before{content:"";font-family:sans-serif;display:inline-block;position:absolute;top:1em;left:1.5em}.job-manager-error li,.job-manager-info li,.job-manager-message li{list-style:none outside!important;padding-left:0!important;margin-left:0!important}.job-manager-error.job-manager-message,.job-manager-info.job-manager-message,.job-manager-message.job-manager-message{border-top-color:#8fae1b}.job-manager-error.job-manager-message:before,.job-manager-info.job-manager-message:before,.job-manager-message.job-manager-message:before{color:#8fae1b;content:"\2713"}.job-manager-error.job-manager-info,.job-manager-info.job-manager-info,.job-manager-message.job-manager-info{border-top-color:#1e85be}.job-manager-error.job-manager-info:before,.job-manager-info.job-manager-info:before,.job-manager-message.job-manager-info:before{color:#1e85be;content:"i";font-family:Times,Georgia,serif;font-style:italic}.job-manager-error.job-manager-error,.job-manager-info.job-manager-error,.job-manager-message.job-manager-error{border-top-color:#b81c23}.job-manager-error.job-manager-error:before,.job-manager-info.job-manager-error:before,.job-manager-message.job-manager-error:before{color:#b81c23;content:"\00d7";font-weight:700}.job-manager-form fieldset{margin:0 0 1em 0;padding:0 0 1em 0;line-height:2em;border:0;border-bottom:1px solid #eee;zoom:1}.job-manager-form fieldset:after,.job-manager-form fieldset:before{content:"";display:table}.job-manager-form fieldset:after{clear:both}.job-manager-form fieldset label{display:block;margin:0;width:29%;float:left;vertical-align:middle}.job-manager-form fieldset label small{opacity:.75;font-size:.83em}.job-manager-form fieldset div.field{width:70%;float:right;vertical-align:middle}.job-manager-form fieldset .wp-editor-container{border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.job-manager-form fieldset .account-sign-in .button{margin-right:.5em}.job-manager-form fieldset .account-sign-in .button:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e808'}.job-manager-form fieldset abbr.required{color:red;font-weight:700;border:0}.job-manager-form fieldset input.input-text,.job-manager-form fieldset select,.job-manager-form fieldset textarea{margin:0;vertical-align:middle;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.job-manager-form fieldset small.description{opacity:.75;font-size:.83em;margin:1.2em 0 0 0;display:block;line-height:1.2em}.job-manager-form fieldset .job-manager-uploaded-files{display:table}.job-manager-form fieldset .job-manager-uploaded-files .job-manager-uploaded-file{line-height:2em;font-style:italic;margin-bottom:1em;display:block}.job-manager-form fieldset .job-manager-uploaded-files .job-manager-uploaded-file .job-manager-uploaded-file-preview img{height:64px;margin:0;vertical-align:top}.job-manager-form fieldset .job-manager-uploaded-files .job-manager-uploaded-file .job-manager-uploaded-file-preview a{line-height:64px;display:inline-block;padding:0 0 0 1em}.job-manager-form fieldset .job-manager-uploaded-files .job-manager-uploaded-file .job-manager-uploaded-file-name{display:block}.job-manager-form .submit-job{padding:1em 0}.job-manager-form .job-manager-term-checklist{list-style:none outside;max-height:200px;overflow:auto;margin:0}.job-manager-form .job-manager-term-checklist li{list-style:none outside;margin:0;display:block;float:none}.job-manager-form .job-manager-term-checklist li label{width:auto;float:none}.job-manager-form .job-manager-term-checklist li li{margin:0 0 0 2em}.job-manager-form input[type=submit].disabled,.job-manager-form input[type=submit]:disabled{opacity:.5;cursor:not-allowed}.job-manager-form .spinner{background:url(../../../../../wp-includes/images/spinner.gif) no-repeat;background-size:20px 20px;display:inline-block;visibility:hidden;width:20px;height:20px;margin:0;vertical-align:middle}.job-manager-form .spinner.is-active{visibility:visible}div.job_listings{margin-bottom:1em}div.job_listings ul.job_listings{margin:0}.single_job_listing .company{position:relative;border:1px solid #eee;padding:1em;margin:0 0 2em;display:block;clear:both;min-height:3em;box-shadow:0 1px 1px rgba(0,0,0,.1)}.single_job_listing .company img{width:3em;height:3em;position:absolute;left:1em;float:left;vertical-align:middle;box-shadow:none}.single_job_listing .company .name{margin:0 0 0 3em;padding:0 0 0 1em;line-height:1.5em}.single_job_listing .company .name a{float:right;margin-left:1em}.single_job_listing .company .tagline{display:block;margin:0 0 0 42px;padding:0 0 0 1em;line-height:1.5em;font-style:italic;color:#999}.single_job_listing .company .website:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e809'}.single_job_listing .company .company_twitter:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e80a'}.single_job_listing .company .company_video{border-top:1px solid #eee;padding:1em 0 0;margin:1em 0 0 0;position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}.single_job_listing .company .company_video embed,.single_job_listing .company .company_video iframe,.single_job_listing .company .company_video object{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;display:block}.single_job_listing .meta{list-style:none outside;padding:0;margin:0 0 1.5em;overflow:hidden;zoom:1;clear:both}.single_job_listing .meta li{margin:0 1em 0 0;padding:.5em;float:left;line-height:1em;color:#999}.single_job_listing .meta .job-type{color:#fff;background-color:#f08d3c}.single_job_listing .meta .full-time{background-color:#90da36}.single_job_listing .meta .part-time{background-color:#f08d3c}.single_job_listing .meta .temporary{background-color:#d93674}.single_job_listing .meta .freelance{background-color:#39c}.single_job_listing .meta .internship{background-color:#6033cc}.single_job_listing .meta .listing-expired,.single_job_listing .meta .position-filled{color:#b81c23}.single_job_listing .meta .location:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e81d'}.single_job_listing .meta .date-posted:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e80f'}.single_job_listing .meta .listing-expired:before,.single_job_listing .meta .position-filled:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e80e'}.single_job_listing .job_description{margin:0 0 1.5em}.job-manager-application-wrapper{clear:both;border:1px solid #eee;padding:.75em 1em 0;margin:1em 0;line-height:1.5em;display:block;position:relative;box-shadow:0 1px 1px rgba(0,0,0,.1)}.job-manager-application-wrapper .application,.single_job_listing .application{padding:0;margin:0 0 1em;overflow:hidden}.job-manager-application-wrapper .application .application_button,.job-manager-application-wrapper .application .application_details,.single_job_listing .application .application_button,.single_job_listing .application .application_details{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.job-manager-application-wrapper .application .application_button,.single_job_listing .application .application_button{text-align:center;font-size:1.1em;line-height:1em;display:inline-block;margin:0 .5em 0 0;padding:.90909091em 2em;outline:0}.job-manager-application-wrapper .application .application_details,.single_job_listing .application .application_details{clear:both;border:1px solid #eee;padding:.75em 1em 0;margin:1em 0;line-height:1.5em;display:block;position:relative;box-shadow:0 1px 1px rgba(0,0,0,.1)}.job-manager-application-wrapper .application .application_details p,.single_job_listing .application .application_details p{margin:0 0 .75em}.job-manager-application-wrapper .application .application_details:before,.single_job_listing .application .application_details:before{content:"";position:absolute;margin:-10px 0 0 0;top:0;left:5em;width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:10px solid #eee}.job-manager-application-wrapper .application .application_details:after,.single_job_listing .application .application_details:after{content:"";position:absolute;margin:-9px 0 0 1px;left:5em;top:0;width:0;height:0;border-left:9px solid transparent;border-right:9px solid transparent;border-bottom:9px solid #fff}.job_filters{background:#eee;zoom:1}.job_filters:after,.job_filters:before{content:"";display:table}.job_filters:after{clear:both}.job_filters .search_jobs{padding:1em;zoom:1}.job_filters .search_jobs:after,.job_filters .search_jobs:before{content:"";display:table}.job_filters .search_jobs:after{clear:both}.job_filters .search_jobs div{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.job_filters .search_jobs div label{display:none}.job_filters .search_jobs div.filter_first,.job_filters .search_jobs div.search_keywords{float:left;padding-right:.5em;width:50%}.job_filters .search_jobs div.filter_last,.job_filters .search_jobs div.search_location{float:right;padding-left:.5em;width:50%}.job_filters .search_jobs div.filter_wide,.job_filters .search_jobs div.search_categories{padding-top:.5em;clear:both;width:100%}.job_filters .search_jobs div .showing_jobs a{padding:.25em}.job_filters .search_jobs div .showing_jobs a.active{background:#ddd;text-decoration:none}.job_filters .search_jobs input,.job_filters .search_jobs select{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%}.job_filters .job_types{list-style:none outside;margin:0;padding:0;font-size:.83em;background:#f9f9f9;border-top:1px solid #e5e5e5;zoom:1}.job_filters .job_types:after,.job_filters .job_types:before{content:"";display:table}.job_filters .job_types:after{clear:both}.job_filters .job_types li{margin:0;padding:.5em 1em;float:left;border-right:1px solid #eee}.job_filters .job_types li:last-child{border-right:0}.job_filters .showing_jobs{padding:.5em 1em;display:none;font-size:.83em;background:#f9f9f9;border-top:1px solid #e5e5e5}.job_filters .showing_jobs a{float:right;padding-left:10px;border:0}div.job_listings .job-manager-pagination{text-align:center;display:block;padding:1em 0 1em 0;border-bottom:1px solid #eee;line-height:1}div.job_listings .load_previous{border-top:1px solid #eee}div.job_listings .load_more_jobs+ul.job_listings{border-top:0}div.job_listings .load_more_jobs{text-align:center;display:block;padding:1em 1em 1em 2em;border-bottom:1px solid #eee;font-weight:700}div.job_listings .load_more_jobs.loading{background:url(../images/ajax-loader.gif) no-repeat center}div.job_listings .load_more_jobs.loading strong{visibility:hidden}div.job_listings .load_more_jobs:focus,div.job_listings .load_more_jobs:hover{background-color:#fcfcfc;border-bottom:1px solid #eee}.job_listing_preview{padding:0 1em 1em;border:5px solid #eee}.single-job_listing .entry-header .attachment-post-thumbnail,.single-job_listing .job_listing.has-post-thumbnail .post-thumbnail{display:none}.entry-content .job_listing_preview_title,.job_listing_preview_title{padding:.5em 1em;vertical-align:middle;position:relative;background:#eee}.entry-content .job_listing_preview_title h2,.job_listing_preview_title h2{margin:0;clear:none}.entry-content .job_listing_preview_title .button,.job_listing_preview_title .button{float:right;margin-left:.25em}.job_summary_shortcode{border:1px solid #ccc;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;text-align:center;position:relative;box-shadow:0 2px 4px rgba(0,0,0,.1),inset 0 1px 0 rgba(255,255,255,.4);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.job_summary_shortcode.aligncenter{display:block;margin:2em auto 2em}.job_summary_shortcode.alignleft{float:left;margin:0 2em 2em 0}.job_summary_shortcode.alignright{float:right;margin:0 0 2em 2em}.job_summary_shortcode a{text-decoration:none;color:inherit}.job_summary_shortcode img{margin:0;padding:0;display:block;width:100%;-moz-border-radius:0;-webkit-border-radius:0;-moz-border-top-left-radius:3px;-moz-border-top-right-radius:3px;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-radius:0;border-top-left-radius:3px;border-top-right-radius:3px;box-shadow:inset 0 1px 0 rgba(255,255,255,.4)}.job_summary_shortcode .job_summary_content{padding:0 1em}.job_summary_shortcode .meta{font-style:italic;color:#777}.job_summary_shortcode .job-type{-moz-border-radius:1em;-webkit-border-radius:1em;border-radius:1em;color:#fff;text-shadow:0 1px 0 rgba(255,255,255,.5);box-shadow:0 2px 4px rgba(0,0,0,.1),inset 0 1px 0 rgba(255,255,255,.4);position:absolute;top:0;right:0;padding:.5em;height:1em;width:auto;min-width:1em;font-size:1em;text-align:center;vertical-align:middle;line-height:1em;margin:-.5em -.5em 0 0}.job_summary_shortcode .job-type.full-time{background-color:#90da36}.job_summary_shortcode .job-type.part-time{background-color:#f08d3c}.job_summary_shortcode .job-type.temporary{background-color:#d93674}.job_summary_shortcode .job-type.freelance{background-color:#39c}.job_summary_shortcode .job-type.internship{background-color:#6033cc}#job-manager-job-dashboard .account-sign-in .button{margin-right:.5em}#job-manager-job-dashboard .account-sign-in .button:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e808'}#job-manager-job-dashboard table ul.job-dashboard-actions{margin:0;padding:0;visibility:hidden;font-size:.92em}#job-manager-job-dashboard table ul.job-dashboard-actions li{float:none;display:inline;padding:0;margin:0 .5em 0 0;font-weight:400;list-style:none outside}#job-manager-job-dashboard table ul.job-dashboard-actions li:after{padding:0 0 0 .5em;content:"\2023"}#job-manager-job-dashboard table ul.job-dashboard-actions li:last-child:after{content:''}#job-manager-job-dashboard table ul.job-dashboard-actions li .job-dashboard-action-delete{color:red}#job-manager-job-dashboard table tr:focus ul.job-dashboard-actions,#job-manager-job-dashboard table tr:hover ul.job-dashboard-actions{visibility:visible}#job-manager-job-dashboard table td,#job-manager-job-dashboard table th{padding:.5em 1em .5em 0}#job-manager-job-dashboard table .job_title small{color:#999}#job-manager-job-dashboard table .featured-job-icon:before{content:'\e803';font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em}#job-manager-job-dashboard table .applications,#job-manager-job-dashboard table .expires,#job-manager-job-dashboard table .filled{text-align:center}#content nav.job-manager-pagination,nav.job-manager-pagination{text-align:center}#content nav.job-manager-pagination ul,nav.job-manager-pagination ul{display:inline-block;white-space:nowrap;padding:0;clear:both;border-left:1px solid #eee;margin:1px}#content nav.job-manager-pagination ul li,nav.job-manager-pagination ul li{border-right:1px solid #eee;border-top:1px solid #eee;border-bottom:1px solid #eee;padding:0;margin:0;float:left;display:inline;overflow:hidden}#content nav.job-manager-pagination ul li a,#content nav.job-manager-pagination ul li span,nav.job-manager-pagination ul li a,nav.job-manager-pagination ul li span{margin:0;text-decoration:none;padding:0;line-height:1em;font-size:1em;font-weight:400;padding:.5em;min-width:1em;display:block;border:0}#content nav.job-manager-pagination ul li a:focus,#content nav.job-manager-pagination ul li a:hover,#content nav.job-manager-pagination ul li span.current,nav.job-manager-pagination ul li a:focus,nav.job-manager-pagination ul li a:hover,nav.job-manager-pagination ul li span.current{background:#eee;color:#888}.chosen-container{width:100%!important}.twenty-ten .chosen-choices,.twenty-ten .job_types{margin:0!important}.rtl .job-manager-form label{float:right}.rtl .job-manager-form div.field{float:left}.rtl .entry-content .job_listing_preview_title .button,.rtl .job_listing_preview_title .button{float:left}.rtl .single_job_listing .meta li{float:right;margin:0 0 0 1em}
1
+ .clearfix{zoom:1}.clearfix:after,.clearfix:before{content:"";display:table}.clearfix:after{clear:both}@font-face{font-family:job-manager;src:url(../font/job-manager.eot?4963673);src:url(../font/job-manager.eot?4963673#iefix) format('embedded-opentype'),url(../font/job-manager.woff?4963673) format('woff'),url(../font/job-manager.ttf?4963673) format('truetype'),url(../font/job-manager.svg?4963673#job-manager) format('svg');font-weight:400;font-style:normal}@font-face{font-family:jm-logo;src:url(../font/jm-logo/jm.eot?ycsbky);src:url(../font/jm-logo/jm.eot?#iefixycsbky) format('embedded-opentype'),url(../font/jm-logo/jm.woff?ycsbky) format('woff'),url(../font/jm-logo/jm.ttf?ycsbky) format('truetype'),url(../font/jm-logo/jm.svg?ycsbky#icomoon) format('svg');font-weight:400;font-style:normal}.jm-icon{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em}.rp4wp-related-job_listing>ul,ul.job_listings{padding:0;margin:0;border-top:1px solid #eee}.rp4wp-related-job_listing>ul.loading,ul.job_listings.loading{min-height:96px;border-bottom:1px solid #eee;background:url(../images/ajax-loader.gif) no-repeat center 32px}.rp4wp-related-job_listing>ul li.job_listing,.rp4wp-related-job_listing>ul li.no_job_listings_found,ul.job_listings li.job_listing,ul.job_listings li.no_job_listings_found{list-style:none outside;padding:0;margin:0;border-bottom:1px solid #eee}.rp4wp-related-job_listing>ul li.job_listing.job_position_filled a,.rp4wp-related-job_listing>ul li.no_job_listings_found.job_position_filled a,ul.job_listings li.job_listing.job_position_filled a,ul.job_listings li.no_job_listings_found.job_position_filled a{opacity:.25}.rp4wp-related-job_listing>ul li.job_listing.no_job_listings_found,.rp4wp-related-job_listing>ul li.no_job_listings_found.no_job_listings_found,ul.job_listings li.job_listing.no_job_listings_found,ul.job_listings li.no_job_listings_found.no_job_listings_found{padding:1em;border-bottom:1px solid #eee}.rp4wp-related-job_listing>ul li.job_listing a,.rp4wp-related-job_listing>ul li.no_job_listings_found a,ul.job_listings li.job_listing a,ul.job_listings li.no_job_listings_found a{display:block;padding:1em 1em 1em 2em;border:0;overflow:hidden;zoom:1;position:relative;line-height:1.5em;text-decoration:none}.rp4wp-related-job_listing>ul li.job_listing a:focus,.rp4wp-related-job_listing>ul li.job_listing a:hover,.rp4wp-related-job_listing>ul li.no_job_listings_found a:focus,.rp4wp-related-job_listing>ul li.no_job_listings_found a:hover,ul.job_listings li.job_listing a:focus,ul.job_listings li.job_listing a:hover,ul.job_listings li.no_job_listings_found a:focus,ul.job_listings li.no_job_listings_found a:hover{background-color:#fcfcfc}.rp4wp-related-job_listing>ul li.job_listing a img.company_logo,.rp4wp-related-job_listing>ul li.no_job_listings_found a img.company_logo,ul.job_listings li.job_listing a img.company_logo,ul.job_listings li.no_job_listings_found a img.company_logo{width:42px;height:42px;position:absolute;left:1em;float:left;margin-right:1em;vertical-align:middle;box-shadow:none}.rp4wp-related-job_listing>ul li.job_listing a div.location,.rp4wp-related-job_listing>ul li.job_listing a div.position,.rp4wp-related-job_listing>ul li.job_listing a ul.meta,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.location,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position,.rp4wp-related-job_listing>ul li.no_job_listings_found a ul.meta,ul.job_listings li.job_listing a div.location,ul.job_listings li.job_listing a div.position,ul.job_listings li.job_listing a ul.meta,ul.job_listings li.no_job_listings_found a div.location,ul.job_listings li.no_job_listings_found a div.position,ul.job_listings li.no_job_listings_found a ul.meta{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.rp4wp-related-job_listing>ul li.job_listing a div.position,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position,ul.job_listings li.job_listing a div.position,ul.job_listings li.no_job_listings_found a div.position{float:left;width:55%;padding:0 0 0 42px;line-height:1.5em}.rp4wp-related-job_listing>ul li.job_listing a div.position h3,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position h3,ul.job_listings li.job_listing a div.position h3,ul.job_listings li.no_job_listings_found a div.position h3{margin:0;padding:0;line-height:inherit;font-size:inherit}.rp4wp-related-job_listing>ul li.job_listing a div.position .company,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position .company,ul.job_listings li.job_listing a div.position .company,ul.job_listings li.no_job_listings_found a div.position .company{color:#999}.rp4wp-related-job_listing>ul li.job_listing a div.position .company .tagline,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position .company .tagline,ul.job_listings li.job_listing a div.position .company .tagline,ul.job_listings li.no_job_listings_found a div.position .company .tagline{margin-left:.5em}.rp4wp-related-job_listing>ul li.job_listing a div.location,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.location,ul.job_listings li.job_listing a div.location,ul.job_listings li.no_job_listings_found a div.location{float:left;text-align:left;width:25%;padding:0 0 0 1em;color:#999;line-height:1.5em}.rp4wp-related-job_listing>ul li.job_listing a .meta,.rp4wp-related-job_listing>ul li.no_job_listings_found a .meta,ul.job_listings li.job_listing a .meta,ul.job_listings li.no_job_listings_found a .meta{float:right;text-align:right;width:20%;padding:0 0 0 1em;margin:0;line-height:1.5em;color:#999;list-style:none outside}.rp4wp-related-job_listing>ul li.job_listing a .meta li,.rp4wp-related-job_listing>ul li.no_job_listings_found a .meta li,ul.job_listings li.job_listing a .meta li,ul.job_listings li.no_job_listings_found a .meta li{list-style:none outside;display:block;margin:0}.rp4wp-related-job_listing>ul li.job_listing a .meta .job-type,.rp4wp-related-job_listing>ul li.no_job_listings_found a .meta .job-type,ul.job_listings li.job_listing a .meta .job-type,ul.job_listings li.no_job_listings_found a .meta .job-type{font-weight:700}.rp4wp-related-job_listing>ul li.job_listing.job_position_featured a,.rp4wp-related-job_listing>ul li.no_job_listings_found.job_position_featured a,ul.job_listings li.job_listing.job_position_featured a,ul.job_listings li.no_job_listings_found.job_position_featured a{background:#fefee5}.rp4wp-related-job_listing>ul li.job_listing.job_position_featured a:focus,.rp4wp-related-job_listing>ul li.job_listing.job_position_featured a:hover,.rp4wp-related-job_listing>ul li.no_job_listings_found.job_position_featured a:focus,.rp4wp-related-job_listing>ul li.no_job_listings_found.job_position_featured a:hover,ul.job_listings li.job_listing.job_position_featured a:focus,ul.job_listings li.job_listing.job_position_featured a:hover,ul.job_listings li.no_job_listings_found.job_position_featured a:focus,ul.job_listings li.no_job_listings_found.job_position_featured a:hover{background-color:#fefed8}.widget ul.job_listings li.job_listing a{padding:1em 0}.widget ul.job_listings li.job_listing .image{float:left}.widget ul.job_listings li.job_listing .image img{left:0;position:relative}.widget ul.job_listings li.job_listing .content{overflow:hidden}.widget ul.job_listings li.job_listing .position{float:none;width:auto;padding:0}.widget ul.job_listings li.job_listing ul.meta{float:none;width:auto;padding:0;margin:0;text-align:left}.widget ul.job_listings li.job_listing ul.meta li{float:none;display:inline;padding:0;margin:0 .5em 0 0;font-weight:400}.widget ul.job_listings li.job_listing ul.meta li:after{padding:0 0 0 .5em;content:"\2023"}.widget ul.job_listings li.job_listing ul.meta li:last-child:after{content:''}.job-manager .job-type,.job-types .job-type,.job_listing .job-type{color:#f08d3c}.job-manager .full-time,.job-types .full-time,.job_listing .full-time{color:#90da36}.job-manager .part-time,.job-types .part-time,.job_listing .part-time{color:#f08d3c}.job-manager .temporary,.job-types .temporary,.job_listing .temporary{color:#d93674}.job-manager .freelance,.job-types .freelance,.job_listing .freelance{color:#39c}.job-manager .internship,.job-types .internship,.job_listing .internship{color:#6033cc}@media only screen and (max-width:767px){ul.job_listings li.job_listing a,ul.job_listings li.no_job_listings_found a{padding:1em}ul.job_listings li.job_listing a img.company_logo,ul.job_listings li.no_job_listings_found a img.company_logo{visibility:hidden}ul.job_listings li.job_listing a div.position,ul.job_listings li.no_job_listings_found a div.position{float:left;width:60%;padding:0}ul.job_listings li.job_listing a div.location,ul.job_listings li.no_job_listings_found a div.location{float:right;width:40%;line-height:2em;font-size:.75em;padding:0 0 0 1em;text-align:right}ul.job_listings li.job_listing a .meta,ul.job_listings li.no_job_listings_found a .meta{float:right;width:40%;line-height:2em;font-size:.75em}ul.job_listings li.job_listing a .meta li,ul.job_listings li.no_job_listings_found a .meta li{font-size:1em}}.twenty-eleven ul.job_listings li.job_listing,.twenty-eleven ul.job_listings li.no_job_listings_found{padding:0!important}.display-icon{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0}.job-manager-error,.job-manager-info,.job-manager-message{padding:1em 2em 1em 3.5em!important;margin:0 0 2em!important;position:relative;background-color:#fff;color:#666;border-top:3px solid #999;list-style:none outside!important;width:auto;zoom:1;box-shadow:0 1px 1px rgba(0,0,0,.2)}.job-manager-error:after,.job-manager-error:before,.job-manager-info:after,.job-manager-info:before,.job-manager-message:after,.job-manager-message:before{content:"";display:table}.job-manager-error:after,.job-manager-info:after,.job-manager-message:after{clear:both}.job-manager-error:before,.job-manager-info:before,.job-manager-message:before{content:"";font-family:sans-serif;display:inline-block;position:absolute;top:1em;left:1.5em}.job-manager-error li,.job-manager-info li,.job-manager-message li{list-style:none outside!important;padding-left:0!important;margin-left:0!important}.job-manager-error.job-manager-message,.job-manager-info.job-manager-message,.job-manager-message.job-manager-message{border-top-color:#8fae1b}.job-manager-error.job-manager-message:before,.job-manager-info.job-manager-message:before,.job-manager-message.job-manager-message:before{color:#8fae1b;content:"\2713"}.job-manager-error.job-manager-info,.job-manager-info.job-manager-info,.job-manager-message.job-manager-info{border-top-color:#1e85be}.job-manager-error.job-manager-info:before,.job-manager-info.job-manager-info:before,.job-manager-message.job-manager-info:before{color:#1e85be;content:"i";font-family:Times,Georgia,serif;font-style:italic}.job-manager-error.job-manager-error,.job-manager-info.job-manager-error,.job-manager-message.job-manager-error{border-top-color:#b81c23}.job-manager-error.job-manager-error:before,.job-manager-info.job-manager-error:before,.job-manager-message.job-manager-error:before{color:#b81c23;content:"\00d7";font-weight:700}.job-manager-form fieldset{margin:0 0 1em 0;padding:0 0 1em 0;line-height:2em;border:0;border-bottom:1px solid #eee;zoom:1}.job-manager-form fieldset:after,.job-manager-form fieldset:before{content:"";display:table}.job-manager-form fieldset:after{clear:both}.job-manager-form fieldset label{display:block;margin:0;width:29%;float:left;vertical-align:middle}.job-manager-form fieldset label small{opacity:.75;font-size:.83em}.job-manager-form fieldset div.field{width:70%;float:right;vertical-align:middle}.job-manager-form fieldset .wp-editor-container{border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.job-manager-form fieldset .account-sign-in .button{margin-right:.5em}.job-manager-form fieldset .account-sign-in .button:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e808'}.job-manager-form fieldset abbr.required{color:red;font-weight:700;border:0}.job-manager-form fieldset input.input-text,.job-manager-form fieldset select,.job-manager-form fieldset textarea{margin:0;vertical-align:middle;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.job-manager-form fieldset small.description{opacity:.75;font-size:.83em;margin:1.2em 0 0 0;display:block;line-height:1.2em}.job-manager-form fieldset .job-manager-uploaded-files{display:table}.job-manager-form fieldset .job-manager-uploaded-files .job-manager-uploaded-file{line-height:2em;font-style:italic;margin-bottom:1em;display:block}.job-manager-form fieldset .job-manager-uploaded-files .job-manager-uploaded-file .job-manager-uploaded-file-preview img{height:64px;margin:0;vertical-align:top}.job-manager-form fieldset .job-manager-uploaded-files .job-manager-uploaded-file .job-manager-uploaded-file-preview a{line-height:64px;display:inline-block;padding:0 0 0 1em}.job-manager-form fieldset .job-manager-uploaded-files .job-manager-uploaded-file .job-manager-uploaded-file-name{display:block}.job-manager-form .submit-job{padding:1em 0}.job-manager-form .job-manager-term-checklist{list-style:none outside;max-height:200px;overflow:auto;margin:0}.job-manager-form .job-manager-term-checklist li{list-style:none outside;margin:0;display:block;float:none}.job-manager-form .job-manager-term-checklist li label{width:auto;float:none}.job-manager-form .job-manager-term-checklist li li{margin:0 0 0 2em}.job-manager-form input[type=submit].disabled,.job-manager-form input[type=submit]:disabled{opacity:.5;cursor:not-allowed}.job-manager-form .spinner{background-repeat:no-repeat;background-size:20px 20px;display:inline-block;visibility:hidden;width:20px;height:20px;margin:0;vertical-align:middle}.job-manager-form .spinner.is-active{visibility:visible}div.job_listings{margin-bottom:1em}div.job_listings ul.job_listings{margin:0}.single_job_listing .company{position:relative;border:1px solid #eee;padding:1em;margin:0 0 2em;display:block;clear:both;min-height:3em;box-shadow:0 1px 1px rgba(0,0,0,.1)}.single_job_listing .company img{width:3em;height:3em;position:absolute;left:1em;float:left;vertical-align:middle;box-shadow:none}.single_job_listing .company .name{margin:0 0 0 3em;padding:0 0 0 1em;line-height:1.5em}.single_job_listing .company .name a{float:right;margin-left:1em}.single_job_listing .company .tagline{display:block;margin:0 0 0 3em;padding:0 0 0 1em;line-height:1.5em;font-style:italic;color:#999}.single_job_listing .company .website:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e809'}.single_job_listing .company .company_twitter:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e80a'}.single_job_listing .company .company_video{border-top:1px solid #eee;padding:1em 0 0;margin:1em 0 0 0;position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}.single_job_listing .company .company_video embed,.single_job_listing .company .company_video iframe,.single_job_listing .company .company_video object{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;display:block}.single_job_listing .meta{list-style:none outside;padding:0;margin:0 0 1.5em;overflow:hidden;zoom:1;clear:both}.single_job_listing .meta li{margin:0 1em 0 0;padding:.5em;float:left;line-height:1em;color:#999}.single_job_listing .meta .job-type{color:#fff;background-color:#f08d3c}.single_job_listing .meta .full-time{background-color:#90da36}.single_job_listing .meta .part-time{background-color:#f08d3c}.single_job_listing .meta .temporary{background-color:#d93674}.single_job_listing .meta .freelance{background-color:#39c}.single_job_listing .meta .internship{background-color:#6033cc}.single_job_listing .meta .listing-expired,.single_job_listing .meta .position-filled{color:#b81c23}.single_job_listing .meta .location:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e81d'}.single_job_listing .meta .date-posted:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e80f'}.single_job_listing .meta .listing-expired:before,.single_job_listing .meta .position-filled:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e80e'}.single_job_listing .job_description{margin:0 0 1.5em}.job-manager-application-wrapper{clear:both;border:1px solid #eee;padding:.75em 1em 0;margin:1em 0;line-height:1.5em;display:block;position:relative;box-shadow:0 1px 1px rgba(0,0,0,.1)}.job-manager-application-wrapper .application,.single_job_listing .application{padding:0;margin:0 0 1em;overflow:hidden}.job-manager-application-wrapper .application .application_button,.job-manager-application-wrapper .application .application_details,.single_job_listing .application .application_button,.single_job_listing .application .application_details{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.job-manager-application-wrapper .application .application_button,.single_job_listing .application .application_button{text-align:center;font-size:1.1em;line-height:1em;display:inline-block;margin:0 .5em 0 0;padding:.90909091em 2em;outline:0}.job-manager-application-wrapper .application .application_details,.single_job_listing .application .application_details{clear:both;border:1px solid #eee;padding:.75em 1em 0;margin:1em 0;line-height:1.5em;display:block;position:relative;box-shadow:0 1px 1px rgba(0,0,0,.1)}.job-manager-application-wrapper .application .application_details p,.single_job_listing .application .application_details p{margin:0 0 .75em}.job-manager-application-wrapper .application .application_details:before,.single_job_listing .application .application_details:before{content:"";position:absolute;margin:-10px 0 0 0;top:0;left:5em;width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:10px solid #eee}.job-manager-application-wrapper .application .application_details:after,.single_job_listing .application .application_details:after{content:"";position:absolute;margin:-9px 0 0 1px;left:5em;top:0;width:0;height:0;border-left:9px solid transparent;border-right:9px solid transparent;border-bottom:9px solid #fff}.job_filters{background:#eee;zoom:1}.job_filters:after,.job_filters:before{content:"";display:table}.job_filters:after{clear:both}.job_filters .search_jobs{padding:1em;zoom:1}.job_filters .search_jobs:after,.job_filters .search_jobs:before{content:"";display:table}.job_filters .search_jobs:after{clear:both}.job_filters .search_jobs div{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.job_filters .search_jobs div label{display:none}.job_filters .search_jobs div.filter_first,.job_filters .search_jobs div.search_keywords{float:left;padding-right:.5em;width:50%}.job_filters .search_jobs div.filter_last,.job_filters .search_jobs div.search_location{float:right;padding-left:.5em;width:50%}.job_filters .search_jobs div.filter_wide,.job_filters .search_jobs div.search_categories{padding-top:.5em;clear:both;width:100%}.job_filters .search_jobs div .showing_jobs a{padding:.25em}.job_filters .search_jobs div .showing_jobs a.active{background:#ddd;text-decoration:none}.job_filters .search_jobs input,.job_filters .search_jobs select{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%}.job_filters .job_types{list-style:none outside;margin:0;padding:0;font-size:.83em;background:#f9f9f9;border-top:1px solid #e5e5e5;zoom:1}.job_filters .job_types:after,.job_filters .job_types:before{content:"";display:table}.job_filters .job_types:after{clear:both}.job_filters .job_types li{margin:0;padding:.5em 1em;float:left;border-right:1px solid #eee}.job_filters .job_types li:last-child{border-right:0}.job_filters .showing_jobs{padding:.5em 1em;display:none;font-size:.83em;background:#f9f9f9;border-top:1px solid #e5e5e5}.job_filters .showing_jobs a{float:right;padding-left:10px;border:0}div.job_listings .job-manager-pagination{text-align:center;display:block;padding:1em 0 1em 0;border-bottom:1px solid #eee;line-height:1}div.job_listings .load_previous{border-top:1px solid #eee}div.job_listings .load_more_jobs+ul.job_listings{border-top:0}div.job_listings .load_more_jobs{text-align:center;display:block;padding:1em 1em 1em 2em;border-bottom:1px solid #eee;font-weight:700}div.job_listings .load_more_jobs.loading{background:url(../images/ajax-loader.gif) no-repeat center}div.job_listings .load_more_jobs.loading strong{visibility:hidden}div.job_listings .load_more_jobs:focus,div.job_listings .load_more_jobs:hover{background-color:#fcfcfc;border-bottom:1px solid #eee}.job_listing_preview{padding:0 1em 1em;border:5px solid #eee}.single-job_listing .entry-header .attachment-post-thumbnail,.single-job_listing .job_listing.has-post-thumbnail .post-thumbnail{display:none}.entry-content .job_listing_preview_title,.job_listing_preview_title{padding:.5em 1em;vertical-align:middle;position:relative;background:#eee}.entry-content .job_listing_preview_title h2,.job_listing_preview_title h2{margin:0;clear:none}.entry-content .job_listing_preview_title .button,.job_listing_preview_title .button{float:right;margin-left:.25em}.job_summary_shortcode{border:1px solid #ccc;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;text-align:center;position:relative;box-shadow:0 2px 4px rgba(0,0,0,.1),inset 0 1px 0 rgba(255,255,255,.4);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.job_summary_shortcode.aligncenter{display:block;margin:2em auto 2em}.job_summary_shortcode.alignleft{float:left;margin:0 2em 2em 0}.job_summary_shortcode.alignright{float:right;margin:0 0 2em 2em}.job_summary_shortcode a{text-decoration:none;color:inherit}.job_summary_shortcode img{margin:0;padding:0;display:block;width:100%;-moz-border-radius:0;-webkit-border-radius:0;-moz-border-top-left-radius:3px;-moz-border-top-right-radius:3px;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-radius:0;border-top-left-radius:3px;border-top-right-radius:3px;box-shadow:inset 0 1px 0 rgba(255,255,255,.4)}.job_summary_shortcode .job_summary_content{padding:0 1em}.job_summary_shortcode .meta{font-style:italic;color:#777}.job_summary_shortcode .job-type{-moz-border-radius:1em;-webkit-border-radius:1em;border-radius:1em;color:#fff;text-shadow:0 1px 0 rgba(255,255,255,.5);box-shadow:0 2px 4px rgba(0,0,0,.1),inset 0 1px 0 rgba(255,255,255,.4);position:absolute;top:0;right:0;padding:.5em;height:1em;width:auto;min-width:1em;font-size:1em;text-align:center;vertical-align:middle;line-height:1em;margin:-.5em -.5em 0 0}.job_summary_shortcode .job-type.full-time{background-color:#90da36}.job_summary_shortcode .job-type.part-time{background-color:#f08d3c}.job_summary_shortcode .job-type.temporary{background-color:#d93674}.job_summary_shortcode .job-type.freelance{background-color:#39c}.job_summary_shortcode .job-type.internship{background-color:#6033cc}#job-manager-job-dashboard .account-sign-in .button{margin-right:.5em}#job-manager-job-dashboard .account-sign-in .button:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e808'}#job-manager-job-dashboard table ul.job-dashboard-actions{margin:0;padding:0;visibility:hidden;font-size:.92em}#job-manager-job-dashboard table ul.job-dashboard-actions li{float:none;display:inline;padding:0;margin:0 .5em 0 0;font-weight:400;list-style:none outside}#job-manager-job-dashboard table ul.job-dashboard-actions li:after{padding:0 0 0 .5em;content:"\2023"}#job-manager-job-dashboard table ul.job-dashboard-actions li:last-child:after{content:''}#job-manager-job-dashboard table ul.job-dashboard-actions li .job-dashboard-action-delete{color:red}#job-manager-job-dashboard table tr:focus ul.job-dashboard-actions,#job-manager-job-dashboard table tr:hover ul.job-dashboard-actions{visibility:visible}#job-manager-job-dashboard table td,#job-manager-job-dashboard table th{padding:.5em 1em .5em 0}#job-manager-job-dashboard table .job_title small{color:#999}#job-manager-job-dashboard table .featured-job-icon:before{content:'\e803';font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em}#job-manager-job-dashboard table .applications,#job-manager-job-dashboard table .expires,#job-manager-job-dashboard table .filled{text-align:center}#content nav.job-manager-pagination,nav.job-manager-pagination{text-align:center}#content nav.job-manager-pagination ul,nav.job-manager-pagination ul{display:inline-block;white-space:nowrap;padding:0;clear:both;border-left:1px solid #eee;margin:1px}#content nav.job-manager-pagination ul li,nav.job-manager-pagination ul li{border-right:1px solid #eee;border-top:1px solid #eee;border-bottom:1px solid #eee;padding:0;margin:0;float:left;display:inline;overflow:hidden}#content nav.job-manager-pagination ul li a,#content nav.job-manager-pagination ul li span,nav.job-manager-pagination ul li a,nav.job-manager-pagination ul li span{margin:0;text-decoration:none;padding:0;line-height:1em;font-size:1em;font-weight:400;padding:.5em;min-width:1em;display:block;border:0}#content nav.job-manager-pagination ul li a:focus,#content nav.job-manager-pagination ul li a:hover,#content nav.job-manager-pagination ul li span.current,nav.job-manager-pagination ul li a:focus,nav.job-manager-pagination ul li a:hover,nav.job-manager-pagination ul li span.current{background:#eee;color:#888}.chosen-container{width:100%!important}.twenty-ten .chosen-choices,.twenty-ten .job_types{margin:0!important}.rtl .job-manager-form label{float:right}.rtl .job-manager-form div.field{float:left}.rtl .entry-content .job_listing_preview_title .button,.rtl .job_listing_preview_title .button{float:left}.rtl .single_job_listing .meta li{float:right;margin:0 0 0 1em}
assets/js/admin.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(t){t(".tips, .help_tip").tipTip({attribute:"data-tip",fadeIn:50,fadeOut:50,delay:200}),t("p.form-field-author").on("click","a.change-author",function(){return t(this).closest("p").find(".current-author").hide(),t(this).closest("p").find(".change-author").show(),!1});var e,a,o;t(document.body).on("click",".wp_job_manager_add_another_file_button",function(e){e.preventDefault();var a=t(this).data("field_name"),o=t(this).data("field_placeholder"),i=t(this).data("uploader_button_text"),n=t(this).data("uploader_button"),l=t(this).data("view_button");t(this).before('<span class="file_url"><input type="text" name="'+a+'[]" placeholder="'+o+'" /><button class="button button-small wp_job_manager_upload_file_button" data-uploader_button_text="'+i+'">'+n+'</button><button class="button button-small wp_job_manager_view_file_button">'+l+"</button></span>")}),t(document.body).on("click",".wp_job_manager_view_file_button",function(e){e.preventDefault(),o=t(this).closest(".file_url");var i=(a=o.find("input")).val();i.indexOf("://")>-1?window.open(i,"_blank"):(a.addClass("file_no_url"),setTimeout(function(){a.removeClass("file_no_url")},1e3))}),t(document.body).on("click",".wp_job_manager_upload_file_button",function(i){i.preventDefault(),o=t(this).closest(".file_url"),a=o.find("input"),e?e.open():((e=wp.media.frames.file_frame=wp.media({title:t(this).data("uploader_title"),button:{text:t(this).data("uploader_button_text")},multiple:!1})).on("select",function(){var o=e.state().get("selection").first().toJSON();t(a).val(o.url)}),e.open())})}),jQuery(document).ready(function(t){var e="job_listing_type";t("#"+e+"checklist li :radio, #"+e+"checklist-pop :radio").live("click",function(){var a=t(this),o=a.is(":checked"),i=a.val();t("#"+e+"checklist li :radio, #"+e+"checklist-pop :radio").prop("checked",!1),t("#in-"+e+"-"+i+", #in-popular-"+e+"-"+i).prop("checked",o)})});
1
+ jQuery(document).ready(function(t){t(".tips, .help_tip").tipTip({attribute:"data-tip",fadeIn:50,fadeOut:50,delay:200}),t("p.form-field-author").on("click","a.change-author",function(){t(this).closest("p").find(".current-author").hide();var e=t(this).closest("p").find(".change-author");return e.show(),e.find(":input.wpjm-user-search").trigger("init.user_search"),!1}),t("#wpbody").on("init.user_search",":input.wpjm-user-search",function(){var e={allowClear:!!t(this).data("allow_clear"),placeholder:t(this).data("placeholder"),minimumInputLength:t(this).data("minimum_input_length")?t(this).data("minimum_input_length"):"1",errorLoading:job_manager_admin_params.user_selection_strings.searching,inputTooShort:function(t){var e=t.minimum-t.input.length;return 1===e?job_manager_admin_params.user_selection_strings.input_too_short_1:job_manager_admin_params.user_selection_strings.input_too_short_n.replace("%qty%",e)},loadingMore:function(){return job_manager_admin_params.user_selection_strings.load_more},noResults:function(){return job_manager_admin_params.user_selection_strings.no_matches},searching:function(){return job_manager_admin_params.user_selection_strings.searching},escapeMarkup:function(t){return t},width:"100%",ajax:{url:job_manager_admin_params.ajax_url,dataType:"json",delay:1e3,data:function(t){return{term:t.term,action:"job_manager_search_users",security:job_manager_admin_params.search_users_nonce,page:t.page}},processResults:function(e){var a=[];return e&&e.results&&t.each(e.results,function(t,e){a.push({id:t,text:e})}),{results:a,pagination:{more:e.more}}},cache:!0}};t(this).select2(e)}),t(":input.wpjm-user-search:visible").trigger("init.user_search");var e,a,n;t(document.body).on("click",".wp_job_manager_add_another_file_button",function(e){e.preventDefault();var a=t(this).data("field_name"),n=t(this).data("field_placeholder"),i=t(this).data("uploader_button_text"),r=t(this).data("uploader_button"),o=t(this).data("view_button");t(this).before('<span class="file_url"><input type="text" name="'+a+'[]" placeholder="'+n+'" /><button class="button button-small wp_job_manager_upload_file_button" data-uploader_button_text="'+i+'">'+r+'</button><button class="button button-small wp_job_manager_view_file_button">'+o+"</button></span>")}),t(document.body).on("click",".wp_job_manager_view_file_button",function(e){e.preventDefault(),n=t(this).closest(".file_url");var i=(a=n.find("input")).val();i.indexOf("://")>-1?window.open(i,"_blank"):(a.addClass("file_no_url"),setTimeout(function(){a.removeClass("file_no_url")},1e3))}),t(document.body).on("click",".wp_job_manager_upload_file_button",function(i){i.preventDefault(),n=t(this).closest(".file_url"),a=n.find("input"),e?e.open():((e=wp.media.frames.file_frame=wp.media({title:t(this).data("uploader_title"),button:{text:t(this).data("uploader_button_text")},multiple:!1})).on("select",function(){var n=e.state().get("selection").first().toJSON();t(a).val(n.url)}),e.open())})}),jQuery(document).ready(function(t){var e="job_listing_type";t("#"+e+"checklist li :radio, #"+e+"checklist-pop :radio").live("click",function(){var a=t(this),n=a.is(":checked"),i=a.val();t("#"+e+"checklist li :radio, #"+e+"checklist-pop :radio").prop("checked",!1),t("#in-"+e+"-"+i+", #in-popular-"+e+"-"+i).prop("checked",n)})});
assets/js/ajax-filters.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(e){function a(a,t){if(i){var n=a.find(".job_filters"),s=e(n).serialize(),r=e("div.job_listings").index(a);window.history.replaceState({id:"job_manager_state",page:t,data:s,index:r},"",o+"#s=1")}}var t=[];e(".job_listings").on("update_results",function(a,i,o,n){var s,r,d,l="",_=e(this),g=_.find(".job_filters"),c=_.find(".showing_jobs"),p=_.find(".job_listings"),h=_.data("per_page"),u=_.data("orderby"),f=_.data("order"),b=_.data("featured"),j=_.data("filled"),m=_.data("job_types"),w=_.data("post_status"),v=e("div.job_listings").index(this);if(!(v<0)){if(t[v]&&t[v].abort(),!o){if(e(p).addClass("loading"),e("li.job_listing, li.no_job_listings_found",p).css("visibility","hidden"),i>1&&!0!==_.data("show_pagination")){var y=jQuery("<strong>").text(job_manager_ajax_filters.i18n_load_prev_listings).wrap('<a class="load_more_jobs load_previous" href="#"></a>');e(p).before(y)}else _.find(".load_previous").remove();_.find(".load_more_jobs").data("page",i)}if(!0===_.data("show_filters")){var k=[];e(':input[name="filter_job_type[]"]:checked, :input[name="filter_job_type[]"][type="hidden"], :input[name="filter_job_type"]',g).each(function(){k.push(e(this).val())}),s=g.find(':input[name^="search_categories"]').map(function(){return e(this).val()}).get(),r="",d="";var x=g.find(':input[name="search_keywords"]'),C=g.find(':input[name="search_location"]');x.val()!==x.attr("placeholder")&&(r=x.val()),C.val()!==C.attr("placeholder")&&(d=C.val()),l={lang:job_manager_ajax_filters.lang,search_keywords:r,search_location:d,search_categories:s,filter_job_type:k,filter_post_status:w,per_page:h,orderby:u,order:f,page:i,featured:b,filled:j,show_pagination:_.data("show_pagination"),form_data:g.serialize()}}else s=_.data("categories"),r=_.data("keywords"),d=_.data("location"),s&&("string"!=typeof s&&(s=String(s)),s=s.split(",")),l={lang:job_manager_ajax_filters.lang,search_categories:s,search_keywords:r,search_location:d,filter_post_status:w,filter_job_type:m,per_page:h,orderby:u,order:f,page:i,featured:b,filled:j,show_pagination:_.data("show_pagination")};t[v]=e.ajax({type:"POST",url:job_manager_ajax_filters.ajax_url.toString().replace("%%endpoint%%","get_listings"),data:l,success:function(a){if(a)try{if(a.showing){var t=jQuery("<span>").html(a.showing);e(c).show().html("").html(a.showing_links).prepend(t)}else e(c).hide();a.showing_all?e(c).addClass("wp-job-manager-showing-all"):e(c).removeClass("wp-job-manager-showing-all"),a.html&&(o&&n?e(p).prepend(a.html):o?e(p).append(a.html):e(p).html(a.html)),!0===_.data("show_pagination")?(_.find(".job-manager-pagination").remove(),a.pagination&&_.append(a.pagination)):(!a.found_jobs||a.max_num_pages<=i?e(".load_more_jobs:not(.load_previous)",_).hide():n||e(".load_more_jobs",_).show(),e(".load_more_jobs",_).removeClass("loading"),e("li.job_listing",p).css("visibility","visible")),e(p).removeClass("loading"),_.triggerHandler("updated_results",a)}catch(e){window.console&&window.console.log(e)}},error:function(e,a,t){window.console&&"abort"!==a&&window.console.log(a+": "+t)},statusCode:{404:function(){window.console&&window.console.log("Error 404: Ajax Endpoint cannot be reached. Go to Settings > Permalinks and save to resolve.")}}})}}),e("#search_keywords, #search_location, .job_types :input, #search_categories, .job-manager-filter").change(function(){var t=e(this).closest("div.job_listings");t.triggerHandler("update_results",[1,!1]),a(t,1)}).on("keyup",function(a){13===a.which&&e(this).trigger("change")}),e(".job_filters").on("click",".reset",function(){var t=e(this).closest("div.job_listings"),i=e(this).closest("form");return i.find(':input[name="search_keywords"], :input[name="search_location"], .job-manager-filter').not(':input[type="hidden"]').val("").trigger("chosen:updated"),i.find(':input[name^="search_categories"]').not(':input[type="hidden"]').val("").trigger("chosen:updated"),e(':input[name="filter_job_type[]"]',i).not(':input[type="hidden"]').attr("checked","checked"),t.triggerHandler("reset"),t.triggerHandler("update_results",[1,!1]),a(t,1),!1}),e(document.body).on("click",".load_more_jobs",function(){var t=e(this).closest("div.job_listings"),i=parseInt(e(this).data("page")||1,10),o=!1;return e(this).addClass("loading"),e(this).is(".load_previous")?(o=!0,1===(i-=1)?e(this).remove():e(this).data("page",i)):(i+=1,e(this).data("page",i),a(t,i)),t.triggerHandler("update_results",[i,!0,o]),!1}),e("div.job_listings").on("click",".job-manager-pagination a",function(){var t=e(this).closest("div.job_listings"),i=e(this).data("page");return a(t,i),t.triggerHandler("update_results",[i,!1]),e("body, html").animate({scrollTop:t.offset().top},600),!1}),e.isFunction(e.fn.chosen)&&(1===job_manager_ajax_filters.is_rtl&&e('select[name^="search_categories"]').addClass("chosen-rtl"),e('select[name^="search_categories"]').chosen({search_contains:!0}));var i=!1;window.history&&window.history.pushState&&(i=!0);var o=document.location.href.split("#")[0];e(window).on("load",function(){e(".job_filters").each(function(){var a=e(this).closest("div.job_listings"),t=a.find(".job_filters"),i=1,o=e("div.job_listings").index(a);if(window.history.state&&window.location.hash){var n=window.history.state;n.id&&"job_manager_state"===n.id&&o===n.index&&(i=n.page,t.deserialize(n.data),t.find(':input[name^="search_categories"]').not(':input[type="hidden"]').trigger("chosen:updated"))}a.triggerHandler("update_results",[i,!1])})})});
1
+ jQuery(document).ready(function(e){function a(a,t){if(o){var i=a.find(".job_filters"),s=e(i).serialize(),r=e("div.job_listings").index(a);window.history.replaceState({id:"job_manager_state",page:t,data:s,index:r},"",n+"#s=1")}}var t=[];if(e(".job_listings").on("update_results",function(a,i,o,n){var s,r,l,d="",g=e(this),_=g.find(".job_filters"),c=g.find(".showing_jobs"),p=g.find(".job_listings"),h=g.data("per_page"),u=g.data("orderby"),f=g.data("order"),m=g.data("featured"),b=g.data("filled"),j=g.data("job_types"),w=g.data("post_status"),v=e("div.job_listings").index(this);if(!(v<0)){if(t[v]&&t[v].abort(),!0===g.data("show_filters")){var y=[];e(':input[name="filter_job_type[]"]:checked, :input[name="filter_job_type[]"][type="hidden"], :input[name="filter_job_type"]',_).each(function(){y.push(e(this).val())}),s=_.find(':input[name^="search_categories"]').map(function(){return e(this).val()}).get(),r="",l="";var k=_.find(':input[name="search_keywords"]'),x=_.find(':input[name="search_location"]');k.val()!==k.attr("placeholder")&&(r=k.val()),x.val()!==x.attr("placeholder")&&(l=x.val()),d={lang:job_manager_ajax_filters.lang,search_keywords:r,search_location:l,search_categories:s,filter_job_type:y,filter_post_status:w,per_page:h,orderby:u,order:f,page:i,featured:m,filled:b,show_pagination:g.data("show_pagination"),form_data:_.serialize()}}else s=g.data("categories"),r=g.data("keywords"),l=g.data("location"),s&&("string"!=typeof s&&(s=String(s)),s=s.split(",")),d={lang:job_manager_ajax_filters.lang,search_categories:s,search_keywords:r,search_location:l,filter_post_status:w,filter_job_type:j,per_page:h,orderby:u,order:f,page:i,featured:m,filled:b,show_pagination:g.data("show_pagination")};t[v]=e.ajax({type:"POST",url:job_manager_ajax_filters.ajax_url.toString().replace("%%endpoint%%","get_listings"),data:d,success:function(a){if(a)try{if(a.showing){var t=jQuery("<span>").html(a.showing);e(c).show().html("").html(a.showing_links).prepend(t)}else e(c).hide();a.showing_all?e(c).addClass("wp-job-manager-showing-all"):e(c).removeClass("wp-job-manager-showing-all"),a.html&&(o&&n?e(p).prepend(a.html):o?e(p).append(a.html):e(p).html(a.html)),!0===g.data("show_pagination")?(g.find(".job-manager-pagination").remove(),a.pagination&&g.append(a.pagination)):(!a.found_jobs||a.max_num_pages<=i?e(".load_more_jobs:not(.load_previous)",g).hide():n||e(".load_more_jobs",g).show(),e(".load_more_jobs",g).removeClass("loading"),e("li.job_listing",p).css("visibility","visible")),e(p).removeClass("loading"),g.triggerHandler("updated_results",a)}catch(e){window.console&&window.console.log(e)}},error:function(e,a,t){window.console&&"abort"!==a&&window.console.log(a+": "+t)},statusCode:{404:function(){window.console&&window.console.log("Error 404: Ajax Endpoint cannot be reached. Go to Settings > Permalinks and save to resolve.")}}})}}),e("#search_keywords, #search_location, .job_types :input, #search_categories, .job-manager-filter").change(function(){var t=e(this).closest("div.job_listings");t.triggerHandler("update_results",[1,!1]),a(t,1)}).on("keyup",function(a){13===a.which&&e(this).trigger("change")}),e(".job_filters").on("click",".reset",function(){var t=e(this).closest("div.job_listings"),i=e(this).closest("form");return i.find(':input[name="search_keywords"], :input[name="search_location"], .job-manager-filter').not(':input[type="hidden"]').val("").trigger("change.select2"),i.find(':input[name^="search_categories"]').not(':input[type="hidden"]').val("").trigger("change.select2"),e(':input[name="filter_job_type[]"]',i).not(':input[type="hidden"]').attr("checked","checked"),t.triggerHandler("reset"),t.triggerHandler("update_results",[1,!1]),a(t,1),!1}),e(document.body).on("click",".load_more_jobs",function(){var t=e(this).closest("div.job_listings"),i=parseInt(e(this).data("page")||1,10),o=!1;return e(this).addClass("loading"),e(this).is(".load_previous")?(o=!0,1===(i-=1)?e(this).remove():e(this).data("page",i)):(i+=1,e(this).data("page",i),a(t,i)),t.triggerHandler("update_results",[i,!0,o]),!1}),e("div.job_listings").on("click",".job-manager-pagination a",function(){var t=e(this).closest("div.job_listings"),i=e(this).data("page");return a(t,i),t.triggerHandler("update_results",[i,!1]),e("body, html").animate({scrollTop:t.offset().top},600),!1}),e.isFunction(e.fn.select2)&&"undefined"!=typeof job_manager_select2_args){var i=job_manager_select2_args;i.allowClear=!0,i.minimumResultsForSearch=10,e('select[name^="search_categories"]:visible').select2(i)}var o=!1;window.history&&window.history.pushState&&(o=!0);var n=document.location.href.split("#")[0];e(window).on("load",function(){e(".job_filters").each(function(){var a=e(this).closest("div.job_listings"),t=a.find(".job_filters"),i=1,o=e("div.job_listings").index(a);if(window.history.state&&window.location.hash){var n=window.history.state;n.id&&"job_manager_state"===n.id&&o===n.index&&(i=n.page,t.deserialize(n.data),t.find(':input[name^="search_categories"]').not(':input[type="hidden"]').trigger("change.select2"))}a.triggerHandler("update_results",[i,!1])})})});
assets/js/job-application.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(i){i("body").hasClass("job-application-details-keep-open")||i(".application_details").hide(),i(document.body).on("click",".job_application .application_button",function(){var t=i(this).siblings(".application_details").first(),o=i(this);t.slideToggle(400,function(){if(i(this).is(":visible")){var e=Math.max(Math.min(t.outerHeight(),200),.33*t.outerHeight()),a=t.offset().top+e,n=5;i("#wpadminbar").length>0&&"fixed"===i("#wpadminbar").css("position")&&(n+=i("#wpadminbar").outerHeight()),i("header").length>0&&"fixed"===i("header").css("position")&&(n+=i("header").outerHeight());var s=i(window).scrollTop()+window.innerHeight,l=t.offset().top+t.outerHeight()-s,d=window.innerHeight-n;l>0&&t.outerHeight()<.9*d?i("html, body").animate({scrollTop:i(window).scrollTop()+l+5},400):s<a&&i("html, body").animate({scrollTop:o.offset().top-n},600)}})})});
1
+ jQuery(document).ready(function(i){i("body").hasClass("job-application-details-keep-open")||i(".application_details").hide(),i(document.body).on("click",".job_application .application_button",function(){var t=i(this).siblings(".application_details").first(),o=i(this);t.slideToggle(400,function(){if(i(this).is(":visible")){t.trigger("visible");var e=Math.max(Math.min(t.outerHeight(),200),.33*t.outerHeight()),a=t.offset().top+e,n=5;i("#wpadminbar").length>0&&"fixed"===i("#wpadminbar").css("position")&&(n+=i("#wpadminbar").outerHeight()),i("header").length>0&&"fixed"===i("header").css("position")&&(n+=i("header").outerHeight());var s=i(window).scrollTop()+window.innerHeight,l=t.offset().top+t.outerHeight()-s,r=window.innerHeight-n;l>0&&t.outerHeight()<.9*r?i("html, body").animate({scrollTop:i(window).scrollTop()+l+5},400):s<a&&i("html, body").animate({scrollTop:o.offset().top-n},600)}})})});
assets/js/multiselect.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(function(){jQuery(".job-manager-multiselect").chosen(job_manager_chosen_multiselect_args)});
1
+ jQuery(function(e){e.isFunction(e.fn.select2)&&"undefined"!=typeof job_manager_select2_args&&e(".job-manager-multiselect:visible").select2(job_manager_select2_args)});
assets/js/select2/select2.full.min.js ADDED
@@ -0,0 +1 @@
 
1
+ /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=function(b,c){return void 0===c&&(c="undefined"!=typeof window?require("jquery"):require("jquery")(b)),a(c),c}:a(jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return v.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o=b&&b.split("/"),p=t.map,q=p&&p["*"]||{};if(a){for(a=a.split("/"),g=a.length-1,t.nodeIdCompat&&x.test(a[g])&&(a[g]=a[g].replace(x,"")),"."===a[0].charAt(0)&&o&&(n=o.slice(0,o.length-1),a=n.concat(a)),k=0;k<a.length;k++)if("."===(m=a[k]))a.splice(k,1),k-=1;else if(".."===m){if(0===k||1===k&&".."===a[2]||".."===a[k-1])continue;k>0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}if((o||q)&&p){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),o)for(l=o.length;l>0;l-=1)if((e=p[o.slice(0,l).join("/")])&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&q&&q[d]&&(i=q[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=w.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),o.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){r[a]=b}}function j(a){if(e(s,a)){var c=s[a];delete s[a],u[a]=!0,n.apply(b,c)}if(!e(r,a)&&!e(u,a))throw new Error("No "+a);return r[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return a?k(a):[]}function m(a){return function(){return t&&t.config&&t.config[a]||{}}}var n,o,p,q,r={},s={},t={},u={},v=Object.prototype.hasOwnProperty,w=[].slice,x=/\.js$/;p=function(a,b){var c,d=k(a),e=d[0],g=b[1];return a=d[1],e&&(e=f(e,g),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(g)):f(a,g):(a=f(a,g),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},q={require:function(a){return g(a)},exports:function(a){var b=r[a];return void 0!==b?b:r[a]={}},module:function(a){return{id:a,uri:"",exports:r[a],config:m(a)}}},n=function(a,c,d,f){var h,k,m,n,o,t,v,w=[],x=typeof d;if(f=f||a,t=l(f),"undefined"===x||"function"===x){for(c=!c.length&&d.length?["require","exports","module"]:c,o=0;o<c.length;o+=1)if(n=p(c[o],t),"require"===(k=n.f))w[o]=q.require(a);else if("exports"===k)w[o]=q.exports(a),v=!0;else if("module"===k)h=w[o]=q.module(a);else if(e(r,k)||e(s,k)||e(u,k))w[o]=j(k);else{if(!n.p)throw new Error(a+" missing "+k);n.p.load(n.n,g(f,!0),i(k),{}),w[o]=r[k]}m=d?d.apply(r[a],w):void 0,a&&(h&&h.exports!==b&&h.exports!==r[a]?r[a]=h.exports:m===b&&v||(r[a]=m))}else a&&(r[a]=d)},a=c=o=function(a,c,d,e,f){if("string"==typeof a)return q[a]?q[a](c):j(p(a,l(c)).f);if(!a.splice){if(t=a,t.deps&&o(t.deps,t.callback),!c)return;c.splice?(a=c,c=d,d=null):a=b}return c=c||function(){},"function"==typeof d&&(d=e,e=f),e?n(b,a,c,d):setTimeout(function(){n(b,a,c,d)},4),o},o.config=function(a){return o(a)},a._defined=r,d=function(a,b,c){if("string"!=typeof a)throw new Error("See almond README: incorrect module build, no module name");b.splice||(c=b,b=[]),e(r,a)||e(s,a)||(s[a]=[a,b,c])},d.amd={jQuery:!0}}(),b.requirejs=a,b.require=c,b.define=d}}(),b.define("almond",function(){}),b.define("jquery",[],function(){var b=a||$;return null==b&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),b}),b.define("select2/utils",["jquery"],function(a){function b(a){var b=a.prototype,c=[];for(var d in b){"function"==typeof b[d]&&("constructor"!==d&&c.push(d))}return c}var c={};c.Extend=function(a,b){function c(){this.constructor=a}var d={}.hasOwnProperty;for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},c.Decorate=function(a,c){function d(){var b=Array.prototype.unshift,d=c.prototype.constructor.length,e=a.prototype.constructor;d>0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;h<g.length;h++){var i=g[h];d.prototype[i]=a.prototype[i]}for(var j=(function(a){var b=function(){};a in d.prototype&&(b=d.prototype[a]);var e=c.prototype[a];return function(){return Array.prototype.unshift.call(arguments,b),e.apply(this,arguments)}}),k=0;k<f.length;k++){var l=f[k];d.prototype[l]=j(l)}return d};var d=function(){this.listeners={}};return d.prototype.on=function(a,b){this.listeners=this.listeners||{},a in this.listeners?this.listeners[a].push(b):this.listeners[a]=[b]},d.prototype.trigger=function(a){var b=Array.prototype.slice,c=b.call(arguments,1);this.listeners=this.listeners||{},null==c&&(c=[]),0===c.length&&c.push({}),c[0]._type=a,a in this.listeners&&this.invoke(this.listeners[a],b.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},d.prototype.invoke=function(a,b){for(var c=0,d=a.length;c<d;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;c<a;c++){b+=Math.floor(36*Math.random()).toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e<c.length;e++){var f=c[e];f=f.substring(0,1).toLowerCase()+f.substring(1),f in d||(d[f]={}),e==c.length-1&&(d[f]=a[b]),d=d[f]}delete a[b]}}return a},c.hasScroll=function(b,c){var d=a(c),e=c.style.overflowX,f=c.style.overflowY;return(e!==f||"hidden"!==f&&"visible"!==f)&&("scroll"===e||"scroll"===f||(d.innerHeight()<c.scrollHeight||d.innerWidth()<c.scrollWidth))},c.escapeMarkup=function(a){var b={"\\":"&#92;","&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#47;"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<ul class="select2-results__options" role="tree"></ul>');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('<li role="treeitem" aria-live="assertive" class="select2-results__option"></li>'),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),d[0].className+=" select2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c<a.results.length;c++){var d=a.results[c],e=this.option(d);b.push(e)}this.$results.append(b)},c.prototype.position=function(a,b){b.find(".select2-results").append(a)},c.prototype.sort=function(a){return this.options.get("sorter")(a)},c.prototype.highlightFirstItem=function(){var a=this.$results.find(".select2-results__option[aria-selected]"),b=a.filter("[aria-selected=true]");b.length>0?b.first().trigger("mouseenter"):a.first().trigger("mouseenter"),this.ensureHighlightVisible()},c.prototype.setClasses=function(){var b=this;this.data.current(function(c){var d=a.map(c,function(a){return a.id.toString()});b.$results.find(".select2-results__option[aria-selected]").each(function(){var b=a(this),c=a.data(this,"data"),e=""+c.id;null!=c.element&&c.element.selected||null==c.element&&a.inArray(e,d)>-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")})})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";a(h);this.template(b,h);for(var i=[],j=0;j<b.children.length;j++){var k=b.children[j],l=this.option(k);i.push(l)}var m=a("<ul></ul>",{class:"select2-results__options select2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b,c){var d=this,e=b.id+"-results";this.$results.attr("id",e),b.on("results:all",function(a){d.clear(),d.append(a.data),b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("results:append",function(a){d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("query",function(a){d.hideMessages(),d.showLoading(a)}),b.on("select",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("unselect",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("open",function(){d.$results.attr("aria-expanded","true"),d.$results.attr("aria-hidden","false"),d.setClasses(),d.ensureHighlightVisible()}),b.on("close",function(){d.$results.attr("aria-expanded","false"),d.$results.attr("aria-hidden","true"),d.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=d.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=d.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?d.trigger("close",{}):d.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a);if(0!==c){var e=c-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top,h=f.offset().top,i=d.$results.scrollTop()+(h-g);0===e?d.$results.scrollTop(0):h-g<0&&d.$results.scrollTop(i)}}),b.on("results:next",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a),e=c+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top+d.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=d.$results.scrollTop()+h-g;0===e?d.$results.scrollTop(0):h>g&&d.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),b.on("results:message",function(a){d.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=d.$results.scrollTop(),c=d.$results.get(0).scrollHeight-b+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=d.$results.height();e?(d.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(d.$results.scrollTop(d.$results.get(0).scrollHeight-d.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(b){var c=a(this),e=c.data("data");if("true"===c.attr("aria-selected"))return void(d.options.get("multiple")?d.trigger("unselect",{originalEvent:b,data:e}):d.trigger("close",{}));d.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(b){var c=a(this).data("data");d.getHighlightedResults().removeClass("select2-results__option--highlighted"),d.trigger("results:focus",{data:c,element:a(this)})})},c.prototype.getHighlightedResults=function(){return this.$results.find(".select2-results__option--highlighted")},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),c<=2?this.$results.scrollTop(0):(g>this.$results.outerHeight()||g<0)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('<span class="select2-selection" role="combobox" aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a,b){var d=this,e=(a.id,a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2");a(".select2.select2-container--open").each(function(){var b=a(this);this!=d[0]&&b.data("element").select2("close")})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){b.find(".selection").append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("focus",function(b){a.isOpen()||c.$selection.focus()}),a.on("selection:update",function(a){c.update(a.data)})},e.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},e.prototype.display=function(a,b){var c=this.options.get("templateSelection");return this.options.get("escapeMarkup")(c(a,b))},e.prototype.selectionContainer=function(){return a("<span></span>")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.prop("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('<ul class="select2-selection__rendered"></ul>'),a},d.prototype.bind=function(b,c){var e=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){e.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!e.options.get("disabled")){var c=a(this),d=c.parent(),f=d.data("data");e.trigger("unselect",{originalEvent:b,data:f})}})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a,b){var c=this.options.get("templateSelection");return this.options.get("escapeMarkup")(c(a,b))},d.prototype.selectionContainer=function(){return a('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">&times;</span></li>')},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d<a.length;d++){var e=a[d],f=this.selectionContainer(),g=this.display(e,f);f.append(g),f.prop("title",e.title||e.text),f.data("data",e),b.push(f)}var h=this.$selection.find(".select2-selection__rendered");c.appendMany(h,b)}},d}),b.define("select2/selection/placeholder",["../utils"],function(a){function b(a,b,c){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c)}return b.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},b.prototype.createPlaceholder=function(a,b){var c=this.selectionContainer();return c.html(this.display(b)),c.addClass("select2-selection__placeholder").removeClass("select2-selection__choice"),c},b.prototype.update=function(a,b){var c=1==b.length&&b[0].id!=this.placeholder.id;if(b.length>1||c)return a.call(this,b);this.clear();var d=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(d)},b}),b.define("select2/selection/allowClear",["jquery","../keys"],function(a,b){function c(){}return c.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},c.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var c=this.$selection.find(".select2-selection__clear");if(0!==c.length){b.stopPropagation();for(var d=c.data("data"),e=0;e<d.length;e++){var f={data:d[e]};if(this.trigger("unselect",f),f.prevented)return}this.$element.val(this.placeholder.id).trigger("change"),this.trigger("toggle",{})}}},c.prototype._handleKeyboardClear=function(a,c,d){d.isOpen()||c.which!=b.DELETE&&c.which!=b.BACKSPACE||this._handleClear(c)},c.prototype.update=function(b,c){if(b.call(this,c),!(this.$selection.find(".select2-selection__placeholder").length>0||0===c.length)){var d=a('<span class="select2-selection__clear">&times;</span>');d.data("data",c),this.$selection.find(".select2-selection__rendered").prepend(d)}},c}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('<li class="select2-search select2-search--inline"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="none" spellcheck="false" role="textbox" aria-autocomplete="list" /></li>');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.trigger("focus")}),b.on("close",function(){e.$search.val(""),e.$search.removeAttr("aria-activedescendant"),e.$search.trigger("focus")}),b.on("enable",function(){e.$search.prop("disabled",!1),e._transferTabIndex()}),b.on("disable",function(){e.$search.prop("disabled",!0)}),b.on("focus",function(a){e.$search.trigger("focus")}),b.on("results:focus",function(a){e.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){if(a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented(),a.which===c.BACKSPACE&&""===e.$search.val()){var b=e.$searchContainer.prev(".select2-selection__choice");if(b.length>0){var d=b.data("data");e.searchRemoveChoice(d),a.preventDefault()}}});var f=document.documentMode,g=f&&f<=11;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){if(g)return void e.$selection.off("input.search input.searchcheck");e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(g&&"input"===a.type)return void e.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&e.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&this.$search.focus()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{a=.75*(this.$search.val().length+1)+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){return{"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"}}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),null!=c.id?d+="-"+c.id.toString():d+="-"+a.generateChars(4),d},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f<a.length;f++){var g=a[f].id;-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")});else{var d=a.id;this.$element.val(d),this.$element.trigger("change")}},d.prototype.unselect=function(a){var b=this;if(this.$element.prop("multiple")){if(a.selected=!1,c(a.element).is("option"))return a.element.selected=!1,void this.$element.trigger("change");this.current(function(d){for(var e=[],f=0;f<d.length;f++){var g=d[f].id;g!==a.id&&-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")})}},d.prototype.bind=function(a,b){var c=this;this.container=a,a.on("select",function(a){c.select(a.data)}),a.on("unselect",function(a){c.unselect(a.data)})},d.prototype.destroy=function(){this.$element.find("*").each(function(){c.removeData(this,"data")})},d.prototype.query=function(a,b){var d=[],e=this;this.$element.children().each(function(){var b=c(this);if(b.is("option")||b.is("optgroup")){var f=e.item(b),g=e.matches(a,f);null!==g&&d.push(g)}}),b({results:d})},d.prototype.addOptions=function(a){b.appendMany(this.$element,a)},d.prototype.option=function(a){var b;a.children?(b=document.createElement("optgroup"),b.label=a.text):(b=document.createElement("option"),void 0!==b.textContent?b.textContent=a.text:b.innerText=a.text),void 0!==a.id&&(b.value=a.id),a.disabled&&(b.disabled=!0),a.selected&&(b.selected=!0),a.title&&(b.title=a.title);var d=c(b),e=this._normalizeItem(a);return e.element=b,c.data(b,"data",e),d},d.prototype.item=function(a){var b={};if(null!=(b=c.data(a[0],"data")))return b;if(a.is("option"))b={id:a.val(),text:a.text(),disabled:a.prop("disabled"),selected:a.prop("selected"),title:a.prop("title")};else if(a.is("optgroup")){b={text:a.prop("label"),children:[],title:a.prop("title")};for(var d=a.children("option"),e=[],f=0;f<d.length;f++){var g=c(d[f]),h=this.item(g);e.push(h)}b.children=e}return b=this._normalizeItem(b),b.element=a[0],c.data(a[0],"data",b),b},d.prototype._normalizeItem=function(a){c.isPlainObject(a)||(a={id:a,text:a}),a=c.extend({},{text:""},a);var b={selected:!1,disabled:!1};return null!=a.id&&(a.id=a.id.toString()),null!=a.text&&(a.text=a.text.toString()),null==a._resultId&&a.id&&null!=this.container&&(a._resultId=this.generateResultId(this.container,a)),c.extend({},b,a)},d.prototype.matches=function(a,b){return this.options.get("matcher")(a,b)},d}),b.define("select2/data/array",["./select","../utils","jquery"],function(a,b,c){function d(a,b){var c=b.get("data")||[];d.__super__.constructor.call(this,a,b),this.addOptions(this.convertToOptions(c))}return b.Extend(d,a),d.prototype.select=function(a){var b=this.$element.find("option").filter(function(b,c){return c.value==a.id.toString()});0===b.length&&(b=this.option(a),this.addOptions(b)),d.__super__.select.call(this,a)},d.prototype.convertToOptions=function(a){function d(a){return function(){return c(this).val()==a.id}}for(var e=this,f=this.$element.find("option"),g=f.map(function(){return e.item(c(this)).id}).get(),h=[],i=0;i<a.length;i++){var j=this._normalizeItem(a[i]);if(c.inArray(j.id,g)>=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){d.status&&"0"===d.status||e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&null!=a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h<e.length;h++){var i=e[h],j=this._normalizeItem(i),k=this.option(j);this.$element.append(k)}}return b.prototype.query=function(a,b,c){function d(a,f){for(var g=a.results,h=0;h<g.length;h++){var i=g[h],j=null!=i.children&&!d({results:i.children},!0);if((i.text||"").toUpperCase()===(b.term||"").toUpperCase()||j)return!f&&(a.data=g,void c(a))}if(f)return!0;var k=e.createTag(b);if(null!=k){var l=e.option(k);l.attr("data-select2-tag",!0),e.addOptions([l]),e.insertTag(g,k)}a.results=g,c(a)}var e=this;if(this._removeOldTags(),null==b.term||null!=b.page)return void a.call(this,b,c);a.call(this,b,d)},b.prototype.createTag=function(b,c){var d=a.trim(c.term);return""===d?null:{id:d,text:d}},b.prototype.insertTag=function(a,b,c){b.unshift(c)},b.prototype._removeOldTags=function(b){this._lastTag;this.$element.find("option[data-select2-tag]").each(function(){this.selected||a(this).remove()})},b}),b.define("select2/data/tokenizer",["jquery"],function(a){function b(a,b,c){var d=c.get("tokenizer");void 0!==d&&(this.tokenizer=d),a.call(this,b,c)}return b.prototype.bind=function(a,b,c){a.call(this,b,c),this.$search=b.dropdown.$search||b.selection.$search||c.find(".select2-search__field")},b.prototype.query=function(b,c,d){function e(b){var c=g._normalizeItem(b);if(!g.$element.find("option").filter(function(){return a(this).val()===c.id}).length){var d=g.option(c);d.attr("data-select2-tag",!0),g._removeOldTags(),g.addOptions([d])}f(c)}function f(a){g.trigger("select",{data:a})}var g=this;c.term=c.term||"";var h=this.tokenizer(c,this.options,e);h.term!==c.term&&(this.$search.length&&(this.$search.val(h.term),this.$search.focus()),c.term=h.term),b.call(this,c,d)},b.prototype.tokenizer=function(b,c,d,e){for(var f=d.get("tokenSeparators")||[],g=c.term,h=0,i=this.createTag||function(a){return{id:a.term,text:a.term}};h<g.length;){var j=g[h];if(-1!==a.inArray(j,f)){var k=g.substr(0,h),l=a.extend({},c,{term:k}),m=i(l);null!=m?(e(m),g=g.substr(h+1)||"",h=0):h++}else h++}return{term:g}},b}),b.define("select2/data/minimumInputLength",[],function(){function a(a,b,c){this.minimumInputLength=c.get("minimumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){if(b.term=b.term||"",b.term.length<this.minimumInputLength)return void this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:b.term,params:b}});a.call(this,b,c)},a}),b.define("select2/data/maximumInputLength",[],function(){function a(a,b,c){this.maximumInputLength=c.get("maximumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){if(b.term=b.term||"",this.maximumInputLength>0&&b.term.length>this.maximumInputLength)return void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}});a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;if(d.maximumSelectionLength>0&&f>=d.maximumSelectionLength)return void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}});a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<span class="select2-dropdown"><span class="select2-results"></span></span>');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="none" spellcheck="false" role="textbox" /></span>');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("focus",function(){c.isOpen()||e.$search.focus()}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){e.showSearch(a)?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){e.$results.offset().top+e.$results.outerHeight(!1)+50>=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1)&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('<li class="select2-results__option select2-results__option--load-more"role="treeitem" aria-disabled="true"></li>'),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a("<span></span>"),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(b){var c=a(this).data("select2-scroll-position");a(this).scrollTop(c.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id;this.$container.parents().filter(b.hasScroll).off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.top<f.top-h.height,k=i.bottom>f.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-n.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.position="relative",a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d<b.length;d++){var e=b[d];e.children?c+=a(e.children):c++}return c}function b(a,b,c,d){this.minimumResultsForSearch=c.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),a.call(this,b,c,d)}return b.prototype.showSearch=function(b,c){return!(a(c.data.results)<this.minimumResultsForSearch)&&b.call(this,c)},b}),b.define("select2/dropdown/selectOnClose",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("close",function(a){d._handleSelectOnClose(a)})},a.prototype._handleSelectOnClose=function(a,b){if(b&&null!=b.originalSelect2Event){var c=b.originalSelect2Event;if("select"===c._type||"unselect"===c._type)return}var d=this.getHighlightedResults();if(!(d.length<1)){var e=d.data("data");null!=e.element&&e.element.selected||null==e.element&&e.selected||this.trigger("select",{data:e})}},a}),b.define("select2/dropdown/closeOnSelect",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("select",function(a){d._selectTriggered(a)}),b.on("unselect",function(a){d._selectTriggered(a)})},a.prototype._selectTriggered=function(a,b){var c=b.originalEvent;c&&c.ctrlKey||this.trigger("close",{originalEvent:c,originalSelect2Event:b})},a}),b.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(a){var b=a.input.length-a.maximum,c="Please delete "+b+" character";return 1!=b&&(c+="s"),c},inputTooShort:function(a){return"Please enter "+(a.minimum-a.input.length)+" or more characters"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(a){var b="You can only select "+a.maximum+" item";return 1!=a.maximum&&(b+="s"),b},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),b.define("select2/defaults",["jquery","require","./results","./selection/single","./selection/multiple","./selection/placeholder","./selection/allowClear","./selection/search","./selection/eventRelay","./utils","./translation","./diacritics","./data/select","./data/array","./data/ajax","./data/tags","./data/tokenizer","./data/minimumInputLength","./data/maximumInputLength","./data/maximumSelectionLength","./dropdown","./dropdown/search","./dropdown/hidePlaceholder","./dropdown/infiniteScroll","./dropdown/attachBody","./dropdown/minimumResultsForSearch","./dropdown/selectOnClose","./dropdown/closeOnSelect","./i18n/en"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C){function D(){this.reset()}return D.prototype.apply=function(l){if(l=a.extend(!0,{},this.defaults,l),null==l.dataAdapter){if(null!=l.ajax?l.dataAdapter=o:null!=l.data?l.dataAdapter=n:l.dataAdapter=m,l.minimumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),null==l.tokenSeparators&&null==l.tokenizer||(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L<K.length;L++){var M=K[L],N={};try{N=k.loadPath(M)}catch(a){try{M=this.defaults.amdLanguageBase+M,N=k.loadPath(M)}catch(a){l.debug&&window.console&&console.warn&&console.warn('Select2: The language file for "'+M+'" could not be automatically loaded. A fallback will be used instead.');continue}}J.extend(N)}l.translations=J}else{var O=k.loadPath(this.defaults.amdLanguageBase+"en"),P=new k(l.language);P.extend(O),l.translations=P}return l},D.prototype.reset=function(){function b(a){function b(a){return l[a]||a}return a.replace(/[^\u0000-\u007E]/g,b)}function c(d,e){if(""===a.trim(d.term))return e;if(e.children&&e.children.length>0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){null==c(d,e.children[g])&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var h=b(e.text).toUpperCase(),i=b(d.term).toUpperCase();return h.indexOf(i)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)},new D}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),a.data("select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),a.data("data",a.data("select2Tags")),a.data("tags",!0)),a.data("ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",a.data("ajaxUrl")),a.data("ajax--url",a.data("ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,a.data()):a.data();var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return e<=0?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;h<i;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this.$element.on("focus.select2",function(a){b.trigger("focus",a)}),this._syncA=c.bind(this._syncAttributes,this),this._syncS=c.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._syncA),a.each(c,b._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",b._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",b._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",b._syncS,!1))},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype._syncSubtree=function(a,b){var c=!1,d=this;if(!a||!a.target||"OPTION"===a.target.nodeName||"OPTGROUP"===a.target.nodeName){if(b)if(b.addedNodes&&b.addedNodes.length>0)for(var e=0;e<b.addedNodes.length;e++){var f=b.addedNodes[e];f.selected&&(c=!0)}else b.removedNodes&&b.removedNodes.length>0&&(c=!0);else c=!0;c&&this.dataAdapter.current(function(a){d.trigger("selection:update",{data:a})})}},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),null!=a&&0!==a.length||(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},e.prototype.render=function(){var b=a('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),b.define("select2/compat/utils",["jquery"],function(a){function b(b,c,d){var e,f,g=[];e=a.trim(b.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0===this.indexOf("select2-")&&g.push(this)})),e=a.trim(c.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0!==this.indexOf("select2-")&&null!=(f=d(this))&&g.push(f)})),b.attr("class",g.join(" "))}return{syncCssClasses:b}}),b.define("select2/compat/containerCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("containerCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptContainerCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("containerCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/dropdownCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("dropdownCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptDropdownCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("dropdownCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/initSelection",["jquery"],function(a){function b(a,b,c){c.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `initSelection` option has been deprecated in favor of a custom data adapter that overrides the `current` method. This method is now called multiple times instead of a single time when the instance is initialized. Support will be removed for the `initSelection` option in future versions of Select2"),this.initSelection=c.get("initSelection"),this._isInitialized=!1,a.call(this,b,c)}return b.prototype.current=function(b,c){var d=this;if(this._isInitialized)return void b.call(this,c);this.initSelection.call(null,this.$element,function(b){d._isInitialized=!0,a.isArray(b)||(b=[b]),c(b)})},b}),b.define("select2/compat/inputData",["jquery"],function(a){function b(a,b,c){this._currentData=[],this._valueSeparator=c.get("valueSeparator")||",","hidden"===b.prop("type")&&c.get("debug")&&console&&console.warn&&console.warn("Select2: Using a hidden input with Select2 is no longer supported and may stop working in the future. It is recommended to use a `<select>` element instead."),a.call(this,b,c)}return b.prototype.current=function(b,c){function d(b,c){var e=[];return b.selected||-1!==a.inArray(b.id,c)?(b.selected=!0,e.push(b)):b.selected=!1,b.children&&e.push.apply(e,d(b.children,c)),e}for(var e=[],f=0;f<this._currentData.length;f++){var g=this._currentData[f];e.push.apply(e,d(g,this.$element.val().split(this._valueSeparator)))}c(e)},b.prototype.select=function(b,c){if(this.options.get("multiple")){var d=this.$element.val();d+=this._valueSeparator+c.id,this.$element.val(d),this.$element.trigger("change")}else this.current(function(b){a.map(b,function(a){a.selected=!1})}),this.$element.val(c.id),this.$element.trigger("change")},b.prototype.unselect=function(a,b){var c=this;b.selected=!1,this.current(function(a){for(var d=[],e=0;e<a.length;e++){var f=a[e];b.id!=f.id&&d.push(f.id)}c.$element.val(d.join(c._valueSeparator)),c.$element.trigger("change")})},b.prototype.query=function(a,b,c){for(var d=[],e=0;e<this._currentData.length;e++){var f=this._currentData[e],g=this.matches(b,f);null!==g&&d.push(g)}c({results:d})},b.prototype.addOptions=function(b,c){var d=a.map(c,function(b){return a.data(b[0],"data")});this._currentData.push.apply(this._currentData,d)},b}),b.define("select2/compat/matcher",["jquery"],function(a){function b(b){function c(c,d){var e=a.extend(!0,{},d);if(null==c.term||""===a.trim(c.term))return e;if(d.children){for(var f=d.children.length-1;f>=0;f--){var g=d.children[f];b(c.term,g.text,g)||e.children.splice(f,1)}if(e.children.length>0)return e}return b(c.term,d.text,d)?e:null}return c}return b}),b.define("select2/compat/query",[],function(){function a(a,b,c){c.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `query` option has been deprecated in favor of a custom data adapter that overrides the `query` method. Support will be removed for the `query` option in future versions of Select2."),a.call(this,b,c)}return a.prototype.query=function(a,b,c){b.callback=c,this.options.get("query").call(null,b)},a}),b.define("select2/dropdown/attachContainer",[],function(){function a(a,b,c){a.call(this,b,c)}return a.prototype.position=function(a,b,c){c.find(".dropdown-wrapper").append(b),b.addClass("select2-dropdown--below"),c.addClass("select2-container--below")},a}),b.define("select2/dropdown/stopPropagation",[],function(){function a(){}return a.prototype.bind=function(a,b,c){a.call(this,b,c);var d=["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"];this.$dropdown.on(d.join(" "),function(a){a.stopPropagation()})},a}),b.define("select2/selection/stopPropagation",[],function(){function a(){}return a.prototype.bind=function(a,b,c){a.call(this,b,c);var d=["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"];this.$selection.on(d.join(" "),function(a){a.stopPropagation()})},a}),function(c){"function"==typeof b.define&&b.define.amd?b.define("jquery-mousewheel",["jquery"],c):"object"==typeof exports?module.exports=c:c(a)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||n<f)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120==0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})}),b.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults"],function(a,b,c,d){if(null==a.fn.select2){var e=["open","close","destroy"];a.fn.select2=function(b){if("object"==typeof(b=b||{}))return this.each(function(){var d=a.extend(!0,{},b);new c(a(this),d)}),this;if("string"==typeof b){var d,f=Array.prototype.slice.call(arguments,1);return this.each(function(){var c=a(this).data("select2");null==c&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2."),d=c[b].apply(c,f)}),a.inArray(b,e)>-1?this:d}throw new Error("Invalid arguments for Select2: "+b)}}return null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c});
assets/js/select2/select2.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}
assets/js/term-multiselect.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(function(){jQuery(".job-manager-category-dropdown").chosen(job_manager_chosen_multiselect_args)});
1
+ jQuery(function(e){e.isFunction(e.fn.select2)&&"undefined"!=typeof job_manager_select2_args&&e(".job-manager-category-dropdown:visible").select2(job_manager_select2_args)});
changelog.txt CHANGED
@@ -1,3 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  = 1.31.3 =
2
  * Fix: Escape the attachment URL. (Props to karimeo)
3
  * Fix: Custom job field priority fix when using decimals. (@tripflex)
1
+ = 1.32.0 =
2
+ * Enhancement: Switched from Chosen to Select2 for enhanced dropdown handling and better mobile support. May require theme update.
3
+ * Enhancement: Draft and unsubmitted job listings now appear in `[job_dashboard]`, allowing users to complete their submission.
4
+ * Enhancement: Filled and expired positions are now hidden from WordPress search. (@felipeelia)
5
+ * Enhancement: Adds additional support for the new block editor. Restricted to classic block for compatibility with frontend editor.
6
+ * Enhancement: Job types can be preselected in `[jobs]` shortcode with `?search_job_type=term-slug`. (@felipeelia)
7
+ * Enhancement: Author selection in WP admin now uses a searchable dropdown.
8
+ * Enhancement: Setup wizard is accessed with a flash message instead of an automatic redirect upon activation.
9
+ * Enhancement: When using supported themes, job listing archive slug can be changed in Permalink settings.
10
+ * Fix: Company tagline alignment issue with company name. (@0xDELS)
11
+ * Fix: "Load Previous Listings" link unnecessarily shows up on `[jobs]` shortcode. (@tonytettinger)
12
+ * Fix: Category selector fixed in the job listings page in WP Admin. (@AmandaJBell)
13
+ * Fix: Issue with quote encoding on Apply for Job email link.
14
+ * Fix: Link `target` attributes have been removed in templates.
15
+ * Dev: Allow for job submission flow to be interrupted using `before` argument on form steps.
16
+ * Dev: HTML allowed in custom company field labels. (@tripflex)
17
+ * Dev: Job feed slug name can be customized with the `job_manager_job_feed_name` filter.
18
+ * Deprecated: Unreleased REST API implementation using `WPJM_REST_API_ENABLED` was replaced with standard WP REST API.
19
+
20
  = 1.31.3 =
21
  * Fix: Escape the attachment URL. (Props to karimeo)
22
  * Fix: Custom job field priority fix when using decimals. (@tripflex)
includes/3rd-party/polylang.php CHANGED
@@ -65,3 +65,16 @@ function polylang_wpjm_page_id( $page_id ) {
65
  return absint( $page_id );
66
  }
67
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  return absint( $page_id );
66
  }
67
 
68
+ /**
69
+ * Tells Polylang about ajax requests
70
+ * The filter is applied *before* the action 'pll_init'
71
+ *
72
+ * @since 1.32.0
73
+ *
74
+ * @param bool $is_ajax
75
+ * @return bool
76
+ */
77
+ function polylang_wpjm_doing_ajax( $is_ajax ) {
78
+ return false === strpos( $_SERVER['REQUEST_URI'], '/jm-ajax/' ) ? $is_ajax : true;
79
+ }
80
+ add_filter( 'pll_is_ajax_on_front', 'polylang_wpjm_doing_ajax' );
includes/abstracts/abstract-wp-job-manager-form.php CHANGED
@@ -97,6 +97,15 @@ abstract class WP_Job_Manager_Form {
97
 
98
  $next_step_key = $this->get_step_key( $this->step );
99
 
 
 
 
 
 
 
 
 
 
100
  // if the step changed, but the next step has no 'view', call the next handler in sequence.
101
  if ( $next_step_key && $step_key !== $next_step_key && ! is_callable( $this->steps[ $next_step_key ]['view'] ) ) {
102
  $this->process();
@@ -374,7 +383,17 @@ abstract class WP_Job_Manager_Form {
374
  }
375
  }
376
 
377
- return $values;
 
 
 
 
 
 
 
 
 
 
378
  }
379
 
380
  /**
97
 
98
  $next_step_key = $this->get_step_key( $this->step );
99
 
100
+ // If the next step has a handler to call before going to the view, run it now.
101
+ if ( $next_step_key
102
+ && $step_key !== $next_step_key
103
+ && isset( $this->steps[ $next_step_key ]['before'] )
104
+ && is_callable( $this->steps[ $next_step_key ]['before'] )
105
+ ) {
106
+ call_user_func( $this->steps[ $next_step_key ]['before'] );
107
+ }
108
+
109
  // if the step changed, but the next step has no 'view', call the next handler in sequence.
110
  if ( $next_step_key && $step_key !== $next_step_key && ! is_callable( $this->steps[ $next_step_key ]['view'] ) ) {
111
  $this->process();
383
  }
384
  }
385
 
386
+ /**
387
+ * Alter values for posted fields.
388
+ *
389
+ * Before submitting or editing a job, alter the posted values before they get stored into the database.
390
+ *
391
+ * @since 1.32.0
392
+ *
393
+ * @param array $values The values that have been submitted.
394
+ * @param array $fields The form fields.
395
+ */
396
+ return apply_filters( 'job_manager_get_posted_fields', $values, $this->fields );
397
  }
398
 
399
  /**
includes/admin/class-wp-job-manager-admin-notices.php ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Handles notices in WP admin.
4
+ *
5
+ * @package wp-job-manager
6
+ */
7
+
8
+ if ( ! defined( 'ABSPATH' ) ) {
9
+ exit; // Exit if accessed directly.
10
+ }
11
+
12
+ /**
13
+ * WP_Job_Manager_Admin_Notices class.
14
+ *
15
+ * @since 1.32.0
16
+ */
17
+ class WP_Job_Manager_Admin_Notices {
18
+ const STATE_OPTION = 'job_manager_admin_notices';
19
+ const NOTICE_CORE_SETUP = 'core_setup';
20
+
21
+ /**
22
+ * Current notices for admin user.
23
+ *
24
+ * @var array
25
+ */
26
+ private static $notice_state;
27
+
28
+ /**
29
+ * Initialize admin notice handling.
30
+ */
31
+ public static function init() {
32
+ add_action( 'job_manager_init_admin_notices', array( __CLASS__, 'init_core_notices' ) );
33
+ add_action( 'admin_notices', array( __CLASS__, 'display_notices' ) );
34
+ add_action( 'wp_loaded', array( __CLASS__, 'dismiss_notices' ) );
35
+ }
36
+
37
+ /**
38
+ * Add a notice to be displayed in WP admin.
39
+ *
40
+ * @since 1.32.0
41
+ *
42
+ * @param string $notice Name of the notice.
43
+ */
44
+ public static function add_notice( $notice ) {
45
+ $notice = sanitize_key( $notice );
46
+
47
+ if ( ! in_array( $notice, self::get_notice_state() ) ) {
48
+ self::$notice_state[] = $notice;
49
+ self::save_notice_state();
50
+ }
51
+ }
52
+
53
+ /**
54
+ * Remove a notice from those displayed in WP admin.
55
+ *
56
+ * @since 1.32.0
57
+ *
58
+ * @param string $notice Name of the notice.
59
+ */
60
+ public static function remove_notice( $notice ) {
61
+ $notice_state = self::get_notice_state();
62
+ $notice = sanitize_key( $notice );
63
+
64
+ $notice_key = array_search( $notice, $notice_state, true );
65
+ if ( false !== $notice_key ) {
66
+ unset( $notice_state[ $notice_key ] );
67
+ self::$notice_state = array_values( $notice_state );
68
+ self::save_notice_state();
69
+ }
70
+ }
71
+
72
+ /**
73
+ * Clears all enqueued notices.
74
+ */
75
+ public static function reset_notices() {
76
+ self::$notice_state = array();
77
+ self::save_notice_state();
78
+ }
79
+
80
+ /**
81
+ * Check for a notice to be displayed in WP admin.
82
+ *
83
+ * @since 1.32.0
84
+ *
85
+ * @param string $notice Name of the notice. Name is not sanitized for this method.
86
+ * @return bool
87
+ */
88
+ public static function has_notice( $notice ) {
89
+ $notice_state = self::get_notice_state();
90
+ return in_array( $notice, $notice_state, true );
91
+ }
92
+
93
+ /**
94
+ * Set up filters for core admin notices.
95
+ *
96
+ * Note: For internal use only. Do not call manually.
97
+ */
98
+ public static function init_core_notices() {
99
+ // core_setup: Notice is used when first activating WP Job Manager.
100
+ add_action( 'job_manager_admin_notice_' . self::NOTICE_CORE_SETUP, array( __CLASS__, 'display_core_setup' ) );
101
+ }
102
+
103
+ /**
104
+ * Dismiss notices as requested by user. Inspired by WooCommerce's approach.
105
+ */
106
+ public static function dismiss_notices() {
107
+ if ( isset( $_GET['wpjm_hide_notice'] ) && isset( $_GET['_wpjm_notice_nonce'] ) ) { // WPCS: input var ok, CSRF ok.
108
+ if ( ! wp_verify_nonce( sanitize_key( wp_unslash( $_GET['_wpjm_notice_nonce'] ) ), 'job_manager_hide_notices_nonce' ) ) { // WPCS: input var ok, CSRF ok.
109
+ wp_die( esc_html__( 'Action failed. Please refresh the page and retry.', 'wp-job-manager' ) );
110
+ }
111
+
112
+ if ( ! current_user_can( 'manage_options' ) ) {
113
+ wp_die( esc_html__( 'You don&#8217;t have permission to do this.', 'wp-job-manager' ) );
114
+ }
115
+
116
+ $hide_notice = sanitize_key( wp_unslash( $_GET['wpjm_hide_notice'] ) ); // WPCS: input var ok, CSRF ok.
117
+
118
+ self::remove_notice( $hide_notice );
119
+ wp_redirect( remove_query_arg( array( 'wpjm_hide_notice', '_wpjm_notice_nonce' ), $_SERVER['REQUEST_URI'] ) );
120
+ }
121
+ }
122
+
123
+
124
+ /**
125
+ * Displays notices in WP admin.
126
+ *
127
+ * Note: For internal use only. Do not call manually.
128
+ */
129
+ public static function display_notices() {
130
+ /**
131
+ * Allows WPJM related plugins to set up their notice hooks.
132
+ *
133
+ * @since 1.32.0
134
+ */
135
+ do_action( 'job_manager_init_admin_notices' );
136
+
137
+ $notice_state = self::get_notice_state();
138
+ foreach ( $notice_state as $notice ) {
139
+ /**
140
+ * Allows suppression of individual admin notices.
141
+ *
142
+ * @since 1.32.0
143
+ *
144
+ * @param bool $do_show_notice Set to false to prevent an admin notice from showing up.
145
+ */
146
+
147
+ if ( ! apply_filters( 'job_manager_show_admin_notice_' . $notice, true ) ) {
148
+ continue;
149
+ }
150
+
151
+ /**
152
+ * Handle the display of the admin notice.
153
+ *
154
+ * @since 1.32.0
155
+ */
156
+ do_action( 'job_manager_admin_notice_' . $notice );
157
+ }
158
+ }
159
+
160
+ /**
161
+ * Helper for display functions to check if current request is for admin on a job manager screen.
162
+ *
163
+ * @param array $additional_screens Screen IDs to also show a notice on.
164
+ * @return bool
165
+ */
166
+ public static function is_admin_on_standard_job_manager_screen( $additional_screens = array() ) {
167
+ $screen = get_current_screen();
168
+ $screen_id = $screen ? $screen->id : '';
169
+ $show_on_screens = array_merge( array(
170
+ 'edit-job_listing',
171
+ 'edit-job_listing_category',
172
+ 'edit-job_listing_type',
173
+ 'job_listing_page_job-manager-addons',
174
+ 'job_listing_page_job-manager-settings',
175
+ ), $additional_screens );
176
+
177
+ if ( ! current_user_can( 'manage_options' ) ) {
178
+ return false;
179
+ }
180
+
181
+ if ( ! in_array( $screen_id, $show_on_screens, true ) ) {
182
+ return false;
183
+ }
184
+
185
+ return true;
186
+ }
187
+
188
+ /**
189
+ * Displays the setup wizard notice when WPJM is first activated.
190
+ *
191
+ * Note: For internal use only. Do not call manually.
192
+ */
193
+ public static function display_core_setup() {
194
+ if ( ! self::is_admin_on_standard_job_manager_screen( array( 'plugins', 'dashboard' ) ) ) {
195
+ return;
196
+ }
197
+ include dirname( __FILE__ ) . '/views/html-admin-notice-core-setup.php';
198
+ }
199
+
200
+ /**
201
+ * Gets the current admin notices to be displayed.
202
+ *
203
+ * @return array
204
+ */
205
+ private static function get_notice_state() {
206
+ if ( null === self::$notice_state ) {
207
+ self::$notice_state = json_decode( get_option( self::STATE_OPTION, '[]' ), true );
208
+ if ( ! is_array( self::$notice_state ) ) {
209
+ self::$notice_state = array();
210
+ }
211
+ }
212
+ return self::$notice_state;
213
+ }
214
+
215
+ /**
216
+ * Saves the notice state on shutdown.
217
+ */
218
+ private static function save_notice_state() {
219
+ if ( null === self::$notice_state ) {
220
+ return;
221
+ }
222
+
223
+ update_option( self::STATE_OPTION, wp_json_encode( self::get_notice_state() ), false );
224
+ }
225
+ }
226
+
227
+ WP_Job_Manager_Admin_Notices::init();
includes/admin/class-wp-job-manager-admin.php CHANGED
@@ -40,6 +40,7 @@ class WP_Job_Manager_Admin {
40
  public function __construct() {
41
  global $wp_version;
42
 
 
43
  include_once dirname( __FILE__ ) . '/class-wp-job-manager-cpt.php';
44
  if ( version_compare( $wp_version, '4.7.0', '<' ) ) {
45
  include_once dirname( __FILE__ ) . '/class-wp-job-manager-cpt-legacy.php';
@@ -86,7 +87,7 @@ class WP_Job_Manager_Admin {
86
 
87
  echo '<div class="error">';
88
  // translators: %s is the URL for the page where users can go to update WordPress.
89
- echo '<p>' . wp_kses_post( sprintf( __( '<strong>WP Job Manager</strong> requires a more recent version of WordPress. <a href="%s">Please update WordPresse</a> to avoid issues.', 'wp-job-manager' ), esc_url( self_admin_url( 'update-core.php' ) ) ) ) . '</p>';
90
  echo '</div>';
91
  }
92
 
@@ -121,14 +122,33 @@ class WP_Job_Manager_Admin {
121
  * Enqueues CSS and JS assets.
122
  */
123
  public function admin_enqueue_scripts() {
124
- $screen = get_current_screen();
125
 
 
126
  if ( in_array( $screen->id, apply_filters( 'job_manager_admin_screen_ids', array( 'edit-job_listing', 'plugins', 'job_listing', 'job_listing_page_job-manager-settings', 'job_listing_page_job-manager-addons' ) ), true ) ) {
127
  wp_enqueue_style( 'jquery-ui' );
 
128
  wp_enqueue_style( 'job_manager_admin_css', JOB_MANAGER_PLUGIN_URL . '/assets/css/admin.css', array(), JOB_MANAGER_VERSION );
129
  wp_register_script( 'jquery-tiptip', JOB_MANAGER_PLUGIN_URL . '/assets/js/jquery-tiptip/jquery.tipTip.min.js', array( 'jquery' ), JOB_MANAGER_VERSION, true );
130
  wp_enqueue_script( 'job_manager_datepicker_js', JOB_MANAGER_PLUGIN_URL . '/assets/js/datepicker.min.js', array( 'jquery', 'jquery-ui-datepicker' ), JOB_MANAGER_VERSION, true );
131
- wp_enqueue_script( 'job_manager_admin_js', JOB_MANAGER_PLUGIN_URL . '/assets/js/admin.min.js', array( 'jquery', 'jquery-tiptip' ), JOB_MANAGER_VERSION, true );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
 
133
  if ( ! function_exists( 'wp_localize_jquery_ui_datepicker' ) || ! has_action( 'admin_enqueue_scripts', 'wp_localize_jquery_ui_datepicker' ) ) {
134
  wp_localize_script(
40
  public function __construct() {
41
  global $wp_version;
42
 
43
+ include_once dirname( __FILE__ ) . '/class-wp-job-manager-admin-notices.php';
44
  include_once dirname( __FILE__ ) . '/class-wp-job-manager-cpt.php';
45
  if ( version_compare( $wp_version, '4.7.0', '<' ) ) {
46
  include_once dirname( __FILE__ ) . '/class-wp-job-manager-cpt-legacy.php';
87
 
88
  echo '<div class="error">';
89
  // translators: %s is the URL for the page where users can go to update WordPress.
90
+ echo '<p>' . wp_kses_post( sprintf( __( '<strong>WP Job Manager</strong> requires a more recent version of WordPress. <a href="%s">Please update WordPress</a> to avoid issues.', 'wp-job-manager' ), esc_url( self_admin_url( 'update-core.php' ) ) ) ) . '</p>';
91
  echo '</div>';
92
  }
93
 
122
  * Enqueues CSS and JS assets.
123
  */
124
  public function admin_enqueue_scripts() {
125
+ WP_Job_Manager::register_select2_assets();
126
 
127
+ $screen = get_current_screen();
128
  if ( in_array( $screen->id, apply_filters( 'job_manager_admin_screen_ids', array( 'edit-job_listing', 'plugins', 'job_listing', 'job_listing_page_job-manager-settings', 'job_listing_page_job-manager-addons' ) ), true ) ) {
129
  wp_enqueue_style( 'jquery-ui' );
130
+ wp_enqueue_style( 'select2' );
131
  wp_enqueue_style( 'job_manager_admin_css', JOB_MANAGER_PLUGIN_URL . '/assets/css/admin.css', array(), JOB_MANAGER_VERSION );
132
  wp_register_script( 'jquery-tiptip', JOB_MANAGER_PLUGIN_URL . '/assets/js/jquery-tiptip/jquery.tipTip.min.js', array( 'jquery' ), JOB_MANAGER_VERSION, true );
133
  wp_enqueue_script( 'job_manager_datepicker_js', JOB_MANAGER_PLUGIN_URL . '/assets/js/datepicker.min.js', array( 'jquery', 'jquery-ui-datepicker' ), JOB_MANAGER_VERSION, true );
134
+ wp_enqueue_script( 'job_manager_admin_js', JOB_MANAGER_PLUGIN_URL . '/assets/js/admin.min.js', array( 'jquery', 'jquery-tiptip', 'select2' ), JOB_MANAGER_VERSION, true );
135
+
136
+ wp_localize_script(
137
+ 'job_manager_admin_js',
138
+ 'job_manager_admin_params',
139
+ array(
140
+ 'user_selection_strings' => array(
141
+ 'no_matches' => _x( 'No matches found', 'user selection', 'wp-job-manager' ),
142
+ 'ajax_error' => _x( 'Loading failed', 'user selection', 'wp-job-manager' ),
143
+ 'input_too_short_1' => _x( 'Please enter 1 or more characters', 'user selection', 'wp-job-manager' ),
144
+ 'input_too_short_n' => _x( 'Please enter %qty% or more characters', 'user selection', 'wp-job-manager' ),
145
+ 'load_more' => _x( 'Loading more results&hellip;', 'user selection', 'wp-job-manager' ),
146
+ 'searching' => _x( 'Searching&hellip;', 'user selection', 'wp-job-manager' ),
147
+ ),
148
+ 'ajax_url' => admin_url( 'admin-ajax.php' ),
149
+ 'search_users_nonce' => wp_create_nonce( 'search-users' ),
150
+ )
151
+ );
152
 
153
  if ( ! function_exists( 'wp_localize_jquery_ui_datepicker' ) || ! has_action( 'admin_enqueue_scripts', 'wp_localize_jquery_ui_datepicker' ) ) {
154
  wp_localize_script(
includes/admin/class-wp-job-manager-cpt.php CHANGED
@@ -306,9 +306,17 @@ class WP_Job_Manager_CPT {
306
  return;
307
  }
308
 
 
 
 
 
 
 
 
 
309
  echo "<select name='job_listing_category' id='dropdown_job_listing_category'>";
310
  echo '<option value="" ' . selected( isset( $_GET['job_listing_category'] ) ? $_GET['job_listing_category'] : '', '', false ) . '>' . esc_html__( 'Select category', 'wp-job-manager' ) . '</option>';
311
- echo wp_kses_post( $walker->walk( $terms, 0, $r ) );
312
  echo '</select>';
313
 
314
  }
306
  return;
307
  }
308
 
309
+ $allowed_html = array(
310
+ 'option' => array(
311
+ 'value' => array(),
312
+ 'selected' => array(),
313
+ 'class' => array(),
314
+ ),
315
+ );
316
+
317
  echo "<select name='job_listing_category' id='dropdown_job_listing_category'>";
318
  echo '<option value="" ' . selected( isset( $_GET['job_listing_category'] ) ? $_GET['job_listing_category'] : '', '', false ) . '>' . esc_html__( 'Select category', 'wp-job-manager' ) . '</option>';
319
+ echo wp_kses( $walker->walk( $terms, 0, $r ), $allowed_html );
320
  echo '</select>';
321
 
322
  }
includes/admin/class-wp-job-manager-permalink-settings.php CHANGED
@@ -76,6 +76,24 @@ class WP_Job_Manager_Permalink_Settings {
76
  'permalink',
77
  'optional'
78
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  }
80
 
81
  /**
@@ -118,12 +136,17 @@ class WP_Job_Manager_Permalink_Settings {
118
  switch_to_locale( get_locale() );
119
  }
120
 
121
- $permalinks = (array) get_option( 'wpjm_permalinks', array() );
122
- $permalinks['job_base'] = sanitize_title_with_dashes( $_POST['wpjm_job_base_slug'] );
123
- $permalinks['category_base'] = sanitize_title_with_dashes( $_POST['wpjm_job_category_slug'] );
124
- $permalinks['type_base'] = sanitize_title_with_dashes( $_POST['wpjm_job_type_slug'] );
 
 
 
 
 
125
 
126
- update_option( 'wpjm_permalinks', $permalinks );
127
 
128
  if ( function_exists( 'restore_current_locale' ) ) {
129
  restore_current_locale();
76
  'permalink',
77
  'optional'
78
  );
79
+ if ( current_theme_supports( 'job-manager-templates' ) ) {
80
+ add_settings_field(
81
+ 'wpjm_job_listings_archive_slug',
82
+ __( 'Job listing archive page', 'wp-job-manager' ),
83
+ array( $this, 'job_listings_archive_slug_input' ),
84
+ 'permalink',
85
+ 'optional'
86
+ );
87
+ }
88
+ }
89
+
90
+ /**
91
+ * Show a slug input box for job listing archive slug.
92
+ */
93
+ public function job_listings_archive_slug_input() {
94
+ ?>
95
+ <input name="wpjm_job_listings_archive_slug" type="text" class="regular-text code" value="<?php echo esc_attr( $this->permalinks['jobs_archive'] ); ?>" placeholder="<?php echo esc_attr( $this->permalinks['jobs_archive_rewrite_slug'] ); ?>" />
96
+ <?php
97
  }
98
 
99
  /**
136
  switch_to_locale( get_locale() );
137
  }
138
 
139
+ $permalink_settings = WP_Job_Manager_Post_Types::get_raw_permalink_settings();
140
+
141
+ $permalink_settings['job_base'] = sanitize_title_with_dashes( $_POST['wpjm_job_base_slug'] );
142
+ $permalink_settings['category_base'] = sanitize_title_with_dashes( $_POST['wpjm_job_category_slug'] );
143
+ $permalink_settings['type_base'] = sanitize_title_with_dashes( $_POST['wpjm_job_type_slug'] );
144
+
145
+ if ( isset( $_POST['wpjm_job_listings_archive_slug'] ) ) {
146
+ $permalink_settings['jobs_archive'] = sanitize_title_with_dashes( $_POST['wpjm_job_listings_archive_slug'] );
147
+ }
148
 
149
+ update_option( WP_Job_Manager_Post_Types::PERMALINK_OPTION_NAME, wp_json_encode( $permalink_settings ) );
150
 
151
  if ( function_exists( 'restore_current_locale' ) ) {
152
  restore_current_locale();
includes/admin/class-wp-job-manager-setup.php CHANGED
@@ -39,7 +39,6 @@ class WP_Job_Manager_Setup {
39
  public function __construct() {
40
  add_action( 'admin_menu', array( $this, 'admin_menu' ), 12 );
41
  add_action( 'admin_head', array( $this, 'admin_head' ) );
42
- add_action( 'admin_init', array( $this, 'redirect' ) );
43
  if ( isset( $_GET['page'] ) && 'job-manager-setup' === $_GET['page'] ) {
44
  add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ), 12 );
45
  }
@@ -59,35 +58,6 @@ class WP_Job_Manager_Setup {
59
  remove_submenu_page( 'index.php', 'job-manager-setup' );
60
  }
61
 
62
- /**
63
- * Sends user to the setup page on first activation.
64
- */
65
- public function redirect() {
66
- // Bail if no activation redirect transient is set.
67
- if ( ! get_transient( '_job_manager_activation_redirect' ) ) {
68
- return;
69
- }
70
-
71
- if ( ! current_user_can( 'manage_options' ) ) {
72
- return;
73
- }
74
-
75
- // Delete the redirect transient.
76
- delete_transient( '_job_manager_activation_redirect' );
77
-
78
- // Bail if activating from network, or bulk, or within an iFrame.
79
- if ( is_network_admin() || isset( $_GET['activate-multi'] ) || defined( 'IFRAME_REQUEST' ) ) {
80
- return;
81
- }
82
-
83
- if ( ( isset( $_GET['action'] ) && 'upgrade-plugin' === $_GET['action'] ) && ( isset( $_GET['plugin'] ) && strstr( $_GET['plugin'], 'wp-job-manager.php' ) ) ) {
84
- return;
85
- }
86
-
87
- wp_redirect( admin_url( 'index.php?page=job-manager-setup' ) );
88
- exit;
89
- }
90
-
91
  /**
92
  * Enqueues scripts for setup page.
93
  */
@@ -125,8 +95,10 @@ class WP_Job_Manager_Setup {
125
  */
126
  public function setup_page() {
127
  $usage_tracking = WP_Job_Manager_Usage_Tracking::get_instance();
 
128
 
129
  if ( 'POST' === $_SERVER['REQUEST_METHOD'] ) {
 
130
  $enable = isset( $_POST['job_manager_usage_tracking_enabled'] )
131
  && '1' === $_POST['job_manager_usage_tracking_enabled'];
132
 
@@ -137,6 +109,32 @@ class WP_Job_Manager_Setup {
137
  $usage_tracking->set_tracking_enabled( $enable );
138
  $usage_tracking->hide_tracking_opt_in();
139
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  }
141
 
142
  $this->output();
@@ -144,6 +142,8 @@ class WP_Job_Manager_Setup {
144
 
145
  /**
146
  * Usage tracking opt in text for setup page.
 
 
147
  */
148
  private function opt_in_text() {
149
  return WP_Job_Manager_Usage_Tracking::get_instance()->opt_in_checkbox_text();
@@ -151,27 +151,14 @@ class WP_Job_Manager_Setup {
151
 
152
  /**
153
  * Output opt-in checkbox if usage tracking isn't already enabled.
 
 
154
  */
155
  private function maybe_output_opt_in_checkbox() {
156
  // Only show the checkbox if we aren't already opted in.
157
  $usage_tracking = WP_Job_Manager_Usage_Tracking::get_instance();
158
  if ( ! $usage_tracking->get_tracking_enabled() ) {
159
- ?>
160
- <p>
161
- <label>
162
- <input
163
- type="checkbox"
164
- name="job_manager_usage_tracking_enabled"
165
- value="1" />
166
- <?php
167
- echo wp_kses(
168
- $this->opt_in_text(),
169
- $usage_tracking->opt_in_dialog_text_allowed_html()
170
- );
171
- ?>
172
- </label>
173
- </p>
174
- <?php
175
  }
176
  }
177
 
@@ -181,195 +168,15 @@ class WP_Job_Manager_Setup {
181
  public function output() {
182
  $step = ! empty( $_GET['step'] ) ? absint( $_GET['step'] ) : 1;
183
 
184
- if ( 3 === $step && ! empty( $_POST ) ) {
185
- if ( false === wp_verify_nonce( $_REQUEST['setup_wizard'], 'step_3' ) ) {
186
- wp_die( 'Error in nonce. Try again.', 'wp-job-manager' );
187
- }
188
- $create_pages = isset( $_POST['wp-job-manager-create-page'] ) ? $_POST['wp-job-manager-create-page'] : array();
189
- $page_titles = $_POST['wp-job-manager-page-title'];
190
- $pages_to_create = array(
191
- 'submit_job_form' => '[submit_job_form]',
192
- 'job_dashboard' => '[job_dashboard]',
193
- 'jobs' => '[jobs]',
194
- );
195
-
196
- foreach ( $pages_to_create as $page => $content ) {
197
- if ( ! isset( $create_pages[ $page ] ) || empty( $page_titles[ $page ] ) ) {
198
- continue;
199
- }
200
- $this->create_page( sanitize_text_field( $page_titles[ $page ] ), $content, 'job_manager_' . $page . '_page_id' );
201
- }
202
  }
203
- ?>
204
- <div class="wrap wp_job_manager wp_job_manager_addons_wrap">
205
- <h2><?php esc_html_e( 'WP Job Manager Setup', 'wp-job-manager' ); ?></h2>
206
-
207
- <ul class="wp-job-manager-setup-steps">
208
- <?php
209
- $step_classes = array_fill( 1, 3, '' );
210
- $step_classes[ $step ] = 'wp-job-manager-setup-active-step';
211
- ?>
212
- <li class="<?php echo sanitize_html_class( $step_classes[1] ); ?>"><?php esc_html_e( '1. Introduction', 'wp-job-manager' ); ?></li>
213
- <li class="<?php echo sanitize_html_class( $step_classes[2] ); ?>"><?php esc_html_e( '2. Page Setup', 'wp-job-manager' ); ?></li>
214
- <li class="<?php echo sanitize_html_class( $step_classes[3] ); ?>"><?php esc_html_e( '3. Done', 'wp-job-manager' ); ?></li>
215
- </ul>
216
-
217
- <?php if ( 1 === $step ) : ?>
218
-
219
- <h3><?php esc_html_e( 'Welcome to the Setup Wizard!', 'wp-job-manager' ); ?></h3>
220
-
221
- <p><?php echo wp_kses_post( __( 'Thanks for installing <em>WP Job Manager</em>! Let\'s get your site ready to accept job listings.', 'wp-job-manager' ) ); ?></p>
222
- <p><?php echo wp_kses_post( __( 'This setup wizard will walk you through the process of creating pages for job submissions, management, and listings.', 'wp-job-manager' ) ); ?></p>
223
- <p>
224
- <?php
225
- // translators: Placeholder %s is the path to WPJM documentation site.
226
- echo wp_kses_post( sprintf( __( 'If you\'d prefer to skip this and set up your pages manually, our <a href="%s">documentation</a> will walk you through each step.', 'wp-job-manager' ), 'https://wpjobmanager.com/documentation/' ) );
227
- ?>
228
- </p>
229
-
230
- <form method="post" action="<?php echo esc_url( add_query_arg( 'step', 2 ) ); ?>">
231
- <input type="hidden" name="nonce" value="<?php echo esc_attr( wp_create_nonce( 'enable-usage-tracking' ) ); ?>" />
232
-
233
- <?php $this->maybe_output_opt_in_checkbox(); ?>
234
-
235
- <p class="submit">
236
- <input type="submit" value="<?php esc_html_e( 'Start setup', 'wp-job-manager' ); ?>" class="button button-primary" />
237
- <a href="<?php echo esc_url( add_query_arg( 'skip-job-manager-setup', 1, admin_url( 'index.php?page=job-manager-setup&step=3' ) ) ); ?>" class="button"><?php esc_html_e( 'Skip setup. I will set up the plugin manually.', 'wp-job-manager' ); ?></a>
238
- </p>
239
- </form>
240
-
241
- <?php endif; ?>
242
- <?php if ( 2 === $step ) : ?>
243
-
244
- <h3><?php esc_html_e( 'Page Setup', 'wp-job-manager' ); ?></h3>
245
-
246
- <p><?php esc_html_e( 'With WP Job Manager, employers and applicants can post, manage, and browse job listings right on your website. Tell us which of these common pages you\'d like your site to have and we\'ll create and configure them for you.', 'wp-job-manager' ); ?></p>
247
- <p>
248
- <?php
249
- echo wp_kses_post( sprintf(
250
- // translators: %1$s is URL to WordPress core shortcode documentation. %2$s is URL to WPJM specific shortcode reference.
251
- __( '(These pages are created using <a href="%1$s" title="What is a shortcode?" target="_blank" class="help-page-link">shortcodes</a>,
252
- which we take care of in this step. If you\'d like to build these pages yourself or want to add one of these options to an existing
253
- page on your site, you can skip this step and take a look at <a href="%2$s" target="_blank" class="help-page-link">shortcode documentation</a> for detailed instructions.)', 'wp-job-manager' ),
254
- 'http://codex.wordpress.org/Shortcode',
255
- 'https://wpjobmanager.com/document/shortcode-reference/'
256
- ) );
257
- ?>
258
- </p>
259
-
260
- <form action="<?php echo esc_url( add_query_arg( 'step', 3 ) ); ?>" method="post">
261
- <?php wp_nonce_field( 'step_3', 'setup_wizard' ); ?>
262
- <table class="wp-job-manager-shortcodes widefat">
263
- <thead>
264
- <tr>
265
- <th>&nbsp;</th>
266
- <th><?php esc_html_e( 'Page Title', 'wp-job-manager' ); ?></th>
267
- <th><?php esc_html_e( 'Page Description', 'wp-job-manager' ); ?></th>
268
- <th><?php esc_html_e( 'Content Shortcode', 'wp-job-manager' ); ?></th>
269
- </tr>
270
- </thead>
271
- <tbody>
272
- <tr>
273
- <td><input type="checkbox" checked="checked" name="wp-job-manager-create-page[submit_job_form]" /></td>
274
- <td><input type="text" value="<?php echo esc_attr( _x( 'Post a Job', 'Default page title (wizard)', 'wp-job-manager' ) ); ?>" name="wp-job-manager-page-title[submit_job_form]" /></td>
275
- <td>
276
- <p><?php esc_html_e( 'Creates a page that allows employers to post new jobs directly from a page on your website, instead of requiring them to log in to an admin area. If you\'d rather not allow this -- for example, if you want employers to use the admin dashboard only -- you can uncheck this setting.', 'wp-job-manager' ); ?></p>
277
- </td>
278
- <td><code>[submit_job_form]</code></td>
279
- </tr>
280
- <tr>
281
- <td><input type="checkbox" checked="checked" name="wp-job-manager-create-page[job_dashboard]" /></td>
282
- <td><input type="text" value="<?php echo esc_attr( _x( 'Job Dashboard', 'Default page title (wizard)', 'wp-job-manager' ) ); ?>" name="wp-job-manager-page-title[job_dashboard]" /></td>
283
- <td>
284
- <p><?php esc_html_e( 'Creates a page that allows employers to manage their job listings directly from a page on your website, instead of requiring them to log in to an admin area. If you want to manage all job listings from the admin dashboard only, you can uncheck this setting.', 'wp-job-manager' ); ?></p>
285
- </td>
286
- <td><code>[job_dashboard]</code></td>
287
- </tr>
288
- <tr>
289
- <td><input type="checkbox" checked="checked" name="wp-job-manager-create-page[jobs]" /></td>
290
- <td><input type="text" value="<?php echo esc_attr( _x( 'Jobs', 'Default page title (wizard)', 'wp-job-manager' ) ); ?>" name="wp-job-manager-page-title[jobs]" /></td>
291
- <td><?php esc_html_e( 'Creates a page where visitors can browse, search, and filter job listings.', 'wp-job-manager' ); ?></td>
292
- <td><code>[jobs]</code></td>
293
- </tr>
294
- </tbody>
295
- <tfoot>
296
- <tr>
297
- <th colspan="4">
298
- <input type="submit" class="button button-primary" value="Create selected pages" />
299
- <a href="<?php echo esc_url( add_query_arg( 'step', 3 ) ); ?>" class="button"><?php esc_html_e( 'Skip this step', 'wp-job-manager' ); ?></a>
300
- </th>
301
- </tr>
302
- </tfoot>
303
- </table>
304
- </form>
305
-
306
- <?php endif; ?>
307
- <?php if ( 3 === $step ) : ?>
308
-
309
- <h3><?php esc_html_e( 'You\'re ready to start using WP Job Manager!', 'wp-job-manager' ); ?></h3>
310
-
311
- <p><?php esc_html_e( 'Wondering what to do now? Here are some of the most common next steps:', 'wp-job-manager' ); ?></p>
312
-
313
- <ul class="wp-job-manager-next-steps">
314
- <li><a href="<?php echo esc_url( admin_url( 'edit.php?post_type=job_listing&page=job-manager-settings' ) ); ?>"><?php esc_html_e( 'Tweak your settings', 'wp-job-manager' ); ?></a></li>
315
- <li><a href="<?php echo esc_url( admin_url( 'post-new.php?post_type=job_listing' ) ); ?>"><?php esc_html_e( 'Add a job using the admin dashboard', 'wp-job-manager' ); ?></a></li>
316
- <?php
317
- $permalink = job_manager_get_permalink( 'jobs' );
318
- if ( $permalink ) {
319
- ?>
320
- <li><a href="<?php echo esc_url( $permalink ); ?>"><?php esc_html_e( 'View submitted job listings', 'wp-job-manager' ); ?></a></li>
321
- <?php } else { ?>
322
- <li><a href="https://wpjobmanager.com/document/shortcode-reference/#section-1"><?php esc_html_e( 'Add job listings to a page using the [jobs] shortcode', 'wp-job-manager' ); ?></a></li>
323
- <?php } ?>
324
-
325
- <?php
326
- $permalink = job_manager_get_permalink( 'submit_job_form' );
327
- if ( $permalink ) {
328
- ?>
329
- <li><a href="<?php echo esc_url( $permalink ); ?>"><?php esc_html_e( 'Add a job via the front-end', 'wp-job-manager' ); ?></a></li>
330
- <?php } else { ?>
331
- <li><a href="https://wpjobmanager.com/document/the-job-submission-form/"><?php esc_html_e( 'Learn to use the front-end job submission board', 'wp-job-manager' ); ?></a></li>
332
- <?php } ?>
333
-
334
- <?php
335
- $permalink = job_manager_get_permalink( 'job_dashboard' );
336
- if ( $permalink ) {
337
- ?>
338
- <li><a href="<?php echo esc_url( $permalink ); ?>"><?php esc_html_e( 'View the job dashboard', 'wp-job-manager' ); ?></a></li>
339
- <?php } else { ?>
340
- <li><a href="https://wpjobmanager.com/document/the-job-dashboard/"><?php esc_html_e( 'Learn to use the front-end job dashboard', 'wp-job-manager' ); ?></a></li>
341
- <?php } ?>
342
- </ul>
343
-
344
- <p>
345
- <?php
346
- echo wp_kses_post(
347
- sprintf(
348
- // translators: %1$s is the URL to WPJM support documentation; %2$s is the URL to WPJM support forums.
349
- __( 'If you need help, you can find more detail in our
350
- <a href="%1$s">support documentation</a> or post your question on the
351
- <a href="%2$s">WP Job Manager support forums</a>. Happy hiring!', 'wp-job-manager' ),
352
- 'https://wpjobmanager.com/documentation/',
353
- 'https://wordpress.org/support/plugin/wp-job-manager'
354
- )
355
- );
356
- ?>
357
- </p>
358
-
359
- <div class="wp-job-manager-support-the-plugin">
360
- <h3><?php esc_html_e( 'Support WP Job Manager\'s Ongoing Development', 'wp-job-manager' ); ?></h3>
361
- <p><?php esc_html_e( 'There are lots of ways you can support open source software projects like this one: contributing code, fixing a bug, assisting with non-English translation, or just telling your friends about WP Job Manager to help spread the word. We appreciate your support!', 'wp-job-manager' ); ?></p>
362
- <ul>
363
- <li class="icon-review"><a href="https://wordpress.org/support/view/plugin-reviews/wp-job-manager#postform"><?php esc_html_e( 'Leave a positive review', 'wp-job-manager' ); ?></a></li>
364
- <li class="icon-localization"><a href="https://translate.wordpress.org/projects/wp-plugins/wp-job-manager"><?php esc_html_e( 'Contribute a localization', 'wp-job-manager' ); ?></a></li>
365
- <li class="icon-code"><a href="https://github.com/mikejolley/WP-Job-Manager"><?php esc_html_e( 'Contribute code or report a bug', 'wp-job-manager' ); ?></a></li>
366
- <li class="icon-forum"><a href="https://wordpress.org/support/plugin/wp-job-manager"><?php esc_html_e( 'Help other users on the forums', 'wp-job-manager' ); ?></a></li>
367
- </ul>
368
- </div>
369
-
370
- <?php endif; ?>
371
- </div>
372
- <?php
373
  }
374
  }
375
 
39
  public function __construct() {
40
  add_action( 'admin_menu', array( $this, 'admin_menu' ), 12 );
41
  add_action( 'admin_head', array( $this, 'admin_head' ) );
 
42
  if ( isset( $_GET['page'] ) && 'job-manager-setup' === $_GET['page'] ) {
43
  add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ), 12 );
44
  }
58
  remove_submenu_page( 'index.php', 'job-manager-setup' );
59
  }
60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  /**
62
  * Enqueues scripts for setup page.
63
  */
95
  */
96
  public function setup_page() {
97
  $usage_tracking = WP_Job_Manager_Usage_Tracking::get_instance();
98
+ $step = ! empty( $_GET['step'] ) ? absint( $_GET['step'] ) : 1;
99
 
100
  if ( 'POST' === $_SERVER['REQUEST_METHOD'] ) {
101
+ // Handle step 1 (usage tracking).
102
  $enable = isset( $_POST['job_manager_usage_tracking_enabled'] )
103
  && '1' === $_POST['job_manager_usage_tracking_enabled'];
104
 
109
  $usage_tracking->set_tracking_enabled( $enable );
110
  $usage_tracking->hide_tracking_opt_in();
111
  }
112
+
113
+ // Handle step 2 -> step 3 (setting up pages).
114
+ if ( 3 === $step && ! empty( $_POST ) ) {
115
+ if ( false === wp_verify_nonce( $_REQUEST['setup_wizard'], 'step_3' ) ) {
116
+ wp_die( 'Error in nonce. Try again.', 'wp-job-manager' );
117
+ }
118
+ $create_pages = isset( $_POST['wp-job-manager-create-page'] ) ? $_POST['wp-job-manager-create-page'] : array();
119
+ $page_titles = $_POST['wp-job-manager-page-title'];
120
+ $pages_to_create = array(
121
+ 'submit_job_form' => '[submit_job_form]',
122
+ 'job_dashboard' => '[job_dashboard]',
123
+ 'jobs' => '[jobs]',
124
+ );
125
+
126
+ foreach ( $pages_to_create as $page => $content ) {
127
+ if ( ! isset( $create_pages[ $page ] ) || empty( $page_titles[ $page ] ) ) {
128
+ continue;
129
+ }
130
+ $this->create_page( sanitize_text_field( $page_titles[ $page ] ), $content, 'job_manager_' . $page . '_page_id' );
131
+ }
132
+ }
133
+ }
134
+
135
+ // Handle step 3 (from step 1 or 2).
136
+ if ( 3 === $step ) {
137
+ WP_Job_Manager_Admin_Notices::remove_notice( WP_Job_Manager_Admin_Notices::NOTICE_CORE_SETUP );
138
  }
139
 
140
  $this->output();
142
 
143
  /**
144
  * Usage tracking opt in text for setup page.
145
+ *
146
+ * Used in `views/html-admin-setup-opt-in-usage-tracking.php`
147
  */
148
  private function opt_in_text() {
149
  return WP_Job_Manager_Usage_Tracking::get_instance()->opt_in_checkbox_text();
151
 
152
  /**
153
  * Output opt-in checkbox if usage tracking isn't already enabled.
154
+ *
155
+ * Used in `views/html-admin-setup-step-1.php`
156
  */
157
  private function maybe_output_opt_in_checkbox() {
158
  // Only show the checkbox if we aren't already opted in.
159
  $usage_tracking = WP_Job_Manager_Usage_Tracking::get_instance();
160
  if ( ! $usage_tracking->get_tracking_enabled() ) {
161
+ include dirname( __FILE__ ) . '/views/html-admin-setup-opt-in-usage-tracking.php';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  }
163
  }
164
 
168
  public function output() {
169
  $step = ! empty( $_GET['step'] ) ? absint( $_GET['step'] ) : 1;
170
 
171
+ include dirname( __FILE__ ) . '/views/html-admin-setup-header.php';
172
+ if ( 1 === $step ) {
173
+ include dirname( __FILE__ ) . '/views/html-admin-setup-step-1.php';
174
+ } elseif ( 2 === $step ) {
175
+ include dirname( __FILE__ ) . '/views/html-admin-setup-step-2.php';
176
+ } elseif ( 3 === $step ) {
177
+ include dirname( __FILE__ ) . '/views/html-admin-setup-step-3.php';
 
 
 
 
 
 
 
 
 
 
 
178
  }
179
+ include dirname( __FILE__ ) . '/views/html-admin-setup-footer.php';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180
  }
181
  }
182
 
includes/admin/class-wp-job-manager-writepanels.php CHANGED
@@ -119,7 +119,7 @@ class WP_Job_Manager_Writepanels {
119
  $fields['_job_author'] = array(
120
  'label' => __( 'Posted by', 'wp-job-manager' ),
121
  'type' => 'author',
122
- 'priority' => 12,
123
  );
124
  }
125
 
@@ -166,7 +166,7 @@ class WP_Job_Manager_Writepanels {
166
  } elseif ( false === job_manager_multi_job_type() ) {
167
  remove_meta_box( 'job_listing_typediv', 'job_listing', 'side' );
168
  $job_listing_type = get_taxonomy( 'job_listing_type' );
169
- add_meta_box( 'job_listing_type', $job_listing_type->labels->menu_name, array( $this, 'job_listing_metabox' ), 'job_listing', 'side', 'core' );
170
  }
171
  }
172
 
@@ -175,75 +175,38 @@ class WP_Job_Manager_Writepanels {
175
  *
176
  * @param int|WP_Post $post
177
  */
178
- public function job_listing_metabox( $post ) {
179
  // Set up the taxonomy object and get terms.
180
- $taxonomy = 'job_listing_type';
181
- $tax = get_taxonomy( $taxonomy );// This is the taxonomy object.
182
-
183
- // The name of the form.
184
- $name = 'tax_input[' . $taxonomy . ']';
185
 
186
  // Get all the terms for this taxonomy.
187
  $terms = get_terms(
188
  array(
189
- 'taxonomy' => $taxonomy,
190
  'hide_empty' => 0,
191
  )
192
  );
193
- $postterms = get_the_terms( $post->ID, $taxonomy );
194
- $current = ( $postterms ? array_pop( $postterms ) : false );
195
- $current = ( $current ? $current->term_id : 0 );
196
- // Get current and popular terms.
197
- $popular = get_terms(
198
- array(
199
- 'taxonomy' => $taxonomy,
200
- 'orderby' => 'count',
201
- 'order' => 'DESC',
202
- 'number' => 10,
203
- 'hierarchical' => false,
204
- )
205
- );
206
- $postterms = get_the_terms( $post->ID, $taxonomy );
207
- $current = ( $postterms ? array_pop( $postterms ) : false );
208
- $current = ( $current ? $current->term_id : 0 );
209
- ?>
210
-
211
- <div id="taxonomy-<?php echo esc_attr( $taxonomy ); ?>" class="categorydiv">
212
-
213
- <!-- Display tabs-->
214
- <ul id="<?php echo esc_attr( $taxonomy ); ?>-tabs" class="category-tabs">
215
- <li class="tabs"><a href="#<?php echo esc_attr( $taxonomy ); ?>-all" tabindex="3"><?php echo esc_html( $tax->labels->all_items ); ?></a></li>
216
- <li class="hide-if-no-js"><a href="#<?php echo esc_attr( $taxonomy ); ?>-pop" tabindex="3"><?php esc_html_e( 'Most Used', 'wp-job-manager' ); ?></a></li>
217
- </ul>
218
 
 
 
 
219
  <!-- Display taxonomy terms -->
220
- <div id="<?php echo esc_attr( $taxonomy ); ?>-all" class="tabs-panel">
221
- <ul id="<?php echo esc_attr( $taxonomy ); ?>checklist" class="list:<?php echo esc_attr( $taxonomy ); ?> categorychecklist form-no-clear">
222
  <?php
223
  foreach ( $terms as $term ) {
224
- $id = $taxonomy . '-' . $term->term_id;
225
  echo '<li id="' . esc_attr( $id ) . '"><label class="selectit">';
226
- echo '<input type="radio" id="in-' . esc_attr( $id ) . '" name="' . esc_attr( $name ) . '" ' . checked( $current, $term->term_id, false ) . ' value="' . esc_attr( $term->term_id ) . '" />' . esc_attr( $term->name ) . '<br />';
227
  echo '</label></li>';
228
  }
229
  ?>
230
- </ul>
231
  </div>
232
 
233
- <!-- Display popular taxonomy terms -->
234
- <div id="<?php echo esc_attr( $taxonomy ); ?>-pop" class="tabs-panel" style="display: none;">
235
- <ul id="<?php echo esc_attr( $taxonomy ); ?>checklist-pop" class="categorychecklist form-no-clear" >
236
- <?php
237
- foreach ( $popular as $term ) {
238
- $id = 'popular-' . $taxonomy . '-' . $term->term_id;
239
- echo '<li id="' . esc_attr( $id ) . '"><label class="selectit">';
240
- echo '<input type="radio" id="in-' . esc_attr( $id ) . '" ' . checked( $current, $term->term_id, false ) . ' value="' . esc_attr( $term->term_id ) . '" />' . esc_attr( $term->name ) . '<br />';
241
- echo '</label></li>';
242
- }
243
- ?>
244
- </ul>
245
- </div>
246
-
247
  </div>
248
  <?php
249
  }
@@ -552,16 +515,25 @@ class WP_Job_Manager_Writepanels {
552
  <span class="current-author">
553
  <?php
554
  if ( $posted_by ) {
 
 
 
 
 
 
 
555
  echo '<a href="' . esc_url( admin_url( 'user-edit.php?user_id=' . absint( $author_id ) ) ) . '">#' . absint( $author_id ) . ' &ndash; ' . esc_html( $posted_by->user_login ) . '</a>';
556
  } else {
557
- esc_html_e( 'Guest User', 'wp-job-manager' );
 
558
  }
559
  ?>
560
  <a href="#" class="change-author button button-small"><?php esc_html_e( 'Change', 'wp-job-manager' ); ?></a>
561
  </span>
562
  <span class="hidden change-author">
563
- <input type="number" name="<?php echo esc_attr( $name ); ?>" id="<?php echo esc_attr( $key ); ?>" step="1" value="<?php echo esc_attr( $author_id ); ?>" style="width: 4em;" />
564
- <span class="description"><?php esc_html_e( 'Enter the ID of the user, or leave blank if submitted by a guest.', 'wp-job-manager' ); ?></span>
 
565
  </span>
566
  </p>
567
  <?php
@@ -706,6 +678,9 @@ class WP_Job_Manager_Writepanels {
706
  WP_Job_Manager_Geocode::generate_location_data( $post_id, sanitize_text_field( $_POST[ $key ] ) );
707
  }
708
  } elseif ( '_job_author' === $key ) {
 
 
 
709
  $wpdb->update( $wpdb->posts, array( 'post_author' => $_POST[ $key ] > 0 ? absint( $_POST[ $key ] ) : 0 ), array( 'ID' => $post_id ) );
710
  } elseif ( '_application' === $key ) {
711
  update_post_meta( $post_id, $key, sanitize_text_field( is_email( $_POST[ $key ] ) ? $_POST[ $key ] : urldecode( $_POST[ $key ] ) ) );
119
  $fields['_job_author'] = array(
120
  'label' => __( 'Posted by', 'wp-job-manager' ),
121
  'type' => 'author',
122
+ 'priority' => 0,
123
  );
124
  }
125
 
166
  } elseif ( false === job_manager_multi_job_type() ) {
167
  remove_meta_box( 'job_listing_typediv', 'job_listing', 'side' );
168
  $job_listing_type = get_taxonomy( 'job_listing_type' );
169
+ add_meta_box( 'job_listing_type', $job_listing_type->labels->menu_name, array( $this, 'job_type_single_meta_box' ), 'job_listing', 'side', 'core' );
170
  }
171
  }
172
 
175
  *
176
  * @param int|WP_Post $post
177
  */
178
+ public function job_type_single_meta_box( $post ) {
179
  // Set up the taxonomy object and get terms.
180
+ $taxonomy_name = 'job_listing_type';
 
 
 
 
181
 
182
  // Get all the terms for this taxonomy.
183
  $terms = get_terms(
184
  array(
185
+ 'taxonomy' => $taxonomy_name,
186
  'hide_empty' => 0,
187
  )
188
  );
189
+ $postterms = get_the_terms( $post->ID, $taxonomy_name );
190
+ $current = $postterms ? array_pop( $postterms ) : false;
191
+ $current = $current ? $current->term_id : 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
192
 
193
+ $field_name = 'tax_input[' . $taxonomy_name . ']';
194
+ ?>
195
+ <div id="taxonomy-<?php echo esc_attr( $taxonomy_name ); ?>" class="categorydiv">
196
  <!-- Display taxonomy terms -->
197
+ <div id="<?php echo esc_attr( $taxonomy_name ); ?>-all" class="editor-post-taxonomies__hierarchical-terms-list">
198
+ <ul id="<?php echo esc_attr( $taxonomy_name ); ?>checklist" class="list:<?php echo esc_attr( $taxonomy_name ); ?> categorychecklist form-no-clear">
199
  <?php
200
  foreach ( $terms as $term ) {
201
+ $id = $taxonomy_name . '-' . $term->term_id;
202
  echo '<li id="' . esc_attr( $id ) . '"><label class="selectit">';
203
+ echo '<input type="radio" id="in-' . esc_attr( $id ) . '" name="' . esc_attr( $field_name ) . '" ' . checked( $current, $term->term_id, false ) . ' value="' . esc_attr( $term->term_id ) . '" />' . esc_attr( $term->name ) . '<br />';
204
  echo '</label></li>';
205
  }
206
  ?>
207
+ </ul>
208
  </div>
209
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
210
  </div>
211
  <?php
212
  }
515
  <span class="current-author">
516
  <?php
517
  if ( $posted_by ) {
518
+ $user_string = sprintf(
519
+ // translators: Used in user select. %1$s is the user's display name; #%2$s is the user ID; %3$s is the user email.
520
+ esc_html__( '%1$s (#%2$s &ndash; %3$s)', 'wp-job-manager' ),
521
+ $posted_by->display_name,
522
+ absint( $posted_by->ID ),
523
+ $posted_by->user_email
524
+ );
525
  echo '<a href="' . esc_url( admin_url( 'user-edit.php?user_id=' . absint( $author_id ) ) ) . '">#' . absint( $author_id ) . ' &ndash; ' . esc_html( $posted_by->user_login ) . '</a>';
526
  } else {
527
+ $user_string = __( 'Guest User', 'wp-job-manager' );
528
+ echo esc_html( $user_string );
529
  }
530
  ?>
531
  <a href="#" class="change-author button button-small"><?php esc_html_e( 'Change', 'wp-job-manager' ); ?></a>
532
  </span>
533
  <span class="hidden change-author">
534
+ <select class="wpjm-user-search" id="job_manager_user_search" name="<?php echo esc_attr( $name ); ?>" data-placeholder="<?php esc_attr_e( 'Guest', 'wp-job-manager' ); ?>" data-allow_clear="true">
535
+ <option value="<?php echo esc_attr( $author_id ); ?>" selected="selected"><?php echo esc_html( htmlspecialchars( $user_string ) ); ?></option>
536
+ </select>
537
  </span>
538
  </p>
539
  <?php
678
  WP_Job_Manager_Geocode::generate_location_data( $post_id, sanitize_text_field( $_POST[ $key ] ) );
679
  }
680
  } elseif ( '_job_author' === $key ) {
681
+ if ( empty( $_POST[ $key ] ) ) {
682
+ $_POST[ $key ] = 0;
683
+ }
684
  $wpdb->update( $wpdb->posts, array( 'post_author' => $_POST[ $key ] > 0 ? absint( $_POST[ $key ] ) : 0 ), array( 'ID' => $post_id ) );
685
  } elseif ( '_application' === $key ) {
686
  update_post_meta( $post_id, $key, sanitize_text_field( is_email( $_POST[ $key ] ) ? $_POST[ $key ] : urldecode( $_POST[ $key ] ) ) );
includes/admin/views/html-admin-notice-core-setup.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Display the admin notice when user first activates WPJM.
4
+ *
5
+ * @package WP Job Manager
6
+ */
7
+
8
+ if ( ! defined( 'ABSPATH' ) ) {
9
+ exit;
10
+ }
11
+
12
+ ?>
13
+ <div class="updated wpjm-message">
14
+ <p>
15
+ <?php
16
+ echo wp_kses_post( __( 'You are nearly ready to start listing jobs with <strong>WP Job Manager</strong>.', 'wp-job-manager' ) );
17
+ ?>
18
+ </p>
19
+ <p class="submit">
20
+ <a href="<?php echo esc_url( admin_url( 'index.php?page=job-manager-setup' ) ); ?>" class="button-primary"><?php esc_html_e( 'Run Setup Wizard', 'wp-job-manager' ); ?></a>
21
+ <a class="button-secondary skip" href="<?php echo esc_url( wp_nonce_url( add_query_arg( 'wpjm_hide_notice', WP_Job_Manager_Admin_Notices::NOTICE_CORE_SETUP ), 'job_manager_hide_notices_nonce', '_wpjm_notice_nonce' ) ); ?>"><?php esc_html_e( 'Skip Setup', 'wp-job-manager' ); ?></a>
22
+ </p>
23
+ </div>
includes/admin/views/html-admin-setup-footer.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Setup page: footer content.
4
+ *
5
+ * @package WP Job Manager
6
+ */
7
+
8
+ if ( ! defined( 'ABSPATH' ) ) {
9
+ exit;
10
+ }
11
+
12
+ ?>
13
+ </div>
includes/admin/views/html-admin-setup-header.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Setup page: header content.
4
+ *
5
+ * @package WP Job Manager
6
+ */
7
+
8
+ if ( ! defined( 'ABSPATH' ) ) {
9
+ exit;
10
+ }
11
+
12
+ ?>
13
+ <div class="wrap wp_job_manager wp_job_manager_addons_wrap">
14
+ <h2><?php esc_html_e( 'WP Job Manager Setup', 'wp-job-manager' ); ?></h2>
15
+
16
+ <ul class="wp-job-manager-setup-steps">
17
+ <?php
18
+ $step_classes = array_fill( 1, 3, '' );
19
+ $step_classes[ $step ] = 'wp-job-manager-setup-active-step';
20
+ ?>
21
+ <li class="<?php echo sanitize_html_class( $step_classes[1] ); ?>"><?php esc_html_e( '1. Introduction', 'wp-job-manager' ); ?></li>
22
+ <li class="<?php echo sanitize_html_class( $step_classes[2] ); ?>"><?php esc_html_e( '2. Page Setup', 'wp-job-manager' ); ?></li>
23
+ <li class="<?php echo sanitize_html_class( $step_classes[3] ); ?>"><?php esc_html_e( '3. Done', 'wp-job-manager' ); ?></li>
24
+ </ul>
includes/admin/views/html-admin-setup-opt-in-usage-tracking.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Setup page: Opt into usage tracking option.
4
+ *
5
+ * @package WP Job Manager
6
+ */
7
+
8
+ if ( ! defined( 'ABSPATH' ) ) {
9
+ exit;
10
+ }
11
+
12
+ ?>
13
+ <p>
14
+ <label>
15
+ <input
16
+ type="checkbox"
17
+ name="job_manager_usage_tracking_enabled"
18
+ value="1" />
19
+ <?php
20
+ echo wp_kses(
21
+ $this->opt_in_text(),
22
+ $usage_tracking->opt_in_dialog_text_allowed_html()
23
+ );
24
+ ?>
25
+ </label>
26
+ </p>
includes/admin/views/html-admin-setup-step-1.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Setup page: Step 1 content.
4
+ *
5
+ * @package WP Job Manager
6
+ */
7
+
8
+ if ( ! defined( 'ABSPATH' ) ) {
9
+ exit;
10
+ }
11
+
12
+ ?>
13
+ <h3><?php esc_html_e( 'Welcome to the Setup Wizard!', 'wp-job-manager' ); ?></h3>
14
+
15
+ <p><?php echo wp_kses_post( __( 'Thanks for installing <em>WP Job Manager</em>! Let\'s get your site ready to accept job listings.', 'wp-job-manager' ) ); ?></p>
16
+ <p><?php echo wp_kses_post( __( 'This setup wizard will walk you through the process of creating pages for job submissions, management, and listings.', 'wp-job-manager' ) ); ?></p>
17
+ <p>
18
+ <?php
19
+ // translators: Placeholder %s is the path to WPJM documentation site.
20
+ echo wp_kses_post( sprintf( __( 'If you\'d prefer to skip this and set up your pages manually, our <a href="%s">documentation</a> will walk you through each step.', 'wp-job-manager' ), 'https://wpjobmanager.com/documentation/' ) );
21
+ ?>
22
+ </p>
23
+
24
+ <form method="post" action="<?php echo esc_url( add_query_arg( 'step', 2 ) ); ?>">
25
+ <input type="hidden" name="nonce" value="<?php echo esc_attr( wp_create_nonce( 'enable-usage-tracking' ) ); ?>" />
26
+
27
+ <?php $this->maybe_output_opt_in_checkbox(); ?>
28
+
29
+ <p class="submit">
30
+ <input type="submit" value="<?php esc_html_e( 'Start setup', 'wp-job-manager' ); ?>" class="button button-primary" />
31
+ <a href="<?php echo esc_url( add_query_arg( 'skip-job-manager-setup', 1, admin_url( 'index.php?page=job-manager-setup&step=3' ) ) ); ?>" class="button"><?php esc_html_e( 'Skip setup. I will set up the plugin manually.', 'wp-job-manager' ); ?></a>
32
+ </p>
33
+ </form>
includes/admin/views/html-admin-setup-step-2.php ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Setup page: Step 2 content.
4
+ *
5
+ * @package WP Job Manager
6
+ */
7
+
8
+ if ( ! defined( 'ABSPATH' ) ) {
9
+ exit;
10
+ }
11
+
12
+ ?>
13
+ <h3><?php esc_html_e( 'Page Setup', 'wp-job-manager' ); ?></h3>
14
+
15
+ <p><?php esc_html_e( 'With WP Job Manager, employers and applicants can post, manage, and browse job listings right on your website. Tell us which of these common pages you\'d like your site to have and we\'ll create and configure them for you.', 'wp-job-manager' ); ?></p>
16
+ <p>
17
+ <?php
18
+ echo wp_kses_post(
19
+ sprintf(
20
+ // translators: %1$s is URL to WordPress core shortcode documentation. %2$s is URL to WPJM specific shortcode reference.
21
+ __(
22
+ '(These pages are created using <a href="%1$s" title="What is a shortcode?" class="help-page-link">shortcodes</a>,
23
+ which we take care of in this step. If you\'d like to build these pages yourself or want to add one of these options to an existing
24
+ page on your site, you can skip this step and take a look at <a href="%2$s" class="help-page-link">shortcode documentation</a> for detailed instructions.)', 'wp-job-manager'
25
+ ),
26
+ 'http://codex.wordpress.org/Shortcode',
27
+ 'https://wpjobmanager.com/document/shortcode-reference/'
28
+ )
29
+ );
30
+ ?>
31
+ </p>
32
+
33
+ <form action="<?php echo esc_url( add_query_arg( 'step', 3 ) ); ?>" method="post">
34
+ <?php wp_nonce_field( 'step_3', 'setup_wizard' ); ?>
35
+ <table class="wp-job-manager-shortcodes widefat">
36
+ <thead>
37
+ <tr>
38
+ <th>&nbsp;</th>
39
+ <th><?php esc_html_e( 'Page Title', 'wp-job-manager' ); ?></th>
40
+ <th><?php esc_html_e( 'Page Description', 'wp-job-manager' ); ?></th>
41
+ <th><?php esc_html_e( 'Content Shortcode', 'wp-job-manager' ); ?></th>
42
+ </tr>
43
+ </thead>
44
+ <tbody>
45
+ <tr>
46
+ <td><input type="checkbox" checked="checked" name="wp-job-manager-create-page[submit_job_form]" /></td>
47
+ <td><input type="text" value="<?php echo esc_attr( _x( 'Post a Job', 'Default page title (wizard)', 'wp-job-manager' ) ); ?>" name="wp-job-manager-page-title[submit_job_form]" /></td>
48
+ <td>
49
+ <p><?php esc_html_e( 'Creates a page that allows employers to post new jobs directly from a page on your website, instead of requiring them to log in to an admin area. If you\'d rather not allow this -- for example, if you want employers to use the admin dashboard only -- you can uncheck this setting.', 'wp-job-manager' ); ?></p>
50
+ </td>
51
+ <td><code>[submit_job_form]</code></td>
52
+ </tr>
53
+ <tr>
54
+ <td><input type="checkbox" checked="checked" name="wp-job-manager-create-page[job_dashboard]" /></td>
55
+ <td><input type="text" value="<?php echo esc_attr( _x( 'Job Dashboard', 'Default page title (wizard)', 'wp-job-manager' ) ); ?>" name="wp-job-manager-page-title[job_dashboard]" /></td>
56
+ <td>
57
+ <p><?php esc_html_e( 'Creates a page that allows employers to manage their job listings directly from a page on your website, instead of requiring them to log in to an admin area. If you want to manage all job listings from the admin dashboard only, you can uncheck this setting.', 'wp-job-manager' ); ?></p>
58
+ </td>
59
+ <td><code>[job_dashboard]</code></td>
60
+ </tr>
61
+ <tr>
62
+ <td><input type="checkbox" checked="checked" name="wp-job-manager-create-page[jobs]" /></td>
63
+ <td><input type="text" value="<?php echo esc_attr( _x( 'Jobs', 'Default page title (wizard)', 'wp-job-manager' ) ); ?>" name="wp-job-manager-page-title[jobs]" /></td>
64
+ <td><?php esc_html_e( 'Creates a page where visitors can browse, search, and filter job listings.', 'wp-job-manager' ); ?></td>
65
+ <td><code>[jobs]</code></td>
66
+ </tr>
67
+ </tbody>
68
+ <tfoot>
69
+ <tr>
70
+ <th colspan="4">
71
+ <input type="submit" class="button button-primary" value="Create selected pages" />
72
+ <a href="<?php echo esc_url( add_query_arg( 'step', 3 ) ); ?>" class="button"><?php esc_html_e( 'Skip this step', 'wp-job-manager' ); ?></a>
73
+ </th>
74
+ </tr>
75
+ </tfoot>
76
+ </table>
77
+ </form>
includes/admin/views/html-admin-setup-step-3.php ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Setup page: Step 3 content.
4
+ *
5
+ * @package WP Job Manager
6
+ */
7
+
8
+ if ( ! defined( 'ABSPATH' ) ) {
9
+ exit;
10
+ }
11
+
12
+ ?>
13
+ <h3><?php esc_html_e( 'You\'re ready to start using WP Job Manager!', 'wp-job-manager' ); ?></h3>
14
+
15
+ <p><?php esc_html_e( 'Wondering what to do now? Here are some of the most common next steps:', 'wp-job-manager' ); ?></p>
16
+
17
+ <ul class="wp-job-manager-next-steps">
18
+ <li><a href="<?php echo esc_url( admin_url( 'edit.php?post_type=job_listing&page=job-manager-settings' ) ); ?>"><?php esc_html_e( 'Tweak your settings', 'wp-job-manager' ); ?></a></li>
19
+ <li><a href="<?php echo esc_url( admin_url( 'post-new.php?post_type=job_listing' ) ); ?>"><?php esc_html_e( 'Add a job using the admin dashboard', 'wp-job-manager' ); ?></a></li>
20
+ <?php
21
+ $permalink = job_manager_get_permalink( 'jobs' );
22
+ if ( $permalink ) {
23
+ ?>
24
+ <li><a href="<?php echo esc_url( $permalink ); ?>"><?php esc_html_e( 'View submitted job listings', 'wp-job-manager' ); ?></a></li>
25
+ <?php } else { ?>
26
+ <li><a href="https://wpjobmanager.com/document/shortcode-reference/#section-1"><?php esc_html_e( 'Add job listings to a page using the [jobs] shortcode', 'wp-job-manager' ); ?></a></li>
27
+ <?php } ?>
28
+
29
+ <?php
30
+ $permalink = job_manager_get_permalink( 'submit_job_form' );
31
+ if ( $permalink ) {
32
+ ?>
33
+ <li><a href="<?php echo esc_url( $permalink ); ?>"><?php esc_html_e( 'Add a job via the front-end', 'wp-job-manager' ); ?></a></li>
34
+ <?php } else { ?>
35
+ <li><a href="https://wpjobmanager.com/document/the-job-submission-form/"><?php esc_html_e( 'Learn to use the front-end job submission board', 'wp-job-manager' ); ?></a></li>
36
+ <?php } ?>
37
+
38
+ <?php
39
+ $permalink = job_manager_get_permalink( 'job_dashboard' );
40
+ if ( $permalink ) {
41
+ ?>
42
+ <li><a href="<?php echo esc_url( $permalink ); ?>"><?php esc_html_e( 'View the job dashboard', 'wp-job-manager' ); ?></a></li>
43
+ <?php } else { ?>
44
+ <li><a href="https://wpjobmanager.com/document/the-job-dashboard/"><?php esc_html_e( 'Learn to use the front-end job dashboard', 'wp-job-manager' ); ?></a></li>
45
+ <?php } ?>
46
+ </ul>
47
+
48
+ <p>
49
+ <?php
50
+ echo wp_kses_post(
51
+ sprintf(
52
+ // translators: %1$s is the URL to WPJM support documentation; %2$s is the URL to WPJM support forums.
53
+ __(
54
+ 'If you need help, you can find more detail in our
55
+ <a href="%1$s">support documentation</a> or post your question on the
56
+ <a href="%2$s">WP Job Manager support forums</a>. Happy hiring!', 'wp-job-manager'
57
+ ),
58
+ 'https://wpjobmanager.com/documentation/',
59
+ 'https://wordpress.org/support/plugin/wp-job-manager'
60
+ )
61
+ );
62
+ ?>
63
+ </p>
64
+
65
+ <div class="wp-job-manager-support-the-plugin">
66
+ <h3><?php esc_html_e( 'Support WP Job Manager\'s Ongoing Development', 'wp-job-manager' ); ?></h3>
67
+ <p><?php esc_html_e( 'There are lots of ways you can support open source software projects like this one: contributing code, fixing a bug, assisting with non-English translation, or just telling your friends about WP Job Manager to help spread the word. We appreciate your support!', 'wp-job-manager' ); ?></p>
68
+ <ul>
69
+ <li class="icon-review"><a href="https://wordpress.org/support/view/plugin-reviews/wp-job-manager#postform"><?php esc_html_e( 'Leave a positive review', 'wp-job-manager' ); ?></a></li>
70
+ <li class="icon-localization"><a href="https://translate.wordpress.org/projects/wp-plugins/wp-job-manager"><?php esc_html_e( 'Contribute a localization', 'wp-job-manager' ); ?></a></li>
71
+ <li class="icon-code"><a href="https://github.com/mikejolley/WP-Job-Manager"><?php esc_html_e( 'Contribute code or report a bug', 'wp-job-manager' ); ?></a></li>
72
+ <li class="icon-forum"><a href="https://wordpress.org/support/plugin/wp-job-manager"><?php esc_html_e( 'Help other users on the forums', 'wp-job-manager' ); ?></a></li>
73
+ </ul>
74
+ </div>
includes/class-wp-job-manager-ajax.php CHANGED
@@ -50,6 +50,7 @@ class WP_Job_Manager_Ajax {
50
  add_action( 'wp_ajax_job_manager_get_listings', array( $this, 'get_listings' ) );
51
  add_action( 'wp_ajax_nopriv_job_manager_upload_file', array( $this, 'upload_file' ) );
52
  add_action( 'wp_ajax_job_manager_upload_file', array( $this, 'upload_file' ) );
 
53
  }
54
 
55
  /**
@@ -296,6 +297,139 @@ class WP_Job_Manager_Ajax {
296
 
297
  wp_send_json( $data );
298
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
299
  }
300
 
301
  WP_Job_Manager_Ajax::instance();
50
  add_action( 'wp_ajax_job_manager_get_listings', array( $this, 'get_listings' ) );
51
  add_action( 'wp_ajax_nopriv_job_manager_upload_file', array( $this, 'upload_file' ) );
52
  add_action( 'wp_ajax_job_manager_upload_file', array( $this, 'upload_file' ) );
53
+ add_action( 'wp_ajax_job_manager_search_users', array( $this, 'ajax_search_users' ) );
54
  }
55
 
56
  /**
297
 
298
  wp_send_json( $data );
299
  }
300
+
301
+ /**
302
+ * Checks if user can search for other users in ajax call.
303
+ *
304
+ * @return bool
305
+ */
306
+ private static function user_can_search_users() {
307
+ $user_can_search_users = false;
308
+
309
+ /**
310
+ * Filter the capabilities that are allowed to search for users in ajax call.
311
+ *
312
+ * @since 1.32.0
313
+ *
314
+ * @params array $user_caps Array of capabilities/roles that are allowed to search for users.
315
+ */
316
+ $allowed_capabilities = apply_filters( 'job_manager_caps_can_search_users', array( 'edit_job_listings' ) );
317
+ foreach ( $allowed_capabilities as $cap ) {
318
+ if ( current_user_can( $cap ) ) {
319
+ $user_can_search_users = true;
320
+ break;
321
+ }
322
+ }
323
+
324
+ /**
325
+ * Filters whether the current user can search for users in ajax call.
326
+ *
327
+ * @since 1.32.0
328
+ *
329
+ * @params bool $user_can_search_users True if they are allowed, false if not.
330
+ */
331
+ return apply_filters( 'job_manager_user_can_search_users', $user_can_search_users );
332
+ }
333
+
334
+ /**
335
+ * Search for users and return json.
336
+ */
337
+ public static function ajax_search_users() {
338
+ check_ajax_referer( 'search-users', 'security' );
339
+
340
+ if ( ! self::user_can_search_users() ) {
341
+ wp_die( -1 );
342
+ }
343
+
344
+ $term = sanitize_text_field( wp_unslash( $_GET['term'] ) );
345
+ $page = isset( $_GET['page'] ) ? intval( $_GET['page'] ) : 1;
346
+ $per_page = 20;
347
+
348
+ $exclude = array();
349
+ if ( ! empty( $_GET['exclude'] ) ) {
350
+ $exclude = array_map( 'intval', $_GET['exclude'] );
351
+ }
352
+
353
+ if ( empty( $term ) ) {
354
+ wp_die();
355
+ }
356
+
357
+ $more_exist = false;
358
+ $users = array();
359
+
360
+ // Search by ID.
361
+ if ( is_numeric( $term ) && ! in_array( intval( $term ), $exclude, true ) ) {
362
+ $user = get_user_by( 'ID', intval( $term ) );
363
+ if ( $user instanceof WP_User ) {
364
+ $users[ $user->ID ] = $user;
365
+ }
366
+ }
367
+
368
+ if ( empty( $users ) ) {
369
+ $search_args = array(
370
+ 'exclude' => $exclude,
371
+ 'search' => '*' . esc_attr( $term ) . '*',
372
+ 'search_columns' => array( 'user_login', 'user_email', 'user_nicename', 'display_name' ),
373
+ 'number' => $per_page,
374
+ 'paged' => $page,
375
+ 'orderby' => 'display_name',
376
+ 'order' => 'ASC',
377
+ );
378
+
379
+ /**
380
+ * Modify the arguments used for `WP_User_Query` constructor.
381
+ *
382
+ * @since 1.32.0
383
+ *
384
+ * @see https://codex.wordpress.org/Class_Reference/WP_User_Query
385
+ *
386
+ * @params array $search_args Argument array used in `WP_User_Query` constructor.
387
+ * @params string $term Search term.
388
+ * @params int[] $exclude Array of IDs to exclude.
389
+ * @params int $page Current page.
390
+ */
391
+ $search_args = apply_filters( 'job_manager_search_users_args', $search_args, $term, $exclude, $page );
392
+
393
+ $user_query = new WP_User_Query( $search_args );
394
+ $users = $user_query->get_results();
395
+ $total_pages = ceil( $user_query->get_total() / $per_page );
396
+ $more_exist = $total_pages > $page;
397
+ }
398
+
399
+ $found_users = array();
400
+
401
+ foreach ( $users as $user ) {
402
+ $found_users[ $user->ID ] = sprintf(
403
+ // translators: Used in user select. %1$s is the user's display name; #%2$s is the user ID; %3$s is the user email.
404
+ esc_html__( '%1$s (#%2$s &ndash; %3$s)', 'wp-job-manager' ),
405
+ $user->display_name,
406
+ absint( $user->ID ),
407
+ $user->user_email
408
+ );
409
+ }
410
+
411
+ $response = array(
412
+ 'results' => $found_users,
413
+ 'more' => $more_exist,
414
+ );
415
+
416
+ /**
417
+ * Modify the search results response for users in ajax call.
418
+ *
419
+ * @since 1.32.0
420
+ *
421
+ * @params array $response {
422
+ * @type $results Array of all found users; id => string descriptor
423
+ * @type $more True if there is an additional page.
424
+ * }
425
+ * @params string $term Search term.
426
+ * @params int[] $exclude Array of IDs to exclude.
427
+ * @params int $page Current page.
428
+ */
429
+ $response = apply_filters( 'job_manager_search_users_response', $response, $term, $exclude, $page );
430
+
431
+ wp_send_json( $response );
432
+ }
433
  }
434
 
435
  WP_Job_Manager_Ajax::instance();
includes/class-wp-job-manager-blocks.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Handles Job Manager's Gutenberg Blocks.
4
+ *
5
+ * @package wp-job-manager
6
+ * @since 1.32.0
7
+ */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit; // Exit if accessed directly.
11
+ }
12
+
13
+ /**
14
+ * WP_Job_Manager_Blocks
15
+ */
16
+ class WP_Job_Manager_Blocks {
17
+ /**
18
+ * The static instance of the WP_Job_Manager_Blocks
19
+ *
20
+ * @var self
21
+ */
22
+ private static $_instance = null;
23
+
24
+ /**
25
+ * Singleton instance getter
26
+ *
27
+ * @return self
28
+ */
29
+ public static function get_instance() {
30
+ if ( ! self::$_instance ) {
31
+ self::$_instance = new WP_Job_Manager_Blocks();
32
+ }
33
+
34
+ return self::$_instance;
35
+ }
36
+
37
+ /**
38
+ * Instance constructor
39
+ */
40
+ private function __construct() {
41
+ if ( ! function_exists( 'register_block_type' ) ) {
42
+ return;
43
+ }
44
+
45
+ add_action( 'init', array( $this, 'register_blocks' ) );
46
+ }
47
+
48
+ /**
49
+ * Register all Gutenblocks
50
+ */
51
+ public function register_blocks() {
52
+ // Add script includes for gutenblocks.
53
+ }
54
+ }
55
+
56
+ WP_Job_Manager_Blocks::get_instance();
includes/class-wp-job-manager-data-cleaner.php CHANGED
@@ -59,6 +59,7 @@ class WP_Job_Manager_Data_Cleaner {
59
  'wp_job_manager_version',
60
  'job_manager_installed_terms',
61
  'wpjm_permalinks',
 
62
  'job_manager_helper',
63
  'job_manager_date_format',
64
  'job_manager_google_maps_api_key',
@@ -97,6 +98,7 @@ class WP_Job_Manager_Data_Cleaner {
97
  'job_manager_email_admin_new_job',
98
  'job_manager_email_admin_expiring_job',
99
  'job_manager_email_employer_expiring_job',
 
100
  );
101
 
102
  /**
59
  'wp_job_manager_version',
60
  'job_manager_installed_terms',
61
  'wpjm_permalinks',
62
+ 'job_manager_permalinks',
63
  'job_manager_helper',
64
  'job_manager_date_format',
65
  'job_manager_google_maps_api_key',
98
  'job_manager_email_admin_new_job',
99
  'job_manager_email_admin_expiring_job',
100
  'job_manager_email_employer_expiring_job',
101
+ 'job_manager_admin_notices',
102
  );
103
 
104
  /**
includes/class-wp-job-manager-install.php CHANGED
@@ -21,8 +21,13 @@ class WP_Job_Manager_Install {
21
  self::init_user_roles();
22
  self::default_terms();
23
 
24
- // Redirect to setup screen for new installs.
 
 
25
  if ( ! get_option( 'wp_job_manager_version' ) ) {
 
 
 
26
  set_transient( '_job_manager_activation_redirect', 1, HOUR_IN_SECONDS );
27
  }
28
 
@@ -47,6 +52,12 @@ class WP_Job_Manager_Install {
47
  update_option( 'job_manager_job_dashboard_page_id', $page_id );
48
  }
49
 
 
 
 
 
 
 
50
  delete_transient( 'wp_job_manager_addons_html' );
51
  update_option( 'wp_job_manager_version', JOB_MANAGER_VERSION );
52
  }
21
  self::init_user_roles();
22
  self::default_terms();
23
 
24
+ $is_new_install = false;
25
+
26
+ // Fresh installs should be prompted to set up their instance.
27
  if ( ! get_option( 'wp_job_manager_version' ) ) {
28
+ include_once JOB_MANAGER_PLUGIN_DIR . '/includes/admin/class-wp-job-manager-admin-notices.php';
29
+ WP_Job_Manager_Admin_Notices::add_notice( WP_Job_Manager_Admin_Notices::NOTICE_CORE_SETUP );
30
+ $is_new_install = true;
31
  set_transient( '_job_manager_activation_redirect', 1, HOUR_IN_SECONDS );
32
  }
33
 
52
  update_option( 'job_manager_job_dashboard_page_id', $page_id );
53
  }
54
 
55
+ if ( $is_new_install ) {
56
+ $permalink_options = (array) json_decode( get_option( 'job_manager_permalinks', '[]' ), true );
57
+ $permalink_options['jobs_archive'] = '';
58
+ update_option( 'job_manager_permalinks', wp_json_encode( $permalink_options ) );
59
+ }
60
+
61
  delete_transient( 'wp_job_manager_addons_html' );
62
  update_option( 'wp_job_manager_version', JOB_MANAGER_VERSION );
63
  }
includes/class-wp-job-manager-post-types.php CHANGED
@@ -7,6 +7,8 @@
7
  */
8
  class WP_Job_Manager_Post_Types {
9
 
 
 
10
  /**
11
  * The single instance of the class.
12
  *
@@ -34,6 +36,7 @@ class WP_Job_Manager_Post_Types {
34
  */
35
  public function __construct() {
36
  add_action( 'init', array( $this, 'register_post_types' ), 0 );
 
37
  add_filter( 'admin_head', array( $this, 'admin_head' ) );
38
  add_action( 'job_manager_check_for_expired_jobs', array( $this, 'check_for_expired_jobs' ) );
39
  add_action( 'job_manager_delete_old_previews', array( $this, 'delete_old_previews' ) );
@@ -66,12 +69,60 @@ class WP_Job_Manager_Post_Types {
66
  add_action( 'update_post_meta', array( $this, 'update_post_meta' ), 10, 4 );
67
  add_action( 'wp_insert_post', array( $this, 'maybe_add_default_meta_data' ), 10, 2 );
68
 
 
69
  add_action( 'parse_query', array( $this, 'add_feed_query_args' ) );
70
 
71
  // Single job content.
72
  $this->job_content_filter( true );
73
  }
74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  /**
76
  * Registers the custom post type and taxonomies.
77
  */
@@ -143,6 +194,9 @@ class WP_Job_Manager_Post_Types {
143
  'assign_terms' => $admin_capability,
144
  ),
145
  'rewrite' => $rewrite,
 
 
 
146
  )
147
  )
148
  );
@@ -203,9 +257,21 @@ class WP_Job_Manager_Post_Types {
203
  'assign_terms' => $admin_capability,
204
  ),
205
  'rewrite' => $rewrite,
 
 
206
  )
207
  )
208
  );
 
 
 
 
 
 
 
 
 
 
209
  }
210
 
211
  /**
@@ -222,7 +288,7 @@ class WP_Job_Manager_Post_Types {
222
  * @param bool $enable_job_archive_page
223
  */
224
  if ( apply_filters( 'job_manager_enable_job_archive_page', current_theme_supports( 'job-manager-templates' ) ) ) {
225
- $has_archive = _x( 'jobs', 'Post type archive slug - resave permalinks after changing this', 'wp-job-manager' );
226
  } else {
227
  $has_archive = false;
228
  }
@@ -239,7 +305,7 @@ class WP_Job_Manager_Post_Types {
239
  apply_filters(
240
  'register_post_type_job_listing',
241
  array(
242
- 'labels' => array(
243
  'name' => $plural,
244
  'singular_name' => $singular,
245
  'menu_name' => __( 'Job Listings', 'wp-job-manager' ),
@@ -271,20 +337,25 @@ class WP_Job_Manager_Post_Types {
271
  'use_featured_image' => __( 'Use as company logo', 'wp-job-manager' ),
272
  ),
273
  // translators: Placeholder %s is the plural label of the job listing post type.
274
- 'description' => sprintf( __( 'This is where you can create and manage %s.', 'wp-job-manager' ), $plural ),
275
- 'public' => true,
276
- 'show_ui' => true,
277
- 'capability_type' => 'job_listing',
278
- 'map_meta_cap' => true,
279
- 'publicly_queryable' => true,
280
- 'exclude_from_search' => false,
281
- 'hierarchical' => false,
282
- 'rewrite' => $rewrite,
283
- 'query_var' => true,
284
- 'supports' => array( 'title', 'editor', 'custom-fields', 'publicize', 'thumbnail' ),
285
- 'has_archive' => $has_archive,
286
- 'show_in_nav_menus' => false,
287
- 'delete_with_user' => true,
 
 
 
 
 
288
  )
289
  )
290
  );
@@ -292,7 +363,7 @@ class WP_Job_Manager_Post_Types {
292
  /**
293
  * Feeds
294
  */
295
- add_feed( 'job_feed', array( $this, 'job_feed' ) );
296
 
297
  /**
298
  * Post status
@@ -301,7 +372,7 @@ class WP_Job_Manager_Post_Types {
301
  'expired',
302
  array(
303
  'label' => _x( 'Expired', 'post status', 'wp-job-manager' ),
304
- 'public' => true,
305
  'protected' => true,
306
  'exclude_from_search' => true,
307
  'show_in_admin_all_list' => true,
@@ -461,6 +532,35 @@ class WP_Job_Manager_Post_Types {
461
  remove_filter( 'posts_search', 'get_job_listings_keyword_search' );
462
  }
463
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
464
  /**
465
  * Adds query arguments in order to make sure that the feed properly queries the 'job_listing' type.
466
  *
@@ -469,7 +569,7 @@ class WP_Job_Manager_Post_Types {
469
  public function add_feed_query_args( $wp ) {
470
 
471
  // Let's leave if not the job feed.
472
- if ( ! isset( $wp->query_vars['feed'] ) || 'job_feed' !== $wp->query_vars['feed'] ) {
473
  return;
474
  }
475
 
@@ -675,6 +775,44 @@ class WP_Job_Manager_Post_Types {
675
  return $data;
676
  }
677
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
678
  /**
679
  * Retrieves permalink settings.
680
  *
@@ -688,19 +826,34 @@ class WP_Job_Manager_Post_Types {
688
  switch_to_locale( get_locale() );
689
  }
690
 
691
- $permalinks = wp_parse_args(
692
- (array) get_option( 'wpjm_permalinks', array() ),
 
 
 
 
 
 
 
 
 
 
 
 
 
693
  array(
694
  'job_base' => '',
695
  'category_base' => '',
696
  'type_base' => '',
 
697
  )
698
  );
699
 
700
- // Ensure rewrite slugs are set.
701
- $permalinks['job_rewrite_slug'] = untrailingslashit( empty( $permalinks['job_base'] ) ? _x( 'job', 'Job permalink - resave permalinks after changing this', 'wp-job-manager' ) : $permalinks['job_base'] );
702
- $permalinks['category_rewrite_slug'] = untrailingslashit( empty( $permalinks['category_base'] ) ? _x( 'job-category', 'Job category slug - resave permalinks after changing this', 'wp-job-manager' ) : $permalinks['category_base'] );
703
- $permalinks['type_rewrite_slug'] = untrailingslashit( empty( $permalinks['type_base'] ) ? _x( 'job-type', 'Job type slug - resave permalinks after changing this', 'wp-job-manager' ) : $permalinks['type_base'] );
 
704
 
705
  // Restore the original locale.
706
  if ( function_exists( 'restore_current_locale' ) && did_action( 'admin_init' ) ) {
@@ -852,4 +1005,18 @@ class WP_Job_Manager_Post_Types {
852
  echo '<script type="application/ld+json">' . wp_json_encode( $structured_data ) . '</script>';
853
  }
854
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
855
  }
7
  */
8
  class WP_Job_Manager_Post_Types {
9
 
10
+ const PERMALINK_OPTION_NAME = 'job_manager_permalinks';
11
+
12
  /**
13
  * The single instance of the class.
14
  *
36
  */
37
  public function __construct() {
38
  add_action( 'init', array( $this, 'register_post_types' ), 0 );
39
+ add_action( 'init', array( $this, 'prepare_block_editor' ) );
40
  add_filter( 'admin_head', array( $this, 'admin_head' ) );
41
  add_action( 'job_manager_check_for_expired_jobs', array( $this, 'check_for_expired_jobs' ) );
42
  add_action( 'job_manager_delete_old_previews', array( $this, 'delete_old_previews' ) );
69
  add_action( 'update_post_meta', array( $this, 'update_post_meta' ), 10, 4 );
70
  add_action( 'wp_insert_post', array( $this, 'maybe_add_default_meta_data' ), 10, 2 );
71
 
72
+ add_action( 'parse_query', array( $this, 'public_search_handler' ) );
73
  add_action( 'parse_query', array( $this, 'add_feed_query_args' ) );
74
 
75
  // Single job content.
76
  $this->job_content_filter( true );
77
  }
78
 
79
+ /**
80
+ * Prepare CPTs for special block editor situations.
81
+ */
82
+ public function prepare_block_editor() {
83
+ add_filter( 'allowed_block_types', array( $this, 'force_classic_block' ), 10, 2 );
84
+
85
+ if ( false === job_manager_multi_job_type() ) {
86
+ add_filter( 'rest_prepare_taxonomy', array( $this, 'hide_job_type_block_editor_selector' ), 10, 3 );
87
+ }
88
+ }
89
+
90
+ /**
91
+ * Forces job listings to just have the classic block. This is necessary with the use of the classic editor on
92
+ * the frontend.
93
+ *
94
+ * @param array $allowed_block_types
95
+ * @param WP_Post $post
96
+ * @return array
97
+ */
98
+ public function force_classic_block( $allowed_block_types, $post ) {
99
+ if ( 'job_listing' === $post->post_type ) {
100
+ return array( 'core/freeform' );
101
+ }
102
+ return $allowed_block_types;
103
+ }
104
+
105
+ /**
106
+ * Filters a taxonomy returned from the REST API.
107
+ *
108
+ * Allows modification of the taxonomy data right before it is returned.
109
+ *
110
+ * @param WP_REST_Response $response The response object.
111
+ * @param object $taxonomy The original taxonomy object.
112
+ * @param WP_REST_Request $request Request used to generate the response.
113
+ *
114
+ * @return WP_REST_Response
115
+ */
116
+ public function hide_job_type_block_editor_selector( $response, $taxonomy, $request ) {
117
+ if (
118
+ 'job_listing_type' === $taxonomy->name
119
+ && 'edit' === $request->get_param( 'context' )
120
+ ) {
121
+ $response->data['visibility']['show_ui'] = false;
122
+ }
123
+ return $response;
124
+ }
125
+
126
  /**
127
  * Registers the custom post type and taxonomies.
128
  */
194
  'assign_terms' => $admin_capability,
195
  ),
196
  'rewrite' => $rewrite,
197
+ 'show_in_rest' => true,
198
+ 'rest_base' => 'job-categories',
199
+
200
  )
201
  )
202
  );
257
  'assign_terms' => $admin_capability,
258
  ),
259
  'rewrite' => $rewrite,
260
+ 'show_in_rest' => true,
261
+ 'rest_base' => 'job-types',
262
  )
263
  )
264
  );
265
+ if ( function_exists( 'wpjm_job_listing_employment_type_enabled' ) && wpjm_job_listing_employment_type_enabled() ) {
266
+ register_meta( 'term', 'employment_type', array(
267
+ 'object_subtype' => 'job_listing_type',
268
+ 'show_in_rest' => true,
269
+ 'type' => 'string',
270
+ 'single' => true,
271
+ 'description' => esc_html__( 'Employment Type', 'wp-job-manager' ),
272
+ 'sanitize_callback' => array( $this, 'sanitize_employment_type' ),
273
+ ) );
274
+ }
275
  }
276
 
277
  /**
288
  * @param bool $enable_job_archive_page
289
  */
290
  if ( apply_filters( 'job_manager_enable_job_archive_page', current_theme_supports( 'job-manager-templates' ) ) ) {
291
+ $has_archive = $permalink_structure['jobs_archive_rewrite_slug'];
292
  } else {
293
  $has_archive = false;
294
  }
305
  apply_filters(
306
  'register_post_type_job_listing',
307
  array(
308
+ 'labels' => array(
309
  'name' => $plural,
310
  'singular_name' => $singular,
311
  'menu_name' => __( 'Job Listings', 'wp-job-manager' ),
337
  'use_featured_image' => __( 'Use as company logo', 'wp-job-manager' ),
338
  ),
339
  // translators: Placeholder %s is the plural label of the job listing post type.
340
+ 'description' => sprintf( __( 'This is where you can create and manage %s.', 'wp-job-manager' ), $plural ),
341
+ 'public' => true,
342
+ 'show_ui' => true,
343
+ 'capability_type' => 'job_listing',
344
+ 'map_meta_cap' => true,
345
+ 'publicly_queryable' => true,
346
+ 'exclude_from_search' => false,
347
+ 'hierarchical' => false,
348
+ 'rewrite' => $rewrite,
349
+ 'query_var' => true,
350
+ 'supports' => array( 'title', 'editor', 'custom-fields', 'publicize', 'thumbnail' ),
351
+ 'has_archive' => $has_archive,
352
+ 'show_in_nav_menus' => false,
353
+ 'delete_with_user' => true,
354
+ 'show_in_rest' => true,
355
+ 'rest_base' => 'job-listings',
356
+ 'rest_controller_class' => 'WP_REST_Posts_Controller',
357
+ 'template' => array( array( 'core/freeform' ) ),
358
+ 'template_lock' => 'all',
359
  )
360
  )
361
  );
363
  /**
364
  * Feeds
365
  */
366
+ add_feed( self::get_job_feed_name(), array( $this, 'job_feed' ) );
367
 
368
  /**
369
  * Post status
372
  'expired',
373
  array(
374
  'label' => _x( 'Expired', 'post status', 'wp-job-manager' ),
375
+ 'public' => ! isset( $_GET['s'] ),
376
  'protected' => true,
377
  'exclude_from_search' => true,
378
  'show_in_admin_all_list' => true,
532
  remove_filter( 'posts_search', 'get_job_listings_keyword_search' );
533
  }
534
 
535
+ /**
536
+ * Modifies WordPress Query of public search.
537
+ *
538
+ * @param WP_Query $query Query being processed.
539
+ */
540
+ public function public_search_handler( $query ) {
541
+ if ( ! $query->is_search() ) {
542
+ return;
543
+ }
544
+
545
+ // Remove filled positions, if necessary.
546
+ if ( 1 === absint( get_option( 'job_manager_hide_filled_positions' ) ) ) {
547
+ $meta_query = $query->get( 'meta_query' );
548
+ if ( ! is_array( $meta_query ) ) {
549
+ $meta_query = array();
550
+ }
551
+
552
+ $meta_query[] = array(
553
+ 'key' => '_filled',
554
+ 'value' => '1',
555
+ 'compare' => '!=',
556
+ );
557
+
558
+ if ( ! empty( $meta_query ) ) {
559
+ $query->set( 'meta_query', $meta_query );
560
+ }
561
+ }
562
+ }
563
+
564
  /**
565
  * Adds query arguments in order to make sure that the feed properly queries the 'job_listing' type.
566
  *
569
  public function add_feed_query_args( $wp ) {
570
 
571
  // Let's leave if not the job feed.
572
+ if ( ! isset( $wp->query_vars['feed'] ) || self::get_job_feed_name() !== $wp->query_vars['feed'] ) {
573
  return;
574
  }
575
 
775
  return $data;
776
  }
777
 
778
+ /**
779
+ * Returns the name of the job RSS feed.
780
+ *
781
+ * @return string
782
+ */
783
+ public static function get_job_feed_name() {
784
+ /**
785
+ * Change the name of the job feed.
786
+ *
787
+ * NOTE: When you override this, you must re-save permalink settings to clear the rewrite cache.
788
+ *
789
+ * @since 1.32.0
790
+ *
791
+ * @param string $job_feed_name Slug used for the job feed.
792
+ */
793
+ return apply_filters( 'job_manager_job_feed_name', 'job_feed' );
794
+ }
795
+
796
+ /**
797
+ * Get the permalink settings directly from the option.
798
+ *
799
+ * @return array Permalink settings option.
800
+ */
801
+ public static function get_raw_permalink_settings() {
802
+ /**
803
+ * Option `wpjm_permalinks` was renamed to match other options in 1.32.0.
804
+ *
805
+ * Reference to the old option and support for non-standard plugin updates will be removed in 1.34.0.
806
+ */
807
+ $legacy_permalink_settings = '[]';
808
+ if ( false !== get_option( 'wpjm_permalinks', false ) ) {
809
+ $legacy_permalink_settings = wp_json_encode( get_option( 'wpjm_permalinks', array() ) );
810
+ delete_option( 'wpjm_permalinks' );
811
+ }
812
+
813
+ return (array) json_decode( get_option( self::PERMALINK_OPTION_NAME, $legacy_permalink_settings ), true );
814
+ }
815
+
816
  /**
817
  * Retrieves permalink settings.
818
  *
826
  switch_to_locale( get_locale() );
827
  }
828
 
829
+ $permalink_settings = self::get_raw_permalink_settings();
830
+
831
+ // First-time activations will get this cleared on activation.
832
+ if ( ! array_key_exists( 'jobs_archive', $permalink_settings ) ) {
833
+ // Create entry to prevent future checks.
834
+ $permalink_settings['jobs_archive'] = '';
835
+ if ( current_theme_supports( 'job-manager-templates' ) ) {
836
+ // This isn't the first activation and the theme supports it. Set the default to legacy value.
837
+ $permalink_settings['jobs_archive'] = _x( 'jobs', 'Post type archive slug - resave permalinks after changing this', 'wp-job-manager' );
838
+ }
839
+ update_option( self::PERMALINK_OPTION_NAME, wp_json_encode( $permalink_settings ) );
840
+ }
841
+
842
+ $permalinks = wp_parse_args(
843
+ $permalink_settings,
844
  array(
845
  'job_base' => '',
846
  'category_base' => '',
847
  'type_base' => '',
848
+ 'jobs_archive' => '',
849
  )
850
  );
851
 
852
+ // Ensure rewrite slugs are set. Use legacy translation options if not.
853
+ $permalinks['job_rewrite_slug'] = untrailingslashit( empty( $permalinks['job_base'] ) ? _x( 'job', 'Job permalink - resave permalinks after changing this', 'wp-job-manager' ) : $permalinks['job_base'] );
854
+ $permalinks['category_rewrite_slug'] = untrailingslashit( empty( $permalinks['category_base'] ) ? _x( 'job-category', 'Job category slug - resave permalinks after changing this', 'wp-job-manager' ) : $permalinks['category_base'] );
855
+ $permalinks['type_rewrite_slug'] = untrailingslashit( empty( $permalinks['type_base'] ) ? _x( 'job-type', 'Job type slug - resave permalinks after changing this', 'wp-job-manager' ) : $permalinks['type_base'] );
856
+ $permalinks['jobs_archive_rewrite_slug'] = untrailingslashit( empty( $permalinks['jobs_archive'] ) ? 'job-listings' : $permalinks['jobs_archive'] );
857
 
858
  // Restore the original locale.
859
  if ( function_exists( 'restore_current_locale' ) && did_action( 'admin_init' ) ) {
1005
  echo '<script type="application/ld+json">' . wp_json_encode( $structured_data ) . '</script>';
1006
  }
1007
  }
1008
+
1009
+ /**
1010
+ * Sanitize and verify employment type.
1011
+ *
1012
+ * @param string $employment_type
1013
+ * @return string
1014
+ */
1015
+ public function sanitize_employment_type( $employment_type ) {
1016
+ $employment_types = wpjm_job_listing_employment_type_options();
1017
+ if ( ! isset( $employment_types[ $employment_type ] ) ) {
1018
+ return null;
1019
+ }
1020
+ return $employment_type;
1021
+ }
1022
  }
includes/class-wp-job-manager-shortcodes.php CHANGED
@@ -150,6 +150,7 @@ class WP_Job_Manager_Shortcodes {
150
 
151
  break;
152
  case 'relist':
 
153
  if ( ! job_manager_get_permalink( 'submit_job_form' ) ) {
154
  throw new Exception( __( 'Missing submission page.', 'wp-job-manager' ) );
155
  }
@@ -226,7 +227,7 @@ class WP_Job_Manager_Shortcodes {
226
  'job_manager_get_dashboard_jobs_args',
227
  array(
228
  'post_type' => 'job_listing',
229
- 'post_status' => array( 'publish', 'expired', 'pending' ),
230
  'ignore_sticky_posts' => 1,
231
  'posts_per_page' => $posts_per_page,
232
  'offset' => ( max( 1, get_query_var( 'paged' ) ) - 1 ) * $posts_per_page,
150
 
151
  break;
152
  case 'relist':
153
+ case 'continue':
154
  if ( ! job_manager_get_permalink( 'submit_job_form' ) ) {
155
  throw new Exception( __( 'Missing submission page.', 'wp-job-manager' ) );
156
  }
227
  'job_manager_get_dashboard_jobs_args',
228
  array(
229
  'post_type' => 'job_listing',
230
+ 'post_status' => array( 'publish', 'expired', 'pending', 'draft', 'preview' ),
231
  'ignore_sticky_posts' => 1,
232
  'posts_per_page' => $posts_per_page,
233
  'offset' => ( max( 1, get_query_var( 'paged' ) ) - 1 ) * $posts_per_page,
includes/class-wp-job-manager-usage-tracking.php CHANGED
@@ -107,7 +107,7 @@ class WP_Job_Manager_Usage_Tracking extends WP_Job_Manager_Usage_Tracking_Base {
107
  // translators: Placeholder %s is a URL to the document on wpjobmanager.com with info on usage tracking.
108
  __(
109
  'We\'d love if you helped us make WP Job Manager better by allowing us to collect
110
- <a href="%s" target="_blank">usage tracking data</a>. No sensitive information is
111
  collected, and you can opt out at any time.',
112
  'wp-job-manager'
113
  ), self::WPJM_TRACKING_INFO_URL
@@ -174,7 +174,7 @@ class WP_Job_Manager_Usage_Tracking extends WP_Job_Manager_Usage_Tracking_Base {
174
  */
175
  __(
176
  'Help us make WP Job Manager better by allowing us to collect
177
- <a href="%s" target="_blank">usage tracking data</a>.
178
  No sensitive information is collected.', 'wp-job-manager'
179
  ), self::WPJM_TRACKING_INFO_URL
180
  );
107
  // translators: Placeholder %s is a URL to the document on wpjobmanager.com with info on usage tracking.
108
  __(
109
  'We\'d love if you helped us make WP Job Manager better by allowing us to collect
110
+ <a href="%s">usage tracking data</a>. No sensitive information is
111
  collected, and you can opt out at any time.',
112
  'wp-job-manager'
113
  ), self::WPJM_TRACKING_INFO_URL
174
  */
175
  __(
176
  'Help us make WP Job Manager better by allowing us to collect
177
+ <a href="%s">usage tracking data</a>.
178
  No sensitive information is collected.', 'wp-job-manager'
179
  ), self::WPJM_TRACKING_INFO_URL
180
  );
includes/forms/class-wp-job-manager-form-submit-job.php CHANGED
@@ -79,6 +79,7 @@ class WP_Job_Manager_Form_Submit_Job extends WP_Job_Manager_Form {
79
  ),
80
  'done' => array(
81
  'name' => __( 'Done', 'wp-job-manager' ),
 
82
  'view' => array( $this, 'done' ),
83
  'priority' => 30,
84
  ),
@@ -120,7 +121,7 @@ class WP_Job_Manager_Form_Submit_Job extends WP_Job_Manager_Form {
120
  $this->job_id = 0;
121
  $this->step = 0;
122
  }
123
- } elseif ( ! in_array( $job_status, apply_filters( 'job_manager_valid_submit_job_statuses', array( 'preview' ) ), true ) ) {
124
  $this->job_id = 0;
125
  $this->step = 0;
126
  }
@@ -598,8 +599,13 @@ class WP_Job_Manager_Form_Submit_Job extends WP_Job_Manager_Form {
598
  throw new Exception( __( 'You must be signed in to post a new listing.', 'wp-job-manager' ) );
599
  }
600
 
 
 
 
 
 
601
  // Update the job.
602
- $this->save_job( $values['job']['job_title'], $values['job']['job_description'], $this->job_id ? '' : 'preview', $values );
603
  $this->update_job_data( $values );
604
 
605
  // Successful, show next step.
@@ -876,7 +882,13 @@ class WP_Job_Manager_Form_Submit_Job extends WP_Job_Manager_Form {
876
  * Displays the final screen after a job listing has been submitted.
877
  */
878
  public function done() {
879
- do_action( 'job_manager_job_submitted', $this->job_id );
880
  get_job_manager_template( 'job-submitted.php', array( 'job' => get_post( $this->job_id ) ) );
881
  }
 
 
 
 
 
 
 
882
  }
79
  ),
80
  'done' => array(
81
  'name' => __( 'Done', 'wp-job-manager' ),
82
+ 'before' => array( $this, 'done_before' ),
83
  'view' => array( $this, 'done' ),
84
  'priority' => 30,
85
  ),
121
  $this->job_id = 0;
122
  $this->step = 0;
123
  }
124
+ } elseif ( ! in_array( $job_status, apply_filters( 'job_manager_valid_submit_job_statuses', array( 'preview', 'draft' ) ), true ) ) {
125
  $this->job_id = 0;
126
  $this->step = 0;
127
  }
599
  throw new Exception( __( 'You must be signed in to post a new listing.', 'wp-job-manager' ) );
600
  }
601
 
602
+ $post_status = '';
603
+ if ( ! $this->job_id || 'draft' === get_post_status( $this->job_id ) ) {
604
+ $post_status = 'preview';
605
+ }
606
+
607
  // Update the job.
608
+ $this->save_job( $values['job']['job_title'], $values['job']['job_description'], $post_status, $values );
609
  $this->update_job_data( $values );
610
 
611
  // Successful, show next step.
882
  * Displays the final screen after a job listing has been submitted.
883
  */
884
  public function done() {
 
885
  get_job_manager_template( 'job-submitted.php', array( 'job' => get_post( $this->job_id ) ) );
886
  }
887
+
888
+ /**
889
+ * Handles the job submissions before the view is called.
890
+ */
891
+ public function done_before() {
892
+ do_action( 'job_manager_job_submitted', $this->job_id );
893
+ }
894
  }
includes/rest-api/class-wp-job-manager-registrable-job-listings.php CHANGED
@@ -79,11 +79,12 @@ class WP_Job_Manager_Registrable_Job_Listings implements WP_Job_Manager_REST_Int
79
  return false;
80
  }
81
 
82
- if ( $wp_post_types[ $post_type_name ]->show_in_rest ) {
83
  return true;
84
  }
85
 
86
  // Optionally customize the rest_base or controller class.
 
87
  $wp_post_types[ $post_type_name ]->show_in_rest = true;
88
  $wp_post_types[ $post_type_name ]->rest_base = 'job-listings';
89
  $wp_post_types[ $post_type_name ]->rest_controller_class = 'WP_REST_Posts_Controller';
79
  return false;
80
  }
81
 
82
+ if ( ! empty( $wp_post_types[ $post_type_name ]->mixtape_show_in_rest ) ) {
83
  return true;
84
  }
85
 
86
  // Optionally customize the rest_base or controller class.
87
+ $wp_post_types[ $post_type_name ]->mixtape_show_in_rest = true;
88
  $wp_post_types[ $post_type_name ]->show_in_rest = true;
89
  $wp_post_types[ $post_type_name ]->rest_base = 'job-listings';
90
  $wp_post_types[ $post_type_name ]->rest_controller_class = 'WP_REST_Posts_Controller';
includes/rest-api/class-wp-job-manager-registrable-taxonomy-type.php CHANGED
@@ -67,12 +67,13 @@ abstract class WP_Job_Manager_Registrable_Taxonomy_Type implements WP_Job_Manage
67
  return false;
68
  }
69
 
70
- if ( $wp_taxonomies[ $taxonomy_type ]->show_in_rest ) {
71
  return true;
72
  }
73
 
74
- $wp_taxonomies[ $taxonomy_type ]->show_in_rest = true;
75
- $wp_taxonomies[ $taxonomy_type ]->rest_base = $this->get_rest_base();
 
76
 
77
  $this->model_prototype = $environment->model( $this->get_model_class_name() );
78
 
67
  return false;
68
  }
69
 
70
+ if ( ! empty( $wp_taxonomies[ $taxonomy_type ]->mixtape_show_in_rest ) ) {
71
  return true;
72
  }
73
 
74
+ $wp_taxonomies[ $taxonomy_type ]->mixtape_show_in_rest = true;
75
+ $wp_taxonomies[ $taxonomy_type ]->show_in_rest = true;
76
+ $wp_taxonomies[ $taxonomy_type ]->rest_base = $this->get_rest_base();
77
 
78
  $this->model_prototype = $environment->model( $this->get_model_class_name() );
79
 
languages/wp-job-manager.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the GPL2+.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: WP Job Manager 1.31.3\n"
6
  "Report-Msgid-Bugs-To: https://github.com/Automattic/WP-Job-Manager/issues\n"
7
- "POT-Creation-Date: 2018-08-23 10:19:58+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -23,15 +23,15 @@ msgstr ""
23
  msgid "<a href=\"%s\">Switch to primary language</a> to edit this setting."
24
  msgstr ""
25
 
26
- #: includes/abstracts/abstract-wp-job-manager-form.php:319
27
- #: includes/abstracts/abstract-wp-job-manager-form.php:334
28
  #. translators: Placeholder is for the label of the reCAPTCHA field.
29
  #. translators: %s is the name of the form validation that failed.
30
  msgid "\"%s\" check failed. Please try again."
31
  msgstr ""
32
 
33
  #: includes/admin/class-wp-job-manager-addons.php:124
34
- #: includes/admin/class-wp-job-manager-admin.php:155
35
  #: includes/admin/views/html-admin-page-addons.php:2
36
  msgid "WP Job Manager Add-ons"
37
  msgstr ""
@@ -41,25 +41,33 @@ msgstr ""
41
  msgid "Licenses"
42
  msgstr ""
43
 
44
- #: includes/admin/class-wp-job-manager-admin.php:89
 
 
 
 
 
 
 
 
45
  #. translators: %s is the URL for the page where users can go to update
46
  #. WordPress.
47
  msgid ""
48
  "<strong>WP Job Manager</strong> requires a more recent version of "
49
- "WordPress. <a href=\"%s\">Please update WordPresse</a> to avoid issues."
50
  msgstr ""
51
 
52
- #: includes/admin/class-wp-job-manager-admin.php:101
53
  #. translators: Placeholder (%s) is the URL where users can go to update
54
  #. WordPress.
55
  msgid "<a href=\"%s\" style=\"color: red\">WordPress Update Required</a>"
56
  msgstr ""
57
 
58
- #: includes/admin/class-wp-job-manager-admin.php:152
59
  msgid "Settings"
60
  msgstr ""
61
 
62
- #: includes/admin/class-wp-job-manager-admin.php:155
63
  msgid "Add-ons"
64
  msgstr ""
65
 
@@ -111,83 +119,83 @@ msgstr ""
111
  msgid "%s marked as not filled"
112
  msgstr ""
113
 
114
- #: includes/admin/class-wp-job-manager-cpt.php:310
115
  msgid "Select category"
116
  msgstr ""
117
 
118
- #: includes/admin/class-wp-job-manager-cpt.php:335
119
  msgid "Select Filled"
120
  msgstr ""
121
 
122
- #: includes/admin/class-wp-job-manager-cpt.php:339
123
  msgid "Filled"
124
  msgstr ""
125
 
126
- #: includes/admin/class-wp-job-manager-cpt.php:343
127
  msgid "Not Filled"
128
  msgstr ""
129
 
130
- #: includes/admin/class-wp-job-manager-cpt.php:354
131
  msgid "Select Featured"
132
  msgstr ""
133
 
134
- #: includes/admin/class-wp-job-manager-cpt.php:358
135
  msgid "Featured"
136
  msgstr ""
137
 
138
- #: includes/admin/class-wp-job-manager-cpt.php:362
139
  msgid "Not Featured"
140
  msgstr ""
141
 
142
- #: includes/admin/class-wp-job-manager-cpt.php:407
143
- #: includes/admin/class-wp-job-manager-cpt.php:464
144
  msgid "Position"
145
  msgstr ""
146
 
147
- #: includes/admin/class-wp-job-manager-cpt.php:424
148
  #. translators: %1$s is the singular name of the job listing post type; %2$s is
149
  #. the URL to view the listing.
150
  msgid "%1$s updated. <a href=\"%2$s\">View</a>"
151
  msgstr ""
152
 
153
- #: includes/admin/class-wp-job-manager-cpt.php:425
154
  msgid "Custom field updated."
155
  msgstr ""
156
 
157
- #: includes/admin/class-wp-job-manager-cpt.php:426
158
  msgid "Custom field deleted."
159
  msgstr ""
160
 
161
- #: includes/admin/class-wp-job-manager-cpt.php:428
162
  #. translators: %s is the singular name of the job listing post type.
163
  msgid "%s updated."
164
  msgstr ""
165
 
166
- #: includes/admin/class-wp-job-manager-cpt.php:430
167
  #. translators: %1$s is the singular name of the job listing post type; %2$s is
168
  #. the revision number.
169
  msgid "%1$s restored to revision from %2$s"
170
  msgstr ""
171
 
172
- #: includes/admin/class-wp-job-manager-cpt.php:432
173
  #. translators: %1$s is the singular name of the job listing post type; %2$s is
174
  #. the URL to view the listing.
175
  msgid "%1$s published. <a href=\"%2$s\">View</a>"
176
  msgstr ""
177
 
178
- #: includes/admin/class-wp-job-manager-cpt.php:434
179
  #. translators: %1$s is the singular name of the job listing post type; %2$s is
180
  #. the URL to view the listing.
181
  msgid "%s saved."
182
  msgstr ""
183
 
184
- #: includes/admin/class-wp-job-manager-cpt.php:436
185
  #. translators: %1$s is the singular name of the job listing post type; %2$s is
186
  #. the URL to preview the listing.
187
  msgid "%1$s submitted. <a target=\"_blank\" href=\"%2$s\">Preview</a>"
188
  msgstr ""
189
 
190
- #: includes/admin/class-wp-job-manager-cpt.php:439
191
  #. translators: %1$s is the singular name of the post type; %2$s is the date
192
  #. the post will be published; %3$s is the URL to preview the listing.
193
  msgid ""
@@ -195,88 +203,88 @@ msgid ""
195
  "href=\"%3$s\">Preview</a>"
196
  msgstr ""
197
 
198
- #: includes/admin/class-wp-job-manager-cpt.php:445
199
  #. translators: %1$s is the singular name of the job listing post type; %2$s is
200
  #. the URL to view the listing.
201
  msgid "%1$s draft updated. <a target=\"_blank\" href=\"%2$s\">Preview</a>"
202
  msgstr ""
203
 
204
- #: includes/admin/class-wp-job-manager-cpt.php:465
205
  msgid "Type"
206
  msgstr ""
207
 
208
- #: includes/admin/class-wp-job-manager-cpt.php:466
209
  #: includes/admin/class-wp-job-manager-writepanels.php:57
210
  #: includes/class-wp-job-manager-email-notifications.php:234
211
- #: includes/forms/class-wp-job-manager-form-submit-job.php:183
212
  #: includes/widgets/class-wp-job-manager-widget-recent-jobs.php:40
213
  #: templates/job-filters.php:35 templates/job-filters.php:36
214
  msgid "Location"
215
  msgstr ""
216
 
217
- #: includes/admin/class-wp-job-manager-cpt.php:467
218
  msgid "Status"
219
  msgstr ""
220
 
221
- #: includes/admin/class-wp-job-manager-cpt.php:468
222
  msgid "Posted"
223
  msgstr ""
224
 
225
- #: includes/admin/class-wp-job-manager-cpt.php:469
226
  msgid "Expires"
227
  msgstr ""
228
 
229
- #: includes/admin/class-wp-job-manager-cpt.php:470
230
  #: includes/admin/class-wp-job-manager-settings.php:157
231
  msgid "Categories"
232
  msgstr ""
233
 
234
- #: includes/admin/class-wp-job-manager-cpt.php:471
235
  msgid "Featured?"
236
  msgstr ""
237
 
238
- #: includes/admin/class-wp-job-manager-cpt.php:472
239
- #: includes/class-wp-job-manager-shortcodes.php:247
240
  msgid "Filled?"
241
  msgstr ""
242
 
243
- #: includes/admin/class-wp-job-manager-cpt.php:473
244
  msgid "Actions"
245
  msgstr ""
246
 
247
- #: includes/admin/class-wp-job-manager-cpt.php:538
248
  #. translators: %d is the post ID for the job listing.
249
  msgid "ID: %d"
250
  msgstr ""
251
 
252
- #: includes/admin/class-wp-job-manager-cpt.php:582
253
  #. translators: %s placeholder is the username of the user.
254
  msgid "by a guest"
255
  msgstr ""
256
 
257
- #: includes/admin/class-wp-job-manager-cpt.php:582
258
  msgid "by %s"
259
  msgstr ""
260
 
261
- #: includes/admin/class-wp-job-manager-cpt.php:601
262
  msgid "Approve"
263
  msgstr ""
264
 
265
- #: includes/admin/class-wp-job-manager-cpt.php:609
266
- #: includes/admin/class-wp-job-manager-writepanels.php:282
267
- #: includes/admin/class-wp-job-manager-writepanels.php:287
268
- #: includes/admin/class-wp-job-manager-writepanels.php:292
269
  msgid "View"
270
  msgstr ""
271
 
272
- #: includes/admin/class-wp-job-manager-cpt.php:616
273
- #: includes/class-wp-job-manager-post-types.php:251
274
  #: templates/job-dashboard.php:52 templates/job-dashboard.php:70
275
  msgid "Edit"
276
  msgstr ""
277
 
278
- #: includes/admin/class-wp-job-manager-cpt.php:623
279
- #: templates/job-dashboard.php:75
280
  msgid "Delete"
281
  msgstr ""
282
 
@@ -292,6 +300,10 @@ msgstr ""
292
  msgid "Job type base"
293
  msgstr ""
294
 
 
 
 
 
295
  #: includes/admin/class-wp-job-manager-settings.php:84
296
  msgid "General"
297
  msgstr ""
@@ -337,8 +349,8 @@ msgid ""
337
  msgstr ""
338
 
339
  #: includes/admin/class-wp-job-manager-settings.php:117
340
- #: includes/class-wp-job-manager-post-types.php:245
341
- #: includes/class-wp-job-manager-post-types.php:342
342
  msgid "Job Listings"
343
  msgstr ""
344
 
@@ -722,94 +734,265 @@ msgstr ""
722
  msgid "Select a page&hellip;"
723
  msgstr ""
724
 
725
- #: includes/admin/class-wp-job-manager-setup.php:52
726
  msgid "Setup"
727
  msgstr ""
728
 
729
- #: includes/admin/class-wp-job-manager-setup.php:205
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
730
  msgid "WP Job Manager Setup"
731
  msgstr ""
732
 
733
- #: includes/admin/class-wp-job-manager-setup.php:212
734
  msgid "1. Introduction"
735
  msgstr ""
736
 
737
- #: includes/admin/class-wp-job-manager-setup.php:213
738
  msgid "2. Page Setup"
739
  msgstr ""
740
 
741
- #: includes/admin/class-wp-job-manager-setup.php:214
742
  msgid "3. Done"
743
  msgstr ""
744
 
745
- #: includes/admin/class-wp-job-manager-setup.php:219
746
  msgid "Welcome to the Setup Wizard!"
747
  msgstr ""
748
 
749
- #: includes/admin/class-wp-job-manager-setup.php:221
750
  msgid ""
751
  "Thanks for installing <em>WP Job Manager</em>! Let's get your site ready to "
752
  "accept job listings."
753
  msgstr ""
754
 
755
- #: includes/admin/class-wp-job-manager-setup.php:222
756
  msgid ""
757
  "This setup wizard will walk you through the process of creating pages for "
758
  "job submissions, management, and listings."
759
  msgstr ""
760
 
761
- #: includes/admin/class-wp-job-manager-setup.php:226
762
  #. translators: Placeholder %s is the path to WPJM documentation site.
763
  msgid ""
764
  "If you'd prefer to skip this and set up your pages manually, our <a "
765
  "href=\"%s\">documentation</a> will walk you through each step."
766
  msgstr ""
767
 
768
- #: includes/admin/class-wp-job-manager-setup.php:236
769
  msgid "Start setup"
770
  msgstr ""
771
 
772
- #: includes/admin/class-wp-job-manager-setup.php:237
773
  msgid "Skip setup. I will set up the plugin manually."
774
  msgstr ""
775
 
776
- #: includes/admin/class-wp-job-manager-setup.php:244
777
  msgid "Page Setup"
778
  msgstr ""
779
 
780
- #: includes/admin/class-wp-job-manager-setup.php:246
781
  msgid ""
782
  "With WP Job Manager, employers and applicants can post, manage, and browse "
783
  "job listings right on your website. Tell us which of these common pages "
784
  "you'd like your site to have and we'll create and configure them for you."
785
  msgstr ""
786
 
787
- #: includes/admin/class-wp-job-manager-setup.php:251
788
  #. translators: %1$s is URL to WordPress core shortcode documentation. %2$s is
789
  #. URL to WPJM specific shortcode reference.
790
  msgid ""
791
  "(These pages are created using <a href=\"%1$s\" title=\"What is a "
792
- "shortcode?\" target=\"_blank\" class=\"help-page-link\">shortcodes</a>, \n"
793
  "\t\t\t\t\t\t\t\twhich we take care of in this step. If you'd like to build "
794
- "these pages yourself or want to add one of these options to an existing \n"
795
  "\t\t\t\t\t\t\t\tpage on your site, you can skip this step and take a look "
796
- "at <a href=\"%2$s\" target=\"_blank\" class=\"help-page-link\">shortcode "
797
- "documentation</a> for detailed instructions.)"
798
  msgstr ""
799
 
800
- #: includes/admin/class-wp-job-manager-setup.php:266
801
  msgid "Page Title"
802
  msgstr ""
803
 
804
- #: includes/admin/class-wp-job-manager-setup.php:267
805
  msgid "Page Description"
806
  msgstr ""
807
 
808
- #: includes/admin/class-wp-job-manager-setup.php:268
809
  msgid "Content Shortcode"
810
  msgstr ""
811
 
812
- #: includes/admin/class-wp-job-manager-setup.php:276
813
  msgid ""
814
  "Creates a page that allows employers to post new jobs directly from a page "
815
  "on your website, instead of requiring them to log in to an admin area. If "
@@ -817,7 +1000,7 @@ msgid ""
817
  "the admin dashboard only -- you can uncheck this setting."
818
  msgstr ""
819
 
820
- #: includes/admin/class-wp-job-manager-setup.php:284
821
  msgid ""
822
  "Creates a page that allows employers to manage their job listings directly "
823
  "from a page on your website, instead of requiring them to log in to an "
@@ -825,70 +1008,70 @@ msgid ""
825
  "only, you can uncheck this setting."
826
  msgstr ""
827
 
828
- #: includes/admin/class-wp-job-manager-setup.php:291
829
  msgid "Creates a page where visitors can browse, search, and filter job listings."
830
  msgstr ""
831
 
832
- #: includes/admin/class-wp-job-manager-setup.php:299
833
  msgid "Skip this step"
834
  msgstr ""
835
 
836
- #: includes/admin/class-wp-job-manager-setup.php:309
837
  msgid "You're ready to start using WP Job Manager!"
838
  msgstr ""
839
 
840
- #: includes/admin/class-wp-job-manager-setup.php:311
841
  msgid "Wondering what to do now? Here are some of the most common next steps:"
842
  msgstr ""
843
 
844
- #: includes/admin/class-wp-job-manager-setup.php:314
845
  msgid "Tweak your settings"
846
  msgstr ""
847
 
848
- #: includes/admin/class-wp-job-manager-setup.php:315
849
  msgid "Add a job using the admin dashboard"
850
  msgstr ""
851
 
852
- #: includes/admin/class-wp-job-manager-setup.php:320
853
  msgid "View submitted job listings"
854
  msgstr ""
855
 
856
- #: includes/admin/class-wp-job-manager-setup.php:322
857
  msgid "Add job listings to a page using the [jobs] shortcode"
858
  msgstr ""
859
 
860
- #: includes/admin/class-wp-job-manager-setup.php:329
861
  msgid "Add a job via the front-end"
862
  msgstr ""
863
 
864
- #: includes/admin/class-wp-job-manager-setup.php:331
865
  msgid "Learn to use the front-end job submission board"
866
  msgstr ""
867
 
868
- #: includes/admin/class-wp-job-manager-setup.php:338
869
  msgid "View the job dashboard"
870
  msgstr ""
871
 
872
- #: includes/admin/class-wp-job-manager-setup.php:340
873
  msgid "Learn to use the front-end job dashboard"
874
  msgstr ""
875
 
876
- #: includes/admin/class-wp-job-manager-setup.php:349
877
  #. translators: %1$s is the URL to WPJM support documentation; %2$s is the URL
878
  #. to WPJM support forums.
879
  msgid ""
880
- "If you need help, you can find more detail in our \n"
881
  "\t\t\t\t\t\t\t<a href=\"%1$s\">support documentation</a> or post your "
882
  "question on the\n"
883
  "\t\t\t\t\t\t\t<a href=\"%2$s\">WP Job Manager support forums</a>. Happy "
884
  "hiring!"
885
  msgstr ""
886
 
887
- #: includes/admin/class-wp-job-manager-setup.php:360
888
  msgid "Support WP Job Manager's Ongoing Development"
889
  msgstr ""
890
 
891
- #: includes/admin/class-wp-job-manager-setup.php:361
892
  msgid ""
893
  "There are lots of ways you can support open source software projects like "
894
  "this one: contributing code, fixing a bug, assisting with non-English "
@@ -896,183 +1079,30 @@ msgid ""
896
  "spread the word. We appreciate your support!"
897
  msgstr ""
898
 
899
- #: includes/admin/class-wp-job-manager-setup.php:363
900
  msgid "Leave a positive review"
901
  msgstr ""
902
 
903
- #: includes/admin/class-wp-job-manager-setup.php:364
904
  msgid "Contribute a localization"
905
  msgstr ""
906
 
907
- #: includes/admin/class-wp-job-manager-setup.php:365
908
  msgid "Contribute code or report a bug"
909
  msgstr ""
910
 
911
- #: includes/admin/class-wp-job-manager-setup.php:366
912
  msgid "Help other users on the forums"
913
  msgstr ""
914
 
915
- #: includes/admin/class-wp-job-manager-taxonomy-meta.php:78
916
- #: includes/admin/class-wp-job-manager-taxonomy-meta.php:101
917
- #: includes/admin/class-wp-job-manager-taxonomy-meta.php:120
918
- #: includes/rest-api/class-wp-job-manager-models-job-types-custom-fields.php:36
919
- msgid "Employment Type"
920
- msgstr ""
921
-
922
- #: includes/admin/class-wp-job-manager-writepanels.php:58
923
- #: includes/forms/class-wp-job-manager-form-submit-job.php:187
924
- msgid "e.g. \"London\""
925
- msgstr ""
926
-
927
- #: includes/admin/class-wp-job-manager-writepanels.php:59
928
- #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:28
929
- msgid "Leave this blank if the location is not important."
930
- msgstr ""
931
-
932
- #: includes/admin/class-wp-job-manager-writepanels.php:63
933
- #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:32
934
- msgid "Application Email or URL"
935
- msgstr ""
936
-
937
- #: includes/admin/class-wp-job-manager-writepanels.php:64
938
- msgid "URL or email which applicants use to apply"
939
- msgstr ""
940
-
941
- #: includes/admin/class-wp-job-manager-writepanels.php:65
942
- msgid ""
943
- "This field is required for the \"application\" area to appear beneath the "
944
- "listing."
945
- msgstr ""
946
-
947
- #: includes/admin/class-wp-job-manager-writepanels.php:70
948
- #: includes/class-wp-job-manager-data-exporter.php:53
949
- #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:37
950
- msgid "Company Name"
951
- msgstr ""
952
-
953
- #: includes/admin/class-wp-job-manager-writepanels.php:75
954
- #: includes/class-wp-job-manager-data-exporter.php:54
955
- #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:41
956
- msgid "Company Website"
957
- msgstr ""
958
-
959
- #: includes/admin/class-wp-job-manager-writepanels.php:80
960
- #: includes/class-wp-job-manager-data-exporter.php:55
961
- #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:45
962
- msgid "Company Tagline"
963
- msgstr ""
964
-
965
- #: includes/admin/class-wp-job-manager-writepanels.php:81
966
- msgid "Brief description about the company"
967
- msgstr ""
968
-
969
- #: includes/admin/class-wp-job-manager-writepanels.php:85
970
- #: includes/class-wp-job-manager-data-exporter.php:56
971
- #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:49
972
- msgid "Company Twitter"
973
- msgstr ""
974
-
975
- #: includes/admin/class-wp-job-manager-writepanels.php:90
976
- #: includes/class-wp-job-manager-data-exporter.php:57
977
- #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:53
978
- msgid "Company Video"
979
- msgstr ""
980
-
981
- #: includes/admin/class-wp-job-manager-writepanels.php:91
982
- msgid "URL to the company video"
983
- msgstr ""
984
-
985
- #: includes/admin/class-wp-job-manager-writepanels.php:96
986
- #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:57
987
- msgid "Position Filled"
988
- msgstr ""
989
-
990
- #: includes/admin/class-wp-job-manager-writepanels.php:99
991
- msgid "Filled listings will no longer accept applications."
992
- msgstr ""
993
-
994
- #: includes/admin/class-wp-job-manager-writepanels.php:104
995
- #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:64
996
- msgid "Featured Listing"
997
- msgstr ""
998
-
999
- #: includes/admin/class-wp-job-manager-writepanels.php:106
1000
- msgid ""
1001
- "Featured listings will be sticky during searches, and can be styled "
1002
- "differently."
1003
- msgstr ""
1004
-
1005
- #: includes/admin/class-wp-job-manager-writepanels.php:111
1006
- #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:68
1007
- msgid "Listing Expiry Date"
1008
- msgstr ""
1009
-
1010
- #: includes/admin/class-wp-job-manager-writepanels.php:120
1011
- #: includes/class-wp-job-manager-email-notifications.php:288
1012
- #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:75
1013
- msgid "Posted by"
1014
- msgstr ""
1015
-
1016
- #: includes/admin/class-wp-job-manager-writepanels.php:163
1017
- #. translators: Placeholder %s is the singular name for a job listing post
1018
- #. type.
1019
- msgid "%s Data"
1020
- msgstr ""
1021
-
1022
- #: includes/admin/class-wp-job-manager-writepanels.php:216
1023
- msgid "Most Used"
1024
- msgstr ""
1025
-
1026
- #: includes/admin/class-wp-job-manager-writepanels.php:282
1027
- #: includes/admin/class-wp-job-manager-writepanels.php:287
1028
- #: includes/admin/class-wp-job-manager-writepanels.php:292
1029
- msgid "Use file"
1030
- msgstr ""
1031
-
1032
- #: includes/admin/class-wp-job-manager-writepanels.php:282
1033
- #: includes/admin/class-wp-job-manager-writepanels.php:287
1034
- #: includes/admin/class-wp-job-manager-writepanels.php:292
1035
- msgid "Upload"
1036
- msgstr ""
1037
-
1038
- #: includes/admin/class-wp-job-manager-writepanels.php:292
1039
- msgid "Add file"
1040
- msgstr ""
1041
-
1042
- #: includes/admin/class-wp-job-manager-writepanels.php:557
1043
- msgid "Guest User"
1044
- msgstr ""
1045
-
1046
- #: includes/admin/class-wp-job-manager-writepanels.php:560
1047
- msgid "Change"
1048
- msgstr ""
1049
-
1050
- #: includes/admin/class-wp-job-manager-writepanels.php:564
1051
- msgid "Enter the ID of the user, or leave blank if submitted by a guest."
1052
- msgstr ""
1053
-
1054
- #: includes/admin/class-wp-job-manager-writepanels.php:630
1055
- #. translators: %1$s is placeholder for singular name of the job listing post
1056
- #. type; %2$s is the intl formatted date the listing was last modified.
1057
- msgid "%1$s was last modified by the user on %2$s."
1058
- msgstr ""
1059
-
1060
- #: includes/admin/views/html-admin-page-addons.php:13
1061
- msgid "More Information &rarr;"
1062
- msgstr ""
1063
-
1064
- #: includes/admin/views/html-admin-page-addons.php:43
1065
- msgid "No add-ons were found."
1066
- msgstr ""
1067
-
1068
- #: includes/class-wp-job-manager-ajax.php:172
1069
  #. translators: Placeholder %d is the number of found search results.
1070
  msgid "Search completed. Found %d matching record."
1071
  msgid_plural "Search completed. Found %d matching records."
1072
  msgstr[0] ""
1073
  msgstr[1] ""
1074
 
1075
- #: includes/class-wp-job-manager-ajax.php:268
1076
  msgid "You must be logged in to upload files using this method."
1077
  msgstr ""
1078
 
@@ -1081,7 +1111,7 @@ msgid "WP Job Manager"
1081
  msgstr ""
1082
 
1083
  #: includes/class-wp-job-manager-data-exporter.php:52
1084
- #: includes/class-wp-job-manager-post-types.php:268
1085
  msgid "Company Logo"
1086
  msgstr ""
1087
 
@@ -1094,19 +1124,19 @@ msgid "Job title"
1094
  msgstr ""
1095
 
1096
  #: includes/class-wp-job-manager-email-notifications.php:243
1097
- #: includes/class-wp-job-manager-post-types.php:152
1098
- #: includes/forms/class-wp-job-manager-form-submit-job.php:191
1099
  msgid "Job type"
1100
  msgstr ""
1101
 
1102
  #: includes/class-wp-job-manager-email-notifications.php:253
1103
- #: includes/class-wp-job-manager-post-types.php:91
1104
- #: includes/forms/class-wp-job-manager-form-submit-job.php:200
1105
  msgid "Job category"
1106
  msgstr ""
1107
 
1108
  #: includes/class-wp-job-manager-email-notifications.php:262
1109
- #: includes/forms/class-wp-job-manager-form-submit-job.php:225
1110
  msgid "Company name"
1111
  msgstr ""
1112
 
@@ -1151,17 +1181,17 @@ msgstr ""
1151
  msgid "Geocoding error"
1152
  msgstr ""
1153
 
1154
- #: includes/class-wp-job-manager-install.php:67
1155
  msgid "Employer"
1156
  msgstr ""
1157
 
1158
- #: includes/class-wp-job-manager-post-types.php:92
1159
  msgid "Job categories"
1160
  msgstr ""
1161
 
1162
- #: includes/class-wp-job-manager-post-types.php:120
1163
- #: includes/class-wp-job-manager-post-types.php:180
1164
- #: includes/class-wp-job-manager-post-types.php:261
1165
  #. translators: Placeholder %s is the plural label of the job listing category
1166
  #. taxonomy type.
1167
  #. translators: Placeholder %s is the plural label of the job listing job type
@@ -1171,9 +1201,9 @@ msgstr ""
1171
  msgid "Search %s"
1172
  msgstr ""
1173
 
1174
- #: includes/class-wp-job-manager-post-types.php:122
1175
- #: includes/class-wp-job-manager-post-types.php:182
1176
- #: includes/class-wp-job-manager-post-types.php:247
1177
  #. translators: Placeholder %s is the plural label of the job listing category
1178
  #. taxonomy type.
1179
  #. translators: Placeholder %s is the plural label of the job listing job type
@@ -1183,9 +1213,9 @@ msgstr ""
1183
  msgid "All %s"
1184
  msgstr ""
1185
 
1186
- #: includes/class-wp-job-manager-post-types.php:124
1187
- #: includes/class-wp-job-manager-post-types.php:184
1188
- #: includes/class-wp-job-manager-post-types.php:267
1189
  #. translators: Placeholder %s is the singular label of the job listing
1190
  #. category taxonomy type.
1191
  #. translators: Placeholder %s is the singular label of the job listing job
@@ -1195,8 +1225,8 @@ msgstr ""
1195
  msgid "Parent %s"
1196
  msgstr ""
1197
 
1198
- #: includes/class-wp-job-manager-post-types.php:126
1199
- #: includes/class-wp-job-manager-post-types.php:186
1200
  #. translators: Placeholder %s is the singular label of the job listing
1201
  #. category taxonomy type.
1202
  #. translators: Placeholder %s is the singular label of the job listing job
@@ -1204,9 +1234,9 @@ msgstr ""
1204
  msgid "Parent %s:"
1205
  msgstr ""
1206
 
1207
- #: includes/class-wp-job-manager-post-types.php:128
1208
- #: includes/class-wp-job-manager-post-types.php:188
1209
- #: includes/class-wp-job-manager-post-types.php:253
1210
  #. translators: Placeholder %s is the singular label of the job listing
1211
  #. category taxonomy type.
1212
  #. translators: Placeholder %s is the singular label of the job listing job
@@ -1216,8 +1246,8 @@ msgstr ""
1216
  msgid "Edit %s"
1217
  msgstr ""
1218
 
1219
- #: includes/class-wp-job-manager-post-types.php:130
1220
- #: includes/class-wp-job-manager-post-types.php:190
1221
  #. translators: Placeholder %s is the singular label of the job listing
1222
  #. category taxonomy type.
1223
  #. translators: Placeholder %s is the singular label of the job listing job
@@ -1225,8 +1255,8 @@ msgstr ""
1225
  msgid "Update %s"
1226
  msgstr ""
1227
 
1228
- #: includes/class-wp-job-manager-post-types.php:132
1229
- #: includes/class-wp-job-manager-post-types.php:192
1230
  #. translators: Placeholder %s is the singular label of the job listing
1231
  #. category taxonomy type.
1232
  #. translators: Placeholder %s is the singular label of the job listing job
@@ -1234,8 +1264,8 @@ msgstr ""
1234
  msgid "Add New %s"
1235
  msgstr ""
1236
 
1237
- #: includes/class-wp-job-manager-post-types.php:134
1238
- #: includes/class-wp-job-manager-post-types.php:194
1239
  #. translators: Placeholder %s is the singular label of the job listing
1240
  #. category taxonomy type.
1241
  #. translators: Placeholder %s is the singular label of the job listing job
@@ -1243,79 +1273,79 @@ msgstr ""
1243
  msgid "New %s Name"
1244
  msgstr ""
1245
 
1246
- #: includes/class-wp-job-manager-post-types.php:153
1247
  msgid "Job types"
1248
  msgstr ""
1249
 
1250
- #: includes/class-wp-job-manager-post-types.php:214
1251
  msgid "Job"
1252
  msgstr ""
1253
 
1254
- #: includes/class-wp-job-manager-post-types.php:215
1255
  msgid "Jobs"
1256
  msgstr ""
1257
 
1258
- #: includes/class-wp-job-manager-post-types.php:248
1259
  msgid "Add New"
1260
  msgstr ""
1261
 
1262
- #: includes/class-wp-job-manager-post-types.php:250
1263
  #. translators: Placeholder %s is the singular label of the job listing post
1264
  #. type.
1265
  msgid "Add %s"
1266
  msgstr ""
1267
 
1268
- #: includes/class-wp-job-manager-post-types.php:255
1269
  #. translators: Placeholder %s is the singular label of the job listing post
1270
  #. type.
1271
  msgid "New %s"
1272
  msgstr ""
1273
 
1274
- #: includes/class-wp-job-manager-post-types.php:257
1275
- #: includes/class-wp-job-manager-post-types.php:259
1276
  #. translators: Placeholder %s is the singular label of the job listing post
1277
  #. type.
1278
  msgid "View %s"
1279
  msgstr ""
1280
 
1281
- #: includes/class-wp-job-manager-post-types.php:263
1282
  #. translators: Placeholder %s is the singular label of the job listing post
1283
  #. type.
1284
  msgid "No %s found"
1285
  msgstr ""
1286
 
1287
- #: includes/class-wp-job-manager-post-types.php:265
1288
  #. translators: Placeholder %s is the plural label of the job listing post
1289
  #. type.
1290
  msgid "No %s found in trash"
1291
  msgstr ""
1292
 
1293
- #: includes/class-wp-job-manager-post-types.php:269
1294
  msgid "Set company logo"
1295
  msgstr ""
1296
 
1297
- #: includes/class-wp-job-manager-post-types.php:270
1298
  msgid "Remove company logo"
1299
  msgstr ""
1300
 
1301
- #: includes/class-wp-job-manager-post-types.php:271
1302
  msgid "Use as company logo"
1303
  msgstr ""
1304
 
1305
- #: includes/class-wp-job-manager-post-types.php:274
1306
  #. translators: Placeholder %s is the plural label of the job listing post
1307
  #. type.
1308
  msgid "This is where you can create and manage %s."
1309
  msgstr ""
1310
 
1311
- #: includes/class-wp-job-manager-post-types.php:310
1312
  #. translators: Placeholder %s is the number of expired posts of this type.
1313
  msgid "Expired <span class=\"count\">(%s)</span>"
1314
  msgid_plural "Expired <span class=\"count\">(%s)</span>"
1315
  msgstr[0] ""
1316
  msgstr[1] ""
1317
 
1318
- #: includes/class-wp-job-manager-post-types.php:322
1319
  #. translators: Placeholder %s is the number of posts in a preview state.
1320
  msgid "Preview <span class=\"count\">(%s)</span>"
1321
  msgid_plural "Preview <span class=\"count\">(%s)</span>"
@@ -1350,27 +1380,27 @@ msgid "%s has been deleted"
1350
  msgstr ""
1351
 
1352
  #: includes/class-wp-job-manager-shortcodes.php:141
1353
- #: includes/class-wp-job-manager-shortcodes.php:154
1354
  msgid "Missing submission page."
1355
  msgstr ""
1356
 
1357
- #: includes/class-wp-job-manager-shortcodes.php:246
1358
  #: includes/widgets/class-wp-job-manager-widget-featured-jobs.php:30
1359
  #: includes/widgets/class-wp-job-manager-widget-featured-jobs.php:46
1360
  #: includes/widgets/class-wp-job-manager-widget-recent-jobs.php:30
1361
  msgid "Title"
1362
  msgstr ""
1363
 
1364
- #: includes/class-wp-job-manager-shortcodes.php:248
1365
  msgid "Date Posted"
1366
  msgstr ""
1367
 
1368
- #: includes/class-wp-job-manager-shortcodes.php:249
1369
  msgid "Listing Expires"
1370
  msgstr ""
1371
 
1372
- #: includes/class-wp-job-manager-shortcodes.php:384
1373
- #: includes/class-wp-job-manager-shortcodes.php:421
1374
  msgid "Load more listings"
1375
  msgstr ""
1376
 
@@ -1380,8 +1410,7 @@ msgstr ""
1380
  msgid ""
1381
  "We'd love if you helped us make WP Job Manager better by allowing us to "
1382
  "collect\n"
1383
- "\t\t\t\t<a href=\"%s\" target=\"_blank\">usage tracking data</a>. No "
1384
- "sensitive information is \n"
1385
  "\t\t\t\tcollected, and you can opt out at any time."
1386
  msgstr ""
1387
 
@@ -1390,7 +1419,7 @@ msgstr ""
1390
  #. data WPJM tracks.
1391
  msgid ""
1392
  "Help us make WP Job Manager better by allowing us to collect\n"
1393
- "\t\t\t\t<a href=\"%s\" target=\"_blank\">usage tracking data</a>.\n"
1394
  "\t\t\t\tNo sensitive information is collected."
1395
  msgstr ""
1396
 
@@ -1489,7 +1518,7 @@ msgid "Submit Details"
1489
  msgstr ""
1490
 
1491
  #: includes/forms/class-wp-job-manager-form-submit-job.php:75
1492
- #: includes/forms/class-wp-job-manager-form-submit-job.php:518
1493
  #: templates/job-preview.php:22
1494
  msgid "Preview"
1495
  msgstr ""
@@ -1498,100 +1527,100 @@ msgstr ""
1498
  msgid "Done"
1499
  msgstr ""
1500
 
1501
- #: includes/forms/class-wp-job-manager-form-submit-job.php:150
1502
  msgid "Application email"
1503
  msgstr ""
1504
 
1505
- #: includes/forms/class-wp-job-manager-form-submit-job.php:151
1506
- #: wp-job-manager-template.php:717
1507
  msgid "you@yourdomain.com"
1508
  msgstr ""
1509
 
1510
- #: includes/forms/class-wp-job-manager-form-submit-job.php:155
1511
  msgid "Application URL"
1512
  msgstr ""
1513
 
1514
- #: includes/forms/class-wp-job-manager-form-submit-job.php:156
1515
- #: includes/forms/class-wp-job-manager-form-submit-job.php:236
1516
  msgid "http://"
1517
  msgstr ""
1518
 
1519
- #: includes/forms/class-wp-job-manager-form-submit-job.php:160
1520
  msgid "Application email/URL"
1521
  msgstr ""
1522
 
1523
- #: includes/forms/class-wp-job-manager-form-submit-job.php:161
1524
  msgid "Enter an email address or website URL"
1525
  msgstr ""
1526
 
1527
- #: includes/forms/class-wp-job-manager-form-submit-job.php:176
1528
  msgid "Job Title"
1529
  msgstr ""
1530
 
1531
- #: includes/forms/class-wp-job-manager-form-submit-job.php:184
1532
  msgid "Leave this blank if the location is not important"
1533
  msgstr ""
1534
 
1535
- #: includes/forms/class-wp-job-manager-form-submit-job.php:194
1536
  msgid "Choose job type&hellip;"
1537
  msgstr ""
1538
 
1539
- #: includes/forms/class-wp-job-manager-form-submit-job.php:209
1540
  msgid "Description"
1541
  msgstr ""
1542
 
1543
- #: includes/forms/class-wp-job-manager-form-submit-job.php:228
1544
  msgid "Enter the name of the company"
1545
  msgstr ""
1546
 
1547
- #: includes/forms/class-wp-job-manager-form-submit-job.php:232
1548
  #: templates/content-single-job_listing-company.php:30
1549
  msgid "Website"
1550
  msgstr ""
1551
 
1552
- #: includes/forms/class-wp-job-manager-form-submit-job.php:240
1553
  msgid "Tagline"
1554
  msgstr ""
1555
 
1556
- #: includes/forms/class-wp-job-manager-form-submit-job.php:243
1557
  msgid "Briefly describe your company"
1558
  msgstr ""
1559
 
1560
- #: includes/forms/class-wp-job-manager-form-submit-job.php:248
1561
  msgid "Video"
1562
  msgstr ""
1563
 
1564
- #: includes/forms/class-wp-job-manager-form-submit-job.php:252
1565
  msgid "A link to a video about your company"
1566
  msgstr ""
1567
 
1568
- #: includes/forms/class-wp-job-manager-form-submit-job.php:256
1569
  msgid "Twitter username"
1570
  msgstr ""
1571
 
1572
- #: includes/forms/class-wp-job-manager-form-submit-job.php:259
1573
  msgid "@yourcompany"
1574
  msgstr ""
1575
 
1576
- #: includes/forms/class-wp-job-manager-form-submit-job.php:263
1577
  msgid "Logo"
1578
  msgstr ""
1579
 
1580
- #: includes/forms/class-wp-job-manager-form-submit-job.php:313
1581
  #. translators: Placeholder %s is the label for the required field.
1582
  msgid "%s is a required field"
1583
  msgstr ""
1584
 
1585
- #: includes/forms/class-wp-job-manager-form-submit-job.php:324
1586
  #. translators: Placeholder %s is the field label that is did not validate.
1587
  msgid "%s is invalid"
1588
  msgstr ""
1589
 
1590
- #: includes/forms/class-wp-job-manager-form-submit-job.php:341
1591
  msgid "Invalid attachment provided."
1592
  msgstr ""
1593
 
1594
- #: includes/forms/class-wp-job-manager-form-submit-job.php:359
1595
  #: wp-job-manager-functions.php:1277
1596
  #. translators: Placeholder %1$s is field label; %2$s is the file mime type;
1597
  #. %3$s is the allowed mime-types.
@@ -1600,44 +1629,44 @@ msgstr ""
1600
  msgid "\"%1$s\" (filetype %2$s) needs to be one of the following file types: %3$s"
1601
  msgstr ""
1602
 
1603
- #: includes/forms/class-wp-job-manager-form-submit-job.php:374
1604
  msgid "Please enter a valid application email address"
1605
  msgstr ""
1606
 
1607
- #: includes/forms/class-wp-job-manager-form-submit-job.php:383
1608
  msgid "Please enter a valid application URL"
1609
  msgstr ""
1610
 
1611
- #: includes/forms/class-wp-job-manager-form-submit-job.php:393
1612
  msgid "Please enter a valid application email address or URL"
1613
  msgstr ""
1614
 
1615
- #: includes/forms/class-wp-job-manager-form-submit-job.php:553
1616
  msgid "Please enter a username."
1617
  msgstr ""
1618
 
1619
- #: includes/forms/class-wp-job-manager-form-submit-job.php:557
1620
  msgid "Please enter a password."
1621
  msgstr ""
1622
 
1623
- #: includes/forms/class-wp-job-manager-form-submit-job.php:561
1624
  msgid "Please enter your email address."
1625
  msgstr ""
1626
 
1627
- #: includes/forms/class-wp-job-manager-form-submit-job.php:567
1628
  msgid "Passwords must match."
1629
  msgstr ""
1630
 
1631
- #: includes/forms/class-wp-job-manager-form-submit-job.php:573
1632
  #. translators: Placeholder %s is the password hint.
1633
  msgid "Invalid Password: %s"
1634
  msgstr ""
1635
 
1636
- #: includes/forms/class-wp-job-manager-form-submit-job.php:575
1637
  msgid "Password is not valid."
1638
  msgstr ""
1639
 
1640
- #: includes/forms/class-wp-job-manager-form-submit-job.php:598
1641
  msgid "You must be signed in to post a new listing."
1642
  msgstr ""
1643
 
@@ -2025,6 +2054,10 @@ msgstr ""
2025
  msgid "Relist"
2026
  msgstr ""
2027
 
 
 
 
 
2028
  #: templates/job-filters.php:30 templates/job-filters.php:31
2029
  msgid "Keywords"
2030
  msgstr ""
@@ -2136,47 +2169,54 @@ msgstr ""
2136
  msgid "Uploaded files need to be one of the following file types: %s"
2137
  msgstr ""
2138
 
2139
- #: wp-job-manager-template.php:153
2140
  msgid "Inactive"
2141
  msgstr ""
2142
 
2143
- #: wp-job-manager-template.php:247
2144
  #. translators: %1$s is the job listing title; %2$s is the URL for the current
2145
  #. WordPress instance.
2146
- msgid "Application via \"%1$s\" listing on %2$s"
2147
  msgstr ""
2148
 
2149
- #: wp-job-manager-template.php:691
2150
  msgid "Username"
2151
  msgstr ""
2152
 
2153
- #: wp-job-manager-template.php:699
2154
  msgid "Password"
2155
  msgstr ""
2156
 
2157
- #: wp-job-manager-template.php:709
2158
  msgid "Verify Password"
2159
  msgstr ""
2160
 
2161
- #: wp-job-manager-template.php:716
2162
  msgid "Your email"
2163
  msgstr ""
2164
 
2165
- #: wp-job-manager-template.php:743
2166
  msgid "Posted on "
2167
  msgstr ""
2168
 
2169
- #: wp-job-manager-template.php:746 wp-job-manager-template.php:767
2170
  #. translators: Placeholder %s is the relative, human readable time since the
2171
  #. job listing was posted.
2172
  msgid "Posted %s ago"
2173
  msgstr ""
2174
 
2175
- #: wp-job-manager-template.php:796
2176
  msgid "Anywhere"
2177
  msgstr ""
2178
 
2179
- #: wp-job-manager.php:168
 
 
 
 
 
 
 
2180
  #. translators: Placeholders %1$s and %2$s are the names of the two cookies
2181
  #. used in WP Job Manager.
2182
  msgid ""
@@ -2185,15 +2225,19 @@ msgid ""
2185
  "\t\t\t\thave started but have not completed: %1$s and %2$s"
2186
  msgstr ""
2187
 
2188
- #: wp-job-manager.php:332
 
 
 
 
2189
  msgid "Load previous listings"
2190
  msgstr ""
2191
 
2192
- #: wp-job-manager.php:407
2193
  msgid "Invalid file type. Accepted types:"
2194
  msgstr ""
2195
 
2196
- #: wp-job-manager.php:422
2197
  msgid "Are you sure you want to delete this listing?"
2198
  msgstr ""
2199
 
@@ -2211,59 +2255,84 @@ msgstr ""
2211
  msgid "Automattic"
2212
  msgstr ""
2213
 
2214
- #: includes/admin/class-wp-job-manager-admin.php:139
2215
- #: includes/forms/class-wp-job-manager-form-submit-job.php:431
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2216
  #. translators: jQuery date format, see
2217
  #. http:api.jqueryui.com/datepicker/#utility-formatDate
2218
  msgctxt "Date format for jQuery datepicker."
2219
  msgid "yy-mm-dd"
2220
  msgstr ""
2221
 
2222
- #: includes/admin/class-wp-job-manager-permalink-settings.php:86
2223
- #: includes/class-wp-job-manager-post-types.php:701
2224
  msgctxt "Job permalink - resave permalinks after changing this"
2225
  msgid "job"
2226
  msgstr ""
2227
 
2228
- #: includes/admin/class-wp-job-manager-permalink-settings.php:95
2229
- #: includes/class-wp-job-manager-post-types.php:702
2230
  msgctxt "Job category slug - resave permalinks after changing this"
2231
  msgid "job-category"
2232
  msgstr ""
2233
 
2234
- #: includes/admin/class-wp-job-manager-permalink-settings.php:104
2235
- #: includes/class-wp-job-manager-post-types.php:703
2236
  msgctxt "Job type slug - resave permalinks after changing this"
2237
  msgid "job-type"
2238
  msgstr ""
2239
 
2240
- #: includes/admin/class-wp-job-manager-setup.php:274
2241
  msgctxt "Default page title (wizard)"
2242
  msgid "Post a Job"
2243
  msgstr ""
2244
 
2245
- #: includes/admin/class-wp-job-manager-setup.php:282
2246
  msgctxt "Default page title (wizard)"
2247
  msgid "Job Dashboard"
2248
  msgstr ""
2249
 
2250
- #: includes/admin/class-wp-job-manager-setup.php:290
2251
  msgctxt "Default page title (wizard)"
2252
  msgid "Jobs"
2253
  msgstr ""
2254
 
2255
- #: includes/class-wp-job-manager-post-types.php:225
2256
- msgctxt "Post type archive slug - resave permalinks after changing this"
2257
- msgid "jobs"
2258
- msgstr ""
2259
-
2260
- #: includes/class-wp-job-manager-post-types.php:303
2261
  #: wp-job-manager-functions.php:320
2262
  msgctxt "post status"
2263
  msgid "Expired"
2264
  msgstr ""
2265
 
2266
- #: includes/class-wp-job-manager-post-types.php:316
2267
  #: wp-job-manager-functions.php:321
2268
  msgctxt "post status"
2269
  msgid "Preview"
@@ -2287,4 +2356,9 @@ msgstr ""
2287
  #: wp-job-manager-functions.php:324
2288
  msgctxt "post status"
2289
  msgid "Active"
 
 
 
 
 
2290
  msgstr ""
2
  # This file is distributed under the GPL2+.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: WP Job Manager 1.32.0\n"
6
  "Report-Msgid-Bugs-To: https://github.com/Automattic/WP-Job-Manager/issues\n"
7
+ "POT-Creation-Date: 2018-12-17 17:26:39+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
23
  msgid "<a href=\"%s\">Switch to primary language</a> to edit this setting."
24
  msgstr ""
25
 
26
+ #: includes/abstracts/abstract-wp-job-manager-form.php:328
27
+ #: includes/abstracts/abstract-wp-job-manager-form.php:343
28
  #. translators: Placeholder is for the label of the reCAPTCHA field.
29
  #. translators: %s is the name of the form validation that failed.
30
  msgid "\"%s\" check failed. Please try again."
31
  msgstr ""
32
 
33
  #: includes/admin/class-wp-job-manager-addons.php:124
34
+ #: includes/admin/class-wp-job-manager-admin.php:175
35
  #: includes/admin/views/html-admin-page-addons.php:2
36
  msgid "WP Job Manager Add-ons"
37
  msgstr ""
41
  msgid "Licenses"
42
  msgstr ""
43
 
44
+ #: includes/admin/class-wp-job-manager-admin-notices.php:109
45
+ msgid "Action failed. Please refresh the page and retry."
46
+ msgstr ""
47
+
48
+ #: includes/admin/class-wp-job-manager-admin-notices.php:113
49
+ msgid "You don&#8217;t have permission to do this."
50
+ msgstr ""
51
+
52
+ #: includes/admin/class-wp-job-manager-admin.php:90
53
  #. translators: %s is the URL for the page where users can go to update
54
  #. WordPress.
55
  msgid ""
56
  "<strong>WP Job Manager</strong> requires a more recent version of "
57
+ "WordPress. <a href=\"%s\">Please update WordPress</a> to avoid issues."
58
  msgstr ""
59
 
60
+ #: includes/admin/class-wp-job-manager-admin.php:102
61
  #. translators: Placeholder (%s) is the URL where users can go to update
62
  #. WordPress.
63
  msgid "<a href=\"%s\" style=\"color: red\">WordPress Update Required</a>"
64
  msgstr ""
65
 
66
+ #: includes/admin/class-wp-job-manager-admin.php:172
67
  msgid "Settings"
68
  msgstr ""
69
 
70
+ #: includes/admin/class-wp-job-manager-admin.php:175
71
  msgid "Add-ons"
72
  msgstr ""
73
 
119
  msgid "%s marked as not filled"
120
  msgstr ""
121
 
122
+ #: includes/admin/class-wp-job-manager-cpt.php:318
123
  msgid "Select category"
124
  msgstr ""
125
 
126
+ #: includes/admin/class-wp-job-manager-cpt.php:343
127
  msgid "Select Filled"
128
  msgstr ""
129
 
130
+ #: includes/admin/class-wp-job-manager-cpt.php:347
131
  msgid "Filled"
132
  msgstr ""
133
 
134
+ #: includes/admin/class-wp-job-manager-cpt.php:351
135
  msgid "Not Filled"
136
  msgstr ""
137
 
138
+ #: includes/admin/class-wp-job-manager-cpt.php:362
139
  msgid "Select Featured"
140
  msgstr ""
141
 
142
+ #: includes/admin/class-wp-job-manager-cpt.php:366
143
  msgid "Featured"
144
  msgstr ""
145
 
146
+ #: includes/admin/class-wp-job-manager-cpt.php:370
147
  msgid "Not Featured"
148
  msgstr ""
149
 
150
+ #: includes/admin/class-wp-job-manager-cpt.php:415
151
+ #: includes/admin/class-wp-job-manager-cpt.php:472
152
  msgid "Position"
153
  msgstr ""
154
 
155
+ #: includes/admin/class-wp-job-manager-cpt.php:432
156
  #. translators: %1$s is the singular name of the job listing post type; %2$s is
157
  #. the URL to view the listing.
158
  msgid "%1$s updated. <a href=\"%2$s\">View</a>"
159
  msgstr ""
160
 
161
+ #: includes/admin/class-wp-job-manager-cpt.php:433
162
  msgid "Custom field updated."
163
  msgstr ""
164
 
165
+ #: includes/admin/class-wp-job-manager-cpt.php:434
166
  msgid "Custom field deleted."
167
  msgstr ""
168
 
169
+ #: includes/admin/class-wp-job-manager-cpt.php:436
170
  #. translators: %s is the singular name of the job listing post type.
171
  msgid "%s updated."
172
  msgstr ""
173
 
174
+ #: includes/admin/class-wp-job-manager-cpt.php:438
175
  #. translators: %1$s is the singular name of the job listing post type; %2$s is
176
  #. the revision number.
177
  msgid "%1$s restored to revision from %2$s"
178
  msgstr ""
179
 
180
+ #: includes/admin/class-wp-job-manager-cpt.php:440
181
  #. translators: %1$s is the singular name of the job listing post type; %2$s is
182
  #. the URL to view the listing.
183
  msgid "%1$s published. <a href=\"%2$s\">View</a>"
184
  msgstr ""
185
 
186
+ #: includes/admin/class-wp-job-manager-cpt.php:442
187
  #. translators: %1$s is the singular name of the job listing post type; %2$s is
188
  #. the URL to view the listing.
189
  msgid "%s saved."
190
  msgstr ""
191
 
192
+ #: includes/admin/class-wp-job-manager-cpt.php:444
193
  #. translators: %1$s is the singular name of the job listing post type; %2$s is
194
  #. the URL to preview the listing.
195
  msgid "%1$s submitted. <a target=\"_blank\" href=\"%2$s\">Preview</a>"
196
  msgstr ""
197
 
198
+ #: includes/admin/class-wp-job-manager-cpt.php:447
199
  #. translators: %1$s is the singular name of the post type; %2$s is the date
200
  #. the post will be published; %3$s is the URL to preview the listing.
201
  msgid ""
203
  "href=\"%3$s\">Preview</a>"
204
  msgstr ""
205
 
206
+ #: includes/admin/class-wp-job-manager-cpt.php:453
207
  #. translators: %1$s is the singular name of the job listing post type; %2$s is
208
  #. the URL to view the listing.
209
  msgid "%1$s draft updated. <a target=\"_blank\" href=\"%2$s\">Preview</a>"
210
  msgstr ""
211
 
212
+ #: includes/admin/class-wp-job-manager-cpt.php:473
213
  msgid "Type"
214
  msgstr ""
215
 
216
+ #: includes/admin/class-wp-job-manager-cpt.php:474
217
  #: includes/admin/class-wp-job-manager-writepanels.php:57
218
  #: includes/class-wp-job-manager-email-notifications.php:234
219
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:184
220
  #: includes/widgets/class-wp-job-manager-widget-recent-jobs.php:40
221
  #: templates/job-filters.php:35 templates/job-filters.php:36
222
  msgid "Location"
223
  msgstr ""
224
 
225
+ #: includes/admin/class-wp-job-manager-cpt.php:475
226
  msgid "Status"
227
  msgstr ""
228
 
229
+ #: includes/admin/class-wp-job-manager-cpt.php:476
230
  msgid "Posted"
231
  msgstr ""
232
 
233
+ #: includes/admin/class-wp-job-manager-cpt.php:477
234
  msgid "Expires"
235
  msgstr ""
236
 
237
+ #: includes/admin/class-wp-job-manager-cpt.php:478
238
  #: includes/admin/class-wp-job-manager-settings.php:157
239
  msgid "Categories"
240
  msgstr ""
241
 
242
+ #: includes/admin/class-wp-job-manager-cpt.php:479
243
  msgid "Featured?"
244
  msgstr ""
245
 
246
+ #: includes/admin/class-wp-job-manager-cpt.php:480
247
+ #: includes/class-wp-job-manager-shortcodes.php:248
248
  msgid "Filled?"
249
  msgstr ""
250
 
251
+ #: includes/admin/class-wp-job-manager-cpt.php:481
252
  msgid "Actions"
253
  msgstr ""
254
 
255
+ #: includes/admin/class-wp-job-manager-cpt.php:546
256
  #. translators: %d is the post ID for the job listing.
257
  msgid "ID: %d"
258
  msgstr ""
259
 
260
+ #: includes/admin/class-wp-job-manager-cpt.php:590
261
  #. translators: %s placeholder is the username of the user.
262
  msgid "by a guest"
263
  msgstr ""
264
 
265
+ #: includes/admin/class-wp-job-manager-cpt.php:590
266
  msgid "by %s"
267
  msgstr ""
268
 
269
+ #: includes/admin/class-wp-job-manager-cpt.php:609
270
  msgid "Approve"
271
  msgstr ""
272
 
273
+ #: includes/admin/class-wp-job-manager-cpt.php:617
274
+ #: includes/admin/class-wp-job-manager-writepanels.php:245
275
+ #: includes/admin/class-wp-job-manager-writepanels.php:250
276
+ #: includes/admin/class-wp-job-manager-writepanels.php:255
277
  msgid "View"
278
  msgstr ""
279
 
280
+ #: includes/admin/class-wp-job-manager-cpt.php:624
281
+ #: includes/class-wp-job-manager-post-types.php:317
282
  #: templates/job-dashboard.php:52 templates/job-dashboard.php:70
283
  msgid "Edit"
284
  msgstr ""
285
 
286
+ #: includes/admin/class-wp-job-manager-cpt.php:631
287
+ #: templates/job-dashboard.php:79
288
  msgid "Delete"
289
  msgstr ""
290
 
300
  msgid "Job type base"
301
  msgstr ""
302
 
303
+ #: includes/admin/class-wp-job-manager-permalink-settings.php:82
304
+ msgid "Job listing archive page"
305
+ msgstr ""
306
+
307
  #: includes/admin/class-wp-job-manager-settings.php:84
308
  msgid "General"
309
  msgstr ""
349
  msgstr ""
350
 
351
  #: includes/admin/class-wp-job-manager-settings.php:117
352
+ #: includes/class-wp-job-manager-post-types.php:311
353
+ #: includes/class-wp-job-manager-post-types.php:413
354
  msgid "Job Listings"
355
  msgstr ""
356
 
734
  msgid "Select a page&hellip;"
735
  msgstr ""
736
 
737
+ #: includes/admin/class-wp-job-manager-setup.php:51
738
  msgid "Setup"
739
  msgstr ""
740
 
741
+ #: includes/admin/class-wp-job-manager-taxonomy-meta.php:78
742
+ #: includes/admin/class-wp-job-manager-taxonomy-meta.php:101
743
+ #: includes/admin/class-wp-job-manager-taxonomy-meta.php:120
744
+ #: includes/class-wp-job-manager-post-types.php:271
745
+ #: includes/rest-api/class-wp-job-manager-models-job-types-custom-fields.php:36
746
+ msgid "Employment Type"
747
+ msgstr ""
748
+
749
+ #: includes/admin/class-wp-job-manager-writepanels.php:58
750
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:188
751
+ msgid "e.g. \"London\""
752
+ msgstr ""
753
+
754
+ #: includes/admin/class-wp-job-manager-writepanels.php:59
755
+ #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:28
756
+ msgid "Leave this blank if the location is not important."
757
+ msgstr ""
758
+
759
+ #: includes/admin/class-wp-job-manager-writepanels.php:63
760
+ #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:32
761
+ msgid "Application Email or URL"
762
+ msgstr ""
763
+
764
+ #: includes/admin/class-wp-job-manager-writepanels.php:64
765
+ msgid "URL or email which applicants use to apply"
766
+ msgstr ""
767
+
768
+ #: includes/admin/class-wp-job-manager-writepanels.php:65
769
+ msgid ""
770
+ "This field is required for the \"application\" area to appear beneath the "
771
+ "listing."
772
+ msgstr ""
773
+
774
+ #: includes/admin/class-wp-job-manager-writepanels.php:70
775
+ #: includes/class-wp-job-manager-data-exporter.php:53
776
+ #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:37
777
+ msgid "Company Name"
778
+ msgstr ""
779
+
780
+ #: includes/admin/class-wp-job-manager-writepanels.php:75
781
+ #: includes/class-wp-job-manager-data-exporter.php:54
782
+ #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:41
783
+ msgid "Company Website"
784
+ msgstr ""
785
+
786
+ #: includes/admin/class-wp-job-manager-writepanels.php:80
787
+ #: includes/class-wp-job-manager-data-exporter.php:55
788
+ #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:45
789
+ msgid "Company Tagline"
790
+ msgstr ""
791
+
792
+ #: includes/admin/class-wp-job-manager-writepanels.php:81
793
+ msgid "Brief description about the company"
794
+ msgstr ""
795
+
796
+ #: includes/admin/class-wp-job-manager-writepanels.php:85
797
+ #: includes/class-wp-job-manager-data-exporter.php:56
798
+ #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:49
799
+ msgid "Company Twitter"
800
+ msgstr ""
801
+
802
+ #: includes/admin/class-wp-job-manager-writepanels.php:90
803
+ #: includes/class-wp-job-manager-data-exporter.php:57
804
+ #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:53
805
+ msgid "Company Video"
806
+ msgstr ""
807
+
808
+ #: includes/admin/class-wp-job-manager-writepanels.php:91
809
+ msgid "URL to the company video"
810
+ msgstr ""
811
+
812
+ #: includes/admin/class-wp-job-manager-writepanels.php:96
813
+ #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:57
814
+ msgid "Position Filled"
815
+ msgstr ""
816
+
817
+ #: includes/admin/class-wp-job-manager-writepanels.php:99
818
+ msgid "Filled listings will no longer accept applications."
819
+ msgstr ""
820
+
821
+ #: includes/admin/class-wp-job-manager-writepanels.php:104
822
+ #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:64
823
+ msgid "Featured Listing"
824
+ msgstr ""
825
+
826
+ #: includes/admin/class-wp-job-manager-writepanels.php:106
827
+ msgid ""
828
+ "Featured listings will be sticky during searches, and can be styled "
829
+ "differently."
830
+ msgstr ""
831
+
832
+ #: includes/admin/class-wp-job-manager-writepanels.php:111
833
+ #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:68
834
+ msgid "Listing Expiry Date"
835
+ msgstr ""
836
+
837
+ #: includes/admin/class-wp-job-manager-writepanels.php:120
838
+ #: includes/class-wp-job-manager-email-notifications.php:288
839
+ #: includes/rest-api/class-wp-job-manager-models-job-listings-custom-fields.php:75
840
+ msgid "Posted by"
841
+ msgstr ""
842
+
843
+ #: includes/admin/class-wp-job-manager-writepanels.php:163
844
+ #. translators: Placeholder %s is the singular name for a job listing post
845
+ #. type.
846
+ msgid "%s Data"
847
+ msgstr ""
848
+
849
+ #: includes/admin/class-wp-job-manager-writepanels.php:245
850
+ #: includes/admin/class-wp-job-manager-writepanels.php:250
851
+ #: includes/admin/class-wp-job-manager-writepanels.php:255
852
+ msgid "Use file"
853
+ msgstr ""
854
+
855
+ #: includes/admin/class-wp-job-manager-writepanels.php:245
856
+ #: includes/admin/class-wp-job-manager-writepanels.php:250
857
+ #: includes/admin/class-wp-job-manager-writepanels.php:255
858
+ msgid "Upload"
859
+ msgstr ""
860
+
861
+ #: includes/admin/class-wp-job-manager-writepanels.php:255
862
+ msgid "Add file"
863
+ msgstr ""
864
+
865
+ #: includes/admin/class-wp-job-manager-writepanels.php:520
866
+ #: includes/class-wp-job-manager-ajax.php:404
867
+ #. translators: Used in user select. %1$s is the user's display name; #%2$s is
868
+ #. the user ID; %3$s is the user email.
869
+ msgid "%1$s (#%2$s &ndash; %3$s)"
870
+ msgstr ""
871
+
872
+ #: includes/admin/class-wp-job-manager-writepanels.php:527
873
+ msgid "Guest User"
874
+ msgstr ""
875
+
876
+ #: includes/admin/class-wp-job-manager-writepanels.php:531
877
+ msgid "Change"
878
+ msgstr ""
879
+
880
+ #: includes/admin/class-wp-job-manager-writepanels.php:534
881
+ msgid "Guest"
882
+ msgstr ""
883
+
884
+ #: includes/admin/class-wp-job-manager-writepanels.php:602
885
+ #. translators: %1$s is placeholder for singular name of the job listing post
886
+ #. type; %2$s is the intl formatted date the listing was last modified.
887
+ msgid "%1$s was last modified by the user on %2$s."
888
+ msgstr ""
889
+
890
+ #: includes/admin/views/html-admin-notice-core-setup.php:16
891
+ msgid ""
892
+ "You are nearly ready to start listing jobs with <strong>WP Job "
893
+ "Manager</strong>."
894
+ msgstr ""
895
+
896
+ #: includes/admin/views/html-admin-notice-core-setup.php:20
897
+ msgid "Run Setup Wizard"
898
+ msgstr ""
899
+
900
+ #: includes/admin/views/html-admin-notice-core-setup.php:21
901
+ msgid "Skip Setup"
902
+ msgstr ""
903
+
904
+ #: includes/admin/views/html-admin-page-addons.php:13
905
+ msgid "More Information &rarr;"
906
+ msgstr ""
907
+
908
+ #: includes/admin/views/html-admin-page-addons.php:43
909
+ msgid "No add-ons were found."
910
+ msgstr ""
911
+
912
+ #: includes/admin/views/html-admin-setup-header.php:14
913
  msgid "WP Job Manager Setup"
914
  msgstr ""
915
 
916
+ #: includes/admin/views/html-admin-setup-header.php:21
917
  msgid "1. Introduction"
918
  msgstr ""
919
 
920
+ #: includes/admin/views/html-admin-setup-header.php:22
921
  msgid "2. Page Setup"
922
  msgstr ""
923
 
924
+ #: includes/admin/views/html-admin-setup-header.php:23
925
  msgid "3. Done"
926
  msgstr ""
927
 
928
+ #: includes/admin/views/html-admin-setup-step-1.php:13
929
  msgid "Welcome to the Setup Wizard!"
930
  msgstr ""
931
 
932
+ #: includes/admin/views/html-admin-setup-step-1.php:15
933
  msgid ""
934
  "Thanks for installing <em>WP Job Manager</em>! Let's get your site ready to "
935
  "accept job listings."
936
  msgstr ""
937
 
938
+ #: includes/admin/views/html-admin-setup-step-1.php:16
939
  msgid ""
940
  "This setup wizard will walk you through the process of creating pages for "
941
  "job submissions, management, and listings."
942
  msgstr ""
943
 
944
+ #: includes/admin/views/html-admin-setup-step-1.php:20
945
  #. translators: Placeholder %s is the path to WPJM documentation site.
946
  msgid ""
947
  "If you'd prefer to skip this and set up your pages manually, our <a "
948
  "href=\"%s\">documentation</a> will walk you through each step."
949
  msgstr ""
950
 
951
+ #: includes/admin/views/html-admin-setup-step-1.php:30
952
  msgid "Start setup"
953
  msgstr ""
954
 
955
+ #: includes/admin/views/html-admin-setup-step-1.php:31
956
  msgid "Skip setup. I will set up the plugin manually."
957
  msgstr ""
958
 
959
+ #: includes/admin/views/html-admin-setup-step-2.php:13
960
  msgid "Page Setup"
961
  msgstr ""
962
 
963
+ #: includes/admin/views/html-admin-setup-step-2.php:15
964
  msgid ""
965
  "With WP Job Manager, employers and applicants can post, manage, and browse "
966
  "job listings right on your website. Tell us which of these common pages "
967
  "you'd like your site to have and we'll create and configure them for you."
968
  msgstr ""
969
 
970
+ #: includes/admin/views/html-admin-setup-step-2.php:21
971
  #. translators: %1$s is URL to WordPress core shortcode documentation. %2$s is
972
  #. URL to WPJM specific shortcode reference.
973
  msgid ""
974
  "(These pages are created using <a href=\"%1$s\" title=\"What is a "
975
+ "shortcode?\" class=\"help-page-link\">shortcodes</a>,\n"
976
  "\t\t\t\t\t\t\t\twhich we take care of in this step. If you'd like to build "
977
+ "these pages yourself or want to add one of these options to an existing\n"
978
  "\t\t\t\t\t\t\t\tpage on your site, you can skip this step and take a look "
979
+ "at <a href=\"%2$s\" class=\"help-page-link\">shortcode documentation</a> "
980
+ "for detailed instructions.)"
981
  msgstr ""
982
 
983
+ #: includes/admin/views/html-admin-setup-step-2.php:39
984
  msgid "Page Title"
985
  msgstr ""
986
 
987
+ #: includes/admin/views/html-admin-setup-step-2.php:40
988
  msgid "Page Description"
989
  msgstr ""
990
 
991
+ #: includes/admin/views/html-admin-setup-step-2.php:41
992
  msgid "Content Shortcode"
993
  msgstr ""
994
 
995
+ #: includes/admin/views/html-admin-setup-step-2.php:49
996
  msgid ""
997
  "Creates a page that allows employers to post new jobs directly from a page "
998
  "on your website, instead of requiring them to log in to an admin area. If "
1000
  "the admin dashboard only -- you can uncheck this setting."
1001
  msgstr ""
1002
 
1003
+ #: includes/admin/views/html-admin-setup-step-2.php:57
1004
  msgid ""
1005
  "Creates a page that allows employers to manage their job listings directly "
1006
  "from a page on your website, instead of requiring them to log in to an "
1008
  "only, you can uncheck this setting."
1009
  msgstr ""
1010
 
1011
+ #: includes/admin/views/html-admin-setup-step-2.php:64
1012
  msgid "Creates a page where visitors can browse, search, and filter job listings."
1013
  msgstr ""
1014
 
1015
+ #: includes/admin/views/html-admin-setup-step-2.php:72
1016
  msgid "Skip this step"
1017
  msgstr ""
1018
 
1019
+ #: includes/admin/views/html-admin-setup-step-3.php:13
1020
  msgid "You're ready to start using WP Job Manager!"
1021
  msgstr ""
1022
 
1023
+ #: includes/admin/views/html-admin-setup-step-3.php:15
1024
  msgid "Wondering what to do now? Here are some of the most common next steps:"
1025
  msgstr ""
1026
 
1027
+ #: includes/admin/views/html-admin-setup-step-3.php:18
1028
  msgid "Tweak your settings"
1029
  msgstr ""
1030
 
1031
+ #: includes/admin/views/html-admin-setup-step-3.php:19
1032
  msgid "Add a job using the admin dashboard"
1033
  msgstr ""
1034
 
1035
+ #: includes/admin/views/html-admin-setup-step-3.php:24
1036
  msgid "View submitted job listings"
1037
  msgstr ""
1038
 
1039
+ #: includes/admin/views/html-admin-setup-step-3.php:26
1040
  msgid "Add job listings to a page using the [jobs] shortcode"
1041
  msgstr ""
1042
 
1043
+ #: includes/admin/views/html-admin-setup-step-3.php:33
1044
  msgid "Add a job via the front-end"
1045
  msgstr ""
1046
 
1047
+ #: includes/admin/views/html-admin-setup-step-3.php:35
1048
  msgid "Learn to use the front-end job submission board"
1049
  msgstr ""
1050
 
1051
+ #: includes/admin/views/html-admin-setup-step-3.php:42
1052
  msgid "View the job dashboard"
1053
  msgstr ""
1054
 
1055
+ #: includes/admin/views/html-admin-setup-step-3.php:44
1056
  msgid "Learn to use the front-end job dashboard"
1057
  msgstr ""
1058
 
1059
+ #: includes/admin/views/html-admin-setup-step-3.php:53
1060
  #. translators: %1$s is the URL to WPJM support documentation; %2$s is the URL
1061
  #. to WPJM support forums.
1062
  msgid ""
1063
+ "If you need help, you can find more detail in our\n"
1064
  "\t\t\t\t\t\t\t<a href=\"%1$s\">support documentation</a> or post your "
1065
  "question on the\n"
1066
  "\t\t\t\t\t\t\t<a href=\"%2$s\">WP Job Manager support forums</a>. Happy "
1067
  "hiring!"
1068
  msgstr ""
1069
 
1070
+ #: includes/admin/views/html-admin-setup-step-3.php:66
1071
  msgid "Support WP Job Manager's Ongoing Development"
1072
  msgstr ""
1073
 
1074
+ #: includes/admin/views/html-admin-setup-step-3.php:67
1075
  msgid ""
1076
  "There are lots of ways you can support open source software projects like "
1077
  "this one: contributing code, fixing a bug, assisting with non-English "
1079
  "spread the word. We appreciate your support!"
1080
  msgstr ""
1081
 
1082
+ #: includes/admin/views/html-admin-setup-step-3.php:69
1083
  msgid "Leave a positive review"
1084
  msgstr ""
1085
 
1086
+ #: includes/admin/views/html-admin-setup-step-3.php:70
1087
  msgid "Contribute a localization"
1088
  msgstr ""
1089
 
1090
+ #: includes/admin/views/html-admin-setup-step-3.php:71
1091
  msgid "Contribute code or report a bug"
1092
  msgstr ""
1093
 
1094
+ #: includes/admin/views/html-admin-setup-step-3.php:72
1095
  msgid "Help other users on the forums"
1096
  msgstr ""
1097
 
1098
+ #: includes/class-wp-job-manager-ajax.php:173
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1099
  #. translators: Placeholder %d is the number of found search results.
1100
  msgid "Search completed. Found %d matching record."
1101
  msgid_plural "Search completed. Found %d matching records."
1102
  msgstr[0] ""
1103
  msgstr[1] ""
1104
 
1105
+ #: includes/class-wp-job-manager-ajax.php:269
1106
  msgid "You must be logged in to upload files using this method."
1107
  msgstr ""
1108
 
1111
  msgstr ""
1112
 
1113
  #: includes/class-wp-job-manager-data-exporter.php:52
1114
+ #: includes/class-wp-job-manager-post-types.php:334
1115
  msgid "Company Logo"
1116
  msgstr ""
1117
 
1124
  msgstr ""
1125
 
1126
  #: includes/class-wp-job-manager-email-notifications.php:243
1127
+ #: includes/class-wp-job-manager-post-types.php:206
1128
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:192
1129
  msgid "Job type"
1130
  msgstr ""
1131
 
1132
  #: includes/class-wp-job-manager-email-notifications.php:253
1133
+ #: includes/class-wp-job-manager-post-types.php:142
1134
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:201
1135
  msgid "Job category"
1136
  msgstr ""
1137
 
1138
  #: includes/class-wp-job-manager-email-notifications.php:262
1139
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:226
1140
  msgid "Company name"
1141
  msgstr ""
1142
 
1181
  msgid "Geocoding error"
1182
  msgstr ""
1183
 
1184
+ #: includes/class-wp-job-manager-install.php:78
1185
  msgid "Employer"
1186
  msgstr ""
1187
 
1188
+ #: includes/class-wp-job-manager-post-types.php:143
1189
  msgid "Job categories"
1190
  msgstr ""
1191
 
1192
+ #: includes/class-wp-job-manager-post-types.php:171
1193
+ #: includes/class-wp-job-manager-post-types.php:234
1194
+ #: includes/class-wp-job-manager-post-types.php:327
1195
  #. translators: Placeholder %s is the plural label of the job listing category
1196
  #. taxonomy type.
1197
  #. translators: Placeholder %s is the plural label of the job listing job type
1201
  msgid "Search %s"
1202
  msgstr ""
1203
 
1204
+ #: includes/class-wp-job-manager-post-types.php:173
1205
+ #: includes/class-wp-job-manager-post-types.php:236
1206
+ #: includes/class-wp-job-manager-post-types.php:313
1207
  #. translators: Placeholder %s is the plural label of the job listing category
1208
  #. taxonomy type.
1209
  #. translators: Placeholder %s is the plural label of the job listing job type
1213
  msgid "All %s"
1214
  msgstr ""
1215
 
1216
+ #: includes/class-wp-job-manager-post-types.php:175
1217
+ #: includes/class-wp-job-manager-post-types.php:238
1218
+ #: includes/class-wp-job-manager-post-types.php:333
1219
  #. translators: Placeholder %s is the singular label of the job listing
1220
  #. category taxonomy type.
1221
  #. translators: Placeholder %s is the singular label of the job listing job
1225
  msgid "Parent %s"
1226
  msgstr ""
1227
 
1228
+ #: includes/class-wp-job-manager-post-types.php:177
1229
+ #: includes/class-wp-job-manager-post-types.php:240
1230
  #. translators: Placeholder %s is the singular label of the job listing
1231
  #. category taxonomy type.
1232
  #. translators: Placeholder %s is the singular label of the job listing job
1234
  msgid "Parent %s:"
1235
  msgstr ""
1236
 
1237
+ #: includes/class-wp-job-manager-post-types.php:179
1238
+ #: includes/class-wp-job-manager-post-types.php:242
1239
+ #: includes/class-wp-job-manager-post-types.php:319
1240
  #. translators: Placeholder %s is the singular label of the job listing
1241
  #. category taxonomy type.
1242
  #. translators: Placeholder %s is the singular label of the job listing job
1246
  msgid "Edit %s"
1247
  msgstr ""
1248
 
1249
+ #: includes/class-wp-job-manager-post-types.php:181
1250
+ #: includes/class-wp-job-manager-post-types.php:244
1251
  #. translators: Placeholder %s is the singular label of the job listing
1252
  #. category taxonomy type.
1253
  #. translators: Placeholder %s is the singular label of the job listing job
1255
  msgid "Update %s"
1256
  msgstr ""
1257
 
1258
+ #: includes/class-wp-job-manager-post-types.php:183
1259
+ #: includes/class-wp-job-manager-post-types.php:246
1260
  #. translators: Placeholder %s is the singular label of the job listing
1261
  #. category taxonomy type.
1262
  #. translators: Placeholder %s is the singular label of the job listing job
1264
  msgid "Add New %s"
1265
  msgstr ""
1266
 
1267
+ #: includes/class-wp-job-manager-post-types.php:185
1268
+ #: includes/class-wp-job-manager-post-types.php:248
1269
  #. translators: Placeholder %s is the singular label of the job listing
1270
  #. category taxonomy type.
1271
  #. translators: Placeholder %s is the singular label of the job listing job
1273
  msgid "New %s Name"
1274
  msgstr ""
1275
 
1276
+ #: includes/class-wp-job-manager-post-types.php:207
1277
  msgid "Job types"
1278
  msgstr ""
1279
 
1280
+ #: includes/class-wp-job-manager-post-types.php:280
1281
  msgid "Job"
1282
  msgstr ""
1283
 
1284
+ #: includes/class-wp-job-manager-post-types.php:281
1285
  msgid "Jobs"
1286
  msgstr ""
1287
 
1288
+ #: includes/class-wp-job-manager-post-types.php:314
1289
  msgid "Add New"
1290
  msgstr ""
1291
 
1292
+ #: includes/class-wp-job-manager-post-types.php:316
1293
  #. translators: Placeholder %s is the singular label of the job listing post
1294
  #. type.
1295
  msgid "Add %s"
1296
  msgstr ""
1297
 
1298
+ #: includes/class-wp-job-manager-post-types.php:321
1299
  #. translators: Placeholder %s is the singular label of the job listing post
1300
  #. type.
1301
  msgid "New %s"
1302
  msgstr ""
1303
 
1304
+ #: includes/class-wp-job-manager-post-types.php:323
1305
+ #: includes/class-wp-job-manager-post-types.php:325
1306
  #. translators: Placeholder %s is the singular label of the job listing post
1307
  #. type.
1308
  msgid "View %s"
1309
  msgstr ""
1310
 
1311
+ #: includes/class-wp-job-manager-post-types.php:329
1312
  #. translators: Placeholder %s is the singular label of the job listing post
1313
  #. type.
1314
  msgid "No %s found"
1315
  msgstr ""
1316
 
1317
+ #: includes/class-wp-job-manager-post-types.php:331
1318
  #. translators: Placeholder %s is the plural label of the job listing post
1319
  #. type.
1320
  msgid "No %s found in trash"
1321
  msgstr ""
1322
 
1323
+ #: includes/class-wp-job-manager-post-types.php:335
1324
  msgid "Set company logo"
1325
  msgstr ""
1326
 
1327
+ #: includes/class-wp-job-manager-post-types.php:336
1328
  msgid "Remove company logo"
1329
  msgstr ""
1330
 
1331
+ #: includes/class-wp-job-manager-post-types.php:337
1332
  msgid "Use as company logo"
1333
  msgstr ""
1334
 
1335
+ #: includes/class-wp-job-manager-post-types.php:340
1336
  #. translators: Placeholder %s is the plural label of the job listing post
1337
  #. type.
1338
  msgid "This is where you can create and manage %s."
1339
  msgstr ""
1340
 
1341
+ #: includes/class-wp-job-manager-post-types.php:381
1342
  #. translators: Placeholder %s is the number of expired posts of this type.
1343
  msgid "Expired <span class=\"count\">(%s)</span>"
1344
  msgid_plural "Expired <span class=\"count\">(%s)</span>"
1345
  msgstr[0] ""
1346
  msgstr[1] ""
1347
 
1348
+ #: includes/class-wp-job-manager-post-types.php:393
1349
  #. translators: Placeholder %s is the number of posts in a preview state.
1350
  msgid "Preview <span class=\"count\">(%s)</span>"
1351
  msgid_plural "Preview <span class=\"count\">(%s)</span>"
1380
  msgstr ""
1381
 
1382
  #: includes/class-wp-job-manager-shortcodes.php:141
1383
+ #: includes/class-wp-job-manager-shortcodes.php:155
1384
  msgid "Missing submission page."
1385
  msgstr ""
1386
 
1387
+ #: includes/class-wp-job-manager-shortcodes.php:247
1388
  #: includes/widgets/class-wp-job-manager-widget-featured-jobs.php:30
1389
  #: includes/widgets/class-wp-job-manager-widget-featured-jobs.php:46
1390
  #: includes/widgets/class-wp-job-manager-widget-recent-jobs.php:30
1391
  msgid "Title"
1392
  msgstr ""
1393
 
1394
+ #: includes/class-wp-job-manager-shortcodes.php:249
1395
  msgid "Date Posted"
1396
  msgstr ""
1397
 
1398
+ #: includes/class-wp-job-manager-shortcodes.php:250
1399
  msgid "Listing Expires"
1400
  msgstr ""
1401
 
1402
+ #: includes/class-wp-job-manager-shortcodes.php:385
1403
+ #: includes/class-wp-job-manager-shortcodes.php:422
1404
  msgid "Load more listings"
1405
  msgstr ""
1406
 
1410
  msgid ""
1411
  "We'd love if you helped us make WP Job Manager better by allowing us to "
1412
  "collect\n"
1413
+ "\t\t\t\t<a href=\"%s\">usage tracking data</a>. No sensitive information is\n"
 
1414
  "\t\t\t\tcollected, and you can opt out at any time."
1415
  msgstr ""
1416
 
1419
  #. data WPJM tracks.
1420
  msgid ""
1421
  "Help us make WP Job Manager better by allowing us to collect\n"
1422
+ "\t\t\t\t<a href=\"%s\">usage tracking data</a>.\n"
1423
  "\t\t\t\tNo sensitive information is collected."
1424
  msgstr ""
1425
 
1518
  msgstr ""
1519
 
1520
  #: includes/forms/class-wp-job-manager-form-submit-job.php:75
1521
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:519
1522
  #: templates/job-preview.php:22
1523
  msgid "Preview"
1524
  msgstr ""
1527
  msgid "Done"
1528
  msgstr ""
1529
 
1530
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:151
1531
  msgid "Application email"
1532
  msgstr ""
1533
 
1534
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:152
1535
+ #: wp-job-manager-template.php:719
1536
  msgid "you@yourdomain.com"
1537
  msgstr ""
1538
 
1539
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:156
1540
  msgid "Application URL"
1541
  msgstr ""
1542
 
1543
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:157
1544
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:237
1545
  msgid "http://"
1546
  msgstr ""
1547
 
1548
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:161
1549
  msgid "Application email/URL"
1550
  msgstr ""
1551
 
1552
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:162
1553
  msgid "Enter an email address or website URL"
1554
  msgstr ""
1555
 
1556
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:177
1557
  msgid "Job Title"
1558
  msgstr ""
1559
 
1560
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:185
1561
  msgid "Leave this blank if the location is not important"
1562
  msgstr ""
1563
 
1564
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:195
1565
  msgid "Choose job type&hellip;"
1566
  msgstr ""
1567
 
1568
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:210
1569
  msgid "Description"
1570
  msgstr ""
1571
 
1572
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:229
1573
  msgid "Enter the name of the company"
1574
  msgstr ""
1575
 
1576
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:233
1577
  #: templates/content-single-job_listing-company.php:30
1578
  msgid "Website"
1579
  msgstr ""
1580
 
1581
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:241
1582
  msgid "Tagline"
1583
  msgstr ""
1584
 
1585
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:244
1586
  msgid "Briefly describe your company"
1587
  msgstr ""
1588
 
1589
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:249
1590
  msgid "Video"
1591
  msgstr ""
1592
 
1593
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:253
1594
  msgid "A link to a video about your company"
1595
  msgstr ""
1596
 
1597
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:257
1598
  msgid "Twitter username"
1599
  msgstr ""
1600
 
1601
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:260
1602
  msgid "@yourcompany"
1603
  msgstr ""
1604
 
1605
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:264
1606
  msgid "Logo"
1607
  msgstr ""
1608
 
1609
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:314
1610
  #. translators: Placeholder %s is the label for the required field.
1611
  msgid "%s is a required field"
1612
  msgstr ""
1613
 
1614
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:325
1615
  #. translators: Placeholder %s is the field label that is did not validate.
1616
  msgid "%s is invalid"
1617
  msgstr ""
1618
 
1619
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:342
1620
  msgid "Invalid attachment provided."
1621
  msgstr ""
1622
 
1623
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:360
1624
  #: wp-job-manager-functions.php:1277
1625
  #. translators: Placeholder %1$s is field label; %2$s is the file mime type;
1626
  #. %3$s is the allowed mime-types.
1629
  msgid "\"%1$s\" (filetype %2$s) needs to be one of the following file types: %3$s"
1630
  msgstr ""
1631
 
1632
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:375
1633
  msgid "Please enter a valid application email address"
1634
  msgstr ""
1635
 
1636
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:384
1637
  msgid "Please enter a valid application URL"
1638
  msgstr ""
1639
 
1640
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:394
1641
  msgid "Please enter a valid application email address or URL"
1642
  msgstr ""
1643
 
1644
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:554
1645
  msgid "Please enter a username."
1646
  msgstr ""
1647
 
1648
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:558
1649
  msgid "Please enter a password."
1650
  msgstr ""
1651
 
1652
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:562
1653
  msgid "Please enter your email address."
1654
  msgstr ""
1655
 
1656
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:568
1657
  msgid "Passwords must match."
1658
  msgstr ""
1659
 
1660
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:574
1661
  #. translators: Placeholder %s is the password hint.
1662
  msgid "Invalid Password: %s"
1663
  msgstr ""
1664
 
1665
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:576
1666
  msgid "Password is not valid."
1667
  msgstr ""
1668
 
1669
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:599
1670
  msgid "You must be signed in to post a new listing."
1671
  msgstr ""
1672
 
2054
  msgid "Relist"
2055
  msgstr ""
2056
 
2057
+ #: templates/job-dashboard.php:75
2058
+ msgid "Continue Submission"
2059
+ msgstr ""
2060
+
2061
  #: templates/job-filters.php:30 templates/job-filters.php:31
2062
  msgid "Keywords"
2063
  msgstr ""
2169
  msgid "Uploaded files need to be one of the following file types: %s"
2170
  msgstr ""
2171
 
2172
+ #: wp-job-manager-template.php:155
2173
  msgid "Inactive"
2174
  msgstr ""
2175
 
2176
+ #: wp-job-manager-template.php:249
2177
  #. translators: %1$s is the job listing title; %2$s is the URL for the current
2178
  #. WordPress instance.
2179
+ msgid "Application via %1$s listing on %2$s"
2180
  msgstr ""
2181
 
2182
+ #: wp-job-manager-template.php:693
2183
  msgid "Username"
2184
  msgstr ""
2185
 
2186
+ #: wp-job-manager-template.php:701
2187
  msgid "Password"
2188
  msgstr ""
2189
 
2190
+ #: wp-job-manager-template.php:711
2191
  msgid "Verify Password"
2192
  msgstr ""
2193
 
2194
+ #: wp-job-manager-template.php:718
2195
  msgid "Your email"
2196
  msgstr ""
2197
 
2198
+ #: wp-job-manager-template.php:745
2199
  msgid "Posted on "
2200
  msgstr ""
2201
 
2202
+ #: wp-job-manager-template.php:748 wp-job-manager-template.php:769
2203
  #. translators: Placeholder %s is the relative, human readable time since the
2204
  #. job listing was posted.
2205
  msgid "Posted %s ago"
2206
  msgstr ""
2207
 
2208
+ #: wp-job-manager-template.php:798
2209
  msgid "Anywhere"
2210
  msgstr ""
2211
 
2212
+ #: wp-job-manager.php:95
2213
+ msgid ""
2214
+ "Constant `WPJM_REST_API_ENABLED` and custom REST API implementation is "
2215
+ "deprecated and will be removed in 1.33.0. Please use standard WP Core's "
2216
+ "implementation."
2217
+ msgstr ""
2218
+
2219
+ #: wp-job-manager.php:178
2220
  #. translators: Placeholders %1$s and %2$s are the names of the two cookies
2221
  #. used in WP Job Manager.
2222
  msgid ""
2225
  "\t\t\t\thave started but have not completed: %1$s and %2$s"
2226
  msgstr ""
2227
 
2228
+ #: wp-job-manager.php:214
2229
+ msgid "Standard REST API implementation from WP core"
2230
+ msgstr ""
2231
+
2232
+ #: wp-job-manager.php:328
2233
  msgid "Load previous listings"
2234
  msgstr ""
2235
 
2236
+ #: wp-job-manager.php:429
2237
  msgid "Invalid file type. Accepted types:"
2238
  msgstr ""
2239
 
2240
+ #: wp-job-manager.php:444
2241
  msgid "Are you sure you want to delete this listing?"
2242
  msgstr ""
2243
 
2255
  msgid "Automattic"
2256
  msgstr ""
2257
 
2258
+ #: includes/admin/class-wp-job-manager-admin.php:141
2259
+ msgctxt "user selection"
2260
+ msgid "No matches found"
2261
+ msgstr ""
2262
+
2263
+ #: includes/admin/class-wp-job-manager-admin.php:142
2264
+ msgctxt "user selection"
2265
+ msgid "Loading failed"
2266
+ msgstr ""
2267
+
2268
+ #: includes/admin/class-wp-job-manager-admin.php:143
2269
+ msgctxt "user selection"
2270
+ msgid "Please enter 1 or more characters"
2271
+ msgstr ""
2272
+
2273
+ #: includes/admin/class-wp-job-manager-admin.php:144
2274
+ msgctxt "user selection"
2275
+ msgid "Please enter %qty% or more characters"
2276
+ msgstr ""
2277
+
2278
+ #: includes/admin/class-wp-job-manager-admin.php:145
2279
+ msgctxt "user selection"
2280
+ msgid "Loading more results&hellip;"
2281
+ msgstr ""
2282
+
2283
+ #: includes/admin/class-wp-job-manager-admin.php:146
2284
+ msgctxt "user selection"
2285
+ msgid "Searching&hellip;"
2286
+ msgstr ""
2287
+
2288
+ #: includes/admin/class-wp-job-manager-admin.php:159
2289
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:432
2290
  #. translators: jQuery date format, see
2291
  #. http:api.jqueryui.com/datepicker/#utility-formatDate
2292
  msgctxt "Date format for jQuery datepicker."
2293
  msgid "yy-mm-dd"
2294
  msgstr ""
2295
 
2296
+ #: includes/admin/class-wp-job-manager-permalink-settings.php:104
2297
+ #: includes/class-wp-job-manager-post-types.php:853
2298
  msgctxt "Job permalink - resave permalinks after changing this"
2299
  msgid "job"
2300
  msgstr ""
2301
 
2302
+ #: includes/admin/class-wp-job-manager-permalink-settings.php:113
2303
+ #: includes/class-wp-job-manager-post-types.php:854
2304
  msgctxt "Job category slug - resave permalinks after changing this"
2305
  msgid "job-category"
2306
  msgstr ""
2307
 
2308
+ #: includes/admin/class-wp-job-manager-permalink-settings.php:122
2309
+ #: includes/class-wp-job-manager-post-types.php:855
2310
  msgctxt "Job type slug - resave permalinks after changing this"
2311
  msgid "job-type"
2312
  msgstr ""
2313
 
2314
+ #: includes/admin/views/html-admin-setup-step-2.php:47
2315
  msgctxt "Default page title (wizard)"
2316
  msgid "Post a Job"
2317
  msgstr ""
2318
 
2319
+ #: includes/admin/views/html-admin-setup-step-2.php:55
2320
  msgctxt "Default page title (wizard)"
2321
  msgid "Job Dashboard"
2322
  msgstr ""
2323
 
2324
+ #: includes/admin/views/html-admin-setup-step-2.php:63
2325
  msgctxt "Default page title (wizard)"
2326
  msgid "Jobs"
2327
  msgstr ""
2328
 
2329
+ #: includes/class-wp-job-manager-post-types.php:374
 
 
 
 
 
2330
  #: wp-job-manager-functions.php:320
2331
  msgctxt "post status"
2332
  msgid "Expired"
2333
  msgstr ""
2334
 
2335
+ #: includes/class-wp-job-manager-post-types.php:387
2336
  #: wp-job-manager-functions.php:321
2337
  msgctxt "post status"
2338
  msgid "Preview"
2356
  #: wp-job-manager-functions.php:324
2357
  msgctxt "post status"
2358
  msgid "Active"
2359
+ msgstr ""
2360
+
2361
+ #: includes/class-wp-job-manager-post-types.php:837
2362
+ msgctxt "Post type archive slug - resave permalinks after changing this"
2363
+ msgid "jobs"
2364
  msgstr ""
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: mikejolley, automattic, adamkheckler, alexsanford1, annezazu, cena, chaselivingston, csonnek, davor.altman, donnapep, donncha, drawmyface, erania-pinnera, jacobshere, jakeom, jeherve, jenhooks, jgs, jonryan, kraftbj, lamdayap, lschuyler, macmanx, nancythanki, orangesareorange, rachelsquirrel, ryancowles, richardmtl, scarstocea
3
  Tags: job manager, job listing, job board, job management, job lists, job list, job, jobs, company, hiring, employment, employer, employees, candidate, freelance, internship, job listings, positions, board, application, hiring, listing, manager, recruiting, recruitment, talent
4
  Requires at least: 4.7.0
5
- Tested up to: 4.9
6
- Stable tag: 1.31.3
7
  License: GPLv3
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
@@ -152,6 +152,25 @@ It then creates a database based on the parameters passed to it.
152
 
153
  == Changelog ==
154
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  = 1.31.3 =
156
  * Fix: Escape the attachment URL. (Props to karimeo)
157
  * Fix: Custom job field priority fix when using decimals. (@tripflex)
2
  Contributors: mikejolley, automattic, adamkheckler, alexsanford1, annezazu, cena, chaselivingston, csonnek, davor.altman, donnapep, donncha, drawmyface, erania-pinnera, jacobshere, jakeom, jeherve, jenhooks, jgs, jonryan, kraftbj, lamdayap, lschuyler, macmanx, nancythanki, orangesareorange, rachelsquirrel, ryancowles, richardmtl, scarstocea
3
  Tags: job manager, job listing, job board, job management, job lists, job list, job, jobs, company, hiring, employment, employer, employees, candidate, freelance, internship, job listings, positions, board, application, hiring, listing, manager, recruiting, recruitment, talent
4
  Requires at least: 4.7.0
5
+ Tested up to: 5.0
6
+ Stable tag: 1.32.0
7
  License: GPLv3
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
152
 
153
  == Changelog ==
154
 
155
+ = 1.32.0 =
156
+ * Enhancement: Switched from Chosen to Select2 for enhanced dropdown handling and better mobile support. May require theme update.
157
+ * Enhancement: Draft and unsubmitted job listings now appear in `[job_dashboard]`, allowing users to complete their submission.
158
+ * Enhancement: Filled and expired positions are now hidden from WordPress search. (@felipeelia)
159
+ * Enhancement: Adds additional support for the new block editor. Restricted to classic block for compatibility with frontend editor.
160
+ * Enhancement: Job types can be preselected in `[jobs]` shortcode with `?search_job_type=term-slug`. (@felipeelia)
161
+ * Enhancement: Author selection in WP admin now uses a searchable dropdown.
162
+ * Enhancement: Setup wizard is accessed with a flash message instead of an automatic redirect upon activation.
163
+ * Enhancement: When using supported themes, job listing archive slug can be changed in Permalink settings.
164
+ * Fix: Company tagline alignment issue with company name. (@0xDELS)
165
+ * Fix: "Load Previous Listings" link unnecessarily shows up on `[jobs]` shortcode. (@tonytettinger)
166
+ * Fix: Category selector fixed in the job listings page in WP Admin. (@AmandaJBell)
167
+ * Fix: Issue with quote encoding on Apply for Job email link.
168
+ * Fix: Link `target` attributes have been removed in templates.
169
+ * Dev: Allow for job submission flow to be interrupted using `before` argument on form steps.
170
+ * Dev: HTML allowed in custom company field labels. (@tripflex)
171
+ * Dev: Job feed slug name can be customized with the `job_manager_job_feed_name` filter.
172
+ * Deprecated: Unreleased REST API implementation using `WPJM_REST_API_ENABLED` was replaced with standard WP REST API.
173
+
174
  = 1.31.3 =
175
  * Fix: Escape the attachment URL. (Props to karimeo)
176
  * Fix: Custom job field priority fix when using decimals. (@tripflex)
templates/content-single-job_listing-company.php CHANGED
@@ -11,7 +11,7 @@
11
  * @package WP Job Manager
12
  * @category Template
13
  * @since 1.14.0
14
- * @version 1.31.1
15
  */
16
 
17
  if ( ! defined( 'ABSPATH' ) ) {
@@ -27,7 +27,7 @@ if ( ! get_the_company_name() ) {
27
 
28
  <p class="name">
29
  <?php if ( $website = get_the_company_website() ) : ?>
30
- <a class="website" href="<?php echo esc_url( $website ); ?>" target="_blank" rel="nofollow"><?php esc_html_e( 'Website', 'wp-job-manager' ); ?></a>
31
  <?php endif; ?>
32
  <?php the_company_twitter(); ?>
33
  <?php the_company_name( '<strong>', '</strong>' ); ?>
11
  * @package WP Job Manager
12
  * @category Template
13
  * @since 1.14.0
14
+ * @version 1.32.0
15
  */
16
 
17
  if ( ! defined( 'ABSPATH' ) ) {
27
 
28
  <p class="name">
29
  <?php if ( $website = get_the_company_website() ) : ?>
30
+ <a class="website" href="<?php echo esc_url( $website ); ?>" rel="nofollow"><?php esc_html_e( 'Website', 'wp-job-manager' ); ?></a>
31
  <?php endif; ?>
32
  <?php the_company_twitter(); ?>
33
  <?php the_company_name( '<strong>', '</strong>' ); ?>
templates/job-application-url.php CHANGED
@@ -8,11 +8,11 @@
8
  * @author Automattic
9
  * @package WP Job Manager
10
  * @category Template
11
- * @version 1.31.0
12
  */
13
 
14
  if ( ! defined( 'ABSPATH' ) ) {
15
  exit; // Exit if accessed directly.
16
  }
17
  ?>
18
- <p><?php esc_html_e( 'To apply for this job please visit', 'wp-job-manager' ); ?> <a href="<?php echo esc_url( $apply->url ); ?>" target="_blank" rel="nofollow"><?php echo esc_html( wp_parse_url( $apply->url, PHP_URL_HOST ) ); ?></a>.</p>
8
  * @author Automattic
9
  * @package WP Job Manager
10
  * @category Template
11
+ * @version 1.32.0
12
  */
13
 
14
  if ( ! defined( 'ABSPATH' ) ) {
15
  exit; // Exit if accessed directly.
16
  }
17
  ?>
18
+ <p><?php esc_html_e( 'To apply for this job please visit', 'wp-job-manager' ); ?> <a href="<?php echo esc_url( $apply->url ); ?>" rel="nofollow"><?php echo esc_html( wp_parse_url( $apply->url, PHP_URL_HOST ) ); ?></a>.</p>
templates/job-dashboard.php CHANGED
@@ -8,7 +8,7 @@
8
  * @author Automattic
9
  * @package WP Job Manager
10
  * @category Template
11
- * @version 1.31.1
12
  */
13
 
14
  if ( ! defined( 'ABSPATH' ) ) {
@@ -70,6 +70,10 @@ if ( ! defined( 'ABSPATH' ) ) {
70
  $actions['edit'] = array( 'label' => __( 'Edit', 'wp-job-manager' ), 'nonce' => false );
71
  }
72
  break;
 
 
 
 
73
  }
74
 
75
  $actions['delete'] = array( 'label' => __( 'Delete', 'wp-job-manager' ), 'nonce' => true );
8
  * @author Automattic
9
  * @package WP Job Manager
10
  * @category Template
11
+ * @version 1.32.0
12
  */
13
 
14
  if ( ! defined( 'ABSPATH' ) ) {
70
  $actions['edit'] = array( 'label' => __( 'Edit', 'wp-job-manager' ), 'nonce' => false );
71
  }
72
  break;
73
+ case 'draft' :
74
+ case 'preview' :
75
+ $actions['continue'] = array( 'label' => __( 'Continue Submission', 'wp-job-manager' ), 'nonce' => true );
76
+ break;
77
  }
78
 
79
  $actions['delete'] = array( 'label' => __( 'Delete', 'wp-job-manager' ), 'nonce' => true );
templates/job-submit.php CHANGED
@@ -8,7 +8,7 @@
8
  * @author Automattic
9
  * @package WP Job Manager
10
  * @category Template
11
- * @version 1.31.1
12
  */
13
 
14
  if ( ! defined( 'ABSPATH' ) ) {
@@ -57,7 +57,7 @@ global $job_manager;
57
 
58
  <?php foreach ( $company_fields as $key => $field ) : ?>
59
  <fieldset class="fieldset-<?php echo esc_attr( $key ); ?>">
60
- <label for="<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $field['label'] ) . wp_kses_post( apply_filters( 'submit_job_form_required_label', $field['required'] ? '' : ' <small>' . __( '(optional)', 'wp-job-manager' ) . '</small>', $field ) ); ?></label>
61
  <div class="field <?php echo $field['required'] ? 'required-field' : ''; ?>">
62
  <?php get_job_manager_template( 'form-fields/' . $field['type'] . '-field.php', array( 'key' => $key, 'field' => $field ) ); ?>
63
  </div>
8
  * @author Automattic
9
  * @package WP Job Manager
10
  * @category Template
11
+ * @version 1.32.0
12
  */
13
 
14
  if ( ! defined( 'ABSPATH' ) ) {
57
 
58
  <?php foreach ( $company_fields as $key => $field ) : ?>
59
  <fieldset class="fieldset-<?php echo esc_attr( $key ); ?>">
60
+ <label for="<?php echo esc_attr( $key ); ?>"><?php echo wp_kses_post( $field['label'] ) . wp_kses_post( apply_filters( 'submit_job_form_required_label', $field['required'] ? '' : ' <small>' . __( '(optional)', 'wp-job-manager' ) . '</small>', $field ) ); ?></label>
61
  <div class="field <?php echo $field['required'] ? 'required-field' : ''; ?>">
62
  <?php get_job_manager_template( 'form-fields/' . $field['type'] . '-field.php', array( 'key' => $key, 'field' => $field ) ); ?>
63
  </div>
wp-job-manager-functions.php CHANGED
@@ -490,7 +490,7 @@ if ( ! function_exists( 'get_job_listing_rss_link' ) ) :
490
  * @return string
491
  */
492
  function get_job_listing_rss_link( $args = array() ) {
493
- $rss_link = add_query_arg( urlencode_deep( array_merge( array( 'feed' => 'job_feed' ), $args ) ), home_url() );
494
  return $rss_link;
495
  }
496
  endif;
490
  * @return string
491
  */
492
  function get_job_listing_rss_link( $args = array() ) {
493
+ $rss_link = add_query_arg( urlencode_deep( array_merge( array( 'feed' => WP_Job_Manager_Post_Types::get_job_feed_name() ), $args ) ), home_url() );
494
  return $rss_link;
495
  }
496
  endif;
wp-job-manager-template.php CHANGED
@@ -146,7 +146,9 @@ function get_the_job_status( $post = null ) {
146
  $post = get_post( $post );
147
  $status = $post->post_status;
148
  $statuses = get_job_listing_post_statuses();
149
-
 
 
150
  if ( isset( $statuses[ $status ] ) ) {
151
  $status = $statuses[ $status ];
152
  } else {
@@ -244,7 +246,7 @@ function get_the_job_application_method( $post = null ) {
244
  $method->email = antispambot( $apply );
245
 
246
  // translators: %1$s is the job listing title; %2$s is the URL for the current WordPress instance.
247
- $method->subject = apply_filters( 'job_manager_application_email_subject', sprintf( esc_html__( 'Application via "%1$s" listing on %2$s', 'wp-job-manager' ), esc_html( $post->post_title ), esc_url( home_url() ) ), $post );
248
  } else {
249
  if ( strpos( $apply, 'http' ) !== 0 ) {
250
  $apply = 'http://' . $apply;
@@ -785,7 +787,7 @@ function the_job_location( $map_link = true, $post = null ) {
785
  echo wp_kses_post(
786
  apply_filters(
787
  'the_job_location_map_link',
788
- '<a class="google_map_link" href="' . esc_url( 'http://maps.google.com/maps?q=' . rawurlencode( wp_strip_all_tags( $location ) ) . '&zoom=14&size=512x512&maptype=roadmap&sensor=false' ) . '" target="_blank">' . esc_html( wp_strip_all_tags( $location ) ) . '</a>',
789
  $location, $post
790
  )
791
  );
@@ -1098,7 +1100,7 @@ function the_company_twitter( $before = '', $after = '', $echo = true, $post = n
1098
  return null;
1099
  }
1100
 
1101
- $company_twitter = $before . '<a href="' . esc_url( 'https://twitter.com/' . $company_twitter ) . '" class="company_twitter" target="_blank">' . esc_html( wp_strip_all_tags( $company_twitter ) ) . '</a>' . $after;
1102
 
1103
  if ( $echo ) {
1104
  echo wp_kses_post( $company_twitter );
146
  $post = get_post( $post );
147
  $status = $post->post_status;
148
  $statuses = get_job_listing_post_statuses();
149
+ if ( 'preview' === $status ) {
150
+ $status = 'draft';
151
+ }
152
  if ( isset( $statuses[ $status ] ) ) {
153
  $status = $statuses[ $status ];
154
  } else {
246
  $method->email = antispambot( $apply );
247
 
248
  // translators: %1$s is the job listing title; %2$s is the URL for the current WordPress instance.
249
+ $method->subject = apply_filters( 'job_manager_application_email_subject', sprintf( esc_html__( 'Application via %1$s listing on %2$s', 'wp-job-manager' ), esc_html( $post->post_title ), esc_url( home_url() ) ), $post );
250
  } else {
251
  if ( strpos( $apply, 'http' ) !== 0 ) {
252
  $apply = 'http://' . $apply;
787
  echo wp_kses_post(
788
  apply_filters(
789
  'the_job_location_map_link',
790
+ '<a class="google_map_link" href="' . esc_url( 'http://maps.google.com/maps?q=' . rawurlencode( wp_strip_all_tags( $location ) ) . '&zoom=14&size=512x512&maptype=roadmap&sensor=false' ) . '">' . esc_html( wp_strip_all_tags( $location ) ) . '</a>',
791
  $location, $post
792
  )
793
  );
1100
  return null;
1101
  }
1102
 
1103
+ $company_twitter = $before . '<a href="' . esc_url( 'https://twitter.com/' . $company_twitter ) . '" class="company_twitter">' . esc_html( wp_strip_all_tags( $company_twitter ) ) . '</a>' . $after;
1104
 
1105
  if ( $echo ) {
1106
  echo wp_kses_post( $company_twitter );
wp-job-manager.php CHANGED
@@ -3,11 +3,11 @@
3
  * Plugin Name: WP Job Manager
4
  * Plugin URI: https://wpjobmanager.com/
5
  * Description: Manage job listings from the WordPress admin panel, and allow users to post jobs directly to your site.
6
- * Version: 1.31.3
7
  * Author: Automattic
8
  * Author URI: https://wpjobmanager.com/
9
  * Requires at least: 4.7.0
10
- * Tested up to: 4.9
11
  * Text Domain: wp-job-manager
12
  * Domain Path: /languages/
13
  * License: GPL2+
@@ -63,7 +63,7 @@ class WP_Job_Manager {
63
  */
64
  public function __construct() {
65
  // Define constants.
66
- define( 'JOB_MANAGER_VERSION', '1.31.3' );
67
  define( 'JOB_MANAGER_MINIMUM_WP_VERSION', '4.7.0' );
68
  define( 'JOB_MANAGER_PLUGIN_DIR', untrailingslashit( plugin_dir_path( __FILE__ ) ) );
69
  define( 'JOB_MANAGER_PLUGIN_URL', untrailingslashit( plugins_url( basename( plugin_dir_path( __FILE__ ) ), basename( __FILE__ ) ) ) );
@@ -77,6 +77,7 @@ class WP_Job_Manager {
77
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/class-wp-job-manager-api.php';
78
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/class-wp-job-manager-forms.php';
79
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/class-wp-job-manager-geocode.php';
 
80
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/class-wp-job-manager-cache-helper.php';
81
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/helper/class-wp-job-manager-helper.php';
82
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/abstracts/abstract-wp-job-manager-email.php';
@@ -84,7 +85,16 @@ class WP_Job_Manager {
84
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/class-wp-job-manager-email-notifications.php';
85
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/class-wp-job-manager-data-exporter.php';
86
 
87
- add_action( 'rest_api_init', array( $this, 'rest_api' ) );
 
 
 
 
 
 
 
 
 
88
 
89
  if ( is_admin() ) {
90
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/admin/class-wp-job-manager-admin.php';
@@ -188,9 +198,21 @@ class WP_Job_Manager {
188
  /**
189
  * Initialize our REST API.
190
  *
 
 
 
 
 
 
 
191
  * @return WP_Job_Manager_REST_API|WP_Error
192
  */
193
  public function rest_api() {
 
 
 
 
 
194
  if ( null === $this->rest_api ) {
195
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/rest-api/class-wp-job-manager-rest-api.php';
196
  $this->rest_api = new WP_Job_Manager_REST_API( dirname( __FILE__ ) );
@@ -286,44 +308,21 @@ class WP_Job_Manager {
286
  wp_register_style( 'jquery-ui', '//code.jquery.com/ui/' . $jquery_version . '/themes/smoothness/jquery-ui.css', array(), $jquery_version );
287
  }
288
 
 
 
 
 
 
 
 
 
289
  /**
290
  * Registers and enqueues scripts and CSS.
 
 
 
291
  */
292
  public function frontend_scripts() {
293
- global $post;
294
-
295
- /**
296
- * Starting in WP Job Manager 1.32.0, the chosen JS library and core frontend WPJM CSS will only be enqueued
297
- * when used on a particular page. Theme and plugin authors as well as people who have overloaded WPJM's default
298
- * template files should test this upcoming behavior.
299
- *
300
- * To test this behavior before 1.32.0, add this to your `wp-config.php`:
301
- * define( 'JOB_MANAGER_TEST_NEW_ASSET_BEHAVIOR', true );
302
- *
303
- * Unless this constant is defined, WP Job Manager will default to its old behavior: chosen JS library and
304
- * frontend styles are always enqueued.
305
- *
306
- * If your theme or plugin depend on the `frontend.css` or chosen JS library from WPJM core, you can use the
307
- * `job_manager_chosen_enabled` and `job_manager_enqueue_frontend_style` filters.
308
- *
309
- * Example code for a custom shortcode that depends on the chosen library:
310
- *
311
- * add_filter( 'job_manager_chosen_enabled', function( $chosen_used_on_page ) {
312
- * global $post;
313
- * if ( is_singular()
314
- * && is_a( $post, 'WP_Post' )
315
- * && has_shortcode( $post->post_content, 'resumes' )
316
- * ) {
317
- * $chosen_used_on_page = true;
318
- * }
319
- * return $chosen_used_on_page;
320
- * } );
321
- */
322
- if ( ! defined( 'JOB_MANAGER_TEST_NEW_ASSET_BEHAVIOR' ) || true !== JOB_MANAGER_TEST_NEW_ASSET_BEHAVIOR ) {
323
- add_filter( 'job_manager_chosen_enabled', '__return_true' );
324
- add_filter( 'job_manager_enqueue_frontend_style', '__return_true' );
325
- }
326
-
327
  $ajax_url = WP_Job_Manager_Ajax::get_endpoint();
328
  $ajax_filter_deps = array( 'jquery', 'jquery-deserialize' );
329
  $ajax_data = array(
@@ -341,25 +340,25 @@ class WP_Job_Manager {
341
  */
342
  $ajax_data['lang'] = apply_filters( 'wpjm_lang', null );
343
 
344
- $chosen_shortcodes = array( 'submit_job_form', 'job_dashboard', 'jobs' );
345
- $chosen_used_on_page = has_wpjm_shortcode( null, $chosen_shortcodes );
346
 
347
  /**
348
- * Filter the use of the chosen library.
349
- *
350
- * NOTE: See above. Before WP Job Manager 1.32.0 is released, `job_manager_enqueue_frontend_style` will be filtered to `true` by default.
351
- *
352
- * @since 1.19.0
353
- *
354
- * @param bool $chosen_used_on_page Defaults to only when there are known shortcodes on the page.
355
  */
356
- if ( apply_filters( 'job_manager_chosen_enabled', $chosen_used_on_page ) ) {
357
- wp_register_script( 'chosen', JOB_MANAGER_PLUGIN_URL . '/assets/js/jquery-chosen/chosen.jquery.min.js', array( 'jquery' ), '1.1.0', true );
358
- wp_register_script( 'wp-job-manager-term-multiselect', JOB_MANAGER_PLUGIN_URL . '/assets/js/term-multiselect.min.js', array( 'jquery', 'chosen' ), JOB_MANAGER_VERSION, true );
359
- wp_register_script( 'wp-job-manager-multiselect', JOB_MANAGER_PLUGIN_URL . '/assets/js/multiselect.min.js', array( 'jquery', 'chosen' ), JOB_MANAGER_VERSION, true );
360
- wp_enqueue_style( 'chosen', JOB_MANAGER_PLUGIN_URL . '/assets/css/chosen.css', array(), '1.1.0' );
361
- $ajax_filter_deps[] = 'chosen';
362
-
 
 
 
 
 
363
  wp_localize_script(
364
  'chosen', 'job_manager_chosen_multiselect_args',
365
  apply_filters(
@@ -368,6 +367,55 @@ class WP_Job_Manager {
368
  )
369
  )
370
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
371
  }
372
 
373
  if ( job_manager_user_can_upload_file_via_ajax() ) {
@@ -427,7 +475,21 @@ class WP_Job_Manager {
427
  * Filter whether to enqueue WPJM core's frontend scripts. By default, they will only be enqueued on WPJM related
428
  * pages.
429
  *
430
- * NOTE: See above. Before WP Job Manager 1.32.0 is released, `job_manager_enqueue_frontend_style` will be filtered to `true` by default.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
431
  *
432
  * @since 1.30.0
433
  *
3
  * Plugin Name: WP Job Manager
4
  * Plugin URI: https://wpjobmanager.com/
5
  * Description: Manage job listings from the WordPress admin panel, and allow users to post jobs directly to your site.
6
+ * Version: 1.32.0
7
  * Author: Automattic
8
  * Author URI: https://wpjobmanager.com/
9
  * Requires at least: 4.7.0
10
+ * Tested up to: 5.0
11
  * Text Domain: wp-job-manager
12
  * Domain Path: /languages/
13
  * License: GPL2+
63
  */
64
  public function __construct() {
65
  // Define constants.
66
+ define( 'JOB_MANAGER_VERSION', '1.32.0' );
67
  define( 'JOB_MANAGER_MINIMUM_WP_VERSION', '4.7.0' );
68
  define( 'JOB_MANAGER_PLUGIN_DIR', untrailingslashit( plugin_dir_path( __FILE__ ) ) );
69
  define( 'JOB_MANAGER_PLUGIN_URL', untrailingslashit( plugins_url( basename( plugin_dir_path( __FILE__ ) ), basename( __FILE__ ) ) ) );
77
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/class-wp-job-manager-api.php';
78
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/class-wp-job-manager-forms.php';
79
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/class-wp-job-manager-geocode.php';
80
+ include_once JOB_MANAGER_PLUGIN_DIR . '/includes/class-wp-job-manager-blocks.php';
81
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/class-wp-job-manager-cache-helper.php';
82
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/helper/class-wp-job-manager-helper.php';
83
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/abstracts/abstract-wp-job-manager-email.php';
85
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/class-wp-job-manager-email-notifications.php';
86
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/class-wp-job-manager-data-exporter.php';
87
 
88
+ /**
89
+ * This custom REST API implementation is deprecated and will be removed in 1.33.0.
90
+ *
91
+ * @see WP_Job_Manager::rest_api()
92
+ * @see https://github.com/Automattic/WP-Job-Manager/issues/1625
93
+ */
94
+ if ( defined( 'WPJM_REST_API_ENABLED' ) && WPJM_REST_API_ENABLED ) {
95
+ trigger_error( esc_html__( 'Constant `WPJM_REST_API_ENABLED` and custom REST API implementation is deprecated and will be removed in 1.33.0. Please use standard WP Core\'s implementation.', 'wp-job-manager' ) );
96
+ add_action( 'rest_api_init', array( $this, 'rest_api' ) );
97
+ }
98
 
99
  if ( is_admin() ) {
100
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/admin/class-wp-job-manager-admin.php';
198
  /**
199
  * Initialize our REST API.
200
  *
201
+ * NOTE: This custom, unsupported REST API implementation be removed in 1.33.0 and the constant `WPJM_REST_API_ENABLED`
202
+ * will have no effect.
203
+ *
204
+ * @see https://developer.wordpress.org/rest-api/
205
+ * @see https://github.com/Automattic/WP-Job-Manager/issues/1625
206
+ *
207
+ * @deprecated 1.32.0 Please use standard WP core REST API.
208
  * @return WP_Job_Manager_REST_API|WP_Error
209
  */
210
  public function rest_api() {
211
+ _deprecated_function(
212
+ __CLASS__ . ':' . __FUNCTION__ . '()',
213
+ '1.32.0',
214
+ esc_html__( 'Standard REST API implementation from WP core', 'wp-job-manager' )
215
+ );
216
  if ( null === $this->rest_api ) {
217
  include_once JOB_MANAGER_PLUGIN_DIR . '/includes/rest-api/class-wp-job-manager-rest-api.php';
218
  $this->rest_api = new WP_Job_Manager_REST_API( dirname( __FILE__ ) );
308
  wp_register_style( 'jquery-ui', '//code.jquery.com/ui/' . $jquery_version . '/themes/smoothness/jquery-ui.css', array(), $jquery_version );
309
  }
310
 
311
+ /**
312
+ * Registers select2 assets when needed.
313
+ */
314
+ public static function register_select2_assets() {
315
+ wp_register_script( 'select2', JOB_MANAGER_PLUGIN_URL . '/assets/js/select2/select2.full.min.js', array( 'jquery' ), '4.0.5' );
316
+ wp_register_style( 'select2', JOB_MANAGER_PLUGIN_URL . '/assets/js/select2/select2.min.css', array(), '4.0.5' );
317
+ }
318
+
319
  /**
320
  * Registers and enqueues scripts and CSS.
321
+ *
322
+ * Note: For enhanced select, 1.32.0 moved to Select2. Chosen is currently packaged but will be removed in an
323
+ * upcoming release.
324
  */
325
  public function frontend_scripts() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
326
  $ajax_url = WP_Job_Manager_Ajax::get_endpoint();
327
  $ajax_filter_deps = array( 'jquery', 'jquery-deserialize' );
328
  $ajax_data = array(
340
  */
341
  $ajax_data['lang'] = apply_filters( 'wpjm_lang', null );
342
 
343
+ $enhanced_select_shortcodes = array( 'submit_job_form', 'job_dashboard', 'jobs' );
344
+ $enhanced_select_used_on_page = has_wpjm_shortcode( null, $enhanced_select_shortcodes );
345
 
346
  /**
347
+ * Set the constant `JOB_MANAGER_DISABLE_CHOSEN_LEGACY_COMPAT` to true to test for future behavior once
348
+ * this legacy code is removed and `chosen` is no longer packaged with the plugin.
 
 
 
 
 
349
  */
350
+ if ( ! defined( 'JOB_MANAGER_DISABLE_CHOSEN_LEGACY_COMPAT' ) || ! JOB_MANAGER_DISABLE_CHOSEN_LEGACY_COMPAT ) {
351
+ if ( is_wpjm_taxonomy() || is_wpjm_job_listing() || is_wpjm_page() ) {
352
+ $enhanced_select_used_on_page = true;
353
+ }
354
+
355
+ // Register the script for dependencies that still require it.
356
+ if ( ! wp_script_is( 'chosen', 'registered' ) ) {
357
+ wp_register_script( 'chosen', JOB_MANAGER_PLUGIN_URL . '/assets/js/jquery-chosen/chosen.jquery.min.js', array( 'jquery' ), '1.1.0', true );
358
+ wp_register_style( 'chosen', JOB_MANAGER_PLUGIN_URL . '/assets/css/chosen.css', array(), '1.1.0' );
359
+ }
360
+
361
+ // Backwards compatibility for third-party themes/plugins while they transition to Select2.
362
  wp_localize_script(
363
  'chosen', 'job_manager_chosen_multiselect_args',
364
  apply_filters(
367
  )
368
  )
369
  );
370
+
371
+ /**
372
+ * Filter the use of the deprecated chosen library. Themes and plugins should migrate to Select2. This will be
373
+ * removed in an upcoming major release.
374
+ *
375
+ * @since 1.19.0
376
+ * @deprecated 1.32.0 Migrate to job_manager_select2_enabled and enable only on pages that need it.
377
+ *
378
+ * @param bool $chosen_used_on_page
379
+ */
380
+ if ( apply_filters( 'job_manager_chosen_enabled', false ) ) {
381
+ _deprecated_hook( 'job_manager_chosen_enabled', '1.32.0', 'job_manager_select2_enabled' );
382
+
383
+ // Assume if this filter returns true that the current page should have the multi-select scripts.
384
+ $enhanced_select_used_on_page = true;
385
+
386
+ wp_enqueue_script( 'chosen' );
387
+ wp_enqueue_style( 'chosen' );
388
+ }
389
+ }
390
+
391
+ /**
392
+ * Filter the use of the enhanced select.
393
+ *
394
+ * Note: Don't depend on `select2` being registered/enqueued in customizations.
395
+ *
396
+ * @since 1.32.0
397
+ *
398
+ * @param bool $enhanced_select_used_on_page Defaults to only when there are known shortcodes on the page.
399
+ */
400
+ if ( apply_filters( 'job_manager_enhanced_select_enabled', $enhanced_select_used_on_page ) ) {
401
+ self::register_select2_assets();
402
+ wp_register_script( 'wp-job-manager-term-multiselect', JOB_MANAGER_PLUGIN_URL . '/assets/js/term-multiselect.min.js', array( 'jquery', 'select2' ), JOB_MANAGER_VERSION, true );
403
+ wp_register_script( 'wp-job-manager-multiselect', JOB_MANAGER_PLUGIN_URL . '/assets/js/multiselect.min.js', array( 'jquery', 'select2' ), JOB_MANAGER_VERSION, true );
404
+ wp_enqueue_style( 'select2' );
405
+
406
+ $ajax_filter_deps[] = 'select2';
407
+
408
+ $select2_args = array();
409
+ if ( is_rtl() ) {
410
+ $select2_args['dir'] = 'rtl';
411
+ }
412
+
413
+ $select2_args['width'] = '100%';
414
+
415
+ wp_localize_script(
416
+ 'select2', 'job_manager_select2_args',
417
+ apply_filters( 'job_manager_select2_args', $select2_args )
418
+ );
419
  }
420
 
421
  if ( job_manager_user_can_upload_file_via_ajax() ) {
475
  * Filter whether to enqueue WPJM core's frontend scripts. By default, they will only be enqueued on WPJM related
476
  * pages.
477
  *
478
+ * If your theme or plugin depend on `frontend.css` from WPJM core, you can use the
479
+ * `job_manager_enqueue_frontend_style` filter.
480
+ *
481
+ * Example code for a custom shortcode that depends on the frontend style:
482
+ *
483
+ * add_filter( 'job_manager_enqueue_frontend_style', function( $frontend_used_on_page ) {
484
+ * global $post;
485
+ * if ( is_singular()
486
+ * && is_a( $post, 'WP_Post' )
487
+ * && has_shortcode( $post->post_content, 'resumes' )
488
+ * ) {
489
+ * $frontend_used_on_page = true;
490
+ * }
491
+ * return $frontend_used_on_page;
492
+ * } );
493
  *
494
  * @since 1.30.0
495
  *