├── .github ├── ISSUE_TEMPLATE └── img │ ├── download-stable-version.svg │ └── phpstorm.png ├── .gitignore ├── .travis.yml ├── CONTRIBUTING.md ├── README.md ├── framework ├── LICENSE ├── autoload.php ├── bin │ └── load-latest-fonts.php ├── bootstrap.php ├── core │ ├── Fw.php │ ├── class-fw-manifest.php │ ├── components │ │ ├── backend.php │ │ ├── backend │ │ │ └── class-fw-settings-form-theme.php │ │ ├── extensions.php │ │ ├── extensions │ │ │ ├── class-fw-extension-default.php │ │ │ └── manager │ │ │ │ ├── available-extensions.php │ │ │ │ ├── class--fw-extensions-manager.php │ │ │ │ ├── includes │ │ │ │ ├── available-ext │ │ │ │ │ ├── class--fw-available-extensions-register.php │ │ │ │ │ └── class-fw-available-extension.php │ │ │ │ ├── class--fw-extensions-delete-upgrader-skin.php │ │ │ │ ├── class--fw-extensions-install-upgrader-skin.php │ │ │ │ ├── download-source │ │ │ │ │ ├── class--fw-ext-download-source-register.php │ │ │ │ │ ├── class--fw-ext-download-source.php │ │ │ │ │ └── types │ │ │ │ │ │ ├── class-fw-download-source-bitbucket.php │ │ │ │ │ │ ├── class-fw-download-source-custom.php │ │ │ │ │ │ ├── class-fw-download-source-github.php │ │ │ │ │ │ └── init.php │ │ │ │ └── parsedown │ │ │ │ │ ├── LICENSE.txt │ │ │ │ │ └── Parsedown.php │ │ │ │ ├── static │ │ │ │ ├── extension-page.css │ │ │ │ ├── extension-page.js │ │ │ │ ├── extensions-page.css │ │ │ │ ├── extensions-page.js │ │ │ │ ├── img │ │ │ │ │ ├── disabled-bg.png │ │ │ │ │ ├── thumbnail-bg.jpg │ │ │ │ │ └── thumbnails │ │ │ │ │ │ ├── analytics.jpg │ │ │ │ │ │ ├── backup.jpg │ │ │ │ │ │ ├── backups.jpg │ │ │ │ │ │ ├── breadcrumbs.jpg │ │ │ │ │ │ ├── brizy.jpg │ │ │ │ │ │ ├── events.jpg │ │ │ │ │ │ ├── feedback.jpg │ │ │ │ │ │ ├── forms.jpg │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── learning.jpg │ │ │ │ │ │ ├── mailer.jpg │ │ │ │ │ │ ├── mega-menu.jpg │ │ │ │ │ │ ├── page-builder.jpg │ │ │ │ │ │ ├── portfolio.jpg │ │ │ │ │ │ ├── seo.jpg │ │ │ │ │ │ ├── sidebars.jpg │ │ │ │ │ │ ├── sliders.jpg │ │ │ │ │ │ ├── social.jpg │ │ │ │ │ │ ├── styling.jpg │ │ │ │ │ │ ├── translation.jpg │ │ │ │ │ │ └── wp-shortcodes.jpg │ │ │ │ └── unyson-font-icon │ │ │ │ │ ├── fonts │ │ │ │ │ ├── icomoon.eot │ │ │ │ │ ├── icomoon.svg │ │ │ │ │ ├── icomoon.ttf │ │ │ │ │ └── icomoon.woff │ │ │ │ │ └── style.css │ │ │ │ └── views │ │ │ │ ├── delete-form.php │ │ │ │ ├── extension-page-header.php │ │ │ │ ├── extension.php │ │ │ │ ├── extensions-page.php │ │ │ │ └── install-form.php │ │ └── theme.php │ ├── exceptions │ │ └── class-fw-option-type-exception.php │ └── extends │ │ ├── class-fw-container-type.php │ │ ├── class-fw-extension.php │ │ ├── class-fw-option-type.php │ │ └── interface-fw-option-handler.php ├── extensions │ ├── blog │ │ ├── class-fw-extension-blog.php │ │ └── manifest.php │ ├── clone-all.bash │ └── update │ │ ├── class-fw-extension-update.php │ │ ├── config.php │ │ ├── extensions │ │ ├── bitbucket-update │ │ │ ├── class-fw-extension-bitbucket-update.php │ │ │ └── manifest.php │ │ ├── custom-update │ │ │ ├── class-fw-extension-custom-update.php │ │ │ └── manifest.php │ │ └── github-update │ │ │ ├── class-fw-extension-github-update.php │ │ │ └── manifest.php │ │ ├── includes │ │ ├── classes │ │ │ ├── class--fw-ext-update-extensions-list-table.php │ │ │ ├── class--fw-ext-update-extensions-upgrader-skin.php │ │ │ ├── class--fw-ext-update-framework-upgrader-skin.php │ │ │ └── class--fw-ext-update-theme-upgrader-skin.php │ │ └── extends │ │ │ └── class-fw-ext-update-service.php │ │ ├── manifest.php │ │ ├── static.php │ │ ├── static │ │ └── css │ │ │ └── admin-update-page.css │ │ └── views │ │ └── updates-list.php ├── helpers │ ├── class-fw-access-key.php │ ├── class-fw-cache.php │ ├── class-fw-callback.php │ ├── class-fw-db-options-model.php │ ├── class-fw-dumper.php │ ├── class-fw-flash-messages.php │ ├── class-fw-form.php │ ├── class-fw-request.php │ ├── class-fw-resize.php │ ├── class-fw-session.php │ ├── class-fw-settings-form.php │ ├── class-fw-wp-filesystem.php │ ├── class-fw-wp-list-table.php │ ├── class-fw-wp-meta.php │ ├── class-fw-wp-option.php │ ├── database.php │ ├── exceptions │ │ ├── class-fw-form-invalid-submission-exception.php │ │ └── class-fw-form-not-found-exception.php │ ├── fw-google-fonts.json.php │ ├── fw-storage.php │ ├── general.php │ ├── meta.php │ └── type │ │ ├── class-fw-type-register.php │ │ └── class-fw-type.php ├── includes │ ├── container-types │ │ ├── box │ │ │ └── class-fw-container-type-box.php │ │ ├── class-fw-container-type-undefined.php │ │ ├── popup │ │ │ ├── class-fw-container-type-popup.php │ │ │ ├── scripts.js │ │ │ └── styles.css │ │ ├── simple.php │ │ └── tab │ │ │ ├── class-fw-container-type-tab.php │ │ │ └── view.php │ ├── customizer │ │ ├── class--fw-customizer-control-option-wrapper.php │ │ └── class--fw-customizer-setting-option.php │ ├── hooks.php │ ├── option-storage │ │ ├── class--fw-option-storage-type-register.php │ │ ├── class-fw-option-storage-type.php │ │ └── type │ │ │ ├── class-fw-option-storage-type-post-meta.php │ │ │ ├── class-fw-option-storage-type-term-meta.php │ │ │ └── class-fw-option-storage-type-wp-option.php │ └── option-types │ │ ├── addable-box │ │ ├── class-fw-option-type-addable-box.php │ │ ├── static │ │ │ ├── css │ │ │ │ └── styles.css │ │ │ └── js │ │ │ │ └── scripts.js │ │ └── view.php │ │ ├── addable-option │ │ ├── class-fw-option-type-addable-option.php │ │ ├── static │ │ │ ├── css │ │ │ │ └── styles.css │ │ │ └── js │ │ │ │ └── scripts.js │ │ └── view.php │ │ ├── addable-popup │ │ ├── class-fw-option-type-addable-popup.php │ │ ├── static │ │ │ ├── css │ │ │ │ └── styles.css │ │ │ └── js │ │ │ │ └── scripts.js │ │ └── view.php │ │ ├── background-image │ │ ├── class-fw-option-type-background-image.php │ │ ├── static │ │ │ ├── css │ │ │ │ └── styles.css │ │ │ └── js │ │ │ │ └── scripts.js │ │ └── view.php │ │ ├── class-fw-option-type-undefined.php │ │ ├── color-picker │ │ ├── class-fw-option-type-color-picker.php │ │ └── static │ │ │ ├── css │ │ │ └── styles.css │ │ │ └── js │ │ │ └── scripts.js │ │ ├── date-picker │ │ ├── class-fw-option-type-wp-date-picker.php │ │ └── static │ │ │ ├── css │ │ │ └── datepicker.css │ │ │ └── js │ │ │ ├── bootstrap-datepicker.js │ │ │ ├── locales │ │ │ ├── bootstrap-datepicker.ar.min.js │ │ │ ├── bootstrap-datepicker.az.min.js │ │ │ ├── bootstrap-datepicker.bg.min.js │ │ │ ├── bootstrap-datepicker.bs.min.js │ │ │ ├── bootstrap-datepicker.ca.min.js │ │ │ ├── bootstrap-datepicker.cs.min.js │ │ │ ├── bootstrap-datepicker.cy.min.js │ │ │ ├── bootstrap-datepicker.da.min.js │ │ │ ├── bootstrap-datepicker.de.min.js │ │ │ ├── bootstrap-datepicker.el.min.js │ │ │ ├── bootstrap-datepicker.en-AU.min.js │ │ │ ├── bootstrap-datepicker.en-GB.min.js │ │ │ ├── bootstrap-datepicker.eo.min.js │ │ │ ├── bootstrap-datepicker.es.min.js │ │ │ ├── bootstrap-datepicker.et.min.js │ │ │ ├── bootstrap-datepicker.eu.min.js │ │ │ ├── bootstrap-datepicker.fa.min.js │ │ │ ├── bootstrap-datepicker.fi.min.js │ │ │ ├── bootstrap-datepicker.fo.min.js │ │ │ ├── bootstrap-datepicker.fr-CH.min.js │ │ │ ├── bootstrap-datepicker.fr.min.js │ │ │ ├── bootstrap-datepicker.gl.min.js │ │ │ ├── bootstrap-datepicker.he.min.js │ │ │ ├── bootstrap-datepicker.hr.min.js │ │ │ ├── bootstrap-datepicker.hu.min.js │ │ │ ├── bootstrap-datepicker.hy.min.js │ │ │ ├── bootstrap-datepicker.id.min.js │ │ │ ├── bootstrap-datepicker.is.min.js │ │ │ ├── bootstrap-datepicker.it-CH.min.js │ │ │ ├── bootstrap-datepicker.it.min.js │ │ │ ├── bootstrap-datepicker.ja.min.js │ │ │ ├── bootstrap-datepicker.ka.min.js │ │ │ ├── bootstrap-datepicker.kh.min.js │ │ │ ├── bootstrap-datepicker.kk.min.js │ │ │ ├── bootstrap-datepicker.ko.min.js │ │ │ ├── bootstrap-datepicker.kr.min.js │ │ │ ├── bootstrap-datepicker.lt.min.js │ │ │ ├── bootstrap-datepicker.lv.min.js │ │ │ ├── bootstrap-datepicker.me.min.js │ │ │ ├── bootstrap-datepicker.mk.min.js │ │ │ ├── bootstrap-datepicker.mn.min.js │ │ │ ├── bootstrap-datepicker.ms.min.js │ │ │ ├── bootstrap-datepicker.nb.min.js │ │ │ ├── bootstrap-datepicker.nl-BE.min.js │ │ │ ├── bootstrap-datepicker.nl.min.js │ │ │ ├── bootstrap-datepicker.no.min.js │ │ │ ├── bootstrap-datepicker.pl.min.js │ │ │ ├── bootstrap-datepicker.pt-BR.min.js │ │ │ ├── bootstrap-datepicker.pt.min.js │ │ │ ├── bootstrap-datepicker.ro.min.js │ │ │ ├── bootstrap-datepicker.rs-latin.min.js │ │ │ ├── bootstrap-datepicker.rs.min.js │ │ │ ├── bootstrap-datepicker.ru.min.js │ │ │ ├── bootstrap-datepicker.sk.min.js │ │ │ ├── bootstrap-datepicker.sl.min.js │ │ │ ├── bootstrap-datepicker.sq.min.js │ │ │ ├── bootstrap-datepicker.sr-latin.min.js │ │ │ ├── bootstrap-datepicker.sr.min.js │ │ │ ├── bootstrap-datepicker.sv.min.js │ │ │ ├── bootstrap-datepicker.sw.min.js │ │ │ ├── bootstrap-datepicker.th.min.js │ │ │ ├── bootstrap-datepicker.tr.min.js │ │ │ ├── bootstrap-datepicker.uk.min.js │ │ │ ├── bootstrap-datepicker.vi.min.js │ │ │ ├── bootstrap-datepicker.zh-CN.min.js │ │ │ └── bootstrap-datepicker.zh-TW.min.js │ │ │ └── scripts.js │ │ ├── datetime-picker │ │ ├── class-fw-option-type-datetime-picker.php │ │ └── static │ │ │ ├── css │ │ │ ├── jquery.datetimepicker.css │ │ │ └── style.css │ │ │ └── js │ │ │ ├── jquery.datetimepicker.js │ │ │ └── script.js │ │ ├── datetime-range │ │ ├── class-fw-option-type-datetime-range.php │ │ ├── static │ │ │ ├── css │ │ │ │ └── styles.css │ │ │ └── js │ │ │ │ └── script.js │ │ └── view.php │ │ ├── gradient │ │ ├── class-fw-option-type-gradient.php │ │ ├── static │ │ │ ├── css │ │ │ │ └── styles.css │ │ │ └── js │ │ │ │ └── scripts.js │ │ └── view.php │ │ ├── icon-v2 │ │ ├── class-fw-option-type-icon-v2.php │ │ ├── includes │ │ │ ├── class-fw-icon-v2-favorites.php │ │ │ └── class-fw-icon-v2-packs-loader.php │ │ ├── static │ │ │ ├── css │ │ │ │ └── picker.css │ │ │ ├── img │ │ │ │ ├── no-image.png │ │ │ │ ├── sauron.png │ │ │ │ └── transparent_bg.png │ │ │ └── js │ │ │ │ ├── icon-picker-v2.js │ │ │ │ └── render-icon-previews.js │ │ └── views │ │ │ ├── templates.php │ │ │ └── view.php │ │ ├── icon │ │ ├── README.md │ │ ├── class-fw-option-type-icon.php │ │ ├── static │ │ │ ├── css │ │ │ │ └── backend.css │ │ │ └── js │ │ │ │ └── backend.js │ │ └── view.php │ │ ├── image-picker │ │ ├── class-fw-option-type-image-picker.php │ │ └── static │ │ │ ├── css │ │ │ └── styles.css │ │ │ └── js │ │ │ ├── image-picker │ │ │ ├── image-picker.js │ │ │ ├── image-picker.min.js │ │ │ └── imagesloaded.pkg.min.js │ │ │ └── scripts.js │ │ ├── map │ │ ├── class-fw-option-type-map.php │ │ ├── static │ │ │ ├── css │ │ │ │ └── style.css │ │ │ └── js │ │ │ │ └── scripts.js │ │ └── views │ │ │ └── view.php │ │ ├── multi-picker │ │ ├── class-fw-option-type-multi-picker.php │ │ └── static │ │ │ ├── css │ │ │ └── multi-picker.css │ │ │ └── js │ │ │ └── multi-picker.js │ │ ├── multi-select │ │ ├── class-fw-option-type-multi-select.php │ │ └── static │ │ │ ├── css │ │ │ └── style.css │ │ │ └── js │ │ │ └── scripts.js │ │ ├── multi-upload │ │ ├── class-fw-option-type-multi-upload.php │ │ ├── static │ │ │ ├── css │ │ │ │ ├── any-files.css │ │ │ │ ├── images-only.css │ │ │ │ └── modal.css │ │ │ └── js │ │ │ │ ├── any-files.js │ │ │ │ └── images-only.js │ │ └── views │ │ │ ├── any-files.php │ │ │ └── images-only.php │ │ ├── multi │ │ ├── class-fw-option-type-multi.php │ │ └── static │ │ │ └── css │ │ │ └── styles.css │ │ ├── oembed │ │ ├── class-fw-option-type-oembed.php │ │ ├── static │ │ │ ├── css │ │ │ │ └── styles.css │ │ │ └── js │ │ │ │ └── oembed.js │ │ └── view.php │ │ ├── popup │ │ ├── class-fw-option-type-popup.php │ │ ├── static │ │ │ ├── css │ │ │ │ └── styles.css │ │ │ └── js │ │ │ │ └── popup.js │ │ └── views │ │ │ └── view.php │ │ ├── radio-text │ │ ├── class-fw-option-type-radio-text.php │ │ ├── static │ │ │ ├── css │ │ │ │ └── styles.css │ │ │ └── js │ │ │ │ └── scripts.js │ │ └── view.php │ │ ├── range-slider │ │ ├── class-fw-option-type-range-slider.php │ │ ├── static │ │ │ ├── css │ │ │ │ └── styles.css │ │ │ ├── js │ │ │ │ └── scripts.js │ │ │ └── libs │ │ │ │ └── ion-range-slider │ │ │ │ ├── ion.rangeSlider.css │ │ │ │ └── ion.rangeSlider.min.js │ │ └── view.php │ │ ├── rgba-color-picker │ │ ├── class-fw-option-type-rgba-color-picker.php │ │ └── static │ │ │ ├── css │ │ │ └── styles.css │ │ │ └── js │ │ │ └── scripts.js │ │ ├── simple.php │ │ ├── slider │ │ ├── class-fw-option-type-short-slider.php │ │ ├── class-fw-option-type-slider.php │ │ ├── static │ │ │ ├── css │ │ │ │ └── styles.css │ │ │ ├── js │ │ │ │ └── scripts.js │ │ │ └── libs │ │ │ │ └── ion-range-slider │ │ │ │ ├── ion.rangeSlider.css │ │ │ │ └── ion.rangeSlider.min.js │ │ └── view.php │ │ ├── switch │ │ ├── class-fw-option-type-switch.php │ │ └── static │ │ │ ├── adaptive-switch │ │ │ ├── jquery.adaptive-switch.js │ │ │ └── styles.css │ │ │ ├── css │ │ │ └── styles.css │ │ │ └── js │ │ │ └── scripts.js │ │ ├── typography-v2 │ │ ├── class-fw-option-type-typography-v2.php │ │ ├── static │ │ │ ├── css │ │ │ │ └── styles.css │ │ │ └── js │ │ │ │ └── scripts.js │ │ └── view.php │ │ ├── typography │ │ ├── class-fw-option-type-typography.php │ │ ├── static │ │ │ ├── css │ │ │ │ └── styles.css │ │ │ ├── images │ │ │ │ └── google-fonts.png │ │ │ └── js │ │ │ │ └── scripts.js │ │ └── view.php │ │ ├── upload │ │ ├── class-fw-option-type-upload.php │ │ ├── static │ │ │ ├── css │ │ │ │ ├── any-files.css │ │ │ │ ├── images-only.css │ │ │ │ └── modal.css │ │ │ └── js │ │ │ │ ├── any-files.js │ │ │ │ └── images-only.js │ │ └── views │ │ │ ├── any-files.php │ │ │ └── images-only.php │ │ └── wp-editor │ │ ├── class-fw-option-type-wp-editor.php │ │ ├── includes │ │ └── class-fw-wp-editor-settings.php │ │ └── static │ │ ├── scripts.js │ │ └── styles.css ├── index.html ├── languages │ ├── fw-es_ES.mo │ ├── fw-es_ES.po │ ├── fw-fa_IR.mo │ ├── fw-fa_IR.po │ ├── fw-fr_FR.mo │ ├── fw-fr_FR.po │ ├── fw-he_IL.mo │ ├── fw-he_IL.po │ ├── fw-nl_NL.mo │ ├── fw-nl_NL.po │ ├── fw-ru_RU.mo │ ├── fw-ru_RU.po │ ├── fw.pot │ └── index.html ├── manifest.php ├── static │ ├── css │ │ ├── backend-options.css │ │ ├── fw.css │ │ ├── option-types.css │ │ └── selectize.css │ ├── img │ │ ├── logo-100.png │ │ ├── logo.svg │ │ ├── no-image.png │ │ └── sort-vertically.png │ ├── js │ │ ├── backend-customizer.js │ │ ├── backend-options.js │ │ ├── fw-events.js │ │ ├── fw-form-helpers.js │ │ ├── fw-reactive-options-registry.js │ │ ├── fw-reactive-options-simple-options.js │ │ ├── fw-reactive-options-undefined-option.js │ │ ├── fw-reactive-options.js │ │ ├── fw.js │ │ ├── ie-fixes.js │ │ └── option-types.js │ └── libs │ │ ├── backbone-relational │ │ └── backbone-relational.js │ │ ├── entypo │ │ ├── css │ │ │ └── entypo.css │ │ └── fonts │ │ │ ├── entypo.eot │ │ │ ├── entypo.svg │ │ │ ├── entypo.ttf │ │ │ └── entypo.woff │ │ ├── font-awesome │ │ ├── css │ │ │ └── font-awesome.min.css │ │ └── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ │ ├── jscrollpane │ │ ├── jquery.jscrollpane.css │ │ └── jquery.jscrollpane.min.js │ │ ├── linecons │ │ ├── css │ │ │ └── linecons.css │ │ └── fonts │ │ │ └── linecons.eot │ │ ├── lnr │ │ └── css │ │ │ └── lnr.css │ │ ├── moment │ │ └── moment-with-locales.min.js │ │ ├── mousewheel │ │ └── jquery.mousewheel.min.js │ │ ├── qtip │ │ ├── css │ │ │ ├── jquery.qtip.css │ │ │ └── jquery.qtip.min.css │ │ ├── jquery.qtip.js │ │ └── jquery.qtip.min.js │ │ ├── selectize │ │ ├── selectize.css │ │ └── selectize.min.js │ │ ├── typcn │ │ ├── css │ │ │ └── typcn.css │ │ └── fonts │ │ │ ├── typicons.eot │ │ │ ├── typicons.svg │ │ │ ├── typicons.ttf │ │ │ └── typicons.woff │ │ ├── unycon │ │ ├── LICENSE │ │ ├── README.md │ │ ├── changelog.txt │ │ ├── demo-files │ │ │ ├── demo.css │ │ │ └── demo.js │ │ ├── demo.html │ │ ├── fonts │ │ │ ├── Unycon.eot │ │ │ ├── Unycon.svg │ │ │ ├── Unycon.ttf │ │ │ └── Unycon.woff │ │ ├── iconmoon-app-selection.json.zip │ │ ├── index.html │ │ └── unycon.css │ │ └── uri │ │ └── URI.js └── views │ ├── about.php │ ├── backend-container-design-taxonomy.php │ ├── backend-option-design-customizer.php │ ├── backend-option-design-default.php │ ├── backend-option-design-empty.php │ ├── backend-option-design-taxonomy.php │ └── backend-settings-form.php ├── plugin-check-info.md ├── readme.txt ├── tests ├── bootstrap.php ├── framework │ └── class-wp-unyson-unit-test-case.php ├── phpunit.xml ├── readme.md ├── test-helpers.php ├── test-option-type.php └── test-wp-editor.php ├── uninstall.php └── unyson.php /.github/ISSUE_TEMPLATE: -------------------------------------------------------------------------------- 1 | Describe the issue with as much details as you can. 2 | If it's a bug, please give the exact steps how to reproduce the problem. 3 | -------------------------------------------------------------------------------- /.github/img/download-stable-version.svg: -------------------------------------------------------------------------------- 1 |

