WP SEO Structured Data Schema - Version 1.0

Version Description

  • Initial load of the plugin.
Download this release

Release Info

Developer kcseopro
Plugin Icon 128x128 WP SEO Structured Data Schema
Version 1.0
Comparing to
See all releases

Version 1.0

Files changed (61) hide show
  1. assets/css/admin.css +111 -0
  2. assets/css/select2.min.css +1 -0
  3. assets/images/help.png +0 -0
  4. assets/images/loading.gif +0 -0
  5. assets/images/wp-seo-schema.png +0 -0
  6. assets/js/admin.js +108 -0
  7. assets/js/i18n/ar.js +3 -0
  8. assets/js/i18n/az.js +3 -0
  9. assets/js/i18n/bg.js +3 -0
  10. assets/js/i18n/ca.js +3 -0
  11. assets/js/i18n/cs.js +3 -0
  12. assets/js/i18n/da.js +3 -0
  13. assets/js/i18n/de.js +3 -0
  14. assets/js/i18n/en.js +3 -0
  15. assets/js/i18n/es.js +3 -0
  16. assets/js/i18n/et.js +3 -0
  17. assets/js/i18n/eu.js +3 -0
  18. assets/js/i18n/fa.js +3 -0
  19. assets/js/i18n/fi.js +3 -0
  20. assets/js/i18n/fr.js +3 -0
  21. assets/js/i18n/gl.js +3 -0
  22. assets/js/i18n/he.js +3 -0
  23. assets/js/i18n/hi.js +3 -0
  24. assets/js/i18n/hr.js +3 -0
  25. assets/js/i18n/hu.js +3 -0
  26. assets/js/i18n/id.js +3 -0
  27. assets/js/i18n/is.js +3 -0
  28. assets/js/i18n/it.js +3 -0
  29. assets/js/i18n/ja.js +3 -0
  30. assets/js/i18n/ko.js +3 -0
  31. assets/js/i18n/lt.js +3 -0
  32. assets/js/i18n/lv.js +3 -0
  33. assets/js/i18n/mk.js +3 -0
  34. assets/js/i18n/ms.js +3 -0
  35. assets/js/i18n/nb.js +3 -0
  36. assets/js/i18n/nl.js +3 -0
  37. assets/js/i18n/pl.js +3 -0
  38. assets/js/i18n/pt-BR.js +3 -0
  39. assets/js/i18n/pt.js +3 -0
  40. assets/js/i18n/ro.js +3 -0
  41. assets/js/i18n/ru.js +3 -0
  42. assets/js/i18n/sk.js +3 -0
  43. assets/js/i18n/sr-Cyrl.js +3 -0
  44. assets/js/i18n/sr.js +3 -0
  45. assets/js/i18n/sv.js +3 -0
  46. assets/js/i18n/th.js +3 -0
  47. assets/js/i18n/tr.js +3 -0
  48. assets/js/i18n/uk.js +3 -0
  49. assets/js/i18n/vi.js +3 -0
  50. assets/js/i18n/zh-CN.js +3 -0
  51. assets/js/i18n/zh-TW.js +3 -0
  52. assets/js/select2.min.js +2 -0
  53. lib/classes/KcSeoHelper.php +18 -0
  54. lib/classes/KcSeoMetaData.php +108 -0
  55. lib/classes/KcSeoOutput.php +136 -0
  56. lib/classes/KcSeoSettings.php +85 -0
  57. lib/init.php +102 -0
  58. lib/models/KcSeoSchemaModel.php +1495 -0
  59. lib/views/settings.php +364 -0
  60. readme.txt +97 -0
  61. wp-seo-structured-data-schema.php +19 -0
