"),S("#wp_china_yes-codemirror-css").after(e),e.attr({rel:"stylesheet",id:"wp_china_yes-codemirror-"+s.theme+"-css",href:s.cdnURL+"/theme/"+s.theme+".min.css",type:"text/css",media:"all"}),j.vars.code_themes.push(s.theme)),CodeMirror.modeURL=s.cdnURL+"/mode/%N/%N.min.js",CodeMirror.autoLoadMode(n,s.mode),n.on("change",function(e,t){i.val(n.getValue()).trigger("change")}),clearInterval(c))}))})},S.fn.wp_china_yes_field_date=function(){return this.each(function(){var e=S(this),n=e.find("input"),i=e.find(".wp_china_yes-date-settings").data("settings"),i=S.extend({},i,{showAnim:"",beforeShow:function(e,t){S(t.dpDiv).addClass("wp_china_yes-datepicker-wrapper")},onClose:function(e,t){S(t.dpDiv).removeClass("wp_china_yes-datepicker-wrapper")}});2===n.length&&(i=S.extend({},i,{onSelect:function(e){S(this),n.first();var t=n.first().attr("id")===S(this).attr("id")?"minDate":"maxDate",e=S.datepicker.parseDate(i.dateFormat,e);n.not(this).datepicker("option",t,e)}})),n.each(function(){var e=S(this);e.hasClass("hasDatepicker")&&e.removeAttr("id").removeClass("hasDatepicker"),e.datepicker(i)})})},S.fn.wp_china_yes_field_datetime=function(){return this.each(function(){var e=S(this),i=e.find("input"),t=e.find(".wp_china_yes-datetime-settings").data("settings"),t=S.extend({},t,{onReady:function(e,t,n){S(n.calendarContainer).addClass("wp_china_yes-flatpickr")}});2===i.length&&(t=S.extend({},t,{onChange:function(e,t,n){"from"===S(n.element).data("type")?i.last().get(0)._flatpickr.set("minDate",e[0]):i.first().get(0)._flatpickr.set("maxDate",e[0])}})),i.each(function(){S(this).flatpickr(t)})})},S.fn.wp_china_yes_field_fieldset=function(){return this.each(function(){S(this).find(".wp_china_yes-fieldset-content").wp_china_yes_reload_script()})},S.fn.wp_china_yes_field_gallery=function(){return this.each(function(){var s,e=S(this),c=e.find(".wp_china_yes-edit-gallery"),a=e.find(".wp_china_yes-clear-gallery"),r=e.find("ul"),o=e.find("input");e.find("img");e.on("click",".wp_china_yes-button, .wp_china_yes-edit-gallery",function(e){var t=S(this),n=o.val(),t=t.hasClass("wp_china_yes-edit-gallery")?"edit":"add",i="add"!=t||n.length?"gallery-edit":"gallery";e.preventDefault(),void 0!==_.wp&&_.wp.media&&_.wp.media.gallery&&("gallery"==i?(s=_.wp.media({library:{type:"image"},frame:"post",state:"gallery",multiple:!0})).open():(s=_.wp.media.gallery.edit('[gallery ids="'+n+'"]'),"add"==t&&s.setState("gallery-library")),s.on("update",function(e){r.empty();e=e.models.map(function(e){var e=e.toJSON(),t=(e.sizes&&e.sizes.thumbnail&&e.sizes.thumbnail.url?e.sizes.thumbnail:e).url;return r.append('
'),e.id});o.val(e.join(",")).trigger("change"),a.removeClass("hidden"),c.removeClass("hidden")}))}),a.on("click",function(e){e.preventDefault(),r.empty(),o.val("").trigger("change"),a.addClass("hidden"),c.addClass("hidden")})})},S.fn.wp_china_yes_field_group=function(){return this.each(function(){function e(e){e.preventDefault();var t,n,i,s,e=c.children(".wp_china_yes-cloneable-item").length;r.hide(),h&&h')).append(t),s.append(n),s.append(i),c.children().eq(e.index()).after(s),j.helper.name_nested_replace(c.children(".wp_china_yes-cloneable-item"),l),c.accordion("refresh"),c.wp_china_yes_customizer_refresh(),c.wp_china_yes_customizer_listen({closest:!0}),d&&u(c))}function t(e){e.preventDefault(),e=c.children(".wp_china_yes-cloneable-item").length,a.hide(),r.hide(),p&&e-1 .wp_china_yes-cloneable-item > .wp_china_yes-cloneable-title",collapsible:!0,active:!1,animate:!1,heightStyle:"content",icons:{header:"wp_china_yes-cloneable-header-icon fas fa-angle-right",activeHeader:"wp_china_yes-cloneable-header-icon fas fa-angle-down"},activate:function(e,t){var i,s,n=t.newPanel,t=t.newHeader;n.length&&!n.data("opened")?(i=t.find(".wp_china_yes-cloneable-value"),s=[],S.each(o,function(e,t){s.push(n.find('[data-depend-id="'+t+'"]'))}),S.each(s,function(e,t){t.on("change keyup wp_china_yes.keyup",function(){var n=[];S.each(s,function(e,t){t=t.val();t&&n.push(t)}),n.length&&i.text(n.join(f))}).trigger("wp_china_yes.keyup")}),n.wp_china_yes_reload_script(),n.data("opened",!0),n.data("retry",!1)):n.data("retry")&&(n.wp_china_yes_reload_script_retry(),n.data("retry",!1))}}),c.sortable({axis:"y",handle:".wp_china_yes-cloneable-title,.wp_china_yes-cloneable-sort",helper:"original",cursor:"move",placeholder:"widget-placeholder",start:function(e,t){c.accordion({active:!1}),c.sortable("refreshPositions"),t.item.children(".wp_china_yes-cloneable-content").data("retry",!0)},update:function(e,t){j.helper.name_nested_replace(c.children(".wp_china_yes-cloneable-item"),l),c.wp_china_yes_customizer_refresh(),d&&u(c)}}),i.children(".wp_china_yes-cloneable-add").on("click",function(e){e.preventDefault();var t=c.children(".wp_china_yes-cloneable-item").length;r.hide(),h&&hOpenStreetMap contributors'}).addTo(a),r=L.marker(c.center,{draggable:!0}).addTo(a),o=function(e){n.val(e.lat),i.val(e.lng),s.val(a.getZoom())},a.on("click",function(e){r.setLatLng(e.latlng),o(e.latlng)}),a.on("zoom",function(){o(r.getLatLng())}),r.on("drag",function(){o(r.getLatLng())}),t.length||(t=S('[data-depend-id="'+e.find(".wp_china_yes--address-field").data("address-field")+'"]')),f={},t.autocomplete({source:function(e,t){var n=e.term;n in f?t(f[n]):S.get("https://nominatim.openstreetmap.org/search",{format:"json",q:n},function(e){e=e.length?e.map(function(e){return{value:e.display_name,label:e.display_name,lat:e.lat,lon:e.lon}},"json"):[{value:"no-data",label:"No Results."}];f[n]=e,t(e)})},select:function(e,t){if("no-data"===t.item.value)return!1;t=L.latLng(t.item.lat,t.item.lon);a.panTo(t),r.setLatLng(t),o(t)},create:function(e,t){S(this).autocomplete("widget").addClass("wp_china_yes-map-ui-autocomplate")}}),n.on("change",l=function(){var e=L.latLng(n.val(),i.val());a.panTo(e),r.setLatLng(e)}),i.on("change",l))})},S.fn.wp_china_yes_field_link=function(){return this.each(function(){var i=S(this),e=i.find(".wp_china_yes--link"),s=i.find(".wp_china_yes--add"),c=i.find(".wp_china_yes--edit"),a=i.find(".wp_china_yes--remove"),r=i.find(".wp_china_yes--result"),t=j.helper.uid("wp_china_yes-wplink-textarea-");s.on("click",function(e){e.preventDefault(),_.wpLink.open(t)}),c.on("click",function(e){e.preventDefault(),s.trigger("click"),S("#wp-link-url").val(i.find(".wp_china_yes--url").val()),S("#wp-link-text").val(i.find(".wp_china_yes--text").val()),S("#wp-link-target").prop("checked","_blank"===i.find(".wp_china_yes--target").val())}),a.on("click",function(e){e.preventDefault(),i.find(".wp_china_yes--url").val("").trigger("change"),i.find(".wp_china_yes--text").val(""),i.find(".wp_china_yes--target").val(""),s.removeClass("hidden"),c.addClass("hidden"),a.addClass("hidden"),r.parent().addClass("hidden")}),e.attr("id",t).on("change",function(){var e=_.wpLink.getAttrs(),t=e.href,n=S("#wp-link-text").val(),e=e.target||"";i.find(".wp_china_yes--url").val(t).trigger("change"),i.find(".wp_china_yes--text").val(n),i.find(".wp_china_yes--target").val(e),r.html('{url:"'+t+'", text:"'+n+'", target:"'+e+'"}'),s.addClass("hidden"),c.removeClass("hidden"),a.removeClass("hidden"),r.parent().removeClass("hidden")})})},S.fn.wp_china_yes_field_media=function(){return this.each(function(){var n,i=S(this),s=i.find(".wp_china_yes--button"),c=i.find(".wp_china_yes--remove"),a=s.data("library")&&s.data("library").split(",")||"",r=!!i.hasClass("wp_china_yes-assign-field-background")&&i.closest(".wp_china_yes-field-background").find(".wp_china_yes--auto-attributes");s.on("click",function(e){e.preventDefault(),void 0!==_.wp&&_.wp.media&&_.wp.media.gallery&&(n||(n=_.wp.media({library:{type:a}})).on("select",function(){var e=n.state().get("selection").first().attributes,t=s.data("preview-size")||"thumbnail";a.length&&-1===a.indexOf(e.subtype)&&-1===a.indexOf(e.type)||(i.find(".wp_china_yes--id").val(e.id),i.find(".wp_china_yes--width").val(e.width),i.find(".wp_china_yes--height").val(e.height),i.find(".wp_china_yes--alt").val(e.alt),i.find(".wp_china_yes--title").val(e.title),i.find(".wp_china_yes--description").val(e.description),t=void 0!==e.sizes&&void 0!==e.sizes.thumbnail&&"thumbnail"===t?e.sizes.thumbnail.url:void 0!==e.sizes&&void 0!==e.sizes.full?e.sizes.full.url:"image"===e.type?e.url:e.icon,r&&r.removeClass("wp_china_yes--attributes-hidden"),c.removeClass("hidden"),i.find(".wp_china_yes--preview").removeClass("hidden"),i.find(".wp_china_yes--src").attr("src",t),i.find(".wp_china_yes--thumbnail").val(t),i.find(".wp_china_yes--url").val(e.url).trigger("change"))}),n.open())}),c.on("click",function(e){e.preventDefault(),r&&r.addClass("wp_china_yes--attributes-hidden"),c.addClass("hidden"),i.find("input").val(""),i.find(".wp_china_yes--preview").addClass("hidden"),i.find(".wp_china_yes--url").trigger("change")})})},S.fn.wp_china_yes_field_repeater=function(){return this.each(function(){function e(e){e.preventDefault();var t,n,i,e=s.children(".wp_china_yes-repeater-item").length;r.hide(),f&&f')).append(t),i.append(n),s.children().eq(e.index()).after(i),i.children(".wp_china_yes-repeater-content").wp_china_yes_reload_script(),j.helper.name_nested_replace(s.children(".wp_china_yes-repeater-item"),o),s.wp_china_yes_customizer_refresh(),s.wp_china_yes_customizer_listen({closest:!0}))}function t(e){e.preventDefault(),e=s.children(".wp_china_yes-repeater-item").length,a.hide(),r.hide(),l&&e-1'+i.unit+"")},spin:function(e,t){n.val(t.value).trigger("change")}})})},S.fn.wp_china_yes_field_switcher=function(){return this.each(function(){var n=S(this).find(".wp_china_yes--switcher");n.on("click",function(){var e=0,t=n.find("input");n.hasClass("wp_china_yes--active")?n.removeClass("wp_china_yes--active"):(e=1,n.addClass("wp_china_yes--active")),t.val(e).trigger("change")})})},S.fn.wp_china_yes_field_tabbed=function(){return this.each(function(){var e=S(this),t=e.find(".wp_china_yes-tabbed-nav a"),n=e.find(".wp_china_yes-tabbed-content");n.eq(0).wp_china_yes_reload_script(),t.on("click",function(e){e.preventDefault();var e=S(this),t=e.index(),t=n.eq(t);e.addClass("wp_china_yes-tabbed-active").siblings().removeClass("wp_china_yes-tabbed-active"),t.wp_china_yes_reload_script(),t.removeClass("hidden").siblings().addClass("hidden")})})},S.fn.wp_china_yes_field_typography=function(){return this.each(function(){var x=this,z=S(this),i=[],D=wp_china_yes_typography_json.webfonts,t=wp_china_yes_typography_json.googlestyles,O=wp_china_yes_typography_json.defaultstyles;x.sanitize_subset=function(e){return e=(e=e.replace("-ext"," Extended")).charAt(0).toUpperCase()+e.slice(1)},x.sanitize_style=function(e){return t[e]||e},x.load_google_font=function(e,t,n){e&&"object"==typeof WebFont&&(t=t?t.replace("normal",""):"",n=n?n.replace("normal",""):"",-1===i.indexOf(e=t||n?e+":"+t+n:e)&&WebFont.load({google:{families:[e]}}),i.push(e))},x.append_select_options=function(e,t,s,c,a){e.find("option").not(":first").remove();var r="";S.each(t,function(e,t){var n=t,i=a?s&&-1!==s.indexOf(t)?" selected":"":s&&s===t?" selected":"";"subset"===c?n=x.sanitize_subset(t):"style"===c&&(n=x.sanitize_style(t)),r+='"}),e.append(r).trigger("wp_china_yes.change").trigger("chosen:updated")},x.init=function(){var c,a,r,o,f,l,d,h,g,p=[],e=z.find(".wp_china_yes--typography"),u=z.find(".wp_china_yes--type"),v=z.find(".wp_china_yes--block-font-style"),m=e.data("unit"),_=e.data("line-height-unit"),t=e.data("exclude")?e.data("exclude").split(","):[],b=(z.find(".wp_china_yes--chosen").length&&z.find("select").each(function(){var e=S(this),t=e.parent().find(".chosen-container");t.length&&t.remove(),e.chosen({allow_single_deselect:!0,disable_search_threshold:15,width:"100%"})}),z.find(".wp_china_yes--font-family")),i=b.val(),s=(b.find("option").not(":first-child").remove(),""),y=(S.each(D,function(n,e){t&&-1!==t.indexOf(n)||(s+='")}),b.append(s).trigger("chosen:updated"),z.find(".wp_china_yes--block-font-style")),w=(y.length&&(c=z.find(".wp_china_yes--font-style-select"),a=c.val()?c.val().replace(/normal/g,""):"",c.on("change wp_china_yes.change",function(e){var t=c.val(),n=(t=!t&&p&&-1===p.indexOf("normal")?p[0]:t)&&"italic"!==t&&"normal"===t?"normal":"",n=t&&"italic"!==t&&"normal"!==t?t.replace("italic",""):n,t=t&&"italic"===t.substr(-6)?"italic":"";z.find(".wp_china_yes--font-weight").val(n),z.find(".wp_china_yes--font-style").val(t)}),(r=z.find(".wp_china_yes--block-extra-styles")).length&&(o=z.find(".wp_china_yes--extra-styles"),f=o.val())),z.find(".wp_china_yes--block-subset")),C=(w.length&&(l=z.find(".wp_china_yes--subset"),d=l.val(),h=l.data("multiple")||!1),z.find(".wp_china_yes--block-backup-font-family")),k=(b.on("change wp_china_yes.change",function(e){w.length&&w.addClass("hidden"),r.length&&r.addClass("hidden"),C.length&&C.addClass("hidden");var t,n,i=b.find(":selected"),s=i.val(),i=i.data("type");i&&s?("google"!==i&&"custom"!==i||!C.length||C.removeClass("hidden"),y.length&&(n=O,"google"===i&&D[i].fonts[s][0]?n=D[i].fonts[s][0]:"custom"===i&&D[i].fonts[s]&&(n=D[i].fonts[s]),t=-1!==(p=n).indexOf("normal")?"normal":n[0],t=a&&-1!==n.indexOf(a)?a:t,x.append_select_options(c,n,t,"style"),a=!1,y.removeClass("hidden"),"google"===i&&r.length&&1!',S.each(e.errors,function(e,t){var e=S('[data-depend-id="'+e+'"]'),n=S('a[href="#tab='+e.closest(".wp_china_yes-section").data("section-id")+'"]'),i=n.closest(".wp_china_yes-tab-item");e.closest(".wp_china_yes-fieldset").append(''+t+"
"),n.find(".wp_china_yes-error").length||n.append(s),i.find(".wp_china_yes-arrow .wp_china_yes-error").length||i.find(".wp_china_yes-arrow").append(s)})),a.removeClass("wp_china_yes-saving"),c.prop("disabled",!1).attr("value",n),r=!1,j.vars.form_modified=!1,j.vars.$form_warning.hide(),clearTimeout(i);var s,t=S(".wp_china_yes-form-success");t.empty().append(e.notice).fadeIn("fast",function(){i=setTimeout(function(){t.fadeOut("fast")},1e3)})}).fail(function(e){alert(e.error)})):j.vars.form_modified=!1),r=!0})})},S.fn.wp_china_yes_options=function(){return this.each(function(){var e=S(this),t=e.find(".wp_china_yes-content"),n=e.find(".wp_china_yes-form-success"),i=e.find(".wp_china_yes-form-warning"),s=e.find(".wp_china_yes-header .wp_china_yes-save");(j.vars.$form_warning=i).length&&(_.onbeforeunload=function(){return!!j.vars.form_modified||y},t.on("change keypress",":input",function(){j.vars.form_modified||(n.hide(),i.fadeIn("fast"),j.vars.form_modified=!0)})),n.hasClass("wp_china_yes-form-show")&&setTimeout(function(){n.fadeOut("fast")},1e3),S(b).keydown(function(e){if((e.ctrlKey||e.metaKey)&&83===e.which)return s.trigger("click"),e.preventDefault(),!1})})},S.fn.wp_china_yes_taxonomy=function(){return this.each(function(){var e,t,n=S(this),i=n.parents("form");"addtag"===i.attr("id")&&(e=i.find("#submit"),t=n.children(".wp_china_yes-field").wp_china_yes_clone(),e.on("click",function(){i.find(".form-required").hasClass("form-invalid")||(n.data("inited",!1),n.empty(),n.html(t),t=t.wp_china_yes_clone(),n.wp_china_yes_reload_script())}))})},S.fn.wp_china_yes_shortcode=function(){var m=this;return m.shortcode_parse=function(e,n){var i="";return S.each(e,function(e,t){i+="["+(n=n||e),S.each(t,function(e,t){"content"===e?i=(i+="]")+t+"[/"+n:i+=m.shortcode_tags(e,t)}),i+="]"}),i},m.shortcode_tags=function(e,t){var n="";return""!==t&&("object"!=typeof t||S.isArray(t)?n+=" "+e+'="'+t.toString()+'"':S.each(t,function(e,t){""!==(t="background-image"===e?t.url||"":t)&&(n+=" "+e+'="'+t.toString()+'"')})),n},m.insertAtChars=function(e,t){e=void 0!==e[0].name?e[0]:e;return e.value.length&&void 0!==e.selectionStart?(e.focus(),e.value.substring(0,e.selectionStart)+t+e.value.substring(e.selectionEnd,e.value.length)):(e.focus(),t)},m.send_to_editor=function(e,t){var n;(n="undefined"!=typeof tinymce?tinymce.get(t):n)&&!n.isHidden()?n.execCommand("mceInsertContent",!1,e):(n=S("#"+t)).val(m.insertAtChars(n,e)).trigger("change")},this.each(function(){var s,c,a,n,r,o,f,i,l,d=S(this),h=d.find(".wp_china_yes-modal-load"),p=(d.find(".wp_china_yes-modal-content"),d.find(".wp_china_yes-modal-insert")),u=d.find(".wp_china_yes-modal-loading"),t=d.find("select"),g=d.data("modal-id"),v=d.data("nonce");S(b).on("click",'.wp_china_yes-shortcode-button[data-modal-id="'+g+'"]',function(e){e.preventDefault(),l=S(this),s=l.data("editor-id")||!1,c=l.data("target-id")||!1,a=l.data("gutenberg-id")||!1,d.removeClass("hidden"),d.hasClass("wp_china_yes-shortcode-single")&&r===y&&t.trigger("change")}),t.on("change",function(){var e=S(this),t=e.find(":selected");n=e.val(),r=t.data("shortcode"),o=t.data("view")||"normal",f=t.data("group")||r,h.empty(),n?(u.show(),_.wp.ajax.post("wp_china_yes-get-shortcode-"+g,{shortcode_key:n,nonce:v}).done(function(e){u.hide();e=S(e.content).appendTo(h);p.parent().removeClass("hidden"),i=e.find(".wp_china_yes--repeat-shortcode").wp_china_yes_clone(),e.wp_china_yes_reload_script(),e.find(".wp_china_yes-fields").wp_china_yes_reload_script()})):p.parent().addClass("hidden")}),p.on("click",function(e){if(e.preventDefault(),!p.prop("disabled")&&!p.attr("disabled")){var n="",t=d.find(".wp_china_yes-field:not(.wp_china_yes-depend-on)").find(":input:not(.ignore)").serializeObjectWP_CHINA_YES();switch(o){case"contents":var i=r?t[r]:t;S.each(i,function(e,t){e=r||e;n+="["+e+"]"+t+"[/"+e+"]"});break;case"group":n+="["+r,S.each(t[r],function(e,t){n+=m.shortcode_tags(e,t)}),n=(n=(n+="]")+m.shortcode_parse(t[f],f))+("[/"+r+"]");break;case"repeater":n+=m.shortcode_parse(t[f],f);break;default:n+=m.shortcode_parse(t)}n=""===n?"["+r+"]":n,a?(e=_.wp_china_yes_gutenberg_props.attributes.hasOwnProperty("shortcode")?_.wp_china_yes_gutenberg_props.attributes.shortcode:"",_.wp_china_yes_gutenberg_props.setAttributes({shortcode:e+n})):s?m.send_to_editor(n,s):(e=c?S(c):l.parent().find("textarea")).val(m.insertAtChars(e,n)).trigger("change"),d.addClass("hidden")}}),d.on("click",".wp_china_yes--repeat-button",function(e){e.preventDefault();var e=d.find(".wp_china_yes--repeatable"),t=i.wp_china_yes_clone(),n=t.find(".wp_china_yes-repeat-remove");t.appendTo(e);t.find(".wp_china_yes-fields").wp_china_yes_reload_script(),j.helper.name_nested_replace(d.find(".wp_china_yes--repeat-shortcode"),f),n.on("click",function(){t.remove(),j.helper.name_nested_replace(d.find(".wp_china_yes--repeat-shortcode"),f)})}),d.on("click",".wp_china_yes-modal-close, .wp_china_yes-modal-overlay",function(){d.addClass("hidden")})})},"function"==typeof Color&&(Color.prototype.toString=function(){if(this._alpha<1)return this.toCSS("rgba",this._alpha).replace(/\s+/g,"");var e=parseInt(this._color,10).toString(16);if(this.error)return"";if(e.length<6)for(var t=6-e.length-1;0<=t;t--)e="0"+e;return"#"+e}),j.funcs.parse_color=function(e){var e=e.replace(/\s+/g,""),t=-1!==e.indexOf("rgba")?parseFloat(100*e.replace(/^.*,(.+)\)/,"$1")):100;return{value:e,transparent:t,rgba:t<100}},S.fn.wp_china_yes_color=function(){return this.each(function(){var a,r=S(this),n=j.funcs.parse_color(r.val()),e=!_.wp_china_yes_vars.color_palette.length||_.wp_china_yes_vars.color_palette;r.hasClass("wp-color-picker")&&r.closest(".wp-picker-container").after(r).remove(),r.wpColorPicker({palettes:e,change:function(e,t){t=t.color.toString();a.removeClass("wp_china_yes--transparent-active"),a.find(".wp_china_yes--transparent-offset").css("background-color",t),r.val(t).trigger("change")},create:function(){a=r.closest(".wp-picker-container");var i=r.data("a8cIris"),e=S('').appendTo(a.find(".wp-picker-holder")),s=e.find(".wp_china_yes--transparent-slider"),c=e.find(".wp_china_yes--transparent-text"),t=e.find(".wp_china_yes--transparent-offset"),e=e.find(".wp_china_yes--transparent-button");"transparent"===r.val()&&a.addClass("wp_china_yes--transparent-active"),e.on("click",function(){"transparent"!==r.val()?(r.val("transparent").trigger("change").removeClass("iris-error"),a.addClass("wp_china_yes--transparent-active")):(r.val(i._color.toString()).trigger("change"),a.removeClass("wp_china_yes--transparent-active"))}),s.slider({value:n.transparent,step:1,min:0,max:100,slide:function(e,t){t=parseFloat(t.value/100);i._color._alpha=t,r.wpColorPicker("color",i._color.toString()),c.text(1===t||0===t?"":t)},create:function(){var e=parseFloat(n.transparent/100);c.text(e<1?e:""),t.css("background-color",n.value),a.on("click",".wp-picker-clear",function(){i._color._alpha=1,c.text(""),s.slider("option","value",100),a.removeClass("wp_china_yes--transparent-active"),r.trigger("change")}),a.on("click",".wp-picker-default",function(){var e=j.funcs.parse_color(r.data("default-color")),t=parseFloat(e.transparent/100),n=t<1?t:"";i._color._alpha=t,c.text(n),s.slider("option","value",e.transparent),"transparent"===e.value&&(r.removeClass("iris-error"),a.addClass("wp_china_yes--transparent-active"))})}})}})})},S.fn.wp_china_yes_chosen=function(){return this.each(function(){var n,c,a=S(this),e=a.parent().find(".chosen-container"),t=a.hasClass("wp_china_yes-chosen-sortable")||!1,i=a.hasClass("wp_china_yes-chosen-ajax")||!1,s=a.attr("multiple")||!1,r=S.extend({allow_single_deselect:!0,disable_search_threshold:10,width:s?"100%":"auto",no_results_text:_.wp_china_yes_vars.i18n.no_results_text},a.data("chosen-settings"));e.length&&e.remove(),i?(e=S.extend({data:{type:"post",nonce:""},allow_single_deselect:!0,disable_search_threshold:-1,width:"100%",min_length:3,type_delay:500,typing_text:_.wp_china_yes_vars.i18n.typing_text,searching_text:_.wp_china_yes_vars.i18n.searching_text,no_results_text:_.wp_china_yes_vars.i18n.no_results_text},a.data("chosen-settings")),a.WP_CHINA_YESAjaxChosen(e)):a.chosen(r),s&&(i=(n=a.parent().find(".wp_china_yes-hide-select")).val()||[],a.on("change",function(e,t){t&&t.selected?n.append('"):t&&t.deselected&&n.find('option[value="'+t.deselected+'"]').remove(),_.wp.customize!==y&&0===n.children().length&&n.data("customize-setting-link")&&_.wp.customize.control(n.data("customize-setting-link")).setting.set(""),n.trigger("change")}),a.WP_CHINA_YESChosenOrder(i,!0)),t&&((c=a.parent().find(".chosen-container").find(".chosen-choices")).bind("mousedown",function(e){S(e.target).is("span")&&e.stopPropagation()}),c.sortable({items:"li:not(.search-field)",helper:"orginal",cursor:"move",placeholder:"search-choice-placeholder",start:function(e,t){t.placeholder.width(t.item.innerWidth()),t.placeholder.height(t.item.innerHeight())},update:function(e,t){var i="",s=a.data("chosen"),n=a.parent().find(".wp_china_yes-hide-select");c.find(".search-choice-close").each(function(){var n=S(this).data("option-array-index");S.each(s.results_data,function(e,t){t.array_index===n&&(i+='")})}),n.children().remove(),n.append(i),n.trigger("change")}}))})},S.fn.wp_china_yes_checkbox=function(){return this.each(function(){var e=S(this),t=e.find(".wp_china_yes--input"),n=e.find(".wp_china_yes--checkbox");n.on("click",function(){t.val(Number(n.prop("checked"))).trigger("change")})})},S.fn.wp_china_yes_checkbox_all=function(){return this.each(function(){var n=S(this);n.on("click",function(){var e=n.closest(".wp_china_yes-field-checkbox").find(":input"),t=!1;e.each(function(){S(this).prop("checked")||(t=!0)}),t?(e.prop("checked","checked"),e.attr("checked","checked")):(e.prop("checked",""),e.removeAttr("checked")),e.first().trigger("change")})})},S.fn.wp_china_yes_siblings=function(){return this.each(function(){var t=S(this),e=t.find(".wp_china_yes--sibling"),n=t.data("multiple")||!1;e.on("click",function(){var e=S(this);n?e.hasClass("wp_china_yes--active")?(e.removeClass("wp_china_yes--active"),e.find("input").prop("checked",!1).trigger("change")):(e.addClass("wp_china_yes--active"),e.find("input").prop("checked",!0).trigger("change")):(t.find("input").prop("checked",!1),e.find("input").prop("checked",!0).trigger("change"),e.addClass("wp_china_yes--active").siblings().removeClass("wp_china_yes--active"))})})},S.fn.wp_china_yes_help=function(){return this.each(function(){var e,t,n=S(this);n.on({mouseenter:function(){e=S('').html(n.find(".wp_china_yes-help-text").html()).appendTo("body"),t=j.vars.is_rtl?n.offset().left+24:n.offset().left-e.outerWidth(),e.css({top:n.offset().top-(e.outerHeight()/2-14),left:t})},mouseleave:function(){e!==y&&e.remove()}})})},S.fn.wp_china_yes_customizer_refresh=function(){return this.each(function(){var e=S(this),t=e.closest(".wp_china_yes-customize-complex");if(t.length){var n=t.data("unique-id");if(n===y)return;var i=t.find(":input"),t=t.data("option-id"),i=i.serializeObjectWP_CHINA_YES(),i=!S.isEmptyObject(i)&&i[n]&&i[n][t]?i[n][t]:"",n=_.wp.customize.control(n+"["+t+"]");n.setting._value=null,n.setting.set(i)}else e.find(":input").first().trigger("change");S(b).trigger("wp_china_yes-customizer-refresh",e)})},S.fn.wp_china_yes_customizer_listen=function(e){var s=S.extend({closest:!1},e);return this.each(function(){var t,e,n,i;_.wp.customize!==y&&(e=(t=s.closest?S(this).closest(".wp_china_yes-customize-complex"):S(this)).find(":input"),n=t.data("unique-id"),i=t.data("option-id"),n!==y&&e.on("change keyup wp_china_yes.change",function(){var e=t.find(":input").serializeObjectWP_CHINA_YES(),e=!S.isEmptyObject(e)&&e[n]&&e[n][i]?e[n][i]:"";_.wp.customize.control(n+"["+i+"]").setting.set(e)}))})},S(b).on("expanded",".control-section",function(){var e,t,n=S(this);n.hasClass("open")&&!n.data("inited")&&(e=n.find(".wp_china_yes-customize-field"),t=n.find(".wp_china_yes-customize-complex"),e.length&&(n.wp_china_yes_dependency(),e.wp_china_yes_reload_script({dependency:!1}),t.wp_china_yes_customizer_listen()),n.data("inited",!0))}),j.vars.$window.on("resize wp_china_yes.resize",j.helper.debounce(function(e){(-1",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},fe={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){e%=100;if(3Math.min(t,n)&&en)&&(p.amPM.textContent=p.l10n.amPM[_e(p.amPM.textContent===p.l10n.amPM[0])]),t.value=pe(s)));var t,n,i,o,s,r,a=p._input.value;u(),T(),p._input.value!==a&&p._debouncedChange()}function u(){var e,t,n,i,o,s;void 0!==p.hourElement&&void 0!==p.minuteElement&&(o=(parseInt(p.hourElement.value.slice(-2),10)||0)%24,e=(parseInt(p.minuteElement.value,10)||0)%60,t=void 0!==p.secondElement?(parseInt(p.secondElement.value,10)||0)%60:0,void 0!==p.amPM&&(n=o,i=p.amPM.textContent,o=n%12+12*_e(i===p.l10n.amPM[1])),n=void 0!==p.config.minTime||p.config.minDate&&p.minDateHasTime&&p.latestSelectedDateObj&&0===Ee(p.latestSelectedDateObj,p.config.minDate,!0),(void 0!==p.config.maxTime||p.config.maxDate&&p.maxDateHasTime&&p.latestSelectedDateObj&&0===Ee(p.latestSelectedDateObj,p.config.maxDate,!0))&&(i=void 0!==p.config.maxTime?p.config.maxTime:p.config.maxDate,(e=(o=Math.min(o,i.getHours()))===i.getHours()?Math.min(e,i.getMinutes()):e)===i.getMinutes()&&(t=Math.min(t,i.getSeconds()))),n&&(s=void 0!==p.config.minTime?p.config.minTime:p.config.minDate,(e=(o=Math.max(o,s.getHours()))===s.getHours()&&ep.now?p.config.minDate:p.config.maxDate&&p.config.maxDate"+p.config.getWeek(t)+""),k("onDayCreate",s),s}function _(e){e.focus(),"range"===p.config.mode&&K(e)}function m(e){for(var t=0=Math.abs(o))return void _(f)}p.changeMonth(a),g(m(a),0)}else _(e)}function f(){if(void 0!==p.daysContainer){be(p.daysContainer),p.weekNumbers&&be(p.weekNumbers);for(var e=document.createDocumentFragment(),t=0;tp.config.maxDate.getMonth()||((e=ye("option","flatpickr-monthDropdown-month")).value=new Date(p.currentYear,t).getMonth().toString(),e.textContent=Ce(t,p.config.shorthandCurrentMonth,p.l10n),e.tabIndex=-1,p.currentMonth===t&&(e.selected=!0),p.monthsDropdownContainer.appendChild(e))}}function q(){be(p.monthNav),p.monthNav.appendChild(p.prevMonthNav),p.config.showMonths&&(p.yearElements=[],p.monthElements=[]);for(var e,t,n,i,o,s=p.config.showMonths;s--;){o=i=r=n=t=e=void 0,e=ye("div","flatpickr-month"),t=window.document.createDocumentFragment(),n=1\n "+t.join("")+"\n \n "}}function y(e,t){t=(t=void 0===t?!0:t)?e:e-p.currentMonth;t<0&&!0===p._hidePrevMonthArrow||0p.config.maxDate.getFullYear()||(t=p.currentYear!==e,p.currentYear=e||p.currentYear,p.config.maxDate&&p.currentYear===p.config.maxDate.getFullYear()?p.currentMonth=Math.min(p.config.maxDate.getMonth(),p.currentMonth):p.config.minDate&&p.currentYear===p.config.minDate.getFullYear()&&(p.currentMonth=Math.max(p.config.minDate.getMonth(),p.currentMonth)),t&&(p.redraw(),k("onYearChange"),v()))}function D(e,t){var n=p.parseDate(e,void 0,t=void 0===t?!0:t);if(p.config.minDate&&n&&Ee(n,p.config.minDate,void 0!==t?t:!p.minDateHasTime)<0||p.config.maxDate&&n&&0=a.from.getTime()&&n.getTime()<=a.to.getTime())return o}return!o}function C(e){return void 0!==p.daysContainer&&(-1===e.className.indexOf("hidden")&&-1===e.className.indexOf("flatpickr-disabled")&&p.daysContainer.contains(e))}function U(e){e.target===p._input&&(0n,o=window.pageYOffset+t.top+(s?-n-2:e.offsetHeight+2),ve(p.calendarContainer,"arrowTop",!s),ve(p.calendarContainer,"arrowBottom",s),p.config.inline||(n=window.pageXOffset+t.left,s=e=!1,"center"===i?(n-=(r-t.width)/2,e=!0):"right"===i&&(n-=r-t.width,s=!0),ve(p.calendarContainer,"arrowLeft",!e&&!s),ve(p.calendarContainer,"arrowCenter",e),ve(p.calendarContainer,"arrowRight",s),i=window.document.body.offsetWidth-(window.pageXOffset+t.right),e=n+r>window.document.body.offsetWidth,s=i+r>window.document.body.offsetWidth,ve(p.calendarContainer,"rightMost",e),p.config.static||(p.calendarContainer.style.top=o+"px",e?s?void 0!==(o=function(){for(var e=null,t=0;tp.currentMonth+p.config.showMonths-1)&&"range"!==p.config.mode,p.selectedDateElem=e,"single"===p.config.mode?p.selectedDates=[n]:"multiple"===p.config.mode?(i=oe(n))?p.selectedDates.splice(parseInt(i),1):p.selectedDates.push(n):"range"===p.config.mode&&(2===p.selectedDates.length&&p.clear(!1,!1),p.latestSelectedDateObj=n,p.selectedDates.push(n),0!==Ee(n,p.selectedDates[0],!0)&&p.selectedDates.sort(function(e,t){return e.getTime()-t.getTime()})),u(),t&&(i=p.currentYear!==n.getFullYear(),p.currentYear=n.getFullYear(),p.currentMonth=n.getMonth(),i&&(k("onYearChange"),v()),k("onMonthChange")),E(),f(),T(),t||"range"===p.config.mode||1!==p.config.showMonths?void 0!==p.selectedDateElem&&void 0===p.hourElement&&p.selectedDateElem&&p.selectedDateElem.focus():_(e),void 0!==p.hourElement&&void 0!==p.hourElement&&p.hourElement.focus(),p.config.closeOnSelect&&(n="single"===p.config.mode&&!p.config.enableTime,i="range"===p.config.mode&&2===p.selectedDates.length&&!p.config.enableTime,(n||i)&&Z()),o())}p.parseDate=ke({config:p.config,l10n:p.l10n}),p._handlers=[],p.pluginElements=[],p.loadedPlugins=[],p._bind=a,p._setHoursFromDate=i,p._positionCalendar=x,p.changeMonth=y,p.changeYear=w,p.clear=function(e,t){void 0===e&&(e=!0);void 0===t&&(t=!0);p.input.value="",void 0!==p.altInput&&(p.altInput.value="");void 0!==p.mobileInput&&(p.mobileInput.value="");p.selectedDates=[],!(p.latestSelectedDateObj=void 0)===t&&(p.currentYear=p._initialDate.getFullYear(),p.currentMonth=p._initialDate.getMonth());{var n,i;!0===p.config.enableTime&&(t=Se(p.config),n=t.hours,i=t.minutes,t=t.seconds,r(n,i,t))}p.redraw(),e&&k("onChange")},p.close=function(){p.isOpen=!1,p.isMobile||(void 0!==p.calendarContainer&&p.calendarContainer.classList.remove("open"),void 0!==p._input&&p._input.classList.remove("active"));k("onClose")},p._createElement=ye,p.destroy=function(){void 0!==p.config&&k("onDestroy");for(var e=p._handlers.length;e--;)p._handlers[e].remove();if(p._handlers=[],p.mobileInput)p.mobileInput.parentNode&&p.mobileInput.parentNode.removeChild(p.mobileInput),p.mobileInput=void 0;else if(p.calendarContainer&&p.calendarContainer.parentNode)if(p.config.static&&p.calendarContainer.parentNode){var t=p.calendarContainer.parentNode;if(t.lastChild&&t.removeChild(t.lastChild),t.parentNode){for(;t.firstChild;)t.parentNode.insertBefore(t.firstChild,t);t.parentNode.removeChild(t)}}else p.calendarContainer.parentNode.removeChild(p.calendarContainer);p.altInput&&(p.input.type="text",p.altInput.parentNode&&p.altInput.parentNode.removeChild(p.altInput),delete p.altInput);p.input&&(p.input.type=p.input._type,p.input.classList.remove("flatpickr-input"),p.input.removeAttribute("readonly"));["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach(function(e){try{delete p[e]}catch(e){}})},p.isEnabled=D,p.jumpToDate=s,p.open=function(e,t){void 0===t&&(t=p._positionElement);var n;!0===p.isMobile?(e&&(e.preventDefault(),(n=De(e))&&n.blur()),void 0!==p.mobileInput&&(p.mobileInput.focus(),p.mobileInput.click()),k("onOpen")):p._input.disabled||p.config.inline||(n=p.isOpen,p.isOpen=!0,n||(p.calendarContainer.classList.add("open"),p._input.classList.add("active"),k("onOpen"),x(t)),!0!==p.config.enableTime||!0!==p.config.noCalendar||!1!==p.config.allowInput||void 0!==e&&p.timeContainer.contains(e.relatedTarget)||setTimeout(function(){return p.hourElement.select()},50))},p.redraw=X,p.set=function(e,t){if(null!==e&&"object"==typeof e)for(var n in Object.assign(p.config,e),e)void 0!==M[n]&&M[n].forEach(function(e){return e()});else p.config[e]=t,void 0!==M[e]?M[e].forEach(function(e){return e()}):-1p.config.maxDate.getMonth():p.currentYear>p.config.maxDate.getFullYear()))}function se(t){return p.selectedDates.map(function(e){return p.formatDate(e,t)}).filter(function(e,t,n){return"range"!==p.config.mode||p.config.enableTime||n.indexOf(e)===t}).join("range"!==p.config.mode?p.config.conjunction:p.l10n.rangeSeparator)}function T(e){void 0===e&&(e=!0),void 0!==p.mobileInput&&p.mobileFormatStr&&(p.mobileInput.value=void 0!==p.latestSelectedDateObj?p.formatDate(p.latestSelectedDateObj,p.mobileFormatStr):""),p.input.value=se(p.config.dateFormat),void 0!==p.altInput&&(p.altInput.value=se(p.config.altFormat)),!1!==e&&k("onValueUpdate")}function re(e){var e=De(e),t=p.prevMonthNav.contains(e),n=p.nextMonthNav.contains(e);t||n?y(t?-1:1):0<=p.yearElements.indexOf(e)?e.select():e.classList.contains("arrowUp")?p.changeYear(p.currentYear+1):e.classList.contains("arrowDown")&&p.changeYear(p.currentYear-1)}p.element=p.input=c,p.isOpen=!1;var e=["wrap","weekNumbers","allowInput","allowInvalidPreload","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],t=ce(ce({},JSON.parse(JSON.stringify(c.dataset||{}))),P),n={},O=(p.config.parseDate=t.parseDate,p.config.formatDate=t.formatDate,Object.defineProperty(p.config,"enable",{get:function(){return p.config._enable},set:function(e){p.config._enable=ne(e)}}),Object.defineProperty(p.config,"disable",{get:function(){return p.config._disable},set:function(e){p.config._disable=ne(e)}}),"time"===t.mode);function ae(t){return function(e){p.config["min"===t?"_minTime":"_maxTime"]=p.parseDate(e,"H:i:S")}}t.dateFormat||!t.enableTime&&!O||(N=Ie.defaultConfig.dateFormat||de.dateFormat,n.dateFormat=t.noCalendar||O?"H:i"+(t.enableSeconds?":S":""):N+" H:i"+(t.enableSeconds?":S":"")),t.altInput&&(t.enableTime||O)&&!t.altFormat&&(N=Ie.defaultConfig.altFormat||de.altFormat,n.altFormat=t.noCalendar||O?"h:i"+(t.enableSeconds?":S K":" K"):N+(" h:i"+(t.enableSeconds?":S":""))+" K"),Object.defineProperty(p.config,"minDate",{get:function(){return p.config._minDate},set:Q("min")}),Object.defineProperty(p.config,"maxDate",{get:function(){return p.config._maxDate},set:Q("max")}),Object.defineProperty(p.config,"minTime",{get:function(){return p.config._minTime},set:ae("min")}),Object.defineProperty(p.config,"maxTime",{get:function(){return p.config._maxTime},set:ae("max")}),"time"===t.mode&&(p.config.noCalendar=!0,p.config.enableTime=!0),Object.assign(p.config,n,t);for(var S=0;Sp.now.getTime()?p.config.minDate:p.config.maxDate&&p.config.maxDate.getTime()'+this.options.typing_text.replace("%s",this.options.min_length-e.length)+"")},t.prototype.update_list=function(){var e,t,n=this;this.search_welcome_message(),this.is_typing||(t=(e=r.trim(this.search_field.val())).length").attr("value",t.value).html(t.text).appendTo(s.element)}),t=this.search_field.val(),i=this.search_field.innerWidth(),this.element.trigger("chosen:updated"),this.is_multiple&&(o=this.element.parent().find(".wp_china_yes-hide-select").val()||[],this.element.WP_CHINA_YESChosenOrder(o,!0),this.search_field.css("width",i)),this.search_field.val(t),null!==this.chosenXhr.done&&this.chosenXhr.done(e)))},r.fn.WP_CHINA_YESAjaxChosen=function(e){return this.each(function(){new t(this,e)})}}(jQuery),function(){var s,r,a=[].indexOf||function(e){for(var t=0,n=this.length;t"+this.escape_html(e.group_label)+""+e.html:e.html},c.prototype.mouse_enter=function(){return this.mouse_on_container=!0},c.prototype.mouse_leave=function(){return this.mouse_on_container=!1},c.prototype.input_focus=function(e){if(this.is_multiple){if(!this.active_field)return setTimeout((t=this,function(){return t.container_mousedown()}),50)}else if(!this.active_field)return this.activate_field();var t},c.prototype.input_blur=function(e){if(!this.mouse_on_container)return this.active_field=!1,setTimeout((t=this,function(){return t.blur_test()}),100);var t},c.prototype.label_click_handler=function(e){return this.is_multiple?this.container_mousedown(e):this.activate_field()},c.prototype.results_option_build=function(e){for(var t,n,i="",o=0,s=this.results_data,r=0,a=s.length;r=this.max_shown_results));r++);return i},c.prototype.result_add_option=function(e){var t,n;return e.search_match&&this.include_option_in_results(e)?(t=[],e.disabled||e.selected&&this.is_multiple||t.push("active-result"),!e.disabled||e.selected&&this.is_multiple||t.push("disabled-result"),e.selected&&t.push("result-selected"),null!=e.group_array_index&&t.push("group-option"),""!==e.classes&&t.push(e.classes),(n=document.createElement("li")).className=t.join(" "),e.style&&(n.style.cssText=e.style),n.setAttribute("data-option-array-index",e.array_index),n.innerHTML=e.highlighted_html||e.html,e.title&&(n.title=e.title),this.outerHTML(n)):""},c.prototype.result_add_group=function(e){var t,n;return(e.search_match||e.group_match)&&0"+this.escape_html(n)+""+this.escape_html(f)),null!=u&&(u.group_match=!0)):null!=s.group_array_index&&this.results_data[s.group_array_index].search_match&&(s.search_match=!0)));return this.result_clear_highlight(),h<1&&a.length?(this.update_results_content(""),this.no_results(a)):(this.update_results_content(this.results_option_build()),null!=e&&e.skip_highlight?void 0:this.winnow_results_set_highlight())},c.prototype.get_search_regex=function(e){var t,e=this.search_contains?e:"(^|\\s|\\b)"+e+"[^\\s]*";return this.enable_split_word_search||this.search_contains||(e="^"+e),t=this.case_sensitive_search?"":"i",new RegExp(e,t)},c.prototype.search_string_match=function(e,t){t=t.exec(e);return!this.search_contains&&null!=t&&t[1]&&(t.index+=1),t},c.prototype.choices_count=function(){var e,t,n;if(null==this.selected_option_count)for(e=this.selected_option_count=0,t=(n=this.form_field.options).length;e\n '+this.default_text+'\n
\n\n'},c.prototype.get_multi_html=function(){return'\n'},c.prototype.get_no_results_html=function(e){return'\n '+this.results_none_found+" "+this.escape_html(e)+"\n"},c.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?8<=document.documentMode:!(/iP(od|hone)/i.test(window.navigator.userAgent)||/IEMobile/i.test(window.navigator.userAgent)||/Windows Phone/i.test(window.navigator.userAgent)||/BlackBerry/i.test(window.navigator.userAgent)||/BB10/i.test(window.navigator.userAgent)||/Android.*Mobile/i.test(window.navigator.userAgent))},c.default_multiple_text="Select Some Options",c.default_single_text="Select an Option",c.default_no_result_text="No results match",s=c,(a=jQuery).fn.extend({chosen:function(i){return s.browser_is_supported()?this.each(function(e){var t=a(this),n=t.data("chosen");"destroy"===i?n instanceof o&&n.destroy():n instanceof o||t.data("chosen",new o(this,i))}):this}}),o=function(){var e,t=o,n=s;for(e in n)l.call(n,e)&&(t[e]=n[e]);function i(){this.constructor=t}function o(){return o.__super__.constructor.apply(this,arguments)}return i.prototype=n.prototype,t.prototype=new i,t.__super__=n.prototype,o.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex},o.prototype.set_up_html=function(){var e=["chosen-container"];return e.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&e.push(this.form_field.className),this.is_rtl&&e.push("chosen-rtl"),e={class:e.join(" "),title:this.form_field.title},this.form_field.id.length&&(e.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=a("",e),this.container.width(this.container_width()),this.is_multiple?this.container.html(this.get_multi_html()):this.container.html(this.get_single_html()),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior()},o.prototype.on_ready=function(){return this.form_field_jq.trigger("chosen:ready",{chosen:this})},o.prototype.register_observers=function(){var t,n,i,o,s,r,a,l,c,h,u,d,f,p,_,m,g,v,y,b,w,D,C,x;return this.container.on("touchstart.chosen",(t=this,function(e){t.container_mousedown(e)})),this.container.on("touchend.chosen",(n=this,function(e){n.container_mouseup(e)})),this.container.on("mousedown.chosen",(i=this,function(e){i.container_mousedown(e)})),this.container.on("mouseup.chosen",(o=this,function(e){o.container_mouseup(e)})),this.container.on("mouseenter.chosen",(s=this,function(e){s.mouse_enter(e)})),this.container.on("mouseleave.chosen",(r=this,function(e){r.mouse_leave(e)})),this.search_results.on("mouseup.chosen",(a=this,function(e){a.search_results_mouseup(e)})),this.search_results.on("mouseover.chosen",(l=this,function(e){l.search_results_mouseover(e)})),this.search_results.on("mouseout.chosen",(c=this,function(e){c.search_results_mouseout(e)})),this.search_results.on("mousewheel.chosen DOMMouseScroll.chosen",(h=this,function(e){h.search_results_mousewheel(e)})),this.search_results.on("touchstart.chosen",(u=this,function(e){u.search_results_touchstart(e)})),this.search_results.on("touchmove.chosen",(d=this,function(e){d.search_results_touchmove(e)})),this.search_results.on("touchend.chosen",(f=this,function(e){f.search_results_touchend(e)})),this.form_field_jq.on("chosen:updated.chosen",(p=this,function(e){p.results_update_field(e)})),this.form_field_jq.on("chosen:activate.chosen",(_=this,function(e){_.activate_field(e)})),this.form_field_jq.on("chosen:open.chosen",(m=this,function(e){m.container_mousedown(e)})),this.form_field_jq.on("chosen:close.chosen",(g=this,function(e){g.close_field(e)})),this.search_field.on("blur.chosen",(v=this,function(e){v.input_blur(e)})),this.search_field.on("keyup.chosen",(y=this,function(e){y.keyup_checker(e)})),this.search_field.on("keydown.chosen",(b=this,function(e){b.keydown_checker(e)})),this.search_field.on("focus.chosen",(w=this,function(e){w.input_focus(e)})),this.search_field.on("cut.chosen",(D=this,function(e){D.clipboard_event_checker(e)})),this.search_field.on("paste.chosen",(C=this,function(e){C.clipboard_event_checker(e)})),this.is_multiple?this.search_choices.on("click.chosen",(x=this,function(e){x.choices_click(e)})):this.container.on("click.chosen",function(e){e.preventDefault()})},o.prototype.destroy=function(){return a(this.container[0].ownerDocument).off("click.chosen",this.click_test_action),0",{class:"search-choice"}).html(""+this.choice_label(e)+"");return e.disabled?n.addClass("search-choice-disabled"):((e=a("",{class:"search-choice-close","data-option-array-index":e.array_index})).on("click.chosen",(t=this,function(e){return t.choice_destroy_link_click(e)})),n.append(e)),this.search_container.before(n)},o.prototype.choice_destroy_link_click=function(e){if(e.preventDefault(),e.stopPropagation(),!this.is_disabled)return this.choice_destroy(a(e.target))},o.prototype.choice_destroy=function(e){if(this.result_deselect(e[0].getAttribute("data-option-array-index")))return this.active_field?this.search_field.focus():this.show_search_field_default(),this.is_multiple&&0'),this.selected_item.addClass("chosen-single-with-deselect")},o.prototype.get_search_field_value=function(){return this.search_field.val()},o.prototype.get_search_text=function(){return a.trim(this.get_search_field_value())},o.prototype.escape_html=function(e){return a("").text(e).html()},o.prototype.winnow_results_set_highlight=function(){var e=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),e=(e.length?e:this.search_results.find(".active-result")).first();if(null!=e)return this.result_do_highlight(e)},o.prototype.no_results=function(e){e=this.get_no_results_html(e);return this.search_results.append(e),this.form_field_jq.trigger("chosen:no_results",{chosen:this})},o.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},o.prototype.keydown_arrow=function(){var e;return this.results_showing&&this.result_highlight?(e=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(e):void 0:this.results_show()},o.prototype.keyup_arrow=function(){var e;return this.results_showing||this.is_multiple?this.result_highlight?(e=this.result_highlight.prevAll("li.active-result")).length?this.result_do_highlight(e.first()):(0").css(o)).text(this.get_search_field_value()),a("body").append(e),r=e.width()+25,e.remove(),this.container.is(":visible")&&(r=Math.min(this.container.outerWidth()-10,r)),this.search_field.width(r)}},o.prototype.trigger_form_field_change=function(e){return this.form_field_jq.trigger("input",e),this.form_field_jq.trigger("change",e)},o}()}.call(this),function(r){"use strict";function i(e,t,n){this.init(e,t,n)}function e(){this.rules=[]}r.extend(i.prototype,{init:function(e,t,n){this.controller=e,this.condition=t,this.value=n,this.rules=[],this.controls=[]},evalCondition:function(e,t,n,i,o){if("=="==n)return this.checkBoolean(i)==this.checkBoolean(o);if("!="==n)return this.checkBoolean(i)!=this.checkBoolean(o);if(">="==n)return Number(o)>=Number(i);if("<="==n)return Number(o)<=Number(i);if(">"==n)return Number(o)>Number(i);if("<"==n)return Number(o)args['output_css'] ) || ! empty( $this->args['enqueue_webfont'] ) ) {
+ add_action( 'wp_enqueue_scripts', array( $this, 'collect_output_css_and_typography' ), 10 );
+ WP_CHINA_YES::$css = apply_filters( "wp_china_yes_{$this->unique}_output_css", WP_CHINA_YES::$css, $this );
+ }
+
+ }
+
+ public function collect_output_css_and_typography() {
+ $this->recursive_output_css( $this->pre_fields );
+ }
+
+ public function recursive_output_css( $fields = array(), $combine_field = array() ) {
+
+ if ( ! empty( $fields ) ) {
+
+ foreach ( $fields as $field ) {
+
+ $field_id = ( ! empty( $field['id'] ) ) ? $field['id'] : '';
+ $field_type = ( ! empty( $field['type'] ) ) ? $field['type'] : '';
+ $field_output = ( ! empty( $field['output'] ) ) ? $field['output'] : '';
+ $field_check = ( $field_type === 'typography' || $field_output ) ? true : false;
+ $field_class = 'WP_CHINA_YES_Field_' . $field_type;
+
+ if ( $field_type && $field_id ) {
+
+
+ if( $field_type === 'fieldset' ) {
+ if ( ! empty( $field['fields'] ) ) {
+ $this->recursive_output_css( $field['fields'], $field );
+ }
+ }
+
+ if( $field_type === 'accordion' ) {
+ if ( ! empty( $field['accordions'] ) ) {
+ foreach ( $field['accordions'] as $accordion ) {
+ $this->recursive_output_css( $accordion['fields'], $field );
+ }
+ }
+ }
+
+ if( $field_type === 'tabbed' ) {
+ if ( ! empty( $field['tabs'] ) ) {
+ foreach ( $field['tabs'] as $accordion ) {
+ $this->recursive_output_css( $accordion['fields'], $field );
+ }
+ }
+ }
+
+ if ( class_exists( $field_class ) ) {
+
+ if ( method_exists( $field_class, 'output' ) || method_exists( $field_class, 'enqueue_google_fonts' ) ) {
+
+ $field_value = '';
+
+ if ( $field_check && ( $this->abstract === 'options' || $this->abstract === 'customize' ) ) {
+
+ if( ! empty( $combine_field ) ) {
+
+ $field_value = ( isset( $this->options[$combine_field['id']][$field_id] ) ) ? $this->options[$combine_field['id']][$field_id] : '';
+
+ } else {
+
+ $field_value = ( isset( $this->options[$field_id] ) ) ? $this->options[$field_id] : '';
+
+ }
+
+ } else if ( $field_check && ( $this->abstract === 'metabox' && is_singular() || $this->abstract === 'taxonomy' && is_archive() ) ) {
+
+ if( ! empty( $combine_field ) ) {
+
+ $meta_value = $this->get_meta_value( $combine_field );
+ $field_value = ( isset( $meta_value[$field_id] ) ) ? $meta_value[$field_id] : '';
+
+ } else {
+
+ $meta_value = $this->get_meta_value( $field );
+ $field_value = ( isset( $meta_value ) ) ? $meta_value : '';
+
+ }
+
+ }
+
+ $instance = new $field_class( $field, $field_value, $this->unique, 'wp/enqueue', $this );
+
+ // typography enqueue and embed google web fonts
+ if ( $field_type === 'typography' && $this->args['enqueue_webfont'] && ! empty( $field_value['font-family'] ) ) {
+
+ $method = ( ! empty( $this->args['async_webfont'] ) ) ? 'async' : 'enqueue';
+
+ $instance->enqueue_google_fonts( $method );
+
+ }
+
+ // output css
+ if ( $field_output && $this->args['output_css'] ) {
+ WP_CHINA_YES::$css .= $instance->output();
+ }
+
+ unset( $instance );
+
+ }
+
+ }
+
+ }
+
+ }
+
+ }
+
+ }
+
+ public function pre_tabs( $sections ) {
+
+ $count = 100;
+ $result = array();
+ $parents = array();
+
+ foreach ( $sections as $key => $section ) {
+ if ( ! empty( $section['parent'] ) ) {
+ $section['priority'] = ( isset( $section['priority'] ) ) ? $section['priority'] : $count;
+ $parents[$section['parent']][] = $section;
+ unset( $sections[$key] );
+ }
+ $count++;
+ }
+
+ foreach ( $sections as $key => $section ) {
+ $section['priority'] = ( isset( $section['priority'] ) ) ? $section['priority'] : $count;
+ if ( ! empty( $section['id'] ) && ! empty( $parents[$section['id']] ) ) {
+ $section['subs'] = wp_list_sort( $parents[$section['id']], array( 'priority' => 'ASC' ), 'ASC', true );
+ }
+ $result[] = $section;
+ $count++;
+ }
+
+ return wp_list_sort( $result, array( 'priority' => 'ASC' ), 'ASC', true );
+
+ }
+
+ public function pre_sections( $sections ) {
+
+ $result = array();
+
+ foreach ( $this->pre_tabs( $sections ) as $section ) {
+ if ( ! empty( $section['subs'] ) ) {
+ foreach ( $section['subs'] as $sub ) {
+ $sub['ptitle'] = ( ! empty( $section['title'] ) ) ? $section['title'] : '';
+ $result[] = $sub;
+ }
+ }
+ if ( empty( $section['subs'] ) ) {
+ $result[] = $section;
+ }
+ }
+
+ return $result;
+ }
+
+ public function pre_fields( $sections ) {
+
+ $result = array();
+
+ foreach ( $sections as $key => $section ) {
+ if ( ! empty( $section['fields'] ) ) {
+ foreach ( $section['fields'] as $field ) {
+ $result[] = $field;
+ }
+ }
+ }
+
+ return $result;
+ }
+
+}
+}
diff --git a/framework/classes/admin-options.class.php b/framework/classes/admin-options.class.php
new file mode 100755
index 0000000..152624f
--- /dev/null
+++ b/framework/classes/admin-options.class.php
@@ -0,0 +1,688 @@
+ 'Wp_china_yes Framework by Wp_china_yes',
+ 'framework_class' => '',
+
+ // menu settings
+ 'menu_title' => '',
+ 'menu_slug' => '',
+ 'menu_type' => 'menu',
+ 'menu_capability' => 'manage_options',
+ 'menu_icon' => null,
+ 'menu_position' => null,
+ 'menu_hidden' => false,
+ 'menu_parent' => '',
+ 'sub_menu_title' => '',
+
+ // menu extras
+ 'show_bar_menu' => true,
+ 'show_sub_menu' => true,
+ 'show_in_network' => true,
+ 'show_in_customizer' => false,
+
+ 'show_search' => true,
+ 'show_reset_all' => true,
+ 'show_reset_section' => true,
+ 'show_footer' => true,
+ 'show_all_options' => true,
+ 'show_form_warning' => true,
+ 'sticky_header' => true,
+ 'save_defaults' => true,
+ 'ajax_save' => true,
+ 'form_action' => '',
+
+ // admin bar menu settings
+ 'admin_bar_menu_icon' => '',
+ 'admin_bar_menu_priority' => 50,
+
+ // footer
+ 'footer_text' => 'Thank you for creating with Wp_china_yes Framework',
+ 'footer_after' => '',
+ 'footer_credit' => '',
+
+ // database model
+ 'database' => '', // options, transient, theme_mod, network
+ 'transient_time' => 0,
+
+ // contextual help
+ 'contextual_help' => array(),
+ 'contextual_help_sidebar' => '',
+
+ // typography options
+ 'enqueue_webfont' => true,
+ 'async_webfont' => false,
+
+ // others
+ 'output_css' => true,
+
+ // theme
+ 'nav' => 'normal',
+ 'theme' => 'dark',
+ 'class' => '',
+
+ // external default values
+ 'defaults' => array(),
+
+ );
+
+ // run framework construct
+ public function __construct( $key, $params = array() ) {
+
+ $this->unique = $key;
+ $this->args = apply_filters( "wp_china_yes_{$this->unique}_args", wp_parse_args( $params['args'], $this->args ), $this );
+ $this->sections = apply_filters( "wp_china_yes_{$this->unique}_sections", $params['sections'], $this );
+
+ // run only is admin panel options, avoid performance loss
+ $this->pre_tabs = $this->pre_tabs( $this->sections );
+ $this->pre_fields = $this->pre_fields( $this->sections );
+ $this->pre_sections = $this->pre_sections( $this->sections );
+
+ $this->get_options();
+ $this->set_options();
+ $this->save_defaults();
+
+ add_action( 'admin_menu', array( $this, 'add_admin_menu' ) );
+ add_action( 'admin_bar_menu', array( $this, 'add_admin_bar_menu' ), $this->args['admin_bar_menu_priority'] );
+ add_action( 'wp_ajax_wp_china_yes_'. $this->unique .'_ajax_save', array( $this, 'ajax_save' ) );
+
+ if ( $this->args['database'] === 'network' && ! empty( $this->args['show_in_network'] ) ) {
+ add_action( 'network_admin_menu', array( $this, 'add_admin_menu' ) );
+ }
+
+ // wp enqeueu for typography and output css
+ parent::__construct();
+
+ }
+
+ // instance
+ public static function instance( $key, $params = array() ) {
+ return new self( $key, $params );
+ }
+
+ // add admin bar menu
+ public function add_admin_bar_menu( $wp_admin_bar ) {
+
+ if ( ! current_user_can( $this->args['menu_capability'] ) ) {
+ return;
+ }
+
+ if ( is_network_admin() && ( $this->args['database'] !== 'network' || $this->args['show_in_network'] !== true ) ) {
+ return;
+ }
+
+ if ( ! empty( $this->args['show_bar_menu'] ) && empty( $this->args['menu_hidden'] ) ) {
+
+ global $submenu;
+
+ $menu_slug = $this->args['menu_slug'];
+ $menu_icon = ( ! empty( $this->args['admin_bar_menu_icon'] ) ) ? '' : '';
+
+ $wp_admin_bar->add_node( array(
+ 'id' => $menu_slug,
+ 'title' => $menu_icon . esc_attr( $this->args['menu_title'] ),
+ 'href' => esc_url( ( is_network_admin() ) ? network_admin_url( 'admin.php?page='. $menu_slug ) : admin_url( 'admin.php?page='. $menu_slug ) ),
+ ) );
+
+ if ( ! empty( $submenu[$menu_slug] ) ) {
+ foreach ( $submenu[$menu_slug] as $menu_key => $menu_value ) {
+ $wp_admin_bar->add_node( array(
+ 'parent' => $menu_slug,
+ 'id' => $menu_slug .'-'. $menu_key,
+ 'title' => $menu_value[0],
+ 'href' => esc_url( ( is_network_admin() ) ? network_admin_url( 'admin.php?page='. $menu_value[2] ) : admin_url( 'admin.php?page='. $menu_value[2] ) ),
+ ) );
+ }
+ }
+
+ }
+
+ }
+
+ public function ajax_save() {
+
+ $result = $this->set_options( true );
+
+ if ( ! $result ) {
+ wp_send_json_error( array( 'error' => esc_html__( 'Error while saving the changes.', 'wp_china_yes' ) ) );
+ } else {
+ wp_send_json_success( array( 'notice' => $this->notice, 'errors' => $this->errors ) );
+ }
+
+ }
+
+ // get default value
+ public function get_default( $field ) {
+
+ $default = ( isset( $field['default'] ) ) ? $field['default'] : '';
+ $default = ( isset( $this->args['defaults'][$field['id']] ) ) ? $this->args['defaults'][$field['id']] : $default;
+
+ return $default;
+
+ }
+
+ // save defaults and set new fields value to main options
+ public function save_defaults() {
+
+ $tmp_options = $this->options;
+
+ foreach ( $this->pre_fields as $field ) {
+ if ( ! empty( $field['id'] ) ) {
+ $this->options[$field['id']] = ( isset( $this->options[$field['id']] ) ) ? $this->options[$field['id']] : $this->get_default( $field );
+ }
+ }
+
+ if ( $this->args['save_defaults'] && empty( $tmp_options ) ) {
+ $this->save_options( $this->options );
+ }
+
+ }
+
+ // set options
+ public function set_options( $ajax = false ) {
+
+ // XSS ok.
+ // No worries, This "POST" requests is sanitizing in the below foreach. see #L337 - #L341
+ $response = ( $ajax && ! empty( $_POST['data'] ) ) ? json_decode( wp_unslash( trim( $_POST['data'] ) ), true ) : $_POST;
+
+ // Set variables.
+ $data = array();
+ $noncekey = 'wp_china_yes_options_nonce'. $this->unique;
+ $nonce = ( ! empty( $response[$noncekey] ) ) ? $response[$noncekey] : '';
+ $options = ( ! empty( $response[$this->unique] ) ) ? $response[$this->unique] : array();
+ $transient = ( ! empty( $response['wp_china_yes_transient'] ) ) ? $response['wp_china_yes_transient'] : array();
+
+ if ( wp_verify_nonce( $nonce, 'wp_china_yes_options_nonce' ) ) {
+
+ $importing = false;
+ $section_id = ( ! empty( $transient['section'] ) ) ? $transient['section'] : '';
+
+ if ( ! $ajax && ! empty( $response[ 'wp_china_yes_import_data' ] ) ) {
+
+ // XSS ok.
+ // No worries, This "POST" requests is sanitizing in the below foreach. see #L337 - #L341
+ $import_data = json_decode( wp_unslash( trim( $response[ 'wp_china_yes_import_data' ] ) ), true );
+ $options = ( is_array( $import_data ) && ! empty( $import_data ) ) ? $import_data : array();
+ $importing = true;
+ $this->notice = esc_html__( 'Settings successfully imported.', 'wp_china_yes' );
+
+ }
+
+ if ( ! empty( $transient['reset'] ) ) {
+
+ foreach ( $this->pre_fields as $field ) {
+ if ( ! empty( $field['id'] ) ) {
+ $data[$field['id']] = $this->get_default( $field );
+ }
+ }
+
+ $this->notice = esc_html__( 'Default settings restored.', 'wp_china_yes' );
+
+ } else if ( ! empty( $transient['reset_section'] ) && ! empty( $section_id ) ) {
+
+ if ( ! empty( $this->pre_sections[$section_id-1]['fields'] ) ) {
+
+ foreach ( $this->pre_sections[$section_id-1]['fields'] as $field ) {
+ if ( ! empty( $field['id'] ) ) {
+ $data[$field['id']] = $this->get_default( $field );
+ }
+ }
+
+ }
+
+ $data = wp_parse_args( $data, $this->options );
+
+ $this->notice = esc_html__( 'Default settings restored.', 'wp_china_yes' );
+
+ } else {
+
+ // sanitize and validate
+ foreach ( $this->pre_fields as $field ) {
+
+ if ( ! empty( $field['id'] ) ) {
+
+ $field_id = $field['id'];
+ $field_value = isset( $options[$field_id] ) ? $options[$field_id] : '';
+
+ // Ajax and Importing doing wp_unslash already.
+ if ( ! $ajax && ! $importing ) {
+ $field_value = wp_unslash( $field_value );
+ }
+
+ // Sanitize "post" request of field.
+ if ( ! isset( $field['sanitize'] ) ) {
+
+ if( is_array( $field_value ) ) {
+
+ $data[$field_id] = wp_kses_post_deep( $field_value );
+
+ } else {
+
+ $data[$field_id] = wp_kses_post( $field_value );
+
+ }
+
+ } else if( isset( $field['sanitize'] ) && is_callable( $field['sanitize'] ) ) {
+
+ $data[$field_id] = call_user_func( $field['sanitize'], $field_value );
+
+ } else {
+
+ $data[$field_id] = $field_value;
+
+ }
+
+ // Validate "post" request of field.
+ if ( isset( $field['validate'] ) && is_callable( $field['validate'] ) ) {
+
+ $has_validated = call_user_func( $field['validate'], $field_value );
+
+ if ( ! empty( $has_validated ) ) {
+
+ $data[$field_id] = ( isset( $this->options[$field_id] ) ) ? $this->options[$field_id] : '';
+ $this->errors[$field_id] = $has_validated;
+
+ }
+
+ }
+
+ }
+
+ }
+
+ }
+
+ $data = apply_filters( "wp_china_yes_{$this->unique}_save", $data, $this );
+
+ do_action( "wp_china_yes_{$this->unique}_save_before", $data, $this );
+
+ $this->options = $data;
+
+ $this->save_options( $data );
+
+ do_action( "wp_china_yes_{$this->unique}_save_after", $data, $this );
+
+ if ( empty( $this->notice ) ) {
+ $this->notice = esc_html__( 'Settings saved.', 'wp_china_yes' );
+ }
+
+ return true;
+
+ }
+
+ return false;
+
+ }
+
+ // save options database
+ public function save_options( $data ) {
+
+ if ( $this->args['database'] === 'transient' ) {
+ set_transient( $this->unique, $data, $this->args['transient_time'] );
+ } else if ( $this->args['database'] === 'theme_mod' ) {
+ set_theme_mod( $this->unique, $data );
+ } else if ( $this->args['database'] === 'network' ) {
+ update_site_option( $this->unique, $data );
+ } else {
+ update_option( $this->unique, $data, true );
+ }
+
+ do_action( "wp_china_yes_{$this->unique}_saved", $data, $this );
+
+ }
+
+ // get options from database
+ public function get_options() {
+
+ if ( $this->args['database'] === 'transient' ) {
+ $this->options = get_transient( $this->unique );
+ } else if ( $this->args['database'] === 'theme_mod' ) {
+ $this->options = get_theme_mod( $this->unique );
+ } else if ( $this->args['database'] === 'network' ) {
+ $this->options = get_site_option( $this->unique );
+ } else {
+ $this->options = get_option( $this->unique );
+ }
+
+ if ( empty( $this->options ) ) {
+ $this->options = array();
+ }
+
+ return $this->options;
+
+ }
+
+ // admin menu
+ public function add_admin_menu() {
+
+ extract( $this->args );
+
+ if ( $menu_type === 'submenu' ) {
+
+ $menu_page = call_user_func( 'add_submenu_page', $menu_parent, esc_attr( $menu_title ), esc_attr( $menu_title ), $menu_capability, $menu_slug, array( $this, 'add_options_html' ) );
+
+ } else {
+
+ $menu_page = call_user_func( 'add_menu_page', esc_attr( $menu_title ), esc_attr( $menu_title ), $menu_capability, $menu_slug, array( $this, 'add_options_html' ), $menu_icon, $menu_position );
+
+ if ( ! empty( $sub_menu_title ) ) {
+ call_user_func( 'add_submenu_page', $menu_slug, esc_attr( $sub_menu_title ), esc_attr( $sub_menu_title ), $menu_capability, $menu_slug, array( $this, 'add_options_html' ) );
+ }
+
+ if ( ! empty( $this->args['show_sub_menu'] ) && count( $this->pre_tabs ) > 1 ) {
+
+ // create submenus
+ foreach ( $this->pre_tabs as $section ) {
+ call_user_func( 'add_submenu_page', $menu_slug, esc_attr( $section['title'] ), esc_attr( $section['title'] ), $menu_capability, $menu_slug .'#tab='. sanitize_title( $section['title'] ), '__return_null' );
+ }
+
+ remove_submenu_page( $menu_slug, $menu_slug );
+
+ }
+
+ }
+
+ // TODO CHINA-YES 支持隐藏子菜单
+ if ( ! empty( $menu_hidden ) ) {
+ remove_menu_page( $menu_slug );
+ remove_submenu_page( $menu_parent, $menu_slug );
+ }
+
+ add_action( 'load-'. $menu_page, array( $this, 'add_page_on_load' ) );
+
+ }
+
+ public function add_page_on_load() {
+
+ if ( ! empty( $this->args['contextual_help'] ) ) {
+
+ $screen = get_current_screen();
+
+ foreach ( $this->args['contextual_help'] as $tab ) {
+ $screen->add_help_tab( $tab );
+ }
+
+ if ( ! empty( $this->args['contextual_help_sidebar'] ) ) {
+ $screen->set_help_sidebar( $this->args['contextual_help_sidebar'] );
+ }
+
+ }
+
+ if ( ! empty( $this->args['footer_credit'] ) ) {
+ add_filter( 'admin_footer_text', array( $this, 'add_admin_footer_text' ) );
+ }
+
+ }
+
+ public function add_admin_footer_text() {
+ echo wp_kses_post( $this->args['footer_credit'] );
+ }
+
+ public function error_check( $sections, $err = '' ) {
+
+ if ( ! $this->args['ajax_save'] ) {
+
+ if ( ! empty( $sections['fields'] ) ) {
+ foreach ( $sections['fields'] as $field ) {
+ if ( ! empty( $field['id'] ) ) {
+ if ( array_key_exists( $field['id'], $this->errors ) ) {
+ $err = '!';
+ }
+ }
+ }
+ }
+
+ if ( ! empty( $sections['subs'] ) ) {
+ foreach ( $sections['subs'] as $sub ) {
+ $err = $this->error_check( $sub, $err );
+ }
+ }
+
+ if ( ! empty( $sections['id'] ) && array_key_exists( $sections['id'], $this->errors ) ) {
+ $err = $this->errors[$sections['id']];
+ }
+
+ }
+
+ return $err;
+ }
+
+ // option page html output
+ public function add_options_html() {
+
+ $has_nav = ( count( $this->pre_tabs ) > 1 ) ? true : false;
+ $show_all = ( ! $has_nav ) ? ' wp_china_yes-show-all' : '';
+ $ajax_class = ( $this->args['ajax_save'] ) ? ' wp_china_yes-save-ajax' : '';
+ $sticky_class = ( $this->args['sticky_header'] ) ? ' wp_china_yes-sticky-header' : '';
+ $wrapper_class = ( $this->args['framework_class'] ) ? ' '. $this->args['framework_class'] : '';
+ $theme = ( $this->args['theme'] ) ? ' wp_china_yes-theme-'. $this->args['theme'] : '';
+ $class = ( $this->args['class'] ) ? ' '. $this->args['class'] : '';
+ $nav_type = ( $this->args['nav'] === 'inline' ) ? 'inline' : 'normal';
+ $form_action = ( $this->args['form_action'] ) ? $this->args['form_action'] : '';
+
+ do_action( 'wp_china_yes_options_before' );
+
+ echo '';
+
+ echo '
';
+
+ echo '
';
+
+ echo '
';
+
+ echo '
';
+
+ echo ( ! empty( $this->args['footer_after'] ) ) ? $this->args['footer_after'] : '';
+
+ echo '
';
+
+ do_action( 'wp_china_yes_options_after' );
+
+ }
+ }
+}
diff --git a/framework/classes/fields.class.php b/framework/classes/fields.class.php
new file mode 100755
index 0000000..3f91a1e
--- /dev/null
+++ b/framework/classes/fields.class.php
@@ -0,0 +1,405 @@
+field = $field;
+ $this->value = $value;
+ $this->unique = $unique;
+ $this->where = $where;
+ $this->parent = $parent;
+ }
+
+ public function field_name( $nested_name = '' ) {
+
+ $field_id = ( ! empty( $this->field['id'] ) ) ? $this->field['id'] : '';
+ $unique_id = ( ! empty( $this->unique ) ) ? $this->unique .'['. $field_id .']' : $field_id;
+ $field_name = ( ! empty( $this->field['name'] ) ) ? $this->field['name'] : $unique_id;
+ $tag_prefix = ( ! empty( $this->field['tag_prefix'] ) ) ? $this->field['tag_prefix'] : '';
+
+ if ( ! empty( $tag_prefix ) ) {
+ $nested_name = str_replace( '[', '['. $tag_prefix, $nested_name );
+ }
+
+ return $field_name . $nested_name;
+
+ }
+
+ public function field_attributes( $custom_atts = array() ) {
+
+ $field_id = ( ! empty( $this->field['id'] ) ) ? $this->field['id'] : '';
+ $attributes = ( ! empty( $this->field['attributes'] ) ) ? $this->field['attributes'] : array();
+
+ if ( ! empty( $field_id ) && empty( $attributes['data-depend-id'] ) ) {
+ $attributes['data-depend-id'] = $field_id;
+ }
+
+ if ( ! empty( $this->field['placeholder'] ) ) {
+ $attributes['placeholder'] = $this->field['placeholder'];
+ }
+
+ $attributes = wp_parse_args( $attributes, $custom_atts );
+
+ $atts = '';
+
+ if ( ! empty( $attributes ) ) {
+ foreach ( $attributes as $key => $value ) {
+ if ( $value === 'only-key' ) {
+ $atts .= ' '. esc_attr( $key );
+ } else {
+ $atts .= ' '. esc_attr( $key ) . '="'. esc_attr( $value ) .'"';
+ }
+ }
+ }
+
+ return $atts;
+
+ }
+
+ public function field_before() {
+ return ( ! empty( $this->field['before'] ) ) ? ''. $this->field['before'] .'
' : '';
+ }
+
+ public function field_after() {
+
+ $output = ( ! empty( $this->field['after'] ) ) ? ''. $this->field['after'] .'
' : '';
+ $output .= ( ! empty( $this->field['desc'] ) ) ? ''. $this->field['desc'] .'
' : '';
+ $output .= ( ! empty( $this->field['help'] ) ) ? ''. $this->field['help'] .'
' : '';
+ $output .= ( ! empty( $this->field['_error'] ) ) ? ''. $this->field['_error'] .'
' : '';
+
+ return $output;
+
+ }
+
+ public static function field_data( $type = '', $term = false, $query_args = array() ) {
+
+ $options = array();
+ $array_search = false;
+
+ // sanitize type name
+ if ( in_array( $type, array( 'page', 'pages' ) ) ) {
+ $option = 'page';
+ } else if ( in_array( $type, array( 'post', 'posts' ) ) ) {
+ $option = 'post';
+ } else if ( in_array( $type, array( 'category', 'categories' ) ) ) {
+ $option = 'category';
+ } else if ( in_array( $type, array( 'tag', 'tags' ) ) ) {
+ $option = 'post_tag';
+ } else if ( in_array( $type, array( 'menu', 'menus' ) ) ) {
+ $option = 'nav_menu';
+ } else {
+ $option = '';
+ }
+
+ // switch type
+ switch( $type ) {
+
+ case 'page':
+ case 'pages':
+ case 'post':
+ case 'posts':
+
+ // term query required for ajax select
+ if ( ! empty( $term ) ) {
+
+ $query = new WP_Query( wp_parse_args( $query_args, array(
+ 's' => $term,
+ 'post_type' => $option,
+ 'post_status' => 'publish',
+ 'posts_per_page' => 25,
+ ) ) );
+
+ } else {
+
+ $query = new WP_Query( wp_parse_args( $query_args, array(
+ 'post_type' => $option,
+ 'post_status' => 'publish',
+ ) ) );
+
+ }
+
+ if ( ! is_wp_error( $query ) && ! empty( $query->posts ) ) {
+ foreach ( $query->posts as $item ) {
+ $options[$item->ID] = $item->post_title;
+ }
+ }
+
+ break;
+
+ case 'category':
+ case 'categories':
+ case 'tag':
+ case 'tags':
+ case 'menu':
+ case 'menus':
+
+ if ( ! empty( $term ) ) {
+
+ $query = new WP_Term_Query( wp_parse_args( $query_args, array(
+ 'search' => $term,
+ 'taxonomy' => $option,
+ 'hide_empty' => false,
+ 'number' => 25,
+ ) ) );
+
+ } else {
+
+ $query = new WP_Term_Query( wp_parse_args( $query_args, array(
+ 'taxonomy' => $option,
+ 'hide_empty' => false,
+ ) ) );
+
+ }
+
+ if ( ! is_wp_error( $query ) && ! empty( $query->terms ) ) {
+ foreach ( $query->terms as $item ) {
+ $options[$item->term_id] = $item->name;
+ }
+ }
+
+ break;
+
+ case 'user':
+ case 'users':
+
+ if ( ! empty( $term ) ) {
+
+ $query = new WP_User_Query( array(
+ 'search' => '*'. $term .'*',
+ 'number' => 25,
+ 'orderby' => 'title',
+ 'order' => 'ASC',
+ 'fields' => array( 'display_name', 'ID' )
+ ) );
+
+ } else {
+
+ $query = new WP_User_Query( array( 'fields' => array( 'display_name', 'ID' ) ) );
+
+ }
+
+ if ( ! is_wp_error( $query ) && ! empty( $query->get_results() ) ) {
+ foreach ( $query->get_results() as $item ) {
+ $options[$item->ID] = $item->display_name;
+ }
+ }
+
+ break;
+
+ case 'sidebar':
+ case 'sidebars':
+
+ global $wp_registered_sidebars;
+
+ if ( ! empty( $wp_registered_sidebars ) ) {
+ foreach ( $wp_registered_sidebars as $sidebar ) {
+ $options[$sidebar['id']] = $sidebar['name'];
+ }
+ }
+
+ $array_search = true;
+
+ break;
+
+ case 'role':
+ case 'roles':
+
+ global $wp_roles;
+
+ if ( ! empty( $wp_roles ) ) {
+ if ( ! empty( $wp_roles->roles ) ) {
+ foreach ( $wp_roles->roles as $role_key => $role_value ) {
+ $options[$role_key] = $role_value['name'];
+ }
+ }
+ }
+
+ $array_search = true;
+
+ break;
+
+ case 'post_type':
+ case 'post_types':
+
+ $post_types = get_post_types( array( 'show_in_nav_menus' => true ), 'objects' );
+
+ if ( ! is_wp_error( $post_types ) && ! empty( $post_types ) ) {
+ foreach ( $post_types as $post_type ) {
+ $options[$post_type->name] = $post_type->labels->name;
+ }
+ }
+
+ $array_search = true;
+
+ break;
+
+ case 'location':
+ case 'locations':
+
+ $nav_menus = get_registered_nav_menus();
+
+ if ( ! is_wp_error( $nav_menus ) && ! empty( $nav_menus ) ) {
+ foreach ( $nav_menus as $nav_menu_key => $nav_menu_name ) {
+ $options[$nav_menu_key] = $nav_menu_name;
+ }
+ }
+
+ $array_search = true;
+
+ break;
+
+ default:
+
+ if ( is_callable( $type ) ) {
+ if ( ! empty( $term ) ) {
+ $options = call_user_func( $type, $query_args );
+ } else {
+ $options = call_user_func( $type, $term, $query_args );
+ }
+ }
+
+ break;
+
+ }
+
+ // Array search by "term"
+ if ( ! empty( $term ) && ! empty( $options ) && ! empty( $array_search ) ) {
+ $options = preg_grep( '/'. $term .'/i', $options );
+ }
+
+ // Make multidimensional array for ajax search
+ if ( ! empty( $term ) && ! empty( $options ) ) {
+ $arr = array();
+ foreach ( $options as $option_key => $option_value ) {
+ $arr[] = array( 'value' => $option_key, 'text' => $option_value );
+ }
+ $options = $arr;
+ }
+
+ return $options;
+
+ }
+
+ public function field_wp_query_data_title( $type, $values ) {
+
+ $options = array();
+
+ if ( ! empty( $values ) && is_array( $values ) ) {
+
+ foreach ( $values as $value ) {
+
+ $options[$value] = ucfirst( $value );
+
+ switch( $type ) {
+
+ case 'post':
+ case 'posts':
+ case 'page':
+ case 'pages':
+
+ $title = get_the_title( $value );
+
+ if ( ! is_wp_error( $title ) && ! empty( $title ) ) {
+ $options[$value] = $title;
+ }
+
+ break;
+
+ case 'category':
+ case 'categories':
+ case 'tag':
+ case 'tags':
+ case 'menu':
+ case 'menus':
+
+ $term = get_term( $value );
+
+ if ( ! is_wp_error( $term ) && ! empty( $term ) ) {
+ $options[$value] = $term->name;
+ }
+
+ break;
+
+ case 'user':
+ case 'users':
+
+ $user = get_user_by( 'id', $value );
+
+ if ( ! is_wp_error( $user ) && ! empty( $user ) ) {
+ $options[$value] = $user->display_name;
+ }
+
+ break;
+
+ case 'sidebar':
+ case 'sidebars':
+
+ global $wp_registered_sidebars;
+
+ if ( ! empty( $wp_registered_sidebars[$value] ) ) {
+ $options[$value] = $wp_registered_sidebars[$value]['name'];
+ }
+
+ break;
+
+ case 'role':
+ case 'roles':
+
+ global $wp_roles;
+
+ if ( ! empty( $wp_roles ) && ! empty( $wp_roles->roles ) && ! empty( $wp_roles->roles[$value] ) ) {
+ $options[$value] = $wp_roles->roles[$value]['name'];
+ }
+
+ break;
+
+ case 'post_type':
+ case 'post_types':
+
+ $post_types = get_post_types( array( 'show_in_nav_menus' => true ) );
+
+ if ( ! is_wp_error( $post_types ) && ! empty( $post_types ) && ! empty( $post_types[$value] ) ) {
+ $options[$value] = ucfirst( $value );
+ }
+
+ break;
+
+ case 'location':
+ case 'locations':
+
+ $nav_menus = get_registered_nav_menus();
+
+ if ( ! is_wp_error( $nav_menus ) && ! empty( $nav_menus ) && ! empty( $nav_menus[$value] ) ) {
+ $options[$value] = $nav_menus[$value];
+ }
+
+ break;
+
+ default:
+
+ if ( is_callable( $type .'_title' ) ) {
+ $options[$value] = call_user_func( $type .'_title', $value );
+ }
+
+ break;
+
+ }
+
+ }
+
+ }
+
+ return $options;
+
+ }
+
+ }
+}
diff --git a/framework/classes/setup.class.php b/framework/classes/setup.class.php
new file mode 100755
index 0000000..dbd55d2
--- /dev/null
+++ b/framework/classes/setup.class.php
@@ -0,0 +1,804 @@
+ array(),
+ 'customize_options' => array(),
+ 'metabox_options' => array(),
+ 'nav_menu_options' => array(),
+ 'profile_options' => array(),
+ 'taxonomy_options' => array(),
+ 'widget_options' => array(),
+ 'comment_options' => array(),
+ 'shortcode_options' => array(),
+ );
+
+ // Shortcode instances
+ public static $shortcode_instances = array();
+
+ private static $instance = null;
+
+ public static function init( $file = __FILE__, $premium = false ) {
+
+ // Set file constant
+ self::$file = $file;
+
+ // Set file constant
+ self::$premium = $premium;
+
+ // Set constants
+ self::constants();
+
+ // Include files
+ self::includes();
+
+ if ( is_null( self::$instance ) ) {
+ self::$instance = new self();
+ }
+
+ return self::$instance;
+
+ }
+
+ // Initalize
+ public function __construct() {
+
+ // Init action
+ do_action( 'wp_china_yes_init' );
+
+ // Setup textdomain
+ self::textdomain();
+
+ add_action( 'after_setup_theme', array( 'WP_CHINA_YES', 'setup' ) );
+ add_action( 'init', array( 'WP_CHINA_YES', 'setup' ) );
+ add_action( 'switch_theme', array( 'WP_CHINA_YES', 'setup' ) );
+ add_action( 'admin_enqueue_scripts', array( 'WP_CHINA_YES', 'add_admin_enqueue_scripts' ) );
+ add_action( 'wp_enqueue_scripts', array( 'WP_CHINA_YES', 'add_typography_enqueue_styles' ), 80 );
+ add_action( 'wp_head', array( 'WP_CHINA_YES', 'add_custom_css' ), 80 );
+ add_filter( 'admin_body_class', array( 'WP_CHINA_YES', 'add_admin_body_class' ) );
+
+ }
+
+ // Setup frameworks
+ public static function setup() {
+
+ // Setup admin option framework
+ $params = array();
+ if ( class_exists( 'WP_CHINA_YES_Options' ) && ! empty( self::$args['admin_options'] ) ) {
+ foreach ( self::$args['admin_options'] as $key => $value ) {
+ if ( ! empty( self::$args['sections'][$key] ) && ! isset( self::$inited[$key] ) ) {
+
+ $params['args'] = $value;
+ $params['sections'] = self::$args['sections'][$key];
+ self::$inited[$key] = true;
+
+ WP_CHINA_YES_Options::instance( $key, $params );
+
+ if ( ! empty( $value['show_in_customizer'] ) ) {
+ $value['output_css'] = false;
+ $value['enqueue_webfont'] = false;
+ self::$args['customize_options'][$key] = $value;
+ self::$inited[$key] = null;
+ }
+
+ }
+ }
+ }
+
+ // Setup customize option framework
+ $params = array();
+ if ( class_exists( 'WP_CHINA_YES_Customize_Options' ) && ! empty( self::$args['customize_options'] ) ) {
+ foreach ( self::$args['customize_options'] as $key => $value ) {
+ if ( ! empty( self::$args['sections'][$key] ) && ! isset( self::$inited[$key] ) ) {
+
+ $params['args'] = $value;
+ $params['sections'] = self::$args['sections'][$key];
+ self::$inited[$key] = true;
+
+ WP_CHINA_YES_Customize_Options::instance( $key, $params );
+
+ }
+ }
+ }
+
+ // Setup metabox option framework
+ $params = array();
+ if ( class_exists( 'WP_CHINA_YES_Metabox' ) && ! empty( self::$args['metabox_options'] ) ) {
+ foreach ( self::$args['metabox_options'] as $key => $value ) {
+ if ( ! empty( self::$args['sections'][$key] ) && ! isset( self::$inited[$key] ) ) {
+
+ $params['args'] = $value;
+ $params['sections'] = self::$args['sections'][$key];
+ self::$inited[$key] = true;
+
+ WP_CHINA_YES_Metabox::instance( $key, $params );
+
+ }
+ }
+ }
+
+ // Setup nav menu option framework
+ $params = array();
+ if ( class_exists( 'WP_CHINA_YES_Nav_Menu_Options' ) && ! empty( self::$args['nav_menu_options'] ) ) {
+ foreach ( self::$args['nav_menu_options'] as $key => $value ) {
+ if ( ! empty( self::$args['sections'][$key] ) && ! isset( self::$inited[$key] ) ) {
+
+ $params['args'] = $value;
+ $params['sections'] = self::$args['sections'][$key];
+ self::$inited[$key] = true;
+
+ WP_CHINA_YES_Nav_Menu_Options::instance( $key, $params );
+
+ }
+ }
+ }
+
+ // Setup profile option framework
+ $params = array();
+ if ( class_exists( 'WP_CHINA_YES_Profile_Options' ) && ! empty( self::$args['profile_options'] ) ) {
+ foreach ( self::$args['profile_options'] as $key => $value ) {
+ if ( ! empty( self::$args['sections'][$key] ) && ! isset( self::$inited[$key] ) ) {
+
+ $params['args'] = $value;
+ $params['sections'] = self::$args['sections'][$key];
+ self::$inited[$key] = true;
+
+ WP_CHINA_YES_Profile_Options::instance( $key, $params );
+
+ }
+ }
+ }
+
+ // Setup taxonomy option framework
+ $params = array();
+ if ( class_exists( 'WP_CHINA_YES_Taxonomy_Options' ) && ! empty( self::$args['taxonomy_options'] ) ) {
+ $taxonomy = ( isset( $_GET['taxonomy'] ) ) ? sanitize_text_field( wp_unslash( $_GET['taxonomy'] ) ) : '';
+ foreach ( self::$args['taxonomy_options'] as $key => $value ) {
+ if ( ! empty( self::$args['sections'][$key] ) && ! isset( self::$inited[$key] ) ) {
+
+ $params['args'] = $value;
+ $params['sections'] = self::$args['sections'][$key];
+ self::$inited[$key] = true;
+
+ WP_CHINA_YES_Taxonomy_Options::instance( $key, $params );
+
+ }
+ }
+ }
+
+ // Setup widget option framework
+ if ( class_exists( 'WP_CHINA_YES_Widget' ) && class_exists( 'WP_Widget_Factory' ) && ! empty( self::$args['widget_options'] ) ) {
+ $wp_widget_factory = new WP_Widget_Factory();
+ global $wp_widget_factory;
+ foreach ( self::$args['widget_options'] as $key => $value ) {
+ if ( ! isset( self::$inited[$key] ) ) {
+
+ self::$inited[$key] = true;
+ $wp_widget_factory->register( WP_CHINA_YES_Widget::instance( $key, $value ) );
+
+ }
+ }
+ }
+
+ // Setup comment option framework
+ $params = array();
+ if ( class_exists( 'WP_CHINA_YES_Comment_Metabox' ) && ! empty( self::$args['comment_options'] ) ) {
+ foreach ( self::$args['comment_options'] as $key => $value ) {
+ if ( ! empty( self::$args['sections'][$key] ) && ! isset( self::$inited[$key] ) ) {
+
+ $params['args'] = $value;
+ $params['sections'] = self::$args['sections'][$key];
+ self::$inited[$key] = true;
+
+ WP_CHINA_YES_Comment_Metabox::instance( $key, $params );
+
+ }
+ }
+ }
+
+ // Setup shortcode option framework
+ $params = array();
+ if ( class_exists( 'WP_CHINA_YES_Shortcoder' ) && ! empty( self::$args['shortcode_options'] ) ) {
+ foreach ( self::$args['shortcode_options'] as $key => $value ) {
+ if ( ! empty( self::$args['sections'][$key] ) && ! isset( self::$inited[$key] ) ) {
+
+ $params['args'] = $value;
+ $params['sections'] = self::$args['sections'][$key];
+ self::$inited[$key] = true;
+
+ WP_CHINA_YES_Shortcoder::instance( $key, $params );
+
+ }
+ }
+
+ // Once editor setup for gutenberg and media buttons
+ if ( class_exists( 'WP_CHINA_YES_Shortcoder' ) && ! empty( self::$shortcode_instances ) ) {
+ foreach ( self::$shortcode_instances as $instance ) {
+ if ( ! empty( $instance['show_in_editor'] ) ) {
+ WP_CHINA_YES_Shortcoder::once_editor_setup();
+ break;
+ }
+ }
+ }
+
+ }
+
+ do_action( 'wp_china_yes_loaded' );
+
+ }
+
+ // Create options
+ public static function createOptions( $id, $args = array() ) {
+ self::$args['admin_options'][$id] = $args;
+ }
+
+ // Create customize options
+ public static function createCustomizeOptions( $id, $args = array() ) {
+ self::$args['customize_options'][$id] = $args;
+ }
+
+ // Create metabox options
+ public static function createMetabox( $id, $args = array() ) {
+ self::$args['metabox_options'][$id] = $args;
+ }
+
+ // Create menu options
+ public static function createNavMenuOptions( $id, $args = array() ) {
+ self::$args['nav_menu_options'][$id] = $args;
+ }
+
+ // Create shortcoder options
+ public static function createShortcoder( $id, $args = array() ) {
+ self::$args['shortcode_options'][$id] = $args;
+ }
+
+ // Create taxonomy options
+ public static function createTaxonomyOptions( $id, $args = array() ) {
+ self::$args['taxonomy_options'][$id] = $args;
+ }
+
+ // Create profile options
+ public static function createProfileOptions( $id, $args = array() ) {
+ self::$args['profile_options'][$id] = $args;
+ }
+
+ // Create widget
+ public static function createWidget( $id, $args = array() ) {
+ self::$args['widget_options'][$id] = $args;
+ self::set_used_fields( $args );
+ }
+
+ // Create comment metabox
+ public static function createCommentMetabox( $id, $args = array() ) {
+ self::$args['comment_options'][$id] = $args;
+ }
+
+ // Create section
+ public static function createSection( $id, $sections ) {
+ self::$args['sections'][$id][] = $sections;
+ self::set_used_fields( $sections );
+ }
+
+ // Set directory constants
+ public static function constants() {
+
+ // We need this path-finder code for set URL of framework
+ $dirname = str_replace( '//', '/', wp_normalize_path( dirname( dirname( self::$file ) ) ) );
+ $theme_dir = str_replace( '//', '/', wp_normalize_path( get_parent_theme_file_path() ) );
+ $plugin_dir = str_replace( '//', '/', wp_normalize_path( WP_PLUGIN_DIR ) );
+ $plugin_dir = str_replace( '/opt/bitnami', '/bitnami', $plugin_dir );
+ $located_plugin = ( preg_match( '#'. self::sanitize_dirname( $plugin_dir ) .'#', self::sanitize_dirname( $dirname ) ) ) ? true : false;
+ $directory = ( $located_plugin ) ? $plugin_dir : $theme_dir;
+ $directory_uri = ( $located_plugin ) ? WP_PLUGIN_URL : get_parent_theme_file_uri();
+ $foldername = str_replace( $directory, '', $dirname );
+ $protocol_uri = ( is_ssl() ) ? 'https' : 'http';
+ $directory_uri = set_url_scheme( $directory_uri, $protocol_uri );
+
+ self::$dir = $dirname;
+ self::$url = $directory_uri . $foldername;
+
+ }
+
+ // Include file helper
+ public static function include_plugin_file( $file, $load = true ) {
+
+ $path = '';
+ $file = ltrim( $file, '/' );
+ $override = apply_filters( 'wp_china_yes_override', 'wp_china_yes-override' );
+
+ if ( file_exists( get_parent_theme_file_path( $override .'/'. $file ) ) ) {
+ $path = get_parent_theme_file_path( $override .'/'. $file );
+ } elseif ( file_exists( get_theme_file_path( $override .'/'. $file ) ) ) {
+ $path = get_theme_file_path( $override .'/'. $file );
+ } elseif ( file_exists( self::$dir .'/'. $override .'/'. $file ) ) {
+ $path = self::$dir .'/'. $override .'/'. $file;
+ } elseif ( file_exists( self::$dir .'/'. $file ) ) {
+ $path = self::$dir .'/'. $file;
+ }
+
+ if ( ! empty( $path ) && ! empty( $file ) && $load ) {
+
+ global $wp_query;
+
+ if ( is_object( $wp_query ) && function_exists( 'load_template' ) ) {
+
+ load_template( $path, true );
+
+ } else {
+
+ require_once( $path );
+
+ }
+
+ } else {
+
+ return self::$dir .'/'. $file;
+
+ }
+
+ }
+
+ // Is active plugin helper
+ public static function is_active_plugin( $file = '' ) {
+ return in_array( $file, (array) get_option( 'active_plugins', array() ) );
+ }
+
+ // Sanitize dirname
+ public static function sanitize_dirname( $dirname ) {
+ return preg_replace( '/[^A-Za-z]/', '', $dirname );
+ }
+
+ // Set url constant
+ public static function include_plugin_url( $file ) {
+ return esc_url( self::$url ) .'/'. ltrim( $file, '/' );
+ }
+
+ // Include files
+ public static function includes() {
+
+ // Include common functions
+ self::include_plugin_file( 'functions/actions.php' );
+ self::include_plugin_file( 'functions/helpers.php' );
+ self::include_plugin_file( 'functions/sanitize.php' );
+ self::include_plugin_file( 'functions/validate.php' );
+
+ // Include free version classes
+ self::include_plugin_file( 'classes/abstract.class.php' );
+ self::include_plugin_file( 'classes/fields.class.php' );
+ self::include_plugin_file( 'classes/admin-options.class.php' );
+
+ // Include premium version classes
+ if ( self::$premium ) {
+ self::include_plugin_file( 'classes/customize-options.class.php' );
+ self::include_plugin_file( 'classes/metabox-options.class.php' );
+ self::include_plugin_file( 'classes/nav-menu-options.class.php' );
+ self::include_plugin_file( 'classes/profile-options.class.php' );
+ self::include_plugin_file( 'classes/shortcode-options.class.php' );
+ self::include_plugin_file( 'classes/taxonomy-options.class.php' );
+ self::include_plugin_file( 'classes/widget-options.class.php' );
+ self::include_plugin_file( 'classes/comment-options.class.php' );
+ }
+
+ // Include all framework fields
+ $fields = apply_filters( 'wp_china_yes_fields', array(
+ 'accordion',
+ 'background',
+ 'backup',
+ 'border',
+ 'button_set',
+ 'callback',
+ 'checkbox',
+ 'code_editor',
+ 'color',
+ 'color_group',
+ 'content',
+ 'date',
+ 'datetime',
+ 'dimensions',
+ 'fieldset',
+ 'gallery',
+ 'group',
+ 'heading',
+ 'icon',
+ 'image_select',
+ 'link',
+ 'link_color',
+ 'map',
+ 'media',
+ 'notice',
+ 'number',
+ 'palette',
+ 'radio',
+ 'repeater',
+ 'select',
+ 'slider',
+ 'sortable',
+ 'sorter',
+ 'spacing',
+ 'spinner',
+ 'subheading',
+ 'submessage',
+ 'switcher',
+ 'tabbed',
+ 'text',
+ 'textarea',
+ 'typography',
+ 'upload',
+ 'wp_editor',
+ ) );
+
+ if ( ! empty( $fields ) ) {
+ foreach ( $fields as $field ) {
+ if ( ! class_exists( 'WP_CHINA_YES_Field_'. $field ) && class_exists( 'WP_CHINA_YES_Fields' ) ) {
+ self::include_plugin_file( 'fields/'. $field .'/'. $field .'.php' );
+ }
+ }
+ }
+
+ }
+
+ // Setup textdomain
+ public static function textdomain() {
+ load_textdomain( 'wp_china_yes', self::$dir .'/languages/'. get_locale() .'.mo' );
+ }
+
+ // Set all of used fields
+ public static function set_used_fields( $sections ) {
+
+ if ( ! empty( $sections['fields'] ) ) {
+
+ foreach ( $sections['fields'] as $field ) {
+
+ if ( ! empty( $field['fields'] ) ) {
+ self::set_used_fields( $field );
+ }
+
+ if ( ! empty( $field['tabs'] ) ) {
+ self::set_used_fields( array( 'fields' => $field['tabs'] ) );
+ }
+
+ if ( ! empty( $field['accordions'] ) ) {
+ self::set_used_fields( array( 'fields' => $field['accordions'] ) );
+ }
+
+ if ( ! empty( $field['elements'] ) ) {
+ self::set_used_fields( array( 'fields' => $field['elements'] ) );
+ }
+
+ if ( ! empty( $field['type'] ) ) {
+ self::$fields[$field['type']] = $field;
+ }
+
+ }
+
+ }
+
+ }
+
+ // Enqueue admin and fields styles and scripts
+ public static function add_admin_enqueue_scripts() {
+
+ if ( ! self::$enqueue ) {
+
+ // Loads scripts and styles only when needed
+ $wpscreen = get_current_screen();
+
+ if ( ! empty( self::$args['admin_options'] ) ) {
+ foreach ( self::$args['admin_options'] as $argument ) {
+ if ( substr( $wpscreen->id, -strlen( $argument['menu_slug'] ) ) === $argument['menu_slug'] ) {
+ self::$enqueue = true;
+ }
+ }
+ }
+
+ if ( ! empty( self::$args['metabox_options'] ) ) {
+ foreach ( self::$args['metabox_options'] as $argument ) {
+ if ( in_array( $wpscreen->post_type, (array) $argument['post_type'] ) ) {
+ self::$enqueue = true;
+ }
+ }
+ }
+
+ if ( ! empty( self::$args['taxonomy_options'] ) ) {
+ foreach ( self::$args['taxonomy_options'] as $argument ) {
+ if ( in_array( $wpscreen->taxonomy, (array) $argument['taxonomy'] ) ) {
+ self::$enqueue = true;
+ }
+ }
+ }
+
+ if ( ! empty( self::$shortcode_instances ) ) {
+ foreach ( self::$shortcode_instances as $argument ) {
+ if ( ( $argument['show_in_editor'] && $wpscreen->base === 'post' ) || $argument['show_in_custom'] ) {
+ self::$enqueue = true;
+ }
+ }
+ }
+
+ if ( ! empty( self::$args['widget_options'] ) && ( $wpscreen->id === 'widgets' || $wpscreen->id === 'customize' ) ) {
+ self::$enqueue = true;
+ }
+
+ if ( ! empty( self::$args['customize_options'] ) && $wpscreen->id === 'customize' ) {
+ self::$enqueue = true;
+ }
+
+ if ( ! empty( self::$args['nav_menu_options'] ) && $wpscreen->id === 'nav-menus' ) {
+ self::$enqueue = true;
+ }
+
+ if ( ! empty( self::$args['profile_options'] ) && ( $wpscreen->id === 'profile' || $wpscreen->id === 'user-edit' ) ) {
+ self::$enqueue = true;
+ }
+
+ if ( ! empty( self::$args['comment_options'] ) && $wpscreen->id === 'comment' ) {
+ self::$enqueue = true;
+ }
+
+ }
+
+ if ( ! apply_filters( 'wp_china_yes_enqueue_assets', self::$enqueue ) ) {
+ return;
+ }
+
+ // Admin utilities
+ wp_enqueue_media();
+
+ // Wp color picker
+ wp_enqueue_style( 'wp-color-picker' );
+ wp_enqueue_script( 'wp-color-picker' );
+
+ // Font awesome 4 and 5 loader
+ if ( apply_filters( 'wp_china_yes_fa4', false ) ) {
+ wp_enqueue_style( 'wp_china_yes-fa', 'https://jsd.admincdn.com/npm/font-awesome@4.7.0/css/font-awesome.min.css', array(), '4.7.0', 'all' );
+ } else {
+ wp_enqueue_style( 'wp_china_yes-fa5', 'https://jsd.admincdn.com/npm/@fortawesome/fontawesome-free@5.15.4/css/all.min.css', array(), '5.15.5', 'all' );
+ wp_enqueue_style( 'wp_china_yes-fa5-v4-shims', 'https://jsd.admincdn.com/npm/@fortawesome/fontawesome-free@5.15.4/css/v4-shims.min.css', array(), '5.15.5', 'all' );
+ }
+
+ // Iconsax font icon loader
+ wp_enqueue_style( 'wp_china_yes-iconsax', 'https://jsd.admincdn.com/npm/iconsax-font-icon@1.1.0/dist/icons.min.css', array(), '1.1.0', 'all' );
+
+
+ // Check for developer mode
+ $min = ( self::$premium && SCRIPT_DEBUG ) ? '' : '.min';
+
+ // Main style
+ wp_enqueue_style( 'wp_china_yes', self::include_plugin_url( 'assets/css/style'. $min .'.css' ), array(), self::$version, 'all' );
+
+ // Main RTL styles
+ if ( is_rtl() ) {
+ wp_enqueue_style( 'wp_china_yes-rtl', self::include_plugin_url( 'assets/css/style-rtl'. $min .'.css' ), array(), self::$version, 'all' );
+ }
+
+ // Main scripts
+ wp_enqueue_script( 'wp_china_yes-plugins', self::include_plugin_url( 'assets/js/plugins'. $min .'.js' ), array(), self::$version, true );
+ wp_enqueue_script( 'wp_china_yes', self::include_plugin_url( 'assets/js/main'. $min .'.js' ), array( 'wp_china_yes-plugins' ), self::$version, true );
+
+ // Main variables
+ wp_localize_script( 'wp_china_yes', 'wp_china_yes_vars', array(
+ 'color_palette' => apply_filters( 'wp_china_yes_color_palette', array() ),
+ 'i18n' => array(
+ 'confirm' => esc_html__( 'Are you sure?', 'wp_china_yes' ),
+ 'typing_text' => esc_html__( 'Please enter %s or more characters', 'wp_china_yes' ),
+ 'searching_text' => esc_html__( 'Searching...', 'wp_china_yes' ),
+ 'no_results_text' => esc_html__( 'No results found.', 'wp_china_yes' ),
+ ),
+ ) );
+
+ // Enqueue fields scripts and styles
+ $enqueued = array();
+
+ if ( ! empty( self::$fields ) ) {
+ foreach ( self::$fields as $field ) {
+ if ( ! empty( $field['type'] ) ) {
+ $classname = 'WP_CHINA_YES_Field_' . $field['type'];
+ if ( class_exists( $classname ) && method_exists( $classname, 'enqueue' ) ) {
+ $instance = new $classname( $field );
+ if ( method_exists( $classname, 'enqueue' ) ) {
+ $instance->enqueue();
+ }
+ unset( $instance );
+ }
+ }
+ }
+ }
+
+ do_action( 'wp_china_yes_enqueue' );
+
+ }
+
+ // Add typography enqueue styles to front page
+ public static function add_typography_enqueue_styles() {
+
+ if ( ! empty( self::$webfonts ) ) {
+
+ if ( ! empty( self::$webfonts['enqueue'] ) ) {
+
+ $query = array();
+ $fonts = array();
+
+ foreach ( self::$webfonts['enqueue'] as $family => $styles ) {
+ $fonts[] = $family . ( ( ! empty( $styles ) ) ? ':'. implode( ',', $styles ) : '' );
+ }
+
+ if ( ! empty( $fonts ) ) {
+ $query['family'] = implode( '%7C', $fonts );
+ }
+
+ if ( ! empty( self::$subsets ) ) {
+ $query['subset'] = implode( ',', self::$subsets );
+ }
+
+ $query['display'] = 'swap';
+
+ wp_enqueue_style( 'wp_china_yes-google-web-fonts', esc_url( add_query_arg( $query, '//fonts.googleapis.com/css' ) ), array(), null );
+
+ }
+
+ if ( ! empty( self::$webfonts['async'] ) ) {
+
+ $fonts = array();
+
+ foreach ( self::$webfonts['async'] as $family => $styles ) {
+ $fonts[] = $family . ( ( ! empty( $styles ) ) ? ':'. implode( ',', $styles ) : '' );
+ }
+
+ wp_enqueue_script( 'wp_china_yes-google-web-fonts', esc_url( '//ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js' ), array(), null );
+
+ wp_localize_script( 'wp_china_yes-google-web-fonts', 'WebFontConfig', array( 'google' => array( 'families' => $fonts ) ) );
+
+ }
+
+ }
+
+ }
+
+ // Add admin body class
+ public static function add_admin_body_class( $classes ) {
+
+ if ( apply_filters( 'wp_china_yes_fa4', false ) ) {
+ $classes .= 'wp_china_yes-fa5-shims';
+ }
+
+ return $classes;
+
+ }
+
+ // Add custom css to front page
+ public static function add_custom_css() {
+
+ if ( ! empty( self::$css ) ) {
+ echo '';
+ }
+
+ }
+
+ // Add a new framework field
+ public static function field( $field = array(), $value = '', $unique = '', $where = '', $parent = '' ) {
+
+ // Check for unallow fields
+ if ( ! empty( $field['_notice'] ) ) {
+
+ $field_type = $field['type'];
+
+ $field = array();
+ $field['content'] = esc_html__( 'Oops! Not allowed.', 'wp_china_yes' ) .' ('. $field_type .')';
+ $field['type'] = 'notice';
+ $field['style'] = 'danger';
+
+ }
+
+ $depend = '';
+ $visible = '';
+ $unique = ( ! empty( $unique ) ) ? $unique : '';
+ $class = ( ! empty( $field['class'] ) ) ? ' ' . esc_attr( $field['class'] ) : '';
+ $is_pseudo = ( ! empty( $field['pseudo'] ) ) ? ' wp_china_yes-pseudo-field' : '';
+ $field_type = ( ! empty( $field['type'] ) ) ? esc_attr( $field['type'] ) : '';
+
+ if ( ! empty( $field['dependency'] ) ) {
+
+ $dependency = $field['dependency'];
+ $depend_visible = '';
+ $data_controller = '';
+ $data_condition = '';
+ $data_value = '';
+ $data_global = '';
+
+ if ( is_array( $dependency[0] ) ) {
+ $data_controller = implode( '|', array_column( $dependency, 0 ) );
+ $data_condition = implode( '|', array_column( $dependency, 1 ) );
+ $data_value = implode( '|', array_column( $dependency, 2 ) );
+ $data_global = implode( '|', array_column( $dependency, 3 ) );
+ $depend_visible = implode( '|', array_column( $dependency, 4 ) );
+ } else {
+ $data_controller = ( ! empty( $dependency[0] ) ) ? $dependency[0] : '';
+ $data_condition = ( ! empty( $dependency[1] ) ) ? $dependency[1] : '';
+ $data_value = ( ! empty( $dependency[2] ) ) ? $dependency[2] : '';
+ $data_global = ( ! empty( $dependency[3] ) ) ? $dependency[3] : '';
+ $depend_visible = ( ! empty( $dependency[4] ) ) ? $dependency[4] : '';
+ }
+
+ $depend .= ' data-controller="'. esc_attr( $data_controller ) .'"';
+ $depend .= ' data-condition="'. esc_attr( $data_condition ) .'"';
+ $depend .= ' data-value="'. esc_attr( $data_value ) .'"';
+ $depend .= ( ! empty( $data_global ) ) ? ' data-depend-global="true"' : '';
+
+ $visible = ( ! empty( $depend_visible ) ) ? ' wp_china_yes-depend-visible' : ' wp_china_yes-depend-hidden';
+
+ }
+
+ // These attributes has been sanitized above.
+ echo '';
+
+ if ( ! empty( $field_type ) ) {
+
+ if ( ! empty( $field['title'] ) ) {
+ echo '
';
+ echo '
'. $field['title'] .'
';
+ echo ( ! empty( $field['subtitle'] ) ) ? '
'. $field['subtitle'] .'
' : '';
+ echo '
';
+ }
+
+ echo ( ! empty( $field['title'] ) ) ? '
' : '';
+
+ $value = ( ! isset( $value ) && isset( $field['default'] ) ) ? $field['default'] : $value;
+ $value = ( isset( $field['value'] ) ) ? $field['value'] : $value;
+
+ $classname = 'WP_CHINA_YES_Field_'. $field_type;
+
+ if ( class_exists( $classname ) ) {
+ $instance = new $classname( $field, $value, $unique, $where, $parent );
+ $instance->render();
+ } else {
+ echo '
'. esc_html__( 'Field not found!', 'wp_china_yes' ) .'
';
+ }
+
+ } else {
+ echo '
'. esc_html__( 'Field not found!', 'wp_china_yes' ) .'
';
+ }
+
+ echo ( ! empty( $field['title'] ) ) ? '
' : '';
+ echo '
';
+ echo '
';
+
+ }
+
+ }
+
+}
+
+WP_CHINA_YES_Setup::init( __FILE__, false );
+
+/**
+ *
+ * Extended Setup Class for Shortland
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ *
+ */
+if ( ! class_exists( 'WP_CHINA_YES' ) ) {
+ class WP_CHINA_YES extends WP_CHINA_YES_Setup{}
+}
diff --git a/framework/fields/accordion/accordion.php b/framework/fields/accordion/accordion.php
new file mode 100755
index 0000000..f07dc0a
--- /dev/null
+++ b/framework/fields/accordion/accordion.php
@@ -0,0 +1,64 @@
+field_before();
+
+ echo '';
+
+ foreach ( $this->field['accordions'] as $key => $accordion ) {
+
+ echo '
';
+
+ $icon = ( ! empty( $accordion['icon'] ) ) ? 'wp_china_yes--icon '. $accordion['icon'] : 'wp_china_yes-accordion-icon fas fa-angle-right';
+
+ echo '
';
+ echo '';
+ echo esc_html( $accordion['title'] );
+ echo '
';
+
+ echo '
';
+
+ foreach ( $accordion['fields'] as $field ) {
+
+ if ( in_array( $field['type'], $unallows ) ) { $field['_notice'] = true; }
+
+ $field_id = ( isset( $field['id'] ) ) ? $field['id'] : '';
+ $field_default = ( isset( $field['default'] ) ) ? $field['default'] : '';
+ $field_value = ( isset( $this->value[$field_id] ) ) ? $this->value[$field_id] : $field_default;
+ $unique_id = ( ! empty( $this->unique ) ) ? $this->unique .'['. $this->field['id'] .']' : $this->field['id'];
+
+ WP_CHINA_YES::field( $field, $field_value, $unique_id, 'field/accordion' );
+
+ }
+
+ echo '
';
+
+ echo '
';
+
+ }
+
+ echo '
';
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/framework/fields/background/background.php b/framework/fields/background/background.php
new file mode 100755
index 0000000..c5601d3
--- /dev/null
+++ b/framework/fields/background/background.php
@@ -0,0 +1,340 @@
+field, array(
+ 'background_color' => true,
+ 'background_image' => true,
+ 'background_position' => true,
+ 'background_repeat' => true,
+ 'background_attachment' => true,
+ 'background_size' => true,
+ 'background_origin' => false,
+ 'background_clip' => false,
+ 'background_blend_mode' => false,
+ 'background_gradient' => false,
+ 'background_gradient_color' => true,
+ 'background_gradient_direction' => true,
+ 'background_image_preview' => true,
+ 'background_auto_attributes' => false,
+ 'compact' => false,
+ 'background_image_library' => 'image',
+ 'background_image_placeholder' => esc_html__( 'Not selected', 'wp_china_yes' ),
+ ) );
+
+ if ( $args['compact'] ) {
+ $args['background_color'] = false;
+ $args['background_auto_attributes'] = true;
+ }
+
+ $default_value = array(
+ 'background-color' => '',
+ 'background-image' => '',
+ 'background-position' => '',
+ 'background-repeat' => '',
+ 'background-attachment' => '',
+ 'background-size' => '',
+ 'background-origin' => '',
+ 'background-clip' => '',
+ 'background-blend-mode' => '',
+ 'background-gradient-color' => '',
+ 'background-gradient-direction' => '',
+ );
+
+ $default_value = ( ! empty( $this->field['default'] ) ) ? wp_parse_args( $this->field['default'], $default_value ) : $default_value;
+
+ $this->value = wp_parse_args( $this->value, $default_value );
+
+ echo $this->field_before();
+
+ echo '';
+
+ //
+ // Background Color
+ if ( ! empty( $args['background_color'] ) ) {
+
+ echo '
';
+
+ echo ( ! empty( $args['background_gradient'] ) ) ? '
'. esc_html__( 'From', 'wp_china_yes' ) .'
' : '';
+
+ WP_CHINA_YES::field( array(
+ 'id' => 'background-color',
+ 'type' => 'color',
+ 'default' => $default_value['background-color'],
+ ), $this->value['background-color'], $this->field_name(), 'field/background' );
+
+ echo '
';
+
+ }
+
+ //
+ // Background Gradient Color
+ if ( ! empty( $args['background_gradient_color'] ) && ! empty( $args['background_gradient'] ) ) {
+
+ echo '
';
+
+ echo ( ! empty( $args['background_gradient'] ) ) ? '
'. esc_html__( 'To', 'wp_china_yes' ) .'
' : '';
+
+ WP_CHINA_YES::field( array(
+ 'id' => 'background-gradient-color',
+ 'type' => 'color',
+ 'default' => $default_value['background-gradient-color'],
+ ), $this->value['background-gradient-color'], $this->field_name(), 'field/background' );
+
+ echo '
';
+
+ }
+
+ //
+ // Background Gradient Direction
+ if ( ! empty( $args['background_gradient_direction'] ) && ! empty( $args['background_gradient'] ) ) {
+
+ echo '
';
+
+ echo ( ! empty( $args['background_gradient'] ) ) ? '
'. esc_html__( 'Direction', 'wp_china_yes' ) .'
' : '';
+
+ WP_CHINA_YES::field( array(
+ 'id' => 'background-gradient-direction',
+ 'type' => 'select',
+ 'options' => array(
+ '' => esc_html__( 'Gradient Direction', 'wp_china_yes' ),
+ 'to bottom' => esc_html__( '⇓ top to bottom', 'wp_china_yes' ),
+ 'to right' => esc_html__( '⇒ left to right', 'wp_china_yes' ),
+ '135deg' => esc_html__( '⇘ corner top to right', 'wp_china_yes' ),
+ '-135deg' => esc_html__( '⇙ corner top to left', 'wp_china_yes' ),
+ ),
+ ), $this->value['background-gradient-direction'], $this->field_name(), 'field/background' );
+
+ echo '
';
+
+ }
+
+ echo '
';
+
+ //
+ // Background Image
+ if ( ! empty( $args['background_image'] ) ) {
+
+ echo '';
+
+ WP_CHINA_YES::field( array(
+ 'id' => 'background-image',
+ 'type' => 'media',
+ 'class' => 'wp_china_yes-assign-field-background',
+ 'library' => $args['background_image_library'],
+ 'preview' => $args['background_image_preview'],
+ 'placeholder' => $args['background_image_placeholder'],
+ 'attributes' => array( 'data-depend-id' => $this->field['id'] ),
+ ), $this->value['background-image'], $this->field_name(), 'field/background' );
+
+ echo '
';
+
+ }
+
+ $auto_class = ( ! empty( $args['background_auto_attributes'] ) ) ? ' wp_china_yes--auto-attributes' : '';
+ $hidden_class = ( ! empty( $args['background_auto_attributes'] ) && empty( $this->value['background-image']['url'] ) ) ? ' wp_china_yes--attributes-hidden' : '';
+
+ echo '';
+
+ //
+ // Background Position
+ if ( ! empty( $args['background_position'] ) ) {
+
+ WP_CHINA_YES::field( array(
+ 'id' => 'background-position',
+ 'type' => 'select',
+ 'options' => array(
+ '' => esc_html__( 'Background Position', 'wp_china_yes' ),
+ 'left top' => esc_html__( 'Left Top', 'wp_china_yes' ),
+ 'left center' => esc_html__( 'Left Center', 'wp_china_yes' ),
+ 'left bottom' => esc_html__( 'Left Bottom', 'wp_china_yes' ),
+ 'center top' => esc_html__( 'Center Top', 'wp_china_yes' ),
+ 'center center' => esc_html__( 'Center Center', 'wp_china_yes' ),
+ 'center bottom' => esc_html__( 'Center Bottom', 'wp_china_yes' ),
+ 'right top' => esc_html__( 'Right Top', 'wp_china_yes' ),
+ 'right center' => esc_html__( 'Right Center', 'wp_china_yes' ),
+ 'right bottom' => esc_html__( 'Right Bottom', 'wp_china_yes' ),
+ ),
+ ), $this->value['background-position'], $this->field_name(), 'field/background' );
+
+ }
+
+ //
+ // Background Repeat
+ if ( ! empty( $args['background_repeat'] ) ) {
+
+ WP_CHINA_YES::field( array(
+ 'id' => 'background-repeat',
+ 'type' => 'select',
+ 'options' => array(
+ '' => esc_html__( 'Background Repeat', 'wp_china_yes' ),
+ 'repeat' => esc_html__( 'Repeat', 'wp_china_yes' ),
+ 'no-repeat' => esc_html__( 'No Repeat', 'wp_china_yes' ),
+ 'repeat-x' => esc_html__( 'Repeat Horizontally', 'wp_china_yes' ),
+ 'repeat-y' => esc_html__( 'Repeat Vertically', 'wp_china_yes' ),
+ ),
+ ), $this->value['background-repeat'], $this->field_name(), 'field/background' );
+
+ }
+
+ //
+ // Background Attachment
+ if ( ! empty( $args['background_attachment'] ) ) {
+
+ WP_CHINA_YES::field( array(
+ 'id' => 'background-attachment',
+ 'type' => 'select',
+ 'options' => array(
+ '' => esc_html__( 'Background Attachment', 'wp_china_yes' ),
+ 'scroll' => esc_html__( 'Scroll', 'wp_china_yes' ),
+ 'fixed' => esc_html__( 'Fixed', 'wp_china_yes' ),
+ ),
+ ), $this->value['background-attachment'], $this->field_name(), 'field/background' );
+
+ }
+
+ //
+ // Background Size
+ if ( ! empty( $args['background_size'] ) ) {
+
+ WP_CHINA_YES::field( array(
+ 'id' => 'background-size',
+ 'type' => 'select',
+ 'options' => array(
+ '' => esc_html__( 'Background Size', 'wp_china_yes' ),
+ 'cover' => esc_html__( 'Cover', 'wp_china_yes' ),
+ 'contain' => esc_html__( 'Contain', 'wp_china_yes' ),
+ 'auto' => esc_html__( 'Auto', 'wp_china_yes' ),
+ ),
+ ), $this->value['background-size'], $this->field_name(), 'field/background' );
+
+ }
+
+ //
+ // Background Origin
+ if ( ! empty( $args['background_origin'] ) ) {
+
+ WP_CHINA_YES::field( array(
+ 'id' => 'background-origin',
+ 'type' => 'select',
+ 'options' => array(
+ '' => esc_html__( 'Background Origin', 'wp_china_yes' ),
+ 'padding-box' => esc_html__( 'Padding Box', 'wp_china_yes' ),
+ 'border-box' => esc_html__( 'Border Box', 'wp_china_yes' ),
+ 'content-box' => esc_html__( 'Content Box', 'wp_china_yes' ),
+ ),
+ ), $this->value['background-origin'], $this->field_name(), 'field/background' );
+
+ }
+
+ //
+ // Background Clip
+ if ( ! empty( $args['background_clip'] ) ) {
+
+ WP_CHINA_YES::field( array(
+ 'id' => 'background-clip',
+ 'type' => 'select',
+ 'options' => array(
+ '' => esc_html__( 'Background Clip', 'wp_china_yes' ),
+ 'border-box' => esc_html__( 'Border Box', 'wp_china_yes' ),
+ 'padding-box' => esc_html__( 'Padding Box', 'wp_china_yes' ),
+ 'content-box' => esc_html__( 'Content Box', 'wp_china_yes' ),
+ ),
+ ), $this->value['background-clip'], $this->field_name(), 'field/background' );
+
+ }
+
+ //
+ // Background Blend Mode
+ if ( ! empty( $args['background_blend_mode'] ) ) {
+
+ WP_CHINA_YES::field( array(
+ 'id' => 'background-blend-mode',
+ 'type' => 'select',
+ 'options' => array(
+ '' => esc_html__( 'Background Blend Mode', 'wp_china_yes' ),
+ 'normal' => esc_html__( 'Normal', 'wp_china_yes' ),
+ 'multiply' => esc_html__( 'Multiply', 'wp_china_yes' ),
+ 'screen' => esc_html__( 'Screen', 'wp_china_yes' ),
+ 'overlay' => esc_html__( 'Overlay', 'wp_china_yes' ),
+ 'darken' => esc_html__( 'Darken', 'wp_china_yes' ),
+ 'lighten' => esc_html__( 'Lighten', 'wp_china_yes' ),
+ 'color-dodge' => esc_html__( 'Color Dodge', 'wp_china_yes' ),
+ 'saturation' => esc_html__( 'Saturation', 'wp_china_yes' ),
+ 'color' => esc_html__( 'Color', 'wp_china_yes' ),
+ 'luminosity' => esc_html__( 'Luminosity', 'wp_china_yes' ),
+ ),
+ ), $this->value['background-blend-mode'], $this->field_name(), 'field/background' );
+
+ }
+
+ echo '
';
+
+ echo $this->field_after();
+
+ }
+
+ public function output() {
+
+ $output = '';
+ $bg_image = array();
+ $important = ( ! empty( $this->field['output_important'] ) ) ? '!important' : '';
+ $element = ( is_array( $this->field['output'] ) ) ? join( ',', $this->field['output'] ) : $this->field['output'];
+
+ // Background image and gradient
+ $background_color = ( ! empty( $this->value['background-color'] ) ) ? $this->value['background-color'] : '';
+ $background_gd_color = ( ! empty( $this->value['background-gradient-color'] ) ) ? $this->value['background-gradient-color'] : '';
+ $background_gd_direction = ( ! empty( $this->value['background-gradient-direction'] ) ) ? $this->value['background-gradient-direction'] : '';
+ $background_image = ( ! empty( $this->value['background-image']['url'] ) ) ? $this->value['background-image']['url'] : '';
+
+
+ if ( $background_color && $background_gd_color ) {
+ $gd_direction = ( $background_gd_direction ) ? $background_gd_direction .',' : '';
+ $bg_image[] = 'linear-gradient('. $gd_direction . $background_color .','. $background_gd_color .')';
+ unset( $this->value['background-color'] );
+ }
+
+ if ( $background_image ) {
+ $bg_image[] = 'url('. $background_image .')';
+ }
+
+ if ( ! empty( $bg_image ) ) {
+ $output .= 'background-image:'. implode( ',', $bg_image ) . $important .';';
+ }
+
+ // Common background properties
+ $properties = array( 'color', 'position', 'repeat', 'attachment', 'size', 'origin', 'clip', 'blend-mode' );
+
+ foreach ( $properties as $property ) {
+ $property = 'background-'. $property;
+ if ( ! empty( $this->value[$property] ) ) {
+ $output .= $property .':'. $this->value[$property] . $important .';';
+ }
+ }
+
+ if ( $output ) {
+ $output = $element .'{'. $output .'}';
+ }
+
+ $this->parent->output_css .= $output;
+
+ return $output;
+
+ }
+
+ }
+}
diff --git a/framework/fields/backup/backup.php b/framework/fields/backup/backup.php
new file mode 100755
index 0000000..f829640
--- /dev/null
+++ b/framework/fields/backup/backup.php
@@ -0,0 +1,38 @@
+unique;
+ $nonce = wp_create_nonce( 'wp_china_yes_backup_nonce' );
+ $export = add_query_arg( array( 'action' => 'wp_china_yes-export', 'unique' => $unique, 'nonce' => $nonce ), admin_url( 'admin-ajax.php' ) );
+
+ echo $this->field_before();
+
+ echo '';
+ echo '';
+ echo '
';
+ echo '';
+ echo ''. esc_html__( 'Export & Download', 'wp_china_yes' ) .'';
+ echo '
';
+ echo '';
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/framework/fields/border/border.php b/framework/fields/border/border.php
new file mode 100755
index 0000000..e055449
--- /dev/null
+++ b/framework/fields/border/border.php
@@ -0,0 +1,176 @@
+field, array(
+ 'top_icon' => '',
+ 'left_icon' => '',
+ 'bottom_icon' => '',
+ 'right_icon' => '',
+ 'all_icon' => '',
+ 'top_placeholder' => esc_html__( 'top', 'wp_china_yes' ),
+ 'right_placeholder' => esc_html__( 'right', 'wp_china_yes' ),
+ 'bottom_placeholder' => esc_html__( 'bottom', 'wp_china_yes' ),
+ 'left_placeholder' => esc_html__( 'left', 'wp_china_yes' ),
+ 'all_placeholder' => esc_html__( 'all', 'wp_china_yes' ),
+ 'top' => true,
+ 'left' => true,
+ 'bottom' => true,
+ 'right' => true,
+ 'all' => false,
+ 'color' => true,
+ 'style' => true,
+ 'unit' => 'px',
+ ) );
+
+ $default_value = array(
+ 'top' => '',
+ 'right' => '',
+ 'bottom' => '',
+ 'left' => '',
+ 'color' => '',
+ 'style' => 'solid',
+ 'all' => '',
+ );
+
+ $border_props = array(
+ 'solid' => esc_html__( 'Solid', 'wp_china_yes' ),
+ 'dashed' => esc_html__( 'Dashed', 'wp_china_yes' ),
+ 'dotted' => esc_html__( 'Dotted', 'wp_china_yes' ),
+ 'double' => esc_html__( 'Double', 'wp_china_yes' ),
+ 'inset' => esc_html__( 'Inset', 'wp_china_yes' ),
+ 'outset' => esc_html__( 'Outset', 'wp_china_yes' ),
+ 'groove' => esc_html__( 'Groove', 'wp_china_yes' ),
+ 'ridge' => esc_html__( 'ridge', 'wp_china_yes' ),
+ 'none' => esc_html__( 'None', 'wp_china_yes' )
+ );
+
+ $default_value = ( ! empty( $this->field['default'] ) ) ? wp_parse_args( $this->field['default'], $default_value ) : $default_value;
+
+ $value = wp_parse_args( $this->value, $default_value );
+
+ echo $this->field_before();
+
+ echo '';
+
+ if ( ! empty( $args['color'] ) ) {
+ $default_color_attr = ( ! empty( $default_value['color'] ) ) ? ' data-default-color="'. esc_attr( $default_value['color'] ) .'"' : '';
+ echo '';
+ echo '
';
+ echo '';
+ echo '
';
+ echo '
';
+ }
+
+ echo $this->field_after();
+
+ }
+
+ public function output() {
+
+ $output = '';
+ $unit = ( ! empty( $this->value['unit'] ) ) ? $this->value['unit'] : 'px';
+ $important = ( ! empty( $this->field['output_important'] ) ) ? '!important' : '';
+ $element = ( is_array( $this->field['output'] ) ) ? join( ',', $this->field['output'] ) : $this->field['output'];
+
+ // properties
+ $top = ( isset( $this->value['top'] ) && $this->value['top'] !== '' ) ? $this->value['top'] : '';
+ $right = ( isset( $this->value['right'] ) && $this->value['right'] !== '' ) ? $this->value['right'] : '';
+ $bottom = ( isset( $this->value['bottom'] ) && $this->value['bottom'] !== '' ) ? $this->value['bottom'] : '';
+ $left = ( isset( $this->value['left'] ) && $this->value['left'] !== '' ) ? $this->value['left'] : '';
+ $style = ( isset( $this->value['style'] ) && $this->value['style'] !== '' ) ? $this->value['style'] : '';
+ $color = ( isset( $this->value['color'] ) && $this->value['color'] !== '' ) ? $this->value['color'] : '';
+ $all = ( isset( $this->value['all'] ) && $this->value['all'] !== '' ) ? $this->value['all'] : '';
+
+ if ( ! empty( $this->field['all'] ) && ( $all !== '' || $color !== '' ) ) {
+
+ $output = $element .'{';
+ $output .= ( $all !== '' ) ? 'border-width:'. $all . $unit . $important .';' : '';
+ $output .= ( $color !== '' ) ? 'border-color:'. $color . $important .';' : '';
+ $output .= ( $style !== '' ) ? 'border-style:'. $style . $important .';' : '';
+ $output .= '}';
+
+ } else if ( $top !== '' || $right !== '' || $bottom !== '' || $left !== '' || $color !== '' ) {
+
+ $output = $element .'{';
+ $output .= ( $top !== '' ) ? 'border-top-width:'. $top . $unit . $important .';' : '';
+ $output .= ( $right !== '' ) ? 'border-right-width:'. $right . $unit . $important .';' : '';
+ $output .= ( $bottom !== '' ) ? 'border-bottom-width:'. $bottom . $unit . $important .';' : '';
+ $output .= ( $left !== '' ) ? 'border-left-width:'. $left . $unit . $important .';' : '';
+ $output .= ( $color !== '' ) ? 'border-color:'. $color . $important .';' : '';
+ $output .= ( $style !== '' ) ? 'border-style:'. $style . $important .';' : '';
+ $output .= '}';
+
+ }
+
+ $this->parent->output_css .= $output;
+
+ return $output;
+
+ }
+
+ }
+}
diff --git a/framework/fields/button_set/button_set.php b/framework/fields/button_set/button_set.php
new file mode 100755
index 0000000..16ff7b5
--- /dev/null
+++ b/framework/fields/button_set/button_set.php
@@ -0,0 +1,67 @@
+field, array(
+ 'multiple' => false,
+ 'options' => array(),
+ 'query_args' => array(),
+ ) );
+
+ $value = ( is_array( $this->value ) ) ? $this->value : array_filter( (array) $this->value );
+
+ echo $this->field_before();
+
+ if ( isset( $this->field['options'] ) ) {
+
+ $options = $this->field['options'];
+ $options = ( is_array( $options ) ) ? $options : array_filter( $this->field_data( $options, false, $args['query_args'] ) );
+
+ if ( is_array( $options ) && ! empty( $options ) ) {
+
+ echo '';
+
+ } else {
+
+ echo ( ! empty( $this->field['empty_message'] ) ) ? esc_attr( $this->field['empty_message'] ) : esc_html__( 'No data available.', 'wp_china_yes' );
+
+ }
+
+ }
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/framework/fields/callback/callback.php b/framework/fields/callback/callback.php
new file mode 100755
index 0000000..d3ced5c
--- /dev/null
+++ b/framework/fields/callback/callback.php
@@ -0,0 +1,31 @@
+field['function'] ) && is_callable( $this->field['function'] ) ) {
+
+ $args = ( isset( $this->field['args'] ) ) ? $this->field['args'] : null;
+
+ call_user_func( $this->field['function'], $args );
+
+ }
+
+ }
+
+ }
+}
+
diff --git a/framework/fields/checkbox/checkbox.php b/framework/fields/checkbox/checkbox.php
new file mode 100755
index 0000000..e8ea23b
--- /dev/null
+++ b/framework/fields/checkbox/checkbox.php
@@ -0,0 +1,101 @@
+field, array(
+ 'inline' => false,
+ 'query_args' => array(),
+ 'check_all' => false,
+ 'check_all_text' => esc_html__( 'Check/Uncheck All' ),
+ ) );
+
+ $inline_class = ( $args['inline'] ) ? ' class="wp_china_yes--inline-list"' : '';
+
+ echo $this->field_before();
+
+ if ( isset( $this->field['options'] ) ) {
+
+ $value = ( is_array( $this->value ) ) ? $this->value : array_filter( (array) $this->value );
+ $options = $this->field['options'];
+ $options = ( is_array( $options ) ) ? $options : array_filter( $this->field_data( $options, false, $args['query_args'] ) );
+
+ if ( is_array( $options ) && ! empty( $options ) ) {
+
+ echo '';
+
+ if ( $args['check_all'] ) {
+ echo ''. esc_html( $args['check_all_text'] ) .'
';
+ }
+
+ } else {
+
+ echo ( ! empty( $this->field['empty_message'] ) ) ? esc_attr( $this->field['empty_message'] ) : esc_html__( 'No data available.', 'wp_china_yes' );
+
+ }
+
+ } else {
+
+ echo '';
+
+ }
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/framework/fields/code_editor/code_editor.php b/framework/fields/code_editor/code_editor.php
new file mode 100755
index 0000000..4095af5
--- /dev/null
+++ b/framework/fields/code_editor/code_editor.php
@@ -0,0 +1,58 @@
+ 2,
+ 'lineNumbers' => true,
+ 'theme' => 'default',
+ 'mode' => 'htmlmixed',
+ 'cdnURL' => $this->cdn_url . $this->version,
+ );
+
+ $settings = ( ! empty( $this->field['settings'] ) ) ? $this->field['settings'] : array();
+ $settings = wp_parse_args( $settings, $default_settings );
+
+ echo $this->field_before();
+ echo '';
+ echo $this->field_after();
+
+ }
+
+ public function enqueue() {
+
+ $page = ( ! empty( $_GET[ 'page' ] ) ) ? sanitize_text_field( wp_unslash( $_GET[ 'page' ] ) ) : '';
+
+ // Do not loads CodeMirror in revslider page.
+ if ( in_array( $page, array( 'revslider' ) ) ) { return; }
+
+ if ( ! wp_script_is( 'wp_china_yes-codemirror' ) ) {
+ wp_enqueue_script( 'wp_china_yes-codemirror', esc_url( $this->cdn_url . $this->version .'/lib/codemirror.min.js' ), array( 'wp_china_yes' ), $this->version, true );
+ wp_enqueue_script( 'wp_china_yes-codemirror-loadmode', esc_url( $this->cdn_url . $this->version .'/addon/mode/loadmode.min.js' ), array( 'wp_china_yes-codemirror' ), $this->version, true );
+ }
+
+ if ( ! wp_style_is( 'wp_china_yes-codemirror' ) ) {
+ wp_enqueue_style( 'wp_china_yes-codemirror', esc_url( $this->cdn_url . $this->version .'/lib/codemirror.min.css' ), array(), $this->version );
+ }
+
+ }
+
+ }
+}
diff --git a/framework/fields/color/color.php b/framework/fields/color/color.php
new file mode 100755
index 0000000..5720701
--- /dev/null
+++ b/framework/fields/color/color.php
@@ -0,0 +1,52 @@
+field['default'] ) ) ? ' data-default-color="'. esc_attr( $this->field['default'] ) .'"' : '';
+
+ echo $this->field_before();
+ echo 'field_attributes() .'/>';
+ echo $this->field_after();
+
+ }
+
+ public function output() {
+
+ $output = '';
+ $elements = ( is_array( $this->field['output'] ) ) ? $this->field['output'] : array_filter( (array) $this->field['output'] );
+ $important = ( ! empty( $this->field['output_important'] ) ) ? '!important' : '';
+ $mode = ( ! empty( $this->field['output_mode'] ) ) ? $this->field['output_mode'] : 'color';
+
+ if ( ! empty( $elements ) && isset( $this->value ) && $this->value !== '' ) {
+ foreach ( $elements as $key_property => $element ) {
+ if ( is_numeric( $key_property ) ) {
+ $output = implode( ',', $elements ) .'{'. $mode .':'. $this->value . $important .';}';
+ break;
+ } else {
+ $output .= $element .'{'. $key_property .':'. $this->value . $important .'}';
+ }
+ }
+ }
+
+ $this->parent->output_css .= $output;
+
+ return $output;
+
+ }
+
+ }
+}
diff --git a/framework/fields/color_group/color_group.php b/framework/fields/color_group/color_group.php
new file mode 100755
index 0000000..842adc5
--- /dev/null
+++ b/framework/fields/color_group/color_group.php
@@ -0,0 +1,42 @@
+field['options'] ) ) ? $this->field['options'] : array();
+
+ echo $this->field_before();
+
+ if ( ! empty( $options ) ) {
+ foreach ( $options as $key => $option ) {
+
+ $color_value = ( ! empty( $this->value[$key] ) ) ? $this->value[$key] : '';
+ $default_attr = ( ! empty( $this->field['default'][$key] ) ) ? ' data-default-color="'. esc_attr( $this->field['default'][$key] ) .'"' : '';
+
+ echo '';
+ echo '
'. $option .'
';
+ echo '
field_attributes() .'/>';
+ echo '
';
+
+ }
+ }
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/framework/fields/content/content.php b/framework/fields/content/content.php
new file mode 100755
index 0000000..dadf3bc
--- /dev/null
+++ b/framework/fields/content/content.php
@@ -0,0 +1,28 @@
+field['content'] ) ) {
+
+ echo $this->field['content'];
+
+ }
+
+ }
+
+ }
+}
diff --git a/framework/fields/date/date.php b/framework/fields/date/date.php
new file mode 100755
index 0000000..e03b2f6
--- /dev/null
+++ b/framework/fields/date/date.php
@@ -0,0 +1,64 @@
+ 'mm/dd/yy',
+ );
+
+ $settings = ( ! empty( $this->field['settings'] ) ) ? $this->field['settings'] : array();
+ $settings = wp_parse_args( $settings, $default_settings );
+
+ echo $this->field_before();
+
+ if ( ! empty( $this->field['from_to'] ) ) {
+
+ $args = wp_parse_args( $this->field, array(
+ 'text_from' => esc_html__( 'From', 'wp_china_yes' ),
+ 'text_to' => esc_html__( 'To', 'wp_china_yes' ),
+ ) );
+
+ $value = wp_parse_args( $this->value, array(
+ 'from' => '',
+ 'to' => '',
+ ) );
+
+ echo '';
+ echo '';
+
+ } else {
+
+ echo 'field_attributes() .'/>';
+
+ }
+
+ echo '';
+
+ echo $this->field_after();
+
+ }
+
+ public function enqueue() {
+
+ if ( ! wp_script_is( 'jquery-ui-datepicker' ) ) {
+ wp_enqueue_script( 'jquery-ui-datepicker' );
+ }
+
+ }
+
+ }
+}
diff --git a/framework/fields/datetime/datetime.php b/framework/fields/datetime/datetime.php
new file mode 100755
index 0000000..db33ea1
--- /dev/null
+++ b/framework/fields/datetime/datetime.php
@@ -0,0 +1,61 @@
+ true,
+ );
+
+ $settings = ( ! empty( $this->field['settings'] ) ) ? $this->field['settings'] : array();
+
+ if ( ! isset( $settings['noCalendar'] ) ) {
+ $defaults['dateFormat'] = 'm/d/Y';
+ }
+
+ $settings = wp_parse_args( $settings, $defaults );
+
+ echo $this->field_before();
+
+ if ( ! empty( $this->field['from_to'] ) ) {
+
+ $args = wp_parse_args( $this->field, array(
+ 'text_from' => esc_html__( 'From', 'wp_china_yes' ),
+ 'text_to' => esc_html__( 'To', 'wp_china_yes' ),
+ ) );
+
+ $value = wp_parse_args( $this->value, array(
+ 'from' => '',
+ 'to' => '',
+ ) );
+
+ echo '';
+ echo '';
+
+ } else {
+
+ echo 'field_attributes() .'/>';
+
+ }
+
+ echo '';
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/framework/fields/dimensions/dimensions.php b/framework/fields/dimensions/dimensions.php
new file mode 100755
index 0000000..3b5a28c
--- /dev/null
+++ b/framework/fields/dimensions/dimensions.php
@@ -0,0 +1,101 @@
+field, array(
+ 'width_icon' => '',
+ 'height_icon' => '',
+ 'width_placeholder' => esc_html__( 'width', 'wp_china_yes' ),
+ 'height_placeholder' => esc_html__( 'height', 'wp_china_yes' ),
+ 'width' => true,
+ 'height' => true,
+ 'unit' => true,
+ 'show_units' => true,
+ 'units' => array( 'px', '%', 'em' )
+ ) );
+
+ $default_values = array(
+ 'width' => '',
+ 'height' => '',
+ 'unit' => 'px',
+ );
+
+ $value = wp_parse_args( $this->value, $default_values );
+ $unit = ( count( $args['units'] ) === 1 && ! empty( $args['unit'] ) ) ? $args['units'][0] : '';
+ $is_unit = ( ! empty( $unit ) ) ? ' wp_china_yes--is-unit' : '';
+
+ echo $this->field_before();
+
+ echo '';
+
+ echo $this->field_after();
+
+ }
+
+ public function output() {
+
+ $output = '';
+ $element = ( is_array( $this->field['output'] ) ) ? join( ',', $this->field['output'] ) : $this->field['output'];
+ $prefix = ( ! empty( $this->field['output_prefix'] ) ) ? $this->field['output_prefix'] .'-' : '';
+ $important = ( ! empty( $this->field['output_important'] ) ) ? '!important' : '';
+ $unit = ( ! empty( $this->value['unit'] ) ) ? $this->value['unit'] : 'px';
+ $width = ( isset( $this->value['width'] ) && $this->value['width'] !== '' ) ? $prefix .'width:'. $this->value['width'] . $unit . $important .';' : '';
+ $height = ( isset( $this->value['height'] ) && $this->value['height'] !== '' ) ? $prefix .'height:'. $this->value['height'] . $unit . $important .';' : '';
+
+ if ( $width !== '' || $height !== '' ) {
+ $output = $element .'{'. $width . $height .'}';
+ }
+
+ $this->parent->output_css .= $output;
+
+ return $output;
+
+ }
+
+ }
+}
diff --git a/framework/fields/fieldset/fieldset.php b/framework/fields/fieldset/fieldset.php
new file mode 100755
index 0000000..638fcc5
--- /dev/null
+++ b/framework/fields/fieldset/fieldset.php
@@ -0,0 +1,41 @@
+field_before();
+
+ echo '';
+
+ foreach ( $this->field['fields'] as $field ) {
+
+ $field_id = ( isset( $field['id'] ) ) ? $field['id'] : '';
+ $field_default = ( isset( $field['default'] ) ) ? $field['default'] : '';
+ $field_value = ( isset( $this->value[$field_id] ) ) ? $this->value[$field_id] : $field_default;
+ $unique_id = ( ! empty( $this->unique ) ) ? $this->unique .'['. $this->field['id'] .']' : $this->field['id'];
+
+ WP_CHINA_YES::field( $field, $field_value, $unique_id, 'field/fieldset' );
+
+ }
+
+ echo '
';
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/framework/fields/gallery/gallery.php b/framework/fields/gallery/gallery.php
new file mode 100755
index 0000000..cb62c6f
--- /dev/null
+++ b/framework/fields/gallery/gallery.php
@@ -0,0 +1,52 @@
+field, array(
+ 'add_title' => esc_html__( 'Add Gallery', 'wp_china_yes' ),
+ 'edit_title' => esc_html__( 'Edit Gallery', 'wp_china_yes' ),
+ 'clear_title' => esc_html__( 'Clear', 'wp_china_yes' ),
+ ) );
+
+ $hidden = ( empty( $this->value ) ) ? ' hidden' : '';
+
+ echo $this->field_before();
+
+ echo '';
+ if ( ! empty( $this->value ) ) {
+
+ $values = explode( ',', $this->value );
+
+ foreach ( $values as $id ) {
+ $attachment = wp_get_attachment_image_src( $id, 'thumbnail' );
+ echo ' .')
';
+ }
+
+ }
+ echo '
';
+
+ echo ''. $args['add_title'] .'';
+ echo ''. $args['edit_title'] .'';
+ echo ''. $args['clear_title'] .'';
+ echo 'field_attributes() .'/>';
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/framework/fields/group/group.php b/framework/fields/group/group.php
new file mode 100755
index 0000000..6d06c34
--- /dev/null
+++ b/framework/fields/group/group.php
@@ -0,0 +1,164 @@
+field, array(
+ 'max' => 0,
+ 'min' => 0,
+ 'fields' => array(),
+ 'button_title' => esc_html__( 'Add New', 'wp_china_yes' ),
+ 'accordion_title_prefix' => '',
+ 'accordion_title_number' => false,
+ 'accordion_title_auto' => true,
+ 'accordion_title_by' => array(),
+ 'accordion_title_by_prefix' => ' ',
+ ) );
+
+ $title_prefix = ( ! empty( $args['accordion_title_prefix'] ) ) ? $args['accordion_title_prefix'] : '';
+ $title_number = ( ! empty( $args['accordion_title_number'] ) ) ? true : false;
+ $title_auto = ( ! empty( $args['accordion_title_auto'] ) ) ? true : false;
+ $title_first = ( isset( $this->field['fields'][0]['id'] ) ) ? $this->field['fields'][0]['id'] : $this->field['fields'][1]['id'];
+ $title_by = ( is_array( $args['accordion_title_by'] ) ) ? $args['accordion_title_by'] : (array) $args['accordion_title_by'];
+ $title_by = ( empty( $title_by ) ) ? array( $title_first ) : $title_by;
+ $title_by_prefix = ( ! empty( $args['accordion_title_by_prefix'] ) ) ? $args['accordion_title_by_prefix'] : '';
+
+ if ( preg_match( '/'. preg_quote( '['. $this->field['id'] .']' ) .'/', $this->unique ) ) {
+
+ echo ''. esc_html__( 'Error: Field ID conflict.', 'wp_china_yes' ) .'
';
+
+ } else {
+
+ echo $this->field_before();
+
+ echo '';
+
+ echo '
';
+ echo '';
+ echo '';
+ echo '';
+ echo '
';
+
+ echo '
';
+ echo '';
+ echo ( $title_number ) ? '' : '';
+ echo ( $title_prefix ) ? ''. esc_attr( $title_prefix ) .'' : '';
+ echo ( $title_auto ) ? '' : '';
+ echo '';
+ echo '
';
+
+ echo '
';
+ foreach ( $this->field['fields'] as $field ) {
+
+ $field_default = ( isset( $field['default'] ) ) ? $field['default'] : '';
+ $field_unique = ( ! empty( $this->unique ) ) ? $this->unique .'['. $this->field['id'] .'][0]' : $this->field['id'] .'[0]';
+
+ WP_CHINA_YES::field( $field, $field_default, '___'. $field_unique, 'field/group' );
+
+ }
+ echo '
';
+
+ echo '
';
+
+ echo '';
+
+ if ( ! empty( $this->value ) ) {
+
+ $num = 0;
+
+ foreach ( $this->value as $value ) {
+
+ $title = '';
+
+ if ( ! empty( $title_by ) ) {
+
+ $titles = array();
+
+ foreach ( $title_by as $title_key ) {
+ if ( isset( $value[ $title_key ] ) ) {
+ $titles[] = $value[ $title_key ];
+ }
+ }
+
+ $title = join( $title_by_prefix, $titles );
+
+ }
+
+ $title = ( is_array( $title ) ) ? reset( $title ) : $title;
+
+ echo '
';
+
+ echo '
';
+ echo '';
+ echo '';
+ echo '';
+ echo '
';
+
+ echo '
';
+ echo '';
+ echo ( $title_number ) ? ''. esc_attr( $num+1 ) .'.' : '';
+ echo ( $title_prefix ) ? ''. esc_attr( $title_prefix ) .'' : '';
+ echo ( $title_auto ) ? '' . esc_attr( $title ) .'' : '';
+ echo '';
+ echo '
';
+
+ echo '
';
+
+ foreach ( $this->field['fields'] as $field ) {
+
+ $field_unique = ( ! empty( $this->unique ) ) ? $this->unique .'['. $this->field['id'] .']['. $num .']' : $this->field['id'] .'['. $num .']';
+ $field_value = ( isset( $field['id'] ) && isset( $value[$field['id']] ) ) ? $value[$field['id']] : '';
+
+ WP_CHINA_YES::field( $field, $field_value, $field_unique, 'field/group' );
+
+ }
+
+ echo '
';
+
+ echo '
';
+
+ $num++;
+
+ }
+
+ }
+
+ echo '
';
+
+ echo ''. esc_html__( 'You cannot add more.', 'wp_china_yes' ) .'
';
+ echo ''. esc_html__( 'You cannot remove more.', 'wp_china_yes' ) .'
';
+ echo ''. $args['button_title'] .'';
+
+ echo $this->field_after();
+
+ }
+
+ }
+
+ public function enqueue() {
+
+ if ( ! wp_script_is( 'jquery-ui-accordion' ) ) {
+ wp_enqueue_script( 'jquery-ui-accordion' );
+ }
+
+ if ( ! wp_script_is( 'jquery-ui-sortable' ) ) {
+ wp_enqueue_script( 'jquery-ui-sortable' );
+ }
+
+ }
+
+ }
+}
diff --git a/framework/fields/heading/heading.php b/framework/fields/heading/heading.php
new file mode 100755
index 0000000..aff7e32
--- /dev/null
+++ b/framework/fields/heading/heading.php
@@ -0,0 +1,24 @@
+field['content'] ) ) ? $this->field['content'] : '';
+
+ }
+
+ }
+}
diff --git a/framework/fields/icon/fa4-icons.php b/framework/fields/icon/fa4-icons.php
new file mode 100755
index 0000000..c064689
--- /dev/null
+++ b/framework/fields/icon/fa4-icons.php
@@ -0,0 +1,12 @@
+ 'Font Awesome',
+ 'icons' => array( 'fa fa-glass','fa fa-music','fa fa-search','fa fa-envelope-o','fa fa-heart','fa fa-star','fa fa-star-o','fa fa-user','fa fa-film','fa fa-th-large','fa fa-th','fa fa-th-list','fa fa-check','fa fa-times','fa fa-search-plus','fa fa-search-minus','fa fa-power-off','fa fa-signal','fa fa-cog','fa fa-trash-o','fa fa-home','fa fa-file-o','fa fa-clock-o','fa fa-road','fa fa-download','fa fa-arrow-circle-o-down','fa fa-arrow-circle-o-up','fa fa-inbox','fa fa-play-circle-o','fa fa-repeat','fa fa-refresh','fa fa-list-alt','fa fa-lock','fa fa-flag','fa fa-headphones','fa fa-volume-off','fa fa-volume-down','fa fa-volume-up','fa fa-qrcode','fa fa-barcode','fa fa-tag','fa fa-tags','fa fa-book','fa fa-bookmark','fa fa-print','fa fa-camera','fa fa-font','fa fa-bold','fa fa-italic','fa fa-text-height','fa fa-text-width','fa fa-align-left','fa fa-align-center','fa fa-align-right','fa fa-align-justify','fa fa-list','fa fa-outdent','fa fa-indent','fa fa-video-camera','fa fa-picture-o','fa fa-pencil','fa fa-map-marker','fa fa-adjust','fa fa-tint','fa fa-pencil-square-o','fa fa-share-square-o','fa fa-check-square-o','fa fa-arrows','fa fa-step-backward','fa fa-fast-backward','fa fa-backward','fa fa-play','fa fa-pause','fa fa-stop','fa fa-forward','fa fa-fast-forward','fa fa-step-forward','fa fa-eject','fa fa-chevron-left','fa fa-chevron-right','fa fa-plus-circle','fa fa-minus-circle','fa fa-times-circle','fa fa-check-circle','fa fa-question-circle','fa fa-info-circle','fa fa-crosshairs','fa fa-times-circle-o','fa fa-check-circle-o','fa fa-ban','fa fa-arrow-left','fa fa-arrow-right','fa fa-arrow-up','fa fa-arrow-down','fa fa-share','fa fa-expand','fa fa-compress','fa fa-plus','fa fa-minus','fa fa-asterisk','fa fa-exclamation-circle','fa fa-gift','fa fa-leaf','fa fa-fire','fa fa-eye','fa fa-eye-slash','fa fa-exclamation-triangle','fa fa-plane','fa fa-calendar','fa fa-random','fa fa-comment','fa fa-magnet','fa fa-chevron-up','fa fa-chevron-down','fa fa-retweet','fa fa-shopping-cart','fa fa-folder','fa fa-folder-open','fa fa-arrows-v','fa fa-arrows-h','fa fa-bar-chart','fa fa-twitter-square','fa fa-facebook-square','fa fa-camera-retro','fa fa-key','fa fa-cogs','fa fa-comments','fa fa-thumbs-o-up','fa fa-thumbs-o-down','fa fa-star-half','fa fa-heart-o','fa fa-sign-out','fa fa-linkedin-square','fa fa-thumb-tack','fa fa-external-link','fa fa-sign-in','fa fa-trophy','fa fa-github-square','fa fa-upload','fa fa-lemon-o','fa fa-phone','fa fa-square-o','fa fa-bookmark-o','fa fa-phone-square','fa fa-twitter','fa fa-facebook','fa fa-github','fa fa-unlock','fa fa-credit-card','fa fa-rss','fa fa-hdd-o','fa fa-bullhorn','fa fa-bell','fa fa-certificate','fa fa-hand-o-right','fa fa-hand-o-left','fa fa-hand-o-up','fa fa-hand-o-down','fa fa-arrow-circle-left','fa fa-arrow-circle-right','fa fa-arrow-circle-up','fa fa-arrow-circle-down','fa fa-globe','fa fa-wrench','fa fa-tasks','fa fa-filter','fa fa-briefcase','fa fa-arrows-alt','fa fa-users','fa fa-link','fa fa-cloud','fa fa-flask','fa fa-scissors','fa fa-files-o','fa fa-paperclip','fa fa-floppy-o','fa fa-square','fa fa-bars','fa fa-list-ul','fa fa-list-ol','fa fa-strikethrough','fa fa-underline','fa fa-table','fa fa-magic','fa fa-truck','fa fa-pinterest','fa fa-pinterest-square','fa fa-google-plus-square','fa fa-google-plus','fa fa-money','fa fa-caret-down','fa fa-caret-up','fa fa-caret-left','fa fa-caret-right','fa fa-columns','fa fa-sort','fa fa-sort-desc','fa fa-sort-asc','fa fa-envelope','fa fa-linkedin','fa fa-undo','fa fa-gavel','fa fa-tachometer','fa fa-comment-o','fa fa-comments-o','fa fa-bolt','fa fa-sitemap','fa fa-umbrella','fa fa-clipboard','fa fa-lightbulb-o','fa fa-exchange','fa fa-cloud-download','fa fa-cloud-upload','fa fa-user-md','fa fa-stethoscope','fa fa-suitcase','fa fa-bell-o','fa fa-coffee','fa fa-cutlery','fa fa-file-text-o','fa fa-building-o','fa fa-hospital-o','fa fa-ambulance','fa fa-medkit','fa fa-fighter-jet','fa fa-beer','fa fa-h-square','fa fa-plus-square','fa fa-angle-double-left','fa fa-angle-double-right','fa fa-angle-double-up','fa fa-angle-double-down','fa fa-angle-left','fa fa-angle-right','fa fa-angle-up','fa fa-angle-down','fa fa-desktop','fa fa-laptop','fa fa-tablet','fa fa-mobile','fa fa-circle-o','fa fa-quote-left','fa fa-quote-right','fa fa-spinner','fa fa-circle','fa fa-reply','fa fa-github-alt','fa fa-folder-o','fa fa-folder-open-o','fa fa-smile-o','fa fa-frown-o','fa fa-meh-o','fa fa-gamepad','fa fa-keyboard-o','fa fa-flag-o','fa fa-flag-checkered','fa fa-terminal','fa fa-code','fa fa-reply-all','fa fa-star-half-o','fa fa-location-arrow','fa fa-crop','fa fa-code-fork','fa fa-chain-broken','fa fa-question','fa fa-info','fa fa-exclamation','fa fa-superscript','fa fa-subscript','fa fa-eraser','fa fa-puzzle-piece','fa fa-microphone','fa fa-microphone-slash','fa fa-shield','fa fa-calendar-o','fa fa-fire-extinguisher','fa fa-rocket','fa fa-maxcdn','fa fa-chevron-circle-left','fa fa-chevron-circle-right','fa fa-chevron-circle-up','fa fa-chevron-circle-down','fa fa-html5','fa fa-css3','fa fa-anchor','fa fa-unlock-alt','fa fa-bullseye','fa fa-ellipsis-h','fa fa-ellipsis-v','fa fa-rss-square','fa fa-play-circle','fa fa-ticket','fa fa-minus-square','fa fa-minus-square-o','fa fa-level-up','fa fa-level-down','fa fa-check-square','fa fa-pencil-square','fa fa-external-link-square','fa fa-share-square','fa fa-compass','fa fa-caret-square-o-down','fa fa-caret-square-o-up','fa fa-caret-square-o-right','fa fa-eur','fa fa-gbp','fa fa-usd','fa fa-inr','fa fa-jpy','fa fa-rub','fa fa-krw','fa fa-btc','fa fa-file','fa fa-file-text','fa fa-sort-alpha-asc','fa fa-sort-alpha-desc','fa fa-sort-amount-asc','fa fa-sort-amount-desc','fa fa-sort-numeric-asc','fa fa-sort-numeric-desc','fa fa-thumbs-up','fa fa-thumbs-down','fa fa-youtube-square','fa fa-youtube','fa fa-xing','fa fa-xing-square','fa fa-youtube-play','fa fa-dropbox','fa fa-stack-overflow','fa fa-instagram','fa fa-flickr','fa fa-adn','fa fa-bitbucket','fa fa-bitbucket-square','fa fa-tumblr','fa fa-tumblr-square','fa fa-long-arrow-down','fa fa-long-arrow-up','fa fa-long-arrow-left','fa fa-long-arrow-right','fa fa-apple','fa fa-windows','fa fa-android','fa fa-linux','fa fa-dribbble','fa fa-skype','fa fa-foursquare','fa fa-trello','fa fa-female','fa fa-male','fa fa-gratipay','fa fa-sun-o','fa fa-moon-o','fa fa-archive','fa fa-bug','fa fa-vk','fa fa-weibo','fa fa-renren','fa fa-pagelines','fa fa-stack-exchange','fa fa-arrow-circle-o-right','fa fa-arrow-circle-o-left','fa fa-caret-square-o-left','fa fa-dot-circle-o','fa fa-wheelchair','fa fa-vimeo-square','fa fa-try','fa fa-plus-square-o','fa fa-space-shuttle','fa fa-slack','fa fa-envelope-square','fa fa-wordpress','fa fa-openid','fa fa-university','fa fa-graduation-cap','fa fa-yahoo','fa fa-google','fa fa-reddit','fa fa-reddit-square','fa fa-stumbleupon-circle','fa fa-stumbleupon','fa fa-delicious','fa fa-digg','fa fa-pied-piper-pp','fa fa-pied-piper-alt','fa fa-drupal','fa fa-joomla','fa fa-language','fa fa-fax','fa fa-building','fa fa-child','fa fa-paw','fa fa-spoon','fa fa-cube','fa fa-cubes','fa fa-behance','fa fa-behance-square','fa fa-steam','fa fa-steam-square','fa fa-recycle','fa fa-car','fa fa-taxi','fa fa-tree','fa fa-spotify','fa fa-deviantart','fa fa-soundcloud','fa fa-database','fa fa-file-pdf-o','fa fa-file-word-o','fa fa-file-excel-o','fa fa-file-powerpoint-o','fa fa-file-image-o','fa fa-file-archive-o','fa fa-file-audio-o','fa fa-file-video-o','fa fa-file-code-o','fa fa-vine','fa fa-codepen','fa fa-jsfiddle','fa fa-life-ring','fa fa-circle-o-notch','fa fa-rebel','fa fa-empire','fa fa-git-square','fa fa-git','fa fa-hacker-news','fa fa-tencent-weibo','fa fa-qq','fa fa-weixin','fa fa-paper-plane','fa fa-paper-plane-o','fa fa-history','fa fa-circle-thin','fa fa-header','fa fa-paragraph','fa fa-sliders','fa fa-share-alt','fa fa-share-alt-square','fa fa-bomb','fa fa-futbol-o','fa fa-tty','fa fa-binoculars','fa fa-plug','fa fa-slideshare','fa fa-twitch','fa fa-yelp','fa fa-newspaper-o','fa fa-wifi','fa fa-calculator','fa fa-paypal','fa fa-google-wallet','fa fa-cc-visa','fa fa-cc-mastercard','fa fa-cc-discover','fa fa-cc-amex','fa fa-cc-paypal','fa fa-cc-stripe','fa fa-bell-slash','fa fa-bell-slash-o','fa fa-trash','fa fa-copyright','fa fa-at','fa fa-eyedropper','fa fa-paint-brush','fa fa-birthday-cake','fa fa-area-chart','fa fa-pie-chart','fa fa-line-chart','fa fa-lastfm','fa fa-lastfm-square','fa fa-toggle-off','fa fa-toggle-on','fa fa-bicycle','fa fa-bus','fa fa-ioxhost','fa fa-angellist','fa fa-cc','fa fa-ils','fa fa-meanpath','fa fa-buysellads','fa fa-connectdevelop','fa fa-dashcube','fa fa-forumbee','fa fa-leanpub','fa fa-sellsy','fa fa-shirtsinbulk','fa fa-simplybuilt','fa fa-skyatlas','fa fa-cart-plus','fa fa-cart-arrow-down','fa fa-diamond','fa fa-ship','fa fa-user-secret','fa fa-motorcycle','fa fa-street-view','fa fa-heartbeat','fa fa-venus','fa fa-mars','fa fa-mercury','fa fa-transgender','fa fa-transgender-alt','fa fa-venus-double','fa fa-mars-double','fa fa-venus-mars','fa fa-mars-stroke','fa fa-mars-stroke-v','fa fa-mars-stroke-h','fa fa-neuter','fa fa-genderless','fa fa-facebook-official','fa fa-pinterest-p','fa fa-whatsapp','fa fa-server','fa fa-user-plus','fa fa-user-times','fa fa-bed','fa fa-viacoin','fa fa-train','fa fa-subway','fa fa-medium','fa fa-y-combinator','fa fa-optin-monster','fa fa-opencart','fa fa-expeditedssl','fa fa-battery-full','fa fa-battery-three-quarters','fa fa-battery-half','fa fa-battery-quarter','fa fa-battery-empty','fa fa-mouse-pointer','fa fa-i-cursor','fa fa-object-group','fa fa-object-ungroup','fa fa-sticky-note','fa fa-sticky-note-o','fa fa-cc-jcb','fa fa-cc-diners-club','fa fa-clone','fa fa-balance-scale','fa fa-hourglass-o','fa fa-hourglass-start','fa fa-hourglass-half','fa fa-hourglass-end','fa fa-hourglass','fa fa-hand-rock-o','fa fa-hand-paper-o','fa fa-hand-scissors-o','fa fa-hand-lizard-o','fa fa-hand-spock-o','fa fa-hand-pointer-o','fa fa-hand-peace-o','fa fa-trademark','fa fa-registered','fa fa-creative-commons','fa fa-gg','fa fa-gg-circle','fa fa-tripadvisor','fa fa-odnoklassniki','fa fa-odnoklassniki-square','fa fa-get-pocket','fa fa-wikipedia-w','fa fa-safari','fa fa-chrome','fa fa-firefox','fa fa-opera','fa fa-internet-explorer','fa fa-television','fa fa-contao','fa fa-500px','fa fa-amazon','fa fa-calendar-plus-o','fa fa-calendar-minus-o','fa fa-calendar-times-o','fa fa-calendar-check-o','fa fa-industry','fa fa-map-pin','fa fa-map-signs','fa fa-map-o','fa fa-map','fa fa-commenting','fa fa-commenting-o','fa fa-houzz','fa fa-vimeo','fa fa-black-tie','fa fa-fonticons','fa fa-reddit-alien','fa fa-edge','fa fa-credit-card-alt','fa fa-codiepie','fa fa-modx','fa fa-fort-awesome','fa fa-usb','fa fa-product-hunt','fa fa-mixcloud','fa fa-scribd','fa fa-pause-circle','fa fa-pause-circle-o','fa fa-stop-circle','fa fa-stop-circle-o','fa fa-shopping-bag','fa fa-shopping-basket','fa fa-hashtag','fa fa-bluetooth','fa fa-bluetooth-b','fa fa-percent','fa fa-gitlab','fa fa-wpbeginner','fa fa-wpforms','fa fa-envira','fa fa-universal-access','fa fa-wheelchair-alt','fa fa-question-circle-o','fa fa-blind','fa fa-audio-description','fa fa-volume-control-phone','fa fa-braille','fa fa-assistive-listening-systems','fa fa-american-sign-language-interpreting','fa fa-deaf','fa fa-glide','fa fa-glide-g','fa fa-sign-language','fa fa-low-vision','fa fa-viadeo','fa fa-viadeo-square','fa fa-snapchat','fa fa-snapchat-ghost','fa fa-snapchat-square','fa fa-pied-piper','fa fa-first-order','fa fa-yoast','fa fa-themeisle','fa fa-google-plus-official','fa fa-font-awesome','fa fa-handshake-o','fa fa-envelope-open','fa fa-envelope-open-o','fa fa-linode','fa fa-address-book','fa fa-address-book-o','fa fa-address-card','fa fa-address-card-o','fa fa-user-circle','fa fa-user-circle-o','fa fa-user-o','fa fa-id-badge','fa fa-id-card','fa fa-id-card-o','fa fa-quora','fa fa-free-code-camp','fa fa-telegram','fa fa-thermometer-full','fa fa-thermometer-three-quarters','fa fa-thermometer-half','fa fa-thermometer-quarter','fa fa-thermometer-empty','fa fa-shower','fa fa-bath','fa fa-podcast','fa fa-window-maximize','fa fa-window-minimize','fa fa-window-restore','fa fa-window-close','fa fa-window-close-o','fa fa-bandcamp','fa fa-grav','fa fa-etsy','fa fa-imdb','fa fa-ravelry','fa fa-eercast','fa fa-microchip','fa fa-snowflake-o','fa fa-superpowers','fa fa-wpexplorer','fa fa-meetup' )
+ ) );
+ }
+}
diff --git a/framework/fields/icon/fa5-icons.php b/framework/fields/icon/fa5-icons.php
new file mode 100755
index 0000000..e2479b1
--- /dev/null
+++ b/framework/fields/icon/fa5-icons.php
@@ -0,0 +1,12 @@
+ 'Font Awesome 5 Free',
+ 'icons' => array( 'fab fa-500px','fab fa-accessible-icon','fab fa-accusoft','fab fa-acquisitions-incorporated','fas fa-ad','fas fa-address-book','far fa-address-book','fas fa-address-card','far fa-address-card','fas fa-adjust','fab fa-adn','fab fa-adversal','fab fa-affiliatetheme','fas fa-air-freshener','fab fa-airbnb','fab fa-algolia','fas fa-align-center','fas fa-align-justify','fas fa-align-left','fas fa-align-right','fab fa-alipay','fas fa-allergies','fab fa-amazon','fab fa-amazon-pay','fas fa-ambulance','fas fa-american-sign-language-interpreting','fab fa-amilia','fas fa-anchor','fab fa-android','fab fa-angellist','fas fa-angle-double-down','fas fa-angle-double-left','fas fa-angle-double-right','fas fa-angle-double-up','fas fa-angle-down','fas fa-angle-left','fas fa-angle-right','fas fa-angle-up','fas fa-angry','far fa-angry','fab fa-angrycreative','fab fa-angular','fas fa-ankh','fab fa-app-store','fab fa-app-store-ios','fab fa-apper','fab fa-apple','fas fa-apple-alt','fab fa-apple-pay','fas fa-archive','fas fa-archway','fas fa-arrow-alt-circle-down','far fa-arrow-alt-circle-down','fas fa-arrow-alt-circle-left','far fa-arrow-alt-circle-left','fas fa-arrow-alt-circle-right','far fa-arrow-alt-circle-right','fas fa-arrow-alt-circle-up','far fa-arrow-alt-circle-up','fas fa-arrow-circle-down','fas fa-arrow-circle-left','fas fa-arrow-circle-right','fas fa-arrow-circle-up','fas fa-arrow-down','fas fa-arrow-left','fas fa-arrow-right','fas fa-arrow-up','fas fa-arrows-alt','fas fa-arrows-alt-h','fas fa-arrows-alt-v','fab fa-artstation','fas fa-assistive-listening-systems','fas fa-asterisk','fab fa-asymmetrik','fas fa-at','fas fa-atlas','fab fa-atlassian','fas fa-atom','fab fa-audible','fas fa-audio-description','fab fa-autoprefixer','fab fa-avianex','fab fa-aviato','fas fa-award','fab fa-aws','fas fa-baby','fas fa-baby-carriage','fas fa-backspace','fas fa-backward','fas fa-bacon','fas fa-bacteria','fas fa-bacterium','fas fa-bahai','fas fa-balance-scale','fas fa-balance-scale-left','fas fa-balance-scale-right','fas fa-ban','fas fa-band-aid','fab fa-bandcamp','fas fa-barcode','fas fa-bars','fas fa-baseball-ball','fas fa-basketball-ball','fas fa-bath','fas fa-battery-empty','fas fa-battery-full','fas fa-battery-half','fas fa-battery-quarter','fas fa-battery-three-quarters','fab fa-battle-net','fas fa-bed','fas fa-beer','fab fa-behance','fab fa-behance-square','fas fa-bell','far fa-bell','fas fa-bell-slash','far fa-bell-slash','fas fa-bezier-curve','fas fa-bible','fas fa-bicycle','fas fa-biking','fab fa-bimobject','fas fa-binoculars','fas fa-biohazard','fas fa-birthday-cake','fab fa-bitbucket','fab fa-bitcoin','fab fa-bity','fab fa-black-tie','fab fa-blackberry','fas fa-blender','fas fa-blender-phone','fas fa-blind','fas fa-blog','fab fa-blogger','fab fa-blogger-b','fab fa-bluetooth','fab fa-bluetooth-b','fas fa-bold','fas fa-bolt','fas fa-bomb','fas fa-bone','fas fa-bong','fas fa-book','fas fa-book-dead','fas fa-book-medical','fas fa-book-open','fas fa-book-reader','fas fa-bookmark','far fa-bookmark','fab fa-bootstrap','fas fa-border-all','fas fa-border-none','fas fa-border-style','fas fa-bowling-ball','fas fa-box','fas fa-box-open','fas fa-box-tissue','fas fa-boxes','fas fa-braille','fas fa-brain','fas fa-bread-slice','fas fa-briefcase','fas fa-briefcase-medical','fas fa-broadcast-tower','fas fa-broom','fas fa-brush','fab fa-btc','fab fa-buffer','fas fa-bug','fas fa-building','far fa-building','fas fa-bullhorn','fas fa-bullseye','fas fa-burn','fab fa-buromobelexperte','fas fa-bus','fas fa-bus-alt','fas fa-business-time','fab fa-buy-n-large','fab fa-buysellads','fas fa-calculator','fas fa-calendar','far fa-calendar','fas fa-calendar-alt','far fa-calendar-alt','fas fa-calendar-check','far fa-calendar-check','fas fa-calendar-day','fas fa-calendar-minus','far fa-calendar-minus','fas fa-calendar-plus','far fa-calendar-plus','fas fa-calendar-times','far fa-calendar-times','fas fa-calendar-week','fas fa-camera','fas fa-camera-retro','fas fa-campground','fab fa-canadian-maple-leaf','fas fa-candy-cane','fas fa-cannabis','fas fa-capsules','fas fa-car','fas fa-car-alt','fas fa-car-battery','fas fa-car-crash','fas fa-car-side','fas fa-caravan','fas fa-caret-down','fas fa-caret-left','fas fa-caret-right','fas fa-caret-square-down','far fa-caret-square-down','fas fa-caret-square-left','far fa-caret-square-left','fas fa-caret-square-right','far fa-caret-square-right','fas fa-caret-square-up','far fa-caret-square-up','fas fa-caret-up','fas fa-carrot','fas fa-cart-arrow-down','fas fa-cart-plus','fas fa-cash-register','fas fa-cat','fab fa-cc-amazon-pay','fab fa-cc-amex','fab fa-cc-apple-pay','fab fa-cc-diners-club','fab fa-cc-discover','fab fa-cc-jcb','fab fa-cc-mastercard','fab fa-cc-paypal','fab fa-cc-stripe','fab fa-cc-visa','fab fa-centercode','fab fa-centos','fas fa-certificate','fas fa-chair','fas fa-chalkboard','fas fa-chalkboard-teacher','fas fa-charging-station','fas fa-chart-area','fas fa-chart-bar','far fa-chart-bar','fas fa-chart-line','fas fa-chart-pie','fas fa-check','fas fa-check-circle','far fa-check-circle','fas fa-check-double','fas fa-check-square','far fa-check-square','fas fa-cheese','fas fa-chess','fas fa-chess-bishop','fas fa-chess-board','fas fa-chess-king','fas fa-chess-knight','fas fa-chess-pawn','fas fa-chess-queen','fas fa-chess-rook','fas fa-chevron-circle-down','fas fa-chevron-circle-left','fas fa-chevron-circle-right','fas fa-chevron-circle-up','fas fa-chevron-down','fas fa-chevron-left','fas fa-chevron-right','fas fa-chevron-up','fas fa-child','fab fa-chrome','fab fa-chromecast','fas fa-church','fas fa-circle','far fa-circle','fas fa-circle-notch','fas fa-city','fas fa-clinic-medical','fas fa-clipboard','far fa-clipboard','fas fa-clipboard-check','fas fa-clipboard-list','fas fa-clock','far fa-clock','fas fa-clone','far fa-clone','fas fa-closed-captioning','far fa-closed-captioning','fas fa-cloud','fas fa-cloud-download-alt','fas fa-cloud-meatball','fas fa-cloud-moon','fas fa-cloud-moon-rain','fas fa-cloud-rain','fas fa-cloud-showers-heavy','fas fa-cloud-sun','fas fa-cloud-sun-rain','fas fa-cloud-upload-alt','fab fa-cloudflare','fab fa-cloudscale','fab fa-cloudsmith','fab fa-cloudversify','fas fa-cocktail','fas fa-code','fas fa-code-branch','fab fa-codepen','fab fa-codiepie','fas fa-coffee','fas fa-cog','fas fa-cogs','fas fa-coins','fas fa-columns','fas fa-comment','far fa-comment','fas fa-comment-alt','far fa-comment-alt','fas fa-comment-dollar','fas fa-comment-dots','far fa-comment-dots','fas fa-comment-medical','fas fa-comment-slash','fas fa-comments','far fa-comments','fas fa-comments-dollar','fas fa-compact-disc','fas fa-compass','far fa-compass','fas fa-compress','fas fa-compress-alt','fas fa-compress-arrows-alt','fas fa-concierge-bell','fab fa-confluence','fab fa-connectdevelop','fab fa-contao','fas fa-cookie','fas fa-cookie-bite','fas fa-copy','far fa-copy','fas fa-copyright','far fa-copyright','fab fa-cotton-bureau','fas fa-couch','fab fa-cpanel','fab fa-creative-commons','fab fa-creative-commons-by','fab fa-creative-commons-nc','fab fa-creative-commons-nc-eu','fab fa-creative-commons-nc-jp','fab fa-creative-commons-nd','fab fa-creative-commons-pd','fab fa-creative-commons-pd-alt','fab fa-creative-commons-remix','fab fa-creative-commons-sa','fab fa-creative-commons-sampling','fab fa-creative-commons-sampling-plus','fab fa-creative-commons-share','fab fa-creative-commons-zero','fas fa-credit-card','far fa-credit-card','fab fa-critical-role','fas fa-crop','fas fa-crop-alt','fas fa-cross','fas fa-crosshairs','fas fa-crow','fas fa-crown','fas fa-crutch','fab fa-css3','fab fa-css3-alt','fas fa-cube','fas fa-cubes','fas fa-cut','fab fa-cuttlefish','fab fa-d-and-d','fab fa-d-and-d-beyond','fab fa-dailymotion','fab fa-dashcube','fas fa-database','fas fa-deaf','fab fa-deezer','fab fa-delicious','fas fa-democrat','fab fa-deploydog','fab fa-deskpro','fas fa-desktop','fab fa-dev','fab fa-deviantart','fas fa-dharmachakra','fab fa-dhl','fas fa-diagnoses','fab fa-diaspora','fas fa-dice','fas fa-dice-d20','fas fa-dice-d6','fas fa-dice-five','fas fa-dice-four','fas fa-dice-one','fas fa-dice-six','fas fa-dice-three','fas fa-dice-two','fab fa-digg','fab fa-digital-ocean','fas fa-digital-tachograph','fas fa-directions','fab fa-discord','fab fa-discourse','fas fa-disease','fas fa-divide','fas fa-dizzy','far fa-dizzy','fas fa-dna','fab fa-dochub','fab fa-docker','fas fa-dog','fas fa-dollar-sign','fas fa-dolly','fas fa-dolly-flatbed','fas fa-donate','fas fa-door-closed','fas fa-door-open','fas fa-dot-circle','far fa-dot-circle','fas fa-dove','fas fa-download','fab fa-draft2digital','fas fa-drafting-compass','fas fa-dragon','fas fa-draw-polygon','fab fa-dribbble','fab fa-dribbble-square','fab fa-dropbox','fas fa-drum','fas fa-drum-steelpan','fas fa-drumstick-bite','fab fa-drupal','fas fa-dumbbell','fas fa-dumpster','fas fa-dumpster-fire','fas fa-dungeon','fab fa-dyalog','fab fa-earlybirds','fab fa-ebay','fab fa-edge','fab fa-edge-legacy','fas fa-edit','far fa-edit','fas fa-egg','fas fa-eject','fab fa-elementor','fas fa-ellipsis-h','fas fa-ellipsis-v','fab fa-ello','fab fa-ember','fab fa-empire','fas fa-envelope','far fa-envelope','fas fa-envelope-open','far fa-envelope-open','fas fa-envelope-open-text','fas fa-envelope-square','fab fa-envira','fas fa-equals','fas fa-eraser','fab fa-erlang','fab fa-ethereum','fas fa-ethernet','fab fa-etsy','fas fa-euro-sign','fab fa-evernote','fas fa-exchange-alt','fas fa-exclamation','fas fa-exclamation-circle','fas fa-exclamation-triangle','fas fa-expand','fas fa-expand-alt','fas fa-expand-arrows-alt','fab fa-expeditedssl','fas fa-external-link-alt','fas fa-external-link-square-alt','fas fa-eye','far fa-eye','fas fa-eye-dropper','fas fa-eye-slash','far fa-eye-slash','fab fa-facebook','fab fa-facebook-f','fab fa-facebook-messenger','fab fa-facebook-square','fas fa-fan','fab fa-fantasy-flight-games','fas fa-fast-backward','fas fa-fast-forward','fas fa-faucet','fas fa-fax','fas fa-feather','fas fa-feather-alt','fab fa-fedex','fab fa-fedora','fas fa-female','fas fa-fighter-jet','fab fa-figma','fas fa-file','far fa-file','fas fa-file-alt','far fa-file-alt','fas fa-file-archive','far fa-file-archive','fas fa-file-audio','far fa-file-audio','fas fa-file-code','far fa-file-code','fas fa-file-contract','fas fa-file-csv','fas fa-file-download','fas fa-file-excel','far fa-file-excel','fas fa-file-export','fas fa-file-image','far fa-file-image','fas fa-file-import','fas fa-file-invoice','fas fa-file-invoice-dollar','fas fa-file-medical','fas fa-file-medical-alt','fas fa-file-pdf','far fa-file-pdf','fas fa-file-powerpoint','far fa-file-powerpoint','fas fa-file-prescription','fas fa-file-signature','fas fa-file-upload','fas fa-file-video','far fa-file-video','fas fa-file-word','far fa-file-word','fas fa-fill','fas fa-fill-drip','fas fa-film','fas fa-filter','fas fa-fingerprint','fas fa-fire','fas fa-fire-alt','fas fa-fire-extinguisher','fab fa-firefox','fab fa-firefox-browser','fas fa-first-aid','fab fa-first-order','fab fa-first-order-alt','fab fa-firstdraft','fas fa-fish','fas fa-fist-raised','fas fa-flag','far fa-flag','fas fa-flag-checkered','fas fa-flag-usa','fas fa-flask','fab fa-flickr','fab fa-flipboard','fas fa-flushed','far fa-flushed','fab fa-fly','fas fa-folder','far fa-folder','fas fa-folder-minus','fas fa-folder-open','far fa-folder-open','fas fa-folder-plus','fas fa-font','fab fa-font-awesome','fab fa-font-awesome-alt','fab fa-font-awesome-flag','far fa-font-awesome-logo-full','fas fa-font-awesome-logo-full','fab fa-font-awesome-logo-full','fab fa-fonticons','fab fa-fonticons-fi','fas fa-football-ball','fab fa-fort-awesome','fab fa-fort-awesome-alt','fab fa-forumbee','fas fa-forward','fab fa-foursquare','fab fa-free-code-camp','fab fa-freebsd','fas fa-frog','fas fa-frown','far fa-frown','fas fa-frown-open','far fa-frown-open','fab fa-fulcrum','fas fa-funnel-dollar','fas fa-futbol','far fa-futbol','fab fa-galactic-republic','fab fa-galactic-senate','fas fa-gamepad','fas fa-gas-pump','fas fa-gavel','fas fa-gem','far fa-gem','fas fa-genderless','fab fa-get-pocket','fab fa-gg','fab fa-gg-circle','fas fa-ghost','fas fa-gift','fas fa-gifts','fab fa-git','fab fa-git-alt','fab fa-git-square','fab fa-github','fab fa-github-alt','fab fa-github-square','fab fa-gitkraken','fab fa-gitlab','fab fa-gitter','fas fa-glass-cheers','fas fa-glass-martini','fas fa-glass-martini-alt','fas fa-glass-whiskey','fas fa-glasses','fab fa-glide','fab fa-glide-g','fas fa-globe','fas fa-globe-africa','fas fa-globe-americas','fas fa-globe-asia','fas fa-globe-europe','fab fa-gofore','fas fa-golf-ball','fab fa-goodreads','fab fa-goodreads-g','fab fa-google','fab fa-google-drive','fab fa-google-pay','fab fa-google-play','fab fa-google-plus','fab fa-google-plus-g','fab fa-google-plus-square','fab fa-google-wallet','fas fa-gopuram','fas fa-graduation-cap','fab fa-gratipay','fab fa-grav','fas fa-greater-than','fas fa-greater-than-equal','fas fa-grimace','far fa-grimace','fas fa-grin','far fa-grin','fas fa-grin-alt','far fa-grin-alt','fas fa-grin-beam','far fa-grin-beam','fas fa-grin-beam-sweat','far fa-grin-beam-sweat','fas fa-grin-hearts','far fa-grin-hearts','fas fa-grin-squint','far fa-grin-squint','fas fa-grin-squint-tears','far fa-grin-squint-tears','fas fa-grin-stars','far fa-grin-stars','fas fa-grin-tears','far fa-grin-tears','fas fa-grin-tongue','far fa-grin-tongue','fas fa-grin-tongue-squint','far fa-grin-tongue-squint','fas fa-grin-tongue-wink','far fa-grin-tongue-wink','fas fa-grin-wink','far fa-grin-wink','fas fa-grip-horizontal','fas fa-grip-lines','fas fa-grip-lines-vertical','fas fa-grip-vertical','fab fa-gripfire','fab fa-grunt','fab fa-guilded','fas fa-guitar','fab fa-gulp','fas fa-h-square','fab fa-hacker-news','fab fa-hacker-news-square','fab fa-hackerrank','fas fa-hamburger','fas fa-hammer','fas fa-hamsa','fas fa-hand-holding','fas fa-hand-holding-heart','fas fa-hand-holding-medical','fas fa-hand-holding-usd','fas fa-hand-holding-water','fas fa-hand-lizard','far fa-hand-lizard','fas fa-hand-middle-finger','fas fa-hand-paper','far fa-hand-paper','fas fa-hand-peace','far fa-hand-peace','fas fa-hand-point-down','far fa-hand-point-down','fas fa-hand-point-left','far fa-hand-point-left','fas fa-hand-point-right','far fa-hand-point-right','fas fa-hand-point-up','far fa-hand-point-up','fas fa-hand-pointer','far fa-hand-pointer','fas fa-hand-rock','far fa-hand-rock','fas fa-hand-scissors','far fa-hand-scissors','fas fa-hand-sparkles','fas fa-hand-spock','far fa-hand-spock','fas fa-hands','fas fa-hands-helping','fas fa-hands-wash','fas fa-handshake','far fa-handshake','fas fa-handshake-alt-slash','fas fa-handshake-slash','fas fa-hanukiah','fas fa-hard-hat','fas fa-hashtag','fas fa-hat-cowboy','fas fa-hat-cowboy-side','fas fa-hat-wizard','fas fa-hdd','far fa-hdd','fas fa-head-side-cough','fas fa-head-side-cough-slash','fas fa-head-side-mask','fas fa-head-side-virus','fas fa-heading','fas fa-headphones','fas fa-headphones-alt','fas fa-headset','fas fa-heart','far fa-heart','fas fa-heart-broken','fas fa-heartbeat','fas fa-helicopter','fas fa-highlighter','fas fa-hiking','fas fa-hippo','fab fa-hips','fab fa-hire-a-helper','fas fa-history','fab fa-hive','fas fa-hockey-puck','fas fa-holly-berry','fas fa-home','fab fa-hooli','fab fa-hornbill','fas fa-horse','fas fa-horse-head','fas fa-hospital','far fa-hospital','fas fa-hospital-alt','fas fa-hospital-symbol','fas fa-hospital-user','fas fa-hot-tub','fas fa-hotdog','fas fa-hotel','fab fa-hotjar','fas fa-hourglass','far fa-hourglass','fas fa-hourglass-end','fas fa-hourglass-half','fas fa-hourglass-start','fas fa-house-damage','fas fa-house-user','fab fa-houzz','fas fa-hryvnia','fab fa-html5','fab fa-hubspot','fas fa-i-cursor','fas fa-ice-cream','fas fa-icicles','fas fa-icons','fas fa-id-badge','far fa-id-badge','fas fa-id-card','far fa-id-card','fas fa-id-card-alt','fab fa-ideal','fas fa-igloo','fas fa-image','far fa-image','fas fa-images','far fa-images','fab fa-imdb','fas fa-inbox','fas fa-indent','fas fa-industry','fas fa-infinity','fas fa-info','fas fa-info-circle','fab fa-innosoft','fab fa-instagram','fab fa-instagram-square','fab fa-instalod','fab fa-intercom','fab fa-internet-explorer','fab fa-invision','fab fa-ioxhost','fas fa-italic','fab fa-itch-io','fab fa-itunes','fab fa-itunes-note','fab fa-java','fas fa-jedi','fab fa-jedi-order','fab fa-jenkins','fab fa-jira','fab fa-joget','fas fa-joint','fab fa-joomla','fas fa-journal-whills','fab fa-js','fab fa-js-square','fab fa-jsfiddle','fas fa-kaaba','fab fa-kaggle','fas fa-key','fab fa-keybase','fas fa-keyboard','far fa-keyboard','fab fa-keycdn','fas fa-khanda','fab fa-kickstarter','fab fa-kickstarter-k','fas fa-kiss','far fa-kiss','fas fa-kiss-beam','far fa-kiss-beam','fas fa-kiss-wink-heart','far fa-kiss-wink-heart','fas fa-kiwi-bird','fab fa-korvue','fas fa-landmark','fas fa-language','fas fa-laptop','fas fa-laptop-code','fas fa-laptop-house','fas fa-laptop-medical','fab fa-laravel','fab fa-lastfm','fab fa-lastfm-square','fas fa-laugh','far fa-laugh','fas fa-laugh-beam','far fa-laugh-beam','fas fa-laugh-squint','far fa-laugh-squint','fas fa-laugh-wink','far fa-laugh-wink','fas fa-layer-group','fas fa-leaf','fab fa-leanpub','fas fa-lemon','far fa-lemon','fab fa-less','fas fa-less-than','fas fa-less-than-equal','fas fa-level-down-alt','fas fa-level-up-alt','fas fa-life-ring','far fa-life-ring','fas fa-lightbulb','far fa-lightbulb','fab fa-line','fas fa-link','fab fa-linkedin','fab fa-linkedin-in','fab fa-linode','fab fa-linux','fas fa-lira-sign','fas fa-list','fas fa-list-alt','far fa-list-alt','fas fa-list-ol','fas fa-list-ul','fas fa-location-arrow','fas fa-lock','fas fa-lock-open','fas fa-long-arrow-alt-down','fas fa-long-arrow-alt-left','fas fa-long-arrow-alt-right','fas fa-long-arrow-alt-up','fas fa-low-vision','fas fa-luggage-cart','fas fa-lungs','fas fa-lungs-virus','fab fa-lyft','fab fa-magento','fas fa-magic','fas fa-magnet','fas fa-mail-bulk','fab fa-mailchimp','fas fa-male','fab fa-mandalorian','fas fa-map','far fa-map','fas fa-map-marked','fas fa-map-marked-alt','fas fa-map-marker','fas fa-map-marker-alt','fas fa-map-pin','fas fa-map-signs','fab fa-markdown','fas fa-marker','fas fa-mars','fas fa-mars-double','fas fa-mars-stroke','fas fa-mars-stroke-h','fas fa-mars-stroke-v','fas fa-mask','fab fa-mastodon','fab fa-maxcdn','fab fa-mdb','fas fa-medal','fab fa-medapps','fab fa-medium','fab fa-medium-m','fas fa-medkit','fab fa-medrt','fab fa-meetup','fab fa-megaport','fas fa-meh','far fa-meh','fas fa-meh-blank','far fa-meh-blank','fas fa-meh-rolling-eyes','far fa-meh-rolling-eyes','fas fa-memory','fab fa-mendeley','fas fa-menorah','fas fa-mercury','fas fa-meteor','fab fa-microblog','fas fa-microchip','fas fa-microphone','fas fa-microphone-alt','fas fa-microphone-alt-slash','fas fa-microphone-slash','fas fa-microscope','fab fa-microsoft','fas fa-minus','fas fa-minus-circle','fas fa-minus-square','far fa-minus-square','fas fa-mitten','fab fa-mix','fab fa-mixcloud','fab fa-mixer','fab fa-mizuni','fas fa-mobile','fas fa-mobile-alt','fab fa-modx','fab fa-monero','fas fa-money-bill','fas fa-money-bill-alt','far fa-money-bill-alt','fas fa-money-bill-wave','fas fa-money-bill-wave-alt','fas fa-money-check','fas fa-money-check-alt','fas fa-monument','fas fa-moon','far fa-moon','fas fa-mortar-pestle','fas fa-mosque','fas fa-motorcycle','fas fa-mountain','fas fa-mouse','fas fa-mouse-pointer','fas fa-mug-hot','fas fa-music','fab fa-napster','fab fa-neos','fas fa-network-wired','fas fa-neuter','fas fa-newspaper','far fa-newspaper','fab fa-nimblr','fab fa-node','fab fa-node-js','fas fa-not-equal','fas fa-notes-medical','fab fa-npm','fab fa-ns8','fab fa-nutritionix','fas fa-object-group','far fa-object-group','fas fa-object-ungroup','far fa-object-ungroup','fab fa-octopus-deploy','fab fa-odnoklassniki','fab fa-odnoklassniki-square','fas fa-oil-can','fab fa-old-republic','fas fa-om','fab fa-opencart','fab fa-openid','fab fa-opera','fab fa-optin-monster','fab fa-orcid','fab fa-osi','fas fa-otter','fas fa-outdent','fab fa-page4','fab fa-pagelines','fas fa-pager','fas fa-paint-brush','fas fa-paint-roller','fas fa-palette','fab fa-palfed','fas fa-pallet','fas fa-paper-plane','far fa-paper-plane','fas fa-paperclip','fas fa-parachute-box','fas fa-paragraph','fas fa-parking','fas fa-passport','fas fa-pastafarianism','fas fa-paste','fab fa-patreon','fas fa-pause','fas fa-pause-circle','far fa-pause-circle','fas fa-paw','fab fa-paypal','fas fa-peace','fas fa-pen','fas fa-pen-alt','fas fa-pen-fancy','fas fa-pen-nib','fas fa-pen-square','fas fa-pencil-alt','fas fa-pencil-ruler','fab fa-penny-arcade','fas fa-people-arrows','fas fa-people-carry','fas fa-pepper-hot','fab fa-perbyte','fas fa-percent','fas fa-percentage','fab fa-periscope','fas fa-person-booth','fab fa-phabricator','fab fa-phoenix-framework','fab fa-phoenix-squadron','fas fa-phone','fas fa-phone-alt','fas fa-phone-slash','fas fa-phone-square','fas fa-phone-square-alt','fas fa-phone-volume','fas fa-photo-video','fab fa-php','fab fa-pied-piper','fab fa-pied-piper-alt','fab fa-pied-piper-hat','fab fa-pied-piper-pp','fab fa-pied-piper-square','fas fa-piggy-bank','fas fa-pills','fab fa-pinterest','fab fa-pinterest-p','fab fa-pinterest-square','fas fa-pizza-slice','fas fa-place-of-worship','fas fa-plane','fas fa-plane-arrival','fas fa-plane-departure','fas fa-plane-slash','fas fa-play','fas fa-play-circle','far fa-play-circle','fab fa-playstation','fas fa-plug','fas fa-plus','fas fa-plus-circle','fas fa-plus-square','far fa-plus-square','fas fa-podcast','fas fa-poll','fas fa-poll-h','fas fa-poo','fas fa-poo-storm','fas fa-poop','fas fa-portrait','fas fa-pound-sign','fas fa-power-off','fas fa-pray','fas fa-praying-hands','fas fa-prescription','fas fa-prescription-bottle','fas fa-prescription-bottle-alt','fas fa-print','fas fa-procedures','fab fa-product-hunt','fas fa-project-diagram','fas fa-pump-medical','fas fa-pump-soap','fab fa-pushed','fas fa-puzzle-piece','fab fa-python','fab fa-qq','fas fa-qrcode','fas fa-question','fas fa-question-circle','far fa-question-circle','fas fa-quidditch','fab fa-quinscape','fab fa-quora','fas fa-quote-left','fas fa-quote-right','fas fa-quran','fab fa-r-project','fas fa-radiation','fas fa-radiation-alt','fas fa-rainbow','fas fa-random','fab fa-raspberry-pi','fab fa-ravelry','fab fa-react','fab fa-reacteurope','fab fa-readme','fab fa-rebel','fas fa-receipt','fas fa-record-vinyl','fas fa-recycle','fab fa-red-river','fab fa-reddit','fab fa-reddit-alien','fab fa-reddit-square','fab fa-redhat','fas fa-redo','fas fa-redo-alt','fas fa-registered','far fa-registered','fas fa-remove-format','fab fa-renren','fas fa-reply','fas fa-reply-all','fab fa-replyd','fas fa-republican','fab fa-researchgate','fab fa-resolving','fas fa-restroom','fas fa-retweet','fab fa-rev','fas fa-ribbon','fas fa-ring','fas fa-road','fas fa-robot','fas fa-rocket','fab fa-rocketchat','fab fa-rockrms','fas fa-route','fas fa-rss','fas fa-rss-square','fas fa-ruble-sign','fas fa-ruler','fas fa-ruler-combined','fas fa-ruler-horizontal','fas fa-ruler-vertical','fas fa-running','fas fa-rupee-sign','fab fa-rust','fas fa-sad-cry','far fa-sad-cry','fas fa-sad-tear','far fa-sad-tear','fab fa-safari','fab fa-salesforce','fab fa-sass','fas fa-satellite','fas fa-satellite-dish','fas fa-save','far fa-save','fab fa-schlix','fas fa-school','fas fa-screwdriver','fab fa-scribd','fas fa-scroll','fas fa-sd-card','fas fa-search','fas fa-search-dollar','fas fa-search-location','fas fa-search-minus','fas fa-search-plus','fab fa-searchengin','fas fa-seedling','fab fa-sellcast','fab fa-sellsy','fas fa-server','fab fa-servicestack','fas fa-shapes','fas fa-share','fas fa-share-alt','fas fa-share-alt-square','fas fa-share-square','far fa-share-square','fas fa-shekel-sign','fas fa-shield-alt','fas fa-shield-virus','fas fa-ship','fas fa-shipping-fast','fab fa-shirtsinbulk','fas fa-shoe-prints','fab fa-shopify','fas fa-shopping-bag','fas fa-shopping-basket','fas fa-shopping-cart','fab fa-shopware','fas fa-shower','fas fa-shuttle-van','fas fa-sign','fas fa-sign-in-alt','fas fa-sign-language','fas fa-sign-out-alt','fas fa-signal','fas fa-signature','fas fa-sim-card','fab fa-simplybuilt','fas fa-sink','fab fa-sistrix','fas fa-sitemap','fab fa-sith','fas fa-skating','fab fa-sketch','fas fa-skiing','fas fa-skiing-nordic','fas fa-skull','fas fa-skull-crossbones','fab fa-skyatlas','fab fa-skype','fab fa-slack','fab fa-slack-hash','fas fa-slash','fas fa-sleigh','fas fa-sliders-h','fab fa-slideshare','fas fa-smile','far fa-smile','fas fa-smile-beam','far fa-smile-beam','fas fa-smile-wink','far fa-smile-wink','fas fa-smog','fas fa-smoking','fas fa-smoking-ban','fas fa-sms','fab fa-snapchat','fab fa-snapchat-ghost','fab fa-snapchat-square','fas fa-snowboarding','fas fa-snowflake','far fa-snowflake','fas fa-snowman','fas fa-snowplow','fas fa-soap','fas fa-socks','fas fa-solar-panel','fas fa-sort','fas fa-sort-alpha-down','fas fa-sort-alpha-down-alt','fas fa-sort-alpha-up','fas fa-sort-alpha-up-alt','fas fa-sort-amount-down','fas fa-sort-amount-down-alt','fas fa-sort-amount-up','fas fa-sort-amount-up-alt','fas fa-sort-down','fas fa-sort-numeric-down','fas fa-sort-numeric-down-alt','fas fa-sort-numeric-up','fas fa-sort-numeric-up-alt','fas fa-sort-up','fab fa-soundcloud','fab fa-sourcetree','fas fa-spa','fas fa-space-shuttle','fab fa-speakap','fab fa-speaker-deck','fas fa-spell-check','fas fa-spider','fas fa-spinner','fas fa-splotch','fab fa-spotify','fas fa-spray-can','fas fa-square','far fa-square','fas fa-square-full','fas fa-square-root-alt','fab fa-squarespace','fab fa-stack-exchange','fab fa-stack-overflow','fab fa-stackpath','fas fa-stamp','fas fa-star','far fa-star','fas fa-star-and-crescent','fas fa-star-half','far fa-star-half','fas fa-star-half-alt','fas fa-star-of-david','fas fa-star-of-life','fab fa-staylinked','fab fa-steam','fab fa-steam-square','fab fa-steam-symbol','fas fa-step-backward','fas fa-step-forward','fas fa-stethoscope','fab fa-sticker-mule','fas fa-sticky-note','far fa-sticky-note','fas fa-stop','fas fa-stop-circle','far fa-stop-circle','fas fa-stopwatch','fas fa-stopwatch-20','fas fa-store','fas fa-store-alt','fas fa-store-alt-slash','fas fa-store-slash','fab fa-strava','fas fa-stream','fas fa-street-view','fas fa-strikethrough','fab fa-stripe','fab fa-stripe-s','fas fa-stroopwafel','fab fa-studiovinari','fab fa-stumbleupon','fab fa-stumbleupon-circle','fas fa-subscript','fas fa-subway','fas fa-suitcase','fas fa-suitcase-rolling','fas fa-sun','far fa-sun','fab fa-superpowers','fas fa-superscript','fab fa-supple','fas fa-surprise','far fa-surprise','fab fa-suse','fas fa-swatchbook','fab fa-swift','fas fa-swimmer','fas fa-swimming-pool','fab fa-symfony','fas fa-synagogue','fas fa-sync','fas fa-sync-alt','fas fa-syringe','fas fa-table','fas fa-table-tennis','fas fa-tablet','fas fa-tablet-alt','fas fa-tablets','fas fa-tachometer-alt','fas fa-tag','fas fa-tags','fas fa-tape','fas fa-tasks','fas fa-taxi','fab fa-teamspeak','fas fa-teeth','fas fa-teeth-open','fab fa-telegram','fab fa-telegram-plane','fas fa-temperature-high','fas fa-temperature-low','fab fa-tencent-weibo','fas fa-tenge','fas fa-terminal','fas fa-text-height','fas fa-text-width','fas fa-th','fas fa-th-large','fas fa-th-list','fab fa-the-red-yeti','fas fa-theater-masks','fab fa-themeco','fab fa-themeisle','fas fa-thermometer','fas fa-thermometer-empty','fas fa-thermometer-full','fas fa-thermometer-half','fas fa-thermometer-quarter','fas fa-thermometer-three-quarters','fab fa-think-peaks','fas fa-thumbs-down','far fa-thumbs-down','fas fa-thumbs-up','far fa-thumbs-up','fas fa-thumbtack','fas fa-ticket-alt','fab fa-tiktok','fas fa-times','fas fa-times-circle','far fa-times-circle','fas fa-tint','fas fa-tint-slash','fas fa-tired','far fa-tired','fas fa-toggle-off','fas fa-toggle-on','fas fa-toilet','fas fa-toilet-paper','fas fa-toilet-paper-slash','fas fa-toolbox','fas fa-tools','fas fa-tooth','fas fa-torah','fas fa-torii-gate','fas fa-tractor','fab fa-trade-federation','fas fa-trademark','fas fa-traffic-light','fas fa-trailer','fas fa-train','fas fa-tram','fas fa-transgender','fas fa-transgender-alt','fas fa-trash','fas fa-trash-alt','far fa-trash-alt','fas fa-trash-restore','fas fa-trash-restore-alt','fas fa-tree','fab fa-trello','fas fa-trophy','fas fa-truck','fas fa-truck-loading','fas fa-truck-monster','fas fa-truck-moving','fas fa-truck-pickup','fas fa-tshirt','fas fa-tty','fab fa-tumblr','fab fa-tumblr-square','fas fa-tv','fab fa-twitch','fab fa-twitter','fab fa-twitter-square','fab fa-typo3','fab fa-uber','fab fa-ubuntu','fab fa-uikit','fab fa-umbraco','fas fa-umbrella','fas fa-umbrella-beach','fab fa-uncharted','fas fa-underline','fas fa-undo','fas fa-undo-alt','fab fa-uniregistry','fab fa-unity','fas fa-universal-access','fas fa-university','fas fa-unlink','fas fa-unlock','fas fa-unlock-alt','fab fa-unsplash','fab fa-untappd','fas fa-upload','fab fa-ups','fab fa-usb','fas fa-user','far fa-user','fas fa-user-alt','fas fa-user-alt-slash','fas fa-user-astronaut','fas fa-user-check','fas fa-user-circle','far fa-user-circle','fas fa-user-clock','fas fa-user-cog','fas fa-user-edit','fas fa-user-friends','fas fa-user-graduate','fas fa-user-injured','fas fa-user-lock','fas fa-user-md','fas fa-user-minus','fas fa-user-ninja','fas fa-user-nurse','fas fa-user-plus','fas fa-user-secret','fas fa-user-shield','fas fa-user-slash','fas fa-user-tag','fas fa-user-tie','fas fa-user-times','fas fa-users','fas fa-users-cog','fas fa-users-slash','fab fa-usps','fab fa-ussunnah','fas fa-utensil-spoon','fas fa-utensils','fab fa-vaadin','fas fa-vector-square','fas fa-venus','fas fa-venus-double','fas fa-venus-mars','fas fa-vest','fas fa-vest-patches','fab fa-viacoin','fab fa-viadeo','fab fa-viadeo-square','fas fa-vial','fas fa-vials','fab fa-viber','fas fa-video','fas fa-video-slash','fas fa-vihara','fab fa-vimeo','fab fa-vimeo-square','fab fa-vimeo-v','fab fa-vine','fas fa-virus','fas fa-virus-slash','fas fa-viruses','fab fa-vk','fab fa-vnv','fas fa-voicemail','fas fa-volleyball-ball','fas fa-volume-down','fas fa-volume-mute','fas fa-volume-off','fas fa-volume-up','fas fa-vote-yea','fas fa-vr-cardboard','fab fa-vuejs','fas fa-walking','fas fa-wallet','fas fa-warehouse','fab fa-watchman-monitoring','fas fa-water','fas fa-wave-square','fab fa-waze','fab fa-weebly','fab fa-weibo','fas fa-weight','fas fa-weight-hanging','fab fa-weixin','fab fa-whatsapp','fab fa-whatsapp-square','fas fa-wheelchair','fab fa-whmcs','fas fa-wifi','fab fa-wikipedia-w','fas fa-wind','fas fa-window-close','far fa-window-close','fas fa-window-maximize','far fa-window-maximize','fas fa-window-minimize','far fa-window-minimize','fas fa-window-restore','far fa-window-restore','fab fa-windows','fas fa-wine-bottle','fas fa-wine-glass','fas fa-wine-glass-alt','fab fa-wix','fab fa-wizards-of-the-coast','fab fa-wodu','fab fa-wolf-pack-battalion','fas fa-won-sign','fab fa-wordpress','fab fa-wordpress-simple','fab fa-wpbeginner','fab fa-wpexplorer','fab fa-wpforms','fab fa-wpressr','fas fa-wrench','fas fa-x-ray','fab fa-xbox','fab fa-xing','fab fa-xing-square','fab fa-y-combinator','fab fa-yahoo','fab fa-yammer','fab fa-yandex','fab fa-yandex-international','fab fa-yarn','fab fa-yelp','fas fa-yen-sign','fas fa-yin-yang','fab fa-yoast','fab fa-youtube','fab fa-youtube-square','fab fa-zhihu' )
+ ) );
+ }
+}
diff --git a/framework/fields/icon/icon.php b/framework/fields/icon/icon.php
new file mode 100755
index 0000000..d8c7e2b
--- /dev/null
+++ b/framework/fields/icon/icon.php
@@ -0,0 +1,71 @@
+field, array(
+ 'button_title' => esc_html__( 'Add Icon', 'wp_china_yes' ),
+ 'remove_title' => esc_html__( 'Remove Icon', 'wp_china_yes' ),
+ ) );
+
+ echo $this->field_before();
+
+ $nonce = wp_create_nonce( 'wp_china_yes_icon_nonce' );
+ $hidden = ( empty( $this->value ) ) ? ' hidden' : '';
+
+ echo '';
+
+ echo $this->field_after();
+
+ }
+
+ public function enqueue() {
+ add_action( 'admin_footer', array( 'WP_CHINA_YES_Field_icon', 'add_footer_modal_icon' ) );
+ add_action( 'customize_controls_print_footer_scripts', array( 'WP_CHINA_YES_Field_icon', 'add_footer_modal_icon' ) );
+ }
+
+ public static function add_footer_modal_icon() {
+ ?>
+
+ 'Iconsax font icon',
+ 'icons' => array( 'icon icon-24-support','icon icon-3d-cube-scan','icon icon-3d-rotate','icon icon-3d-square','icon icon-3dcube','icon icon-3square','icon icon-aave-aave','icon icon-activity','icon icon-add-circle','icon icon-add-square','icon icon-add','icon icon-additem','icon icon-airdrop','icon icon-airplane-square','icon icon-airplane','icon icon-airpod','icon icon-airpods','icon icon-alarm','icon icon-align-bottom','icon icon-align-horizontally','icon icon-align-left','icon icon-align-right','icon icon-align-vertically','icon icon-android','icon icon-ankr-ankr','icon icon-apple','icon icon-aquarius','icon icon-archive-1','icon icon-archive-2','icon icon-archive-add','icon icon-archive-book','icon icon-archive-minus','icon icon-archive-slash','icon icon-archive-tick','icon icon-archive','icon icon-arrange-circle-2','icon icon-arrange-circle','icon icon-arrange-square-2','icon icon-arrange-square','icon icon-arrow-2','icon icon-arrow-3','icon icon-arrow-bottom','icon icon-arrow-circle-down','icon icon-arrow-circle-left','icon icon-arrow-circle-right','icon icon-arrow-circle-up','icon icon-arrow-down-1','icon icon-arrow-down-2','icon icon-arrow-down','icon icon-arrow-left-1','icon icon-arrow-left-2','icon icon-arrow-left-3','icon icon-arrow-left','icon icon-arrow-right-1','icon icon-arrow-right-2','icon icon-arrow-right-3','icon icon-arrow-right-4','icon icon-arrow-right','icon icon-arrow-square-down','icon icon-arrow-square-left','icon icon-arrow-square-up','icon icon-arrow-square','icon icon-arrow-swap-horizontal','icon icon-arrow-swap','icon icon-arrow-up-1','icon icon-arrow-up-2','icon icon-arrow-up-3','icon icon-arrow-up','icon icon-arrow','icon icon-attach-circle','icon icon-attach-square','icon icon-audio-square','icon icon-augur-rep','icon icon-autobrightness','icon icon-autonio-niox','icon icon-avalanche-avax','icon icon-award','icon icon-back-square','icon icon-backward-10-seconds','icon icon-backward-15-seconds','icon icon-backward-5-seconds','icon icon-backward-item','icon icon-backward','icon icon-bag-2','icon icon-bag-cross-1','icon icon-bag-cross','icon icon-bag-happy','icon icon-bag-tick-2','icon icon-bag-tick','icon icon-bag-timer','icon icon-bag','icon icon-bank','icon icon-barcode','icon icon-battery-charging','icon icon-battery-disable','icon icon-battery-empty-1','icon icon-battery-empty','icon icon-battery-full','icon icon-battery-half','icon icon-be','icon icon-bezier','icon icon-bill','icon icon-binance-coin-bnb','icon icon-binance-usd-busd','icon icon-bitcoin-btc','icon icon-bitcoin-card','icon icon-bitcoin-convert','icon icon-bitcoin-refresh','icon icon-blend-2','icon icon-blend','icon icon-blogger','icon icon-bluetooth-2','icon icon-bluetooth-circle','icon icon-bluetooth-rectangle','icon icon-bluetooth','icon icon-blur','icon icon-book-1','icon icon-book-saved','icon icon-book-square','icon icon-book','icon icon-bookmark-2','icon icon-bookmark','icon icon-bootstrap','icon icon-box-1','icon icon-box-2','icon icon-box-add','icon icon-box-remove','icon icon-box-search','icon icon-box-tick','icon icon-box-time','icon icon-box','icon icon-briefcase','icon icon-brifecase-cross','icon icon-brifecase-tick','icon icon-brifecase-timer','icon icon-broom','icon icon-brush-1','icon icon-brush-2','icon icon-brush-3','icon icon-brush-4','icon icon-brush','icon icon-bubble','icon icon-bucket-circle','icon icon-bucket-square','icon icon-bucket','icon icon-building-3','icon icon-building-4','icon icon-building','icon icon-buildings-2','icon icon-buildings','icon icon-buliding','icon icon-bus','icon icon-buy-crypto','icon icon-cake','icon icon-calculator','icon icon-calendar-1','icon icon-calendar-2','icon icon-calendar-add','icon icon-calendar-circle','icon icon-calendar-edit','icon icon-calendar-remove','icon icon-calendar-search','icon icon-calendar-tick','icon icon-calendar','icon icon-call-add','icon icon-call-calling','icon icon-call-incoming','icon icon-call-minus','icon icon-call-outgoing','icon icon-call-received','icon icon-call-remove','icon icon-call-slash','icon icon-call','icon icon-camera-slash','icon icon-camera','icon icon-candle-2','icon icon-candle','icon icon-car','icon icon-card-add','icon icon-card-coin','icon icon-card-edit','icon icon-card-pos','icon icon-card-receive','icon icon-card-remove-1','icon icon-card-remove','icon icon-card-send','icon icon-card-slash','icon icon-card-tick-1','icon icon-card-tick','icon icon-card','icon icon-cardano-ada','icon icon-cards','icon icon-category-2','icon icon-category','icon icon-cd','icon icon-celo-celo','icon icon-celsius-cel','icon icon-chainlink-link','icon icon-chart-1','icon icon-chart-2','icon icon-chart-21','icon icon-chart-3','icon icon-chart-fail','icon icon-chart-square','icon icon-chart-success','icon icon-chart','icon icon-check','icon icon-chrome','icon icon-civic-cvc','icon icon-clipboard-close','icon icon-clipboard-export','icon icon-clipboard-import','icon icon-clipboard-text','icon icon-clipboard-tick','icon icon-clipboard','icon icon-clock-1','icon icon-clock','icon icon-close-circle','icon icon-close-square','icon icon-cloud-add','icon icon-cloud-change','icon icon-cloud-connection','icon icon-cloud-cross','icon icon-cloud-drizzle','icon icon-cloud-fog','icon icon-cloud-lightning','icon icon-cloud-minus','icon icon-cloud-notif','icon icon-cloud-plus','icon icon-cloud-remove','icon icon-cloud-snow','icon icon-cloud-sunny','icon icon-cloud','icon icon-code-1','icon icon-code-circle','icon icon-code','icon icon-coffee','icon icon-coin-1','icon icon-coin','icon icon-color-swatch','icon icon-colorfilter','icon icon-colors-square','icon icon-command-square','icon icon-command','icon icon-component','icon icon-computing','icon icon-convert-3d-cube','icon icon-convert-card','icon icon-convert','icon icon-convertshape-2','icon icon-convertshape','icon icon-copy-success','icon icon-copy','icon icon-copyright','icon icon-courthouse','icon icon-cpu-charge','icon icon-cpu-setting','icon icon-cpu','icon icon-creative-commons','icon icon-crop','icon icon-crown-1','icon icon-crown','icon icon-cup','icon icon-dai-dai','icon icon-danger','icon icon-dash-dash','icon icon-data-2','icon icon-data','icon icon-decred-dcr','icon icon-dent-dent','icon icon-designtools','icon icon-device-message','icon icon-devices-1','icon icon-devices','icon icon-diagram','icon icon-diamonds','icon icon-direct-down','icon icon-direct-inbox','icon icon-direct-left','icon icon-direct-normal','icon icon-direct-notification','icon icon-direct-right','icon icon-direct-send','icon icon-direct-up','icon icon-direct','icon icon-directbox-default','icon icon-directbox-notif','icon icon-directbox-receive','icon icon-directbox-send','icon icon-discount-circle','icon icon-discount-shape','icon icon-discover-1','icon icon-discover','icon icon-dislike','icon icon-document-1','icon icon-document-cloud','icon icon-document-code-2','icon icon-document-code','icon icon-document-copy','icon icon-document-download','icon icon-document-favorite','icon icon-document-filter','icon icon-document-forward','icon icon-document-like','icon icon-document-normal','icon icon-document-previous','icon icon-document-sketch','icon icon-document-text-1','icon icon-document-text','icon icon-document-upload','icon icon-document','icon icon-dollar-circle','icon icon-dollar-square','icon icon-dribbble','icon icon-driver-2','icon icon-driver-refresh','icon icon-driver','icon icon-driving','icon icon-dropbox','icon icon-edit-2','icon icon-edit','icon icon-educare-ekt','icon icon-electricity','icon icon-element-2','icon icon-element-3','icon icon-element-4','icon icon-element-equal','icon icon-element-plus','icon icon-emercoin-emc','icon icon-emoji-happy','icon icon-emoji-normal','icon icon-emoji-sad','icon icon-empty-wallet-add','icon icon-empty-wallet-change','icon icon-empty-wallet-remove','icon icon-empty-wallet-tick','icon icon-empty-wallet-time','icon icon-empty-wallet','icon icon-enjin-coin-enj','icon icon-eos-eos','icon icon-eraser-1','icon icon-eraser','icon icon-ethereum-classic-etc','icon icon-ethereum-eth','icon icon-export-1','icon icon-export-2','icon icon-export-3','icon icon-export','icon icon-external-drive','icon icon-eye-slash','icon icon-eye','icon icon-facebook','icon icon-fatrows','icon icon-favorite-chart','icon icon-figma-1','icon icon-figma','icon icon-filter-add','icon icon-filter-edit','icon icon-filter-remove','icon icon-filter-search','icon icon-filter-square','icon icon-filter-tick','icon icon-filter','icon icon-finger-cricle','icon icon-finger-scan','icon icon-firstline','icon icon-flag-2','icon icon-flag','icon icon-flash-1','icon icon-flash-circle-1','icon icon-flash-circle','icon icon-flash-slash','icon icon-flash','icon icon-folder-2','icon icon-folder-add','icon icon-folder-cloud','icon icon-folder-connection','icon icon-folder-cross','icon icon-folder-favorite','icon icon-folder-minus','icon icon-folder-open','icon icon-folder','icon icon-forbidden-2','icon icon-forbidden','icon icon-format-circle','icon icon-format-square','icon icon-forward-10-seconds','icon icon-forward-15-seconds','icon icon-forward-5-seconds','icon icon-forward-item','icon icon-forward-square','icon icon-forward','icon icon-frame-1','icon icon-frame-2','icon icon-frame-3','icon icon-frame-4','icon icon-frame','icon icon-framer','icon icon-ftx-token-ftt','icon icon-gallery-add','icon icon-gallery-edit','icon icon-gallery-export','icon icon-gallery-favorite','icon icon-gallery-import','icon icon-gallery-remove','icon icon-gallery-slash','icon icon-gallery-tick','icon icon-gallery','icon icon-game','icon icon-gameboy','icon icon-gas-station','icon icon-gemini-2','icon icon-gemini','icon icon-ghost','icon icon-gift','icon icon-glass-1','icon icon-glass','icon icon-global-edit','icon icon-global-refresh','icon icon-global-search','icon icon-global','icon icon-google-drive','icon icon-google-paly','icon icon-google','icon icon-gps-slash','icon icon-gps','icon icon-grammerly','icon icon-graph','icon icon-grid-1','icon icon-grid-2','icon icon-grid-3','icon icon-grid-4','icon icon-grid-5','icon icon-grid-6','icon icon-grid-7','icon icon-grid-8','icon icon-grid-9','icon icon-grid-edit','icon icon-grid-eraser','icon icon-grid-lock','icon icon-happyemoji','icon icon-harmony-one','icon icon-hashtag-1','icon icon-hashtag-down','icon icon-hashtag-up','icon icon-hashtag','icon icon-headphone','icon icon-headphones','icon icon-health','icon icon-heart-add','icon icon-heart-circle','icon icon-heart-edit','icon icon-heart-remove','icon icon-heart-search','icon icon-heart-slash','icon icon-heart-tick','icon icon-heart','icon icon-hedera-hashgraph-hbar','icon icon-hex-hex','icon icon-hierarchy-2','icon icon-hierarchy-3','icon icon-hierarchy-square-2','icon icon-hierarchy-square-3','icon icon-hierarchy-square','icon icon-hierarchy','icon icon-home-1','icon icon-home-2','icon icon-home-hashtag','icon icon-home-trend-down','icon icon-home-trend-up','icon icon-home-wifi','icon icon-home','icon icon-hospital','icon icon-house-2','icon icon-house','icon icon-html-3','icon icon-html-5','icon icon-huobi-token-ht','icon icon-icon-1','icon icon-icon-2','icon icon-icon-icx','icon icon-icon','icon icon-illustrator','icon icon-image','icon icon-import-1','icon icon-import-2','icon icon-import','icon icon-info-circle','icon icon-information','icon icon-instagram','icon icon-iost-iost','icon icon-java-script','icon icon-js','icon icon-judge','icon icon-kanban','icon icon-key-square','icon icon-key','icon icon-keyboard-open','icon icon-keyboard','icon icon-kyber-network-knc','icon icon-lamp-1','icon icon-lamp-charge','icon icon-lamp-on','icon icon-lamp-slash','icon icon-lamp','icon icon-language-circle','icon icon-language-square','icon icon-layer','icon icon-level','icon icon-lifebuoy','icon icon-like-1','icon icon-like-dislike','icon icon-like-shapes','icon icon-like-tag','icon icon-like','icon icon-Line','icon icon-link-1','icon icon-link-2','icon icon-link-21','icon icon-link-circle','icon icon-link-square','icon icon-link','icon icon-litecoinltc','icon icon-location-add','icon icon-location-cross','icon icon-location-minus','icon icon-location-slash','icon icon-location-tick','icon icon-location','icon icon-lock-1','icon icon-lock-circle','icon icon-lock-slash','icon icon-lock','icon icon-login-1','icon icon-login','icon icon-logout-1','icon icon-logout','icon icon-lovely','icon icon-magic-star','icon icon-magicpen','icon icon-main-component','icon icon-maker-mkr','icon icon-man','icon icon-map-1','icon icon-map','icon icon-mask-1','icon icon-mask-2','icon icon-mask','icon icon-math','icon icon-maximize-1','icon icon-maximize-2','icon icon-maximize-21','icon icon-maximize-3','icon icon-maximize-4','icon icon-maximize-circle','icon icon-maximize','icon icon-medal-star','icon icon-medal','icon icon-menu-1','icon icon-menu-board','icon icon-menu','icon icon-message-2','icon icon-message-add-1','icon icon-message-add','icon icon-message-circle','icon icon-message-edit','icon icon-message-favorite','icon icon-message-minus','icon icon-message-notif','icon icon-message-programming','icon icon-message-question','icon icon-message-remove','icon icon-message-search','icon icon-message-square','icon icon-message-text-1','icon icon-message-text','icon icon-message-tick','icon icon-message-time','icon icon-message','icon icon-messages-1','icon icon-messages-2','icon icon-messages-3','icon icon-messages','icon icon-messenger','icon icon-microphone-2','icon icon-microphone-slash-1','icon icon-microphone-slash','icon icon-microphone','icon icon-microscope','icon icon-milk','icon icon-mini-music-sqaure','icon icon-minus-cirlce','icon icon-minus-square','icon icon-minus','icon icon-mirror','icon icon-mirroring-screen','icon icon-mobile-programming','icon icon-mobile','icon icon-monero-xmr','icon icon-money-2','icon icon-money-3','icon icon-money-4','icon icon-money-add','icon icon-money-change','icon icon-money-forbidden','icon icon-money-recive','icon icon-money-remove','icon icon-money-send','icon icon-money-tick','icon icon-money-time','icon icon-money','icon icon-moneys','icon icon-monitor-mobbile','icon icon-monitor-recorder','icon icon-monitor','icon icon-moon','icon icon-more-2','icon icon-more-circle','icon icon-more-square','icon icon-more','icon icon-mouse-1','icon icon-mouse-circle','icon icon-mouse-square','icon icon-mouse','icon icon-music-circle','icon icon-music-dashboard','icon icon-music-filter','icon icon-music-library-2','icon icon-music-play','icon icon-music-playlist','icon icon-music-square-add','icon icon-music-square-remove','icon icon-music-square-search','icon icon-music-square','icon icon-music','icon icon-musicnote','icon icon-nebulas-nas','icon icon-nem-xem','icon icon-nexo-nexo','icon icon-next','icon icon-note-1','icon icon-note-2','icon icon-note-21','icon icon-note-add','icon icon-note-favorite','icon icon-note-remove','icon icon-note-square','icon icon-note-text','icon icon-note','icon icon-notification-1','icon icon-notification-bing','icon icon-notification-circle','icon icon-notification-favorite','icon icon-notification-status','icon icon-notification','icon icon-ocean-protocol-ocean','icon icon-okb-okb','icon icon-omega-circle','icon icon-omega-square','icon icon-ontology-ont','icon icon-paintbucket','icon icon-paperclip-2','icon icon-paperclip','icon icon-password-check','icon icon-path-2','icon icon-path-square','icon icon-path','icon icon-pause-circle','icon icon-pause','icon icon-paypal','icon icon-pen-add','icon icon-pen-close','icon icon-pen-remove','icon icon-pen-tool-2','icon icon-pen-tool','icon icon-people','icon icon-percentage-circle','icon icon-percentage-square','icon icon-personalcard','icon icon-pet','icon icon-pharagraphspacing','icon icon-photoshop','icon icon-picture-frame','icon icon-play-add','icon icon-play-circle','icon icon-play-cricle','icon icon-play-remove','icon icon-play','icon icon-polkadot-dot','icon icon-polygon-matic','icon icon-polyswarm-nct','icon icon-presention-chart','icon icon-previous','icon icon-printer-slash','icon icon-printer','icon icon-profile-2user','icon icon-profile-add','icon icon-profile-circle','icon icon-profile-delete','icon icon-profile-remove','icon icon-profile-tick','icon icon-programming-arrow','icon icon-programming-arrows','icon icon-python','icon icon-quant-qnt','icon icon-quote-down-circle','icon icon-quote-down-square','icon icon-quote-down','icon icon-quote-up-circle','icon icon-quote-up-square','icon icon-quote-up','icon icon-radar-1','icon icon-radar-2','icon icon-radar','icon icon-radio','icon icon-ram-2','icon icon-ram','icon icon-ranking-1','icon icon-ranking','icon icon-receipt-1','icon icon-receipt-2-1','icon icon-receipt-2','icon icon-receipt-add','icon icon-receipt-discount','icon icon-receipt-disscount','icon icon-receipt-edit','icon icon-receipt-item','icon icon-receipt-minus','icon icon-receipt-search','icon icon-receipt-square','icon icon-receipt-text','icon icon-receipt','icon icon-receive-square-2','icon icon-receive-square','icon icon-received','icon icon-record-circle','icon icon-record','icon icon-recovery-convert','icon icon-redo','icon icon-refresh-2','icon icon-refresh-circle','icon icon-refresh-left-square','icon icon-refresh-right-square','icon icon-refresh-square-2','icon icon-refresh','icon icon-repeat-circle','icon icon-repeat','icon icon-repeate-music','icon icon-repeate-one','icon icon-reserve','icon icon-rotate-left-1','icon icon-rotate-left','icon icon-rotate-right-1','icon icon-rotate-right','icon icon-route-square','icon icon-routing-2','icon icon-routing','icon icon-row-horizontal','icon icon-row-vertical','icon icon-ruler','icon icon-rulerandpen','icon icon-safe-home','icon icon-sagittarius','icon icon-save-2','icon icon-save-add','icon icon-save-minus','icon icon-save-remove','icon icon-scan-barcode','icon icon-scan','icon icon-scanner','icon icon-scanning','icon icon-scissor-1','icon icon-scissor','icon icon-screenmirroring','icon icon-scroll','icon icon-search-favorite-1','icon icon-search-favorite','icon icon-search-normal-1','icon icon-search-normal','icon icon-search-status-1','icon icon-search-status','icon icon-search-zoom-in-1','icon icon-search-zoom-in','icon icon-search-zoom-out-1','icon icon-search-zoom-out','icon icon-security-card','icon icon-security-safe','icon icon-security-time','icon icon-security-user','icon icon-security','icon icon-send-1','icon icon-send-2','icon icon-send-sqaure-2','icon icon-send-square','icon icon-send','icon icon-setting-2','icon icon-setting-3','icon icon-setting-4','icon icon-setting-5','icon icon-setting','icon icon-settings','icon icon-shapes-1','icon icon-shapes','icon icon-share','icon icon-shield-cross','icon icon-shield-search','icon icon-shield-slash','icon icon-shield-tick','icon icon-shield','icon icon-ship','icon icon-shop-add','icon icon-shop-remove','icon icon-shop','icon icon-shopping-bag','icon icon-shopping-cart','icon icon-shuffle','icon icon-siacoin-sc','icon icon-sidebar-bottom','icon icon-sidebar-left','icon icon-sidebar-right','icon icon-sidebar-top','icon icon-signpost','icon icon-simcard-1','icon icon-simcard-2','icon icon-simcard','icon icon-size','icon icon-slack','icon icon-slash','icon icon-slider-horizontal-1','icon icon-slider-horizontal','icon icon-slider-vertical-1','icon icon-slider-vertical','icon icon-slider','icon icon-smallcaps','icon icon-smart-car','icon icon-smart-home','icon icon-smileys','icon icon-sms-edit','icon icon-sms-notification','icon icon-sms-search','icon icon-sms-star','icon icon-sms-tracking','icon icon-sms','icon icon-snapchat','icon icon-solana-sol','icon icon-sort','icon icon-sound','icon icon-speaker','icon icon-speedometer','icon icon-spotify','icon icon-stacks-stx','icon icon-star-1','icon icon-star-slash','icon icon-star','icon icon-status-up','icon icon-status','icon icon-stellar-xlm','icon icon-sticker','icon icon-stickynote','icon icon-stop-circle','icon icon-stop','icon icon-story','icon icon-strongbox-2','icon icon-strongbox','icon icon-subtitle','icon icon-sun-1','icon icon-sun-fog','icon icon-sun','icon icon-tag-2','icon icon-tag-cross','icon icon-tag-right','icon icon-tag-user','icon icon-tag','icon icon-task-square','icon icon-task','icon icon-teacher','icon icon-tenx-pay','icon icon-tether-usdt','icon icon-text-block','icon icon-text-bold','icon icon-text-italic','icon icon-text-underline','icon icon-text','icon icon-textalign-center','icon icon-textalign-justifycenter','icon icon-textalign-justifyleft','icon icon-textalign-justifyright','icon icon-textalign-left','icon icon-textalign-right','icon icon-the-graph-grt','icon icon-theta-theta','icon icon-thorchain-rune','icon icon-tick-circle','icon icon-tick-square','icon icon-ticket-2','icon icon-ticket-discount','icon icon-ticket-expired','icon icon-ticket-star','icon icon-ticket','icon icon-timer-1','icon icon-timer-pause','icon icon-timer-start','icon icon-timer','icon icon-toggle-off-circle','icon icon-toggle-off','icon icon-toggle-on-circle','icon icon-toggle-on','icon icon-trade','icon icon-transaction-minus','icon icon-translate','icon icon-trash','icon icon-tree','icon icon-trello','icon icon-trend-down','icon icon-trend-up','icon icon-triangle-1','icon icon-triangle','icon icon-trontron-trx','icon icon-truck-fast','icon icon-truck-remove','icon icon-truck-tick','icon icon-truck-time','icon icon-truck','icon icon-trush-square','icon icon-twitch','icon icon-ui8','icon icon-undo','icon icon-unlimited','icon icon-unlock','icon icon-usd-coin-usdc','icon icon-user-add','icon icon-user-cirlce-add','icon icon-user-edit','icon icon-user-minus','icon icon-user-octagon','icon icon-user-remove','icon icon-user-search','icon icon-user-square','icon icon-user-tag','icon icon-user-tick','icon icon-user','icon icon-velas-vlx','icon icon-verify','icon icon-vibe-vibe','icon icon-video-add','icon icon-video-circle','icon icon-video-horizontal','icon icon-video-octagon','icon icon-video-play','icon icon-video-remove','icon icon-video-slash','icon icon-video-square','icon icon-video-tick','icon icon-video-time','icon icon-video-vertical','icon icon-video','icon icon-voice-cricle','icon icon-voice-square','icon icon-volume-cross','icon icon-volume-high','icon icon-volume-low-1','icon icon-volume-low','icon icon-volume-mute','icon icon-volume-slash','icon icon-volume-up','icon icon-vuesax','icon icon-wallet-1','icon icon-wallet-2','icon icon-wallet-3','icon icon-wallet-add-1','icon icon-wallet-add','icon icon-wallet-check','icon icon-wallet-minus','icon icon-wallet-money','icon icon-wallet-remove','icon icon-wallet-search','icon icon-wallet','icon icon-wanchain-wan-1','icon icon-wanchain-wan','icon icon-warning-2','icon icon-watch-status','icon icon-watch','icon icon-weight-1','icon icon-weight','icon icon-whatsapp','icon icon-wifi-square','icon icon-wifi','icon icon-wind-2','icon icon-wind','icon icon-windows','icon icon-wing-wing','icon icon-woman','icon icon-xd','icon icon-xiaomi','icon icon-xrp-xrp','icon icon-youtube','icon icon-zel-zel','icon icon-zoom' )
+ ) );
+ }
+}
diff --git a/framework/fields/image_select/image_select.php b/framework/fields/image_select/image_select.php
new file mode 100755
index 0000000..a853aa7
--- /dev/null
+++ b/framework/fields/image_select/image_select.php
@@ -0,0 +1,79 @@
+field, array(
+ 'multiple' => false,
+ 'inline' => false,
+ 'options' => array(),
+ ) );
+
+ $inline = ( $args['inline'] ) ? ' wp_china_yes--inline-list' : '';
+
+ $value = ( is_array( $this->value ) ) ? $this->value : array_filter( (array) $this->value );
+
+ echo $this->field_before();
+
+ if ( ! empty( $args['options'] ) ) {
+
+ echo '';
+
+ $num = 1;
+
+ foreach ( $args['options'] as $key => $option ) {
+
+ $type = ( $args['multiple'] ) ? 'checkbox' : 'radio';
+ $extra = ( $args['multiple'] ) ? '[]' : '';
+ $active = ( in_array( $key, $value ) ) ? ' wp_china_yes--active' : '';
+ $checked = ( in_array( $key, $value ) ) ? ' checked' : '';
+
+ echo '
';
+
+ }
+
+ echo '
';
+
+ }
+
+ echo $this->field_after();
+
+ }
+
+ public function output() {
+
+ $output = '';
+ $bg_image = array();
+ $important = ( ! empty( $this->field['output_important'] ) ) ? '!important' : '';
+ $elements = ( is_array( $this->field['output'] ) ) ? join( ',', $this->field['output'] ) : $this->field['output'];
+
+ if ( ! empty( $elements ) && isset( $this->value ) && $this->value !== '' ) {
+ $output = $elements .'{background-image:url('. $this->value .')'. $important .';}';
+ }
+
+ $this->parent->output_css .= $output;
+
+ return $output;
+
+ }
+
+ }
+}
diff --git a/framework/fields/index.php b/framework/fields/index.php
new file mode 100755
index 0000000..49d255d
--- /dev/null
+++ b/framework/fields/index.php
@@ -0,0 +1 @@
+field, array(
+ 'add_title' => esc_html__( 'Add Link', 'wp_china_yes' ),
+ 'edit_title' => esc_html__( 'Edit Link', 'wp_china_yes' ),
+ 'remove_title' => esc_html__( 'Remove Link', 'wp_china_yes' ),
+ ) );
+
+ $default_values = array(
+ 'url' => '',
+ 'text' => '',
+ 'target' => '',
+ );
+
+ $value = wp_parse_args( $this->value, $default_values );
+
+ $hidden = ( ! empty( $value['url'] ) || ! empty( $value['url'] ) || ! empty( $value['url'] ) ) ? ' hidden' : '';
+
+ $maybe_hidden = ( empty( $hidden ) ) ? ' hidden' : '';
+
+ echo $this->field_before();
+
+ echo '';
+
+ echo ''. sprintf( '{url:"%s", text:"%s", target:"%s"}', $value['url'], $value['text'], $value['target'] ) .'
';
+
+ echo 'field_attributes( array( 'class' => 'wp_china_yes--url' ) ) .' />';
+ echo '';
+ echo '';
+
+ echo ''. $args['add_title'] .' ';
+ echo ''. $args['edit_title'] .' ';
+ echo ''. $args['remove_title'] .'';
+
+ echo $this->field_after();
+
+ }
+
+ public function enqueue() {
+
+ if ( ! wp_script_is( 'wplink' ) ) {
+ wp_enqueue_script( 'wplink' );
+ }
+
+ if ( ! wp_script_is( 'jquery-ui-autocomplete' ) ) {
+ wp_enqueue_script( 'jquery-ui-autocomplete' );
+ }
+
+ add_action( 'admin_print_footer_scripts', array( $this, 'add_wp_link_dialog' ) );
+
+ }
+
+ public function add_wp_link_dialog() {
+
+ if ( ! class_exists( '_WP_Editors' ) ) {
+ require_once ABSPATH . WPINC .'/class-wp-editor.php';
+ }
+
+ wp_print_styles( 'editor-buttons' );
+
+ _WP_Editors::wp_link_dialog();
+
+ }
+
+ }
+}
diff --git a/framework/fields/link_color/link_color.php b/framework/fields/link_color/link_color.php
new file mode 100755
index 0000000..ea4ad5c
--- /dev/null
+++ b/framework/fields/link_color/link_color.php
@@ -0,0 +1,91 @@
+field, array(
+ 'color' => true,
+ 'hover' => true,
+ 'active' => false,
+ 'visited' => false,
+ 'focus' => false,
+ ) );
+
+ $default_values = array(
+ 'color' => '',
+ 'hover' => '',
+ 'active' => '',
+ 'visited' => '',
+ 'focus' => '',
+ );
+
+ $color_props = array(
+ 'color' => esc_html__( 'Normal', 'wp_china_yes' ),
+ 'hover' => esc_html__( 'Hover', 'wp_china_yes' ),
+ 'active' => esc_html__( 'Active', 'wp_china_yes' ),
+ 'visited' => esc_html__( 'Visited', 'wp_china_yes' ),
+ 'focus' => esc_html__( 'Focus', 'wp_china_yes' )
+ );
+
+ $value = wp_parse_args( $this->value, $default_values );
+
+ echo $this->field_before();
+
+ foreach ( $color_props as $color_prop_key => $color_prop_value ) {
+
+ if ( ! empty( $args[$color_prop_key] ) ) {
+
+ $default_attr = ( ! empty( $this->field['default'][$color_prop_key] ) ) ? ' data-default-color="'. esc_attr( $this->field['default'][$color_prop_key] ) .'"' : '';
+
+ echo '';
+ echo '
'. esc_attr( $color_prop_value ) .'
';
+ echo '
field_attributes() .'/>';
+ echo '
';
+
+ }
+
+ }
+
+ echo $this->field_after();
+
+ }
+
+ public function output() {
+
+ $output = '';
+ $elements = ( is_array( $this->field['output'] ) ) ? $this->field['output'] : array_filter( (array) $this->field['output'] );
+ $important = ( ! empty( $this->field['output_important'] ) ) ? '!important' : '';
+
+ if ( ! empty( $elements ) && isset( $this->value ) && $this->value !== '' ) {
+ foreach ( $elements as $element ) {
+
+ if ( isset( $this->value['color'] ) && $this->value['color'] !== '' ) { $output .= $element .'{color:'. $this->value['color'] . $important .';}'; }
+ if ( isset( $this->value['hover'] ) && $this->value['hover'] !== '' ) { $output .= $element .':hover{color:'. $this->value['hover'] . $important .';}'; }
+ if ( isset( $this->value['active'] ) && $this->value['active'] !== '' ) { $output .= $element .':active{color:'. $this->value['active'] . $important .';}'; }
+ if ( isset( $this->value['visited'] ) && $this->value['visited'] !== '' ) { $output .= $element .':visited{color:'. $this->value['visited'] . $important .';}'; }
+ if ( isset( $this->value['focus'] ) && $this->value['focus'] !== '' ) { $output .= $element .':focus{color:'. $this->value['focus'] . $important .';}'; }
+
+ }
+ }
+
+ $this->parent->output_css .= $output;
+
+ return $output;
+
+ }
+
+ }
+}
diff --git a/framework/fields/map/map.php b/framework/fields/map/map.php
new file mode 100755
index 0000000..2475a60
--- /dev/null
+++ b/framework/fields/map/map.php
@@ -0,0 +1,98 @@
+field, array(
+ 'placeholder' => esc_html__( 'Search...', 'wp_china_yes' ),
+ 'latitude_text' => esc_html__( 'Latitude', 'wp_china_yes' ),
+ 'longitude_text' => esc_html__( 'Longitude', 'wp_china_yes' ),
+ 'address_field' => '',
+ 'height' => '',
+ ) );
+
+ $value = wp_parse_args( $this->value, array(
+ 'address' => '',
+ 'latitude' => '20',
+ 'longitude' => '0',
+ 'zoom' => '2',
+ ) );
+
+ $default_settings = array(
+ 'center' => array( $value['latitude'], $value['longitude'] ),
+ 'zoom' => $value['zoom'],
+ 'scrollWheelZoom' => false,
+ );
+
+ $settings = ( ! empty( $this->field['settings'] ) ) ? $this->field['settings'] : array();
+ $settings = wp_parse_args( $settings, $default_settings );
+
+ $style_attr = ( ! empty( $args['height'] ) ) ? ' style="min-height:'. esc_attr( $args['height'] ) .';"' : '';
+ $placeholder = ( ! empty( $args['placeholder'] ) ) ? array( 'placeholder' => $args['placeholder'] ) : '';
+
+ echo $this->field_before();
+
+ if ( empty( $args['address_field'] ) ) {
+ echo '';
+ echo 'field_attributes( $placeholder ) .' />';
+ echo '
';
+ } else {
+ echo '';
+ }
+
+ echo '';
+
+ echo '';
+
+ echo '';
+
+ echo $this->field_after();
+
+ }
+
+ public function enqueue() {
+
+ if ( ! wp_script_is( 'wp_china_yes-leaflet' ) ) {
+ wp_enqueue_script( 'wp_china_yes-leaflet', esc_url( $this->cdn_url . $this->version .'/dist/leaflet.js' ), array( 'wp_china_yes' ), $this->version, true );
+ }
+
+ if ( ! wp_style_is( 'wp_china_yes-leaflet' ) ) {
+ wp_enqueue_style( 'wp_china_yes-leaflet', esc_url( $this->cdn_url . $this->version .'/dist/leaflet.css' ), array(), $this->version );
+ }
+
+ if ( ! wp_script_is( 'jquery-ui-autocomplete' ) ) {
+ wp_enqueue_script( 'jquery-ui-autocomplete' );
+ }
+
+ }
+
+ }
+}
diff --git a/framework/fields/media/media.php b/framework/fields/media/media.php
new file mode 100755
index 0000000..0dc827d
--- /dev/null
+++ b/framework/fields/media/media.php
@@ -0,0 +1,96 @@
+field, array(
+ 'url' => true,
+ 'preview' => true,
+ 'preview_width' => '',
+ 'preview_height' => '',
+ 'library' => array(),
+ 'button_title' => esc_html__( 'Upload', 'wp_china_yes' ),
+ 'remove_title' => esc_html__( 'Remove', 'wp_china_yes' ),
+ 'preview_size' => 'thumbnail',
+ ) );
+
+ $default_values = array(
+ 'url' => '',
+ 'id' => '',
+ 'width' => '',
+ 'height' => '',
+ 'thumbnail' => '',
+ 'alt' => '',
+ 'title' => '',
+ 'description' => ''
+ );
+
+ // fallback
+ if ( is_numeric( $this->value ) ) {
+
+ $this->value = array(
+ 'id' => $this->value,
+ 'url' => wp_get_attachment_url( $this->value ),
+ 'thumbnail' => wp_get_attachment_image_src( $this->value, 'thumbnail', true )[0],
+ );
+
+ }
+
+ $this->value = wp_parse_args( $this->value, $default_values );
+
+ $library = ( is_array( $args['library'] ) ) ? $args['library'] : array_filter( (array) $args['library'] );
+ $library = ( ! empty( $library ) ) ? implode(',', $library ) : '';
+ $preview_src = ( $args['preview_size'] !== 'thumbnail' ) ? $this->value['url'] : $this->value['thumbnail'];
+ $hidden_url = ( empty( $args['url'] ) ) ? ' hidden' : '';
+ $hidden_auto = ( empty( $this->value['url'] ) ) ? ' hidden' : '';
+ $placeholder = ( empty( $this->field['placeholder'] ) ) ? ' placeholder="'. esc_html__( 'Not selected', 'wp_china_yes' ) .'"' : '';
+
+ echo $this->field_before();
+
+ if ( ! empty( $args['preview'] ) ) {
+
+ $preview_width = ( ! empty( $args['preview_width'] ) ) ? 'max-width:'. esc_attr( $args['preview_width'] ) .'px;' : '';
+ $preview_height = ( ! empty( $args['preview_height'] ) ) ? 'max-height:'. esc_attr( $args['preview_height'] ) .'px;' : '';
+ $preview_style = ( ! empty( $preview_width ) || ! empty( $preview_height ) ) ? ' style="'. esc_attr( $preview_width . $preview_height ) .'"': '';
+
+ echo '';
+ echo '
';
+ echo '
 .')
';
+ echo '
';
+ echo '
';
+
+ }
+
+ echo '';
+
+ echo '';
+ echo '';
+ echo '';
+ echo '';
+ echo '';
+ echo '';
+ echo '';
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/framework/fields/notice/notice.php b/framework/fields/notice/notice.php
new file mode 100755
index 0000000..8cc42e6
--- /dev/null
+++ b/framework/fields/notice/notice.php
@@ -0,0 +1,26 @@
+field['style'] ) ) ? $this->field['style'] : 'normal';
+
+ echo ( ! empty( $this->field['content'] ) ) ? ''. $this->field['content'] .'
' : '';
+
+ }
+
+ }
+}
diff --git a/framework/fields/number/number.php b/framework/fields/number/number.php
new file mode 100755
index 0000000..60c21e9
--- /dev/null
+++ b/framework/fields/number/number.php
@@ -0,0 +1,63 @@
+field, array(
+ 'min' => 'any',
+ 'max' => 'any',
+ 'step' => 'any',
+ 'unit' => '',
+ ) );
+
+ echo $this->field_before();
+ echo '';
+ echo 'field_attributes() .' min="'. esc_attr( $args['min'] ) .'" max="'. esc_attr( $args['max'] ) .'" step="'. esc_attr( $args['step'] ) .'"/>';
+ echo ( ! empty( $args['unit'] ) ) ? ''. esc_attr( $args['unit'] ) .'' : '';
+ echo '
';
+ echo $this->field_after();
+
+ }
+
+ public function output() {
+
+ $output = '';
+ $elements = ( is_array( $this->field['output'] ) ) ? $this->field['output'] : array_filter( (array) $this->field['output'] );
+ $important = ( ! empty( $this->field['output_important'] ) ) ? '!important' : '';
+ $mode = ( ! empty( $this->field['output_mode'] ) ) ? $this->field['output_mode'] : 'width';
+ $unit = ( ! empty( $this->field['unit'] ) ) ? $this->field['unit'] : 'px';
+
+ if ( ! empty( $elements ) && isset( $this->value ) && $this->value !== '' ) {
+ foreach ( $elements as $key_property => $element ) {
+ if ( is_numeric( $key_property ) ) {
+ if ( $mode ) {
+ $output = implode( ',', $elements ) .'{'. $mode .':'. $this->value . $unit . $important .';}';
+ }
+ break;
+ } else {
+ $output .= $element .'{'. $key_property .':'. $this->value . $unit . $important .'}';
+ }
+ }
+ }
+
+ $this->parent->output_css .= $output;
+
+ return $output;
+
+ }
+
+ }
+}
diff --git a/framework/fields/palette/palette.php b/framework/fields/palette/palette.php
new file mode 100755
index 0000000..e8a95da
--- /dev/null
+++ b/framework/fields/palette/palette.php
@@ -0,0 +1,58 @@
+field['options'] ) ) ? $this->field['options'] : array();
+
+ echo $this->field_before();
+
+ if ( ! empty( $palette ) ) {
+
+ echo '';
+
+ foreach ( $palette as $key => $colors ) {
+
+ $active = ( $key === $this->value ) ? ' wp_china_yes--active' : '';
+ $checked = ( $key === $this->value ) ? ' checked' : '';
+
+ echo '
';
+
+ if ( ! empty( $colors ) ) {
+
+ foreach ( $colors as $color ) {
+
+ echo '';
+
+ }
+
+ }
+
+ echo 'field_attributes() . esc_attr( $checked ) .'/>';
+ echo '
';
+
+ }
+
+ echo '
';
+
+ }
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/framework/fields/radio/radio.php b/framework/fields/radio/radio.php
new file mode 100755
index 0000000..30768ff
--- /dev/null
+++ b/framework/fields/radio/radio.php
@@ -0,0 +1,93 @@
+field, array(
+ 'inline' => false,
+ 'query_args' => array(),
+ ) );
+
+ $inline_class = ( $args['inline'] ) ? ' class="wp_china_yes--inline-list"' : '';
+
+ echo $this->field_before();
+
+ if ( isset( $this->field['options'] ) ) {
+
+ $options = $this->field['options'];
+ $options = ( is_array( $options ) ) ? $options : array_filter( $this->field_data( $options, false, $args['query_args'] ) );
+
+ if ( is_array( $options ) && ! empty( $options ) ) {
+
+ echo '';
+
+ } else {
+
+ echo ( ! empty( $this->field['empty_message'] ) ) ? esc_attr( $this->field['empty_message'] ) : esc_html__( 'No data available.', 'wp_china_yes' );
+
+ }
+
+ } else {
+
+ $label = ( isset( $this->field['label'] ) ) ? $this->field['label'] : '';
+ echo '';
+
+ }
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/framework/fields/repeater/repeater.php b/framework/fields/repeater/repeater.php
new file mode 100755
index 0000000..92f2ec2
--- /dev/null
+++ b/framework/fields/repeater/repeater.php
@@ -0,0 +1,108 @@
+field, array(
+ 'max' => 0,
+ 'min' => 0,
+ 'button_title' => '',
+ ) );
+
+ if ( preg_match( '/'. preg_quote( '['. $this->field['id'] .']' ) .'/', $this->unique ) ) {
+
+ echo ''. esc_html__( 'Error: Field ID conflict.', 'wp_china_yes' ) .'
';
+
+ } else {
+
+ echo $this->field_before();
+
+ echo '';
+ echo '
';
+ foreach ( $this->field['fields'] as $field ) {
+
+ $field_default = ( isset( $field['default'] ) ) ? $field['default'] : '';
+ $field_unique = ( ! empty( $this->unique ) ) ? $this->unique .'['. $this->field['id'] .'][0]' : $this->field['id'] .'[0]';
+
+ WP_CHINA_YES::field( $field, $field_default, '___'. $field_unique, 'field/repeater' );
+
+ }
+ echo '
';
+ echo '
';
+ echo '
';
+ echo '';
+ echo '';
+ echo '';
+ echo '
';
+ echo '
';
+ echo '
';
+
+ echo '';
+
+ if ( ! empty( $this->value ) && is_array( $this->value ) ) {
+
+ $num = 0;
+
+ foreach ( $this->value as $key => $value ) {
+
+ echo '
';
+ echo '
';
+ foreach ( $this->field['fields'] as $field ) {
+
+ $field_unique = ( ! empty( $this->unique ) ) ? $this->unique .'['. $this->field['id'] .']['. $num .']' : $this->field['id'] .'['. $num .']';
+ $field_value = ( isset( $field['id'] ) && isset( $this->value[$key][$field['id']] ) ) ? $this->value[$key][$field['id']] : '';
+
+ WP_CHINA_YES::field( $field, $field_value, $field_unique, 'field/repeater' );
+
+ }
+ echo '
';
+ echo '
';
+ echo '
';
+ echo '';
+ echo '';
+ echo '';
+ echo '
';
+ echo '
';
+ echo '
';
+
+ $num++;
+
+ }
+
+ }
+
+ echo '
';
+
+ echo ''. esc_html__( 'You cannot add more.', 'wp_china_yes' ) .'
';
+ echo ''. esc_html__( 'You cannot remove more.', 'wp_china_yes' ) .'
';
+ echo ''. $args['button_title'] .'';
+
+ echo $this->field_after();
+
+ }
+
+ }
+
+ public function enqueue() {
+
+ if ( ! wp_script_is( 'jquery-ui-sortable' ) ) {
+ wp_enqueue_script( 'jquery-ui-sortable' );
+ }
+
+ }
+
+ }
+}
diff --git a/framework/fields/select/select.php b/framework/fields/select/select.php
new file mode 100755
index 0000000..b15b6da
--- /dev/null
+++ b/framework/fields/select/select.php
@@ -0,0 +1,132 @@
+field, array(
+ 'placeholder' => '',
+ 'chosen' => false,
+ 'multiple' => false,
+ 'sortable' => false,
+ 'ajax' => false,
+ 'settings' => array(),
+ 'query_args' => array(),
+ ) );
+
+ $this->value = ( is_array( $this->value ) ) ? $this->value : array_filter( (array) $this->value );
+
+ echo $this->field_before();
+
+ if ( isset( $this->field['options'] ) ) {
+
+ if ( ! empty( $args['ajax'] ) ) {
+ $args['settings']['data']['type'] = $args['options'];
+ $args['settings']['data']['nonce'] = wp_create_nonce( 'wp_china_yes_chosen_ajax_nonce' );
+ if ( ! empty( $args['query_args'] ) ) {
+ $args['settings']['data']['query_args'] = $args['query_args'];
+ }
+ }
+
+ $chosen_rtl = ( is_rtl() ) ? ' chosen-rtl' : '';
+ $multiple_name = ( $args['multiple'] ) ? '[]' : '';
+ $multiple_attr = ( $args['multiple'] ) ? ' multiple="multiple"' : '';
+ $chosen_sortable = ( $args['chosen'] && $args['sortable'] ) ? ' wp_china_yes-chosen-sortable' : '';
+ $chosen_ajax = ( $args['chosen'] && $args['ajax'] ) ? ' wp_china_yes-chosen-ajax' : '';
+ $placeholder_attr = ( $args['chosen'] && $args['placeholder'] ) ? ' data-placeholder="'. esc_attr( $args['placeholder'] ) .'"' : '';
+ $field_class = ( $args['chosen'] ) ? ' class="wp_china_yes-chosen'. esc_attr( $chosen_rtl . $chosen_sortable . $chosen_ajax ) .'"' : '';
+ $field_name = $this->field_name( $multiple_name );
+ $field_attr = $this->field_attributes();
+ $maybe_options = $this->field['options'];
+ $chosen_data_attr = ( $args['chosen'] && ! empty( $args['settings'] ) ) ? ' data-chosen-settings="'. esc_attr( json_encode( $args['settings'] ) ) .'"' : '';
+
+ if ( is_string( $maybe_options ) && ! empty( $args['chosen'] ) && ! empty( $args['ajax'] ) ) {
+ $options = $this->field_wp_query_data_title( $maybe_options, $this->value );
+ } else if ( is_string( $maybe_options ) ) {
+ $options = $this->field_data( $maybe_options, false, $args['query_args'] );
+ } else {
+ $options = $maybe_options;
+ }
+
+ if ( ( is_array( $options ) && ! empty( $options ) ) || ( ! empty( $args['chosen'] ) && ! empty( $args['ajax'] ) ) ) {
+
+ if ( ! empty( $args['chosen'] ) && ! empty( $args['multiple'] ) ) {
+
+ echo '';
+
+ $field_name = '_pseudo';
+ $field_attr = '';
+
+ }
+
+ // These attributes has been serialized above.
+ echo '';
+
+ } else {
+
+ echo ( ! empty( $this->field['empty_message'] ) ) ? esc_attr( $this->field['empty_message'] ) : esc_html__( 'No data available.', 'wp_china_yes' );
+
+ }
+
+ }
+
+ echo $this->field_after();
+
+ }
+
+ public function enqueue() {
+
+ if ( ! wp_script_is( 'jquery-ui-sortable' ) ) {
+ wp_enqueue_script( 'jquery-ui-sortable' );
+ }
+
+ }
+
+ }
+}
diff --git a/framework/fields/slider/slider.php b/framework/fields/slider/slider.php
new file mode 100755
index 0000000..3a6c320
--- /dev/null
+++ b/framework/fields/slider/slider.php
@@ -0,0 +1,78 @@
+field, array(
+ 'max' => 100,
+ 'min' => 0,
+ 'step' => 1,
+ 'unit' => '',
+ ) );
+
+ $is_unit = ( ! empty( $args['unit'] ) ) ? ' wp_china_yes--is-unit' : '';
+
+ echo $this->field_before();
+
+ echo '';
+ echo '
';
+ echo '
';
+ echo 'field_attributes( array( 'class' => 'wp_china_yes-input-number'. esc_attr( $is_unit ) ) ) .' data-min="'. esc_attr( $args['min'] ) .'" data-max="'. esc_attr( $args['max'] ) .'" data-step="'. esc_attr( $args['step'] ) .'" step="any" />';
+ echo ( ! empty( $args['unit'] ) ) ? ''. esc_attr( $args['unit'] ) .'' : '';
+ echo '
';
+ echo '
';
+
+ echo $this->field_after();
+
+ }
+
+ public function enqueue() {
+
+ if ( ! wp_script_is( 'jquery-ui-slider' ) ) {
+ wp_enqueue_script( 'jquery-ui-slider' );
+ }
+
+ }
+
+ public function output() {
+
+ $output = '';
+ $elements = ( is_array( $this->field['output'] ) ) ? $this->field['output'] : array_filter( (array) $this->field['output'] );
+ $important = ( ! empty( $this->field['output_important'] ) ) ? '!important' : '';
+ $mode = ( ! empty( $this->field['output_mode'] ) ) ? $this->field['output_mode'] : 'width';
+ $unit = ( ! empty( $this->field['unit'] ) ) ? $this->field['unit'] : 'px';
+
+ if ( ! empty( $elements ) && isset( $this->value ) && $this->value !== '' ) {
+ foreach ( $elements as $key_property => $element ) {
+ if ( is_numeric( $key_property ) ) {
+ if ( $mode ) {
+ $output = implode( ',', $elements ) .'{'. $mode .':'. $this->value . $unit . $important .';}';
+ }
+ break;
+ } else {
+ $output .= $element .'{'. $key_property .':'. $this->value . $unit . $important .'}';
+ }
+ }
+ }
+
+ $this->parent->output_css .= $output;
+
+ return $output;
+
+ }
+
+ }
+}
diff --git a/framework/fields/sortable/sortable.php b/framework/fields/sortable/sortable.php
new file mode 100755
index 0000000..8cc6dbe
--- /dev/null
+++ b/framework/fields/sortable/sortable.php
@@ -0,0 +1,87 @@
+field_before();
+
+ echo '';
+
+ $pre_sortby = array();
+ $pre_fields = array();
+
+ // Add array-keys to defined fields for sort by
+ foreach ( $this->field['fields'] as $key => $field ) {
+ $pre_fields[$field['id']] = $field;
+ }
+
+ // Set sort by by saved-value or default-value
+ if ( ! empty( $this->value ) ) {
+
+ foreach ( $this->value as $key => $value ) {
+ $pre_sortby[$key] = $pre_fields[$key];
+ }
+
+ $diff = array_diff_key( $pre_fields, $this->value );
+
+ if( ! empty( $diff ) ) {
+ $pre_sortby = array_merge( $pre_sortby, $diff );
+ }
+
+ } else {
+
+ foreach ( $pre_fields as $key => $value ) {
+ $pre_sortby[$key] = $value;
+ }
+
+ }
+
+ foreach ( $pre_sortby as $key => $field ) {
+
+ echo '
';
+
+ echo '
';
+
+ $field_default = ( isset( $this->field['default'][$key] ) ) ? $this->field['default'][$key] : '';
+ $field_value = ( isset( $this->value[$key] ) ) ? $this->value[$key] : $field_default;
+ $unique_id = ( ! empty( $this->unique ) ) ? $this->unique .'['. $this->field['id'] .']' : $this->field['id'];
+
+ WP_CHINA_YES::field( $field, $field_value, $unique_id, 'field/sortable' );
+
+ echo '
';
+
+ echo '
';
+
+ echo '
';
+
+ }
+
+ echo '
';
+
+ echo $this->field_after();
+
+ }
+
+ public function enqueue() {
+
+ if ( ! wp_script_is( 'jquery-ui-sortable' ) ) {
+ wp_enqueue_script( 'jquery-ui-sortable' );
+ }
+
+ }
+
+ }
+}
diff --git a/framework/fields/sorter/sorter.php b/framework/fields/sorter/sorter.php
new file mode 100755
index 0000000..6037675
--- /dev/null
+++ b/framework/fields/sorter/sorter.php
@@ -0,0 +1,76 @@
+field, array(
+ 'disabled' => true,
+ 'enabled_title' => esc_html__( 'Enabled', 'wp_china_yes' ),
+ 'disabled_title' => esc_html__( 'Disabled', 'wp_china_yes' ),
+ ) );
+
+ echo $this->field_before();
+
+ $this->value = ( ! empty( $this->value ) ) ? $this->value : $this->field['default'];
+ $enabled_options = ( ! empty( $this->value['enabled'] ) ) ? $this->value['enabled'] : array();
+ $disabled_options = ( ! empty( $this->value['disabled'] ) ) ? $this->value['disabled'] : array();
+
+ echo '';
+
+ echo ( $args['disabled'] ) ? '' : '';
+
+ echo ( ! empty( $args['enabled_title'] ) ) ? '
'. esc_attr( $args['enabled_title'] ) .'
' : '';
+ echo '
';
+ if ( ! empty( $enabled_options ) ) {
+ foreach ( $enabled_options as $key => $value ) {
+ echo '';
+ }
+ }
+ echo '
';
+
+ // Check for hide/show disabled section
+ if ( $args['disabled'] ) {
+
+ echo '
';
+
+ echo '';
+ echo ( ! empty( $args['disabled_title'] ) ) ? '
'. esc_attr( $args['disabled_title'] ) .'
' : '';
+ echo '
';
+ if ( ! empty( $disabled_options ) ) {
+ foreach ( $disabled_options as $key => $value ) {
+ echo '';
+ }
+ }
+ echo '
';
+ echo '
';
+
+ }
+
+
+ echo $this->field_after();
+
+ }
+
+ public function enqueue() {
+
+ if ( ! wp_script_is( 'jquery-ui-sortable' ) ) {
+ wp_enqueue_script( 'jquery-ui-sortable' );
+ }
+
+ }
+
+ }
+}
diff --git a/framework/fields/spacing/spacing.php b/framework/fields/spacing/spacing.php
new file mode 100755
index 0000000..1cc92b2
--- /dev/null
+++ b/framework/fields/spacing/spacing.php
@@ -0,0 +1,171 @@
+field, array(
+ 'top_icon' => '',
+ 'right_icon' => '',
+ 'bottom_icon' => '',
+ 'left_icon' => '',
+ 'all_icon' => '',
+ 'top_placeholder' => esc_html__( 'top', 'wp_china_yes' ),
+ 'right_placeholder' => esc_html__( 'right', 'wp_china_yes' ),
+ 'bottom_placeholder' => esc_html__( 'bottom', 'wp_china_yes' ),
+ 'left_placeholder' => esc_html__( 'left', 'wp_china_yes' ),
+ 'all_placeholder' => esc_html__( 'all', 'wp_china_yes' ),
+ 'top' => true,
+ 'left' => true,
+ 'bottom' => true,
+ 'right' => true,
+ 'unit' => true,
+ 'show_units' => true,
+ 'all' => false,
+ 'units' => array( 'px', '%', 'em' )
+ ) );
+
+ $default_values = array(
+ 'top' => '',
+ 'right' => '',
+ 'bottom' => '',
+ 'left' => '',
+ 'all' => '',
+ 'unit' => 'px',
+ );
+
+ $value = wp_parse_args( $this->value, $default_values );
+ $unit = ( count( $args['units'] ) === 1 && ! empty( $args['unit'] ) ) ? $args['units'][0] : '';
+ $is_unit = ( ! empty( $unit ) ) ? ' wp_china_yes--is-unit' : '';
+
+ echo $this->field_before();
+
+ echo '';
+
+ echo $this->field_after();
+
+ }
+
+ public function output() {
+
+ $output = '';
+ $element = ( is_array( $this->field['output'] ) ) ? join( ',', $this->field['output'] ) : $this->field['output'];
+ $important = ( ! empty( $this->field['output_important'] ) ) ? '!important' : '';
+ $unit = ( ! empty( $this->value['unit'] ) ) ? $this->value['unit'] : 'px';
+
+ $mode = ( ! empty( $this->field['output_mode'] ) ) ? $this->field['output_mode'] : 'padding';
+
+ if ( $mode === 'border-radius' || $mode === 'radius' ) {
+
+ $top = 'border-top-left-radius';
+ $right = 'border-top-right-radius';
+ $bottom = 'border-bottom-right-radius';
+ $left = 'border-bottom-left-radius';
+
+ } else if ( $mode === 'relative' || $mode === 'absolute' || $mode === 'none' ) {
+
+ $top = 'top';
+ $right = 'right';
+ $bottom = 'bottom';
+ $left = 'left';
+
+ } else {
+
+ $top = $mode .'-top';
+ $right = $mode .'-right';
+ $bottom = $mode .'-bottom';
+ $left = $mode .'-left';
+
+ }
+
+ if ( ! empty( $this->field['all'] ) && isset( $this->value['all'] ) && $this->value['all'] !== '' ) {
+
+ $output = $element .'{';
+ $output .= $top .':'. $this->value['all'] . $unit . $important .';';
+ $output .= $right .':'. $this->value['all'] . $unit . $important .';';
+ $output .= $bottom .':'. $this->value['all'] . $unit . $important .';';
+ $output .= $left .':'. $this->value['all'] . $unit . $important .';';
+ $output .= '}';
+
+ } else {
+
+ $top = ( isset( $this->value['top'] ) && $this->value['top'] !== '' ) ? $top .':'. $this->value['top'] . $unit . $important .';' : '';
+ $right = ( isset( $this->value['right'] ) && $this->value['right'] !== '' ) ? $right .':'. $this->value['right'] . $unit . $important .';' : '';
+ $bottom = ( isset( $this->value['bottom'] ) && $this->value['bottom'] !== '' ) ? $bottom .':'. $this->value['bottom'] . $unit . $important .';' : '';
+ $left = ( isset( $this->value['left'] ) && $this->value['left'] !== '' ) ? $left .':'. $this->value['left'] . $unit . $important .';' : '';
+
+ if ( $top !== '' || $right !== '' || $bottom !== '' || $left !== '' ) {
+ $output = $element .'{'. $top . $right . $bottom . $left .'}';
+ }
+
+ }
+
+ $this->parent->output_css .= $output;
+
+ return $output;
+
+ }
+
+ }
+}
diff --git a/framework/fields/spinner/spinner.php b/framework/fields/spinner/spinner.php
new file mode 100755
index 0000000..3e657a8
--- /dev/null
+++ b/framework/fields/spinner/spinner.php
@@ -0,0 +1,70 @@
+field, array(
+ 'max' => 100,
+ 'min' => 0,
+ 'step' => 1,
+ 'unit' => '',
+ ) );
+
+ echo $this->field_before();
+
+ echo 'field_attributes( array( 'class' => 'wp_china_yes-input-number' ) ) .' data-min="'. esc_attr( $args['min'] ) .'" data-max="'. esc_attr( $args['max'] ) .'" data-step="'. esc_attr( $args['step'] ) .'" data-unit="'. esc_attr( $args['unit'] ) .'" step="any" />
';
+
+ echo $this->field_after();
+
+ }
+
+ public function enqueue() {
+
+ if ( ! wp_script_is( 'jquery-ui-spinner' ) ) {
+ wp_enqueue_script( 'jquery-ui-spinner' );
+ }
+
+ }
+
+ public function output() {
+
+ $output = '';
+ $elements = ( is_array( $this->field['output'] ) ) ? $this->field['output'] : array_filter( (array) $this->field['output'] );
+ $important = ( ! empty( $this->field['output_important'] ) ) ? '!important' : '';
+ $mode = ( ! empty( $this->field['output_mode'] ) ) ? $this->field['output_mode'] : 'width';
+ $unit = ( ! empty( $this->field['unit'] ) ) ? $this->field['unit'] : 'px';
+
+ if ( ! empty( $elements ) && isset( $this->value ) && $this->value !== '' ) {
+ foreach ( $elements as $key_property => $element ) {
+ if ( is_numeric( $key_property ) ) {
+ if ( $mode ) {
+ $output = implode( ',', $elements ) .'{'. $mode .':'. $this->value . $unit . $important .';}';
+ }
+ break;
+ } else {
+ $output .= $element .'{'. $key_property .':'. $this->value . $unit . $important .'}';
+ }
+ }
+ }
+
+ $this->parent->output_css .= $output;
+
+ return $output;
+
+ }
+
+ }
+}
diff --git a/framework/fields/subheading/subheading.php b/framework/fields/subheading/subheading.php
new file mode 100755
index 0000000..9cf27c6
--- /dev/null
+++ b/framework/fields/subheading/subheading.php
@@ -0,0 +1,24 @@
+field['content'] ) ) ? $this->field['content'] : '';
+
+ }
+
+ }
+}
diff --git a/framework/fields/submessage/submessage.php b/framework/fields/submessage/submessage.php
new file mode 100755
index 0000000..4d34b09
--- /dev/null
+++ b/framework/fields/submessage/submessage.php
@@ -0,0 +1,26 @@
+field['style'] ) ) ? $this->field['style'] : 'normal';
+
+ echo ''. $this->field['content'] .'
';
+
+ }
+
+ }
+}
diff --git a/framework/fields/switcher/switcher.php b/framework/fields/switcher/switcher.php
new file mode 100755
index 0000000..f2b41b2
--- /dev/null
+++ b/framework/fields/switcher/switcher.php
@@ -0,0 +1,40 @@
+value ) ) ? ' wp_china_yes--active' : '';
+ $text_on = ( ! empty( $this->field['text_on'] ) ) ? $this->field['text_on'] : esc_html__( 'On', 'wp_china_yes' );
+ $text_off = ( ! empty( $this->field['text_off'] ) ) ? $this->field['text_off'] : esc_html__( 'Off', 'wp_china_yes' );
+ $text_width = ( ! empty( $this->field['text_width'] ) ) ? ' style="width: '. esc_attr( $this->field['text_width'] ) .'px;"': '';
+
+ echo $this->field_before();
+
+ echo '';
+ echo ''. esc_attr( $text_on ) .'';
+ echo ''. esc_attr( $text_off ) .'';
+ echo '';
+ echo 'field_attributes() .' />';
+ echo '
';
+
+ echo ( ! empty( $this->field['label'] ) ) ? ''. esc_attr( $this->field['label'] ) . '' : '';
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/framework/fields/tabbed/tabbed.php b/framework/fields/tabbed/tabbed.php
new file mode 100755
index 0000000..240aa1c
--- /dev/null
+++ b/framework/fields/tabbed/tabbed.php
@@ -0,0 +1,64 @@
+field_before();
+
+ echo '';
+ foreach ( $this->field['tabs'] as $key => $tab ) {
+
+ $tabbed_icon = ( ! empty( $tab['icon'] ) ) ? '
' : '';
+ $tabbed_active = ( empty( $key ) ) ? 'wp_china_yes-tabbed-active' : '';
+
+ echo '
'. $tabbed_icon . esc_attr( $tab['title'] ) .'';
+
+ }
+ echo '
';
+
+ echo '';
+ foreach ( $this->field['tabs'] as $key => $tab ) {
+
+ $tabbed_hidden = ( ! empty( $key ) ) ? ' hidden' : '';
+
+ echo '
';
+
+ foreach ( $tab['fields'] as $field ) {
+
+ if ( in_array( $field['type'], $unallows ) ) { $field['_notice'] = true; }
+
+ $field_id = ( isset( $field['id'] ) ) ? $field['id'] : '';
+ $field_default = ( isset( $field['default'] ) ) ? $field['default'] : '';
+ $field_value = ( isset( $this->value[$field_id] ) ) ? $this->value[$field_id] : $field_default;
+ $unique_id = ( ! empty( $this->unique ) ) ? $this->unique .'['. $this->field['id'] .']' : $this->field['id'];
+
+ WP_CHINA_YES::field( $field, $field_value, $unique_id, 'field/tabbed' );
+
+ }
+
+ echo '
';
+
+ }
+ echo '
';
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/framework/fields/text/text.php b/framework/fields/text/text.php
new file mode 100755
index 0000000..3daffc9
--- /dev/null
+++ b/framework/fields/text/text.php
@@ -0,0 +1,30 @@
+field['attributes']['type'] ) ) ? $this->field['attributes']['type'] : 'text';
+
+ echo $this->field_before();
+
+ echo 'field_attributes() .' />';
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/framework/fields/textarea/textarea.php b/framework/fields/textarea/textarea.php
new file mode 100755
index 0000000..b67fbe3
--- /dev/null
+++ b/framework/fields/textarea/textarea.php
@@ -0,0 +1,58 @@
+field_before();
+ echo $this->shortcoder();
+ echo '';
+ echo $this->field_after();
+
+ }
+
+ public function shortcoder() {
+
+ if ( ! empty( $this->field['shortcoder'] ) ) {
+
+ $shortcodes = ( is_array( $this->field['shortcoder'] ) ) ? $this->field['shortcoder'] : array_filter( (array) $this->field['shortcoder'] );
+ $instances = ( ! empty( WP_CHINA_YES::$shortcode_instances ) ) ? WP_CHINA_YES::$shortcode_instances : array();
+
+ if ( ! empty( $shortcodes ) && ! empty( $instances ) ) {
+
+ foreach ( $shortcodes as $shortcode ) {
+
+ foreach ( $instances as $instance ) {
+
+ if ( $instance['modal_id'] === $shortcode ) {
+
+ $id = $instance['modal_id'];
+ $title = $instance['button_title'];
+
+ echo ''. esc_html( $title ) .'';
+
+ }
+
+ }
+
+ }
+
+ }
+
+ }
+
+ }
+ }
+}
diff --git a/framework/fields/typography/google-fonts.php b/framework/fields/typography/google-fonts.php
new file mode 100755
index 0000000..b7cad4d
--- /dev/null
+++ b/framework/fields/typography/google-fonts.php
@@ -0,0 +1,1607 @@
+[['normal','italic'],['latin','latin-ext']],
+ 'ADLaM Display'=>[['normal'],['adlam','latin','latin-ext']],
+ 'AR One Sans'=>[['normal','500','600','700'],['latin','latin-ext','vietnamese']],
+ 'Abel'=>[['normal'],['latin']],
+ 'Abhaya Libre'=>[['normal','500','600','700','800'],['latin','latin-ext','sinhala']],
+ 'Aboreto'=>[['normal'],['latin','latin-ext']],
+ 'Abril Fatface'=>[['normal'],['latin','latin-ext']],
+ 'Abyssinica SIL'=>[['normal'],['ethiopic','latin','latin-ext']],
+ 'Aclonica'=>[['normal'],['latin']],
+ 'Acme'=>[['normal'],['latin']],
+ 'Actor'=>[['normal'],['latin']],
+ 'Adamina'=>[['normal'],['latin']],
+ 'Advent Pro'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','latin','latin-ext']],
+ 'Afacad'=>[['normal','500','600','700','italic','500italic','600italic','700italic'],['cyrillic-ext','latin','latin-ext','math','symbols','vietnamese']],
+ 'Agbalumo'=>[['normal'],['cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Agdasima'=>[['normal','700'],['latin','latin-ext']],
+ 'Aguafina Script'=>[['normal'],['latin','latin-ext']],
+ 'Akatab'=>[['normal','500','600','700','800','900'],['latin','latin-ext','tifinagh']],
+ 'Akaya Kanadaka'=>[['normal'],['kannada','latin','latin-ext']],
+ 'Akaya Telivigala'=>[['normal'],['latin','latin-ext','telugu']],
+ 'Akronim'=>[['normal'],['latin','latin-ext']],
+ 'Akshar'=>[['300','normal','500','600','700'],['devanagari','latin','latin-ext']],
+ 'Aladin'=>[['normal'],['latin','latin-ext']],
+ 'Alata'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Alatsi'=>[['normal'],['cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Albert Sans'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext']],
+ 'Aldrich'=>[['normal'],['latin']],
+ 'Alef'=>[['normal','700'],['hebrew','latin']],
+ 'Alegreya'=>[['normal','500','600','700','800','900','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Alegreya SC'=>[['normal','italic','500','500italic','700','700italic','800','800italic','900','900italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Alegreya Sans'=>[['100','100italic','300','300italic','normal','italic','500','500italic','700','700italic','800','800italic','900','900italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Alegreya Sans SC'=>[['100','100italic','300','300italic','normal','italic','500','500italic','700','700italic','800','800italic','900','900italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Aleo'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Alex Brush'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Alexandria'=>[['100','200','300','normal','500','600','700','800','900'],['arabic','latin','latin-ext','vietnamese']],
+ 'Alfa Slab One'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Alice'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'Alike'=>[['normal'],['latin','latin-ext','math','symbols']],
+ 'Alike Angular'=>[['normal'],['latin','latin-ext','math','symbols']],
+ 'Alkalami'=>[['normal'],['arabic','latin','latin-ext']],
+ 'Alkatra'=>[['normal','500','600','700'],['bengali','devanagari','latin','latin-ext','oriya']],
+ 'Allan'=>[['normal','700'],['latin','latin-ext']],
+ 'Allerta'=>[['normal'],['latin']],
+ 'Allerta Stencil'=>[['normal'],['latin']],
+ 'Allison'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Allura'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Almarai'=>[['300','normal','700','800'],['arabic']],
+ 'Almendra'=>[['normal','italic','700','700italic'],['latin','latin-ext']],
+ 'Almendra Display'=>[['normal'],['latin','latin-ext']],
+ 'Almendra SC'=>[['normal'],['latin']],
+ 'Alumni Sans'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Alumni Sans Collegiate One'=>[['normal','italic'],['cyrillic','latin','latin-ext','vietnamese']],
+ 'Alumni Sans Inline One'=>[['normal','italic'],['latin','latin-ext','vietnamese']],
+ 'Alumni Sans Pinstripe'=>[['normal','italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Amarante'=>[['normal'],['latin','latin-ext']],
+ 'Amaranth'=>[['normal','italic','700','700italic'],['latin']],
+ 'Amatic SC'=>[['normal','700'],['cyrillic','hebrew','latin','latin-ext','vietnamese']],
+ 'Amethysta'=>[['normal'],['latin']],
+ 'Amiko'=>[['normal','600','700'],['devanagari','latin','latin-ext']],
+ 'Amiri'=>[['normal','italic','700','700italic'],['arabic','latin','latin-ext']],
+ 'Amiri Quran'=>[['normal'],['arabic','latin']],
+ 'Amita'=>[['normal','700'],['devanagari','latin','latin-ext']],
+ 'Anaheim'=>[['normal'],['latin','latin-ext']],
+ 'Andada Pro'=>[['normal','500','600','700','800','italic','500italic','600italic','700italic','800italic'],['latin','latin-ext','vietnamese']],
+ 'Andika'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Anek Bangla'=>[['100','200','300','normal','500','600','700','800'],['bengali','latin','latin-ext']],
+ 'Anek Devanagari'=>[['100','200','300','normal','500','600','700','800'],['devanagari','latin','latin-ext']],
+ 'Anek Gujarati'=>[['100','200','300','normal','500','600','700','800'],['gujarati','latin','latin-ext']],
+ 'Anek Gurmukhi'=>[['100','200','300','normal','500','600','700','800'],['gurmukhi','latin','latin-ext']],
+ 'Anek Kannada'=>[['100','200','300','normal','500','600','700','800'],['kannada','latin','latin-ext']],
+ 'Anek Latin'=>[['100','200','300','normal','500','600','700','800'],['latin','latin-ext','vietnamese']],
+ 'Anek Malayalam'=>[['100','200','300','normal','500','600','700','800'],['latin','latin-ext','malayalam']],
+ 'Anek Odia'=>[['100','200','300','normal','500','600','700','800'],['latin','latin-ext','oriya']],
+ 'Anek Tamil'=>[['100','200','300','normal','500','600','700','800'],['latin','latin-ext','tamil']],
+ 'Anek Telugu'=>[['100','200','300','normal','500','600','700','800'],['latin','latin-ext','telugu']],
+ 'Angkor'=>[['normal'],['khmer','latin']],
+ 'Annie Use Your Telescope'=>[['normal'],['latin']],
+ 'Anonymous Pro'=>[['normal','italic','700','700italic'],['cyrillic','greek','latin','latin-ext']],
+ 'Antic'=>[['normal'],['latin']],
+ 'Antic Didone'=>[['normal'],['latin']],
+ 'Antic Slab'=>[['normal'],['latin']],
+ 'Anton'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Antonio'=>[['100','200','300','normal','500','600','700'],['latin','latin-ext']],
+ 'Anuphan'=>[['100','200','300','normal','500','600','700'],['cyrillic-ext','latin','latin-ext','thai','vietnamese']],
+ 'Anybody'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Aoboshi One'=>[['normal'],['japanese','latin','latin-ext']],
+ 'Arapey'=>[['normal','italic'],['latin']],
+ 'Arbutus'=>[['normal'],['latin','latin-ext']],
+ 'Arbutus Slab'=>[['normal'],['latin','latin-ext']],
+ 'Architects Daughter'=>[['normal'],['latin']],
+ 'Archivo'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Archivo Black'=>[['normal'],['latin','latin-ext']],
+ 'Archivo Narrow'=>[['normal','500','600','700','italic','500italic','600italic','700italic'],['latin','latin-ext','vietnamese']],
+ 'Are You Serious'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Aref Ruqaa'=>[['normal','700'],['arabic','latin','latin-ext']],
+ 'Aref Ruqaa Ink'=>[['normal','700'],['arabic','latin','latin-ext']],
+ 'Arima'=>[['100','200','300','normal','500','600','700'],['greek','greek-ext','latin','latin-ext','malayalam','tamil','vietnamese']],
+ 'Arimo'=>[['normal','500','600','700','italic','500italic','600italic','700italic'],['cyrillic','cyrillic-ext','greek','greek-ext','hebrew','latin','latin-ext','vietnamese']],
+ 'Arizonia'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Armata'=>[['normal'],['latin','latin-ext']],
+ 'Arsenal'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Artifika'=>[['normal'],['latin']],
+ 'Arvo'=>[['normal','italic','700','700italic'],['latin']],
+ 'Arya'=>[['normal','700'],['devanagari','latin','latin-ext']],
+ 'Asap'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Asap Condensed'=>[['200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['latin','latin-ext','vietnamese']],
+ 'Asar'=>[['normal'],['devanagari','latin','latin-ext']],
+ 'Asset'=>[['normal'],['latin']],
+ 'Assistant'=>[['200','300','normal','500','600','700','800'],['hebrew','latin','latin-ext']],
+ 'Astloch'=>[['normal','700'],['latin']],
+ 'Asul'=>[['normal','700'],['latin']],
+ 'Athiti'=>[['200','300','normal','500','600','700'],['latin','latin-ext','thai','vietnamese']],
+ 'Atkinson Hyperlegible'=>[['normal','italic','700','700italic'],['latin','latin-ext']],
+ 'Atma'=>[['300','normal','500','600','700'],['bengali','latin','latin-ext']],
+ 'Atomic Age'=>[['normal'],['latin']],
+ 'Aubrey'=>[['normal'],['latin']],
+ 'Audiowide'=>[['normal'],['latin','latin-ext']],
+ 'Autour One'=>[['normal'],['latin','latin-ext']],
+ 'Average'=>[['normal'],['latin','latin-ext']],
+ 'Average Sans'=>[['normal'],['latin','latin-ext']],
+ 'Averia Gruesa Libre'=>[['normal'],['latin','latin-ext']],
+ 'Averia Libre'=>[['300','300italic','normal','italic','700','700italic'],['latin']],
+ 'Averia Sans Libre'=>[['300','300italic','normal','italic','700','700italic'],['latin']],
+ 'Averia Serif Libre'=>[['300','300italic','normal','italic','700','700italic'],['latin']],
+ 'Azeret Mono'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext']],
+ 'B612'=>[['normal','italic','700','700italic'],['latin']],
+ 'B612 Mono'=>[['normal','italic','700','700italic'],['latin']],
+ 'BIZ UDGothic'=>[['normal','700'],['cyrillic','greek-ext','japanese','latin','latin-ext']],
+ 'BIZ UDMincho'=>[['normal','700'],['cyrillic','greek-ext','japanese','latin','latin-ext']],
+ 'BIZ UDPGothic'=>[['normal','700'],['cyrillic','greek-ext','japanese','latin','latin-ext']],
+ 'BIZ UDPMincho'=>[['normal','700'],['cyrillic','greek-ext','japanese','latin','latin-ext']],
+ 'Babylonica'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Bacasime Antique'=>[['normal'],['latin','latin-ext']],
+ 'Bad Script'=>[['normal'],['cyrillic','latin']],
+ 'Bagel Fat One'=>[['normal'],['korean','latin','latin-ext']],
+ 'Bahiana'=>[['normal'],['latin','latin-ext']],
+ 'Bahianita'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Bai Jamjuree'=>[['200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic'],['latin','latin-ext','thai','vietnamese']],
+ 'Bakbak One'=>[['normal'],['devanagari','latin','latin-ext']],
+ 'Ballet'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Baloo 2'=>[['normal','500','600','700','800'],['devanagari','latin','latin-ext','vietnamese']],
+ 'Baloo Bhai 2'=>[['normal','500','600','700','800'],['gujarati','latin','latin-ext','vietnamese']],
+ 'Baloo Bhaijaan 2'=>[['normal','500','600','700','800'],['arabic','latin','latin-ext','vietnamese']],
+ 'Baloo Bhaina 2'=>[['normal','500','600','700','800'],['latin','latin-ext','oriya','vietnamese']],
+ 'Baloo Chettan 2'=>[['normal','500','600','700','800'],['latin','latin-ext','malayalam','vietnamese']],
+ 'Baloo Da 2'=>[['normal','500','600','700','800'],['bengali','latin','latin-ext','vietnamese']],
+ 'Baloo Paaji 2'=>[['normal','500','600','700','800'],['gurmukhi','latin','latin-ext','vietnamese']],
+ 'Baloo Tamma 2'=>[['normal','500','600','700','800'],['kannada','latin','latin-ext','vietnamese']],
+ 'Baloo Tammudu 2'=>[['normal','500','600','700','800'],['latin','latin-ext','telugu','vietnamese']],
+ 'Baloo Thambi 2'=>[['normal','500','600','700','800'],['latin','latin-ext','tamil','vietnamese']],
+ 'Balsamiq Sans'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'Balthazar'=>[['normal'],['latin']],
+ 'Bangers'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Barlow'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['latin','latin-ext','vietnamese']],
+ 'Barlow Condensed'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['latin','latin-ext','vietnamese']],
+ 'Barlow Semi Condensed'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['latin','latin-ext','vietnamese']],
+ 'Barriecito'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Barrio'=>[['normal'],['latin','latin-ext']],
+ 'Basic'=>[['normal'],['latin','latin-ext']],
+ 'Baskervville'=>[['normal','italic'],['latin','latin-ext']],
+ 'Battambang'=>[['100','300','normal','700','900'],['khmer','latin']],
+ 'Baumans'=>[['normal'],['latin']],
+ 'Bayon'=>[['normal'],['khmer','latin']],
+ 'Be Vietnam Pro'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['latin','latin-ext','vietnamese']],
+ 'Beau Rivage'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Bebas Neue'=>[['normal'],['latin','latin-ext']],
+ 'Belanosima'=>[['normal','600','700'],['latin','latin-ext']],
+ 'Belgrano'=>[['normal'],['latin']],
+ 'Bellefair'=>[['normal'],['hebrew','latin','latin-ext']],
+ 'Belleza'=>[['normal'],['latin','latin-ext']],
+ 'Bellota'=>[['300','300italic','normal','italic','700','700italic'],['cyrillic','latin','latin-ext','vietnamese']],
+ 'Bellota Text'=>[['300','300italic','normal','italic','700','700italic'],['cyrillic','latin','latin-ext','vietnamese']],
+ 'BenchNine'=>[['300','normal','700'],['latin','latin-ext']],
+ 'Benne'=>[['normal'],['kannada','latin','latin-ext']],
+ 'Bentham'=>[['normal'],['latin']],
+ 'Berkshire Swash'=>[['normal'],['latin','latin-ext']],
+ 'Besley'=>[['normal','500','600','700','800','900','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext']],
+ 'Beth Ellen'=>[['normal'],['latin']],
+ 'Bevan'=>[['normal','italic'],['latin','latin-ext','vietnamese']],
+ 'BhuTuka Expanded One'=>[['normal'],['gurmukhi','latin','latin-ext']],
+ 'Big Shoulders Display'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Big Shoulders Inline Display'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Big Shoulders Inline Text'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Big Shoulders Stencil Display'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Big Shoulders Stencil Text'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Big Shoulders Text'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Bigelow Rules'=>[['normal'],['latin','latin-ext']],
+ 'Bigshot One'=>[['normal'],['latin']],
+ 'Bilbo'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Bilbo Swash Caps'=>[['normal'],['latin','latin-ext']],
+ 'BioRhyme'=>[['200','300','normal','500','600','700','800'],['latin','latin-ext']],
+ 'BioRhyme Expanded'=>[['200','300','normal','700','800'],['latin','latin-ext']],
+ 'Birthstone'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Birthstone Bounce'=>[['normal','500'],['latin','latin-ext','vietnamese']],
+ 'Biryani'=>[['200','300','normal','600','700','800','900'],['devanagari','latin','latin-ext']],
+ 'Bitter'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Black And White Picture'=>[['normal'],['korean','latin']],
+ 'Black Han Sans'=>[['normal'],['korean','latin']],
+ 'Black Ops One'=>[['normal'],['cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Blaka'=>[['normal'],['arabic','latin','latin-ext']],
+ 'Blaka Hollow'=>[['normal'],['arabic','latin','latin-ext']],
+ 'Blaka Ink'=>[['normal'],['arabic','latin','latin-ext']],
+ 'Blinker'=>[['100','200','300','normal','600','700','800','900'],['latin','latin-ext']],
+ 'Bodoni Moda'=>[['normal','500','600','700','800','900','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext']],
+ 'Bokor'=>[['normal'],['khmer','latin']],
+ 'Bona Nova'=>[['normal','italic','700'],['cyrillic','cyrillic-ext','greek','hebrew','latin','latin-ext','vietnamese']],
+ 'Bonbon'=>[['normal'],['latin']],
+ 'Bonheur Royale'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Boogaloo'=>[['normal'],['latin']],
+ 'Borel'=>[['normal'],['latin','latin-ext','math','symbols','vietnamese']],
+ 'Bowlby One'=>[['normal'],['latin']],
+ 'Bowlby One SC'=>[['normal'],['latin','latin-ext']],
+ 'Braah One'=>[['normal'],['gurmukhi','latin','latin-ext','vietnamese']],
+ 'Brawler'=>[['normal','700'],['latin']],
+ 'Bree Serif'=>[['normal'],['latin','latin-ext']],
+ 'Bricolage Grotesque'=>[['200','300','normal','500','600','700','800'],['cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Bruno Ace'=>[['normal'],['latin','latin-ext']],
+ 'Bruno Ace SC'=>[['normal'],['latin','latin-ext']],
+ 'Brygada 1918'=>[['normal','500','600','700','italic','500italic','600italic','700italic'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','vietnamese']],
+ 'Bubblegum Sans'=>[['normal'],['latin','latin-ext']],
+ 'Bubbler One'=>[['normal'],['latin','latin-ext']],
+ 'Buda'=>[['300'],['latin']],
+ 'Buenard'=>[['normal','700'],['latin','latin-ext']],
+ 'Bungee'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Bungee Hairline'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Bungee Inline'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Bungee Outline'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Bungee Shade'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Bungee Spice'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Butcherman'=>[['normal'],['latin','latin-ext']],
+ 'Butterfly Kids'=>[['normal'],['latin','latin-ext']],
+ 'Cabin'=>[['normal','500','600','700','italic','500italic','600italic','700italic'],['latin','latin-ext','vietnamese']],
+ 'Cabin Condensed'=>[['normal','500','600','700'],['latin','latin-ext','vietnamese']],
+ 'Cabin Sketch'=>[['normal','700'],['latin']],
+ 'Caesar Dressing'=>[['normal'],['latin']],
+ 'Cagliostro'=>[['normal'],['latin']],
+ 'Cairo'=>[['200','300','normal','500','600','700','800','900'],['arabic','latin','latin-ext']],
+ 'Cairo Play'=>[['200','300','normal','500','600','700','800','900'],['arabic','latin','latin-ext']],
+ 'Caladea'=>[['normal','italic','700','700italic'],['latin','latin-ext']],
+ 'Calistoga'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Calligraffitti'=>[['normal'],['latin']],
+ 'Cambay'=>[['normal','italic','700','700italic'],['devanagari','latin','latin-ext']],
+ 'Cambo'=>[['normal'],['latin','latin-ext']],
+ 'Candal'=>[['normal'],['latin']],
+ 'Cantarell'=>[['normal','italic','700','700italic'],['latin','latin-ext']],
+ 'Cantata One'=>[['normal'],['latin','latin-ext']],
+ 'Cantora One'=>[['normal'],['latin','latin-ext']],
+ 'Caprasimo'=>[['normal'],['latin','latin-ext']],
+ 'Capriola'=>[['normal'],['latin','latin-ext']],
+ 'Caramel'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Carattere'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Cardo'=>[['normal','italic','700'],['greek','greek-ext','latin','latin-ext']],
+ 'Carlito'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Carme'=>[['normal'],['latin']],
+ 'Carrois Gothic'=>[['normal'],['latin']],
+ 'Carrois Gothic SC'=>[['normal'],['latin']],
+ 'Carter One'=>[['normal'],['latin']],
+ 'Castoro'=>[['normal','italic'],['latin','latin-ext']],
+ 'Castoro Titling'=>[['normal'],['latin','latin-ext']],
+ 'Catamaran'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','tamil']],
+ 'Caudex'=>[['normal','italic','700','700italic'],['greek','greek-ext','latin','latin-ext']],
+ 'Caveat'=>[['normal','500','600','700'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'Caveat Brush'=>[['normal'],['latin','latin-ext']],
+ 'Cedarville Cursive'=>[['normal'],['latin']],
+ 'Ceviche One'=>[['normal'],['latin','latin-ext']],
+ 'Chakra Petch'=>[['300','300italic','normal','italic','500','500italic','600','600italic','700','700italic'],['latin','latin-ext','thai','vietnamese']],
+ 'Changa'=>[['200','300','normal','500','600','700','800'],['arabic','latin','latin-ext']],
+ 'Changa One'=>[['normal','italic'],['latin']],
+ 'Chango'=>[['normal'],['latin','latin-ext']],
+ 'Charis SIL'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Charm'=>[['normal','700'],['latin','latin-ext','thai','vietnamese']],
+ 'Charmonman'=>[['normal','700'],['latin','latin-ext','thai','vietnamese']],
+ 'Chathura'=>[['100','300','normal','700','800'],['latin','telugu']],
+ 'Chau Philomene One'=>[['normal','italic'],['latin','latin-ext']],
+ 'Chela One'=>[['normal'],['latin','latin-ext']],
+ 'Chelsea Market'=>[['normal'],['latin','latin-ext']],
+ 'Chenla'=>[['normal'],['khmer']],
+ 'Cherish'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Cherry Bomb One'=>[['normal'],['japanese','latin','latin-ext','vietnamese']],
+ 'Cherry Cream Soda'=>[['normal'],['latin']],
+ 'Cherry Swash'=>[['normal','700'],['latin','latin-ext']],
+ 'Chewy'=>[['normal'],['latin']],
+ 'Chicle'=>[['normal'],['latin','latin-ext']],
+ 'Chilanka'=>[['normal'],['latin','latin-ext','malayalam']],
+ 'Chivo'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Chivo Mono'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Chokokutai'=>[['normal'],['japanese','latin','latin-ext','vietnamese']],
+ 'Chonburi'=>[['normal'],['latin','latin-ext','thai','vietnamese']],
+ 'Cinzel'=>[['normal','500','600','700','800','900'],['latin','latin-ext']],
+ 'Cinzel Decorative'=>[['normal','700','900'],['latin']],
+ 'Clicker Script'=>[['normal'],['latin','latin-ext']],
+ 'Climate Crisis'=>[['normal'],['latin','latin-ext']],
+ 'Coda'=>[['normal','800'],['latin','latin-ext']],
+ 'Codystar'=>[['300','normal'],['latin','latin-ext']],
+ 'Coiny'=>[['normal'],['latin','latin-ext','tamil','vietnamese']],
+ 'Combo'=>[['normal'],['latin','latin-ext']],
+ 'Comfortaa'=>[['300','normal','500','600','700'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','vietnamese']],
+ 'Comforter'=>[['normal'],['cyrillic','latin','latin-ext','vietnamese']],
+ 'Comforter Brush'=>[['normal'],['cyrillic','latin','latin-ext','vietnamese']],
+ 'Comic Neue'=>[['300','300italic','normal','italic','700','700italic'],['latin']],
+ 'Coming Soon'=>[['normal'],['latin']],
+ 'Comme'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext']],
+ 'Commissioner'=>[['100','200','300','normal','500','600','700','800','900'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','vietnamese']],
+ 'Concert One'=>[['normal'],['latin','latin-ext']],
+ 'Condiment'=>[['normal'],['latin','latin-ext']],
+ 'Content'=>[['normal','700'],['khmer']],
+ 'Contrail One'=>[['normal'],['latin']],
+ 'Convergence'=>[['normal'],['latin','latin-ext']],
+ 'Cookie'=>[['normal'],['latin']],
+ 'Copse'=>[['normal'],['latin']],
+ 'Corben'=>[['normal','700'],['latin','latin-ext']],
+ 'Corinthia'=>[['normal','700'],['latin','latin-ext','vietnamese']],
+ 'Cormorant'=>[['300','normal','500','600','700','300italic','italic','500italic','600italic','700italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Cormorant Garamond'=>[['300','300italic','normal','italic','500','500italic','600','600italic','700','700italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Cormorant Infant'=>[['300','300italic','normal','italic','500','500italic','600','600italic','700','700italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Cormorant SC'=>[['300','normal','500','600','700'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Cormorant Unicase'=>[['300','normal','500','600','700'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Cormorant Upright'=>[['300','normal','500','600','700'],['latin','latin-ext','vietnamese']],
+ 'Courgette'=>[['normal'],['latin','latin-ext']],
+ 'Courier Prime'=>[['normal','italic','700','700italic'],['latin','latin-ext']],
+ 'Cousine'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','greek','greek-ext','hebrew','latin','latin-ext','vietnamese']],
+ 'Coustard'=>[['normal','900'],['latin']],
+ 'Covered By Your Grace'=>[['normal'],['latin']],
+ 'Crafty Girls'=>[['normal'],['latin']],
+ 'Creepster'=>[['normal'],['latin']],
+ 'Crete Round'=>[['normal','italic'],['latin','latin-ext']],
+ 'Crimson Pro'=>[['200','300','normal','500','600','700','800','900','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Crimson Text'=>[['normal','italic','600','600italic','700','700italic'],['latin','latin-ext','vietnamese']],
+ 'Croissant One'=>[['normal'],['latin','latin-ext']],
+ 'Crushed'=>[['normal'],['latin']],
+ 'Cuprum'=>[['normal','500','600','700','italic','500italic','600italic','700italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Cute Font'=>[['normal'],['korean','latin']],
+ 'Cutive'=>[['normal'],['latin','latin-ext']],
+ 'Cutive Mono'=>[['normal'],['latin','latin-ext']],
+ 'DM Mono'=>[['300','300italic','normal','italic','500','500italic'],['latin','latin-ext']],
+ 'DM Sans'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext']],
+ 'DM Serif Display'=>[['normal','italic'],['latin','latin-ext']],
+ 'DM Serif Text'=>[['normal','italic'],['latin','latin-ext']],
+ 'Dai Banna SIL'=>[['300','300italic','normal','italic','500','500italic','600','600italic','700','700italic'],['latin','latin-ext','new-tai-lue']],
+ 'Damion'=>[['normal'],['latin']],
+ 'Dancing Script'=>[['normal','500','600','700'],['latin','latin-ext','vietnamese']],
+ 'Dangrek'=>[['normal'],['khmer','latin']],
+ 'Darker Grotesque'=>[['300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Darumadrop One'=>[['normal'],['japanese','latin','latin-ext']],
+ 'David Libre'=>[['normal','500','700'],['hebrew','latin','latin-ext','vietnamese']],
+ 'Dawning of a New Day'=>[['normal'],['latin']],
+ 'Days One'=>[['normal'],['latin']],
+ 'Dekko'=>[['normal'],['devanagari','latin','latin-ext']],
+ 'Dela Gothic One'=>[['normal'],['cyrillic','greek','japanese','latin','latin-ext','vietnamese']],
+ 'Delicious Handrawn'=>[['normal'],['latin','latin-ext']],
+ 'Delius'=>[['normal'],['latin']],
+ 'Delius Swash Caps'=>[['normal'],['latin']],
+ 'Delius Unicase'=>[['normal','700'],['latin']],
+ 'Della Respira'=>[['normal'],['latin']],
+ 'Denk One'=>[['normal'],['cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Devonshire'=>[['normal'],['latin','latin-ext']],
+ 'Dhurjati'=>[['normal'],['latin','telugu']],
+ 'Didact Gothic'=>[['normal'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext']],
+ 'Diphylleia'=>[['normal'],['korean','latin','latin-ext']],
+ 'Diplomata'=>[['normal'],['latin','latin-ext']],
+ 'Diplomata SC'=>[['normal'],['latin','latin-ext']],
+ 'Do Hyeon'=>[['normal'],['korean','latin']],
+ 'Dokdo'=>[['normal'],['korean','latin']],
+ 'Domine'=>[['normal','500','600','700'],['latin','latin-ext']],
+ 'Donegal One'=>[['normal'],['latin','latin-ext']],
+ 'Dongle'=>[['300','normal','700'],['korean','latin','latin-ext','vietnamese']],
+ 'Doppio One'=>[['normal'],['latin','latin-ext']],
+ 'Dorsa'=>[['normal'],['latin']],
+ 'Dosis'=>[['200','300','normal','500','600','700','800'],['latin','latin-ext','vietnamese']],
+ 'DotGothic16'=>[['normal'],['cyrillic','japanese','latin','latin-ext']],
+ 'Dr Sugiyama'=>[['normal'],['latin','latin-ext']],
+ 'Duru Sans'=>[['normal'],['latin','latin-ext']],
+ 'DynaPuff'=>[['normal','500','600','700'],['cyrillic-ext','latin','latin-ext']],
+ 'Dynalight'=>[['normal'],['latin','latin-ext']],
+ 'EB Garamond'=>[['normal','500','600','700','800','italic','500italic','600italic','700italic','800italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Eagle Lake'=>[['normal'],['latin','latin-ext']],
+ 'East Sea Dokdo'=>[['normal'],['korean','latin']],
+ 'Eater'=>[['normal'],['latin','latin-ext']],
+ 'Economica'=>[['normal','italic','700','700italic'],['latin','latin-ext']],
+ 'Eczar'=>[['normal','500','600','700','800'],['devanagari','greek','greek-ext','latin','latin-ext']],
+ 'Edu NSW ACT Foundation'=>[['normal','500','600','700'],['latin']],
+ 'Edu QLD Beginner'=>[['normal','500','600','700'],['latin']],
+ 'Edu SA Beginner'=>[['normal','500','600','700'],['latin']],
+ 'Edu TAS Beginner'=>[['normal','500','600','700'],['latin']],
+ 'Edu VIC WA NT Beginner'=>[['normal','500','600','700'],['latin']],
+ 'El Messiri'=>[['normal','500','600','700'],['arabic','cyrillic','latin','latin-ext']],
+ 'Electrolize'=>[['normal'],['latin']],
+ 'Elsie'=>[['normal','900'],['latin','latin-ext']],
+ 'Elsie Swash Caps'=>[['normal','900'],['latin','latin-ext']],
+ 'Emblema One'=>[['normal'],['latin','latin-ext']],
+ 'Emilys Candy'=>[['normal'],['latin','latin-ext']],
+ 'Encode Sans'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Encode Sans Condensed'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Encode Sans Expanded'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Encode Sans SC'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Encode Sans Semi Condensed'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Encode Sans Semi Expanded'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Engagement'=>[['normal'],['latin']],
+ 'Englebert'=>[['normal'],['latin','latin-ext']],
+ 'Enriqueta'=>[['normal','500','600','700'],['latin','latin-ext']],
+ 'Ephesis'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Epilogue'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Erica One'=>[['normal'],['latin','latin-ext']],
+ 'Esteban'=>[['normal'],['latin','latin-ext']],
+ 'Estonia'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Euphoria Script'=>[['normal'],['latin','latin-ext']],
+ 'Ewert'=>[['normal'],['latin','latin-ext']],
+ 'Exo'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Exo 2'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Expletus Sans'=>[['normal','500','600','700','italic','500italic','600italic','700italic'],['latin','latin-ext']],
+ 'Explora'=>[['normal'],['cherokee','latin','latin-ext','vietnamese']],
+ 'Fahkwang'=>[['200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic'],['latin','latin-ext','thai','vietnamese']],
+ 'Familjen Grotesk'=>[['normal','500','600','700','italic','500italic','600italic','700italic'],['latin','latin-ext','vietnamese']],
+ 'Fanwood Text'=>[['normal','italic'],['latin']],
+ 'Farro'=>[['300','normal','500','700'],['latin','latin-ext']],
+ 'Farsan'=>[['normal'],['gujarati','latin','latin-ext','vietnamese']],
+ 'Fascinate'=>[['normal'],['latin']],
+ 'Fascinate Inline'=>[['normal'],['latin']],
+ 'Faster One'=>[['normal'],['latin','latin-ext']],
+ 'Fasthand'=>[['normal'],['khmer','latin']],
+ 'Fauna One'=>[['normal'],['latin','latin-ext']],
+ 'Faustina'=>[['300','normal','500','600','700','800','300italic','italic','500italic','600italic','700italic','800italic'],['latin','latin-ext','vietnamese']],
+ 'Federant'=>[['normal'],['latin']],
+ 'Federo'=>[['normal'],['latin']],
+ 'Felipa'=>[['normal'],['latin','latin-ext']],
+ 'Fenix'=>[['normal'],['latin','latin-ext']],
+ 'Festive'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Figtree'=>[['300','normal','500','600','700','800','900','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext']],
+ 'Finger Paint'=>[['normal'],['latin']],
+ 'Finlandica'=>[['normal','500','600','700','italic','500italic','600italic','700italic'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'Fira Code'=>[['300','normal','500','600','700'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext']],
+ 'Fira Mono'=>[['normal','500','700'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext']],
+ 'Fira Sans'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Fira Sans Condensed'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Fira Sans Extra Condensed'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Fjalla One'=>[['normal'],['cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Fjord One'=>[['normal'],['latin']],
+ 'Flamenco'=>[['300','normal'],['latin']],
+ 'Flavors'=>[['normal'],['latin','latin-ext']],
+ 'Fleur De Leah'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Flow Block'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Flow Circular'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Flow Rounded'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Foldit'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Fondamento'=>[['normal','italic'],['latin','latin-ext']],
+ 'Fontdiner Swanky'=>[['normal'],['latin']],
+ 'Forum'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'Fragment Mono'=>[['normal','italic'],['cyrillic-ext','latin','latin-ext']],
+ 'Francois One'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Frank Ruhl Libre'=>[['300','normal','500','600','700','800','900'],['hebrew','latin','latin-ext']],
+ 'Fraunces'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Freckle Face'=>[['normal'],['latin','latin-ext']],
+ 'Fredericka the Great'=>[['normal'],['latin','latin-ext']],
+ 'Fredoka'=>[['300','normal','500','600','700'],['hebrew','latin','latin-ext']],
+ 'Freehand'=>[['normal'],['khmer','latin']],
+ 'Fresca'=>[['normal'],['latin','latin-ext']],
+ 'Frijole'=>[['normal'],['latin']],
+ 'Fruktur'=>[['normal','italic'],['cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Fugaz One'=>[['normal'],['latin']],
+ 'Fuggles'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Fuzzy Bubbles'=>[['normal','700'],['latin','latin-ext','vietnamese']],
+ 'GFS Didot'=>[['normal'],['greek']],
+ 'GFS Neohellenic'=>[['normal','italic','700','700italic'],['greek']],
+ 'Gabarito'=>[['normal','500','600','700','800','900'],['latin','latin-ext']],
+ 'Gabriela'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'Gaegu'=>[['300','normal','700'],['korean','latin']],
+ 'Gafata'=>[['normal'],['latin','latin-ext']],
+ 'Gajraj One'=>[['normal'],['devanagari','latin','latin-ext']],
+ 'Galada'=>[['normal'],['bengali','latin']],
+ 'Galdeano'=>[['normal'],['latin']],
+ 'Galindo'=>[['normal'],['latin','latin-ext']],
+ 'Gamja Flower'=>[['normal'],['korean','latin']],
+ 'Gantari'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext']],
+ 'Gasoek One'=>[['normal'],['korean','latin','latin-ext']],
+ 'Gayathri'=>[['100','normal','700'],['latin','malayalam']],
+ 'Gelasio'=>[['normal','italic','500','500italic','600','600italic','700','700italic'],['latin','latin-ext','vietnamese']],
+ 'Gemunu Libre'=>[['200','300','normal','500','600','700','800'],['latin','latin-ext','sinhala']],
+ 'Genos'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cherokee','latin','latin-ext','vietnamese']],
+ 'Gentium Book Plus'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Gentium Plus'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Geo'=>[['normal','italic'],['latin']],
+ 'Geologica'=>[['100','200','300','normal','500','600','700','800','900'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','vietnamese']],
+ 'Georama'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Geostar'=>[['normal'],['latin']],
+ 'Geostar Fill'=>[['normal'],['latin']],
+ 'Germania One'=>[['normal'],['latin']],
+ 'Gideon Roman'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Gidugu'=>[['normal'],['latin','telugu']],
+ 'Gilda Display'=>[['normal'],['latin','latin-ext']],
+ 'Girassol'=>[['normal'],['latin','latin-ext']],
+ 'Give You Glory'=>[['normal'],['latin']],
+ 'Glass Antiqua'=>[['normal'],['latin','latin-ext']],
+ 'Glegoo'=>[['normal','700'],['devanagari','latin','latin-ext']],
+ 'Gloock'=>[['normal'],['cyrillic-ext','latin','latin-ext']],
+ 'Gloria Hallelujah'=>[['normal'],['latin']],
+ 'Glory'=>[['100','200','300','normal','500','600','700','800','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic'],['latin','latin-ext','vietnamese']],
+ 'Gluten'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Goblin One'=>[['normal'],['latin']],
+ 'Gochi Hand'=>[['normal'],['latin']],
+ 'Goldman'=>[['normal','700'],['latin','latin-ext','vietnamese']],
+ 'Golos Text'=>[['normal','500','600','700','800','900'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'Gorditas'=>[['normal','700'],['latin']],
+ 'Gothic A1'=>[['100','200','300','normal','500','600','700','800','900'],['korean','latin']],
+ 'Gotu'=>[['normal'],['devanagari','latin','latin-ext','vietnamese']],
+ 'Goudy Bookletter 1911'=>[['normal'],['latin']],
+ 'Gowun Batang'=>[['normal','700'],['korean','latin','latin-ext','vietnamese']],
+ 'Gowun Dodum'=>[['normal'],['korean','latin','latin-ext','vietnamese']],
+ 'Graduate'=>[['normal'],['latin']],
+ 'Grand Hotel'=>[['normal'],['latin','latin-ext']],
+ 'Grandiflora One'=>[['normal'],['korean','latin','latin-ext']],
+ 'Grandstander'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Grape Nuts'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Gravitas One'=>[['normal'],['latin']],
+ 'Great Vibes'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Grechen Fuemen'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Grenze'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['latin','latin-ext','vietnamese']],
+ 'Grenze Gotisch'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Grey Qo'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Griffy'=>[['normal'],['latin','latin-ext']],
+ 'Gruppo'=>[['normal'],['latin','latin-ext']],
+ 'Gudea'=>[['normal','italic','700'],['latin','latin-ext']],
+ 'Gugi'=>[['normal'],['korean','latin']],
+ 'Gulzar'=>[['normal'],['arabic','latin','latin-ext']],
+ 'Gupter'=>[['normal','500','700'],['latin']],
+ 'Gurajada'=>[['normal'],['latin','telugu']],
+ 'Gwendolyn'=>[['normal','700'],['latin','latin-ext','vietnamese']],
+ 'Habibi'=>[['normal'],['latin','latin-ext']],
+ 'Hachi Maru Pop'=>[['normal'],['cyrillic','japanese','latin','latin-ext']],
+ 'Hahmlet'=>[['100','200','300','normal','500','600','700','800','900'],['korean','latin','latin-ext','vietnamese']],
+ 'Halant'=>[['300','normal','500','600','700'],['devanagari','latin','latin-ext']],
+ 'Hammersmith One'=>[['normal'],['latin','latin-ext']],
+ 'Hanalei'=>[['normal'],['latin','latin-ext']],
+ 'Hanalei Fill'=>[['normal'],['latin','latin-ext']],
+ 'Handjet'=>[['100','200','300','normal','500','600','700','800','900'],['arabic','armenian','cyrillic','cyrillic-ext','greek','hebrew','latin','latin-ext','vietnamese']],
+ 'Handlee'=>[['normal'],['latin']],
+ 'Hanken Grotesk'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Hanuman'=>[['100','300','normal','700','900'],['khmer','latin']],
+ 'Happy Monkey'=>[['normal'],['latin','latin-ext']],
+ 'Harmattan'=>[['normal','500','600','700'],['arabic','latin','latin-ext']],
+ 'Headland One'=>[['normal'],['latin','latin-ext']],
+ 'Hedvig Letters Sans'=>[['normal'],['latin','latin-ext','math','symbols']],
+ 'Hedvig Letters Serif'=>[['normal'],['latin','latin-ext','math','symbols']],
+ 'Heebo'=>[['100','200','300','normal','500','600','700','800','900'],['hebrew','latin']],
+ 'Henny Penny'=>[['normal'],['latin']],
+ 'Hepta Slab'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Herr Von Muellerhoff'=>[['normal'],['latin','latin-ext']],
+ 'Hi Melody'=>[['normal'],['korean','latin']],
+ 'Hina Mincho'=>[['normal'],['cyrillic','japanese','latin','latin-ext','vietnamese']],
+ 'Hind'=>[['300','normal','500','600','700'],['devanagari','latin','latin-ext']],
+ 'Hind Guntur'=>[['300','normal','500','600','700'],['latin','latin-ext','telugu']],
+ 'Hind Madurai'=>[['300','normal','500','600','700'],['latin','latin-ext','tamil']],
+ 'Hind Siliguri'=>[['300','normal','500','600','700'],['bengali','latin','latin-ext']],
+ 'Hind Vadodara'=>[['300','normal','500','600','700'],['gujarati','latin','latin-ext']],
+ 'Holtwood One SC'=>[['normal'],['latin']],
+ 'Homemade Apple'=>[['normal'],['latin']],
+ 'Homenaje'=>[['normal'],['latin']],
+ 'Honk'=>[['normal'],['latin','latin-ext','math','symbols','vietnamese']],
+ 'Hubballi'=>[['normal'],['kannada','latin','latin-ext']],
+ 'Hurricane'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'IBM Plex Mono'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'IBM Plex Sans'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','vietnamese']],
+ 'IBM Plex Sans Arabic'=>[['100','200','300','normal','500','600','700'],['arabic','cyrillic-ext','latin','latin-ext']],
+ 'IBM Plex Sans Condensed'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic'],['cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'IBM Plex Sans Devanagari'=>[['100','200','300','normal','500','600','700'],['cyrillic-ext','devanagari','latin','latin-ext']],
+ 'IBM Plex Sans Hebrew'=>[['100','200','300','normal','500','600','700'],['cyrillic-ext','hebrew','latin','latin-ext']],
+ 'IBM Plex Sans JP'=>[['100','200','300','normal','500','600','700'],['cyrillic','japanese','latin','latin-ext']],
+ 'IBM Plex Sans KR'=>[['100','200','300','normal','500','600','700'],['korean','latin','latin-ext']],
+ 'IBM Plex Sans Thai'=>[['100','200','300','normal','500','600','700'],['cyrillic-ext','latin','latin-ext','thai']],
+ 'IBM Plex Sans Thai Looped'=>[['100','200','300','normal','500','600','700'],['cyrillic-ext','latin','latin-ext','thai']],
+ 'IBM Plex Serif'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'IM Fell DW Pica'=>[['normal','italic'],['latin']],
+ 'IM Fell DW Pica SC'=>[['normal'],['latin']],
+ 'IM Fell Double Pica'=>[['normal','italic'],['latin']],
+ 'IM Fell Double Pica SC'=>[['normal'],['latin']],
+ 'IM Fell English'=>[['normal','italic'],['latin']],
+ 'IM Fell English SC'=>[['normal'],['latin']],
+ 'IM Fell French Canon'=>[['normal','italic'],['latin']],
+ 'IM Fell French Canon SC'=>[['normal'],['latin']],
+ 'IM Fell Great Primer'=>[['normal','italic'],['latin']],
+ 'IM Fell Great Primer SC'=>[['normal'],['latin']],
+ 'Ibarra Real Nova'=>[['normal','500','600','700','italic','500italic','600italic','700italic'],['latin','latin-ext']],
+ 'Iceberg'=>[['normal'],['latin']],
+ 'Iceland'=>[['normal'],['latin']],
+ 'Imbue'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Imperial Script'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Imprima'=>[['normal'],['latin','latin-ext']],
+ 'Inclusive Sans'=>[['normal','italic'],['latin','latin-ext','vietnamese']],
+ 'Inconsolata'=>[['200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Inder'=>[['normal'],['latin','latin-ext']],
+ 'Indie Flower'=>[['normal'],['latin']],
+ 'Ingrid Darling'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Inika'=>[['normal','700'],['latin','latin-ext']],
+ 'Inknut Antiqua'=>[['300','normal','500','600','700','800','900'],['devanagari','latin','latin-ext']],
+ 'Inria Sans'=>[['300','300italic','normal','italic','700','700italic'],['latin','latin-ext']],
+ 'Inria Serif'=>[['300','300italic','normal','italic','700','700italic'],['latin','latin-ext']],
+ 'Inspiration'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Instrument Sans'=>[['normal','500','600','700','italic','500italic','600italic','700italic'],['latin','latin-ext']],
+ 'Instrument Serif'=>[['normal','italic'],['latin','latin-ext']],
+ 'Inter'=>[['100','200','300','normal','500','600','700','800','900'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Inter Tight'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Irish Grover'=>[['normal'],['latin']],
+ 'Island Moments'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Istok Web'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'Italiana'=>[['normal'],['latin']],
+ 'Italianno'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Itim'=>[['normal'],['latin','latin-ext','thai','vietnamese']],
+ 'Jacques Francois'=>[['normal'],['latin']],
+ 'Jacques Francois Shadow'=>[['normal'],['latin']],
+ 'Jaldi'=>[['normal','700'],['devanagari','latin','latin-ext']],
+ 'JetBrains Mono'=>[['100','200','300','normal','500','600','700','800','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','vietnamese']],
+ 'Jim Nightshade'=>[['normal'],['latin','latin-ext']],
+ 'Joan'=>[['normal'],['latin','latin-ext']],
+ 'Jockey One'=>[['normal'],['latin','latin-ext']],
+ 'Jolly Lodger'=>[['normal'],['latin','latin-ext']],
+ 'Jomhuria'=>[['normal'],['arabic','latin','latin-ext']],
+ 'Jomolhari'=>[['normal'],['latin','tibetan']],
+ 'Josefin Sans'=>[['100','200','300','normal','500','600','700','100italic','200italic','300italic','italic','500italic','600italic','700italic'],['latin','latin-ext','vietnamese']],
+ 'Josefin Slab'=>[['100','200','300','normal','500','600','700','100italic','200italic','300italic','italic','500italic','600italic','700italic'],['latin']],
+ 'Jost'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','latin','latin-ext']],
+ 'Joti One'=>[['normal'],['latin','latin-ext']],
+ 'Jua'=>[['normal'],['korean','latin']],
+ 'Judson'=>[['normal','italic','700'],['latin','latin-ext','vietnamese']],
+ 'Julee'=>[['normal'],['latin','latin-ext']],
+ 'Julius Sans One'=>[['normal'],['latin','latin-ext']],
+ 'Junge'=>[['normal'],['latin']],
+ 'Jura'=>[['300','normal','500','600','700'],['cyrillic','cyrillic-ext','greek','greek-ext','kayah-li','latin','latin-ext','vietnamese']],
+ 'Just Another Hand'=>[['normal'],['latin']],
+ 'Just Me Again Down Here'=>[['normal'],['latin','latin-ext']],
+ 'K2D'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic'],['latin','latin-ext','thai','vietnamese']],
+ 'Kablammo'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Kadwa'=>[['normal','700'],['devanagari','latin']],
+ 'Kaisei Decol'=>[['normal','500','700'],['cyrillic','japanese','latin','latin-ext']],
+ 'Kaisei HarunoUmi'=>[['normal','500','700'],['cyrillic','japanese','latin','latin-ext']],
+ 'Kaisei Opti'=>[['normal','500','700'],['cyrillic','japanese','latin','latin-ext']],
+ 'Kaisei Tokumin'=>[['normal','500','700','800'],['cyrillic','japanese','latin','latin-ext']],
+ 'Kalam'=>[['300','normal','700'],['devanagari','latin','latin-ext']],
+ 'Kalnia'=>[['100','200','300','normal','500','600','700'],['latin','latin-ext','math']],
+ 'Kameron'=>[['normal','500','600','700'],['latin','latin-ext']],
+ 'Kanit'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['latin','latin-ext','thai','vietnamese']],
+ 'Kantumruy Pro'=>[['100','200','300','normal','500','600','700','100italic','200italic','300italic','italic','500italic','600italic','700italic'],['khmer','latin','latin-ext']],
+ 'Karantina'=>[['300','normal','700'],['hebrew','latin','latin-ext']],
+ 'Karla'=>[['200','300','normal','500','600','700','800','200italic','300italic','italic','500italic','600italic','700italic','800italic'],['latin','latin-ext']],
+ 'Karma'=>[['300','normal','500','600','700'],['devanagari','latin','latin-ext']],
+ 'Katibeh'=>[['normal'],['arabic','latin','latin-ext']],
+ 'Kaushan Script'=>[['normal'],['latin','latin-ext']],
+ 'Kavivanar'=>[['normal'],['latin','latin-ext','tamil']],
+ 'Kavoon'=>[['normal'],['latin','latin-ext']],
+ 'Kay Pho Du'=>[['normal','500','600','700'],['kayah-li','latin','latin-ext']],
+ 'Kdam Thmor Pro'=>[['normal'],['khmer','latin','latin-ext']],
+ 'Keania One'=>[['normal'],['latin','latin-ext']],
+ 'Kelly Slab'=>[['normal'],['cyrillic','latin','latin-ext']],
+ 'Kenia'=>[['normal'],['latin']],
+ 'Khand'=>[['300','normal','500','600','700'],['devanagari','latin','latin-ext']],
+ 'Khmer'=>[['normal'],['khmer']],
+ 'Khula'=>[['300','normal','600','700','800'],['devanagari','latin','latin-ext']],
+ 'Kings'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Kirang Haerang'=>[['normal'],['korean','latin']],
+ 'Kite One'=>[['normal'],['latin','latin-ext']],
+ 'Kiwi Maru'=>[['300','normal','500'],['cyrillic','japanese','latin','latin-ext']],
+ 'Klee One'=>[['normal','600'],['cyrillic','greek-ext','japanese','latin','latin-ext']],
+ 'Knewave'=>[['normal'],['latin','latin-ext']],
+ 'KoHo'=>[['200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic'],['latin','latin-ext','thai','vietnamese']],
+ 'Kodchasan'=>[['200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic'],['latin','latin-ext','thai','vietnamese']],
+ 'Koh Santepheap'=>[['100','300','normal','700','900'],['khmer','latin']],
+ 'Kolker Brush'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Konkhmer Sleokchher'=>[['normal'],['khmer','latin','latin-ext']],
+ 'Kosugi'=>[['normal'],['cyrillic','japanese','latin','latin-ext']],
+ 'Kosugi Maru'=>[['normal'],['cyrillic','japanese','latin','latin-ext']],
+ 'Kotta One'=>[['normal'],['latin','latin-ext']],
+ 'Koulen'=>[['normal'],['khmer','latin']],
+ 'Kranky'=>[['normal'],['latin']],
+ 'Kreon'=>[['300','normal','500','600','700'],['latin','latin-ext']],
+ 'Kristi'=>[['normal'],['latin']],
+ 'Krona One'=>[['normal'],['latin','latin-ext']],
+ 'Krub'=>[['200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic'],['latin','latin-ext','thai','vietnamese']],
+ 'Kufam'=>[['normal','500','600','700','800','900','italic','500italic','600italic','700italic','800italic','900italic'],['arabic','latin','latin-ext','vietnamese']],
+ 'Kulim Park'=>[['200','200italic','300','300italic','normal','italic','600','600italic','700','700italic'],['latin','latin-ext']],
+ 'Kumar One'=>[['normal'],['gujarati','latin','latin-ext']],
+ 'Kumar One Outline'=>[['normal'],['gujarati','latin','latin-ext']],
+ 'Kumbh Sans'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','math','symbols']],
+ 'Kurale'=>[['normal'],['cyrillic','cyrillic-ext','devanagari','latin','latin-ext']],
+ 'La Belle Aurore'=>[['normal'],['latin']],
+ 'Labrada'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Lacquer'=>[['normal'],['latin']],
+ 'Laila'=>[['300','normal','500','600','700'],['devanagari','latin','latin-ext']],
+ 'Lakki Reddy'=>[['normal'],['latin','telugu']],
+ 'Lalezar'=>[['normal'],['arabic','latin','latin-ext','vietnamese']],
+ 'Lancelot'=>[['normal'],['latin','latin-ext']],
+ 'Langar'=>[['normal'],['gurmukhi','latin','latin-ext']],
+ 'Lateef'=>[['200','300','normal','500','600','700','800'],['arabic','latin','latin-ext']],
+ 'Lato'=>[['100','100italic','300','300italic','normal','italic','700','700italic','900','900italic'],['latin','latin-ext']],
+ 'Lavishly Yours'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'League Gothic'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'League Script'=>[['normal'],['latin']],
+ 'League Spartan'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Leckerli One'=>[['normal'],['latin']],
+ 'Ledger'=>[['normal'],['cyrillic','latin','latin-ext']],
+ 'Lekton'=>[['normal','italic','700'],['latin','latin-ext']],
+ 'Lemon'=>[['normal'],['latin','latin-ext']],
+ 'Lemonada'=>[['300','normal','500','600','700'],['arabic','latin','latin-ext','vietnamese']],
+ 'Lexend'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Lexend Deca'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Lexend Exa'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Lexend Giga'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Lexend Mega'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Lexend Peta'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Lexend Tera'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Lexend Zetta'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Libre Barcode 128'=>[['normal'],['latin']],
+ 'Libre Barcode 128 Text'=>[['normal'],['latin']],
+ 'Libre Barcode 39'=>[['normal'],['latin']],
+ 'Libre Barcode 39 Extended'=>[['normal'],['latin']],
+ 'Libre Barcode 39 Extended Text'=>[['normal'],['latin']],
+ 'Libre Barcode 39 Text'=>[['normal'],['latin']],
+ 'Libre Barcode EAN13 Text'=>[['normal'],['latin']],
+ 'Libre Baskerville'=>[['normal','italic','700'],['latin','latin-ext']],
+ 'Libre Bodoni'=>[['normal','500','600','700','italic','500italic','600italic','700italic'],['latin','latin-ext','vietnamese']],
+ 'Libre Caslon Display'=>[['normal'],['latin','latin-ext']],
+ 'Libre Caslon Text'=>[['normal','italic','700'],['latin','latin-ext']],
+ 'Libre Franklin'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Licorice'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Life Savers'=>[['normal','700','800'],['latin','latin-ext']],
+ 'Lilita One'=>[['normal'],['latin','latin-ext']],
+ 'Lily Script One'=>[['normal'],['latin','latin-ext']],
+ 'Limelight'=>[['normal'],['latin','latin-ext']],
+ 'Linden Hill'=>[['normal','italic'],['latin']],
+ 'Linefont'=>[['100','200','300','normal','500','600','700','800','900'],['latin']],
+ 'Lisu Bosa'=>[['200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['latin','latin-ext','lisu']],
+ 'Literata'=>[['200','300','normal','500','600','700','800','900','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Liu Jian Mao Cao'=>[['normal'],['chinese-simplified','latin']],
+ 'Livvic'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','900','900italic'],['latin','latin-ext','vietnamese']],
+ 'Lobster'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Lobster Two'=>[['normal','italic','700','700italic'],['latin']],
+ 'Londrina Outline'=>[['normal'],['latin']],
+ 'Londrina Shadow'=>[['normal'],['latin']],
+ 'Londrina Sketch'=>[['normal'],['latin']],
+ 'Londrina Solid'=>[['100','300','normal','900'],['latin']],
+ 'Long Cang'=>[['normal'],['chinese-simplified','latin']],
+ 'Lora'=>[['normal','500','600','700','italic','500italic','600italic','700italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Love Light'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Love Ya Like A Sister'=>[['normal'],['latin']],
+ 'Loved by the King'=>[['normal'],['latin']],
+ 'Lovers Quarrel'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Luckiest Guy'=>[['normal'],['latin']],
+ 'Lugrasimo'=>[['normal'],['latin','latin-ext']],
+ 'Lumanosimo'=>[['normal'],['latin','latin-ext']],
+ 'Lunasima'=>[['normal','700'],['cyrillic','cyrillic-ext','greek','greek-ext','hebrew','latin','latin-ext','vietnamese']],
+ 'Lusitana'=>[['normal','700'],['latin']],
+ 'Lustria'=>[['normal'],['latin']],
+ 'Luxurious Roman'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Luxurious Script'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'M PLUS 1'=>[['100','200','300','normal','500','600','700','800','900'],['japanese','latin','latin-ext','vietnamese']],
+ 'M PLUS 1 Code'=>[['100','200','300','normal','500','600','700'],['japanese','latin','latin-ext','vietnamese']],
+ 'M PLUS 1p'=>[['100','300','normal','500','700','800','900'],['cyrillic','cyrillic-ext','greek','greek-ext','hebrew','japanese','latin','latin-ext','vietnamese']],
+ 'M PLUS 2'=>[['100','200','300','normal','500','600','700','800','900'],['japanese','latin','latin-ext','vietnamese']],
+ 'M PLUS Code Latin'=>[['100','200','300','normal','500','600','700'],['latin','latin-ext','vietnamese']],
+ 'M PLUS Rounded 1c'=>[['100','300','normal','500','700','800','900'],['cyrillic','cyrillic-ext','greek','greek-ext','hebrew','japanese','latin','latin-ext','vietnamese']],
+ 'Ma Shan Zheng'=>[['normal'],['chinese-simplified','latin']],
+ 'Macondo'=>[['normal'],['latin']],
+ 'Macondo Swash Caps'=>[['normal'],['latin']],
+ 'Mada'=>[['200','300','normal','500','600','700','800','900'],['arabic','latin','latin-ext']],
+ 'Magra'=>[['normal','700'],['latin','latin-ext']],
+ 'Maiden Orange'=>[['normal'],['latin']],
+ 'Maitree'=>[['200','300','normal','500','600','700'],['latin','latin-ext','thai','vietnamese']],
+ 'Major Mono Display'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Mako'=>[['normal'],['latin','latin-ext']],
+ 'Mali'=>[['200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic'],['latin','latin-ext','thai','vietnamese']],
+ 'Mallanna'=>[['normal'],['latin','telugu']],
+ 'Mandali'=>[['normal'],['latin','telugu']],
+ 'Manjari'=>[['100','normal','700'],['latin','latin-ext','malayalam']],
+ 'Manrope'=>[['200','300','normal','500','600','700','800'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','vietnamese']],
+ 'Mansalva'=>[['normal'],['greek','latin','latin-ext','vietnamese']],
+ 'Manuale'=>[['300','normal','500','600','700','800','300italic','italic','500italic','600italic','700italic','800italic'],['latin','latin-ext','vietnamese']],
+ 'Marcellus'=>[['normal'],['latin','latin-ext']],
+ 'Marcellus SC'=>[['normal'],['latin','latin-ext']],
+ 'Marck Script'=>[['normal'],['cyrillic','latin','latin-ext']],
+ 'Margarine'=>[['normal'],['latin','latin-ext']],
+ 'Marhey'=>[['300','normal','500','600','700'],['arabic','latin','latin-ext']],
+ 'Markazi Text'=>[['normal','500','600','700'],['arabic','latin','latin-ext','vietnamese']],
+ 'Marko One'=>[['normal'],['latin']],
+ 'Marmelad'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Martel'=>[['200','300','normal','600','700','800','900'],['devanagari','latin','latin-ext']],
+ 'Martel Sans'=>[['200','300','normal','600','700','800','900'],['devanagari','latin','latin-ext']],
+ 'Martian Mono'=>[['100','200','300','normal','500','600','700','800'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'Marvel'=>[['normal','italic','700','700italic'],['latin']],
+ 'Mate'=>[['normal','italic'],['latin','latin-ext']],
+ 'Mate SC'=>[['normal'],['latin','latin-ext']],
+ 'Material Icons'=>[['normal'],['latin']],
+ 'Material Icons Outlined'=>[['normal'],['latin']],
+ 'Material Icons Round'=>[['normal'],['latin']],
+ 'Material Icons Sharp'=>[['normal'],['latin']],
+ 'Material Icons Two Tone'=>[['normal'],['latin']],
+ 'Material Symbols Outlined'=>[['100','200','300','normal','500','600','700'],['latin']],
+ 'Material Symbols Rounded'=>[['100','200','300','normal','500','600','700'],['latin']],
+ 'Material Symbols Sharp'=>[['100','200','300','normal','500','600','700'],['latin']],
+ 'Maven Pro'=>[['normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'McLaren'=>[['normal'],['latin','latin-ext']],
+ 'Mea Culpa'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Meddon'=>[['normal'],['latin']],
+ 'MedievalSharp'=>[['normal'],['latin','latin-ext']],
+ 'Medula One'=>[['normal'],['latin']],
+ 'Meera Inimai'=>[['normal'],['latin','tamil']],
+ 'Megrim'=>[['normal'],['latin']],
+ 'Meie Script'=>[['normal'],['latin','latin-ext']],
+ 'Meow Script'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Merienda'=>[['300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Merriweather'=>[['300','300italic','normal','italic','700','700italic','900','900italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Merriweather Sans'=>[['300','normal','500','600','700','800','300italic','italic','500italic','600italic','700italic','800italic'],['cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Metal'=>[['normal'],['khmer','latin']],
+ 'Metal Mania'=>[['normal'],['latin','latin-ext']],
+ 'Metamorphous'=>[['normal'],['latin','latin-ext']],
+ 'Metrophobic'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Michroma'=>[['normal'],['latin','latin-ext']],
+ 'Milonga'=>[['normal'],['latin','latin-ext']],
+ 'Miltonian'=>[['normal'],['latin']],
+ 'Miltonian Tattoo'=>[['normal'],['latin']],
+ 'Mina'=>[['normal','700'],['bengali','latin','latin-ext']],
+ 'Mingzat'=>[['normal'],['latin','latin-ext','lepcha']],
+ 'Miniver'=>[['normal'],['latin']],
+ 'Miriam Libre'=>[['normal','700'],['hebrew','latin','latin-ext']],
+ 'Mirza'=>[['normal','500','600','700'],['arabic','latin','latin-ext']],
+ 'Miss Fajardose'=>[['normal'],['latin','latin-ext']],
+ 'Mitr'=>[['200','300','normal','500','600','700'],['latin','latin-ext','thai','vietnamese']],
+ 'Mochiy Pop One'=>[['normal'],['japanese','latin']],
+ 'Mochiy Pop P One'=>[['normal'],['japanese','latin']],
+ 'Modak'=>[['normal'],['devanagari','latin','latin-ext']],
+ 'Modern Antiqua'=>[['normal'],['latin','latin-ext']],
+ 'Mogra'=>[['normal'],['gujarati','latin','latin-ext']],
+ 'Mohave'=>[['300','normal','500','600','700','300italic','italic','500italic','600italic','700italic'],['latin','latin-ext']],
+ 'Moirai One'=>[['normal'],['korean','latin','latin-ext']],
+ 'Molengo'=>[['normal'],['latin','latin-ext']],
+ 'Molle'=>[['italic'],['latin','latin-ext']],
+ 'Monda'=>[['normal','700'],['latin','latin-ext','vietnamese']],
+ 'Monofett'=>[['normal'],['latin','latin-ext']],
+ 'Monomaniac One'=>[['normal'],['japanese','latin','latin-ext']],
+ 'Monoton'=>[['normal'],['latin']],
+ 'Monsieur La Doulaise'=>[['normal'],['latin','latin-ext']],
+ 'Montaga'=>[['normal'],['latin']],
+ 'Montagu Slab'=>[['100','200','300','normal','500','600','700'],['latin','latin-ext','vietnamese']],
+ 'MonteCarlo'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Montez'=>[['normal'],['latin']],
+ 'Montserrat'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Montserrat Alternates'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Montserrat Subrayada'=>[['normal','700'],['latin']],
+ 'Moo Lah Lah'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Mooli'=>[['normal'],['latin','latin-ext']],
+ 'Moon Dance'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Moul'=>[['normal'],['khmer','latin']],
+ 'Moulpali'=>[['normal'],['khmer','latin']],
+ 'Mountains of Christmas'=>[['normal','700'],['latin']],
+ 'Mouse Memoirs'=>[['normal'],['latin','latin-ext']],
+ 'Mr Bedfort'=>[['normal'],['latin','latin-ext']],
+ 'Mr Dafoe'=>[['normal'],['latin','latin-ext']],
+ 'Mr De Haviland'=>[['normal'],['latin','latin-ext']],
+ 'Mrs Saint Delafield'=>[['normal'],['latin','latin-ext']],
+ 'Mrs Sheppards'=>[['normal'],['latin','latin-ext']],
+ 'Ms Madi'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Mukta'=>[['200','300','normal','500','600','700','800'],['devanagari','latin','latin-ext']],
+ 'Mukta Mahee'=>[['200','300','normal','500','600','700','800'],['gurmukhi','latin','latin-ext']],
+ 'Mukta Malar'=>[['200','300','normal','500','600','700','800'],['latin','latin-ext','tamil']],
+ 'Mukta Vaani'=>[['200','300','normal','500','600','700','800'],['gujarati','latin','latin-ext']],
+ 'Mulish'=>[['200','300','normal','500','600','700','800','900','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Murecho'=>[['100','200','300','normal','500','600','700','800','900'],['cyrillic','cyrillic-ext','greek','japanese','latin','latin-ext']],
+ 'MuseoModerno'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'My Soul'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Mynerve'=>[['normal'],['greek','latin','latin-ext','vietnamese']],
+ 'Mystery Quest'=>[['normal'],['latin','latin-ext']],
+ 'NTR'=>[['normal'],['latin','telugu']],
+ 'Nabla'=>[['normal'],['cyrillic-ext','latin','latin-ext','math','vietnamese']],
+ 'Nanum Brush Script'=>[['normal'],['korean','latin']],
+ 'Nanum Gothic'=>[['normal','700','800'],['korean','latin']],
+ 'Nanum Gothic Coding'=>[['normal','700'],['korean','latin']],
+ 'Nanum Myeongjo'=>[['normal','700','800'],['korean','latin']],
+ 'Nanum Pen Script'=>[['normal'],['korean','latin']],
+ 'Narnoor'=>[['normal','500','600','700','800'],['gunjala-gondi','latin','latin-ext','math','symbols']],
+ 'Neonderthaw'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Nerko One'=>[['normal'],['latin','latin-ext']],
+ 'Neucha'=>[['normal'],['cyrillic','latin']],
+ 'Neuton'=>[['200','300','normal','italic','700','800'],['latin','latin-ext']],
+ 'New Rocker'=>[['normal'],['latin','latin-ext']],
+ 'New Tegomin'=>[['normal'],['japanese','latin','latin-ext']],
+ 'News Cycle'=>[['normal','700'],['latin','latin-ext']],
+ 'Newsreader'=>[['200','300','normal','500','600','700','800','200italic','300italic','italic','500italic','600italic','700italic','800italic'],['latin','latin-ext','vietnamese']],
+ 'Niconne'=>[['normal'],['latin','latin-ext']],
+ 'Niramit'=>[['200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic'],['latin','latin-ext','thai','vietnamese']],
+ 'Nixie One'=>[['normal'],['latin']],
+ 'Nobile'=>[['normal','italic','500','500italic','700','700italic'],['latin','latin-ext']],
+ 'Nokora'=>[['100','300','normal','700','900'],['khmer','latin']],
+ 'Norican'=>[['normal'],['latin','latin-ext']],
+ 'Nosifer'=>[['normal'],['latin','latin-ext']],
+ 'Notable'=>[['normal'],['latin']],
+ 'Nothing You Could Do'=>[['normal'],['latin']],
+ 'Noticia Text'=>[['normal','italic','700','700italic'],['latin','latin-ext','vietnamese']],
+ 'Noto Color Emoji'=>[['normal'],['emoji']],
+ 'Noto Emoji'=>[['300','normal','500','600','700'],['emoji']],
+ 'Noto Kufi Arabic'=>[['100','200','300','normal','500','600','700','800','900'],['arabic']],
+ 'Noto Music'=>[['normal'],['latin','latin-ext','music']],
+ 'Noto Naskh Arabic'=>[['normal','500','600','700'],['arabic','latin','latin-ext']],
+ 'Noto Nastaliq Urdu'=>[['normal','500','600','700'],['arabic','latin','latin-ext']],
+ 'Noto Rashi Hebrew'=>[['100','200','300','normal','500','600','700','800','900'],['hebrew','latin','latin-ext']],
+ 'Noto Sans'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','devanagari','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Noto Sans Adlam'=>[['normal','500','600','700'],['adlam','latin','latin-ext']],
+ 'Noto Sans Adlam Unjoined'=>[['normal','500','600','700'],['adlam','latin','latin-ext']],
+ 'Noto Sans Anatolian Hieroglyphs'=>[['normal'],['anatolian-hieroglyphs','latin','latin-ext']],
+ 'Noto Sans Arabic'=>[['100','200','300','normal','500','600','700','800','900'],['arabic']],
+ 'Noto Sans Armenian'=>[['100','200','300','normal','500','600','700','800','900'],['armenian','latin','latin-ext']],
+ 'Noto Sans Avestan'=>[['normal'],['avestan','latin','latin-ext']],
+ 'Noto Sans Balinese'=>[['normal','500','600','700'],['balinese','latin','latin-ext']],
+ 'Noto Sans Bamum'=>[['normal','500','600','700'],['bamum','latin','latin-ext']],
+ 'Noto Sans Bassa Vah'=>[['normal','500','600','700'],['bassa-vah','latin','latin-ext']],
+ 'Noto Sans Batak'=>[['normal'],['batak','latin','latin-ext']],
+ 'Noto Sans Bengali'=>[['100','200','300','normal','500','600','700','800','900'],['bengali','latin','latin-ext']],
+ 'Noto Sans Bhaiksuki'=>[['normal'],['bhaiksuki','latin','latin-ext']],
+ 'Noto Sans Brahmi'=>[['normal'],['brahmi','latin','latin-ext']],
+ 'Noto Sans Buginese'=>[['normal'],['buginese','latin','latin-ext']],
+ 'Noto Sans Buhid'=>[['normal'],['buhid','latin','latin-ext']],
+ 'Noto Sans Canadian Aboriginal'=>[['100','200','300','normal','500','600','700','800','900'],['canadian-aboriginal','latin','latin-ext']],
+ 'Noto Sans Carian'=>[['normal'],['carian','latin','latin-ext']],
+ 'Noto Sans Caucasian Albanian'=>[['normal'],['caucasian-albanian','latin','latin-ext']],
+ 'Noto Sans Chakma'=>[['normal'],['chakma','latin','latin-ext']],
+ 'Noto Sans Cham'=>[['100','200','300','normal','500','600','700','800','900'],['cham','latin','latin-ext']],
+ 'Noto Sans Cherokee'=>[['100','200','300','normal','500','600','700','800','900'],['cherokee','latin','latin-ext']],
+ 'Noto Sans Chorasmian'=>[['normal'],['chorasmian','latin','latin-ext','math','symbols']],
+ 'Noto Sans Coptic'=>[['normal'],['coptic','latin','latin-ext']],
+ 'Noto Sans Cuneiform'=>[['normal'],['cuneiform','latin','latin-ext']],
+ 'Noto Sans Cypriot'=>[['normal'],['cypriot','latin','latin-ext']],
+ 'Noto Sans Cypro Minoan'=>[['normal'],['cypro-minoan','latin','latin-ext']],
+ 'Noto Sans Deseret'=>[['normal'],['deseret','latin','latin-ext']],
+ 'Noto Sans Devanagari'=>[['100','200','300','normal','500','600','700','800','900'],['devanagari','latin','latin-ext']],
+ 'Noto Sans Display'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Noto Sans Duployan'=>[['normal','700'],['duployan','latin','latin-ext']],
+ 'Noto Sans Egyptian Hieroglyphs'=>[['normal'],['egyptian-hieroglyphs','latin','latin-ext']],
+ 'Noto Sans Elbasan'=>[['normal'],['elbasan','latin','latin-ext']],
+ 'Noto Sans Elymaic'=>[['normal'],['elymaic','latin','latin-ext']],
+ 'Noto Sans Ethiopic'=>[['100','200','300','normal','500','600','700','800','900'],['ethiopic','latin','latin-ext']],
+ 'Noto Sans Georgian'=>[['100','200','300','normal','500','600','700','800','900'],['georgian','latin','latin-ext']],
+ 'Noto Sans Glagolitic'=>[['normal'],['cyrillic-ext','glagolitic','latin','latin-ext','math','symbols']],
+ 'Noto Sans Gothic'=>[['normal'],['gothic','latin','latin-ext']],
+ 'Noto Sans Grantha'=>[['normal'],['grantha','latin','latin-ext']],
+ 'Noto Sans Gujarati'=>[['100','200','300','normal','500','600','700','800','900'],['gujarati','latin','latin-ext','math','symbols']],
+ 'Noto Sans Gunjala Gondi'=>[['normal','500','600','700'],['gunjala-gondi','latin','latin-ext']],
+ 'Noto Sans Gurmukhi'=>[['100','200','300','normal','500','600','700','800','900'],['gurmukhi','latin','latin-ext']],
+ 'Noto Sans HK'=>[['100','200','300','normal','500','600','700','800','900'],['chinese-hongkong','cyrillic','latin','latin-ext','vietnamese']],
+ 'Noto Sans Hanifi Rohingya'=>[['normal','500','600','700'],['hanifi-rohingya','latin','latin-ext']],
+ 'Noto Sans Hanunoo'=>[['normal'],['hanunoo','latin','latin-ext']],
+ 'Noto Sans Hatran'=>[['normal'],['hatran','latin','latin-ext']],
+ 'Noto Sans Hebrew'=>[['100','200','300','normal','500','600','700','800','900'],['hebrew','latin','latin-ext']],
+ 'Noto Sans Imperial Aramaic'=>[['normal'],['imperial-aramaic','latin','latin-ext']],
+ 'Noto Sans Indic Siyaq Numbers'=>[['normal'],['indic-siyaq-numbers','latin','latin-ext']],
+ 'Noto Sans Inscriptional Pahlavi'=>[['normal'],['inscriptional-pahlavi','latin','latin-ext']],
+ 'Noto Sans Inscriptional Parthian'=>[['normal'],['inscriptional-parthian','latin','latin-ext']],
+ 'Noto Sans JP'=>[['100','200','300','normal','500','600','700','800','900'],['cyrillic','japanese','latin','latin-ext','vietnamese']],
+ 'Noto Sans Javanese'=>[['normal','500','600','700'],['javanese','latin','latin-ext']],
+ 'Noto Sans KR'=>[['100','200','300','normal','500','600','700','800','900'],['cyrillic','korean','latin','latin-ext','vietnamese']],
+ 'Noto Sans Kaithi'=>[['normal'],['kaithi','latin','latin-ext']],
+ 'Noto Sans Kannada'=>[['100','200','300','normal','500','600','700','800','900'],['kannada','latin','latin-ext']],
+ 'Noto Sans Kawi'=>[['normal','500','600','700'],['kawi','latin','latin-ext']],
+ 'Noto Sans Kayah Li'=>[['normal','500','600','700'],['kayah-li','latin','latin-ext']],
+ 'Noto Sans Kharoshthi'=>[['normal'],['kharoshthi','latin','latin-ext']],
+ 'Noto Sans Khmer'=>[['100','200','300','normal','500','600','700','800','900'],['khmer','latin','latin-ext']],
+ 'Noto Sans Khojki'=>[['normal'],['khojki','latin','latin-ext']],
+ 'Noto Sans Khudawadi'=>[['normal'],['khudawadi','latin','latin-ext']],
+ 'Noto Sans Lao'=>[['100','200','300','normal','500','600','700','800','900'],['lao','latin','latin-ext']],
+ 'Noto Sans Lao Looped'=>[['100','200','300','normal','500','600','700','800','900'],['lao','latin','latin-ext']],
+ 'Noto Sans Lepcha'=>[['normal'],['latin','latin-ext','lepcha']],
+ 'Noto Sans Limbu'=>[['normal'],['latin','latin-ext','limbu']],
+ 'Noto Sans Linear A'=>[['normal'],['latin','latin-ext','linear-a']],
+ 'Noto Sans Linear B'=>[['normal'],['latin','latin-ext','linear-b']],
+ 'Noto Sans Lisu'=>[['normal','500','600','700'],['latin','latin-ext','lisu']],
+ 'Noto Sans Lycian'=>[['normal'],['lycian']],
+ 'Noto Sans Lydian'=>[['normal'],['latin','latin-ext','lydian']],
+ 'Noto Sans Mahajani'=>[['normal'],['latin','latin-ext','mahajani']],
+ 'Noto Sans Malayalam'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','malayalam']],
+ 'Noto Sans Mandaic'=>[['normal'],['latin','latin-ext','mandaic']],
+ 'Noto Sans Manichaean'=>[['normal'],['latin','latin-ext','manichaean']],
+ 'Noto Sans Marchen'=>[['normal'],['latin','latin-ext','marchen']],
+ 'Noto Sans Masaram Gondi'=>[['normal'],['latin','latin-ext','masaram-gondi']],
+ 'Noto Sans Math'=>[['normal'],['math']],
+ 'Noto Sans Mayan Numerals'=>[['normal'],['latin','latin-ext','mayan-numerals']],
+ 'Noto Sans Medefaidrin'=>[['normal','500','600','700'],['latin','latin-ext','medefaidrin']],
+ 'Noto Sans Meetei Mayek'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','meetei-mayek']],
+ 'Noto Sans Mende Kikakui'=>[['normal'],['latin','latin-ext','mende-kikakui']],
+ 'Noto Sans Meroitic'=>[['normal'],['latin','latin-ext','meroitic','meroitic-cursive','meroitic-hieroglyphs']],
+ 'Noto Sans Miao'=>[['normal'],['latin','latin-ext','miao']],
+ 'Noto Sans Modi'=>[['normal'],['latin','latin-ext','modi']],
+ 'Noto Sans Mongolian'=>[['normal'],['latin','latin-ext','mongolian']],
+ 'Noto Sans Mono'=>[['100','200','300','normal','500','600','700','800','900'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Noto Sans Mro'=>[['normal'],['latin','latin-ext','mro']],
+ 'Noto Sans Multani'=>[['normal'],['latin','latin-ext','multani']],
+ 'Noto Sans Myanmar'=>[['100','200','300','normal','500','600','700','800','900'],['myanmar']],
+ 'Noto Sans NKo'=>[['normal'],['latin','latin-ext','nko']],
+ 'Noto Sans NKo Unjoined'=>[['normal','500','600','700'],['latin','latin-ext','nko']],
+ 'Noto Sans Nabataean'=>[['normal'],['latin','latin-ext','nabataean']],
+ 'Noto Sans Nag Mundari'=>[['normal','500','600','700'],['latin','latin-ext','nag-mundari']],
+ 'Noto Sans Nandinagari'=>[['normal'],['latin','latin-ext','nandinagari']],
+ 'Noto Sans New Tai Lue'=>[['normal','500','600','700'],['latin','latin-ext','new-tai-lue']],
+ 'Noto Sans Newa'=>[['normal'],['latin','latin-ext','newa']],
+ 'Noto Sans Nushu'=>[['normal'],['latin','latin-ext','nushu']],
+ 'Noto Sans Ogham'=>[['normal'],['latin','latin-ext','ogham']],
+ 'Noto Sans Ol Chiki'=>[['normal','500','600','700'],['latin','latin-ext','ol-chiki']],
+ 'Noto Sans Old Hungarian'=>[['normal'],['latin','latin-ext','old-hungarian']],
+ 'Noto Sans Old Italic'=>[['normal'],['latin','latin-ext','old-italic']],
+ 'Noto Sans Old North Arabian'=>[['normal'],['latin','latin-ext','old-north-arabian']],
+ 'Noto Sans Old Permic'=>[['normal'],['cyrillic-ext','latin','latin-ext','old-permic']],
+ 'Noto Sans Old Persian'=>[['normal'],['latin','latin-ext','old-persian']],
+ 'Noto Sans Old Sogdian'=>[['normal'],['latin','latin-ext','old-sogdian']],
+ 'Noto Sans Old South Arabian'=>[['normal'],['latin','latin-ext','old-south-arabian']],
+ 'Noto Sans Old Turkic'=>[['normal'],['latin','latin-ext','old-turkic']],
+ 'Noto Sans Oriya'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','oriya']],
+ 'Noto Sans Osage'=>[['normal'],['latin','latin-ext','osage']],
+ 'Noto Sans Osmanya'=>[['normal'],['latin','latin-ext','osmanya']],
+ 'Noto Sans Pahawh Hmong'=>[['normal'],['latin','latin-ext','pahawh-hmong']],
+ 'Noto Sans Palmyrene'=>[['normal'],['latin','latin-ext','palmyrene']],
+ 'Noto Sans Pau Cin Hau'=>[['normal'],['latin','latin-ext','pau-cin-hau']],
+ 'Noto Sans Phags Pa'=>[['normal'],['phags-pa']],
+ 'Noto Sans Phoenician'=>[['normal'],['latin','latin-ext','phoenician']],
+ 'Noto Sans Psalter Pahlavi'=>[['normal'],['latin','latin-ext','psalter-pahlavi']],
+ 'Noto Sans Rejang'=>[['normal'],['latin','latin-ext','rejang']],
+ 'Noto Sans Runic'=>[['normal'],['latin','latin-ext','runic']],
+ 'Noto Sans SC'=>[['100','200','300','normal','500','600','700','800','900'],['chinese-simplified','cyrillic','latin','latin-ext','vietnamese']],
+ 'Noto Sans Samaritan'=>[['normal'],['latin','latin-ext','samaritan']],
+ 'Noto Sans Saurashtra'=>[['normal'],['latin','latin-ext','saurashtra']],
+ 'Noto Sans Sharada'=>[['normal'],['latin','latin-ext','sharada']],
+ 'Noto Sans Shavian'=>[['normal'],['latin','latin-ext','shavian']],
+ 'Noto Sans Siddham'=>[['normal'],['latin','latin-ext','siddham']],
+ 'Noto Sans SignWriting'=>[['normal'],['latin','latin-ext','signwriting']],
+ 'Noto Sans Sinhala'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','sinhala']],
+ 'Noto Sans Sogdian'=>[['normal'],['latin','latin-ext','sogdian']],
+ 'Noto Sans Sora Sompeng'=>[['normal','500','600','700'],['latin','latin-ext','sora-sompeng']],
+ 'Noto Sans Soyombo'=>[['normal'],['latin','latin-ext','soyombo']],
+ 'Noto Sans Sundanese'=>[['normal','500','600','700'],['latin','latin-ext','sundanese']],
+ 'Noto Sans Syloti Nagri'=>[['normal'],['latin','latin-ext','syloti-nagri']],
+ 'Noto Sans Symbols'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','symbols']],
+ 'Noto Sans Symbols 2'=>[['normal'],['braille','latin','latin-ext','math','mayan-numerals','symbols']],
+ 'Noto Sans Syriac'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','syriac']],
+ 'Noto Sans Syriac Eastern'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','syriac']],
+ 'Noto Sans TC'=>[['100','200','300','normal','500','600','700','800','900'],['chinese-traditional','cyrillic','latin','latin-ext','vietnamese']],
+ 'Noto Sans Tagalog'=>[['normal'],['latin','latin-ext','tagalog']],
+ 'Noto Sans Tagbanwa'=>[['normal'],['latin','latin-ext','tagbanwa']],
+ 'Noto Sans Tai Le'=>[['normal'],['latin','latin-ext','tai-le']],
+ 'Noto Sans Tai Tham'=>[['normal','500','600','700'],['latin','latin-ext','tai-tham']],
+ 'Noto Sans Tai Viet'=>[['normal'],['latin','latin-ext','tai-viet']],
+ 'Noto Sans Takri'=>[['normal'],['latin','latin-ext','takri']],
+ 'Noto Sans Tamil'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','tamil']],
+ 'Noto Sans Tamil Supplement'=>[['normal'],['latin','latin-ext','tamil-supplement']],
+ 'Noto Sans Tangsa'=>[['normal','500','600','700'],['latin','latin-ext','tangsa']],
+ 'Noto Sans Telugu'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','telugu']],
+ 'Noto Sans Thaana'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','thaana']],
+ 'Noto Sans Thai'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','thai']],
+ 'Noto Sans Thai Looped'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','thai']],
+ 'Noto Sans Tifinagh'=>[['normal'],['latin','latin-ext','tifinagh']],
+ 'Noto Sans Tirhuta'=>[['normal'],['latin','latin-ext','tirhuta']],
+ 'Noto Sans Ugaritic'=>[['normal'],['latin','latin-ext','ugaritic']],
+ 'Noto Sans Vai'=>[['normal'],['latin','latin-ext','vai']],
+ 'Noto Sans Vithkuqi'=>[['normal','500','600','700'],['latin','latin-ext','vithkuqi']],
+ 'Noto Sans Wancho'=>[['normal'],['latin','latin-ext','wancho']],
+ 'Noto Sans Warang Citi'=>[['normal'],['latin','latin-ext','warang-citi']],
+ 'Noto Sans Yi'=>[['normal'],['latin','latin-ext','yi']],
+ 'Noto Sans Zanabazar Square'=>[['normal'],['latin','latin-ext','zanabazar-square']],
+ 'Noto Serif'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Noto Serif Ahom'=>[['normal'],['ahom','latin','latin-ext']],
+ 'Noto Serif Armenian'=>[['100','200','300','normal','500','600','700','800','900'],['armenian','latin','latin-ext']],
+ 'Noto Serif Balinese'=>[['normal'],['balinese','latin','latin-ext']],
+ 'Noto Serif Bengali'=>[['100','200','300','normal','500','600','700','800','900'],['bengali','latin','latin-ext']],
+ 'Noto Serif Devanagari'=>[['100','200','300','normal','500','600','700','800','900'],['devanagari','latin','latin-ext']],
+ 'Noto Serif Display'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Noto Serif Dogra'=>[['normal'],['dogra','latin','latin-ext']],
+ 'Noto Serif Ethiopic'=>[['100','200','300','normal','500','600','700','800','900'],['ethiopic','latin','latin-ext']],
+ 'Noto Serif Georgian'=>[['100','200','300','normal','500','600','700','800','900'],['georgian','latin','latin-ext']],
+ 'Noto Serif Grantha'=>[['normal'],['grantha','latin','latin-ext']],
+ 'Noto Serif Gujarati'=>[['100','200','300','normal','500','600','700','800','900'],['gujarati','latin','latin-ext','math','symbols']],
+ 'Noto Serif Gurmukhi'=>[['100','200','300','normal','500','600','700','800','900'],['gurmukhi','latin','latin-ext']],
+ 'Noto Serif HK'=>[['200','300','normal','500','600','700','800','900'],['chinese-hongkong','cyrillic','latin','latin-ext','vietnamese']],
+ 'Noto Serif Hebrew'=>[['100','200','300','normal','500','600','700','800','900'],['hebrew','latin','latin-ext']],
+ 'Noto Serif JP'=>[['200','300','normal','500','600','700','900'],['japanese','latin']],
+ 'Noto Serif KR'=>[['200','300','normal','500','600','700','900'],['korean','latin']],
+ 'Noto Serif Kannada'=>[['100','200','300','normal','500','600','700','800','900'],['kannada','latin','latin-ext']],
+ 'Noto Serif Khitan Small Script'=>[['normal'],['khitan-small-script','latin','latin-ext']],
+ 'Noto Serif Khmer'=>[['100','200','300','normal','500','600','700','800','900'],['khmer','latin','latin-ext']],
+ 'Noto Serif Khojki'=>[['normal','500','600','700'],['khojki','latin','latin-ext']],
+ 'Noto Serif Lao'=>[['100','200','300','normal','500','600','700','800','900'],['lao','latin','latin-ext']],
+ 'Noto Serif Makasar'=>[['normal'],['latin','latin-ext','makasar']],
+ 'Noto Serif Malayalam'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','malayalam']],
+ 'Noto Serif Myanmar'=>[['100','200','300','normal','500','600','700','800','900'],['myanmar']],
+ 'Noto Serif NP Hmong'=>[['normal','500','600','700'],['latin','nyiakeng-puachue-hmong']],
+ 'Noto Serif Old Uyghur'=>[['normal'],['latin','latin-ext','old-uyghur']],
+ 'Noto Serif Oriya'=>[['normal','500','600','700'],['latin','latin-ext','oriya']],
+ 'Noto Serif Ottoman Siyaq'=>[['normal'],['latin','latin-ext','ottoman-siyaq-numbers']],
+ 'Noto Serif SC'=>[['200','300','normal','500','600','700','900'],['chinese-simplified','latin']],
+ 'Noto Serif Sinhala'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','sinhala']],
+ 'Noto Serif TC'=>[['200','300','normal','500','600','700','900'],['chinese-traditional','latin']],
+ 'Noto Serif Tamil'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','tamil']],
+ 'Noto Serif Tangut'=>[['normal'],['latin','latin-ext','tangut']],
+ 'Noto Serif Telugu'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','telugu']],
+ 'Noto Serif Thai'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','thai']],
+ 'Noto Serif Tibetan'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','tibetan']],
+ 'Noto Serif Toto'=>[['normal','500','600','700'],['latin','latin-ext','toto']],
+ 'Noto Serif Vithkuqi'=>[['normal','500','600','700'],['latin','latin-ext','vithkuqi']],
+ 'Noto Serif Yezidi'=>[['normal','500','600','700'],['latin','latin-ext','yezidi']],
+ 'Noto Traditional Nushu'=>[['300','normal','500','600','700'],['latin','latin-ext','nushu']],
+ 'Nova Cut'=>[['normal'],['latin']],
+ 'Nova Flat'=>[['normal'],['latin']],
+ 'Nova Mono'=>[['normal'],['greek','latin']],
+ 'Nova Oval'=>[['normal'],['latin']],
+ 'Nova Round'=>[['normal'],['latin']],
+ 'Nova Script'=>[['normal'],['latin']],
+ 'Nova Slim'=>[['normal'],['latin']],
+ 'Nova Square'=>[['normal'],['latin']],
+ 'Numans'=>[['normal'],['latin']],
+ 'Nunito'=>[['200','300','normal','500','600','700','800','900','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Nunito Sans'=>[['200','300','normal','500','600','700','800','900','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Nuosu SIL'=>[['normal'],['latin','latin-ext','yi']],
+ 'Odibee Sans'=>[['normal'],['latin']],
+ 'Odor Mean Chey'=>[['normal'],['khmer','latin']],
+ 'Offside'=>[['normal'],['latin','latin-ext']],
+ 'Oi'=>[['normal'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','tamil','vietnamese']],
+ 'Old Standard TT'=>[['normal','italic','700'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Oldenburg'=>[['normal'],['latin','latin-ext']],
+ 'Ole'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Oleo Script'=>[['normal','700'],['latin','latin-ext']],
+ 'Oleo Script Swash Caps'=>[['normal','700'],['latin','latin-ext']],
+ 'Onest'=>[['100','200','300','normal','500','600','700','800','900'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'Oooh Baby'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Open Sans'=>[['300','normal','500','600','700','800','300italic','italic','500italic','600italic','700italic','800italic'],['cyrillic','cyrillic-ext','greek','greek-ext','hebrew','latin','latin-ext','math','symbols','vietnamese']],
+ 'Oranienbaum'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'Orbit'=>[['normal'],['korean','latin','latin-ext']],
+ 'Orbitron'=>[['normal','500','600','700','800','900'],['latin']],
+ 'Oregano'=>[['normal','italic'],['latin','latin-ext']],
+ 'Orelega One'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'Orienta'=>[['normal'],['latin','latin-ext']],
+ 'Original Surfer'=>[['normal'],['latin']],
+ 'Oswald'=>[['200','300','normal','500','600','700'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Outfit'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext']],
+ 'Over the Rainbow'=>[['normal'],['latin']],
+ 'Overlock'=>[['normal','italic','700','700italic','900','900italic'],['latin','latin-ext']],
+ 'Overlock SC'=>[['normal'],['latin','latin-ext']],
+ 'Overpass'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Overpass Mono'=>[['300','normal','500','600','700'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Ovo'=>[['normal'],['latin']],
+ 'Oxanium'=>[['200','300','normal','500','600','700','800'],['latin','latin-ext']],
+ 'Oxygen'=>[['300','normal','700'],['latin','latin-ext']],
+ 'Oxygen Mono'=>[['normal'],['latin','latin-ext']],
+ 'PT Mono'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'PT Sans'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'PT Sans Caption'=>[['normal','700'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'PT Sans Narrow'=>[['normal','700'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'PT Serif'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'PT Serif Caption'=>[['normal','italic'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'Pacifico'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Padauk'=>[['normal','700'],['latin','latin-ext','myanmar']],
+ 'Padyakke Expanded One'=>[['normal'],['kannada','latin','latin-ext']],
+ 'Palanquin'=>[['100','200','300','normal','500','600','700'],['devanagari','latin','latin-ext']],
+ 'Palanquin Dark'=>[['normal','500','600','700'],['devanagari','latin','latin-ext']],
+ 'Palette Mosaic'=>[['normal'],['japanese','latin']],
+ 'Pangolin'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Paprika'=>[['normal'],['latin','latin-ext']],
+ 'Parisienne'=>[['normal'],['latin','latin-ext']],
+ 'Passero One'=>[['normal'],['latin','latin-ext']],
+ 'Passion One'=>[['normal','700','900'],['latin','latin-ext']],
+ 'Passions Conflict'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Pathway Extreme'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Pathway Gothic One'=>[['normal'],['latin','latin-ext']],
+ 'Patrick Hand'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Patrick Hand SC'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Pattaya'=>[['normal'],['cyrillic','latin','latin-ext','thai','vietnamese']],
+ 'Patua One'=>[['normal'],['latin']],
+ 'Pavanam'=>[['normal'],['latin','latin-ext','tamil']],
+ 'Paytone One'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Peddana'=>[['normal'],['latin','telugu']],
+ 'Peralta'=>[['normal'],['latin','latin-ext']],
+ 'Permanent Marker'=>[['normal'],['latin']],
+ 'Petemoss'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Petit Formal Script'=>[['normal'],['latin','latin-ext']],
+ 'Petrona'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Philosopher'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','latin','vietnamese']],
+ 'Phudu'=>[['300','normal','500','600','700','800','900'],['cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Piazzolla'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Piedra'=>[['normal'],['latin','latin-ext']],
+ 'Pinyon Script'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Pirata One'=>[['normal'],['latin','latin-ext']],
+ 'Pixelify Sans'=>[['normal','500','600','700'],['cyrillic','latin','latin-ext']],
+ 'Plaster'=>[['normal'],['latin','latin-ext']],
+ 'Play'=>[['normal','700'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','vietnamese']],
+ 'Playball'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Playfair'=>[['300','normal','500','600','700','800','900','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Playfair Display'=>[['normal','500','600','700','800','900','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','latin','latin-ext','vietnamese']],
+ 'Playfair Display SC'=>[['normal','italic','700','700italic','900','900italic'],['cyrillic','latin','latin-ext','vietnamese']],
+ 'Playpen Sans'=>[['100','200','300','normal','500','600','700','800'],['emoji','latin','latin-ext','math','vietnamese']],
+ 'Plus Jakarta Sans'=>[['200','300','normal','500','600','700','800','200italic','300italic','italic','500italic','600italic','700italic','800italic'],['cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Podkova'=>[['normal','500','600','700','800'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Poiret One'=>[['normal'],['cyrillic','latin','latin-ext']],
+ 'Poller One'=>[['normal'],['latin']],
+ 'Poltawski Nowy'=>[['normal','500','600','700','italic','500italic','600italic','700italic'],['latin','latin-ext','vietnamese']],
+ 'Poly'=>[['normal','italic'],['latin']],
+ 'Pompiere'=>[['normal'],['latin']],
+ 'Pontano Sans'=>[['300','normal','500','600','700'],['latin','latin-ext']],
+ 'Poor Story'=>[['normal'],['korean','latin']],
+ 'Poppins'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['devanagari','latin','latin-ext']],
+ 'Port Lligat Sans'=>[['normal'],['latin']],
+ 'Port Lligat Slab'=>[['normal'],['latin']],
+ 'Potta One'=>[['normal'],['japanese','latin','latin-ext','vietnamese']],
+ 'Pragati Narrow'=>[['normal','700'],['devanagari','latin','latin-ext']],
+ 'Praise'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Prata'=>[['normal'],['cyrillic','cyrillic-ext','latin','vietnamese']],
+ 'Preahvihear'=>[['normal'],['khmer','latin']],
+ 'Press Start 2P'=>[['normal'],['cyrillic','cyrillic-ext','greek','latin','latin-ext']],
+ 'Pridi'=>[['200','300','normal','500','600','700'],['latin','latin-ext','thai','vietnamese']],
+ 'Princess Sofia'=>[['normal'],['latin','latin-ext']],
+ 'Prociono'=>[['normal'],['latin']],
+ 'Prompt'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['latin','latin-ext','thai','vietnamese']],
+ 'Prosto One'=>[['normal'],['cyrillic','latin','latin-ext']],
+ 'Proza Libre'=>[['normal','italic','500','500italic','600','600italic','700','700italic','800','800italic'],['latin','latin-ext']],
+ 'Public Sans'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Puppies Play'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Puritan'=>[['normal','italic','700','700italic'],['latin']],
+ 'Purple Purse'=>[['normal'],['latin','latin-ext']],
+ 'Qahiri'=>[['normal'],['arabic','latin']],
+ 'Quando'=>[['normal'],['latin','latin-ext']],
+ 'Quantico'=>[['normal','italic','700','700italic'],['latin']],
+ 'Quattrocento'=>[['normal','700'],['latin','latin-ext']],
+ 'Quattrocento Sans'=>[['normal','italic','700','700italic'],['latin','latin-ext']],
+ 'Questrial'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Quicksand'=>[['300','normal','500','600','700'],['latin','latin-ext','vietnamese']],
+ 'Quintessential'=>[['normal'],['latin','latin-ext']],
+ 'Qwigley'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Qwitcher Grypen'=>[['normal','700'],['latin','latin-ext','vietnamese']],
+ 'REM'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Racing Sans One'=>[['normal'],['latin','latin-ext']],
+ 'Radio Canada'=>[['300','normal','500','600','700','300italic','italic','500italic','600italic','700italic'],['canadian-aboriginal','latin','latin-ext','vietnamese']],
+ 'Radley'=>[['normal','italic'],['latin','latin-ext']],
+ 'Rajdhani'=>[['300','normal','500','600','700'],['devanagari','latin','latin-ext']],
+ 'Rakkas'=>[['normal'],['arabic','latin','latin-ext']],
+ 'Raleway'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Raleway Dots'=>[['normal'],['latin','latin-ext']],
+ 'Ramabhadra'=>[['normal'],['latin','telugu']],
+ 'Ramaraja'=>[['normal'],['latin','telugu']],
+ 'Rambla'=>[['normal','italic','700','700italic'],['latin','latin-ext']],
+ 'Rammetto One'=>[['normal'],['latin','latin-ext']],
+ 'Rampart One'=>[['normal'],['cyrillic','japanese','latin','latin-ext']],
+ 'Ranchers'=>[['normal'],['latin','latin-ext']],
+ 'Rancho'=>[['normal'],['latin']],
+ 'Ranga'=>[['normal','700'],['devanagari','latin','latin-ext']],
+ 'Rasa'=>[['300','normal','500','600','700','300italic','italic','500italic','600italic','700italic'],['gujarati','latin','latin-ext','vietnamese']],
+ 'Rationale'=>[['normal'],['latin']],
+ 'Ravi Prakash'=>[['normal'],['latin','telugu']],
+ 'Readex Pro'=>[['200','300','normal','500','600','700'],['arabic','latin','latin-ext','vietnamese']],
+ 'Recursive'=>[['300','normal','500','600','700','800','900'],['cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Red Hat Display'=>[['300','normal','500','600','700','800','900','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext']],
+ 'Red Hat Mono'=>[['300','normal','500','600','700','300italic','italic','500italic','600italic','700italic'],['latin','latin-ext']],
+ 'Red Hat Text'=>[['300','normal','500','600','700','300italic','italic','500italic','600italic','700italic'],['latin','latin-ext']],
+ 'Red Rose'=>[['300','normal','500','600','700'],['latin','latin-ext','vietnamese']],
+ 'Redacted'=>[['normal'],['latin','latin-ext']],
+ 'Redacted Script'=>[['300','normal','700'],['latin','latin-ext']],
+ 'Redressed'=>[['normal'],['latin']],
+ 'Reem Kufi'=>[['normal','500','600','700'],['arabic','latin','latin-ext','vietnamese']],
+ 'Reem Kufi Fun'=>[['normal','500','600','700'],['arabic','latin','latin-ext','vietnamese']],
+ 'Reem Kufi Ink'=>[['normal'],['arabic','latin','latin-ext','vietnamese']],
+ 'Reenie Beanie'=>[['normal'],['latin']],
+ 'Reggae One'=>[['normal'],['cyrillic','japanese','latin','latin-ext']],
+ 'Rethink Sans'=>[['normal','500','600','700','800','italic','500italic','600italic','700italic','800italic'],['latin','latin-ext']],
+ 'Revalia'=>[['normal'],['latin','latin-ext']],
+ 'Rhodium Libre'=>[['normal'],['devanagari','latin','latin-ext']],
+ 'Ribeye'=>[['normal'],['latin','latin-ext']],
+ 'Ribeye Marrow'=>[['normal'],['latin','latin-ext']],
+ 'Righteous'=>[['normal'],['latin','latin-ext']],
+ 'Risque'=>[['normal'],['latin','latin-ext']],
+ 'Road Rage'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Roboto'=>[['100','100italic','300','300italic','normal','italic','500','500italic','700','700italic','900','900italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Roboto Condensed'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Roboto Flex'=>[['normal'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','vietnamese']],
+ 'Roboto Mono'=>[['100','200','300','normal','500','600','700','100italic','200italic','300italic','italic','500italic','600italic','700italic'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','vietnamese']],
+ 'Roboto Serif'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Roboto Slab'=>[['100','200','300','normal','500','600','700','800','900'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Rochester'=>[['normal'],['latin']],
+ 'Rock 3D'=>[['normal'],['japanese','latin']],
+ 'Rock Salt'=>[['normal'],['latin']],
+ 'RocknRoll One'=>[['normal'],['cyrillic','japanese','latin','latin-ext']],
+ 'Rokkitt'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Romanesco'=>[['normal'],['latin','latin-ext']],
+ 'Ropa Sans'=>[['normal','italic'],['latin','latin-ext']],
+ 'Rosario'=>[['300','normal','500','600','700','300italic','italic','500italic','600italic','700italic'],['latin','latin-ext','vietnamese']],
+ 'Rosarivo'=>[['normal','italic'],['latin','latin-ext']],
+ 'Rouge Script'=>[['normal'],['latin']],
+ 'Rowdies'=>[['300','normal','700'],['latin','latin-ext','vietnamese']],
+ 'Rozha One'=>[['normal'],['devanagari','latin','latin-ext']],
+ 'Rubik'=>[['300','normal','500','600','700','800','900','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['arabic','cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Rubik 80s Fade'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Rubik Beastly'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Rubik Broken Fax'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext','math','symbols']],
+ 'Rubik Bubbles'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Rubik Burned'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Rubik Dirt'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Rubik Distressed'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Rubik Doodle Shadow'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext','math','symbols']],
+ 'Rubik Doodle Triangles'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext','math','symbols']],
+ 'Rubik Gemstones'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Rubik Glitch'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Rubik Glitch Pop'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext','math','symbols']],
+ 'Rubik Iso'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Rubik Lines'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext','math','symbols']],
+ 'Rubik Maps'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext','math','symbols']],
+ 'Rubik Marker Hatch'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Rubik Maze'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Rubik Microbe'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Rubik Mono One'=>[['normal'],['cyrillic','latin','latin-ext']],
+ 'Rubik Moonrocks'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Rubik Pixels'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Rubik Puddles'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Rubik Scribble'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext','math','symbols']],
+ 'Rubik Spray Paint'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Rubik Storm'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Rubik Vinyl'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Rubik Wet Paint'=>[['normal'],['cyrillic','cyrillic-ext','hebrew','latin','latin-ext']],
+ 'Ruda'=>[['normal','500','600','700','800','900'],['cyrillic','latin','latin-ext','vietnamese']],
+ 'Rufina'=>[['normal','700'],['latin','latin-ext']],
+ 'Ruge Boogie'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Ruluko'=>[['normal'],['latin','latin-ext']],
+ 'Rum Raisin'=>[['normal'],['latin','latin-ext']],
+ 'Ruslan Display'=>[['normal'],['cyrillic','latin','latin-ext','math','symbols']],
+ 'Russo One'=>[['normal'],['cyrillic','latin','latin-ext']],
+ 'Ruthie'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Ruwudu'=>[['normal','500','600','700'],['arabic','latin','latin-ext']],
+ 'Rye'=>[['normal'],['latin','latin-ext']],
+ 'STIX Two Text'=>[['normal','500','600','700','italic','500italic','600italic','700italic'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','vietnamese']],
+ 'Sacramento'=>[['normal'],['latin','latin-ext']],
+ 'Sahitya'=>[['normal','700'],['devanagari','latin']],
+ 'Sail'=>[['normal'],['latin','latin-ext']],
+ 'Saira'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Saira Condensed'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Saira Extra Condensed'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Saira Semi Condensed'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Saira Stencil One'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Salsa'=>[['normal'],['latin']],
+ 'Sanchez'=>[['normal','italic'],['latin','latin-ext']],
+ 'Sancreek'=>[['normal'],['latin','latin-ext']],
+ 'Sansita'=>[['normal','italic','700','700italic','800','800italic','900','900italic'],['latin','latin-ext']],
+ 'Sansita Swashed'=>[['300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Sarabun'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic'],['latin','latin-ext','thai','vietnamese']],
+ 'Sarala'=>[['normal','700'],['devanagari','latin','latin-ext']],
+ 'Sarina'=>[['normal'],['latin','latin-ext']],
+ 'Sarpanch'=>[['normal','500','600','700','800','900'],['devanagari','latin','latin-ext']],
+ 'Sassy Frass'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Satisfy'=>[['normal'],['latin']],
+ 'Sawarabi Gothic'=>[['normal'],['cyrillic','japanese','latin','latin-ext','vietnamese']],
+ 'Sawarabi Mincho'=>[['normal'],['japanese','latin','latin-ext']],
+ 'Scada'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'Scheherazade New'=>[['normal','500','600','700'],['arabic','latin','latin-ext']],
+ 'Schibsted Grotesk'=>[['normal','500','600','700','800','900','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext']],
+ 'Schoolbell'=>[['normal'],['latin']],
+ 'Scope One'=>[['normal'],['latin','latin-ext']],
+ 'Seaweed Script'=>[['normal'],['latin','latin-ext']],
+ 'Secular One'=>[['normal'],['hebrew','latin','latin-ext']],
+ 'Sedgwick Ave'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Sedgwick Ave Display'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Sen'=>[['normal','500','600','700','800'],['latin','latin-ext']],
+ 'Send Flowers'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Sevillana'=>[['normal'],['latin','latin-ext']],
+ 'Seymour One'=>[['normal'],['cyrillic','latin','latin-ext']],
+ 'Shadows Into Light'=>[['normal'],['latin']],
+ 'Shadows Into Light Two'=>[['normal'],['latin','latin-ext']],
+ 'Shalimar'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Shantell Sans'=>[['300','normal','500','600','700','800','300italic','italic','500italic','600italic','700italic','800italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Shanti'=>[['normal'],['latin','latin-ext']],
+ 'Share'=>[['normal','italic','700','700italic'],['latin','latin-ext']],
+ 'Share Tech'=>[['normal'],['latin']],
+ 'Share Tech Mono'=>[['normal'],['latin']],
+ 'Shippori Antique'=>[['normal'],['japanese','latin','latin-ext']],
+ 'Shippori Antique B1'=>[['normal'],['japanese','latin','latin-ext']],
+ 'Shippori Mincho'=>[['normal','500','600','700','800'],['japanese','latin','latin-ext']],
+ 'Shippori Mincho B1'=>[['normal','500','600','700','800'],['japanese','latin','latin-ext']],
+ 'Shizuru'=>[['normal'],['japanese','latin']],
+ 'Shojumaru'=>[['normal'],['latin','latin-ext']],
+ 'Short Stack'=>[['normal'],['latin']],
+ 'Shrikhand'=>[['normal'],['gujarati','latin','latin-ext']],
+ 'Siemreap'=>[['normal'],['khmer']],
+ 'Sigmar'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Sigmar One'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Signika'=>[['300','normal','500','600','700'],['latin','latin-ext','vietnamese']],
+ 'Signika Negative'=>[['300','normal','500','600','700'],['latin','latin-ext','vietnamese']],
+ 'Silkscreen'=>[['normal','700'],['latin','latin-ext']],
+ 'Simonetta'=>[['normal','italic','900','900italic'],['latin','latin-ext']],
+ 'Single Day'=>[['normal'],['korean']],
+ 'Sintony'=>[['normal','700'],['latin','latin-ext']],
+ 'Sirin Stencil'=>[['normal'],['latin']],
+ 'Six Caps'=>[['normal'],['latin']],
+ 'Sixtyfour'=>[['normal'],['latin','latin-ext','math','symbols']],
+ 'Skranji'=>[['normal','700'],['latin','latin-ext']],
+ 'Slabo 13px'=>[['normal'],['latin','latin-ext']],
+ 'Slabo 27px'=>[['normal'],['latin','latin-ext']],
+ 'Slackey'=>[['normal'],['latin']],
+ 'Slackside One'=>[['normal'],['japanese','latin','latin-ext']],
+ 'Smokum'=>[['normal'],['latin']],
+ 'Smooch'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Smooch Sans'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Smythe'=>[['normal'],['latin']],
+ 'Sniglet'=>[['normal','800'],['latin','latin-ext']],
+ 'Snippet'=>[['normal'],['latin']],
+ 'Snowburst One'=>[['normal'],['latin','latin-ext']],
+ 'Sofadi One'=>[['normal'],['latin']],
+ 'Sofia'=>[['normal'],['latin']],
+ 'Sofia Sans'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','latin','latin-ext']],
+ 'Sofia Sans Condensed'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','latin','latin-ext']],
+ 'Sofia Sans Extra Condensed'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','latin','latin-ext']],
+ 'Sofia Sans Semi Condensed'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','latin','latin-ext']],
+ 'Solitreo'=>[['normal'],['hebrew','latin','latin-ext']],
+ 'Solway'=>[['300','normal','500','700','800'],['latin']],
+ 'Sometype Mono'=>[['normal','500','600','700','italic','500italic','600italic','700italic'],['latin','latin-ext']],
+ 'Song Myung'=>[['normal'],['korean','latin']],
+ 'Sono'=>[['200','300','normal','500','600','700','800'],['latin','latin-ext','vietnamese']],
+ 'Sonsie One'=>[['normal'],['latin','latin-ext']],
+ 'Sora'=>[['100','200','300','normal','500','600','700','800'],['latin','latin-ext']],
+ 'Sorts Mill Goudy'=>[['normal','italic'],['latin','latin-ext']],
+ 'Source Code Pro'=>[['200','300','normal','500','600','700','800','900','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Source Sans 3'=>[['200','300','normal','500','600','700','800','900','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Source Serif 4'=>[['200','300','normal','500','600','700','800','900','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','vietnamese']],
+ 'Space Grotesk'=>[['300','normal','500','600','700'],['latin','latin-ext','vietnamese']],
+ 'Space Mono'=>[['normal','italic','700','700italic'],['latin','latin-ext','vietnamese']],
+ 'Special Elite'=>[['normal'],['latin']],
+ 'Spectral'=>[['200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic'],['cyrillic','latin','latin-ext','vietnamese']],
+ 'Spectral SC'=>[['200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic'],['cyrillic','latin','latin-ext','vietnamese']],
+ 'Spicy Rice'=>[['normal'],['latin']],
+ 'Spinnaker'=>[['normal'],['latin','latin-ext']],
+ 'Spirax'=>[['normal'],['latin']],
+ 'Splash'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Spline Sans'=>[['300','normal','500','600','700'],['latin','latin-ext']],
+ 'Spline Sans Mono'=>[['300','normal','500','600','700','300italic','italic','500italic','600italic','700italic'],['latin','latin-ext']],
+ 'Squada One'=>[['normal'],['latin']],
+ 'Square Peg'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Sree Krushnadevaraya'=>[['normal'],['latin','telugu']],
+ 'Sriracha'=>[['normal'],['latin','latin-ext','thai','vietnamese']],
+ 'Srisakdi'=>[['normal','700'],['latin','latin-ext','thai','vietnamese']],
+ 'Staatliches'=>[['normal'],['latin','latin-ext']],
+ 'Stalemate'=>[['normal'],['latin','latin-ext']],
+ 'Stalinist One'=>[['normal'],['cyrillic','latin','latin-ext']],
+ 'Stardos Stencil'=>[['normal','700'],['latin']],
+ 'Stick'=>[['normal'],['cyrillic','japanese','latin','latin-ext']],
+ 'Stick No Bills'=>[['200','300','normal','500','600','700','800'],['latin','latin-ext','sinhala']],
+ 'Stint Ultra Condensed'=>[['normal'],['latin','latin-ext']],
+ 'Stint Ultra Expanded'=>[['normal'],['latin','latin-ext']],
+ 'Stoke'=>[['300','normal'],['latin','latin-ext']],
+ 'Strait'=>[['normal'],['latin','latin-ext']],
+ 'Style Script'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Stylish'=>[['normal'],['korean','latin']],
+ 'Sue Ellen Francisco'=>[['normal'],['latin']],
+ 'Suez One'=>[['normal'],['hebrew','latin','latin-ext']],
+ 'Sulphur Point'=>[['300','normal','700'],['latin','latin-ext']],
+ 'Sumana'=>[['normal','700'],['devanagari','latin','latin-ext']],
+ 'Sunflower'=>[['300','500','700'],['korean','latin']],
+ 'Sunshiney'=>[['normal'],['latin']],
+ 'Supermercado One'=>[['normal'],['latin']],
+ 'Sura'=>[['normal','700'],['devanagari','latin','latin-ext']],
+ 'Suranna'=>[['normal'],['latin','telugu']],
+ 'Suravaram'=>[['normal'],['latin','telugu']],
+ 'Suwannaphum'=>[['100','300','normal','700','900'],['khmer','latin']],
+ 'Swanky and Moo Moo'=>[['normal'],['latin']],
+ 'Syncopate'=>[['normal','700'],['latin']],
+ 'Syne'=>[['normal','500','600','700','800'],['greek','latin','latin-ext']],
+ 'Syne Mono'=>[['normal'],['latin','latin-ext']],
+ 'Syne Tactile'=>[['normal'],['latin','latin-ext']],
+ 'Tai Heritage Pro'=>[['normal','700'],['latin','latin-ext','tai-viet','vietnamese']],
+ 'Tajawal'=>[['200','300','normal','500','700','800','900'],['arabic','latin']],
+ 'Tangerine'=>[['normal','700'],['latin']],
+ 'Tapestry'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Taprom'=>[['normal'],['khmer','latin']],
+ 'Tauri'=>[['normal'],['latin','latin-ext']],
+ 'Taviraj'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['latin','latin-ext','thai','vietnamese']],
+ 'Teko'=>[['300','normal','500','600','700'],['devanagari','latin','latin-ext']],
+ 'Tektur'=>[['normal','500','600','700','800','900'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','vietnamese']],
+ 'Telex'=>[['normal'],['latin','latin-ext']],
+ 'Tenali Ramakrishna'=>[['normal'],['latin','telugu']],
+ 'Tenor Sans'=>[['normal'],['cyrillic','latin','latin-ext']],
+ 'Text Me One'=>[['normal'],['latin','latin-ext']],
+ 'Texturina'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Thasadith'=>[['normal','italic','700','700italic'],['latin','latin-ext','thai','vietnamese']],
+ 'The Girl Next Door'=>[['normal'],['latin']],
+ 'The Nautigal'=>[['normal','700'],['latin','latin-ext','vietnamese']],
+ 'Tienne'=>[['normal','700','900'],['latin']],
+ 'Tillana'=>[['normal','500','600','700','800'],['devanagari','latin','latin-ext']],
+ 'Tilt Neon'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Tilt Prism'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Tilt Warp'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Timmana'=>[['normal'],['latin','telugu']],
+ 'Tinos'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','greek','greek-ext','hebrew','latin','latin-ext','vietnamese']],
+ 'Tiro Bangla'=>[['normal','italic'],['bengali','latin','latin-ext']],
+ 'Tiro Devanagari Hindi'=>[['normal','italic'],['devanagari','latin','latin-ext']],
+ 'Tiro Devanagari Marathi'=>[['normal','italic'],['devanagari','latin','latin-ext']],
+ 'Tiro Devanagari Sanskrit'=>[['normal','italic'],['devanagari','latin','latin-ext']],
+ 'Tiro Gurmukhi'=>[['normal','italic'],['gurmukhi','latin','latin-ext']],
+ 'Tiro Kannada'=>[['normal','italic'],['kannada','latin','latin-ext']],
+ 'Tiro Tamil'=>[['normal','italic'],['latin','latin-ext','tamil']],
+ 'Tiro Telugu'=>[['normal','italic'],['latin','latin-ext','telugu']],
+ 'Titan One'=>[['normal'],['latin','latin-ext']],
+ 'Titillium Web'=>[['200','200italic','300','300italic','normal','italic','600','600italic','700','700italic','900'],['latin','latin-ext']],
+ 'Tomorrow'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['latin','latin-ext']],
+ 'Tourney'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Trade Winds'=>[['normal'],['latin']],
+ 'Train One'=>[['normal'],['cyrillic','japanese','latin','latin-ext']],
+ 'Trirong'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['latin','latin-ext','thai','vietnamese']],
+ 'Trispace'=>[['100','200','300','normal','500','600','700','800'],['latin','latin-ext','vietnamese']],
+ 'Trocchi'=>[['normal'],['latin','latin-ext']],
+ 'Trochut'=>[['normal','italic','700'],['latin']],
+ 'Truculenta'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Trykker'=>[['normal'],['latin','latin-ext']],
+ 'Tsukimi Rounded'=>[['300','normal','500','600','700'],['japanese','latin','latin-ext']],
+ 'Tulpen One'=>[['normal'],['latin']],
+ 'Turret Road'=>[['200','300','normal','500','700','800'],['latin','latin-ext']],
+ 'Twinkle Star'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Ubuntu'=>[['300','300italic','normal','italic','500','500italic','700','700italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext']],
+ 'Ubuntu Condensed'=>[['normal'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext']],
+ 'Ubuntu Mono'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext']],
+ 'Uchen'=>[['normal'],['latin','tibetan']],
+ 'Ultra'=>[['normal'],['latin']],
+ 'Unbounded'=>[['200','300','normal','500','600','700','800','900'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Uncial Antiqua'=>[['normal'],['latin']],
+ 'Underdog'=>[['normal'],['cyrillic','latin','latin-ext']],
+ 'Unica One'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'UnifrakturCook'=>[['700'],['latin']],
+ 'UnifrakturMaguntia'=>[['normal'],['latin']],
+ 'Unkempt'=>[['normal','700'],['latin']],
+ 'Unlock'=>[['normal'],['latin','latin-ext']],
+ 'Unna'=>[['normal','italic','700','700italic'],['latin','latin-ext']],
+ 'Updock'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Urbanist'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext']],
+ 'VT323'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Vampiro One'=>[['normal'],['latin','latin-ext']],
+ 'Varela'=>[['normal'],['latin','latin-ext']],
+ 'Varela Round'=>[['normal'],['hebrew','latin','latin-ext','vietnamese']],
+ 'Varta'=>[['300','normal','500','600','700'],['latin','latin-ext','vietnamese']],
+ 'Vast Shadow'=>[['normal'],['latin']],
+ 'Vazirmatn'=>[['100','200','300','normal','500','600','700','800','900'],['arabic','latin','latin-ext']],
+ 'Vesper Libre'=>[['normal','500','700','900'],['devanagari','latin','latin-ext']],
+ 'Viaoda Libre'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Vibes'=>[['normal'],['arabic','latin']],
+ 'Vibur'=>[['normal'],['latin']],
+ 'Victor Mono'=>[['100','200','300','normal','500','600','700','100italic','200italic','300italic','italic','500italic','600italic','700italic'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','vietnamese']],
+ 'Vidaloka'=>[['normal'],['latin']],
+ 'Viga'=>[['normal'],['latin','latin-ext']],
+ 'Vina Sans'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Voces'=>[['normal'],['latin','latin-ext']],
+ 'Volkhov'=>[['normal','italic','700','700italic'],['latin']],
+ 'Vollkorn'=>[['normal','500','600','700','800','900','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','vietnamese']],
+ 'Vollkorn SC'=>[['normal','600','700','900'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Voltaire'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Vujahday Script'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Waiting for the Sunrise'=>[['normal'],['latin']],
+ 'Wallpoet'=>[['normal'],['latin']],
+ 'Walter Turncoat'=>[['normal'],['latin']],
+ 'Warnes'=>[['normal'],['latin','latin-ext']],
+ 'Water Brush'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Waterfall'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Wavefont'=>[['100','200','300','normal','500','600','700','800','900'],['latin']],
+ 'Wellfleet'=>[['normal'],['latin','latin-ext']],
+ 'Wendy One'=>[['normal'],['latin','latin-ext']],
+ 'Whisper'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'WindSong'=>[['normal','500'],['latin','latin-ext','vietnamese']],
+ 'Wire One'=>[['normal'],['latin']],
+ 'Wix Madefor Display'=>[['normal','500','600','700','800'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Wix Madefor Text'=>[['normal','italic','500','500italic','600','600italic','700','700italic','800','800italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Work Sans'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Workbench'=>[['normal'],['latin','math','symbols']],
+ 'Xanh Mono'=>[['normal','italic'],['latin','latin-ext','vietnamese']],
+ 'Yaldevi'=>[['200','300','normal','500','600','700'],['latin','latin-ext','sinhala']],
+ 'Yanone Kaffeesatz'=>[['200','300','normal','500','600','700'],['cyrillic','latin','latin-ext','vietnamese']],
+ 'Yantramanav'=>[['100','300','normal','500','700','900'],['devanagari','latin','latin-ext']],
+ 'Yatra One'=>[['normal'],['devanagari','latin','latin-ext']],
+ 'Yellowtail'=>[['normal'],['latin']],
+ 'Yeon Sung'=>[['normal'],['korean','latin']],
+ 'Yeseva One'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Yesteryear'=>[['normal'],['latin']],
+ 'Yomogi'=>[['normal'],['cyrillic','japanese','latin','latin-ext','vietnamese']],
+ 'Young Serif'=>[['normal'],['latin','latin-ext']],
+ 'Yrsa'=>[['300','normal','500','600','700','300italic','italic','500italic','600italic','700italic'],['latin','latin-ext','vietnamese']],
+ 'Ysabeau'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','math','symbols','vietnamese']],
+ 'Ysabeau Infant'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','math','symbols','vietnamese']],
+ 'Ysabeau Office'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','math','symbols','vietnamese']],
+ 'Ysabeau SC'=>[['100','200','300','normal','500','600','700','800','900'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','math','symbols','vietnamese']],
+ 'Yuji Boku'=>[['normal'],['cyrillic','japanese','latin','latin-ext']],
+ 'Yuji Hentaigana Akari'=>[['normal'],['japanese','latin','latin-ext']],
+ 'Yuji Hentaigana Akebono'=>[['normal'],['japanese','latin','latin-ext']],
+ 'Yuji Mai'=>[['normal'],['cyrillic','japanese','latin','latin-ext']],
+ 'Yuji Syuku'=>[['normal'],['cyrillic','japanese','latin','latin-ext']],
+ 'Yusei Magic'=>[['normal'],['japanese','latin','latin-ext']],
+ 'ZCOOL KuaiLe'=>[['normal'],['chinese-simplified','latin']],
+ 'ZCOOL QingKe HuangYou'=>[['normal'],['chinese-simplified','latin']],
+ 'ZCOOL XiaoWei'=>[['normal'],['chinese-simplified','latin']],
+ 'Zen Antique'=>[['normal'],['cyrillic','greek','japanese','latin','latin-ext']],
+ 'Zen Antique Soft'=>[['normal'],['cyrillic','greek','japanese','latin','latin-ext']],
+ 'Zen Dots'=>[['normal'],['latin','latin-ext']],
+ 'Zen Kaku Gothic Antique'=>[['300','normal','500','700','900'],['cyrillic','japanese','latin','latin-ext']],
+ 'Zen Kaku Gothic New'=>[['300','normal','500','700','900'],['cyrillic','japanese','latin','latin-ext']],
+ 'Zen Kurenaido'=>[['normal'],['cyrillic','greek','japanese','latin','latin-ext']],
+ 'Zen Loop'=>[['normal','italic'],['latin','latin-ext']],
+ 'Zen Maru Gothic'=>[['300','normal','500','700','900'],['cyrillic','greek','japanese','latin','latin-ext']],
+ 'Zen Old Mincho'=>[['normal','500','600','700','900'],['cyrillic','greek','japanese','latin','latin-ext']],
+ 'Zen Tokyo Zoo'=>[['normal'],['latin','latin-ext']],
+ 'Zeyada'=>[['normal'],['latin']],
+ 'Zhi Mang Xing'=>[['normal'],['chinese-simplified','latin']],
+ 'Zilla Slab'=>[['300','300italic','normal','italic','500','500italic','600','600italic','700','700italic'],['latin','latin-ext']],
+ 'Zilla Slab Highlight'=>[['normal','700'],['latin','latin-ext']],
+ ];
+ }
+}
diff --git a/framework/fields/typography/typography.php b/framework/fields/typography/typography.php
new file mode 100755
index 0000000..6ea6bcf
--- /dev/null
+++ b/framework/fields/typography/typography.php
@@ -0,0 +1,544 @@
+field_before();
+
+ $args = wp_parse_args( $this->field, array(
+ 'font_family' => true,
+ 'font_weight' => true,
+ 'font_style' => true,
+ 'font_size' => true,
+ 'line_height' => true,
+ 'letter_spacing' => true,
+ 'text_align' => true,
+ 'text_transform' => true,
+ 'color' => true,
+ 'chosen' => true,
+ 'preview' => true,
+ 'subset' => true,
+ 'multi_subset' => false,
+ 'extra_styles' => false,
+ 'backup_font_family' => false,
+ 'font_variant' => false,
+ 'word_spacing' => false,
+ 'text_decoration' => false,
+ 'custom_style' => false,
+ 'compact' => false,
+ 'exclude' => '',
+ 'unit' => 'px',
+ 'line_height_unit' => '',
+ 'preview_text' => 'The quick brown fox jumps over the lazy dog',
+ ) );
+
+ if ( $args['compact'] ) {
+ $args['text_transform'] = false;
+ $args['text_align'] = false;
+ $args['font_size'] = false;
+ $args['line_height'] = false;
+ $args['letter_spacing'] = false;
+ $args['preview'] = false;
+ $args['color'] = false;
+ }
+
+ $default_value = array(
+ 'font-family' => '',
+ 'font-weight' => '',
+ 'font-style' => '',
+ 'font-variant' => '',
+ 'font-size' => '',
+ 'line-height' => '',
+ 'letter-spacing' => '',
+ 'word-spacing' => '',
+ 'text-align' => '',
+ 'text-transform' => '',
+ 'text-decoration' => '',
+ 'backup-font-family' => '',
+ 'color' => '',
+ 'custom-style' => '',
+ 'type' => '',
+ 'subset' => '',
+ 'extra-styles' => array(),
+ );
+
+ $default_value = ( ! empty( $this->field['default'] ) ) ? wp_parse_args( $this->field['default'], $default_value ) : $default_value;
+ $this->value = wp_parse_args( $this->value, $default_value );
+ $this->chosen = $args['chosen'];
+ $chosen_class = ( $this->chosen ) ? ' wp_china_yes--chosen' : '';
+ $line_height_unit = ( ! empty( $args['line_height_unit'] ) ) ? $args['line_height_unit'] : $args['unit'];
+
+ echo '';
+
+ echo '
';
+
+ //
+ // Font Family
+ if ( ! empty( $args['font_family'] ) ) {
+ echo '
';
+ echo '
'. esc_html__( 'Font Family', 'wp_china_yes' ) .'
';
+ echo $this->create_select( array( $this->value['font-family'] => $this->value['font-family'] ), 'font-family', esc_html__( 'Select a font', 'wp_china_yes' ) );
+ echo '
';
+ }
+
+ //
+ // Backup Font Family
+ if ( ! empty( $args['backup_font_family'] ) ) {
+ echo '
';
+ echo '
'. esc_html__( 'Backup Font Family', 'wp_china_yes' ) .'
';
+ echo $this->create_select( apply_filters( 'wp_china_yes_field_typography_backup_font_family', array(
+ 'Arial, Helvetica, sans-serif',
+ "'Arial Black', Gadget, sans-serif",
+ "'Comic Sans MS', cursive, sans-serif",
+ 'Impact, Charcoal, sans-serif',
+ "'Lucida Sans Unicode', 'Lucida Grande', sans-serif",
+ 'Tahoma, Geneva, sans-serif',
+ "'Trebuchet MS', Helvetica, sans-serif",
+ 'Verdana, Geneva, sans-serif',
+ "'Courier New', Courier, monospace",
+ "'Lucida Console', Monaco, monospace",
+ 'Georgia, serif',
+ 'Palatino Linotype'
+ ) ), 'backup-font-family', esc_html__( 'Default', 'wp_china_yes' ) );
+ echo '
';
+ }
+
+ //
+ // Font Style and Extra Style Select
+ if ( ! empty( $args['font_weight'] ) || ! empty( $args['font_style'] ) ) {
+
+ //
+ // Font Style Select
+ echo '
';
+ echo '
'. esc_html__( 'Font Style', 'wp_china_yes') .'
';
+ echo '
';
+ echo '
';
+ echo '
';
+
+ //
+ // Extra Font Style Select
+ if ( ! empty( $args['extra_styles'] ) ) {
+ echo '';
+ }
+
+ echo '
';
+
+ }
+
+ //
+ // Subset
+ if ( ! empty( $args['subset'] ) ) {
+ echo '
';
+ echo '
'. esc_html__( 'Subset', 'wp_china_yes' ) .'
';
+ $subset = ( is_array( $this->value['subset'] ) ) ? $this->value['subset'] : array_filter( (array) $this->value['subset'] );
+ echo $this->create_select( $subset, 'subset', esc_html__( 'Default', 'wp_china_yes' ), $args['multi_subset'] );
+ echo '
';
+ }
+
+ //
+ // Text Align
+ if ( ! empty( $args['text_align'] ) ) {
+ echo '
';
+ echo '
'. esc_html__( 'Text Align', 'wp_china_yes' ) .'
';
+ echo $this->create_select( array(
+ 'inherit' => esc_html__( 'Inherit', 'wp_china_yes' ),
+ 'left' => esc_html__( 'Left', 'wp_china_yes' ),
+ 'center' => esc_html__( 'Center', 'wp_china_yes' ),
+ 'right' => esc_html__( 'Right', 'wp_china_yes' ),
+ 'justify' => esc_html__( 'Justify', 'wp_china_yes' ),
+ 'initial' => esc_html__( 'Initial', 'wp_china_yes' )
+ ), 'text-align', esc_html__( 'Default', 'wp_china_yes' ) );
+ echo '
';
+ }
+
+ //
+ // Font Variant
+ if ( ! empty( $args['font_variant'] ) ) {
+ echo '
';
+ echo '
'. esc_html__( 'Font Variant', 'wp_china_yes' ) .'
';
+ echo $this->create_select( array(
+ 'normal' => esc_html__( 'Normal', 'wp_china_yes' ),
+ 'small-caps' => esc_html__( 'Small Caps', 'wp_china_yes' ),
+ 'all-small-caps' => esc_html__( 'All Small Caps', 'wp_china_yes' )
+ ), 'font-variant', esc_html__( 'Default', 'wp_china_yes' ) );
+ echo '
';
+ }
+
+ //
+ // Text Transform
+ if ( ! empty( $args['text_transform'] ) ) {
+ echo '
';
+ echo '
'. esc_html__( 'Text Transform', 'wp_china_yes' ) .'
';
+ echo $this->create_select( array(
+ 'none' => esc_html__( 'None', 'wp_china_yes' ),
+ 'capitalize' => esc_html__( 'Capitalize', 'wp_china_yes' ),
+ 'uppercase' => esc_html__( 'Uppercase', 'wp_china_yes' ),
+ 'lowercase' => esc_html__( 'Lowercase', 'wp_china_yes' )
+ ), 'text-transform', esc_html__( 'Default', 'wp_china_yes' ) );
+ echo '
';
+ }
+
+ //
+ // Text Decoration
+ if ( ! empty( $args['text_decoration'] ) ) {
+ echo '
';
+ echo '
'. esc_html__( 'Text Decoration', 'wp_china_yes' ) .'
';
+ echo $this->create_select( array(
+ 'none' => esc_html__( 'None', 'wp_china_yes' ),
+ 'underline' => esc_html__( 'Solid', 'wp_china_yes' ),
+ 'underline double' => esc_html__( 'Double', 'wp_china_yes' ),
+ 'underline dotted' => esc_html__( 'Dotted', 'wp_china_yes' ),
+ 'underline dashed' => esc_html__( 'Dashed', 'wp_china_yes' ),
+ 'underline wavy' => esc_html__( 'Wavy', 'wp_china_yes' ),
+ 'underline overline' => esc_html__( 'Overline', 'wp_china_yes' ),
+ 'line-through' => esc_html__( 'Line-through', 'wp_china_yes' )
+ ), 'text-decoration', esc_html__( 'Default', 'wp_china_yes' ) );
+ echo '
';
+ }
+
+ echo '
';
+
+ echo '
';
+
+ //
+ // Font Color
+ if ( ! empty( $args['color'] ) ) {
+ $default_color_attr = ( ! empty( $default_value['color'] ) ) ? ' data-default-color="'. esc_attr( $default_value['color'] ) .'"' : '';
+ echo '
';
+ echo '
'. esc_html__( 'Font Color', 'wp_china_yes' ) .'
';
+ echo '
';
+ echo '';
+ echo '
';
+ echo '
';
+ }
+
+ //
+ // Custom style
+ if ( ! empty( $args['custom_style'] ) ) {
+ echo '
';
+ echo '
'. esc_html__( 'Custom Style', 'wp_china_yes' ) .'
';
+ echo '
';
+ echo '
';
+ }
+
+ //
+ // Preview
+ $always_preview = ( $args['preview'] !== 'always' ) ? ' hidden' : '';
+
+ if ( ! empty( $args['preview'] ) ) {
+ echo '
';
+ echo '
';
+ echo '
'. esc_attr( $args['preview_text'] ) .'
';
+ echo '
';
+ }
+
+ echo '
';
+ echo '
';
+
+ echo '
';
+
+ echo $this->field_after();
+
+ }
+
+ public function create_select( $options, $name, $placeholder = '', $is_multiple = false ) {
+
+ $multiple_name = ( $is_multiple ) ? '[]' : '';
+ $multiple_attr = ( $is_multiple ) ? ' multiple data-multiple="true"' : '';
+ $chosen_rtl = ( $this->chosen && is_rtl() ) ? ' chosen-rtl' : '';
+
+ $output = '';
+
+ return $output;
+
+ }
+
+ public function enqueue() {
+
+ if ( ! wp_script_is( 'wp_china_yes-webfontloader' ) ) {
+
+ WP_CHINA_YES::include_plugin_file( 'fields/typography/google-fonts.php' );
+
+ wp_enqueue_script( 'wp_china_yes-webfontloader', 'https://jsd.admincdn.com/npm/webfontloader@1.6.28/webfontloader.min.js', array( 'wp_china_yes' ), '1.6.28', true );
+
+ $webfonts = array();
+
+ $customwebfonts = apply_filters( 'wp_china_yes_field_typography_customwebfonts', array() );
+
+ if ( ! empty( $customwebfonts ) ) {
+ $webfonts['custom'] = array(
+ 'label' => esc_html__( 'Custom Web Fonts', 'wp_china_yes' ),
+ 'fonts' => $customwebfonts
+ );
+ }
+
+ $webfonts['safe'] = array(
+ 'label' => esc_html__( 'Safe Web Fonts', 'wp_china_yes' ),
+ 'fonts' => apply_filters( 'wp_china_yes_field_typography_safewebfonts', array(
+ 'Arial',
+ 'Arial Black',
+ 'Helvetica',
+ 'Times New Roman',
+ 'Courier New',
+ 'Tahoma',
+ 'Verdana',
+ 'Impact',
+ 'Trebuchet MS',
+ 'Comic Sans MS',
+ 'Lucida Console',
+ 'Lucida Sans Unicode',
+ 'Georgia, serif',
+ 'Palatino Linotype'
+ )
+ ) );
+
+ $webfonts['google'] = array(
+ 'label' => esc_html__( 'Google Web Fonts', 'wp_china_yes' ),
+ 'fonts' => apply_filters( 'wp_china_yes_field_typography_googlewebfonts', wp_china_yes_get_google_fonts()
+ ) );
+
+ $defaultstyles = apply_filters( 'wp_china_yes_field_typography_defaultstyles', array( 'normal', 'italic', '700', '700italic' ) );
+
+ $googlestyles = apply_filters( 'wp_china_yes_field_typography_googlestyles', array(
+ '100' => 'Thin 100',
+ '100italic' => 'Thin 100 Italic',
+ '200' => 'Extra-Light 200',
+ '200italic' => 'Extra-Light 200 Italic',
+ '300' => 'Light 300',
+ '300italic' => 'Light 300 Italic',
+ 'normal' => 'Normal 400',
+ 'italic' => 'Normal 400 Italic',
+ '500' => 'Medium 500',
+ '500italic' => 'Medium 500 Italic',
+ '600' => 'Semi-Bold 600',
+ '600italic' => 'Semi-Bold 600 Italic',
+ '700' => 'Bold 700',
+ '700italic' => 'Bold 700 Italic',
+ '800' => 'Extra-Bold 800',
+ '800italic' => 'Extra-Bold 800 Italic',
+ '900' => 'Black 900',
+ '900italic' => 'Black 900 Italic'
+ ) );
+
+ $webfonts = apply_filters( 'wp_china_yes_field_typography_webfonts', $webfonts );
+
+ wp_localize_script( 'wp_china_yes', 'wp_china_yes_typography_json', array(
+ 'webfonts' => $webfonts,
+ 'defaultstyles' => $defaultstyles,
+ 'googlestyles' => $googlestyles
+ ) );
+
+ }
+
+ }
+
+ public function enqueue_google_fonts( $method = 'enqueue' ) {
+
+ $is_google = false;
+
+ if ( ! empty( $this->value['type'] ) ) {
+ $is_google = ( $this->value['type'] === 'google' ) ? true : false;
+ } else {
+ WP_CHINA_YES::include_plugin_file( 'fields/typography/google-fonts.php' );
+ $is_google = ( array_key_exists( $this->value['font-family'], wp_china_yes_get_google_fonts() ) ) ? true : false;
+ }
+
+ if ( $is_google ) {
+
+ // set style
+ $font_family = ( ! empty( $this->value['font-family'] ) ) ? $this->value['font-family'] : '';
+ $font_weight = ( ! empty( $this->value['font-weight'] ) ) ? $this->value['font-weight'] : '';
+ $font_style = ( ! empty( $this->value['font-style'] ) ) ? $this->value['font-style'] : '';
+
+ if ( $font_weight || $font_style ) {
+ $style = $font_weight . $font_style;
+ if ( ! empty( $style ) ) {
+ $style = ( $style === 'normal' ) ? '400' : $style;
+ WP_CHINA_YES::$webfonts[$method][$font_family][$style] = $style;
+ }
+ } else {
+ WP_CHINA_YES::$webfonts[$method][$font_family] = array();
+ }
+
+ // set extra styles
+ if ( ! empty( $this->value['extra-styles'] ) ) {
+ foreach ( $this->value['extra-styles'] as $extra_style ) {
+ if ( ! empty( $extra_style ) ) {
+ $extra_style = ( $extra_style === 'normal' ) ? '400' : $extra_style;
+ WP_CHINA_YES::$webfonts[$method][$font_family][$extra_style] = $extra_style;
+ }
+ }
+ }
+
+ // set subsets
+ if ( ! empty( $this->value['subset'] ) ) {
+ $this->value['subset'] = ( is_array( $this->value['subset'] ) ) ? $this->value['subset'] : array_filter( (array) $this->value['subset'] );
+ foreach ( $this->value['subset'] as $subset ) {
+ if( ! empty( $subset ) ) {
+ WP_CHINA_YES::$subsets[$subset] = $subset;
+ }
+ }
+ }
+
+ return true;
+
+ }
+
+ return false;
+
+ }
+
+ public function output() {
+
+ $output = '';
+ $bg_image = array();
+ $important = ( ! empty( $this->field['output_important'] ) ) ? '!important' : '';
+ $element = ( is_array( $this->field['output'] ) ) ? join( ',', $this->field['output'] ) : $this->field['output'];
+
+ $font_family = ( ! empty( $this->value['font-family'] ) ) ? $this->value['font-family'] : '';
+ $backup_family = ( ! empty( $this->value['backup-font-family'] ) ) ? ', '. $this->value['backup-font-family'] : '';
+
+ if ( $font_family ) {
+ $output .= 'font-family:"'. $font_family .'"'. $backup_family . $important .';';
+ }
+
+ // Common font properties
+ $properties = array(
+ 'color',
+ 'font-weight',
+ 'font-style',
+ 'font-variant',
+ 'text-align',
+ 'text-transform',
+ 'text-decoration',
+ );
+
+ foreach ( $properties as $property ) {
+ if ( isset( $this->value[$property] ) && $this->value[$property] !== '' ) {
+ $output .= $property .':'. $this->value[$property] . $important .';';
+ }
+ }
+
+ $properties = array(
+ 'font-size',
+ 'line-height',
+ 'letter-spacing',
+ 'word-spacing',
+ );
+
+ $unit = ( ! empty( $this->value['unit'] ) ) ? $this->value['unit'] : 'px';
+ $line_height_unit = ( ! empty( $this->value['line_height_unit'] ) ) ? $this->value['line_height_unit'] : $unit;
+
+ foreach ( $properties as $property ) {
+ if ( isset( $this->value[$property] ) && $this->value[$property] !== '' ) {
+ $unit = ( $property === 'line-height' ) ? $line_height_unit : $unit;
+ $output .= $property .':'. $this->value[$property] . $unit . $important .';';
+ }
+ }
+
+ $custom_style = ( ! empty( $this->value['custom-style'] ) ) ? $this->value['custom-style'] : '';
+
+ if ( $output ) {
+ $output = $element .'{'. $output . $custom_style .'}';
+ }
+
+ $this->parent->output_css .= $output;
+
+ return $output;
+
+ }
+
+ }
+}
diff --git a/framework/fields/upload/upload.php b/framework/fields/upload/upload.php
new file mode 100755
index 0000000..1eebcba
--- /dev/null
+++ b/framework/fields/upload/upload.php
@@ -0,0 +1,61 @@
+field, array(
+ 'library' => array(),
+ 'preview' => false,
+ 'preview_width' => '',
+ 'preview_height' => '',
+ 'button_title' => esc_html__( 'Upload', 'wp_china_yes' ),
+ 'remove_title' => esc_html__( 'Remove', 'wp_china_yes' ),
+ ) );
+
+ echo $this->field_before();
+
+ $library = ( is_array( $args['library'] ) ) ? $args['library'] : array_filter( (array) $args['library'] );
+ $library = ( ! empty( $library ) ) ? implode(',', $library ) : '';
+ $hidden = ( empty( $this->value ) ) ? ' hidden' : '';
+
+ if ( ! empty( $args['preview'] ) ) {
+
+ $preview_type = ( ! empty( $this->value ) ) ? strtolower( substr( strrchr( $this->value, '.' ), 1 ) ) : '';
+ $preview_src = ( ! empty( $preview_type ) && in_array( $preview_type, array( 'jpg', 'jpeg', 'gif', 'png', 'svg', 'webp' ) ) ) ? $this->value : '';
+ $preview_width = ( ! empty( $args['preview_width'] ) ) ? 'max-width:'. esc_attr( $args['preview_width'] ) .'px;' : '';
+ $preview_height = ( ! empty( $args['preview_height'] ) ) ? 'max-height:'. esc_attr( $args['preview_height'] ) .'px;' : '';
+ $preview_style = ( ! empty( $preview_width ) || ! empty( $preview_height ) ) ? ' style="'. esc_attr( $preview_width . $preview_height ) .'"': '';
+ $preview_hidden = ( empty( $preview_src ) ) ? ' hidden' : '';
+
+ echo '';
+ echo '
';
+ echo '
 .')
';
+ echo '
';
+ echo '
';
+
+ }
+
+ echo '';
+
+ echo $this->field_after();
+
+ }
+ }
+}
diff --git a/framework/fields/wp_editor/wp_editor.php b/framework/fields/wp_editor/wp_editor.php
new file mode 100755
index 0000000..2614869
--- /dev/null
+++ b/framework/fields/wp_editor/wp_editor.php
@@ -0,0 +1,107 @@
+field, array(
+ 'tinymce' => true,
+ 'quicktags' => true,
+ 'media_buttons' => true,
+ 'wpautop' => false,
+ 'height' => '',
+ ) );
+
+ $attributes = array(
+ 'rows' => 10,
+ 'class' => 'wp-editor-area',
+ 'autocomplete' => 'off',
+ );
+
+ $editor_height = ( ! empty( $args['height'] ) ) ? ' style="height:'. esc_attr( $args['height'] ) .';"' : '';
+
+ $editor_settings = array(
+ 'tinymce' => $args['tinymce'],
+ 'quicktags' => $args['quicktags'],
+ 'media_buttons' => $args['media_buttons'],
+ 'wpautop' => $args['wpautop'],
+ );
+
+ echo $this->field_before();
+
+ echo ( wp_china_yes_wp_editor_api() ) ? '' : '';
+
+ echo '';
+
+ echo ( wp_china_yes_wp_editor_api() ) ? '
' : '';
+
+ echo $this->field_after();
+
+ }
+
+ public function enqueue() {
+
+ if ( wp_china_yes_wp_editor_api() && function_exists( 'wp_enqueue_editor' ) ) {
+
+ wp_enqueue_editor();
+
+ $this->setup_wp_editor_settings();
+
+ add_action( 'print_default_editor_scripts', array( $this, 'setup_wp_editor_media_buttons' ) );
+
+ }
+
+ }
+
+ // Setup wp editor media buttons
+ public function setup_wp_editor_media_buttons() {
+
+ if ( ! function_exists( 'media_buttons' ) ) {
+ return;
+ }
+
+ ob_start();
+ echo '';
+ do_action( 'media_buttons' );
+ echo '
';
+ $media_buttons = ob_get_clean();
+
+ echo '';
+
+ }
+
+ // Setup wp editor settings
+ public function setup_wp_editor_settings() {
+
+ if ( wp_china_yes_wp_editor_api() && class_exists( '_WP_Editors') ) {
+
+ $defaults = apply_filters( 'wp_china_yes_wp_editor', array(
+ 'tinymce' => array(
+ 'wp_skip_init' => true
+ ),
+ ) );
+
+ $setup = _WP_Editors::parse_settings( 'wp_china_yes_wp_editor', $defaults );
+
+ _WP_Editors::editor_settings( 'wp_china_yes_wp_editor', $setup );
+
+ }
+
+ }
+
+ }
+}
diff --git a/framework/functions/actions.php b/framework/functions/actions.php
new file mode 100755
index 0000000..f22a70e
--- /dev/null
+++ b/framework/functions/actions.php
@@ -0,0 +1,190 @@
+ esc_html__( 'Error: Invalid nonce verification.', 'wp_china_yes' ) ) );
+ }
+
+ ob_start();
+
+ $icon_library = ( apply_filters( 'wp_china_yes_fa4', false ) ) ? 'fa4' : 'fa5';
+
+ WP_CHINA_YES::include_plugin_file( 'fields/icon/'. $icon_library .'-icons.php' );
+
+ $icon_lists = apply_filters( 'wp_china_yes_field_icon_add_icons', wp_china_yes_get_default_icons() );
+
+ if ( ! empty( $icon_lists ) ) {
+
+ foreach ( $icon_lists as $list ) {
+
+ echo ( count( $icon_lists ) >= 2 ) ? ''. esc_attr( $list['title'] ) .'
' : '';
+
+ foreach ( $list['icons'] as $icon ) {
+ echo '';
+ }
+
+ }
+
+ } else {
+
+ echo ''. esc_html__( 'No data available.', 'wp_china_yes' ) .'
';
+
+ }
+
+ $content = ob_get_clean();
+
+ wp_send_json_success( array( 'content' => $content ) );
+
+ }
+ add_action( 'wp_ajax_wp_china_yes-get-icons', 'wp_china_yes_get_icons' );
+}
+
+/**
+ *
+ * Export
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ *
+ */
+if ( ! function_exists( 'wp_china_yes_export' ) ) {
+ function wp_china_yes_export() {
+
+ $nonce = ( ! empty( $_GET[ 'nonce' ] ) ) ? sanitize_text_field( wp_unslash( $_GET[ 'nonce' ] ) ) : '';
+ $unique = ( ! empty( $_GET[ 'unique' ] ) ) ? sanitize_text_field( wp_unslash( $_GET[ 'unique' ] ) ) : '';
+
+ if ( ! wp_verify_nonce( $nonce, 'wp_china_yes_backup_nonce' ) ) {
+ die( esc_html__( 'Error: Invalid nonce verification.', 'wp_china_yes' ) );
+ }
+
+ if ( empty( $unique ) ) {
+ die( esc_html__( 'Error: Invalid key.', 'wp_china_yes' ) );
+ }
+
+ // Export
+ header('Content-Type: application/json');
+ header('Content-disposition: attachment; filename=backup-'. gmdate( 'd-m-Y' ) .'.json');
+ header('Content-Transfer-Encoding: binary');
+ header('Pragma: no-cache');
+ header('Expires: 0');
+
+ echo json_encode( get_option( $unique ) );
+
+ die();
+
+ }
+ add_action( 'wp_ajax_wp_china_yes-export', 'wp_china_yes_export' );
+}
+
+/**
+ *
+ * Import Ajax
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ *
+ */
+if ( ! function_exists( 'wp_china_yes_import_ajax' ) ) {
+ function wp_china_yes_import_ajax() {
+
+ $nonce = ( ! empty( $_POST[ 'nonce' ] ) ) ? sanitize_text_field( wp_unslash( $_POST[ 'nonce' ] ) ) : '';
+ $unique = ( ! empty( $_POST[ 'unique' ] ) ) ? sanitize_text_field( wp_unslash( $_POST[ 'unique' ] ) ) : '';
+ $data = ( ! empty( $_POST[ 'data' ] ) ) ? wp_kses_post_deep( json_decode( wp_unslash( trim( $_POST[ 'data' ] ) ), true ) ) : array();
+
+ if ( ! wp_verify_nonce( $nonce, 'wp_china_yes_backup_nonce' ) ) {
+ wp_send_json_error( array( 'error' => esc_html__( 'Error: Invalid nonce verification.', 'wp_china_yes' ) ) );
+ }
+
+ if ( empty( $unique ) ) {
+ wp_send_json_error( array( 'error' => esc_html__( 'Error: Invalid key.', 'wp_china_yes' ) ) );
+ }
+
+ if ( empty( $data ) || ! is_array( $data ) ) {
+ wp_send_json_error( array( 'error' => esc_html__( 'Error: The response is not a valid JSON response.', 'wp_china_yes' ) ) );
+ }
+
+ // Success
+ update_option( $unique, $data, true );
+
+ wp_send_json_success();
+
+ }
+ add_action( 'wp_ajax_wp_china_yes-import', 'wp_china_yes_import_ajax' );
+}
+
+/**
+ *
+ * Reset Ajax
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ *
+ */
+if ( ! function_exists( 'wp_china_yes_reset_ajax' ) ) {
+ function wp_china_yes_reset_ajax() {
+
+ $nonce = ( ! empty( $_POST[ 'nonce' ] ) ) ? sanitize_text_field( wp_unslash( $_POST[ 'nonce' ] ) ) : '';
+ $unique = ( ! empty( $_POST[ 'unique' ] ) ) ? sanitize_text_field( wp_unslash( $_POST[ 'unique' ] ) ) : '';
+
+ if ( ! wp_verify_nonce( $nonce, 'wp_china_yes_backup_nonce' ) ) {
+ wp_send_json_error( array( 'error' => esc_html__( 'Error: Invalid nonce verification.', 'wp_china_yes' ) ) );
+ }
+
+ // Success
+ delete_option( $unique );
+
+ wp_send_json_success();
+
+ }
+ add_action( 'wp_ajax_wp_china_yes-reset', 'wp_china_yes_reset_ajax' );
+}
+
+/**
+ *
+ * Chosen Ajax
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ *
+ */
+if ( ! function_exists( 'wp_china_yes_chosen_ajax' ) ) {
+ function wp_china_yes_chosen_ajax() {
+
+ $nonce = ( ! empty( $_POST[ 'nonce' ] ) ) ? sanitize_text_field( wp_unslash( $_POST[ 'nonce' ] ) ) : '';
+ $type = ( ! empty( $_POST[ 'type' ] ) ) ? sanitize_text_field( wp_unslash( $_POST[ 'type' ] ) ) : '';
+ $term = ( ! empty( $_POST[ 'term' ] ) ) ? sanitize_text_field( wp_unslash( $_POST[ 'term' ] ) ) : '';
+ $query = ( ! empty( $_POST[ 'query_args' ] ) ) ? wp_kses_post_deep( $_POST[ 'query_args' ] ) : array();
+
+ if ( ! wp_verify_nonce( $nonce, 'wp_china_yes_chosen_ajax_nonce' ) ) {
+ wp_send_json_error( array( 'error' => esc_html__( 'Error: Invalid nonce verification.', 'wp_china_yes' ) ) );
+ }
+
+ if ( empty( $type ) || empty( $term ) ) {
+ wp_send_json_error( array( 'error' => esc_html__( 'Error: Invalid term ID.', 'wp_china_yes' ) ) );
+ }
+
+ $capability = apply_filters( 'wp_china_yes_chosen_ajax_capability', 'manage_options' );
+
+ if ( ! current_user_can( $capability ) ) {
+ wp_send_json_error( array( 'error' => esc_html__( 'Error: You do not have permission to do that.', 'wp_china_yes' ) ) );
+ }
+
+ // Success
+ $options = WP_CHINA_YES_Fields::field_data( $type, $term, $query );
+
+ wp_send_json_success( $options );
+
+ }
+ add_action( 'wp_ajax_wp_china_yes-chosen', 'wp_china_yes_chosen_ajax' );
+}
diff --git a/framework/functions/customize.php b/framework/functions/customize.php
new file mode 100755
index 0000000..8fbad7b
--- /dev/null
+++ b/framework/functions/customize.php
@@ -0,0 +1,142 @@
+field['dependency'] ) ) {
+
+ $dependency = $this->field['dependency'];
+ $depend_visible = '';
+ $data_controller = '';
+ $data_condition = '';
+ $data_value = '';
+ $data_global = '';
+
+ if ( is_array( $dependency[0] ) ) {
+ $data_controller = implode( '|', array_column( $dependency, 0 ) );
+ $data_condition = implode( '|', array_column( $dependency, 1 ) );
+ $data_value = implode( '|', array_column( $dependency, 2 ) );
+ $data_global = implode( '|', array_column( $dependency, 3 ) );
+ $depend_visible = implode( '|', array_column( $dependency, 4 ) );
+ } else {
+ $data_controller = ( ! empty( $dependency[0] ) ) ? $dependency[0] : '';
+ $data_condition = ( ! empty( $dependency[1] ) ) ? $dependency[1] : '';
+ $data_value = ( ! empty( $dependency[2] ) ) ? $dependency[2] : '';
+ $data_global = ( ! empty( $dependency[3] ) ) ? $dependency[3] : '';
+ $depend_visible = ( ! empty( $dependency[4] ) ) ? $dependency[4] : '';
+ }
+
+ $depend .= ' data-controller="'. esc_attr( $data_controller ) .'"';
+ $depend .= ' data-condition="'. esc_attr( $data_condition ) .'"';
+ $depend .= ' data-value="'. esc_attr( $data_value ) .'"';
+ $depend .= ( ! empty( $data_global ) ) ? ' data-depend-global="true"' : '';
+
+ $visible = ' wp_china_yes-dependency-control';
+ $visible .= ( ! empty( $depend_visible ) ) ? ' wp_china_yes-depend-visible' : ' wp_china_yes-depend-hidden';
+
+ }
+
+ $id = 'customize-control-' . str_replace( array( '[', ']' ), array( '-', '' ), $this->id );
+ $class = 'customize-control customize-control-'. $this->type . $visible;
+
+ echo '';
+ $this->render_field_content();
+ echo '';
+
+ }
+
+ public function render_field_content() {
+
+ $complex = apply_filters( 'wp_china_yes_customize_complex_fields', array(
+ 'accordion',
+ 'background',
+ 'border',
+ 'button_set',
+ 'checkbox',
+ 'color_group',
+ 'date',
+ 'dimensions',
+ 'fieldset',
+ 'group',
+ 'image_select',
+ 'link',
+ 'link_color',
+ 'media',
+ 'palette',
+ 'repeater',
+ 'sortable',
+ 'sorter',
+ 'spacing',
+ 'switcher',
+ 'tabbed',
+ 'typography'
+ ) );
+
+ $field_id = ( ! empty( $this->field['id'] ) ) ? $this->field['id'] : '';
+ $custom = ( ! empty( $this->field['customizer'] ) ) ? true : false;
+ $is_complex = ( in_array( $this->field['type'], $complex ) ) ? true : false;
+ $class = ( $is_complex || $custom ) ? ' wp_china_yes-customize-complex' : '';
+ $atts = ( $is_complex || $custom ) ? ' data-unique-id="'. esc_attr( $this->unique ) .'" data-option-id="'. esc_attr( $field_id ) .'"' : '';
+
+ if ( ! $is_complex && ! $custom ) {
+ $this->field['attributes']['data-customize-setting-link'] = $this->settings['default']->id;
+ }
+
+ $this->field['name'] = $this->settings['default']->id;
+
+ $this->field['dependency'] = array();
+
+ echo '';
+
+ WP_CHINA_YES::field( $this->field, $this->value(), $this->unique, 'customize' );
+
+ echo '
';
+
+ }
+
+ }
+}
diff --git a/framework/functions/helpers.php b/framework/functions/helpers.php
new file mode 100755
index 0000000..6a2ac5d
--- /dev/null
+++ b/framework/functions/helpers.php
@@ -0,0 +1,58 @@
+=' );
+ }
+}
diff --git a/framework/functions/sanitize.php b/framework/functions/sanitize.php
new file mode 100755
index 0000000..f0c3869
--- /dev/null
+++ b/framework/functions/sanitize.php
@@ -0,0 +1,29 @@
+add( 'required', esc_html__( 'Please enter a valid email address.', 'wp_china_yes' ) );
+ }
+
+ return $validity;
+
+ }
+}
+
+/**
+ *
+ * Numeric validate for Customizer
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ *
+ */
+if ( ! function_exists( 'wp_china_yes_customize_validate_numeric' ) ) {
+ function wp_china_yes_customize_validate_numeric( $validity, $value, $wp_customize ) {
+
+ if ( ! is_numeric( $value ) ) {
+ $validity->add( 'required', esc_html__( 'Please enter a valid number.', 'wp_china_yes' ) );
+ }
+
+ return $validity;
+
+ }
+}
+
+/**
+ *
+ * Required validate for Customizer
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ *
+ */
+if ( ! function_exists( 'wp_china_yes_customize_validate_required' ) ) {
+ function wp_china_yes_customize_validate_required( $validity, $value, $wp_customize ) {
+
+ if ( empty( $value ) ) {
+ $validity->add( 'required', esc_html__( 'This field is required.', 'wp_china_yes' ) );
+ }
+
+ return $validity;
+
+ }
+}
+
+/**
+ *
+ * URL validate for Customizer
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ *
+ */
+if ( ! function_exists( 'wp_china_yes_customize_validate_url' ) ) {
+ function wp_china_yes_customize_validate_url( $validity, $value, $wp_customize ) {
+
+ if ( ! filter_var( $value, FILTER_VALIDATE_URL ) ) {
+ $validity->add( 'required', esc_html__( 'Please enter a valid URL.', 'wp_china_yes' ) );
+ }
+
+ return $validity;
+
+ }
+}
diff --git a/framework/functions/walker.php b/framework/functions/walker.php
new file mode 100755
index 0000000..3fe43c7
--- /dev/null
+++ b/framework/functions/walker.php
@@ -0,0 +1,28 @@
+ID, $item, $depth, $args );
+ $custom_fields = ob_get_clean();
+
+ $output .= preg_replace( '/(?=<(fieldset|p)[^>]+class="[^"]*field-move)/', $custom_fields, $html );
+
+ }
+
+ }
+}
diff --git a/framework/index.php b/framework/index.php
new file mode 100755
index 0000000..49d255d
--- /dev/null
+++ b/framework/index.php
@@ -0,0 +1 @@
+\n"
+"Language-Team: \n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.4.3\n"
+"Project-Id-Version: \n"
+
+#: classes/admin-options.class.php:226
+msgid "Error while saving the changes."
+msgstr "保存失败"
+
+#: classes/admin-options.class.php:286
+msgid "Settings successfully imported."
+msgstr "导入成功"
+
+#: classes/admin-options.class.php:298 classes/admin-options.class.php:314
+msgid "Default settings restored."
+msgstr "恢复完成"
+
+#: classes/admin-options.class.php:385
+msgid "Settings saved."
+msgstr "保存成功"
+
+#: classes/admin-options.class.php:565
+msgid "You have unsaved changes, save your changes!"
+msgstr "配置发生改变,请勿忘记保存!"
+
+#: classes/admin-options.class.php:567
+msgid "show all settings"
+msgstr "显示所有设置"
+
+#: classes/admin-options.class.php:569 fields/icon/icon.php:57
+#: fields/map/map.php:23
+msgid "Search..."
+msgstr "请输入关键词"
+
+#: classes/admin-options.class.php:572 classes/admin-options.class.php:695
+msgid "Save"
+msgstr "保存配置"
+
+#: classes/admin-options.class.php:572 classes/admin-options.class.php:695
+msgid "Saving..."
+msgstr "正在保存"
+
+#: classes/admin-options.class.php:573 classes/admin-options.class.php:696
+msgid "Reset Section"
+msgstr "恢复此页"
+
+#: classes/admin-options.class.php:573 classes/admin-options.class.php:696
+msgid "Are you sure to reset this section options?"
+msgstr "单击「确定」进行恢复,当前页面的配置将会丢失!"
+
+#: classes/admin-options.class.php:574 classes/admin-options.class.php:697
+msgid "Reset All"
+msgstr "恢复全部"
+
+#: classes/admin-options.class.php:574 classes/admin-options.class.php:697
+#: classes/comment-options.class.php:216 classes/metabox-options.class.php:294
+#: fields/backup/backup.php:31
+msgid "Reset"
+msgstr "恢复默认"
+
+#: classes/admin-options.class.php:574 classes/admin-options.class.php:697
+msgid "Are you sure you want to reset all settings to default values?"
+msgstr "单击「确定」进行恢复,所有页面的配置都将丢失!"
+
+#: classes/admin-options.class.php:672 classes/comment-options.class.php:199
+#: classes/metabox-options.class.php:277 fields/button_set/button_set.php:56
+#: fields/checkbox/checkbox.php:76 fields/radio/radio.php:75
+#: fields/select/select.php:113 functions/actions.php:41
+msgid "No data available."
+msgstr "没有可用数据"
+
+#: classes/comment-options.class.php:217 classes/metabox-options.class.php:295
+msgid "update post"
+msgstr "更新文章"
+
+#: classes/comment-options.class.php:217 classes/metabox-options.class.php:295
+msgid "Cancel"
+msgstr "取消"
+
+#: classes/setup.class.php:592
+msgid "Are you sure?"
+msgstr "单击「确定」进行下一步操作,该操作可能会丢失部分配置!"
+
+#: classes/setup.class.php:593
+msgid "Please enter %s or more characters"
+msgstr "请输入 %s 或更多字符"
+
+#: classes/setup.class.php:594
+msgid "Searching..."
+msgstr "搜索中..."
+
+#: classes/setup.class.php:595
+msgid "No results found."
+msgstr "未找到结果。"
+
+#: classes/setup.class.php:696
+msgid "Oops! Not allowed."
+msgstr "哎呀!不允许。"
+
+#: classes/setup.class.php:768 classes/setup.class.php:772
+msgid "Field not found!"
+msgstr "没有找到任何数据"
+
+#: classes/shortcode-options.class.php:253 fields/group/group.php:23
+msgid "Add New"
+msgstr "新增"
+
+#: classes/shortcode-options.class.php:290 functions/actions.php:16
+#: functions/actions.php:68 functions/actions.php:106 functions/actions.php:141
+#: functions/actions.php:170
+msgid "Error: Invalid nonce verification."
+msgstr "错误: 无效的nonce验证。"
+
+#: fields/background/background.php:36 fields/media/media.php:59
+msgid "Not selected"
+msgstr "未选择"
+
+#: fields/background/background.php:72 fields/date/date.php:31
+msgid "From"
+msgstr "从"
+
+#: fields/background/background.php:90 fields/date/date.php:32
+msgid "To"
+msgstr "到"
+
+#: fields/background/background.php:108
+msgid "Direction"
+msgstr "方向"
+
+#: fields/background/background.php:114
+msgid "Gradient Direction"
+msgstr "渐变方向"
+
+#: fields/background/background.php:115
+msgid "⇓ top to bottom"
+msgstr "⇓ 从上到下"
+
+#: fields/background/background.php:116
+msgid "⇒ left to right"
+msgstr "⇒从左到右"
+
+#: fields/background/background.php:117
+msgid "⇘ corner top to right"
+msgstr "⇘ 右上角"
+
+#: fields/background/background.php:118
+msgid "⇙ corner top to left"
+msgstr "⇘ 左上角"
+
+#: fields/background/background.php:161
+msgid "Background Position"
+msgstr "背景位置"
+
+#: fields/background/background.php:162
+msgid "Left Top"
+msgstr "左上"
+
+#: fields/background/background.php:163
+msgid "Left Center"
+msgstr "左中"
+
+#: fields/background/background.php:164
+msgid "Left Bottom"
+msgstr "左下"
+
+#: fields/background/background.php:165
+msgid "Center Top"
+msgstr "中上"
+
+#: fields/background/background.php:166
+msgid "Center Center"
+msgstr "居中"
+
+#: fields/background/background.php:167
+msgid "Center Bottom"
+msgstr "中下"
+
+#: fields/background/background.php:168
+msgid "Right Top"
+msgstr "右上"
+
+#: fields/background/background.php:169
+msgid "Right Center"
+msgstr "右中"
+
+#: fields/background/background.php:170
+msgid "Right Bottom"
+msgstr "右下"
+
+#: fields/background/background.php:184
+msgid "Background Repeat"
+msgstr "背景重复"
+
+#: fields/background/background.php:185
+msgid "Repeat"
+msgstr "重复"
+
+#: fields/background/background.php:186
+msgid "No Repeat"
+msgstr "不重复"
+
+#: fields/background/background.php:187
+msgid "Repeat Horizontally"
+msgstr "水平重复"
+
+#: fields/background/background.php:188
+msgid "Repeat Vertically"
+msgstr "垂直重复"
+
+#: fields/background/background.php:202
+msgid "Background Attachment"
+msgstr "背景附件"
+
+#: fields/background/background.php:203
+msgid "Scroll"
+msgstr "滚动"
+
+#: fields/background/background.php:204
+msgid "Fixed"
+msgstr "固定"
+
+#: fields/background/background.php:218
+msgid "Background Size"
+msgstr "背景大小"
+
+#: fields/background/background.php:219
+msgid "Cover"
+msgstr "覆盖"
+
+#: fields/background/background.php:220
+msgid "Contain"
+msgstr "包含"
+
+#: fields/background/background.php:221
+msgid "Auto"
+msgstr "自动"
+
+#: fields/background/background.php:235
+msgid "Background Origin"
+msgstr "背景起源"
+
+#: fields/background/background.php:236 fields/background/background.php:254
+msgid "Padding Box"
+msgstr "框内边距"
+
+#: fields/background/background.php:237 fields/background/background.php:253
+msgid "Border Box"
+msgstr "边框"
+
+#: fields/background/background.php:238 fields/background/background.php:255
+msgid "Content Box"
+msgstr "内容框"
+
+#: fields/background/background.php:252
+msgid "Background Clip"
+msgstr "背景剪辑"
+
+#: fields/background/background.php:269
+msgid "Background Blend Mode"
+msgstr "背景混合模式"
+
+#: fields/background/background.php:270 fields/link_color/link_color.php:36
+#: fields/typography/typography.php:186
+msgid "Normal"
+msgstr "正常"
+
+#: fields/background/background.php:271
+msgid "Multiply"
+msgstr "乘"
+
+#: fields/background/background.php:272
+msgid "Screen"
+msgstr "屏幕"
+
+#: fields/background/background.php:273
+msgid "Overlay"
+msgstr "覆盖"
+
+#: fields/background/background.php:274
+msgid "Darken"
+msgstr "变黑"
+
+#: fields/background/background.php:275
+msgid "Lighten"
+msgstr "减轻"
+
+#: fields/background/background.php:276
+msgid "Color Dodge"
+msgstr "颜色减淡"
+
+#: fields/background/background.php:277
+msgid "Saturation"
+msgstr "饱和度"
+
+#: fields/background/background.php:278
+msgid "Color"
+msgstr "颜色"
+
+#: fields/background/background.php:279
+msgid "Luminosity"
+msgstr "光度"
+
+#: fields/backup/backup.php:26
+msgid "Import"
+msgstr "导入"
+
+#: fields/backup/backup.php:29
+msgid "Export & Download"
+msgstr "导出和下载"
+
+#: fields/border/border.php:25 fields/spacing/spacing.php:25
+msgid "top"
+msgstr "顶部"
+
+#: fields/border/border.php:26 fields/spacing/spacing.php:26
+msgid "right"
+msgstr "右"
+
+#: fields/border/border.php:27 fields/spacing/spacing.php:27
+msgid "bottom"
+msgstr "底部"
+
+#: fields/border/border.php:28 fields/spacing/spacing.php:28
+msgid "left"
+msgstr "左"
+
+#: fields/border/border.php:29 fields/spacing/spacing.php:29
+msgid "all"
+msgstr "所有"
+
+#: fields/border/border.php:51 fields/typography/typography.php:214
+msgid "Solid"
+msgstr "实线"
+
+#: fields/border/border.php:52 fields/typography/typography.php:217
+msgid "Dashed"
+msgstr "虚线"
+
+#: fields/border/border.php:53 fields/typography/typography.php:216
+msgid "Dotted"
+msgstr "点线"
+
+#: fields/border/border.php:54 fields/typography/typography.php:215
+msgid "Double"
+msgstr "双线"
+
+#: fields/border/border.php:55
+msgid "Inset"
+msgstr "插入"
+
+#: fields/border/border.php:56
+msgid "Outset"
+msgstr "开始"
+
+#: fields/border/border.php:57
+msgid "Groove"
+msgstr "凹槽"
+
+#: fields/border/border.php:58
+msgid "ridge"
+msgstr "凸出"
+
+#: fields/border/border.php:59 fields/typography/typography.php:199
+#: fields/typography/typography.php:213
+msgid "None"
+msgstr "无"
+
+#: fields/dimensions/dimensions.php:22
+msgid "width"
+msgstr "宽度"
+
+#: fields/dimensions/dimensions.php:23
+msgid "height"
+msgstr "高度"
+
+#: fields/gallery/gallery.php:20
+msgid "Add Gallery"
+msgstr "添加图库"
+
+#: fields/gallery/gallery.php:21
+msgid "Edit Gallery"
+msgstr "编辑图库"
+
+#: fields/gallery/gallery.php:22
+msgid "Clear"
+msgstr "清除"
+
+#: fields/group/group.php:35 fields/repeater/repeater.php:27
+msgid "Error: Field ID conflict."
+msgstr "错误:字段ID冲突。"
+
+#: fields/group/group.php:46 fields/group/group.php:87
+#: fields/repeater/repeater.php:48 fields/repeater/repeater.php:76
+msgid "Are you sure to delete this item?"
+msgstr "确定要删除这个项目吗?"
+
+#: fields/group/group.php:121 fields/repeater/repeater.php:89
+msgid "You cannot add more."
+msgstr "无法添加更多"
+
+#: fields/group/group.php:122 fields/repeater/repeater.php:90
+msgid "You cannot remove more."
+msgstr "无法删除更多"
+
+#: fields/icon/icon.php:20 fields/icon/icon.php:53
+msgid "Add Icon"
+msgstr "添加图标"
+
+#: fields/icon/icon.php:21
+msgid "Remove Icon"
+msgstr "删除图标"
+
+#: fields/link/link.php:20
+msgid "Add Link"
+msgstr "添加链接"
+
+#: fields/link/link.php:21
+msgid "Edit Link"
+msgstr "编辑链接"
+
+#: fields/link/link.php:22
+msgid "Remove Link"
+msgstr "移除链接"
+
+#: fields/link_color/link_color.php:37
+msgid "Hover"
+msgstr "悬停"
+
+#: fields/link_color/link_color.php:38
+msgid "Active"
+msgstr "启用"
+
+#: fields/link_color/link_color.php:39
+msgid "Visited"
+msgstr "访问"
+
+#: fields/link_color/link_color.php:40
+msgid "Focus"
+msgstr "焦点"
+
+#: fields/map/map.php:24
+msgid "Latitude"
+msgstr "纬度"
+
+#: fields/map/map.php:25
+msgid "Longitude"
+msgstr "经度"
+
+#: fields/media/media.php:25 fields/upload/upload.php:25
+msgid "Upload"
+msgstr "上传"
+
+#: fields/media/media.php:26 fields/upload/upload.php:26
+msgid "Remove"
+msgstr "删除"
+
+#: fields/sorter/sorter.php:21
+msgid "Enabled"
+msgstr "启用"
+
+#: fields/sorter/sorter.php:22
+msgid "Disabled"
+msgstr "禁用"
+
+#: fields/switcher/switcher.php:20
+msgid "On"
+msgstr "启用"
+
+#: fields/switcher/switcher.php:21
+msgid "Off"
+msgstr "禁用"
+
+#: fields/typography/typography.php:96
+msgid "Font Family"
+msgstr "字体"
+
+#: fields/typography/typography.php:97
+msgid "Select a font"
+msgstr "选择字体"
+
+#: fields/typography/typography.php:105
+msgid "Backup Font Family"
+msgstr "备份字体系列"
+
+#: fields/typography/typography.php:119 fields/typography/typography.php:132
+#: fields/typography/typography.php:145 fields/typography/typography.php:160
+#: fields/typography/typography.php:176 fields/typography/typography.php:189
+#: fields/typography/typography.php:203 fields/typography/typography.php:221
+msgid "Default"
+msgstr "默认"
+
+#: fields/typography/typography.php:130
+msgid "Font Style"
+msgstr "字体样式"
+
+#: fields/typography/typography.php:144 fields/typography/typography.php:145
+msgid "Load Extra Styles"
+msgstr "加载额外样式"
+
+#: fields/typography/typography.php:158
+msgid "Subset"
+msgstr "子集"
+
+#: fields/typography/typography.php:168
+msgid "Text Align"
+msgstr "文本对齐"
+
+#: fields/typography/typography.php:170
+msgid "Inherit"
+msgstr "继承"
+
+#: fields/typography/typography.php:171
+msgid "Left"
+msgstr "左侧"
+
+#: fields/typography/typography.php:172
+msgid "Center"
+msgstr "居中"
+
+#: fields/typography/typography.php:173
+msgid "Right"
+msgstr "右侧"
+
+#: fields/typography/typography.php:174
+msgid "Justify"
+msgstr "两端对齐"
+
+#: fields/typography/typography.php:175
+msgid "Initial"
+msgstr "初始"
+
+#: fields/typography/typography.php:184
+msgid "Font Variant"
+msgstr "字体变体"
+
+#: fields/typography/typography.php:187
+msgid "Small Caps"
+msgstr "小写"
+
+#: fields/typography/typography.php:188
+msgid "All Small Caps"
+msgstr "所有字母小写"
+
+#: fields/typography/typography.php:197
+msgid "Text Transform"
+msgstr "文本转换"
+
+#: fields/typography/typography.php:200
+msgid "Capitalize"
+msgstr "大写"
+
+#: fields/typography/typography.php:201
+msgid "Uppercase"
+msgstr "大写"
+
+#: fields/typography/typography.php:202
+msgid "Lowercase"
+msgstr "小写"
+
+#: fields/typography/typography.php:211
+msgid "Text Decoration"
+msgstr "文本装饰"
+
+#: fields/typography/typography.php:218
+msgid "Wavy"
+msgstr "波浪"
+
+#: fields/typography/typography.php:219
+msgid "Overline"
+msgstr "上划线"
+
+#: fields/typography/typography.php:220
+msgid "Line-through"
+msgstr "删除线"
+
+#: fields/typography/typography.php:233
+msgid "Font Size"
+msgstr "字体大小"
+
+#: fields/typography/typography.php:245
+msgid "Line Height"
+msgstr "线高度"
+
+#: fields/typography/typography.php:257
+msgid "Letter Spacing"
+msgstr "字母间距"
+
+#: fields/typography/typography.php:269
+msgid "Word Spacing"
+msgstr "字间距"
+
+#: fields/typography/typography.php:284
+msgid "Font Color"
+msgstr "字体颜色"
+
+#: fields/typography/typography.php:295
+msgid "Custom Style"
+msgstr "自定义样式"
+
+#: fields/typography/typography.php:362
+msgid "Custom Web Fonts"
+msgstr "自定义 Web 字体"
+
+#: fields/typography/typography.php:368
+msgid "Safe Web Fonts"
+msgstr "Web 安全字体"
+
+#: fields/typography/typography.php:388
+msgid "Google Web Fonts"
+msgstr "Google Web 字体"
+
+#: functions/actions.php:72 functions/actions.php:110
+msgid "Error: Invalid key."
+msgstr "错误:无效密钥。"
+
+#: functions/actions.php:114
+msgid "Error: The response is not a valid JSON response."
+msgstr "错误:响应不是有效的 JSON 响应。"
+
+#: functions/actions.php:174
+msgid "Error: Invalid term ID."
+msgstr "错误:无效的项目ID。"
+
+#: functions/actions.php:180
+msgid "Error: You do not have permission to do that."
+msgstr "错误:您无权这样做。"
+
+#: functions/validate.php:14 functions/validate.php:86
+msgid "Please enter a valid email address."
+msgstr "请输入正确的电子邮件地址。"
+
+#: functions/validate.php:32 functions/validate.php:106
+msgid "Please enter a valid number."
+msgstr "请输入有效的数字"
+
+#: functions/validate.php:50 functions/validate.php:126
+msgid "This field is required."
+msgstr "这是必填栏。"
+
+#: functions/validate.php:68 functions/validate.php:146
+msgid "Please enter a valid URL."
+msgstr "请输入有效网址"
+
+#. Plugin Name of the plugin/theme
+msgid "Wp_china_yes Framework"
+msgstr "Wp_china_yes Framework"
+
+#. Plugin URI of the plugin/theme
+msgid "http://wp_china_yesframework.com/"
+msgstr "http://wp_china_yesframework.com/"
+
+#. Description of the plugin/theme
+msgid "A Simple and Lightweight WordPress Option Framework for Themes and Plugins"
+msgstr "一个简单且轻量的 WordPress 主题和插件选项框架"
+
+#. Author of the plugin/theme
+msgid "Wp_china_yes"
+msgstr "Wp_china_yes"
+
+#. Author URI of the plugin/theme
+msgid "http://wp_china_yesthemes.com/"
+msgstr "http://wp_china_yesthemes.com/"
diff --git a/helpers.php b/helpers.php
old mode 100644
new mode 100755
index e3e545d..2b770f1
--- a/helpers.php
+++ b/helpers.php
@@ -9,12 +9,19 @@ function get_settings() {
$settings = is_multisite() ? get_site_option( 'wp_china_yes' ) : get_option( 'wp_china_yes' );
return wp_parse_args( $settings, [
- 'store' => 'wenpai',
- 'admincdn' => [
- 'admin' => 'admin',
- ],
- 'cravatar' => 'cn',
- 'windfonts' => 'off',
- 'adblock' => 'off',
+ 'store' => 'wenpai',
+ 'admincdn' => [ 'admin' ],
+ 'cravatar' => 'cn',
+ 'windfonts' => 'off',
+ 'windfonts_list' => [],
+ 'windfonts_typography' => [],
+ 'adblock' => 'off',
+ 'adblock_rule' => [],
+ 'plane' => 'off',
+ 'plane_rule' => [],
+ 'monitor' => true,
+ 'memory' => true,
+ 'hide' => false,
+ 'custom_name' => 'WP-China-Yes',
] );
}
diff --git a/readme.md b/readme.md
index 0cd9af6..1fc4ced 100644
--- a/readme.md
+++ b/readme.md
@@ -1,10 +1,15 @@
-# WP-China-Yes
+## 开源 WordPress 中国网站加速器。
-文派叶子 🍃(WP-China-Yes)是中国 WordPress 生态基础设施软件,犹如落叶新芽,生生不息。
+文派叶子 🍃(WPCY.COM)是中国 WordPress 生态基础设施软件,犹如落叶新芽,生生不息。专为解决困扰了中国互联网数十年的特色问题而存在。此为文派开源(WenPai.org)的一部分。
+
+
+
## 简介
+文派叶子 🍃(WPCY.COM)是一款不可多得的 WordPress 系统底层优化和生态基础设施软件。文派(WordPress)中国本土化项目始于 2019 年,由 文派叶子🍃(WPCY) 插件开启,其前身为 WP-China-Yes。
+
+2023 年 4 月,文派科技完成对该项目的收购,并对其进行了全面的品牌重塑。
-文派叶子 🍃(WP-China-Yes)是一款不可多得的 WordPress 系统底层优化和生态基础设施软件。项目起源于 2019 年,专为解决困扰了中国互联网数十年的特色问题而存在。此为文派开源(WenPai.org)的一部分。
## 功能
@@ -12,10 +17,18 @@
- [x] 优化 WordPress 后台加载速度
- [x] 优化 WordPress 前台加载速度
- [x] 移除后台无用请求与组件
-- [x] 替换 Gravatar 头像为[初认头像](https://cravatar.com/)
+- [x] 替换 Gravatar 头像为 Cravatar [初认头像](https://cravatar.com/)
- [x] 优化 谷歌字体 加载速度
- [x] 优化 谷歌前端库 加载速度
- [x] 优化 CDNJS 加载速度
+- [x] 优化 Jsdelivr 加载速度
+- [x] 集成 WPMirror 镜像更新源
+- [x] 集成 Windfonts 中文网页 Webfonts [文风字体](https://windfonts.com)
+- [x] 集成 adminCDN 前端公共库 [萌芽加速](https://admincdn.com)
+- [x] 启用 飞行模式 可屏蔽外部 API 请求
+- [x] 启用 节点监控 可自动切换加速节点
+- [x] 启用 品牌白标 可自定义 OEM 插件品牌
+
## 安装
@@ -33,12 +46,8 @@
## 赞助商
-
-
-
-
-
-
-
-
-
+
+
+---
+
+**Copyright © 2025 · WPCY.COM , All Rights Reserved. 文派 (广州) 科技有限公司;**
diff --git a/templates/about-section.php b/templates/about-section.php
new file mode 100755
index 0000000..ffbf1ed
--- /dev/null
+++ b/templates/about-section.php
@@ -0,0 +1,48 @@
+
+
+
+
+
项目简介
+
文派(WordPress)中国本土化项目始于 2019 年,由 文派叶子🍃(WPCY) 插件开启,其前身为 WP-China-Yes。
+
+
+
2023 年 4 月,文派科技完成对该项目的收购,并对其进行了全面的品牌重塑。
+
+
+
+
+
赞助支持
+
特别感谢以下企业品牌对文派项目提供的资金资源支持。早期伙伴未来有机会共享文派生态资源,期待社会各界参与。
+
+
+
+
+
+
+
开发 & 贡献者
+
100% 开源代码,诚邀您一起参与文派 (WordPress) 软件国产化进程,打造属于自己的开源自助建站程序。
+
+
+
+
+
+
diff --git a/templates/maintenance-default.php b/templates/maintenance-default.php
new file mode 100755
index 0000000..9f314bf
--- /dev/null
+++ b/templates/maintenance-default.php
@@ -0,0 +1,20 @@
+// templates/maintenance-default.php
+
+>
+
+
+
+
+
+
+
+
+
+
diff --git a/templates/website-section.php b/templates/website-section.php
new file mode 100755
index 0000000..9b31c7f
--- /dev/null
+++ b/templates/website-section.php
@@ -0,0 +1,21 @@
+
+
+
+
+
开源建站
+
文派寻鹿🦌(WP Deer)建站套件是由文派科技官方提供的企业建站产品集合,代码均为 100% GPL 开源,无任何加密隐藏。
+
+
+
+
+
+
diff --git a/templates/welcome-section.php b/templates/welcome-section.php
new file mode 100755
index 0000000..b3f8783
--- /dev/null
+++ b/templates/welcome-section.php
@@ -0,0 +1,56 @@
+
+
+
+
+
原生体验
+
文派叶子🍃(WP-China-Yes)是一款不可多得的 WordPress 系统底层优化和生态基础设施软件。
+
+

+
+
特色功能
+
+
* 100% 兼容 WP 程序及分支发行版本,更多优秀插件待您体验。
+
+
+
+
+
网站加速
+
优化加速插件多如牛毛,为何文派叶子如此与众不同?
进一步了解 ↗
+
+
翻译推送
+
高质量翻译中文本地化翻译由文派开源官方提供,欢迎参与改进。
本地化改进 ↗
+
+
广告屏蔽
+
呈现清爽整洁的网站后台,清除侵入式后台广告、无用信息。
获取广告规则 ↗
+
+
+
+
加入我们
+
关注文派茶馆 WPTEA.com 公众号以及订阅我们的时事通讯即可接收独家内容、提示和更新。
+

+
+
+
+
diff --git a/wp-china-yes.php b/wp-china-yes.php
old mode 100644
new mode 100755
index fe0b3e5..d45f19b
--- a/wp-china-yes.php
+++ b/wp-china-yes.php
@@ -3,15 +3,15 @@
* Plugin Name: WP-China-Yes
* Description: 文派叶子 🍃(WP-China-Yes)是中国 WordPress 生态基础设施软件,犹如落叶新芽,生生不息。
* Author: 文派开源
- * Author URI: https://wp-china-yes.com
- * Version: 3.6.2
+ * Author URI: https://wpcy.com
+ * Version: 3.8.1
* License: GPLv3 or later
* Text Domain: wp-china-yes
* Domain Path: /languages
* Network: True
* Requires at least: 4.9
* Tested up to: 9.9.9
- * Requires PHP: 5.6.0
+ * Requires PHP: 7.0.0
* License URI: http://www.gnu.org/licenses/gpl-3.0.html
*/
@@ -19,16 +19,37 @@ namespace WenPai\ChinaYes;
defined( 'ABSPATH' ) || exit;
-define( 'CHINA_YES_VERSION', '3.6.2' );
+define( 'CHINA_YES_VERSION', '3.8' );
define( 'CHINA_YES_PLUGIN_FILE', __FILE__ );
define( 'CHINA_YES_PLUGIN_URL', plugin_dir_url( CHINA_YES_PLUGIN_FILE ) );
define( 'CHINA_YES_PLUGIN_PATH', plugin_dir_path( CHINA_YES_PLUGIN_FILE ) );
-require_once( plugin_dir_path( CHINA_YES_PLUGIN_FILE ) . 'vendor/autoload.php' );
+if (file_exists(CHINA_YES_PLUGIN_PATH . 'vendor/autoload.php')) {
+ // 尽早初始化性能设置
+ $settings = get_option('wenpai_china_yes'); // 替换成您实际的设置选项名
+ if (!empty($settings)) {
+ if (!defined('WP_MEMORY_LIMIT') && !empty($settings['wp_memory_limit'])) {
+ define('WP_MEMORY_LIMIT', $settings['wp_memory_limit']);
+ @ini_set('memory_limit', $settings['wp_memory_limit']);
+ }
+ if (!defined('WP_MAX_MEMORY_LIMIT') && !empty($settings['wp_max_memory_limit'])) {
+ define('WP_MAX_MEMORY_LIMIT', $settings['wp_max_memory_limit']);
+ }
+ if (!defined('WP_POST_REVISIONS') && isset($settings['wp_post_revisions'])) {
+ define('WP_POST_REVISIONS', intval($settings['wp_post_revisions']));
+ }
+ if (!defined('AUTOSAVE_INTERVAL') && !empty($settings['autosave_interval'])) {
+ define('AUTOSAVE_INTERVAL', intval($settings['autosave_interval']));
+ }
+ }
+
+ require_once(CHINA_YES_PLUGIN_PATH . 'vendor/autoload.php');
+}
// 注册插件激活钩子
register_activation_hook( CHINA_YES_PLUGIN_FILE, [ Plugin::class, 'activate' ] );
// 注册插件删除钩子
register_uninstall_hook( CHINA_YES_PLUGIN_FILE, [ Plugin::class, 'uninstall' ] );
+
new Plugin();