Download Stable Version

-------------------------------------------------------------------------------- /.github/img/phpstorm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/.github/img/phpstorm.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /framework/extensions/* 2 | 3 | !/framework/extensions/blog/ 4 | !/framework/extensions/update/ 5 | !/framework/extensions/clone-all.bash 6 | 7 | .idea 8 | node_modules/ 9 | package.json 10 | yarn.lock 11 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | sudo: false 4 | 5 | matrix: 6 | allow_failures: 7 | - php: 7.0 8 | include: 9 | - php: 5.2 10 | env: WP_VERSION=4.7 WP_MULTISITE=1 PHPLINT=1 11 | - php: 5.2 12 | env: WP_VERSION=4.7 13 | - php: 5.2 14 | env: WP_VERSION=4.6 15 | - php: 5.2 16 | env: WP_VERSION=4.5 17 | - php: 5.2 18 | env: WP_VERSION=4.4 19 | - php: 7.0 20 | env: WP_VERSION=4.7 COVERAGE=1 21 | 22 | dist: precise 23 | 24 | before_script: 25 | - phpenv local --unset 26 | - PLUGIN_SLUG=$(basename $(pwd)) 27 | - export WP_DEVELOP_DIR=/tmp/wordpress/ 28 | - git clone --depth=50 --branch="$WP_VERSION" git://develop.git.wordpress.org/ /tmp/wordpress 29 | - cd .. 30 | - cp -r "$PLUGIN_SLUG" "/tmp/wordpress/src/wp-content/plugins/$PLUGIN_SLUG" 31 | - cd /tmp/wordpress/ 32 | - cp wp-tests-config-sample.php wp-tests-config.php 33 | - sed -i "s/youremptytestdbnamehere/wordpress_tests/" wp-tests-config.php 34 | - sed -i "s/yourusernamehere/travis/" wp-tests-config.php 35 | - sed -i "s/yourpasswordhere//" wp-tests-config.php 36 | - mysql -e "CREATE DATABASE wordpress_tests;" -uroot 37 | - cd "/tmp/wordpress/src/wp-content/plugins/$PLUGIN_SLUG" 38 | - phpenv rehash 39 | 40 | script: 41 | - if [[ "$COVERAGE" == "1" ]]; then phpunit -c tests/phpunit.xml --coverage-clover build/logs/clover.xml; else phpunit -c tests/phpunit.xml; fi 42 | 43 | notifications: 44 | email: 45 | on_success: never 46 | on_failure: never 47 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # How to contribute 2 | 3 | ## Getting Started 4 | 5 | * Make sure you have a [GitHub account](https://github.com/signup/free) 6 | * Submit a ticket for your issue, assuming one does not already exist. 7 | * Clearly describe the issue including steps to reproduce when it is a bug. 8 | * Make sure you fill in the earliest version that you know has the issue. 9 | 10 | ## Making Changes 11 | 12 | * Fork the repository on GitHub. 13 | * Make the changes to your forked repository. 14 | * **Ensure you stick to the [WordPress Coding Standards](http://make.wordpress.org/core/handbook/coding-standards/php/).** 15 | * Ensure you use LF line endings - no crazy windows line endings. :) 16 | * When committing, reference your issue (#1234) and include a note about the fix. 17 | * Push the changes to your fork and submit a pull request on the master branch of the Unyson repository. Existing maintenance branches will be maintained of by Unyson developers. 18 | 19 | At this point you're waiting on us to merge your pull request. We'll review all pull requests, and make suggestions and changes if necessary. 20 | 21 | # Additional Resources 22 | 23 | * [General GitHub documentation](http://help.github.com/) 24 | * [GitHub pull request documentation](http://help.github.com/send-pull-requests/) 25 | * [Unyson Docs](http://manual.unyson.io/) 26 | -------------------------------------------------------------------------------- /framework/bootstrap.php: -------------------------------------------------------------------------------- 1 | {$component}->_init(); 67 | } 68 | 69 | foreach ($components as $component) { 70 | fw()->{$component}->_after_components_init(); 71 | } 72 | } 73 | 74 | /** 75 | * The framework is loaded 76 | */ 77 | do_action('fw_init'); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /framework/core/Fw.php: -------------------------------------------------------------------------------- 1 | manifest = new FW_Framework_Manifest($manifest); 41 | 42 | add_action('fw_init', array($this, '_check_requirements'), 1); 43 | } 44 | 45 | // components 46 | { 47 | $this->extensions = new _FW_Component_Extensions(); 48 | $this->backend = new _FW_Component_Backend(); 49 | $this->theme = new _FW_Component_Theme(); 50 | } 51 | } 52 | 53 | /** 54 | * @internal 55 | */ 56 | public function _check_requirements() 57 | { 58 | if (is_admin() && !$this->manifest->check_requirements()) { 59 | FW_Flash_Messages::add( 60 | 'fw_requirements', 61 | __('Framework requirements not met:', 'fw') .' '. $this->manifest->get_not_met_requirement_text(), 62 | 'warning' 63 | ); 64 | } 65 | } 66 | } 67 | 68 | /** 69 | * @return _FW Framework instance 70 | */ 71 | function fw() { 72 | static $FW = null; // cache 73 | 74 | if ($FW === null) { 75 | $FW = new _Fw(); 76 | } 77 | 78 | return $FW; 79 | } 80 | -------------------------------------------------------------------------------- /framework/core/components/extensions/class-fw-extension-default.php: -------------------------------------------------------------------------------- 1 | fw_html_tag( 11 | 'a', 12 | array( 13 | 'href' => fw_akg('extensions_page_link', $data, '#'), 14 | 'title' => __('Go to extensions page', 'fw'), 15 | 'target' => '_parent', 16 | ), 17 | __('Return to Extensions page', 'fw') 18 | ) 19 | ); 20 | 21 | $this->feedback(implode(' | ', (array)$update_actions)); 22 | 23 | if ($this->result) { 24 | // used for popup ajax form submit result 25 | $this->feedback(''); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/includes/class--fw-extensions-install-upgrader-skin.php: -------------------------------------------------------------------------------- 1 | fw_html_tag( 11 | 'a', 12 | array( 13 | 'href' => fw_akg('extensions_page_link', $data, '#'), 14 | 'title' => __('Go to extensions page', 'fw'), 15 | 'target' => '_parent', 16 | ), 17 | __('Return to Extensions page', 'fw') 18 | ) 19 | ); 20 | 21 | $this->feedback(implode(' | ', (array)$update_actions)); 22 | 23 | if ($this->result) { 24 | // used for popup ajax form submit result 25 | $this->feedback(''); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/includes/download-source/class--fw-ext-download-source-register.php: -------------------------------------------------------------------------------- 1 | register( new FW_Ext_Download_Source_Github() ); 6 | $download_sources->register( new FW_Ext_Download_Source_Bitbucket() ); 7 | $download_sources->register( new FW_Ext_Download_Source_Custom() ); 8 | } 9 | } 10 | 11 | add_action( 'fw_register_ext_download_sources', '_action_fw_register_ext_download_sources' ); 12 | -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/includes/parsedown/LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013 Emanuil Rusev, erusev.com 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/extension-page.css: -------------------------------------------------------------------------------- 1 | #fw-extension-page .fw-extension-page-title { 2 | padding-right: 0; 3 | } 4 | 5 | #fw-extension-page .fw-extension-page-title .button, 6 | #fw-extension-page .fw-extension-page-title .button-primary, 7 | #fw-extension-page .fw-extension-page-title .button-primary:active { 8 | vertical-align: middle; 9 | } 10 | 11 | #fw-extension-page .fw-flash-message + br { 12 | display: none; 13 | } 14 | 15 | 16 | #fw-extension-docs.fw-postbox > .insider { 17 | margin-top: 0 !important; 18 | } 19 | 20 | #fw-extension-docs hr { 21 | margin-left: -27px; 22 | margin-right: -27px; 23 | } -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/extension-page.js: -------------------------------------------------------------------------------- 1 | jQuery(function($){ 2 | $('#fw-extension-docs a:fw-external').attr('target', '_blank'); 3 | }); -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/disabled-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/disabled-bg.png -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnail-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnail-bg.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/analytics.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/analytics.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/backup.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/backup.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/backups.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/backups.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/breadcrumbs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/breadcrumbs.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/brizy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/brizy.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/events.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/events.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/feedback.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/feedback.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/forms.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/forms.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/index.html -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/learning.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/learning.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/mailer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/mailer.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/mega-menu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/mega-menu.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/page-builder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/page-builder.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/portfolio.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/portfolio.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/seo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/seo.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/sidebars.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/sidebars.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/sliders.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/sliders.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/social.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/social.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/styling.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/styling.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/translation.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/translation.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/img/thumbnails/wp-shortcodes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/img/thumbnails/wp-shortcodes.jpg -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/unyson-font-icon/fonts/icomoon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/unyson-font-icon/fonts/icomoon.eot -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/unyson-font-icon/fonts/icomoon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Generated by IcoMoon 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/unyson-font-icon/fonts/icomoon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/unyson-font-icon/fonts/icomoon.ttf -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/unyson-font-icon/fonts/icomoon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/core/components/extensions/manager/static/unyson-font-icon/fonts/icomoon.woff -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/static/unyson-font-icon/style.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'unyson-font-icon'; 3 | src:url('fonts/icomoon.eot?iganyx'); 4 | src:url('fonts/icomoon.eot?#iefixiganyx') format('embedded-opentype'), 5 | url('fonts/icomoon.woff?iganyx') format('woff'), 6 | url('fonts/icomoon.ttf?iganyx') format('truetype'), 7 | url('fonts/icomoon.svg?iganyx#icomoon') format('svg'); 8 | font-weight: normal; 9 | font-style: normal; 10 | } 11 | 12 | .toplevel_page_fw-extensions > .wp-menu-image:before { 13 | font-family: 'unyson-font-icon'; 14 | speak: none; 15 | font-style: normal; 16 | font-weight: normal; 17 | font-variant: normal; 18 | text-transform: none; 19 | line-height: 1; 20 | 21 | /* Better Font Rendering =========== */ 22 | -webkit-font-smoothing: antialiased; 23 | -moz-osx-font-smoothing: grayscale; 24 | 25 | content: "\e600"; 26 | font-size: 14px; 27 | line-height: 20px; 28 | } 29 | -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/views/delete-form.php: -------------------------------------------------------------------------------- 1 | 10 | 11 |

17 | 18 | 23 | 24 |

32 | 33 | 41 | 42 | 43 | 44 |

45 | 46 |

47 | -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/views/extension-page-header.php: -------------------------------------------------------------------------------- 1 | 13 |

14 | 15 | extensions->get($extension_name) || !fw()->extensions->get($extension_name)->get_settings_options()) { 29 | break; 30 | } 31 | ?> 35 | 36 | 37 | 49 |

50 |
51 | -------------------------------------------------------------------------------- /framework/core/components/extensions/manager/views/install-form.php: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 |

18 | 19 |

25 | 26 | 27 | 32 | 33 |