assets/css/admin.css ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wseo_loading{
2
+ background: url('../images/loading.gif') no-repeat center center;
3
+ padding: 11px;
4
+ }
5
+ .field-container {
6
+ display: inline-block;
7
+ width: 100%;
8
+ }
9
+ .field-container label {
10
+ float: left;
11
+ width: 25%;
12
+ }
13
+ .field-container .field-content {
14
+ width: 75%;
15
+ float: right;
16
+ }
17
+ div#tabs-kcseo-container .field-container input{
18
+ width: 300px;
19
+ }
20
+ div#tabs-kcseo-container .field-container textarea{
21
+ width: 100%;
22
+ min-height: 80px;
23
+ }
24
+ div#tabs-kcseo-container .field-container input[type=number]{
25
+ width: 100px;
26
+ }
27
+ div#tabs-kcseo-container .field-container input.kcseo-date{
28
+ width: auto;
29
+ }
30
+ li.ui-tabs-active a:focus{
31
+ -webkit-box-shadow: none;
32
+ box-shadow: none;
33
+ }
34
+ #tabs-container {
35
+ margin-top: 20px;
36
+ }
37
+ .form-table th {
38
+ padding: 5px 10px 5px 0;
39
+ }
40
+ .form-table tr.person, .form-table tr.field_homepage{
41
+ display: none;
42
+ }
43
+ .sfield span.select2 {
44
+ margin-right: 10px;
45
+ }
46
+ .sfield {
47
+ margin-bottom: 10px;
48
+ }
49
+ .sfield input {
50
+ min-width: 350px;
51
+ }
52
+ span.dashicons.dashicons-trash.social-remove {
53
+ color: red;
54
+ margin: 0 5px;
55
+ cursor: pointer;
56
+ }
57
+ div#response {
58
+ padding: 10px;
59
+ font-size: 15px;
60
+ }
61
+ select#area_served {
62
+ min-width: 300px;
63
+ }
64
+
65
+ .form-table td {
66
+ padding: 5px 10px;
67
+ vert-align: top !important;
68
+ }
69
+ p.description.kco-telephone > span {
70
+ display: block;
71
+ color: red;
72
+ }
73
+ .field-container .field-label span {
74
+ margin-left: 10px;
75
+ color: red;
76
+ }
77
+ p.description .required {
78
+ color: red;
79
+ }
80
+ .schema-holder .ui-tabs .ui-tabs-nav .ui-tabs-anchor{
81
+ padding: .5em 0.6em;
82
+ font-size: 14px;
83
+ }
84
+
85
+ .side-tip span, .schema-tips span {
86
+ font-weight: bold;
87
+ }
88
+ .side-tip a, .schema-tips p a {
89
+ display: block;
90
+ }
91
+ .schema-tips {
92
+ margin-bottom: 20px;
93
+ }
94
+ .with-tooltip {
95
+ position: relative;
96
+ max-width: 460px;
97
+ }
98
+ .schema-tooltip-holder {
99
+ position: absolute;
100
+ top: 0;
101
+ right: 0;
102
+ }
103
+ .schema-tooltip-holder .hidden{
104
+ display: none;
105
+ }
106
+ .schema-tooltip{
107
+ width: 16px;
108
+ height: 16px;
109
+ display: inline-block;
110
+ background: url("../images/help.png") no-repeat center;
111
+ }
assets/css/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__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 #000 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/images/help.png ADDED
Binary file
assets/images/loading.gif ADDED
Binary file
assets/images/wp-seo-schema.png ADDED
Binary file
assets/js/admin.js ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($){
2
+ 'use strict';
3
+ $("#tabs-kcseo-container").tabs();
4
+ $("#tabs-container").tabs();
5
+ $('.kcseo-date').datepicker({
6
+ dateFormat : 'yy-mm-dd'
7
+ });
8
+
9
+ showHideWebUrl();
10
+ $('#homeonly').click(function () {
11
+ showHideWebUrl();
12
+ });
13
+ showHideType();
14
+ $("#site_type").change(function(){
15
+ showHideType();
16
+ });
17
+
18
+ $(".select2").select2({
19
+ placeholder: "Select an item"
20
+ });
21
+
22
+ $(".social-remove").on('click', function(){
23
+ $(this).parent('.sfield').slideUp('slow').remove();
24
+ });
25
+
26
+ $("#social-add").on('click', function(){
27
+ var bindElement = jQuery("#social-add");
28
+ var count = $("#social-field-holder .sfield").length;
29
+ var arg = 'id='+count;
30
+ AjaxCall( bindElement, 'newSocial', arg, function(data){
31
+ if(data.data){
32
+ console.log(data.data);
33
+ $("#social-field-holder").append(data.data);
34
+ }
35
+ });
36
+ });
37
+
38
+ $('.schema-tooltip').each(function() { // Notice the .each() loop, discussed below
39
+ $(this).qtip({
40
+ content: {
41
+ text: $(this).next('div') // Use the "div" element next to this for the content
42
+ },
43
+ hide: {
44
+ fixed: true,
45
+ delay: 300
46
+ }
47
+ });
48
+ });
49
+
50
+ })(jQuery);
51
+
52
+ function showHideWebUrl(){
53
+ if(jQuery('#homeonly').is(':checked')){
54
+ jQuery(".field_homepage").show();
55
+ }else{
56
+ jQuery(".field_homepage").hide();
57
+ }
58
+ }
59
+
60
+ function showHideType(){
61
+ var id = jQuery("#site_type option:selected").val();
62
+ if(id == "Person"){
63
+ jQuery(".form-table tr.person").show();
64
+ }else{
65
+ jQuery(".form-table tr.person").hide();
66
+ }
67
+ if(id == "Organization"){
68
+ jQuery(".form-table tr.business-info").hide();
69
+ }else{
70
+ jQuery(".form-table tr.business-info").show();
71
+ }
72
+ }
73
+ function wpSchemaSettings(e){
74
+
75
+ jQuery('#response').hide();
76
+ arg=jQuery( e ).serialize();
77
+ bindElement = jQuery('#tlpSaveButton');
78
+ AjaxCall( bindElement, 'kcSeoWpSchemaSettings', arg, function(data){
79
+ console.log(data);
80
+ jQuery('#response').addClass('updated');
81
+ if(!data.error){
82
+ jQuery('#response').removeClass('error');
83
+ jQuery('#response').show('slow').text(data.msg);
84
+ }else{
85
+ jQuery('#response').addClass('error');
86
+ jQuery('#response').show('slow').text(data.msg);
87
+ }
88
+ });
89
+
90
+ }
91
+
92
+ function AjaxCall( element, action, arg, handle){
93
+ if(action) data = "action=" + action;
94
+ if(arg) data = arg + "&action=" + action;
95
+ if(arg && !action) data = arg;
96
+ data = data ;
97
+
98
+ jQuery.ajax({
99
+ type: "post",
100
+ url: ajaxurl,
101
+ data: data,
102
+ beforeSend: function() { jQuery("<span class='wseo_loading'></span>").insertAfter(element); },
103
+ success: function( data ){
104
+ jQuery(".wseo_loading").remove();
105
+ handle(data);
106
+ }
107
+ });
108
+ }
assets/js/i18n/ar.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ar",[],function(){return{errorLoading:function(){return"لا يمكن تحميل النتائج"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="الرجاء حذف "+t+" عناصر";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="الرجاء إضافة "+t+" عناصر";return n},loadingMore:function(){return"جاري تحميل نتائج إضافية..."},maximumSelected:function(e){var t="تستطيع إختيار "+e.maximum+" بنود فقط";return t},noResults:function(){return"لم يتم العثور على أي نتائج"},searching:function(){return"جاري البحث…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/az.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/az",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return t+" simvol silin"},inputTooShort:function(e){var t=e.minimum-e.input.length;return t+" simvol daxil edin"},loadingMore:function(){return"Daha çox nəticə yüklənir…"},maximumSelected:function(e){return"Sadəcə "+e.maximum+" element seçə bilərsiniz"},noResults:function(){return"Nəticə tapılmadı"},searching:function(){return"Axtarılır…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/bg.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/bg",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Моля въведете с "+t+" по-малко символ";return t>1&&(n+="a"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Моля въведете още "+t+" символ";return t>1&&(n+="a"),n},loadingMore:function(){return"Зареждат се още…"},maximumSelected:function(e){var t="Можете да направите до "+e.maximum+" ";return e.maximum>1?t+="избора":t+="избор",t},noResults:function(){return"Няма намерени съвпадения"},searching:function(){return"Търсене…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/ca.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ca",[],function(){return{errorLoading:function(){return"La càrrega ha fallat"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Si us plau, elimina "+t+" car";return t==1?n+="àcter":n+="àcters",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Si us plau, introdueix "+t+" car";return t==1?n+="àcter":n+="àcters",n},loadingMore:function(){return"Carregant més resultats…"},maximumSelected:function(e){var t="Només es pot seleccionar "+e.maximum+" element";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No s'han trobat resultats"},searching:function(){return"Cercant…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/cs.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/cs",[],function(){function e(e,t){switch(e){case 2:return t?"dva":"dvě";case 3:return"tři";case 4:return"čtyři"}return""}return{errorLoading:function(){return"Výsledky nemohly být načteny."},inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím zadejte o jeden znak méně":n<=4?"Prosím zadejte o "+e(n,!0)+" znaky méně":"Prosím zadejte o "+n+" znaků méně"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím zadejte ještě jeden znak":n<=4?"Prosím zadejte ještě další "+e(n,!0)+" znaky":"Prosím zadejte ještě dalších "+n+" znaků"},loadingMore:function(){return"Načítají se další výsledky…"},maximumSelected:function(t){var n=t.maximum;return n==1?"Můžete zvolit jen jednu položku":n<=4?"Můžete zvolit maximálně "+e(n,!1)+" položky":"Můžete zvolit maximálně "+n+" položek"},noResults:function(){return"Nenalezeny žádné položky"},searching:function(){return"Vyhledávání…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/da.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/da",[],function(){return{errorLoading:function(){return"Resultaterne kunne ikke indlæses."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Angiv venligst "+t+" tegn mindre";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Angiv venligst "+t+" tegn mere";return n},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var t="Du kan kun vælge "+e.maximum+" emne";return e.maximum!=1&&(t+="r"),t},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/de.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/de",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Bitte "+t+" Zeichen weniger eingeben"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Bitte "+t+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var t="Sie können nur "+e.maximum+" Eintr";return e.maximum===1?t+="ag":t+="äge",t+=" auswählen",t},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/en.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Please delete "+t+" character";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Please enter "+t+" or more characters";return n},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var t="You can only select "+e.maximum+" item";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/es.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/es",[],function(){return{errorLoading:function(){return"La carga falló"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor, elimine "+t+" car";return t==1?n+="ácter":n+="acteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Por favor, introduzca "+t+" car";return t==1?n+="ácter":n+="acteres",n},loadingMore:function(){return"Cargando más resultados…"},maximumSelected:function(e){var t="Sólo puede seleccionar "+e.maximum+" elemento";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No se encontraron resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/et.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/et",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" vähem",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" rohkem",n},loadingMore:function(){return"Laen tulemusi…"},maximumSelected:function(e){var t="Saad vaid "+e.maximum+" tulemus";return e.maximum==1?t+="e":t+="t",t+=" valida",t},noResults:function(){return"Tulemused puuduvad"},searching:function(){return"Otsin…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/eu.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/eu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gutxiago",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gehiago",n},loadingMore:function(){return"Emaitza gehiago kargatzen…"},maximumSelected:function(e){return e.maximum===1?"Elementu bakarra hauta dezakezu":e.maximum+" elementu hauta ditzakezu soilik"},noResults:function(){return"Ez da bat datorrenik aurkitu"},searching:function(){return"Bilatzen…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/fa.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fa",[],function(){return{errorLoading:function(){return"امکان بارگذاری نتایج وجود ندارد."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="لطفاً "+t+" کاراکتر را حذف نمایید";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="لطفاً تعداد "+t+" کاراکتر یا بیشتر وارد نمایید";return n},loadingMore:function(){return"در حال بارگذاری نتایج بیشتر..."},maximumSelected:function(e){var t="شما تنها می‌توانید "+e.maximum+" آیتم را انتخاب نمایید";return t},noResults:function(){return"هیچ نتیجه‌ای یافت نشد"},searching:function(){return"در حال جستجو..."}}}),{define:e.define,require:e.require}})();
assets/js/i18n/fi.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Ole hyvä ja anna "+t+" merkkiä vähemmän"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Ole hyvä ja anna "+t+" merkkiä lisää"},loadingMore:function(){return"Ladataan lisää tuloksia…"},maximumSelected:function(e){return"Voit valita ainoastaan "+e.maximum+" kpl"},noResults:function(){return"Ei tuloksia"},searching:function(){}}}),{define:e.define,require:e.require}})();
assets/js/i18n/fr.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fr",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Supprimez "+t+" caractère";return t!==1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Saisissez "+t+" caractère";return t!==1&&(n+="s"),n},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){var t="Vous pouvez seulement sélectionner "+e.maximum+" élément";return e.maximum!==1&&(t+="s"),t},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/gl.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/gl",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Elimine ";return t===1?n+="un carácter":n+=t+" caracteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Engada ";return t===1?n+="un carácter":n+=t+" caracteres",n},loadingMore:function(){return"Cargando máis resultados…"},maximumSelected:function(e){var t="Só pode ";return e.maximum===1?t+="un elemento":t+=e.maximum+" elementos",t},noResults:function(){return"Non se atoparon resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/he.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/he",[],function(){return{errorLoading:function(){return"שגיאה בטעינת התוצאות"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="נא למחוק ";return t===1?n+="תו אחד":n+=t+" תווים",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="נא להכניס ";return t===1?n+="תו אחד":n+=t+" תווים",n+=" או יותר",n},loadingMore:function(){return"טוען תוצאות נוספות…"},maximumSelected:function(e){var t="באפשרותך לבחור עד ";return e.maximum===1?t+="פריט אחד":t+=e.maximum+" פריטים",t},noResults:function(){return"לא נמצאו תוצאות"},searching:function(){return"מחפש…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/hi.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hi",[],function(){return{errorLoading:function(){return"परिणामों को लोड नहीं किया जा सका।"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" अक्षर को हटा दें";return t>1&&(n=t+" अक्षरों को हटा दें "),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="कृपया "+t+" या अधिक अक्षर दर्ज करें";return n},loadingMore:function(){return"अधिक परिणाम लोड हो रहे है..."},maximumSelected:function(e){var t="आप केवल "+e.maximum+" आइटम का चयन कर सकते हैं";return t},noResults:function(){return"कोई परिणाम नहीं मिला"},searching:function(){return"खोज रहा है..."}}}),{define:e.define,require:e.require}})();
assets/js/i18n/hr.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hr",[],function(){function e(e){var t=" "+e+" znak";return e%10<5&&e%10>0&&(e%100<5||e%100>19)?e%10>1&&(t+="a"):t+="ova",t}return{errorLoading:function(){return"Preuzimanje nije uspjelo."},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Unesite "+e(n)},inputTooShort:function(t){var n=t.minimum-t.input.length;return"Unesite još "+e(n)},loadingMore:function(){return"Učitavanje rezultata…"},maximumSelected:function(e){return"Maksimalan broj odabranih stavki je "+e.maximum},noResults:function(){return"Nema rezultata"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/hu.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Túl hosszú. "+t+" karakterrel több, mint kellene."},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Túl rövid. Még "+t+" karakter hiányzik."},loadingMore:function(){return"Töltés…"},maximumSelected:function(e){return"Csak "+e.maximum+" elemet lehet kiválasztani."},noResults:function(){return"Nincs találat."},searching:function(){return"Keresés…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/id.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/id",[],function(){return{errorLoading:function(){return"Data tidak boleh diambil."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Hapuskan "+t+" huruf"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Masukkan "+t+" huruf lagi"},loadingMore:function(){return"Mengambil data…"},maximumSelected:function(e){return"Anda hanya dapat memilih "+e.maximum+" pilihan"},noResults:function(){return"Tidak ada data yang sesuai"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/is.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/is",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vinsamlegast styttið texta um "+t+" staf";return t<=1?n:n+"i"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vinsamlegast skrifið "+t+" staf";return t>1&&(n+="i"),n+=" í viðbót",n},loadingMore:function(){return"Sæki fleiri niðurstöður…"},maximumSelected:function(e){return"Þú getur aðeins valið "+e.maximum+" atriði"},noResults:function(){return"Ekkert fannst"},searching:function(){return"Leita…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/it.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/it",[],function(){return{errorLoading:function(){return"I risultati non possono essere caricati."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Per favore cancella "+t+" caratter";return t!==1?n+="i":n+="e",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Per favore inserisci "+t+" o più caratteri";return n},loadingMore:function(){return"Caricando più risultati…"},maximumSelected:function(e){var t="Puoi selezionare solo "+e.maximum+" element";return e.maximum!==1?t+="i":t+="o",t},noResults:function(){return"Nessun risultato trovato"},searching:function(){return"Sto cercando…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/ja.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ja",[],function(){return{errorLoading:function(){return"結果が読み込まれませんでした"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" 文字を削除してください";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="少なくとも "+t+" 文字を入力してください";return n},loadingMore:function(){return"読み込み中…"},maximumSelected:function(e){var t=e.maximum+" 件しか選択できません";return t},noResults:function(){return"対象が見つかりません"},searching:function(){return"検索しています…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/ko.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="너무 깁니다. "+t+" 글자 지워주세요.";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="너무 짧습니다. "+t+" 글자 더 입력해주세요.";return n},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(e){var t="최대 "+e.maximum+"개까지만 선택 가능합니다.";return t},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/lt.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lt",[],function(){function e(e,t,n,r){return e%100>9&&e%100<21||e%10===0?e%10>1?n:r:t}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Pašalinkite "+n+" simbol";return r+=e(n,"ių","ius","į"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Įrašykite dar "+n+" simbol";return r+=e(n,"ių","ius","į"),r},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(t){var n="Jūs galite pasirinkti tik "+t.maximum+" element";return n+=e(t.maximum,"ų","us","ą"),n},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/lv.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lv",[],function(){function e(e,t,n,r){return e===11?t:e%10===1?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Lūdzu ievadiet par "+n;return r+=" simbol"+e(n,"iem","u","iem"),r+" mazāk"},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Lūdzu ievadiet vēl "+n;return r+=" simbol"+e(n,"us","u","us"),r},loadingMore:function(){return"Datu ielāde…"},maximumSelected:function(t){var n="Jūs varat izvēlēties ne vairāk kā "+t.maximum;return n+=" element"+e(t.maximum,"us","u","us"),n},noResults:function(){return"Sakritību nav"},searching:function(){return"Meklēšana…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/mk.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/mk",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Ве молиме внесете "+e.maximum+" помалку карактер";return e.maximum!==1&&(n+="и"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Ве молиме внесете уште "+e.maximum+" карактер";return e.maximum!==1&&(n+="и"),n},loadingMore:function(){return"Вчитување резултати…"},maximumSelected:function(e){var t="Можете да изберете само "+e.maximum+" ставк";return e.maximum===1?t+="а":t+="и",t},noResults:function(){return"Нема пронајдено совпаѓања"},searching:function(){return"Пребарување…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/ms.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ms",[],function(){return{errorLoading:function(){return"Keputusan tidak berjaya dimuatkan."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Sila hapuskan "+t+" aksara"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Sila masukkan "+t+" atau lebih aksara"},loadingMore:function(){return"Sedang memuatkan keputusan…"},maximumSelected:function(e){return"Anda hanya boleh memilih "+e.maximum+" pilihan"},noResults:function(){return"Tiada padanan yang ditemui"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/nb.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nb",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Vennligst fjern "+t+" tegn"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vennligst skriv inn ";return t>1?n+=" flere tegn":n+=" tegn til",n},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/nl.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nl",[],function(){return{errorLoading:function(){return"De resultaten konden niet worden geladen."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Gelieve "+t+" karakters te verwijderen";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Gelieve "+t+" of meer karakters in te voeren";return n},loadingMore:function(){return"Meer resultaten laden…"},maximumSelected:function(e){var t=e.maximum==1?"kan":"kunnen",n="Er "+t+" maar "+e.maximum+" item";return e.maximum!=1&&(n+="s"),n+=" worden geselecteerd",n},noResults:function(){return"Geen resultaten gevonden…"},searching:function(){return"Zoeken…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/pl.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pl",[],function(){var e=["znak","znaki","znaków"],t=["element","elementy","elementów"],n=function(t,n){if(t===1)return n[0];if(t>1&&t<=4)return n[1];if(t>=5)return n[2]};return{errorLoading:function(){return"Nie można załadować wyników."},inputTooLong:function(t){var r=t.input.length-t.maximum;return"Usuń "+r+" "+n(r,e)},inputTooShort:function(t){var r=t.minimum-t.input.length;return"Podaj przynajmniej "+r+" "+n(r,e)},loadingMore:function(){return"Trwa ładowanie…"},maximumSelected:function(e){return"Możesz zaznaczyć tylko "+e.maximum+" "+n(e.maximum,t)},noResults:function(){return"Brak wyników"},searching:function(){return"Trwa wyszukiwanie…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/pt-BR.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt-BR",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Apague "+t+" caracter";return t!=1&&(n+="es"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Digite "+t+" ou mais caracteres";return n},loadingMore:function(){return"Carregando mais resultados…"},maximumSelected:function(e){var t="Você só pode selecionar "+e.maximum+" ite";return e.maximum==1?t+="m":t+="ns",t},noResults:function(){return"Nenhum resultado encontrado"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/pt.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor apague "+t+" ";return n+=t!=1?"caracteres":"carácter",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Introduza "+t+" ou mais caracteres";return n},loadingMore:function(){return"A carregar mais resultados…"},maximumSelected:function(e){var t="Apenas pode seleccionar "+e.maximum+" ";return t+=e.maximum!=1?"itens":"item",t},noResults:function(){return"Sem resultados"},searching:function(){return"A procurar…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/ro.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ro",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vă rugăm să introduceți mai puțin de "+t;return n+=" caracter",n!==1&&(n+="e"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vă rugăm să introduceți incă "+t;return n+=" caracter",n!==1&&(n+="e"),n},loadingMore:function(){return"Se încarcă…"},maximumSelected:function(e){var t="Aveți voie să selectați cel mult "+e.maximum;return t+=" element",t!==1&&(t+="e"),t},noResults:function(){return"Nu a fost găsit nimic"},searching:function(){return"Căutare…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/ru.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ru",[],function(){function e(e,t,n,r){return e%10<5&&e%10>0&&e%100<5||e%100>20?e%10>1?n:t:r}return{errorLoading:function(){return"Невозможно загрузить результаты"},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Пожалуйста, введите на "+n+" символ";return r+=e(n,"","a","ов"),r+=" меньше",r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Пожалуйста, введите еще хотя бы "+n+" символ";return r+=e(n,"","a","ов"),r},loadingMore:function(){return"Загрузка данных…"},maximumSelected:function(t){var n="Вы можете выбрать не более "+t.maximum+" элемент";return n+=e(t.maximum,"","a","ов"),n},noResults:function(){return"Совпадений не найдено"},searching:function(){return"Поиск…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/sk.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sk",[],function(){var e={2:function(e){return e?"dva":"dve"},3:function(){return"tri"},4:function(){return"štyri"}};return{inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím, zadajte o jeden znak menej":n>=2&&n<=4?"Prosím, zadajte o "+e[n](!0)+" znaky menej":"Prosím, zadajte o "+n+" znakov menej"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím, zadajte ešte jeden znak":n<=4?"Prosím, zadajte ešte ďalšie "+e[n](!0)+" znaky":"Prosím, zadajte ešte ďalších "+n+" znakov"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(t){return t.maximum==1?"Môžete zvoliť len jednu položku":t.maximum>=2&&t.maximum<=4?"Môžete zvoliť najviac "+e[t.maximum](!1)+" položky":"Môžete zvoliť najviac "+t.maximum+" položiek"},noResults:function(){return"Nenašli sa žiadne položky"},searching:function(){return"Vyhľadávanie…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/sr-Cyrl.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sr-Cyrl",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Преузимање није успело."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Обришите "+n+" симбол";return r+=e(n,"","а","а"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Укуцајте бар још "+n+" симбол";return r+=e(n,"","а","а"),r},loadingMore:function(){return"Преузимање још резултата…"},maximumSelected:function(t){var n="Можете изабрати само "+t.maximum+" ставк";return n+=e(t.maximum,"у","е","и"),n},noResults:function(){return"Ништа није пронађено"},searching:function(){return"Претрага…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/sr.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sr",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Preuzimanje nije uspelo."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Obrišite "+n+" simbol";return r+=e(n,"","a","a"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Ukucajte bar još "+n+" simbol";return r+=e(n,"","a","a"),r},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(t){var n="Možete izabrati samo "+t.maximum+" stavk";return n+=e(t.maximum,"u","e","i"),n},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/sv.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sv",[],function(){return{errorLoading:function(){return"Resultat kunde inte laddas."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vänligen sudda ut "+t+" tecken";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vänligen skriv in "+t+" eller fler tecken";return n},loadingMore:function(){return"Laddar fler resultat…"},maximumSelected:function(e){var t="Du kan max välja "+e.maximum+" element";return t},noResults:function(){return"Inga träffar"},searching:function(){return"Söker…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/th.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/th",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="โปรดลบออก "+t+" ตัวอักษร";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="โปรดพิมพ์เพิ่มอีก "+t+" ตัวอักษร";return n},loadingMore:function(){return"กำลังค้นข้อมูลเพิ่ม…"},maximumSelected:function(e){var t="คุณสามารถเลือกได้ไม่เกิน "+e.maximum+" รายการ";return t},noResults:function(){return"ม่พบข้อมูล"},searching:function(){return"กำลังค้นข้อมูล…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/tr.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/tr",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" karakter daha girmelisiniz";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="En az "+t+" karakter daha girmelisiniz";return n},loadingMore:function(){return"Daha fazla…"},maximumSelected:function(e){var t="Sadece "+e.maximum+" seçim yapabilirsiniz";return t},noResults:function(){return"Sonuç bulunamadı"},searching:function(){return"Aranıyor…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/uk.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/uk",[],function(){function e(e,t,n,r){return e%100>10&&e%100<15?r:e%10===1?t:e%10>1&&e%10<5?n:r}return{errorLoading:function(){return"Неможливо завантажити результати"},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Будь ласка, видаліть "+n+" "+e(t.maximum,"літеру","літери","літер")},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Будь ласка, введіть "+t+" або більше літер"},loadingMore:function(){return"Завантаження інших результатів…"},maximumSelected:function(t){return"Ви можете вибрати лише "+t.maximum+" "+e(t.maximum,"пункт","пункти","пунктів")},noResults:function(){return"Нічого не знайдено"},searching:function(){return"Пошук…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/vi.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/vi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vui lòng nhập ít hơn "+t+" ký tự";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vui lòng nhập nhiều hơn "+t+' ký tự"';return n},loadingMore:function(){return"Đang lấy thêm kết quả…"},maximumSelected:function(e){var t="Chỉ có thể chọn được "+e.maximum+" lựa chọn";return t},noResults:function(){return"Không tìm thấy kết quả"},searching:function(){return"Đang tìm…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/zh-CN.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="请删除"+t+"个字符";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="请再输入至少"+t+"个字符";return n},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(e){var t="最多只能选择"+e.maximum+"个项目";return t},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"}}}),{define:e.define,require:e.require}})();
assets/js/i18n/zh-TW.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-TW",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="請刪掉"+t+"個字元";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="請再輸入"+t+"個字元";return n},loadingMore:function(){return"載入中…"},maximumSelected:function(e){var t="你只能選擇最多"+e.maximum+"項";return t},noResults:function(){return"沒有找到相符的項目"},searching:function(){return"搜尋中…"}}}),{define:e.define,require:e.require}})();
assets/js/select2.min.js ADDED
@@ -0,0 +1,2 @@
 
 
1
+ /*! Select2 4.0.1-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):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 u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(n=n.slice(0,n.length-1),a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.concat(a),k=0;k<a.length;k+=1)if(m=a[k],"."===m)a.splice(k,1),k-=1;else if(".."===m){if(1===k&&(".."===a[2]||".."===a[0]))break;k>0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[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(){return n.apply(b,v.call(arguments,0).concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var c=r[a];delete r[a],t[a]=!0,m.apply(b,c)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[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 function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,c,d,f){var h,k,l,m,n,s,u=[],v=typeof d;if(f=f||a,"undefined"===v||"function"===v){for(c=!c.length&&d.length?["require","exports","module"]:c,n=0;n<c.length;n+=1)if(m=o(c[n],f),k=m.f,"require"===k)u[n]=p.require(a);else if("exports"===k)u[n]=p.exports(a),s=!0;else if("module"===k)h=u[n]=p.module(a);else if(e(q,k)||e(r,k)||e(t,k))u[n]=j(k);else{if(!m.p)throw new Error(a+" missing "+k);m.p.load(m.n,g(f,!0),i(k),{}),u[n]=q[k]}l=d?d.apply(q[a],u):void 0,a&&(h&&h.exports!==b&&h.exports!==q[a]?q[a]=h.exports:l===b&&s||(q[a]=l))}else a&&(q[a]=d)},a=c=n=function(a,c,d,e,f){if("string"==typeof a)return p[a]?p[a](c):j(o(a,c).f);if(!a.splice){if(s=a,s.deps&&n(s.deps,s.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?m(b,a,c,d):setTimeout(function(){m(b,a,c,d)},4),n},n.config=function(a){return n(a)},a._defined=q,d=function(a,b,c){b.splice||(c=b,b=[]),e(q,a)||e(r,a)||(r[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){var e=b[d];"function"==typeof e&&"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(){var a=Array.prototype.unshift;return a.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;this.listeners=this.listeners||{},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;d>c;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;a>c;c++){var d=Math.floor(36*Math.random());b+=d.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?!0:d.innerHeight()<c.scrollHeight||d.innerWidth()<c.scrollWidth:!1},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){var c=b.find(".select2-results");c.append(a)},c.prototype.sort=function(a){var b=this.options.get("sorter");return b(a)},c.prototype.setClasses=function(){var b=this;this.data.current(function(c){var d=a.map(c,function(a){return a.id.toString()}),e=b.$results.find(".select2-results__option[aria-selected]");e.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")});var f=e.filter("[aria-selected=true]");f.length>0?f.first().trigger("mouseenter"):e.first().trigger("mouseenter")})},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()}),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()}),b.on("unselect",function(){b.isOpen()&&d.setClasses()}),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):0>h-g&&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-d.$results.scrollTop()+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");return"true"===c.attr("aria-selected")?void(d.options.get("multiple")?d.trigger("unselect",{originalEvent:b,data:e}):d.trigger("close",{})):void 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(){var a=this.$results.find(".select2-results__option--highlighted");return a},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),2>=c?this.$results.scrollTop(0):(g>this.$results.outerHeight()||0>g)&&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(){var a={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};return a}),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+"-container",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"),e=a(".select2.select2-container--open");e.each(function(){var b=a(this);if(this!=d[0]){var c=b.data("element");c.select2("close")}})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){var c=b.find(".selection");c.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("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"),d=this.options.get("escapeMarkup");return d(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"),d=this.options.get("escapeMarkup");return d(c(a,b))},d.prototype.selectionContainer=function(){var b=a('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">&times;</span></li>');return b},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,d=b.length>1;if(d||c)return a.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(e)},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="off" 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){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}});var f=document.documentMode,g=f&&11>=f;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){return g?void e.$selection.off("input.search input.searchcheck"):void 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{var b=this.$search.val().length+1;a=.75*b+"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(){var 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","Ⓓ":"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","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};return a}),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),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},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"))return a.selected=!1,c(a.element).is("option")?(a.element.selected=!1,void this.$element.trigger("change")):void this.current(function(d){
2
+ 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,f=this.$element.children();f.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),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(b=c.data(a[0],"data"),null!=b)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){var c=this.options.get("matcher");return c(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,{},l,j),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(){});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&&""!==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");if(void 0!==f&&(this.createTag=f),b.call(this,c,d),a.isArray(e))for(var g=0;g<e.length;g++){var h=e[g],i=this._normalizeItem(h),j=this.option(i);this.$element.append(j)}}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),k=i.text===b.term;if(k||j)return f?!1:(a.data=g,void c(a))}if(f)return!0;var l=e.createTag(b);if(null!=l){var m=e.option(l);m.attr("data-select2-tag",!0),e.addOptions([m]),e.insertTag(g,l)}a.results=g,c(a)}var e=this;return this._removeOldTags(),null==b.term||null!=b.page?void a.call(this,b,c):void 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){var c=(this._lastTag,this.$element.find("option[data-select2-tag]"));c.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(a,b,c){function d(a){e.trigger("select",{data:a})}var e=this;b.term=b.term||"";var f=this.tokenizer(b,this.options,d);f.term!==b.term&&(this.$search.length&&(this.$search.val(f.term),this.$search.focus()),b.term=f.term),a.call(this,b,c)},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){return b.term=b.term||"",b.term.length<this.minimumInputLength?void this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:b.term,params:b}}):void 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){return b.term=b.term||"",this.maximumInputLength>0&&b.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):void 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;return d.maximumSelectionLength>0&&f>=d.maximumSelectionLength?void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}}):void 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="off" 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("results:all",function(a){if(null==a.query.term||""===a.query.term){var b=e.showSearch(a);b?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){var c=e.$results.offset().top+e.$results.outerHeight(!1),d=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1);c+50>=d&&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(a,b,c){this.$dropdownParent=c.get("dropdownParent")||document.body,a.call(this,b,c)}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,h=this.$container.parents().filter(b.hasScroll);h.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.position(),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};c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.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.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?!1: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(){d._handleSelectOnClose()})},a.prototype._handleSelectOnClose=function(){var a=this.getHighlightedResults();a.length<1||this.trigger("select",{data:a.data("data")})},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",{})},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){var b=a.minimum-a.input.length,c="Please enter "+b+" or more characters";return c},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()}D.prototype.apply=function(l){if(l=a.extend({},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(O){try{M=this.defaults.amdLanguageBase+M,N=k.loadPath(M)}catch(P){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 Q=k.loadPath(this.defaults.amdLanguageBase+"en"),R=new k(l.language);R.extend(Q),l.translations=R}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--){var h=e.children[g],i=c(d,h);null==i&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var j=b(e.text).toUpperCase(),k=b(d.term).toUpperCase();return j.indexOf(k)>-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)};var E=new D;return E}),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="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 0>=e?"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;i>h;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._sync=c.bind(this._syncAttributes,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._sync);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._sync)}),this._observer.observe(this.$element[0],{attributes:!0,subtree:!1})):this.$element[0].addEventListener&&this.$element[0].addEventListener("DOMAttrModified",b._sync,!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.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._sync),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&this.$element[0].removeEventListener("DOMAttrModified",this._sync,!1),this._sync=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("jquery.select2",["jquery","require","./select2/core","./select2/defaults"],function(a,b,c,d){if(b("jquery.mousewheel"),null==a.fn.select2){var e=["open","close","destroy"];a.fn.select2=function(b){if(b=b||{},"object"==typeof b)return this.each(function(){var d=a.extend({},b,!0);new c(a(this),d)}),this;if("string"==typeof b){var d;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.");var e=Array.prototype.slice.call(arguments,1);d=c[b].apply(c,e)}),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}),b.define("jquery.mousewheel",["jquery"],function(a){return a}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c});
lib/classes/KcSeoHelper.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if(!class_exists('KcSeoSettings')):
4
+
5
+ class KcSeoHelper
6
+ {
7
+ function verifyNonce( ){
8
+ $nonce = @$_REQUEST['_kcseo_nonce'];
9
+ if( !wp_verify_nonce( $nonce, $this->nonceText() ) ) return false;
10
+ return true;
11
+ }
12
+
13
+ function nonceText(){
14
+ return "kcseo_nonce_secret_text";
15
+ }
16
+ }
17
+
18
+ endif;
lib/classes/KcSeoMetaData.php ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if(!class_exists('KcSeoMetaData')):
4
+
5
+ class KcSeoMetaData
6
+ {
7
+ private $postType;
8
+ function __construct()
9
+ {
10
+ $this->postType = get_post_types();
11
+ add_action( 'add_meta_boxes', array($this, 'KcSeo_schema_meta_box'));
12
+ add_action( 'save_post', array($this, 'save_KcSeo_schema_data'),10, 3);
13
+ add_action('admin_print_scripts-post-new.php', array($this, 'kcSeo_wp_schema_admin_script'), 11);
14
+ add_action('admin_print_scripts-post.php', array($this, 'kcSeo_wp_schema_admin_script'), 11);
15
+ }
16
+
17
+ function KcSeo_schema_meta_box(){
18
+
19
+ foreach($this->postType as $postType){
20
+ add_meta_box(
21
+ 'kcseo-wordpres-seo-structured-data-schema-meta-box',
22
+ __('WP SEO Structured Data Schema by <a href="http://kcseopro.com/">KCSEOPro.com</a>', KCSEO_WP_SCHEMA_SLUG),
23
+ array($this,'meta_box_wp_schema'),
24
+ $postType,
25
+ 'normal',
26
+ 'high'
27
+ );
28
+ }
29
+
30
+ }
31
+
32
+ function meta_box_wp_schema($post){
33
+
34
+ global $KcSeoWPSchema;
35
+ wp_nonce_field( $KcSeoWPSchema->nonceText(), '_kcseo_nonce' );
36
+ $schemas = new KcSeoSchemaModel;
37
+ $html = null;
38
+ $html .="<div class='schema-tips'>";
39
+ $html .= "<p><span>Tip:</span> For more detailed information on how to configure this plugin, please visit: <a href='http://kcseopro.com/wordpress-seo-structured-data-schema-plugin/'>http://kcseopro.com/wordpress-seo-structured-data-schema-plugin/</a></p>";
40
+ $html .= "<p><span>Tip:</span> Once you save these structured data schema settings, validate this page url here: <a href='https://developers.google.com/structured-data/testing-tool/'>https://developers.google.com/structured-data/testing-tool/</a></p>";
41
+ $html .="</div>";
42
+ $html .= "<div class='schema-holder'>";
43
+ $html .= '<div id="tabs-kcseo-container">';
44
+ $htmlMenu = null;
45
+ $htmlCont = null;
46
+ $htmlMenu .= "<ul class='tabs-menu'>";
47
+ foreach($schemas->schemaTypes() as $schemaID => $schema){
48
+ $tabId = $KcSeoWPSchema->KcSeoPrefix.$schemaID;
49
+ $htmlMenu .= '<li><a href="#'.$tabId.'">'.$schema['title'].'</a></li>';
50
+ $htmlCont .="<div id='{$tabId}'>";
51
+ foreach($schema['fields'] as $fieldId => $data){
52
+ $data['schemaId'] = $schemaID;
53
+ $htmlCont .= $schemas->get_field($fieldId,$data, $post->ID);
54
+ }
55
+ $htmlCont .="</div>";
56
+ }
57
+ $htmlMenu .="</ul>";
58
+ $html .= $htmlMenu .$htmlCont;
59
+ $html .= "</div>";
60
+ echo $html;
61
+ }
62
+
63
+ function save_KcSeo_schema_data($post_id,$post, $update){
64
+ if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
65
+ global $KcSeoWPSchema;
66
+ if (!wp_verify_nonce(@$_REQUEST['_kcseo_nonce'], $KcSeoWPSchema->nonceText())) return;
67
+
68
+ // Check permissions
69
+ if (@$_GET['post_type']) {
70
+ if (!current_user_can('edit_' . @$_GET['post_type'], $post_id)) return;
71
+ }
72
+
73
+ if (!in_array(@$post->post_type,$this->postType) ) return;
74
+
75
+ $meta = array();
76
+ $schemaModel = new KcSeoSchemaModel;
77
+ foreach($schemaModel->schemaTypes() as $schemaID => $schema){
78
+ $schemaMetaId = $KcSeoWPSchema->KcSeoPrefix.$schemaID;
79
+ $data = array();
80
+ foreach($schema['fields'] as $fieldId => $fieldData){
81
+ $value = (isset($_REQUEST[$schemaMetaId][$fieldId]) ? ($_REQUEST[$schemaMetaId][$fieldId] ? sanitize_text_field($_REQUEST[$schemaMetaId][$fieldId]) : null) : null);
82
+ if($value){
83
+ $data[$fieldId] = $value;
84
+ }
85
+ }
86
+ if(!empty($data)){
87
+ $meta[$schemaMetaId] = serialize($data);
88
+ }
89
+ }
90
+
91
+ foreach($meta as $mKey => $mValue){
92
+ update_post_meta($post_id, $mKey, $mValue);
93
+ }
94
+ }
95
+
96
+ function kcSeo_wp_schema_admin_script(){
97
+ global $KcSeoWPSchema;
98
+ wp_enqueue_style( 'jquery-ui-datepicker' );
99
+ wp_enqueue_style( 'kcseo-jquery-ui-css', 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css');
100
+ wp_enqueue_style( 'kcseo-select2-css', $KcSeoWPSchema->assetsUrl .'css/select2.min.css');
101
+ wp_enqueue_style( 'kcseo-admin-css', $KcSeoWPSchema->assetsUrl .'css/admin.css');
102
+ wp_enqueue_script( 'kcseo-wordpres-seo-structured-data-schema-select2-js', $KcSeoWPSchema->assetsUrl . 'js/select2.min.js', array('jquery'), '', true);
103
+ wp_enqueue_script('kcseo-wordpres-seo-structured-data-schema-admin-js', $KcSeoWPSchema->assetsUrl .'js/admin.js', array('jquery', 'jquery-ui-core', 'jquery-ui-tabs','jquery-ui-datepicker') ,'' , true);
104
+ }
105
+
106
+ }
107
+
108
+ endif;
lib/classes/KcSeoOutput.php ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if(!class_exists('KcSeoOutput')):
4
+
5
+ class KcSeoOutput
6
+ {
7
+ function __construct()
8
+ {
9
+ add_action('wp_footer', array($this,'load_schema'), 1);
10
+ }
11
+
12
+ function load_schema(){
13
+ global $KcSeoWPSchema, $post;
14
+ $schemaModel = new KcSeoSchemaModel;
15
+ $html = null;
16
+ $settings = get_option($KcSeoWPSchema->options['settings']);
17
+ if(is_home() || is_front_page()){
18
+ $metaData = array();
19
+
20
+ $metaData["@context"] = "http://schema.org/";
21
+ $metaData["@type"] = "WebSite";
22
+
23
+ if($settings['homeonly']){
24
+ $author_url = ($settings['siteurl'] ? $settings['siteurl'] : get_home_url());
25
+ $to_remove = array( 'http://', 'https://','www.' );
26
+ foreach ( $to_remove as $item ) {
27
+ $author_url = str_replace($item, '', $author_url); // to: www.example.com
28
+ }
29
+ $metaData["url"] = $author_url;
30
+ $metaData["name"] = $settings['sitename'];
31
+ $metaData["alternateName"] = $settings['siteaname'];
32
+ $html .= $schemaModel->get_jsonEncode($metaData);
33
+ }else{
34
+ $metaData["url"] = get_home_url();
35
+ $metaData["potentialAction"] = array(
36
+ "@type" => "SearchAction",
37
+ "target" => get_home_url() ."/?s={query}",
38
+ "query-input" => "required name=query"
39
+ );
40
+ $html .= $schemaModel->get_jsonEncode($metaData);
41
+ }
42
+ }
43
+
44
+ $webMeta = array();
45
+ $webMeta["@context"] = "http://schema.org";
46
+ $webMeta["@type"] = esc_attr($settings['site_type']);
47
+
48
+ if($settings['additionalType']){
49
+ $aType = explode("\r\n", $settings['additionalType']);
50
+ if(!empty($aType) && is_array($aType)){
51
+ if(count($aType) == 1){
52
+ $webMeta["additionalType"] = $aType[0];
53
+ }else if(count($aType) > 1){
54
+ $webMeta["additionalType"] = $aType;
55
+ }
56
+ }
57
+ }
58
+
59
+ if(esc_attr($settings['site_type']) == 'Person'){
60
+ $webMeta["name"] = esc_attr( $settings['person']['name']);
61
+ $webMeta["worksFor"] = esc_attr( $settings['person']['worksFor']);
62
+ $webMeta["jobTitle"] = esc_attr( $settings['person']['jobTitle']);
63
+ $webMeta["image"] = esc_attr( $settings['person']['image']);
64
+ $webMeta["description"] = esc_attr( $settings['person']['description']);
65
+ $webMeta["birthDate"] = esc_attr( $settings['person']['birthDate']);
66
+ }else{
67
+ $webMeta["name"] = esc_attr($settings['type_name']);
68
+ $webMeta["logo"] = esc_attr( $settings['logo_url'] );
69
+ }
70
+ if(esc_attr($settings['site_type']) != "Organization" && esc_attr($settings['site_type']) != "Person"){
71
+ $webMeta["description"] = esc_attr( $settings['business_info']['description'] );
72
+ if($settings['business_info']['openingHours']){
73
+ $aOhour = explode("\r\n", $settings['business_info']['openingHours']);
74
+ if(!empty($aOhour) && is_array($aOhour)){
75
+ if(count($aOhour) == 1){
76
+ $webMeta["openingHours"] = $aOhour[0];
77
+ }else if(count($aOhour) > 1){
78
+ $webMeta["openingHours"] = $aOhour;
79
+ }
80
+ }
81
+ }
82
+ $webMeta["geo"] = array(
83
+ "@type" => "GeoCoordinates",
84
+ "longitude" => esc_attr( $settings['business_info']['longitude'] ),
85
+ "latitude" => esc_attr( $settings['business_info']['latitude'] )
86
+ );
87
+ }
88
+
89
+ $webMeta["url"] = esc_attr( $settings['web_url']);
90
+ if(!empty($settings['social']) && is_array($settings['social'])){
91
+ $link = array();
92
+ foreach ($settings['social'] as $socialD) {
93
+ if($socialD['link']){
94
+ $link[] = $socialD['link'];
95
+ }
96
+ }
97
+ if(!empty($link)){
98
+ $webMeta["sameAs"] = $link;
99
+ }
100
+ }
101
+
102
+ $webMeta["contactPoint"] = array(
103
+ "@type" => "ContactPoint",
104
+ "telephone" => esc_attr( $settings['contact']['telephone']),
105
+ "contactType" => esc_attr( $settings['contact']['contactType']),
106
+ "contactOption" => esc_attr( $settings['contact']['contactOption']),
107
+ "areaServed" => esc_attr( @implode(',',$settings['area_served'])),
108
+ "availableLanguage" => esc_attr( $settings['availableLanguage'])
109
+ );
110
+ $webMeta["address"] = array(
111
+ "@type" => "PostalAddress",
112
+ "addressCountry" => esc_attr($settings['address']['country']),
113
+ "addressLocality" => esc_attr($settings['address']['locality']),
114
+ "addressRegion" => esc_attr($settings['address']['region']),
115
+ "postalCode" => esc_attr($settings['address']['postalcode']),
116
+ "streetAddress" => esc_attr($settings['address']['street'])
117
+ );
118
+ if($webMeta["@type"]) {
119
+ $html .= $schemaModel->get_jsonEncode($webMeta);
120
+ }
121
+
122
+ if(is_single() || is_page()){
123
+
124
+ foreach($schemaModel->schemaTypes() as $schemaID => $schema){
125
+ $schemaMetaId = $KcSeoWPSchema->KcSeoPrefix.$schemaID;
126
+ $metaData = unserialize(get_post_meta($post->ID, $schemaMetaId, true ));
127
+ $firstItem = @current($metaData);
128
+ if(!empty($metaData) && is_array($metaData) && isset($firstItem)){
129
+ $html .= $schemaModel->schemaOutput($schemaID, $metaData);
130
+ }
131
+ }
132
+ }
133
+ echo $html;
134
+ }
135
+ }
136
+ endif;
lib/classes/KcSeoSettings.php ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if(!class_exists('KcSeoSettings')):
4
+
5
+ class KcSeoSettings
6
+ {
7
+ function __construct()
8
+ {
9
+ add_action( 'plugins_loaded', array($this, 'kcSeo_pluginInit') );
10
+ add_action( 'admin_menu' , array($this, 'kcSeo_Wp_Schema_menu'));
11
+ add_action( 'wp_ajax_kcSeoWpSchemaSettings', array($this, 'kcSeoWpSchemaSettings'));
12
+ add_action( 'wp_ajax_newSocial', array($this, 'newSocial'));
13
+ }
14
+
15
+ function newSocial(){
16
+ $schemaModel = new KcSeoSchemaModel;
17
+ $id = ($_REQUEST['id'] ? $_REQUEST['id'] +1 : 0 );
18
+ $html = null;
19
+ $html = "<div class='sfield'>";
20
+ $html .= "<select name='social[$id][id]'>";
21
+ foreach ($schemaModel->socialList() as $skey => $social) {
22
+ $html .= "<option value='$skey'>$social</option>";
23
+ }
24
+ $html .= "</select>";
25
+ $html .= "<input type='text' name='social[$id][link]'>";
26
+ $html .= '<span class="dashicons dashicons-trash social-remove"></span>';
27
+ $html .= "</div>";
28
+
29
+
30
+ wp_send_json( array('data' => $html) );
31
+ die();
32
+ }
33
+
34
+ function kcSeoWpSchemaSettings(){
35
+ global $KcSeoWPSchema;
36
+ $error = true;
37
+ $msg = null;
38
+ if($KcSeoWPSchema->verifyNonce()){
39
+ unset($_REQUEST['action']);
40
+ update_option( $KcSeoWPSchema->options['settings'], $_REQUEST );
41
+ $error = false;
42
+ $msg = __('Settings successfully updated',KCSEO_WP_SCHEMA_SLUG);
43
+ }else{
44
+ $msg = __('Security Error !!',KCSEO_WP_SCHEMA_SLUG);
45
+ }
46
+ $response = array(
47
+ 'error'=> $error,
48
+ 'msg' => $msg
49
+ );
50
+ wp_send_json( $response );
51
+ die();
52
+ }
53
+
54
+ function wp_schema_page(){
55
+ global $KcSeoWPSchema;
56
+ $KcSeoWPSchema->render('settings');
57
+ }
58
+
59
+ function kcSeo_Wp_Schema_menu(){
60
+ global $KcSeoWPSchema;
61
+ $page = add_menu_page( 'WP SEO Structured Data Schema', 'WP SEO Schema', 'manage_options', 'wp-seo-schema', array($this,'wp_schema_page'), $KcSeoWPSchema->assetsUrl . 'images/wp-seo-schema.png');
62
+
63
+ add_action('admin_print_styles-' . $page, array( $this,'tlp_schema_style'));
64
+ add_action('admin_print_scripts-'. $page, array( $this,'tlp_schema_script'));
65
+ }
66
+
67
+ function tlp_schema_style(){
68
+ global $KcSeoWPSchema;
69
+ wp_enqueue_style( 'kcseo-jquery-ui-css', 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css');
70
+ wp_enqueue_style( 'kcseo-select2-css', $KcSeoWPSchema->assetsUrl .'css/select2.min.css');
71
+ wp_enqueue_style( 'kcseo-tooltip-css','http://cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.1/jquery.qtip.css');
72
+ wp_enqueue_style( 'kcseo-admin-css', $KcSeoWPSchema->assetsUrl .'css/admin.css');
73
+ }
74
+ function tlp_schema_script(){
75
+ global $KcSeoWPSchema;
76
+ wp_enqueue_script( 'kcseo-wordpres-seo-structured-data-schema-select2-js', $KcSeoWPSchema->assetsUrl . 'js/select2.min.js', array('jquery'), '', true);
77
+ wp_enqueue_script( 'kcseo-wordpres-seo-structured-data-schema-tooltip-js', 'http://cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.1/jquery.qtip.js', array('jquery'), '', true);
78
+ wp_enqueue_script( 'kcseo-wordpres-seo-structured-data-schema-admin-js', $KcSeoWPSchema->assetsUrl . 'js/admin.js', array('jquery', 'jquery-ui-core', 'jquery-ui-tabs','jquery-ui-datepicker'), '', true);
79
+ }
80
+
81
+ function kcSeo_pluginInit(){
82
+ load_plugin_textdomain( KCSEO_WP_SCHEMA_SLUG, FALSE, KCSEO_WP_SCHEMA_LANGUAGE_PATH );
83
+ }
84
+ }
85
+ endif;
lib/init.php ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if(!class_exists('KcSeoWPSchema')){
4
+
5
+ class KcSeoWPSchema
6
+ {
7
+ public $options;
8
+ public $KcSeoPrefix;
9
+
10
+ function __construct() {
11
+ $this->KcSeoPrefix = "_schema_";
12
+ $this->options = array('settings' => 'kcseo_wp_schema');
13
+
14
+ $this->incPath = dirname(__FILE__);
15
+ $this->functionsPath = $this->incPath . '/functions/';
16
+ $this->classesPath = $this->incPath . '/classes/';
17
+ $this->viewsPath = $this->incPath . '/views/';
18
+ $this->assetsUrl = KCSEO_WP_SCHEMA_URL . '/assets/';
19
+ $this->modelPath = $this->incPath . '/models/';
20
+
21
+ $this->KeSeoLoadFunctions($this->functionsPath);
22
+ $this->KcSeoLoadModel($this->modelPath);
23
+ $this->KcSeoLoadClass($this->classesPath);
24
+
25
+ //register_activation_hook(KCSEO_WP_SCHEMA_PATH, array($this, 'activate'));
26
+ //register_deactivation_hook(KCSEO_WP_SCHEMA_PATH, array($this, 'deactivate'));
27
+
28
+ }
29
+
30
+ function KcSeoLoadClass($dir) {
31
+ if (!file_exists($dir)) return;
32
+
33
+ $classes = array();
34
+
35
+ foreach (scandir($dir) as $item) {
36
+ if (preg_match("/.php$/i", $item)) {
37
+ require_once ($dir . $item);
38
+ $className = str_replace(".php", "", $item);
39
+ $classes[] = new $className;
40
+ }
41
+ }
42
+
43
+ if ($classes) {
44
+ foreach ($classes as $class) $this->objects[] = $class;
45
+ }
46
+ }
47
+
48
+ function KcSeoLoadModel($dir){
49
+ if (!file_exists($dir)) return;
50
+ foreach (scandir($dir) as $item) {
51
+ if (preg_match("/.php$/i", $item)) {
52
+ require_once ($dir . $item);
53
+ }
54
+ }
55
+ }
56
+
57
+ function KeSeoLoadFunctions($dir){
58
+ if (!file_exists($dir)) return;
59
+ foreach (scandir($dir) as $item) {
60
+ if (preg_match("/.php$/i", $item)) {
61
+ require_once ($dir . $item);
62
+ }
63
+ }
64
+ }
65
+
66
+ function render($viewName, $args = array()) {
67
+ global $KcSeoWPSchema;
68
+ $path = str_replace(".","/", $viewName);
69
+ $viewPath = $KcSeoWPSchema->viewsPath . $path . '.php';
70
+ if (!file_exists($viewPath)) return;
71
+
72
+ if ($args) extract($args);
73
+ $pageReturn = include $viewPath;
74
+ if ($pageReturn AND $pageReturn <> 1) return $pageReturn;
75
+ if (@$html) return $html;
76
+ }
77
+
78
+ /**
79
+ * Dynamicaly call any method from models class
80
+ * by pluginFramework instance
81
+ */
82
+ function __call($name, $args) {
83
+ if (!is_array($this->objects)) return;
84
+ foreach ($this->objects as $object) {
85
+ if (method_exists($object, $name)) {
86
+ $count = count($args);
87
+ if ($count == 0) return $object->$name();
88
+ elseif ($count == 1) return $object->$name($args[0]);
89
+ elseif ($count == 2) return $object->$name($args[0], $args[1]);
90
+ elseif ($count == 3) return $object->$name($args[0], $args[1], $args[2]);
91
+ elseif ($count == 4) return $object->$name($args[0], $args[1], $args[2], $args[3]);
92
+ elseif ($count == 5) return $object->$name($args[0], $args[1], $args[2], $args[3], $args[4]);
93
+ elseif ($count == 6) return $object->$name($args[0], $args[1], $args[2], $args[3], $args[4], $args[5]);
94
+ }
95
+ }
96
+ }
97
+ }
98
+
99
+ global $KcSeoWPSchema;
100
+ if (!is_object($KcSeoWPSchema))
101
+ $KcSeoWPSchema = new KcseoWPSchema;
102
+ }
lib/models/KcSeoSchemaModel.php ADDED
@@ -0,0 +1,1495 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if(!class_exists('KcSeoSchemaModel')):
4
+ class KcSeoSchemaModel
5
+ {
6
+ function __construct()
7
+ {
8
+
9
+ }
10
+
11
+ function schemaOutput($schemaID, $metaData){
12
+ $html = null;
13
+
14
+ if($schemaID){
15
+ switch($schemaID){
16
+ case "article":
17
+ $article = array();
18
+ $article["@context"] = "http://schema.org";
19
+ $article["@type"] = "Article";
20
+ if($metaData['headline']){
21
+ $article["headline"] = esc_attr($metaData['headline']);
22
+ }if($metaData['mainEntityOfPage']){
23
+ $article["mainEntityOfPage"] = array(
24
+ "@type" => "WebPage",
25
+ "@id" => esc_attr($article["mainEntityOfPage"])
26
+ );
27
+ }if($metaData['author']){
28
+ $article["author"] = esc_attr($metaData['author']);
29
+ }if($metaData['publisher']){
30
+ if($metaData['publisherImage']){
31
+ $img = $this->imgInfo($metaData['publisherImage']);
32
+ $plA = array(
33
+ "@type" => "ImageObject",
34
+ "url" => esc_attr($metaData['publisherImage']),
35
+ "height" => intval($img['height']),
36
+ "width" => intval($img['width']),
37
+ );
38
+ }else{
39
+ $plA = array();
40
+ }
41
+ $article["publisher"] = array(
42
+ "@type" => "Organization",
43
+ "name" => esc_attr($metaData['publisher']),
44
+ "logo" => $plA
45
+ );
46
+ }if($metaData['alternativeHeadline']){
47
+ $article["alternativeHeadline"] = esc_attr($metaData['alternativeHeadline']);
48
+ }if($metaData['image']){
49
+ $img = $this->imgInfo($metaData['image']);
50
+ $article["image"] = array(
51
+ "@type" => "ImageObject",
52
+ "url" => esc_attr($metaData['image']),
53
+ "height" => $img['height'],
54
+ "width" =>$img['width']
55
+ );
56
+ }if($metaData['datePublished']){
57
+ $article["datePublished"] = esc_attr($metaData['datePublished']);
58
+ }if($metaData['dateModified']){
59
+ $article["dateModified"] = esc_attr($metaData['dateModified']);
60
+ }if($metaData['description']){
61
+ $article["description"] = esc_attr($metaData['description']);
62
+ }if($metaData['articleBody']){
63
+ $article["articleBody"] = esc_attr($metaData['articleBody']);
64
+ }
65
+ $html .= $this->get_jsonEncode($article);
66
+ break;
67
+
68
+ case "news_article":
69
+ $newsArticle = array();
70
+ $newsArticle["@context"] = "http://schema.org";
71
+ $newsArticle["@type"] = "NewsArticle";
72
+ if($metaData['headline']){
73
+ $newsArticle["headline"] = esc_attr($metaData['headline']);
74
+ }if($metaData['mainEntityOfPage']){
75
+ $newsArticle["mainEntityOfPage"] = array(
76
+ "@type" => "WebPage",
77
+ "@id" => esc_attr($metaData["mainEntityOfPage"])
78
+ );
79
+ }if($metaData['author']){
80
+ $newsArticle["author"] = esc_attr($metaData['author']);
81
+ }if($metaData['image']){
82
+ $img = $this->imgInfo($metaData['image']);
83
+ $newsArticle["image"] = array(
84
+ "@type" => "ImageObject",
85
+ "url" => esc_attr($metaData['image']),
86
+ "height" => $img['height'],
87
+ "width" =>$img['width']
88
+ );
89
+ }if($metaData['datePublished']){
90
+ $newsArticle["datePublished"] = esc_attr($metaData['datePublished']);
91
+ }if($metaData['dateModified']){
92
+ $newsArticle["dateModified"] = esc_attr($metaData['dateModified']);
93
+ }if($metaData['publisher']){
94
+ if($metaData['publisherImage']){
95
+ $img = $this->imgInfo($metaData['publisherImage']);
96
+ $plA = array(
97
+ "@type" => "ImageObject",
98
+ "url" => esc_attr($metaData['publisherImage']),
99
+ "height" => intval($img['height']),
100
+ "width" => intval($img['width']),
101
+ );
102
+ }else{
103
+ $plA = array();
104
+ }
105
+ $newsArticle["publisher"] = array(
106
+ "@type" => "Organization",
107
+ "name" => esc_attr($metaData['publisher']),
108
+ "logo" => $plA
109
+ );
110
+ }if($metaData['description']){
111
+ $newsArticle["description"] = esc_attr($metaData['description']);
112
+ }if($metaData['articleBody']){
113
+ $newsArticle["articleBody"] = esc_attr($metaData['articleBody']);
114
+ }
115
+ $html .= $this->get_jsonEncode($newsArticle);
116
+ break;
117
+
118
+ case "blog_posting":
119
+ $blogPosting = array();
120
+ $blogPosting["@context"] = "http://schema.org";
121
+ $blogPosting["@type"] = "BlogPosting";
122
+ if($metaData['headline']){
123
+ $blogPosting["headline"] = esc_attr($metaData['headline']);
124
+ }if($metaData['mainEntityOfPage']){
125
+ $blogPosting["mainEntityOfPage"] = array(
126
+ "@type" => "WebPage",
127
+ "@id" => esc_attr($metaData["mainEntityOfPage"])
128
+ );
129
+ }if($metaData['author']){
130
+ $blogPosting["author"] = esc_attr($metaData['author']);
131
+ }if($metaData['image']){
132
+ $img = $this->imgInfo($metaData['image']);
133
+ $blogPosting["image"] = array(
134
+ "@type" => "ImageObject",
135
+ "url" => esc_attr($metaData['image']),
136
+ "height" => $img['height'],
137
+ "width" =>$img['width']
138
+ );
139
+ }if($metaData['datePublished']){
140
+ $blogPosting["datePublished"] = esc_attr($metaData['datePublished']);
141
+ }if($metaData['dateModified']){
142
+ $blogPosting["dateModified"] = esc_attr($metaData['dateModified']);
143
+ }if($metaData['publisher']){
144
+ if($metaData['publisherImage']){
145
+ $img = $this->imgInfo($metaData['publisherImage']);
146
+ $plA = array(
147
+ "@type" => "ImageObject",
148
+ "url" => esc_attr($metaData['publisherImage']),
149
+ "height" => intval($img['height']),
150
+ "width" => intval($img['width']),
151
+ );
152
+ }else{
153
+ $plA = array();
154
+ }
155
+ $blogPosting["publisher"] = array(
156
+ "@type" => "Organization",
157
+ "name" => esc_attr($metaData['publisher']),
158
+ "logo" => $plA
159
+ );
160
+ }if($metaData['description']){
161
+ $blogPosting["description"] = esc_attr($metaData['description']);
162
+ }if($metaData['articleBody']){
163
+ $blogPosting["articleBody"] = esc_attr($metaData['articleBody']);
164
+ }
165
+ $html .= $this->get_jsonEncode($blogPosting);
166
+ break;
167
+
168
+ case 'event':
169
+ $event = array();
170
+ $event["@context"] = "http://schema.org";
171
+ $event["@type"] = "Event";
172
+ if($metaData['name']){
173
+ $event["name"] = esc_attr($metaData['name']);
174
+ }if($metaData['startDate']){
175
+ $event["startDate"] = esc_attr($metaData['startDate']);
176
+ }if($metaData['locationName']){
177
+ $event["location"] = array(
178
+ "@type" => "Place",
179
+ "name" => esc_attr($metaData['locationName']),
180
+ "address" => esc_attr($metaData['locationAddress'])
181
+ );
182
+ }if($metaData['price']){
183
+ $event["offers"] = array(
184
+ "@type" => "Offer",
185
+ "price" => esc_attr($metaData['price']),
186
+ "priceCurrency" => esc_attr($metaData['priceCurrency']),
187
+ "url" => esc_attr($metaData['url'])
188
+ );
189
+ }
190
+ $html .= $this->get_jsonEncode($event);
191
+ break;
192
+
193
+ case 'product':
194
+ $product = array();
195
+ $product["@context"] = "http://schema.org";
196
+ $product["@type"] = "Product";
197
+ if($metaData['name']){
198
+ $product["name"] = esc_attr($metaData['name']);
199
+ }if($metaData['image']){
200
+ $product["image"] = esc_attr($metaData['image']);
201
+ }if($metaData['description']){
202
+ $product["description"] = esc_attr($metaData['description']);
203
+ }if($metaData['brand']){
204
+ $product["brand"] = array(
205
+ "@type" => "Thing",
206
+ "name" => esc_attr($metaData['name'])
207
+ );
208
+ }if($metaData['ratingValue']){
209
+ $product["aggregateRating"] = array(
210
+ "@type" => "AggregateRating",
211
+ "ratingValue" => esc_attr($metaData['ratingValue']),
212
+ "reviewCount" => esc_attr($metaData['reviewCount'])
213
+ );
214
+ }if($metaData['price']){
215
+ $product["offers"] = array(
216
+ "@type" => "Offer",
217
+ "price" => esc_attr($metaData['price']),
218
+ "priceCurrency" => esc_attr($metaData['priceCurrency']),
219
+ "itemCondition" => esc_attr($metaData['itemCondition']),
220
+ "availability" => esc_attr($metaData['availability']),
221
+ "url" => esc_attr($metaData['url'])
222
+ );
223
+ }
224
+ $html .= $this->get_jsonEncode($product);
225
+ break;
226
+
227
+ case 'video':
228
+ $video = array();
229
+ $video["@context"] = "http://schema.org";
230
+ $video["@type"] = "VideoObject";
231
+ if($metaData['name']){
232
+ $video["name"] = esc_attr($metaData['name']);
233
+ }if($metaData['description']){
234
+ $video["description"] = esc_attr($metaData['description']);
235
+ }if($metaData['description']){
236
+ $video["description"] = esc_attr($metaData['description']);
237
+ }if($metaData['thumbnailUrl']){
238
+ $video["thumbnailUrl"] = esc_attr($metaData['thumbnailUrl']);
239
+ }if($metaData['uploadDate']){
240
+ $video["uploadDate"] = esc_attr($metaData['uploadDate']);
241
+ }if($metaData['duration']){
242
+ $video["duration"] = esc_attr($metaData['duration']);
243
+ }if($metaData['contentUrl']){
244
+ $video["contentUrl"] = esc_attr($metaData['contentUrl']);
245
+ }if($metaData['interactionCount']){
246
+ $video["interactionCount"] = esc_attr($metaData['interactionCount']);
247
+ }if($metaData['expires']){
248
+ $video["expires"] = esc_attr($metaData['expires']);
249
+ }
250
+ $html .= $this->get_jsonEncode($video);
251
+ break;
252
+
253
+ case 'service':
254
+ $service = array();
255
+ $service["@context"] = "http://schema.org";
256
+ $service["@type"] = "Service";
257
+ if($metaData['name']){
258
+ $service["name"] = esc_attr($metaData['name']);
259
+ }if($metaData['serviceType']){
260
+ $service["serviceType"] = esc_attr($metaData['serviceType']);
261
+ }if($metaData['locationName']){
262
+ $service["location"] = array(
263
+ "@type" => "Place",
264
+ "name" => esc_attr($metaData['locationName']),
265
+ "address" => esc_attr($metaData['locationAddress'])
266
+ );
267
+ }if($metaData['award']){
268
+ $service["award"] = esc_attr($metaData['award']);
269
+ }if($metaData['category']){
270
+ $service["category"] = esc_attr($metaData['category']);
271
+ }if($metaData['providerMobility']){
272
+ $service["providerMobility"] = esc_attr($metaData['providerMobility']);
273
+ }if($metaData['additionalType']){
274
+ $service["additionalType"] = esc_attr($metaData['additionalType']);
275
+ }if($metaData['alternateName']){
276
+ $service["alternateName"] = esc_attr($metaData['alternateName']);
277
+ }if($metaData['image']){
278
+ $service["image"] = esc_attr($metaData['image']);
279
+ }if($metaData['mainEntityOfPage']){
280
+ $service["mainEntityOfPage"] = esc_attr($metaData['mainEntityOfPage']);
281
+ }if($metaData['sameAs']){
282
+ $service["sameAs"] = esc_attr($metaData['sameAs']);
283
+ }if($metaData['url']){
284
+ $service["url"] = esc_attr($metaData['url']);
285
+ }
286
+ $html .= $this->get_jsonEncode($service);
287
+ break;
288
+
289
+ case 'review':
290
+ $review = array();
291
+ $review["@context"] = "http://schema.org";
292
+ $review["@type"] = "Review";
293
+ if($metaData['itemName']){
294
+ $review["itemReviewed"] = array(
295
+ "@type" => "Thing",
296
+ "name" => esc_attr($metaData['itemName'])
297
+ );
298
+ }if($metaData['ratingValue']){
299
+ $review["reviewRating"] = array(
300
+ "@type" => "Rating",
301
+ "ratingValue" => esc_attr($metaData['ratingValue']),
302
+ "bestRating" => esc_attr($metaData['bestRating']),
303
+ "worstRating" => esc_attr($metaData['worstRating'])
304
+ );
305
+ }if($metaData['name']){
306
+ $review["name"] = esc_attr($metaData['name']);
307
+ }if($metaData['author']){
308
+ $review["author"] = array(
309
+ "@type" => "Person",
310
+ "name" => esc_attr($metaData['author'])
311
+ );
312
+ }if($metaData['reviewBody']){
313
+ $review["reviewBody"] = esc_attr($metaData['reviewBody']);
314
+ }if($metaData['datePublished']){
315
+ $review["datePublished"] = esc_attr($metaData['datePublished']);
316
+ }if($metaData['publisher']){
317
+ $review["publisher"] = array(
318
+ "@type" => "Organization",
319
+ "name" => esc_attr($metaData['publisher'])
320
+ );
321
+ }
322
+ $html .= $this->get_jsonEncode($review);
323
+ break;
324
+ case 'aggregate_rating':
325
+ $aRating = array();
326
+ $aRating["@context"] = "http://schema.org";
327
+ $aRating["@type"] = "Thing";
328
+ if($metaData['name']){
329
+ $aRating["name"] = esc_attr($metaData['name']);
330
+ }if($metaData['description']){
331
+ $aRating["description"] = esc_attr($metaData['description']);
332
+ }if($metaData['ratingValue']){
333
+ $rValue = array();
334
+ $rValue["@type"] = "AggregateRating";
335
+ $rValue["ratingValue"] = esc_attr($metaData['ratingValue']);
336
+ if($metaData['bestRating']){
337
+ $rValue["bestRating"] = esc_attr($metaData['bestRating']);
338
+ }if($metaData['worstRating']){
339
+ $rValue["worstRating"] = esc_attr($metaData['worstRating']);
340
+ }if($metaData['ratingCount']){
341
+ $rValue["ratingCount"] = esc_attr($metaData['ratingCount']);
342
+ }
343
+
344
+ $aRating["aggregateRating"] = $rValue;
345
+ }
346
+ $html .= $this->get_jsonEncode($aRating);
347
+ break;
348
+
349
+ default:
350
+ break;
351
+ }
352
+
353
+ }
354
+ return $html;
355
+ }
356
+
357
+ function get_field($fieldId,$data,$pid = null){
358
+ $html = null;
359
+ if($fieldId){
360
+ global $KcSeoWPSchema;
361
+ $schemaId = $KcSeoWPSchema->KcSeoPrefix.$data['schemaId'];
362
+ $id = $KcSeoWPSchema->KcSeoPrefix.$data['schemaId']."_".$fieldId;
363
+ $name = $schemaId."[{$fieldId}]";
364
+ $metaData = ( get_post_meta($pid, $schemaId, true ) ? unserialize(get_post_meta($pid, $schemaId, true )) : array());
365
+ $value = (isset($metaData[$fieldId]) ? ($metaData[$fieldId] ? esc_attr($metaData[$fieldId]) : null) : null);
366
+ $class = isset($data['class']) ? ($data['class'] ? $data['class'] : null) : null;
367
+ $require = (isset($data['required']) ? ($data['required'] ? "<span class='required'>*</span>" : null ) : null);
368
+ $title = (isset($data['title']) ? ($data['title'] ? $data['title'] : null ) : null);
369
+ $desc = (isset($data['desc']) ? ($data['desc'] ? $data['desc'] : null ) : null);
370
+
371
+ $html .="<div class='field-container' id='".$id.'-container'."'>";
372
+ $html .="<label class='field-label' for='{$id}'>{$title}{$require}</label>";
373
+ $html .="<div class='field-content' id='".$id.'-content'."'>";
374
+ switch($data['type']){
375
+ case 'text':
376
+ $html .= "<input type='text' id='{$id}' class='{$class}' name='{$name}' value='{$value}' />";
377
+ break;
378
+
379
+ case 'number':
380
+ if($fieldId == 'price'){
381
+ $html .= "<input type='number' step='any' id='{$id}' class='{$class}' name='{$name}' value='{$value}' />";
382
+ }else{
383
+ $html .= "<input type='number' id='{$id}' class='{$class}' name='{$name}' value='{$value}' />";
384
+ }
385
+ break;
386
+ case 'textarea':
387
+ $html .= "<textarea id='{$id}' class='{$class}' name='{$name}' >{$value}</textarea>";
388
+ break;
389
+ case 'select':
390
+ $html .="<select name='{$name}' class='{$class}' id='{$id}'>";
391
+ $html .="<option value=''>Select {$title}</option>";
392
+ foreach($data['options'] as $optKey =>$optValue){
393
+ $slt = ($optKey == $value ? "selected" : null);
394
+ $html .="<option value='{$optKey}' {$slt}>{$optValue}</option>";
395
+ }
396
+ $html .="</select>";
397
+ break;
398
+ default:
399
+ $html .= "<input id='{$id}' type='{$data['type']}' value='{$value}' name='$name' />";
400
+ break;
401
+
402
+ }
403
+ $html .= "<p class='description'>{$desc}</p>";
404
+ $html .="</div>";
405
+ $html .="</div>";
406
+ }
407
+
408
+ return $html;
409
+ }
410
+
411
+ public function schemaTypes(){
412
+ return array(
413
+ 'article' => array(
414
+ 'title' => "Article",
415
+ 'fields' => array(
416
+ 'headline' => array(
417
+ 'title' => 'Headline',
418
+ 'type' => 'text',
419
+ 'desc' => 'Article title',
420
+ 'required' => true
421
+ ),
422
+ 'mainEntityOfPage'=> array(
423
+ 'title' => 'Page URL',
424
+ 'type' => 'url',
425
+ 'desc' => 'The canonical URL of the article page',
426
+ 'required' => true
427
+ ),
428
+ 'author' => array(
429
+ 'title' => 'Author Name',
430
+ 'type' => 'text',
431
+ 'desc' => 'Author display name',
432
+ 'required' => true
433
+ ),
434
+ 'image' => array(
435
+ 'title' => 'Image URL',
436
+ 'type' => 'url',
437
+ 'desc' => 'Image url',
438
+ 'required' => true
439
+ ),
440
+ 'datePublished' => array(
441
+ 'title' => 'Published date',
442
+ 'type' => 'text',
443
+ 'class' => 'kcseo-date',
444
+ 'required' => true,
445
+ 'desc' => 'Like this: 2015-12-25'
446
+ ),
447
+ 'dateModified' => array(
448
+ 'title' => 'Modified date',
449
+ 'type' => 'text',
450
+ 'class' => 'kcseo-date',
451
+ 'required' => true,
452
+ 'desc' => 'Like this: 2015-12-25'
453
+ ),
454
+ 'publisher' => array(
455
+ 'title' => 'Publisher',
456
+ 'type' => 'text',
457
+ 'desc' => 'Publisher name or Organization name',
458
+ 'required' => true
459
+ ),
460
+ 'publisherImage' => array(
461
+ 'title' => 'Publisher Logo',
462
+ 'type' => 'url',
463
+ 'desc' => 'Logos should have a wide aspect ratio, not a square icon.<br>Logos should be no wider than 600px, and no taller than 60px.<br>Always retain the original aspect ratio of the logo when resizing. Ideally, logos are exactly 60px tall with width <= 600px. If maintaining a height of 60px would cause the width to exceed 600px, downscale the logo to exactly 600px wide and reduce the height accordingly below 60px to maintain the original aspect ratio.<br>',
464
+ 'required' => true
465
+ ),
466
+ 'description' => array(
467
+ 'title' => 'Description',
468
+ 'type' => 'textarea',
469
+ 'desc' => 'Short description'
470
+ ),
471
+ 'articleBody' => array(
472
+ 'title' => 'Article body',
473
+ 'type' => 'textarea',
474
+ 'desc' => 'Article content'
475
+ ),
476
+ 'alternativeHeadline' => array(
477
+ 'title' => 'Alternative headline',
478
+ 'type' => 'text',
479
+ 'desc' => 'A secondary headline for the article.'
480
+ ),
481
+ )
482
+ ),
483
+ 'blog_posting' => array(
484
+ 'title' => 'Blog Posting',
485
+ 'fields' => array(
486
+ 'headline' => array(
487
+ 'title' => 'Headline',
488
+ 'type' => 'text',
489
+ 'desc' => 'Blog posting title',
490
+ 'required' => true
491
+ ),
492
+ 'mainEntityOfPage'=> array(
493
+ 'title' => 'Page URL',
494
+ 'type' => 'url',
495
+ 'desc' => 'The canonical URL of the article page',
496
+ 'required' => true
497
+ ),
498
+ 'author' => array(
499
+ 'title' => 'Author name',
500
+ 'type' => 'text',
501
+ 'desc' => 'Author display name',
502
+ 'required' => true
503
+ ),
504
+ 'image' => array(
505
+ 'title' => 'Image URL',
506
+ 'type' => 'url',
507
+ 'desc' => 'Image url',
508
+ 'required' => true
509
+ ),
510
+ 'datePublished' => array(
511
+ 'title' => 'Published date',
512
+ 'type' => 'text',
513
+ 'class' => 'kcseo-date',
514
+ 'desc' => 'Like this: 2015-12-25',
515
+ 'required' => true
516
+ ),
517
+ 'dateModified' => array(
518
+ 'title' => 'Modified date',
519
+ 'type' => 'text',
520
+ 'class' => 'kcseo-date',
521
+ 'desc' => 'Like this: 2015-12-25',
522
+ 'required' => true
523
+ ),
524
+ 'publisher' => array(
525
+ 'title' => 'Publisher',
526
+ 'type' => 'text',
527
+ 'desc' => 'Publisher name or Organization name',
528
+ 'required' => true
529
+ ),
530
+ 'publisherImage' => array(
531
+ 'title' => 'Publisher Logo',
532
+ 'type' => 'url',
533
+ 'desc' => 'Logos should have a wide aspect ratio, not a square icon.<br>Logos should be no wider than 600px, and no taller than 60px.<br>Always retain the original aspect ratio of the logo when resizing. Ideally, logos are exactly 60px tall with width <= 600px. If maintaining a height of 60px would cause the width to exceed 600px, downscale the logo to exactly 600px wide and reduce the height accordingly below 60px to maintain the original aspect ratio.<br>',
534
+ 'required' => true
535
+ ),
536
+ 'description' => array(
537
+ 'title' => 'Description',
538
+ 'type' => 'textarea',
539
+ 'desc' => 'Short description'
540
+ ),
541
+ 'articleBody' => array(
542
+ 'title' => 'Article body',
543
+ 'type' => 'textarea',
544
+ 'desc' => 'Article content'
545
+ )
546
+ )
547
+ ),
548
+ 'news_article' => array(
549
+ 'title' => 'News Article',
550
+ 'fields' => array(
551
+ 'headline' => array(
552
+ 'title' => 'Headline',
553
+ 'type' => 'text',
554
+ 'desc' => 'Article title',
555
+ 'required' => true
556
+ ),
557
+ 'mainEntityOfPage'=> array(
558
+ 'title' => 'Page URL',
559
+ 'type' => 'url',
560
+ 'desc' => 'The canonical URL of the article page',
561
+ 'required' => true
562
+ ),
563
+ 'author' => array(
564
+ 'title' => 'Author',
565
+ 'type' => 'text',
566
+ 'desc' => 'Author display name',
567
+ 'required' => true
568
+ ),
569
+ 'image' => array(
570
+ 'title' => 'Image',
571
+ 'type' => 'url',
572
+ 'desc' => 'Image url',
573
+ 'required' => true
574
+ ),
575
+ 'datePublished' => array(
576
+ 'title' => 'Published date',
577
+ 'type' => 'text',
578
+ 'class' => 'kcseo-date',
579
+ 'desc' => 'Like this: 2015-12-25',
580
+ 'required' => true
581
+ ),
582
+ 'dateModified' => array(
583
+ 'title' => 'Modified date',
584
+ 'type' => 'text',
585
+ 'class' => 'kcseo-date',
586
+ 'required' => true,
587
+ 'desc' => 'Like this: 2015-12-25'
588
+ ),
589
+ 'publisher' => array(
590
+ 'title' => 'Publisher',
591
+ 'type' => 'text',
592
+ 'desc' => 'Publisher name or Organization name',
593
+ 'required' => true
594
+ ),
595
+ 'publisherImage' => array(
596
+ 'title' => 'Publisher Logo',
597
+ 'type' => 'url',
598
+ 'desc' => 'Logos should have a wide aspect ratio, not a square icon.<br>Logos should be no wider than 600px, and no taller than 60px.<br>Always retain the original aspect ratio of the logo when resizing. Ideally, logos are exactly 60px tall with width <= 600px. If maintaining a height of 60px would cause the width to exceed 600px, downscale the logo to exactly 600px wide and reduce the height accordingly below 60px to maintain the original aspect ratio.<br>',
599
+ 'required' => true
600
+ ),
601
+ 'description' => array(
602
+ 'title' => 'Description',
603
+ 'type' => 'textarea',
604
+ 'desc' => 'Short description'
605
+ ),
606
+ 'articleBody' => array(
607
+ 'title' => 'Article body',
608
+ 'type' => 'textarea',
609
+ 'desc' => 'Article body content'
610
+ )
611
+ )
612
+ ),
613
+ 'event' => array(
614
+ 'title' => 'Event',
615
+ 'fields' => array(
616
+ 'name' => array(
617
+ 'title' => 'Name',
618
+ 'type' => 'text',
619
+ 'required' => true,
620
+ 'desc' => "The name of the event."
621
+ ),
622
+ 'locationName' => array(
623
+ 'title' => 'Location name',
624
+ 'type' => 'text',
625
+ 'required' => true,
626
+ 'desc' => "Event Location name"
627
+ ),
628
+ 'locationAddress' => array(
629
+ 'title' => 'Location address',
630
+ 'type' => 'text',
631
+ 'required' => true,
632
+ 'desc' => "The location of for example where the event is happening, an organization is located, or where an action takes place."
633
+ ),
634
+ 'startDate' => array(
635
+ 'title' => 'Start date',
636
+ 'type' => 'text',
637
+ 'class' => 'kcseo-date',
638
+ 'required' => true,
639
+ 'desc' => "Event start date"
640
+ ),
641
+ 'price' => array(
642
+ 'title' => 'Price (Recommended)',
643
+ 'type' => 'number',
644
+ 'desc' => "This is highly recommended. The lowest available price, including service charges and fees, of this type of ticket. <span class='required'>Not required but (Recommended)</span>"
645
+ ),
646
+ 'priceCurrency' => array(
647
+ 'title' => 'Price currency',
648
+ 'type' => 'text',
649
+ 'desc' => "The 3-letter currency code. (USD)"
650
+ ),
651
+ 'url' => array(
652
+ 'title' => 'URL (Recommended)',
653
+ 'type' => 'url',
654
+ 'placeholder' => 'URL',
655
+ 'desc' => "A link to the event's details page. <span class='required'>Not required but (Recommended)</span>"
656
+ ),
657
+ )
658
+ ),
659
+ 'product' => array(
660
+ 'title' => 'Product',
661
+ 'fields' => array(
662
+ 'name' => array(
663
+ 'title' => 'Name',
664
+ 'type' => 'text',
665
+ 'required' => true,
666
+ 'desc' => "The name of the product."
667
+ ),
668
+ 'image' => array(
669
+ 'title' => 'Image URL',
670
+ 'type' => 'url',
671
+ 'desc' => "The URL of a product photo. Pictures clearly showing the product, e.g. against a white background, are preferred."
672
+ ),
673
+ 'description' => array(
674
+ 'title' => 'Description',
675
+ 'type' => 'textarea',
676
+ 'desc' => "Product description."
677
+ ),
678
+ 'brand' => array(
679
+ 'title' => 'Brand',
680
+ 'type' => 'text',
681
+ 'desc' => "The brand of the product."
682
+ ),
683
+ 'ratingValue' => array(
684
+ 'title' => 'Ratting value',
685
+ 'type' => 'text',
686
+ 'desc' => "Rating value. (1 , 2.5, 3, 5 etc)"
687
+ ),
688
+ 'reviewCount' => array(
689
+ 'title' => 'Total review count',
690
+ 'type' => 'number',
691
+ 'desc' => "Rating ratting value. <span class='required'>This is required if (Ratting value) is given</span>"
692
+ ),
693
+ 'price' => array(
694
+ 'title' => 'Price',
695
+ 'type' => 'number',
696
+ 'desc' => "The lowest available price, including service charges and fees, of this type of ticket."
697
+ ),
698
+ 'priceCurrency' => array(
699
+ 'title' => 'Price currency',
700
+ 'type' => 'text',
701
+ 'desc' => "The 3-letter currency code."
702
+ ),
703
+ 'availability' => array(
704
+ 'title' => 'Availability',
705
+ 'type' => 'select',
706
+ 'options' => array(
707
+ 'http://schema.org/InStock' => 'InStock',
708
+ 'http://schema.org/InStoreOnly' => 'InStoreOnly',
709
+ 'http://schema.org/OutOfStock' => 'OutOfStock',
710
+ 'http://schema.org/SoldOut' => 'SoldOut',
711
+ 'http://schema.org/OnlineOnly' => 'OnlineOnly',
712
+ 'http://schema.org/LimitedAvailability' => 'LimitedAvailability',
713
+ 'http://schema.org/Discontinued' => 'Discontinued',
714
+ 'http://schema.org/PreOrder' => 'PreOrder',
715
+ ),
716
+ 'desc' => "Select a availability type",
717
+ ),
718
+ 'itemCondition' => array(
719
+ 'title' => 'Product condition',
720
+ 'type' => 'select',
721
+ 'options' => array(
722
+ 'http://schema.org/NewCondition' => 'NewCondition',
723
+ 'http://schema.org/UsedCondition' => 'UsedCondition',
724
+ 'http://schema.org/DamagedCondition' => 'DamagedCondition',
725
+ 'http://schema.org/RefurbishedCondition' => 'RefurbishedCondition',
726
+ ),
727
+ 'desc' => "Select a condition"
728
+ ),
729
+ 'url' => array(
730
+ 'title' => 'Product URL',
731
+ 'type' => 'url',
732
+ 'desc' => "A URL to the product web page (that includes the Offer). (Don't use offerURL for markup that appears on the product page itself.)"
733
+ ),
734
+ )
735
+ ),
736
+ 'video' => array(
737
+ 'title' => 'Video',
738
+ 'fields' => array(
739
+ 'name' => array(
740
+ 'title' => 'Name',
741
+ 'type' => 'text',
742
+ 'required' => true,
743
+ 'desc' => "The title of the video"
744
+ ),
745
+ 'description' => array(
746
+ 'title' => 'Description',
747
+ 'type' => 'textarea',
748
+ 'required' => true,
749
+ 'desc' => "The description of the video"
750
+ ),
751
+ 'thumbnailUrl' => array(
752
+ 'title' => 'Thumbnail URL',
753
+ 'type' => 'url',
754
+ 'placeholder' => 'URL',
755
+ 'required' => true,
756
+ 'desc' => "A URL pointing to the video thumbnail image file. Images must be at least 160x90 pixels and at most 1920x1080 pixels."
757
+ ),
758
+ 'uploadDate' => array(
759
+ 'title' => 'Updated date',
760
+ 'type' => 'text',
761
+ 'class' => 'kcseo-date',
762
+ 'desc' => '2015-02-05T08:00:00+08:00'
763
+ ),
764
+ 'duration' => array(
765
+ 'title' => 'Duration',
766
+ 'type' => 'text',
767
+ 'desc' => "The duration of the video in ISO 8601 format.(PT1M33S)"
768
+ ),
769
+ 'contentUrl' => array(
770
+ 'title' => 'Content URL',
771
+ 'type' => 'url',
772
+ 'placeholder' => 'URL',
773
+ 'desc' => "A URL pointing to the actual video media file. This file should be in .mpg, .mpeg, .mp4, .m4v, .mov, .wmv, .asf, .avi, .ra, .ram, .rm, .flv, or other video file format."
774
+ ),
775
+ 'embedUrl' => array(
776
+ 'title' => 'Embed URL',
777
+ 'placeholder' => 'URL',
778
+ 'type' => 'url',
779
+ 'desc' => "A URL pointing to a player for the specific video. Usually this is the information in the src element of an < embed> tag.Example: Dailymotion: http://www.dailymotion.com/swf/x1o2g."
780
+ ),
781
+ 'interactionCount' => array(
782
+ 'title' => 'Interaction count',
783
+ 'type' => 'text',
784
+ 'desc' => "The number of times the video has been viewed."
785
+ ),
786
+ 'expires' => array(
787
+ 'title' => 'Expires',
788
+ 'type' => 'text',
789
+ 'class' => 'kcseo-date',
790
+ 'desc' => "Like this: 2015-12-25"
791
+ ),
792
+ )
793
+ ),
794
+ 'service' => array(
795
+ 'title' => 'Service',
796
+ 'fields' => array(
797
+ 'name' => array(
798
+ 'title' => 'Name',
799
+ 'type' => 'text',
800
+ 'required' => true,
801
+ 'desc' => "The name of the Service."
802
+ ),
803
+ 'serviceType' => array(
804
+ 'title' => 'Service type',
805
+ 'type' => 'text',
806
+ 'required' => true,
807
+ 'desc' => "The type of service being offered, e.g. veterans' benefits, emergency relief, etc."
808
+ ),
809
+ 'additionalType' => array(
810
+ 'title' => 'Additional type',
811
+ 'type' => 'url',
812
+ 'placeholder' => 'URL',
813
+ 'desc' => "An additional type for the service, typically used for adding more specific types from external vocabularies in microdata syntax."
814
+ ),
815
+ 'locationName' => array(
816
+ 'title' => 'Served location name ',
817
+ 'type' => 'text',
818
+ 'desc' => "The geographic area where a service or offered item is provided."
819
+ ),
820
+ 'locationAddress' => array(
821
+ 'title' => 'Served location address',
822
+ 'type' => 'text',
823
+ 'desc' => "The geographic area where a service or offered item is provided.<span class='required'>This field is required when location name is set</span>"
824
+ ),
825
+ 'award' => array(
826
+ 'title' => 'Award',
827
+ 'type' => 'text',
828
+ 'desc' => "An award won by or for this service."
829
+ ),
830
+ 'category' => array(
831
+ 'title' => 'Category',
832
+ 'type' => 'text',
833
+ 'desc' => "A category for the service."
834
+ ),
835
+ 'providerMobility' => array(
836
+ 'title' => 'Provider mobility',
837
+ 'type' => 'text',
838
+ 'desc' => "Indicates the mobility of a provided service (e.g. 'static', 'dynamic')."
839
+ ),
840
+ 'description' => array(
841
+ 'title' => 'Description',
842
+ 'type' => 'textarea',
843
+ 'require' => true,
844
+ 'desc' => "A short description of the service."
845
+ ),
846
+ 'image' => array(
847
+ 'title' => 'Image URL',
848
+ 'type' => 'url',
849
+ 'require' => false,
850
+ 'desc' => "An image of the service. This should be a URL."
851
+ ),
852
+ 'mainEntityOfPage' => array(
853
+ 'title' => 'Main entity of page URL',
854
+ 'type' => 'url',
855
+ 'require' => false,
856
+ 'desc' => "Indicates a page (or other CreativeWork) for which this thing is the main entity being described."
857
+ ),
858
+ 'sameAs' => array(
859
+ 'title' => 'Same as URL',
860
+ 'type' => 'url',
861
+ 'placeholder' => 'URL',
862
+ 'desc' => "URL of a reference Web page that unambiguously indicates the service's identity. E.g. the URL of the service's Wikipedia page, Freebase page, or official website."
863
+ ),
864
+ 'url' => array(
865
+ 'title' => 'Url of the service',
866
+ 'type' => 'url',
867
+ 'placeholder' => 'URL',
868
+ 'desc' => "URL of the service."
869
+ ),
870
+ 'alternateName' => array(
871
+ 'title' => 'Alternate name',
872
+ 'type' => 'text',
873
+ 'desc' => 'An alias for the service.'
874
+ ),
875
+ )
876
+ ),
877
+ 'review' => array(
878
+ 'title' => 'Review',
879
+ 'fields' => array(
880
+ 'itemName' => array(
881
+ 'title' => 'Name of the reviewed item',
882
+ 'type' => 'text',
883
+ 'required' => true,
884
+ 'desc' => "The item that is being reviewed."
885
+ ),
886
+ 'reviewBody' => array(
887
+ 'title' => 'Review body',
888
+ 'type' => 'text',
889
+ 'required' => true,
890
+ 'desc' => "The actual body of the review."
891
+ ),
892
+ 'name' => array(
893
+ 'title' => 'Review name',
894
+ 'type' => 'text',
895
+ 'required' => true,
896
+ 'desc' => "A particular name for the review."
897
+ ),
898
+ 'author' => array(
899
+ 'title' => 'Author',
900
+ 'type' => 'text',
901
+ 'required' => true,
902
+ 'author' => 'Author name',
903
+ 'desc' => "The author of the review. The reviewer’s name needs to be a valid name."
904
+ ),
905
+ 'datePublished' => array(
906
+ 'title' => 'Date of Published',
907
+ 'type' => 'text',
908
+ 'class' => 'kcseo-date',
909
+ 'desc' => "Like this: 2015-12-25"
910
+ ),
911
+ 'ratingValue' => array(
912
+ 'title' => 'Rating value',
913
+ 'type' => 'number',
914
+ 'desc' => "A numerical quality rating for the item."
915
+ ),
916
+ 'bestRating' => array(
917
+ 'title' => 'Best rating',
918
+ 'type' => 'number',
919
+ 'desc' => "The highest value allowed in this rating system."
920
+ ),
921
+ 'worstRating' => array(
922
+ 'title' => 'Worst rating',
923
+ 'type' => 'number',
924
+ 'desc' => "The lowest value allowed in this rating system. * Required if the rating system is not on a 5-point scale. If worstRating is omitted, 1 is assumed."
925
+ ),
926
+ 'publisher' => array(
927
+ 'title' => 'Name of the organization',
928
+ 'type' => 'text',
929
+ 'desc' => 'The publisher of the review.'
930
+ )
931
+ )
932
+ ),
933
+ 'aggregate_rating' => array(
934
+ 'title' => 'Aggregate Ratings',
935
+ 'fields' => array(
936
+ 'name' => array(
937
+ 'title' => 'Name (Think)',
938
+ 'type' => 'text',
939
+ 'required' => true,
940
+ 'desc' => "The item that is being rated."
941
+ ),
942
+ 'description' => array(
943
+ 'title' => 'Description',
944
+ 'type' => 'textarea',
945
+ 'desc' => "Description for thr review"
946
+ ),
947
+ 'ratingCount' => array(
948
+ 'title' => 'Rating Count',
949
+ 'type' => 'number',
950
+ 'required' => true,
951
+ 'desc' => "The total number of ratings for the item on your site. <span class='required'>* At least one of ratingCount or reviewCount is required.</span>"
952
+ ),
953
+ 'reviewCount' => array(
954
+ 'title' => 'Review Count',
955
+ 'type' => 'number',
956
+ 'required' => true,
957
+ 'desc' => "Specifies the number of people who provided a review with or without an accompanying rating. At least one of ratingCount or reviewCount is required."
958
+ ),
959
+ 'ratingValue' => array(
960
+ 'title' => 'Rating Value',
961
+ 'type' => 'number',
962
+ 'required' => true,
963
+ 'desc' => "A numerical quality rating for the item."
964
+ ),
965
+ 'ratingValue' => array(
966
+ 'title' => 'Rating Value',
967
+ 'type' => 'number',
968
+ 'required' => true,
969
+ 'desc' => "A numerical quality rating for the item."
970
+ ),
971
+ 'bestRating' => array(
972
+ 'title' => 'Best Rating',
973
+ 'type' => 'number',
974
+ 'required' => true,
975
+ 'desc' => "The highest value allowed in this rating system. <span class='required'>* Required if the rating system is not a 5-point scale.</span> If bestRating is omitted, 5 is assumed."
976
+ ),
977
+ 'worstRating' => array(
978
+ 'title' => 'Worst Rating',
979
+ 'type' => 'number',
980
+ 'required' => true,
981
+ 'desc' => "The lowest value allowed in this rating system. <span class='required'>* Required if the rating system is not a 5-point scale.</span> If worstRating is omitted, 1 is assumed."
982
+ )
983
+ )
984
+ )
985
+ );
986
+ }
987
+
988
+ function get_jsonEncode($data = array()){
989
+ $html = null;
990
+ /** @var TYPE_NAME $data */
991
+ if(!empty($data) && is_array($data)){
992
+ $html .= '<script type="application/ld+json">' .json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . '</script>';
993
+ }
994
+ return $html;
995
+ }
996
+
997
+ function site_type(){
998
+ return array(
999
+ 'Organization',
1000
+ 'LocalBusiness',
1001
+ 'AccountingService',
1002
+ 'Attorney',
1003
+ 'AutoBodyShop',
1004
+ 'AutoDealer',
1005
+ 'AutoPartsStore',
1006
+ 'AutoRental',
1007
+ 'AutoRepair',
1008
+ 'AutoWash',
1009
+ 'Bakery',
1010
+ 'BarOrPub',
1011
+ 'BeautySalon',
1012
+ 'BedAndBreakfast',
1013
+ 'BikeStore',
1014
+ 'BookStore',
1015
+ 'CafeOrCoffeeShop',
1016
+ 'ChildCare',
1017
+ 'ClothingStore',
1018
+ 'ComputerStore',
1019
+ 'DaySpa',
1020
+ 'Dentist',
1021
+ 'DryCleaningOrLaundry',
1022
+ 'Electrician',
1023
+ 'ElectronicsStore',
1024
+ 'EmergencyService',
1025
+ 'EntertainmentBusiness',
1026
+ 'EventVenue',
1027
+ 'ExerciseGym',
1028
+ 'FinancialService',
1029
+ 'Florist',
1030
+ 'FoodEstablishment',
1031
+ 'FurnitureStore',
1032
+ 'GardenStore',
1033
+ 'GeneralContractor',
1034
+ 'GolfCourse',
1035
+ 'HairSalon',
1036
+ 'HardwareStore',
1037
+ 'HealthAndBeautyBusiness',
1038
+ 'HobbyShop',
1039
+ 'Store',
1040
+ 'HomeAndConstructionBusiness',
1041
+ 'HomeGoodsStore',
1042
+ 'Hospital',
1043
+ 'Hotel',
1044
+ 'HousePainter',
1045
+ 'HVACBusiness',
1046
+ 'HVACBusiness',
1047
+ 'InsuranceAgency',
1048
+ 'JewelryStore',
1049
+ 'LiquorStore',
1050
+ 'Locksmith',
1051
+ 'LodgingBusiness',
1052
+ 'MedicalClinic',
1053
+ 'MensClothingStore',
1054
+ 'MobilePhoneStore',
1055
+ 'Motel',
1056
+ 'MotorcycleDealer',
1057
+ 'MotorcycleRepair',
1058
+ 'MovingCompany',
1059
+ 'MusicStore',
1060
+ 'NailSalon',
1061
+ 'NightClub',
1062
+ 'Notary',
1063
+ 'OfficeEquipmentStore',
1064
+ 'Optician',
1065
+ 'Person',
1066
+ 'PetStore',
1067
+ 'Physician',
1068
+ 'Plumber',
1069
+ 'ProfessionalService',
1070
+ 'RealEstateAgent',
1071
+ 'Residence',
1072
+ 'Restaurant',
1073
+ 'RoofingContractor',
1074
+ 'RVPark',
1075
+ 'School',
1076
+ 'SelfStorage',
1077
+ 'ShoeStore',
1078
+ 'SkiResort',
1079
+ 'SportingGoodsStore',
1080
+ 'SportsClub',
1081
+ 'Store',
1082
+ 'TattooParlor',
1083
+ 'Taxi',
1084
+ 'TennisComplex',
1085
+ 'TireShop',
1086
+ 'ToyStore',
1087
+ 'TravelAgency',
1088
+ 'VeterinaryCare',
1089
+ 'WholesaleStore',
1090
+ 'Winery'
1091
+ );
1092
+ }
1093
+
1094
+ function countryList(){
1095
+ return array(
1096
+ "AF" => "Afghanistan",
1097
+ "AX" => "Aland Islands",
1098
+ "AL" => "Albania",
1099
+ "DZ" => "Algeria",
1100
+ "AS" => "American Samoa",
1101
+ "AD" => "Andorra",
1102
+ "AO" => "Angola",
1103
+ "AI" => "Anguilla",
1104
+ "AQ" => "Antarctica",
1105
+ "AG" => "Antigua and Barbuda",
1106
+ "AR" => "Argentina",
1107
+ "AM" => "Armenia",
1108
+ "AW" => "Aruba",
1109
+ "AU" => "Australia",
1110
+ "AT" => "Austria",
1111
+ "AZ" => "Azerbaijan",
1112
+ "BS" => "Bahamas",
1113
+ "BH" => "Bahrain",
1114
+ "BD" => "Bangladesh",
1115
+ "BB" => "Barbados",
1116
+ "BY" => "Belarus",
1117
+ "BE" => "Belgium",
1118
+ "BZ" => "Belize",
1119
+ "BJ" => "Benin",
1120
+ "BM" => "Bermuda",
1121
+ "BT" => "Bhutan",
1122
+ "BO" => "Bolivia, Plurinational State of",
1123
+ "BQ" => "Bonaire, Sint Eustatius and Saba",
1124
+ "BA" => "Bosnia and Herzegovina",
1125
+ "BW" => "Botswana",
1126
+ "BV" => "Bouvet Island",
1127
+ "BR" => "Brazil",
1128
+ "IO" => "British Indian Ocean Territory",
1129
+ "BN" => "Brunei Darussalam",
1130
+ "BG" => "Bulgaria",
1131
+ "BF" => "Burkina Faso",
1132
+ "BI" => "Burundi",
1133
+ "KH" => "Cambodia",
1134
+ "CM" => "Cameroon",
1135
+ "CA" => "Canada",
1136
+ "CV" => "Cape Verde",
1137
+ "KY" => "Cayman Islands",
1138
+ "CF" => "Central African Republic",
1139
+ "TD" => "Chad",
1140
+ "CL" => "Chile",
1141
+ "CN" => "China",
1142
+ "CX" => "Christmas Island",
1143
+ "CC" => "Cocos (Keeling) Islands",
1144
+ "CO" => "Colombia",
1145
+ "KM" => "Comoros",
1146
+ "CG" => "Congo",
1147
+ "CD" => "Congo, the Democratic Republic of the",
1148
+ "CK" => "Cook Islands",
1149
+ "CR" => "Costa Rica",
1150
+ "CI" => "Côte d Ivoire",
1151
+ "HR" => "Croatia",
1152
+ "CU" => "Cuba",
1153
+ "CW" => "Curaçao",
1154
+ "CY" => "Cyprus",
1155
+ "CZ" => "Czech Republic",
1156
+ "DK" => "Denmark",
1157
+ "DJ" => "Djibouti",
1158
+ "DM" => "Dominica",
1159
+ "DO" => "Dominican Republic",
1160
+ "EC" => "Ecuador",
1161
+ "EG" => "Egypt",
1162
+ "SV" => "El Salvador",
1163
+ "GQ" => "Equatorial Guinea",
1164
+ "ER" => "Eritrea",
1165
+ "EE" => "Estonia",
1166
+ "ET" => "Ethiopia",
1167
+ "FK" => "Falkland Islands (Malvinas)",
1168
+ "FO" => "Faroe Islands",
1169
+ "FJ" => "Fiji",
1170
+ "FI" => "Finland",
1171
+ "FR" => "France",
1172
+ "GF" => "French Guiana",
1173
+ "PF" => "French Polynesia",
1174
+ "TF" => "French Southern Territories",
1175
+ "GA" => "Gabon",
1176
+ "GM" => "Gambia",
1177
+ "GE" => "Georgia",
1178
+ "DE" => "Germany",
1179
+ "GH" => "Ghana",
1180
+ "GI" => "Gibraltar",
1181
+ "GR" => "Greece",
1182
+ "GL" => "Greenland",
1183
+ "GD" => "Grenada",
1184
+ "GP" => "Guadeloupe",
1185
+ "GU" => "Guam",
1186
+ "GT" => "Guatemala",
1187
+ "GG" => "Guernsey",
1188
+ "GN" => "Guinea",
1189
+ "GW" => "Guinea-Bissau",
1190
+ "GY" => "Guyana",
1191
+ "HT" => "Haiti",
1192
+ "HM" => "Heard Island and McDonald Islands",
1193
+ "VA" => "Holy See (Vatican City State)",
1194
+ "HN" => "Honduras",
1195
+ "HK" => "Hong Kong",
1196
+ "HU" => "Hungary",
1197
+ "IS" => "Iceland",
1198
+ "IN" => "India",
1199
+ "ID" => "Indonesia",
1200
+ "IR" => "Iran, Islamic Republic of",
1201
+ "IQ" => "Iraq",
1202
+ "IE" => "Ireland",
1203
+ "IM" => "Isle of Man",
1204
+ "IL" => "Israel",
1205
+ "IT" => "Italy",
1206
+ "JM" => "Jamaica",
1207
+ "JP" => "Japan",
1208
+ "JE" => "Jersey",
1209
+ "JO" => "Jordan",
1210
+ "KZ" => "Kazakhstan",
1211
+ "KE" => "Kenya",
1212
+ "KI" => "Kiribati",
1213
+ "KP" => "Korea, Democratic People's Republic of",
1214
+ "KR" => "Korea, Republic of,",
1215
+ "KW" => "Kuwait",
1216
+ "KG" => "Kyrgyzstan",
1217
+ "LA" => "Lao Peoples Democratic Republic",
1218
+ "LV" => "Latvia",
1219
+ "LB" => "Lebanon",
1220
+ "LS" => "Lesotho",
1221
+ "LR" => "Liberia",
1222
+ "LY" => "Libya",
1223
+ "LI" => "Liechtenstein",
1224
+ "LT" => "Lithuania",
1225
+ "LU" => "Luxembourg",
1226
+ "MO" => "Macao",
1227
+ "MK" => "Macedonia, the former Yugoslav Republic of",
1228
+ "MG" => "Madagascar",
1229
+ "MW" => "Malawi",
1230
+ "MY" => "Malaysia",
1231
+ "MV" => "Maldives",
1232
+ "ML" => "Mali",
1233
+ "MT" => "Malta",
1234
+ "MH" => "Marshall Islands",
1235
+ "MQ" => "Martinique",
1236
+ "MR" => "Mauritania",
1237
+ "MU" => "Mauritius",
1238
+ "YT" => "Mayotte",
1239
+ "MX" => "Mexico",
1240
+ "FM" => "Micronesia, Federated States of",
1241
+ "MD" => "Moldova, Republic of",
1242
+ "MC" => "Monaco",
1243
+ "MN" => "Mongolia",
1244
+ "ME" => "Montenegro",
1245
+ "MS" => "Montserrat",
1246
+ "MA" => "Morocco",
1247
+ "MZ" => "Mozambique",
1248
+ "MM" => "Myanmar",
1249
+ "NA" => "Namibia",
1250
+ "NR" => "Nauru",
1251
+ "NP" => "Nepal",
1252
+ "NL" => "Netherlands",
1253
+ "NC" => "New Caledonia",
1254
+ "NZ" => "New Zealand",
1255
+ "NI" => "Nicaragua",
1256
+ "NE" => "Niger",
1257
+ "NG" => "Nigeria",
1258
+ "NU" => "Niue",
1259
+ "NF" => "Norfolk Island",
1260
+ "MP" => "Northern Mariana Islands",
1261
+ "NO" => "Norway",
1262
+ "OM" => "Oman",
1263
+ "PK" => "Pakistan",
1264
+ "PW" => "Palau",
1265
+ "PS" => "Palestine, State of",
1266
+ "PA" => "Panama",
1267
+ "PG" => "Papua New Guinea",
1268
+ "PY" => "Paraguay",
1269
+ "PE" => "Peru",
1270
+ "PH" => "Philippines",
1271
+ "PN" => "Pitcairn",
1272
+ "PL" => "Poland",
1273
+ "PT" => "Portugal",
1274
+ "PR" => "Puerto Rico",
1275
+ "QA" => "Qatar",
1276
+ "RE" => "Reunion",
1277
+ "RO" => "Romania",
1278
+ "RU" => "Russian Federation",
1279
+ "RW" => "Rwanda",
1280
+ "BL" => "Saint Barthélemy",
1281
+ "SH" => "Saint Helena, Ascension and Tristan da Cunha",
1282
+ "KN" => "Saint Kitts and Nevis",
1283
+ "LC" => "Saint Lucia",
1284
+ "MF" => "Saint Martin (French part)",
1285
+ "PM" => "Saint Pierre and Miquelon",
1286
+ "VC" => "Saint Vincent and the Grenadines",
1287
+ "WS" => "Samoa",
1288
+ "SM" => "San Marino",
1289
+ "ST" => "Sao Tome and Principe",
1290
+ "SA" => "Saudi Arabia",
1291
+ "SN" => "Senegal",
1292
+ "RS" => "Serbia",
1293
+ "SC" => "Seychelles",
1294
+ "SL" => "Sierra Leone",
1295
+ "SG" => "Singapore",
1296
+ "SX" => "Sint Maarten (Dutch part)",
1297
+ "SK" => "Slovakia",
1298
+ "SI" => "Slovenia",
1299
+ "SB" => "Solomon Islands",
1300
+ "SO" => "Somalia",
1301
+ "ZA" => "South Africa",
1302
+ "GS" => "South Georgia and the South Sandwich Islands",
1303
+ "SS" => "South Sudan",
1304
+ "ES" => "Spain",
1305
+ "LK" => "Sri Lanka",
1306
+ "SD" => "Sudan",
1307
+ "SR" => "Suriname",
1308
+ "SJ" => "Svalbard and Jan Mayen",
1309
+ "SZ" => "Swaziland",
1310
+ "SE" => "Sweden",
1311
+ "CH" => "Switzerland",
1312
+ "SY" => "Syrian Arab Republic",
1313
+ "TW" => "Taiwan, Province of China",
1314
+ "TJ" => "Tajikistan",
1315
+ "TZ" => "Tanzania, United Republic of",
1316
+ "TH" => "Thailand",
1317
+ "TL" => "Timor-Leste",
1318
+ "TG" => "Togo",
1319
+ "TK" => "Tokelau",
1320
+ "TO" => "Tonga",
1321
+ "TT" => "Trinidad and Tobago",
1322
+ "TN" => "Tunisia",
1323
+ "TR" => "Turkey",
1324
+ "TM" => "Turkmenistan",
1325
+ "TC" => "Turks and Caicos Islands",
1326
+ "TV" => "Tuvalu",
1327
+ "UG" => "Uganda",
1328
+ "UA" => "Ukraine",
1329
+ "AE" => "United Arab Emirates",
1330
+ "GB" => "United Kingdom",
1331
+ "US" => "United States",
1332
+ "UM" => "United States Minor Outlying Islands",
1333
+ "UY" => "Uruguay",
1334
+ "UZ" => "Uzbekistan",
1335
+ "VU" => "Vanuatu",
1336
+ "VE" => "Venezuela, Bolivarian Republic of",
1337
+ "VN" => "Viet Nam",
1338
+ "VG" => "Virgin Islands, British",
1339
+ "VI" => "Virgin Islands, U.S.",
1340
+ "WF" => "Wallis and Futuna",
1341
+ "EH" => "Western Sahara",
1342
+ "YE" => "Yemen",
1343
+ "ZM" => "Zambia",
1344
+ "ZW" => "Zimbabwe",
1345
+ );
1346
+ }
1347
+
1348
+ function contactType(){
1349
+ return array(
1350
+ "Customer Service",
1351
+ "Technical Support",
1352
+ "Billing Support",
1353
+ "Bill Payment",
1354
+ "Sales",
1355
+ "Reservation",
1356
+ "Credit Card Support",
1357
+ "Emergency",
1358
+ "Baggage Tracking",
1359
+ "Roadside Assistance",
1360
+ "Package Tracking"
1361
+ );
1362
+ }
1363
+
1364
+ function languageList(){
1365
+ return array(
1366
+ "Akan",
1367
+ "Amharic",
1368
+ "Arabic",
1369
+ "Assamese",
1370
+ "Awadhi",
1371
+ "Azerbaijani",
1372
+ "Balochi",
1373
+ "Belarusian",
1374
+ "Bengali",
1375
+ "Bhojpuri",
1376
+ "Burmese",
1377
+ "Cantonese",
1378
+ "Cebuano",
1379
+ "Chewa",
1380
+ "Chhattisgarhi",
1381
+ "Chittagonian",
1382
+ "Czech",
1383
+ "Deccan",
1384
+ "Dhundhari",
1385
+ "Dutch",
1386
+ "English",
1387
+ "French",
1388
+ "Fula",
1389
+ "Gan",
1390
+ "German",
1391
+ "Greek",
1392
+ "Gujarati",
1393
+ "Haitian Creole",
1394
+ "Hakka",
1395
+ "Haryanvi",
1396
+ "Hausa",
1397
+ "Hiligaynon",
1398
+ "Hindi / Urdu",
1399
+ "Hmong",
1400
+ "Hungarian",
1401
+ "Igbo",
1402
+ "Ilokano",
1403
+ "Italian",
1404
+ "Japanese",
1405
+ "Javanese",
1406
+ "Jin",
1407
+ "Kannada",
1408
+ "Kazakh",
1409
+ "Khmer",
1410
+ "Kinyarwanda",
1411
+ "Kirundi",
1412
+ "Konkani",
1413
+ "Korean",
1414
+ "Kurdish",
1415
+ "Madurese",
1416
+ "Magahi",
1417
+ "Maithili",
1418
+ "Malagasy",
1419
+ "Malay/Indonesian",
1420
+ "Malayalam",
1421
+ "Mandarin",
1422
+ "Marathi",
1423
+ "Marwari",
1424
+ "Min Bei",
1425
+ "Min Dong",
1426
+ "Min Nan",
1427
+ "Mossi",
1428
+ "Nepali",
1429
+ "Oriya",
1430
+ "Oromo",
1431
+ "Pashto",
1432
+ "Persian",
1433
+ "Polish",
1434
+ "Portuguese",
1435
+ "Punjabi",
1436
+ "Quechua",
1437
+ "Romanian",
1438
+ "Russian",
1439
+ "Saraiki",
1440
+ "Serbo-Croatian",
1441
+ "Shona",
1442
+ "Sindhi",
1443
+ "Sinhalese",
1444
+ "Somali",
1445
+ "Spanish",
1446
+ "Sundanese",
1447
+ "Swahili",
1448
+ "Swedish",
1449
+ "Sylheti",
1450
+ "Tagalog",
1451
+ "Tamil",
1452
+ "Telugu",
1453
+ "Thai",
1454
+ "Turkish",
1455
+ "Ukrainian",
1456
+ "Uyghur",
1457
+ "Uzbek",
1458
+ "Vietnamese",
1459
+ "Wu",
1460
+ "Xhosa",
1461
+ "Xiang",
1462
+ "Yoruba",
1463
+ "Zulu",
1464
+ );
1465
+ }
1466
+
1467
+ function socialList(){
1468
+ return array(
1469
+ 'facebook' => __('Facebook'),
1470
+ 'twitter' => __('Twitter'),
1471
+ 'google-plus' => __('Google+'),
1472
+ 'instagram' => __('Instagram'),
1473
+ 'youtube' => __('Youtube'),
1474
+ 'linkedin' => __('LinkedIn'),
1475
+ 'myspace' => __('Myspace'),
1476
+ 'pinterest' => __('Pinterest'),
1477
+ 'soundcloud' => __('SoundCloud'),
1478
+ 'tumblr' => __('Tumblr'),
1479
+ 'wikidata' => __('Wikidata'),
1480
+ );
1481
+ }
1482
+
1483
+ function imgInfo($url = null){
1484
+ $img = array();
1485
+ if($url){
1486
+ $imgA = getimagesize($url);
1487
+
1488
+ $img['width'] = $imgA[0];
1489
+ $img['height'] = $imgA[1];
1490
+ }
1491
+ return $img;
1492
+ }
1493
+
1494
+ }
1495
+ endif;
lib/views/settings.php ADDED
@@ -0,0 +1,364 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ global $KcSeoWPSchema;
3
+ $settings = get_option($KcSeoWPSchema->options['settings']);
4
+ $schemaModel = new KcSeoSchemaModel;
5
+ ?>
6
+ <div class="wrap">
7
+ <div id="upf-icon-edit-pages" class="icon32 icon32-posts-page"><br /></div>
8
+ <h2><?php _e('WP SEO Structured Data Schema', KCSEO_WP_SCHEMA_SLUG);?></h2>
9
+ <form id="kcseo-settings" onsubmit="wpSchemaSettings(this); return false;">
10
+
11
+ <h3><?php _e('General settings for WP SEO Structured Data Schema by <a href="http://kcseopro.com/">KCSEOPro.com</a>',KCSEO_WP_SCHEMA_SLUG);?></h3>
12
+ <div class="setting-holder">
13
+ <table width="40%" cellpadding="10" class="form-table">
14
+ <tr class="default">
15
+ <th>Enable Site link Search Box</th>
16
+ <td scope="row">
17
+ <div class="with-tooltip">
18
+ <input type="checkbox" name="homeonly" id="homeonly" <?php echo (@$settings['homeonly'] ? "checked" : null); ?> value="1" />
19
+
20
+ <div class="schema-tooltip-holder">
21
+ <span class="schema-tooltip"></span>
22
+ <div class="hidden">
23
+ <p><b>Tip:</b> For more detailed information on how to configure this plugin, please visit:
24
+ <a href="http://kcseopro.com/wordpress-seo-structured-data-schema-plugin/">http://kcseopro.com/wordpress-seo-structured-data-schema-plugin/</a></p>
25
+ </div>
26
+ </div>
27
+ </div>
28
+ </td>
29
+ </tr>
30
+ <tr class="default field_homepage">
31
+ <th>Website Url</th>
32
+ <td align="left" scope="row">
33
+ <input type="text" class="regular-text" name="web_url" value="<?php echo (@$settings['web_url'] ? @$settings['web_url'] : null); ?>" />
34
+ </td>
35
+ </tr>
36
+ <tr class="default">
37
+ <th>Type</th>
38
+ <td align="left" scope="row">
39
+ <select id="site_type" name="site_type" class="select2">
40
+ <option value="">Select one type</option>
41
+ <?php
42
+ foreach($schemaModel->site_type() as $site){
43
+ $slt = ($site == @$settings['site_type'] ? "selected" : null);
44
+ echo "<option value='$site' $slt>$site</option>";
45
+ }
46
+ ?>
47
+ </select>
48
+ </td>
49
+ </tr>
50
+ <tr class="default">
51
+ <th>Organization or Business name</th>
52
+ <td align="left" scope="row">
53
+ <input type="text" class="regular-text" name="type_name" value="<?php echo (@$settings['type_name'] ? @$settings['type_name'] : null); ?>" />
54
+ </td>
55
+ </tr>
56
+ <tr class="default">
57
+ <th>Additional Type</th>
58
+ <td align="left" scope="row">
59
+ <div class="with-tooltip">
60
+ <textarea name="additionalType" placeholder="http://example1.com&#10;http://example2.com&#10;http://example3.com" rows="6" cols="50" class="additional-type"><?php echo (@$settings['additionalType'] ? esc_attr(@$settings['additionalType']) : null); ?></textarea>
61
+ <p class="description">Add "Additional Type" URL(s) by separate ideas</p>
62
+ <div class="schema-tooltip-holder">
63
+ <span class="schema-tooltip"></span>
64
+ <div class="hidden">
65
+ <p><b>Tip:</b> Product Ontology is an extension to schema using WikiPedia definitions that enables you to further define a type by adding an “AdditionalType” attribute.Example for a Tailor (which is not available as a schema “Type”): Pick LocalBusiness as a generic Type, then add additional type as follows:
66
+ <a href="https://en.wikipedia.org/wiki/Tailor">https://en.wikipedia.org/wiki/<span>Tailor</span></a>
67
+ Change to this format and enter in Additional Type field:
68
+ <a href="http://www.productontology.org/id/Tailor">http://www.productontology.org/id/<span>Tailor</span></a>
69
+ For more info visit:<a href="http://kcseopro.com/product-ontology-schema/">http://kcseopro.com/product-ontology-schema/</a>
70
+ </p>
71
+ </div>
72
+ </div>
73
+ </div>
74
+ </td>
75
+ </tr>
76
+
77
+ <tr class="default business-info">
78
+ <th style="font-size: 18px; padding: 30px 0 5px;">Others local business info</th>
79
+ </tr>
80
+ <tr class="default business-info">
81
+ <th>Description</th>
82
+ <td align="left" scope="row">
83
+ <textarea cols="50" rows="6" name="business_info[description]"><?php echo (@$settings['business_info']['description'] ? @$settings['business_info']['description'] : null); ?></textarea>
84
+ </td>
85
+ </tr>
86
+ <tr class="default business-info">
87
+ <th>Operation Hours</th>
88
+ <td align="left" scope="row">
89
+ <div class="with-tooltip">
90
+ <textarea name="business_info[openingHours]" placeholder="Mo-Sa 11:00-14:30&#10;Mo-Th 17:00-21:30&#10;Fr-Sa 17:00-22:00" rows="4" cols="50" class="additional-type"><?php echo (@$settings['business_info']['openingHours'] ? esc_attr(@$settings['business_info']['openingHours']) : null); ?></textarea>
91
+ <p class="description">- Days are specified using the following two-letter combinations: Mo, Tu, We, Th, Fr, Sa, Su.</br>
92
+ - Times are specified using 24:00 time. For example, 3pm is specified as 15:00. <br>
93
+ - Add Opening Hours by separate line</p>
94
+ <div class="schema-tooltip-holder">
95
+ <span class="schema-tooltip"></span>
96
+ <div class="hidden">
97
+ <p>
98
+ <b>Tip:</b> Once you save these structured data schema settings, validate your home page url here:
99
+ <a href="https://developers.google.com/structured-data/testing-tool/">https://developers.google.com/structured-data/testing-tool/</a>
100
+ </p>
101
+ </div>
102
+ </div>
103
+ </td>
104
+ </tr>
105
+ <tr class="default business-info">
106
+ <th style="font-size: 16px;">GeoCoordinates</th>
107
+ </tr>
108
+ <tr class="default business-info">
109
+ <th style="text-align: right">Longitude</th>
110
+ <td align="left" scope="row">
111
+ <input type="text" class="regular-text" name="business_info[longitude]" value="<?php echo (@$settings['business_info']['longitude'] ? @$settings['business_info']['longitude'] : null); ?>" />
112
+ </td>
113
+ </tr>
114
+ <tr class="default business-info">
115
+ <th style="text-align: right">Latitude</th>
116
+ <td align="left" scope="row">
117
+ <input type="text" class="regular-text" name="business_info[latitude]" value="<?php echo (@$settings['business_info']['latitude'] ? @$settings['business_info']['latitude'] : null); ?>" />
118
+ </td>
119
+ </tr>
120
+
121
+
122
+ <tr class="default person">
123
+ <th style="font-size: 18px; padding: 30px 0 5px;">Person</th>
124
+ </tr>
125
+ <tr class="default person">
126
+ <th>Name</th>
127
+ <td align="left" scope="row">
128
+ <input type="text" class="regular-text" name="person[name]" value="<?php echo (@$settings['person']['name'] ? @$settings['person']['name'] : null); ?>" />
129
+ </td>
130
+ </tr>
131
+ <tr class="default person">
132
+ <th>Work For</th>
133
+ <td align="left" scope="row">
134
+ <input type="text" class="regular-text" name="person[worksFor]"
135
+ value="<?php echo (@$settings['person']['worksFor'] ? @$settings['person']['worksFor'] : null); ?>" />
136
+
137
+ </td>
138
+ </tr>
139
+ <tr class="default person">
140
+ <th>Job Title</th>
141
+ <td align="left" scope="row">
142
+ <input type="text" class="regular-text" name="person[jobTitle]"
143
+ value="<?php echo (@$settings['person']['jobTitle'] ? @$settings['person']['jobTitle'] : null); ?>" />
144
+
145
+ </td>
146
+ </tr>
147
+ <tr class="default person">
148
+ <th>Image</th>
149
+ <td align="left" scope="row">
150
+ <input type="text" class="regular-text" name="person[image]"
151
+ value="<?php echo (@$settings['person']['image'] ? @$settings['person']['image'] : null); ?>" />
152
+ <p class="description">Add your personal photo here</p>
153
+ </td>
154
+ </tr>
155
+ <tr class="default person">
156
+ <th>Description</th>
157
+ <td align="left" scope="row">
158
+ <input type="text" class="regular-text" name="person[description]"
159
+ value="<?php echo (@$settings['person']['description'] ? @$settings['person']['description'] : null); ?>" />
160
+ </td>
161
+ </tr>
162
+ <tr class="default person">
163
+ <th>Birth date</th>
164
+ <td align="left" scope="row">
165
+ <input type="text" class="regular-text kcseo-date" name="person[birthDate]"
166
+ value="<?php echo (@$settings['person']['birthDate'] ? @$settings['person']['birthDate'] : null); ?>" />
167
+
168
+ </td>
169
+ </tr>
170
+ <tr class="default">
171
+ <th style="font-size: 18px; padding: 30px 0 5px;">Address</th>
172
+ </tr>
173
+ <tr class="default">
174
+ <th>Address Country</th>
175
+ <td align="left" scope="row">
176
+ <select class="select2" name="address[country]">
177
+ <option value="">Select a country</option>
178
+ <?php
179
+ foreach($schemaModel->countryList() as $country){
180
+ $slt = ($country == @$settings['address']['country'] ? "selected" : null);
181
+ echo "<option value='$country' $slt>$country</option>";
182
+ }
183
+ ?>
184
+ </select>
185
+ </td>
186
+ </tr>
187
+ <tr class="default">
188
+ <th>Address Locality</th>
189
+ <td align="left" scope="row">
190
+ <input type="text" class="regular-text" name="address[locality]" value="<?php echo (@$settings['address']['locality'] ? @$settings['address']['locality'] : null); ?>" />
191
+ <p class="description">City (i.e Kansas city)</p>
192
+ </tr>
193
+ <tr class="default">
194
+ <th>Address Region</th>
195
+ <td align="left" scope="row">
196
+ <input type="text" class="regular-text" name="address[region]" value="<?php echo (@$settings['address']['region'] ? @$settings['address']['region'] : null); ?>" />
197
+ <p class="description">State (i.e. MO)</p>
198
+ </tr>
199
+ <tr class="default">
200
+ <th>Postal Code</th>
201
+ <td align="left" scope="row">
202
+ <input type="text" class="regular-text" name="address[postalcode]" value="<?php echo (@$settings['address']['postalcode'] ? @$settings['address']['postalcode'] : null); ?>" />
203
+ </tr>
204
+ <tr class="default">
205
+ <th>Street Address</th>
206
+ <td align="left" scope="row">
207
+ <input type="text" class="regular-text" name="address[street]" value="<?php echo (@$settings['address']['street'] ? @$settings['address']['street'] : null); ?>" />
208
+ </tr>
209
+ </table>
210
+ </div>
211
+ <div id="tabs-container">
212
+ <ul class="tabs-menu">
213
+ <li class="current"><a href="#tab-1">Organization Logo</a></li>
214
+ <li><a href="#tab-2">Social Profile</a></li>
215
+ <li><a href="#tab-3">Corporate Contacts</a></li>
216
+ </ul>
217
+ <div id="tab-1" class="tab-content">
218
+ <table width="100%" cellpadding="10" class="form-table">
219
+ <tr class="field_logo">
220
+ <th>Logo URL </th>
221
+ <td scope="row">
222
+ <input type="text" class="regular-text" name="logo_url" value="<?php echo (@$settings['logo_url'] ? @$settings['logo_url'] : null); ?>" />
223
+ </td>
224
+ </tr>
225
+ </table>
226
+ </div>
227
+ <div id="tab-2" class="tab-content">
228
+ <table width="100%" cellpadding="10" class="form-table">
229
+ <tr class="field_social">
230
+ <th>Company Name </th>
231
+ <td align="left" scope="row">
232
+ <input type="text" class="regular-text" name="social_company_name" value="<?php echo (@$settings['social_company_name'] ? @$settings['social_company_name'] : null); ?>" />
233
+ </td>
234
+ </tr>
235
+ <tr class="field_social_title">
236
+ <th style="font-size: 18px; padding: 10px 0;">Social Profiles</th>
237
+ </tr>
238
+ <tr class="social_field_link">
239
+ <th>Social Profile</th>
240
+ <th>
241
+ <div id="social-field-holder">
242
+ <?php
243
+ $socialP = (isset($settings['social']) ? ($settings['social'] ? $settings['social'] : array()) : array() );
244
+ if(is_array($socialP) && !empty($socialP)) {
245
+ $html = null;
246
+ $i = 0;
247
+ foreach ($socialP as $socialD) {
248
+ $html .= "<div class='sfield'>";
249
+ $html .= "<select name='social[$i][id]'>";
250
+ foreach ($schemaModel->socialList() as $sId => $social) {
251
+ $slt = ($sId == $socialD['id'] ? "selected" : null);
252
+ $html .= "<option value='$sId' $slt>$social</option>";
253
+ }
254
+ $html .= "</select>";
255
+ $html .= "<input type='text' name='social[$i][link]' value='{$socialD['link']}'>";
256
+ $html .= '<span class="dashicons dashicons-trash social-remove"></span>';
257
+ $html .= "</div>";
258
+ $i++;
259
+ }
260
+ echo $html;
261
+ }
262
+ ?>
263
+ </div>
264
+ <a class="button button-primary add-new" id="social-add" >Add Social Profile</a>
265
+ </th>
266
+ </tr>
267
+ </table>
268
+ </div>
269
+ <div id="tab-3" class="tab-content">
270
+ <table width="100%" cellpadding="10" class="form-table">
271
+ <tr class="field_contact">
272
+ <th style="font-size: 18px; padding: 10px 0;">Contacts</th>
273
+ </tr>
274
+ <tr class="field_contact">
275
+ <th>Contact Type </th>
276
+ <td scope="row">
277
+ <select name="contact[contactType]" class="select2">
278
+ <?php
279
+ foreach($schemaModel->contactType() as $ctype){
280
+ $slt = ($ctype == $settings['contact']['contactType'] ? "selected" : null);
281
+ echo "<option value='$ctype' $slt>$ctype</option>";
282
+ }
283
+
284
+ ?>
285
+ </select>
286
+ </td>
287
+
288
+ </tr>
289
+ <tr class="field_contact">
290
+ <th>Contact Phone </th>
291
+ <td align="left" scope="row">
292
+ <input type="text" class="regular-text" name="contact[telephone]" value="<?php echo (@$settings['contact']['telephone'] ? @$settings['contact']['telephone'] : null); ?>" />
293
+ <p class="description kco-telephone">Please follow the format below<span style="font-size: 11px;">+1-505-998-3793</span><span style="font-size: 11px;">(425) 123-4567</span><span style="font-size: 11px;">( 33 1) 42 68 53 01</span><span style="font-size: 11px;">+44-2078225951</span><span style="font-size: 11px;">1 (855) 469-6378</span>
294
+ </p>
295
+ </td>
296
+ </tr>
297
+ <tr class="field_contact">
298
+ <th>Contact Option </th>
299
+ <td align="left" scope="row">
300
+ <select name="contact[contactOption]" class="select2">
301
+ <option value="TollFree" <?php echo ($settings['contact']['contactOption'] == "TollFree" ? "selected" : null); ?>>TollFree</option>
302
+ <option value="HearingImpairedSupported" <?php echo ($settings['contact']['contactOption'] == "HearingImpairedSupported" ? "selected" : null); ?>>HearingImpairedSupported</option>
303
+ </select>
304
+ </td>
305
+ </tr>
306
+ <tr class="field_contact">
307
+ <th>Area Served</th>
308
+ <td align="left" scope="row">
309
+ <div class="area_served_wrapper">
310
+ <select id="area_served" class="select2" name="area_served[]" multiple="multiple" style="width: 50%">
311
+ <?php
312
+ foreach($schemaModel->countryList() as $country){
313
+ $slt = (in_array($country, $settings['area_served']) ? "selected" : null);
314
+ echo "<option value='$country' $slt>$country</option>";
315
+ }
316
+ ?>
317
+ </select>
318
+ </div>
319
+ </td>
320
+ </tr>
321
+ <tr class="field_contact">
322
+ <th>Available language </th>
323
+ <td scope="row" class="lang">
324
+ <select class="select2" name="availableLanguage" style="width: 50%">
325
+ <?php
326
+ foreach($schemaModel->languageList() as $language){
327
+ $slt = ($language == $settings['availableLanguage'] ? "selected" : null);
328
+ echo "<option value='$language' $slt>$language</option>";
329
+ }
330
+ ?>
331
+ </select>
332
+ </td>
333
+ </tr>
334
+ </table>
335
+ </div>
336
+ </div>
337
+
338
+ <h2>Site Name in Search Results</h2>
339
+ <table width="100%" cellpadding="10" class="form-table">
340
+ <tr class="default">
341
+ <th>Site Name: </th>
342
+ <td align="left" scope="row">
343
+ <input type="text" class="regular-text" name="sitename" value="<?php echo (@$settings['sitename'] ? @$settings['sitename'] : null); ?>" />
344
+ </td>
345
+ </tr>
346
+ <tr class="default">
347
+ <th>Site Alternative Name: </th>
348
+ <td align="left" scope="row">
349
+ <input type="text" class="regular-text" name="siteaname" value="<?php echo (@$settings['siteaname'] ? @$settings['siteaname'] : null); ?>" />
350
+ </td>
351
+ </tr>
352
+ <tr class="default">
353
+ <th>Site Url: </th>
354
+ <td align="left" scope="row">
355
+ <input type="text" class="regular-text" name="siteurl" value="<?php echo (@$settings['siteurl'] ? @$settings['siteurl'] : get_home_url()); ?>" />
356
+ </td>
357
+ </tr>
358
+ </table>
359
+ <p class="submit"><input type="submit" name="submit" id="tlpSaveButton" class="button button-primary" value="<?php _e('Save Changes', KCSEO_WP_SCHEMA_SLUG); ?>"></p>
360
+
361
+ <?php wp_nonce_field( $KcSeoWPSchema->nonceText(), '_kcseo_nonce' ); ?>
362
+ </form>
363
+ <div id="response"></div>
364
+ </div>
readme.txt ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === WP SEO Structured Data Schema ===
2
+ Contributors: kcseopro
3
+ Donate link:
4
+ Tags: seo, schema, structured data, rich snippets, microdata, json-ld, search engine optimization, local seo, google, sitelinks, schema.org, microformat, serp, amp
5
+ Requires at least: 4
6
+ Tested up to: 4.4
7
+ Stable tag: 1.0
8
+ License: GPLv2 or later
9
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
+
11
+ Comprehensive JSON-LD based Structured Data solution for WordPress for adding schema for organizations, businesses, blog posts, ratings & more.
12
+
13
+ == Description ==
14
+
15
+ Structured data and schema are becoming more and more important for search engine optimization. The bad news is that this is pretty complicated stuff and even the most seasoned SEO specialists struggle with the proper implementation of structured data and schema. The good news is that we have created the WordPress SEO Structured Data Schema plugin which enables web designers and business owners a super-easy way to add schema for:
16
+
17
+ * Organizations
18
+ * Local Businesses
19
+ * Articles
20
+ * Blog Postings
21
+ * Events
22
+ * Products
23
+ * Videos
24
+ * Services
25
+ * Ratings
26
+
27
+ We created this plugin after trying dozens of free and premium schema and rich snippet plugins for WordPress. There are some great ones out there for specific kinds of content, but we could not find an easy-to-use, comprehensive JSON-LD plugin that provided features that most business websites need.
28
+ So we made our own.
29
+
30
+ = What is Structured Data & Schema? =
31
+ Structured data adds context to your website content by way of using standardized search engine “vocabulary” at Schema.org. When implemented correctly, structured data increases the chances that search engines like Google will show additional information about your content directly in the search engine results pages (aka SERPs) via “rich snippets”. In other words, if you are searching for a WordPress rich snippet plugin, this may be the one you are looking for….
32
+
33
+ = What is a Rich Snippet? =
34
+ Rich snippets are the extra information that you often see right in the search results, such as:
35
+
36
+ * Star ratings
37
+ * Events and event times
38
+ * Embedded site search box
39
+ * Videos
40
+ * Breadcrumbs
41
+
42
+ In other words, rich snippets are the visible result of structured data that appears in the SERPs.
43
+
44
+ = Does Structured Data Help With SEO? =
45
+ Absolutely! There is no question that structured data that produces rich snippet “bling” that improves SERP click through rates (CTR). Virtually every search engine expert on the planet will tell you that organic click through rates are a major search engine optimization ranking factor. This, structured data has a very high correlation (ie indirect relationship) with search engine rankings.
46
+
47
+ Is there a direct effect on SEO? Maybe. Recent communication from Google indicates that [structured data may become a direct ranking factor in the near future](http://searchengineland.com/google-may-add-structured-markup-data-to-ranking-algorithm-230402).
48
+
49
+ HOWEVER…as with all things on the Internet, it garbage in, garbage out. Just installing this plugin will not do anything for your website unless you use it correctly, and properly and accurately configure the data.
50
+
51
+ = Why JSON-LD? =
52
+ In summary, there are three structured data formats:
53
+
54
+ * **MicroData** (HTML based)
55
+ * **RFDa** (HTML based)
56
+ * **JSON-LD** (Java Script based)
57
+
58
+ We used JSON-LD for many reasons. For one, JSON is less invasive from a coding standpoint. Second, Google can read JSON-LD data that is dynamically injected from Javascript code and embedded widgets. In layman’s terms, JSON is the latest and greatest…it’s where structured data is headed and in our opinion, it should be used to implement structured data on all WordPress websites.
59
+ Read more about [JSON-LD](http://json-ld.org/).
60
+
61
+ = We Follow Google Standards =
62
+ This plugin is modeled and will be updated according to Google guidelines that you will find here:
63
+ [https://developers.google.com/structured-data/](https://developers.google.com/structured-data/ )
64
+
65
+ You can validate structured data on any web page here:
66
+ [https://developers.google.com/structured-data/testing-tool/](https://developers.google.com/structured-data/testing-tool/)
67
+ For more information on the plugin author visit:
68
+
69
+ * [Kansas City SEO®](http://kcseopro.com/)
70
+ * [Twitter](https://twitter.com/kcseopro)
71
+ * [Google+](https://plus.google.com/+Kcseopro-kansas-city-seo)
72
+ * [Phil Singleton](https://www.linkedin.com/in/seokansascity)
73
+ * [Duct Tape Marketing](http://ducttapemarketingconsultant.com/find-certified-consultant/phil-singleton-2/)
74
+
75
+
76
+ == Installation ==
77
+
78
+ 1. Unzip the downloaded 'wp-seo-structured-data-schema' zip file
79
+ 2. Upload the 'wp-seo-structured-data-schema' folder and its contents into the 'wp-content/plugins/' directory of your WordPress installation
80
+ 3. Activate 'wp-seo-structured-data-schema' from Plugins page
81
+
82
+
83
+
84
+ == Frequently Asked Questions ==
85
+
86
+ You'll find the [FAQ on Kcseopro.com](http://kcseopro.com/).
87
+
88
+ == Screenshots ==
89
+
90
+ 01. Single page settings
91
+ 02. Admin global settings
92
+
93
+
94
+ == Changelog ==
95
+
96
+ = 1.0 =
97
+ * Initial load of the plugin.
wp-seo-structured-data-schema.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Plugin Name: WP SEO Structured Data Schema
4
+ Plugin URI: http://kcseopro.com/
5
+ Description: Comprehensive JSON-LD based Structured Data solution for WordPress for adding schema for organizations, businesses, blog posts, ratings & more.
6
+ Version: 1.0
7
+ Author: kcseopro
8
+ Author URI: http://kcseopro.com/
9
+ License: A "Slug" license name e.g. GPL2
10
+ */
11
+ if ( ! defined( 'ABSPATH' ) ) {
12
+ exit;
13
+ }
14
+ define('KCSEO_WP_SCHEMA_SLUG', 'wp-seo-structured-data-schema');
15
+ define('KCSEO_WP_SCHEMA_PATH', dirname(__FILE__));
16
+ define('KCSEO_WP_SCHEMA_URL', plugins_url('', __FILE__));
17
+ define('KCSEO_WP_SCHEMA_LANGUAGE_PATH', dirname( plugin_basename( __FILE__ ) ) . '/languages');
18
+
19
+ require ('lib/init.php');