diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000..ecbc059
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ , 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..90dbb1e
--- /dev/null
+++ b/README.md
@@ -0,0 +1,125 @@
+[![Codestar Framework](http://s3.codestarthemes.com/codecanyon/23079100/github-banner.png)](http://codestarframework.com/)
+
+# Codestar Framework
+A Simple and Lightweight WordPress Option Framework for Themes and Plugins. Built in Object Oriented Programming paradigm with high number of custom fields and tons of options. Allows you to bring custom admin, metabox, taxonomy and customize settings to all of your pages, posts and categories. It's highly modern and advanced framework.
+
+## Contents
+- [Demo](#demo)
+- [Installation](#installation)
+- [Quick Start](#quick-start)
+- [Documentation](#documentation)
+- [Free vs Premium](#free-vs-premium)
+- [Support](#support)
+- [Release Notes](#release-notes)
+- [License](#license)
+
+## Demo
+For usage and examples, have a look at :rocket: [online demo](http://codestarthemes.com/plugins/codestar-framework/wp-login.php?login=demo)
+
+## Installation
+
+1. Download the installable WordPress plugin zip.
+2. Upload and active plugin from `WordPress` → `Plugins` → `Add New`
+3. After activation, next step is to configure your settings. You can do it from here :gear: [configurations](http://codestarframework.com/documentation/#/configurations)
+
+## Quick Start
+
+Open your current theme **functions.php** file and paste this code.
+
+```php
+// Check core class for avoid errors
+if( class_exists( 'CSF' ) ) {
+
+ // Set a unique slug-like ID
+ $prefix = 'my_framework';
+
+ // Create options
+ CSF::createOptions( $prefix, array(
+ 'menu_title' => 'My Framework',
+ 'menu_slug' => 'my-framework',
+ ) );
+
+ // Create a section
+ CSF::createSection( $prefix, array(
+ 'title' => 'Tab Title 1',
+ 'fields' => array(
+
+ // A text field
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Simple Text',
+ ),
+
+ )
+ ) );
+
+ // Create a section
+ CSF::createSection( $prefix, array(
+ 'title' => 'Tab Title 2',
+ 'fields' => array(
+
+ // A textarea field
+ array(
+ 'id' => 'opt-textarea',
+ 'type' => 'textarea',
+ 'title' => 'Simple Textarea',
+ ),
+
+ )
+ ) );
+
+}
+```
+How to get option value ?
+```php
+$options = get_option( 'my_framework' ); // unique id of the framework
+
+echo $options['opt-text']; // id of the field
+echo $options['opt-textarea']; // id of the field
+```
+
+## Documentation
+Read the documentation for details :closed_book: [documentation](http://codestarframework.com/documentation/)
+
+## Free vs Premium
+
+| Features | Free Version | Premium Version
+|:-----------------------------|:------------------:|:-----------------:
+| Admin Option Framework | :heavy_check_mark: | :heavy_check_mark:
+| Customize Option Framework | :x: | :heavy_check_mark:
+| Metabox Option Framework | :x: | :heavy_check_mark:
+| Nav Menu Option Framework | :x: | :heavy_check_mark:
+| Taxonomy Option Framework | :x: | :heavy_check_mark:
+| Profile Option Framework | :x: | :heavy_check_mark:
+| Comment Option Framework | :x: | :heavy_check_mark:
+| Widget Option Framework | :x: | :heavy_check_mark:
+| Shortcode Option Framework | :x: | :heavy_check_mark:
+| All Option Fields | :x: | :heavy_check_mark:
+| Developer Packages | :x: | :heavy_check_mark:
+| Unminfy Library | :x: | :heavy_check_mark:
+| New Requests | :x: | :heavy_check_mark:
+| Autoremove Advertisements | :x: | :heavy_check_mark:
+| Life-time access/updates | :x: | :heavy_check_mark:
+| | | :star2: Upgrade Premium Version
+
+## Available Option Fields
+
+| Accordion | Color | Icon | Select | Tabbed
+|:------------|:------------|:-------------|:---------|:---
+| Background | Color Group | Image Select | Slider | Text
+| Backup | Date | Link Color | Sortable | Textarea
+| Border | Dimensions | Media | Sorter | Typography
+| Button Set | Fieldset | Palette | Spacing | Upload
+| Checkbox | Gallery | Radio | Spinner | WP Editor
+| Code Editor | Group | Repeater | Switcher | Others
+
+## Support
+
+We are provide [support forum](http://support.codestarthemes.com/) for premium version users. You can join to support forum for submit any question after purchasing. Free version users support is limited on [github](https://github.com/Codestar/codestar-framework/issues).
+
+## Release Notes
+Check out the [release notes](http://codestarframework.com/documentation/#/relnotes)
+
+## License
+Codestar Framework have two different version. Free version has limited features and offers only admin option panel feature. Premium version offers all extensions and more of settings for the best experience and advanced features. You can bundle the framework ( both free and premium ) in the premium theme/plugin and sell them on your own website or in marketplaces like ThemeForest. This framework is licensed 100% GPL.
diff --git a/assets/css/style-rtl.min.css b/assets/css/style-rtl.min.css
new file mode 100644
index 0000000..e1059d3
--- /dev/null
+++ b/assets/css/style-rtl.min.css
@@ -0,0 +1 @@
+.csf-options{margin-left:20px;margin-right:0}.csf-header h1{float:right}.csf-header fieldset{float:left}.csf-buttons{float:left;direction:ltr}.csf-header-left{float:right}.csf-header-right{float:left}.csf-nav{float:right}.csf-nav ul{clear:right}.csf-nav ul li .csf-active:after{right:auto;left:0;border-left-color:#fff;border-right-color:transparent}.csf-nav ul li .csf-arrow:after{content:"\f053";right:auto;left:10px}.csf-nav ul li.csf-tab-expanded .csf-arrow:after{-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.csf-nav ul ul li a{padding-right:25px;padding-left:15px}.csf-nav ul ul:before{left:auto;right:15px}.csf-nav .csf-tab-icon{margin-left:5px;margin-right:0}.csf-nav-background{left:auto;right:0}.csf-content{margin-left:0;margin-right:225px}.csf-sections{float:right}.csf-show-all .csf-content{margin-right:0;overflow:hidden}.csf-expand-all{float:right;right:auto;left:40px;margin-right:0;margin-left:4px}.csf-search{float:right}.csf-search input{margin:0 0 0 5px}.csf-copyright{float:right}.csf-metabox{margin:-6px -12px -12px -12px}.csf-metabox .csf-section-title{padding:20px}.csf-section-title .csf-section-icon{margin-left:5px;margin-right:0}.csf-field .csf-title{float:right}.csf-field .csf-fieldset{float:left}.csf-pseudo-field{padding:0 0 0 5px!important}.csf-field-typography select{margin:0;width:100%}.csf-field-typography .csf--blocks-inputs .csf--blocks{flex-direction:row-reverse}.csf-field-checkbox ul ul li,.csf-field-radio ul ul li{margin-left:0;margin-right:8px}.csf-field-checkbox ul ul li:first-child,.csf-field-radio ul ul li:first-child{margin-right:0}.csf-field-checkbox .csf--inline-list li,.csf-field-radio .csf--inline-list li{margin-right:0;margin-left:15px}.csf-field-checkbox .csf--text,.csf-field-radio .csf--text{margin-left:0;margin-right:5px}.csf-field-switcher .csf--switcher{float:right}.csf-field-switcher .csf--label{float:right;margin-left:0;margin-right:5px}.csf-field-upload .csf--button,.csf-field-upload .csf--remove{margin-left:0;margin-right:5px}.csf-field-group .csf-cloneable-title{padding:15px 10px 15px 65px}.csf-field-group .csf-cloneable-helper{right:auto;left:10px}.csf-field-repeater .csf-repeater-helper{border-left:0;border-right:1px solid #eee}.csf-help{right:auto;left:5px}.csf-field-icon .button{margin-right:0;margin-left:5px}.csf-field-icon .csf-icon-preview i{margin-right:0;margin-left:5px}.csf-field-gallery ul li{margin-right:0;margin-left:5px}.csf-field-gallery .button{margin-right:0;margin-left:5px}.csf-field-tabbed .csf-tabbed-nav .csf--icon{padding-right:0;padding-left:5px}.csf-field-tabbed .csf-tabbed-nav a{margin-right:0;margin-left:5px}.csf-field-media .button{margin-left:0;margin-right:7px}.csf-field-media .hidden+.button{margin-right:0}.csf-notice{border-left:none;border-right-style:solid;border-right-width:4px}.csf-field-border .csf--input,.csf-field-border .csf-fieldset,.csf-field-dimensions .csf--input,.csf-field-dimensions .csf-fieldset,.csf-field-spacing .csf--input,.csf-field-spacing .csf-fieldset{direction:ltr}.csf-field-border .csf--color,.csf-field-border .csf--inputs,.csf-field-dimensions .csf--color,.csf-field-dimensions .csf--inputs,.csf-field-spacing .csf--color,.csf-field-spacing .csf--inputs{float:right}.csf-field-border .csf--color,.csf-field-dimensions .csf--color,.csf-field-spacing .csf--color{margin-right:4px;direction:rtl}.csf-field-background .csf--block{float:right}.csf-field-background .csf--media,.csf-field-background .csf--select{padding-right:0}.csf-field-background .csf--title{margin-right:0;margin-left:5px}.csf-field-spinner .csf--spin{float:right;direction:ltr}.csf-field-slider .csf-slider-ui{direction:ltr;margin-right:0;margin-left:15px}.csf-field-slider .csf--input{direction:ltr}.csf-field-button_set .csf--button-group{float:right}.csf-field-link_color .csf--left{float:right;margin-right:0;margin-left:10px}.csf-field-color_group .csf--left{float:right;margin-right:0;margin-left:10px}.csf-field-palette .csf--palette{margin-right:0;margin-left:10px}.csf-field-accordion .csf--icon{margin-right:0;margin-left:2px}.csf-field-date .csf--to{margin-left:0;margin-right:7px}.csf-field-map .csf--map-input:last-child{padding-left:0;padding-right:10px}.csf-field-sortable .csf--sortable-helper{border-left:none;border-right:1px solid #eee}.csf-field-number .csf--wrap{float:right}.csf-taxonomy-add-fields{margin-right:0;margin-left:30px}.csf-taxonomy-add-fields .csf-field>.csf-fieldset>.csf-help{left:-5px;right:auto}.csf-taxonomy-edit-fields{margin-right:0;margin-left:35px}.csf-taxonomy-edit-fields .csf-field>.csf-fieldset>.csf-help{right:auto;left:-5px}.csf-profile-options>h2>.fa{padding-right:0;padding-left:7px}.csf-profile-options>.csf-field>.csf-fieldset>.csf-help{left:-5px;right:auto}.csf-nav-menu-options>.csf-fields{margin-left:0;margin-right:-10px}.csf-nav-menu-title{padding-left:14px;padding-right:12px}.csf-nav-menu-icon{margin-right:0;margin-left:5px}.csf-modal-content .csf-field{padding:15px 15px 15px 30px}.csf-modal-title{padding:0 16px 0 36px}.csf-modal-close{right:auto;left:0}.control-section .csf-field .csf-fieldset{margin-right:0}@media only screen and (max-width:1200px){.csf-metabox .csf-field .csf-fieldset{margin-left:0}}@media only screen and (max-width:782px){.csf .csf-content,.csf .csf-fieldset{margin-right:0}}.csf-field .csf--transparent-slider{margin-left:0;margin-right:2px}.csf-field .csf--transparent-slider .ui-slider-handle{margin:0 -11px}.csf-field .csf--transparent-offset{background-position:center right}.csf-field .csf--transparent-text{right:auto;left:10px}
\ No newline at end of file
diff --git a/assets/css/style.min.css b/assets/css/style.min.css
new file mode 100644
index 0000000..0302996
--- /dev/null
+++ b/assets/css/style.min.css
@@ -0,0 +1 @@
+.csf{position:relative}.csf label{padding:0;margin:0;display:inline-block}.csf-ab-icon{top:2px}#screen-meta-links+.csf-options{margin-top:40px}.csf-options{margin-top:20px;margin-right:20px}.csf-header{position:relative}.csf-header-inner{padding:25px;transition:box-shadow .3s ease}.csf-header-inner h1{float:left;font-size:1.5em;line-height:26px;font-weight:400;margin:0}.csf-header-inner h1 small{font-size:11px;font-weight:500}.csf-sticky .csf-header-inner{position:fixed;z-index:99;top:32px;-moz-box-shadow:0 5px 10px rgba(0,0,0,.1);-webkit-box-shadow:0 5px 10px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.1)}.csf-buttons{float:right;-moz-transition:opacity .2s;-o-transition:opacity .2s;-webkit-transition:opacity .2s;transition:opacity .2s}.csf-buttons .button{margin:0 2px;line-height:26px}.csf-buttons .button:focus{outline:0!important;box-shadow:none!important}.csf-buttons .csf-save{min-width:72px}.csf-header-left{float:left}.csf-header-right{float:right}.csf-nav{display:block;position:relative;z-index:10;float:left;width:225px}.csf-nav ul{clear:left;margin:0;list-style-type:none}.csf-nav ul li{margin-bottom:0}.csf-nav ul li a{font-size:13px;position:relative;display:block;padding:14px 12px;text-decoration:none;transition-property:color;transition-duration:.2s;transition-timing-function:ease}.csf-nav ul li a:focus{outline:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.csf-nav ul li .csf-arrow:after{content:"\f054";display:inline-block;font-family:"Font Awesome 5 Pro","Font Awesome 5 Free",FontAwesome;font-weight:900;font-size:9px;line-height:1;position:absolute;right:10px;top:50%;margin-top:-4px;-moz-transform:rotate(0);-ms-transform:rotate(0);-webkit-transform:rotate(0);transform:rotate(0)}.csf-nav ul li.csf-tab-expanded .csf-arrow:after{-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-webkit-transform:rotate(90deg);transform:rotate(90deg)}.csf-nav ul li.csf-tab-expanded ul{display:block}.csf-nav ul ul{display:none;position:relative}.csf-nav ul ul li a{font-size:12px;padding:12px 14px 12px 24px}.csf-nav .csf-tab-icon{width:20px;margin-right:5px;font-size:13px;text-align:center}.csf-nav .csf-label-error{margin-left:4px;vertical-align:top}.csf-nav-background{position:absolute;top:0;left:0;bottom:0;z-index:9;width:225px}.csf-wrapper{position:relative}.csf-content{position:relative;margin-left:225px;background-color:#fff;-moz-transition:opacity .2s;-o-transition:opacity .2s;-webkit-transition:opacity .2s;transition:opacity .2s}.csf-sections{float:left;width:100%}.csf-section{display:none}.csf-section-title{display:none;padding:20px 30px;background-color:#f5f5f5;border-top:1px solid #eee;border-bottom:1px solid #eee}.csf-section-title h3{margin:0;padding:0;font-size:13px;font-weight:700;text-transform:uppercase}.csf-section-title .csf-section-icon{margin-right:5px}.csf-footer{padding:20px;font-size:11px}.csf-copyright{float:left;margin-top:5px}.csf-search-all .csf-nav,.csf-search-all .csf-nav-background,.csf-show-all .csf-nav,.csf-show-all .csf-nav-background{display:none}.csf-search-all .csf-content,.csf-show-all .csf-content{margin-left:0}.csf-search-all .csf-section,.csf-search-all .csf-section-title,.csf-show-all .csf-section,.csf-show-all .csf-section-title{display:block!important}.csf-search-all .csf-section-title{display:none!important}.csf-expand-all{float:left;padding:0 8px;margin-right:4px;z-index:1;font-size:13px;line-height:30px;cursor:pointer;user-select:none;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-transition:all .2s;-o-transition:all .2s;-webkit-transition:all .2s;transition:all .2s}.csf-expand-all span{font-size:11px;vertical-align:middle}.csf-search{float:left}.csf-search input{margin:0 2px 0 0;border:none;font-size:12px;line-height:30px;min-height:30px;text-align:inherit;padding:0 10px;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.csf-search input:focus{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.csf-saving .csf-buttons,.csf-saving .csf-content{cursor:default;pointer-events:none;opacity:.5}.csf-metabox{margin:-6px -12px -12px -12px}.csf-metabox .csf-field{padding:20px}.csf-metabox .csf-section-title{padding:20px}.block-editor-page .csf-metabox{margin:-6px -14px -14px -14px}.block-editor-editor-skeleton__content .csf-metabox{border-left:1px solid #e2e4e7;border-right:1px solid #e2e4e7}.csf-sections-restore{float:left;width:100%;position:relative;z-index:1000000;text-align:right;border-top:1px solid #eee}.csf-sections-restore .csf-button-cancel,.csf-sections-restore input{display:none}.csf-sections-restore label{padding:10px}.csf-sections-restore span{-webkit-user-select:none;user-select:none}.csf-sections-restore input:checked~.csf-button-restore{display:none}.csf-sections-restore input:checked~.csf-button-cancel{display:inline-block}#side-sortables .csf-section-title{padding:12px}#side-sortables .csf-field{padding:10px 15px}#side-sortables .csf-field .csf-title{float:none;width:100%;margin-bottom:6px}#side-sortables .csf-field .csf-fieldset{float:none;width:100%}#side-sortables .csf-field-text input{width:100%}#side-sortables .csf-notice{padding:10px 15px}.csf-comment-metabox{margin:-6px -12px -12px -12px}.csf-comment-metabox .csf-field{padding:20px}.csf-comment-metabox .csf-section-title{padding:20px}.csf-tooltip{position:absolute;z-index:5000001;font-size:12px;line-height:1.4;text-align:center;text-decoration:none;padding:6px 12px;max-width:200px;color:#fff;background-color:#000;background-color:rgba(0,0,0,.85);-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px}.csf-theme-dark .csf-header-inner{background-color:#050505}.csf-theme-dark .csf-header-inner h1{color:#fff}.csf-theme-dark .csf-header-inner h1 small{color:#555}.csf-theme-dark .csf-expand-all{color:#999;background-color:#222}.csf-theme-dark .csf-expand-all:hover{color:#fff;background-color:#333}.csf-theme-dark .csf-search input{color:#fff;background-color:#222}.csf-theme-dark .csf-search:focus{background-color:#444}.csf-theme-dark .csf-search::-webkit-input-placeholder{color:#666}.csf-theme-dark .csf-nav ul li a{color:#999;background-color:#222;border-bottom:1px solid #2f2f2f}.csf-theme-dark .csf-nav ul li a:hover{color:#fff}.csf-theme-dark .csf-nav ul li .csf-active{color:#fff;background-color:#111}.csf-theme-dark .csf-nav ul li .csf-active:after{content:" ";position:absolute;right:0;top:50%;height:0;width:0;pointer-events:none;border:solid transparent;border-right-color:#fff;border-width:4px;margin-top:-4px}.csf-theme-dark .csf-nav ul ul li a{background-color:#191919;border-bottom:1px solid #2f2f2f}.csf-theme-dark .csf-nav ul ul li .csf-active{background-color:#101010}.csf-theme-dark .csf-nav ul ul:before{background-color:rgba(34,34,34,.75)}.csf-theme-dark .csf-nav>ul>li:last-child>a{border-bottom:none}.csf-theme-dark .csf-nav-background{background-color:#222}.csf-theme-dark .csf-footer{color:#555;background-color:#050505}.csf-theme-light .csf-container{border:1px solid #ccd0d4;-moz-box-shadow:0 0 15px rgba(0,0,0,.04);-webkit-box-shadow:0 0 15px rgba(0,0,0,.04);box-shadow:0 0 15px rgba(0,0,0,.04)}.csf-theme-light .csf-header-inner{border-bottom:1px solid #ccd0d4;background-color:#f5f5f5;background:linear-gradient(#fefefe,#f5f5f5)}.csf-theme-light .csf-header-inner h1 small{color:#999}.csf-theme-light .csf-expand-all{color:#999;background-color:#eee}.csf-theme-light .csf-expand-all:hover{color:#555}.csf-theme-light .csf-search input{color:#555;background-color:#eee}.csf-theme-light .csf-search input::-webkit-input-placeholder{color:#999}.csf-theme-light .csf-nav ul li a{color:#666;background-color:#f5f5f5;border-bottom:1px solid #ccd0d4}.csf-theme-light .csf-nav ul li a:hover{color:#222}.csf-theme-light .csf-nav ul li .csf-active{color:#222;background-color:#fff}.csf-theme-light .csf-nav ul li .csf-active:after{content:"";position:absolute;top:0;bottom:0;right:-1px;width:1px;background-color:#fff}.csf-theme-light .csf-nav ul ul li a{background-color:#eee;border-bottom:1px solid #ccd0d4}.csf-theme-light .csf-nav>ul>li:last-child>a{border-bottom:none}.csf-theme-light .csf-nav-background{background-color:#f5f5f5;border-right:1px solid #ccd0d4}.csf-theme-light .csf-footer{color:#555;border-top:1px solid #ccd0d4;background-color:#f5f5f5;background:linear-gradient(#fafafa,#f5f5f5)}.csf-field{position:relative;padding:30px}.csf-field+.csf-field{border-top:1px solid #eee}.csf-field p:first-child{margin-top:0}.csf-field p:last-child{margin-bottom:0}.csf-field:after,.csf-field:before{content:" ";display:table}.csf-field:after{clear:both}.csf-field h4{margin-top:0}.csf-field .csf-title{position:relative;width:20%;float:left}.csf-field .csf-title h4{margin:0;color:#23282d}.csf-field .csf-fieldset{float:right;width:calc(80% - 20px)}.csf-pseudo-field{padding:0 5px 0 0!important;display:inline-block}.csf-pseudo-field+.csf-pseudo-field{border:0}.csf-pseudo-field pre{display:none}.csf-field-accordion .csf-accordion-item{position:relative;margin-bottom:5px}.csf-field-accordion .csf-accordion-item:last-child{margin-bottom:0}.csf-field-accordion .csf-accordion-item h4{font-size:1em}.csf-field-accordion .csf-accordion-title{display:block;cursor:pointer;position:relative;margin:0;padding:15px;min-height:0;font-size:100%;user-select:none;border:1px solid #ccd0d4;background-color:#fafafa;box-shadow:0 1px 1px rgba(0,0,0,.04);transition:border-color .15s}.csf-field-accordion .csf-accordion-title:active,.csf-field-accordion .csf-accordion-title:focus,.csf-field-accordion .csf-accordion-title:hover{outline:0;border-color:#999}.csf-field-accordion .csf-accordion-title .csf--icon{width:20px;text-align:center;margin-right:2px}.csf-field-accordion .csf-accordion-icon{width:16px;text-align:center}.csf-field-accordion .csf-accordion-content{display:none;padding:0;border:1px solid #ccd0d4;border-top:none;background-color:#fff;box-shadow:0 1px 1px rgba(0,0,0,.04)}.csf-field-accordion .csf-accordion-content>.csf-field{padding:15px}.csf-field-accordion .csf-accordion-open{display:block}.csf-field-background .csf-field{border:0!important;padding:0;margin-bottom:6px;margin-right:6px}.csf-field-background .csf--title{color:#777;font-size:12px}.csf-field-background .csf--background-colors{display:flex;flex-wrap:wrap}.csf-field-background .csf--background-attributes{display:flex;flex-wrap:wrap}.csf-field-background .csf--background-attributes select{min-width:100%;margin:0}.csf-field-background .csf--background-attributes .csf-field{flex:1}.csf-field-background .csf--attributes-hidden{display:none}.csf-field-backup textarea{width:100%;min-height:200px;margin-bottom:5px}.csf-field-backup small{display:inline-block;margin:5px}.csf-field-backup hr{margin:20px 0;border:none;border-bottom:1px solid #e5e5e5}.csf-field-border .csf--inputs,.csf-field-dimensions .csf--inputs,.csf-field-spacing .csf--inputs{float:left;display:flex;flex-wrap:wrap}.csf-field-border .csf--input,.csf-field-dimensions .csf--input,.csf-field-spacing .csf--input{display:flex;padding-right:6px;padding-bottom:4px;box-sizing:border-box}.csf-field-border .csf--input select,.csf-field-dimensions .csf--input select,.csf-field-spacing .csf--input select{margin:0}.csf-field-border .csf--input input,.csf-field-dimensions .csf--input input,.csf-field-spacing .csf--input input{position:relative;z-index:1;margin:0;width:65px;max-width:100%;text-align:center}.csf-field-border .csf--color,.csf-field-dimensions .csf--color,.csf-field-spacing .csf--color{float:left}.csf-field-border .csf--label,.csf-field-dimensions .csf--label,.csf-field-spacing .csf--label{display:flex;flex-direction:column;justify-content:center;user-select:none;min-width:20px;max-width:100%;padding:0 4px;font-size:12px;text-align:center;color:#555;border:1px solid #7b776c;background-color:#f5f5f5}.csf-field-border .csf--icon,.csf-field-dimensions .csf--icon,.csf-field-spacing .csf--icon{border-right:0;border-radius:4px 0 0 4px}.csf-field-border .csf--icon+input,.csf-field-dimensions .csf--icon+input,.csf-field-spacing .csf--icon+input{border-top-left-radius:0;border-bottom-left-radius:0}.csf-field-border .csf--unit,.csf-field-dimensions .csf--unit,.csf-field-spacing .csf--unit{border-left:0;border-radius:0 4px 4px 0}.csf-field-border .csf--is-unit,.csf-field-dimensions .csf--is-unit,.csf-field-spacing .csf--is-unit{border-top-right-radius:0;border-bottom-right-radius:0}.csf-field-button_set .csf--buttons{display:inline-block}.csf-field-button_set .csf--button{position:relative;z-index:1;float:left;cursor:pointer;padding:7px 14px;min-width:40px;text-align:center;color:#555;border:1px solid #ccc;background-color:#f7f7f7;user-select:none;-webkit-user-select:none;box-shadow:0 1px 0 rgba(0,0,0,.1)}.csf-field-button_set .csf--button:first-child{border-radius:4px 0 0 4px}.csf-field-button_set .csf--button:last-child{border-radius:0 4px 4px 0}.csf-field-button_set .csf--button:not(:first-child){margin-left:-1px}.csf-field-button_set .csf--button:hover{background-color:#eee}.csf-field-button_set .csf--active,.csf-field-button_set .csf--active:hover{z-index:2;color:#fff;border-color:#006799;background-color:#0085ba}.csf-field-button_set input{display:none}.csf-field-checkbox ul,.csf-field-radio ul{margin:0;padding:0;list-style-type:none;overflow-y:auto;max-height:305px}.csf-field-checkbox ul li,.csf-field-radio ul li{margin-bottom:6px}.csf-field-checkbox ul ul,.csf-field-radio ul ul{max-height:none}.csf-field-checkbox ul ul li,.csf-field-radio ul ul li{margin-left:8px}.csf-field-checkbox ul ul li:first-child,.csf-field-radio ul ul li:first-child{margin-left:0}.csf-field-checkbox input,.csf-field-radio input{margin:0 1px}.csf-field-checkbox .csf--inline-list li,.csf-field-radio .csf--inline-list li{display:inline-block;margin-right:15px}.csf-field-checkbox .csf--text,.csf-field-radio .csf--text{margin-left:5px;vertical-align:middle}.csf-field-checkbox .csf-checker,.csf-field-radio .csf-checker{cursor:pointer}.csf-field-code_editor .CodeMirror{width:100%;height:400px}.csf-field-code_editor .cm-s-default{border:1px solid #ccd0d4}.csf-field-code_editor textarea{width:100%;height:400px}.csf-field-color>input{opacity:.75;width:115px;max-width:100%}.csf-field-color .button.wp-picker-clear{padding:0 8px;margin-left:6px;line-height:2.54545455;min-height:30px}.csf-field-color_group .csf--left{float:left;margin-right:10px;margin-bottom:5px}.csf-field-color_group .csf--title{color:#999;margin-bottom:5px}.csf-field-fieldset .csf-fieldset-content{border:1px solid #ccd0d4;background-color:#fff;box-shadow:0 1px 1px rgba(0,0,0,.04)}.csf-field-fieldset .csf-fieldset-content>.csf-field{padding:15px}.csf-field-fieldset .csf-field-subheading{font-size:13px}.csf-field-date input{margin:0}.csf-field-date .csf--to{margin-left:7px}.csf-datepicker-wrapper{margin-top:5px;width:auto;background-color:#fff;z-index:9999999!important;-moz-box-shadow:0 0 30px rgba(0,0,0,.15);-webkit-box-shadow:0 0 30px rgba(0,0,0,.15);box-shadow:0 0 30px rgba(0,0,0,.15)}.csf-datepicker-wrapper *{float:none;margin:0;padding:0;font-family:inherit;font-weight:400;font-style:normal;text-decoration:none;border:0;border-radius:0;box-shadow:none}.csf-datepicker-wrapper .ui-datepicker-header,.csf-datepicker-wrapper .ui-widget-header{color:#fff;background:#00a0d2}.csf-datepicker-wrapper .ui-datepicker-header .ui-state-hover{cursor:pointer}.csf-datepicker-wrapper .ui-datepicker-title{font-size:14px;line-height:40px;text-align:center}.csf-datepicker-wrapper .ui-datepicker-next,.csf-datepicker-wrapper .ui-datepicker-prev{position:static;top:auto;left:auto;right:auto;font-family:"Font Awesome 5 Pro","Font Awesome 5 Free",FontAwesome;font-weight:900;font-size:12px;text-align:center;width:41px;height:40px;line-height:40px;color:#fff;background-color:rgba(255,255,255,.1);text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.csf-datepicker-wrapper .ui-datepicker-next span,.csf-datepicker-wrapper .ui-datepicker-prev span{display:none}.csf-datepicker-wrapper .ui-datepicker-prev{float:left}.csf-datepicker-wrapper .ui-datepicker-next{float:right}.csf-datepicker-wrapper .ui-datepicker-prev:before{content:'\f053'}.csf-datepicker-wrapper .ui-datepicker-next:before{content:'\f054'}.csf-datepicker-wrapper .ui-datepicker-next-hover,.csf-datepicker-wrapper .ui-datepicker-prev-hover{opacity:.75}.csf-datepicker-wrapper tbody .ui-datepicker-week-col{background-color:#f7f7f7}.csf-datepicker-wrapper .ui-datepicker-buttonpane{padding:10px;text-align:center;background-color:#f7f7f7}.csf-datepicker-wrapper .ui-datepicker-buttonpane button{cursor:pointer;margin:0 5px;padding:7px 14px;border:1px solid #eee;background-color:#fff}.csf-datepicker-wrapper select{margin:0 4px}.csf-datepicker-wrapper select option{color:#555}.csf-datepicker-wrapper table{font-size:13px;border-collapse:collapse;width:100%}.csf-datepicker-wrapper thead{color:#fff;background:#32373c}.csf-datepicker-wrapper th{text-align:center;padding:7px;border:1px solid #444}.csf-datepicker-wrapper td{text-align:center;border:1px solid #f4f4f4}.csf-datepicker-wrapper td.ui-datepicker-other-month{border:transparent}.csf-datepicker-wrapper td .ui-state-default{color:#555;width:auto;display:block;padding:6px 12px}.csf-datepicker-wrapper td .ui-state-active,.csf-datepicker-wrapper td .ui-state-hover{color:#fff;background-color:#0073aa}.csf-datepicker-wrapper td.ui-state-disabled .ui-state-default{opacity:.5}.csf-field-gallery input{display:none}.csf-field-gallery ul{margin:0;padding:0;list-style-type:none}.csf-field-gallery ul li{display:inline-block;position:relative;padding:4px;margin:0 5px 10px 0;border:1px solid #ccc;background-color:#f9f9f9;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 1px 0 rgba(0,0,0,.08);-webkit-box-shadow:0 1px 0 rgba(0,0,0,.08);box-shadow:0 1px 0 rgba(0,0,0,.08)}.csf-field-gallery ul li img{max-height:60px;display:inline-block;vertical-align:middle}.csf-field-gallery .button{margin-right:5px;margin-bottom:5px}.csf-field-group .csf-cloneable-hidden{display:none!important}.csf-field-group .csf-cloneable-wrapper{position:relative}.csf-field-group .csf-cloneable-item{display:none;position:relative;margin-bottom:5px}.csf-field-group .csf-cloneable-item h4{font-size:1em}.csf-field-group .ui-accordion .csf-cloneable-item{display:block}.csf-field-group .csf-cloneable-content{border:1px solid #ccd0d4;background-color:#fff;box-shadow:0 1px 1px rgba(0,0,0,.04)}.csf-field-group .csf-cloneable-content>.csf-field{padding:15px}.csf-field-group .csf-cloneable-title{display:block;cursor:pointer;position:relative;user-select:none;margin:0;padding:15px 65px 15px 10px;min-height:0;font-size:100%;border:1px solid #ccd0d4;background-color:#fafafa;box-shadow:0 1px 1px rgba(0,0,0,.04);transition:border-color .15s}.csf-field-group .csf-cloneable-title:active,.csf-field-group .csf-cloneable-title:focus,.csf-field-group .csf-cloneable-title:hover{border-color:#999;outline:0}.csf-field-group .csf-cloneable-helper{position:absolute;top:12px;right:10px;z-index:1;font-size:14px;line-height:1em}.csf-field-group .csf-cloneable-helper i{display:inline-block;cursor:pointer;padding:5px;color:#999}.csf-field-group .csf-cloneable-helper i:hover{color:#555}.csf-field-group .csf-cloneable-content{padding:0;border-top:0}.csf-field-group .csf-cloneable-title-number,.csf-field-group .csf-cloneable-title-prefix{margin-right:5px}.csf-field-group .csf-cloneable-alert{display:none;margin-bottom:5px;padding:10px 20px;color:#a94442;border:1px solid #ebccd1;background-color:#f2dede}.csf-field-group .widget-placeholder{margin-bottom:10px;border:1px dashed #f1c40f;background-color:#fffae4}.csf-field-group .csf-cloneable-header-icon{display:inline-block;text-align:center;font-size:14px;width:17px;text-indent:0;vertical-align:text-top}.csf-field-group .csf-cloneable-placeholder{background-color:#ddd;margin-top:4px;width:100px;height:10px;font-size:10px;line-height:10px;display:inline-block;vertical-align:top;border-radius:2px}.csf-field-icon input{display:none}.csf-field-icon .button{margin-right:5px}.csf-field-icon .csf-icon-preview i{display:inline-block;font-size:16px;width:30px;height:28px;line-height:28px;margin-right:5px;text-align:center;vertical-align:top;color:#555;border:1px solid #ccc;background-color:#f7f7f7;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(0,0,0,.08);-webkit-box-shadow:0 1px 0 rgba(0,0,0,.08);box-shadow:0 1px 0 rgba(0,0,0,.08);-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}.csf-field-image_select .csf--image{cursor:pointer;position:relative;display:inline-block;max-width:100%;margin:0 5px 5px 0;vertical-align:bottom;border:2px solid transparent;background-color:#fff;user-select:none;-webkit-user-select:none;-moz-transition:all .2s;-o-transition:all .2s;-webkit-transition:all .2s;transition:all .2s}.csf-field-image_select .csf--image:before{position:absolute;top:0;left:0;text-align:center;font-size:10px;font-family:"Font Awesome 5 Pro","Font Awesome 5 Free",FontAwesome;font-weight:900;content:"\f00c";width:16px;height:16px;line-height:14px;opacity:0;color:#fff;background-color:#222;transition:opacity .2s}.csf-field-image_select .csf--active{border-color:#222;box-shadow:0 0 20px rgba(0,0,0,.2)}.csf-field-image_select .csf--active:before{opacity:1}.csf-field-image_select img{vertical-align:top}.csf-field-image_select input{display:none}.csf-field-link_color .csf--left{float:left;margin-right:10px;margin-bottom:5px}.csf-field-link_color .csf--title{color:#777;margin-bottom:5px}.csf-field-map input{width:100%}.csf-field-map input[type=text].ui-autocomplete-loading{background-position-x:calc(100% - 5px)}.csf-field-map .csf--map-search+.csf--map-osm-wrap{margin-top:10px}.csf-field-map .csf--map-osm-wrap{position:relative;padding:5px;border:1px solid #eee;background-color:#fff;box-shadow:0 1px 1px rgba(0,0,0,.04)}.csf-field-map .csf--map-osm{position:relative;z-index:1;min-height:250px}.csf-field-map .csf--map-inputs{margin-top:10px;display:flex;justify-content:space-between}.csf-field-map .csf--map-input{flex:1}.csf-field-map .csf--map-input:last-child{padding-left:10px}.csf-field-map label{display:block;color:#777;font-size:12px;margin:0 0 2px 0}.csf-map-ui-autocomplate{z-index:999999;border-radius:4px;overflow:hidden}.csf-field-media .csf--placeholder{display:flex;align-items:flex-start}.csf-field-media .csf--placeholder input{width:100%;margin:0}.csf-field-media .button{margin-left:5px}.csf-field-media .hidden+.button{margin-left:0}.csf-field-media .csf--preview{position:relative}.csf-field-media .csf--preview .fa-times{position:absolute;z-index:1;right:4px;top:4px;font-size:14px;width:22px;height:22px;line-height:22px;text-align:center;text-decoration:none;color:#fff;background-color:#d33;opacity:.8;transition:all .2s}.csf-field-media .csf--preview .fa-times:hover{opacity:1}.csf-field-media .csf--preview .fa-times:focus{box-shadow:none}.csf-field-palette .csf--palette{position:relative;display:inline-block;cursor:pointer;border:2px solid #ddd;margin-right:10px;margin-bottom:10px;user-select:none;-webkit-user-select:none;transition:all .2s}.csf-field-palette .csf--palette span{vertical-align:middle;display:inline-block;width:22px;height:60px;line-height:60px;overflow:hidden;text-indent:-999px}.csf-field-palette .csf--palette:before{position:absolute;top:0;left:0;text-align:center;font-size:10px;font-family:"Font Awesome 5 Pro","Font Awesome 5 Free",FontAwesome;font-weight:900;content:"\f00c";width:16px;height:16px;line-height:14px;opacity:0;color:#fff;background-color:#222;transition:opacity .2s}.csf-field-palette .csf--active{border-color:#222;box-shadow:0 0 20px rgba(0,0,0,.2)}.csf-field-palette .csf--active:before{opacity:1}.csf-field-palette input{display:none}.csf-field-repeater .csf-field-text input{width:100%}.csf-field-repeater .csf-repeater-hidden{display:none!important}.csf-field-repeater .csf-repeater-wrapper .csf-repeater-item{display:table;width:100%;margin-bottom:5px;border:1px solid #eee}.csf-field-repeater .csf-repeater-wrapper .csf-repeater-item h4{font-size:1em}.csf-field-repeater .csf-repeater-content{width:100%;display:table-cell;vertical-align:middle;background-color:#fff}.csf-field-repeater .csf-repeater-content>.csf-field{padding:15px}.csf-field-repeater .csf-repeater-helper{width:100%;display:table-cell;vertical-align:middle;text-align:center;font-size:14px;line-height:1em;border-left:1px solid #eee;background-color:#f7f7f7}.csf-field-repeater .csf-repeater-helper i{display:inline-block;cursor:pointer;color:#999;padding:5px}.csf-field-repeater .csf-repeater-helper i:hover{color:#555}.csf-field-repeater .csf-repeater-helper-inner{width:75px}.csf-field-repeater .csf-repeater-alert{display:none;margin-bottom:5px;padding:10px 20px;color:#a94442;border:1px solid #ebccd1;background-color:#f2dede}.csf-field-repeater .widget-placeholder{height:50px;margin-bottom:3px;border:1px dashed #f1c40f;background-color:#fffae4}.csf-field-repeater .ui-sortable-helper{height:50px!important;overflow:hidden!important;border-color:#ccc!important;background-color:#eee!important;opacity:.5}.csf-field-repeater .ui-sortable-helper .csf-repeater-content,.csf-field-repeater .ui-sortable-helper .csf-repeater-helper{display:none}.csf-field-select .csf-fieldset{min-height:30px}.csf-field-select .csf-chosen{display:none}.csf-field-select select{max-width:100%;margin:0}.csf-field-slider .csf--wrap{display:flex;align-items:center}.csf-field-slider .csf--input{display:flex}.csf-field-slider .csf--unit{display:flex;justify-content:center;flex-direction:column;user-select:none;padding:0 6px;font-size:11px;line-height:1;border-radius:0 4px 4px 0;color:#555;border:1px solid #7e8993;border-left:0;background-color:#f5f5f5}.csf-field-slider .csf-slider-ui{margin-right:15px}.csf-field-slider input[type=number]{position:relative;z-index:1;margin:0;width:50px;text-align:center}.csf-field-slider .csf--is-unit{border-top-right-radius:0;border-bottom-right-radius:0}.csf-field-slider .ui-slider{position:relative;width:100%;height:3px;border:none;background:#ddd;border-radius:2px}.csf-field-slider .ui-slider-range{height:3px;border:none;background:#333;border-radius:2px}.csf-field-slider .ui-slider-handle{position:absolute;width:16px;height:16px;top:-7px;margin-left:-8px;border:none;background:#333;border-radius:2px}.csf-field-slider .ui-slider-handle:hover,.csf-field-slider .ui-state-active{cursor:pointer;background:#111}.csf-field-sortable .csf-field-text input{width:100%;max-width:100%}.csf-field-sortable .csf-sortable .csf-sortable-item{display:table;width:100%;margin-bottom:5px;border:1px solid #eee}.csf-field-sortable .csf-sortable .csf-sortable-item h4{font-size:1em}.csf-field-sortable .csf-sortable-content{width:100%;display:table-cell;vertical-align:middle;background-color:#fff}.csf-field-sortable .csf-sortable-content>.csf-field{padding:15px}.csf-field-sortable .csf-sortable-helper{width:100%;display:table-cell;vertical-align:middle;text-align:center;font-size:14px;line-height:1em;border-left:1px solid #eee;background-color:#f7f7f7}.csf-field-sortable .csf-sortable-helper i{display:inline-block;cursor:pointer;width:50px;color:#555}.csf-field-sortable .csf-sortable-helper i:hover{opacity:.5}.csf-field-sortable .widget-placeholder{height:50px;margin-bottom:3px;border:1px dashed #f1c40f;background-color:#fffae4}.csf-field-sortable .ui-sortable-helper{height:50px!important;overflow:hidden!important;border-color:#ccc!important;background-color:#eee!important;opacity:.5}.csf-field-sortable .ui-sortable-helper .csf-sortable-content,.csf-field-sortable .ui-sortable-helper .csf-sortable-helper{display:none}.csf-field-sorter .ui-sortable-placeholder{height:20px;border:1px dashed #f1c40f;background-color:#fffae4}.csf-field-sorter .csf-modules{float:left;width:50%;box-sizing:border-box}.csf-field-sorter .csf-modules:first-child{padding-right:15px}.csf-field-sorter .csf-modules:last-child{padding-left:15px}.csf-field-sorter .csf-disabled,.csf-field-sorter .csf-enabled{padding:5px 15px;border:1px dashed #ddd;background-color:#fff}.csf-field-sorter .csf-disabled li{-moz-transition:opacity .15s;-o-transition:opacity .15s;-webkit-transition:opacity .15s;transition:opacity .15s;opacity:.5}.csf-field-sorter .csf-disabled .ui-sortable-helper{opacity:1}.csf-field-sorter .csf-sorter-title{font-size:13px;font-weight:600;padding:10px;text-align:center;border:1px dashed #ddd;border-bottom:none;background-color:#f8f8f8;text-transform:uppercase}.csf-field-sorter ul{list-style-type:none;margin:0;padding:0;min-height:62px}.csf-field-sorter ul li{margin:10px 0;padding:10px 15px;cursor:move;font-weight:700;text-align:center;border:1px solid #e5e5e5;background-color:#fafafa;-moz-transition:border-color .15s;-o-transition:border-color .15s;-webkit-transition:border-color .15s;transition:border-color .15s}.csf-field-sorter ul li:hover{border-color:#bbb}.csf-field-spinner .csf--spin{display:flex}.csf-field-spinner .ui-spinner{display:flex}.csf-field-spinner .ui-button-text-only{display:flex;flex-direction:column;justify-content:center;text-align:center;min-width:20px;padding:0 4px;color:#555;border:1px solid #7e8993;background-color:#f5f5f5}.csf-field-spinner .ui-button{cursor:pointer}.csf-field-spinner .ui-button:hover{background-color:#e7e7e7}.csf-field-spinner .ui-button:active{background-color:#ddd}.csf-field-spinner .ui-button:before{font-family:"Font Awesome 5 Pro","Font Awesome 5 Free",FontAwesome;font-weight:900;font-size:14px;line-height:14px}.csf-field-spinner .ui-spinner-down{order:1;border-right:0;border-radius:4px 0 0 4px}.csf-field-spinner .ui-spinner-down:before{content:"\f0d9"}.csf-field-spinner .ui-spinner-input{order:2}.csf-field-spinner .csf--unit{order:3;border-left:0;user-select:none}.csf-field-spinner .ui-spinner-up{order:4;border-left:0;border-radius:0 4px 4px 0}.csf-field-spinner .ui-spinner-up:before{content:"\f0da"}.csf-field-spinner input{position:relative;z-index:1;width:50px;text-align:center;margin:0;padding:0 8px;border-radius:0}.csf-field-spinner .ui-button-text{display:none}.csf-field-switcher .csf--switcher{float:left;cursor:pointer;position:relative;width:60px;height:26px;padding:0;margin:0;overflow:hidden;border-radius:4px;background-color:#ed6f6f;user-select:none;-webkit-user-select:none}.csf-field-switcher .csf--ball{position:absolute;top:4px;left:4px;width:24px;height:18px;background-color:#fff;border-radius:4px;transition:all .1s;box-shadow:1px 1px 1px rgba(0,0,0,.15)}.csf-field-switcher .csf--off,.csf-field-switcher .csf--on{position:absolute;top:0;left:0;right:0;font-size:11px;line-height:26px;font-weight:500;font-style:normal;text-align:center;text-transform:uppercase;color:#fff;padding-right:28px;opacity:0;transition:all .1s}.csf-field-switcher .csf--off{padding-right:0;padding-left:28px;opacity:1}.csf-field-switcher .csf--active{background:#4fb845}.csf-field-switcher .csf--active .csf--on{opacity:1}.csf-field-switcher .csf--active .csf--off{opacity:0}.csf-field-switcher .csf--active .csf--ball{left:100%;margin-left:-28px}.csf-field-switcher .csf--label{float:left;margin-top:4px;margin-left:8px;font-weight:400;color:#999}.csf-field-switcher input{display:none}.csf-field-tabbed .csf-tabbed-content{border:1px solid #ccd0d4;background-color:#fff;box-shadow:0 1px 1px rgba(0,0,0,.04)}.csf-field-tabbed .csf-tabbed-content>.csf-field{padding:15px}.csf-field-tabbed .csf-tabbed-nav .csf--icon{padding-right:5px}.csf-field-tabbed .csf-tabbed-nav a{display:inline-block;padding:12px 15px;margin-top:1px;margin-right:5px;margin-bottom:-1px;position:relative;text-decoration:none;color:#444;font-weight:600;border:1px solid #ccd0d4;background-color:#f3f3f3;transition:all .2s}.csf-field-tabbed .csf-tabbed-nav a:hover{background-color:#f9f9f9}.csf-field-tabbed .csf-tabbed-nav a.csf-tabbed-active{background-color:#fff;border-bottom-color:#fff}.csf-field-tabbed .csf-tabbed-nav a:focus{outline:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.csf-field-text input{width:50%;max-width:100%;margin:0}.csf-field-textarea textarea{width:100%;max-width:100%;min-height:125px}.csf-field-textarea .csf-shortcode-button{margin-bottom:10px;margin-right:5px}.csf-field-typography select,.csf-field-typography textarea{min-width:100%;margin:0}.csf-field-typography .csf--title{color:#777;margin:0 0 2px 0;font-size:12px}.csf-field-typography .csf--title small{vertical-align:top}.csf-field-typography .csf--blocks{display:flex;flex-wrap:wrap}.csf-field-typography .csf--block{flex:1;padding-right:6px;padding-bottom:6px}.csf-field-typography .csf--input{margin:0;min-width:100%}.csf-field-typography .csf--input-wrap{position:relative}.csf-field-typography .csf--unit{position:absolute;z-index:1;right:4px;top:4px;bottom:4px;padding:2px 6px;color:#666;font-size:11px;line-height:1;border-radius:2px;background:#eee;user-select:none;display:flex;justify-content:center;flex-direction:column}.csf-field-typography .csf--preview{font-size:16px;line-height:20px;padding:20px;color:#222;border:1px solid #eee;background-color:#fff;border-radius:2.5px;user-select:none;-webkit-user-select:none;transition:background-color .2s,border-color .2s}.csf-field-typography .csf--block-preview{cursor:pointer;position:relative;overflow:hidden;margin-top:10px;max-width:100%}.csf-field-typography .csf--black-background{border-color:#000;background-color:#000}.csf-field-typography .csf--toggle{position:absolute;top:5px;right:10px;color:#999}.csf-field-typography .csf--block-extra-styles{margin-top:5px}.csf-field-upload input{width:100%;margin:0}.csf-field-upload .csf--wrap{display:flex;align-items:flex-start}.csf-field-upload .button{margin-left:5px}.csf-field-wp_editor .csf-wp-editor{float:left;width:100%}.csf-field-wp_editor .mce-toolbar-grp{border:none}.csf-field-wp_editor .mce-btn.mce-active button,.csf-field-wp_editor .mce-btn.mce-active i,.csf-field-wp_editor .mce-btn.mce-active:hover button,.csf-field-wp_editor .mce-btn.mce-active:hover i{color:#23282d}.csf-field-wp_editor .wp-media-buttons{position:relative;z-index:2}.csf-field-wp_editor .wp-editor-tabs{position:relative;z-index:1}.csf-field-wp_editor .csf-no-tinymce{border:1px solid #e5e5e5}.csf-field-wp_editor .csf-no-quicktags .wp-media-buttons{float:none;display:block}.csf-field-wp_editor .csf-no-quicktags .mce-tinymce{box-shadow:none;border:1px solid #e5e5e5}.csf-field-wp_editor textarea{width:100%;max-width:100%;margin:0;box-shadow:none}.csf-field-heading{font-size:1.5em;font-weight:700;color:#23282d;background-color:#f5f5f5}.csf-field-subheading{font-size:14px;font-weight:700;padding-top:17px;padding-bottom:17px;color:#23282d;background-color:#f7f7f7}.csf-field-submessage{padding:0!important;border:0!important}.csf-field-submessage+.csf-field{border-top:0!important}.csf-submessage{font-size:12px;padding:17px 30px;border-top:1px solid transparent;border-bottom:1px solid transparent}.csf-submessage-success{color:#3c763d;border-color:#d6e9c6;background-color:#dff0d8}.csf-submessage-info{color:#31708f;border-color:#bce8f1;background-color:#d9edf7}.csf-submessage-warning{color:#8a6d3b;border-color:#faebcc;background-color:#fcf8e3}.csf-submessage-danger{color:#a94442;border-color:#ebccd1;background-color:#f2dede}.csf-submessage-normal{color:#23282d;border-color:#eee;background-color:#f7f7f7}.csf-field-notice{background-color:#f7f7f7}.csf-notice{padding:12px;background-color:#fff;border-left-style:solid;border-left-width:4px;box-shadow:0 1px 1px rgba(0,0,0,.1)}.csf-notice-success{border-color:#46b450}.csf-notice-info{border-color:#339fd4}.csf-notice-warning{border-color:#ffbc00}.csf-notice-danger{border-color:#dc3232}.csf-notice-normal{border-color:#222}.csf-field-number input{width:100%;margin:0}.csf-field-number .csf--wrap{position:relative;float:left;width:100px}.csf-field-number .csf--unit{position:absolute;z-index:1;right:4px;top:4px;bottom:4px;padding:2px 6px;color:#666;font-size:11px;line-height:1;border-radius:2px;background:#eee;user-select:none;display:flex;justify-content:center;flex-direction:column}.csf-help{cursor:help;position:absolute;top:0;right:0;padding:5px;font-size:13px;color:#aaa}.csf-help .csf-help-text{display:none}.csf-image-preview{display:inline-block;position:relative;padding:4px;min-width:44px;min-height:22px;margin-bottom:10px;border:1px solid #ccc;background-color:#f9f9f9;-moz-box-shadow:0 1px 0 rgba(0,0,0,.08);-webkit-box-shadow:0 1px 0 rgba(0,0,0,.08);box-shadow:0 1px 0 rgba(0,0,0,.08)}.csf-image-preview img{max-height:90px;display:inline-block;vertical-align:middle}.csf-field-custom .csf-field{padding:0}.csf-field .chosen-container-single .chosen-single{height:28px;line-height:26px}.csf-field .chosen-container-single .chosen-single abbr{top:0;right:20px;font-family:"Font Awesome 5 Pro","Font Awesome 5 Free",FontAwesome;font-weight:900;font-size:12px;height:100%;width:18px;color:#aaa;text-align:center;background:0 0}.csf-field .chosen-container-single .chosen-single abbr:before{content:"\f00d"}.csf-field .chosen-container-single .chosen-single abbr:hover{color:#555}.csf-field .chosen-container-multi .chosen-choices li.search-choice .search-choice-close{font-family:"Font Awesome 5 Pro","Font Awesome 5 Free",FontAwesome;font-weight:900;font-size:12px;height:100%;width:18px;color:#aaa;text-align:center;background:0 0}.csf-field .chosen-container-multi .chosen-choices li.search-choice .search-choice-close:before{content:"\f00d";display:inline-block;padding-top:3px}.csf-field .chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{color:#555}.csf-field .chosen-container-single .chosen-single div b{font-family:"Font Awesome 5 Pro","Font Awesome 5 Free",FontAwesome;font-weight:900;font-size:14px;color:#aaa;background:0 0}.csf-field .chosen-container-single .chosen-single div b:before{content:"\f107"}.csf-field .chosen-container-single .chosen-single div b:hover{color:#555}.csf-field .chosen-container-multi .chosen-choices li.search-choice-placeholder{border:1px dashed #aaa;margin:3px 5px 3px 0}.csf-field .chosen-container-multi .ui-sortable li.search-choice span{cursor:move}.csf-field .chosen-container-active.chosen-with-drop .chosen-single div b:before{content:"\f106"}.csf-field .chosen-container-single .chosen-single-with-deselect span{margin-right:40px}.csf-field .chosen-container-single .chosen-search input[type=text]{background:0 0}.csf-field .chosen-container-single .chosen-search:before{font-family:"Font Awesome 5 Pro","Font Awesome 5 Free",FontAwesome;font-weight:900;font-size:11px;content:"\f002";position:absolute;right:12px;top:10px;color:#aaa}.csf-field .wp-picker-container{display:inline-block}.csf-field .wp-picker-container .wp-color-result.button{margin-bottom:0}.csf-field .csf--transparent-wrap{display:none;position:relative;top:-1px;width:235px;padding:9px 10px;border:1px solid #dfdfdf;border-top:none;background-color:#fff}.csf-field .wp-picker-active .csf--transparent-wrap{display:block}.csf-field .csf--transparent-slider{position:absolute;width:190px;margin-left:2px;height:18px}.csf-field .csf--transparent-slider .ui-slider-handle{position:absolute;top:-3px;bottom:-3px;z-index:5;border-color:#aaa;border-style:solid;border-width:4px 3px;width:10px;height:16px;margin:0 -5px;background:0 0;cursor:ew-resize;opacity:.9;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.2);-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);box-shadow:0 1px 2px rgba(0,0,0,.2)}.csf-field .csf--transparent-slider .ui-slider-handle:before{content:" ";position:absolute;left:-2px;right:-2px;top:-3px;bottom:-3px;border:2px solid #fff;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.csf-field .csf--transparent-offset{height:18px;width:200px;background:url(../images/checkerboard.png) repeat-y center left scroll #fff;-moz-box-shadow:0 0 5px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4) inset;box-shadow:0 0 5px rgba(0,0,0,.4) inset;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.csf-field .csf--transparent-text{position:absolute;top:12px;right:10px;width:30px;font-size:12px;line-height:12px;text-align:center;color:#999}.csf-field .csf--transparent-button{cursor:pointer;user-select:none;margin-top:10px;font-size:11px;text-align:center;border-radius:2px;padding:3px 7px;box-shadow:0 1px 0 rgba(0,0,0,.1);letter-spacing:.2px;color:#777;border:1px solid #ccc;background-color:#f7f7f7;transition:background-color .2s,border-color .2s,color .2s}.csf-field .csf--transparent-active .wp-color-result{background-image:url(../images/checkerboard.png);background-size:135px;background-position:center left;background-color:transparent!important}.csf-field .csf--transparent-active .csf--transparent-button{color:#fff;border-color:#3ea032;background-color:#4fb845}.csf-field .csf--transparent-active .fa:before{content:"\f205"}.csf-widgets>.csf-field{position:relative;top:-1px;margin-right:-15px;margin-left:-15px;padding:12px 15px}.csf-widgets>.csf-field .csf-field{margin-left:0;margin-right:0}.csf-widgets>.csf-field .csf-title{float:none;width:100%;margin-bottom:5px}.csf-widgets>.csf-field .csf-fieldset{float:none;width:100%}.csf-widgets .csf-field-text input{width:100%}.csf-widgets .csf-field-notice .csf-notice{padding:15px}.control-section .csf-widgets>.csf-field{margin-right:-10px;margin-left:-10px;padding:10px 12px}.control-section .csf-field{padding:0}.control-section .csf-field .csf-title{float:none;width:100%;margin-bottom:6px}.control-section .csf-field .csf-title h4{display:block;font-size:13px;line-height:1;font-weight:600;color:inherit}.control-section .csf-field .csf-fieldset{float:none;width:100%}.control-section .csf-help{top:-5px;right:-5px}.control-section .csf-field-select select{width:100%}.control-section .csf-field-heading{color:inherit;font-size:14px;line-height:1em;margin-right:-15px;margin-left:-15px;padding:15px}.control-section .csf-field-subheading{color:inherit;font-size:11px;margin-right:-15px;margin-left:-15px;padding:10px 15px}.control-section .csf-subtitle-text{margin-top:4px;font-size:12px}.control-section .csf-field-submessage .csf-submessage{margin-right:-15px;margin-left:-15px;padding:15px}.control-section .csf-fieldset .csf-field-heading,.control-section .csf-fieldset .csf-field-subheading,.control-section .csf-fieldset .csf-field-submessage .csf-submessage{margin-left:0;margin-right:0}.control-section .csf-field-date .csf--to{margin-left:0}.control-section .csf-field-sorter ul li{padding:5px}.control-section .csf-field-sorter .csf-modules{float:none;width:100%}.control-section .csf-field-sorter .csf-modules:first-child{padding-right:0;padding-bottom:15px}.control-section .csf-field-background .csf--background-attributes{flex-direction:column}.control-section .csf-field-spacing input{width:90px}.control-section .csf-field-border .csf--input{flex:1 50%}.control-section .csf-field-border input,.control-section .csf-field-border select{width:100%}.control-section .csf-field-spinner input{width:50px}.control-section .csf-field-number .csf--wrap{width:100%}.control-section .csf-field-backup .csf-export-data{display:none}.control-section .csf-field-fieldset .csf-fieldset-content{border-color:#e5e5e5}.control-section .csf-accordion-content>.csf-field,.control-section .csf-cloneable-content>.csf-field,.control-section .csf-fieldset-content>.csf-field,.control-section .csf-repeater-content>.csf-field,.control-section .csf-sortable-content>.csf-field,.control-section .csf-tabbed-content>.csf-field{padding:10px}.control-section .csf-accordion-content>.csf-field .csf-title,.control-section .csf-cloneable-content>.csf-field .csf-title,.control-section .csf-fieldset-content>.csf-field .csf-title,.control-section .csf-repeater-content>.csf-field .csf-title,.control-section .csf-sortable-content>.csf-field .csf-title,.control-section .csf-tabbed-content>.csf-field .csf-title{margin-bottom:5px}.control-section .csf-accordion-content>.csf-field h4,.control-section .csf-cloneable-content>.csf-field h4,.control-section .csf-fieldset-content>.csf-field h4,.control-section .csf-repeater-content>.csf-field h4,.control-section .csf-sortable-content>.csf-field h4,.control-section .csf-tabbed-content>.csf-field h4{font-size:12px}.control-section .csf-depend-hidden.csf-depend-on{display:none!important}.control-section .csf-depend-visible.csf-depend-on{border-top:0!important}.csf-taxonomy{max-width:95%}.csf-taxonomy>.csf-field{border-top:none!important}.csf-taxonomy>.csf-field-heading{font-size:1.1em;padding:20px!important;border:1px solid #ddd}.csf-taxonomy>.csf-field-subheading{font-size:12px;padding:15px!important;border:1px solid #ddd}.csf-taxonomy>.csf-field-submessage .csf-submessage{padding:15px;border-left-width:1px;border-left-style:solid;border-right-width:1px;border-right-style:solid}.csf-taxonomy>.csf-field-notice{background-color:transparent}.csf-taxonomy .csf-section-title{display:block;padding:15px;background-color:#f9f9f9;border:1px solid #e5e5e5;-moz-box-shadow:0 1px 1px rgba(0,0,0,.04);-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}.csf-taxonomy-add-fields>.csf-field{padding:8px 0}.csf-taxonomy-add-fields>.csf-field>.csf-title{float:none;width:100%;padding:2px 2px 4px 0}.csf-taxonomy-add-fields>.csf-field>.csf-title h4{font-size:12px;font-weight:400}.csf-taxonomy-add-fields>.csf-field>.csf-fieldset{float:none;width:100%}.csf-taxonomy-add-fields>.csf-field>.csf-fieldset>.csf-help{right:-5px}.csf-taxonomy-add-fields+p.submit{margin-top:0}.csf-taxonomy-edit-fields>.csf-field{padding:20px 0}.csf-taxonomy-edit-fields>.csf-field>.csf-title{width:200px}.csf-taxonomy-edit-fields>.csf-field>.csf-title h4{font-size:14px;font-weight:600;line-height:1.3;display:inline-block;vertical-align:middle}.csf-taxonomy-edit-fields>.csf-field>.csf-fieldset{width:calc(100% - 220px)}.csf-taxonomy-edit-fields>.csf-field>.csf-fieldset>.csf-help{top:-5px;right:-5px}.csf-taxonomy-edit-fields>.csf-field-submessage{margin:20px 0}.csf-taxonomy-edit-fields>.csf-field-heading,.csf-taxonomy-edit-fields>.csf-field-subheading{margin:20px 0;border:1px solid #ddd}.csf-nav-menu-options{clear:both;float:left;width:100%}.csf-nav-menu-options>.csf-fields{margin-left:-10px;margin-top:10px;margin-bottom:10px;border-top:1px solid #eee;border-bottom:1px solid #eee}.csf-nav-menu-options>.csf-fields>.csf-field{padding:12px 14px 12px 12px}.csf-nav-menu-options>.csf-fields>.csf-field .csf-title{float:none;width:100%;margin-bottom:5px}.csf-nav-menu-options>.csf-fields>.csf-field .csf-fieldset{float:none;width:100%}.csf-nav-menu-options .csf-field-text input{width:100%}.csf-nav-menu-options .csf-field-notice .csf-notice{padding:15px}.csf-nav-menu-title{padding:12px 14px 12px 12px;background-color:#f5f5f5;border-top:1px solid #eee;border-bottom:1px solid #eee}.csf-nav-menu-title:first-child{border-top:0}.csf-nav-menu-title h4{margin:0;padding:0;color:#23282d}.csf-nav-menu-icon{margin-right:5px}.csf-profile-options>h2>.fa{padding-right:7px}.csf-profile-options>.csf-field{max-width:750px;padding:15px 0;border-top:none!important}.csf-profile-options>.csf-field>.csf-title{width:200px}.csf-profile-options>.csf-field>.csf-title h4{font-size:14px;font-weight:600;line-height:1.3;display:inline-block;vertical-align:middle}.csf-profile-options>.csf-field>.csf-fieldset{width:calc(100% - 220px)}.csf-profile-options>.csf-field>.csf-fieldset>.csf-help{top:-15px;right:-5px}.csf-profile-options>.csf-field-heading{font-size:1.1em}.csf-profile-options>.csf-field-subheading{font-size:12px}.csf-profile-options>.csf-field-heading,.csf-profile-options>.csf-field-subheading{margin:10px 0;padding:15px!important;border:1px solid #ddd}.csf-profile-options>.csf-field-submessage{margin:20px 0}.csf-profile-options>.csf-field-submessage .csf-submessage{padding:10px;border-left-width:1px;border-left-style:solid;border-right-width:1px;border-right-style:solid}.csf-profile-options>.csf-field-notice{background-color:transparent}.csf-modal{position:fixed;z-index:100101;top:0;left:0;width:100%;height:100%}.csf-modal.hidden{display:none}.csf-modal-icon{z-index:100102}.csf-modal-table{display:table;width:100%;height:100%}.csf-modal-table-cell{display:table-cell;vertical-align:middle;margin:100px 0}.csf-modal-inner{position:relative;z-index:10;width:760px;height:750px;margin:0 auto;background-color:#fff}.csf-modal-content{position:relative;overflow:hidden;overflow-y:auto;height:595px}.csf-modal-content .csf-shortcode-button{display:none}.csf-modal-content .csf-field{padding:15px 30px 15px 15px}.csf-modal-content a:active,.csf-modal-content a:focus{outline:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.csf-modal-content h4{font-size:13px}.csf-modal-content h4 small{font-style:italic;font-weight:400;color:#aaa}.csf-modal-title{position:relative;background-color:#fcfcfc;border-bottom:1px solid #ddd;height:36px;font-size:16px;font-weight:600;line-height:36px;margin:0;padding:0 36px 0 16px}.csf-modal-header{width:100%;padding:14px 0;background-color:#f5f5f5;border-bottom:1px solid #eee}.csf-modal-header select{display:block;width:250px;margin:0 auto;font-size:13px;line-height:1;height:30px;min-height:30px;background-color:#fff}.csf-modal-close{color:#666;padding:0;position:absolute;top:0;right:0;width:36px;height:36px;text-align:center;background:0 0;border:none;cursor:pointer}.csf-modal-close:before{font:normal 20px/36px dashicons;content:"\f158";vertical-align:top;width:36px;height:36px}.csf-modal-close:hover{opacity:.5}.csf-modal-insert-wrapper{text-align:center;width:100%;padding:15px 0;background-color:#f5f5f5;border-top:1px solid #eee}.csf-modal-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#000;opacity:.5}.csf--repeatable{padding:15px 15px 0 15px}.csf--repeat-button-block{text-align:center;padding-bottom:15px}.csf--repeat-shortcode{position:relative;margin-bottom:15px;border:1px dashed #ddd}.csf--repeat-shortcode:first-child .csf-repeat-remove{display:none}.csf--repeat-shortcode .csf-repeat-remove{position:absolute;right:10px;top:10px;z-index:10;cursor:pointer;display:inline-block;font-size:11px;width:18px;height:18px;line-height:18px;text-align:center;border-radius:2px;color:#fff;background-color:#e14d43;opacity:.5}.csf--repeat-shortcode .csf-repeat-remove:hover{opacity:1}.csf-shortcode-single .csf-modal-inner{height:750px}.csf-shortcode-single .csf-modal-content{height:652px}.elementor-editor-active .csf-shortcode-button{margin-left:5px}.elementor-editor-active .csf-modal .hidden{display:none!important}.csf-shortcode-block{text-align:center;padding:14px;font-size:13px;background-color:#f5f5f5;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.csf-shortcode-block .components-button{margin-bottom:10px}.csf-modal-icon .csf-icon-title{padding:15px 0;margin:4px;font-size:14px;font-weight:700;text-align:center;border:1px solid #eee;background-color:#f7f7f7}.csf-modal-icon .csf-modal-header{text-align:center}.csf-modal-icon .csf-icon-search{width:50%;height:40px;line-height:40px}.csf-modal-icon i{cursor:pointer;display:inline-block;margin:4px;width:35px;height:35px;line-height:35px;font-size:16px;color:#555;text-align:center;border:1px solid #ccc;background-color:#f7f7f7;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:1px 1px 0 rgba(0,0,0,.05);-webkit-box-shadow:1px 1px 0 rgba(0,0,0,.05);box-shadow:1px 1px 0 rgba(0,0,0,.05)}.csf-modal-icon i:hover{color:#fff;border-color:#222;background-color:#222}.csf-modal-icon .csf-modal-content{padding:10px;height:618px}.csf-modal-icon .csf-error-text{padding:10px}.csf-modal-loading{display:none;position:absolute;left:15px;top:15px}.csf-loading{position:relative;width:20px;height:20px;background:#ccc;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;-moz-box-shadow:0 2px 5px rgba(0,0,0,.07);-webkit-box-shadow:0 2px 5px rgba(0,0,0,.07);box-shadow:0 2px 5px rgba(0,0,0,.07)}.csf-loading:after{position:absolute;top:50%;left:50%;width:4px;height:4px;content:"";margin-top:-2px;margin-left:-2px;background-color:#fff;-moz-animation-duration:.5s;-webkit-animation-duration:.5s;animation-duration:.5s;-moz-animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-moz-animation-timing-function:linear;-webkit-animation-timing-function:linear;animation-timing-function:linear;-moz-animation-name:csfLoader;-webkit-animation-name:csfLoader;animation-name:csfLoader;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px}@-moz-keyframes csfLoader{0%{-moz-transform:rotate(0) translateX(-6px) rotate(0);transform:rotate(0) translateX(-6px) rotate(0)}100%{-moz-transform:rotate(360deg) translateX(-6px) rotate(-360deg);transform:rotate(360deg) translateX(-6px) rotate(-360deg)}}@-webkit-keyframes csfLoader{0%{-webkit-transform:rotate(0) translateX(-6px) rotate(0);transform:rotate(0) translateX(-6px) rotate(0)}100%{-webkit-transform:rotate(360deg) translateX(-6px) rotate(-360deg);transform:rotate(360deg) translateX(-6px) rotate(-360deg)}}@keyframes csfLoader{0%{-moz-transform:rotate(0) translateX(-6px) rotate(0);-ms-transform:rotate(0) translateX(-6px) rotate(0);-webkit-transform:rotate(0) translateX(-6px) rotate(0);transform:rotate(0) translateX(-6px) rotate(0)}100%{-moz-transform:rotate(360deg) translateX(-6px) rotate(-360deg);-ms-transform:rotate(360deg) translateX(-6px) rotate(-360deg);-webkit-transform:rotate(360deg) translateX(-6px) rotate(-360deg);transform:rotate(360deg) translateX(-6px) rotate(-360deg)}}.csf-subtitle-text{margin-top:6px;font-weight:400;color:#999}.csf-desc-text{clear:both;float:left;width:100%;margin-top:6px;font-weight:400;color:#999}.csf-error-text{margin-top:6px;color:#d02c21}.csf-before-text{margin-bottom:6px}.csf-after-text{margin-top:6px}.csf-metabox-hide{display:none!important}.csf-metabox-show{display:block!important}.csf-depend-hidden.csf-depend-on{display:none}.csf-depend-visible.csf-depend-on{display:block;opacity:.75;filter:grayscale(1);user-select:none;border-top:1px solid #eee}.csf-depend-visible.csf-depend-on .clear:before{content:"";left:0;top:0;right:0;bottom:0;position:absolute;background-color:#eee;opacity:.25;z-index:10}.csf-warning-primary{color:#fff!important;border-color:#dc3545!important;background:#dc3545!important}.csf-warning-primary:focus,.csf-warning-primary:hover{border-color:#bd2130!important;background:#bd2130!important}.csf-warning-primary:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px #bd2130!important}.csf-warning-primary:active{border-color:#bd2130!important;background:#bd2130!important}.csf-form-result{display:none;float:left;padding:0 8px;margin-right:4px;font-size:11px;line-height:30px;user-select:none;border-radius:2px}.csf-form-show{display:block}.csf-form-success{color:#fff;background-color:#46b450}.csf-form-warning{color:#8a6d3b;background-color:#faebcc}.csf-label-error{position:relative;top:-2px;display:inline-block;font-size:10px;line-height:10px;height:10px;width:10px;padding:1px;font-style:normal;text-align:center;color:#fff;vertical-align:middle;background-color:#e10000;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.csf-no-option{padding:30px}.csf-input-number{-moz-appearance:textfield}.csf-input-number::-webkit-inner-spin-button,.csf-input-number::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.csf-welcome-wrap{position:relative;margin:25px 40px 0 20px;font-size:15px;max-width:1200px}.csf-welcome-wrap p{font-size:14px;line-height:1.5}.csf-welcome-wrap h1{margin:.2em 200px 0 0;padding:0;color:#32373c;line-height:1.2em;font-size:2.8em;font-weight:400}.csf-welcome-wrap .csf-logo{position:absolute;overflow:hidden;top:0;right:0;height:160px;width:140px;background-image:linear-gradient(45deg,#2d67cb,#ad19f3);box-shadow:0 1px 4px rgba(0,0,0,.25),inset 0 0 0 4px rgba(0,0,0,.25)}.csf-welcome-wrap .csf-logo .csf--effects i{position:absolute;width:200px;height:100px;background-color:rgba(0,0,0,.15);transform:rotate(-45deg)}.csf-welcome-wrap .csf-logo .csf--effects i:nth-child(1){bottom:-20px;right:-70px}.csf-welcome-wrap .csf-logo .csf--effects i:nth-child(2){bottom:-35px;right:-80px}.csf-welcome-wrap .csf-logo .csf--effects i:nth-child(3){bottom:-50px;right:-90px}.csf-welcome-wrap .csf-logo .csf--effects i:nth-child(4){bottom:-65px;right:-100px}.csf-welcome-wrap .csf-logo .csf--wp-logos{position:relative;padding-top:25px;text-align:center}.csf-welcome-wrap .csf-logo .csf--wp-logo{position:absolute;left:20px;width:20px;height:20px;background-repeat:no-repeat;background-position:center center;background-image:url(../images/wp-logo.svg)}.csf-welcome-wrap .csf-logo .csf--wp-plugin-logo{display:inline-block;width:50px;height:50px;border:3px solid #fff;background-size:40px;background-repeat:no-repeat;background-position:center center;background-image:url(../images/wp-plugin-logo.svg);border-radius:100%;vertical-align:middle}.csf-welcome-wrap .csf-logo .csf--text{position:absolute;left:0;right:0;top:90px;color:#fff;font-size:13px;line-height:1.2em;font-weight:600;text-align:center;text-transform:uppercase;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.csf-welcome-wrap .csf-logo .csf--version{top:auto;left:auto;right:8px;bottom:4px;font-size:11px;text-transform:lowercase}.csf-welcome-wrap .csf-about-text{font-weight:400;line-height:1.6em;font-size:19px;margin:1em 200px 1em 0;color:#555d66}.csf-welcome-wrap .csf-demo-button{margin:1em 200px 2em 0}.csf-welcome-wrap .nav-tab-wrapper{margin-bottom:20px}.csf-welcome-wrap ul{list-style-type:disc;padding-left:15px}.csf-welcome-wrap .csf--col{float:left;padding-right:20px;box-sizing:border-box}.csf-welcome-wrap .csf--col-2{width:50%}.csf-welcome-wrap .csf--col-3{width:33.333%}.csf-welcome-wrap .csf--col-4{width:25%}.csf-welcome-wrap .csf--col-5{width:20%}.csf-welcome-wrap .csf--col-last{padding-right:0}.csf-welcome-wrap .csf--col-upgrade{padding:10px 0;text-align:center;border-top:1px solid #e5e5e5}.csf--table-compare tfoot td,.csf--table-compare thead td{text-align:center}.csf--table-compare td{font-size:14px;text-align:center;vertical-align:middle;padding:10px}.csf--table-compare td:first-child{text-align:left}.csf--table-compare tfoot td{padding:15px 0}.csf--table-compare .fa{font-size:18px}.csf--table-compare .fa-check-circle{color:#46b450}.csf--table-compare .fa-times-circle{color:#dc3232}.csf-welcome-cols{clear:both;margin:20px 0;background-color:#fff;padding:0 0;border-radius:2px;border:1px solid #e5e5e5}.csf-welcome-cols .csf--col{width:33.333%;float:left;padding:20px;text-align:center;box-sizing:border-box;min-height:200px;border-right:1px solid #e5e5e5}.csf-welcome-cols .csf--block,.csf-welcome-cols .csf--left{float:left;width:20%;padding:0 30px;text-align:center;box-sizing:border-box}.csf-welcome-cols .csf--block{width:80%}.csf-welcome-cols .csf--col-first{border-bottom:1px solid #e5e5e5}.csf-welcome-cols .csf--last{border-right:none}.csf-welcome-cols .csf--space{height:20px}.csf-welcome-cols .csf--icon{display:inline-block;font-size:20px;width:30px;height:30px;line-height:30px;text-align:center;margin-bottom:10px;color:#fff;background-color:#555;border-radius:30px}.csf-welcome-cols .csf--active{background-color:#5cb85c}.csf-welcome-cols .csf--deactive{background-color:#e14d43}.csf-welcome-cols .csf--title{font-weight:700;display:block}.csf-welcome-cols p:last-child{margin-bottom:0}.csf-features-cols .csf--key-features{width:30%}.csf-features-cols .csf--available-fields{width:70%}.csf-code-block{margin:20px 0;padding:5px 20px;background-color:#fff;border-radius:2px;box-shadow:0 1px 1px rgba(0,0,0,.15)}.csf-code-block pre{font-size:13px;color:#0073aa}.csf-code-block pre span{color:#999}.csf--table-fields td{font-size:14px}.csf--upgrade a{color:#5cb85c;font-weight:700}.csf--upgrade a:focus,.csf--upgrade a:hover{color:#4aa14a;outline:0;box-shadow:none}@media only screen and (max-width:782px){.csf-welcome-cols .csf--col{width:100%;min-height:auto;border-right:none;border-bottom:1px solid #e5e5e5}.csf-features-cols .csf--key-features{width:100%}.csf-features-cols .csf--available-fields{width:100%}}@media only screen and (max-width:1200px){.csf-metabox .csf-field .csf-title{float:none;width:100%;margin-bottom:10px}.csf-metabox .csf-field .csf-fieldset{float:none;width:100%}}@media only screen and (max-width:782px){.csf-header-inner{text-align:center}.csf-header-inner h1{width:100%;margin-bottom:10px}.csf-form-result{float:none;margin-right:0;margin-bottom:10px}.csf-header-left,.csf-header-right,.csf-search{width:100%}.csf-search{text-align:center;margin-bottom:15px}.csf-footer{text-align:center}.csf-buttons{float:none}.csf-copyright{float:none;margin-top:10px}.csf-expand-all,.csf-nav,.csf-nav-background,.csf-reset-section{display:none!important}.csf-content{margin-left:0}.csf-section,.csf-section-title{display:block!important}.csf-field .csf-title{float:none;width:100%;margin-bottom:10px}.csf-field .csf-fieldset{float:none;width:100%}.csf-field-color .button.wp-picker-clear{padding:0 8px;line-height:2.14285714;min-height:32px}.csf-modal-inner{width:350px;height:400px}.csf-modal-content{height:237px}.csf-icon-dialog .csf-modal-inner{width:305px;height:380px}.csf-icon-dialog .csf-modal-content{height:267px}.csf-modal-icon .csf-modal-inner{width:330px;height:385px}.csf-modal-icon .csf-modal-content{height:252px}.csf-profile-options>.csf-field>.csf-title,.csf-taxonomy-edit-fields>.csf-field>.csf-title{float:none;width:100%;margin-bottom:10px}.csf-profile-options>.csf-field>.csf-fieldset,.csf-taxonomy-edit-fields>.csf-field>.csf-fieldset{float:none;width:100%}.csf-nav-menu-options>.csf-fields{margin-left:-10px;margin-right:-10px}.csf-nav-menu-options>.csf-fields>.csf-field{padding:10px}}.chosen-container{position:relative;display:inline-block;vertical-align:middle;font-size:13px;user-select:none}.chosen-container *{box-sizing:border-box}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;width:100%;border:1px solid #aaa;border-top:0;background:#fff;box-shadow:0 4px 5px rgba(0,0,0,.15);clip:rect(0,0,0,0);clip-path:inset(100% 100%)}.chosen-container.chosen-with-drop .chosen-drop{clip:auto;clip-path:none}.chosen-container a{cursor:pointer}.chosen-container .chosen-single .group-name,.chosen-container .search-choice .group-name{margin-right:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:400;color:#999}.chosen-container .chosen-single .group-name:after,.chosen-container .search-choice .group-name:after{content:":";padding-left:2px;vertical-align:top}.chosen-container-single .chosen-single{position:relative;display:block;overflow:hidden;padding:0 0 0 8px;height:25px;border:1px solid #aaa;border-radius:5px;background-color:#fff;background:linear-gradient(#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background-clip:padding-box;box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);color:#444;text-decoration:none;white-space:nowrap;line-height:24px}.chosen-container-single .chosen-default{color:#999}.chosen-container-single .chosen-single span{display:block;overflow:hidden;margin-right:26px;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:6px;right:26px;display:block;width:12px;height:12px;font-size:1px}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;width:18px;height:100%}.chosen-container-single .chosen-single div b{display:block;width:100%;height:100%}.chosen-container-single .chosen-search{position:relative;z-index:1010;margin:0;padding:3px 4px;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{margin:1px 0;padding:4px 20px 4px 5px;width:100%;height:auto;outline:0;border:1px solid #aaa;font-size:1em;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-single .chosen-drop{margin-top:-1px;border-radius:0 0 4px 4px;background-clip:padding-box}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;clip:rect(0,0,0,0);clip-path:inset(100% 100%)}.chosen-container .chosen-results{color:#444;position:relative;overflow-x:hidden;overflow-y:auto;margin:0 4px 4px 0;padding:0 0 0 4px;max-height:240px;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;margin:0;padding:5px 6px;list-style:none;line-height:15px;word-wrap:break-word;-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{background-color:#3875d7;background-image:linear-gradient(#3875d7 20%,#2a62bc 90%);color:#fff}.chosen-container .chosen-results li.no-results{color:#777;display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;overflow:hidden;margin:0;padding:0 5px;width:100%;height:auto;border:1px solid #aaa;background-color:#fff;background-image:linear-gradient(#eee 1%,#fff 15%);cursor:text}.chosen-container-multi .chosen-choices li{float:left;list-style:none}.chosen-container-multi .chosen-choices li.search-field{margin:0;padding:0;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{margin:1px 0;padding:0;outline:0;border:0!important;background:0 0!important;box-shadow:none;color:#999;font-size:100%;font-family:sans-serif;line-height:normal;border-radius:0;width:25px;height:25px;min-height:25px}.chosen-container-multi .chosen-choices li.search-choice{position:relative;margin:3px 5px 3px 0;padding:3px 20px 3px 6px;border:1px solid #aaa;max-width:100%;border-radius:3px;background-color:#eee;background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-size:100% 19px;background-repeat:repeat-x;background-clip:padding-box;box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);color:#333;line-height:13px;cursor:default}.chosen-container-multi .chosen-choices li.search-choice span{word-wrap:break-word;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:0;right:0;display:block;width:12px;height:12px;font-size:1px}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;border:1px solid #ccc;background-color:#e4e4e4;background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);color:#666}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-results{margin:0;padding:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #aaa;border-bottom-right-radius:0;border-bottom-left-radius:0;background-image:linear-gradient(#eee 20%,#fff 80%);box-shadow:0 1px 0 #fff inset}.chosen-container-active.chosen-with-drop .chosen-single div{border-left:none;background:0 0}.chosen-container-active .chosen-choices{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#222!important}.chosen-disabled{opacity:.5!important;cursor:default}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-rtl{text-align:right}.chosen-rtl .chosen-single{overflow:visible;padding:0 8px 0 0}.chosen-rtl .chosen-single span{margin-right:0;margin-left:26px;direction:rtl}.chosen-rtl .chosen-single-with-deselect span{margin-left:38px}.chosen-rtl .chosen-single div{right:auto;left:3px}.chosen-rtl .chosen-single abbr{right:auto;left:26px}.chosen-rtl .chosen-choices li{float:right}.chosen-rtl .chosen-choices li.search-field input[type=text]{direction:rtl}.chosen-rtl .chosen-choices li.search-choice{margin:3px 5px 3px 0;padding:3px 5px 3px 19px}.chosen-rtl .chosen-choices li.search-choice .search-choice-close{right:auto;left:4px}.chosen-rtl.chosen-container-single .chosen-results{margin:0 0 4px 4px;padding:0 4px 0 0}.chosen-rtl .chosen-results li.group-option{padding-right:15px;padding-left:0}.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div{border-right:none}.chosen-rtl .chosen-search input[type=text]{padding:4px 5px 4px 20px;direction:rtl}
\ No newline at end of file
diff --git a/assets/images/checkerboard.png b/assets/images/checkerboard.png
new file mode 100644
index 0000000..f97dade
Binary files /dev/null and b/assets/images/checkerboard.png differ
diff --git a/assets/images/wp-logo.svg b/assets/images/wp-logo.svg
new file mode 100644
index 0000000..a415fd6
--- /dev/null
+++ b/assets/images/wp-logo.svg
@@ -0,0 +1 @@
+
diff --git a/assets/images/wp-plugin-logo.svg b/assets/images/wp-plugin-logo.svg
new file mode 100644
index 0000000..967f446
--- /dev/null
+++ b/assets/images/wp-plugin-logo.svg
@@ -0,0 +1 @@
+
diff --git a/assets/js/main.min.js b/assets/js/main.min.js
new file mode 100644
index 0000000..f7ba8c7
--- /dev/null
+++ b/assets/js/main.min.js
@@ -0,0 +1,3 @@
+/* Codestar Framework | A Simple and Lightweight WordPress Option Framework - v2.1.7*/
+
+!function(A,_,b,y){"use strict";var E=E||{};E.funcs={},E.vars={onloaded:!1,$body:A("body"),$window:A(_),$document:A(b),$form_warning:null,is_confirm:!1,form_modified:!1,code_themes:[],is_rtl:A("body").hasClass("rtl")},E.helper={uid:function(e){return(e||"")+Math.random().toString(36).substr(2,9)},preg_quote:function(e){return(e+"").replace(/(\[|\-|\])/g,"\\$1")},name_nested_replace:function(e,t){var n=new RegExp("("+E.helper.preg_quote(t)+")\\[(\\d+)\\]","g");e.find(":radio").each(function(){(this.checked||this.orginal_checked)&&(this.orginal_checked=!0)}),e.each(function(e){A(this).find(":input").each(function(){this.name=this.name.replace(n,t+"["+e+"]"),this.orginal_checked&&(this.checked=!0)})})},debounce:function(i,a,s){var c;return function(){var e=this,t=arguments,n=s&&!c;clearTimeout(c),c=setTimeout(function(){c=null,s||i.apply(e,t)},a),n&&i.apply(e,t)}}},A.fn.csf_clone=function(){for(var e=A.fn.clone.apply(this,arguments),t=this.find("select").add(this.filter("select")),n=e.find("select").add(e.filter("select")),i=0;i .csf-field:not(.csf-depend-on)"),i=t.find("> .csf-title, .csf-search-tags");3");A("#csf-codemirror-css").after(e),e.attr({rel:"stylesheet",id:"csf-codemirror-"+a.theme+"-css",href:a.cdnURL+"/theme/"+a.theme+".min.css",type:"text/css",media:"all"}),E.vars.code_themes.push(a.theme)}CodeMirror.modeURL=a.cdnURL+"/mode/%N/%N.min.js",CodeMirror.autoLoadMode(n,a.mode),n.on("change",function(e,t){i.val(n.getValue()).trigger("change")}),clearInterval(s)}})}})},A.fn.csf_field_date=function(){return this.each(function(){var e=A(this),i=e.find("input"),a=e.find(".csf-date-settings").data("settings"),t={showAnim:"",beforeShow:function(e,t){A(t.dpDiv).addClass("csf-datepicker-wrapper")},onClose:function(e,t){A(t.dpDiv).removeClass("csf-datepicker-wrapper")}};a=A.extend({},a,t),2===i.length&&(a=A.extend({},a,{onSelect:function(e){A(this),i.first();var t=i.first().attr("id")===A(this).attr("id")?"minDate":"maxDate",n=A.datepicker.parseDate(a.dateFormat,e);i.not(this).datepicker("option",t,n)}})),i.each(function(){var e=A(this);e.hasClass("hasDatepicker")&&e.removeAttr("id").removeClass("hasDatepicker"),e.datepicker(a)})})},A.fn.csf_field_fieldset=function(){return this.each(function(){A(this).find(".csf-fieldset-content").csf_reload_script()})},A.fn.csf_field_gallery=function(){return this.each(function(){var s,e=A(this),c=e.find(".csf-edit-gallery"),r=e.find(".csf-clear-gallery"),o=e.find("ul"),f=e.find("input");e.find("img");e.on("click",".csf-button, .csf-edit-gallery",function(e){var t=A(this),n=f.val(),i=t.hasClass("csf-edit-gallery")?"edit":"add",a="add"!==i||n.length?"gallery-edit":"gallery";e.preventDefault(),void 0!==_.wp&&_.wp.media&&_.wp.media.gallery&&("gallery"===a?(s=_.wp.media({library:{type:"image"},frame:"post",state:"gallery",multiple:!0})).open():(s=_.wp.media.gallery.edit('[gallery ids="'+n+'"]'),"add"===i&&s.setState("gallery-library")),s.on("update",function(e){o.empty();var t=e.models.map(function(e){var t=e.toJSON(),n=t.sizes&&t.sizes.thumbnail&&t.sizes.thumbnail.url?t.sizes.thumbnail.url:t.url;return o.append(' '),t.id});f.val(t.join(",")).trigger("change"),r.removeClass("hidden"),c.removeClass("hidden")}))}),r.on("click",function(e){e.preventDefault(),o.empty(),f.val("").trigger("change"),r.addClass("hidden"),c.addClass("hidden")})})},A.fn.csf_field_group=function(){return this.each(function(){var e=A(this),t=e.children(".csf-fieldset"),n=t.length?t:e,o=n.children(".csf-cloneable-wrapper"),a=n.children(".csf-cloneable-hidden"),f=n.children(".csf-cloneable-max"),l=n.children(".csf-cloneable-min"),d=o.data("field-id"),s=o.data("unique-id"),h=Boolean(Number(o.data("title-number"))),p=parseInt(o.data("max")),i=parseInt(o.data("min"));o.hasClass("ui-accordion")&&o.find(".ui-accordion-header-icon").remove();var u=function(e){e.find(".csf-cloneable-title-number").each(function(e){A(this).html(A(this).closest(".csf-cloneable-item").index()+1+".")})};o.accordion({header:"> .csf-cloneable-item > .csf-cloneable-title",collapsible:!0,active:!1,animate:!1,heightStyle:"content",icons:{header:"csf-cloneable-header-icon fas fa-angle-right",activeHeader:"csf-cloneable-header-icon fas fa-angle-down"},activate:function(e,t){var n=t.newPanel,i=t.newHeader;if(n.length&&!n.data("opened")){var a=n.children().first().find(":input").first(),s=i.find(".csf-cloneable-value");a.on("change keyup",function(e){s.text(a.val())}),n.csf_reload_script(),n.data("opened",!0),n.data("retry",!1)}else n.data("retry")&&(n.csf_reload_script_retry(),n.data("retry",!1))}}),o.sortable({axis:"y",handle:".csf-cloneable-title,.csf-cloneable-sort",helper:"original",cursor:"move",placeholder:"widget-placeholder",start:function(e,t){o.accordion({active:!1}),o.sortable("refreshPositions"),t.item.children(".csf-cloneable-content").data("retry",!0)},update:function(e,t){E.helper.name_nested_replace(o.children(".csf-cloneable-item"),d),o.csf_customizer_refresh(),h&&u(o)}}),n.children(".csf-cloneable-add").on("click",function(e){e.preventDefault();var t=o.children(".csf-cloneable-item").length;if(l.hide(),p&&p ');r.append(i),r.append(a),r.append(s),o.children().eq(n.index()).after(r),E.helper.name_nested_replace(o.children(".csf-cloneable-item"),d),o.accordion("refresh"),o.csf_customizer_refresh(),o.csf_customizer_listen({closest:!0}),h&&u(o)}};o.children(".csf-cloneable-item").children(".csf-cloneable-helper").on("click",".csf-cloneable-clone",c),n.children(".csf-cloneable-hidden").children(".csf-cloneable-helper").on("click",".csf-cloneable-clone",c);var r=function(e){e.preventDefault();var t=o.children(".csf-cloneable-item").length;f.hide(),l.hide(),i&&t-1OpenStreetMap contributors'}).addTo(r);var o=L.marker(c.center,{draggable:!0}).addTo(r),f=function(e){i.val(e.lat),a.val(e.lng),s.val(r.getZoom())};r.on("click",function(e){o.setLatLng(e.latlng),f(e.latlng)}),r.on("zoom",function(){f(o.getLatLng())}),o.on("drag",function(){f(o.getLatLng())}),n.length||(n=A('[data-depend-id="'+e.find(".csf--address-field").data("address-field")+'"]'));var l={};n.autocomplete({source:function(e,n){var i=e.term;i in l?n(l[i]):A.get("https://nominatim.openstreetmap.org/search",{format:"json",q:i},function(e){var t;t=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."}],l[i]=t,n(t)})},select:function(e,t){if("no-data"===t.item.value)return!1;var n=L.latLng(t.item.lat,t.item.lon);r.panTo(n),o.setLatLng(n),f(n)},create:function(e,t){A(this).autocomplete("widget").addClass("csf-map-ui-autocomplate")}});var d=function(){var e=L.latLng(i.val(),a.val());r.panTo(e),o.setLatLng(e)};i.on("change",d),a.on("change",d)}})},A.fn.csf_field_media=function(){return this.each(function(){var i,a=A(this),s=a.find(".csf--button"),c=a.find(".csf--remove"),r=s.data("library")&&s.data("library").split(",")||"",o=!!a.hasClass("csf-assign-field-background")&&a.closest(".csf-field-background").find(".csf--auto-attributes");s.on("click",function(e){e.preventDefault(),void 0!==_.wp&&_.wp.media&&_.wp.media.gallery&&(i||(i=_.wp.media({library:{type:r}})).on("select",function(){var e,t=i.state().get("selection").first().attributes,n=s.data("preview-size")||"thumbnail";r.length&&-1===r.indexOf(t.subtype)&&-1===r.indexOf(t.type)||(a.find(".csf--id").val(t.id),a.find(".csf--width").val(t.width),a.find(".csf--height").val(t.height),a.find(".csf--alt").val(t.alt),a.find(".csf--title").val(t.title),a.find(".csf--description").val(t.description),e=void 0!==t.sizes&&void 0!==t.sizes.thumbnail&&"thumbnail"===n?t.sizes.thumbnail.url:void 0!==t.sizes&&void 0!==t.sizes.full?t.sizes.full.url:t.icon,o&&o.removeClass("csf--attributes-hidden"),c.removeClass("hidden"),a.find(".csf--preview").removeClass("hidden"),a.find(".csf--src").attr("src",e),a.find(".csf--thumbnail").val(e),a.find(".csf--url").val(t.url).trigger("change"))}),i.open())}),c.on("click",function(e){e.preventDefault(),o&&o.addClass("csf--attributes-hidden"),c.addClass("hidden"),a.find("input").val(""),a.find(".csf--preview").addClass("hidden"),a.find(".csf--url").trigger("change")})})},A.fn.csf_field_repeater=function(){return this.each(function(){var e=A(this),t=e.children(".csf-fieldset"),n=t.length?t:e,r=n.children(".csf-repeater-wrapper"),a=n.children(".csf-repeater-hidden"),o=n.children(".csf-repeater-max"),f=n.children(".csf-repeater-min"),l=r.data("field-id"),s=r.data("unique-id"),d=parseInt(r.data("max")),i=parseInt(r.data("min"));r.children(".csf-repeater-item").children(".csf-repeater-content").csf_reload_script(),r.sortable({axis:"y",handle:".csf-repeater-sort",helper:"original",cursor:"move",placeholder:"widget-placeholder",update:function(e,t){E.helper.name_nested_replace(r.children(".csf-repeater-item"),l),r.csf_customizer_refresh(),t.item.csf_reload_script_retry()}}),n.children(".csf-repeater-add").on("click",function(e){e.preventDefault();var t=r.children(".csf-repeater-item").length;if(f.hide(),d&&d ');c.append(i),c.append(a),r.children().eq(n.index()).after(c),c.children(".csf-repeater-content").csf_reload_script(),E.helper.name_nested_replace(r.children(".csf-repeater-item"),l),r.csf_customizer_refresh(),r.csf_customizer_listen({closest:!0})}};r.children(".csf-repeater-item").children(".csf-repeater-helper").on("click",".csf-repeater-clone",c),n.children(".csf-repeater-hidden").children(".csf-repeater-helper").on("click",".csf-repeater-clone",c);var h=function(e){e.preventDefault();var t=r.children(".csf-repeater-item").length;o.hide(),f.hide(),i&&t-1'+a+"")},spin:function(e,t){i.val(t.value).trigger("change")}})})},A.fn.csf_field_switcher=function(){return this.each(function(){var n=A(this).find(".csf--switcher");n.on("click",function(){var e=0,t=n.find("input");n.hasClass("csf--active")?n.removeClass("csf--active"):(e=1,n.addClass("csf--active")),t.val(e).trigger("change")})})},A.fn.csf_field_tabbed=function(){return this.each(function(){var e=A(this),t=e.find(".csf-tabbed-nav a"),a=e.find(".csf-tabbed-content");a.eq(0).csf_reload_script(),t.on("click",function(e){e.preventDefault();var t=A(this),n=t.index(),i=a.eq(n);t.addClass("csf-tabbed-active").siblings().removeClass("csf-tabbed-active"),i.csf_reload_script(),i.removeClass("hidden").siblings().addClass("hidden")})})},A.fn.csf_field_typography=function(){return this.each(function(){var S=this,j=A(this),i=[],L=csf_typography_json.webfonts,t=csf_typography_json.googlestyles,I=csf_typography_json.defaultstyles;S.sanitize_subset=function(e){return e=(e=e.replace("-ext"," Extended")).charAt(0).toUpperCase()+e.slice(1)},S.sanitize_style=function(e){return t[e]?t[e]:e},S.load_google_font=function(e,t,n){e&&"object"==typeof WebFont&&(t=t?t.replace("normal",""):"",n=n?n.replace("normal",""):"",(t||n)&&(e=e+":"+t+n),-1===i.indexOf(e)&&WebFont.load({google:{families:[e]}}),i.push(e))},S.append_select_options=function(e,t,a,s,c){e.find("option").not(":first").remove();var r="";A.each(t,function(e,t){var n,i=t;n=c?a&&-1!==a.indexOf(t)?" selected":"":a&&a===t?" selected":"","subset"===s?i=S.sanitize_subset(t):"style"===s&&(i=S.sanitize_style(t)),r+='"+i+" "}),e.append(r).trigger("csf.change").trigger("chosen:updated")},S.init=function(){var l=[],e=j.find(".csf--typography"),d=j.find(".csf--type"),h=j.find(".csf--block-font-style"),v=e.data("unit"),g=e.data("line-height-unit"),t=e.data("exclude")?e.data("exclude").split(","):[];j.find(".csf--chosen").length&&j.find("select").each(function(){var e=A(this),t=e.parent().find(".chosen-container");t.length&&t.remove(),e.chosen({allow_single_deselect:!0,disable_search_threshold:15,width:"100%"})});var m=j.find(".csf--font-family"),i=m.val();m.find("option").not(":first-child").remove();var a="";A.each(L,function(n,e){t&&-1!==t.indexOf(n)||(a+='',A.each(e.fonts,function(e,t){a+='"+t+" "}),a+=" ")}),m.append(a).trigger("chosen:updated");var p=j.find(".csf--block-font-style");if(p.length){var u=j.find(".csf--font-style-select"),_=u.val()?u.val().replace(/normal/g,""):"";u.on("change csf.change",function(e){var t=u.val();!t&&l&&-1===l.indexOf("normal")&&(t=l[0]);var n=t&&"italic"!==t&&"normal"===t?"normal":"",i=t&&"italic"!==t&&"normal"!==t?t.replace("italic",""):n,a=t&&"italic"===t.substr(-6)?"italic":"";j.find(".csf--font-weight").val(i),j.find(".csf--font-style").val(a)});var b=j.find(".csf--block-extra-styles");if(b.length)var y=j.find(".csf--extra-styles"),w=y.val()}var C=j.find(".csf--block-subset");if(C.length)var x=j.find(".csf--subset"),k=x.val(),z=x.data("multiple")||!1;var D=j.find(".csf--block-backup-font-family");m.on("change csf.change",function(e){C.length&&C.addClass("hidden"),b.length&&b.addClass("hidden"),D.length&&D.addClass("hidden");var t=m.find(":selected"),n=t.val(),i=t.data("type");if(i&&n){if("google"!==i&&"custom"!==i||!D.length||D.removeClass("hidden"),p.length){var a=I;"google"===i&&L[i].fonts[n][0]?a=L[i].fonts[n][0]:"custom"===i&&L[i].fonts[n]&&(a=L[i].fonts[n]);var s=-1!==(l=a).indexOf("normal")?"normal":a[0],c=_&&-1!==a.indexOf(_)?_:s;S.append_select_options(u,a,c,"style"),_=!1,p.removeClass("hidden"),"google"===i&&b.length&&1'+t+"
"),i.find(".csf-error").length||i.append(s),a.find(".csf-arrow .csf-error").length||a.find(".csf-arrow").append(s)})}r.removeClass("csf-saving"),c.prop("disabled",!1).attr("value",n),o=!1,E.vars.form_modified=!1,E.vars.$form_warning.hide(),clearTimeout(i);var t=A(".csf-form-success");t.empty().append(e.notice).fadeIn("fast",function(){i=setTimeout(function(){t.fadeOut("fast")},1e3)})}).fail(function(e){alert(e.error)})):E.vars.form_modified=!1}o=!0})})},A.fn.csf_options=function(){return this.each(function(){var e=A(this),t=e.find(".csf-content"),n=e.find(".csf-form-success"),i=e.find(".csf-form-warning"),a=e.find(".csf-header .csf-save");(E.vars.$form_warning=i).length&&(_.onbeforeunload=function(){return!!E.vars.form_modified||y},t.on("change keypress",":input",function(){E.vars.form_modified||(n.hide(),i.fadeIn("fast"),E.vars.form_modified=!0)})),n.hasClass("csf-form-show")&&setTimeout(function(){n.fadeOut("fast")},1e3),A(b).keydown(function(e){if((e.ctrlKey||e.metaKey)&&83===e.which)return a.trigger("click"),e.preventDefault(),!1})})},A.fn.csf_taxonomy=function(){return this.each(function(){var e=A(this),t=e.parents("form");if("addtag"===t.attr("id")){var n=t.find("#submit"),i=e.find(".csf-field").csf_clone();n.on("click",function(){t.find(".form-required").hasClass("form-invalid")||(e.data("inited",!1),e.empty(),e.html(i),i=i.csf_clone(),e.csf_reload_script())})}})},A.fn.csf_shortcode=function(){var m=this;return m.shortcode_parse=function(e,n){var i="";return A.each(e,function(e,t){i+="["+(n=n||e),A.each(t,function(e,t){"content"===e?(i+="]",i+=t,i+="[/"+n):i+=m.shortcode_tags(e,t)}),i+="]"}),i},m.shortcode_tags=function(e,t){var n="";return""!==t&&("object"!=typeof t||A.isArray(t)?n+=" "+e.replace("-","_")+'="'+t.toString()+'"':A.each(t,function(e,t){switch(e){case"background-image":t=t.url?t.url:""}""!==t&&(n+=" "+e.replace("-","_")+'="'+t.toString()+'"')})),n},m.insertAtChars=function(e,t){var n=void 0!==e[0].name?e[0]:e;return n.value.length&&void 0!==n.selectionStart?(n.focus(),n.value.substring(0,n.selectionStart)+t+n.value.substring(n.selectionEnd,n.value.length)):(n.focus(),t)},m.send_to_editor=function(e,t){var n;if("undefined"!=typeof tinymce&&(n=tinymce.get(t)),n&&!n.isHidden())n.execCommand("mceInsertContent",!1,e);else{var i=A("#"+t);i.val(m.insertAtChars(i,e)).trigger("change")}},this.each(function(){var c,r,o,n,f,l,d,a,h,p=A(this),i=p.find(".csf-modal-load"),u=(p.find(".csf-modal-content"),p.find(".csf-modal-insert")),s=p.find(".csf-modal-loading"),t=p.find("select"),v=p.data("modal-id"),g=p.data("nonce");A(b).on("click",'.csf-shortcode-button[data-modal-id="'+v+'"]',function(e){e.preventDefault(),h=A(this),c=h.data("editor-id")||!1,r=h.data("target-id")||!1,o=h.data("gutenberg-id")||!1,p.removeClass("hidden"),p.hasClass("csf-shortcode-single")&&f===y&&t.trigger("change")}),t.on("change",function(){var e=A(this),t=e.find(":selected");n=e.val(),f=t.data("shortcode"),l=t.data("view")||"normal",d=t.data("group")||f,i.empty(),n?(s.show(),_.wp.ajax.post("csf-get-shortcode-"+v,{shortcode_key:n,nonce:g}).done(function(e){s.hide();var t=A(e.content).appendTo(i);u.parent().removeClass("hidden"),a=t.find(".csf--repeat-shortcode").csf_clone(),t.csf_reload_script(),t.find(".csf-fields").csf_reload_script()})):u.parent().addClass("hidden")}),u.on("click",function(e){if(e.preventDefault(),!u.prop("disabled")&&!u.attr("disabled")){var i="",t=p.find(".csf-field:not(.csf-depend-on)").find(":input:not(.ignore)").serializeObjectCSF();switch(l){case"contents":var n=f?t[f]:t;A.each(n,function(e,t){var n=f||e;i+="["+n+"]"+t+"[/"+n+"]"});break;case"group":i+="["+f,A.each(t[f],function(e,t){i+=m.shortcode_tags(e,t)}),i+="]",i+=m.shortcode_parse(t[d],d),i+="[/"+f+"]";break;case"repeater":i+=m.shortcode_parse(t[d],d);break;default:i+=m.shortcode_parse(t)}if(i=""===i?"["+f+"]":i,o){var a=_.csf_gutenberg_props.attributes.hasOwnProperty("shortcode")?_.csf_gutenberg_props.attributes.shortcode:"";_.csf_gutenberg_props.setAttributes({shortcode:a+i})}else if(c)m.send_to_editor(i,c);else{var s=r?A(r):h.parent().find("textarea");s.val(m.insertAtChars(s,i)).trigger("change")}p.addClass("hidden")}}),p.on("click",".csf--repeat-button",function(e){e.preventDefault();var t=p.find(".csf--repeatable"),n=a.csf_clone(),i=n.find(".csf-repeat-remove");n.appendTo(t);n.find(".csf-fields").csf_reload_script(),E.helper.name_nested_replace(p.find(".csf--repeat-shortcode"),d),i.on("click",function(){n.remove(),E.helper.name_nested_replace(p.find(".csf--repeat-shortcode"),d)})}),p.on("click",".csf-modal-close, .csf-modal-overlay",function(){p.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}),E.funcs.parse_color=function(e){var t=e.replace(/\s+/g,""),n=-1!==t.indexOf("rgba")?parseFloat(100*t.replace(/^.*,(.+)\)/,"$1")):100;return{value:t,transparent:n,rgba:n<100}},A.fn.csf_color=function(){return this.each(function(){var c,r=A(this),o=E.funcs.parse_color(r.val()),e=!_.csf_vars.color_palette.length||_.csf_vars.color_palette;r.hasClass("wp-color-picker")&&r.closest(".wp-picker-container").after(r).remove(),r.wpColorPicker({palettes:e,change:function(e,t){var n=t.color.toString();c.removeClass("csf--transparent-active"),c.find(".csf--transparent-offset").css("background-color",n),r.val(n).trigger("change")},create:function(){c=r.closest(".wp-picker-container");var i=r.data("a8cIris"),e=A('').appendTo(c.find(".wp-picker-holder")),a=e.find(".csf--transparent-slider"),s=e.find(".csf--transparent-text"),n=e.find(".csf--transparent-offset"),t=e.find(".csf--transparent-button");"transparent"===r.val()&&c.addClass("csf--transparent-active"),t.on("click",function(){"transparent"!==r.val()?(r.val("transparent").trigger("change").removeClass("iris-error"),c.addClass("csf--transparent-active")):(r.val(i._color.toString()).trigger("change"),c.removeClass("csf--transparent-active"))}),a.slider({value:o.transparent,step:1,min:0,max:100,slide:function(e,t){var n=parseFloat(t.value/100);i._color._alpha=n,r.wpColorPicker("color",i._color.toString()),s.text(1===n||0===n?"":n)},create:function(){var e=parseFloat(o.transparent/100),t=e<1?e:"";s.text(t),n.css("background-color",o.value),c.on("click",".wp-picker-clear",function(){i._color._alpha=1,s.text(""),a.slider("option","value",100),c.removeClass("csf--transparent-active"),r.trigger("change")}),c.on("click",".wp-picker-default",function(){var e=E.funcs.parse_color(r.data("default-color")),t=parseFloat(e.transparent/100),n=t<1?t:"";i._color._alpha=t,s.text(n),a.slider("option","value",e.transparent)})}})}})})},A.fn.csf_chosen=function(){return this.each(function(){var s=A(this),e=s.parent().find(".chosen-container"),t=s.hasClass("csf-chosen-sortable")||!1,n=s.hasClass("csf-chosen-ajax")||!1,i=s.attr("multiple")||!1,a=i?"100%":"auto",c=A.extend({allow_single_deselect:!0,disable_search_threshold:10,width:a,no_results_text:_.csf_vars.i18n.no_results_text},s.data("chosen-settings"));if(e.length&&e.remove(),n){var r=A.extend({data:{type:"post",nonce:""},allow_single_deselect:!0,disable_search_threshold:-1,width:"100%",min_length:3,type_delay:500,typing_text:_.csf_vars.i18n.typing_text,searching_text:_.csf_vars.i18n.searching_text,no_results_text:_.csf_vars.i18n.no_results_text},s.data("chosen-settings"));s.CSFAjaxChosen(r)}else s.chosen(c);if(i){var o=s.parent().find(".csf-hide-select"),f=o.val()||[];s.on("change",function(e,t){t&&t.selected?o.append(''+t.selected+" "):t&&t.deselected&&o.find('option[value="'+t.deselected+'"]').remove(),_.wp.customize!==y&&0===o.children().length&&o.data("customize-setting-link")&&_.wp.customize.control(o.data("customize-setting-link")).setting.set(""),o.trigger("change")}),s.CSFChosenOrder(f,!0)}if(t){var l=s.parent().find(".chosen-container").find(".chosen-choices");l.bind("mousedown",function(e){A(e.target).is("span")&&e.stopPropagation()}),l.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="",a=s.data("chosen"),n=s.parent().find(".csf-hide-select");l.find(".search-choice-close").each(function(){var n=A(this).data("option-array-index");A.each(a.results_data,function(e,t){t.array_index===n&&(i+=''+t.value+" ")})}),n.children().remove(),n.append(i),n.trigger("change")}})}})},A.fn.csf_checkbox=function(){return this.each(function(){var e=A(this),t=e.find(".csf--input"),n=e.find(".csf--checkbox");n.on("click",function(){t.val(Number(n.prop("checked"))).trigger("change")})})},A.fn.csf_siblings=function(){return this.each(function(){var t=A(this),e=t.find(".csf--sibling"),n=t.data("multiple")||!1;e.on("click",function(){var e=A(this);n?e.hasClass("csf--active")?(e.removeClass("csf--active"),e.find("input").prop("checked",!1).trigger("change")):(e.addClass("csf--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("csf--active").siblings().removeClass("csf--active"))})})},A.fn.csf_help=function(){return this.each(function(){var e,t,n=A(this);n.on({mouseenter:function(){e=A('
').html(n.find(".csf-help-text").html()).appendTo("body"),t=E.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()}})})},A.fn.csf_customizer_refresh=function(){return this.each(function(){var e=A(this),t=e.closest(".csf-customize-complex");if(t.length){var n=t.find(":input"),i=t.data("unique-id"),a=t.data("option-id"),s=n.serializeObjectCSF(),c=A.isEmptyObject(s)?"":s[i][a],r=_.wp.customize.control(i+"["+a+"]");r.setting._value=null,r.setting.set(c)}else e.find(":input").first().trigger("change");A(b).trigger("csf-customizer-refresh",e)})},A.fn.csf_customizer_listen=function(e){var t=A.extend({closest:!1},e);return this.each(function(){if(_.wp.customize!==y){var n=t.closest?A(this).closest(".csf-customize-complex"):A(this),e=n.find(":input"),i=n.data("unique-id"),a=n.data("option-id");i!==y&&e.on("change keyup",E.helper.debounce(function(){var e=n.find(":input").serializeObjectCSF(),t=!A.isEmptyObject(e)&&e[i]&&e[i][a]?e[i][a]:"";_.wp.customize.control(i+"["+a+"]").setting.set(t)},250))}})},A(b).on("expanded",".control-section",function(){var e=A(this);if(e.hasClass("open")&&!e.data("inited")){var t=e.find(".csf-customize-field"),n=e.find(".csf-customize-complex");t.length&&(e.csf_dependency(),t.csf_reload_script({dependency:!1}),n.csf_customizer_listen()),e.data("inited",!0)}}),E.vars.$window.on("resize csf.resize",E.helper.debounce(function(e){(-1'+this.options.typing_text.replace("%s",this.options.min_length-t.length)+"")},e.prototype.update_list=function(){var e=this;if(this.search_welcome_message(),!this.is_typing){var t=o.trim(this.search_field.val()),s=t.length ").attr("value",e.value).html(e.text).appendTo(s.element)});var e=this.search_field.val(),n=this.search_field.innerWidth();if(this.element.trigger("chosen:updated"),this.is_multiple){var r=this.element.parent().find(".csf-hide-select").val()||[];this.element.CSFChosenOrder(r,!0),this.search_field.css("width",n)}this.search_field.val(e),null!==this.chosenXhr.done&&this.chosenXhr.done(t)}},o.fn.CSFAjaxChosen=function(t){return this.each(function(){new e(this,t)})}}(jQuery),function(){var s,i,o=[].indexOf||function(t){for(var e=0,s=this.length;e"+this.escape_html(t.group_label)+""+t.html:t.html},n.prototype.mouse_enter=function(){return this.mouse_on_container=!0},n.prototype.mouse_leave=function(){return this.mouse_on_container=!1},n.prototype.input_focus=function(t){if(this.is_multiple){if(!this.active_field)return setTimeout((e=this,function(){return e.container_mousedown()}),50)}else if(!this.active_field)return this.activate_field();var e},n.prototype.input_blur=function(t){if(!this.mouse_on_container)return this.active_field=!1,setTimeout((e=this,function(){return e.blur_test()}),100);var e},n.prototype.label_click_handler=function(t){return this.is_multiple?this.container_mousedown(t):this.activate_field()},n.prototype.results_option_build=function(t){var e,s,i,n,r,o,h;for(e="",n=h=0,r=(o=this.results_data).length;n=this.max_shown_results));n++);return e},n.prototype.result_add_option=function(t){var e,s;return t.search_match&&this.include_option_in_results(t)?(e=[],t.disabled||t.selected&&this.is_multiple||e.push("active-result"),!t.disabled||t.selected&&this.is_multiple||e.push("disabled-result"),t.selected&&e.push("result-selected"),null!=t.group_array_index&&e.push("group-option"),""!==t.classes&&e.push(t.classes),(s=document.createElement("li")).className=e.join(" "),t.style&&(s.style.cssText=t.style),s.setAttribute("data-option-array-index",t.array_index),s.innerHTML=t.highlighted_html||t.html,t.title&&(s.title=t.title),this.outerHTML(s)):""},n.prototype.result_add_group=function(t){var e,s;return(t.search_match||t.group_match)&&0"+this.escape_html(s)+""+this.escape_html(p)),null!=u&&(u.group_match=!0)):null!=r.group_array_index&&this.results_data[r.group_array_index].search_match&&(r.search_match=!0)));return this.result_clear_highlight(),a<1&&h.length?(this.update_results_content(""),this.no_results(h)):(this.update_results_content(this.results_option_build()),(null!=t?t.skip_highlight:void 0)?void 0:this.winnow_results_set_highlight())},n.prototype.get_search_regex=function(t){var e,s;return s=this.search_contains?t:"(^|\\s|\\b)"+t+"[^\\s]*",this.enable_split_word_search||this.search_contains||(s="^"+s),e=this.case_sensitive_search?"":"i",new RegExp(s,e)},n.prototype.search_string_match=function(t,e){var s;return s=e.exec(t),!this.search_contains&&(null!=s?s[1]:void 0)&&(s.index+=1),s},n.prototype.choices_count=function(){var t,e,s;if(null!=this.selected_option_count)return this.selected_option_count;for(t=this.selected_option_count=0,e=(s=this.form_field.options).length;t\n '+this.default_text+' \n
\n\n'},n.prototype.get_multi_html=function(){return'\n'},n.prototype.get_no_results_html=function(t){return'\n '+this.results_none_found+" "+this.escape_html(t)+" \n "},n.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))},n.default_multiple_text="Select Some Options",n.default_single_text="Select an Option",n.default_no_result_text="No results match",n}(),(h=jQuery).fn.extend({chosen:function(i){return s.browser_is_supported()?this.each(function(t){var e,s;s=(e=h(this)).data("chosen"),"destroy"!==i?s instanceof n||e.data("chosen",new n(this,i)):s instanceof n&&s.destroy()}):this}}),n=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return function(t,e){for(var s in e)r.call(e,s)&&(t[s]=e[s]);function i(){this.constructor=t}i.prototype=e.prototype,t.prototype=new i,t.__super__=e.prototype}(e,s),e.prototype.setup=function(){return this.form_field_jq=h(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex},e.prototype.set_up_html=function(){var t,e;return(t=["chosen-container"]).push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&t.push(this.form_field.className),this.is_rtl&&t.push("chosen-rtl"),e={class:t.join(" "),title:this.form_field.title},this.form_field.id.length&&(e.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=h("
",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()},e.prototype.on_ready=function(){return this.form_field_jq.trigger("chosen:ready",{chosen:this})},e.prototype.register_observers=function(){var e,s,i,n,r,o,h,l,c,a,u,_,d,p,f,g,m,v,y,b,w,x,k,C;return this.container.on("touchstart.chosen",(e=this,function(t){e.container_mousedown(t)})),this.container.on("touchend.chosen",(s=this,function(t){s.container_mouseup(t)})),this.container.on("mousedown.chosen",(i=this,function(t){i.container_mousedown(t)})),this.container.on("mouseup.chosen",(n=this,function(t){n.container_mouseup(t)})),this.container.on("mouseenter.chosen",(r=this,function(t){r.mouse_enter(t)})),this.container.on("mouseleave.chosen",(o=this,function(t){o.mouse_leave(t)})),this.search_results.on("mouseup.chosen",(h=this,function(t){h.search_results_mouseup(t)})),this.search_results.on("mouseover.chosen",(l=this,function(t){l.search_results_mouseover(t)})),this.search_results.on("mouseout.chosen",(c=this,function(t){c.search_results_mouseout(t)})),this.search_results.on("mousewheel.chosen DOMMouseScroll.chosen",(a=this,function(t){a.search_results_mousewheel(t)})),this.search_results.on("touchstart.chosen",(u=this,function(t){u.search_results_touchstart(t)})),this.search_results.on("touchmove.chosen",(_=this,function(t){_.search_results_touchmove(t)})),this.search_results.on("touchend.chosen",(d=this,function(t){d.search_results_touchend(t)})),this.form_field_jq.on("chosen:updated.chosen",(p=this,function(t){p.results_update_field(t)})),this.form_field_jq.on("chosen:activate.chosen",(f=this,function(t){f.activate_field(t)})),this.form_field_jq.on("chosen:open.chosen",(g=this,function(t){g.container_mousedown(t)})),this.form_field_jq.on("chosen:close.chosen",(m=this,function(t){m.close_field(t)})),this.search_field.on("blur.chosen",(v=this,function(t){v.input_blur(t)})),this.search_field.on("keyup.chosen",(y=this,function(t){y.keyup_checker(t)})),this.search_field.on("keydown.chosen",(b=this,function(t){b.keydown_checker(t)})),this.search_field.on("focus.chosen",(w=this,function(t){w.input_focus(t)})),this.search_field.on("cut.chosen",(x=this,function(t){x.clipboard_event_checker(t)})),this.search_field.on("paste.chosen",(k=this,function(t){k.clipboard_event_checker(t)})),this.is_multiple?this.search_choices.on("click.chosen",(C=this,function(t){C.choices_click(t)})):this.container.on("click.chosen",function(t){t.preventDefault()})},e.prototype.destroy=function(){return h(this.container[0].ownerDocument).off("click.chosen",this.click_test_action),0 ",{class:"search-choice"}).html(""+this.choice_label(t)+" "),t.disabled?e.addClass("search-choice-disabled"):((s=h(" ",{class:"search-choice-close","data-option-array-index":t.array_index})).on("click.chosen",(i=this,function(t){return i.choice_destroy_link_click(t)})),e.append(s)),this.search_container.before(e)},e.prototype.choice_destroy_link_click=function(t){if(t.preventDefault(),t.stopPropagation(),!this.is_disabled)return this.choice_destroy(h(t.target))},e.prototype.choice_destroy=function(t){if(this.result_deselect(t[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")},e.prototype.get_search_field_value=function(){return this.search_field.val()},e.prototype.get_search_text=function(){return h.trim(this.get_search_field_value())},e.prototype.escape_html=function(t){return h("
").text(t).html()},e.prototype.winnow_results_set_highlight=function(){var t,e;if(null!=(t=(e=this.is_multiple?[]:this.search_results.find(".result-selected.active-result")).length?e.first():this.search_results.find(".active-result").first()))return this.result_do_highlight(t)},e.prototype.no_results=function(t){var e;return e=this.get_no_results_html(t),this.search_results.append(e),this.form_field_jq.trigger("chosen:no_results",{chosen:this})},e.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},e.prototype.keydown_arrow=function(){var t;return this.results_showing&&this.result_highlight?(t=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(t):void 0:this.results_show()},e.prototype.keyup_arrow=function(){var t;return this.results_showing||this.is_multiple?this.result_highlight?(t=this.result_highlight.prevAll("li.active-result")).length?this.result_do_highlight(t.first()):(0 ").css(n)).text(this.get_search_field_value()),h("body").append(t),o=t.width()+25,t.remove(),this.container.is(":visible")&&(o=Math.min(this.container.outerWidth()-10,o)),this.search_field.width(o)}},e.prototype.trigger_form_field_change=function(t){return this.form_field_jq.trigger("input",t),this.form_field_jq.trigger("change",t)},e}()}.call(this),function(o){"use strict";function n(t,e,s){this.init(t,e,s)}function t(){this.rules=[]}o.extend(n.prototype,{init:function(t,e,s){this.controller=t,this.condition=e,this.value=s,this.rules=[],this.controls=[]},evalCondition:function(t,e,s,i,n){if("=="==s)return this.checkBoolean(i)==this.checkBoolean(n);if("!="==s)return this.checkBoolean(i)!=this.checkBoolean(n);if(">="==s)return Number(n)>=Number(i);if("<="==s)return Number(n)<=Number(i);if(">"==s)return Number(n)>Number(i);if("<"==s)return Number(n)args['output_css'] ) || ! empty( $this->args['enqueue_webfont'] ) ) {
+ add_action( 'wp_enqueue_scripts', array( &$this, 'collect_output_css_and_typography' ), 10 );
+ }
+
+ }
+
+ 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;
+
+ if ( $field_type && $field_id ) {
+
+ CSF::maybe_include_field( $field_type );
+
+ $class_name = 'CSF_Field_' . $field_type;
+
+ 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( $class_name ) ) {
+
+ if ( method_exists( $class_name, 'output' ) || method_exists( $class_name, '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() ) {
+
+ 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 $class_name( $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';
+ $family = $instance->enqueue_google_fonts();
+
+ CSF::$webfonts[$method][$family] = ( ! empty( $this->webfonts[$family] ) ) ? $family . ':' . implode( ',', $this->webfonts[$family] ) : $family;
+ CSF::$subsets = $this->subsets;
+
+ }
+
+ // output css
+ if ( $field_output && $this->args['output_css'] ) {
+ CSF::$css .= $instance->output();
+ }
+
+ unset( $instance );
+
+ }
+
+ }
+
+ }
+
+ }
+
+ }
+
+ }
+
+ }
+}
diff --git a/classes/admin-options.class.php b/classes/admin-options.class.php
new file mode 100644
index 0000000..4e20c65
--- /dev/null
+++ b/classes/admin-options.class.php
@@ -0,0 +1,717 @@
+ 'Codestar Framework by Codestar ',
+ '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,
+
+ // admin bar menu settings
+ 'admin_bar_menu_icon' => '',
+ 'admin_bar_menu_priority' => 50,
+
+ // footer
+ 'footer_text' => '',
+ '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
+ 'theme' => 'dark',
+ 'class' => '',
+
+ // external default values
+ 'defaults' => array(),
+
+ );
+
+ // run framework construct
+ public function __construct( $key, $params = array() ) {
+
+ $this->unique = $key;
+ $this->args = apply_filters( "csf_{$this->unique}_args", wp_parse_args( $params['args'], $this->args ), $this );
+ $this->sections = apply_filters( "csf_{$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_csf_'. $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 );
+ }
+
+ public function pre_tabs( $sections ) {
+
+ $result = array();
+ $parents = array();
+ $count = 100;
+
+ 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_fields( $sections ) {
+
+ $result = array();
+
+ foreach ( $sections as $key => $section ) {
+ if ( ! empty( $section['fields'] ) ) {
+ foreach ( $section['fields'] as $field ) {
+ $result[] = $field;
+ }
+ }
+ }
+
+ return $result;
+ }
+
+ public function pre_sections( $sections ) {
+
+ $result = array();
+
+ foreach ( $this->pre_tabs as $tab ) {
+ if ( ! empty( $tab['subs'] ) ) {
+ foreach ( $tab['subs'] as $sub ) {
+ $sub['ptitle'] = $tab['title'];
+ $result[] = $sub;
+ }
+ }
+ if ( empty( $tab['subs'] ) ) {
+ $result[] = $tab;
+ }
+ }
+
+ return $result;
+ }
+
+ // add admin bar menu
+ public function add_admin_bar_menu( $wp_admin_bar ) {
+
+ 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.', 'csf' ) ) );
+ } 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 = 'csf_options_nonce'. $this->unique;
+ $nonce = ( ! empty( $response[$noncekey] ) ) ? $response[$noncekey] : '';
+ $options = ( ! empty( $response[$this->unique] ) ) ? $response[$this->unique] : array();
+ $transient = ( ! empty( $response['csf_transient'] ) ) ? $response['csf_transient'] : array();
+
+ if ( wp_verify_nonce( $nonce, 'csf_options_nonce' ) ) {
+
+ $importing = false;
+ $section_id = ( ! empty( $transient['section'] ) ) ? $transient['section'] : '';
+
+ if ( ! $ajax && ! empty( $response[ 'csf_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[ 'csf_import_data' ] ) ), true );
+ $options = ( is_array( $import_data ) && ! empty( $import_data ) ) ? $import_data : array();
+ $importing = true;
+ $this->notice = esc_html__( 'Success. Imported backup options.', 'csf' );
+
+ }
+
+ 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 options restored.', 'csf' );
+
+ } else if ( ! empty( $transient['reset_section'] ) && ! empty( $section_id ) ) {
+
+ if ( ! empty( $this->pre_sections[$section_id]['fields'] ) ) {
+
+ foreach ( $this->pre_sections[$section_id]['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 options restored for only this section.', 'csf' );
+
+ } 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( "csf_{$this->unique}_save", $data, $this );
+
+ do_action( "csf_{$this->unique}_save_before", $data, $this );
+
+ $this->options = $data;
+
+ $this->save_options( $data );
+
+ do_action( "csf_{$this->unique}_save_after", $data, $this );
+
+ if ( empty( $this->notice ) ) {
+ $this->notice = esc_html__( 'Settings saved.', 'csf' );
+ }
+
+ 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 );
+ }
+
+ do_action( "csf_{$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 );
+
+ }
+
+ if ( ! empty( $menu_hidden ) ) {
+ remove_menu_page( $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'] );
+ }
+
+ }
+
+ add_filter( 'admin_footer_text', array( &$this, 'add_admin_footer_text' ) );
+
+ }
+
+ public function add_admin_footer_text() {
+ $default = 'Thank you for creating with Codestar Framework ';
+ echo ( ! empty( $this->args['footer_credit'] ) ) ? wp_kses_post( $this->args['footer_credit'] ) : $default;
+ }
+
+ 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 ) ? ' csf-show-all' : '';
+ $ajax_class = ( $this->args['ajax_save'] ) ? ' csf-save-ajax' : '';
+ $sticky_class = ( $this->args['sticky_header'] ) ? ' csf-sticky-header' : '';
+ $wrapper_class = ( $this->args['framework_class'] ) ? ' '. $this->args['framework_class'] : '';
+ $theme = ( $this->args['theme'] ) ? ' csf-theme-'. $this->args['theme'] : '';
+ $class = ( $this->args['class'] ) ? ' '. $this->args['class'] : '';
+
+ do_action( 'csf_options_before' );
+
+ echo '';
+
+ echo '
';
+
+ echo '
';
+
+ echo '
';
+
+ echo '
';
+
+ echo ( ! empty( $this->args['footer_after'] ) ) ? wp_kses_post( $this->args['footer_after'] ) : '';
+
+ echo '
';
+
+ do_action( 'csf_options_after' );
+
+ }
+ }
+}
diff --git a/classes/fields.class.php b/classes/fields.class.php
new file mode 100644
index 0000000..00f2219
--- /dev/null
+++ b/classes/fields.class.php
@@ -0,0 +1,379 @@
+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'] ) ) ? ''. wp_kses_post( $this->field['before'] ) .'
' : '';
+ }
+
+ public function field_after() {
+
+ $output = ( ! empty( $this->field['after'] ) ) ? ''. wp_kses_post( $this->field['after'] ) .'
' : '';
+ $output .= ( ! empty( $this->field['desc'] ) ) ? '
'. wp_kses_post( $this->field['desc'] ) .'
' : '';
+ $output .= ( ! empty( $this->field['help'] ) ) ? ''. wp_kses_post( $this->field['help'] ) .'
' : '';
+ $output .= ( ! empty( $this->field['_error'] ) ) ? ''. wp_kses_post( $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;
+
+ 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 ) {
+
+ 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;
+
+ default:
+
+ if ( is_callable( $type .'_title' ) ) {
+ $options[$value] = call_user_func( $type .'_title', $value );
+ } else {
+ $options[$value] = ucfirst( $value );
+ }
+
+ break;
+
+ }
+
+ }
+
+ }
+
+ return $options;
+
+ }
+
+ }
+}
diff --git a/classes/setup.class.php b/classes/setup.class.php
new file mode 100644
index 0000000..66e3275
--- /dev/null
+++ b/classes/setup.class.php
@@ -0,0 +1,693 @@
+ 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();
+
+ // Initalize
+ public static function init() {
+
+ // Init action
+ do_action( 'csf_init' );
+
+ // Set directory constants
+ self::constants();
+
+ // Include files
+ self::includes();
+
+ // Setup textdomain
+ self::textdomain();
+
+ add_action( 'after_setup_theme', array( 'CSF', 'setup' ) );
+ add_action( 'init', array( 'CSF', 'setup' ) );
+ add_action( 'switch_theme', array( 'CSF', 'setup' ) );
+ add_action( 'admin_enqueue_scripts', array( 'CSF', 'add_admin_enqueue_scripts' ) );
+ add_action( 'wp_enqueue_scripts', array( 'CSF', 'add_typography_enqueue_styles' ), 80 );
+ add_action( 'wp_head', array( 'CSF', 'add_custom_css' ), 80 );
+
+ }
+
+ // Setup frameworks
+ public static function setup() {
+
+ // Welcome page
+ self::include_plugin_file( 'views/welcome.php' );
+
+ // Setup admin option framework
+ $params = array();
+ if ( ! 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;
+
+ CSF_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 ( ! 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;
+
+ CSF_Customize_Options::instance( $key, $params );
+
+ }
+ }
+ }
+
+ // Setup metabox option framework
+ $params = array();
+ if ( ! 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;
+
+ CSF_Metabox::instance( $key, $params );
+
+ }
+ }
+ }
+
+ // Setup nav menu option framework
+ $params = array();
+ if ( ! 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;
+
+ CSF_Nav_Menu_Options::instance( $key, $params );
+
+ }
+ }
+ }
+
+ // Setup profile option framework
+ $params = array();
+ if ( ! 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;
+
+ CSF_Profile_Options::instance( $key, $params );
+
+ }
+ }
+ }
+
+ // Setup taxonomy option framework
+ $params = array();
+ if ( ! 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;
+
+ CSF_Taxonomy_Options::instance( $key, $params );
+
+ }
+ }
+ }
+
+ // Setup widget option framework
+ if ( ! empty( self::$args['widget_options'] ) && class_exists( 'WP_Widget_Factory' ) ) {
+ $wp_widget_factory = new WP_Widget_Factory();
+ foreach ( self::$args['widget_options'] as $key => $value ) {
+ if ( ! isset( self::$inited[$key] ) ) {
+
+ self::$inited[$key] = true;
+ $wp_widget_factory->register( CSF_Widget::instance( $key, $value ) );
+
+ }
+ }
+ }
+
+ // Setup comment option framework
+ $params = array();
+ if ( ! 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;
+
+ CSF_Comment_Metabox::instance( $key, $params );
+
+ }
+ }
+ }
+
+ // Setup shortcode option framework
+ $params = array();
+ if ( ! 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;
+
+ CSF_Shortcoder::instance( $key, $params );
+
+ }
+ }
+
+ // Once editor setup for gutenberg and media buttons
+ if ( ! empty( CSF::$shortcode_instances ) ) {
+ CSF_Shortcoder::once_editor_setup();
+ }
+
+ }
+
+ do_action( 'csf_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 = wp_normalize_path( dirname( dirname( __FILE__ ) ) );
+ $theme_dir = wp_normalize_path( get_parent_theme_file_path() );
+ $plugin_dir = wp_normalize_path( WP_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( 'csf_override', 'csf-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() {
+
+ // Helpers
+ 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' );
+
+ // Includes 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' );
+
+ // Includes 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' );
+ }
+
+ }
+
+ // Maybe include a field class
+ public static function maybe_include_field( $type = '' ) {
+ if ( ! class_exists( 'CSF_Field_'. $type ) && class_exists( 'CSF_Fields' ) ) {
+ self::include_plugin_file( 'fields/'. $type .'/'. $type .'.php' );
+ }
+ }
+
+ // Setup textdomain
+ public static function textdomain() {
+ load_textdomain( 'csf', 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['type'] ) ) {
+ self::$fields[$field['type']] = $field;
+ }
+
+ }
+
+ }
+
+ }
+
+ // Enqueue admin and fields styles and scripts
+ public static function add_admin_enqueue_scripts() {
+
+ // Loads scripts and styles only when needed
+ $enqueue = false;
+ $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'] ) {
+ $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'] ) ) {
+ $enqueue = true;
+ }
+ }
+ }
+
+ if( ! empty( self::$args['taxonomy_options'] ) ) {
+ foreach ( self::$args['taxonomy_options'] as $argument ) {
+ if( $wpscreen->taxonomy === $argument['taxonomy'] ) {
+ $enqueue = true;
+ }
+ }
+ }
+
+ if( ! empty( self::$args['shortcode_options'] ) ) {
+ foreach ( self::$args['shortcode_options'] as $argument ) {
+ if( $argument['show_in_editor'] && $wpscreen->base === 'post' ) {
+ $enqueue = true;
+ }
+ }
+ }
+
+ if( ! empty( self::$args['widget_options'] ) && ( $wpscreen->id === 'widgets' || $wpscreen->id === 'customize' ) ) {
+ $enqueue = true;
+ }
+
+ if( ! empty( self::$args['customize_options'] ) && $wpscreen->id === 'customize' ) {
+ $enqueue = true;
+ }
+
+ if( ! empty( self::$args['nav_menu_options'] ) && $wpscreen->id === 'nav-menus' ) {
+ $enqueue = true;
+ }
+
+ if( ! empty( self::$args['profile_options'] ) && $wpscreen->id === 'profile' ) {
+ $enqueue = true;
+ }
+
+ if( ! empty( self::$args['comment_options'] ) && $wpscreen->id === 'comment' ) {
+ $enqueue = true;
+ }
+
+ if( $wpscreen->id === 'tools_page_csf-welcome' ) {
+ $enqueue = true;
+ }
+
+ if( ! $enqueue ) {
+ return;
+ }
+
+ // Check for developer mode
+ $min = ( self::$premium && SCRIPT_DEBUG ) ? '' : '.min';
+
+ // 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( 'csf_fa4', false ) ) {
+ wp_enqueue_style( 'csf-fa', 'https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome'. $min .'.css', array(), '4.7.0', 'all' );
+ } else {
+ wp_enqueue_style( 'csf-fa5', 'https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.13.0/css/all'. $min .'.css', array(), '5.13.0', 'all' );
+ wp_enqueue_style( 'csf-fa5-v4-shims', 'https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.13.0/css/v4-shims'. $min .'.css', array(), '5.13.0', 'all' );
+ }
+
+ // Main style
+ wp_enqueue_style( 'csf', CSF::include_plugin_url( 'assets/css/style'. $min .'.css' ), array(), self::$version, 'all' );
+
+ // Main RTL styles
+ if ( is_rtl() ) {
+ wp_enqueue_style( 'csf-rtl', CSF::include_plugin_url( 'assets/css/style-rtl'. $min .'.css' ), array(), self::$version, 'all' );
+ }
+
+ // Main scripts
+ wp_enqueue_script( 'csf-plugins', CSF::include_plugin_url( 'assets/js/plugins'. $min .'.js' ), array(), self::$version, true );
+ wp_enqueue_script( 'csf', CSF::include_plugin_url( 'assets/js/main'. $min .'.js' ), array( 'csf-plugins' ), self::$version, true );
+
+ // Main variables
+ wp_localize_script( 'csf', 'csf_vars', array(
+ 'color_palette' => apply_filters( 'csf_color_palette', array() ),
+ 'i18n' => array(
+ // global localize
+ 'confirm' => esc_html__( 'Are you sure?', 'csf' ),
+ 'reset_notification' => esc_html__( 'Restoring options.', 'csf' ),
+ 'import_notification' => esc_html__( 'Importing options.', 'csf' ),
+
+ // chosen localize
+ 'typing_text' => esc_html__( 'Please enter %s or more characters', 'csf' ),
+ 'searching_text' => esc_html__( 'Searching...', 'csf' ),
+ 'no_results_text' => esc_html__( 'No results match', 'csf' ),
+ ),
+ ) );
+
+ // Enqueue fields scripts and styles
+ $enqueued = array();
+
+ if ( ! empty( self::$fields ) ) {
+ foreach ( self::$fields as $field ) {
+ if ( ! empty( $field['type'] ) ) {
+ $classname = 'CSF_Field_' . $field['type'];
+ self::maybe_include_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( 'csf_enqueue' );
+
+ }
+
+ // Add typography enqueue styles to front page
+ public static function add_typography_enqueue_styles() {
+
+ if( ! empty( self::$webfonts ) ) {
+
+ if( ! empty( self::$webfonts['enqueue'] ) ) {
+
+ $api = '//fonts.googleapis.com/css';
+ $query = array( 'family' => implode( '%7C', self::$webfonts['enqueue'] ), 'display' => 'swap' );
+ $handle = 'csf-google-web-fonts';
+
+ if( ! empty( self::$subsets ) ) {
+ $query['subset'] = implode( ',', self::$subsets );
+ }
+
+ wp_enqueue_style( $handle, esc_url( add_query_arg( $query, $api ) ), array(), null );
+
+ } else {
+
+ wp_enqueue_script( 'csf-google-web-fonts', esc_url( '//ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js' ), array(), null );
+ wp_localize_script( 'csf-google-web-fonts', 'WebFontConfig', array( 'google' => array( 'families' => array_values( self::$webfonts['async'] ) ) ) );
+
+ }
+
+ }
+ }
+
+ // 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'] = sprintf( esc_html__( 'Ooops! This field type (%s) can not be used here, yet.', 'csf' ), ''. $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'] ) ) ? ' csf-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 ) ) ? ' csf-depend-visible' : ' csf-depend-hidden';
+
+ }
+
+ if ( ! empty( $field_type ) ) {
+
+ // These attributes has been sanitized above.
+ echo '';
+
+ if ( ! empty( $field['fancy_title'] ) ) {
+ echo '
' . wp_kses_post( $field['fancy_title'] ) .'
';
+ }
+
+ if ( ! empty( $field['title'] ) ) {
+ echo '
';
+ echo '
'. wp_kses_post( $field['title'] ) .' ';
+ echo ( ! empty( $field['subtitle'] ) ) ? '
'. wp_kses_post( $field['subtitle'] ) .'
' : '';
+ echo '
';
+ }
+
+ echo ( ! empty( $field['title'] ) || ! empty( $field['fancy_title'] ) ) ? '
' : '';
+
+ $value = ( ! isset( $value ) && isset( $field['default'] ) ) ? $field['default'] : $value;
+ $value = ( isset( $field['value'] ) ) ? $field['value'] : $value;
+
+ self::maybe_include_field( $field_type );
+
+ $classname = 'CSF_Field_'. $field_type;
+
+ if ( class_exists( $classname ) ) {
+ $instance = new $classname( $field, $value, $unique, $where, $parent );
+ $instance->render();
+ } else {
+ echo '
'. esc_html__( 'This field class is not available!', 'csf' ) .'
';
+ }
+
+ } else {
+ echo '
'. esc_html__( 'This type is not found!', 'csf' ) .'
';
+ }
+
+ echo ( ! empty( $field['title'] ) || ! empty( $field['fancy_title'] ) ) ? '
' : '';
+ echo '
';
+ echo '
';
+
+ }
+
+ }
+
+ CSF::init();
+}
diff --git a/codestar-framework.php b/codestar-framework.php
new file mode 100644
index 0000000..5c71cb3
--- /dev/null
+++ b/codestar-framework.php
@@ -0,0 +1,20 @@
+
+ * @link http://codestarframework.com
+ * @copyright 2015-2020 Codestar
+ *
+ *
+ * Plugin Name: Codestar Framework
+ * Plugin URI: http://codestarframework.com/
+ * Author: Codestar
+ * Author URI: http://codestarthemes.com/
+ * Version: 2.1.7
+ * Description: A Simple and Lightweight WordPress Option Framework for Themes and Plugins
+ * Text Domain: csf
+ * Domain Path: /languages
+ *
+ */
+require_once plugin_dir_path( __FILE__ ) .'classes/setup.class.php';
diff --git a/fields/accordion/accordion.php b/fields/accordion/accordion.php
new file mode 100644
index 0000000..f5bcfdb
--- /dev/null
+++ b/fields/accordion/accordion.php
@@ -0,0 +1,64 @@
+field_before();
+
+ echo '';
+
+ foreach ( $this->field['accordions'] as $key => $accordion ) {
+
+ echo '
';
+
+ $icon = ( ! empty( $accordion['icon'] ) ) ? 'csf--icon '. $accordion['icon'] : 'csf-accordion-icon fas fa-angle-right';
+
+ echo '
';
+ echo ' ';
+ echo esc_attr( $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'];
+
+ CSF::field( $field, $field_value, $unique_id, 'field/accordion' );
+
+ }
+
+ echo '
';
+
+ echo '
';
+
+ }
+
+ echo '
';
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/fields/background/background.php b/fields/background/background.php
new file mode 100644
index 0000000..dac64a7
--- /dev/null
+++ b/fields/background/background.php
@@ -0,0 +1,334 @@
+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,
+ 'background_image_library' => 'image',
+ 'background_image_placeholder' => esc_html__( 'No background selected', 'csf' ),
+ ) );
+
+ $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', 'csf' ) .'
' : '';
+
+ CSF::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', 'csf' ) .'
' : '';
+
+ CSF::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', 'csf' ) .'
' : '';
+
+ CSF::field( array(
+ 'id' => 'background-gradient-direction',
+ 'type' => 'select',
+ 'options' => array(
+ '' => esc_html__( 'Gradient Direction', 'csf' ),
+ 'to bottom' => esc_html__( '⇓ top to bottom', 'csf' ),
+ 'to right' => esc_html__( '⇒ left to right', 'csf' ),
+ '135deg' => esc_html__( '⇘ corner top to right', 'csf' ),
+ '-135deg' => esc_html__( '⇙ corner top to left', 'csf' ),
+ ),
+ ), $this->value['background-gradient-direction'], $this->field_name(), 'field/background' );
+
+ echo '
';
+
+ }
+
+ echo '
';
+
+ //
+ // Background Image
+ if ( ! empty( $args['background_image'] ) ) {
+
+ echo '';
+
+ CSF::field( array(
+ 'id' => 'background-image',
+ 'type' => 'media',
+ 'class' => 'csf-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'] ) ) ? ' csf--auto-attributes' : '';
+ $hidden_class = ( ! empty( $args['background_auto_attributes'] ) && empty( $this->value['background-image']['url'] ) ) ? ' csf--attributes-hidden' : '';
+
+ echo '';
+
+ //
+ // Background Position
+ if ( ! empty( $args['background_position'] ) ) {
+
+ CSF::field( array(
+ 'id' => 'background-position',
+ 'type' => 'select',
+ 'options' => array(
+ '' => esc_html__( 'Background Position', 'csf' ),
+ 'left top' => esc_html__( 'Left Top', 'csf' ),
+ 'left center' => esc_html__( 'Left Center', 'csf' ),
+ 'left bottom' => esc_html__( 'Left Bottom', 'csf' ),
+ 'center top' => esc_html__( 'Center Top', 'csf' ),
+ 'center center' => esc_html__( 'Center Center', 'csf' ),
+ 'center bottom' => esc_html__( 'Center Bottom', 'csf' ),
+ 'right top' => esc_html__( 'Right Top', 'csf' ),
+ 'right center' => esc_html__( 'Right Center', 'csf' ),
+ 'right bottom' => esc_html__( 'Right Bottom', 'csf' ),
+ ),
+ ), $this->value['background-position'], $this->field_name(), 'field/background' );
+
+ }
+
+ //
+ // Background Repeat
+ if ( ! empty( $args['background_repeat'] ) ) {
+
+ CSF::field( array(
+ 'id' => 'background-repeat',
+ 'type' => 'select',
+ 'options' => array(
+ '' => esc_html__( 'Background Repeat', 'csf' ),
+ 'repeat' => esc_html__( 'Repeat', 'csf' ),
+ 'no-repeat' => esc_html__( 'No Repeat', 'csf' ),
+ 'repeat-x' => esc_html__( 'Repeat Horizontally', 'csf' ),
+ 'repeat-y' => esc_html__( 'Repeat Vertically', 'csf' ),
+ ),
+ ), $this->value['background-repeat'], $this->field_name(), 'field/background' );
+
+ }
+
+ //
+ // Background Attachment
+ if ( ! empty( $args['background_attachment'] ) ) {
+
+ CSF::field( array(
+ 'id' => 'background-attachment',
+ 'type' => 'select',
+ 'options' => array(
+ '' => esc_html__( 'Background Attachment', 'csf' ),
+ 'scroll' => esc_html__( 'Scroll', 'csf' ),
+ 'fixed' => esc_html__( 'Fixed', 'csf' ),
+ ),
+ ), $this->value['background-attachment'], $this->field_name(), 'field/background' );
+
+ }
+
+ //
+ // Background Size
+ if ( ! empty( $args['background_size'] ) ) {
+
+ CSF::field( array(
+ 'id' => 'background-size',
+ 'type' => 'select',
+ 'options' => array(
+ '' => esc_html__( 'Background Size', 'csf' ),
+ 'cover' => esc_html__( 'Cover', 'csf' ),
+ 'contain' => esc_html__( 'Contain', 'csf' ),
+ 'auto' => esc_html__( 'Auto', 'csf' ),
+ ),
+ ), $this->value['background-size'], $this->field_name(), 'field/background' );
+
+ }
+
+ //
+ // Background Origin
+ if ( ! empty( $args['background_origin'] ) ) {
+
+ CSF::field( array(
+ 'id' => 'background-origin',
+ 'type' => 'select',
+ 'options' => array(
+ '' => esc_html__( 'Background Origin', 'csf' ),
+ 'padding-box' => esc_html__( 'Padding Box', 'csf' ),
+ 'border-box' => esc_html__( 'Border Box', 'csf' ),
+ 'content-box' => esc_html__( 'Content Box', 'csf' ),
+ ),
+ ), $this->value['background-origin'], $this->field_name(), 'field/background' );
+
+ }
+
+ //
+ // Background Clip
+ if ( ! empty( $args['background_clip'] ) ) {
+
+ CSF::field( array(
+ 'id' => 'background-clip',
+ 'type' => 'select',
+ 'options' => array(
+ '' => esc_html__( 'Background Clip', 'csf' ),
+ 'border-box' => esc_html__( 'Border Box', 'csf' ),
+ 'padding-box' => esc_html__( 'Padding Box', 'csf' ),
+ 'content-box' => esc_html__( 'Content Box', 'csf' ),
+ ),
+ ), $this->value['background-clip'], $this->field_name(), 'field/background' );
+
+ }
+
+ //
+ // Background Blend Mode
+ if ( ! empty( $args['background_blend_mode'] ) ) {
+
+ CSF::field( array(
+ 'id' => 'background-blend-mode',
+ 'type' => 'select',
+ 'options' => array(
+ '' => esc_html__( 'Background Blend Mode', 'csf' ),
+ 'normal' => esc_html__( 'Normal', 'csf' ),
+ 'multiply' => esc_html__( 'Multiply', 'csf' ),
+ 'screen' => esc_html__( 'Screen', 'csf' ),
+ 'overlay' => esc_html__( 'Overlay', 'csf' ),
+ 'darken' => esc_html__( 'Darken', 'csf' ),
+ 'lighten' => esc_html__( 'Lighten', 'csf' ),
+ 'color-dodge' => esc_html__( 'Color Dodge', 'csf' ),
+ 'saturation' => esc_html__( 'Saturation', 'csf' ),
+ 'color' => esc_html__( 'Color', 'csf' ),
+ 'luminosity' => esc_html__( 'Luminosity', 'csf' ),
+ ),
+ ), $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/fields/backup/backup.php b/fields/backup/backup.php
new file mode 100644
index 0000000..8dea72f
--- /dev/null
+++ b/fields/backup/backup.php
@@ -0,0 +1,42 @@
+unique;
+ $nonce = wp_create_nonce( 'csf_backup_nonce' );
+ $export = add_query_arg( array( 'action' => 'csf-export', 'unique' => $unique, 'nonce' => $nonce ), admin_url( 'admin-ajax.php' ) );
+
+ echo $this->field_before();
+
+ echo '';
+ echo ''. esc_html__( 'Import', 'csf' ) .' ';
+ echo '( '. esc_html__( 'copy-paste your backup string here', 'csf' ).' ) ';
+
+ echo ' ';
+ echo '';
+ echo ''. esc_html__( 'Export and Download Backup', 'csf' ) .' ';
+
+ echo ' ';
+ echo ''. esc_html__( 'Reset All', 'csf' ) .' ';
+ echo ''. esc_html__( 'Please be sure for reset all of options.', 'csf' ) .' ';
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/fields/border/border.php b/fields/border/border.php
new file mode 100644
index 0000000..208134e
--- /dev/null
+++ b/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', 'csf' ),
+ 'right_placeholder' => esc_html__( 'right', 'csf' ),
+ 'bottom_placeholder' => esc_html__( 'bottom', 'csf' ),
+ 'left_placeholder' => esc_html__( 'left', 'csf' ),
+ 'all_placeholder' => esc_html__( 'all', 'csf' ),
+ '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', 'csf' ),
+ 'dashed' => esc_html__( 'Dashed', 'csf' ),
+ 'dotted' => esc_html__( 'Dotted', 'csf' ),
+ 'double' => esc_html__( 'Double', 'csf' ),
+ 'inset' => esc_html__( 'Inset', 'csf' ),
+ 'outset' => esc_html__( 'Outset', 'csf' ),
+ 'groove' => esc_html__( 'Groove', 'csf' ),
+ 'ridge' => esc_html__( 'ridge', 'csf' ),
+ 'none' => esc_html__( 'None', 'csf' )
+ );
+
+ $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/fields/button_set/button_set.php b/fields/button_set/button_set.php
new file mode 100644
index 0000000..ae7d656
--- /dev/null
+++ b/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 provided for this option type.', 'csf' );
+
+ }
+
+ }
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/fields/callback/callback.php b/fields/callback/callback.php
new file mode 100644
index 0000000..efb3be5
--- /dev/null
+++ b/fields/callback/callback.php
@@ -0,0 +1,30 @@
+field['function'] ) && function_exists( $this->field['function'] ) ) {
+
+ $args = ( isset( $this->field['args'] ) ) ? $this->field['args'] : null;
+
+ call_user_func( $this->field['function'], $args );
+
+ }
+
+ }
+
+ }
+}
diff --git a/fields/checkbox/checkbox.php b/fields/checkbox/checkbox.php
new file mode 100644
index 0000000..e8b818f
--- /dev/null
+++ b/fields/checkbox/checkbox.php
@@ -0,0 +1,95 @@
+field, array(
+ 'inline' => false,
+ 'query_args' => array(),
+ ) );
+
+ $inline_class = ( $args['inline'] ) ? ' class="csf--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 '';
+
+ } else {
+
+ echo ( ! empty( $this->field['empty_message'] ) ) ? esc_attr( $this->field['empty_message'] ) : esc_html__( 'No data provided for this option type.', 'csf' );
+
+ }
+
+ } else {
+
+ echo '';
+ echo ' field_attributes() .'/>';
+ echo ' value, 1, false ) ) .'/>';
+ echo ( ! empty( $this->field['label'] ) ) ? ''. esc_attr( $this->field['label'] ) .' ' : '';
+ echo ' ';
+
+ }
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/fields/code_editor/code_editor.php b/fields/code_editor/code_editor.php
new file mode 100644
index 0000000..a83fcb0
--- /dev/null
+++ b/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( 'csf-codemirror' ) ) {
+ wp_enqueue_script( 'csf-codemirror', esc_url( $this->cdn_url . $this->version .'/lib/codemirror.min.js' ), array( 'csf' ), $this->version, true );
+ wp_enqueue_script( 'csf-codemirror-loadmode', esc_url( $this->cdn_url . $this->version .'/addon/mode/loadmode.min.js' ), array( 'csf-codemirror' ), $this->version, true );
+ }
+
+ if ( ! wp_style_is( 'csf-codemirror' ) ) {
+ wp_enqueue_style( 'csf-codemirror', esc_url( $this->cdn_url . $this->version .'/lib/codemirror.min.css' ), array(), $this->version );
+ }
+
+ }
+
+ }
+}
diff --git a/fields/color/color.php b/fields/color/color.php
new file mode 100644
index 0000000..dd43dec
--- /dev/null
+++ b/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/fields/color_group/color_group.php b/fields/color_group/color_group.php
new file mode 100644
index 0000000..5b86b40
--- /dev/null
+++ b/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/fields/content/content.php b/fields/content/content.php
new file mode 100644
index 0000000..2fca501
--- /dev/null
+++ b/fields/content/content.php
@@ -0,0 +1,28 @@
+field['content'] ) ) {
+
+ echo wp_kses_post( $this->field['content'] );
+
+ }
+
+ }
+
+ }
+}
diff --git a/fields/date/date.php b/fields/date/date.php
new file mode 100644
index 0000000..9c239c9
--- /dev/null
+++ b/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', 'csf' ),
+ 'text_to' => esc_html__( 'To', 'csf' ),
+ ) );
+
+ $value = wp_parse_args( $this->value, array(
+ 'from' => '',
+ 'to' => '',
+ ) );
+
+ echo ''. esc_attr( $args['text_from'] ) .' field_attributes() .'/> ';
+ echo ''. esc_attr( $args['text_to'] ) .' field_attributes() .'/> ';
+
+ } 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/fields/dimensions/dimensions.php b/fields/dimensions/dimensions.php
new file mode 100644
index 0000000..3d897ba
--- /dev/null
+++ b/fields/dimensions/dimensions.php
@@ -0,0 +1,101 @@
+field, array(
+ 'width_icon' => ' ',
+ 'height_icon' => ' ',
+ 'width_placeholder' => esc_html__( 'width', 'csf' ),
+ 'height_placeholder' => esc_html__( 'height', 'csf' ),
+ '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 ) ) ? ' csf--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/fields/fieldset/fieldset.php b/fields/fieldset/fieldset.php
new file mode 100644
index 0000000..1601b30
--- /dev/null
+++ b/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'];
+
+ CSF::field( $field, $field_value, $unique_id, 'field/fieldset' );
+
+ }
+
+ echo '
';
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/fields/gallery/gallery.php b/fields/gallery/gallery.php
new file mode 100644
index 0000000..7e8d527
--- /dev/null
+++ b/fields/gallery/gallery.php
@@ -0,0 +1,52 @@
+field, array(
+ 'add_title' => esc_html__( 'Add Gallery', 'csf' ),
+ 'edit_title' => esc_html__( 'Edit Gallery', 'csf' ),
+ 'clear_title' => esc_html__( 'Clear', 'csf' ),
+ ) );
+
+ $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 ''. esc_attr( $args['add_title'] ) .' ';
+ echo ''. esc_attr( $args['edit_title'] ) .' ';
+ echo ''. esc_attr( $args['clear_title'] ) .' ';
+ echo ' field_attributes() .'/>';
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/fields/group/group.php b/fields/group/group.php
new file mode 100644
index 0000000..9fe49f0
--- /dev/null
+++ b/fields/group/group.php
@@ -0,0 +1,146 @@
+field, array(
+ 'max' => 0,
+ 'min' => 0,
+ 'fields' => array(),
+ 'button_title' => esc_html__( 'Add New', 'csf' ),
+ 'accordion_title_prefix' => '',
+ 'accordion_title_number' => false,
+ 'accordion_title_auto' => true,
+ ) );
+
+ $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;
+
+ if ( ! empty( $this->parent ) && preg_match( '/'. preg_quote( '['. $this->field['id'] .']' ) .'/', $this->parent ) ) {
+
+ echo ''. esc_html__( 'Error: Nested field id can not be same with another nested field id.', 'csf' ) .'
';
+
+ } 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_parent = $this->parent .'['. $this->field['id'] .']';
+ $field_default = ( isset( $field['default'] ) ) ? $field['default'] : '';
+
+ CSF::field( $field, $field_default, '_nonce', 'field/group', $field_parent );
+
+ }
+ echo '
';
+
+ echo '
';
+
+ echo '';
+
+ if ( ! empty( $this->value ) ) {
+
+ $num = 0;
+
+ foreach ( $this->value as $value ) {
+
+ $first_id = ( isset( $this->field['fields'][0]['id'] ) ) ? $this->field['fields'][0]['id'] : '';
+ $first_value = ( isset( $value[$first_id] ) ) ? $value[$first_id] : '';
+ $first_value = ( is_array( $first_value ) ) ? reset( $first_value ) : $first_value;
+
+ 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( $first_value ) .' ' : '';
+ echo ' ';
+ echo ' ';
+
+ echo '
';
+
+ foreach ( $this->field['fields'] as $field ) {
+
+ $field_parent = $this->parent .'['. $this->field['id'] .']';
+ $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']] : '';
+
+ CSF::field( $field, $field_value, $field_unique, 'field/group', $field_parent );
+
+ }
+
+ echo '
';
+
+ echo '
';
+
+ $num++;
+
+ }
+
+ }
+
+ echo '
';
+
+ echo ''. esc_html__( 'You can not add more than', 'csf' ) .' '. esc_attr( $args['max'] ) .'
';
+ echo ''. esc_html__( 'You can not remove less than', 'csf' ) .' '. esc_attr( $args['min'] ) .'
';
+
+ echo ''. wp_kses_post( $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/fields/heading/heading.php b/fields/heading/heading.php
new file mode 100644
index 0000000..f03c65f
--- /dev/null
+++ b/fields/heading/heading.php
@@ -0,0 +1,24 @@
+field['content'] ) ) ? wp_kses_post( $this->field['content'] ) : '';
+
+ }
+
+ }
+}
diff --git a/fields/icon/fa4-icons.php b/fields/icon/fa4-icons.php
new file mode 100644
index 0000000..112f308
--- /dev/null
+++ b/fields/icon/fa4-icons.php
@@ -0,0 +1,10 @@
+ '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/fields/icon/fa5-icons.php b/fields/icon/fa5-icons.php
new file mode 100644
index 0000000..137bd78
--- /dev/null
+++ b/fields/icon/fa5-icons.php
@@ -0,0 +1,10 @@
+ '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-adobe','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-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-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-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','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-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','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','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-instagram','fab fa-instagram-square','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-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','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','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','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','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','fab fa-tripadvisor','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','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-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','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','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','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-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/fields/icon/icon.php b/fields/icon/icon.php
new file mode 100644
index 0000000..4d0a83c
--- /dev/null
+++ b/fields/icon/icon.php
@@ -0,0 +1,71 @@
+field, array(
+ 'button_title' => esc_html__( 'Add Icon', 'csf' ),
+ 'remove_title' => esc_html__( 'Remove Icon', 'csf' ),
+ ) );
+
+ echo $this->field_before();
+
+ $nonce = wp_create_nonce( 'csf_icon_nonce' );
+ $hidden = ( empty( $this->value ) ) ? ' hidden' : '';
+
+ echo '';
+
+ echo $this->field_after();
+
+ }
+
+ public function enqueue() {
+ add_action( 'admin_footer', array( &$this, 'add_footer_modal_icon' ) );
+ add_action( 'customize_controls_print_footer_scripts', array( &$this, 'add_footer_modal_icon' ) );
+ }
+
+ public function add_footer_modal_icon() {
+ ?>
+
+ field, array(
+ 'multiple' => false,
+ 'options' => array(),
+ ) );
+
+ $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 ) ) ? ' csf--active' : '';
+ $checked = ( in_array( $key, $value ) ) ? ' checked' : '';
+
+ echo '
';
+ echo '
';
+ echo '
field_attributes() . esc_attr( $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/fields/index.php b/fields/index.php
new file mode 100644
index 0000000..49d255d
--- /dev/null
+++ b/fields/index.php
@@ -0,0 +1 @@
+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', 'csf' ),
+ 'hover' => esc_html__( 'Hover', 'csf' ),
+ 'active' => esc_html__( 'Active', 'csf' ),
+ 'visited' => esc_html__( 'Visited', 'csf' ),
+ 'focus' => esc_html__( 'Focus', 'csf' )
+ );
+
+ $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/fields/map/map.php b/fields/map/map.php
new file mode 100644
index 0000000..423a016
--- /dev/null
+++ b/fields/map/map.php
@@ -0,0 +1,98 @@
+field, array(
+ 'placeholder' => esc_html__( 'Search your address...', 'csf' ),
+ 'latitude_text' => esc_html__( 'Latitude', 'csf' ),
+ 'longitude_text' => esc_html__( 'Longitude', 'csf' ),
+ '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( 'csf-leaflet' ) ) {
+ wp_enqueue_script( 'csf-leaflet', esc_url( $this->cdn_url . $this->version .'/dist/leaflet.js' ), array( 'csf' ), $this->version, true );
+ }
+
+ if ( ! wp_style_is( 'csf-leaflet' ) ) {
+ wp_enqueue_style( 'csf-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/fields/media/media.php b/fields/media/media.php
new file mode 100644
index 0000000..b542831
--- /dev/null
+++ b/fields/media/media.php
@@ -0,0 +1,86 @@
+field, array(
+ 'url' => true,
+ 'preview' => true,
+ 'library' => array(),
+ 'button_title' => esc_html__( 'Upload', 'csf' ),
+ 'remove_title' => esc_html__( 'Remove', 'csf' ),
+ '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__( 'No media selected', 'csf' ) .'"' : '';
+
+ echo $this->field_before();
+
+ if ( ! empty( $args['preview'] ) ) {
+ echo '';
+ }
+
+ echo '';
+
+ echo ' ';
+ echo ' ';
+ echo ' ';
+ echo ' ';
+ echo ' ';
+ echo ' ';
+ echo ' ';
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/fields/notice/notice.php b/fields/notice/notice.php
new file mode 100644
index 0000000..d0d36dd
--- /dev/null
+++ b/fields/notice/notice.php
@@ -0,0 +1,26 @@
+field['style'] ) ) ? $this->field['style'] : 'normal';
+
+ echo ( ! empty( $this->field['content'] ) ) ? ''. wp_kses_post( $this->field['content'] ) .'
' : '';
+
+ }
+
+ }
+}
diff --git a/fields/number/number.php b/fields/number/number.php
new file mode 100644
index 0000000..c91fb6f
--- /dev/null
+++ b/fields/number/number.php
@@ -0,0 +1,60 @@
+field, array(
+ 'unit' => '',
+ ) );
+
+ echo $this->field_before();
+ echo '';
+ echo ' field_attributes( array( 'class' => 'csf-input-number' ) ) .'/>';
+ 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/fields/palette/palette.php b/fields/palette/palette.php
new file mode 100644
index 0000000..5cbd6ba
--- /dev/null
+++ b/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 ) ? ' csf--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/fields/radio/radio.php b/fields/radio/radio.php
new file mode 100644
index 0000000..a2d57b6
--- /dev/null
+++ b/fields/radio/radio.php
@@ -0,0 +1,93 @@
+field, array(
+ 'inline' => false,
+ 'query_args' => array(),
+ ) );
+
+ $inline_class = ( $args['inline'] ) ? ' class="csf--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 provided for this option type.', 'csf' );
+
+ }
+
+ } else {
+
+ $label = ( isset( $this->field['label'] ) ) ? $this->field['label'] : '';
+ echo ' field_attributes() . esc_attr( checked( $this->value, 1, false ) ) .'/>';
+ echo ( ! empty( $this->field['label'] ) ) ? ''. esc_attr( $this->field['label'] ) .' ' : '';
+ echo ' ';
+
+ }
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/fields/repeater/repeater.php b/fields/repeater/repeater.php
new file mode 100644
index 0000000..7aa865f
--- /dev/null
+++ b/fields/repeater/repeater.php
@@ -0,0 +1,116 @@
+field, array(
+ 'max' => 0,
+ 'min' => 0,
+ 'button_title' => ' ',
+ ) );
+
+ $fields = $this->field['fields'];
+ $unique_id = ( ! empty( $this->unique ) ) ? $this->unique : $this->field['id'];
+
+ if ( $this->parent && preg_match( '/'. preg_quote( '['. $this->field['id'] .']' ) .'/', $this->parent ) ) {
+
+ echo ''. esc_html__( 'Error: Nested field id can not be same with another nested field id.', 'csf' ) .'
';
+
+ } else {
+
+ echo $this->field_before();
+
+ echo '';
+ echo '
';
+ foreach ( $fields as $field ) {
+
+ $field_parent = $this->parent .'['. $this->field['id'] .']';
+ $field_default = ( isset( $field['default'] ) ) ? $field['default'] : '';
+
+ CSF::field( $field, $field_default, '_nonce', 'field/repeater', $field_parent );
+
+ }
+ 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 ( $fields as $field ) {
+
+ $field_parent = $this->parent .'['. $this->field['id'] .']';
+ $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']] : '';
+
+ CSF::field( $field, $field_value, $field_unique, 'field/repeater', $field_parent );
+
+ }
+ echo '
';
+
+ echo '
';
+ echo '
';
+ echo ' ';
+ echo ' ';
+ echo ' ';
+ echo '
';
+ echo '
';
+
+ echo '
';
+
+ $num++;
+
+ }
+
+ }
+
+ echo '
';
+
+ echo ''. esc_html__( 'You can not add more than', 'csf' ) .' '. esc_attr( $args['max'] ) .'
';
+ echo ''. esc_html__( 'You can not remove less than', 'csf' ) .' '. esc_attr( $args['min'] ) .'
';
+
+ echo ''. wp_kses_post( $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/fields/select/select.php b/fields/select/select.php
new file mode 100644
index 0000000..9e10189
--- /dev/null
+++ b/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( 'csf_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'] ) ? ' csf-chosen-sortable' : '';
+ $chosen_ajax = ( $args['chosen'] && $args['ajax'] ) ? ' csf-chosen-ajax' : '';
+ $placeholder_attr = ( $args['chosen'] && $args['placeholder'] ) ? ' data-placeholder="'. esc_attr( $args['placeholder'] ) .'"' : '';
+ $field_class = ( $args['chosen'] ) ? ' class="csf-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 '';
+ foreach ( $this->value as $option_key ) {
+ echo ''. esc_attr( $option_key ) .' ';
+ }
+ echo ' ';
+
+ $field_name = '_pseudo';
+ $field_attr = '';
+
+ }
+
+ // These attributes has been serialized above.
+ echo '';
+
+ if ( $args['placeholder'] && empty( $args['multiple'] ) ) {
+ if ( ! empty( $args['chosen'] ) ) {
+ echo ' ';
+ } else {
+ echo ''. esc_attr( $args['placeholder'] ) .' ';
+ }
+ }
+
+ foreach ( $options as $option_key => $option ) {
+
+ if ( is_array( $option ) && ! empty( $option ) ) {
+
+ echo '';
+
+ foreach ( $option as $sub_key => $sub_value ) {
+ $selected = ( in_array( $sub_key, $this->value ) ) ? ' selected' : '';
+ echo ''. esc_attr( $sub_value ) .' ';
+ }
+
+ echo ' ';
+
+ } else {
+ $selected = ( in_array( $option_key, $this->value ) ) ? ' selected' : '';
+ echo ''. esc_attr( $option ) .' ';
+ }
+
+ }
+
+ echo ' ';
+
+ } else {
+
+ echo ( ! empty( $this->field['empty_message'] ) ) ? esc_attr( $this->field['empty_message'] ) : esc_html__( 'No data provided for this option type.', 'csf' );
+
+ }
+
+ }
+
+ echo $this->field_after();
+
+ }
+
+ public function enqueue() {
+
+ if ( ! wp_script_is( 'jquery-ui-sortable' ) ) {
+ wp_enqueue_script( 'jquery-ui-sortable' );
+ }
+
+ }
+
+ }
+}
diff --git a/fields/slider/slider.php b/fields/slider/slider.php
new file mode 100644
index 0000000..7fbe0a0
--- /dev/null
+++ b/fields/slider/slider.php
@@ -0,0 +1,78 @@
+field, array(
+ 'max' => 100,
+ 'min' => 0,
+ 'step' => 1,
+ 'unit' => '',
+ ) );
+
+ $is_unit = ( ! empty( $args['unit'] ) ) ? ' csf--is-unit' : '';
+
+ echo $this->field_before();
+
+ echo '';
+ echo '
';
+ echo '
';
+ echo ' field_attributes( array( 'class' => 'csf-input-number'. esc_attr( $is_unit ) ) ) .' data-max="'. esc_attr( $args['max'] ) .'" data-min="'. esc_attr( $args['min'] ) .'" data-step="'. esc_attr( $args['step'] ) .'" />';
+ 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/fields/sortable/sortable.php b/fields/sortable/sortable.php
new file mode 100644
index 0000000..3f5d97b
--- /dev/null
+++ b/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'];
+
+ CSF::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/fields/sorter/sorter.php b/fields/sorter/sorter.php
new file mode 100644
index 0000000..dd8ae7f
--- /dev/null
+++ b/fields/sorter/sorter.php
@@ -0,0 +1,73 @@
+field, array(
+ 'disabled' => true,
+ 'enabled_title' => esc_html__( 'Enabled', 'csf' ),
+ 'disabled_title' => esc_html__( 'Disabled', 'csf' ),
+ ) );
+
+ 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 ( $args['disabled'] ) ? '' : '';
+
+ echo ( ! empty( $args['enabled_title'] ) ) ? '
'. esc_attr( $args['enabled_title'] ) .'
' : '';
+ echo '
';
+ if ( ! empty( $enabled_options ) ) {
+ foreach ( $enabled_options as $key => $value ) {
+ echo ''. esc_attr( $value ) .' ';
+ }
+ }
+ 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 ''. esc_attr( $value ) .' ';
+ }
+ }
+ 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/fields/spacing/spacing.php b/fields/spacing/spacing.php
new file mode 100644
index 0000000..57cb193
--- /dev/null
+++ b/fields/spacing/spacing.php
@@ -0,0 +1,150 @@
+field, array(
+ 'top_icon' => ' ',
+ 'right_icon' => ' ',
+ 'bottom_icon' => ' ',
+ 'left_icon' => ' ',
+ 'all_icon' => ' ',
+ 'top_placeholder' => esc_html__( 'top', 'csf' ),
+ 'right_placeholder' => esc_html__( 'right', 'csf' ),
+ 'bottom_placeholder' => esc_html__( 'bottom', 'csf' ),
+ 'left_placeholder' => esc_html__( 'left', 'csf' ),
+ 'all_placeholder' => esc_html__( 'all', 'csf' ),
+ '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 ) ) ? ' csf--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';
+ $mode = ( $mode === 'relative' || $mode === 'absolute' || $mode === 'none' ) ? '' : $mode;
+ $mode = ( ! empty( $mode ) ) ? $mode .'-' : '';
+
+ if ( ! empty( $this->field['all'] ) && isset( $this->value['all'] ) && $this->value['all'] !== '' ) {
+
+ $output = $element .'{';
+ $output .= $mode .'top:'. $this->value['all'] . $unit . $important .';';
+ $output .= $mode .'right:'. $this->value['all'] . $unit . $important .';';
+ $output .= $mode .'bottom:'. $this->value['all'] . $unit . $important .';';
+ $output .= $mode .'left:'. $this->value['all'] . $unit . $important .';';
+ $output .= '}';
+
+ } else {
+
+ $top = ( isset( $this->value['top'] ) && $this->value['top'] !== '' ) ? $mode .'top:'. $this->value['top'] . $unit . $important .';' : '';
+ $right = ( isset( $this->value['right'] ) && $this->value['right'] !== '' ) ? $mode .'right:'. $this->value['right'] . $unit . $important .';' : '';
+ $bottom = ( isset( $this->value['bottom'] ) && $this->value['bottom'] !== '' ) ? $mode .'bottom:'. $this->value['bottom'] . $unit . $important .';' : '';
+ $left = ( isset( $this->value['left'] ) && $this->value['left'] !== '' ) ? $mode .'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/fields/spinner/spinner.php b/fields/spinner/spinner.php
new file mode 100644
index 0000000..968d12f
--- /dev/null
+++ b/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' => 'csf-input-number' ) ) .' data-max="'. esc_attr( $args['max'] ) .'" data-min="'. esc_attr( $args['min'] ) .'" data-step="'. esc_attr( $args['step'] ) .'" data-unit="'. esc_attr( $args['unit'] ) .'"/>
';
+
+ 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/fields/subheading/subheading.php b/fields/subheading/subheading.php
new file mode 100644
index 0000000..9fc85f0
--- /dev/null
+++ b/fields/subheading/subheading.php
@@ -0,0 +1,24 @@
+field['content'] ) ) ? wp_kses_post( $this->field['content'] ) : '';
+
+ }
+
+ }
+}
diff --git a/fields/submessage/submessage.php b/fields/submessage/submessage.php
new file mode 100644
index 0000000..84b7adc
--- /dev/null
+++ b/fields/submessage/submessage.php
@@ -0,0 +1,26 @@
+field['style'] ) ) ? $this->field['style'] : 'normal';
+
+ echo ''. wp_kses_post( $this->field['content'] ) .'
';
+
+ }
+
+ }
+}
diff --git a/fields/switcher/switcher.php b/fields/switcher/switcher.php
new file mode 100644
index 0000000..cf02e6f
--- /dev/null
+++ b/fields/switcher/switcher.php
@@ -0,0 +1,40 @@
+value ) ) ? ' csf--active' : '';
+ $text_on = ( ! empty( $this->field['text_on'] ) ) ? $this->field['text_on'] : esc_html__( 'On', 'csf' );
+ $text_off = ( ! empty( $this->field['text_off'] ) ) ? $this->field['text_off'] : esc_html__( 'Off', 'csf' );
+ $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/fields/tabbed/tabbed.php b/fields/tabbed/tabbed.php
new file mode 100644
index 0000000..37595cc
--- /dev/null
+++ b/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 ) ) ? 'csf-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'];
+
+ CSF::field( $field, $field_value, $unique_id, 'field/tabbed' );
+
+ }
+
+ echo '
';
+
+ }
+ echo '
';
+
+ echo $this->field_after();
+
+ }
+
+ }
+}
diff --git a/fields/text/text.php b/fields/text/text.php
new file mode 100644
index 0000000..6e06eac
--- /dev/null
+++ b/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/fields/textarea/textarea.php b/fields/textarea/textarea.php
new file mode 100644
index 0000000..2f4f4da
--- /dev/null
+++ b/fields/textarea/textarea.php
@@ -0,0 +1,49 @@
+field_before();
+ echo $this->shortcoder();
+ echo '';
+ echo $this->field_after();
+
+ }
+
+ public function shortcoder() {
+
+ if ( ! empty( $this->field['shortcoder'] ) ) {
+
+ $shortcoder = ( is_array( $this->field['shortcoder'] ) ) ? $this->field['shortcoder'] : array_filter( (array) $this->field['shortcoder'] );
+
+ foreach ( $shortcoder as $shortcode_id ) {
+
+ if ( isset( CSF::$args['shortcode_options'][$shortcode_id] ) ) {
+
+ $setup_args = CSF::$args['shortcode_options'][$shortcode_id];
+ $button_title = ( ! empty( $setup_args['button_title'] ) ) ? $setup_args['button_title'] : esc_html__( 'Add Shortcode', 'csf' );
+
+ echo ''. wp_kses_post( $button_title ) .' ';
+
+ }
+
+ }
+
+ }
+
+ }
+ }
+}
diff --git a/fields/typography/google-fonts.php b/fields/typography/google-fonts.php
new file mode 100644
index 0000000..4129f7c
--- /dev/null
+++ b/fields/typography/google-fonts.php
@@ -0,0 +1,999 @@
+[['normal','italic'],['latin']],
+ 'Abel'=>[['normal'],['latin']],
+ 'Abhaya Libre'=>[['normal','500','600','700','800'],['latin','latin-ext','sinhala']],
+ 'Abril Fatface'=>[['normal'],['latin','latin-ext']],
+ 'Aclonica'=>[['normal'],['latin']],
+ 'Acme'=>[['normal'],['latin']],
+ 'Actor'=>[['normal'],['latin']],
+ 'Adamina'=>[['normal'],['latin']],
+ 'Advent Pro'=>[['100','200','300','normal','500','600','700'],['greek','latin','latin-ext']],
+ 'Aguafina Script'=>[['normal'],['latin','latin-ext']],
+ 'Akronim'=>[['normal'],['latin','latin-ext']],
+ 'Aladin'=>[['normal'],['latin','latin-ext']],
+ 'Alata'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Alatsi'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Aldrich'=>[['normal'],['latin']],
+ 'Alef'=>[['normal','700'],['hebrew','latin']],
+ 'Alegreya'=>[['normal','italic','500','500italic','700','700italic','800','800italic','900','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'=>[['300','300italic','normal','italic','700','700italic'],['latin','latin-ext']],
+ 'Alex Brush'=>[['normal'],['latin','latin-ext']],
+ 'Alfa Slab One'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Alice'=>[['normal'],['cyrillic','cyrillic-ext','latin']],
+ 'Alike'=>[['normal'],['latin']],
+ 'Alike Angular'=>[['normal'],['latin']],
+ 'Allan'=>[['normal','700'],['latin','latin-ext']],
+ 'Allerta'=>[['normal'],['latin']],
+ 'Allerta Stencil'=>[['normal'],['latin']],
+ 'Allura'=>[['normal'],['latin','latin-ext']],
+ 'Almarai'=>[['300','normal','700','800'],['arabic']],
+ 'Almendra'=>[['normal','italic','700','700italic'],['latin','latin-ext']],
+ 'Almendra Display'=>[['normal'],['latin','latin-ext']],
+ 'Almendra SC'=>[['normal'],['latin']],
+ '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']],
+ 'Amita'=>[['normal','700'],['devanagari','latin','latin-ext']],
+ 'Anaheim'=>[['normal'],['latin','latin-ext']],
+ 'Andada'=>[['normal'],['latin','latin-ext']],
+ 'Andika'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Angkor'=>[['normal'],['khmer']],
+ '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']],
+ 'Arapey'=>[['normal','italic'],['latin']],
+ 'Arbutus'=>[['normal'],['latin','latin-ext']],
+ 'Arbutus Slab'=>[['normal'],['latin','latin-ext']],
+ 'Architects Daughter'=>[['normal'],['latin']],
+ 'Archivo'=>[['normal','italic','500','500italic','600','600italic','700','700italic'],['latin','latin-ext','vietnamese']],
+ 'Archivo Black'=>[['normal'],['latin','latin-ext']],
+ 'Archivo Narrow'=>[['normal','italic','500','500italic','600','600italic','700','700italic'],['latin','latin-ext','vietnamese']],
+ 'Aref Ruqaa'=>[['normal','700'],['arabic','latin']],
+ 'Arima Madurai'=>[['100','200','300','normal','500','700','800','900'],['latin','latin-ext','tamil','vietnamese']],
+ 'Arimo'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','greek','greek-ext','hebrew','latin','latin-ext','vietnamese']],
+ 'Arizonia'=>[['normal'],['latin','latin-ext']],
+ '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'=>[['normal','italic','500','500italic','600','600italic','700','700italic'],['latin','latin-ext','vietnamese']],
+ 'Asap Condensed'=>[['normal','italic','500','500italic','600','600italic','700','700italic'],['latin','latin-ext','vietnamese']],
+ 'Asar'=>[['normal'],['devanagari','latin','latin-ext']],
+ 'Asset'=>[['normal'],['latin']],
+ 'Assistant'=>[['200','300','normal','600','700','800'],['hebrew','latin']],
+ 'Astloch'=>[['normal','700'],['latin']],
+ 'Asul'=>[['normal','700'],['latin']],
+ 'Athiti'=>[['200','300','normal','500','600','700'],['latin','latin-ext','thai','vietnamese']],
+ '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']],
+ 'B612'=>[['normal','italic','700','700italic'],['latin']],
+ 'B612 Mono'=>[['normal','italic','700','700italic'],['latin']],
+ 'Bad Script'=>[['normal'],['cyrillic','latin']],
+ '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']],
+ '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 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'=>[['normal','700'],['khmer']],
+ 'Baumans'=>[['normal'],['latin']],
+ 'Bayon'=>[['normal'],['khmer']],
+ 'Be Vietnam'=>[['100','100italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic'],['latin','latin-ext','vietnamese']],
+ 'Bebas Neue'=>[['normal'],['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']],
+ 'Bentham'=>[['normal'],['latin']],
+ 'Berkshire Swash'=>[['normal'],['latin','latin-ext']],
+ 'Beth Ellen'=>[['normal'],['latin']],
+ 'Bevan'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Big Shoulders Display'=>[['100','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Big Shoulders Text'=>[['100','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']],
+ 'Bilbo Swash Caps'=>[['normal'],['latin','latin-ext']],
+ 'BioRhyme'=>[['200','300','normal','700','800'],['latin','latin-ext']],
+ 'BioRhyme Expanded'=>[['200','300','normal','700','800'],['latin','latin-ext']],
+ 'Biryani'=>[['200','300','normal','600','700','800','900'],['devanagari','latin','latin-ext']],
+ 'Bitter'=>[['normal','italic','700'],['latin','latin-ext']],
+ 'Black And White Picture'=>[['normal'],['korean','latin']],
+ 'Black Han Sans'=>[['normal'],['korean','latin']],
+ 'Black Ops One'=>[['normal'],['latin','latin-ext']],
+ 'Blinker'=>[['100','200','300','normal','600','700','800','900'],['latin','latin-ext']],
+ 'Bokor'=>[['normal'],['khmer']],
+ 'Bonbon'=>[['normal'],['latin']],
+ 'Boogaloo'=>[['normal'],['latin']],
+ 'Bowlby One'=>[['normal'],['latin']],
+ 'Bowlby One SC'=>[['normal'],['latin','latin-ext']],
+ 'Brawler'=>[['normal'],['latin']],
+ 'Bree Serif'=>[['normal'],['latin','latin-ext']],
+ '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']],
+ 'Butcherman'=>[['normal'],['latin','latin-ext']],
+ 'Butterfly Kids'=>[['normal'],['latin','latin-ext']],
+ 'Cabin'=>[['normal','italic','500','500italic','600','600italic','700','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','600','700','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']],
+ 'Candal'=>[['normal'],['latin']],
+ 'Cantarell'=>[['normal','italic','700','700italic'],['latin']],
+ 'Cantata One'=>[['normal'],['latin','latin-ext']],
+ 'Cantora One'=>[['normal'],['latin','latin-ext']],
+ 'Capriola'=>[['normal'],['latin','latin-ext']],
+ 'Cardo'=>[['normal','italic','700'],['greek','greek-ext','latin','latin-ext']],
+ 'Carme'=>[['normal'],['latin']],
+ 'Carrois Gothic'=>[['normal'],['latin']],
+ 'Carrois Gothic SC'=>[['normal'],['latin']],
+ 'Carter One'=>[['normal'],['latin']],
+ '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','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']],
+ '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']],
+ 'Cherry Cream Soda'=>[['normal'],['latin']],
+ 'Cherry Swash'=>[['normal','700'],['latin','latin-ext']],
+ 'Chewy'=>[['normal'],['latin']],
+ 'Chicle'=>[['normal'],['latin','latin-ext']],
+ 'Chilanka'=>[['normal'],['latin','malayalam']],
+ 'Chivo'=>[['300','300italic','normal','italic','700','700italic','900','900italic'],['latin','latin-ext']],
+ 'Chonburi'=>[['normal'],['latin','latin-ext','thai','vietnamese']],
+ 'Cinzel'=>[['normal','700','900'],['latin','latin-ext']],
+ 'Cinzel Decorative'=>[['normal','700','900'],['latin']],
+ 'Clicker Script'=>[['normal'],['latin','latin-ext']],
+ 'Coda'=>[['normal','800'],['latin','latin-ext']],
+ 'Coda Caption'=>[['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']],
+ 'Comic Neue'=>[['300','300italic','normal','italic','700','700italic'],['latin']],
+ 'Coming Soon'=>[['normal'],['latin']],
+ 'Concert One'=>[['normal'],['latin','latin-ext']],
+ 'Condiment'=>[['normal'],['latin','latin-ext']],
+ 'Content'=>[['normal','700'],['khmer']],
+ 'Contrail One'=>[['normal'],['latin']],
+ 'Convergence'=>[['normal'],['latin']],
+ 'Cookie'=>[['normal'],['latin']],
+ 'Copse'=>[['normal'],['latin']],
+ 'Corben'=>[['normal','700'],['latin','latin-ext']],
+ 'Cormorant'=>[['300','300italic','normal','italic','500','500italic','600','600italic','700','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']],
+ 'Croissant One'=>[['normal'],['latin','latin-ext']],
+ 'Crushed'=>[['normal'],['latin']],
+ 'Cuprum'=>[['normal','italic','700','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'=>[['normal','italic','500','500italic','700','700italic'],['latin','latin-ext']],
+ 'DM Serif Display'=>[['normal','italic'],['latin','latin-ext']],
+ 'DM Serif Text'=>[['normal','italic'],['latin','latin-ext']],
+ 'Damion'=>[['normal'],['latin']],
+ 'Dancing Script'=>[['normal','500','600','700'],['latin','latin-ext','vietnamese']],
+ 'Dangrek'=>[['normal'],['khmer']],
+ 'Darker Grotesque'=>[['300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ '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']],
+ 'Delius'=>[['normal'],['latin']],
+ 'Delius Swash Caps'=>[['normal'],['latin']],
+ 'Delius Unicase'=>[['normal','700'],['latin']],
+ 'Della Respira'=>[['normal'],['latin']],
+ 'Denk One'=>[['normal'],['latin','latin-ext']],
+ 'Devonshire'=>[['normal'],['latin','latin-ext']],
+ 'Dhurjati'=>[['normal'],['latin','telugu']],
+ 'Didact Gothic'=>[['normal'],['cyrillic','cyrillic-ext','greek','greek-ext','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','700'],['latin','latin-ext']],
+ 'Donegal One'=>[['normal'],['latin','latin-ext']],
+ 'Doppio One'=>[['normal'],['latin','latin-ext']],
+ 'Dorsa'=>[['normal'],['latin']],
+ 'Dosis'=>[['200','300','normal','500','600','700','800'],['latin','latin-ext','vietnamese']],
+ 'Dr Sugiyama'=>[['normal'],['latin','latin-ext']],
+ 'Duru Sans'=>[['normal'],['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','latin','latin-ext']],
+ 'El Messiri'=>[['normal','500','600','700'],['arabic','cyrillic','latin']],
+ '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 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']],
+ 'Erica One'=>[['normal'],['latin','latin-ext']],
+ 'Esteban'=>[['normal'],['latin','latin-ext']],
+ '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','italic','500','500italic','600','600italic','700','700italic'],['latin']],
+ 'Fahkwang'=>[['200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic'],['latin','latin-ext','thai','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']],
+ 'Fasthand'=>[['normal'],['khmer']],
+ 'Fauna One'=>[['normal'],['latin','latin-ext']],
+ 'Faustina'=>[['normal','500','600','700','italic','500italic','600italic','700italic'],['latin','latin-ext','vietnamese']],
+ 'Federant'=>[['normal'],['latin']],
+ 'Federo'=>[['normal'],['latin']],
+ 'Felipa'=>[['normal'],['latin','latin-ext']],
+ 'Fenix'=>[['normal'],['latin','latin-ext']],
+ 'Finger Paint'=>[['normal'],['latin']],
+ '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'],['latin','latin-ext']],
+ 'Fjord One'=>[['normal'],['latin']],
+ 'Flamenco'=>[['300','normal'],['latin']],
+ 'Flavors'=>[['normal'],['latin','latin-ext']],
+ 'Fondamento'=>[['normal','italic'],['latin','latin-ext']],
+ 'Fontdiner Swanky'=>[['normal'],['latin']],
+ 'Forum'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'Francois One'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Frank Ruhl Libre'=>[['300','normal','500','700','900'],['hebrew','latin','latin-ext']],
+ 'Freckle Face'=>[['normal'],['latin','latin-ext']],
+ 'Fredericka the Great'=>[['normal'],['latin','latin-ext']],
+ 'Fredoka One'=>[['normal'],['latin']],
+ 'Freehand'=>[['normal'],['khmer']],
+ 'Fresca'=>[['normal'],['latin','latin-ext']],
+ 'Frijole'=>[['normal'],['latin']],
+ 'Fruktur'=>[['normal'],['latin','latin-ext']],
+ 'Fugaz One'=>[['normal'],['latin']],
+ 'GFS Didot'=>[['normal'],['greek']],
+ 'GFS Neohellenic'=>[['normal','italic','700','700italic'],['greek']],
+ 'Gabriela'=>[['normal'],['cyrillic','cyrillic-ext','latin']],
+ 'Gaegu'=>[['300','normal','700'],['korean','latin']],
+ 'Gafata'=>[['normal'],['latin','latin-ext']],
+ 'Galada'=>[['normal'],['bengali','latin']],
+ 'Galdeano'=>[['normal'],['latin']],
+ 'Galindo'=>[['normal'],['latin','latin-ext']],
+ 'Gamja Flower'=>[['normal'],['korean','latin']],
+ 'Gayathri'=>[['100','normal','700'],['latin','malayalam']],
+ 'Gelasio'=>[['normal','italic','500','500italic','600','600italic','700','700italic'],['latin','latin-ext','vietnamese']],
+ 'Gentium Basic'=>[['normal','italic','700','700italic'],['latin','latin-ext']],
+ 'Gentium Book Basic'=>[['normal','italic','700','700italic'],['latin','latin-ext']],
+ 'Geo'=>[['normal','italic'],['latin']],
+ 'Geostar'=>[['normal'],['latin']],
+ 'Geostar Fill'=>[['normal'],['latin']],
+ 'Germania One'=>[['normal'],['latin']],
+ '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']],
+ 'Gloria Hallelujah'=>[['normal'],['latin']],
+ 'Goblin One'=>[['normal'],['latin']],
+ 'Gochi Hand'=>[['normal'],['latin']],
+ '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']],
+ 'Graduate'=>[['normal'],['latin']],
+ 'Grand Hotel'=>[['normal'],['latin','latin-ext']],
+ 'Gravitas One'=>[['normal'],['latin']],
+ 'Great Vibes'=>[['normal'],['latin','latin-ext']],
+ 'Grenze'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['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']],
+ 'Gupter'=>[['normal','500','700'],['latin']],
+ 'Gurajada'=>[['normal'],['latin','telugu']],
+ 'Habibi'=>[['normal'],['latin','latin-ext']],
+ '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']],
+ 'Handlee'=>[['normal'],['latin']],
+ 'Hanuman'=>[['normal','700'],['khmer']],
+ 'Happy Monkey'=>[['normal'],['latin','latin-ext']],
+ 'Harmattan'=>[['normal'],['arabic','latin']],
+ 'Headland One'=>[['normal'],['latin','latin-ext']],
+ 'Heebo'=>[['100','300','normal','500','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']],
+ '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']],
+ '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 Condensed'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic'],['latin','latin-ext','vietnamese']],
+ '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','italic','600','600italic','700','700italic'],['latin','latin-ext']],
+ 'Iceberg'=>[['normal'],['latin']],
+ 'Iceland'=>[['normal'],['latin']],
+ 'Imprima'=>[['normal'],['latin','latin-ext']],
+ 'Inconsolata'=>[['200','300','normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'Inder'=>[['normal'],['latin','latin-ext']],
+ 'Indie Flower'=>[['normal'],['latin']],
+ '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']],
+ 'Inter'=>[['100','200','300','normal','500','600','700','800','900'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Irish Grover'=>[['normal'],['latin']],
+ 'Istok Web'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'Italiana'=>[['normal'],['latin']],
+ 'Italianno'=>[['normal'],['latin','latin-ext']],
+ 'Itim'=>[['normal'],['latin','latin-ext','thai','vietnamese']],
+ 'Jacques Francois'=>[['normal'],['latin']],
+ 'Jacques Francois Shadow'=>[['normal'],['latin']],
+ 'Jaldi'=>[['normal','700'],['devanagari','latin','latin-ext']],
+ 'Jim Nightshade'=>[['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','100italic','300','300italic','normal','italic','600','600italic','700','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']],
+ 'Julius Sans One'=>[['normal'],['latin','latin-ext']],
+ 'Junge'=>[['normal'],['latin']],
+ 'Jura'=>[['300','normal','500','600','700'],['cyrillic','cyrillic-ext','greek','greek-ext','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']],
+ 'Kadwa'=>[['normal','700'],['devanagari','latin']],
+ 'Kalam'=>[['300','normal','700'],['devanagari','latin','latin-ext']],
+ 'Kameron'=>[['normal','700'],['latin']],
+ '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'=>[['300','normal','700'],['khmer']],
+ 'Karla'=>[['normal','italic','700','700italic'],['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']],
+ 'Kdam Thmor'=>[['normal'],['khmer']],
+ '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']],
+ 'Kirang Haerang'=>[['normal'],['korean','latin']],
+ 'Kite One'=>[['normal'],['latin']],
+ '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']],
+ 'Kosugi'=>[['normal'],['cyrillic','japanese','latin']],
+ 'Kosugi Maru'=>[['normal'],['cyrillic','japanese','latin']],
+ 'Kotta One'=>[['normal'],['latin','latin-ext']],
+ 'Koulen'=>[['normal'],['khmer']],
+ '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']],
+ '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']],
+ 'Kurale'=>[['normal'],['cyrillic','cyrillic-ext','devanagari','latin','latin-ext']],
+ 'La Belle Aurore'=>[['normal'],['latin']],
+ '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']],
+ 'Lateef'=>[['normal'],['arabic','latin']],
+ 'Lato'=>[['100','100italic','300','300italic','normal','italic','700','700italic','900','900italic'],['latin','latin-ext']],
+ 'League Script'=>[['normal'],['latin']],
+ 'Leckerli One'=>[['normal'],['latin']],
+ 'Ledger'=>[['normal'],['cyrillic','latin','latin-ext']],
+ 'Lekton'=>[['normal','italic','700'],['latin','latin-ext']],
+ 'Lemon'=>[['normal'],['latin']],
+ 'Lemonada'=>[['300','normal','500','600','700'],['arabic','latin','latin-ext','vietnamese']],
+ 'Lexend Deca'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Lexend Exa'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Lexend Giga'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Lexend Mega'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Lexend Peta'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Lexend Tera'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Lexend Zetta'=>[['normal'],['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 Baskerville'=>[['normal','italic','700'],['latin','latin-ext']],
+ 'Libre Caslon Display'=>[['normal'],['latin','latin-ext']],
+ 'Libre Caslon Text'=>[['normal','italic','700'],['latin','latin-ext']],
+ 'Libre Franklin'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['latin','latin-ext']],
+ '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']],
+ 'Literata'=>[['normal','500','600','700','italic','500italic','600italic','700italic'],['cyrillic','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 Ya Like A Sister'=>[['normal'],['latin']],
+ 'Loved by the King'=>[['normal'],['latin']],
+ 'Lovers Quarrel'=>[['normal'],['latin','latin-ext']],
+ 'Luckiest Guy'=>[['normal'],['latin']],
+ 'Lusitana'=>[['normal','700'],['latin']],
+ 'Lustria'=>[['normal'],['latin']],
+ 'M PLUS 1p'=>[['100','300','normal','500','700','800','900'],['cyrillic','cyrillic-ext','greek','greek-ext','hebrew','japanese','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','900'],['arabic','latin']],
+ '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']],
+ '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','malayalam']],
+ 'Manrope'=>[['200','300','normal','500','600','700','800'],['cyrillic','greek','latin','latin-ext']],
+ 'Mansalva'=>[['normal'],['latin']],
+ 'Manuale'=>[['normal','500','600','700','italic','500italic','600italic','700italic'],['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']],
+ 'Markazi Text'=>[['normal','500','600','700'],['arabic','latin','latin-ext','vietnamese']],
+ 'Marko One'=>[['normal'],['latin']],
+ 'Marmelad'=>[['normal'],['cyrillic','latin','latin-ext']],
+ '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']],
+ 'Marvel'=>[['normal','italic','700','700italic'],['latin']],
+ 'Mate'=>[['normal','italic'],['latin']],
+ 'Mate SC'=>[['normal'],['latin']],
+ 'Maven Pro'=>[['normal','500','600','700','800','900'],['latin','latin-ext','vietnamese']],
+ 'McLaren'=>[['normal'],['latin','latin-ext']],
+ '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']],
+ 'Merienda'=>[['normal','700'],['latin','latin-ext']],
+ 'Merienda One'=>[['normal'],['latin']],
+ 'Merriweather'=>[['300','300italic','normal','italic','700','700italic','900','900italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Merriweather Sans'=>[['300','300italic','normal','italic','700','700italic','800','800italic'],['latin','latin-ext']],
+ 'Metal'=>[['normal'],['khmer']],
+ 'Metal Mania'=>[['normal'],['latin','latin-ext']],
+ 'Metamorphous'=>[['normal'],['latin','latin-ext']],
+ 'Metrophobic'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Michroma'=>[['normal'],['latin']],
+ 'Milonga'=>[['normal'],['latin','latin-ext']],
+ 'Miltonian'=>[['normal'],['latin']],
+ 'Miltonian Tattoo'=>[['normal'],['latin']],
+ 'Mina'=>[['normal','700'],['bengali','latin','latin-ext']],
+ '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']],
+ 'Modak'=>[['normal'],['devanagari','latin','latin-ext']],
+ 'Modern Antiqua'=>[['normal'],['latin','latin-ext']],
+ 'Mogra'=>[['normal'],['gujarati','latin','latin-ext']],
+ 'Molengo'=>[['normal'],['latin','latin-ext']],
+ 'Molle'=>[['italic'],['latin','latin-ext']],
+ 'Monda'=>[['normal','700'],['latin','latin-ext']],
+ 'Monofett'=>[['normal'],['latin']],
+ 'Monoton'=>[['normal'],['latin']],
+ 'Monsieur La Doulaise'=>[['normal'],['latin','latin-ext']],
+ 'Montaga'=>[['normal'],['latin']],
+ 'Montez'=>[['normal'],['latin']],
+ 'Montserrat'=>[['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 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']],
+ 'Moul'=>[['normal'],['khmer']],
+ 'Moulpali'=>[['normal'],['khmer']],
+ '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']],
+ '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']],
+ 'Muli'=>[['200','300','normal','500','600','700','800','900','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ 'Mystery Quest'=>[['normal'],['latin','latin-ext']],
+ 'NTR'=>[['normal'],['latin','telugu']],
+ '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']],
+ 'Neucha'=>[['normal'],['cyrillic','latin']],
+ 'Neuton'=>[['200','300','normal','italic','700','800'],['latin','latin-ext']],
+ 'New Rocker'=>[['normal'],['latin','latin-ext']],
+ 'News Cycle'=>[['normal','700'],['latin','latin-ext']],
+ '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'=>[['normal','700'],['khmer']],
+ '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 Sans'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','devanagari','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Noto Sans HK'=>[['100','300','normal','500','700','900'],['chinese-hongkong','latin']],
+ 'Noto Sans JP'=>[['100','300','normal','500','700','900'],['japanese','latin']],
+ 'Noto Sans KR'=>[['100','300','normal','500','700','900'],['korean','latin']],
+ 'Noto Sans SC'=>[['100','300','normal','500','700','900'],['chinese-simplified','latin']],
+ 'Noto Sans TC'=>[['100','300','normal','500','700','900'],['chinese-traditional','latin']],
+ 'Noto Serif'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ '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 SC'=>[['200','300','normal','500','600','700','900'],['chinese-simplified','latin']],
+ 'Noto Serif TC'=>[['200','300','normal','500','600','700','900'],['chinese-traditional','latin']],
+ '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','200italic','300','300italic','normal','italic','600','600italic','700','700italic','800','800italic','900','900italic'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Nunito Sans'=>[['200','200italic','300','300italic','normal','italic','600','600italic','700','700italic','800','800italic','900','900italic'],['latin','latin-ext','vietnamese']],
+ 'Odibee Sans'=>[['normal'],['latin']],
+ 'Odor Mean Chey'=>[['normal'],['khmer']],
+ 'Offside'=>[['normal'],['latin']],
+ 'Old Standard TT'=>[['normal','italic','700'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Oldenburg'=>[['normal'],['latin','latin-ext']],
+ 'Oleo Script'=>[['normal','700'],['latin','latin-ext']],
+ 'Oleo Script Swash Caps'=>[['normal','700'],['latin','latin-ext']],
+ 'Open Sans'=>[['300','300italic','normal','italic','600','600italic','700','700italic','800','800italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Open Sans Condensed'=>[['300','300italic','700'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Oranienbaum'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext']],
+ 'Orbitron'=>[['normal','500','600','700','800','900'],['latin']],
+ 'Oregano'=>[['normal','italic'],['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']],
+ 'Over the Rainbow'=>[['normal'],['latin']],
+ 'Overlock'=>[['normal','italic','700','700italic','900','900italic'],['latin','latin-ext']],
+ 'Overlock SC'=>[['normal'],['latin','latin-ext']],
+ 'Overpass'=>[['100','100italic','200','200italic','300','300italic','normal','italic','600','600italic','700','700italic','800','800italic','900','900italic'],['latin','latin-ext']],
+ 'Overpass Mono'=>[['300','normal','600','700'],['latin','latin-ext']],
+ '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','myanmar']],
+ 'Palanquin'=>[['100','200','300','normal','500','600','700'],['devanagari','latin','latin-ext']],
+ 'Palanquin Dark'=>[['normal','500','600','700'],['devanagari','latin','latin-ext']],
+ 'Pangolin'=>[['normal'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Paprika'=>[['normal'],['latin']],
+ 'Parisienne'=>[['normal'],['latin','latin-ext']],
+ 'Passero One'=>[['normal'],['latin','latin-ext']],
+ 'Passion One'=>[['normal','700','900'],['latin','latin-ext']],
+ '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']],
+ 'Petit Formal Script'=>[['normal'],['latin','latin-ext']],
+ 'Petrona'=>[['normal'],['latin']],
+ 'Philosopher'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','latin','vietnamese']],
+ 'Piedra'=>[['normal'],['latin','latin-ext']],
+ 'Pinyon Script'=>[['normal'],['latin']],
+ 'Pirata One'=>[['normal'],['latin','latin-ext']],
+ 'Plaster'=>[['normal'],['latin','latin-ext']],
+ 'Play'=>[['normal','700'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','vietnamese']],
+ 'Playball'=>[['normal'],['latin','latin-ext']],
+ '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']],
+ 'Podkova'=>[['normal','500','600','700','800'],['cyrillic','cyrillic-ext','latin','latin-ext','vietnamese']],
+ 'Poiret One'=>[['normal'],['cyrillic','latin','latin-ext']],
+ 'Poller One'=>[['normal'],['latin']],
+ 'Poly'=>[['normal','italic'],['latin']],
+ 'Pompiere'=>[['normal'],['latin']],
+ 'Pontano Sans'=>[['normal'],['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']],
+ 'Pragati Narrow'=>[['normal','700'],['devanagari','latin','latin-ext']],
+ 'Prata'=>[['normal'],['cyrillic','cyrillic-ext','latin','vietnamese']],
+ 'Preahvihear'=>[['normal'],['khmer']],
+ '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']],
+ 'Puritan'=>[['normal','italic','700','700italic'],['latin']],
+ 'Purple Purse'=>[['normal'],['latin','latin-ext']],
+ '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']],
+ 'Quicksand'=>[['300','normal','500','600','700'],['latin','latin-ext','vietnamese']],
+ 'Quintessential'=>[['normal'],['latin','latin-ext']],
+ 'Qwigley'=>[['normal'],['latin','latin-ext']],
+ 'Racing Sans One'=>[['normal'],['latin','latin-ext']],
+ 'Radley'=>[['normal','italic'],['latin','latin-ext']],
+ 'Rajdhani'=>[['300','normal','500','600','700'],['devanagari','latin','latin-ext']],
+ 'Rakkas'=>[['normal'],['arabic','latin','latin-ext']],
+ 'Raleway'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['latin','latin-ext']],
+ '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']],
+ 'Ranchers'=>[['normal'],['latin','latin-ext']],
+ 'Rancho'=>[['normal'],['latin']],
+ 'Ranga'=>[['normal','700'],['devanagari','latin','latin-ext']],
+ 'Rasa'=>[['300','normal','500','600','700'],['gujarati','latin','latin-ext']],
+ 'Rationale'=>[['normal'],['latin']],
+ 'Ravi Prakash'=>[['normal'],['latin','telugu']],
+ 'Red Hat Display'=>[['normal','italic','500','500italic','700','700italic','900','900italic'],['latin','latin-ext']],
+ 'Red Hat Text'=>[['normal','italic','500','500italic','700','700italic'],['latin','latin-ext']],
+ 'Redressed'=>[['normal'],['latin']],
+ 'Reem Kufi'=>[['normal'],['arabic','latin']],
+ 'Reenie Beanie'=>[['normal'],['latin']],
+ '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']],
+ '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'=>[['300','300italic','normal','italic','700','700italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Roboto Mono'=>[['100','100italic','300','300italic','normal','italic','500','500italic','700','700italic'],['cyrillic','cyrillic-ext','greek','greek-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 Salt'=>[['normal'],['latin']],
+ 'Rokkitt'=>[['100','200','300','normal','500','600','700','800','900'],['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']],
+ 'Rozha One'=>[['normal'],['devanagari','latin','latin-ext']],
+ 'Rubik'=>[['300','300italic','normal','italic','500','500italic','700','700italic','900','900italic'],['cyrillic','hebrew','latin','latin-ext']],
+ 'Rubik Mono One'=>[['normal'],['cyrillic','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']],
+ 'Ruluko'=>[['normal'],['latin','latin-ext']],
+ 'Rum Raisin'=>[['normal'],['latin','latin-ext']],
+ 'Ruslan Display'=>[['normal'],['cyrillic','latin','latin-ext']],
+ 'Russo One'=>[['normal'],['cyrillic','latin','latin-ext']],
+ 'Ruthie'=>[['normal'],['latin','latin-ext']],
+ 'Rye'=>[['normal'],['latin','latin-ext']],
+ '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'],['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']],
+ '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']],
+ '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'=>[['normal','700'],['arabic','latin']],
+ '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','700','800'],['latin','latin-ext']],
+ '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']],
+ 'Shanti'=>[['normal'],['latin']],
+ 'Share'=>[['normal','italic','700','700italic'],['latin','latin-ext']],
+ 'Share Tech'=>[['normal'],['latin']],
+ 'Share Tech Mono'=>[['normal'],['latin']],
+ 'Shojumaru'=>[['normal'],['latin','latin-ext']],
+ 'Short Stack'=>[['normal'],['latin']],
+ 'Shrikhand'=>[['normal'],['gujarati','latin','latin-ext']],
+ 'Siemreap'=>[['normal'],['khmer']],
+ 'Sigmar One'=>[['normal'],['latin','latin-ext','vietnamese']],
+ 'Signika'=>[['300','normal','600','700'],['latin','latin-ext']],
+ 'Signika Negative'=>[['300','normal','600','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']],
+ 'Skranji'=>[['normal','700'],['latin','latin-ext']],
+ 'Slabo 13px'=>[['normal'],['latin','latin-ext']],
+ 'Slabo 27px'=>[['normal'],['latin','latin-ext']],
+ 'Slackey'=>[['normal'],['latin']],
+ 'Smokum'=>[['normal'],['latin']],
+ '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']],
+ 'Solway'=>[['300','normal','500','700','800'],['latin']],
+ 'Song Myung'=>[['normal'],['korean','latin']],
+ 'Sonsie One'=>[['normal'],['latin','latin-ext']],
+ 'Sorts Mill Goudy'=>[['normal','italic'],['latin','latin-ext']],
+ 'Source Code Pro'=>[['200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','900','900italic'],['cyrillic','cyrillic-ext','greek','latin','latin-ext','vietnamese']],
+ 'Source Sans Pro'=>[['200','200italic','300','300italic','normal','italic','600','600italic','700','700italic','900','900italic'],['cyrillic','cyrillic-ext','greek','greek-ext','latin','latin-ext','vietnamese']],
+ 'Source Serif Pro'=>[['normal','600','700'],['latin','latin-ext']],
+ 'Space Mono'=>[['normal','italic','700','700italic'],['latin','latin-ext','vietnamese']],
+ 'Spartan'=>[['100','200','300','normal','500','600','700','800','900'],['latin','latin-ext']],
+ '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']],
+ 'Squada One'=>[['normal'],['latin']],
+ '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']],
+ 'Stint Ultra Condensed'=>[['normal'],['latin','latin-ext']],
+ 'Stint Ultra Expanded'=>[['normal'],['latin','latin-ext']],
+ 'Stoke'=>[['300','normal'],['latin','latin-ext']],
+ 'Strait'=>[['normal'],['latin']],
+ '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'=>[['normal'],['khmer']],
+ 'Swanky and Moo Moo'=>[['normal'],['latin']],
+ 'Syncopate'=>[['normal','700'],['latin']],
+ 'Tajawal'=>[['200','300','normal','500','700','800','900'],['arabic','latin']],
+ 'Tangerine'=>[['normal','700'],['latin']],
+ 'Taprom'=>[['normal'],['khmer']],
+ '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']],
+ 'Telex'=>[['normal'],['latin','latin-ext']],
+ 'Tenali Ramakrishna'=>[['normal'],['latin','telugu']],
+ 'Tenor Sans'=>[['normal'],['cyrillic','latin','latin-ext']],
+ 'Text Me One'=>[['normal'],['latin','latin-ext']],
+ 'Thasadith'=>[['normal','italic','700','700italic'],['latin','latin-ext','thai','vietnamese']],
+ 'The Girl Next Door'=>[['normal'],['latin']],
+ 'Tienne'=>[['normal','700','900'],['latin']],
+ 'Tillana'=>[['normal','500','600','700','800'],['devanagari','latin','latin-ext']],
+ 'Timmana'=>[['normal'],['latin','telugu']],
+ 'Tinos'=>[['normal','italic','700','700italic'],['cyrillic','cyrillic-ext','greek','greek-ext','hebrew','latin','latin-ext','vietnamese']],
+ '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']],
+ 'Trade Winds'=>[['normal'],['latin']],
+ 'Trirong'=>[['100','100italic','200','200italic','300','300italic','normal','italic','500','500italic','600','600italic','700','700italic','800','800italic','900','900italic'],['latin','latin-ext','thai','vietnamese']],
+ 'Trocchi'=>[['normal'],['latin','latin-ext']],
+ 'Trochut'=>[['normal','italic','700'],['latin']],
+ 'Trykker'=>[['normal'],['latin','latin-ext']],
+ 'Tulpen One'=>[['normal'],['latin']],
+ 'Turret Road'=>[['200','300','normal','500','700','800'],['latin','latin-ext']],
+ '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']],
+ 'Ultra'=>[['normal'],['latin']],
+ 'Uncial Antiqua'=>[['normal'],['latin']],
+ 'Underdog'=>[['normal'],['cyrillic','latin','latin-ext']],
+ 'Unica One'=>[['normal'],['latin','latin-ext']],
+ 'UnifrakturCook'=>[['700'],['latin']],
+ 'UnifrakturMaguntia'=>[['normal'],['latin']],
+ 'Unkempt'=>[['normal','700'],['latin']],
+ 'Unlock'=>[['normal'],['latin']],
+ 'Unna'=>[['normal','italic','700','700italic'],['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']],
+ 'Vast Shadow'=>[['normal'],['latin']],
+ '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']],
+ 'Vidaloka'=>[['normal'],['latin']],
+ 'Viga'=>[['normal'],['latin','latin-ext']],
+ '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']],
+ 'Waiting for the Sunrise'=>[['normal'],['latin']],
+ 'Wallpoet'=>[['normal'],['latin']],
+ 'Walter Turncoat'=>[['normal'],['latin']],
+ 'Warnes'=>[['normal'],['latin','latin-ext']],
+ 'Wellfleet'=>[['normal'],['latin','latin-ext']],
+ 'Wendy One'=>[['normal'],['latin','latin-ext']],
+ 'Wire One'=>[['normal'],['latin']],
+ 'Work Sans'=>[['100','200','300','normal','500','600','700','800','900','100italic','200italic','300italic','italic','500italic','600italic','700italic','800italic','900italic'],['latin','latin-ext','vietnamese']],
+ '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']],
+ 'Yrsa'=>[['300','normal','500','600','700'],['latin','latin-ext']],
+ 'ZCOOL KuaiLe'=>[['normal'],['chinese-simplified','latin']],
+ 'ZCOOL QingKe HuangYou'=>[['normal'],['chinese-simplified','latin']],
+ 'ZCOOL XiaoWei'=>[['normal'],['chinese-simplified','latin']],
+ '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/fields/typography/typography.php b/fields/typography/typography.php
new file mode 100644
index 0000000..4e9708d
--- /dev/null
+++ b/fields/typography/typography.php
@@ -0,0 +1,531 @@
+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,
+ 'exclude' => '',
+ 'unit' => 'px',
+ 'line_height_unit' => '',
+ 'preview_text' => 'The quick brown fox jumps over the lazy dog',
+ ) );
+
+ $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 ) ? ' csf--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', 'csf' ) .'
';
+ echo $this->create_select( array( $this->value['font-family'] => $this->value['font-family'] ), 'font-family', esc_html__( 'Select a font', 'csf' ) );
+ echo '
';
+ }
+
+ //
+ // Backup Font Family
+ if ( ! empty( $args['backup_font_family'] ) ) {
+ echo '
';
+ echo '
'. esc_html__( 'Backup Font Family', 'csf' ) .'
';
+ echo $this->create_select( apply_filters( 'csf_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', 'csf' ) );
+ 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', 'csf') .'
';
+ echo '
';
+ echo ''. ( ! $this->chosen ? esc_html__( 'Default', 'csf' ) : '' ) .' ';
+ if ( ! empty( $this->value['font-weight'] ) || ! empty( $this->value['font-style'] ) ) {
+ echo ' ';
+ }
+ echo ' ';
+ echo '
';
+ echo '
';
+
+ //
+ // Extra Font Style Select
+ if ( ! empty( $args['extra_styles'] ) ) {
+ echo '';
+ }
+
+ echo '
';
+
+ }
+
+ //
+ // Subset
+ if ( ! empty( $args['subset'] ) ) {
+ echo '
';
+ echo '
'. esc_html__( 'Subset', 'csf' ) .'
';
+ $subset = ( is_array( $this->value['subset'] ) ) ? $this->value['subset'] : array_filter( (array) $this->value['subset'] );
+ echo $this->create_select( $subset, 'subset', esc_html__( 'Default', 'csf' ), $args['multi_subset'] );
+ echo '
';
+ }
+
+ //
+ // Text Align
+ if ( ! empty( $args['text_align'] ) ) {
+ echo '
';
+ echo '
'. esc_html__( 'Text Align', 'csf' ) .'
';
+ echo $this->create_select( array(
+ 'inherit' => esc_html__( 'Inherit', 'csf' ),
+ 'left' => esc_html__( 'Left', 'csf' ),
+ 'center' => esc_html__( 'Center', 'csf' ),
+ 'right' => esc_html__( 'Right', 'csf' ),
+ 'justify' => esc_html__( 'Justify', 'csf' ),
+ 'initial' => esc_html__( 'Initial', 'csf' )
+ ), 'text-align', esc_html__( 'Default', 'csf' ) );
+ echo '
';
+ }
+
+ //
+ // Font Variant
+ if ( ! empty( $args['font_variant'] ) ) {
+ echo '
';
+ echo '
'. esc_html__( 'Font Variant', 'csf' ) .'
';
+ echo $this->create_select( array(
+ 'normal' => esc_html__( 'Normal', 'csf' ),
+ 'small-caps' => esc_html__( 'Small Caps', 'csf' ),
+ 'all-small-caps' => esc_html__( 'All Small Caps', 'csf' )
+ ), 'font-variant', esc_html__( 'Default', 'csf' ) );
+ echo '
';
+ }
+
+ //
+ // Text Transform
+ if ( ! empty( $args['text_transform'] ) ) {
+ echo '
';
+ echo '
'. esc_html__( 'Text Transform', 'csf' ) .'
';
+ echo $this->create_select( array(
+ 'none' => esc_html__( 'None', 'csf' ),
+ 'capitalize' => esc_html__( 'Capitalize', 'csf' ),
+ 'uppercase' => esc_html__( 'Uppercase', 'csf' ),
+ 'lowercase' => esc_html__( 'Lowercase', 'csf' )
+ ), 'text-transform', esc_html__( 'Default', 'csf' ) );
+ echo '
';
+ }
+
+ //
+ // Text Decoration
+ if ( ! empty( $args['text_decoration'] ) ) {
+ echo '
';
+ echo '
'. esc_html__( 'Text Decoration', 'csf' ) .'
';
+ echo $this->create_select( array(
+ 'none' => esc_html__( 'None', 'csf' ),
+ 'underline' => esc_html__( 'Solid', 'csf' ),
+ 'underline double' => esc_html__( 'Double', 'csf' ),
+ 'underline dotted' => esc_html__( 'Dotted', 'csf' ),
+ 'underline dashed' => esc_html__( 'Dashed', 'csf' ),
+ 'underline wavy' => esc_html__( 'Wavy', 'csf' ),
+ 'underline overline' => esc_html__( 'Overline', 'csf' ),
+ 'line-through' => esc_html__( 'Line-through', 'csf' )
+ ), 'text-decoration', esc_html__( 'Default', 'csf' ) );
+ 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', 'csf' ) .'
';
+ echo '
';
+ echo ' ';
+ echo '
';
+ echo '
';
+ }
+
+ //
+ // Custom style
+ if ( ! empty( $args['custom_style'] ) ) {
+ echo '
';
+ echo '
'. esc_html__( 'Custom Style', 'csf' ) .'
';
+ 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 = '';
+ $output .= ( ! empty( $placeholder ) ) ? ''. esc_attr( ( ! $this->chosen ) ? $placeholder : '' ) .' ' : '';
+
+ if ( ! empty( $options ) ) {
+ foreach ( $options as $option_key => $option_value ) {
+ if ( $is_multiple ) {
+ $selected = ( in_array( $option_value, $this->value[$name] ) ) ? ' selected' : '';
+ $output .= ''. esc_attr( $option_value ) .' ';
+ } else {
+ $option_key = ( is_numeric( $option_key ) ) ? $option_value : $option_key;
+ $selected = ( $option_key === $this->value[$name] ) ? ' selected' : '';
+ $output .= ''. esc_attr( $option_value ) .' ';
+ }
+ }
+ }
+
+ $output .= ' ';
+
+ return $output;
+
+ }
+
+ public function enqueue() {
+
+ if ( ! wp_script_is( 'csf-webfontloader' ) ) {
+
+ CSF::include_plugin_file( 'fields/typography/google-fonts.php' );
+
+ wp_enqueue_script( 'csf-webfontloader', 'https://cdn.jsdelivr.net/npm/webfontloader@1.6.28/webfontloader.min.js', array( 'csf' ), '1.6.28', true );
+
+ $webfonts = array();
+
+ $customwebfonts = apply_filters( 'csf_field_typography_customwebfonts', array() );
+
+ if ( ! empty( $customwebfonts ) ) {
+ $webfonts['custom'] = array(
+ 'label' => esc_html__( 'Custom Web Fonts', 'csf' ),
+ 'fonts' => $customwebfonts
+ );
+ }
+
+ $webfonts['safe'] = array(
+ 'label' => esc_html__( 'Safe Web Fonts', 'csf' ),
+ 'fonts' => apply_filters( 'csf_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', 'csf' ),
+ 'fonts' => apply_filters( 'csf_field_typography_googlewebfonts', csf_get_google_fonts()
+ ) );
+
+ $defaultstyles = apply_filters( 'csf_field_typography_defaultstyles', array( 'normal', 'italic', '700', '700italic' ) );
+
+ $googlestyles = apply_filters( 'csf_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( 'csf_field_typography_webfonts', $webfonts );
+
+ wp_localize_script( 'csf', 'csf_typography_json', array(
+ 'webfonts' => $webfonts,
+ 'defaultstyles' => $defaultstyles,
+ 'googlestyles' => $googlestyles
+ ) );
+
+ }
+
+ }
+
+ public function enqueue_google_fonts() {
+
+ $is_google = false;
+
+ if ( ! empty( $this->value['type'] ) ) {
+ $is_google = ( $this->value['type'] === 'google' ) ? true : false;
+ } else {
+ CSF::include_plugin_file( 'fields/typography/google-fonts.php' );
+ $is_google = ( array_key_exists( $this->value['font-family'], csf_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;
+ $this->parent->webfonts[$font_family][$style] = $style;
+ }
+ }
+
+ // 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;
+ $this->parent->webfonts[$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 ) ) {
+ $this->parent->subsets[$subset] = $subset;
+ }
+ }
+ }
+
+ return $font_family;
+
+ }
+
+ 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'] : '';
+ $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/fields/upload/upload.php b/fields/upload/upload.php
new file mode 100644
index 0000000..7ff84ff
--- /dev/null
+++ b/fields/upload/upload.php
@@ -0,0 +1,41 @@
+field, array(
+ 'library' => array(),
+ 'button_title' => esc_html__( 'Upload', 'csf' ),
+ 'remove_title' => esc_html__( 'Remove', 'csf' ),
+ ) );
+
+ 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' : '';
+
+ echo '';
+
+ echo $this->field_after();
+
+ }
+ }
+}
diff --git a/fields/wp_editor/wp_editor.php b/fields/wp_editor/wp_editor.php
new file mode 100644
index 0000000..2d75511
--- /dev/null
+++ b/fields/wp_editor/wp_editor.php
@@ -0,0 +1,101 @@
+field, array(
+ 'tinymce' => true,
+ 'quicktags' => true,
+ 'media_buttons' => true,
+ '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'],
+ );
+
+ echo $this->field_before();
+
+ echo ( csf_wp_editor_api() ) ? '' : '';
+
+ echo '';
+
+ echo ( csf_wp_editor_api() ) ? '
' : '';
+
+ echo $this->field_after();
+
+ }
+
+ public function enqueue() {
+
+ if ( csf_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() {
+
+ 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 ( csf_wp_editor_api() && class_exists( '_WP_Editors') ) {
+
+ $defaults = apply_filters( 'csf_wp_editor', array(
+ 'tinymce' => array(
+ 'wp_skip_init' => true
+ ),
+ ) );
+
+ $setup = _WP_Editors::parse_settings( 'csf_wp_editor', $defaults );
+
+ _WP_Editors::editor_settings( 'csf_wp_editor', $setup );
+
+ }
+
+ }
+
+ }
+}
diff --git a/functions/actions.php b/functions/actions.php
new file mode 100644
index 0000000..c1ab742
--- /dev/null
+++ b/functions/actions.php
@@ -0,0 +1,190 @@
+ esc_html__( 'Error: Nonce verification has failed. Please try again.', 'csf' ) ) );
+ }
+
+ ob_start();
+
+ $icon_library = ( apply_filters( 'csf_fa4', false ) ) ? 'fa4' : 'fa5';
+
+ CSF::include_plugin_file( 'fields/icon/'. $icon_library .'-icons.php' );
+
+ $icon_lists = apply_filters( 'csf_field_icon_add_icons', csf_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 provided by developer', 'csf' ) .'
';
+
+ }
+
+ $content = ob_get_clean();
+
+ wp_send_json_success( array( 'content' => $content ) );
+
+ }
+ add_action( 'wp_ajax_csf-get-icons', 'csf_get_icons' );
+}
+
+/**
+ *
+ * Export
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ *
+ */
+if ( ! function_exists( 'csf_export' ) ) {
+ function csf_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, 'csf_backup_nonce' ) ) {
+ die( esc_html__( 'Error: Nonce verification has failed. Please try again.', 'csf' ) );
+ }
+
+ if ( empty( $unique ) ) {
+ die( esc_html__( 'Error: Options unique id could not valid.', 'csf' ) );
+ }
+
+ // 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_csf-export', 'csf_export' );
+}
+
+/**
+ *
+ * Import Ajax
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ *
+ */
+if ( ! function_exists( 'csf_import_ajax' ) ) {
+ function csf_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, 'csf_backup_nonce' ) ) {
+ wp_send_json_error( array( 'error' => esc_html__( 'Error: Nonce verification has failed. Please try again.', 'csf' ) ) );
+ }
+
+ if ( empty( $unique ) ) {
+ wp_send_json_error( array( 'error' => esc_html__( 'Error: Options unique id could not valid.', 'csf' ) ) );
+ }
+
+ if ( empty( $data ) || ! is_array( $data ) ) {
+ wp_send_json_error( array( 'error' => esc_html__( 'Error: Import data could not valid.', 'csf' ) ) );
+ }
+
+ // Success
+ update_option( $unique, $data );
+
+ wp_send_json_success();
+
+ }
+ add_action( 'wp_ajax_csf-import', 'csf_import_ajax' );
+}
+
+/**
+ *
+ * Reset Ajax
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ *
+ */
+if ( ! function_exists( 'csf_reset_ajax' ) ) {
+ function csf_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, 'csf_backup_nonce' ) ) {
+ wp_send_json_error( array( 'error' => esc_html__( 'Error: Nonce verification has failed. Please try again.', 'csf' ) ) );
+ }
+
+ // Success
+ delete_option( $unique );
+
+ wp_send_json_success();
+
+ }
+ add_action( 'wp_ajax_csf-reset', 'csf_reset_ajax' );
+}
+
+/**
+ *
+ * Chosen Ajax
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ *
+ */
+if ( ! function_exists( 'csf_chosen_ajax' ) ) {
+ function csf_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, 'csf_chosen_ajax_nonce' ) ) {
+ wp_send_json_error( array( 'error' => esc_html__( 'Error: Nonce verification has failed. Please try again.', 'csf' ) ) );
+ }
+
+ if ( empty( $type ) || empty( $term ) ) {
+ wp_send_json_error( array( 'error' => esc_html__( 'Error: Missing request arguments.', 'csf' ) ) );
+ }
+
+ $capability = apply_filters( 'csf_chosen_ajax_capability', 'manage_options' );
+
+ if ( ! current_user_can( $capability ) ) {
+ wp_send_json_error( array( 'error' => esc_html__( 'You do not have required permissions to access.', 'csf' ) ) );
+ }
+
+ // Success
+ $options = CSF_Fields::field_data( $type, $term, $query );
+
+ wp_send_json_success( $options );
+
+ }
+ add_action( 'wp_ajax_csf-chosen', 'csf_chosen_ajax' );
+}
diff --git a/functions/customize.php b/functions/customize.php
new file mode 100644
index 0000000..8ace6bf
--- /dev/null
+++ b/functions/customize.php
@@ -0,0 +1,141 @@
+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 = ' csf-dependency-control';
+ $visible .= ( ! empty( $depend_visible ) ) ? ' csf-depend-visible' : ' csf-depend-hidden';
+
+ }
+
+ $id = 'customize-control-' . str_replace( array( '[', ']' ), array( '-', '' ), $this->id );
+ $class = 'customize-control customize-control-'. $this->type . $visible;
+
+ echo '';
+ $this->render_content();
+ echo ' ';
+
+ }
+
+ public function render_content() {
+
+ $complex = array(
+ 'accordion',
+ 'background',
+ 'border',
+ 'button_set',
+ 'checkbox',
+ 'color_group',
+ 'date',
+ 'dimensions',
+ 'fieldset',
+ 'group',
+ 'image_select',
+ '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 ) ? ' csf-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 '';
+
+ CSF::field( $this->field, $this->value(), $this->unique, 'customize' );
+
+ echo '
';
+
+ }
+
+ }
+}
diff --git a/functions/helpers.php b/functions/helpers.php
new file mode 100644
index 0000000..4b2358f
--- /dev/null
+++ b/functions/helpers.php
@@ -0,0 +1,58 @@
+=' );
+ }
+}
diff --git a/functions/sanitize.php b/functions/sanitize.php
new file mode 100644
index 0000000..a3129be
--- /dev/null
+++ b/functions/sanitize.php
@@ -0,0 +1,29 @@
+add( 'required', esc_html__( 'Please write a valid email address!', 'csf' ) );
+ }
+
+ return $validity;
+
+ }
+}
+
+/**
+ *
+ * Numeric validate for Customizer
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ *
+ */
+if ( ! function_exists( 'csf_customize_validate_numeric' ) ) {
+ function csf_customize_validate_numeric( $validity, $value, $wp_customize ) {
+
+ if ( ! is_numeric( $value ) ) {
+ $validity->add( 'required', esc_html__( 'Please write a numeric data!', 'csf' ) );
+ }
+
+ return $validity;
+
+ }
+}
+
+/**
+ *
+ * Required validate for Customizer
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ *
+ */
+if ( ! function_exists( 'csf_customize_validate_required' ) ) {
+ function csf_customize_validate_required( $validity, $value, $wp_customize ) {
+
+ if ( empty( $value ) ) {
+ $validity->add( 'required', esc_html__( 'Error! This field is required!', 'csf' ) );
+ }
+
+ return $validity;
+
+ }
+}
+
+/**
+ *
+ * URL validate for Customizer
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ *
+ */
+if ( ! function_exists( 'csf_customize_validate_url' ) ) {
+ function csf_customize_validate_url( $validity, $value, $wp_customize ) {
+
+ if ( ! filter_var( $value, FILTER_VALIDATE_URL ) ) {
+ $validity->add( 'required', esc_html__( 'Please write a valid url!', 'csf' ) );
+ }
+
+ return $validity;
+
+ }
+}
diff --git a/functions/walker.php b/functions/walker.php
new file mode 100644
index 0000000..a35ccb9
--- /dev/null
+++ b/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/index.php b/index.php
new file mode 100644
index 0000000..49d255d
--- /dev/null
+++ b/index.php
@@ -0,0 +1 @@
+\n"
+"Language-Team: https://doothemes.com\n"
+"Language: es_ES\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.3.1\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Poedit-Basepath: ..\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: classes/comment-metabox.class.php:198 classes/metabox.class.php:259
+#: classes/options.class.php:683
+msgid "No option provided by developer."
+msgstr "Ninguna opción proporcionada por el desarrollador."
+
+#: classes/comment-metabox.class.php:217 classes/metabox.class.php:278
+msgid "Restore"
+msgstr "Restaurar"
+
+#: classes/comment-metabox.class.php:218 classes/metabox.class.php:279
+msgid "update post for restore "
+msgstr "actualizar la publicación para restaurar "
+
+#: classes/comment-metabox.class.php:218 classes/metabox.class.php:279
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: classes/options.class.php:228
+msgid "Error while saving."
+msgstr "Error durante el guardado."
+
+#: classes/options.class.php:288
+msgid "Success. Imported backup options."
+msgstr "Excelente. Todas las opciones han sido importadas."
+
+#: classes/options.class.php:300
+msgid "Default options restored."
+msgstr "Opciones por defecto restauradas."
+
+#: classes/options.class.php:316
+msgid "Default options restored for only this section."
+msgstr "Opciones predeterminadas restauradas sólo para esta sección."
+
+#: classes/options.class.php:387
+msgid "Settings saved."
+msgstr "Ajustes guardados."
+
+#: classes/options.class.php:574
+msgid "Settings have changed, you should save them!"
+msgstr "La configuración ha cambiado, debe guardarlas!"
+
+#: classes/options.class.php:576
+msgid "show all options"
+msgstr "ver todas las opciones"
+
+#: classes/options.class.php:578
+msgid "Search option(s)"
+msgstr "Buscar opciones"
+
+#: classes/options.class.php:581 classes/options.class.php:708
+msgid "Save"
+msgstr "Guardar"
+
+#: classes/options.class.php:581 classes/options.class.php:708
+msgid "Saving..."
+msgstr "Guardando…"
+
+#: classes/options.class.php:582 classes/options.class.php:709
+msgid "Reset Section"
+msgstr "Restablecer sección"
+
+#: classes/options.class.php:582 classes/options.class.php:709
+msgid "Are you sure to reset this section options?"
+msgstr "¿Está seguro de restablecer las opciones de esta sección?"
+
+#: classes/options.class.php:583 classes/options.class.php:710
+#: fields/backup/backup.php:34
+msgid "Reset All"
+msgstr "Restablecer todo"
+
+#: classes/options.class.php:583 classes/options.class.php:710
+msgid "Are you sure to reset all options?"
+msgstr "¿Está seguro de restablecer todas las opciones?"
+
+#: classes/setup.class.php:434
+msgid "Are you sure?"
+msgstr "¿Estás seguro?"
+
+#: classes/setup.class.php:435
+msgid "Restoring options."
+msgstr "Restauración de opciones."
+
+#: classes/setup.class.php:436
+msgid "Importing options."
+msgstr "Importación de opciones."
+
+#: classes/setup.class.php:439
+msgid "Please enter %s or more characters"
+msgstr "Por favor, introduzca %s o más caracteres"
+
+#: classes/setup.class.php:440
+msgid "Searching..."
+msgstr "Buscando..."
+
+#: classes/setup.class.php:441
+msgid "No results match"
+msgstr "No se encontraron resultados"
+
+#: classes/setup.class.php:512
+msgid "Ooops! This field type (%s) can not be used here, yet."
+msgstr "Ooops! Este tipo de campo (%s) no se puede utilizar aquÃ, todavÃa."
+
+#: classes/setup.class.php:582
+msgid "This field class is not available!"
+msgstr "¡Esta clase de campo no está disponible!"
+
+#: classes/setup.class.php:586
+msgid "This type is not found!"
+msgstr "¡ Este tipo no se encuentra!"
+
+#: classes/shortcoder.class.php:246
+msgid "Add one more"
+msgstr "Añadir una más"
+
+#: classes/shortcoder.class.php:283 functions/actions.php:16
+#: functions/actions.php:68 functions/actions.php:106 functions/actions.php:141
+#: functions/actions.php:170
+msgid "Error: Nonce verification has failed. Please try again."
+msgstr ""
+"Error: La verificación de Nonce ha fallado. Por favor, inténtelo de nuevo."
+
+#: fields/background/background.php:35
+msgid "No background selected"
+msgstr "No hay fondo seleccionado"
+
+#: fields/background/background.php:66 fields/date/date.php:31
+msgid "From"
+msgstr "De"
+
+#: fields/background/background.php:84 fields/date/date.php:32
+msgid "To"
+msgstr "A"
+
+#: fields/background/background.php:102
+msgid "Direction"
+msgstr "Dirección"
+
+#: fields/background/background.php:108
+msgid "Gradient Direction"
+msgstr "Dirección del gradiente"
+
+#: fields/background/background.php:109
+msgid "⇓ top to bottom"
+msgstr "⇓ de arriba hacia abajo"
+
+#: fields/background/background.php:110
+msgid "⇒ left to right"
+msgstr "⇒ de izquierda a derecha"
+
+#: fields/background/background.php:111
+msgid "⇘ corner top to right"
+msgstr "⇘ esquina de arriba a derecha"
+
+#: fields/background/background.php:112
+msgid "⇙ corner top to left"
+msgstr "⇙ esquina de arriba a izquierda"
+
+#: fields/background/background.php:155
+msgid "Background Position"
+msgstr "Posición de fondo"
+
+#: fields/background/background.php:156
+msgid "Left Top"
+msgstr "Izquierda superior"
+
+#: fields/background/background.php:157
+msgid "Left Center"
+msgstr "Izquierda centro"
+
+#: fields/background/background.php:158
+msgid "Left Bottom"
+msgstr "Izquierda abajo"
+
+#: fields/background/background.php:159
+msgid "Center Top"
+msgstr "Centro Arriba"
+
+#: fields/background/background.php:160
+msgid "Center Center"
+msgstr "Centro Centro"
+
+#: fields/background/background.php:161
+msgid "Center Bottom"
+msgstr "Centro Abajo"
+
+#: fields/background/background.php:162
+msgid "Right Top"
+msgstr "Derecha superior"
+
+#: fields/background/background.php:163
+msgid "Right Center"
+msgstr "Derecha centro"
+
+#: fields/background/background.php:164
+msgid "Right Bottom"
+msgstr "Derecha abajo"
+
+#: fields/background/background.php:178
+msgid "Background Repeat"
+msgstr "Repetir fondo"
+
+#: fields/background/background.php:179
+msgid "Repeat"
+msgstr "Repetir"
+
+#: fields/background/background.php:180
+msgid "No Repeat"
+msgstr "No repetir"
+
+#: fields/background/background.php:181
+msgid "Repeat Horizontally"
+msgstr "Repetir Horizontalmente"
+
+#: fields/background/background.php:182
+msgid "Repeat Vertically"
+msgstr "Repetir Verticalmente"
+
+#: fields/background/background.php:196
+msgid "Background Attachment"
+msgstr "Archivo adjunto de fondo"
+
+#: fields/background/background.php:197
+msgid "Scroll"
+msgstr "Scroll"
+
+#: fields/background/background.php:198
+msgid "Fixed"
+msgstr "Fixed"
+
+#: fields/background/background.php:212
+msgid "Background Size"
+msgstr "Tamaño de fondo"
+
+#: fields/background/background.php:213
+msgid "Cover"
+msgstr "Cover"
+
+#: fields/background/background.php:214
+msgid "Contain"
+msgstr "Contenido"
+
+#: fields/background/background.php:228
+msgid "Background Origin"
+msgstr "Origen del Fondo"
+
+#: fields/background/background.php:229 fields/background/background.php:247
+msgid "Padding Box"
+msgstr "Padding Box"
+
+#: fields/background/background.php:230 fields/background/background.php:246
+msgid "Border Box"
+msgstr "Border Box"
+
+#: fields/background/background.php:231 fields/background/background.php:248
+msgid "Content Box"
+msgstr "Content Box"
+
+#: fields/background/background.php:245
+msgid "Background Clip"
+msgstr "Recorte del fondo"
+
+#: fields/background/background.php:262
+msgid "Background Blend Mode"
+msgstr "Background Blend Mode"
+
+#: fields/background/background.php:263 fields/link_color/link_color.php:36
+#: fields/typography/typography.php:175
+msgid "Normal"
+msgstr "Normal"
+
+#: fields/background/background.php:264
+msgid "Multiply"
+msgstr "Multiplicar"
+
+#: fields/background/background.php:265
+msgid "Screen"
+msgstr "Pantalla"
+
+#: fields/background/background.php:266
+msgid "Overlay"
+msgstr "Cubrir"
+
+#: fields/background/background.php:267
+msgid "Darken"
+msgstr "Oscurecer"
+
+#: fields/background/background.php:268
+msgid "Lighten"
+msgstr "Aclarar"
+
+#: fields/background/background.php:269
+msgid "Color Dodge"
+msgstr "Sobreexposición del color"
+
+#: fields/background/background.php:270
+msgid "Saturation"
+msgstr "Saturación"
+
+#: fields/background/background.php:271
+msgid "Color"
+msgstr "Color"
+
+#: fields/background/background.php:272
+msgid "Luminosity"
+msgstr "Luminosidad"
+
+#: fields/backup/backup.php:26
+msgid "Import"
+msgstr "Importar"
+
+#: fields/backup/backup.php:27
+msgid "copy-paste your backup string here"
+msgstr "copie-pegue su cadena de respaldo aquÃ"
+
+#: fields/backup/backup.php:31
+msgid "Export and Download Backup"
+msgstr "Exportar y Descargar Copia de Seguridad"
+
+#: fields/backup/backup.php:35
+msgid "Please be sure for reset all of options."
+msgstr "Por favor, asegúrese de restablecer todas las opciones."
+
+#: fields/border/border.php:25 fields/spacing/spacing.php:25
+msgid "top"
+msgstr "arriba"
+
+#: fields/border/border.php:26 fields/spacing/spacing.php:26
+msgid "right"
+msgstr "derecha"
+
+#: fields/border/border.php:27 fields/spacing/spacing.php:27
+msgid "bottom"
+msgstr "abajo"
+
+#: fields/border/border.php:28 fields/spacing/spacing.php:28
+msgid "left"
+msgstr "izquierda"
+
+#: fields/border/border.php:29 fields/spacing/spacing.php:29
+msgid "all"
+msgstr "todo"
+
+#: fields/border/border.php:51 fields/typography/typography.php:203
+msgid "Solid"
+msgstr "Sólido"
+
+#: fields/border/border.php:52 fields/typography/typography.php:206
+msgid "Dashed"
+msgstr "Discontinua"
+
+#: fields/border/border.php:53 fields/typography/typography.php:205
+msgid "Dotted"
+msgstr "Punteado"
+
+#: fields/border/border.php:54 fields/typography/typography.php:204
+msgid "Double"
+msgstr "Doble"
+
+#: fields/border/border.php:55
+msgid "Inset"
+msgstr "Recuadro"
+
+#: fields/border/border.php:56
+msgid "Outset"
+msgstr "Exterior"
+
+#: fields/border/border.php:57
+msgid "Groove"
+msgstr "Ranura"
+
+#: fields/border/border.php:58
+msgid "ridge"
+msgstr "rugoso"
+
+#: fields/border/border.php:59 fields/typography/typography.php:188
+#: fields/typography/typography.php:202
+msgid "None"
+msgstr "Ninguno"
+
+#: fields/button_set/button_set.php:56 fields/checkbox/checkbox.php:63
+#: fields/radio/radio.php:62 fields/select/select.php:113
+msgid "No data provided for this option type."
+msgstr "No hay datos proporcionados para este tipo de opción."
+
+#: fields/dimensions/dimensions.php:22
+msgid "width"
+msgstr "ancho"
+
+#: fields/dimensions/dimensions.php:23
+msgid "height"
+msgstr "altura"
+
+#: fields/gallery/gallery.php:20
+msgid "Add Gallery"
+msgstr "Agregar GalerÃa"
+
+#: fields/gallery/gallery.php:21
+msgid "Edit Gallery"
+msgstr "Editar GalerÃa"
+
+#: fields/gallery/gallery.php:22
+msgid "Clear"
+msgstr "Limpiar"
+
+#: fields/group/group.php:23
+msgid "Add New"
+msgstr "Añadir nuevo"
+
+#: fields/group/group.php:35 fields/repeater/repeater.php:30
+msgid "Error: Nested field id can not be same with another nested field id."
+msgstr ""
+"Error: el ID de campo anidado no puede ser el mismo con otro ID de campo "
+"anidado."
+
+#: fields/group/group.php:46 fields/group/group.php:87
+#: fields/repeater/repeater.php:51 fields/repeater/repeater.php:82
+msgid "Are you sure to delete this item?"
+msgstr "¿Está seguro de eliminar este elemento?"
+
+#: fields/group/group.php:122 fields/repeater/repeater.php:96
+msgid "You can not add more than"
+msgstr "No se puede agregar más de"
+
+#: fields/group/group.php:123 fields/repeater/repeater.php:97
+msgid "You can not remove less than"
+msgstr "No se puede quitar menos de"
+
+#: fields/icon/icon.php:20 functions/actions.php:209
+msgid "Add Icon"
+msgstr "Añadir Icono"
+
+#: fields/icon/icon.php:21
+msgid "Remove Icon"
+msgstr "Eliminar Icono"
+
+#: fields/link_color/link_color.php:37
+msgid "Hover"
+msgstr "Hover"
+
+#: fields/link_color/link_color.php:38
+msgid "Active"
+msgstr "Activo"
+
+#: fields/link_color/link_color.php:39
+msgid "Visited"
+msgstr "Visitado"
+
+#: fields/link_color/link_color.php:40
+msgid "Focus"
+msgstr "Enfoque"
+
+#: fields/map/map.php:23
+msgid "Search your address..."
+msgstr "Busca en tu dirección..."
+
+#: fields/map/map.php:24
+msgid "Latitude"
+msgstr "Latitud"
+
+#: fields/map/map.php:25
+msgid "Longitude"
+msgstr "Longitud"
+
+#: fields/media/media.php:23 fields/upload/upload.php:21
+msgid "Upload"
+msgstr "Cargar"
+
+#: fields/media/media.php:24 fields/upload/upload.php:22
+msgid "Remove"
+msgstr "Quitar"
+
+#: fields/media/media.php:57
+msgid "No media selected"
+msgstr "No se ha seleccionado ningún medio"
+
+#: fields/sorter/sorter.php:21
+msgid "Enabled"
+msgstr "Habilitado"
+
+#: fields/sorter/sorter.php:22
+msgid "Disabled"
+msgstr "Deshabilitado"
+
+#: fields/switcher/switcher.php:20
+msgid "On"
+msgstr "On"
+
+#: fields/switcher/switcher.php:21
+msgid "Off"
+msgstr "Off"
+
+#: fields/textarea/textarea.php:37
+msgid "Add Shortcode"
+msgstr "Añadir Shortcode"
+
+#: fields/typography/typography.php:85
+msgid "Font Family"
+msgstr "Familia de Fuente"
+
+#: fields/typography/typography.php:86
+msgid "Select a font"
+msgstr "Seleccione una fuente"
+
+#: fields/typography/typography.php:94
+msgid "Backup Font Family"
+msgstr "TipografÃa de respaldo"
+
+#: fields/typography/typography.php:108 fields/typography/typography.php:121
+#: fields/typography/typography.php:134 fields/typography/typography.php:149
+#: fields/typography/typography.php:165 fields/typography/typography.php:178
+#: fields/typography/typography.php:192 fields/typography/typography.php:210
+msgid "Default"
+msgstr "Predeterminado"
+
+#: fields/typography/typography.php:119
+msgid "Font Style"
+msgstr "Estilo de Fuente"
+
+#: fields/typography/typography.php:133 fields/typography/typography.php:134
+msgid "Load Extra Styles"
+msgstr "Cargar estilos adicionales"
+
+#: fields/typography/typography.php:147
+msgid "Subset"
+msgstr "Subconjunto"
+
+#: fields/typography/typography.php:157
+msgid "Text Align"
+msgstr "Texto alineado"
+
+#: fields/typography/typography.php:159
+msgid "Inherit"
+msgstr "Heredar"
+
+#: fields/typography/typography.php:160
+msgid "Left"
+msgstr "Izquierda"
+
+#: fields/typography/typography.php:161
+msgid "Center"
+msgstr "Centro"
+
+#: fields/typography/typography.php:162
+msgid "Right"
+msgstr "Derecha"
+
+#: fields/typography/typography.php:163
+msgid "Justify"
+msgstr "Justificar"
+
+#: fields/typography/typography.php:164
+msgid "Initial"
+msgstr "Inicial"
+
+#: fields/typography/typography.php:173
+msgid "Font Variant"
+msgstr "Variante de fuente"
+
+#: fields/typography/typography.php:176
+msgid "Small Caps"
+msgstr "Mayúsculas pequeñas"
+
+#: fields/typography/typography.php:177
+msgid "All Small Caps"
+msgstr "Todas las mayusculas pequeñas"
+
+#: fields/typography/typography.php:186
+msgid "Text Transform"
+msgstr "Transformación de texto"
+
+#: fields/typography/typography.php:189
+msgid "Capitalize"
+msgstr "Capitalizar"
+
+#: fields/typography/typography.php:190
+msgid "Uppercase"
+msgstr "Mayúsculas"
+
+#: fields/typography/typography.php:191
+msgid "Lowercase"
+msgstr "Minúsculas"
+
+#: fields/typography/typography.php:200
+msgid "Text Decoration"
+msgstr "Decoración del texto"
+
+#: fields/typography/typography.php:207
+msgid "Wavy"
+msgstr "Ondulado"
+
+#: fields/typography/typography.php:208
+msgid "Overline"
+msgstr "Sobrerayado"
+
+#: fields/typography/typography.php:209
+msgid "Line-through"
+msgstr "Tachada"
+
+#: fields/typography/typography.php:222
+msgid "Font Size"
+msgstr "Tamaño de fuente"
+
+#: fields/typography/typography.php:234
+msgid "Line Height"
+msgstr "Altura de la lÃnea"
+
+#: fields/typography/typography.php:246
+msgid "Letter Spacing"
+msgstr "Espacio entre letras"
+
+#: fields/typography/typography.php:258
+msgid "Word Spacing"
+msgstr "Espaciado entre palabras"
+
+#: fields/typography/typography.php:273
+msgid "Font Color"
+msgstr "Color de fuente"
+
+#: fields/typography/typography.php:284
+msgid "Custom Style"
+msgstr "Estilo personalizado"
+
+#: fields/typography/typography.php:351
+msgid "Custom Web Fonts"
+msgstr "Fuentes web personalizadas"
+
+#: fields/typography/typography.php:357
+msgid "Safe Web Fonts"
+msgstr "Fuentes Web Seguras"
+
+#: fields/typography/typography.php:377
+msgid "Google Web Fonts"
+msgstr "Fuentes web de Google"
+
+#: functions/actions.php:41
+msgid "No data provided by developer"
+msgstr "No hay datos proporcionados por el desarrollador"
+
+#: functions/actions.php:72 functions/actions.php:110
+msgid "Error: Options unique id could not valid."
+msgstr "Error: Las opciones unique id no pudieron ser válidas."
+
+#: functions/actions.php:114
+msgid "Error: Import data could not valid."
+msgstr "Error: Los datos de importación no pueden ser válidos."
+
+#: functions/actions.php:174
+msgid "Error: Missing request arguments."
+msgstr "Error: faltan argumentos de solicitud."
+
+#: functions/actions.php:180
+msgid "You do not have required permissions to access."
+msgstr "No tiene permisos necesarios para acceder."
+
+#: functions/actions.php:213
+msgid "Search a Icon..."
+msgstr "Buscar un Icono…"
+
+#: functions/validate.php:14 functions/validate.php:86
+msgid "Please write a valid email address!"
+msgstr "¡Por favor escriba una dirección válida de correo electrónico!"
+
+#: functions/validate.php:32 functions/validate.php:106
+msgid "Please write a numeric data!"
+msgstr "¡Por favor introduce un dato numérico!"
+
+#: functions/validate.php:50 functions/validate.php:126
+msgid "Error! This field is required!"
+msgstr "¡Error! ¡Este campo es obligatorio!"
+
+#: functions/validate.php:68 functions/validate.php:146
+msgid "Please write a valid url!"
+msgstr "Por favor, escriba una URL válida!"
+
+#~ msgid "Security check"
+#~ msgstr "Verificación de seguridad"
diff --git a/samples/admin-options.php b/samples/admin-options.php
new file mode 100644
index 0000000..07aa9a4
--- /dev/null
+++ b/samples/admin-options.php
@@ -0,0 +1,3490 @@
+ 'CSF Demo',
+ 'menu_slug' => 'csf-demo',
+) );
+
+//
+// Create a section
+//
+CSF::createSection( $prefix, array(
+ 'title' => 'Overview',
+ 'icon' => 'fas fa-rocket',
+ 'fields' => array(
+
+ //
+ // A text field
+ //
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+
+ array(
+ 'id' => 'opt-textarea',
+ 'type' => 'textarea',
+ 'title' => 'Textarea',
+ 'help' => 'The help text of the field.',
+ ),
+
+ array(
+ 'id' => 'opt-upload',
+ 'type' => 'upload',
+ 'title' => 'Upload',
+ ),
+
+ array(
+ 'id' => 'opt-switcher',
+ 'type' => 'switcher',
+ 'title' => 'Switcher',
+ 'label' => 'The label text of the switcher.',
+ ),
+
+ array(
+ 'id' => 'opt-color',
+ 'type' => 'color',
+ 'title' => 'Color',
+ 'default' => '#3498db',
+ ),
+
+ array(
+ 'id' => 'opt-checkbox',
+ 'type' => 'checkbox',
+ 'title' => 'Checkbox',
+ 'label' => 'The label text of the checkbox.',
+ ),
+
+ array(
+ 'id' => 'opt-radio',
+ 'type' => 'radio',
+ 'title' => 'Radio',
+ 'options' => array(
+ 'yes' => 'Yes, Please.',
+ 'no' => 'No, Thank you.',
+ ),
+ 'default' => 'yes',
+ ),
+
+ array(
+ 'id' => 'opt-select',
+ 'type' => 'select',
+ 'title' => 'Select',
+ 'placeholder' => 'Select an option',
+ 'options' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-image-select',
+ 'type' => 'image_select',
+ 'title' => 'Image Select',
+ 'options' => array(
+ 'opt-1' => 'http://codestarframework.com/assets/images/placeholder/100x80-2ecc71.gif',
+ 'opt-2' => 'http://codestarframework.com/assets/images/placeholder/100x80-e74c3c.gif',
+ 'opt-3' => 'http://codestarframework.com/assets/images/placeholder/100x80-ffbc00.gif',
+ 'opt-4' => 'http://codestarframework.com/assets/images/placeholder/100x80-3498db.gif',
+ 'opt-5' => 'http://codestarframework.com/assets/images/placeholder/100x80-555555.gif',
+ ),
+ 'default' => 'opt-1',
+ ),
+
+ array(
+ 'id' => 'opt-background',
+ 'type' => 'background',
+ 'title' => 'Background',
+ ),
+
+ array(
+ 'type' => 'notice',
+ 'style' => 'success',
+ 'content' => 'A notice field with success style.',
+ ),
+
+ array(
+ 'id' => 'opt-icon',
+ 'type' => 'icon',
+ 'title' => 'Icon',
+ ),
+
+ array(
+ 'id' => 'opt-alt-text',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+
+ array(
+ 'id' => 'opt-alt-textarea',
+ 'type' => 'textarea',
+ 'title' => 'Textarea',
+ 'subtitle' => 'A textarea with shortcoder.',
+ 'shortcoder' => 'csf_demo_shortcodes',
+ ),
+
+ )
+) );
+
+//
+// Basic Fields
+//
+CSF::createSection( $prefix, array(
+ 'id' => 'basic_fields',
+ 'title' => 'Basic Fields',
+ 'icon' => 'fas fa-plus-circle',
+) );
+
+//
+// Field: text
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'basic_fields',
+ 'title' => 'Text',
+ 'icon' => 'far fa-square',
+ 'description' => 'Visit documentation for more details on this field: Field: text ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-text-1',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+
+ array(
+ 'id' => 'opt-text-2',
+ 'type' => 'text',
+ 'title' => 'Text with default',
+ 'default' => 'This is default value bla bla bla',
+ ),
+
+ array(
+ 'id' => 'opt-text-3',
+ 'type' => 'text',
+ 'title' => 'Text field ingenuity',
+ 'subtitle' => 'The field of subtitle text.',
+ 'help' => 'The field of help text.',
+ 'before' => 'The field of before text.
',
+ 'after' => 'The field of after text.
',
+ ),
+
+ array(
+ 'id' => 'opt-text-4',
+ 'type' => 'text',
+ 'title' => 'Text with placeholder',
+ 'placeholder' => 'Typed something...'
+ ),
+
+ array(
+ 'id' => 'opt-text-5',
+ 'type' => 'text',
+ 'title' => 'Text readonly',
+ 'attributes' => array(
+ 'readonly' => 'readonly'
+ ),
+ 'default' => 'readonly text field, can not be changed'
+ ),
+
+ array(
+ 'id' => 'opt-text-6',
+ 'type' => 'text',
+ 'title' => 'Text with maxlength (5)',
+ 'attributes' => array(
+ 'maxlength' => '5'
+ ),
+ 'default' => 'abc',
+ ),
+
+ array(
+ 'id' => 'opt-text-7',
+ 'type' => 'text',
+ 'title' => 'Text usign custom styles',
+ 'attributes' => array(
+ 'style' => 'width: 100%; height: 40px; border-color: #93C054;'
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-text-8',
+ 'type' => 'text',
+ 'after' => 'It shows full width if there is no field of title.
',
+ ),
+
+ )
+) );
+
+//
+// Field: textarea
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'basic_fields',
+ 'title' => 'Textarea',
+ 'icon' => 'far fa-square',
+ 'description' => 'Visit documentation for more details on this field: Field: textrea ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-textarea-1',
+ 'type' => 'textarea',
+ 'title' => 'Textarea',
+ ),
+
+ array(
+ 'id' => 'opt-textarea-2',
+ 'type' => 'textarea',
+ 'title' => 'Textarea wtih default',
+ 'default' => 'This is default value bla bla bla',
+ ),
+
+ array(
+ 'id' => 'opt-textarea-3',
+ 'type' => 'textarea',
+ 'title' => 'Text with placeholder',
+ 'placeholder' => 'Typed something...'
+ ),
+
+ array(
+ 'id' => 'opt-textarea-4',
+ 'type' => 'textarea',
+ 'title' => 'Textarea with shortcoder',
+ 'shortcoder' => 'csf_demo_shortcodes',
+ ),
+
+ array(
+ 'id' => 'opt-textarea-5',
+ 'type' => 'textarea',
+ 'title' => 'Textarea field ingenuity',
+ 'subtitle' => 'The field of subtitle text.',
+ 'help' => 'The field of help text.',
+ 'before' => 'The field of before text.
',
+ 'after' => 'The field of after text.
',
+ ),
+
+ array(
+ 'id' => 'opt-textarea-6',
+ 'type' => 'textarea',
+ 'after' => 'It shows full width if there is no field of title.
',
+ ),
+
+ )
+) );
+
+//
+// Field: select
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'basic_fields',
+ 'title' => 'Select',
+ 'icon' => 'fas fa-list',
+ 'description' => 'Visit documentation for more details on this field: Field: select ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-select-1',
+ 'type' => 'select',
+ 'title' => 'Select',
+ 'placeholder' => 'Select an option',
+ 'options' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-select-2',
+ 'type' => 'select',
+ 'title' => 'Select with default',
+ 'placeholder' => 'Select an option',
+ 'options' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ ),
+ 'default' => 'opt-2'
+ ),
+
+ array(
+ 'id' => 'opt-select-3',
+ 'type' => 'select',
+ 'title' => 'Select with group related options',
+ 'placeholder' => 'Select an option',
+ 'options' => array(
+ 'Group 1' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ ),
+ 'Group 2' => array(
+ 'opt-4' => 'Option 4',
+ 'opt-5' => 'Option 5',
+ 'opt-6' => 'Option 6',
+ ),
+ 'Group 3' => array(
+ 'opt-7' => 'Option 7',
+ 'opt-8' => 'Option 8',
+ 'opt-9' => 'Option 9',
+ ),
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-select-4',
+ 'type' => 'select',
+ 'title' => 'Select with multiple choice',
+ 'multiple' => true,
+ 'attributes' => array(
+ 'style' => 'min-width: 200px;'
+ ),
+ 'options' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ 'opt-4' => 'Option 4',
+ 'opt-5' => 'Option 5',
+ 'opt-6' => 'Option 6',
+ ),
+ 'default' => array( 'opt-2', 'opt-3' ),
+ ),
+
+ array(
+ 'type' => 'notice',
+ 'style' => 'info',
+ 'content' => 'Select with chosen style.',
+ ),
+
+ array(
+ 'id' => 'opt-select-5',
+ 'type' => 'select',
+ 'title' => 'Select with Chosen',
+ 'chosen' => true,
+ 'placeholder' => 'Select an option',
+ 'options' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ 'opt-4' => 'Option 4',
+ 'opt-5' => 'Option 5',
+ 'opt-6' => 'Option 6',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-select-6',
+ 'type' => 'select',
+ 'title' => 'Select with multiple Chosen',
+ 'chosen' => true,
+ 'multiple' => true,
+ 'placeholder' => 'Select an option',
+ 'options' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ 'opt-4' => 'Option 4',
+ 'opt-5' => 'Option 5',
+ 'opt-6' => 'Option 6',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-select-7',
+ 'type' => 'select',
+ 'title' => 'Select with multiple Chosen and Sortable',
+ 'chosen' => true,
+ 'multiple' => true,
+ 'sortable' => true,
+ 'placeholder' => 'Select an option',
+ 'options' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ 'opt-4' => 'Option 4',
+ 'opt-5' => 'Option 5',
+ 'opt-6' => 'Option 6',
+ ),
+ 'default' => array( 'opt-1', 'opt-2', 'opt-3' )
+ ),
+
+ array(
+ 'id' => 'opt-select-8',
+ 'type' => 'select',
+ 'title' => 'Select with multiple AJAX search Pages',
+ 'chosen' => true,
+ 'multiple' => true,
+ 'sortable' => true,
+ 'ajax' => true,
+ 'options' => 'pages',
+ 'placeholder' => 'Select pages',
+ ),
+
+ array(
+ 'id' => 'opt-select-9',
+ 'type' => 'select',
+ 'title' => 'Select with multiple AJAX search Posts',
+ 'chosen' => true,
+ 'multiple' => true,
+ 'sortable' => true,
+ 'ajax' => true,
+ 'options' => 'posts',
+ 'placeholder' => 'Select posts',
+ ),
+
+ array(
+ 'id' => 'opt-select-10',
+ 'type' => 'select',
+ 'title' => 'Select with AJAX search Category',
+ 'chosen' => true,
+ 'ajax' => true,
+ 'options' => 'category',
+ 'placeholder' => 'Select a category',
+ ),
+
+ array(
+ 'type' => 'notice',
+ 'style' => 'info',
+ 'content' => 'Select with predefined wp query options.',
+ ),
+
+ array(
+ 'id' => 'opt-select-11',
+ 'type' => 'select',
+ 'title' => 'Select with pages',
+ 'placeholder' => 'Select a page',
+ 'options' => 'pages',
+ ),
+
+ array(
+ 'id' => 'opt-select-12',
+ 'type' => 'select',
+ 'title' => 'Select with posts',
+ 'placeholder' => 'Select a post',
+ 'options' => 'posts',
+ ),
+
+ array(
+ 'id' => 'opt-select-13',
+ 'type' => 'select',
+ 'title' => 'Select with categories',
+ 'placeholder' => 'Select a category',
+ 'options' => 'categories',
+ ),
+
+ array(
+ 'id' => 'opt-select-14',
+ 'type' => 'select',
+ 'title' => 'Select with menus',
+ 'placeholder' => 'Select a menu',
+ 'options' => 'menus',
+ ),
+
+ array(
+ 'id' => 'opt-select-15',
+ 'type' => 'select',
+ 'title' => 'Select with sidebars',
+ 'placeholder' => 'Select a sidebar',
+ 'options' => 'sidebars',
+ ),
+
+ array(
+ 'id' => 'opt-select-16',
+ 'type' => 'select',
+ 'title' => 'Select with wp roles',
+ 'placeholder' => 'Select a role',
+ 'options' => 'roles',
+ ),
+
+ array(
+ 'id' => 'opt-select-17',
+ 'type' => 'select',
+ 'title' => 'Select with users',
+ 'placeholder' => 'Select a user',
+ 'options' => 'users',
+ ),
+
+ array(
+ 'id' => 'opt-select-18',
+ 'type' => 'select',
+ 'title' => 'Select with post type',
+ 'placeholder' => 'Select a post type',
+ 'options' => 'post_types',
+ ),
+
+ array(
+ 'id' => 'opt-select-19',
+ 'type' => 'select',
+ 'title' => 'Select with CPT (custom post type) posts',
+ 'placeholder' => 'Select a post',
+ 'options' => 'posts',
+ 'query_args' => array(
+ 'post_type' => 'your_post_type_name',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-select-20',
+ 'type' => 'select',
+ 'title' => 'Select with CPT (custom post type) categories',
+ 'placeholder' => 'Select a category',
+ 'options' => 'categories',
+ 'query_args' => array(
+ 'taxonomy' => 'your_taxonomy_name',
+ ),
+ ),
+
+ )
+) );
+
+//
+// Field: checkbox
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'basic_fields',
+ 'title' => 'Checkbox',
+ 'icon' => 'fas fa-check-square',
+ 'description' => 'Visit documentation for more details on this field: Field: checkbox ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-checkbox-1',
+ 'type' => 'checkbox',
+ 'title' => 'Checkbox',
+ 'label' => 'The label text of the checkbox.',
+ ),
+
+ array(
+ 'id' => 'opt-checkbox-2',
+ 'type' => 'checkbox',
+ 'title' => 'Checkbox with default',
+ 'label' => 'The label text of the checkbox.',
+ 'default' => true,
+ ),
+
+ array(
+ 'id' => 'opt-checkbox-3',
+ 'type' => 'checkbox',
+ 'title' => 'Checkbox with multiple choice',
+ 'options' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-checkbox-4',
+ 'type' => 'checkbox',
+ 'title' => 'Checkbox inline with multiple choice',
+ 'inline' => true,
+ 'options' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-checkbox-5',
+ 'type' => 'checkbox',
+ 'title' => 'Checkbox multiple choice with default',
+ 'options' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ ),
+ 'default' => array( 'opt-1', 'opt-2' )
+ ),
+
+ array(
+ 'id' => 'opt-checkbox-6',
+ 'type' => 'checkbox',
+ 'title' => 'Checkbox with group related options',
+ 'options' => array(
+ 'Group 1' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ ),
+ 'Group 2' => array(
+ 'opt-4' => 'Option 4',
+ 'opt-5' => 'Option 5',
+ 'opt-6' => 'Option 6',
+ ),
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-checkbox-7',
+ 'type' => 'checkbox',
+ 'title' => 'Checkbox testing on many items',
+ 'options' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ 'opt-4' => 'Option 4',
+ 'opt-5' => 'Option 5',
+ 'opt-6' => 'Option 6',
+ 'opt-7' => 'Option 7',
+ 'opt-8' => 'Option 8',
+ 'opt-9' => 'Option 9',
+ 'opt-10' => 'Option 10',
+ 'opt-11' => 'Option 11',
+ 'opt-12' => 'Option 12',
+ 'opt-13' => 'Option 13',
+ 'opt-14' => 'Option 14',
+ 'opt-15' => 'Option 15',
+ ),
+ 'desc' => 'Vertical scroll showing automatically after add many items',
+ ),
+
+ array(
+ 'type' => 'notice',
+ 'style' => 'info',
+ 'content' => 'Checkbox with predefined wp query options similar like select field. (see select field for all options models.)',
+ ),
+
+ array(
+ 'id' => 'opt-checkbox-8',
+ 'type' => 'checkbox',
+ 'title' => 'Checkbox with categories',
+ 'options' => 'categories',
+ ),
+
+ )
+) );
+
+//
+// Field: radio
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'basic_fields',
+ 'title' => 'Radio',
+ 'icon' => 'fas fa-dot-circle',
+ 'description' => 'Visit documentation for more details on this field: Field: radio ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-radio-1',
+ 'type' => 'radio',
+ 'title' => 'Radio',
+ 'options' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-radio-2',
+ 'type' => 'radio',
+ 'title' => 'Radio with default',
+ 'options' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ ),
+ 'default' => 'opt-2',
+ ),
+
+ array(
+ 'id' => 'opt-radio-3',
+ 'type' => 'radio',
+ 'title' => 'Radio with inline style',
+ 'inline' => true,
+ 'options' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-radio-4',
+ 'type' => 'radio',
+ 'title' => 'Radio with group related options',
+ 'options' => array(
+ 'Group 1' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ ),
+ 'Group 2' => array(
+ 'opt-4' => 'Option 4',
+ 'opt-5' => 'Option 5',
+ 'opt-6' => 'Option 6',
+ ),
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-radio-5',
+ 'type' => 'radio',
+ 'title' => 'Radio testing on many items',
+ 'options' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ 'opt-4' => 'Option 4',
+ 'opt-5' => 'Option 5',
+ 'opt-6' => 'Option 6',
+ 'opt-7' => 'Option 7',
+ 'opt-8' => 'Option 8',
+ 'opt-9' => 'Option 9',
+ 'opt-10' => 'Option 10',
+ 'opt-11' => 'Option 11',
+ 'opt-12' => 'Option 12',
+ 'opt-13' => 'Option 13',
+ 'opt-14' => 'Option 14',
+ 'opt-15' => 'Option 15',
+ ),
+ 'desc' => 'Vertical scroll showing automatically after add many items'
+ ),
+
+ array(
+ 'type' => 'notice',
+ 'style' => 'info',
+ 'content' => 'Radio with predefined wp query options similar like select field. (see select field for all options models.)',
+ ),
+
+ array(
+ 'id' => 'opt-radio-6',
+ 'type' => 'radio',
+ 'title' => 'Radio with categories',
+ 'options' => 'categories',
+ ),
+
+ )
+) );
+
+//
+// Repeater Fields
+//
+CSF::createSection( $prefix, array(
+ 'id' => 'repeater_fields',
+ 'title' => 'Repeater Fields',
+ 'icon' => 'far fa-clone',
+) );
+
+//
+// Field: repeater
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'repeater_fields',
+ 'title' => 'Repeater',
+ 'description' => 'Visit documentation for more details on this field: Field: repeater ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-repeater-1',
+ 'type' => 'repeater',
+ 'title' => 'Repeater',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text'
+ ),
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-repeater-2',
+ 'type' => 'repeater',
+ 'title' => 'Repeater with default',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+ ),
+ 'default' => array(
+ array(
+ 'opt-text' => 'Text default 1',
+ ),
+ array(
+ 'opt-text' => 'Text default 2',
+ ),
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-repeater-3',
+ 'type' => 'repeater',
+ 'title' => 'Repeater with multiple fields',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-switcher',
+ 'type' => 'switcher',
+ 'title' => 'Switcher',
+ ),
+ array(
+ 'id' => 'opt-color',
+ 'type' => 'color',
+ 'title' => 'Color',
+ ),
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+ ),
+ 'default' => array(
+ array(
+ 'opt-switcher' => false,
+ 'opt-color' => '#3498db',
+ 'opt-text' => 'Text default 1',
+ ),
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-repeater-4',
+ 'type' => 'repeater',
+ 'title' => 'Repeater with limited (min - max items)',
+ 'subtitle' => 'The maximum/minimum number of items the user can add. (In this example min:1, max:3)',
+ 'button_title' => 'Add Text',
+ 'min' => 1,
+ 'max' => 3,
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+ ),
+ 'default' => array(
+ array(
+ 'opt-text' => 'Text default 1',
+ ),
+ array(
+ 'opt-text' => 'Text default 2',
+ ),
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-repeater-6',
+ 'type' => 'repeater',
+ 'title' => 'Repeater nested repeater',
+ 'subtitle' => 'Can be added unlimited nested repeater',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+ array(
+ 'id' => 'opt-repeater-6-nested-1',
+ 'type' => 'repeater',
+ 'title' => 'Repeater',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text'
+ ),
+ ),
+ ),
+ ),
+ 'default' => array(
+ array(
+ 'opt-text' => 'Text default 1',
+ 'opt-repeater-6-nested-1' => array(
+ array(
+ 'opt-text' => 'Text default 1',
+ ),
+ array(
+ 'opt-text' => 'Text default 2',
+ ),
+ ),
+ ),
+ ),
+ ),
+
+ )
+) );
+
+//
+// Field: group
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'repeater_fields',
+ 'title' => 'Group',
+ 'description' => 'Visit documentation for more details on this field: Field: group ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-group-1',
+ 'type' => 'group',
+ 'title' => 'Group',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+ array(
+ 'id' => 'opt-switcher',
+ 'type' => 'switcher',
+ 'title' => 'Switcher',
+ ),
+ array(
+ 'id' => 'opt-textarea',
+ 'type' => 'textarea',
+ 'title' => 'Textarea',
+ ),
+ )
+ ),
+
+ array(
+ 'id' => 'opt-group-2',
+ 'type' => 'group',
+ 'title' => 'Group with default',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+ array(
+ 'id' => 'opt-switcher',
+ 'type' => 'switcher',
+ 'title' => 'Switcher',
+ ),
+ array(
+ 'id' => 'opt-textarea',
+ 'type' => 'textarea',
+ 'title' => 'Textarea',
+ ),
+ ),
+ 'default' => array(
+ array(
+ 'opt-text' => 'Some text 1',
+ 'opt-switcher' => true,
+ 'opt-textarea' => 'Some textarea content 1',
+ ),
+ array(
+ 'opt-text' => 'Some text 2',
+ 'opt-switcher' => false,
+ 'opt-textarea' => 'Some textarea content 2',
+ ),
+ )
+ ),
+
+ array(
+ 'id' => 'opt-group-3',
+ 'type' => 'group',
+ 'title' => 'Group with limited (min - max items)',
+ 'subtitle' => 'The maximum/minimum number of items the user can add. (In this example min:1, max:3)',
+ 'min' => 1,
+ 'max' => 3,
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+ array(
+ 'id' => 'opt-textarea',
+ 'type' => 'textarea',
+ 'title' => 'Textarea',
+ ),
+ ),
+ 'default' => array(
+ array(
+ 'opt-text' => 'Limited text 1',
+ 'opt-textarea' => 'Limited textarea content 1',
+ ),
+ array(
+ 'opt-text' => 'Limited text 2',
+ 'opt-textarea' => 'Limited textarea content 2',
+ ),
+ )
+ ),
+
+ array(
+ 'id' => 'opt-group-4',
+ 'type' => 'group',
+ 'title' => 'Group with WP Editor',
+ 'subtitle' => 'WP Editor integrated for Ajax Call.',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+ array(
+ 'id' => 'opt-editor',
+ 'type' => 'wp_editor',
+ 'title' => 'WP Editor',
+ ),
+ ),
+ 'default' => array(
+ array(
+ 'opt-text' => 'WP Editor 1',
+ 'opt-editor' => 'Editor content 1',
+ ),
+ array(
+ 'opt-text' => 'WP Editor 2',
+ 'opt-editor' => 'Editor content 2',
+ ),
+ )
+ ),
+
+ array(
+ 'id' => 'opt-group-5',
+ 'type' => 'group',
+ 'title' => 'Group nested',
+ 'subtitle' => 'Can be added unlimited nested groups',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+ array(
+ 'id' => 'opt-group-5-sublevel-1',
+ 'type' => 'group',
+ 'title' => 'Group Nested',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+ array(
+ 'id' => 'opt-group-5-sublevel-2',
+ 'type' => 'group',
+ 'title' => 'Group Nested',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+ array(
+ 'id' => 'opt-switcher',
+ 'type' => 'switcher',
+ 'title' => 'Switcher',
+ ),
+ array(
+ 'id' => 'opt-textarea',
+ 'type' => 'textarea',
+ 'title' => 'Textarea',
+ ),
+ )
+ ),
+ array(
+ 'id' => 'opt-switcher',
+ 'type' => 'switcher',
+ 'title' => 'Switcher',
+ ),
+ array(
+ 'id' => 'opt-textarea',
+ 'type' => 'textarea',
+ 'title' => 'Textarea',
+ ),
+ )
+ ),
+ array(
+ 'id' => 'opt-switcher',
+ 'type' => 'switcher',
+ 'title' => 'Switcher',
+ ),
+ array(
+ 'id' => 'opt-textarea',
+ 'type' => 'textarea',
+ 'title' => 'Textarea',
+ ),
+ ),
+ 'default' => array(
+
+ // top level defaults
+ array(
+ 'opt-text' => 'Top Level 1',
+
+ // sub level 1 defaults
+ 'opt-group-5-sublevel-1' => array(
+ array(
+ 'opt-text' => 'Sub Level 1',
+
+ // sub level 2 defaults
+ 'opt-group-5-sublevel-2' => array(
+ array(
+ 'opt-text' => 'Sub Sub Level 1',
+ ),
+ array(
+ 'opt-text' => 'Sub Sub Level 2',
+ )
+ ),
+ ),
+ array(
+ 'opt-text' => 'Sub Level 2',
+ )
+ ),
+ ),
+
+ // top level defaults
+ array(
+ 'opt-text' => 'Top Level 2',
+ ),
+ )
+ ),
+
+ array(
+ 'id' => 'opt-group-6',
+ 'type' => 'group',
+ 'title' => 'Group with Repeater Field',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+ array(
+ 'id' => 'opt-group-6-repeater',
+ 'type' => 'repeater',
+ 'title' => 'Repeater',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text'
+ ),
+ ),
+ ),
+ array(
+ 'id' => 'opt-switcher',
+ 'type' => 'switcher',
+ 'title' => 'Switcher',
+ ),
+ array(
+ 'id' => 'opt-textarea',
+ 'type' => 'textarea',
+ 'title' => 'Textarea',
+ ),
+ ),
+ 'default' => array(
+ array(
+ 'opt-text' => 'Some text 1',
+ 'opt-group-6-repeater' => array(
+ array(
+ 'opt-text' => 'Some text 1',
+ ),
+ array(
+ 'opt-text' => 'Some text 2',
+ ),
+ )
+ ),
+ )
+ ),
+
+ array(
+ 'id' => 'opt-group-7',
+ 'type' => 'group',
+ 'title' => 'Group with static prefix of title',
+ 'subtitle' => 'accordion_title_prefix => "Static Prefix:"',
+ 'accordion_title_prefix' => 'Static Prefix:',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+ array(
+ 'id' => 'opt-switcher',
+ 'type' => 'switcher',
+ 'title' => 'Switcher',
+ ),
+ array(
+ 'id' => 'opt-textarea',
+ 'type' => 'textarea',
+ 'title' => 'Textarea',
+ ),
+ ),
+ 'default' => array(
+ array(
+ 'opt-text' => 'Some text 1',
+ 'opt-switcher' => true,
+ 'opt-textarea' => 'Some textarea content 1',
+ ),
+ array(
+ 'opt-text' => 'Some text 2',
+ 'opt-switcher' => false,
+ 'opt-textarea' => 'Some textarea content 2',
+ ),
+ )
+ ),
+
+ array(
+ 'id' => 'opt-group-8',
+ 'type' => 'group',
+ 'title' => 'Group with title numbers',
+ 'subtitle' => 'accordion_title_number => true',
+ 'accordion_title_number' => true,
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+ array(
+ 'id' => 'opt-switcher',
+ 'type' => 'switcher',
+ 'title' => 'Switcher',
+ ),
+ array(
+ 'id' => 'opt-textarea',
+ 'type' => 'textarea',
+ 'title' => 'Textarea',
+ ),
+ ),
+ 'default' => array(
+ array(
+ 'opt-text' => 'Some text 1',
+ 'opt-switcher' => true,
+ 'opt-textarea' => 'Some textarea content 1',
+ ),
+ array(
+ 'opt-text' => 'Some text 2',
+ 'opt-switcher' => false,
+ 'opt-textarea' => 'Some textarea content 2',
+ ),
+ )
+ ),
+
+ )
+) );
+
+//
+// Combine Fields
+//
+CSF::createSection( $prefix, array(
+ 'id' => 'combine_fields',
+ 'title' => 'Combine Fields',
+ 'icon' => 'fas fa-bars',
+) );
+
+//
+// Field: accordion
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'combine_fields',
+ 'title' => 'Accordion',
+ 'description' => 'Visit documentation for more details on this field: Field: accordion ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-accordion-1',
+ 'type' => 'accordion',
+ 'title' => 'Accordion',
+ 'accordions' => array(
+
+ array(
+ 'title' => 'Accordion 1',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text-1',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+ array(
+ 'id' => 'opt-switcher-1',
+ 'type' => 'switcher',
+ 'title' => 'Switcher',
+ ),
+ array(
+ 'id' => 'opt-textarea-1',
+ 'type' => 'textarea',
+ 'title' => 'Textarea',
+ ),
+ )
+ ),
+
+ array(
+ 'title' => 'Accordion 2',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text-2',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+ array(
+ 'id' => 'opt-color-1',
+ 'type' => 'color',
+ 'title' => 'Color',
+ ),
+ )
+ ),
+
+ )
+ ),
+
+ array(
+ 'id' => 'opt-accordion-2',
+ 'type' => 'accordion',
+ 'title' => 'Accordion with default',
+ 'accordions' => array(
+
+ array(
+ 'title' => 'Fields 1',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text-1',
+ 'type' => 'text',
+ 'title' => 'Text 1',
+ ),
+ array(
+ 'id' => 'opt-text-2',
+ 'type' => 'text',
+ 'title' => 'Text 2',
+ ),
+ )
+ ),
+
+ array(
+ 'title' => 'Fields 2',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-color-1',
+ 'type' => 'color',
+ 'title' => 'Color 1',
+ ),
+ array(
+ 'id' => 'opt-color-2',
+ 'type' => 'color',
+ 'title' => 'Color 2',
+ ),
+ )
+ ),
+
+ array(
+ 'title' => 'Fields 3',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-textarea-1',
+ 'type' => 'textarea',
+ 'title' => 'Textarea 3',
+ ),
+ array(
+ 'id' => 'opt-textarea-2',
+ 'type' => 'textarea',
+ 'title' => 'Textarea 4',
+ ),
+ )
+ ),
+
+ ),
+ 'default' => array(
+ 'opt-text-1' => 'This is text 1 default value',
+ 'opt-text-2' => 'This is text 2 default value',
+ 'opt-color-1' => '#1e73be',
+ 'opt-color-2' => '#ffbc00',
+ 'opt-textarea-1' => 'This is textarea 1 default value',
+ 'opt-textarea-2' => 'This is textarea 2 default value',
+ )
+ ),
+
+ array(
+ 'id' => 'accordion_3',
+ 'type' => 'accordion',
+ 'title' => 'Accordion with custom icons',
+ 'accordions' => array(
+
+ array(
+ 'title' => 'Other 1',
+ 'icon' => 'fas fa-check',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text-1',
+ 'type' => 'text',
+ 'title' => 'Text 1',
+ ),
+ )
+ ),
+
+ array(
+ 'title' => 'Other 2',
+ 'icon' => 'fas fa-star',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text-2',
+ 'type' => 'text',
+ 'title' => 'Text 2',
+ ),
+ )
+ ),
+
+ )
+ ),
+
+ )
+) );
+
+//
+// Field: tabbed
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'combine_fields',
+ 'title' => 'Tabbed',
+ 'description' => 'Visit documentation for more details on this field: Field: tabbed ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-tabbed-1',
+ 'type' => 'tabbed',
+ 'title' => 'Tabbed',
+ 'tabs' => array(
+
+ array(
+ 'title' => 'Tab 1',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text-1',
+ 'type' => 'text',
+ 'title' => 'Text 1',
+ ),
+ array(
+ 'id' => 'opt-textarea-1',
+ 'type' => 'textarea',
+ 'title' => 'Textarea 1',
+ ),
+ ),
+ ),
+
+ array(
+ 'title' => 'Tab 2',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text-2',
+ 'type' => 'text',
+ 'title' => 'Text 2',
+ ),
+ array(
+ 'id' => 'opt-textarea-2',
+ 'type' => 'textarea',
+ 'title' => 'Textarea 2',
+ ),
+ ),
+ ),
+
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-tabbed-2',
+ 'type' => 'tabbed',
+ 'title' => 'Tabbed with default and icons',
+ 'tabs' => array(
+ array(
+ 'title' => 'Fields 1',
+ 'icon' => 'fas fa-check',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text-1',
+ 'type' => 'text',
+ 'title' => 'Text 1',
+ ),
+ array(
+ 'id' => 'opt-text-2',
+ 'type' => 'text',
+ 'title' => 'Text 2',
+ ),
+ ),
+ ),
+ array(
+ 'title' => 'Fields 2',
+ 'icon' => 'fas fa-star',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-color-1',
+ 'type' => 'color',
+ 'title' => 'Color 1',
+ ),
+ array(
+ 'id' => 'opt-color-2',
+ 'type' => 'color',
+ 'title' => 'Color 2',
+ ),
+ ),
+ ),
+ array(
+ 'title' => 'Fields 3',
+ 'icon' => 'fas fa-cog',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-textarea-1',
+ 'type' => 'textarea',
+ 'title' => 'Textarea 1',
+ ),
+ array(
+ 'id' => 'opt-textarea-2',
+ 'type' => 'textarea',
+ 'title' => 'Textarea 2',
+ ),
+ ),
+ ),
+ ),
+ 'default' => array(
+ 'opt-text-1' => 'This is text 1 default value',
+ 'opt-text-2' => 'This is text 2 default value',
+ 'opt-color-1' => '#1e73be',
+ 'opt-color-2' => '#ffbc00',
+ 'opt-textarea-1' => 'This is textarea 1 default value',
+ 'opt-textarea-2' => 'This is textarea 2 default value',
+ )
+ ),
+
+ )
+) );
+
+//
+// Field: fieldset
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'combine_fields',
+ 'title' => 'Fieldset',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-fieldset-1',
+ 'type' => 'fieldset',
+ 'title' => 'Fieldset',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-color',
+ 'type' => 'color',
+ 'title' => 'Color',
+ ),
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+ array(
+ 'id' => 'opt-textarea',
+ 'type' => 'textarea',
+ 'title' => 'Textarea',
+ ),
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-fieldset-2',
+ 'type' => 'fieldset',
+ 'title' => 'Fieldset with default',
+ 'fields' => array(
+ array(
+ 'type' => 'subheading',
+ 'content' => 'Title of the fieldset',
+ ),
+ array(
+ 'id' => 'opt-color',
+ 'type' => 'color',
+ 'title' => 'Color',
+ ),
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Text',
+ ),
+ array(
+ 'id' => 'opt-textarea',
+ 'type' => 'textarea',
+ 'title' => 'Textarea',
+ ),
+ ),
+ 'default' => array(
+ 'opt-color' => '#1e73be',
+ 'opt-text' => 'This is text default value',
+ 'opt-textarea' => 'This is textarea default value',
+ )
+ ),
+
+ )
+) );
+
+//
+// Media and Upload Fields
+//
+CSF::createSection( $prefix, array(
+ 'id' => 'media_fields',
+ 'title' => 'Media and Upload Fields',
+ 'icon' => 'fas fa-upload',
+) );
+
+//
+// Field: media
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'media_fields',
+ 'title' => 'Media',
+ 'description' => 'Visit documentation for more details on this field: Field: media ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-media-1',
+ 'type' => 'media',
+ 'title' => 'Media',
+ ),
+
+ array(
+ 'id' => 'opt-media-2',
+ 'type' => 'media',
+ 'title' => 'Media without preview',
+ 'preview' => false,
+ ),
+
+ array(
+ 'id' => 'opt-media-3',
+ 'type' => 'media',
+ 'title' => 'Media without url',
+ 'url' => false,
+ ),
+
+ array(
+ 'id' => 'opt-media-4',
+ 'type' => 'media',
+ 'title' => 'Media with only image type',
+ 'library' => 'image',
+ ),
+
+ array(
+ 'id' => 'opt-media-5',
+ 'type' => 'media',
+ 'title' => 'Media with only video type',
+ 'library' => 'video',
+ ),
+
+ array(
+ 'id' => 'opt-media-6',
+ 'type' => 'media',
+ 'title' => 'Media with only audio type',
+ 'library' => 'audio',
+ ),
+
+ )
+) );
+
+//
+// Field: upload
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'media_fields',
+ 'title' => 'Upload',
+ 'description' => 'Visit documentation for more details on this field: Field: upload ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-upload-1',
+ 'type' => 'upload',
+ 'title' => 'Upload',
+ ),
+
+ array(
+ 'id' => 'opt-upload-2',
+ 'type' => 'upload',
+ 'title' => 'Upload with placeholder',
+ 'placeholder' => 'http://'
+ ),
+
+ array(
+ 'id' => 'opt-upload-3',
+ 'type' => 'upload',
+ 'title' => 'Upload with only image type',
+ 'library' => 'image',
+ 'button_title' => 'Upload Image',
+ ),
+
+ array(
+ 'id' => 'opt-upload-4',
+ 'type' => 'upload',
+ 'title' => 'Upload with only video type',
+ 'library' => 'video',
+ 'button_title' => 'Upload Video',
+ ),
+
+ array(
+ 'id' => 'opt-upload-5',
+ 'type' => 'upload',
+ 'title' => 'Upload with only audio type',
+ 'library' => 'audio',
+ 'button_title' => 'Upload Audio',
+ ),
+
+ )
+) );
+
+//
+// Field: gallery
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'media_fields',
+ 'title' => 'Gallery',
+ 'description' => 'Visit documentation for more details on this field: Field: gallery ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-gallery-1',
+ 'type' => 'gallery',
+ 'title' => 'Gallery',
+ ),
+
+ array(
+ 'id' => 'opt-gallery-2',
+ 'type' => 'gallery',
+ 'title' => 'Gallery with custom button names',
+ 'add_title' => 'Add Image(s)',
+ 'edit_title' => 'Edit Images',
+ 'clear_title' => 'Remove Images',
+ ),
+
+ )
+) );
+
+//
+// Editor Fields
+//
+CSF::createSection( $prefix, array(
+ 'id' => 'editor_fields',
+ 'title' => 'Editor Fields',
+ 'icon' => 'fas fa-code',
+) );
+
+//
+// Field: code_editor
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'editor_fields',
+ 'title' => 'Code Editor',
+ 'description' => 'Visit documentation for more details on this field: Field: code_editor ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-code-editor-1',
+ 'type' => 'code_editor',
+ 'title' => 'Code Editor',
+ 'subtitle' => 'Default Editor Using: theme: default and mode: htmlmixed',
+ ),
+
+ array(
+ 'id' => 'code_editor_2',
+ 'type' => 'code_editor',
+ 'title' => 'Code Editor',
+ 'subtitle' => 'HTML Editor Using: theme: shadowfox and mode: htmlmixed',
+ 'settings' => array(
+ 'theme' => 'shadowfox',
+ 'mode' => 'htmlmixed',
+ ),
+ 'default' =>'
+
Hello world
+
Lorem ipsum dollar.
+
',
+ ),
+
+ array(
+ 'id' => 'opt-code-editor-2',
+ 'type' => 'code_editor',
+ 'title' => 'Code Editor',
+ 'subtitle' => 'JS Editor Using: theme: dracula and mode: javascript',
+ 'settings' => array(
+ 'theme' => 'dracula',
+ 'mode' => 'javascript',
+ ),
+ 'default' =>';(function( $, window, document, undefined ) {
+ "use strict";
+
+ $(document).ready( function() {
+
+ // do stuff
+
+ });
+
+})( jQuery, window, document );',
+ ),
+
+ array(
+ 'id' => 'opt-code-editor-3',
+ 'type' => 'code_editor',
+ 'desc' => 'CSS Editor It shows full width if there is no field of title and using: theme: mbo and mode: css',
+ 'settings' => array(
+ 'theme' => 'mbo',
+ 'mode' => 'css',
+ ),
+ 'default' =>'.wrapper {
+ font-family: "Open Sans";
+ font-size: 13px;
+ width: 250px;
+ height: 100px;
+ color: #fff;
+ background-color: #555;
+}',
+ ),
+
+ )
+) );
+
+//
+// Field: wp_editor
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'editor_fields',
+ 'title' => 'WP Editor',
+ 'description' => 'Visit documentation for more details on this field: Field: wp_editor ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-wp-editor-1',
+ 'type' => 'wp_editor',
+ 'title' => 'WP Editor',
+ ),
+
+ array(
+ 'id' => 'opt-wp-editor-2',
+ 'type' => 'wp_editor',
+ 'title' => 'WP Editor with Custom Height and No Media Buttons',
+ 'subtitle' => 'Settings: height => 100px, media_buttons => false',
+ 'height' => '100px',
+ 'media_buttons' => false,
+ ),
+
+ array(
+ 'id' => 'opt-wp-editor-3',
+ 'type' => 'wp_editor',
+ 'title' => 'WP Editor without QuickTags and Media Buttons',
+ 'subtitle' => 'Settings: height => 100px, media_buttons => false, quicktags => false',
+ 'height' => '100px',
+ 'media_buttons' => false,
+ 'quicktags' => false,
+ ),
+
+ array(
+ 'id' => 'opt-wp-editor-4',
+ 'type' => 'wp_editor',
+ 'title' => 'WP Editor without Tinymce and Media Buttons',
+ 'subtitle' => 'Settings: height => 100px, media_buttons => false, tinymce => false',
+ 'height' => '100px',
+ 'media_buttons' => false,
+ 'tinymce' => false,
+ ),
+
+ )
+) );
+
+//
+// Color Fields
+//
+CSF::createSection( $prefix, array(
+ 'id' => 'color_fields',
+ 'title' => 'Color Fields',
+ 'icon' => 'fas fa-tint',
+) );
+
+//
+// Field: color
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'color_fields',
+ 'title' => 'Color',
+ 'description' => 'Visit documentation for more details on this field: Field: color ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-color-1',
+ 'type' => 'color',
+ 'title' => 'Color',
+ ),
+
+ array(
+ 'id' => 'opt-color-2',
+ 'type' => 'color',
+ 'title' => 'Color with default (hex)',
+ 'default' => '#3498db',
+ ),
+
+ array(
+ 'id' => 'opt-color-3',
+ 'type' => 'color',
+ 'title' => 'Color with default (rgba)',
+ 'default' => 'rgba(255,255,0,0.25)',
+ ),
+
+ array(
+ 'id' => 'opt-color-4',
+ 'type' => 'color',
+ 'title' => 'Color with default (transparent)',
+ 'default' => 'transparent',
+ ),
+
+ )
+) );
+
+//
+// Field: link_color
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'color_fields',
+ 'title' => 'Link Color',
+ 'description' => 'Visit documentation for more details on this field: Field: link_color ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-link-color-1',
+ 'type' => 'link_color',
+ 'title' => 'Link Color',
+ ),
+
+ array(
+ 'id' => 'opt-link-color-2',
+ 'type' => 'link_color',
+ 'title' => 'Link Color with default',
+ 'default' => array(
+ 'color' => '#1e73be',
+ 'hover' => '#259ded',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-link-color-3',
+ 'type' => 'link_color',
+ 'title' => 'Link Color with more color options',
+ 'color' => true,
+ 'hover' => true,
+ 'visited' => true,
+ 'active' => true,
+ 'focus' => true,
+ ),
+
+ )
+) );
+
+//
+// Field: color_group
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'color_fields',
+ 'title' => 'Color Group',
+ 'description' => 'Visit documentation for more details on this field: Field: color_group ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-color-group-1',
+ 'type' => 'color_group',
+ 'title' => 'Color Group',
+ 'options' => array(
+ 'color-1' => 'Color 1',
+ 'color-2' => 'Color 2',
+ )
+ ),
+
+ array(
+ 'id' => 'opt-color-group-2',
+ 'type' => 'color_group',
+ 'title' => 'Color Group',
+ 'options' => array(
+ 'color-1' => 'Color 1',
+ 'color-2' => 'Color 2',
+ 'color-3' => 'Color 3',
+ )
+ ),
+
+ array(
+ 'id' => 'opt-color-group-3',
+ 'type' => 'color_group',
+ 'title' => 'Color Group with default',
+ 'subtitle' => 'Can be add unlimited color options.',
+ 'options' => array(
+ 'color-1' => 'Color 1',
+ 'color-2' => 'Color 2',
+ 'color-3' => 'Color 3',
+ 'color-4' => 'Color 4',
+ 'color-5' => 'Color 5',
+ ),
+ 'default' => array(
+ 'color-1' => '#000100',
+ 'color-2' => '#002642',
+ 'color-3' => '#ffce4b',
+ 'color-4' => '#ff595e',
+ 'color-5' => '#0052cc',
+ )
+ ),
+
+ )
+) );
+
+//
+// Field: palette
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'color_fields',
+ 'title' => 'Color Palette',
+ 'description' => 'Visit documentation for more details on this field: Field: palette ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-palette-1',
+ 'type' => 'palette',
+ 'title' => 'Palette',
+ 'subtitle' => 'Three set colors',
+ 'options' => array(
+ 'set-1' => array( '#f36e27', '#f3d430', '#ed1683' ),
+ 'set-2' => array( '#4153ab', '#6e86c7', '#211f27' ),
+ 'set-3' => array( '#162526', '#508486', '#C8C6CE' ),
+ 'set-4' => array( '#ccab5e', '#fff55f', '#197c5d' ),
+ ),
+ 'default' => 'set-1',
+ ),
+
+ array(
+ 'id' => 'opt-palette-1',
+ 'type' => 'palette',
+ 'title' => 'Palette',
+ 'subtitle' => 'Four set colors',
+ 'options' => array(
+ 'set-1' => array( '#f04e36', '#f36e27', '#f3d430', '#ed1683' ),
+ 'set-2' => array( '#f9ca06', '#b5b546', '#2f4d48', '#212b2f' ),
+ 'set-3' => array( '#4153ab', '#6e86c7', '#211f27', '#d69762' ),
+ 'set-4' => array( '#162526', '#508486', '#C8C6CE', '#B45F1A' ),
+ 'set-5' => array( '#bbd5ff', '#ccab5e', '#fff55f', '#197c5d' ),
+ ),
+ 'default' => 'set-3',
+ ),
+
+ array(
+ 'id' => 'opt-palette-2',
+ 'type' => 'palette',
+ 'title' => 'Palette',
+ 'subtitle' => 'Five set colors',
+ 'options' => array(
+ 'set-1' => array( '#bbd5ff', '#ccab5e', '#fff55f', '#197c5d', '#bce2c4' ),
+ 'set-2' => array( '#6d3264', '#edf7f6', '#fde8e9', '#006675', '#e49ab0' ),
+ 'set-3' => array( '#000100', '#002642', '#ffce4b', '#ff595e', '#0052cc' ),
+ ),
+ 'default' => 'set-1',
+ ),
+
+ )
+) );
+
+//
+// Design Fields
+//
+CSF::createSection( $prefix, array(
+ 'id' => 'design_fields',
+ 'title' => 'Design Fields',
+ 'icon' => 'fas fa-adjust',
+) );
+
+//
+// Field: background
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'design_fields',
+ 'title' => 'Background',
+ 'description' => 'Visit documentation for more details on this field: Field: background ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-background-1',
+ 'type' => 'background',
+ 'title' => 'Background',
+ ),
+
+ array(
+ 'id' => 'opt-background-2',
+ 'type' => 'background',
+ 'title' => 'Background with default',
+ 'default' => array(
+ 'background-color' => '#e80000',
+ 'background-position' => 'center center',
+ 'background-repeat' => 'repeat-x',
+ 'background-attachment' => 'fixed',
+ 'background-size' => 'cover',
+ )
+ ),
+
+ array(
+ 'id' => 'opt-background-3',
+ 'type' => 'background',
+ 'title' => 'Background with all features',
+ 'background_color' => true,
+ 'background_image' => true,
+ 'background-position' => true,
+ 'background_repeat' => true,
+ 'background_attachment' => true,
+ 'background_size' => true,
+ 'background_origin' => true,
+ 'background_clip' => true,
+ 'background_blend_mode' => true,
+ 'background_gradient' => true,
+ 'default' => array(
+ 'background-color' => '#009e44',
+ 'background-gradient-color' => '#81d742',
+ 'background-gradient-direction' => '135deg',
+ 'background-position' => 'center center',
+ 'background-repeat' => 'repeat-x',
+ 'background-attachment' => 'fixed',
+ 'background-size' => 'cover',
+ 'background-origin' => 'border-box',
+ 'background-clip' => 'padding-box',
+ 'background-blend-mode' => 'normal',
+ )
+ ),
+
+ )
+) );
+
+//
+// Field: typography
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'design_fields',
+ 'title' => 'Typography',
+ 'description' => 'Visit documentation for more details on this field: Field: typography ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-typography-1',
+ 'type' => 'typography',
+ 'title' => 'Typography',
+ ),
+
+ array(
+ 'id' => 'opt-typography-2',
+ 'type' => 'typography',
+ 'title' => 'Typography with default',
+ 'default' => array(
+ 'font-family' => 'Barlow',
+ 'font-weight' => '600',
+ 'subset' => 'latin-ext',
+ 'type' => 'google',
+ 'text-align' => 'center',
+ 'text-transform' => 'capitalize',
+ 'text-transform' => 'capitalize',
+ 'font-size' => '18',
+ 'line-height' => '20',
+ 'letter-spacing' => '-1',
+ 'color' => '#009e44',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-typography-3',
+ 'type' => 'typography',
+ 'title' => 'Typography with few features',
+ 'text_align' => false,
+ 'text_transform' => false,
+ 'font_size' => false,
+ 'line_height' => false,
+ 'letter_spacing' => false,
+ 'color' => false,
+ 'default' => array(
+ 'font-family' => 'Lato',
+ 'font-weight' => '900',
+ 'subset' => 'latin',
+ 'type' => 'google',
+ ),
+ ),
+
+
+ array(
+ 'id' => 'opt-typography-4',
+ 'type' => 'typography',
+ 'title' => 'Typography with all features',
+ '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,
+ 'subset' => true,
+ 'backup_font_family' => true,
+ 'font_variant' => true,
+ 'word_spacing' => true,
+ 'text_decoration' => true,
+ 'default' => array(
+ 'font-family' => 'Old Standard TT',
+ 'type' => 'google',
+ ),
+ ),
+
+ )
+) );
+
+//
+// Field: dimensions
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'design_fields',
+ 'title' => 'Dimensions',
+ 'description' => 'Visit documentation for more details on this field: Field: dimensions ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-dimensions-1',
+ 'type' => 'dimensions',
+ 'title' => 'Dimensions',
+ ),
+
+ array(
+ 'id' => 'opt-dimensions-2',
+ 'type' => 'dimensions',
+ 'title' => 'Dimensions with default',
+ 'default' => array(
+ 'width' => '100',
+ 'height' => '250',
+ 'unit' => 'px',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-dimensions-3',
+ 'type' => 'dimensions',
+ 'title' => 'Dimensions with custom text and units',
+ 'width_icon' => 'width',
+ 'height_icon' => 'height',
+ 'units' => array( 'px', '%', 'em', 'rem', 'pt' ),
+ 'default' => array(
+ 'width' => '100',
+ 'height' => '50',
+ 'unit' => '%',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-dimensions-4',
+ 'type' => 'dimensions',
+ 'title' => 'Dimensions with single unit',
+ 'units' => array( 'px' ),
+ ),
+
+ array(
+ 'id' => 'opt-dimensions-5',
+ 'type' => 'dimensions',
+ 'title' => 'Dimensions without unit selector',
+ 'unit' => false,
+ ),
+
+ array(
+ 'id' => 'opt-dimensions-6',
+ 'type' => 'dimensions',
+ 'title' => 'Dimensions with only width',
+ 'height' => false,
+ ),
+
+ array(
+ 'id' => 'opt-dimensions-7',
+ 'type' => 'dimensions',
+ 'title' => 'Dimensions with only width and single unit',
+ 'height' => false,
+ 'units' => array( 'px' ),
+ ),
+
+ )
+) );
+
+//
+// Field: spacing
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'design_fields',
+ 'title' => 'Spacing',
+ 'description' => 'Visit documentation for more details on this field: Field: spacing ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-spacing-1',
+ 'type' => 'spacing',
+ 'title' => 'Spacing',
+ ),
+
+ array(
+ 'id' => 'opt-spacing-2',
+ 'type' => 'spacing',
+ 'title' => 'Spacing with default',
+ 'default' => array(
+ 'top' => '50',
+ 'right' => '100',
+ 'bottom' => '50',
+ 'left' => '100',
+ 'unit' => 'px',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-spacing-2',
+ 'type' => 'spacing',
+ 'title' => 'Spacing without unit selector',
+ 'units' => array( 'px' ),
+ 'default' => array(
+ 'top' => '50',
+ 'right' => '100',
+ 'bottom' => '50',
+ 'left' => '100',
+ 'unit' => 'px',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-spacing-3',
+ 'type' => 'spacing',
+ 'title' => 'Spacing with only left and right',
+ 'top' => false,
+ 'bottom' => false,
+ ),
+
+ array(
+ 'id' => 'opt-spacing-4',
+ 'type' => 'spacing',
+ 'title' => 'Spacing with only top and bottom',
+ 'left' => false,
+ 'right' => false,
+ ),
+
+ array(
+ 'id' => 'opt-spacing-5',
+ 'type' => 'spacing',
+ 'title' => 'Spacing with all directions',
+ 'all' => true,
+ ),
+
+ )
+) );
+
+//
+// Field: border
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'design_fields',
+ 'title' => 'Border',
+ 'description' => 'Visit documentation for more details on this field: Field: border ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-border-1',
+ 'type' => 'border',
+ 'title' => 'Border',
+ ),
+
+ array(
+ 'id' => 'opt-border-2',
+ 'type' => 'border',
+ 'title' => 'Border with default',
+ 'default' => array(
+ 'top' => '4',
+ 'right' => '8',
+ 'bottom' => '4',
+ 'left' => '8',
+ 'style' => 'dashed',
+ 'color' => '#1e73be',
+ )
+ ),
+
+ array(
+ 'id' => 'opt-border-3',
+ 'type' => 'border',
+ 'title' => 'Border with only left and right',
+ 'top' => false,
+ 'bottom' => false,
+ ),
+
+ array(
+ 'id' => 'opt-border-4',
+ 'type' => 'border',
+ 'title' => 'Border with only top and bottom',
+ 'left' => false,
+ 'right' => false,
+ ),
+
+ array(
+ 'id' => 'opt-border-5',
+ 'type' => 'border',
+ 'title' => 'Border with all directions',
+ 'all' => true,
+ ),
+
+ )
+) );
+
+//
+// Field: spinner
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'design_fields',
+ 'title' => 'Spinner',
+ 'description' => 'Visit documentation for more details on this field: Field: spinner ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-spinner-1',
+ 'type' => 'spinner',
+ 'title' => 'Spinner',
+ 'subtitle' => 'max:100 | min:0 | step:1',
+ 'max' => 100,
+ 'min' => 0,
+ 'step' => 1,
+ 'default' => 25,
+ ),
+
+ array(
+ 'id' => 'opt-spinner-2',
+ 'type' => 'spinner',
+ 'title' => 'Spinner',
+ 'subtitle' => 'max:200 | min:100 | step:10',
+ 'max' => 200,
+ 'min' => 100,
+ 'step' => 10,
+ 'default' => 100,
+ ),
+
+ array(
+ 'id' => 'opt-spinner-3',
+ 'type' => 'spinner',
+ 'title' => 'Spinner',
+ 'subtitle' => 'max:1 | min:0 | step:0.1 | unit:px',
+ 'max' => 1,
+ 'min' => 0,
+ 'step' => 0.1,
+ 'unit' => 'px',
+ 'default' => 0.5,
+ ),
+
+ )
+) );
+
+//
+// Field: number
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'design_fields',
+ 'title' => 'Number',
+ 'description' => 'Visit documentation for more details on this field: Field: number ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-number-1',
+ 'type' => 'number',
+ 'title' => 'Number',
+ ),
+ array(
+ 'id' => 'opt-number-2',
+ 'type' => 'number',
+ 'title' => 'Number with unit',
+ 'unit' => 'px',
+ ),
+ array(
+ 'id' => 'opt-number-3',
+ 'type' => 'number',
+ 'title' => 'Number with default',
+ 'unit' => 'width',
+ 'default' => 100,
+ ),
+
+ )
+) );
+
+//
+// Additional Fields
+//
+CSF::createSection( $prefix, array(
+ 'id' => 'additional_fields',
+ 'title' => 'Additional Fields',
+ 'icon' => 'fas fa-asterisk',
+) );
+
+//
+// Field: slider
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'additional_fields',
+ 'title' => 'Slider',
+ 'icon' => 'fas fa-sliders-h',
+ 'description' => 'Visit documentation for more details on this field: Field: slider ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-slider-1',
+ 'type' => 'slider',
+ 'title' => 'Slider',
+ ),
+
+ array(
+ 'id' => 'opt-slider-2',
+ 'type' => 'slider',
+ 'title' => 'Slider with default',
+ 'default' => 50,
+ ),
+
+ array(
+ 'id' => 'opt-slider-3',
+ 'type' => 'slider',
+ 'title' => 'Slider with unit text',
+ 'unit' => '%',
+ 'default' => 75,
+ ),
+
+ array(
+ 'id' => 'opt-slider-4',
+ 'type' => 'slider',
+ 'title' => 'Slider with min/max allowed value',
+ 'subtitle' => 'Min: 1 | Max: 10 | Step: 0.1 | Default: 5.5',
+ 'unit' => 'px',
+ 'min' => 1,
+ 'max' => 10,
+ 'step' => 0.1,
+ 'default' => 5.5,
+ ),
+
+ )
+) );
+
+//
+// Field: sorter
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'additional_fields',
+ 'title' => 'Sorter',
+ 'icon' => 'fas fa-sort-numeric-down',
+ 'description' => 'Visit documentation for more details on this field: Field: sorter ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-sorter-1',
+ 'type' => 'sorter',
+ 'title' => 'Sorter',
+ 'default' => array(
+ 'enabled' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ ),
+ 'disabled' => array(
+ 'opt-4' => 'Option 4',
+ 'opt-5' => 'Option 5',
+ ),
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-sorter-2',
+ 'type' => 'sorter',
+ 'title' => 'Sorter with custom title',
+ 'enabled_title' => 'Activated',
+ 'disabled_title' => 'Deactivated',
+ 'default' => array(
+ 'enabled' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ ),
+ 'disabled' => array(
+ 'opt-4' => 'Option 4',
+ 'opt-5' => 'Option 5',
+ ),
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-sorter-3',
+ 'type' => 'sorter',
+ 'title' => 'Sorter with use only enabled section and without title',
+ 'enabled_title' => false,
+ 'disabled' => false,
+ 'default' => array(
+ 'enabled' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ ),
+ ),
+ ),
+
+ )
+) );
+
+//
+// Field: sortable
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'additional_fields',
+ 'title' => 'Sortable',
+ 'icon' => 'fas fa-arrows-alt',
+ 'description' => 'Visit documentation for more details on this field: Field: sortable ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-sortable-1',
+ 'type' => 'sortable',
+ 'title' => 'Sortable',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text-1',
+ 'type' => 'text',
+ 'title' => 'Text 1'
+ ),
+ array(
+ 'id' => 'opt-text-2',
+ 'type' => 'text',
+ 'title' => 'Text 2'
+ ),
+ array(
+ 'id' => 'opt-text-3',
+ 'type' => 'text',
+ 'title' => 'Text 3'
+ ),
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-sortable-2',
+ 'type' => 'sortable',
+ 'title' => 'Sortable with default',
+ 'fields' => array(
+ array(
+ 'id' => 'opt-text-1',
+ 'type' => 'text',
+ 'title' => 'Text 1'
+ ),
+ array(
+ 'id' => 'opt-text-2',
+ 'type' => 'text',
+ 'title' => 'Text 2'
+ ),
+ array(
+ 'id' => 'opt-text-3',
+ 'type' => 'text',
+ 'title' => 'Text 3'
+ ),
+ ),
+ 'default' => array(
+ 'opt-text-1' => 'This is text 1 default',
+ 'opt-text-2' => 'This is text 2 default',
+ 'opt-text-3' => 'This is text 3 default',
+ )
+ ),
+
+ )
+) );
+
+//
+// Field: switcher
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'additional_fields',
+ 'title' => 'Switcher',
+ 'icon' => 'fas fa-toggle-on',
+ 'description' => 'Visit documentation for more details on this field: Field: switcher ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-switcher-1',
+ 'type' => 'switcher',
+ 'title' => 'Switcher',
+ ),
+
+ array(
+ 'id' => 'opt-switcher-2',
+ 'type' => 'switcher',
+ 'title' => 'Switcher with default',
+ 'default' => true,
+ ),
+
+ array(
+ 'id' => 'opt-switcher-3',
+ 'type' => 'switcher',
+ 'title' => 'Switcher with label',
+ 'label' => 'The label text of the switcher.',
+ ),
+
+ array(
+ 'id' => 'opt-switcher-4',
+ 'type' => 'switcher',
+ 'title' => 'Switcher with Yes/No',
+ 'text_on' => 'Yes',
+ 'text_off' => 'No',
+ ),
+
+ array(
+ 'id' => 'opt-switcher-4',
+ 'type' => 'switcher',
+ 'title' => 'Switcher with custom text Enabled/Disabled',
+ 'text_on' => 'Enabled',
+ 'text_off' => 'Disabled',
+ 'text_width' => '100',
+ ),
+
+ )
+) );
+
+//
+// Field: icons
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'additional_fields',
+ 'title' => 'Icons',
+ 'icon' => 'fas fa-star',
+ 'description' => 'Visit documentation for more details on this field: Field: icon ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-icon-1',
+ 'type' => 'icon',
+ 'title' => 'Icon',
+ ),
+
+ array(
+ 'id' => 'opt-icon-2',
+ 'type' => 'icon',
+ 'title' => 'Icon with default',
+ 'default' => 'fas fa-check',
+ ),
+
+ )
+) );
+
+//
+// Field: map
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'additional_fields',
+ 'title' => 'Map',
+ 'icon' => 'fas fa-map-marker',
+ 'description' => 'Visit documentation for more details on this field: Field: map ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-map-1',
+ 'type' => 'map',
+ 'title' => 'Map',
+ ),
+
+ array(
+ 'id' => 'opt-map-2',
+ 'type' => 'map',
+ 'title' => 'Map with Default',
+ 'default' => array(
+ 'address' => 'New York, United States of America',
+ 'latitude' => '40.7127281',
+ 'longitude' => '-74.0060152',
+ 'zoom' => '12',
+ )
+ ),
+
+ array(
+ 'type' => 'submessage',
+ 'style' => 'info',
+ 'content' => 'Using custom address_field field in below example.',
+ ),
+
+ array(
+ 'id' => 'my-address-text',
+ 'type' => 'text',
+ 'title' => 'Address',
+ ),
+
+ array(
+ 'id' => 'opt-map-3',
+ 'type' => 'map',
+ 'title' => 'Map',
+ 'desc' => 'Using custom address_field field',
+ 'address_field' => 'my-address-text',
+ ),
+
+ )
+) );
+
+//
+// Field: date
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'additional_fields',
+ 'title' => 'Date',
+ 'icon' => 'fas fa-calendar',
+ 'description' => 'Visit documentation for more details on this field: Field: date ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-date-1',
+ 'type' => 'date',
+ 'title' => 'Date',
+ ),
+
+ array(
+ 'id' => 'opt-date-2',
+ 'type' => 'date',
+ 'title' => 'Date with custom settings',
+ 'settings' => array(
+ 'dateFormat' => 'mm/dd/yy',
+ 'changeMonth' => true,
+ 'changeYear' => true,
+ 'showWeek' => true,
+ 'showButtonPanel' => true,
+ 'weekHeader' => 'Week',
+ 'monthNamesShort' => array( 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ),
+ 'dayNamesMin' => array( 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ),
+ )
+ ),
+
+ array(
+ 'id' => 'opt-date-3',
+ 'type' => 'date',
+ 'title' => 'Date with From & To',
+ 'from_to' => true,
+ ),
+
+ array(
+ 'id' => 'opt-date-4',
+ 'type' => 'date',
+ 'title' => 'Date with custom texts Begin & End',
+ 'from_to' => true,
+ 'text_from' => 'Begin',
+ 'text_to' => 'End',
+ ),
+
+ )
+) );
+
+//
+// Field: image_select
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'additional_fields',
+ 'title' => 'Image Select',
+ 'icon' => 'fas fa-th',
+ 'description' => 'Visit documentation for more details on this field: Field: image_select ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-image-select-1',
+ 'type' => 'image_select',
+ 'title' => 'Image Select',
+ 'options' => array(
+ 'opt-1' => 'http://codestarframework.com/assets/images/placeholder/150x125-2ecc71.gif',
+ 'opt-2' => 'http://codestarframework.com/assets/images/placeholder/150x125-e74c3c.gif',
+ 'opt-3' => 'http://codestarframework.com/assets/images/placeholder/150x125-ffbc00.gif',
+ 'opt-4' => 'http://codestarframework.com/assets/images/placeholder/150x125-3498db.gif',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-image-select-2',
+ 'type' => 'image_select',
+ 'title' => 'Image Select with default',
+ 'options' => array(
+ 'opt-1' => 'http://codestarframework.com/assets/images/placeholder/80x80-2c3e50.gif',
+ 'opt-2' => 'http://codestarframework.com/assets/images/placeholder/80x80-2c3e50.gif',
+ 'opt-3' => 'http://codestarframework.com/assets/images/placeholder/80x80-2c3e50.gif',
+ 'opt-4' => 'http://codestarframework.com/assets/images/placeholder/80x80-2c3e50.gif',
+ 'opt-5' => 'http://codestarframework.com/assets/images/placeholder/80x80-2c3e50.gif',
+ 'opt-6' => 'http://codestarframework.com/assets/images/placeholder/80x80-2c3e50.gif',
+ 'opt-7' => 'http://codestarframework.com/assets/images/placeholder/80x80-2c3e50.gif',
+ ),
+ 'default' => 'opt-4'
+ ),
+
+ array(
+ 'id' => 'opt-image-select-3',
+ 'type' => 'image_select',
+ 'title' => 'Image Select with multiple choice',
+ 'multiple' => true,
+ 'options' => array(
+ 'opt-1' => 'http://codestarframework.com/assets/images/placeholder/80x80-e74c3c.gif',
+ 'opt-2' => 'http://codestarframework.com/assets/images/placeholder/80x80-ffbc00.gif',
+ 'opt-3' => 'http://codestarframework.com/assets/images/placeholder/80x80-3498db.gif',
+ 'opt-4' => 'http://codestarframework.com/assets/images/placeholder/80x80-2ecc71.gif',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-image-select-4',
+ 'type' => 'image_select',
+ 'title' => 'Image Select with multiple choice and default',
+ 'multiple' => true,
+ 'options' => array(
+ 'opt-1' => 'http://codestarframework.com/assets/images/placeholder/80x80-2c3e50.gif',
+ 'opt-2' => 'http://codestarframework.com/assets/images/placeholder/80x80-2c3e50.gif',
+ 'opt-3' => 'http://codestarframework.com/assets/images/placeholder/80x80-e74c3c.gif',
+ 'opt-4' => 'http://codestarframework.com/assets/images/placeholder/80x80-ffbc00.gif',
+ 'opt-5' => 'http://codestarframework.com/assets/images/placeholder/80x80-3498db.gif',
+ 'opt-6' => 'http://codestarframework.com/assets/images/placeholder/80x80-2ecc71.gif',
+ 'opt-7' => 'http://codestarframework.com/assets/images/placeholder/80x80-2c3e50.gif',
+ 'opt-8' => 'http://codestarframework.com/assets/images/placeholder/80x80-2c3e50.gif',
+ ),
+ 'default' => array( 'opt-3', 'opt-4', 'opt-5', 'opt-6' )
+ ),
+
+ )
+) );
+
+//
+// Field: button_set
+//
+CSF::createSection( $prefix, array(
+ 'parent' => 'additional_fields',
+ 'title' => 'Button Set',
+ 'icon' => 'fas fa-ellipsis-h',
+ 'description' => 'Visit documentation for more details on this field: Field: button_set ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-button-set-1',
+ 'type' => 'button_set',
+ 'title' => 'Button Set',
+ 'options' => array(
+ 'enabled' => 'Enabled',
+ 'disabled' => 'Disabled',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-button-set-2',
+ 'type' => 'button_set',
+ 'title' => 'Button Set with default',
+ 'options' => array(
+ 'enabled' => 'Enabled',
+ '' => 'Default',
+ 'disabled' => 'Disabled',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-button-set-3',
+ 'type' => 'button_set',
+ 'title' => 'Button Set',
+ 'options' => array(
+ 'activate' => 'Activate',
+ 'deactivate' => 'Deactivate',
+ ),
+ 'default' => 'activate',
+ ),
+
+ array(
+ 'id' => 'opt-button-set-4',
+ 'type' => 'button_set',
+ 'title' => 'Button Set',
+ 'options' => array(
+ 'on' => 'ON',
+ 'off' => 'OFF',
+ ),
+ 'default' => 'on',
+ ),
+
+ array(
+ 'id' => 'opt-button-set-5',
+ 'type' => 'button_set',
+ 'title' => 'Button Set with multiple choice',
+ 'multiple' => true,
+ 'options' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ 'opt-4' => 'Option 4',
+ 'opt-5' => 'Option 5',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-button-set-6',
+ 'type' => 'button_set',
+ 'title' => 'Button Set with multiple choice and default',
+ 'multiple' => true,
+ 'options' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ 'opt-4' => 'Option 4',
+ 'opt-5' => 'Option 5',
+ ),
+ 'default' => array( 'opt-2', 'opt-4' )
+ ),
+
+ array(
+ 'id' => 'opt-button-set-7',
+ 'type' => 'button_set',
+ 'title' => 'Button Set with categories',
+ 'options' => 'categories',
+ ),
+
+ array(
+ 'id' => 'opt-button-set-8',
+ 'type' => 'button_set',
+ 'title' => 'Button Set with tags',
+ 'options' => 'tags',
+ ),
+
+ )
+) );
+
+//
+// Dependencies
+//
+CSF::createSection( $prefix, array(
+ 'title' => 'Dependencies',
+ 'icon' => 'fas fa-code-branch',
+ 'description' => 'Visit documentation for more details: How to use dependencies ',
+ 'fields' => array(
+
+ array(
+ 'type' => 'subheading',
+ 'content' => 'Basic Dependencies',
+ ),
+
+ //
+ // Dependency example 1
+ array(
+ 'id' => 'opt-depend-switcher',
+ 'type' => 'switcher',
+ 'title' => 'If switched to (ON)',
+ ),
+
+ array(
+ 'type' => 'notice',
+ 'style' => 'success',
+ 'content' => 'Success: Switched to (ON).',
+ 'dependency' => array( 'opt-depend-switcher', '==', 'true' ),
+ ),
+
+ //
+ // Dependency example 2
+ array(
+ 'id' => 'opt-depend-text',
+ 'type' => 'text',
+ 'title' => 'If typed something to field',
+ ),
+
+ array(
+ 'type' => 'notice',
+ 'style' => 'success',
+ 'content' => 'Success: You typed something.',
+ 'dependency' => array( 'opt-depend-text', '!=', '' ),
+ ),
+
+ //
+ // Dependency example 3
+ array(
+ 'id' => 'opt-depend-select',
+ 'type' => 'select',
+ 'title' => 'If selected to (Blue) or (Black)',
+ 'placeholder' => 'Select a color',
+ 'options' => array(
+ 'blue' => 'Blue',
+ 'yellow' => 'Yellow',
+ 'green' => 'Green',
+ 'black' => 'Black',
+ 'white' => 'White',
+ ),
+ ),
+
+ array(
+ 'type' => 'notice',
+ 'style' => 'success',
+ 'content' => 'Success: Selected to (Blue) or (Black).',
+ 'dependency' => array( 'opt-depend-select', 'any', 'blue,black' ),
+ ),
+
+ //
+ // Dependency example 4
+ array(
+ 'id' => 'opt-depend-radio',
+ 'type' => 'radio',
+ 'title' => 'If selected to (Yes, Please)',
+ 'inline' => true,
+ 'options' => array(
+ 'no' => 'No, Thanks',
+ 'yes' => 'Yes, Please',
+ 'any' => 'I am not sure!',
+ ),
+ 'default' => 'no'
+ ),
+
+ array(
+ 'type' => 'notice',
+ 'style' => 'success',
+ 'content' => 'Success: Selected to (Yes, Please).',
+ 'dependency' => array( 'opt-depend-radio', '==', 'yes' ),
+ ),
+
+ //
+ // Dependency example 5
+ array(
+ 'id' => 'opt-depend-checkbox',
+ 'type' => 'checkbox',
+ 'title' => 'If selected to (Green) or (Black)',
+ 'inline' => true,
+ 'options' => array(
+ 'blue' => 'Blue',
+ 'yellow' => 'Yellow',
+ 'green' => 'Green',
+ 'black' => 'Black',
+ 'white' => 'White',
+ ),
+ ),
+
+ array(
+ 'type' => 'notice',
+ 'style' => 'success',
+ 'content' => 'Success: Selected to (Green).',
+ 'dependency' => array( 'opt-depend-checkbox', 'any', 'green,black' ),
+ ),
+
+ //
+ // Dependency example 6
+ array(
+ 'id' => 'opt-depend-image-select',
+ 'type' => 'image_select',
+ 'title' => 'If selected to (Blue) box',
+ 'options' => array(
+ 'green' => 'http://codestarframework.com/assets/images/placeholder/100x80-2ecc71.gif',
+ 'red' => 'http://codestarframework.com/assets/images/placeholder/100x80-e74c3c.gif',
+ 'yellow' => 'http://codestarframework.com/assets/images/placeholder/100x80-ffbc00.gif',
+ 'blue' => 'http://codestarframework.com/assets/images/placeholder/100x80-3498db.gif',
+ 'gray' => 'http://codestarframework.com/assets/images/placeholder/100x80-555555.gif',
+ ),
+ 'default' => 'green',
+ ),
+
+ array(
+ 'type' => 'notice',
+ 'style' => 'success',
+ 'content' => 'Success: Selected to (Blue) box.',
+ 'dependency' => array( 'opt-depend-image-select', '==', 'blue' ),
+ ),
+
+ //
+ // Dependency example 6
+ array(
+ 'id' => 'opt-depend-image-select-any',
+ 'type' => 'image_select',
+ 'title' => 'If selected to (Red) or (Blue) box',
+ 'options' => array(
+ 'green' => 'http://codestarframework.com/assets/images/placeholder/100x80-2ecc71.gif',
+ 'red' => 'http://codestarframework.com/assets/images/placeholder/100x80-e74c3c.gif',
+ 'yellow' => 'http://codestarframework.com/assets/images/placeholder/100x80-ffbc00.gif',
+ 'blue' => 'http://codestarframework.com/assets/images/placeholder/100x80-3498db.gif',
+ 'gray' => 'http://codestarframework.com/assets/images/placeholder/100x80-555555.gif',
+ ),
+ 'default' => 'green',
+ ),
+
+ array(
+ 'type' => 'notice',
+ 'style' => 'success',
+ 'content' => 'Success: Selected to (Red) or (Blue) box.',
+ 'dependency' => array( 'opt-depend-image-select-any', 'any', 'red,blue' ),
+ ),
+
+ array(
+ 'type' => 'subheading',
+ 'content' => 'Visible Dependencies',
+ ),
+
+ //
+ // Dependency example 7
+ array(
+ 'id' => 'opt-depend-visible-switcher',
+ 'type' => 'switcher',
+ 'title' => 'Switched to (ON)',
+ 'label' => 'Below fields are visibling instead of hiding. Switched to (ON) for use them.',
+ ),
+
+ array(
+ 'id' => 'opt-depend-visible-text',
+ 'type' => 'text',
+ 'title' => 'Visible Text',
+ 'dependency' => array( 'opt-depend-visible-switcher', '==', 'true', '', 'visible' ),
+ ),
+
+ array(
+ 'id' => 'opt-depend-visible-select',
+ 'type' => 'select',
+ 'title' => 'Visible Select',
+ 'placeholder' => 'Select an option',
+ 'options' => array(
+ 'opt-1' => 'Option 1',
+ 'opt-2' => 'Option 2',
+ 'opt-3' => 'Option 3',
+ ),
+ 'dependency' => array( 'opt-depend-visible-switcher', '==', 'true', '', 'visible' ),
+ ),
+
+ //
+ // Dependency example 8
+ array(
+ 'type' => 'subheading',
+ 'content' => 'Nested Dependencies',
+ ),
+
+ array(
+ 'id' => 'opt-depend-switcher-1',
+ 'type' => 'switcher',
+ 'title' => 'If switched to (ON) --->',
+ ),
+
+ array(
+ 'id' => 'opt-depend-select-1',
+ 'type' => 'select',
+ 'title' => '---> and selected to (Blue)',
+ 'placeholder' => 'Select a color',
+ 'options' => array(
+ 'blue' => 'Blue',
+ 'yellow' => 'Yellow',
+ 'green' => 'Green',
+ 'black' => 'Black',
+ 'white' => 'White',
+ ),
+ ),
+
+ array(
+ 'type' => 'notice',
+ 'style' => 'success',
+ 'content' => 'Success: Switched to (ON) and selected to (Blue).',
+ 'dependency' => array( 'opt-depend-switcher-1|opt-depend-select-1', '==|==', 'true|blue' ),
+ ),
+
+ //
+ // Dependency example 9
+ array(
+ 'type' => 'subheading',
+ 'content' => 'Another Nested Dependencies',
+ ),
+
+ array(
+ 'id' => 'opt-nested-select-1',
+ 'type' => 'select',
+ 'title' => 'If selected to (Black) or (White) --->',
+ 'placeholder' => 'Select a color',
+ 'options' => array(
+ 'blue' => 'Blue',
+ 'yellow' => 'Yellow',
+ 'green' => 'Green',
+ 'black' => 'Black',
+ 'white' => 'White',
+ ),
+ ),
+
+ array(
+ 'id' => 'opt-nested-select-2',
+ 'type' => 'select',
+ 'title' => '---> and selected to (Large) --->',
+ 'placeholder' => 'Select a size',
+ 'options' => array(
+ 'small' => 'Small',
+ 'middle' => 'Middle',
+ 'large' => 'Large',
+ 'xlage' => 'XLarge',
+ 'xxlage' => 'XXLarge',
+ ),
+ 'dependency' => array( 'opt-nested-select-1', 'any', 'black,white' ),
+ ),
+
+ array(
+ 'id' => 'opt-nested-select-3',
+ 'type' => 'select',
+ 'title' => '---> and selected to (Hello)',
+ 'placeholder' => 'Select a word',
+ 'options' => array(
+ 'hello' => 'Hello',
+ 'world' => 'World',
+ ),
+ 'dependency' => array( 'opt-nested-select-1|opt-nested-select-2', 'any|==', 'black,white|large' ),
+ ),
+
+ array(
+ 'type' => 'notice',
+ 'style' => 'success',
+ 'content' => 'Congratulations, You are here now!',
+ 'dependency' => array( 'opt-nested-select-1|opt-nested-select-2|opt-nested-select-3', 'any|==|==', 'black,white|large|hello' ),
+ ),
+
+ )
+) );
+
+//
+// Validate
+//
+CSF::createSection( $prefix, array(
+ 'title' => 'Validate',
+ 'icon' => 'fas fa-check-circle',
+ 'description' => 'Visit documentation for more details: How to use validate ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-validate-1',
+ 'type' => 'text',
+ 'title' => 'Email validate',
+ 'subtitle' => 'This text field only allows validated email address.',
+ 'default' => 'info@domain.com',
+ 'validate' => 'csf_validate_email',
+ ),
+
+ array(
+ 'id' => 'opt-validate-2',
+ 'type' => 'text',
+ 'title' => 'Numeric validate',
+ 'subtitle' => 'This text field only allows numbers',
+ 'default' => '123456',
+ 'validate' => 'csf_validate_numeric',
+ ),
+
+ array(
+ 'id' => 'opt-validate-3',
+ 'type' => 'text',
+ 'title' => 'Required validate',
+ 'subtitle' => 'This text field is required, cannot be pass empty.',
+ 'default' => 'Lorem ipsum value',
+ 'validate' => 'csf_validate_required',
+ ),
+
+ array(
+ 'id' => 'opt-validate-4',
+ 'type' => 'text',
+ 'title' => 'URL validate',
+ 'subtitle' => 'This text field only allows validated url address.',
+ 'default' => 'http://codestarframework.com',
+ 'validate' => 'csf_validate_url',
+ ),
+
+ )
+) );
+
+//
+// Sanitize
+//
+CSF::createSection( $prefix, array(
+ 'title' => 'Sanitize',
+ 'icon' => 'fas fa-redo',
+ 'description' => 'Visit documentation for more details: How to use sanitize ',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-sanitize-1',
+ 'type' => 'text',
+ 'title' => 'Sanitize (a) to (b)',
+ 'subtitle' => 'Replacing letter (a) to letter (b). for eg. apple to bpple',
+ 'sanitize' => 'csf_sanitize_replace_a_to_b'
+ ),
+
+ array(
+ 'id' => 'opt-sanitize-2',
+ 'type' => 'text',
+ 'title' => 'Sanitize Title',
+ 'subtitle' => 'Converting (space) to (-) and (uppercase) letters to (lowercase) letters. for eg. Hello World to hello-world',
+ 'sanitize' => 'csf_sanitize_title'
+ ),
+
+ )
+) );
+
+//
+// Field: backup
+//
+CSF::createSection( $prefix, array(
+ 'title' => 'Backup',
+ 'icon' => 'fas fa-shield-alt',
+ 'description' => 'Visit documentation for more details on this field: Field: backup ',
+ 'fields' => array(
+
+ array(
+ 'type' => 'backup',
+ ),
+
+ )
+) );
+
+//
+// Others
+//
+CSF::createSection( $prefix, array(
+ 'title' => 'Others',
+ 'icon' => 'fas fa-bolt',
+ 'description' => 'Visit documentation for more details: Others ',
+ 'fields' => array(
+
+ array(
+ 'type' => 'heading',
+ 'content' => 'This is a heading field',
+ ),
+
+ array(
+ 'type' => 'subheading',
+ 'content' => 'This is a subheading field',
+ ),
+
+ array(
+ 'type' => 'content',
+ 'content' => 'This is a content field',
+ ),
+
+ array(
+ 'type' => 'submessage',
+ 'style' => 'success',
+ 'content' => 'This is a submessage field. And using style success ',
+ ),
+
+ array(
+ 'type' => 'content',
+ 'content' => 'This is a content field',
+ ),
+
+ array(
+ 'type' => 'submessage',
+ 'style' => 'info',
+ 'content' => 'This is a submessage field. And using style info ',
+ ),
+
+ array(
+ 'type' => 'submessage',
+ 'style' => 'warning',
+ 'content' => 'This is a submessage field. And using style warning ',
+ ),
+
+ array(
+ 'type' => 'submessage',
+ 'style' => 'danger',
+ 'content' => 'This is a submessage field. And using style danger ',
+ ),
+
+ array(
+ 'type' => 'notice',
+ 'style' => 'success',
+ 'content' => 'This is a notice field. And using style success ',
+ ),
+
+ array(
+ 'type' => 'notice',
+ 'style' => 'info',
+ 'content' => 'This is a notice field. And using style info ',
+ ),
+
+ array(
+ 'type' => 'notice',
+ 'style' => 'warning',
+ 'content' => 'This is a notice field. And using style warning ',
+ ),
+
+ array(
+ 'type' => 'notice',
+ 'style' => 'danger',
+ 'content' => 'This is a notice field. And using style danger ',
+ ),
+
+ array(
+ 'type' => 'content',
+ 'content' => 'This is a content field. You can write some contents here.',
+ ),
+
+ )
+) );
diff --git a/views/about.php b/views/about.php
new file mode 100644
index 0000000..d02d3d2
--- /dev/null
+++ b/views/about.php
@@ -0,0 +1,181 @@
+
+
+Welcome to the exciting world of Codestar Framework. Built in Object Oriented Programming paradigm with high number of custom fields and tons of options. Allows you to bring custom admin, metabox, taxonomy and customize settings to all of your pages, posts and categories. It's highly modern and advanced framework.
+
+
+
+
+
+
Admin Option Framework
+
Built in Object Oriented Programming paradigm with high number of custom fields and tons of options. It's highly modern and advanced framework.
+
+
+
+
+
Customize Option Framework
+
Inherits the default WordPress Customizer with integration of own custom fields. It's more powerful to customize your site on live.
+
+
+
+
+
Metabox Option Framework
+
Allows you to bring custom metabox settings to all of your pages and posts. We provide advanced settings with numerious number of fields.
+
+
+
+
+
+
+
Nav Menu Option Framework
+
Allows you to bring custom nav menu item settings to all of your menus. We provide advanced settings with numerious number of fields.
+
+
+
+
+
Taxonomy Option Framework
+
Allows you to bring custom taxonomy settings to all of your categories, tags or CPT. We provide advanced settings with numerious number of fields.
+
+
+
+
+
Profile Option Framework
+
Allows you to bring custom user profile settings to all of users. We provide advanced settings with numerious number of fields.
+
+
+
+
+
+
+
Widget Option Framework
+
Allows you to creating custom widgets. We provide advanced settings wtih numerious number of fields.
+
+
+
+
+
Comment Option Framework
+
Allows you to bring custom comment metabox settings to all of comments. We provide advanced settings wtih numerious number of fields.
+
+
+
+
+
Shortcode Option Framework
+
Comes with pre-built shortcode editor to manage your content. It's easy and flexible to build unlimited layouts with endless possibilites.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Key Features
+
+
+ WordPress 5.4.x Ready
+ Gutenberg Ready
+ Multiple instances
+ Unlimited frameworks
+ Output css styles
+ Output typography
+ Advanced option fields
+ Fields dependencies based on rules
+ Sanitize and validate fields
+ Ajax saving
+ Localization
+ Useful hooks for configurations
+ Export and import options
+ and much more...
+
+
+
+
+
+
+
Available Fields
+
+
+
+
+ text
+ accordion
+ background
+ backup
+ icon
+
+
+ textarea
+ repeater
+ heading
+ date
+ code_editor
+
+
+ checkbox
+ group
+ image_select
+ slider
+ content
+
+
+ select
+ gallery
+ notice
+ fieldset
+ typography
+
+
+ switcher
+ sorter
+ link_color
+ subheading
+ upload
+
+
+ color
+ media
+ radio
+ tabbed
+ wp_editor
+
+
+ spacing
+ border
+ palette
+ spinner
+ dimensions
+
+
+ link_color
+ sortable
+ button_set
+ accordion
+ others
+
+
+
+
+
and more on the way...
+
+
+
+
+
+
+
+
+You can force to disable this page with (it would works for only premium users):
+
+
+add_filter( 'csf_welcome_page', '__return_false' );
+
+
+
diff --git a/views/documentation.php b/views/documentation.php
new file mode 100644
index 0000000..ae11271
--- /dev/null
+++ b/views/documentation.php
@@ -0,0 +1,5 @@
+
+
+If you are new to Codestar Framework, here is a step-by-step plan for getting started.
+
+ Online Documentation
diff --git a/views/footer.php b/views/footer.php
new file mode 100644
index 0000000..ad9c227
--- /dev/null
+++ b/views/footer.php
@@ -0,0 +1,3 @@
+
+
+
diff --git a/views/free-vs-premium.php b/views/free-vs-premium.php
new file mode 100644
index 0000000..30a9fc2
--- /dev/null
+++ b/views/free-vs-premium.php
@@ -0,0 +1,100 @@
+
+
+
+
+
+ Features
+ Free Version
+ Premium Version
+
+
+
+
+ Admin Option Framework
+
+
+
+
+ Customize Option Framework
+
+
+
+
+ Metabox Option Framework
+
+
+
+
+ Nav Menu Option Framework
+
+
+
+
+ Taxonomy Option Framework
+
+
+
+
+ Profile Option Framework
+
+
+
+
+ Widget Option Framework
+
+
+
+
+ Comment Option Framework
+
+
+
+
+ Shortcode Option Framework
+
+
+
+
+ All Option Fields
+
+
+
+
+ Developer Packages
+
+
+
+
+ Unminfy Library
+
+
+
+
+ New Requests
+
+
+
+
+ Autoremove Advertisements
+
+
+
+
+ Life-time access/updates
+
+
+
+
+ Support Forum
+
+
+
+
+
+
+
+ Download Free Version
+ Upgrade Premium Version
+
+
+
diff --git a/views/header.php b/views/header.php
new file mode 100644
index 0000000..645802b
--- /dev/null
+++ b/views/header.php
@@ -0,0 +1,50 @@
+ 'About',
+ 'quickstart' => 'Quick Start',
+ 'documentation' => 'Documentation',
+ 'free-vs-premium' => 'Free vs Premium',
+ 'support' => 'Support',
+ 'relnotes' => 'Release Notes',
+ );
+
+?>
+
+
+
Welcome to Codestar Framework v
+
+
A Simple and Lightweight WordPress Option Framework for Themes and Plugins
+
+
Demo
+
+
+
+
+
Codestar Framework
+
v
+
+
+
+ $link ) {
+
+ if ( CSF::$premium && $key === 'free-vs-premium' ) { continue; }
+
+ $activate = ( $section === $key ) ? ' nav-tab-active' : '';
+
+ echo ''. esc_attr( $link ) .' ';
+
+ }
+
+ ?>
+
diff --git a/views/quickstart.php b/views/quickstart.php
new file mode 100644
index 0000000..08b6626
--- /dev/null
+++ b/views/quickstart.php
@@ -0,0 +1,67 @@
+
+
+
Let's quick start it.
+
Open your current theme functions.php
file and paste this code.
+
+
+
+// Control core classes for avoid errors
+if ( class_exists( 'CSF' ) ) {
+
+ //
+ // Set a unique slug-like ID
+ $prefix = 'my_framework';
+
+ //
+ // Create options
+ CSF::createOptions( $prefix, array(
+ 'menu_title' => 'My Framework',
+ 'menu_slug' => 'my-framework',
+ ) );
+
+ //
+ // Create a section
+ CSF::createSection( $prefix, array(
+ 'title' => 'Tab Title 1',
+ 'fields' => array(
+
+ //
+ // A text field
+ array(
+ 'id' => 'opt-text',
+ 'type' => 'text',
+ 'title' => 'Simple Text',
+ ),
+
+ )
+ ) );
+
+ CSF::createSection( $prefix, array(
+ 'title' => 'Tab Title 2',
+ 'fields' => array(
+
+ array(
+ 'id' => 'opt-textarea',
+ 'type' => 'textarea',
+ 'title' => 'Simple Textarea',
+ ),
+
+ )
+ ) );
+
+}
+
+
+
+
How to get option value ?
+
+
+
+$options = get_option( 'my_framework' ); // // unique id of the framework
+
+echo $options['opt-text']; // id of field
+echo $options['opt-textarea']; // id of field
+
+
+
+
Online Documentation
diff --git a/views/relnotes.php b/views/relnotes.php
new file mode 100644
index 0000000..f5cfa0f
--- /dev/null
+++ b/views/relnotes.php
@@ -0,0 +1,227 @@
+
+
+
v2.1.7
+
+ Fixed: Sortable field append new fields after saved issue.
+ Fixed: Customizer dependency issue after v2.1.6 update.
+ Fixed: Typography field "Normal 400" style embed issue.
+ Updated: Assets library (csf.css to style.css, csf.js to main.js).
+ Improved: Sanitize/Validate callback method.
+ Improved: Global dependency feature.
+
+
+
v2.1.6
+
+ Added: Nav Menu Option Framework (bonus).
+ Added: Section "class" paramter for Admin, Metabox Option Frameworks.
+ Added: Fields with output css feature can be used in Accordion, Tabbed and Fieldset fields.
+ Added: Visible dependency instead of hiding.
+ Fixed: Background field gradient transparent issue.
+ Improved: Admin Option Framework tab anchors (#tab-1,2 etc.) with the actual tab names.
+ Improved: Data sanitization and escaping.
+ Improved: All of framework scripts and styles loads only when needed.
+ Improved: Output css feature and documentation.
+ Improved: Network menus and options integration.
+ Improved: Google web fonts load method.
+ Improved: Some js and css coding.
+
+
+
v2.1.5
+
+ Added: Sub menu item title argument for Admin Option Framework.
+ Added: A parameter "sanitize => false" for allow to script/iframe or any html code.
+ Fixed: Reset section issue for Admin Option Framework.
+ Fixed: A few bugs fixed caused by sanitize have been.
+ Fixed: Output CSS sanitize issue.
+ Updated: "Font Awesome 5 Free" package and added new icons.
+ Improved: Data sanitization and escaping.
+
+
+
v2.1.4
+
+ Added: "Font Awesome 5 Free" package for "Icon" field ( v4 is still can be used ).
+ Added: "Button Set" field custom options types like "Select" field categories, pages etc.
+ Added: New field "callback". This field allows to make custom html output with a function.
+ Added: Data sanitization and escaping for all framework attributes/data.
+ Fixed: Backup field and Ajax-save stripslashes issue.
+ Improved: Form warning message on reset button.
+ Improved: Map search field autocomplete (caching same requests in typing).
+
+
+
v2.1.3
+
+ Added: New field "map".
+ Added: Quick save (ctrl+s,command+s) for Admin Option Framework.
+ Added: Form warning when changed any option for Admin Option Framework.
+ Fixed: Output CSS twice times issue.
+ Updated: Google Web Fonts array.
+ Updated: Customizer Framework samples.
+ Improved: Background field for auto hide/show background attributes.
+
+
+
v2.1.2
+
+ Added: WP 5.3 "Kirk" UI compatibility.
+ Added: Comment Metabox Framework (bonus).
+ Added: New field "number".
+ Fixed: Media field dependency issue.
+ Fixed: Button set field default selected issue.
+ Fixed: Select field empty message issue.
+ Fixed: Multiple chosen select issue in Shortcode Framework.
+ Fixed: Checkbox field confict with Repeater and Group field issue.
+ Fixed: Image Select and Multiple Checkbox fields refresh issue in Customize Framework.
+
+
+
v2.1.1
+
+ Added: Chosen select AJAX search option.
+ Added: Chosen select sortable option.
+ Added: Chosen select keep options order.
+ Added: Users select field options.
+ Fixed: Single shortcode insert issue.
+ Fixed: Taxonomy Framework multiple save issue.
+ Fixed: Widgets Framework chosen select save issue.
+ Fixed: Chosen multiple select refresh issue in Customizer.
+ Fixed: Minor bug fixes and improvements.
+
+
+
v2.1.0
+
+ Added: SSL protocol control for library files.
+ Added: SCSS style files to main files again.
+ Fixed: Default value issue in Taxonomy Framework.
+ Fixed: Customize option refresh/save issue in existing customizer section.
+
+
+
v2.0.9
+
+ Added: Framework fields support for predefined customizer sections.
+ Fixed: Metabox save php notices when using "serialize" and "unserialize" in same time.
+ Fixed: Multiple instances save data issue.
+ Fixed: Spacing field all_icon parameter.
+ Fixed: Admin options show in customizer parameter "show_in_customizer".
+ Improved: Media field specific type of uploads.
+ Improved: Spacing and dimensions fields unit parameter.
+ Improved: "empty_message" parameter for checkbox, radio and select fields.
+
+
+
v2.0.8
+
+ Added: Framework wrapper classname param as "class" for override css styles.
+ Added: Checkbox and Radio field group option like Select field group.
+ Added: Attachment post type metabox support.
+ Fixed: Auto-filled issue for framework search input.
+ Fixed: Spacing field refresh issue in Customizer.
+ Fixed: Radio field checked issue in category id select.
+ Fixed: Metabox single option save issue.
+ Fixed: Metabox wp editor loaded issue.
+ Improved: Dependency hide/show for a text field after the value is written.
+ Improved: Dependency parameter for multiple conditions.
+
+
+
v2.0.7
+
+ Added: Profile Option Framework (bonus).
+ Added: Media field fallback function for easy migration from v1.x to v2.x.
+ Fixed: A minor PHP notice in the Shortcode Generate Framework.
+ Improved: Link Color field output for given array elements.
+ Improved: Elementor integration for Shortcode Generate Framework.
+ Improved: Backup field UI fallback in the Customize Framework.
+ Improved: Global dependency controls.
+
+
+
v2.0.6
+
+ Added: Default values from a external array as optional for all frameworks.
+ Added: Widget Title sync support in Widgets Framework.
+ Added: WP Roles select field options.
+ Fixed: Initialization issue inside after_theme_setup action.
+ Fixed: Backup export button issue.
+ Fixed: WP Media uploaded item selected issue.
+ Improved: Reset and Import UI messages in the Customize Framework.
+ Improved: Translation .POT file.
+ Improved: Global dependency controls.
+
+
+
v2.0.5
+
+ Added: Dependency controls for among separate sections fields.
+ Added: Border field new border style properties.
+ Added: Taxonomy Framework section title param.
+ Fixed: Metabox section title issue.
+ Fixed: Typography refresh issue in Customizer.
+ Fixed: Group and Repeater fields without title parameter.
+ Fixed: Color field default issue in Background, Typography, Border fields.
+ Fixed: RevSlider CodeMirror conflict.
+ Fixed: Shortcode Generate Framework Group/Repeater nested issue.
+
+
+
v2.0.4
+
+ Added: Dark and Light themes.
+ Added: New params to change on/off texts for Switcher field.
+ Added: Shortcode generate framework support for Elementor text editor.
+ Fixed: Sortable and Sorter fields ordering save issue in Customizer.
+ Fixed: Radio, Button Set and Image Select fields issue in Group field.
+ Fixed: Color picker default/clear button issue in Customizer.
+ Improved: RTL style of framework.
+ Improved: Media and Upload fields remove buttons.
+ Improved: Framework style css.
+ Changed: Backup field data type "json" instead of "serialize".
+
+
+
v2.0.3
+
+ Added: Widget Options Framework (bonus).
+ Added: Nested Group support.
+ Added: Nested Repeater support.
+ Added: Spanish Translation po/mo.
+ Added: Date range "from" and "to" for Date field.
+ Added: New param "empty_message" if options not provided for Select, Checkbox, Radio.
+ Fixed: Metabox framework php notices in 404 page etc.
+ Fixed: WP Editor field save issue.
+ Improved: Validate email function.
+ Improved: Group field arguments.
+ Improved: Font-Awesome library.
+ Improved: Hide to "welcome" page automatically if not used as plugin.
+ Improved: Confirm alert box messages translations.
+
+
+
v2.0.2
+
+ Added: Page Templates "default" option for spesific metabox hide/show.
+ Added: Post Formats "default" option for spesific metabox hide/show.
+ Added: Only allow numeric inputs for Spacing, Dimensions, Border, Slider, Spinner, Typography etc.
+ Added: ChosenJS custom options support and improved width and css style.
+ Fixed: Taxonomy framework jquery triggers. It was not working again after saving. It fixed now.
+ Fixed: Code Editor style issue for used inside Group/Repeater.
+ Fixed: Sortable field sortby issue.
+ Fixed: Options panel show in customizer option.
+ Fixed: Media field URL show/hide option issue.
+ Improved: Typography, Color, Spinner, Date, Chosen, Slider fields for used inside Group/Repeater.
+ Improved: All fields javascript triggers for more performance.
+ Improved: Customizer Framework field dependency feature.
+ Improved: Customizer Framework field styles.
+
+
+
v2.0.1
+
+ Added: WP Editor AJAX support for Group Field, Repeater Field and Everywhere.
+ Added: Custom palette colors option for Color Picker.
+ Added: Override files feature again.
+ Added: Validate URL function callback.
+ Fixed: Group field save issue.
+ Fixed: Multiple given post formats metabox hide/show issue.
+ Fixed: Minor bugs.
+
+
+
v2.0.0
+
+ Premium version release.
+
+
+
v1.0.0
+
+
diff --git a/views/support.php b/views/support.php
new file mode 100644
index 0000000..91cbadc
--- /dev/null
+++ b/views/support.php
@@ -0,0 +1,5 @@
+
+
+
We are provide support forum for premium version users. You can join to support forum for submit any question after purchasing. Free version users support is limited on github.
+
+
Support Forum -(or)- Github
diff --git a/views/welcome.php b/views/welcome.php
new file mode 100644
index 0000000..328ef2c
--- /dev/null
+++ b/views/welcome.php
@@ -0,0 +1,139 @@
+set_demo_mode();
+
+ }
+
+ // instance
+ public static function instance() {
+ if ( is_null( self::$instance ) ) {
+ self::$instance = new self();
+ }
+ return self::$instance;
+ }
+
+ public function add_about_menu() {
+ add_management_page( 'Codestar Framework', 'Codestar Framework', 'manage_options', 'csf-welcome', array( &$this, 'add_page_welcome' ) );
+ }
+
+ public function add_page_welcome() {
+
+ $section = ( ! empty( $_GET['section'] ) ) ? sanitize_text_field( wp_unslash( $_GET['section'] ) ) : '';
+
+ CSF::include_plugin_file( 'views/header.php' );
+
+ // safely include pages
+ switch ( $section ) {
+
+ case 'quickstart':
+ CSF::include_plugin_file( 'views/quickstart.php' );
+ break;
+
+ case 'documentation':
+ CSF::include_plugin_file( 'views/documentation.php' );
+ break;
+
+ case 'relnotes':
+ CSF::include_plugin_file( 'views/relnotes.php' );
+ break;
+
+ case 'support':
+ CSF::include_plugin_file( 'views/support.php' );
+ break;
+
+ case 'free-vs-premium':
+ CSF::include_plugin_file( 'views/free-vs-premium.php' );
+ break;
+
+ default:
+ CSF::include_plugin_file( 'views/about.php' );
+ break;
+
+ }
+
+ CSF::include_plugin_file( 'views/footer.php' );
+
+ }
+
+ public static function add_plugin_action_links( $links, $plugin_file ) {
+
+ if ( $plugin_file === 'codestar-framework/codestar-framework.php' && ! empty( $links ) ) {
+ $links['csf--welcome'] = '
Settings ';
+ if ( ! CSF::$premium ) {
+ $links['csf--upgrade'] = '
Upgrade ';
+ }
+ }
+
+ return $links;
+
+ }
+
+ public static function add_plugin_row_meta( $links, $plugin_file ) {
+
+ if ( $plugin_file === 'codestar-framework/codestar-framework.php' && ! empty( $links ) ) {
+ $links['csf--docs'] = '
Documentation ';
+ }
+
+ return $links;
+
+ }
+
+ public function set_demo_mode() {
+
+ $demo_mode = get_option( 'csf_demo_mode', false );
+
+ $demo_activate = ( ! empty( $_GET[ 'csf-demo' ] ) ) ? sanitize_text_field( wp_unslash( $_GET[ 'csf-demo' ] ) ) : '';
+
+ if ( ! empty( $demo_activate ) ) {
+
+ $demo_mode = ( $demo_activate === 'activate' ) ? true : false;
+
+ update_option( 'csf_demo_mode', $demo_mode );
+
+ }
+
+ if ( ! empty( $demo_mode ) ) {
+
+ CSF::include_plugin_file( 'samples/admin-options.php' );
+
+ if ( CSF::$premium ) {
+
+ CSF::include_plugin_file( 'samples/customize-options.php' );
+ CSF::include_plugin_file( 'samples/metabox-options.php' );
+ CSF::include_plugin_file( 'samples/nav-menu-options.php' );
+ CSF::include_plugin_file( 'samples/profile-options.php' );
+ CSF::include_plugin_file( 'samples/shortcode-options.php' );
+ CSF::include_plugin_file( 'samples/taxonomy-options.php' );
+ CSF::include_plugin_file( 'samples/widget-options.php' );
+ CSF::include_plugin_file( 'samples/comment-options.php' );
+
+ }
+
+ }
+
+ }
+
+ }
+
+ CSF_Welcome::instance();
+}