41 | 42 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /framework/core/exceptions/class-fw-option-type-exception.php: -------------------------------------------------------------------------------- 1 | fw_html_tag( 11 | 'a', 12 | array( 13 | 'href' => self_admin_url('update-core.php'), 14 | 'title' => __('Go to updates page', 'fw'), 15 | 'target' => '_parent', 16 | ), 17 | __('Return to Updates page', 'fw') 18 | ) 19 | ); 20 | 21 | /** 22 | * Filter the list of action links available following extensions update. 23 | * @param array $update_actions Array of plugin action links. 24 | */ 25 | $update_actions = apply_filters('fw_ext_update_extensions_complete_actions', $update_actions); 26 | 27 | if (!empty($update_actions)) { 28 | $this->feedback(implode(' | ', (array)$update_actions)); 29 | } 30 | } 31 | 32 | public function decrement_extension_update_count($extension_name) 33 | { 34 | $this->decrement_update_count('fw:extension:'. $extension_name); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /framework/extensions/update/includes/classes/class--fw-ext-update-framework-upgrader-skin.php: -------------------------------------------------------------------------------- 1 | decrement_update_count('fw'); 10 | 11 | $update_actions = array( 12 | 'updates_page' => fw_html_tag( 13 | 'a', 14 | array( 15 | 'href' => self_admin_url('update-core.php'), 16 | 'title' => __('Go to updates page', 'fw'), 17 | 'target' => '_parent', 18 | ), 19 | __('Return to Updates page', 'fw') 20 | ) 21 | ); 22 | 23 | /** 24 | * Filter the list of action links available following framework update. 25 | * @param array $update_actions Array of plugin action links. 26 | */ 27 | $update_actions = apply_filters('fw_ext_update_framework_complete_actions', $update_actions); 28 | 29 | if (!empty($update_actions)) { 30 | $this->feedback(implode(' | ', (array)$update_actions)); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /framework/extensions/update/includes/classes/class--fw-ext-update-theme-upgrader-skin.php: -------------------------------------------------------------------------------- 1 | decrement_update_count('fw:theme'); 10 | 11 | $update_actions = array( 12 | 'updates_page' => fw_html_tag( 13 | 'a', 14 | array( 15 | 'href' => self_admin_url('update-core.php'), 16 | 'title' => __('Go to updates page', 'fw'), 17 | 'target' => '_parent', 18 | ), 19 | __('Return to Updates page', 'fw') 20 | ) 21 | ); 22 | 23 | /** 24 | * Filter the list of action links available following theme update. 25 | * @param array $update_actions Array of plugin action links. 26 | */ 27 | $update_actions = apply_filters('fw_ext_update_theme_complete_actions', $update_actions); 28 | 29 | if (!empty($update_actions)) { 30 | $this->feedback(implode(' | ', (array)$update_actions)); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /framework/extensions/update/manifest.php: -------------------------------------------------------------------------------- 1 | extensions->get('update'); 4 | 5 | if (fw_current_screen_match(array('only' => array(array('id' => 'update-core'))))) { 6 | // Include only on update page 7 | 8 | wp_enqueue_style( 9 | 'fw-ext-'. $extension->get_name() .'-update-page', 10 | $extension->get_declared_URI('/static/css/admin-update-page.css'), 11 | array(), 12 | $extension->manifest->get_version() 13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /framework/extensions/update/static/css/admin-update-page.css: -------------------------------------------------------------------------------- 1 | #fw-ext-update-extensions .tablenav { 2 | display: none; 3 | } -------------------------------------------------------------------------------- /framework/helpers/class-fw-access-key.php: -------------------------------------------------------------------------------- 1 | get_key() !== 'whatever') { 13 | * trigger_error('Call denied', E_USER_ERROR); 14 | * } 15 | * 16 | * //... 17 | * } 18 | */ 19 | final class FW_Access_Key 20 | { 21 | private static $created_keys = array(); 22 | 23 | private $key; 24 | 25 | final public function get_key() 26 | { 27 | return $this->key; 28 | } 29 | 30 | /** 31 | * @param string $unique_key unique 32 | */ 33 | final public function __construct($unique_key) 34 | { 35 | if (isset(self::$created_keys[$unique_key])) { 36 | trigger_error('Key "'. $unique_key .'" already defined', E_USER_ERROR); 37 | } 38 | 39 | self::$created_keys[$unique_key] = true; 40 | 41 | $this->key = $unique_key; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /framework/helpers/class-fw-request.php: -------------------------------------------------------------------------------- 1 | key1][key2][key3] ) 71 | $multikey = str_replace('/', '][', $multikey) . ']'; 72 | 73 | // removes the first closed square bracket ( key1][key2][key3] => key1[key2][key3] ) 74 | $multikey = preg_replace('/\]/', '', $multikey, 1); 75 | 76 | return setcookie($multikey, $set_value, $expire, $path); 77 | } else { 78 | return self::get_set_key($multikey, $set_value, $_COOKIE); 79 | } 80 | } 81 | 82 | public static function REQUEST($multikey = null, $default_value = null) 83 | { 84 | return fw_stripslashes_deep_keys( 85 | $multikey === null 86 | ? $_REQUEST 87 | : fw_akg($multikey, $_REQUEST, $default_value) 88 | ); 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /framework/helpers/class-fw-session.php: -------------------------------------------------------------------------------- 1 | set_errors( $errors ); 13 | } 14 | 15 | public function get_errors() { 16 | return $this->errors; 17 | } 18 | 19 | protected function set_errors( array $errors ) { 20 | $this->errors = $errors; 21 | } 22 | } -------------------------------------------------------------------------------- /framework/helpers/exceptions/class-fw-form-not-found-exception.php: -------------------------------------------------------------------------------- 1 | register(new Allowed_Type_Class()) 8 | * @since 2.4.10 9 | */ 10 | abstract class FW_Type_Register { 11 | /** 12 | * Check if the type is instance of the required class (or other requirements) 13 | * @param FW_Type $type 14 | * @return bool|WP_Error 15 | */ 16 | abstract protected function validate_type(FW_Type $type); 17 | 18 | /** 19 | * @var FW_Type[] 20 | */ 21 | protected $types = array(); 22 | 23 | /** 24 | * Only these access keys will be able to access the registered types 25 | * @var array {'key': true} 26 | */ 27 | protected $access_keys = array(); 28 | 29 | final public function __construct($access_keys) { 30 | { 31 | if (is_string($access_keys)) { 32 | $access_keys = array( 33 | $access_keys => true, 34 | ); 35 | } elseif (!is_array($access_keys)) { 36 | trigger_error('Invalid access key', E_USER_ERROR); 37 | } 38 | 39 | $this->access_keys = $access_keys; 40 | } 41 | } 42 | 43 | public function register(FW_Type $type) { 44 | if (isset($this->task_types[$type->get_type()])) { 45 | throw new Exception('Type '. $type->get_type() .' already registered'); 46 | } elseif ( 47 | is_wp_error($validation_result = $this->validate_type($type)) 48 | || 49 | !$validation_result 50 | ) { 51 | throw new Exception( 52 | 'Invalid type '. $type->get_type() 53 | .(is_wp_error($validation_result) ? ': '. $validation_result->get_error_message() : '') 54 | ); 55 | } 56 | 57 | $this->types[$type->get_type()] = $type; 58 | } 59 | 60 | /** 61 | * @param FW_Access_Key $access_key 62 | * 63 | * @return FW_Type[] 64 | * @internal 65 | */ 66 | public function _get_types(FW_Access_Key $access_key) { 67 | if (!isset($this->access_keys[$access_key->get_key()])) { 68 | trigger_error('Method call denied', E_USER_ERROR); 69 | } 70 | 71 | return $this->types; 72 | } 73 | 74 | /** 75 | * @param FW_Access_Key $access_key 76 | * @param $type 77 | * 78 | * @return FW_Type|null 79 | * @internal 80 | * @since 2.5.12 81 | */ 82 | public function _get_type(FW_Access_Key $access_key, $type) { 83 | if (!isset($this->access_keys[$access_key->get_key()])) { 84 | trigger_error('Method call denied', E_USER_ERROR); 85 | } 86 | 87 | return isset($this->types[$type]) ? $this->types[$type] : null; 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /framework/helpers/type/class-fw-type.php: -------------------------------------------------------------------------------- 1 | '', 11 | ); 12 | } 13 | 14 | protected function _enqueue_static($id, $option, $values, $data) { 15 | // 16 | } 17 | 18 | protected function _render($containers, $values, $data) { 19 | $html = ''; 20 | 21 | foreach ( $containers as $id => &$box ) { 22 | if (empty($box['options'])) { 23 | continue; 24 | } 25 | 26 | unset( $box['attr']['id'] ); // do not allow id overwrite, it is sent in first argument of render_box() 27 | 28 | $html .= fw()->backend->render_box( 29 | 'fw-options-box-' . $id, 30 | empty( $box['title'] ) ? ' ' : $box['title'], 31 | fw()->backend->render_options( $box['options'], $values, $data ), 32 | array( 33 | 'attr' => $box['attr'] 34 | ) 35 | ); 36 | } 37 | 38 | if (!empty($html)) { 39 | $html = 40 | '
' 41 | . $html 42 | . '
'; 43 | } 44 | 45 | return $html; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /framework/includes/container-types/class-fw-container-type-undefined.php: -------------------------------------------------------------------------------- 1 | /* Undefined Container Type */

'; 23 | } 24 | 25 | /** 26 | * {@inheritdoc} 27 | */ 28 | protected function _get_defaults() { 29 | return array(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /framework/includes/container-types/popup/class-fw-container-type-popup.php: -------------------------------------------------------------------------------- 1 | 'small', // small, medium, large 11 | 'desc' => '', 12 | ); 13 | } 14 | 15 | protected function _enqueue_static($id, $option, $values, $data) { 16 | $uri = fw_get_framework_directory_uri('/includes/container-types/popup'); 17 | 18 | wp_enqueue_script( 19 | 'fw-container-type-'. $this->get_type(), 20 | $uri .'/scripts.js', 21 | array('jquery', 'fw-events', 'fw'), 22 | fw()->manifest->get_version() 23 | ); 24 | 25 | wp_enqueue_style('fw'); 26 | 27 | wp_enqueue_style( 28 | 'fw-container-type-'. $this->get_type(), 29 | $uri .'/styles.css', 30 | array(), 31 | fw()->manifest->get_version() 32 | ); 33 | } 34 | 35 | protected function _render($containers, $values, $data) { 36 | $html = ''; 37 | 38 | $defaults = $this->get_defaults(); 39 | 40 | foreach ($containers as $id => &$option) { 41 | { 42 | $attr = $option['attr']; 43 | 44 | $attr['data-modal-title'] = $option['title']; 45 | 46 | if (in_array($option['modal-size'], array('small', 'medium', 'large'))) { 47 | $attr['data-modal-size'] = $option['modal-size']; 48 | } else { 49 | $attr['data-modal-size'] = $defaults['modal-size']; 50 | } 51 | 52 | $attr['id'] = $data['id_prefix'] . $id; 53 | } 54 | 55 | $html .= 56 | '
' 57 | . '' 67 | . (empty($option['desc']) ? '' : ('')) 68 | . '' 71 | . '
'; 72 | } 73 | 74 | return $html; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /framework/includes/container-types/popup/scripts.js: -------------------------------------------------------------------------------- 1 | jQuery(function($){ 2 | var optionTypeClass = '.fw-container-type-popup', 3 | optionsModals = {}, 4 | getOptionsModal = function(id, data) { 5 | if (typeof optionsModals[id] == 'undefined') { 6 | var $option = data.$option, 7 | $options = data.$options, 8 | modal = optionsModals[id] = new fw.Modal({ 9 | title: $option.attr('data-modal-title'), 10 | size: $option.attr('data-modal-size') 11 | }), 12 | onOpen = function(){ 13 | $options.detach(); 14 | 15 | modal.content.$el.html('').append($options); 16 | 17 | $options.removeClass('fw-hidden'); 18 | }, 19 | onClose = function(){ 20 | $options.detach(); 21 | 22 | $options.addClass('fw-hidden'); 23 | 24 | $option.append($options); 25 | }; 26 | 27 | modal.frame.on('open', onOpen); 28 | modal.frame.on('close', onClose); 29 | } 30 | 31 | return optionsModals[id]; 32 | }; 33 | 34 | fwEvents.on('fw:options:init', function(data){ 35 | data.$elements.find(optionTypeClass +':not(.initialized)').each(function(){ 36 | var $option = $(this), 37 | $button = $option.find('> .popup-button-wrapper > .popup-button'), 38 | $options = $option.find('> .popup-options'); 39 | 40 | $button.on('click', function(){ 41 | getOptionsModal($option.attr('id'), { 42 | $option: $option, 43 | $options: $options 44 | }).open(); 45 | }); 46 | }).addClass('initialized'); 47 | }); 48 | }); -------------------------------------------------------------------------------- /framework/includes/container-types/popup/styles.css: -------------------------------------------------------------------------------- 1 | .fw-container-type-popup { 2 | padding: 24px 27px 21px; 3 | 4 | opacity: 0; 5 | transition: opacity ease 0.3s; 6 | -webkit-transition: opacity ease 0.3s; 7 | } 8 | 9 | .fw-container-type-popup.initialized { 10 | opacity: 1; 11 | } 12 | 13 | .fw-container-type-popup > .popup-desc { 14 | font-style: italic; 15 | color: #666; 16 | } -------------------------------------------------------------------------------- /framework/includes/container-types/simple.php: -------------------------------------------------------------------------------- 1 | &$group ) { 20 | // prepare attributes 21 | { 22 | $attr = isset( $group['attr'] ) ? $group['attr'] : array(); 23 | 24 | $attr['id'] = 'fw-backend-options-group-' . $id; 25 | 26 | if ( ! isset( $attr['class'] ) ) { 27 | $attr['class'] = 'fw-backend-options-group'; 28 | } else { 29 | $attr['class'] = 'fw-backend-options-group ' . $attr['class']; 30 | } 31 | } 32 | 33 | $html .= '
'; 34 | $html .= fw()->backend->render_options( $group['options'], $values, $data ); 35 | $html .= '
'; 36 | } 37 | 38 | return $html; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /framework/includes/container-types/tab/class-fw-container-type-tab.php: -------------------------------------------------------------------------------- 1 | '', 11 | ); 12 | } 13 | 14 | protected function _enqueue_static($id, $option, $values, $data) { 15 | // 16 | } 17 | 18 | protected function _render($containers, $values, $data) { 19 | return fw_render_view( 20 | dirname(__FILE__) .'/view.php', 21 | array( 22 | 'tabs' => &$containers, 23 | 'values' => &$values, 24 | 'options_data' => &$data, 25 | ) 26 | ); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /framework/includes/container-types/tab/view.php: -------------------------------------------------------------------------------- 1 | theme->get_config('lazy_tabs'); 9 | 10 | ?> 11 |
12 |
13 | 21 |
22 |
23 |
24 |
25 | &$tab): 27 | // prepare attributes 28 | { 29 | $attr = isset($tab['attr']) ? $tab['attr'] : array(); 30 | 31 | $lazy_tabs = isset($tab['lazy_tabs']) ? $tab['lazy_tabs'] : $global_lazy_tabs; 32 | 33 | $attr['id'] = 'fw-options-tab-'. esc_attr($tab_id); 34 | 35 | if (!isset($attr['class'])) { 36 | $attr['class'] = 'fw-options-tab'; 37 | } else { 38 | $attr['class'] = 'fw-options-tab '. $attr['class']; 39 | } 40 | 41 | if ($lazy_tabs) { 42 | $attr['data-fw-tab-html'] = fw()->backend->render_options( 43 | $tab['options'], $values, $options_data 44 | ); 45 | } 46 | } 47 | ?>
>backend->render_options($tab['options'], $values, $options_data); 49 | ?>
54 |
55 |
56 |
57 |
58 | -------------------------------------------------------------------------------- /framework/includes/customizer/class--fw-customizer-control-option-wrapper.php: -------------------------------------------------------------------------------- 1 | backend->_set_default_render_design('customizer'); 6 | ?> 7 |
8 | link() ?> /> 9 |
10 | backend->render_options( 12 | array($this->id => $this->setting->get_fw_option()), 13 | array($this->id => $this->value()), 14 | array(), 15 | 'customizer' 16 | ); 17 | ?> 18 |
19 |
20 | backend->_set_default_render_design(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /framework/includes/customizer/class--fw-customizer-setting-option.php: -------------------------------------------------------------------------------- 1 | fw_option; 18 | } 19 | 20 | public function sanitize($value) { 21 | if ( is_array( $value ) ) { 22 | return null; 23 | } 24 | 25 | $value = json_decode($value, true); 26 | 27 | if (is_null($value) || !is_array($value)) { 28 | return null; 29 | } 30 | 31 | $POST = array(); 32 | 33 | foreach ($value as $var) { 34 | fw_aks( 35 | fw_html_attr_name_to_array_multi_key($var['name'], true), 36 | $var['value'], 37 | $POST 38 | ); 39 | } 40 | 41 | $value = fw()->backend->option_type($this->fw_option['type'])->get_value_from_input( 42 | $this->fw_option, 43 | fw_akg(fw_html_attr_name_to_array_multi_key($this->id), $POST) 44 | ); 45 | 46 | return $value; 47 | } 48 | 49 | /** 50 | * {@inheritdoc} 51 | */ 52 | public function value() { 53 | return fw_db_option_storage_load( 54 | $this->fw_option_id, 55 | $this->fw_option, 56 | parent::value(), 57 | array('customizer' => true) 58 | ); 59 | } 60 | 61 | /** 62 | * {@inheritdoc} 63 | */ 64 | protected function update( $value ) { 65 | return parent::update( 66 | fw_db_option_storage_save( 67 | $this->fw_option_id, 68 | $this->fw_option, 69 | $value, 70 | array('customizer' => true) 71 | ) 72 | ); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /framework/includes/option-storage/class--fw-option-storage-type-register.php: -------------------------------------------------------------------------------- 1 | 3 // optional // hardcoded term id 6 | * 'term-meta' => 'hello_world' // optional (default: 'fw:opt:{option_id}') 7 | * 'key' => 'option_id/sub_key' // optional 8 | * ) 9 | */ 10 | class FW_Option_Storage_Type_Term_Meta extends FW_Option_Storage_Type { 11 | public function get_type() { 12 | return 'term-meta'; 13 | } 14 | 15 | /** 16 | * {@inheritdoc} 17 | */ 18 | protected function _save( $id, array $option, $value, array $params ) { 19 | if ($term_id = $this->get_term_id($option, $params)) { 20 | $meta_id = $this->get_meta_id($id, $option, $params); 21 | 22 | if (isset($option['fw-storage']['key'])) { 23 | $meta_value = get_term_meta($term_id, $meta_id, true); 24 | 25 | fw_aks($option['fw-storage']['key'], $value, $meta_value); 26 | 27 | update_term_meta($term_id, $meta_id, $meta_value); 28 | 29 | unset($meta_value); 30 | } else { 31 | update_term_meta($term_id, $meta_id, $value); 32 | } 33 | 34 | return fw()->backend->option_type($option['type'])->get_value_from_input( 35 | array('type' => $option['type']), null 36 | ); 37 | } else { 38 | return $value; 39 | } 40 | } 41 | 42 | /** 43 | * {@inheritdoc} 44 | */ 45 | protected function _load( $id, array $option, $value, array $params ) { 46 | if ($term_id = $this->get_term_id($option, $params)) { 47 | $meta_id = $this->get_meta_id($id, $option, $params); 48 | $meta_value = get_term_meta($term_id, $meta_id, true); 49 | 50 | if ($meta_value === '' && is_array($value)) { 51 | return $value; 52 | } 53 | 54 | if (isset($option['fw-storage']['key'])) { 55 | return fw_akg($option['fw-storage']['key'], $meta_value, $value); 56 | } else { 57 | return $meta_value; 58 | } 59 | } else { 60 | return $value; 61 | } 62 | } 63 | 64 | private function get_term_id($option, $params) { 65 | $term_id = null; 66 | 67 | if (!empty($option['fw-storage']['term-id'])) { 68 | $term_id = $option['fw-storage']['term-id']; 69 | } elseif (!empty($params['term-id'])) { 70 | $term_id = $params['term-id']; 71 | } 72 | 73 | $term_id = intval($term_id); 74 | 75 | if ($term_id > 0) { 76 | return $term_id; 77 | } else { 78 | return false; 79 | } 80 | } 81 | 82 | private function get_meta_id($id, $option, $params) { 83 | return empty($option['fw-storage']['term-meta']) 84 | ? 'fw:opt:'. $id 85 | : $option['fw-storage']['term-meta']; 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /framework/includes/option-storage/type/class-fw-option-storage-type-wp-option.php: -------------------------------------------------------------------------------- 1 | 'custom_wp_option_name' 6 | * 'key' => 'option_id/sub_key' // optional @since 2.5.1 7 | * ) 8 | */ 9 | class FW_Option_Storage_Type_WP_Option extends FW_Option_Storage_Type { 10 | public function get_type() { 11 | return 'wp-option'; 12 | } 13 | 14 | /** 15 | * {@inheritdoc} 16 | */ 17 | protected function _save( $id, array $option, $value, array $params ) { 18 | if ($wp_option = $this->get_wp_option($option, $params)) { 19 | if (isset($option['fw-storage']['key'])) { 20 | $wp_option_value = get_option($wp_option, array()); 21 | 22 | fw_aks($option['fw-storage']['key'], $value, $wp_option_value); 23 | 24 | update_option($wp_option, $wp_option_value, false); 25 | 26 | unset($wp_option_value); 27 | } else { 28 | if (empty($value)) { 29 | delete_option($wp_option); 30 | return $value; // Preserve value (don't return default below) because it can be false|0|array() 31 | } else { 32 | update_option($wp_option, $value, false); 33 | } 34 | } 35 | 36 | return fw()->backend->option_type($option['type'])->get_value_from_input( 37 | array('type' => $option['type']), null 38 | ); 39 | } else { 40 | return $value; 41 | } 42 | } 43 | 44 | /** 45 | * {@inheritdoc} 46 | */ 47 | protected function _load( $id, array $option, $value, array $params ) { 48 | if ($wp_option = $this->get_wp_option($option, $params)) { 49 | if (isset($option['fw-storage']['key'])) { 50 | $wp_option_value = get_option($wp_option, array()); 51 | 52 | return fw_akg($option['fw-storage']['key'], $wp_option_value, $value); 53 | } else { 54 | return get_option($wp_option, $value); 55 | } 56 | } else { 57 | return $value; 58 | } 59 | } 60 | 61 | private function get_wp_option($option, $params) { 62 | $wp_option = null; 63 | 64 | if (isset($params['post-id']) && wp_is_post_revision($params['post-id'])) { 65 | /** 66 | * Post revision is updated after real post update and it contains old option value 67 | * thus overwriting the new option value 68 | */ 69 | return false; 70 | } 71 | 72 | if (!empty($option['fw-storage']['wp-option'])) { 73 | $wp_option = $option['fw-storage']['wp-option']; 74 | } elseif (!empty($params['wp-option'])) { 75 | $wp_option = $params['wp-option']; 76 | } 77 | 78 | if ($wp_option) { 79 | return $wp_option; 80 | } else { 81 | return false; 82 | } 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /framework/includes/option-types/addable-box/static/css/styles.css: -------------------------------------------------------------------------------- 1 | .fw-option-type-addable-box { 2 | max-width: 100%; 3 | } 4 | 5 | .fw-option-type-addable-box.has-boxes.width-type-full { 6 | width: 9999px; 7 | } 8 | 9 | .fw-option-type-addable-box.has-boxes.width-type-fixed { 10 | width: 428px; 11 | /* same as .fw-backend-option-fixed-width */ 12 | } 13 | 14 | .fw-option-type-addable-box>.fw-option-boxes.ui-sortable>.fw-option-box>.fw-postbox { 15 | min-width: 100%; 16 | } 17 | 18 | .fw-option-type-addable-box>.fw-option-boxes.ui-sortable>.fw-option-box>.fw-postbox>.hndle { 19 | cursor: move !important; 20 | /* to rewrite .fw-postbox h3.hndle */ 21 | word-break: break-all; 22 | /* if box text is too long, do not move controls outside box */ 23 | position: relative; 24 | } 25 | 26 | .fw-option-type-addable-box>.fw-option-boxes.ui-sortable>.fw-option-box>.fw-postbox>.hndle>span { 27 | overflow: hidden; 28 | white-space: nowrap; 29 | max-width: 100%; 30 | display: block; 31 | } 32 | 33 | #wpbody-content .fw-option-type-addable-box .metabox-holder { 34 | padding: 0; 35 | margin: 0; 36 | } 37 | 38 | .fw-option-type-addable-box>.fw-option-boxes>.fw-option-box { 39 | margin-bottom: 20px; 40 | } 41 | 42 | .fw-option-type-addable-box>.fw-option-boxes.ui-sortable>.fw-option-box>.fw-postbox>.hndle span:after { 43 | content: '\00a0'; 44 | /*   - when title is empty, box has too small (broken) height */ 45 | } 46 | 47 | .fw-option-type-addable-box>.fw-option-boxes.ui-sortable>.fw-option-box>.fw-postbox>.hndle img { 48 | vertical-align: middle; 49 | } 50 | 51 | .fw-option-type-addable-box .fw-backend-option-design-customizer { 52 | padding: 15px; 53 | } 54 | 55 | 56 | /* Controls */ 57 | .fw-option-type-addable-box>.fw-option-boxes>.fw-option-box .hndle .fw-html-before-title:empty { 58 | display: none; 59 | } 60 | .fw-option-type-addable-box>.fw-option-boxes>.fw-option-box .postbox-header h2.hndle { 61 | border-bottom: none !important; 62 | } 63 | .rtl .fw-option-type-addable-box>.fw-option-boxes>.fw-option-box .hndle .fw-html-after-title { 64 | height: auto; 65 | left: 27px; 66 | right: auto; 67 | } 68 | 69 | .rtl .fw-option-type-addable-box .postbox .handlediv { 70 | padding: 0 12px; 71 | } 72 | 73 | .rtl .fw-option-type-addable-box .postbox-header .hndle { 74 | justify-content: right; 75 | } 76 | 77 | .fw-option-type-addable-box>.fw-option-boxes>.fw-option-box .hndle .fw-html-after-title .fw-option-box-controls .fw-option-box-control { 78 | text-decoration: none; 79 | } 80 | 81 | .fw-option-type-addable-box>.fw-option-boxes>.fw-option-box .hndle .fw-html-after-title .fw-option-box-controls .fw-option-box-control-wrapper { 82 | color: #cccccc; 83 | } 84 | 85 | /* end: Controls */ -------------------------------------------------------------------------------- /framework/includes/option-types/addable-popup/static/css/styles.css: -------------------------------------------------------------------------------- 1 | .fw-option-type-addable-popup .item { 2 | position: relative; 3 | background-color: #fff; 4 | min-height: 40px; 5 | cursor: pointer; 6 | } 7 | 8 | .fw-option-type-addable-popup .item .content { 9 | padding: 12px 30px; 10 | word-wrap: break-word; 11 | } 12 | 13 | .fw-option-type-addable-popup .item + .item { 14 | border-top: 1px dashed #E1E1E1; 15 | } 16 | 17 | .fw-option-type-addable-popup .items-wrapper { 18 | border: 1px solid #e1e1e1; 19 | margin-bottom: 20px; 20 | } 21 | 22 | .fw-option-type-addable-popup .delete-item { 23 | position: absolute; 24 | right: 7px; 25 | top:50%; 26 | margin-top: -10px; 27 | } 28 | 29 | .fw-option-type-addable-popup .clone-item { 30 | position: absolute; 31 | right: 25px; 32 | top:50%; 33 | margin-top: -8px; 34 | font-size:16px; 35 | opacity:0.4; 36 | } 37 | .fw-option-type-addable-popup .clone-item:hover{ 38 | opacity:0.7; 39 | } 40 | 41 | .fw-option-type-addable-popup .sort-item { 42 | position: absolute; 43 | left: 11px; 44 | top:50%; 45 | margin-top: -4px; 46 | width: 7px; 47 | } 48 | 49 | .fw-option-type-addable-popup .default-item, 50 | .fw-option-type-addable-popup:not(.is-sortable) .sort-item, 51 | .fw-option-type-addable-popup .items-wrapper.hide-clone .clone-item { 52 | display: none; 53 | } 54 | 55 | .fw-option-type-addable-popup:not(.is-sortable) .item .content { 56 | padding-left: 15px; 57 | } -------------------------------------------------------------------------------- /framework/includes/option-types/addable-popup/view.php: -------------------------------------------------------------------------------- 1 | 19 |
> 20 | 21 | backend->option_type('hidden')->render($id, array('value' => '~'), array( 22 | 'id_prefix' => $data['id_prefix'], 23 | 'name_prefix' => $data['name_prefix'], 24 | )); ?> 25 |
26 | $value): ?> 27 |
28 |
29 | backend->option_type('hidden')->render('', array('value' => json_encode($value)), array( 30 | 'id_prefix' => $data['id_prefix'] . $id . '-' . $key . '-', 31 | 'name_prefix' => $data['name_prefix'] . '[' . $id . ']', 32 | ));?> 33 |
34 | 35 | 36 |
37 | 38 | 39 |
40 | 41 |
42 |
43 |
44 | backend->option_type('hidden')->render('', array('value' => '[]'), array( 45 | 'id_prefix' => $data['id_prefix'] . $id . '-' . $increment_placeholder, 46 | 'name_prefix' => $data['name_prefix'] . '[' . $id . ']', 47 | )); ?> 48 |
49 | 50 | 51 |
52 | 53 | 54 |
55 | 'button', 58 | 'class' => 'button add-new-item', 59 | 'onclick' => 'return false;', 60 | 'data-increment-placeholder' => $increment_placeholder, 61 | ), fw_htmlspecialchars($option['add-button-text'])); 62 | ?> 63 |
64 | 65 | -------------------------------------------------------------------------------- /framework/includes/option-types/background-image/static/css/styles.css: -------------------------------------------------------------------------------- 1 | .fw-option-type-background-image > .type .fw-option-type-radio div { 2 | display: inline-block; 3 | margin-left: 15px; 4 | } 5 | 6 | .fw-option-type-background-image > .predefined, 7 | .fw-option-type-background-image > .custom { 8 | margin-top: 15px; 9 | } 10 | 11 | .fw-option-type-background-image div.fw-option-type-radio { 12 | margin: 0 0 9px -15px; 13 | font-size: 14px; 14 | } 15 | 16 | .fw-option-type-background-image.no-choices > .type { 17 | display: none; 18 | } 19 | 20 | .fw-option-type-background-image.no-choices > .predefined, 21 | .fw-option-type-background-image.no-choices > .custom { 22 | margin-top: 0; 23 | } -------------------------------------------------------------------------------- /framework/includes/option-types/class-fw-option-type-undefined.php: -------------------------------------------------------------------------------- 1 | array() 42 | ); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /framework/includes/option-types/color-picker/static/css/styles.css: -------------------------------------------------------------------------------- 1 | input.fw-option-type-color-picker { 2 | width: 70px !important; 3 | } 4 | 5 | @media (max-width: 782px) { 6 | input.fw-option-type-color-picker { 7 | width: 100px !important; 8 | } 9 | } 10 | 11 | input.fw-option-type-color-picker.iris-error { 12 | background-color: #ffebe8; 13 | border-color: #c00; 14 | color: #000; 15 | } 16 | 17 | .fw-option-type-color-picker-with-reset-default > .iris-palette-container { 18 | bottom: 27px !important; 19 | } 20 | 21 | .fw-option-type-color-picker-iris, 22 | .fw-option-type-color-picker-iris.iris-picker { 23 | z-index: 999; 24 | position: absolute; 25 | } 26 | 27 | .fw-option-type-color-picker-iris .fw-option-type-color-picker-reset-default { 28 | width: 139px; 29 | margin-top: 2px; 30 | cursor: pointer; 31 | } 32 | 33 | .fw-option-type-color-picker-iris .fw-option-type-color-picker-reset-default span { 34 | line-height: 16px; 35 | padding-left: 2px; 36 | float: left; 37 | } 38 | 39 | .fw-backend-option-input-type-color-picker .fw-option-help-in-input { 40 | top: 4px !important; 41 | } 42 | 43 | /* Fixes https://github.com/ThemeFuse/Unyson/issues/2275 */ 44 | #customize-controls .customize-pane-child > .customize-control:last-child > .fw-backend-customizer-option > div > .fw-backend-option-type-color-picker { 45 | padding-bottom: 170px; 46 | } 47 | 48 | /* Fixes https://github.com/ThemeFuse/Unyson/issues/2905 */ 49 | #customize-theme-controls > ul.customize-pane-child { 50 | height: 100% !important; 51 | } 52 | #customize-controls .customize-pane-child .customize-control:last-child .fw-backend-customizer-option .fw-backend-option-type-gradient { 53 | padding-bottom: 170px; 54 | } -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.ar.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.ar={days:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت","الأحد"],daysShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت","أحد"],daysMin:["ح","ن","ث","ع","خ","ج","س","ح"],months:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthsShort:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],today:"هذا اليوم",rtl:!0}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.az.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.az={days:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"],daysShort:["B.","B.e","Ç.a","Ç.","C.a","C.","Ş."],daysMin:["B.","B.e","Ç.a","Ç.","C.a","C.","Ş."],months:["Yanvar","Fevral","Mart","Aprel","May","İyun","İyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],monthsShort:["Yan","Fev","Mar","Apr","May","İyun","İyul","Avq","Sen","Okt","Noy","Dek"],today:"Bu gün",weekStart:1}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.bg.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.bg={days:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],daysShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],daysMin:["Н","П","В","С","Ч","П","С"],months:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthsShort:["Ян","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Ное","Дек"],today:"днес"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.bs.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.bs={days:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],daysShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],daysMin:["N","Po","U","Sr","Č","Pe","Su"],months:["Januar","Februar","Mart","April","Maj","Juni","Juli","August","Septembar","Oktobar","Novembar","Decembar"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],today:"Danas",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.ca.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.ca={days:["Diumenge","Dilluns","Dimarts","Dimecres","Dijous","Divendres","Dissabte"],daysShort:["Diu","Dil","Dmt","Dmc","Dij","Div","Dis"],daysMin:["dg","dl","dt","dc","dj","dv","ds"],months:["Gener","Febrer","Març","Abril","Maig","Juny","Juliol","Agost","Setembre","Octubre","Novembre","Desembre"],monthsShort:["Gen","Feb","Mar","Abr","Mai","Jun","Jul","Ago","Set","Oct","Nov","Des"],today:"Avui",monthsTitle:"Mesos",clear:"Esborrar",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.cs.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.cs={days:["Neděle","Pondělí","Úterý","Středa","Čtvrtek","Pátek","Sobota"],daysShort:["Ned","Pon","Úte","Stř","Čtv","Pát","Sob"],daysMin:["Ne","Po","Út","St","Čt","Pá","So"],months:["Leden","Únor","Březen","Duben","Květen","Červen","Červenec","Srpen","Září","Říjen","Listopad","Prosinec"],monthsShort:["Led","Úno","Bře","Dub","Kvě","Čer","Čnc","Srp","Zář","Říj","Lis","Pro"],today:"Dnes",clear:"Vymazat",weekStart:1,format:"dd.m.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.cy.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.cy={days:["Sul","Llun","Mawrth","Mercher","Iau","Gwener","Sadwrn"],daysShort:["Sul","Llu","Maw","Mer","Iau","Gwe","Sad"],daysMin:["Su","Ll","Ma","Me","Ia","Gwe","Sa"],months:["Ionawr","Chewfror","Mawrth","Ebrill","Mai","Mehefin","Gorfennaf","Awst","Medi","Hydref","Tachwedd","Rhagfyr"],monthsShort:["Ion","Chw","Maw","Ebr","Mai","Meh","Gor","Aws","Med","Hyd","Tach","Rha"],today:"Heddiw"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.da.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.da={days:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],daysShort:["søn","man","tir","ons","tor","fre","lør"],daysMin:["sø","ma","ti","on","to","fr","lø"],months:["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],monthsShort:["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],today:"I Dag",clear:"Nulstil"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.de.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.de={days:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],daysShort:["Son","Mon","Die","Mit","Don","Fre","Sam"],daysMin:["So","Mo","Di","Mi","Do","Fr","Sa"],months:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthsShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],today:"Heute",monthsTitle:"Monate",clear:"Löschen",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.el.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.el={days:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],daysShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],daysMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],months:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthsShort:["Ιαν","Φεβ","Μαρ","Απρ","Μάι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],today:"Σήμερα",clear:"Καθαρισμός",weekStart:1,format:"d/m/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.en-AU.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["en-AU"]={days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",monthsTitle:"Months",clear:"Clear",weekStart:1,format:"d/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.en-GB.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["en-GB"]={days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",monthsTitle:"Months",clear:"Clear",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.eo.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.eo={days:["dimanĉo","lundo","mardo","merkredo","ĵaŭdo","vendredo","sabato"],daysShort:["dim.","lun.","mar.","mer.","ĵaŭ.","ven.","sam."],daysMin:["d","l","ma","me","ĵ","v","s"],months:["januaro","februaro","marto","aprilo","majo","junio","julio","aŭgusto","septembro","oktobro","novembro","decembro"],monthsShort:["jan.","feb.","mar.","apr.","majo","jun.","jul.","aŭg.","sep.","okt.","nov.","dec."],today:"Hodiaŭ",clear:"Nuligi",weekStart:1,format:"yyyy-mm-dd"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.es.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.es={days:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"],daysShort:["Dom","Lun","Mar","Mié","Jue","Vie","Sáb"],daysMin:["Do","Lu","Ma","Mi","Ju","Vi","Sa"],months:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],monthsShort:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],today:"Hoy",monthsTitle:"Meses",clear:"Borrar",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.et.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.et={days:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"],daysShort:["Pühap","Esmasp","Teisip","Kolmap","Neljap","Reede","Laup"],daysMin:["P","E","T","K","N","R","L"],months:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],monthsShort:["Jaan","Veebr","Märts","Apr","Mai","Juuni","Juuli","Aug","Sept","Okt","Nov","Dets"],today:"Täna",clear:"Tühjenda",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.eu.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.eu={days:["Igandea","Astelehena","Asteartea","Asteazkena","Osteguna","Ostirala","Larunbata"],daysShort:["Ig","Al","Ar","Az","Og","Ol","Lr"],daysMin:["Ig","Al","Ar","Az","Og","Ol","Lr"],months:["Urtarrila","Otsaila","Martxoa","Apirila","Maiatza","Ekaina","Uztaila","Abuztua","Iraila","Urria","Azaroa","Abendua"],monthsShort:["Urt","Ots","Mar","Api","Mai","Eka","Uzt","Abu","Ira","Urr","Aza","Abe"],today:"Gaur"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.fa.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.fa={days:["یک‌شنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنج‌شنبه","جمعه","شنبه","یک‌شنبه"],daysShort:["یک","دو","سه","چهار","پنج","جمعه","شنبه","یک"],daysMin:["ی","د","س","چ","پ","ج","ش","ی"],months:["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],monthsShort:["ژان","فور","مار","آور","مه","ژون","ژوی","اوت","سپت","اکت","نوا","دسا"],today:"امروز",clear:"پاک کن",weekStart:1,format:"yyyy/mm/dd"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.fi.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.fi={days:["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],daysShort:["sun","maa","tii","kes","tor","per","lau"],daysMin:["su","ma","ti","ke","to","pe","la"],months:["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],monthsShort:["tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mar","jou"],today:"tänään",clear:"Tyhjennä",weekStart:1,format:"d.m.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.fo.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.fo={days:["Sunnudagur","Mánadagur","Týsdagur","Mikudagur","Hósdagur","Fríggjadagur","Leygardagur"],daysShort:["Sun","Mán","Týs","Mik","Hós","Frí","Ley"],daysMin:["Su","Má","Tý","Mi","Hó","Fr","Le"],months:["Januar","Februar","Marts","Apríl","Mei","Juni","Juli","August","Septembur","Oktobur","Novembur","Desembur"],monthsShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],today:"Í Dag",clear:"Reinsa"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.fr-CH.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.fr={days:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],daysShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],daysMin:["D","L","Ma","Me","J","V","S"],months:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthsShort:["Jan","Fév","Mar","Avr","Mai","Jui","Jul","Aou","Sep","Oct","Nov","Déc"],today:"Aujourd'hui",monthsTitle:"Mois",clear:"Effacer",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.fr.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.fr={days:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],daysShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],daysMin:["d","l","ma","me","j","v","s"],months:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthsShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],today:"Aujourd'hui",monthsTitle:"Mois",clear:"Effacer",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.gl.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.gl={days:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"],daysShort:["Dom","Lun","Mar","Mér","Xov","Ven","Sáb"],daysMin:["Do","Lu","Ma","Me","Xo","Ve","Sa"],months:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthsShort:["Xan","Feb","Mar","Abr","Mai","Xun","Xul","Ago","Sep","Out","Nov","Dec"],today:"Hoxe",clear:"Limpar",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.he.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.he={days:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת","ראשון"],daysShort:["א","ב","ג","ד","ה","ו","ש","א"],daysMin:["א","ב","ג","ד","ה","ו","ש","א"],months:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthsShort:["ינו","פבר","מרץ","אפר","מאי","יונ","יול","אוג","ספט","אוק","נוב","דצמ"],today:"היום",rtl:!0}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.hr.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.hr={days:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],daysShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],daysMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],months:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthsShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],today:"Danas"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.hu.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.hu={days:["vasárnap","hétfő","kedd","szerda","csütörtök","péntek","szombat"],daysShort:["vas","hét","ked","sze","csü","pén","szo"],daysMin:["V","H","K","Sze","Cs","P","Szo"],months:["január","február","március","április","május","június","július","augusztus","szeptember","október","november","december"],monthsShort:["jan","feb","már","ápr","máj","jún","júl","aug","sze","okt","nov","dec"],today:"ma",weekStart:1,clear:"töröl",titleFormat:"yyyy. MM",format:"yyyy.mm.dd"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.hy.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.hy={days:["Կիրակի","Երկուշաբթի","Երեքշաբթի","Չորեքշաբթի","Հինգշաբթի","Ուրբաթ","Շաբաթ"],daysShort:["Կրկ","Երկ","Երք","Չրք","Հնգ","Ուր","Շբթ"],daysMin:["Կրկ","Երկ","Երք","Չրք","Հնգ","Ուր","Շբթ"],months:["Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս","Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր"],monthsShort:["Հուն","Փետ","Մար","Ապր","Մայ","Հնս","Հլս","Օգս","Սեպ","Հոկ","Նմբ","Դեկ"],today:"Այսօր",clear:"Ջնջել",format:"dd.mm.yyyy",weekStart:1}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.id.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.id={days:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],daysShort:["Mgu","Sen","Sel","Rab","Kam","Jum","Sab"],daysMin:["Mg","Sn","Sl","Ra","Ka","Ju","Sa"],months:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],monthsShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Ags","Sep","Okt","Nov","Des"],today:"Hari Ini",clear:"Kosongkan"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.is.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.is={days:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],daysShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],daysMin:["Su","Má","Þr","Mi","Fi","Fö","La"],months:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthsShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],today:"Í Dag"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.it-CH.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.it={days:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],daysShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],daysMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],months:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthsShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],today:"Oggi",clear:"Cancella",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.it.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.it={days:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],daysShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],daysMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],months:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthsShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],today:"Oggi",monthsTitle:"Mesi",clear:"Cancella",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.ja.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.ja={days:["日曜","月曜","火曜","水曜","木曜","金曜","土曜"],daysShort:["日","月","火","水","木","金","土"],daysMin:["日","月","火","水","木","金","土"],months:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthsShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],today:"今日",format:"yyyy/mm/dd",titleFormat:"yyyy年mm月",clear:"クリア"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.ka.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.ka={days:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"],daysShort:["კვი","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],daysMin:["კვ","ორ","სა","ოთ","ხუ","პა","შა"],months:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომები","ნოემბერი","დეკემბერი"],monthsShort:["იან","თებ","მარ","აპრ","მაი","ივნ","ივლ","აგვ","სექ","ოქტ","ნოე","დეკ"],today:"დღეს",clear:"გასუფთავება",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.kh.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.kh={days:["អាទិត្យ","ចន្ទ","អង្គារ","ពុធ","ព្រហស្បតិ៍","សុក្រ","សៅរ៍","អាទិត្យ"],daysShort:["អា.ទិ","ចន្ទ","អង្គារ","ពុធ","ព្រ.ហ","សុក្រ","សៅរ៍","អា.ទិ"],daysMin:["អា.ទិ","ចន្ទ","អង្គារ","ពុធ","ព្រ.ហ","សុក្រ","សៅរ៍","អា.ទិ"],months:["មករា","កុម្ភះ","មិនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],monthsShort:["មករា","កុម្ភះ","មិនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],today:"ថ្ងៃនេះ",clear:"សំអាត"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.kk.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.kk={days:["Жексенбі","Дүйсенбі","Сейсенбі","Сәрсенбі","Бейсенбі","Жұма","Сенбі"],daysShort:["Жек","Дүй","Сей","Сәр","Бей","Жұм","Сен"],daysMin:["Жк","Дс","Сс","Ср","Бс","Жм","Сн"],months:["Қаңтар","Ақпан","Наурыз","Сәуір","Мамыр","Маусым","Шілде","Тамыз","Қыркүйек","Қазан","Қараша","Желтоқсан"],monthsShort:["Қаң","Ақп","Нау","Сәу","Мамыр","Мау","Шлд","Тмз","Қыр","Қзн","Қар","Жел"],today:"Бүгін",weekStart:1}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.ko.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.ko={days:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],daysShort:["일","월","화","수","목","금","토"],daysMin:["일","월","화","수","목","금","토"],months:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthsShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],today:"오늘",clear:"삭제",format:"yyyy-mm-dd",titleFormat:"yyyy년mm월",weekStart:0}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.kr.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.kr={days:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],daysShort:["일","월","화","수","목","금","토"],daysMin:["일","월","화","수","목","금","토"],months:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthsShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"]}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.lt.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.lt={days:["Sekmadienis","Pirmadienis","Antradienis","Trečiadienis","Ketvirtadienis","Penktadienis","Šeštadienis"],daysShort:["S","Pr","A","T","K","Pn","Š"],daysMin:["Sk","Pr","An","Tr","Ke","Pn","Št"],months:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthsShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],today:"Šiandien",monthsTitle:"Mėnesiai",clear:"Išvalyti",weekStart:1,format:"yyyy-mm-dd"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.lv.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.lv={days:["Svētdiena","Pirmdiena","Otrdiena","Trešdiena","Ceturtdiena","Piektdiena","Sestdiena"],daysShort:["Sv","P","O","T","C","Pk","S"],daysMin:["Sv","Pr","Ot","Tr","Ce","Pk","Se"],months:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthsShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],today:"Šodien",weekStart:1}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.me.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.me={days:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],daysShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],daysMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],months:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],today:"Danas",weekStart:1,clear:"Izbriši",format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.mk.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.mk={days:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"],daysShort:["Нед","Пон","Вто","Сре","Чет","Пет","Саб"],daysMin:["Не","По","Вт","Ср","Че","Пе","Са"],months:["Јануари","Февруари","Март","Април","Мај","Јуни","Јули","Август","Септември","Октомври","Ноември","Декември"],monthsShort:["Јан","Фев","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Ное","Дек"],today:"Денес",format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.mn.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.mn={days:["Ням","Даваа","Мягмар","Лхагва","Пүрэв","Баасан","Бямба"],daysShort:["Ням","Дав","Мяг","Лха","Пүр","Баа","Бям"],daysMin:["Ня","Да","Мя","Лх","Пү","Ба","Бя"],months:["Хулгана","Үхэр","Бар","Туулай","Луу","Могой","Морь","Хонь","Бич","Тахиа","Нохой","Гахай"],monthsShort:["Хул","Үхэ","Бар","Туу","Луу","Мог","Мор","Хон","Бич","Тах","Нох","Гах"],today:"Өнөөдөр",clear:"Тодорхой",format:"yyyy.mm.dd",weekStart:1}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.ms.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.ms={days:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],daysShort:["Aha","Isn","Sel","Rab","Kha","Jum","Sab"],daysMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],months:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthsShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],today:"Hari Ini",clear:"Bersihkan"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.nb.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.nb={days:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],daysShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],daysMin:["Sø","Ma","Ti","On","To","Fr","Lø"],months:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],monthsShort:["Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Des"],today:"I Dag",format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.nl-BE.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["nl-BE"]={days:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],daysShort:["zo","ma","di","wo","do","vr","za"],daysMin:["zo","ma","di","wo","do","vr","za"],months:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthsShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],today:"Vandaag",monthsTitle:"Maanden",clear:"Leegmaken",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.nl.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.nl={days:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],daysShort:["zo","ma","di","wo","do","vr","za"],daysMin:["zo","ma","di","wo","do","vr","za"],months:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthsShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],today:"Vandaag",monthsTitle:"Maanden",clear:"Wissen",weekStart:1,format:"dd-mm-yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.no.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.no={days:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],daysShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],daysMin:["Sø","Ma","Ti","On","To","Fr","Lø"],months:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],monthsShort:["Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Des"],today:"I dag",clear:"Nullstill",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.pl.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.pl={days:["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"],daysShort:["niedz.","pon.","wt.","śr.","czw.","piąt.","sob."],daysMin:["ndz.","pn.","wt.","śr.","czw.","pt.","sob."],months:["styczeń","luty","marzec","kwiecień","maj","czerwiec","lipiec","sierpień","wrzesień","październik","listopad","grudzień"],monthsShort:["sty.","lut.","mar.","kwi.","maj","cze.","lip.","sie.","wrz.","paź.","lis.","gru."],today:"dzisiaj",weekStart:1,clear:"wyczyść",format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.pt-BR.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["pt-BR"]={days:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"],daysShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],daysMin:["Do","Se","Te","Qu","Qu","Se","Sa"],months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthsShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],today:"Hoje",monthsTitle:"Meses",clear:"Limpar",format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.pt.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.pt={days:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"],daysShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],daysMin:["Do","Se","Te","Qu","Qu","Se","Sa"],months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthsShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],today:"Hoje",monthsTitle:"Meses",clear:"Limpar",format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.ro.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.ro={days:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"],daysShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],daysMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],months:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthsShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],today:"Astăzi",clear:"Șterge",weekStart:1}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.rs-latin.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["rs-latin"]={days:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],daysShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],daysMin:["N","Po","U","Sr","Č","Pe","Su"],months:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],today:"Danas",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.rs.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.rs={days:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],daysShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],daysMin:["Н","По","У","Ср","Ч","Пе","Су"],months:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthsShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],today:"Данас",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.ru.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.ru={days:["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"],daysShort:["Вск","Пнд","Втр","Срд","Чтв","Птн","Суб"],daysMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],months:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthsShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],today:"Сегодня",clear:"Очистить",format:"dd.mm.yyyy",weekStart:1}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.sk.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.sk={days:["Nedeľa","Pondelok","Utorok","Streda","Štvrtok","Piatok","Sobota"],daysShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],daysMin:["Ne","Po","Ut","St","Št","Pia","So"],months:["Január","Február","Marec","Apríl","Máj","Jún","Júl","August","September","Október","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],today:"Dnes",clear:"Vymazať",weekStart:1,format:"d.m.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.sl.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.sl={days:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],daysShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],daysMin:["Ne","Po","To","Sr","Če","Pe","So"],months:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],today:"Danes"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.sq.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.sq={days:["E Diel","E Hënë","E Martē","E Mërkurë","E Enjte","E Premte","E Shtunë"],daysShort:["Die","Hën","Mar","Mër","Enj","Pre","Shtu"],daysMin:["Di","Hë","Ma","Më","En","Pr","Sht"],months:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],monthsShort:["Jan","Shk","Mar","Pri","Maj","Qer","Korr","Gu","Sht","Tet","Nën","Dhjet"],today:"Sot"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.sr-latin.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["sr-latin"]={days:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],daysShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],daysMin:["N","Po","U","Sr","Č","Pe","Su"],months:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],today:"Danas",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.sr.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.sr={days:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],daysShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],daysMin:["Н","По","У","Ср","Ч","Пе","Су"],months:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthsShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],today:"Данас",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.sv.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.sv={days:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],daysShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],daysMin:["Sö","Må","Ti","On","To","Fr","Lö"],months:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],today:"Idag",format:"yyyy-mm-dd",weekStart:1,clear:"Rensa"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.sw.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.sw={days:["Jumapili","Jumatatu","Jumanne","Jumatano","Alhamisi","Ijumaa","Jumamosi"],daysShort:["J2","J3","J4","J5","Alh","Ij","J1"],daysMin:["2","3","4","5","A","I","1"],months:["Januari","Februari","Machi","Aprili","Mei","Juni","Julai","Agosti","Septemba","Oktoba","Novemba","Desemba"],monthsShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ago","Sep","Okt","Nov","Des"],today:"Leo"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.th.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.th={days:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัส","ศุกร์","เสาร์","อาทิตย์"],daysShort:["อา","จ","อ","พ","พฤ","ศ","ส","อา"],daysMin:["อา","จ","อ","พ","พฤ","ศ","ส","อา"],months:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthsShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],today:"วันนี้"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.tr.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.tr={days:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],daysShort:["Pz","Pzt","Sal","Çrş","Prş","Cu","Cts"],daysMin:["Pz","Pzt","Sa","Çr","Pr","Cu","Ct"],months:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthsShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],today:"Bugün",clear:"Temizle",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.uk.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.uk={days:["Неділя","Понеділок","Вівторок","Середа","Четвер","П'ятниця","Субота"],daysShort:["Нед","Пнд","Втр","Срд","Чтв","Птн","Суб"],daysMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],months:["Cічень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthsShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],today:"Сьогодні",clear:"Очистити",format:"dd.mm.yyyy",weekStart:1}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.vi.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.vi={days:["Chủ nhật","Thứ hai","Thứ ba","Thứ tư","Thứ năm","Thứ sáu","Thứ bảy"],daysShort:["CN","Thứ 2","Thứ 3","Thứ 4","Thứ 5","Thứ 6","Thứ 7"],daysMin:["CN","T2","T3","T4","T5","T6","T7"],months:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],monthsShort:["Th1","Th2","Th3","Th4","Th5","Th6","Th7","Th8","Th9","Th10","Th11","Th12"],today:"Hôm nay",clear:"Xóa",format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.zh-CN.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["zh-CN"]={days:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],daysShort:["周日","周一","周二","周三","周四","周五","周六"],daysMin:["日","一","二","三","四","五","六"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthsShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],today:"今日",clear:"清除",format:"yyyy年mm月dd日",titleFormat:"yyyy年mm月",weekStart:1}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/locales/bootstrap-datepicker.zh-TW.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["zh-TW"]={days:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],daysShort:["週日","週一","週二","週三","週四","週五","週六"],daysMin:["日","一","二","三","四","五","六"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthsShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],today:"今天",format:"yyyy年mm月dd日",weekStart:1,clear:"清除"}}(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/date-picker/static/js/scripts.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Script file that will manage the "map" option 3 | */ 4 | 5 | "use strict"; 6 | 7 | function fw_option_type_date_picker_initialize(object) { 8 | var defaults = { 9 | autoclose: true, 10 | format: "dd-mm-yyyy", 11 | weekStart: 1, 12 | startDate: new Date(), 13 | endDate: null, 14 | language: jQuery('html').attr('lang').split('-').shift() 15 | }; 16 | var options = JSON.parse(object.attr('data-fw-option-date-picker-opts')); 17 | 18 | var date = null; 19 | 20 | if (options.minDate != null || options.minDate != undefined) { 21 | date = options.minDate.split('-').map(Number); 22 | defaults.startDate = new Date(date[2], date[1] - 1, date[0]); 23 | } 24 | 25 | if (options.maxDate != null || options.maxDate != undefined) { 26 | date = options.maxDate.split('-').map(Number); 27 | defaults.endDate = new Date(date[2], date[1] - 1, date[0]); 28 | } 29 | 30 | if (options.weekStart != null || options.weekStart != undefined) { 31 | defaults.weekStart = options.weekStart; 32 | } 33 | 34 | object.datepicker(defaults); 35 | } 36 | 37 | jQuery(document).ready(function ($) { 38 | fwEvents.on('fw:options:init', function (data) { 39 | var obj = data.$elements.find('.fw-option-type-date-picker:not(.initialized)'); 40 | 41 | if (!obj.length) { 42 | return; 43 | } 44 | 45 | for (var i = 0; i < obj.length; i++) { 46 | fw_option_type_date_picker_initialize(jQuery(obj[i])); 47 | } 48 | 49 | obj.addClass('initialized'); 50 | }); 51 | }); -------------------------------------------------------------------------------- /framework/includes/option-types/datetime-picker/static/css/style.css: -------------------------------------------------------------------------------- 1 | .fw_xdsoft_datetimepicker.fw_xdsoft_noselect { 2 | z-index: 560100; /* bigger than fw.OptionsModal's z-index */ 3 | } 4 | 5 | .fw-backend-option-input-type-datetime-picker .fw-option-help-in-input { 6 | top: 4px !important; 7 | } 8 | .fw-option-type-datetime-picker input[readonly] { 9 | background-color: #fff; 10 | } -------------------------------------------------------------------------------- /framework/includes/option-types/datetime-picker/static/js/script.js: -------------------------------------------------------------------------------- 1 | (function($, fwe) { 2 | //jQuery.fwDatetimepicker.setLocale(jQuery('html').attr('lang').split('-').shift()); 3 | 4 | var init = function() { 5 | var $container = $(this), 6 | $input = $container.find('.fw-option-type-text'), 7 | data = { 8 | options: $container.data('datetime-attr'), 9 | el: $input, 10 | container: $container 11 | }; 12 | 13 | fwe.trigger('fw:options:datetime-picker:before-init', data); 14 | 15 | $input.fwDatetimepicker(data.options) 16 | .on('change', function (e) { 17 | fw.options.trigger.changeForEl( 18 | jQuery(e.target).closest('[data-fw-option-type="datetime-picker"]'), { 19 | value: e.target.value 20 | } 21 | ) 22 | }); 23 | }; 24 | 25 | fw.options.register('datetime-picker', { 26 | startListeningForChanges: $.noop, 27 | getValue: function (optionDescriptor) { 28 | return { 29 | value: $(optionDescriptor.el).find( 30 | '[data-fw-option-type="text"]' 31 | ).find('> input').val(), 32 | optionDescriptor: optionDescriptor 33 | } 34 | } 35 | }) 36 | 37 | fwe.on('fw:options:init', function(data) { 38 | data.$elements 39 | .find('.fw-option-type-datetime-picker').each(init) 40 | .addClass('fw-option-initialized'); 41 | }); 42 | 43 | })(jQuery, fwEvents); 44 | -------------------------------------------------------------------------------- /framework/includes/option-types/datetime-range/static/css/styles.css: -------------------------------------------------------------------------------- 1 | .fw-option-type-datetime-picker .delimiter, 2 | .fw-backend-option-input-type-datetime-range .delimiter { 3 | margin: 0 10px; 4 | } 5 | 6 | .fw-option-type-datetime-range .fw-backend-option-descriptor[data-fw-option-id=from], 7 | .fw-option-type-datetime-range .fw-backend-option-descriptor[data-fw-option-id=to], 8 | .fw-option-type-datetime-range .delimiter { 9 | display: inline-block; 10 | } 11 | 12 | .fw-option-type-datetime-range .fw-option-type-datetime-picker, 13 | .fw-backend-option-input-type-datetime-range .fw-option-type-datetime-picker { 14 | width: 150px; 15 | } 16 | 17 | 18 | .fw-backend-option-input-type-datetime-range .fw-option-help-in-input { 19 | top: 4px !important; 20 | } -------------------------------------------------------------------------------- /framework/includes/option-types/datetime-range/view.php: -------------------------------------------------------------------------------- 1 | 14 | 15 |
> 16 | 17 | backend->option_type( 'datetime-picker' )->render( 'from', array( 18 | 'type' => 'datetime-picker', 19 | 'value' => isset( $option['value']['from'] ) 20 | ? $option['value']['from'] 21 | : '', 22 | 'desc' => isset($option['descriptions']['from']) 23 | ? $option['descriptions']['from'] 24 | : false, 25 | 26 | 'datetime-picker' => isset($option['datetime-pickers']['from']) 27 | ? $option['datetime-pickers']['from'] 28 | : array(), 29 | 30 | 'attr' => array( 31 | 'class' => 'from' 32 | ) 33 | ), array( 34 | 'value' => isset( $data['value']['from'] ) 35 | ? $data['value']['from'] 36 | : $option['value']['from'], 37 | 'id_prefix' => $data['id_prefix'] . $id . '-', 38 | 'name_prefix' => $data['name_prefix'] . '[' . $id . ']', 39 | )); ?> 40 | 41 |
42 | 43 | backend->option_type( 'datetime-picker' )->render( 'to', array( 44 | 'type' => 'datetime-picker', 45 | 'value' => isset( $option['value']['to'] ) 46 | ? $option['value']['to'] 47 | : '', 48 | 49 | 'datetime-picker' => isset($option['datetime-pickers']['to']) 50 | ? $option['datetime-pickers']['to'] 51 | : array(), 52 | 53 | 'desc' => isset($option['descriptions']['from']) 54 | ? $option['descriptions']['from'] 55 | : false, 56 | 57 | 'attr' => array( 58 | 'class' => 'to' 59 | ) 60 | ), 61 | array( 62 | 'value' => isset( $data['value']['to'] ) 63 | ? $data['value']['to'] 64 | : $option['value']['to'], 65 | 'id_prefix' => $data['id_prefix'] . $id . '-', 66 | 'name_prefix' => $data['name_prefix'] . '[' . $id . ']', 67 | ) 68 | ); ?> 69 | 70 |
-------------------------------------------------------------------------------- /framework/includes/option-types/gradient/static/css/styles.css: -------------------------------------------------------------------------------- 1 | .fw-backend-option-input-type-gradient .fw-option-help-in-input { 2 | top: 4px !important; 3 | } 4 | 5 | .fw-option-type-gradient .primary-color { 6 | display: inline-block; 7 | } 8 | 9 | .fw-option-type-gradient .secondary-color { 10 | display: inline-block; 11 | } 12 | 13 | .fw-option-type-gradient .delimiter { 14 | display: inline-block; 15 | padding: 0 4px; 16 | } 17 | 18 | #side-sortables .fw-option-type-gradient .secondary-color, 19 | #side-sortables .fw-option-type-gradient .primary-color { 20 | width: inherit !important; 21 | } -------------------------------------------------------------------------------- /framework/includes/option-types/gradient/static/js/scripts.js: -------------------------------------------------------------------------------- 1 | (function($){ 2 | fwEvents.on('fw:options:init', function (data) { 3 | data.$elements.find('.fw-option.fw-option-type-gradient:not(.initialized)').each(function(){ 4 | var $option = $(this); 5 | 6 | // update secondary color when primary color has changed 7 | $option.on('fw:color:picker:changed', '.fw-option-type-color-picker.primary', function (event, data) { 8 | var $secondary = $option.find('.fw-option-type-color-picker.secondary:first'); 9 | 10 | if (!$secondary.hasClass('iris-initialized')) { 11 | $secondary 12 | .trigger('focus') // color-picker is lazy initialized on 'focus' 13 | .iris('hide'); 14 | } 15 | 16 | $secondary.val(data.ui.color.toString()).trigger('change'); 17 | }); 18 | }).addClass('initialized'); 19 | }); 20 | })(jQuery); -------------------------------------------------------------------------------- /framework/includes/option-types/gradient/view.php: -------------------------------------------------------------------------------- 1 | 21 |
> 22 |
23 | backend->option_type( 'color-picker' )->render( 25 | 'primary', 26 | array( 27 | 'type' => 'color-picker', 28 | 'value' => ( isset( $option['value']['primary'] ) && preg_match( $color_regex, $option['value']['primary'] ) ) 29 | ? $option['value']['primary'] 30 | : '#ffffff', 31 | 'attr' => array( 32 | 'class' => 'primary' 33 | ) 34 | ), 35 | array( 36 | 'value' => ( isset( $data['value']['primary'] ) && preg_match( $color_regex, $data['value']['primary'] ) ) 37 | ? $data['value']['primary'] 38 | : $option['value']['primary'], 39 | 'id_prefix' => $data['id_prefix'] . $id . '-', 40 | 'name_prefix' => $data['name_prefix'] . '[' . $id . ']', 41 | ) 42 | ); 43 | ?> 44 |
45 | 46 |
47 |
48 | backend->option_type( 'color-picker' )->render( 50 | 'secondary', 51 | array( 52 | 'type' => 'color-picker', 53 | 'value' => ( isset( $option['value']['secondary'] ) && preg_match( $color_regex, $option['value']['secondary'] ) ) 54 | ? $option['value']['secondary'] 55 | : '#ffffff', 56 | 'attr' => array( 57 | 'class' => 'secondary' 58 | ) 59 | ), 60 | array( 61 | 'value' => ( isset( $data['value']['secondary'] ) && preg_match( $color_regex, $data['value']['secondary'] ) ) 62 | ? $data['value']['secondary'] 63 | : $option['value']['secondary'], 64 | 'id_prefix' => $data['id_prefix'] . $id . '-', 65 | 'name_prefix' => $data['name_prefix'] . '[' . $id . ']', 66 | ) 67 | ); 68 | ?> 69 |
70 | 71 |
72 | -------------------------------------------------------------------------------- /framework/includes/option-types/icon-v2/includes/class-fw-icon-v2-favorites.php: -------------------------------------------------------------------------------- 1 | backend->option_type('icon-v2')->packs_loader->get_packs(true) 30 | ); 31 | } 32 | 33 | public function set_favorites_action() 34 | { 35 | $favorites = json_decode(FW_Request::POST( 'favorites' ), true); 36 | 37 | $this->set_favorites($favorites); 38 | 39 | $this->get_favorites_action(); 40 | } 41 | 42 | public function get_favorites_action() 43 | { 44 | wp_send_json( 45 | $this->get_favorites() 46 | ); 47 | } 48 | 49 | public function get_favorites() 50 | { 51 | return FW_WP_Option::get( 52 | $this->key, 53 | null, 54 | array() 55 | ); 56 | } 57 | 58 | public function set_favorites($favorites) 59 | { 60 | FW_WP_Option::set( 61 | $this->key, 62 | null, 63 | $favorites 64 | ); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /framework/includes/option-types/icon-v2/static/img/no-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/includes/option-types/icon-v2/static/img/no-image.png -------------------------------------------------------------------------------- /framework/includes/option-types/icon-v2/static/img/sauron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/includes/option-types/icon-v2/static/img/sauron.png -------------------------------------------------------------------------------- /framework/includes/option-types/icon-v2/static/img/transparent_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/includes/option-types/icon-v2/static/img/transparent_bg.png -------------------------------------------------------------------------------- /framework/includes/option-types/icon-v2/views/view.php: -------------------------------------------------------------------------------- 1 | $option['attr']['class'] . ' fw-icon-v2-preview-' . $option['preview_size'], 18 | 'id' => $option['attr']['id'], 19 | 'data-fw-modal-size' => $option['popup_size'] 20 | ); 21 | 22 | unset($option['attr']['class'], $option['attr']['id']); 23 | 24 | ?> 25 | 26 |
> 27 | type="hidden" /> 28 |
29 | 30 | -------------------------------------------------------------------------------- /framework/includes/option-types/icon/README.md: -------------------------------------------------------------------------------- 1 | ### Update Icons 2 | 3 | ```javascript 4 | // 1. Open http://fontawesome.io/icons/ 5 | // 2. Run this script 6 | // 3. Convert JSON to PHP Array https://www.google.com/#q=json+to+php+online 7 | 8 | var fa = { 9 | groups: { 10 | // 'id': 'Title' 11 | }, 12 | icons: { 13 | // 'fa fa-adjust': {'group': 'web-app'}, 14 | } 15 | }; 16 | 17 | var $section = jQuery('section#web-application'), 18 | group; 19 | 20 | do { 21 | group = { 22 | id: $section.attr('id'), 23 | title: $section.find('> h2').text() 24 | }; 25 | 26 | fa.groups[group.id] = group.title; 27 | 28 | $section.find('.fontawesome-icon-list i.fa').each(function(){ 29 | var icon = jQuery(this).attr('class'); 30 | 31 | if (fa.icons[icon]) return; 32 | 33 | fa.icons[icon] = {group: group.id}; 34 | }); 35 | 36 | $section = $section.next(); 37 | } while($section.length); 38 | 39 | console.log( JSON.stringify(fa) ); 40 | ``` -------------------------------------------------------------------------------- /framework/includes/option-types/icon/static/css/backend.css: -------------------------------------------------------------------------------- 1 | .fw-option-type-icon .option-type-icon-list { 2 | margin-top: 1em; 3 | padding-left: 1px; 4 | padding-bottom: 1px; 5 | overflow: auto; 6 | max-height: 10.1em; 7 | } 8 | 9 | .fw-option-type-icon .option-type-icon-list:first-child { 10 | margin-top: 0; 11 | } 12 | 13 | .fw-option-type-icon .option-type-icon-list:after { 14 | content: ''; 15 | display: block; 16 | clear: both; 17 | } 18 | 19 | .fw-option-type-icon .option-type-icon-list i { 20 | float: left; 21 | border: 1px solid #e1e1e1; 22 | margin: 0 0 -1px -1px; 23 | padding: 0.5em 0; 24 | background-color: #ffffff; 25 | text-align: center; 26 | min-width: 2em; 27 | } 28 | 29 | body.rtl .fw-option-type-icon .option-type-icon-list i { 30 | float: right; 31 | } 32 | 33 | .fw-option-type-icon .option-type-icon-list i:before { 34 | display: inline-block; 35 | } 36 | 37 | .fw-option-type-icon .option-type-icon-list i:hover { 38 | background: #0074a2; 39 | color: #fff; 40 | cursor: pointer; 41 | } 42 | .fw-option-type-icon .option-type-icon-list i.active:hover, 43 | .fw-option-type-icon .option-type-icon-list i.active{ 44 | background: #64bd1f; 45 | color: #fff; 46 | } 47 | 48 | .fw-option-type-icon .fw-backend-option { 49 | border-bottom: none; 50 | padding-bottom: 0; 51 | } 52 | 53 | .fw-option-type-icon .fw-options-tabs-wrapper .fw-options-tabs-contents { 54 | margin-top: 0 !important; 55 | } 56 | 57 | 58 | /* Let's get this party started */ 59 | 60 | .fw-option-type-icon .option-type-icon-list::-webkit-scrollbar { 61 | width: 5px; 62 | } 63 | 64 | 65 | /* Handle */ 66 | 67 | .fw-option-type-icon .option-type-icon-list::-webkit-scrollbar-thumb { 68 | -webkit-border-radius: 2px; 69 | border-radius: 2px; 70 | background: rgba(92,92,92,0.8); 71 | -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5); 72 | } 73 | 74 | .fw-option-type-icon .option-type-icon-list::-webkit-scrollbar-thumb:window-inactive { 75 | background: rgba(92,92,92,0.4); 76 | } 77 | -------------------------------------------------------------------------------- /framework/includes/option-types/icon/static/js/backend.js: -------------------------------------------------------------------------------- 1 | jQuery(function ($) { 2 | var optionTypeClass = '.fw-option-type-icon'; 3 | 4 | fwEvents.on('fw:options:init', function (data) { 5 | 6 | var $options = data.$elements.find(optionTypeClass +':not(.initialized)'); 7 | 8 | // handle click on an icon 9 | $options.find('.js-option-type-icon-item').on('click', function () { 10 | var $this = $(this); 11 | 12 | if ($this.hasClass('active')) { 13 | $this.removeClass('active'); 14 | $this.closest(optionTypeClass).find('input').val('').trigger('change'); 15 | } else { 16 | $this.addClass('active').siblings().removeClass('active'); 17 | $this.closest(optionTypeClass).find('input').val($this.data('value')).trigger('change'); 18 | } 19 | }); 20 | 21 | // handle changing active category 22 | $options.find('.js-option-type-icon-dropdown') 23 | .on('change', function () { 24 | var $this = $(this); 25 | var group = $this.val(); 26 | 27 | $this.closest(optionTypeClass).find('.js-option-type-icon-item').each(function () { 28 | $(this).toggle(group == 'all' || group == $(this).data('group')); 29 | }); 30 | }) 31 | .trigger('change'); 32 | 33 | $options.addClass('initialized'); 34 | 35 | }); 36 | 37 | }); 38 | -------------------------------------------------------------------------------- /framework/includes/option-types/icon/view.php: -------------------------------------------------------------------------------- 1 | $option['attr']['class'], 12 | 'id' => $option['attr']['id'], 13 | ); 14 | unset($option['attr']['class'], $option['attr']['id']); 15 | 16 | $icons = &$set['icons']; 17 | 18 | // build $groups array based on $icons 19 | $groups = array(); 20 | foreach ($icons as $icon_tab) { 21 | $group_id = $icon_tab['group']; 22 | $groups[$group_id] = $set['groups'][$group_id]; 23 | } 24 | 25 | ksort($icons); 26 | ksort($groups); 27 | 28 | ?> 29 |
> 30 | 31 | type="hidden" /> 32 | 33 |
34 | 35 | 1): ?> 36 |
37 | 46 |
47 | 48 | 49 |
50 | $icon_tab) { 52 | $active = ($data['value'] == $icon_id) ? 'active' : ''; 53 | echo fw_html_tag('i', array( 54 | 'class' => "$icon_id js-option-type-icon-item $active", 55 | 'data-value' => $icon_id, 56 | 'data-group' => $icon_tab['group'] 57 | ), true); 58 | } 59 | ?> 60 |
61 | 62 |
63 | 64 |
65 | -------------------------------------------------------------------------------- /framework/includes/option-types/image-picker/static/css/styles.css: -------------------------------------------------------------------------------- 1 | .fw-option-type-image-picker .ui-tooltip { 2 | width: 100px; 3 | } 4 | 5 | .fw-option-type-image-picker ul.thumbnails.image_picker_selector { 6 | overflow: auto; 7 | list-style-image: none; 8 | list-style-position: outside; 9 | list-style-type: none; 10 | padding: 0; 11 | margin: 0 0 -5px 0; 12 | } 13 | 14 | .fw-option-type-image-picker ul.thumbnails.image_picker_selector li.group_title { 15 | float: none; 16 | } 17 | 18 | .fw-option-type-image-picker ul.thumbnails.image_picker_selector li { 19 | margin: 0 5px 5px 0; 20 | float: left; 21 | } 22 | 23 | .fw-option-type-image-picker ul.thumbnails.image_picker_selector li:last-child { 24 | margin-right: 0; 25 | } 26 | 27 | .fw-option-type-image-picker ul.thumbnails.image_picker_selector li:hover { 28 | cursor: pointer; 29 | } 30 | 31 | .fw-option-type-image-picker ul.thumbnails.image_picker_selector li .thumbnail { 32 | overflow: hidden; 33 | -webkit-user-select: none; 34 | border-radius: 2px; 35 | -moz-user-select: none; 36 | -ms-user-select: none; 37 | } 38 | 39 | .fw-option-type-image-picker ul.thumbnails.image_picker_selector li .thumbnail img { 40 | -webkit-user-drag: none; 41 | } 42 | 43 | .fw-option-type-image-picker ul.thumbnails.image_picker_selector li .thumbnail.selected { 44 | border: 3px solid #64bd1f; 45 | } 46 | 47 | .fw-option-type-image-picker ul.thumbnails.image_picker_selector li .thumbnail { 48 | line-height: 0; 49 | border: 3px solid transparent; 50 | } 51 | 52 | .fw-option-type-image-picker ul.thumbnails.image_picker_selector li .thumbnail.selected:hover { 53 | border: 3px solid #64bd1f; 54 | } 55 | 56 | .fw-option-type-image-picker ul.thumbnails.image_picker_selector li .thumbnail:hover { 57 | border: 3px solid #dddddd; 58 | } 59 | 60 | .fw-option-type-image-picker li .thumbnail { 61 | position: relative; 62 | padding: 2px; 63 | } 64 | 65 | .fw-option-type-image-picker ul.thumbnails.image_picker_selector li .thumbnail.selected:after { 66 | content: "\f147"; 67 | font-family: dashicons; 68 | background-color: #64bd1f; 69 | position: absolute; 70 | right: 0px; 71 | bottom: 0px; 72 | border-top-left-radius: 2px; 73 | color: #fff; 74 | line-height: normal; 75 | font-size: 20px; 76 | padding: 1px 0 0 1px; 77 | } 78 | 79 | .fw-option-type-image-picker .pre-loaded-images { 80 | height: 1px; 81 | width: 1px; 82 | overflow: hidden; 83 | position: absolute; 84 | } 85 | 86 | .fw-option-type-image-picker select{ 87 | display: none; 88 | } 89 | 90 | .qtip .qtip-content img.fw-option-type-image-picker-large-image { 91 | display: block; 92 | } -------------------------------------------------------------------------------- /framework/includes/option-types/map/static/css/style.css: -------------------------------------------------------------------------------- 1 | .fw-option-maps-tab.second { 2 | display: none; 3 | } 4 | 5 | @media (min-width: 783px) { 6 | .fw-option-maps-tab.second .inner { 7 | padding-right: 10px; 8 | } 9 | 10 | .fw-force-xs .fw-option-maps-tab.second .inner { 11 | padding-right: 0; 12 | } 13 | } 14 | 15 | .fw-option-type-map .map-googlemap { 16 | height: 218px; 17 | } 18 | 19 | .fw-option-type-map .fw-option-map-inputs { 20 | margin-bottom: 10px; 21 | } 22 | 23 | .fw-option-maps-toggle { 24 | font-size: 12px; 25 | text-decoration: none; 26 | } 27 | 28 | .pac-container { 29 | z-index: 160005; 30 | } -------------------------------------------------------------------------------- /framework/includes/option-types/multi-select/static/css/style.css: -------------------------------------------------------------------------------- 1 | .fw-option-type-multi-select .selectize-input { 2 | padding: 4px 6px; 3 | } 4 | 5 | .fw-option-type-multi-select .selectize-input.focus.input-active.dropdown-active:before, 6 | .fw-option-type-multi-select .selectize-input.focus.input-active.dropdown-active:before { 7 | display: none; 8 | } 9 | 10 | .fw-backend-option-input-type-multi-select .fw-option-help-in-input { 11 | top: 4px !important; 12 | } 13 | 14 | .fw-backend-option-type-multi-select .selectize-control .selectize-dropdown .selectize-dropdown-content div > .type:before, 15 | .fw-backend-option-type-multi-select .selectize-control .selectize-input > div > .type:before { 16 | content: "("; 17 | margin-right: 1px; 18 | } 19 | 20 | .fw-backend-option-type-multi-select .selectize-control .selectize-dropdown .selectize-dropdown-content div > .type:after, 21 | .fw-backend-option-type-multi-select .selectize-control .selectize-input > div > .type:after { 22 | content: ")"; 23 | margin-left: 1px; 24 | } 25 | 26 | .fw-backend-option-type-multi-select .selectize-control .selectize-dropdown .selectize-dropdown-content div > .type, 27 | .fw-backend-option-type-multi-select .selectize-control .selectize-input > div > .type { 28 | opacity: .5; 29 | font-size: 80%; 30 | margin-left: 5px; 31 | } -------------------------------------------------------------------------------- /framework/includes/option-types/multi-upload/static/css/any-files.css: -------------------------------------------------------------------------------- 1 | .fw-option-type-multi-upload.any-files.empty span { 2 | display: none; 3 | } 4 | .fw-option-type-multi-upload.any-files span { 5 | display: inline-block; 6 | vertical-align: middle; 7 | margin-right: 5px; 8 | } 9 | .fw-option-type-multi-upload.any-files em { 10 | font-style: normal; 11 | vertical-align: middle; 12 | } 13 | .fw-option-type-multi-upload.any-files a { 14 | outline: none; 15 | } 16 | .fw-option-type.any-files button { 17 | vertical-align: middle; 18 | } 19 | 20 | 21 | .fw-backend-option-input-type-multi-upload .fw-option-help-in-input { 22 | top: 4px !important; 23 | } -------------------------------------------------------------------------------- /framework/includes/option-types/multi-upload/static/css/modal.css: -------------------------------------------------------------------------------- 1 | /* bigger z-index: make sure it's bigger than fw.OptionsModal's z-index (but do not increase this too much to not affect others) */ 2 | 3 | .fw-option-type-multi-upload .media-modal { 4 | z-index: 170001; 5 | } 6 | 7 | .fw-option-type-multi-upload .media-modal-backdrop { 8 | z-index: 170000; 9 | } 10 | 11 | .wp-customizer .fw-option-type-multi-upload .media-modal { 12 | z-index: 560101; 13 | } 14 | 15 | .wp-customizer .fw-option-type-multi-upload .media-modal-backdrop { 16 | z-index: 560100; 17 | } 18 | 19 | /* end: bigger z-index */ 20 | 21 | 22 | .fw-option-type-multi-upload .delete-attachment { 23 | display: none; 24 | } -------------------------------------------------------------------------------- /framework/includes/option-types/multi-upload/views/any-files.php: -------------------------------------------------------------------------------- 1 | 9 | 10 | 18 |
> 19 | /> 20 | 21 | 22 | 23 | 24 | 25 |
-------------------------------------------------------------------------------- /framework/includes/option-types/multi-upload/views/images-only.php: -------------------------------------------------------------------------------- 1 | 10 |
> 11 | /> 12 |
13 | 14 |
15 | <?php esc_attr_e('No image', 'fw') ?> 16 |
17 | 18 | 19 | 20 | 21 | 26 |
27 | <?php echo esc_attr($attachment_filename); ?> 28 | 29 |
30 | 31 | 32 |
33 |

34 |
'. 36 | ''. esc_attr__('No image', 'fw') .''. 37 | '
' 38 | ); ?>"> 39 |
'. 41 | '<%- data.alt %>'. 42 | ''. 43 | '' 44 | ); ?>"> 45 | 46 | -------------------------------------------------------------------------------- /framework/includes/option-types/multi/class-fw-option-type-multi.php: -------------------------------------------------------------------------------- 1 | get_type(), 24 | fw_get_framework_directory_uri('/includes/option-types/'. $this->get_type() .'/static/css/styles.css'), 25 | array(), 26 | fw()->manifest->get_version() 27 | ); 28 | 29 | $enqueue = false; 30 | } 31 | 32 | fw()->backend->enqueue_options_static($option['inner-options']); 33 | 34 | return true; 35 | } 36 | 37 | /** 38 | * @internal 39 | */ 40 | protected function _render($id, $option, $data) 41 | { 42 | if (empty($data['value'])) { 43 | $data['value'] = array(); 44 | } 45 | 46 | $div_attr = $option['attr']; 47 | unset($div_attr['name'], $div_attr['value']); 48 | 49 | return '
'. 50 | fw()->backend->render_options($option['inner-options'], $data['value'], array( 51 | 'id_prefix' => $data['id_prefix'] . $id .'-', 52 | 'name_prefix' => $data['name_prefix'] .'['. $id .']', 53 | )). 54 | '
'; 55 | } 56 | 57 | public function _get_data_for_js($id, $option, $data = array()) { 58 | return false; 59 | } 60 | 61 | public function _default_label($id, $option) { 62 | return false; 63 | } 64 | 65 | /** 66 | * @internal 67 | */ 68 | protected function _get_value_from_input($option, $input_value) 69 | { 70 | if ( is_array($input_value) || empty($option['value']) ) { 71 | $value = array(); 72 | } else { 73 | $value = $option['value']; 74 | } 75 | 76 | foreach (fw_extract_only_options($option['inner-options']) as $inner_id => $inner_option) { 77 | $value[$inner_id] = fw()->backend->option_type($inner_option['type'])->get_value_from_input( 78 | isset($value[$inner_id]) 79 | ? array_merge($inner_option, array('value' => $value[$inner_id])) 80 | : $inner_option, 81 | isset($input_value[$inner_id]) ? $input_value[$inner_id] : null 82 | ); 83 | } 84 | 85 | return $value; 86 | } 87 | 88 | /** 89 | * @internal 90 | */ 91 | public function _get_backend_width_type() 92 | { 93 | return 'full'; 94 | } 95 | 96 | /** 97 | * @internal 98 | */ 99 | protected function _get_defaults() 100 | { 101 | return array( 102 | 'inner-options' => array(), 103 | 'value' => array(), 104 | ); 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /framework/includes/option-types/multi/static/css/styles.css: -------------------------------------------------------------------------------- 1 | .fw-backend-option-type-multi { 2 | padding: 0 !important; 3 | } 4 | 5 | .fw-option-type-multi > .fw-backend-option { 6 | border-bottom-width: 0; 7 | } 8 | 9 | .fw-option-type-multi > .fw-backend-option.fw-backend-option-type-multi + .fw-backend-option.fw-backend-option-type-multi { 10 | border-top-width: 1px; 11 | } 12 | 13 | /* show options separator borders */ 14 | 15 | .fw-option-type-multi.fw-option-type-multi-show-borders > .fw-backend-option { 16 | border-bottom-width: 1px; 17 | } 18 | 19 | .fw-option-type-multi.fw-option-type-multi-show-borders > .fw-backend-option:last-child { 20 | border-bottom-width: 0; 21 | } 22 | 23 | /* end: show options separator borders */ 24 | 25 | .fw-option-type-multi:not(.fw-option-type-multi-show-borders) > .fw-backend-option:not(:last-child) { 26 | padding-bottom: 0; 27 | } 28 | 29 | .fw-backend-option-type-multi.fw-backend-option-design-customizer .fw-option-type-multi > .fw-backend-option { 30 | padding: 5px 0 10px; 31 | } -------------------------------------------------------------------------------- /framework/includes/option-types/oembed/static/css/styles.css: -------------------------------------------------------------------------------- 1 | .fw-oembed-preview img, 2 | .fw-oembed-preview iframe, 3 | .fw-oembed-preview embed 4 | { 5 | max-width: 100%; 6 | vertical-align: middle; 7 | } 8 | 9 | .fw-oembed-preview a { 10 | display: inline-block; 11 | } 12 | 13 | .fw-oembed-preview img { 14 | display: block; 15 | height: auto; 16 | } 17 | .fw-oembed-preview { 18 | padding-top: 7px; 19 | } -------------------------------------------------------------------------------- /framework/includes/option-types/oembed/static/js/oembed.js: -------------------------------------------------------------------------------- 1 | (function ($, _, fwEvents) { 2 | 3 | var is_url = function(str) { 4 | var pattern = new RegExp(/^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/, 'i'); 5 | return pattern.test(str); 6 | }; 7 | 8 | var oembed = function () { 9 | var $wrapper = $(this); 10 | var $input = $wrapper.find('input[type=text]'); 11 | var $iframeWrapper = $wrapper.find('.fw-oembed-preview'); 12 | 13 | $input.on('input', 14 | _.debounce(function () { 15 | if( $input.val() && is_url( $input.val() ) ) { 16 | wp.ajax.post( 17 | 'get_oembed_response', 18 | { 19 | '_nonce': $wrapper.data('nonce'), 20 | 'preview': $wrapper.data('preview'), 21 | 'url': $input.val() 22 | }).done(function (data) { 23 | $iframeWrapper.html(data.response); 24 | }).fail(function () { 25 | $iframeWrapper.html(''); 26 | console.error('Get Oembed Response: Ajax error.', error); 27 | }) 28 | } else { 29 | $iframeWrapper.html(''); 30 | } 31 | }, 300) 32 | ); 33 | }; 34 | 35 | fwEvents.on('fw:options:init', function (data) { 36 | data.$elements 37 | .find('.fw-option-type-oembed:not(.fw-option-initialized)').each(oembed) 38 | .addClass('fw-option-initialized'); 39 | }); 40 | })(jQuery, _, fwEvents); 41 | -------------------------------------------------------------------------------- /framework/includes/option-types/oembed/view.php: -------------------------------------------------------------------------------- 1 | 19 |
> 20 | 21 |
22 | /> 23 |
24 |
25 | $option['preview']['height'], 30 | 'width' => $option['preview']['width'] 31 | ) ) : 32 | wp_oembed_get( $value, array( 33 | 'height' => $option['preview']['height'], 34 | 'width' => $option['preview']['width'] 35 | ) ); 36 | 37 | echo $iframe; 38 | } 39 | ?> 40 |
41 |
-------------------------------------------------------------------------------- /framework/includes/option-types/popup/static/css/styles.css: -------------------------------------------------------------------------------- 1 | .fw-option-type-addable-popup .item{ 2 | position: relative; 3 | background-color: #fff; 4 | min-height: 40px; 5 | cursor: pointer; 6 | } 7 | 8 | .fw-option-type-addable-popup .item .content{ 9 | padding: 12px 30px; 10 | 11 | } 12 | 13 | .fw-option-type-addable-popup .item:not(.default):not(.disabled) + .item:not(.default):not(.disabled){ 14 | border-top: 1px dashed #E1E1E1; 15 | } 16 | 17 | .fw-option-type-addable-popup .items-wrapper{ 18 | border: 1px solid #e1e1e1; 19 | } 20 | 21 | .fw-option-type-addable-popup .item.disabled{ 22 | background-color: #f8f8f8; 23 | } -------------------------------------------------------------------------------- /framework/includes/option-types/popup/views/view.php: -------------------------------------------------------------------------------- 1 | 13 |
> 14 |
15 |
16 |
17 | backend->option_type( 'hidden' )->render( $id, array( 'value' => $data['value'] ), $data );?> 18 |
19 |
20 |
21 |
22 |
-------------------------------------------------------------------------------- /framework/includes/option-types/radio-text/static/css/styles.css: -------------------------------------------------------------------------------- 1 | .fw-option-type-radio-text .predefined, 2 | .fw-option-type-radio-text .predefined .fw-option-type-radio, 3 | .fw-option-type-radio-text .predefined .fw-option-type-radio div, 4 | .fw-option-type-radio-text .custom { 5 | display: inline-block; 6 | } 7 | 8 | .fw-option-type-radio-text .predefined { 9 | vertical-align: middle; 10 | } 11 | 12 | .fw-option-type-radio-text .predefined .fw-option-type-radio div { 13 | margin-left: 10px; 14 | } 15 | 16 | body.rtl .fw-option-type-radio-text .predefined .fw-option-type-radio div { 17 | margin-right: 10px; 18 | margin-left: 0; 19 | } 20 | 21 | .fw-option-type-radio-text .predefined .fw-option-type-radio div:first-child { 22 | margin-left: inherit; 23 | } 24 | 25 | body.rtl .fw-option-type-radio-text .predefined .fw-option-type-radio div:first-child { 26 | margin-right: inherit; 27 | } 28 | 29 | .fw-option-type-radio-text .custom input.fw-option-type-text{ 30 | width: 100px; 31 | margin-left: 10px; 32 | } 33 | 34 | .fw-option-type-radio-text .custom input.fw-option-type-text:first-child{ 35 | margin: 0; 36 | } 37 | 38 | 39 | .fw-backend-option-input-type-radio-text .fw-option-help-in-input { 40 | top: 4px !important; 41 | } 42 | 43 | 44 | -------------------------------------------------------------------------------- /framework/includes/option-types/radio-text/static/js/scripts.js: -------------------------------------------------------------------------------- 1 | jQuery(function($) { 2 | var optionTypeClass = '.fw-option-type-radio-text'; 3 | var customRadioSelector = 4 | '.predefined .fw-option-type-radio > div:last-child input[type="radio"]'; 5 | 6 | fwEvents.on('fw:options:init', function(data) { 7 | var $options = data.$elements.find( 8 | optionTypeClass + ':not(.initialized)' 9 | ); 10 | 11 | $options.find('.fw-option-type-text').on('focus', function() { 12 | // check "custom" radio box 13 | $(this) 14 | .closest(optionTypeClass) 15 | .find(customRadioSelector) 16 | .prop('checked', true); 17 | }); 18 | 19 | $options.find(customRadioSelector).on('focus', function() { 20 | $(this).closest(optionTypeClass).find('.custom input').focus(); 21 | }); 22 | 23 | $options.addClass('initialized'); 24 | }); 25 | 26 | fw.options.register('radio-text', { 27 | getValue: function(optionDescriptor) { 28 | var checked = $(optionDescriptor.el).find('input:checked'); 29 | 30 | var value = checked.val(); 31 | 32 | if (checked.closest('div').is(':last-child')) { 33 | value = $(optionDescriptor.el).find('[type="text"]').val(); 34 | } 35 | 36 | return { 37 | value: value, 38 | optionDescriptor: optionDescriptor, 39 | }; 40 | }, 41 | }); 42 | }); 43 | -------------------------------------------------------------------------------- /framework/includes/option-types/radio-text/view.php: -------------------------------------------------------------------------------- 1 | 21 |
> 22 |
23 | backend->option_type( 'radio' )->render( 25 | 'predefined', 26 | array( 27 | 'value' => '', 28 | 'choices' => $option['choices'] 29 | ), 30 | array( 31 | 'value' => isset($option['choices'][ $data['value'] ]) ? $data['value'] : $custom_choice_key, 32 | 'id_prefix' => $data['id_prefix'] . $id . '-', 33 | 'name_prefix' => $data['name_prefix'] . '[' . $id . ']', 34 | ) 35 | ); 36 | ?> 37 |
38 | 39 |
40 | backend->option_type( 'text' )->render( 42 | 'custom', 43 | array(), 44 | array( 45 | 'value' => isset($option['choices'][ $data['value'] ]) ? '' : $data['value'], 46 | 'id_prefix' => $data['id_prefix'] . $id . '-', 47 | 'name_prefix' => $data['name_prefix'] . '[' . $id . ']', 48 | ) 49 | ); 50 | ?> 51 |
52 |
-------------------------------------------------------------------------------- /framework/includes/option-types/range-slider/static/js/scripts.js: -------------------------------------------------------------------------------- 1 | (function ($, fwEvents) { 2 | var defaults = { 3 | grid: true 4 | }; 5 | 6 | fwEvents.on('fw:options:init', function (data) { 7 | data.$elements.find('.fw-option-type-range-slider:not(.initialized)').each(function () { 8 | var options = JSON.parse($(this).attr('data-fw-irs-options')); 9 | $(this).find('.fw-irs-range-slider').ionRangeSlider(_.defaults(options, defaults)); 10 | 11 | $(this).find('.fw-irs-range-slider').on('change', _.throttle(function (e) { 12 | fw.options.trigger.changeForEl(e.target, { 13 | value: getValueForEl(e.target) 14 | }) 15 | }, 300)); 16 | }).addClass('initialized'); 17 | }); 18 | 19 | fw.options.register('range-slider', { 20 | startListeningForChanges: $.noop, 21 | getValue: function (optionDescriptor) { 22 | return { 23 | value: getValueForEl( 24 | $(optionDescriptor.el).find('[type="text"]')[0] 25 | ), 26 | 27 | optionDescriptor: optionDescriptor 28 | } 29 | } 30 | }); 31 | 32 | function getValueForEl (el) { 33 | var rangeArray = el.value.split(';'); 34 | 35 | return { 36 | from: rangeArray[0], 37 | to: rangeArray[1] 38 | } 39 | } 40 | 41 | })(jQuery, fwEvents); 42 | -------------------------------------------------------------------------------- /framework/includes/option-types/range-slider/view.php: -------------------------------------------------------------------------------- 1 | 26 |
> 27 | /> 28 |
29 | -------------------------------------------------------------------------------- /framework/includes/option-types/rgba-color-picker/static/css/styles.css: -------------------------------------------------------------------------------- 1 | .fw-backend-option-input-type-rgba-color-picker .fw-option-help-in-input { 2 | top: 2px !important; 3 | } 4 | .fw-backend-option-input-type-rgba-color-picker .wp-picker-holder { 5 | position:absolute; 6 | z-index:99999; 7 | } 8 | .fw-backend-option-input-type-rgba-color-picker .wp-picker-clear { 9 | height: 23px !important; 10 | } 11 | .fw-backend-option-input-type-rgba-color-picker .wp-color-result { 12 | box-shadow:none; 13 | } 14 | .fw-backend-option-input-type-rgba-color-picker input { 15 | max-width: 140px !important; 16 | } 17 | #customize-controls .customize-pane-child .customize-control:last-child .fw-backend-customizer-option .fw-backend-option-type-rgba-color-picker { 18 | padding-bottom: 220px; 19 | } 20 | /* Picker WP style */ 21 | .wp-color-result { 22 | background-color: #f7f7f7; 23 | border: 1px solid #ccc; 24 | -webkit-border-radius: 3px; 25 | border-radius: 3px; 26 | cursor: pointer; 27 | height: 22px; 28 | margin: 0 6px 6px 0; 29 | position: relative; 30 | -webkit-user-select: none; 31 | -moz-user-select: none; 32 | -ms-user-select: none; 33 | user-select: none; 34 | vertical-align: bottom; 35 | display: inline-block; 36 | padding-left: 30px; 37 | -webkit-box-shadow: 0 1px 0 #ccc; 38 | box-shadow: 0 1px 0 #ccc; 39 | top: 0; 40 | } 41 | .wp-color-result:focus, 42 | .wp-color-result:hover { 43 | background: #fafafa; 44 | border-color: #999; 45 | color: #23282d; 46 | } 47 | .wp-color-result:after { 48 | background: #f7f7f7; 49 | -webkit-border-radius: 0 2px 2px 0; 50 | border-radius: 0 2px 2px 0; 51 | border-left: 1px solid #ccc; 52 | color: #555; 53 | content: attr(title); 54 | display: block; 55 | font-size: 11px; 56 | line-height: 22px; 57 | padding: 0 6px; 58 | position: relative; 59 | right: 0; 60 | text-align: center; 61 | top: 0; 62 | } 63 | .wp-color-result.wp-picker-open:after { 64 | content: attr(data-current); 65 | } 66 | .wp-color-result:focus:after, 67 | .wp-color-result:hover:after { 68 | color: #23282d; 69 | border-color: #a0a5aa; 70 | border-left: 1px solid #999; 71 | } 72 | .wp-picker-open+.wp-picker-input-wrap { 73 | display: inline-block; 74 | vertical-align: top; 75 | } 76 | .wp-picker-container input[type=text].wp-color-picker { 77 | width: 65px; 78 | height: 24px; 79 | font-size: 12px; 80 | font-family: monospace; 81 | line-height: 16px; 82 | margin: 0; 83 | } 84 | .wp-picker-container .button { 85 | margin-left: 6px; 86 | } -------------------------------------------------------------------------------- /framework/includes/option-types/slider/class-fw-option-type-short-slider.php: -------------------------------------------------------------------------------- 1 | 26 |
> 27 | /> 28 |
29 | -------------------------------------------------------------------------------- /framework/includes/option-types/switch/static/adaptive-switch/jquery.adaptive-switch.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | var template = 3 | '
'+ 4 | '
'+ 5 | '
'+ 6 | ''+ 7 | '
'+ 8 | '
'+ 9 | '
'+ 10 | ''+ 11 | ''+ 12 | '
'+ 13 | '
'+ 14 | '
'+ 15 | '
'; 16 | 17 | function renderTemplate(switchLeft, switchRight, isRight, inputLeftId, inputRightId) { 18 | switchLeft = String(switchLeft); 19 | switchRight = String(switchRight); 20 | 21 | return template 22 | .split('{{switch_left}}' ).join(switchLeft) 23 | .split('{{switch_right}}' ).join(switchRight) 24 | .split('{{biggest_text}}' ).join(switchLeft.length > switchRight.length ? switchLeft : switchRight) 25 | .split('{{id_left}}' ).join(inputLeftId) 26 | .split('{{id_right}}' ).join(inputRightId) 27 | .split('{{wrapper_class}}' ).join(isRight ? ' switch-right' : ''); 28 | } 29 | 30 | { 31 | var increment = 0; 32 | 33 | function getUniqueId() { 34 | return 'switch--'+ (++increment); 35 | } 36 | } 37 | 38 | jQuery.fn.adaptiveSwitch = function() { 39 | var $ = jQuery; 40 | 41 | this.filter('input[type="checkbox"]').each(function(){ 42 | var $this = $(this); 43 | 44 | if (!$this.attr('id')) { 45 | $this.attr('id', getUniqueId()); 46 | } 47 | 48 | var switchId = getUniqueId(); 49 | 50 | $( 51 | renderTemplate( 52 | $this.attr('data-switch-left') ? $this.attr('data-switch-left') : 'No', 53 | $this.attr('data-switch-right') ? $this.attr('data-switch-right') : 'Yes', 54 | $this.prop('checked'), 55 | $this.attr('id'), 56 | $this.attr('id') 57 | ) 58 | ) 59 | .attr('id', switchId) 60 | .addClass('input-type--checkbox') 61 | .addClass('input-id--'+ $this.attr('id')) 62 | .addClass( 63 | $this.attr('class') 64 | ? $.map($this.attr('class').split(/\s+/), function(c){ return c.length ? 'input-class--'+ c : ''; }).join(' ') 65 | : '' 66 | ) 67 | .insertAfter($this); 68 | 69 | $this 70 | .attr('data-switch-id', switchId) 71 | .addClass('adaptive-switch-input') 72 | .on('change', function(){ 73 | $('#'+ $(this).attr('data-switch-id') )[ $(this).prop('checked') ? 'addClass' : 'removeClass' ]('switch-right'); 74 | }); 75 | }); 76 | 77 | return this; 78 | }; 79 | })(); -------------------------------------------------------------------------------- /framework/includes/option-types/switch/static/css/styles.css: -------------------------------------------------------------------------------- 1 | .fw-option-type-switch .adaptive-switch, 2 | .fw-option-type-switch .adaptive-switch label { 3 | font-size: 11px; 4 | } 5 | 6 | .fw-backend-option-input-type-switch .fw-option-help-in-input { 7 | top: 3px !important; 8 | } 9 | 10 | .fw-option-type-switch .adaptive-switch label.switch-label span { 11 | text-transform: uppercase; 12 | padding: 0 0.8em; 13 | } 14 | 15 | @media (max-width: 782px) { 16 | .fw-option-type-switch .adaptive-switch { 17 | font-size: 14px; 18 | } 19 | } 20 | 21 | body.rtl .adaptive-switch { 22 | direction: ltr; 23 | } 24 | 25 | .fw-backend-option-design-customizer.fw-backend-option-type-switch .adaptive-switch .switch-switcher label.switch-label { 26 | line-height: inherit; 27 | } -------------------------------------------------------------------------------- /framework/includes/option-types/switch/static/js/scripts.js: -------------------------------------------------------------------------------- 1 | jQuery(document).ready(function ($) { 2 | var optionTypeClass = 'fw-option-type-switch', 3 | customEventPrefix = 'fw:option-type:switch:'; 4 | 5 | fwEvents.on('fw:options:init', function (data) { 6 | data.$elements.find('.'+ optionTypeClass +':not(.fw-option-initialized)') 7 | .addClass('fw-option-initialized') 8 | .find('input[type="checkbox"]') 9 | .on('change', function(){ 10 | var $this = $(this), 11 | checked = $this.prop('checked'), 12 | value = $this.attr('data-switch-'+ (checked ? 'right' : 'left') +'-value-json'); 13 | 14 | $this.val(value); 15 | 16 | if (checked) { 17 | $this.prev('input[type="hidden"]').remove(); 18 | } else { 19 | /** 20 | * When checkbox is not checked, it is not sent in POST so create a hidden input for that 21 | */ 22 | $('').attr({ 23 | 'type': 'hidden', 24 | 'name': $this.attr('name'), 25 | 'value': value 26 | }).insertBefore($this); 27 | } 28 | 29 | $this.closest('.'+ optionTypeClass).trigger(customEventPrefix +'change', { 30 | value: JSON.parse(value) 31 | }); 32 | 33 | fw.options.trigger.changeForEl( 34 | $this.closest('.' + optionTypeClass) 35 | ); 36 | }) 37 | .on('change update:color', function(){ 38 | var $this = $(this), 39 | isRight = $this.prop('checked'), 40 | $option = $this.closest('.'+ optionTypeClass), 41 | color = $option.attr('data-'+ (isRight ? 'right' : 'left') +'-color') || ''; 42 | 43 | $option.find('.switch-dot span').css('background-color', color); 44 | $option.find('.switch-label-'+ (isRight ? 'right' : 'left')).css('color', color); 45 | }) 46 | .adaptiveSwitch() 47 | .trigger('update:color'); 48 | }); 49 | 50 | fw.options.register('switch', { 51 | startListeningForChanges: $.noop, 52 | getValue: function (optionDescriptor) { 53 | return { 54 | value: JSON.parse( 55 | $(optionDescriptor.el).find('[type="checkbox"]').val() 56 | ), 57 | optionDescriptor: optionDescriptor 58 | } 59 | } 60 | }) 61 | }); 62 | -------------------------------------------------------------------------------- /framework/includes/option-types/typography/static/images/google-fonts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/includes/option-types/typography/static/images/google-fonts.png -------------------------------------------------------------------------------- /framework/includes/option-types/upload/static/css/any-files.css: -------------------------------------------------------------------------------- 1 | .fw-option-type-upload.any-files.empty span { 2 | display: none; 3 | } 4 | .fw-option-type-upload.any-files span { 5 | display: inline-block; 6 | vertical-align: middle; 7 | margin-right: 5px; 8 | } 9 | .fw-option-type-upload.any-files em { 10 | font-style: normal; 11 | } 12 | .fw-option-type-upload.any-files a { 13 | outline: none; 14 | } 15 | .fw-option-type-upload.any-files button { 16 | vertical-align: middle; 17 | } 18 | 19 | 20 | .fw-backend-option-input-type-upload .fw-option-help-in-input { 21 | top: 4px !important; 22 | } -------------------------------------------------------------------------------- /framework/includes/option-types/upload/static/css/modal.css: -------------------------------------------------------------------------------- 1 | /* bigger z-index: make sure it's bigger than fw.OptionsModal's z-index (but do not increase this too much to not affect others) */ 2 | 3 | .fw-option-type-upload .media-modal { 4 | z-index: 170001; 5 | } 6 | 7 | .fw-option-type-upload .media-modal-backdrop { 8 | z-index: 170000; 9 | } 10 | 11 | .wp-customizer .fw-option-type-upload .media-modal { 12 | z-index: 560101; 13 | } 14 | 15 | .wp-customizer .fw-option-type-upload .media-modal-backdrop { 16 | z-index: 560100; 17 | } 18 | 19 | /* end: bigger z-index */ 20 | 21 | .fw-option-type-upload .delete-attachment { 22 | display: none; 23 | } -------------------------------------------------------------------------------- /framework/includes/option-types/upload/views/any-files.php: -------------------------------------------------------------------------------- 1 | 9 | 12 |
> 13 | /> 14 | 15 | 16 | 17 | 18 | 19 |
-------------------------------------------------------------------------------- /framework/includes/option-types/upload/views/images-only.php: -------------------------------------------------------------------------------- 1 | 9 |
> 10 | /> 11 | 12 |
13 | <?php esc_attr_e('No image', 'fw') ?> 14 |
15 | 16 | 22 |
23 | <?php echo esc_attr($attachment_filename); ?> 24 | 25 |
26 | 27 |

28 | 29 |
' 31 | ); ?>"> 32 |
" alt="<%- data.alt %>"/>'. 34 | '' 35 | ); ?>"> 36 | 37 | 38 | 'hidden', 40 | 'name' => '_fake[url]', 41 | 'value' => intval($input_attr['value']) ? wp_get_attachment_url($input_attr['value']) : '', 42 | 'class' => 'fw-option-type-upload-image-url' 43 | )); ?> 44 |
-------------------------------------------------------------------------------- /framework/includes/option-types/wp-editor/static/styles.css: -------------------------------------------------------------------------------- 1 | /** Fix textarea border color on edit tag page */ 2 | #edittag .fw-option-type-wp-editor textarea.wp-editor-area { 3 | border: 0; 4 | } -------------------------------------------------------------------------------- /framework/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/index.html -------------------------------------------------------------------------------- /framework/languages/fw-es_ES.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/languages/fw-es_ES.mo -------------------------------------------------------------------------------- /framework/languages/fw-fa_IR.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/languages/fw-fa_IR.mo -------------------------------------------------------------------------------- /framework/languages/fw-fr_FR.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/languages/fw-fr_FR.mo -------------------------------------------------------------------------------- /framework/languages/fw-he_IL.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/languages/fw-he_IL.mo -------------------------------------------------------------------------------- /framework/languages/fw-nl_NL.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/languages/fw-nl_NL.mo -------------------------------------------------------------------------------- /framework/languages/fw-ru_RU.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/languages/fw-ru_RU.mo -------------------------------------------------------------------------------- /framework/languages/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/languages/index.html -------------------------------------------------------------------------------- /framework/manifest.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /framework/static/img/no-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/static/img/no-image.png -------------------------------------------------------------------------------- /framework/static/img/sort-vertically.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/static/img/sort-vertically.png -------------------------------------------------------------------------------- /framework/static/js/ie-fixes.js: -------------------------------------------------------------------------------- 1 | /** 2 | * IE fixes for jQuery plugins to not throw errors 3 | */ 4 | 5 | if (!Array.prototype.indexOf) { 6 | Array.prototype.indexOf = function (searchElement, fromIndex) { 7 | if ( this === undefined || this === null ) { 8 | throw new TypeError( '"this" is null or not defined' ); 9 | } 10 | 11 | var length = this.length >>> 0; // Hack to convert object.length to a UInt32 12 | 13 | fromIndex = +fromIndex || 0; 14 | 15 | if (Math.abs(fromIndex) === Infinity) { 16 | fromIndex = 0; 17 | } 18 | 19 | if (fromIndex < 0) { 20 | fromIndex += length; 21 | if (fromIndex < 0) { 22 | fromIndex = 0; 23 | } 24 | } 25 | 26 | for (;fromIndex < length; fromIndex++) { 27 | if (this[fromIndex] === searchElement) { 28 | return fromIndex; 29 | } 30 | } 31 | 32 | return -1; 33 | }; 34 | } -------------------------------------------------------------------------------- /framework/static/js/option-types.js: -------------------------------------------------------------------------------- 1 | jQuery( document ).ready( function ( $ ) { 2 | setTimeout( function () { 3 | fwEvents.trigger( 'fw:options:init', { 4 | $elements: $( document.body ) 5 | } ); 6 | }, 30 ); 7 | 8 | function updateContent( $content ) { 9 | if ( tinymce.get( 'content' ) ) { 10 | tinymce.get( 'content' ).setContent( $content ); 11 | } else { 12 | $content.val( $content ); 13 | } 14 | } 15 | 16 | $( '#post-preview' ).on( 'mousedown touchend', function () { 17 | 18 | var $content = $( '#content' ), 19 | $contentValue = tinymce.get( 'content' ) ? tinymce.get( 'content' ).getContent() : $content.val(), 20 | $session = ''; 21 | 22 | if ( $contentValue.indexOf( '/gi, $session ); 24 | } else { 25 | $contentValue = $contentValue + $session; 26 | } 27 | 28 | updateContent( $contentValue ); 29 | updateContent( $contentValue.replace( //gi, '' ) ); 30 | } ); 31 | } ); -------------------------------------------------------------------------------- /framework/static/libs/entypo/fonts/entypo.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/static/libs/entypo/fonts/entypo.eot -------------------------------------------------------------------------------- /framework/static/libs/entypo/fonts/entypo.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/static/libs/entypo/fonts/entypo.ttf -------------------------------------------------------------------------------- /framework/static/libs/entypo/fonts/entypo.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/static/libs/entypo/fonts/entypo.woff -------------------------------------------------------------------------------- /framework/static/libs/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/static/libs/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /framework/static/libs/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/static/libs/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /framework/static/libs/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/static/libs/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /framework/static/libs/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/static/libs/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /framework/static/libs/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/static/libs/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /framework/static/libs/jscrollpane/jquery.jscrollpane.css: -------------------------------------------------------------------------------- 1 | /* 2 | * CSS Styles that are needed by jScrollPane for it to operate correctly. 3 | * 4 | * Include this stylesheet in your site or copy and paste the styles below into your stylesheet - jScrollPane 5 | * may not operate correctly without them. 6 | */ 7 | 8 | .jspContainer 9 | { 10 | overflow: hidden; 11 | position: relative; 12 | } 13 | 14 | .jspPane 15 | { 16 | position: absolute; 17 | } 18 | 19 | .jspVerticalBar 20 | { 21 | position: absolute; 22 | top: 0; 23 | right: 0; 24 | width: 16px; 25 | height: 100%; 26 | background: red; 27 | } 28 | 29 | .jspHorizontalBar 30 | { 31 | position: absolute; 32 | bottom: 0; 33 | left: 0; 34 | width: 100%; 35 | height: 16px; 36 | background: red; 37 | } 38 | 39 | .jspCap 40 | { 41 | display: none; 42 | } 43 | 44 | .jspHorizontalBar .jspCap 45 | { 46 | float: left; 47 | } 48 | 49 | .jspTrack 50 | { 51 | background: #dde; 52 | position: relative; 53 | } 54 | 55 | .jspDrag 56 | { 57 | background: #bbd; 58 | position: relative; 59 | top: 0; 60 | left: 0; 61 | cursor: pointer; 62 | } 63 | 64 | .jspHorizontalBar .jspTrack, 65 | .jspHorizontalBar .jspDrag 66 | { 67 | float: left; 68 | height: 100%; 69 | } 70 | 71 | .jspArrow 72 | { 73 | background: #50506d; 74 | text-indent: -20000px; 75 | display: block; 76 | cursor: pointer; 77 | padding: 0; 78 | margin: 0; 79 | } 80 | 81 | .jspArrow.jspDisabled 82 | { 83 | cursor: default; 84 | background: #80808d; 85 | } 86 | 87 | .jspVerticalBar .jspArrow 88 | { 89 | height: 16px; 90 | } 91 | 92 | .jspHorizontalBar .jspArrow 93 | { 94 | width: 16px; 95 | float: left; 96 | height: 100%; 97 | } 98 | 99 | .jspVerticalBar .jspArrow:focus 100 | { 101 | outline: none; 102 | } 103 | 104 | .jspCorner 105 | { 106 | background: #eeeef4; 107 | float: left; 108 | height: 100%; 109 | } 110 | 111 | /* Yuk! CSS Hack for IE6 3 pixel bug :( */ 112 | * html .jspCorner 113 | { 114 | margin: 0 -3px 0 0; 115 | } -------------------------------------------------------------------------------- /framework/static/libs/linecons/fonts/linecons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/static/libs/linecons/fonts/linecons.eot -------------------------------------------------------------------------------- /framework/static/libs/mousewheel/jquery.mousewheel.min.js: -------------------------------------------------------------------------------- 1 | /*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh) 2 | * Licensed under the MIT License (LICENSE.txt). 3 | * 4 | * Version: 3.1.11 5 | * 6 | * Requires: jQuery 1.2.2+ 7 | */ 8 | !function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a:a(jQuery)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.11",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b)["offsetParent"in a.fn?"offsetParent":"parent"]();return c.length||(c=a("body")),parseInt(c.css("fontSize"),10)},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})}); -------------------------------------------------------------------------------- /framework/static/libs/typcn/fonts/typicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/static/libs/typcn/fonts/typicons.eot -------------------------------------------------------------------------------- /framework/static/libs/typcn/fonts/typicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/static/libs/typcn/fonts/typicons.ttf -------------------------------------------------------------------------------- /framework/static/libs/typcn/fonts/typicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/static/libs/typcn/fonts/typicons.woff -------------------------------------------------------------------------------- /framework/static/libs/unycon/changelog.txt: -------------------------------------------------------------------------------- 1 | 2.0.0 2 | * Removed strange icons 3 | * Categorized icons -------------------------------------------------------------------------------- /framework/static/libs/unycon/demo-files/demo.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 0; 3 | margin: 0; 4 | font-family: sans-serif; 5 | font-size: 1em; 6 | line-height: 1.5; 7 | color: #555; 8 | background: #fff; 9 | } 10 | h1 { 11 | font-size: 1.5em; 12 | font-weight: normal; 13 | } 14 | small { 15 | font-size: .66666667em; 16 | } 17 | a { 18 | color: #e74c3c; 19 | text-decoration: none; 20 | } 21 | a:hover, a:focus { 22 | box-shadow: 0 1px #e74c3c; 23 | } 24 | .bshadow0, input { 25 | box-shadow: inset 0 -2px #e7e7e7; 26 | } 27 | input:hover { 28 | box-shadow: inset 0 -2px #ccc; 29 | } 30 | input, fieldset { 31 | font-size: 1em; 32 | margin: 0; 33 | padding: 0; 34 | border: 0; 35 | } 36 | input { 37 | color: inherit; 38 | line-height: 1.5; 39 | height: 1.5em; 40 | padding: .25em 0; 41 | } 42 | input:focus { 43 | outline: none; 44 | box-shadow: inset 0 -2px #449fdb; 45 | } 46 | .glyph { 47 | font-size: 16px; 48 | width: 15em; 49 | padding-bottom: 1em; 50 | margin-right: 4em; 51 | margin-bottom: 1em; 52 | float: left; 53 | overflow: hidden; 54 | } 55 | .liga { 56 | width: 80%; 57 | width: calc(100% - 2.5em); 58 | } 59 | .talign-right { 60 | text-align: right; 61 | } 62 | .talign-center { 63 | text-align: center; 64 | } 65 | .bgc1 { 66 | background: #f1f1f1; 67 | } 68 | .fgc1 { 69 | color: #999; 70 | } 71 | .fgc0 { 72 | color: #000; 73 | } 74 | p { 75 | margin-top: 1em; 76 | margin-bottom: 1em; 77 | } 78 | .mvm { 79 | margin-top: .75em; 80 | margin-bottom: .75em; 81 | } 82 | .mtn { 83 | margin-top: 0; 84 | } 85 | .mtl, .mal { 86 | margin-top: 1.5em; 87 | } 88 | .mbl, .mal { 89 | margin-bottom: 1.5em; 90 | } 91 | .mal, .mhl { 92 | margin-left: 1.5em; 93 | margin-right: 1.5em; 94 | } 95 | .mhmm { 96 | margin-left: 1em; 97 | margin-right: 1em; 98 | } 99 | .mls { 100 | margin-left: .25em; 101 | } 102 | .ptl { 103 | padding-top: 1.5em; 104 | } 105 | .pbs, .pvs { 106 | padding-bottom: .25em; 107 | } 108 | .pvs, .pts { 109 | padding-top: .25em; 110 | } 111 | .unit { 112 | float: left; 113 | } 114 | .unitRight { 115 | float: right; 116 | } 117 | .size1of2 { 118 | width: 50%; 119 | } 120 | .size1of1 { 121 | width: 100%; 122 | } 123 | .clearfix:before, .clearfix:after { 124 | content: " "; 125 | display: table; 126 | } 127 | .clearfix:after { 128 | clear: both; 129 | } 130 | .hidden-true { 131 | display: none; 132 | } 133 | .textbox0 { 134 | width: 3em; 135 | background: #f1f1f1; 136 | padding: .25em .5em; 137 | line-height: 1.5; 138 | height: 1.5em; 139 | } 140 | #testDrive { 141 | display: block; 142 | padding-top: 24px; 143 | line-height: 1.5; 144 | } 145 | .fs0 { 146 | font-size: 16px; 147 | } 148 | .fs1 { 149 | font-size: 32px; 150 | } 151 | -------------------------------------------------------------------------------- /framework/static/libs/unycon/demo-files/demo.js: -------------------------------------------------------------------------------- 1 | if (!('boxShadow' in document.body.style)) { 2 | document.body.setAttribute('class', 'noBoxShadow'); 3 | } 4 | 5 | document.body.addEventListener("click", function(e) { 6 | var target = e.target; 7 | if (target.tagName === "INPUT" && 8 | target.getAttribute('class').indexOf('liga') === -1) { 9 | target.select(); 10 | } 11 | }); 12 | 13 | (function() { 14 | var fontSize = document.getElementById('fontSize'), 15 | testDrive = document.getElementById('testDrive'), 16 | testText = document.getElementById('testText'); 17 | function updateTest() { 18 | testDrive.innerHTML = testText.value || String.fromCharCode(160); 19 | if (window.icomoonLiga) { 20 | window.icomoonLiga(testDrive); 21 | } 22 | } 23 | function updateSize() { 24 | testDrive.style.fontSize = fontSize.value + 'px'; 25 | } 26 | fontSize.addEventListener('change', updateSize, false); 27 | testText.addEventListener('input', updateTest, false); 28 | testText.addEventListener('change', updateTest, false); 29 | updateSize(); 30 | }()); 31 | -------------------------------------------------------------------------------- /framework/static/libs/unycon/fonts/Unycon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/static/libs/unycon/fonts/Unycon.eot -------------------------------------------------------------------------------- /framework/static/libs/unycon/fonts/Unycon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/static/libs/unycon/fonts/Unycon.ttf -------------------------------------------------------------------------------- /framework/static/libs/unycon/fonts/Unycon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/static/libs/unycon/fonts/Unycon.woff -------------------------------------------------------------------------------- /framework/static/libs/unycon/iconmoon-app-selection.json.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThemeFuse/Unyson/fc8bf84e631575e6b60f2faf17a9b0481f551cf2/framework/static/libs/unycon/iconmoon-app-selection.json.zip -------------------------------------------------------------------------------- /framework/views/backend-container-design-taxonomy.php: -------------------------------------------------------------------------------- 1 | array( 10 | 'form-field', 11 | 'fw-backend-container', 12 | 'fw-backend-container-type-'. $type 13 | ), 14 | 'content' => array( 15 | 'fw-backend-container-content', 16 | ), 17 | ); 18 | 19 | foreach ($classes as $key => $_classes) { 20 | $classes[$key] = implode(' ', $_classes); 21 | } 22 | unset($key, $_classes); 23 | } 24 | 25 | ?> 26 | 27 | 28 | -------------------------------------------------------------------------------- /framework/views/backend-option-design-empty.php: -------------------------------------------------------------------------------- 1 | backend->option_type($option['type'])->render($id, $option, $data); 4 | -------------------------------------------------------------------------------- /framework/views/backend-option-design-taxonomy.php: -------------------------------------------------------------------------------- 1 | array( 'unyson/unyson.php' ), 17 | ); 18 | 19 | if ( false !== getenv( 'WP_TESTS_DIR' ) ) { 20 | require getenv( 'WP_TESTS_DIR' ) . 'includes/bootstrap.php'; 21 | } else if (false !== getenv( 'WP_DEVELOP_DIR' )) { 22 | require getenv( 'WP_DEVELOP_DIR' ) . 'tests/phpunit/includes/bootstrap.php'; 23 | } else { 24 | require '../../../../tests/phpunit/includes/bootstrap.php'; 25 | } 26 | 27 | require dirname( __FILE__ ) . '/../unyson.php'; 28 | require_once dirname( __FILE__ ) . '/framework/class-wp-unyson-unit-test-case.php'; 29 | -------------------------------------------------------------------------------- /tests/framework/class-wp-unyson-unit-test-case.php: -------------------------------------------------------------------------------- 1 | go_to( home_url( '/' ) ); 28 | } 29 | 30 | /** 31 | * @param string $expected 32 | */ 33 | protected function expectOutput( $expected ) { 34 | $output = ob_get_contents(); 35 | ob_clean(); 36 | $output = preg_replace( '|\R|', "\r\n", $output ); 37 | $expected = preg_replace( '|\R|', "\r\n", $expected ); 38 | $this->assertEquals( $expected, $output ); 39 | } 40 | 41 | /** 42 | * @param string|array $expected 43 | */ 44 | protected function expectOutputContains( $expected ) { 45 | $output = preg_replace( '|\R|', "\r\n", ob_get_contents() ); 46 | ob_clean(); 47 | 48 | if ( ! is_array( $expected ) ) { 49 | $expected = array( $expected ); 50 | } 51 | 52 | foreach ( $expected as $needle ) { 53 | $found = strpos( $output, $needle ); 54 | $this->assertTrue( $found !== false ); 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /tests/phpunit.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | ./ 20 | 21 | 22 | 23 | 24 | 25 | ./inc 26 | ./frontend 27 | ./admin 28 | 29 | 30 | -------------------------------------------------------------------------------- /tests/readme.md: -------------------------------------------------------------------------------- 1 | # Running Unyson Unit Tests via PHPUnit 2 | 3 | #### Requirements: 4 | 5 | 1. Make sure you have installed PHPUnit `sudo apt install phpunit` 6 | 2. Get [`install-wp-tests.sh`](https://github.com/wp-cli/scaffold-command/blob/v1.0.4/templates/install-wp-tests.sh) helper 7 | 8 | ## Steps to follow: 9 | 10 | Run `install-wp-tests` helper. Please make sure that you have a mysql daemon 11 | running. This script will do a couple of things: 12 | 13 | - Will install a fresh WordPress to the `/tmp/wordpress` directory with correct `wp-config.php` 14 | - Will copy WordPress test helpers to `/tmp/wordpress-tests-lib` - this should point the $WP_TESTS_DIR to. Unyson [knows](https://github.com/ThemeFuse/Unyson/blob/v2.6.10/tests/bootstrap.php#L20) how to handle it well 15 | - Will create an empty database that will be re-created at each tests run 16 | 17 | Run this: 18 | 19 | ```bash 20 | install-wp-tests 21 | ``` 22 | 23 | Now you can run your tests: 24 | 25 | ``` 26 | cd unyson/tests 27 | 28 | # See them pass 29 | env WP_TESTS_DIR=/tmp/wordpress-tests-lib/ phpunit 30 | ``` 31 | -------------------------------------------------------------------------------- /tests/test-wp-editor.php: -------------------------------------------------------------------------------- 1 | 'wp-editor', 'tinymce' => true); 15 | $data = array(); 16 | 17 | fw()->backend->option_type('wp-editor')->prepare( 18 | $id, $option, $data 19 | ); 20 | 21 | $this->editor_manager = new FW_WP_Editor_Manager( 22 | $id, $option, $data 23 | ); 24 | 25 | // wp-includes/class-wp-editor.php 26 | // self::$this_tinymce = ( $set['tinymce'] && user_can_richedit() ); 27 | add_filter( 28 | 'user_can_richedit', 29 | array($this, 'user_should_be_able_to_rich_edit_in_tests'), 30 | 999999999999999 31 | ); 32 | } 33 | 34 | function user_should_be_able_to_rich_edit_in_tests() { 35 | return true; 36 | } 37 | 38 | public function test_we_have_editor_manager() { 39 | $this->assertTrue(class_exists('FW_WP_Editor_Manager')); 40 | } 41 | 42 | public function test_we_get_html_correctly() { 43 | $html = $this->editor_manager->get_html(); 44 | $this->assertRegexp('/data-fw-editor-id/', $html); 45 | } 46 | 47 | public function test_actions_are_called_in_correct_order() { 48 | add_filter( 49 | 'quicktags_settings', 50 | array($this, 'quicktags_settings_callback_in_middle'), 51 | 10 52 | ); 53 | 54 | add_filter( 55 | 'quicktags_settings', 56 | array($this, 'quicktags_settings_callback_in_last'), 57 | 999999999999999 58 | ); 59 | 60 | $this->editor_manager->get_html(); 61 | 62 | $this->assertEquals( 63 | $this->test_field, 64 | 'last' 65 | ); 66 | } 67 | 68 | public function quicktags_settings_callback_in_middle($qtInit) { 69 | $this->test_field = 'middle'; 70 | return $qtInit; 71 | } 72 | 73 | public function quicktags_settings_callback_in_last($qtInit) { 74 | $this->test_field = 'last'; 75 | } 76 | } 77 | 78 | -------------------------------------------------------------------------------- /uninstall.php: -------------------------------------------------------------------------------- 1 | read_extensions( 29 | dirname(__FILE__) .'/framework/extensions', 30 | $this->extensions 31 | ); 32 | 33 | { 34 | /** @var wpdb $wpdb */ 35 | global $wpdb; 36 | 37 | $this->uninstall(); 38 | 39 | if ( is_multisite() ) { // http://wordpress.stackexchange.com/a/80351/60424 40 | $original_blog_id = get_current_blog_id(); 41 | 42 | foreach ( 43 | $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" ) 44 | as $blog_id 45 | ) { 46 | switch_to_blog( $blog_id ); 47 | 48 | $this->uninstall(); 49 | } 50 | 51 | switch_to_blog( $original_blog_id ); 52 | } 53 | } 54 | } 55 | 56 | private function read_extensions($dir, &$extensions) 57 | { 58 | $ext_dirs = glob($dir .'/*', GLOB_ONLYDIR); 59 | 60 | if (empty($ext_dirs)) { 61 | return; 62 | } 63 | 64 | foreach ($ext_dirs as $ext_dir) { 65 | if ( 66 | file_exists($ext_dir .'/manifest.php') 67 | && 68 | file_exists($ext_dir .'/uninstall.php') 69 | ) { 70 | $extensions[ basename($ext_dir) ] = $ext_dir .'/uninstall.php'; 71 | } 72 | 73 | $this->read_extensions($ext_dir .'/extensions', $extensions); 74 | } 75 | } 76 | 77 | private function uninstall() 78 | { 79 | // Remove framework data 80 | { 81 | // ... 82 | } 83 | 84 | // Remove extensions data 85 | foreach ($this->extensions as $uninstall_file) { 86 | _include_file_isolated($uninstall_file); 87 | } 88 | } 89 | } 90 | 91 | new FW_Plugin_Uninstall(); 92 | --------------------------------------------------------------------------------