From ff3eba0086b892c2d1c6ba0e86e232df46a99923 Mon Sep 17 00:00:00 2001 From: Fuad Date: Sat, 8 Oct 2022 14:05:06 +0800 Subject: [PATCH] Styling form input (#6) * new module * form input styling --- .idea/.gitignore | 8 + .idea/codeStyles/Project.xml | 56 + .idea/codeStyles/codeStyleConfig.xml | 5 + .idea/modules.xml | 8 + .idea/php.xml | 9 + .idea/sms.iml | 12 + .idea/vcs.xml | 6 + ProgramFunctions/StudentsUsersInfo.fnc.php | 2 +- assets/js/plugins.js | 4861 +++++++++++++++++ assets/themes/Leagcy/stylesheet.css | 44 +- assets/themes/WPadmin/stylesheet.min.css | 1 + .../WPadmin/stylesheet_wkhtmltopdf.min.css | 1 + composer.lock | 20 + functions/Inputs.php | 2246 ++++---- functions/SaveData.fnc.php | 25 +- .../Automatic_Attendance/Configuration.php | 223 + modules/Automatic_Attendance/LICENSE | 339 ++ modules/Automatic_Attendance/Menu.php | 17 + modules/Automatic_Attendance/README.md | 37 + modules/Automatic_Attendance/config.inc.php | 225 + modules/Automatic_Attendance/functions.php | 74 + modules/Automatic_Attendance/icon.png | Bin 0 -> 23354 bytes .../includes/common.fnc.php | 260 + modules/Automatic_Attendance/install.sql | 55 + .../Automatic_Attendance/install_mysql.sql | 55 + modules/Automatic_Attendance/locale/README | 14 + .../LC_MESSAGES/Automatic_Attendance.mo | Bin 0 -> 1359 bytes .../LC_MESSAGES/Automatic_Attendance.po | 162 + .../LC_MESSAGES/Automatic_Attendance.mo | Bin 0 -> 1290 bytes .../LC_MESSAGES/Automatic_Attendance.po | 199 + .../Automatic_Attendance/screenshot-es.png | Bin 0 -> 87612 bytes .../Automatic_Attendance/screenshot-fr.png | Bin 0 -> 84236 bytes modules/Automatic_Attendance/screenshot.png | Bin 0 -> 101008 bytes modules/Students/Student.php | 6 +- .../Students/includes/SaveEnrollment.fnc.php | 10 +- modules/Users/includes/General_Info.inc.php | 199 +- modules/Users/includes/Other_Info.inc.php | 6 +- .../minified/images/animated-overlay.gif | Bin 0 -> 1738 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../css/jquery-ui/minified/jquery-ui.min.css | 7 + .../minified/jquery.ui.accordion.min.css | 5 + .../minified/jquery.ui.autocomplete.min.css | 5 + .../minified/jquery.ui.button.min.css | 5 + .../jquery-ui/minified/jquery.ui.core.min.css | 5 + .../minified/jquery.ui.datepicker.min.css | 5 + .../minified/jquery.ui.dialog.min.css | 5 + .../jquery-ui/minified/jquery.ui.menu.min.css | 5 + .../minified/jquery.ui.progressbar.min.css | 5 + .../minified/jquery.ui.resizable.min.css | 5 + .../minified/jquery.ui.selectable.min.css | 5 + .../minified/jquery.ui.slider.min.css | 5 + .../minified/jquery.ui.spinner.min.css | 5 + .../jquery-ui/minified/jquery.ui.tabs.min.css | 5 + .../minified/jquery.ui.theme.min.css | 5 + .../minified/jquery.ui.tooltip.min.css | 5 + plugins/legacy-admin/css/legacy-ame.css | 419 ++ plugins/legacy-admin/css/legacy-ame.min.css | 1 + plugins/legacy-admin/css/legacy-external.css | 107 + .../legacy-admin/css/legacy-external.min.css | 1 + plugins/legacy-admin/css/legacy-pace.css | 45 + plugins/legacy-admin/css/legacy-pace.min.css | 1 + plugins/legacy-admin/css/legacy-wordfence.css | 82 + .../legacy-admin/css/legacy-wordfence.min.css | 1 + .../css40/colors/legacy-colors-color1.css | 1 + .../css40/colors/legacy-colors-color10.css | 1 + .../css40/colors/legacy-colors-color11.css | 1 + .../css40/colors/legacy-colors-color12.css | 1 + .../css40/colors/legacy-colors-color13.css | 1 + .../css40/colors/legacy-colors-color14.css | 1 + .../css40/colors/legacy-colors-color15.css | 1 + .../css40/colors/legacy-colors-color16.css | 1 + .../css40/colors/legacy-colors-color17.css | 1 + .../css40/colors/legacy-colors-color18.css | 1 + .../css40/colors/legacy-colors-color19.css | 1 + .../css40/colors/legacy-colors-color2.css | 1 + .../css40/colors/legacy-colors-color20.css | 1 + .../css40/colors/legacy-colors-color21.css | 1 + .../css40/colors/legacy-colors-color22.css | 1 + .../css40/colors/legacy-colors-color23.css | 1 + .../css40/colors/legacy-colors-color24.css | 1 + .../css40/colors/legacy-colors-color25.css | 1 + .../css40/colors/legacy-colors-color3.css | 1 + .../css40/colors/legacy-colors-color4.css | 1 + .../css40/colors/legacy-colors-color5.css | 1 + .../css40/colors/legacy-colors-color6.css | 1 + .../css40/colors/legacy-colors-color7.css | 1 + .../css40/colors/legacy-colors-color8.css | 1 + .../css40/colors/legacy-colors-color9.css | 1 + plugins/legacy-admin/css40/dynamic_css.php | 543 ++ .../css40/legacy-admin-menu-management.css | 327 ++ .../legacy-admin-menu-management.min.css | 1 + plugins/legacy-admin/css40/legacy-admin.css | 4181 ++++++++++++++ .../legacy-admin/css40/legacy-admin.min.css | 11 + .../css40/legacy-colors-site-1.css | 1 + plugins/legacy-admin/css40/legacy-colors.css | 1 + plugins/legacy-admin/css40/legacy-login.css | 335 ++ .../legacy-admin/css40/legacy-login.min.css | 1 + .../assets/css/color-picker/color-picker.css | 1 + .../assets/css/color-picker/color-picker.scss | 87 + .../css/import_export/import_export.css | 1 + .../framework/core/assets/css/media/media.css | 1 + .../core/assets/css/media/media.scss | 61 + .../framework/core/assets/css/redux-admin.css | 1 + .../core/assets/css/redux-admin.scss | 1499 +++++ .../core/assets/css/redux-fields.css | 1 + .../core/assets/css/redux-vendor.css | 1 + .../framework/core/assets/css/rtl.css | 1 + .../framework/core/assets/css/rtl.scss | 118 + .../vendor/elusive-icons/elusive-icons.css | 4 + .../fonts/elusiveicons-webfont.eot | Bin 0 -> 80440 bytes .../fonts/elusiveicons-webfont.svg | 934 ++++ .../fonts/elusiveicons-webfont.ttf | Bin 0 -> 80248 bytes .../fonts/elusiveicons-webfont.woff | Bin 0 -> 49068 bytes .../vendor/elusive-icons/scss/_animated.scss | 34 + .../elusive-icons/scss/_bordered-pulled.scss | 16 + .../css/vendor/elusive-icons/scss/_core.scss | 13 + .../elusive-icons/scss/_fixed-width.scss | 6 + .../css/vendor/elusive-icons/scss/_icons.scss | 615 +++ .../vendor/elusive-icons/scss/_larger.scss | 13 + .../css/vendor/elusive-icons/scss/_list.scss | 19 + .../vendor/elusive-icons/scss/_mixins.scss | 27 + .../css/vendor/elusive-icons/scss/_path.scss | 14 + .../elusive-icons/scss/_rotated-flipped.scss | 20 + .../vendor/elusive-icons/scss/_stacked.scss | 20 + .../vendor/elusive-icons/scss/_variables.scss | 318 ++ .../elusive-icons/scss/elusive-icons.css | 4 + .../elusive-icons/scss/elusive-icons.css.map | 7 + .../elusive-icons/scss/elusive-icons.scss | 17 + .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_75_ffffff_1x400.png | Bin 0 -> 107 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../ui-bg_inset-soft_95_fef1ec_1x100.png | Bin 0 -> 123 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_f6cf3b_256x240.png | Bin 0 -> 8884 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../jquery-ui-1.10.0.custom.css | 9 + .../jquery-ui-1.10.0.custom.less | 793 +++ .../jquery-ui-1.10.0.custom.scss | 793 +++ .../assets/css/vendor/qtip/jquery.qtip.css | 623 +++ .../css/vendor/qtip/jquery.qtip.min.css | 2 + .../css/vendor/spectrum/redux-spectrum.css | 507 ++ .../framework/core/assets/img/1c.png | Bin 0 -> 138 bytes .../framework/core/assets/img/1col.png | Bin 0 -> 2895 bytes .../core/assets/img/2-col-portfolio.png | Bin 0 -> 1045 bytes .../framework/core/assets/img/2cl.png | Bin 0 -> 2984 bytes .../framework/core/assets/img/2cr.png | Bin 0 -> 2985 bytes .../core/assets/img/3-col-portfolio.png | Bin 0 -> 1025 bytes .../framework/core/assets/img/3cl.png | Bin 0 -> 3156 bytes .../framework/core/assets/img/3cm.png | Bin 0 -> 3036 bytes .../framework/core/assets/img/3cr.png | Bin 0 -> 3050 bytes .../core/assets/img/4-col-portfolio.png | Bin 0 -> 1033 bytes .../framework/core/assets/img/ajax.gif | Bin 0 -> 1392 bytes .../framework/core/assets/img/menu_icon.png | Bin 0 -> 1447 bytes .../framework/core/assets/img/toggle_tabs.png | Bin 0 -> 358 bytes .../framework/core/assets/js/media/media.js | 220 + .../core/assets/js/media/media.min.js | 1 + .../framework/core/assets/js/redux.js | 1686 ++++++ .../framework/core/assets/js/redux.min.js | 4 + .../framework/core/assets/js/vendor.min.js | 2 + .../framework/core/assets/js/vendor/cookie.js | 95 + .../core/assets/js/vendor/jquery.alphanum.js | 786 +++ .../assets/js/vendor/jquery.serializeForm.js | 60 + .../core/assets/js/vendor/jquery.typewatch.js | 94 + .../core/assets/js/vendor/jsonview.js | 265 + .../core/assets/js/vendor/jsonview.min.js | 16 + .../core/assets/js/vendor/lte-ie7.js | 311 ++ .../core/assets/js/vendor/qtip/jquery.qtip.js | 3951 ++++++++++++++ .../assets/js/vendor/qtip/jquery.qtip.min.js | 3 + .../js/vendor/redux.select2.sortable.js | 152 + .../js/vendor/redux.select2.sortable.min.js | 1 + .../core/assets/js/vendor/select2/README.md | 114 + .../core/assets/js/vendor/select2/release.sh | 79 + .../js/vendor/select2/select2-bootstrap.css | 87 + .../js/vendor/select2/select2-spinner.gif | Bin 0 -> 1849 bytes .../core/assets/js/vendor/select2/select2.css | 704 +++ .../js/vendor/select2/select2.jquery.json | 36 + .../core/assets/js/vendor/select2/select2.js | 3541 ++++++++++++ .../assets/js/vendor/select2/select2.min.js | 23 + .../core/assets/js/vendor/select2/select2.png | Bin 0 -> 613 bytes .../js/vendor/select2/select2_locale_ar.js | 19 + .../js/vendor/select2/select2_locale_az.js | 20 + .../js/vendor/select2/select2_locale_bg.js | 20 + .../js/vendor/select2/select2_locale_ca.js | 19 + .../js/vendor/select2/select2_locale_cs.js | 51 + .../js/vendor/select2/select2_locale_da.js | 19 + .../js/vendor/select2/select2_locale_de.js | 18 + .../js/vendor/select2/select2_locale_el.js | 19 + .../select2/select2_locale_en.js.template | 20 + .../js/vendor/select2/select2_locale_es.js | 19 + .../js/vendor/select2/select2_locale_et.js | 19 + .../js/vendor/select2/select2_locale_eu.js | 45 + .../js/vendor/select2/select2_locale_fa.js | 21 + .../js/vendor/select2/select2_locale_fi.js | 30 + .../js/vendor/select2/select2_locale_fr.js | 18 + .../js/vendor/select2/select2_locale_gl.js | 45 + .../js/vendor/select2/select2_locale_he.js | 19 + .../js/vendor/select2/select2_locale_hr.js | 24 + .../js/vendor/select2/select2_locale_hu.js | 17 + .../js/vendor/select2/select2_locale_id.js | 19 + .../js/vendor/select2/select2_locale_is.js | 17 + .../js/vendor/select2/select2_locale_it.js | 17 + .../js/vendor/select2/select2_locale_ja.js | 17 + .../js/vendor/select2/select2_locale_ka.js | 19 + .../js/vendor/select2/select2_locale_ko.js | 19 + .../js/vendor/select2/select2_locale_lt.js | 26 + .../js/vendor/select2/select2_locale_lv.js | 19 + .../js/vendor/select2/select2_locale_mk.js | 19 + .../js/vendor/select2/select2_locale_ms.js | 19 + .../js/vendor/select2/select2_locale_nb.js | 22 + .../js/vendor/select2/select2_locale_nl.js | 17 + .../js/vendor/select2/select2_locale_pl.js | 54 + .../js/vendor/select2/select2_locale_pt-BR.js | 18 + .../js/vendor/select2/select2_locale_pt-PT.js | 17 + .../js/vendor/select2/select2_locale_ro.js | 17 + .../js/vendor/select2/select2_locale_rs.js | 19 + .../js/vendor/select2/select2_locale_ru.js | 23 + .../js/vendor/select2/select2_locale_sk.js | 50 + .../js/vendor/select2/select2_locale_sv.js | 19 + .../js/vendor/select2/select2_locale_th.js | 19 + .../js/vendor/select2/select2_locale_tr.js | 19 + .../js/vendor/select2/select2_locale_ug-CN.js | 16 + .../js/vendor/select2/select2_locale_uk.js | 25 + .../js/vendor/select2/select2_locale_vi.js | 20 + .../js/vendor/select2/select2_locale_zh-CN.js | 16 + .../js/vendor/select2/select2_locale_zh-TW.js | 16 + .../assets/js/vendor/select2/select2x2.png | Bin 0 -> 845 bytes .../js/vendor/spectrum/redux-spectrum.js | 2088 +++++++ .../js/vendor/spectrum/redux-spectrum.min.js | 1 + .../framework/core/core/dashboard.php | 32 + .../framework/core/core/enqueue.php | 456 ++ .../framework/core/core/newsflash.php | 131 + .../framework/core/core/panel.php | 360 ++ .../framework/core/core/required.php | 25 + .../legacy-admin/framework/core/framework.php | 3736 +++++++++++++ .../framework/core/inc/browser.php | 1195 ++++ .../framework/core/inc/class.p.php | 301 + .../framework/core/inc/class.redux_api.php | 462 ++ .../core/inc/class.redux_filesystem.php | 215 + .../core/inc/class.redux_functions.php | 278 + .../core/inc/class.redux_helpers.php | 661 +++ .../core/inc/class.redux_instances.php | 164 + .../framework/core/inc/class.redux_sass.php | 255 + .../core/inc/class.redux_themecheck.php | 123 + .../legacy-admin/framework/core/inc/debug.php | 84 + .../framework/core/inc/extensions/README.txt | 1 + .../customizer/extension_customizer.php | 683 +++ .../import_export/extension_import_export.php | 207 + .../import_export/field_import_export.css | 1 + .../import_export/field_import_export.js | 195 + .../import_export/field_import_export.min.js | 1 + .../import_export/field_import_export.php | 194 + .../import_export/field_import_export.scss | 13 + .../fields/ace_editor/field_ace_editor.css | 1 + .../inc/fields/ace_editor/field_ace_editor.js | 58 + .../fields/ace_editor/field_ace_editor.min.js | 1 + .../fields/ace_editor/field_ace_editor.php | 132 + .../fields/ace_editor/field_ace_editor.scss | 16 + .../core/inc/fields/ace_editor/vendor/ace.js | 11 + .../inc/fields/ace_editor/vendor/ext-emmet.js | 5 + .../fields/ace_editor/vendor/ext-searchbox.js | 5 + .../inc/fields/ace_editor/vendor/mode-css.js | 1 + .../inc/fields/ace_editor/vendor/mode-html.js | 1 + .../ace_editor/vendor/mode-javascript.js | 1 + .../inc/fields/ace_editor/vendor/mode-json.js | 1 + .../inc/fields/ace_editor/vendor/mode-less.js | 1 + .../fields/ace_editor/vendor/mode-markdown.js | 1 + .../fields/ace_editor/vendor/mode-mysql.js | 1 + .../inc/fields/ace_editor/vendor/mode-php.js | 1 + .../ace_editor/vendor/mode-plain_text.js | 1 + .../inc/fields/ace_editor/vendor/mode-sass.js | 1 + .../inc/fields/ace_editor/vendor/mode-scss.js | 1 + .../inc/fields/ace_editor/vendor/mode-text.js | 0 .../inc/fields/ace_editor/vendor/mode-xml.js | 1 + .../fields/ace_editor/vendor/snippets/css.js | 1 + .../fields/ace_editor/vendor/snippets/html.js | 1 + .../ace_editor/vendor/snippets/javascript.js | 1 + .../fields/ace_editor/vendor/snippets/json.js | 1 + .../fields/ace_editor/vendor/snippets/less.js | 1 + .../ace_editor/vendor/snippets/markdown.js | 1 + .../ace_editor/vendor/snippets/mysql.js | 1 + .../fields/ace_editor/vendor/snippets/php.js | 1 + .../ace_editor/vendor/snippets/plain_text.js | 1 + .../fields/ace_editor/vendor/snippets/sass.js | 1 + .../fields/ace_editor/vendor/snippets/scss.js | 1 + .../fields/ace_editor/vendor/snippets/text.js | 1 + .../fields/ace_editor/vendor/snippets/xml.js | 1 + .../fields/ace_editor/vendor/theme-chrome.js | 1 + .../fields/ace_editor/vendor/theme-monokai.js | 1 + .../fields/ace_editor/vendor/worker-css.js | 1 + .../fields/ace_editor/vendor/worker-html.js | 1 + .../ace_editor/vendor/worker-javascript.js | 1 + .../fields/ace_editor/vendor/worker-json.js | 1 + .../fields/ace_editor/vendor/worker-php.js | 1 + .../fields/background/field_background.css | 1 + .../inc/fields/background/field_background.js | 320 ++ .../fields/background/field_background.min.js | 1 + .../fields/background/field_background.php | 411 ++ .../fields/background/field_background.scss | 51 + .../core/inc/fields/border/field_border.css | 1 + .../core/inc/fields/border/field_border.js | 131 + .../inc/fields/border/field_border.min.js | 1 + .../core/inc/fields/border/field_border.php | 300 + .../core/inc/fields/border/field_border.scss | 47 + .../inc/fields/button_set/field_button_set.js | 56 + .../fields/button_set/field_button_set.min.js | 1 + .../fields/button_set/field_button_set.php | 138 + .../inc/fields/checkbox/field_checkbox.css | 1 + .../inc/fields/checkbox/field_checkbox.js | 55 + .../inc/fields/checkbox/field_checkbox.min.js | 1 + .../inc/fields/checkbox/field_checkbox.php | 157 + .../inc/fields/checkbox/field_checkbox.scss | 13 + .../core/inc/fields/color/field_color.js | 142 + .../core/inc/fields/color/field_color.min.js | 1 + .../core/inc/fields/color/field_color.php | 122 + .../color_gradient/field_color_gradient.css | 1 + .../color_gradient/field_color_gradient.js | 137 + .../field_color_gradient.min.js | 1 + .../color_gradient/field_color_gradient.php | 128 + .../color_gradient/field_color_gradient.scss | 17 + .../fields/color_rgba/field_color_rgba.css | 1 + .../inc/fields/color_rgba/field_color_rgba.js | 217 + .../fields/color_rgba/field_color_rgba.min.js | 1 + .../fields/color_rgba/field_color_rgba.php | 294 + .../fields/color_rgba/field_color_rgba.scss | 61 + .../core/inc/fields/date/field_date.css | 1 + .../core/inc/fields/date/field_date.js | 50 + .../core/inc/fields/date/field_date.min.js | 1 + .../core/inc/fields/date/field_date.php | 95 + .../core/inc/fields/date/field_date.scss | 8 + .../fields/dimensions/field_dimensions.css | 1 + .../inc/fields/dimensions/field_dimensions.js | 76 + .../fields/dimensions/field_dimensions.less | 30 + .../fields/dimensions/field_dimensions.min.js | 1 + .../fields/dimensions/field_dimensions.php | 306 ++ .../fields/dimensions/field_dimensions.scss | 33 + .../core/inc/fields/divide/field_divide.php | 65 + .../core/inc/fields/editor/field_editor.css | 1 + .../core/inc/fields/editor/field_editor.js | 42 + .../inc/fields/editor/field_editor.min.js | 1 + .../core/inc/fields/editor/field_editor.php | 115 + .../core/inc/fields/editor/field_editor.scss | 50 + .../core/inc/fields/gallery/field_gallery.js | 110 + .../inc/fields/gallery/field_gallery.min.js | 1 + .../core/inc/fields/gallery/field_gallery.php | 105 + .../image_select/field_image_select.css | 1 + .../fields/image_select/field_image_select.js | 119 + .../image_select/field_image_select.min.js | 1 + .../image_select/field_image_select.php | 270 + .../image_select/field_image_select.scss | 62 + .../core/inc/fields/info/field_info.css | 1 + .../core/inc/fields/info/field_info.php | 167 + .../core/inc/fields/info/field_info.scss | 140 + .../fields/link_color/field_link_color.css | 1 + .../inc/fields/link_color/field_link_color.js | 107 + .../fields/link_color/field_link_color.min.js | 1 + .../fields/link_color/field_link_color.php | 207 + .../fields/link_color/field_link_color.scss | 7 + .../core/inc/fields/media/field_media.css | 1 + .../core/inc/fields/media/field_media.less | 53 + .../core/inc/fields/media/field_media.php | 238 + .../core/inc/fields/media/field_media.scss | 61 + .../fields/multi_text/field_multi_text.css | 1 + .../inc/fields/multi_text/field_multi_text.js | 65 + .../fields/multi_text/field_multi_text.min.js | 1 + .../fields/multi_text/field_multi_text.php | 112 + .../fields/multi_text/field_multi_text.scss | 35 + .../inc/fields/password/field_password.php | 106 + .../core/inc/fields/radio/field_radio.php | 57 + .../core/inc/fields/raw/field_raw.php | 49 + .../core/inc/fields/raw/parsedown.php | 1403 +++++ .../core/inc/fields/section/field_section.css | 1 + .../core/inc/fields/section/field_section.php | 130 + .../inc/fields/section/field_section.scss | 24 + .../core/inc/fields/select/elusive-icons.php | 312 ++ .../core/inc/fields/select/field_select.css | 1 + .../core/inc/fields/select/field_select.js | 84 + .../inc/fields/select/field_select.min.js | 1 + .../core/inc/fields/select/field_select.php | 176 + .../core/inc/fields/select/field_select.scss | 9 + .../select_image/field_select_image.css | 1 + .../fields/select_image/field_select_image.js | 72 + .../select_image/field_select_image.min.js | 1 + .../select_image/field_select_image.php | 176 + .../select_image/field_select_image.scss | 19 + .../core/inc/fields/slider/field_slider.css | 1 + .../core/inc/fields/slider/field_slider.js | 268 + .../inc/fields/slider/field_slider.min.js | 1 + .../core/inc/fields/slider/field_slider.php | 412 ++ .../core/inc/fields/slider/field_slider.scss | 61 + .../nouislider/redux.jquery.nouislider.css | 172 + .../nouislider/redux.jquery.nouislider.js | 1420 +++++ .../nouislider/redux.jquery.nouislider.min.js | 20 + .../core/inc/fields/slides/field_slides.css | 1 + .../core/inc/fields/slides/field_slides.js | 150 + .../inc/fields/slides/field_slides.min.js | 1 + .../core/inc/fields/slides/field_slides.php | 270 + .../core/inc/fields/slides/field_slides.scss | 86 + .../inc/fields/sortable/field_sortable.css | 1 + .../inc/fields/sortable/field_sortable.js | 91 + .../inc/fields/sortable/field_sortable.min.js | 1 + .../inc/fields/sortable/field_sortable.php | 164 + .../inc/fields/sortable/field_sortable.scss | 54 + .../inc/fields/sorter/field_sorter-works.js | 40 + .../fields/sorter/field_sorter-works.min.js | 1 + .../core/inc/fields/sorter/field_sorter.css | 1 + .../core/inc/fields/sorter/field_sorter.js | 151 + .../inc/fields/sorter/field_sorter.min.js | 1 + .../core/inc/fields/sorter/field_sorter.php | 239 + .../core/inc/fields/sorter/field_sorter.scss | 56 + .../core/inc/fields/spacing/field_spacing.css | 1 + .../core/inc/fields/spacing/field_spacing.js | 86 + .../inc/fields/spacing/field_spacing.min.js | 1 + .../core/inc/fields/spacing/field_spacing.php | 385 ++ .../inc/fields/spacing/field_spacing.scss | 33 + .../core/inc/fields/spinner/arrow_left.png | Bin 0 -> 150 bytes .../core/inc/fields/spinner/arrow_right.png | Bin 0 -> 154 bytes .../core/inc/fields/spinner/field_spinner.css | 1 + .../core/inc/fields/spinner/field_spinner.js | 129 + .../inc/fields/spinner/field_spinner.min.js | 1 + .../core/inc/fields/spinner/field_spinner.php | 146 + .../inc/fields/spinner/field_spinner.scss | 101 + .../fields/spinner/vendor/spinner_custom.js | 1 + .../core/inc/fields/switch/field_switch.css | 1 + .../core/inc/fields/switch/field_switch.js | 91 + .../inc/fields/switch/field_switch.min.js | 1 + .../core/inc/fields/switch/field_switch.php | 79 + .../core/inc/fields/switch/field_switch.scss | 68 + .../core/inc/fields/switch/slider-control.png | Bin 0 -> 1690 bytes .../core/inc/fields/switch/switch.gif | Bin 0 -> 1233 bytes .../core/inc/fields/text/field_text.css | 1 + .../core/inc/fields/text/field_text.php | 92 + .../core/inc/fields/text/field_text.scss | 34 + .../inc/fields/textarea/field_textarea.php | 72 + .../fields/typography/field_typography.css | 1 + .../inc/fields/typography/field_typography.js | 638 +++ .../fields/typography/field_typography.min.js | 1 + .../fields/typography/field_typography.php | 1082 ++++ .../fields/typography/field_typography.scss | 231 + .../inc/fields/typography/googlefonts.php | 1 + .../core/inc/lib.redux_instances.php | 34 + .../framework/core/inc/scssphp/scss.inc.php | 4574 ++++++++++++++++ .../framework/core/inc/sysinfo.php | 280 + .../framework/core/inc/tracking.php | 499 ++ .../inc/validation/color/validation_color.php | 70 + .../color_rgba/validation_color_rgba.php | 62 + .../colorrgba/validation_colorrgba.php | 78 + .../validation_comma_numeric.php | 39 + .../inc/validation/css/validation_css.php | 45 + .../inc/validation/date/validation_date.php | 53 + .../inc/validation/email/validation_email.php | 37 + .../validation_email_not_empty.php | 37 + .../inc/validation/html/validation_html.php | 33 + .../html_custom/validation_html_custom.php | 33 + .../core/inc/validation/js/validation_js.php | 33 + .../validation/no_html/validation_no_html.php | 39 + .../validation_no_special_chars.php | 38 + .../not_empty/validation_not_empty.php | 37 + .../validation/numeric/validation_numeric.php | 37 + .../validation_numeric_not_empty.php | 36 + .../preg_replace/validation_preg_replace.php | 33 + .../str_replace/validation_str_replace.php | 33 + .../unique_slug/validation_unique_slug.php | 69 + .../inc/validation/url/validation_url.php | 39 + .../core/inc/welcome/css/redux-welcome.css | 1 + .../core/inc/welcome/css/redux-welcome.scss | 729 +++ .../core/inc/welcome/js/jquery.easing.min.js | 44 + .../inc/welcome/js/redux-welcome-admin.js | 290 + .../js/zeroclipboard/ZeroClipboard.swf | Bin 0 -> 4045 bytes .../js/zeroclipboard/jquery.zeroclipboard.js | 1881 +++++++ .../zeroclipboard/jquery.zeroclipboard.min.js | 17 + .../core/inc/welcome/views/about.php | 79 + .../core/inc/welcome/views/changelog.php | 20 + .../core/inc/welcome/views/credits.php | 17 + .../core/inc/welcome/views/extensions.php | 147 + .../core/inc/welcome/views/status_report.php | 692 +++ .../core/inc/welcome/views/support.php | 229 + .../framework/core/inc/welcome/welcome.php | 558 ++ .../framework/core/languages/README.txt | 1 + .../framework/core/languages/ar.mo | Bin 0 -> 19075 bytes .../framework/core/languages/bg_BG.mo | Bin 0 -> 8474 bytes .../framework/core/languages/bn_BD.mo | Bin 0 -> 6761 bytes .../framework/core/languages/cs_CZ.mo | Bin 0 -> 22580 bytes .../framework/core/languages/da_DK.mo | Bin 0 -> 6449 bytes .../framework/core/languages/de_DE.mo | Bin 0 -> 18003 bytes .../framework/core/languages/el.mo | Bin 0 -> 18442 bytes .../framework/core/languages/es_ES.mo | Bin 0 -> 16206 bytes .../framework/core/languages/es_MX.mo | Bin 0 -> 6325 bytes .../framework/core/languages/fa_IR.mo | Bin 0 -> 19316 bytes .../framework/core/languages/fi.mo | Bin 0 -> 4727 bytes .../framework/core/languages/fr_FR.mo | Bin 0 -> 23875 bytes .../framework/core/languages/he_IL.mo | Bin 0 -> 11072 bytes .../framework/core/languages/hi_IN.mo | Bin 0 -> 9289 bytes .../framework/core/languages/hr.mo | Bin 0 -> 9232 bytes .../framework/core/languages/hu_HU.mo | Bin 0 -> 8504 bytes .../framework/core/languages/id_ID.mo | Bin 0 -> 9286 bytes .../framework/core/languages/it_IT.mo | Bin 0 -> 16176 bytes .../framework/core/languages/ja.mo | Bin 0 -> 19459 bytes .../framework/core/languages/km.mo | Bin 0 -> 9679 bytes .../framework/core/languages/lt_LT.mo | 0 .../framework/core/languages/nb_NO.mo | Bin 0 -> 22069 bytes .../framework/core/languages/ne_NP.mo | Bin 0 -> 13862 bytes .../framework/core/languages/nl_NL.mo | Bin 0 -> 16640 bytes .../framework/core/languages/pl_PL.mo | Bin 0 -> 22533 bytes .../framework/core/languages/pt_BR.mo | Bin 0 -> 22782 bytes .../framework/core/languages/pt_PT.mo | Bin 0 -> 7065 bytes .../core/languages/redux-framework.pot | 1540 ++++++ .../framework/core/languages/ro_RO.mo | Bin 0 -> 23543 bytes .../framework/core/languages/ru_RU.mo | Bin 0 -> 22425 bytes .../framework/core/languages/sk_SK.mo | Bin 0 -> 7898 bytes .../framework/core/languages/sl_SI.mo | Bin 0 -> 4548 bytes .../framework/core/languages/sv_SE.mo | Bin 0 -> 13234 bytes .../framework/core/languages/th.mo | Bin 0 -> 8714 bytes .../framework/core/languages/tr_TR.mo | Bin 0 -> 21185 bytes .../framework/core/languages/zh_CN.mo | Bin 0 -> 16659 bytes .../core/templates/panel/container.tpl.php | 44 + .../core/templates/panel/content.tpl.php | 121 + .../core/templates/panel/footer.tpl.php | 57 + .../core/templates/panel/header.tpl.php | 31 + .../templates/panel/header_stickybar.tpl.php | 36 + .../templates/panel/menu_container.tpl.php | 67 + .../framework/options/legacy-config.php | 2165 ++++++++ .../apple-touch-icon-114-precomposed.png | Bin 0 -> 790 bytes .../apple-touch-icon-144-precomposed.png | Bin 0 -> 507 bytes .../apple-touch-icon-57-precomposed.png | Bin 0 -> 553 bytes .../apple-touch-icon-72-precomposed.png | Bin 0 -> 569 bytes plugins/legacy-admin/images/assets/color1.jpg | Bin 0 -> 1504 bytes .../legacy-admin/images/assets/color10.jpg | Bin 0 -> 1372 bytes .../legacy-admin/images/assets/color11.jpg | Bin 0 -> 1480 bytes .../legacy-admin/images/assets/color12.jpg | Bin 0 -> 1235 bytes .../legacy-admin/images/assets/color13.jpg | Bin 0 -> 1444 bytes .../legacy-admin/images/assets/color14.jpg | Bin 0 -> 1494 bytes .../legacy-admin/images/assets/color15.jpg | Bin 0 -> 1623 bytes .../legacy-admin/images/assets/color16.jpg | Bin 0 -> 1495 bytes .../legacy-admin/images/assets/color17.jpg | Bin 0 -> 1490 bytes .../legacy-admin/images/assets/color18.jpg | Bin 0 -> 1536 bytes .../legacy-admin/images/assets/color19.jpg | Bin 0 -> 1577 bytes plugins/legacy-admin/images/assets/color2.jpg | Bin 0 -> 1574 bytes .../legacy-admin/images/assets/color20.jpg | Bin 0 -> 1516 bytes .../legacy-admin/images/assets/color21.jpg | Bin 0 -> 11739 bytes .../legacy-admin/images/assets/color22.jpg | Bin 0 -> 11331 bytes .../legacy-admin/images/assets/color23.jpg | Bin 0 -> 17697 bytes .../legacy-admin/images/assets/color24.jpg | Bin 0 -> 17761 bytes .../legacy-admin/images/assets/color25.jpg | Bin 0 -> 18073 bytes plugins/legacy-admin/images/assets/color3.jpg | Bin 0 -> 1540 bytes plugins/legacy-admin/images/assets/color4.jpg | Bin 0 -> 1528 bytes plugins/legacy-admin/images/assets/color5.jpg | Bin 0 -> 1698 bytes plugins/legacy-admin/images/assets/color6.jpg | Bin 0 -> 1416 bytes plugins/legacy-admin/images/assets/color7.jpg | Bin 0 -> 1532 bytes plugins/legacy-admin/images/assets/color8.jpg | Bin 0 -> 1582 bytes plugins/legacy-admin/images/assets/color9.jpg | Bin 0 -> 1606 bytes plugins/legacy-admin/images/assets/custom.jpg | Bin 0 -> 1806 bytes plugins/legacy-admin/images/favicon.png | Bin 0 -> 288 bytes plugins/legacy-admin/images/login-bg.png | Bin 0 -> 567513 bytes plugins/legacy-admin/images/login-logo.png | Bin 0 -> 1833 bytes plugins/legacy-admin/images/logo-folded.png | Bin 0 -> 337 bytes plugins/legacy-admin/images/logo.png | Bin 0 -> 1126 bytes .../js/legacy-jquery.ui.elements.js | 535 ++ .../legacy-admin/js/legacy-login-scripts.js | 41 + plugins/legacy-admin/js/legacy-pace-script.js | 21 + plugins/legacy-admin/js/legacy-pace.min.js | 352 ++ .../js/legacy-scripts-menu-management.js | 260 + plugins/legacy-admin/js/legacy-scripts.js | 171 + .../js/legacy-smoothscroll.min.js | 1 + plugins/legacy-admin/legacy-core.php | 124 + .../legacy-admin/lib/envato-plugin-update.php | 203 + plugins/legacy-admin/lib/legacy-color-lib.php | 197 + plugins/legacy-admin/lib/legacy-css-lib.php | 464 ++ .../legacy-admin/lib/legacy-css-version.php | 29 + .../legacy-admin/lib/legacy-custom-colors.php | 1081 ++++ plugins/legacy-admin/lib/legacy-fonts.php | 276 + plugins/legacy-admin/lib/legacy-functions.php | 1014 ++++ plugins/legacy-admin/lib/legacy-login.php | 172 + plugins/legacy-admin/lib/legacy-logo.php | 198 + .../legacy-admin/lib/legacy-menu-settings.php | 955 ++++ .../legacy-admin/lib/legacy-pageloader.php | 41 + .../legacy-admin/lib/legacy-register-hook.php | 52 + plugins/legacy-admin/lib/legacy-settings.php | 378 ++ plugins/legacy-admin/lib/legacy-topbar.php | 216 + plugins/rosariosis-rest-api/Gruntfile.js | 96 + plugins/rosariosis-rest-api/LICENSE | 339 ++ .../rosariosis-rest-api/assets/css/admin.css | 0 .../rosariosis-rest-api/assets/css/admin.less | 0 .../assets/css/frontend.css | 0 .../assets/css/frontend.less | 0 .../assets/img/icon-128x128.png | Bin 0 -> 1687 bytes .../assets/img/icon-256x256.png | Bin 0 -> 3819 bytes .../rosariosis-rest-api/assets/img/icon.png | Bin 0 -> 4324 bytes .../rosariosis-rest-api/assets/js/admin.js | 5 + .../assets/js/admin.min.js | 1 + .../rosariosis-rest-api/assets/js/frontend.js | 5 + .../assets/js/frontend.min.js | 1 + .../rosariosis-rest-api/assets/js/settings.js | 71 + .../assets/js/settings.min.js | 1 + .../class-rosariosis-rest-api-controller.php | 936 ++++ .../class-rosariosis-rest-api-settings.php | 442 ++ .../includes/class-rosariosis-rest-api.php | 320 ++ .../class-rosariosis-rest-api-admin-api.php | 388 ++ .../class-rosariosis-rest-api-post-type.php | 191 + .../class-rosariosis-rest-api-taxonomy.php | 143 + plugins/rosariosis-rest-api/index.php | 2 + .../lang/rosariosis-rest-api-fr_FR.mo | Bin 0 -> 1633 bytes .../lang/rosariosis-rest-api-fr_FR.po | 62 + .../lang/rosariosis-rest-api.pot | 49 + plugins/rosariosis-rest-api/package.json | 14 + plugins/rosariosis-rest-api/readme.txt | 69 + .../rosariosis-rest-api.php | 48 + plugins/rosariosis-rest-api/uninstall.php | 16 + vendor/autoload.php | 12 + vendor/composer/ClassLoader.php | 572 ++ vendor/composer/InstalledVersions.php | 352 ++ vendor/composer/LICENSE | 21 + vendor/composer/autoload_classmap.php | 10 + vendor/composer/autoload_namespaces.php | 9 + vendor/composer/autoload_psr4.php | 9 + vendor/composer/autoload_real.php | 38 + vendor/composer/autoload_static.php | 20 + vendor/composer/installed.json | 5 + vendor/composer/installed.php | 23 + vendor/composer/platform_check.php | 26 + 639 files changed, 87276 insertions(+), 1274 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/codeStyles/Project.xml create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/php.xml create mode 100644 .idea/sms.iml create mode 100644 .idea/vcs.xml create mode 100644 assets/js/plugins.js create mode 100644 assets/themes/WPadmin/stylesheet.min.css create mode 100644 assets/themes/WPadmin/stylesheet_wkhtmltopdf.min.css create mode 100644 composer.lock create mode 100644 modules/Automatic_Attendance/Configuration.php create mode 100644 modules/Automatic_Attendance/LICENSE create mode 100644 modules/Automatic_Attendance/Menu.php create mode 100644 modules/Automatic_Attendance/README.md create mode 100644 modules/Automatic_Attendance/config.inc.php create mode 100644 modules/Automatic_Attendance/functions.php create mode 100644 modules/Automatic_Attendance/icon.png create mode 100644 modules/Automatic_Attendance/includes/common.fnc.php create mode 100644 modules/Automatic_Attendance/install.sql create mode 100644 modules/Automatic_Attendance/install_mysql.sql create mode 100644 modules/Automatic_Attendance/locale/README create mode 100644 modules/Automatic_Attendance/locale/es_ES.utf8/LC_MESSAGES/Automatic_Attendance.mo create mode 100644 modules/Automatic_Attendance/locale/es_ES.utf8/LC_MESSAGES/Automatic_Attendance.po create mode 100644 modules/Automatic_Attendance/locale/fr_FR.utf8/LC_MESSAGES/Automatic_Attendance.mo create mode 100644 modules/Automatic_Attendance/locale/fr_FR.utf8/LC_MESSAGES/Automatic_Attendance.po create mode 100644 modules/Automatic_Attendance/screenshot-es.png create mode 100644 modules/Automatic_Attendance/screenshot-fr.png create mode 100644 modules/Automatic_Attendance/screenshot.png create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/images/animated-overlay.gif create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/images/ui-icons_222222_256x240.png create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/images/ui-icons_2e83ff_256x240.png create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/images/ui-icons_454545_256x240.png create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/images/ui-icons_888888_256x240.png create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/images/ui-icons_cd0a0a_256x240.png create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/jquery-ui.min.css create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/jquery.ui.accordion.min.css create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/jquery.ui.autocomplete.min.css create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/jquery.ui.button.min.css create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/jquery.ui.core.min.css create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/jquery.ui.datepicker.min.css create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/jquery.ui.dialog.min.css create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/jquery.ui.menu.min.css create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/jquery.ui.progressbar.min.css create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/jquery.ui.resizable.min.css create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/jquery.ui.selectable.min.css create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/jquery.ui.slider.min.css create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/jquery.ui.spinner.min.css create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/jquery.ui.tabs.min.css create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/jquery.ui.theme.min.css create mode 100644 plugins/legacy-admin/css/jquery-ui/minified/jquery.ui.tooltip.min.css create mode 100644 plugins/legacy-admin/css/legacy-ame.css create mode 100644 plugins/legacy-admin/css/legacy-ame.min.css create mode 100644 plugins/legacy-admin/css/legacy-external.css create mode 100644 plugins/legacy-admin/css/legacy-external.min.css create mode 100644 plugins/legacy-admin/css/legacy-pace.css create mode 100644 plugins/legacy-admin/css/legacy-pace.min.css create mode 100644 plugins/legacy-admin/css/legacy-wordfence.css create mode 100644 plugins/legacy-admin/css/legacy-wordfence.min.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color1.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color10.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color11.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color12.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color13.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color14.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color15.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color16.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color17.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color18.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color19.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color2.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color20.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color21.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color22.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color23.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color24.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color25.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color3.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color4.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color5.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color6.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color7.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color8.css create mode 100644 plugins/legacy-admin/css40/colors/legacy-colors-color9.css create mode 100644 plugins/legacy-admin/css40/dynamic_css.php create mode 100644 plugins/legacy-admin/css40/legacy-admin-menu-management.css create mode 100644 plugins/legacy-admin/css40/legacy-admin-menu-management.min.css create mode 100644 plugins/legacy-admin/css40/legacy-admin.css create mode 100644 plugins/legacy-admin/css40/legacy-admin.min.css create mode 100644 plugins/legacy-admin/css40/legacy-colors-site-1.css create mode 100644 plugins/legacy-admin/css40/legacy-colors.css create mode 100644 plugins/legacy-admin/css40/legacy-login.css create mode 100644 plugins/legacy-admin/css40/legacy-login.min.css create mode 100644 plugins/legacy-admin/framework/core/assets/css/color-picker/color-picker.css create mode 100644 plugins/legacy-admin/framework/core/assets/css/color-picker/color-picker.scss create mode 100644 plugins/legacy-admin/framework/core/assets/css/import_export/import_export.css create mode 100644 plugins/legacy-admin/framework/core/assets/css/media/media.css create mode 100644 plugins/legacy-admin/framework/core/assets/css/media/media.scss create mode 100644 plugins/legacy-admin/framework/core/assets/css/redux-admin.css create mode 100644 plugins/legacy-admin/framework/core/assets/css/redux-admin.scss create mode 100644 plugins/legacy-admin/framework/core/assets/css/redux-fields.css create mode 100644 plugins/legacy-admin/framework/core/assets/css/redux-vendor.css create mode 100644 plugins/legacy-admin/framework/core/assets/css/rtl.css create mode 100644 plugins/legacy-admin/framework/core/assets/css/rtl.scss create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/elusive-icons.css create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/fonts/elusiveicons-webfont.eot create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/fonts/elusiveicons-webfont.svg create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/fonts/elusiveicons-webfont.ttf create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/fonts/elusiveicons-webfont.woff create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/scss/_animated.scss create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/scss/_bordered-pulled.scss create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/scss/_core.scss create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/scss/_fixed-width.scss create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/scss/_icons.scss create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/scss/_larger.scss create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/scss/_list.scss create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/scss/_mixins.scss create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/scss/_path.scss create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/scss/_rotated-flipped.scss create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/scss/_stacked.scss create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/scss/_variables.scss create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/scss/elusive-icons.css create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/scss/elusive-icons.css.map create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/elusive-icons/scss/elusive-icons.scss create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_glass_75_ffffff_1x400.png create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_inset-soft_95_fef1ec_1x100.png create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/jquery-ui-bootstrap/images/ui-icons_222222_256x240.png create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/jquery-ui-bootstrap/images/ui-icons_2e83ff_256x240.png create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/jquery-ui-bootstrap/images/ui-icons_454545_256x240.png create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/jquery-ui-bootstrap/images/ui-icons_888888_256x240.png create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/jquery-ui-bootstrap/images/ui-icons_cd0a0a_256x240.png create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/jquery-ui-bootstrap/images/ui-icons_f6cf3b_256x240.png create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/jquery-ui-bootstrap/images/ui-icons_ffffff_256x240.png create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.css create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.less create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.scss create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/qtip/jquery.qtip.css create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/qtip/jquery.qtip.min.css create mode 100644 plugins/legacy-admin/framework/core/assets/css/vendor/spectrum/redux-spectrum.css create mode 100644 plugins/legacy-admin/framework/core/assets/img/1c.png create mode 100644 plugins/legacy-admin/framework/core/assets/img/1col.png create mode 100644 plugins/legacy-admin/framework/core/assets/img/2-col-portfolio.png create mode 100644 plugins/legacy-admin/framework/core/assets/img/2cl.png create mode 100644 plugins/legacy-admin/framework/core/assets/img/2cr.png create mode 100644 plugins/legacy-admin/framework/core/assets/img/3-col-portfolio.png create mode 100644 plugins/legacy-admin/framework/core/assets/img/3cl.png create mode 100644 plugins/legacy-admin/framework/core/assets/img/3cm.png create mode 100644 plugins/legacy-admin/framework/core/assets/img/3cr.png create mode 100644 plugins/legacy-admin/framework/core/assets/img/4-col-portfolio.png create mode 100644 plugins/legacy-admin/framework/core/assets/img/ajax.gif create mode 100644 plugins/legacy-admin/framework/core/assets/img/menu_icon.png create mode 100644 plugins/legacy-admin/framework/core/assets/img/toggle_tabs.png create mode 100644 plugins/legacy-admin/framework/core/assets/js/media/media.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/media/media.min.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/redux.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/redux.min.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor.min.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/cookie.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/jquery.alphanum.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/jquery.serializeForm.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/jquery.typewatch.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/jsonview.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/jsonview.min.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/lte-ie7.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/qtip/jquery.qtip.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/qtip/jquery.qtip.min.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/redux.select2.sortable.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/redux.select2.sortable.min.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/README.md create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/release.sh create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2-bootstrap.css create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2-spinner.gif create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2.css create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2.jquery.json create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2.min.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2.png create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ar.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_az.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_bg.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ca.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_cs.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_da.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_de.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_el.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_en.js.template create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_es.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_et.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_eu.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_fa.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_fi.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_fr.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_gl.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_he.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_hr.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_hu.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_id.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_is.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_it.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ja.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ka.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ko.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_lt.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_lv.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_mk.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ms.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_nb.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_nl.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_pl.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_pt-BR.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_pt-PT.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ro.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_rs.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ru.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_sk.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_sv.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_th.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_tr.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ug-CN.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_uk.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_vi.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_zh-CN.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_zh-TW.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2x2.png create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/spectrum/redux-spectrum.js create mode 100644 plugins/legacy-admin/framework/core/assets/js/vendor/spectrum/redux-spectrum.min.js create mode 100644 plugins/legacy-admin/framework/core/core/dashboard.php create mode 100644 plugins/legacy-admin/framework/core/core/enqueue.php create mode 100644 plugins/legacy-admin/framework/core/core/newsflash.php create mode 100644 plugins/legacy-admin/framework/core/core/panel.php create mode 100644 plugins/legacy-admin/framework/core/core/required.php create mode 100644 plugins/legacy-admin/framework/core/framework.php create mode 100644 plugins/legacy-admin/framework/core/inc/browser.php create mode 100644 plugins/legacy-admin/framework/core/inc/class.p.php create mode 100644 plugins/legacy-admin/framework/core/inc/class.redux_api.php create mode 100644 plugins/legacy-admin/framework/core/inc/class.redux_filesystem.php create mode 100644 plugins/legacy-admin/framework/core/inc/class.redux_functions.php create mode 100644 plugins/legacy-admin/framework/core/inc/class.redux_helpers.php create mode 100644 plugins/legacy-admin/framework/core/inc/class.redux_instances.php create mode 100644 plugins/legacy-admin/framework/core/inc/class.redux_sass.php create mode 100644 plugins/legacy-admin/framework/core/inc/class.redux_themecheck.php create mode 100644 plugins/legacy-admin/framework/core/inc/debug.php create mode 100644 plugins/legacy-admin/framework/core/inc/extensions/README.txt create mode 100644 plugins/legacy-admin/framework/core/inc/extensions/customizer/extension_customizer.php create mode 100644 plugins/legacy-admin/framework/core/inc/extensions/import_export/extension_import_export.php create mode 100644 plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.css create mode 100644 plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.js create mode 100644 plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.php create mode 100644 plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/ace.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/ext-emmet.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/ext-searchbox.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-css.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-html.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-javascript.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-json.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-less.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-markdown.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-mysql.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-php.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-plain_text.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-sass.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-scss.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-text.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-xml.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/snippets/css.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/snippets/html.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/snippets/javascript.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/snippets/json.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/snippets/less.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/snippets/markdown.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/snippets/mysql.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/snippets/php.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/snippets/plain_text.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/snippets/sass.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/snippets/scss.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/snippets/text.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/snippets/xml.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/theme-chrome.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/theme-monokai.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/worker-css.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/worker-html.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/worker-javascript.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/worker-json.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/worker-php.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/background/field_background.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/background/field_background.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/background/field_background.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/background/field_background.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/background/field_background.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/border/field_border.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/border/field_border.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/border/field_border.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/border/field_border.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/border/field_border.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/button_set/field_button_set.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/button_set/field_button_set.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/button_set/field_button_set.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/checkbox/field_checkbox.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/checkbox/field_checkbox.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/checkbox/field_checkbox.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/checkbox/field_checkbox.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/checkbox/field_checkbox.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/color/field_color.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/color/field_color.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/color/field_color.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/color_gradient/field_color_gradient.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/color_gradient/field_color_gradient.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/color_gradient/field_color_gradient.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/color_gradient/field_color_gradient.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/color_gradient/field_color_gradient.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/color_rgba/field_color_rgba.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/color_rgba/field_color_rgba.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/color_rgba/field_color_rgba.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/color_rgba/field_color_rgba.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/color_rgba/field_color_rgba.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/date/field_date.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/date/field_date.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/date/field_date.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/date/field_date.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/date/field_date.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/dimensions/field_dimensions.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/dimensions/field_dimensions.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/dimensions/field_dimensions.less create mode 100644 plugins/legacy-admin/framework/core/inc/fields/dimensions/field_dimensions.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/dimensions/field_dimensions.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/dimensions/field_dimensions.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/divide/field_divide.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/editor/field_editor.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/editor/field_editor.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/editor/field_editor.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/editor/field_editor.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/editor/field_editor.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/gallery/field_gallery.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/gallery/field_gallery.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/gallery/field_gallery.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/image_select/field_image_select.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/image_select/field_image_select.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/image_select/field_image_select.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/image_select/field_image_select.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/image_select/field_image_select.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/info/field_info.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/info/field_info.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/info/field_info.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/link_color/field_link_color.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/link_color/field_link_color.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/link_color/field_link_color.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/link_color/field_link_color.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/link_color/field_link_color.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/media/field_media.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/media/field_media.less create mode 100644 plugins/legacy-admin/framework/core/inc/fields/media/field_media.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/media/field_media.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/multi_text/field_multi_text.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/multi_text/field_multi_text.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/multi_text/field_multi_text.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/multi_text/field_multi_text.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/multi_text/field_multi_text.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/password/field_password.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/radio/field_radio.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/raw/field_raw.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/raw/parsedown.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/section/field_section.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/section/field_section.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/section/field_section.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/select/elusive-icons.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/select/field_select.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/select/field_select.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/select/field_select.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/select/field_select.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/select/field_select.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/slider/vendor/nouislider/redux.jquery.nouislider.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/slider/vendor/nouislider/redux.jquery.nouislider.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/slider/vendor/nouislider/redux.jquery.nouislider.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/slides/field_slides.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/slides/field_slides.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/slides/field_slides.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/slides/field_slides.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/slides/field_slides.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/sortable/field_sortable.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/sortable/field_sortable.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/sortable/field_sortable.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/sortable/field_sortable.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/sortable/field_sortable.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/sorter/field_sorter-works.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/sorter/field_sorter-works.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/sorter/field_sorter.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/sorter/field_sorter.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/sorter/field_sorter.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/sorter/field_sorter.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/sorter/field_sorter.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/spacing/field_spacing.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/spacing/field_spacing.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/spacing/field_spacing.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/spacing/field_spacing.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/spacing/field_spacing.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/spinner/arrow_left.png create mode 100644 plugins/legacy-admin/framework/core/inc/fields/spinner/arrow_right.png create mode 100644 plugins/legacy-admin/framework/core/inc/fields/spinner/field_spinner.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/spinner/field_spinner.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/spinner/field_spinner.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/spinner/field_spinner.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/spinner/field_spinner.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/spinner/vendor/spinner_custom.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/switch/field_switch.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/switch/field_switch.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/switch/field_switch.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/switch/field_switch.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/switch/field_switch.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/switch/slider-control.png create mode 100644 plugins/legacy-admin/framework/core/inc/fields/switch/switch.gif create mode 100644 plugins/legacy-admin/framework/core/inc/fields/text/field_text.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/text/field_text.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/text/field_text.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/textarea/field_textarea.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/typography/field_typography.css create mode 100644 plugins/legacy-admin/framework/core/inc/fields/typography/field_typography.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/typography/field_typography.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/fields/typography/field_typography.php create mode 100644 plugins/legacy-admin/framework/core/inc/fields/typography/field_typography.scss create mode 100644 plugins/legacy-admin/framework/core/inc/fields/typography/googlefonts.php create mode 100644 plugins/legacy-admin/framework/core/inc/lib.redux_instances.php create mode 100644 plugins/legacy-admin/framework/core/inc/scssphp/scss.inc.php create mode 100644 plugins/legacy-admin/framework/core/inc/sysinfo.php create mode 100644 plugins/legacy-admin/framework/core/inc/tracking.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/color/validation_color.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/color_rgba/validation_color_rgba.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/colorrgba/validation_colorrgba.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/comma_numeric/validation_comma_numeric.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/css/validation_css.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/date/validation_date.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/email/validation_email.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/email_not_empty/validation_email_not_empty.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/html/validation_html.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/html_custom/validation_html_custom.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/js/validation_js.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/no_html/validation_no_html.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/no_special_chars/validation_no_special_chars.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/not_empty/validation_not_empty.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/numeric/validation_numeric.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/numeric_not_empty/validation_numeric_not_empty.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/preg_replace/validation_preg_replace.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/str_replace/validation_str_replace.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/unique_slug/validation_unique_slug.php create mode 100644 plugins/legacy-admin/framework/core/inc/validation/url/validation_url.php create mode 100644 plugins/legacy-admin/framework/core/inc/welcome/css/redux-welcome.css create mode 100644 plugins/legacy-admin/framework/core/inc/welcome/css/redux-welcome.scss create mode 100644 plugins/legacy-admin/framework/core/inc/welcome/js/jquery.easing.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/welcome/js/redux-welcome-admin.js create mode 100644 plugins/legacy-admin/framework/core/inc/welcome/js/zeroclipboard/ZeroClipboard.swf create mode 100644 plugins/legacy-admin/framework/core/inc/welcome/js/zeroclipboard/jquery.zeroclipboard.js create mode 100644 plugins/legacy-admin/framework/core/inc/welcome/js/zeroclipboard/jquery.zeroclipboard.min.js create mode 100644 plugins/legacy-admin/framework/core/inc/welcome/views/about.php create mode 100644 plugins/legacy-admin/framework/core/inc/welcome/views/changelog.php create mode 100644 plugins/legacy-admin/framework/core/inc/welcome/views/credits.php create mode 100644 plugins/legacy-admin/framework/core/inc/welcome/views/extensions.php create mode 100644 plugins/legacy-admin/framework/core/inc/welcome/views/status_report.php create mode 100644 plugins/legacy-admin/framework/core/inc/welcome/views/support.php create mode 100644 plugins/legacy-admin/framework/core/inc/welcome/welcome.php create mode 100644 plugins/legacy-admin/framework/core/languages/README.txt create mode 100644 plugins/legacy-admin/framework/core/languages/ar.mo create mode 100644 plugins/legacy-admin/framework/core/languages/bg_BG.mo create mode 100644 plugins/legacy-admin/framework/core/languages/bn_BD.mo create mode 100644 plugins/legacy-admin/framework/core/languages/cs_CZ.mo create mode 100644 plugins/legacy-admin/framework/core/languages/da_DK.mo create mode 100644 plugins/legacy-admin/framework/core/languages/de_DE.mo create mode 100644 plugins/legacy-admin/framework/core/languages/el.mo create mode 100644 plugins/legacy-admin/framework/core/languages/es_ES.mo create mode 100644 plugins/legacy-admin/framework/core/languages/es_MX.mo create mode 100644 plugins/legacy-admin/framework/core/languages/fa_IR.mo create mode 100644 plugins/legacy-admin/framework/core/languages/fi.mo create mode 100644 plugins/legacy-admin/framework/core/languages/fr_FR.mo create mode 100644 plugins/legacy-admin/framework/core/languages/he_IL.mo create mode 100644 plugins/legacy-admin/framework/core/languages/hi_IN.mo create mode 100644 plugins/legacy-admin/framework/core/languages/hr.mo create mode 100644 plugins/legacy-admin/framework/core/languages/hu_HU.mo create mode 100644 plugins/legacy-admin/framework/core/languages/id_ID.mo create mode 100644 plugins/legacy-admin/framework/core/languages/it_IT.mo create mode 100644 plugins/legacy-admin/framework/core/languages/ja.mo create mode 100644 plugins/legacy-admin/framework/core/languages/km.mo create mode 100644 plugins/legacy-admin/framework/core/languages/lt_LT.mo create mode 100644 plugins/legacy-admin/framework/core/languages/nb_NO.mo create mode 100644 plugins/legacy-admin/framework/core/languages/ne_NP.mo create mode 100644 plugins/legacy-admin/framework/core/languages/nl_NL.mo create mode 100644 plugins/legacy-admin/framework/core/languages/pl_PL.mo create mode 100644 plugins/legacy-admin/framework/core/languages/pt_BR.mo create mode 100644 plugins/legacy-admin/framework/core/languages/pt_PT.mo create mode 100644 plugins/legacy-admin/framework/core/languages/redux-framework.pot create mode 100644 plugins/legacy-admin/framework/core/languages/ro_RO.mo create mode 100644 plugins/legacy-admin/framework/core/languages/ru_RU.mo create mode 100644 plugins/legacy-admin/framework/core/languages/sk_SK.mo create mode 100644 plugins/legacy-admin/framework/core/languages/sl_SI.mo create mode 100644 plugins/legacy-admin/framework/core/languages/sv_SE.mo create mode 100644 plugins/legacy-admin/framework/core/languages/th.mo create mode 100644 plugins/legacy-admin/framework/core/languages/tr_TR.mo create mode 100644 plugins/legacy-admin/framework/core/languages/zh_CN.mo create mode 100644 plugins/legacy-admin/framework/core/templates/panel/container.tpl.php create mode 100644 plugins/legacy-admin/framework/core/templates/panel/content.tpl.php create mode 100644 plugins/legacy-admin/framework/core/templates/panel/footer.tpl.php create mode 100644 plugins/legacy-admin/framework/core/templates/panel/header.tpl.php create mode 100644 plugins/legacy-admin/framework/core/templates/panel/header_stickybar.tpl.php create mode 100644 plugins/legacy-admin/framework/core/templates/panel/menu_container.tpl.php create mode 100644 plugins/legacy-admin/framework/options/legacy-config.php create mode 100644 plugins/legacy-admin/images/apple-touch-icon-114-precomposed.png create mode 100644 plugins/legacy-admin/images/apple-touch-icon-144-precomposed.png create mode 100644 plugins/legacy-admin/images/apple-touch-icon-57-precomposed.png create mode 100644 plugins/legacy-admin/images/apple-touch-icon-72-precomposed.png create mode 100644 plugins/legacy-admin/images/assets/color1.jpg create mode 100644 plugins/legacy-admin/images/assets/color10.jpg create mode 100644 plugins/legacy-admin/images/assets/color11.jpg create mode 100644 plugins/legacy-admin/images/assets/color12.jpg create mode 100644 plugins/legacy-admin/images/assets/color13.jpg create mode 100644 plugins/legacy-admin/images/assets/color14.jpg create mode 100644 plugins/legacy-admin/images/assets/color15.jpg create mode 100644 plugins/legacy-admin/images/assets/color16.jpg create mode 100644 plugins/legacy-admin/images/assets/color17.jpg create mode 100644 plugins/legacy-admin/images/assets/color18.jpg create mode 100644 plugins/legacy-admin/images/assets/color19.jpg create mode 100644 plugins/legacy-admin/images/assets/color2.jpg create mode 100644 plugins/legacy-admin/images/assets/color20.jpg create mode 100644 plugins/legacy-admin/images/assets/color21.jpg create mode 100644 plugins/legacy-admin/images/assets/color22.jpg create mode 100644 plugins/legacy-admin/images/assets/color23.jpg create mode 100644 plugins/legacy-admin/images/assets/color24.jpg create mode 100644 plugins/legacy-admin/images/assets/color25.jpg create mode 100644 plugins/legacy-admin/images/assets/color3.jpg create mode 100644 plugins/legacy-admin/images/assets/color4.jpg create mode 100644 plugins/legacy-admin/images/assets/color5.jpg create mode 100644 plugins/legacy-admin/images/assets/color6.jpg create mode 100644 plugins/legacy-admin/images/assets/color7.jpg create mode 100644 plugins/legacy-admin/images/assets/color8.jpg create mode 100644 plugins/legacy-admin/images/assets/color9.jpg create mode 100644 plugins/legacy-admin/images/assets/custom.jpg create mode 100644 plugins/legacy-admin/images/favicon.png create mode 100644 plugins/legacy-admin/images/login-bg.png create mode 100644 plugins/legacy-admin/images/login-logo.png create mode 100644 plugins/legacy-admin/images/logo-folded.png create mode 100644 plugins/legacy-admin/images/logo.png create mode 100644 plugins/legacy-admin/js/legacy-jquery.ui.elements.js create mode 100644 plugins/legacy-admin/js/legacy-login-scripts.js create mode 100644 plugins/legacy-admin/js/legacy-pace-script.js create mode 100644 plugins/legacy-admin/js/legacy-pace.min.js create mode 100644 plugins/legacy-admin/js/legacy-scripts-menu-management.js create mode 100644 plugins/legacy-admin/js/legacy-scripts.js create mode 100644 plugins/legacy-admin/js/legacy-smoothscroll.min.js create mode 100644 plugins/legacy-admin/legacy-core.php create mode 100644 plugins/legacy-admin/lib/envato-plugin-update.php create mode 100644 plugins/legacy-admin/lib/legacy-color-lib.php create mode 100644 plugins/legacy-admin/lib/legacy-css-lib.php create mode 100644 plugins/legacy-admin/lib/legacy-css-version.php create mode 100644 plugins/legacy-admin/lib/legacy-custom-colors.php create mode 100644 plugins/legacy-admin/lib/legacy-fonts.php create mode 100644 plugins/legacy-admin/lib/legacy-functions.php create mode 100644 plugins/legacy-admin/lib/legacy-login.php create mode 100644 plugins/legacy-admin/lib/legacy-logo.php create mode 100644 plugins/legacy-admin/lib/legacy-menu-settings.php create mode 100644 plugins/legacy-admin/lib/legacy-pageloader.php create mode 100644 plugins/legacy-admin/lib/legacy-register-hook.php create mode 100644 plugins/legacy-admin/lib/legacy-settings.php create mode 100644 plugins/legacy-admin/lib/legacy-topbar.php create mode 100644 plugins/rosariosis-rest-api/Gruntfile.js create mode 100644 plugins/rosariosis-rest-api/LICENSE create mode 100644 plugins/rosariosis-rest-api/assets/css/admin.css create mode 100644 plugins/rosariosis-rest-api/assets/css/admin.less create mode 100644 plugins/rosariosis-rest-api/assets/css/frontend.css create mode 100644 plugins/rosariosis-rest-api/assets/css/frontend.less create mode 100644 plugins/rosariosis-rest-api/assets/img/icon-128x128.png create mode 100644 plugins/rosariosis-rest-api/assets/img/icon-256x256.png create mode 100644 plugins/rosariosis-rest-api/assets/img/icon.png create mode 100644 plugins/rosariosis-rest-api/assets/js/admin.js create mode 100644 plugins/rosariosis-rest-api/assets/js/admin.min.js create mode 100644 plugins/rosariosis-rest-api/assets/js/frontend.js create mode 100644 plugins/rosariosis-rest-api/assets/js/frontend.min.js create mode 100644 plugins/rosariosis-rest-api/assets/js/settings.js create mode 100644 plugins/rosariosis-rest-api/assets/js/settings.min.js create mode 100644 plugins/rosariosis-rest-api/includes/class-rosariosis-rest-api-controller.php create mode 100644 plugins/rosariosis-rest-api/includes/class-rosariosis-rest-api-settings.php create mode 100644 plugins/rosariosis-rest-api/includes/class-rosariosis-rest-api.php create mode 100644 plugins/rosariosis-rest-api/includes/lib/class-rosariosis-rest-api-admin-api.php create mode 100644 plugins/rosariosis-rest-api/includes/lib/class-rosariosis-rest-api-post-type.php create mode 100644 plugins/rosariosis-rest-api/includes/lib/class-rosariosis-rest-api-taxonomy.php create mode 100644 plugins/rosariosis-rest-api/index.php create mode 100644 plugins/rosariosis-rest-api/lang/rosariosis-rest-api-fr_FR.mo create mode 100644 plugins/rosariosis-rest-api/lang/rosariosis-rest-api-fr_FR.po create mode 100644 plugins/rosariosis-rest-api/lang/rosariosis-rest-api.pot create mode 100644 plugins/rosariosis-rest-api/package.json create mode 100644 plugins/rosariosis-rest-api/readme.txt create mode 100644 plugins/rosariosis-rest-api/rosariosis-rest-api.php create mode 100644 plugins/rosariosis-rest-api/uninstall.php create mode 100644 vendor/autoload.php create mode 100644 vendor/composer/ClassLoader.php create mode 100644 vendor/composer/InstalledVersions.php create mode 100644 vendor/composer/LICENSE create mode 100644 vendor/composer/autoload_classmap.php create mode 100644 vendor/composer/autoload_namespaces.php create mode 100644 vendor/composer/autoload_psr4.php create mode 100644 vendor/composer/autoload_real.php create mode 100644 vendor/composer/autoload_static.php create mode 100644 vendor/composer/installed.json create mode 100644 vendor/composer/installed.php create mode 100644 vendor/composer/platform_check.php diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 000000000..13566b81b --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 000000000..4c9e052b8 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,56 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 000000000..79ee123c2 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 000000000..456b18c39 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml new file mode 100644 index 000000000..85d0a1121 --- /dev/null +++ b/.idea/php.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/sms.iml b/.idea/sms.iml new file mode 100644 index 000000000..2c97708e6 --- /dev/null +++ b/.idea/sms.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..94a25f7f4 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ProgramFunctions/StudentsUsersInfo.fnc.php b/ProgramFunctions/StudentsUsersInfo.fnc.php index 9bef014ca..5cc84386c 100644 --- a/ProgramFunctions/StudentsUsersInfo.fnc.php +++ b/ProgramFunctions/StudentsUsersInfo.fnc.php @@ -907,7 +907,7 @@ function _makeStartInput( $value, $column ) $disallow_edit_parent_student = true; } - $return = '
' . $add . + $return = '
' . //$add . DateInput( $value, 'values[student_enrollment][' . $id . '][' . $column . ']', diff --git a/assets/js/plugins.js b/assets/js/plugins.js new file mode 100644 index 000000000..fc8f61905 --- /dev/null +++ b/assets/js/plugins.js @@ -0,0 +1,4861 @@ +/*! rosariosis 2022-07-19 */ + +!(function (n) { + "function" == typeof define && define.amd + ? define(["jquery"], n) + : "object" == typeof module && module.exports + ? (module.exports = function (e, t) { + return void 0 === t && (t = "undefined" != typeof window ? require("jquery") : require("jquery")(e)), n(t), t; + }) + : n(jQuery); +})(function (M) { + "use strict"; + var h = /\r?\n/g, + g = {}; + (g.fileapi = void 0 !== M('').get(0).files), (g.formdata = void 0 !== window.FormData); + var N = !!M.fn.prop; + function i(e) { + var t = e.data; + e.isDefaultPrevented() || (e.preventDefault(), M(e.target).closest("form").ajaxSubmit(t)); + } + function o(e) { + var t = e.target, + n = M(t); + if (!n.is("[type=submit],[type=image]")) { + var a = n.closest("[type=submit]"); + if (0 === a.length) return; + t = a[0]; + } + var r = t.form; + "image" === (r.clk = t).type && + (void 0 !== e.offsetX + ? ((r.clk_x = e.offsetX), (r.clk_y = e.offsetY)) + : "function" == typeof M.fn.offset + ? ((n = n.offset()), (r.clk_x = e.pageX - n.left), (r.clk_y = e.pageY - n.top)) + : ((r.clk_x = e.pageX - t.offsetLeft), (r.clk_y = e.pageY - t.offsetTop))), + setTimeout(function () { + r.clk = r.clk_x = r.clk_y = null; + }, 100); + } + function O() { + var e; + M.fn.ajaxSubmit.debug && ((e = "[jquery.form] " + Array.prototype.join.call(arguments, "")), window.console && window.console.log ? window.console.log(e) : window.opera && window.opera.postError && window.opera.postError(e)); + } + (M.fn.attr2 = function () { + if (!N) return this.attr.apply(this, arguments); + var e = this.prop.apply(this, arguments); + return (e && e.jquery) || "string" == typeof e ? e : this.attr.apply(this, arguments); + }), + (M.fn.ajaxSubmit = function (_, e, t, n) { + if (!this.length) return O("ajaxSubmit: skipping submit process - no element selected"), this; + var T, + S = this; + "function" == typeof _ ? (_ = { success: _ }) : "string" == typeof _ || (!1 === _ && 0 < arguments.length) ? ((_ = { url: _, data: e, dataType: t }), "function" == typeof n && (_.success = n)) : void 0 === _ && (_ = {}), + (T = _.method || _.type || this.attr2("method")), + (n = (n = (n = "string" == typeof (t = _.url || this.attr2("action")) ? M.trim(t) : "") || window.location.href || "") && (n.match(/^([^#]+)/) || [])[1]), + (_ = M.extend(!0, { url: n, success: M.ajaxSettings.success, type: T || M.ajaxSettings.type, iframeSrc: /^https/i.test(window.location.href || "") ? "javascript:false" : "about:blank" }, _)); + t = {}; + if ((this.trigger("form-pre-serialize", [this, _, t]), t.veto)) return O("ajaxSubmit: submit vetoed via form-pre-serialize trigger"), this; + if (_.beforeSerialize && !1 === _.beforeSerialize(this, _)) return O("ajaxSubmit: submit aborted via beforeSerialize callback"), this; + n = _.traditional; + void 0 === n && (n = M.ajaxSettings.traditional); + var B = [], + a = this.formToArray(_.semantic, B, _.filtering); + if ((_.data && ((u = M.isFunction(_.data) ? _.data(a) : _.data), (_.extraData = u), (u = M.param(u, n))), _.beforeSubmit && !1 === _.beforeSubmit(a, this, _))) + return O("ajaxSubmit: submit aborted via beforeSubmit callback"), this; + if ((this.trigger("form-submit-validate", [a, this, _, t]), t.veto)) return O("ajaxSubmit: submit vetoed via form-submit-validate trigger"), this; + t = M.param(a, n); + u && (t = t ? t + "&" + u : u), "GET" === _.type.toUpperCase() ? ((_.url += (0 <= _.url.indexOf("?") ? "&" : "?") + t), (_.data = null)) : (_.data = t); + var i, + r, + o, + s = []; + _.resetForm && + s.push(function () { + S.resetForm(); + }), + _.clearForm && + s.push(function () { + S.clearForm(_.includeHidden); + }), + !_.dataType && _.target + ? ((i = _.success || function () {}), + s.push(function (e, t, n) { + var a = arguments, + r = _.replaceTarget ? "replaceWith" : "html"; + M(_.target) + [r](e) + .each(function () { + i.apply(this, a); + }); + })) + : _.success && (M.isArray(_.success) ? M.merge(s, _.success) : s.push(_.success)), + (_.success = function (e, t, n) { + for (var a = _.context || this, r = 0, i = s.length; r < i; r++) s[r].apply(a, [e, t, n || S, S]); + }), + _.error && + ((r = _.error), + (_.error = function (e, t, n) { + var a = _.context || this; + r.apply(a, [e, t, n, S]); + })), + _.complete && + ((o = _.complete), + (_.complete = function (e, t) { + var n = _.context || this; + o.apply(n, [e, t, S]); + })); + var l, + n = + 0 < + M("input[type=file]:enabled", this).filter(function () { + return "" !== M(this).val(); + }).length, + u = "multipart/form-data", + t = S.attr("enctype") === u || S.attr("encoding") === u, + u = g.fileapi && g.formdata; + O("fileAPI :" + u), + !1 !== _.iframe && (_.iframe || ((n || t) && !u)) + ? _.closeKeepAlive + ? M.get(_.closeKeepAlive, function () { + l = d(a); + }) + : (l = d(a)) + : (l = + (n || t) && u + ? (function (e) { + for (var n = new FormData(), t = 0; t < e.length; t++) n.append(e[t].name, e[t].value); + if (_.extraData) { + var a = (function (e) { + var t, + n, + a = M.param(e, _.traditional).split("&"), + r = a.length, + i = []; + for (t = 0; t < r; t++) (a[t] = a[t].replace(/\+/g, " ")), (n = a[t].split("=")), i.push([decodeURIComponent(n[0]), decodeURIComponent(n[1])]); + return i; + })(_.extraData); + for (t = 0; t < a.length; t++) a[t] && n.append(a[t][0], a[t][1]); + } + _.data = null; + var r = M.extend(!0, {}, M.ajaxSettings, _, { contentType: !1, processData: !1, cache: !1, type: T || "POST" }); + _.uploadProgress && + (r.xhr = function () { + var e = M.ajaxSettings.xhr(); + return ( + e.upload && + e.upload.addEventListener( + "progress", + function (e) { + var t = 0, + n = e.loaded || e.position, + a = e.total; + e.lengthComputable && (t = Math.ceil((n / a) * 100)), _.uploadProgress(e, n, a, t); + }, + !1 + ), + e + ); + }); + r.data = null; + var i = r.beforeSend; + return ( + (r.beforeSend = function (e, t) { + _.formData ? (t.data = _.formData) : (t.data = n), i && i.call(this, e, t); + }), + M.ajax(r) + ); + })(a) + : M.ajax(_)), + S.removeData("jqxhr").data("jqxhr", l); + for (var c = 0; c < B.length; c++) B[c] = null; + return this.trigger("form-submit-notify", [this, _]), this; + function d(e) { + var t, + n, + u, + c, + d, + h, + p, + f, + m, + i = S[0], + g = M.Deferred(); + if ( + ((g.abort = function (e) { + p.abort(e); + }), + e) + ) + for (n = 0; n < B.length; n++) (t = M(B[n])), N ? t.prop("disabled", !1) : t.removeAttr("disabled"); + (u = M.extend(!0, {}, M.ajaxSettings, _)).context = u.context || u; + var o = "jqFormIO" + new Date().getTime(), + s = i.ownerDocument, + l = S.closest("body"); + if ( + (u.iframeTarget + ? (a = (d = M(u.iframeTarget, s)).attr2("name")) + ? (o = a) + : d.attr2("name", o) + : (d = M('';d.extend(y.prototype,{_scroll:function(){var b=this.qtip.elements.overlay;b&&(b[0].style.top=d(a).scrollTop()+"px")},init:function(c){var e=c.tooltip;d("select, object").length<1&&(this.bgiframe=c.elements.bgiframe=d(Da).appendTo(e),c._bind(e,"tooltipmove",this.adjustBGIFrame,this._ns,this)),this.redrawContainer=d("
",{id:T+"-rcontainer"}).appendTo(b.body),c.elements.overlay&&c.elements.overlay.addClass("qtipmodal-ie6fix")&&(c._bind(a,["scroll","resize"],this._scroll,this._ns,this),c._bind(e,["tooltipshow"],this._scroll,this._ns,this)),this.redraw()},adjustBGIFrame:function(){var a,b,c=this.qtip.tooltip,d={height:c.outerHeight(F),width:c.outerWidth(F)},e=this.qtip.plugins.tip,f=this.qtip.elements.tip;b=parseInt(c.css("borderLeftWidth"),10)||0,b={left:-b,top:-b},e&&f&&(a="x"===e.corner.precedance?[J,M]:[K,L],b[a[1]]-=f[a[0]]()),this.bgiframe.css(b).css(d)},redraw:function(){if(this.qtip.rendered<1||this.drawing)return this;var a,b,c,d,e=this.qtip.tooltip,f=this.qtip.options.style,g=this.qtip.options.position.container;return this.qtip.drawing=1,f.height&&e.css(K,f.height),f.width?e.css(J,f.width):(e.css(J,"").appendTo(this.redrawContainer),b=e.width(),1>b%2&&(b+=1),c=e.css("maxWidth")||"",d=e.css("minWidth")||"",a=(c+d).indexOf("%")>-1?g.width()/100:0,c=(c.indexOf("%")>-1?a:1)*parseInt(c,10)||b,d=(d.indexOf("%")>-1?a:1)*parseInt(d,10)||0,b=c+d?Math.min(Math.max(b,d),c):b,e.css(J,Math.round(b)).appendTo(g)),this.drawing=0,this},destroy:function(){this.bgiframe&&this.bgiframe.remove(),this.qtip._unbind([a,this.qtip.tooltip],this._ns)}}),Ca=S.ie6=function(a){return 6===ea.ie?new y(a):F},Ca.initialize="render",C.ie6={"^content|style$":function(){this.redraw()}}})}(window,document),function(a){a.fn.typeWatch=function(b){function c(b,c){var d=a(b.el).val();(d.length>=f.captureLength&&d.toUpperCase()!=b.text||c&&d.length>=f.captureLength)&&(b.text=d.toUpperCase(),b.cb.call(b.el,d))}function d(b){var d=b.type.toUpperCase();if(a.inArray(d,f.inputTypes)>=0){var e={timer:null,text:a(b).val().toUpperCase(),cb:f.callback,el:b,wait:f.wait};f.highlight&&a(b).focus(function(){this.select()});var g=function(b){var d=e.wait,g=!1,h=this.type.toUpperCase();"undefined"!=typeof b.keyCode&&13==b.keyCode&&"TEXTAREA"!=h&&a.inArray(h,f.inputTypes)>=0&&(d=1,g=!0);var i=function(){c(e,g)};clearTimeout(e.timer),e.timer=setTimeout(i,d)};a(b).on("keydown paste cut input",g)}}var e=["TEXT","TEXTAREA","PASSWORD","TEL","SEARCH","URL","EMAIL","DATETIME","DATE","MONTH","WEEK","TIME","DATETIME-LOCAL","NUMBER","RANGE"],f=a.extend({wait:750,callback:function(){},highlight:!0,captureLength:2,inputTypes:e},b);return this.each(function(){d(this)})}}(jQuery),function(a){a.fn.serializeForm=function(){if(this.length<1)return!1;var b={},c=b,d=':input[type!="checkbox"][type!="radio"], input:checked',e=function(){if(!this.disabled){var d=this.name.replace(/\[([^\]]+)?\]/g,",$1").split(","),e=d.length-1,f=a(this);if(d[0]){for(var g=0;e>g;g++)c=c[d[g]]=c[d[g]]||(""===d[g+1]||"0"===d[g+1]?[]:{});void 0!==c.length?c.push(f.val()):c[d[e]]=f.val(),c=b}}};return this.filter(d).each(e),this.find(d).each(e),b}}(jQuery),function(a){function b(){var a="!@#$%^&*()+=[]\\';,/{}|\":<>?~`.-_";return a+=" "}function c(){var a="¬€£¦";return a}function d(b,c,d){b.each(function(){var b=a(this);b.bind("keyup change paste",function(a){var e="";a.originalEvent&&a.originalEvent.clipboardData&&a.originalEvent.clipboardData.getData&&(e=a.originalEvent.clipboardData.getData("text/plain")),setTimeout(function(){h(b,c,d,e)},0)}),b.bind("keypress",function(a){var e=a.charCode?a.charCode:a.which;if(!(g(e)||a.ctrlKey||a.metaKey)){var f=String.fromCharCode(e),h=b.selection(),i=h.start,j=h.end,k=b.val(),l=k.substring(0,i)+f+k.substring(j),m=c(l,d);m!=l&&a.preventDefault()}})})}function e(b,c){var d=parseFloat(a(b).val()),e=a(b);return isNaN(d)?void e.val(""):(f(c.min)&&dc.max&&e.val("")))}function f(a){return!isNaN(a)}function g(a){return a>=32?!1:10==a?!1:13==a?!1:!0}function h(a,b,c,d){var e=a.val();""==e&&d.length>0&&(e=d);var f=b(e,c);if(e!=f){var g=a.alphanum_caret();a.val(f),a.alphanum_caret(e.length==f.length+1?g-1:g)}}function i(b,c){"undefined"==typeof c&&(c=D);var d,e={};return d="string"==typeof b?F[b]:"undefined"==typeof b?{}:b,a.extend(e,c,d),"undefined"==typeof e.blacklist&&(e.blacklistSet=x(e.allow,e.disallow)),e}function j(b){var c,d={};return c="string"==typeof b?G[b]:"undefined"==typeof b?{}:b,a.extend(d,E,c),d}function k(a,b,c){return c.maxLength&&a.length>=c.maxLength?!1:c.allow.indexOf(b)>=0?!0:c.allowSpace&&" "==b?!0:c.blacklistSet.contains(b)?!1:!c.allowNumeric&&K[b]?!1:!c.allowUpper&&u(b)?!1:!c.allowLower&&v(b)?!1:!c.allowCaseless&&w(b)?!1:!c.allowLatin&&L.contains(b)?!1:c.allowOtherCharSets?!0:K[b]||L.contains(b)?!0:!1}function l(a,b,c){if(K[b])return n(a,c)?!1:p(a,c)?!1:o(a,c)?!1:q(a+b,c)?!1:r(a+b,c)?!1:!0;if(c.allowPlus&&"+"==b&&""==a)return!0;if(c.allowMinus&&"-"==b&&""==a)return!0;if(b==I&&c.allowThouSep&&A(a,b))return!0;if(b==J){if(a.indexOf(J)>=0)return!1;if(c.allowDecSep)return!0}return!1}function m(a){return a+="",a.replace(/[^0-9]/g,"").length}function n(a,b){var c=b.maxDigits;if(""==c||isNaN(c))return!1;var d=m(a);return d>=c?!0:!1}function o(a,b){var c=b.maxDecimalPlaces;if(""==c||isNaN(c))return!1;var d=a.indexOf(J);if(-1==d)return!1;var e=a.substring(d),f=m(e);return f>=c?!0:!1}function p(a,b){var c=b.maxPreDecimalPlaces;if(""==c||isNaN(c))return!1;var d=a.indexOf(J);if(d>=0)return!1;var e=m(a);return e>=c?!0:!1}function q(a,b){if(!b.max||b.max<0)return!1;var c=parseFloat(a);return c>b.max?!0:!1}function r(a,b){if(!b.min||b.min>0)return!1;var c=parseFloat(a);return c=0)return!1;var c=a.indexOf(I);if(0>c)return!0;var d=a.lastIndexOf(I),e=a.length-d-1;if(3>e)return!1;var f=m(a.substring(c));return f%3>0?!1:!0}function B(a){this.map="string"==typeof a?C(a):{}}function C(a){var b,c={},d=a.split(""),e=0;for(e=0;e=0?d.toString().length:startPos+c.toString().length,{start:startPos,end:endPos}):null},d=function(d){var e=b(d);if(void 0!==d.selectionStart)return document.activeElement&&document.activeElement!=d&&d.selectionStart==d.selectionEnd&&0==d.selectionStart?{start:d.value.length,end:d.value.length}:{start:d.selectionStart,end:d.selectionEnd};if(e.getSelection)return c(d,e);try{if("input"==d.nodeName.toLowerCase()){var f=b(d).document.selection.createRange(),g=d.createTextRange();g.setEndPoint("EndToStart",f);var h=g.text.length;return{start:h,end:h+f.text.length}}var i=c(d,e);if(!i)return i;var j=a.Range.current().clone(),k=j.clone().collapse().range,l=j.clone().collapse(!1).range;return k.moveStart("character",-1),l.moveStart("character",-1),0!=i.startPos&&""==k.text&&(i.startPos+=2),0!=i.endPos&&""==l.text&&(i.endPos+=2),i}catch(m){return{start:d.value.length,end:d.value.length}}},e=function(a,c,d){var e=b(a);if(a.setSelectionRange)void 0===d?(a.focus(),a.setSelectionRange(c,c)):(a.select(),a.selectionStart=c,a.selectionEnd=d);else if(a.createTextRange){var f=a.createTextRange();f.moveStart("character",c),d=d||c,f.moveEnd("character",d-a.value.length),f.select()}else if(e.getSelection){var h=e.document,i=e.getSelection(),j=h.createRange(),k=[c,void 0!==d?d:c];g([a],k),j.setStart(k[0].el,k[0].count),j.setEnd(k[1].el,k[1].count),i.removeAllRanges(),i.addRange(j)}else if(e.document.body.createTextRange){var j=document.body.createTextRange();j.moveToElementText(a),j.collapse(),j.moveStart("character",c),j.moveEnd("character",void 0!==d?d:c),j.select()}},f=function(a,b,c,d){"number"==typeof c[0]&&c[0]d.right||c.bottomd.bottom)}},a.redux.hideFields(),a.redux.checkRequired(),a.redux.initEvents(),a.redux.initQtip(),a.redux.tabCheck(),a.redux.notices(),a.redux.tabControl(),a.redux.devFunctions()}),a.redux.ajax_save=function(b){var c=a(document.getElementById("redux_ajax_overlay"));c.fadeIn(),jQuery(".redux-action_bar .spinner").show(),jQuery(".redux-action_bar input").attr("disabled","disabled");var d=jQuery(document.getElementById("redux_notification_bar"));d.slideUp(),jQuery(".redux-save-warn").slideUp();var e=jQuery(document.getElementById("redux-form-wrapper"));redux.fields.hasOwnProperty("editor")&&a.each(redux.fields.editor,function(a){var b=tinyMCE.get(a);b&&b.save()});var f=e.serialize();e.find("input[type=checkbox]").each(function(){if("undefined"!=typeof a(this).attr("name")){var b=a(this).is(":checked")?a(this).val():"0";f+="&"+a(this).attr("name")+"="+b}}),"redux_save"!=b.attr("name")&&(f+="&"+b.attr("name")+"="+b.val());var g=e.attr("data-nonce");return jQuery.ajax({type:"post",dataType:"json",url:ajaxurl,data:{action:redux.args.opt_name+"_ajax_save",nonce:g,opt_name:redux.args.opt_name,data:f},error:function(a){window.console||(console={}),console.log=console.log||function(){},console.log(redux.ajax.console),console.log(a.responseText),jQuery(".redux-action_bar input").removeAttr("disabled"),c.fadeOut("fast"),jQuery(".redux-action_bar .spinner").fadeOut("fast"),alert(redux.ajax.alert)},success:function(b){if(b.action&&"reload"==b.action)location.reload();else if("success"==b.status){jQuery(".redux-action_bar input").removeAttr("disabled"),c.fadeOut("fast"),jQuery(".redux-action_bar .spinner").fadeOut("fast"),redux.options=b.options,redux.errors=b.errors,redux.warnings=b.warnings,d.html(b.notification_bar).slideDown("fast"),(null!==b.errors||null!==b.warnings)&&a.redux.notices();var e=a(document.getElementById("redux_notification_bar")).find(".saved_notice");e.slideDown(),e.delay(4e3).slideUp()}else jQuery(".redux-action_bar input").removeAttr("disabled"),jQuery(".redux-action_bar .spinner").fadeOut("fast"),c.fadeOut("fast"),jQuery(".redux_ajax_save_error").slideUp(),jQuery(".wrap h2:first-child").parent().append('"),jQuery(".redux_ajax_save_error").slideDown(),jQuery("html, body").animate({scrollTop:0},"slow")}}),!1},a.redux.initEvents=function(){a(".redux-presets-bar").on("click",function(){window.onbeforeunload=null}),a("#toplevel_page_"+redux.args.slug+" .wp-submenu a, #wp-admin-bar-"+redux.args.slug+" a.ab-item").click(function(b){if((a("#toplevel_page_"+redux.args.slug).hasClass("wp-menu-open")||a(this).hasClass("ab-item"))&&!a(this).parents("ul.ab-submenu:first").hasClass("ab-sub-secondary")&&a(this).attr("href").toLowerCase().indexOf(redux.args.slug+"&tab=")>=0){b.preventDefault();var c=a(this).attr("href").split("&tab=");return a("#"+c[1]+"_section_group_li_a").click(),a(this).parents("ul:first").find(".current").removeClass("current"),a(this).addClass("current"),a(this).parent().addClass("current"),!1}}),a(".redux-action_bar input").on("click",function(b){if(a(this).attr("name")==redux.args.opt_name+"[defaults]"){if(!confirm(redux.args.reset_confirm))return!1}else if(a(this).attr("name")==redux.args.opt_name+"[defaults-section]"&&!confirm(redux.args.reset_section_confirm))return!1; + +window.onbeforeunload=null,redux.args.ajax_save===!0&&(a.redux.ajax_save(a(this)),b.preventDefault())}),a(".expand_options").click(function(b){b.preventDefault();var c=a(".redux-container");if(a(c).hasClass("fully-expanded")){a(c).removeClass("fully-expanded");var d=a.cookie("redux_current_tab");a(".redux-container:first").find("#"+d+"_section_group").fadeIn(200,function(){0!==a(".redux-container:first").find("#redux-footer").length&&a.redux.stickyInfo(),a.redux.initFields()})}return a.redux.expandOptions(a(this).parents(".redux-container:first")),!1}),a(".saved_notice").is(":visible")&&a(".saved_notice").slideDown(),a(document.body).on("change",".redux-field input, .redux-field textarea, .redux-field select",function(){a(this).hasClass("noUpdate")||redux_change(a(this))});var b=a("#redux-footer").height();a("#redux-sticky-padder").css({height:b}),a("#redux-footer-sticky").removeClass("hide"),0!==a("#redux-footer").length&&(a(window).scroll(function(){a.redux.stickyInfo()}),a(window).resize(function(){a.redux.stickyInfo()})),a(".saved_notice").delay(4e3).slideUp()},a.redux.hideFields=function(){a("label[for='redux_hide_field']").each(function(){var b=a(this).parent().parent();a(b).addClass("hidden")})},a.redux.checkRequired=function(){a.redux.required(),a("body").on("change",".redux-main select, .redux-main radio, .redux-main input[type=checkbox], .redux-main input[type=hidden]",function(){a.redux.check_dependencies(this)}),a("body").on("check_dependencies",function(b,c){a.redux.check_dependencies(c)}),a("td > fieldset:empty,td > div:empty").parent().parent().hide()},a.redux.initQtip=function(){if(a().qtip){var b="",c=redux.args.hints.tip_style.shadow;c===!0&&(b="qtip-shadow");var d="",e=redux.args.hints.tip_style.color;""!==e&&(d="qtip-"+e);var f="",g=redux.args.hints.tip_style.rounded;g===!0&&(f="qtip-rounded");var h="",i=redux.args.hints.tip_style.style;""!==i&&(h="qtip-"+i);var j=b+","+d+","+f+","+h;j=j.replace(/,/g," ");var k=redux.args.hints.tip_position.my,l=redux.args.hints.tip_position.at;k=a.redux.verifyPos(k.toLowerCase(),!0),l=a.redux.verifyPos(l.toLowerCase(),!1);var m=redux.args.hints.tip_effect.show.event,n=redux.args.hints.tip_effect.hide.event,o=redux.args.hints.tip_effect.show.effect,p=redux.args.hints.tip_effect.show.duration,q=redux.args.hints.tip_effect.hide.effect,r=redux.args.hints.tip_effect.hide.duration;a("div.redux-hint-qtip").each(function(){a(this).qtip({content:{text:a(this).attr("qtip-content"),title:a(this).attr("qtip-title")},show:{effect:function(){switch(o){case"slide":a(this).slideDown(p);break;case"fade":a(this).fadeIn(p);break;default:a(this).show()}},event:m},hide:{effect:function(){switch(q){case"slide":a(this).slideUp(r);break;case"fade":a(this).fadeOut(r);break;default:a(this).show(r)}},event:n},style:{classes:j},position:{my:k,at:l}})}),a("input[qtip-content]").each(function(){a(this).qtip({content:{text:a(this).attr("qtip-content"),title:a(this).attr("qtip-title")},show:"focus",hide:"blur",style:j,position:{my:k,at:l}})})}},a.redux.tabCheck=function(){a(".redux-group-tab-link-a").click(function(){var b=a(this);if(b.parent().hasClass("empty_section")&&b.parent().hasClass("hasSubSections")){var c=a(this).closest("ul").find(".redux-group-tab-link-a"),d=c.index(this);b=c.slice(d+1,d+2)}var e=b.parents(".redux-container:first"),f=b.data("rel"),g=e.find(".redux-group-tab-link-li.active:first .redux-group-tab-link-a").data("rel");if(g!==f){if(a("#currentSection").val(f),b.parents(".postbox-container:first").length||a.cookie("redux_current_tab",f,{expires:7,path:"/"}),e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").length){var h=e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").attr("id").split("_");h=h[0]}if(e.find("#toplevel_page_"+redux.args.slug+" .wp-submenu a.current").removeClass("current"),e.find("#toplevel_page_"+redux.args.slug+" .wp-submenu li.current").removeClass("current"),e.find("#toplevel_page_"+redux.args.slug+" .wp-submenu a").each(function(){var b=a(this).attr("href").split("&tab=");(b[1]==f||b[1]==h)&&(a(this).addClass("current"),a(this).parent().addClass("current"))}),e.find("#"+g+"_section_group_li").find("#"+g+"_section_group_li").length)e.find("#"+g+"_section_group_li").addClass("activeChild"),e.find("#"+f+"_section_group_li").addClass("active").removeClass("activeChild");else if(e.find("#"+f+"_section_group_li").parents("#"+g+"_section_group_li").length||e.find("#"+g+"_section_group_li").parents("ul.subsection").find("#"+f+"_section_group_li").length)e.find("#"+f+"_section_group_li").parents("#"+g+"_section_group_li").length?e.find("#"+g+"_section_group_li").addClass("activeChild").removeClass("active"):(e.find("#"+f+"_section_group_li").addClass("active"),e.find("#"+g+"_section_group_li").removeClass("active")),e.find("#"+f+"_section_group_li").removeClass("activeChild").addClass("active");else if(e.find("#"+f+"_section_group_li").addClass("active").removeClass("activeChild").find("ul.subsection").slideDown(),e.find("#"+g+"_section_group_li").find("ul.subsection").length){e.find("#"+g+"_section_group_li").find("ul.subsection").slideUp("fast",function(){e.find("#"+g+"_section_group_li").removeClass("active").removeClass("activeChild")});var i=e.find("#"+f+"_section_group_li").parents(".hasSubSections:first");i.length>0&&(e.find("#"+f+"_section_group_li").removeClass("active"),f=i.find(".redux-group-tab-link-a:first").data("rel"),i.hasClass("empty_section")?(i.find(".subsection li:first").addClass("active"),e.find("#"+f+"_section_group_li").removeClass("active").addClass("activeChild").find("ul.subsection").slideDown(),i=i.find(".subsection li:first"),f=i.find(".redux-group-tab-link-a:first").data("rel")):e.find("#"+f+"_section_group_li").addClass("active").removeClass("activeChild").find("ul.subsection").slideDown())}else e.find("#"+g+"_section_group_li").parents("ul.subsection").length?e.find("#"+g+"_section_group_li").parents("#"+f+"_section_group_li").length?e.find("#"+g+"_section_group_li").removeClass("active"):e.find("#"+g+"_section_group_li").parents("ul.subsection").slideUp("fast",function(){e.find("#"+g+"_section_group_li").removeClass("active"),e.find("#"+g+"_section_group_li").parents(".redux-group-tab-link-li").removeClass("active").removeClass("activeChild"),e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").addClass("activeChild").find("ul.subsection").slideDown(),e.find("#"+f+"_section_group_li").addClass("active")}):(e.find("#"+g+"_section_group_li").removeClass("active"),e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").length&&(e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").addClass("activeChild").find("ul.subsection").slideDown(),e.find("#"+f+"_section_group_li").addClass("active")));e.find("#"+g+"_section_group").hide(),e.find("#"+f+"_section_group").fadeIn(200,function(){0!==e.find("#redux-footer").length&&a.redux.stickyInfo(),a.redux.initFields()}),a("#toplevel_page_"+redux.args.slug).find(".current").removeClass("current")}});var b=decodeURI((new RegExp("tab=(.+?)(&|$)").exec(location.search)||[,""])[1]);""!==b?a.cookie("redux_current_tab_get")!==b&&(a.cookie("redux_current_tab",b,{expires:7,path:"/"}),a.cookie("redux_current_tab_get",b,{expires:7,path:"/"}),a("#"+b+"_section_group_li").click()):""!==a.cookie("redux_current_tab_get")&&a.removeCookie("redux_current_tab_get");var c=a("#"+a.cookie("redux_current_tab")+"_section_group_li_a");null===a.cookie("redux_current_tab")||"undefined"==typeof a.cookie("redux_current_tab")||0===c.length?a(".redux-container").find(".redux-group-tab-link-a:first").click():c.click()},a.redux.initFields=function(){a(".redux-group-tab:visible").find(".redux-field-init:visible").each(function(){var b=a(this).attr("data-type");if("undefined"!=typeof redux.field_objects&&redux.field_objects[b]&&redux.field_objects[b]&&redux.field_objects[b].init(),a(this).hasClass("redux_remove_th")){var c=a(this).parents("tr:first"),d=c.find("th:first");a(this).prepend(d.html()),a(this).find(".redux_field_th").css("padding","0 0 10px 0"),a(this).parent().attr("colspan","2"),d.remove()}})},a.redux.notices=function(){redux.errors&&redux.errors.errors&&(a.each(redux.errors.errors,function(b,c){a.each(c.errors,function(b,c){a("#"+redux.args.opt_name+"-"+c.id).addClass("redux-field-error"),0===a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-error").length?a("#"+redux.args.opt_name+"-"+c.id).append('
'+c.msg+"
"):a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-error").html(c.msg).css("display","block")})}),a(".redux-container").each(function(){var b=a(this);b.find(".redux-menu-error").remove();var c=b.find(".redux-field-error").length;c>0&&(b.find(".redux-field-errors span").text(c),b.find(".redux-field-errors").slideDown(),b.find(".redux-group-tab").each(function(){var c=a(this).find(".redux-field-error").length;if(c>0){var d=a(this).attr("id").split("_");d=d[0],b.find('.redux-group-tab-link-a[data-key="'+d+'"]').prepend(''+c+""),b.find('.redux-group-tab-link-a[data-key="'+d+'"]').addClass("hasError");var e=b.find('.redux-group-tab-link-a[data-key="'+d+'"]').parents(".hasSubSections:first");e&&e.find(".redux-group-tab-link-a:first").addClass("hasError")}}))})),redux.warnings&&redux.warnings.warnings&&(a.each(redux.warnings.warnings,function(b,c){a.each(c.warnings,function(b,c){a("#"+redux.args.opt_name+"-"+c.id).addClass("redux-field-warning"),0===a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-warning").length?a("#"+redux.args.opt_name+"-"+c.id).append('
'+c.msg+"
"):a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-warning").html(c.msg).css("display","block")})}),a(".redux-container").each(function(){var b=a(this);b.find(".redux-menu-warning").remove();var c=b.find(".redux-field-warning").length;c>0&&(b.find(".redux-field-warnings span").text(c),b.find(".redux-field-warnings").slideDown(),b.find(".redux-group-tab").each(function(){var c=a(this).find(".redux-field-warning").length;if(c>0){var d=a(this).attr("id").split("_");d=d[0],b.find('.redux-group-tab-link-a[data-key="'+d+'"]').prepend(''+c+""),b.find('.redux-group-tab-link-a[data-key="'+d+'"]').addClass("hasWarning");var e=b.find('.redux-group-tab-link-a[data-key="'+d+'"]').parents(".hasSubSections:first");e&&e.find(".redux-group-tab-link-a:first").addClass("hasWarning")}}))}))},a.redux.tabControl=function(){a(".redux-section-tabs div").hide(),a(".redux-section-tabs div:first").show(),a(".redux-section-tabs ul li:first").addClass("active"),a(".redux-section-tabs ul li a").click(function(){a(".redux-section-tabs ul li").removeClass("active"),a(this).parent().addClass("active");var b=a(this).attr("href");return a(".redux-section-tabs div").hide(),a(b).fadeIn("medium",function(){a.redux.initFields()}),!1})},a.redux.devFunctions=function(){a("#consolePrintObject").on("click",function(b){b.preventDefault(),console.log(a.parseJSON(a("#redux-object-json").html()))}),"function"==typeof jsonView&&jsonView("#redux-object-json","#redux-object-browser")},a.redux.required=function(){a.each(redux.folds,function(b,c){var d=a("#"+redux.args.opt_name+"-"+b);if(d.parents("tr:first").addClass("fold"),"hide"==c){if(d.parents("tr:first").addClass("hide"),d.hasClass("redux-container-section")){var e=a("#section-"+b);e.hasClass("redux-section-indent-start")&&(a("#section-table-"+b).hide().addClass("hide"),e.hide().addClass("hide"))}if(d.hasClass("redux-container-info")&&a("#info-"+b).hide().addClass("hide"),d.hasClass("redux-container-divide")&&a("#divide-"+b).hide().addClass("hide"),d.hasClass("redux-container-raw")){var f=d.parents().find("table#"+redux.args.opt_name+"-"+b);f.hide().addClass("hide")}}})},a.redux.get_container_value=function(b){var c=a("#"+redux.args.opt_name+"-"+b).serializeForm();return null!==c&&"object"==typeof c&&c.hasOwnProperty(redux.args.opt_name)&&(c=c[redux.args.opt_name][b]),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-media")&&(c=c.url),c},a.redux.check_dependencies=function(b){if(null!==redux.required){var c=a(b),d=c.parents(".redux-field:first").data("id");if(redux.required.hasOwnProperty(d)){var e=c.parents(".redux-field-container:first"),f=e.parents("tr:first").hasClass(".hide");a.each(redux.required[d],function(b){var c=a(this),d=!1,e=a("#"+redux.args.opt_name+"-"+b),g=e.parents("tr:first");if(f||(d=a.redux.check_parents_dependencies(b)),d===!0){if(e.hasClass("redux-container-section")){var h=a("#section-"+b);h.hasClass("redux-section-indent-start")&&h.hasClass("hide")&&(a("#section-table-"+b).fadeIn(300).removeClass("hide"),h.fadeIn(300).removeClass("hide"))}if(e.hasClass("redux-container-info")&&a("#info-"+b).fadeIn(300).removeClass("hide"),e.hasClass("redux-container-divide")&&a("#divide-"+b).fadeIn(300).removeClass("hide"),e.hasClass("redux-container-raw")){var i=e.parents().find("table#"+redux.args.opt_name+"-"+b);i.fadeIn(300).removeClass("hide")}g.fadeIn(300,function(){a(this).removeClass("hide"),redux.required.hasOwnProperty(b)&&a.redux.check_dependencies(a("#"+redux.args.opt_name+"-"+b).children().first()),a.redux.initFields()}),(e.hasClass("redux-container-section")||e.hasClass("redux-container-info"))&&g.css({display:"none"})}else d===!1&&g.fadeOut(100,function(){a(this).addClass("hide"),redux.required.hasOwnProperty(b)&&a.redux.required_recursive_hide(b)});c.find("select, radio, input[type=checkbox]").trigger("change")})}}},a.redux.required_recursive_hide=function(b){var c=a("#"+redux.args.opt_name+"-"+b).parents("tr:first");c.fadeOut(50,function(){if(a(this).addClass("hide"),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-section")){var c=a("#section-"+b);c.hasClass("redux-section-indent-start")&&(a("#section-table-"+b).fadeOut(50).addClass("hide"),c.fadeOut(50).addClass("hide"))}if(a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-info")&&a("#info-"+b).fadeOut(50).addClass("hide"),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-divide")&&a("#divide-"+b).fadeOut(50).addClass("hide"),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-raw")){var d=a("#"+redux.args.opt_name+"-"+b).parents().find("table#"+redux.args.opt_name+"-"+b);d.fadeOut(50).addClass("hide")}redux.required.hasOwnProperty(b)&&a.each(redux.required[b],function(b){a.redux.required_recursive_hide(b)})})},a.redux.check_parents_dependencies=function(b){var c="";return redux.required_child.hasOwnProperty(b)?a.each(redux.required_child[b],function(b,d){if(a("#"+redux.args.opt_name+"-"+d.parent).parents("tr:first").hasClass(".hide"))c=!1;else if(c!==!1){var e=a.redux.get_container_value(d.parent);c=a.redux.check_dependencies_visibility(e,d)}}):c=!0,c},a.redux.check_dependencies_visibility=function(b,c){var d=!1,e=c.checkValue,f=c.operation;switch(f){case"=":case"equals":a.isArray(b)?a(b[0]).each(function(b,c){if(a.isArray(e))a(e).each(function(a,b){return c==b?(d=!0,!0):void 0});else if(c==e)return d=!0,!0}):a.isArray(e)?a(e).each(function(a,c){b==c&&(d=!0)}):b==e&&(d=!0);break;case"!=":case"not":a.isArray(b)?a(b[0]).each(function(b,c){if(a.isArray(e))a(e).each(function(a,b){return c!=b?(d=!0,!0):void 0});else if(c!=e)return d=!0,!0}):a.isArray(e)?a(e).each(function(a,c){b!=c&&(d=!0)}):b!=e&&(d=!0);break;case">":case"greater":case"is_larger":parseFloat(b)>parseFloat(e)&&(d=!0);break;case">=":case"greater_equal":case"is_larger_equal":parseFloat(b)>=parseFloat(e)&&(d=!0);break;case"<":case"less":case"is_smaller":parseFloat(b)g)&&(g=h,b.attr("data-height",g),b.css("width","auto"),b.attr("data-width",b.width()),f=b.width()),f>d?(e=d/f,b.css("width",d),b.css("height",g*e),g*=e,f*=e):b.css("width","auto"),g>c?(e=c/g,b.css("height",c),b.css("width",f*e),f*=e,g*=e):b.css("height","auto");var i=(a(document.getElementById("redux-header")).height()-b.height())/2;i>0?b.css("margin-top",i):b.css("margin-top",0),a("#redux-header .redux_field_search")&&a("#redux-header .redux_field_search").css("right",a(b).width()+20)},a.redux.resizeAds=function(){var b=a("#redux-header"),c=b.find(".rAds"),d=b.height(),e=b.width()-b.find(".display_header").width()-30;a(c).find("video").each(function(){a.redux.scaleToRatio(a(this),d,e)}),a(c).find("img").each(function(){a.redux.scaleToRatio(a(this),d,e)}),a(c).find("div").each(function(){a.redux.scaleToRatio(a(this),d,e)}),"-99999px"==c.css("left")&&c.css("display","none").css("left","auto"),c.fadeIn("slow")},a(document).ready(function(){redux.rAds&&setTimeout(function(){a("#redux-header").append('
');var b=a("#redux-header");b.css("position","relative"),b.find(".rAds").attr("style","position:absolute; top: 6px; right: 6px; display:block !important;overflow:hidden;").css("left","-99999px"),b.find(".rAds").html(redux.rAds.replace(//,""));{var c=b.find(".rAds");b.height(),b.width()-b.find(".display_header").width()-30}c.find("a").css("float","right").css("line-height",b.height()+"px").css("margin-left","5px"),a(document).ajaxComplete(function(){c.find("a").hide(),setTimeout(function(){a.redux.resizeAds(),c.find("a").fadeIn()},1400),setTimeout(function(){a.redux.resizeAds()},1500),a(document).unbind("ajaxComplete")}),a(window).resize(function(){a.redux.resizeAds()})},400)})}(jQuery),jQuery.noConflict();var confirmOnPageExit=function(a){a=a||window.event;var b=redux.args.save_pending;return a&&(a.returnValue=b),window.onbeforeunload=null,b}; \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor.min.js b/plugins/legacy-admin/framework/core/assets/js/vendor.min.js new file mode 100644 index 000000000..adc1315df --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor.min.js @@ -0,0 +1,2 @@ +!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){function b(a){return a}function c(a){return decodeURIComponent(a.replace(e," "))}function d(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return f.json?JSON.parse(a):a}catch(b){}}var e=/\+/g,f=a.cookie=function(e,g,h){if(void 0!==g){if(h=a.extend({},f.defaults,h),"number"==typeof h.expires){var i=h.expires,j=h.expires=new Date;j.setDate(j.getDate()+i)}return g=f.json?JSON.stringify(g):String(g),document.cookie=[f.raw?e:encodeURIComponent(e),"=",f.raw?g:encodeURIComponent(g),h.expires?"; expires="+h.expires.toUTCString():"",h.path?"; path="+h.path:"",h.domain?"; domain="+h.domain:"",h.secure?"; secure":""].join("")}for(var k=f.raw?b:c,l=document.cookie.split("; "),m=e?void 0:{},n=0,o=l.length;o>n;n++){var p=l[n].split("="),q=k(p.shift()),r=k(p.join("="));if(e&&e===q){m=d(r);break}e||(m[q]=d(r))}return m};f.defaults={},a.removeCookie=function(b,c){return void 0!==a.cookie(b)?(a.cookie(b,"",a.extend({},c,{expires:-1})),!0):!1}}),"undefined"==typeof jQuery.qtip&&!function(a,b,c){!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)}(function(d){"use strict";function e(a,b,c,e){this.id=c,this.target=a,this.tooltip=G,this.elements={target:a},this._id=T+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:F,attr:e,onTooltip:F,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=F}function f(a){return a===G||"object"!==d.type(a)}function g(a){return!(d.isFunction(a)||a&&a.attr||a.length||"object"===d.type(a)&&(a.jquery||a.then))}function h(a){var b,c,e,h;return f(a)?F:(f(a.metadata)&&(a.metadata={type:a.metadata}),"content"in a&&(b=a.content,f(b)||b.jquery||b.done?b=a.content={text:c=g(b)?F:b}:c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==F,delete b.ajax,b.text=function(a,b){var f=c||d(this).attr(b.options.content.attr)||"Loading...",g=d.ajax(d.extend({},e,{context:b})).then(e.success,G,e.error).then(function(a){return a&&h&&b.set("content.text",a),a},function(a,c,d){b.destroyed||0===a.status||b.set("content.text",c+": "+d)});return h?f:(b.set("content.text",f),g)}),"title"in b&&(f(b.title)||(b.button=b.title.button,b.title=b.title.text),g(b.title||F)&&(b.title=F))),"position"in a&&f(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&f(a.show)&&(a.show=a.show.jquery?{target:a.show}:a.show===E?{ready:E}:{event:a.show}),"hide"in a&&f(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&f(a.style)&&(a.style={classes:a.style}),d.each(S,function(){this.sanitize&&this.sanitize(a)}),a)}function i(a,b){for(var c,d=0,e=a,f=b.split(".");e=e[f[d++]];)d0?setTimeout(d.proxy(a,this),b):void a.call(this)}function n(a){return this.tooltip.hasClass(ba)?F:(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),void(this.timers.show=m.call(this,function(){this.toggle(E,a)},this.options.show.delay)))}function o(a){if(this.tooltip.hasClass(ba))return F;var b=d(a.relatedTarget),c=b.closest(X)[0]===this.tooltip[0],e=b[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==b[0]&&"mouse"===this.options.position.target&&c||this.options.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(c||e))try{a.preventDefault(),a.stopImmediatePropagation()}catch(f){}else this.timers.hide=m.call(this,function(){this.toggle(F,a)},this.options.hide.delay,this)}function p(a){return this.tooltip.hasClass(ba)||!this.options.hide.inactive?F:(clearTimeout(this.timers.inactive),void(this.timers.inactive=m.call(this,function(){this.hide(a)},this.options.hide.inactive)))}function q(a){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(a)}function r(a,c,e){d(b.body).delegate(a,(c.split?c:c.join(ia+" "))+ia,function(){var a=z.api[d.attr(this,V)];a&&!a.disabled&&e.apply(a,arguments)})}function s(a,c,f){var g,i,j,k,l,m=d(b.body),n=a[0]===b?m:a,o=a.metadata?a.metadata(f.metadata):G,p="html5"===f.metadata.type&&o?o[f.metadata.name]:G,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(E,{},z.defaults,f,"object"==typeof q?h(q):G,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===F||!j)return F;k.content.text=j}if(i.container.length||(i.container=m),i.target===F&&(i.target=n),k.show.target===F&&(k.show.target=n),k.show.solo===E&&(k.show.solo=i.container.closest("body")),k.hide.target===F&&(k.hide.target=n),k.position.viewport===E&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new B(i.at,E),i.my=new B(i.my),a.data(T))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===F)return F;return a.attr(U,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(da,l).attr("title",""),g=new e(a,k,c,!!j),a.data(T,g),a.one("remove.qtip-"+c+" removeqtip.qtip-"+c,function(){var a;(a=d(this).data(T))&&a.destroy(!0)}),g}function t(a){return a.charAt(0).toUpperCase()+a.slice(1)}function u(a,b){var d,e,f=b.charAt(0).toUpperCase()+b.slice(1),g=(b+" "+ta.join(f+" ")+f).split(" "),h=0;if(sa[b])return a.css(sa[b]);for(;d=g[h++];)if((e=a.css(d))!==c)return sa[b]=d,e}function v(a,b){return Math.ceil(parseFloat(u(a,b)))}function w(a,b){this._ns="tip",this.options=b,this.offset=b.offset,this.size=[b.width,b.height],this.init(this.qtip=a)}function x(a,b){this.options=b,this._ns="-modal",this.init(this.qtip=a)}function y(a){this._ns="ie6",this.init(this.qtip=a)}var z,A,B,C,D,E=!0,F=!1,G=null,H="x",I="y",J="width",K="height",L="top",M="left",N="bottom",O="right",P="center",Q="flipinvert",R="shift",S={},T="qtip",U="data-hasqtip",V="data-qtip-id",W=["ui-widget","ui-tooltip"],X="."+T,Y="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),Z=T+"-fixed",$=T+"-default",_=T+"-focus",aa=T+"-hover",ba=T+"-disabled",ca="_replacedByqTip",da="oldtitle",ea={ie:function(){for(var a=3,c=b.createElement("div");(c.innerHTML="")&&c.getElementsByTagName("i")[0];);return a>4?a:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||F};A=e.prototype,A._when=function(a){return d.when.apply(d,a)},A.render=function(a){if(this.rendered||this.destroyed)return this;var b,c=this,e=this.options,f=this.cache,g=this.elements,h=e.content.text,i=e.content.title,j=e.content.button,k=e.position,l=("."+this._id+" ",[]);return d.attr(this.target[0],"aria-describedby",this._id),this.tooltip=g.tooltip=b=d("
",{id:this._id,"class":[T,$,e.style.classes,T+"-pos-"+e.position.my.abbrev()].join(" "),width:e.style.width||"",height:e.style.height||"",tracking:"mouse"===k.target&&k.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":F,"aria-describedby":this._id+"-content","aria-hidden":E}).toggleClass(ba,this.disabled).attr(V,this.id).data(T,this).appendTo(k.container).append(g.content=d("
",{"class":T+"-content",id:this._id+"-content","aria-atomic":E})),this.rendered=-1,this.positioning=E,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,F))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,F)),this.rendered=E,this._setWidget(),d.each(S,function(a){var b;"render"===this.initialize&&(b=this(c))&&(c.plugins[a]=b)}),this._unassignEvents(),this._assignEvents(),this._when(l).then(function(){c._trigger("render"),c.positioning=F,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(E,f.event,F),c.hiddenDuringWait=F}),z.api[this.id]=this,this},A.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=E;var a=this.target,b=a.attr(da);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),d.each(this.plugins,function(){this.destroy&&this.destroy()}),clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this._unassignEvents(),a.removeData(T).removeAttr(V).removeAttr(U).removeAttr("aria-describedby"),this.options.suppress&&b&&a.attr("title",b).removeAttr(da),this._unbind(a),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=G,delete z.api[this.id]}}return this.destroyed?this.target:(a===E&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},C=A.checks={builtin:{"^id$":function(a,b,c,e){var f=c===E?z.nextid:c,g=T+"-"+f;f!==F&&f.length>0&&!d("#"+g).length?(this._id=g,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):a[b]=e},"^prerender":function(a,b,c){c&&!this.rendered&&this.render(this.options.show.ready)},"^content.text$":function(a,b,c){this._updateContent(c)},"^content.attr$":function(a,b,c,d){this.options.content.text===this.target.attr(d)&&this._updateContent(this.target.attr(c))},"^content.title$":function(a,b,c){return c?(c&&!this.elements.title&&this._createTitle(),void this._updateTitle(c)):this._removeTitle()},"^content.button$":function(a,b,c){this._updateButton(c)},"^content.title.(text|button)$":function(a,b,c){this.set("content."+b,c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(a[b]=new B(c,"at"===b))},"^position.container$":function(a,b,c){this.rendered&&this.tooltip.appendTo(c)},"^show.ready$":function(a,b,c){c&&(!this.rendered&&this.render(E)||this.toggle(E))},"^style.classes$":function(a,b,c,d){this.rendered&&this.tooltip.removeClass(d).addClass(c)},"^style.(width|height)":function(a,b,c){this.rendered&&this.tooltip.css(b,c)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def":function(a,b,c){this.rendered&&this.tooltip.toggleClass($,!!c)},"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){this.rendered&&this.tooltip[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var a=this.options.position;this.tooltip.attr("tracking","mouse"===a.target&&a.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},A.get=function(a){if(this.destroyed)return this;var b=i(this.options,a.toLowerCase()),c=b[0][b[1]];return c.precedance?c.string():c};var fa=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,ga=/^prerender|show\.ready/i;A.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=F,g=this.options;this.checks}return"string"==typeof a?(c=a,a={},a[c]=b):a=d.extend({},a),d.each(a,function(b,c){if(e&&ga.test(b))return void delete a[b];var h,j=i(g,b.toLowerCase());h=j[0][j[1]],j[0][j[1]]=c&&c.nodeType?d(c):c,f=fa.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=E,d.each(a,d.proxy(j,this)),this.positioning=F,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?G:this.cache.event),this},A._update=function(a,b){var c=this,e=this.cache;return this.rendered&&a?(d.isFunction(a)&&(a=a.call(this.elements.target,e.event,this)||""),d.isFunction(a.then)?(e.waiting=E,a.then(function(a){return e.waiting=F,c._update(a,b)},G,function(a){return c._update(a,b)})):a===F||!a&&""!==a?F:(a.jquery&&a.length>0?b.empty().append(a.css({display:"block",visibility:"visible"})):b.html(a),this._waitForContent(b).then(function(a){a.images&&a.images.length&&c.rendered&&c.tooltip[0].offsetWidth>0&&c.reposition(e.event,!a.length)}))):F},A._waitForContent=function(a){var b=this.cache;return b.waiting=E,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=F}).promise()},A._updateContent=function(a,b){this._update(a,this.elements.content,b)},A._updateTitle=function(a,b){this._update(a,this.elements.title,b)===F&&this._removeTitle(F)},A._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("
",{"class":T+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("
",{id:b,"class":T+"-title","aria-atomic":E})).insertBefore(a.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus","down"===a.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover","mouseover"===a.type)}),this.options.content.button&&this._createButton()},A._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=G,a!==F&&this.reposition())},A.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=E;var f,g,h=this.cache,i=this.tooltip,j=this.options.position,k=j.target,l=j.my,m=j.at,n=j.viewport,o=j.container,p=j.adjust,q=p.method.split(" "),r=i.outerWidth(F),s=i.outerHeight(F),t=0,u=0,v=i.css("position"),w={left:0,top:0},x=i[0].offsetWidth>0,y=c&&"scroll"===c.type,z=d(a),A=o[0].ownerDocument,B=this.mouse;if(d.isArray(k)&&2===k.length)m={x:M,y:L},w={left:k[0],top:k[1]};else if("mouse"===k)m={x:M,y:L},!B||!B.pageX||!p.mouse&&c&&c.pageX?c&&c.pageX||((!p.mouse||this.options.show.distance)&&h.origin&&h.origin.pageX?c=h.origin:(!c||c&&("resize"===c.type||"scroll"===c.type))&&(c=h.event)):c=B,"static"!==v&&(w=o.offset()),A.body.offsetWidth!==(a.innerWidth||A.documentElement.clientWidth)&&(g=d(b.body).offset()),w={left:c.pageX-w.left+(g&&g.left||0),top:c.pageY-w.top+(g&&g.top||0)},p.mouse&&y&&B&&(w.left-=(B.scrollX||0)-z.scrollLeft(),w.top-=(B.scrollY||0)-z.scrollTop());else{if("event"===k?c&&c.target&&"scroll"!==c.type&&"resize"!==c.type?h.target=d(c.target):c.target||(h.target=this.elements.target):"event"!==k&&(h.target=d(k.jquery?k:this.elements.target)),k=h.target,k=d(k).eq(0),0===k.length)return this;k[0]===b||k[0]===a?(t=ea.iOS?a.innerWidth:k.width(),u=ea.iOS?a.innerHeight:k.height(),k[0]===a&&(w={top:(n||k).scrollTop(),left:(n||k).scrollLeft()})):S.imagemap&&k.is("area")?f=S.imagemap(this,k,m,S.viewport?q:F):S.svg&&k&&k[0].ownerSVGElement?f=S.svg(this,k,m,S.viewport?q:F):(t=k.outerWidth(F),u=k.outerHeight(F),w=k.offset()),f&&(t=f.width,u=f.height,g=f.offset,w=f.position),w=this.reposition.offset(k,w,o),(ea.iOS>3.1&&ea.iOS<4.1||ea.iOS>=4.3&&ea.iOS<4.33||!ea.iOS&&"fixed"===v)&&(w.left-=z.scrollLeft(),w.top-=z.scrollTop()),(!f||f&&f.adjustable!==F)&&(w.left+=m.x===O?t:m.x===P?t/2:0,w.top+=m.y===N?u:m.y===P?u/2:0)}return w.left+=p.x+(l.x===O?-r:l.x===P?-r/2:0),w.top+=p.y+(l.y===N?-s:l.y===P?-s/2:0),S.viewport?(w.adjusted=S.viewport(this,w,j,t,u,r,s),g&&w.adjusted.left&&(w.left+=g.left),g&&w.adjusted.top&&(w.top+=g.top)):w.adjusted={left:0,top:0},this._trigger("move",[w,n.elem||n],c)?(delete w.adjusted,e===F||!x||isNaN(w.left)||isNaN(w.top)||"mouse"===k||!d.isFunction(j.effect)?i.css(w):d.isFunction(j.effect)&&(j.effect.call(i,this,d.extend({},w)),i.queue(function(a){d(this).css({opacity:"",height:""}),ea.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=F,this):this},A.reposition.offset=function(a,c,e){function f(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}if(!e[0])return c;var g,h,i,j,k=d(a[0].ownerDocument),l=!!ea.ie&&"CSS1Compat"!==b.compatMode,m=e[0];do"static"!==(h=d.css(m,"position"))&&("fixed"===h?(i=m.getBoundingClientRect(),f(k,-1)):(i=d(m).position(),i.left+=parseFloat(d.css(m,"borderLeftWidth"))||0,i.top+=parseFloat(d.css(m,"borderTopWidth"))||0),c.left-=i.left+(parseFloat(d.css(m,"marginLeft"))||0),c.top-=i.top+(parseFloat(d.css(m,"marginTop"))||0),g||"hidden"===(j=d.css(m,"overflow"))||"visible"===j||(g=d(m)));while(m=m.offsetParent);return g&&(g[0]!==k[0]||l)&&f(g,1),c};var ha=(B=A.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,P).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!b;var c=a.charAt(0);this.precedance="t"===c||"b"===c?I:H}).prototype;ha.invert=function(a,b){this[a]=this[a]===M?O:this[a]===O?M:b||this[a]},ha.string=function(){var a=this.x,b=this.y;return a===b?a:this.precedance===I||this.forceY&&"center"!==b?b+" "+a:a+" "+b},ha.abbrev=function(){var a=this.string().split(" ");return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},ha.clone=function(){return new B(this.string(),this.forceY)},A.toggle=function(a,c){var e=this.cache,f=this.options,g=this.tooltip;if(c){if(/over|enter/.test(c.type)&&/out|leave/.test(e.event.type)&&f.show.target.add(c.target).length===f.show.target.length&&g.has(c.relatedTarget).length)return this;e.event=l(c)}if(this.waiting&&!a&&(this.hiddenDuringWait=E),!this.rendered)return a?this.render(1):this;if(this.destroyed||this.disabled)return this;var h,i,j,k=a?"show":"hide",m=this.options[k],n=(this.options[a?"hide":"show"],this.options.position),o=this.options.content,p=this.tooltip.css("width"),q=this.tooltip.is(":visible"),r=a||1===m.target.length,s=!c||m.target.length<2||e.target[0]===c.target;return(typeof a).search("boolean|number")&&(a=!q),h=!g.is(":animated")&&q===a&&s,i=h?G:!!this._trigger(k,[90]),this.destroyed?this:(i!==F&&a&&this.focus(c),!i||h?this:(d.attr(g[0],"aria-hidden",!a),a?(e.origin=l(this.mouse),d.isFunction(o.text)&&this._updateContent(o.text,F),d.isFunction(o.title)&&this._updateTitle(o.title,F),!D&&"mouse"===n.target&&n.adjust.mouse&&(d(b).bind("mousemove."+T,this._storeMouse),D=E),p||g.css("width",g.outerWidth(F)),this.reposition(c,arguments[2]),p||g.css("width",""),m.solo&&("string"==typeof m.solo?d(m.solo):d(X,m.solo)).not(g).not(m.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,D&&!d(X+'[tracking="true"]:visible',m.solo).not(g).length&&(d(b).unbind("mousemove."+T),D=F),this.blur(c)),j=d.proxy(function(){a?(ea.ie&&g[0].style.removeAttribute("filter"),g.css("overflow",""),"string"==typeof m.autofocus&&d(this.options.show.autofocus,g).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):g.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(a?"visible":"hidden")},this),m.effect===F||r===F?(g[k](),j()):d.isFunction(m.effect)?(g.stop(1,1),m.effect.call(g,this),g.queue("fx",function(a){j(),a()})):g.fadeTo(90,a?1:0,j),a&&m.target.trigger("qtip-"+this.id+"-inactive"),this))},A.show=function(a){return this.toggle(E,a)},A.hide=function(a){return this.toggle(F,a)},A.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(X),c=this.tooltip,e=parseInt(c[0].style.zIndex,10),f=z.zindex+b.length;return c.hasClass(_)||this._trigger("focus",[f],a)&&(e!==f&&(b.each(function(){this.style.zIndex>e&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+_).qtip("blur",a)),c.addClass(_)[0].style.zIndex=f),this},A.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass(_),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},A.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(ba):this.disabled):"boolean"!=typeof a&&(a=E),this.rendered&&this.tooltip.toggleClass(ba,a).attr("aria-disabled",a),this.disabled=!!a,this)},A.enable=function(){return this.disable(F)},A._createButton=function(){var a=this,b=this.elements,c=b.tooltip,e=this.options.content.button,f="string"==typeof e,g=f?e:"Close tooltip";b.button&&b.button.remove(),b.button=e.jquery?e:d("",{"class":"qtip-close "+(this.options.style.widget?"":T+"-icon"),title:g,"aria-label":g}).prepend(d("",{"class":"ui-icon ui-icon-close",html:"×"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(ba)||a.hide(b),F})},A._updateButton=function(a){if(!this.rendered)return F;var b=this.elements.button;a?this._createButton():b.remove()},A._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(ba);c.removeClass(ba),ba=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(ba,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass($,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(T+"-icon",!a)},A._storeMouse=function(a){(this.mouse=l(a)).type="mousemove"},A._bind=function(a,b,c,e,f){var g="."+this._id+(e?"-"+e:"");b.length&&d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this))},A._unbind=function(a,b){d(a).unbind("."+this._id+(b?"-"+b:""))};var ia="."+T;d(function(){r(X,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(Z)&&!c.hasClass(ba)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(aa,b)}),r("["+V+"]",Y,p)}),A._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||G,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=F,!e.isDefaultPrevented()},A._bindEvents=function(a,b,c,e,f,g){if(e.add(c).length===e.length){var h=[];b=d.map(b,function(b){var c=d.inArray(b,a);return c>-1?void h.push(a.splice(c,1)[0]):b}),h.length&&this._bind(c,h,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)})}this._bind(c,a,f),this._bind(e,b,g)},A._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?F:(this.cache.event=l(a),this.cache.target=a?d(a.target):[c],clearTimeout(this.timers.show),void(this.timers.show=m.call(this,function(){this.render("object"==typeof a||e.show.ready)},e.show.delay)))}var e=this.options,f=e.show.target,g=e.hide.target,h=e.show.event?d.trim(""+e.show.event).split(" "):[],i=e.hide.event?d.trim(""+e.hide.event).split(" "):[];/mouse(over|enter)/i.test(e.show.event)&&!/mouse(out|leave)/i.test(e.hide.event)&&i.push("mouseleave"),this._bind(f,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=E}),this._bindEvents(h,i,f,g,b,function(){clearTimeout(this.timers.show)}),(e.show.ready||e.prerender)&&b.call(this,a)},A._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),m=(d(b.body),d(a)),r=e.show.event?d.trim(""+e.show.event).split(" "):[],s=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeName)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(Z)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(ba)&&this.tooltip[0].offsetWidth>0,e=b.parents(X).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",p),this._bind(i.add(g),z.inactiveEvents,p,"-inactive")),this._bindEvents(r,s,h,i,n,o),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mouseenter","mouseleave"],function(a){this.cache.onTarget="mouseenter"===a.type}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(ba)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:m,"resize",q),f.adjust.scroll&&this._bind(m.add(f.container),"scroll",q)},A._unassignEvents=function(){var c=[this.options.show.target[0],this.options.hide.target[0],this.rendered&&this.tooltip[0],this.options.position.container[0],this.options.position.viewport[0],this.options.position.container.closest("html")[0],a,b];this._unbind(d([]).pushStack(d.grep(c,function(a){return"object"==typeof a})))},z=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=G,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],T):G;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,T);if(!a)return E;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),F;a.set(b,e)}}),g!==G?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(E,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===F||c.length<1||z.api[c]?z.nextid++:c,b=s(d(this),c,k),b===F?E:(z.api[c]=b,d.each(S,function(){"initialize"===this.initialize&&this(b)}),void b._assignInitialEvents(j))}))},d.qtip=e,z.api={},d.each({attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,da):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(da,b))}return d.fn["attr"+ca].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+ca].apply(this,arguments));return a||b.filter("["+da+"]").attr("title",function(){return d.attr(this,da)}).removeAttr(da),b}},function(a,b){if(!b||d.fn[a+ca])return E;var c=d.fn[a+ca]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+ca]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(U))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+ca].apply(this,arguments)}),z.version="2.2.0",z.nextid=0,z.inactiveEvents=Y,z.zindex=15e3,z.defaults={prerender:F,id:F,overwrite:E,suppress:E,content:{text:E,attr:"title",title:F,button:F},position:{my:"top left",at:"bottom right",target:F,container:F,viewport:F,adjust:{x:0,y:0,mouse:E,scroll:E,resize:E,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:F})}},show:{target:F,event:"mouseenter",effect:E,delay:90,solo:F,ready:F,autofocus:F},hide:{target:F,event:"mouseleave",effect:E,delay:0,fixed:F,inactive:F,leave:"window",distance:F},style:{classes:"",widget:F,width:F,height:F,def:E},events:{render:G,move:G,show:G,hide:G,toggle:G,visible:G,hidden:G,focus:G,blur:G}};var ja,ka="margin",la="border",ma="color",na="background-color",oa="transparent",pa=" !important",qa=!!b.createElement("canvas").getContext,ra=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,sa={},ta=["Webkit","O","Moz","ms"];if(qa)var ua=a.devicePixelRatio||1,va=function(){var a=b.createElement("canvas").getContext("2d");return a.backingStorePixelRatio||a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||1}(),wa=ua/va;else var xa=function(a,b,c){return"'};d.extend(w.prototype,{init:function(a){var b,c;c=this.element=a.elements.tip=d("
",{"class":T+"-tip"}).prependTo(a.tooltip),qa?(b=d("").appendTo(this.element)[0].getContext("2d"),b.lineJoin="miter",b.miterLimit=1e5,b.save()):(b=xa("shape",'coordorigin="0,0"',"position:absolute;"),this.element.html(b+b),a._bind(d("*",c).add(c),["click","mousedown"],function(a){a.stopPropagation()},this._ns)),a._bind(a.tooltip,"tooltipmove",this.reposition,this._ns,this),this.create()},_swapDimensions:function(){this.size[0]=this.options.height,this.size[1]=this.options.width},_resetDimensions:function(){this.size[0]=this.options.width,this.size[1]=this.options.height},_useTitle:function(a){var b=this.qtip.elements.titlebar;return b&&(a.y===L||a.y===P&&this.element.position().top+this.size[1]/2+this.options.offsetl&&!ra.test(e[1])&&(e[0]=e[1]),this.border=l=p.border!==E?p.border:l):this.border=l=0,k=this.size=this._calculateSize(b),n.css({width:k[0],height:k[1],lineHeight:k[1]+"px"}),j=b.precedance===I?[s(r.x===M?l:r.x===O?k[0]-q[0]-l:(k[0]-q[0])/2),s(r.y===L?k[1]-q[1]:0)]:[s(r.x===M?k[0]-q[0]:0),s(r.y===L?l:r.y===N?k[1]-q[1]-l:(k[1]-q[1])/2)],qa?(g=o[0].getContext("2d"),g.restore(),g.save(),g.clearRect(0,0,6e3,6e3),h=this._calculateTip(r,q,wa),i=this._calculateTip(r,this.size,wa),o.attr(J,k[0]*wa).attr(K,k[1]*wa),o.css(J,k[0]).css(K,k[1]),this._drawCoords(g,i),g.fillStyle=e[1],g.fill(),g.translate(j[0]*wa,j[1]*wa),this._drawCoords(g,h), +g.fillStyle=e[0],g.fill()):(h=this._calculateTip(r),h="m"+h[0]+","+h[1]+" l"+h[2]+","+h[3]+" "+h[4]+","+h[5]+" xe",j[2]=l&&/^(r|b)/i.test(b.string())?8===ea.ie?2:1:0,o.css({coordsize:k[0]+l+" "+(k[1]+l),antialias:""+(r.string().indexOf(P)>-1),left:j[0]-j[2]*Number(f===H),top:j[1]-j[2]*Number(f===I),width:k[0]+l,height:k[1]+l}).each(function(a){var b=d(this);b[b.prop?"prop":"attr"]({coordsize:k[0]+l+" "+(k[1]+l),path:h,fillcolor:e[0],filled:!!a,stroked:!a}).toggle(!(!l&&!a)),!a&&b.html(xa("stroke",'weight="'+2*l+'px" color="'+e[1]+'" miterlimit="1000" joinstyle="miter"'))})),a.opera&&setTimeout(function(){m.tip.css({display:"inline-block",visibility:"visible"})},1),c!==F&&this.calculate(b,k)},calculate:function(a,b){if(!this.enabled)return F;var c,e,f=this,g=this.qtip.elements,h=this.element,i=this.options.offset,j=(g.tooltip.hasClass("ui-widget"),{});return a=a||this.corner,c=a.precedance,b=b||this._calculateSize(a),e=[a.x,a.y],c===H&&e.reverse(),d.each(e,function(d,e){var h,k,l;e===P?(h=c===I?M:L,j[h]="50%",j[ka+"-"+h]=-Math.round(b[c===I?0:1]/2)+i):(h=f._parseWidth(a,e,g.tooltip),k=f._parseWidth(a,e,g.content),l=f._parseRadius(a),j[e]=Math.max(-f.border,d?k:i+(l>h?l:-h)))}),j[a[c]]-=b[c===H?0:1],h.css({margin:"",top:"",bottom:"",left:"",right:""}).css(j),j},reposition:function(a,b,d){function e(a,b,c,d,e){a===R&&j.precedance===b&&k[d]&&j[c]!==P?j.precedance=j.precedance===H?I:H:a!==R&&k[d]&&(j[b]=j[b]===P?k[d]>0?d:e:j[b]===d?e:d)}function f(a,b,e){j[a]===P?p[ka+"-"+b]=o[a]=g[ka+"-"+b]-k[b]:(h=g[e]!==c?[k[b],-g[b]]:[-k[b],g[b]],(o[a]=Math.max(h[0],h[1]))>h[0]&&(d[b]-=k[b],o[b]=F),p[g[e]!==c?e:b]=o[a])}if(this.enabled){var g,h,i=b.cache,j=this.corner.clone(),k=d.adjusted,l=b.options.position.adjust.method.split(" "),m=l[0],n=l[1]||l[0],o={left:F,top:F,x:0,y:0},p={};this.corner.fixed!==E&&(e(m,H,I,M,O),e(n,I,H,L,N),j.string()===i.corner.string()||i.cornerTop===k.top&&i.cornerLeft===k.left||this.update(j,F)),g=this.calculate(j),g.right!==c&&(g.left=-g.right),g.bottom!==c&&(g.top=-g.bottom),g.user=this.offset,(o.left=m===R&&!!k.left)&&f(H,M,O),(o.top=n===R&&!!k.top)&&f(I,L,N),this.element.css(p).toggle(!(o.x&&o.y||j.x===P&&o.y||j.y===P&&o.x)),d.left-=g.left.charAt?g.user:m!==R||o.top||!o.left&&!o.top?g.left+this.border:0,d.top-=g.top.charAt?g.user:n!==R||o.left||!o.left&&!o.top?g.top+this.border:0,i.cornerLeft=k.left,i.cornerTop=k.top,i.corner=j.clone()}},destroy:function(){this.qtip._unbind(this.qtip.tooltip,this._ns),this.qtip.elements.tip&&this.qtip.elements.tip.find("*").remove().end().remove()}}),ja=S.tip=function(a){return new w(a,a.options.style.tip)},ja.initialize="render",ja.sanitize=function(a){if(a.style&&"tip"in a.style){var b=a.style.tip;"object"!=typeof b&&(b=a.style.tip={corner:b}),/string|boolean/i.test(typeof b.corner)||(b.corner=E)}},C.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){this.create(),this.qtip.reposition()},"^style.tip.(height|width)$":function(a){this.size=[a.width,a.height],this.update(),this.qtip.reposition()},"^content.title|style.(classes|widget)$":function(){this.update()}},d.extend(E,z.defaults,{style:{tip:{corner:E,mimic:F,width:6,height:6,border:E,offset:0}}});var ya,za,Aa="qtip-modal",Ba="."+Aa;za=function(){function a(a){if(d.expr[":"].focusable)return d.expr[":"].focusable;var b,c,e,f=!isNaN(d.attr(a,"tabindex")),g=a.nodeName&&a.nodeName.toLowerCase();return"area"===g?(b=a.parentNode,c=b.name,a.href&&c&&"map"===b.nodeName.toLowerCase()?(e=d("img[usemap=#"+c+"]")[0],!!e&&e.is(":visible")):!1):/input|select|textarea|button|object/.test(g)?!a.disabled:"a"===g?a.href||f:f}function c(a){k.length<1&&a.length?a.not("body").blur():k.first().focus()}function e(a){if(i.is(":visible")){var b,e=d(a.target),h=f.tooltip,j=e.closest(X);b=j.length<1?F:parseInt(j[0].style.zIndex,10)>parseInt(h[0].style.zIndex,10),b||e.closest(X)[0]===h[0]||c(e),g=a.target===k[k.length-1]}}var f,g,h,i,j=this,k={};d.extend(j,{init:function(){return i=j.elem=d("
",{id:"qtip-overlay",html:"
",mousedown:function(){return F}}).hide(),d(b.body).bind("focusin"+Ba,e),d(b).bind("keydown"+Ba,function(a){f&&f.options.show.modal.escape&&27===a.keyCode&&f.hide(a)}),i.bind("click"+Ba,function(a){f&&f.options.show.modal.blur&&f.hide(a)}),j},update:function(b){f=b,k=b.options.show.modal.stealfocus!==F?b.tooltip.find("*").filter(function(){return a(this)}):[]},toggle:function(a,e,g){var k=(d(b.body),a.tooltip),l=a.options.show.modal,m=l.effect,n=e?"show":"hide",o=i.is(":visible"),p=d(Ba).filter(":visible:not(:animated)").not(k);return j.update(a),e&&l.stealfocus!==F&&c(d(":focus")),i.toggleClass("blurs",l.blur),e&&i.appendTo(b.body),i.is(":animated")&&o===e&&h!==F||!e&&p.length?j:(i.stop(E,F),d.isFunction(m)?m.call(i,e):m===F?i[n]():i.fadeTo(parseInt(g,10)||90,e?1:0,function(){e||i.hide()}),e||i.queue(function(a){i.css({left:"",top:""}),d(Ba).length||i.detach(),a()}),h=e,f.destroyed&&(f=G),j)}}),j.init()},za=new za,d.extend(x.prototype,{init:function(a){var b=a.tooltip;return this.options.on?(a.elements.overlay=za.elem,b.addClass(Aa).css("z-index",z.modal_zindex+d(Ba).length),a._bind(b,["tooltipshow","tooltiphide"],function(a,c,e){var f=a.originalEvent;if(a.target===b[0])if(f&&"tooltiphide"===a.type&&/mouse(leave|enter)/.test(f.type)&&d(f.relatedTarget).closest(za.elem[0]).length)try{a.preventDefault()}catch(g){}else(!f||f&&"tooltipsolo"!==f.type)&&this.toggle(a,"tooltipshow"===a.type,e)},this._ns,this),a._bind(b,"tooltipfocus",function(a,c){if(!a.isDefaultPrevented()&&a.target===b[0]){var e=d(Ba),f=z.modal_zindex+e.length,g=parseInt(b[0].style.zIndex,10);za.elem[0].style.zIndex=f-1,e.each(function(){this.style.zIndex>g&&(this.style.zIndex-=1)}),e.filter("."+_).qtip("blur",a.originalEvent),b.addClass(_)[0].style.zIndex=f,za.update(c);try{a.preventDefault()}catch(h){}}},this._ns,this),void a._bind(b,"tooltiphide",function(a){a.target===b[0]&&d(Ba).filter(":visible").not(b).last().qtip("focus",a)},this._ns,this)):this},toggle:function(a,b,c){return a&&a.isDefaultPrevented()?this:void za.toggle(this.qtip,!!b,c)},destroy:function(){this.qtip.tooltip.removeClass(Aa),this.qtip._unbind(this.qtip.tooltip,this._ns),za.toggle(this.qtip,F),delete this.qtip.elements.overlay}}),ya=S.modal=function(a){return new x(a,a.options.show.modal)},ya.sanitize=function(a){a.show&&("object"!=typeof a.show.modal?a.show.modal={on:!!a.show.modal}:"undefined"==typeof a.show.modal.on&&(a.show.modal.on=E))},z.modal_zindex=z.zindex-200,ya.initialize="render",C.modal={"^show.modal.(on|blur)$":function(){this.destroy(),this.init(),this.qtip.elems.overlay.toggle(this.qtip.tooltip[0].offsetWidth>0)}},d.extend(E,z.defaults,{show:{modal:{on:F,effect:E,blur:E,stealfocus:E,escape:E}}}),S.viewport=function(c,d,e,f,g,h,i){function j(a,b,c,e,f,g,h,i,j){var k=d[f],m=v[a],t=w[a],u=c===R,x=m===f?j:m===g?-j:-j/2,y=t===f?i:t===g?-i:-i/2,z=r[f]+s[f]-(o?0:n[f]),A=z-k,B=k+j-(h===J?p:q)-z,C=x-(v.precedance===a||m===v[b]?y:0)-(t===P?i/2:0);return u?(C=(m===f?1:-1)*x,d[f]+=A>0?A:B>0?-B:0,d[f]=Math.max(-n[f]+s[f],k-C,Math.min(Math.max(-n[f]+s[f]+(h===J?p:q),k+C),d[f],"center"===m?k-x:1e9))):(e*=c===Q?2:0,A>0&&(m!==f||B>0)?(d[f]-=C+e,l.invert(a,f)):B>0&&(m!==g||A>0)&&(d[f]-=(m===P?-C:C)+e,l.invert(a,g)),d[f]B&&(d[f]=k,l=v.clone())),d[f]-k}var k,l,m,n,o,p,q,r,s,t=e.target,u=c.elements.tooltip,v=e.my,w=e.at,x=e.adjust,y=x.method.split(" "),z=y[0],A=y[1]||y[0],B=e.viewport,C=e.container,D=c.cache,E={left:0,top:0};return B.jquery&&t[0]!==a&&t[0]!==b.body&&"none"!==x.method?(n=C.offset()||E,o="static"===C.css("position"),k="fixed"===u.css("position"),p=B[0]===a?B.width():B.outerWidth(F),q=B[0]===a?B.height():B.outerHeight(F),r={left:k?0:B.scrollLeft(),top:k?0:B.scrollTop()},s=B.offset()||E,("shift"!==z||"shift"!==A)&&(l=v.clone()),E={left:"none"!==z?j(H,I,z,x.x,M,O,J,f,h):0,top:"none"!==A?j(I,H,A,x.y,L,N,K,g,i):0},l&&D.lastClass!==(m=T+"-pos-"+l.abbrev())&&u.removeClass(c.cache.lastClass).addClass(c.cache.lastClass=m),E):E},S.polys={polygon:function(a,b){var c,d,e,f={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10},adjustable:F},g=0,h=[],i=1,j=1,k=0,l=0;for(g=a.length;g--;)c=[parseInt(a[--g],10),parseInt(a[g+1],10)],c[0]>f.position.right&&(f.position.right=c[0]),c[0]f.position.bottom&&(f.position.bottom=c[1]),c[1]0&&e>0&&i>0&&j>0;)for(d=Math.floor(d/2),e=Math.floor(e/2),b.x===M?i=d:b.x===O?i=f.width-d:i+=Math.floor(d/2),b.y===L?j=e:b.y===N?j=f.height-e:j+=Math.floor(e/2),g=h.length;g--&&!(h.length<2);)k=h[g][0]-f.position.left,l=h[g][1]-f.position.top,(b.x===M&&k>=i||b.x===O&&i>=k||b.x===P&&(i>k||k>f.width-i)||b.y===L&&l>=j||b.y===N&&j>=l||b.y===P&&(j>l||l>f.height-j))&&h.splice(g,1);f.position={left:h[0][0],top:h[0][1]}}return f},rect:function(a,b,c,d){return{width:Math.abs(c-a),height:Math.abs(d-b),position:{left:Math.min(a,c),top:Math.min(b,d)}}},_angles:{tc:1.5,tr:7/4,tl:5/4,bc:.5,br:.25,bl:.75,rc:2,lc:1,c:0},ellipse:function(a,b,c,d,e){var f=S.polys._angles[e.abbrev()],g=0===f?0:c*Math.cos(f*Math.PI),h=d*Math.sin(f*Math.PI);return{width:2*c-Math.abs(g),height:2*d-Math.abs(h),position:{left:a+g,top:b+h},adjustable:F}},circle:function(a,b,c,d){return S.polys.ellipse(a,b,c,c,d)}},S.svg=function(a,c,e){for(var f,g,h,i,j,k,l,m,n,o,p,q=d(b),r=c[0],s=d(r.ownerSVGElement),t=1,u=1,v=!0;!r.getBBox;)r=r.parentNode;if(!r.getBBox||!r.parentNode)return F;f=s.attr("width")||s.width()||parseInt(s.css("width"),10),g=s.attr("height")||s.height()||parseInt(s.css("height"),10);var w=(parseInt(c.css("stroke-width"),10)||0)/2;switch(w&&(t+=w/f,u+=w/g),r.nodeName){case"ellipse":case"circle":o=S.polys.ellipse(r.cx.baseVal.value,r.cy.baseVal.value,(r.rx||r.r).baseVal.value+w,(r.ry||r.r).baseVal.value+w,e);break;case"line":case"polygon":case"polyline":for(n=r.points||[{x:r.x1.baseVal.value,y:r.y1.baseVal.value},{x:r.x2.baseVal.value,y:r.y2.baseVal.value}],o=[],m=-1,k=n.numberOfItems||n.length;++m';d.extend(y.prototype,{_scroll:function(){var b=this.qtip.elements.overlay;b&&(b[0].style.top=d(a).scrollTop()+"px")},init:function(c){var e=c.tooltip;d("select, object").length<1&&(this.bgiframe=c.elements.bgiframe=d(Da).appendTo(e),c._bind(e,"tooltipmove",this.adjustBGIFrame,this._ns,this)),this.redrawContainer=d("
",{id:T+"-rcontainer"}).appendTo(b.body),c.elements.overlay&&c.elements.overlay.addClass("qtipmodal-ie6fix")&&(c._bind(a,["scroll","resize"],this._scroll,this._ns,this),c._bind(e,["tooltipshow"],this._scroll,this._ns,this)),this.redraw()},adjustBGIFrame:function(){var a,b,c=this.qtip.tooltip,d={height:c.outerHeight(F),width:c.outerWidth(F)},e=this.qtip.plugins.tip,f=this.qtip.elements.tip;b=parseInt(c.css("borderLeftWidth"),10)||0,b={left:-b,top:-b},e&&f&&(a="x"===e.corner.precedance?[J,M]:[K,L],b[a[1]]-=f[a[0]]()),this.bgiframe.css(b).css(d)},redraw:function(){if(this.qtip.rendered<1||this.drawing)return this;var a,b,c,d,e=this.qtip.tooltip,f=this.qtip.options.style,g=this.qtip.options.position.container;return this.qtip.drawing=1,f.height&&e.css(K,f.height),f.width?e.css(J,f.width):(e.css(J,"").appendTo(this.redrawContainer),b=e.width(),1>b%2&&(b+=1),c=e.css("maxWidth")||"",d=e.css("minWidth")||"",a=(c+d).indexOf("%")>-1?g.width()/100:0,c=(c.indexOf("%")>-1?a:1)*parseInt(c,10)||b,d=(d.indexOf("%")>-1?a:1)*parseInt(d,10)||0,b=c+d?Math.min(Math.max(b,d),c):b,e.css(J,Math.round(b)).appendTo(g)),this.drawing=0,this},destroy:function(){this.bgiframe&&this.bgiframe.remove(),this.qtip._unbind([a,this.qtip.tooltip],this._ns)}}),Ca=S.ie6=function(a){return 6===ea.ie?new y(a):F},Ca.initialize="render",C.ie6={"^content|style$":function(){this.redraw()}}})}(window,document),function(a){a.fn.serializeForm=function(){if(this.length<1)return!1;var b={},c=b,d=':input[type!="checkbox"][type!="radio"], input:checked',e=function(){if(!this.disabled){var d=this.name.replace(/\[([^\]]+)?\]/g,",$1").split(","),e=d.length-1,f=a(this);if(d[0]){for(var g=0;e>g;g++)c=c[d[g]]=c[d[g]]||(""===d[g+1]||"0"===d[g+1]?[]:{});void 0!==c.length?c.push(f.val()):c[d[e]]=f.val(),c=b}}};return this.filter(d).each(e),this.find(d).each(e),b}}(jQuery),function(a){a.fn.typeWatch=function(b){function c(b,c){var d=a(b.el).val();(d.length>=f.captureLength&&d.toUpperCase()!=b.text||c&&d.length>=f.captureLength)&&(b.text=d.toUpperCase(),b.cb.call(b.el,d))}function d(b){var d=b.type.toUpperCase();if(a.inArray(d,f.inputTypes)>=0){var e={timer:null,text:a(b).val().toUpperCase(),cb:f.callback,el:b,wait:f.wait};f.highlight&&a(b).focus(function(){this.select()});var g=function(b){var d=e.wait,g=!1,h=this.type.toUpperCase();"undefined"!=typeof b.keyCode&&13==b.keyCode&&"TEXTAREA"!=h&&a.inArray(h,f.inputTypes)>=0&&(d=1,g=!0);var i=function(){c(e,g)};clearTimeout(e.timer),e.timer=setTimeout(i,d)};a(b).on("keydown paste cut input",g)}}var e=["TEXT","TEXTAREA","PASSWORD","TEL","SEARCH","URL","EMAIL","DATETIME","DATE","MONTH","WEEK","TIME","DATETIME-LOCAL","NUMBER","RANGE"],f=a.extend({wait:750,callback:function(){},highlight:!0,captureLength:2,inputTypes:e},b);return this.each(function(){d(this)})}}(jQuery),function(a){function b(){var a="!@#$%^&*()+=[]\\';,/{}|\":<>?~`.-_";return a+=" "}function c(){var a="¬€£¦";return a}function d(b,c,d){b.each(function(){var b=a(this);b.bind("keyup change paste",function(a){var e="";a.originalEvent&&a.originalEvent.clipboardData&&a.originalEvent.clipboardData.getData&&(e=a.originalEvent.clipboardData.getData("text/plain")),setTimeout(function(){h(b,c,d,e)},0)}),b.bind("keypress",function(a){var e=a.charCode?a.charCode:a.which;if(!(g(e)||a.ctrlKey||a.metaKey)){var f=String.fromCharCode(e),h=b.selection(),i=h.start,j=h.end,k=b.val(),l=k.substring(0,i)+f+k.substring(j),m=c(l,d);m!=l&&a.preventDefault()}})})}function e(b,c){var d=parseFloat(a(b).val()),e=a(b);return isNaN(d)?void e.val(""):(f(c.min)&&dc.max&&e.val("")))}function f(a){return!isNaN(a)}function g(a){return a>=32?!1:10==a?!1:13==a?!1:!0}function h(a,b,c,d){var e=a.val();""==e&&d.length>0&&(e=d);var f=b(e,c);if(e!=f){var g=a.alphanum_caret();a.val(f),a.alphanum_caret(e.length==f.length+1?g-1:g)}}function i(b,c){"undefined"==typeof c&&(c=D);var d,e={};return d="string"==typeof b?F[b]:"undefined"==typeof b?{}:b,a.extend(e,c,d),"undefined"==typeof e.blacklist&&(e.blacklistSet=x(e.allow,e.disallow)),e}function j(b){var c,d={};return c="string"==typeof b?G[b]:"undefined"==typeof b?{}:b,a.extend(d,E,c),d}function k(a,b,c){return c.maxLength&&a.length>=c.maxLength?!1:c.allow.indexOf(b)>=0?!0:c.allowSpace&&" "==b?!0:c.blacklistSet.contains(b)?!1:!c.allowNumeric&&K[b]?!1:!c.allowUpper&&u(b)?!1:!c.allowLower&&v(b)?!1:!c.allowCaseless&&w(b)?!1:!c.allowLatin&&L.contains(b)?!1:c.allowOtherCharSets?!0:K[b]||L.contains(b)?!0:!1}function l(a,b,c){if(K[b])return n(a,c)?!1:p(a,c)?!1:o(a,c)?!1:q(a+b,c)?!1:r(a+b,c)?!1:!0;if(c.allowPlus&&"+"==b&&""==a)return!0;if(c.allowMinus&&"-"==b&&""==a)return!0;if(b==I&&c.allowThouSep&&A(a,b))return!0;if(b==J){if(a.indexOf(J)>=0)return!1;if(c.allowDecSep)return!0}return!1}function m(a){return a+="",a.replace(/[^0-9]/g,"").length}function n(a,b){var c=b.maxDigits;if(""==c||isNaN(c))return!1;var d=m(a);return d>=c?!0:!1}function o(a,b){var c=b.maxDecimalPlaces;if(""==c||isNaN(c))return!1;var d=a.indexOf(J);if(-1==d)return!1;var e=a.substring(d),f=m(e);return f>=c?!0:!1}function p(a,b){var c=b.maxPreDecimalPlaces;if(""==c||isNaN(c))return!1;var d=a.indexOf(J);if(d>=0)return!1;var e=m(a);return e>=c?!0:!1}function q(a,b){if(!b.max||b.max<0)return!1;var c=parseFloat(a);return c>b.max?!0:!1}function r(a,b){if(!b.min||b.min>0)return!1;var c=parseFloat(a);return c=0)return!1;var c=a.indexOf(I);if(0>c)return!0;var d=a.lastIndexOf(I),e=a.length-d-1;if(3>e)return!1;var f=m(a.substring(c));return f%3>0?!1:!0}function B(a){this.map="string"==typeof a?C(a):{}}function C(a){var b,c={},d=a.split(""),e=0;for(e=0;e=0?d.toString().length:startPos+c.toString().length,{start:startPos,end:endPos}):null},d=function(d){var e=b(d);if(void 0!==d.selectionStart)return document.activeElement&&document.activeElement!=d&&d.selectionStart==d.selectionEnd&&0==d.selectionStart?{start:d.value.length,end:d.value.length}:{start:d.selectionStart,end:d.selectionEnd};if(e.getSelection)return c(d,e);try{if("input"==d.nodeName.toLowerCase()){var f=b(d).document.selection.createRange(),g=d.createTextRange();g.setEndPoint("EndToStart",f);var h=g.text.length;return{start:h,end:h+f.text.length}}var i=c(d,e);if(!i)return i;var j=a.Range.current().clone(),k=j.clone().collapse().range,l=j.clone().collapse(!1).range;return k.moveStart("character",-1),l.moveStart("character",-1),0!=i.startPos&&""==k.text&&(i.startPos+=2),0!=i.endPos&&""==l.text&&(i.endPos+=2),i}catch(m){return{start:d.value.length,end:d.value.length}}},e=function(a,c,d){var e=b(a);if(a.setSelectionRange)void 0===d?(a.focus(),a.setSelectionRange(c,c)):(a.select(),a.selectionStart=c,a.selectionEnd=d);else if(a.createTextRange){var f=a.createTextRange();f.moveStart("character",c),d=d||c,f.moveEnd("character",d-a.value.length),f.select()}else if(e.getSelection){var h=e.document,i=e.getSelection(),j=h.createRange(),k=[c,void 0!==d?d:c];g([a],k),j.setStart(k[0].el,k[0].count),j.setEnd(k[1].el,k[1].count),i.removeAllRanges(),i.addRange(j)}else if(e.document.body.createTextRange){var j=document.body.createTextRange();j.moveToElementText(a),j.collapse(),j.moveStart("character",c),j.moveEnd("character",void 0!==d?d:c),j.select()}},f=function(a,b,c,d){"number"==typeof c[0]&&c[0]?~`.-_'; + blacklist += " "; // 'Space' is on the blacklist but can be enabled using the 'allowSpace' config entry + return blacklist; + } + + // Return the blacklisted special chars that are NOT encodable using 7-bit ascii + // We want this .js file to be encoded using 7-bit ascii so it can reach the widest possible audience + // Higher order chars must be escaped eg "\xAC" + // Not too worried about comments containing higher order characters for now (let's wait and see if it becomes a problem) + function getBlacklistNonAscii(){ + var blacklist = + "\xAC" // � + + "\u20AC" // � + + "\xA3" // � + + "\xA6" // � + ; + return blacklist; + } + + // End Settings //////////////////////////////////////////////////////// + + + // Implementation details go here //////////////////////////////////////////////////////// + + function setupEventHandlers($textboxes, trimFunction, settings) { + + $textboxes.each(function(){ + + var $textbox = $(this); + + $textbox.bind("keyup change paste", function(e){ + + var pastedText = ""; + + if(e.originalEvent && e.originalEvent.clipboardData && e.originalEvent.clipboardData.getData) + pastedText = e.originalEvent.clipboardData.getData("text/plain") + + // setTimeout is necessary for handling the 'paste' event + setTimeout(function(){ + trimTextbox($textbox, trimFunction, settings, pastedText); + }, 0); + }); + + $textbox.bind("keypress", function(e){ + + // Determine which key is pressed. + // If it's a control key, then allow the event's default action to occur eg backspace, tab + var charCode = !e.charCode ? e.which : e.charCode; + if(isControlKey(charCode) + || e.ctrlKey + || e.metaKey ) // cmd on MacOS + return; + + var newChar = String.fromCharCode(charCode); + + // Determine if some text was selected / highlighted when the key was pressed + var selectionObject = $textbox.selection(); + var start = selectionObject.start; + var end = selectionObject.end; + + var textBeforeKeypress = $textbox.val(); + + // The new char may be inserted: + // 1) At the start + // 2) In the middle + // 3) At the end + // 4) User highlights some text and then presses a key which would replace the highlighted text + // + // Here we build the string that would result after the keypress. + // If the resulting string is invalid, we cancel the event. + // Unfortunately, it isn't enough to just check if the new char is valid because some chars + // are position sensitive eg the decimal point '.'' or the minus sign '-'' are only valid in certain positions. + var potentialTextAfterKeypress = textBeforeKeypress.substring(0, start) + newChar + textBeforeKeypress.substring(end); + var validatedText = trimFunction(potentialTextAfterKeypress, settings); + + // If the keypress would cause the textbox to contain invalid characters, then cancel the keypress event + if(validatedText != potentialTextAfterKeypress) + e.preventDefault(); + }); + }); + + } + + // Ensure the text is a valid number when focus leaves the textbox + // This catches the case where a user enters '-' or '.' without entering any digits + function numericField_Blur(inputBox, settings) { + var fieldValueNumeric = parseFloat($(inputBox).val()); + var $inputBox = $(inputBox); + + if(isNaN(fieldValueNumeric)) { + $inputBox.val(""); + return; + } + + if(isNumeric(settings.min) && fieldValueNumeric < settings.min) + $inputBox.val(""); + + if(isNumeric(settings.max) && fieldValueNumeric > settings.max) + $inputBox.val(""); + } + + function isNumeric(value) { + return !isNaN(value); + } + + function isControlKey(charCode) { + + if(charCode >= 32) + return false; + if(charCode == 10) + return false; + if(charCode == 13) + return false; + + return true; + } + + // One way to prevent a character being entered is to cancel the keypress event. + // However, this gets messy when you have to deal with things like copy paste which isn't a keypress. + // Which event gets fired first, keypress or keyup? What about IE6 etc etc? + // Instead, it's easier to allow the 'bad' character to be entered and then to delete it immediately after. + + function trimTextbox($textBox, trimFunction, settings, pastedText){ + + var inputString = $textBox.val(); + + if(inputString == "" && pastedText.length > 0) + inputString = pastedText; + + var outputString = trimFunction(inputString, settings); + + if(inputString == outputString) + return; + + var caretPos = $textBox.alphanum_caret(); + + $textBox.val(outputString); + + //Reset the caret position + if(inputString.length ==(outputString.length + 1)) + $textBox.alphanum_caret(caretPos - 1); + else + $textBox.alphanum_caret(caretPos); + } + + function getCombinedSettingsAlphaNum(settings, defaultSettings){ + if(typeof defaultSettings == "undefined") + defaultSettings = DEFAULT_SETTINGS_ALPHANUM; + var userSettings, combinedSettings = {}; + if(typeof settings === "string") + userSettings = CONVENIENCE_SETTINGS_ALPHANUM[settings]; + else if(typeof settings == "undefined") + userSettings = {}; + else + userSettings = settings; + + $.extend(combinedSettings, defaultSettings, userSettings); + + if(typeof combinedSettings.blacklist == 'undefined') + combinedSettings.blacklistSet = getBlacklistSet(combinedSettings.allow, combinedSettings.disallow); + + return combinedSettings; + } + + function getCombinedSettingsNum(settings){ + var userSettings, combinedSettings = {}; + if(typeof settings === "string") + userSettings = CONVENIENCE_SETTINGS_NUMERIC[settings]; + else if(typeof settings == "undefined") + userSettings = {}; + else + userSettings = settings; + + $.extend(combinedSettings, DEFAULT_SETTINGS_NUM, userSettings); + + return combinedSettings; + } + + + // This is the heart of the algorithm + function alphanum_allowChar(validatedStringFragment, Char, settings){ + + if(settings.maxLength && validatedStringFragment.length >= settings.maxLength) + return false; + + if(settings.allow.indexOf(Char) >=0 ) + return true; + + if(settings.allowSpace && (Char == " ")) + return true; + + if(settings.blacklistSet.contains(Char)) + return false; + + if(!settings.allowNumeric && DIGITS[Char]) + return false; + + if(!settings.allowUpper && isUpper(Char)) + return false; + + if(!settings.allowLower && isLower(Char)) + return false; + + if(!settings.allowCaseless && isCaseless(Char)) + return false; + + if(!settings.allowLatin && LATIN_CHARS.contains(Char)) + return false; + + if(!settings.allowOtherCharSets){ + if(DIGITS[Char] || LATIN_CHARS.contains(Char)) + return true; + else + return false; + } + + return true; + } + + function numeric_allowChar(validatedStringFragment, Char, settings){ + + if(DIGITS[Char]) { + + if(isMaxDigitsReached(validatedStringFragment, settings)) + return false; + + if(isMaxPreDecimalsReached(validatedStringFragment, settings)) + return false; + + if(isMaxDecimalsReached(validatedStringFragment, settings)) + return false; + + if(isGreaterThanMax(validatedStringFragment + Char, settings)) + return false; + + if(isLessThanMin(validatedStringFragment + Char, settings)) + return false; + + return true; + } + + if(settings.allowPlus && Char == '+' && validatedStringFragment == '') + return true; + + if(settings.allowMinus && Char == '-' && validatedStringFragment == '') + return true; + + if(Char == THOU_SEP && settings.allowThouSep && allowThouSep(validatedStringFragment, Char)) + return true; + + if(Char == DEC_SEP) { + // Only one decimal separator allowed + if(validatedStringFragment.indexOf(DEC_SEP) >= 0) + return false; + if(settings.allowDecSep) + return true; + } + + return false; + } + + function countDigits(string) { + + // Error handling, nulls etc + string = string + ""; + + // Count the digits + return string.replace(/[^0-9]/g,"").length; + } + + function isMaxDigitsReached(string, settings) { + + var maxDigits = settings.maxDigits; + + if(maxDigits == "" || isNaN(maxDigits)) + return false; // In this case, there is no maximum + + var numDigits = countDigits(string); + + if(numDigits >= maxDigits) + return true; + + return false; + } + + function isMaxDecimalsReached(string, settings) { + + var maxDecimalPlaces = settings.maxDecimalPlaces; + + if(maxDecimalPlaces == "" || isNaN(maxDecimalPlaces)) + return false; // In this case, there is no maximum + + var indexOfDecimalPoint = string.indexOf(DEC_SEP); + + if(indexOfDecimalPoint == -1) + return false; + + var decimalSubstring = string.substring(indexOfDecimalPoint); + var numDecimals = countDigits(decimalSubstring); + + if(numDecimals >= maxDecimalPlaces) + return true; + + return false; + } + + function isMaxPreDecimalsReached(string, settings) { + + var maxPreDecimalPlaces = settings.maxPreDecimalPlaces; + + if(maxPreDecimalPlaces == "" || isNaN(maxPreDecimalPlaces)) + return false; // In this case, there is no maximum + + var indexOfDecimalPoint = string.indexOf(DEC_SEP); + + if(indexOfDecimalPoint >= 0) + return false; + + var numPreDecimalDigits = countDigits(string); + + if(numPreDecimalDigits >= maxPreDecimalPlaces) + return true; + + return false; + } + + function isGreaterThanMax(numericString, settings) { + + if(!settings.max || settings.max < 0) + return false; + + var outputNumber = parseFloat(numericString); + if(outputNumber > settings.max) + return true; + + return false; + } + + function isLessThanMin(numericString, settings) { + + if(!settings.min || settings.min > 0) + return false; + + var outputNumber = parseFloat(numericString); + if(outputNumber < settings.min) + return true; + + return false; + } + + /******************************** + * Trims a string according to the settings provided + ********************************/ + function trimAlphaNum(inputString, settings){ + + if(typeof inputString != "string") + return inputString; + + var inChars = inputString.split(""); + var outChars = []; + var i = 0; + var Char; + + for(i=0; i= 0) + return false; + + var posOfFirstThouSep = currentString.indexOf(THOU_SEP); + + // Check if this is the first occurrence of a THOU_SEP + if(posOfFirstThouSep < 0) + return true; + + var posOfLastThouSep = currentString.lastIndexOf(THOU_SEP); + var charsSinceLastThouSep = currentString.length - posOfLastThouSep - 1; + + // Check if there has been 3 digits since the last THOU_SEP + if(charsSinceLastThouSep < 3) + return false; + + var digitsSinceFirstThouSep = countDigits(currentString.substring(posOfFirstThouSep)); + + // Check if there has been a multiple of 3 digits since the first THOU_SEP + if((digitsSinceFirstThouSep % 3) > 0) + return false; + + return true; + } + + //////////////////////////////////////////////////////////////////////////////////// + // Implementation of a Set + //////////////////////////////////////////////////////////////////////////////////// + function Set(elems){ + if(typeof elems == "string") + this.map = stringToMap(elems); + else + this.map = {}; + } + + Set.prototype.add = function(set){ + + var newSet = this.clone(); + + for(var key in set.map) + newSet.map[key] = true; + + return newSet; + } + + Set.prototype.subtract = function(set){ + + var newSet = this.clone(); + + for(var key in set.map) + delete newSet.map[key]; + + return newSet; + } + + Set.prototype.contains = function(key){ + if(this.map[key]) + return true; + else + return false; + } + + Set.prototype.clone = function(){ + var newSet = new Set(); + + for(var key in this.map) + newSet.map[key] = true; + + return newSet; + } + //////////////////////////////////////////////////////////////////////////////////// + + function stringToMap(string){ + var map = {}; + var array = string.split(""); + var i=0; + var Char; + + for(i=0; i=0){endPos=i.toString().length}else{endPos=startPos+r.toString().length}return{start:startPos,end:endPos}},s=function(t){var n=r(t);if(t.selectionStart!==undefined){if(document.activeElement&&document.activeElement!=t&&t.selectionStart==t.selectionEnd&&t.selectionStart==0){return{start:t.value.length,end:t.value.length}}return{start:t.selectionStart,end:t.selectionEnd}}else if(n.getSelection){return i(t,n)}else{try{if(t.nodeName.toLowerCase()=="input"){var s=r(t).document.selection.createRange(),o=t.createTextRange();o.setEndPoint("EndToStart",s);var u=o.text.length;return{start:u,end:u+s.text.length}}else{var a=i(t,n);if(!a){return a}var f=e.Range.current().clone(),l=f.clone().collapse().range,c=f.clone().collapse(false).range;l.moveStart("character",-1);c.moveStart("character",-1);if(a.startPos!=0&&l.text==""){a.startPos+=2}if(a.endPos!=0&&c.text==""){a.endPos+=2}return a}}catch(h){return{start:t.value.length,end:t.value.length}}}},o=function(e,t,n){var i=r(e);if(e.setSelectionRange){if(n===undefined){e.focus();e.setSelectionRange(t,t)}else{e.select();e.selectionStart=t;e.selectionEnd=n}}else if(e.createTextRange){var s=e.createTextRange();s.moveStart("character",t);n=n||t;s.moveEnd("character",n-e.value.length);s.select()}else if(i.getSelection){var o=i.document,u=i.getSelection(),f=o.createRange(),l=[t,n!==undefined?n:t];a([e],l);f.setStart(l[0].el,l[0].count);f.setEnd(l[1].el,l[1].count);u.removeAllRanges();u.addRange(f)}else if(i.document.body.createTextRange){var f=document.body.createTextRange();f.moveToElementText(e);f.collapse();f.moveStart("character",t);f.moveEnd("character",n!==undefined?n:t);f.select()}},u=function(e,t,n,r){if(typeof n[0]==="number"&&n[0]= options.captureLength AND text != saved text OR if override AND text >= options.captureLength + if ((value.length >= options.captureLength && value.toUpperCase() != timer.text) + || (override && value.length >= options.captureLength)) + { + timer.text = value.toUpperCase(); + timer.cb.call(timer.el, value); + } + }; + + function watchElement(elem) { + var elementType = elem.type.toUpperCase(); + if (jQuery.inArray(elementType, options.inputTypes) >= 0) { + + // Allocate timer element + var timer = { + timer: null, + text: jQuery(elem).val().toUpperCase(), + cb: options.callback, + el: elem, + wait: options.wait + }; + + // Set focus action (highlight) + if (options.highlight) { + jQuery(elem).focus( + function() { + this.select(); + }); + } + + // Key watcher / clear and reset the timer + var startWatch = function(evt) { + var timerWait = timer.wait; + var overrideBool = false; + var evtElementType = this.type.toUpperCase(); + + // If enter key is pressed and not a TEXTAREA and matched inputTypes + if (typeof evt.keyCode != 'undefined' && evt.keyCode == 13 && evtElementType != 'TEXTAREA' && jQuery.inArray(evtElementType, options.inputTypes) >= 0) { + timerWait = 1; + overrideBool = true; + } + + var timerCallbackFx = function() { + checkElement(timer, overrideBool) + } + + // Clear timer + clearTimeout(timer.timer); + timer.timer = setTimeout(timerCallbackFx, timerWait); + }; + + jQuery(elem).on('keydown paste cut input', startWatch); + } + }; + + // Watch Each Element + return this.each(function() { + watchElement(this); + }); + + }; +})(jQuery); \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/jsonview.js b/plugins/legacy-admin/framework/core/assets/js/vendor/jsonview.js new file mode 100644 index 000000000..1afe0271f --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/jsonview.js @@ -0,0 +1,265 @@ + +/* global console, jsonView */ +/* + * ViewJSON + * Version 1.0 + * A Google Chrome extension to display JSON in a user-friendly format + * + * This is a chromeified version of the JSONView Firefox extension by Ben Hollis: + * http://jsonview.com + * http://code.google.com/p/jsonview + * + * Also based on the XMLTree Chrome extension by Moonty & alan.stroop + * https://chrome.google.com/extensions/detail/gbammbheopgpmaagmckhpjbfgdfkpadb + * + * port by Jamie Wilkinson (@jamiew) | http://jamiedubs.com | http://github.com/jamiew + * MIT license / copyfree (f) F.A.T. Lab http://fffff.at + * Speed Project Approved: 2h + */ + +function collapse(evt) { + var collapser = evt.target; + var target = collapser.parentNode.getElementsByClassName('collapsible'); + if (!target.length) { + return; + } + target = target[0]; + if (target.style.display === 'none') { + var ellipsis = target.parentNode.getElementsByClassName('ellipsis')[0]; + target.parentNode.removeChild(ellipsis); + target.style.display = ''; + } else { + target.style.display = 'none'; + var ellipsis = document.createElement('span'); + ellipsis.className = 'ellipsis'; + ellipsis.innerHTML = ' … '; + target.parentNode.insertBefore(ellipsis, target); + } + collapser.innerHTML = (collapser.innerHTML === '-') ? '+' : '-'; +} + +function addCollapser(item) { + // This mainly filters out the root object (which shouldn't be collapsible) + if (item.nodeName !== 'LI') { + return; + } + var collapser = document.createElement('div'); + collapser.className = 'collapser'; + collapser.innerHTML = '-'; + collapser.addEventListener('click', collapse, false); + item.insertBefore(collapser, item.firstChild); +} + +function jsonView(id, target) { + this.debug = false; + if (id.indexOf("#") !== -1) { + this.idType = "id"; + this.id = id.replace('#', ''); + } else if (id.indexOf(".") !== -1) { + this.idType = "class"; + this.id = id.replace('.', ''); + } else { + if (this.debug) { console.log("Can't find that element"); } + return; + } + + this.data = document.getElementById(this.id).innerHTML; + if (typeof(target) !== undefined) { + if (target.indexOf("#") !== -1) { + this.targetType = "id"; + this.target = target.replace('#', ''); + } else if (id.indexOf(".") !== -1) { + this.targetType = "class"; + this.target = target.replace('.', ''); + } else { + if (this.debug) { console.log("Can't find the target element"); } + return; + } + } + // Note: now using "*.json*" URI matching rather than these page regexes -- save CPU cycles! + // var is_json = /^\s*(\{.*\})\s*$/.test(this.data); + // var is_jsonp = /^.*\(\s*(\{.*\})\s*\)$/.test(this.data); + // if(is_json || is_jsonp){ + // Our manifest specifies that we only do URLs matching '.json', so attempt to sanitize any HTML + // added by Chrome's "text/plain" or "text/html" handlers + if (/^\(.*)\<\/pre\>$/.test(this.data)) { + if (this.debug) { console.log("JSONView: data is wrapped in
...
, stripping HTML..."); } + this.data = this.data.replace(/<(?:.|\s)*?>/g, ''); //Aggressively strip HTML. + } + // Test if what remains is JSON or JSONp + var json_regex = /^\s*([\[\{].*[\}\]])\s*$/; // Ghetto, but it works + var jsonp_regex = /^[\s\u200B\uFEFF]*([\w$\[\]\.]+)[\s\u200B\uFEFF]*\([\s\u200B\uFEFF]*([\[{][\s\S]*[\]}])[\s\u200B\uFEFF]*\);?[\s\u200B\uFEFF]*$/; + var jsonp_regex2 = /([\[\{][\s\S]*[\]\}])\)/; // more liberal support... this allows us to pass the jsonp.json & jsonp2.json tests + var is_json = json_regex.test(this.data); + var is_jsonp = jsonp_regex.test(this.data); + if (this.debug) { console.log("JSONView: is_json=" + is_json + " is_jsonp=" + is_jsonp); } + if (is_json || is_jsonp) { + if (this.debug) { console.log("JSONView: sexytime!"); } + // JSONFormatter json->HTML prototype straight from Firefox JSONView + // For reference: http://code.google.com/p/jsonview + + function JSONFormatter() { + // No magic required. + } + JSONFormatter.prototype = { + htmlEncode: function(t) { + return t != null ? t.toString().replace(/&/g, "&").replace(/"/g, """).replace(//g, ">") : ''; + }, + decorateWithSpan: function(value, className) { + return '' + this.htmlEncode(value) + ''; + }, + // Convert a basic JSON datatype (number, string, boolean, null, object, array) into an HTML fragment. + valueToHTML: function(value) { + var valueType = typeof value; + var output = ""; + if (value === null) { + output += this.decorateWithSpan('null', 'null'); + } else if (value && value.constructor === Array) { + output += this.arrayToHTML(value); + } else if (valueType === 'object') { + output += this.objectToHTML(value); + } else if (valueType === 'number') { + output += this.decorateWithSpan(value, 'num'); + } else if (valueType === 'string') { + if (/^(http|https):\/\/[^\s]+$/.test(value)) { + output += '
' + this.htmlEncode(value) + ''; + } else { + output += this.decorateWithSpan('"' + value + '"', 'string'); + } + } else if (valueType === 'boolean') { + output += this.decorateWithSpan(value, 'bool'); + } + return output; + }, + // Convert an array into an HTML fragment + arrayToHTML: function(json) { + var output = '[
    '; + var hasContents = false; + for (var prop in json) { + hasContents = true; + output += '
  • '; + output += this.valueToHTML(json[prop]); + output += '
  • '; + } + output += '
]'; + if (!hasContents) { + output = "[ ]"; + } + return output; + }, + // Convert a JSON object to an HTML fragment + objectToHTML: function(json) { + var output = '{
    '; + var hasContents = false; + for (var prop in json) { + hasContents = true; + output += '
  • '; + output += '' + this.htmlEncode(prop) + ': '; + output += this.valueToHTML(json[prop]); + output += '
  • '; + } + output += '
}'; + if (!hasContents) { + output = "{ }"; + } + return output; + }, + // Convert a whole JSON object into a formatted HTML document. + jsonToHTML: function(json, callback, uri) { + var output = ''; + if (callback) { + output += '
' + callback + ' (
'; + output += '
'; + } else { + output += '
'; + } + output += this.valueToHTML(json); + output += '
'; + if (callback) { + output += '
)
'; + } + return this.toHTML(output, uri); + }, + // Produce an error document for when parsing fails. + errorPage: function(error, data, uri) { + // var output = '
' + this.stringbundle.GetStringFromName('errorParsing') + '
'; + // output += '

' + this.stringbundle.GetStringFromName('docContents') + ':

'; + var output = '
Error parsing JSON: ' + error.message + '
'; + output += '

' + error.stack + ':

'; + output += '
' + this.htmlEncode(data) + '
'; + return this.toHTML(output, uri + ' - Error'); + }, + // Wrap the HTML fragment in a full document. Used by jsonToHTML and errorPage. + toHTML: function(content) { + return content; + } + }; + // Sanitize & output -- all magic from JSONView Firefox + this.jsonFormatter = new JSONFormatter(); + // This regex attempts to match a JSONP structure: + // * Any amount of whitespace (including unicode nonbreaking spaces) between the start of the file and the callback name + // * Callback name (any valid JavaScript function name according to ECMA-262 Edition 3 spec) + // * Any amount of whitespace (including unicode nonbreaking spaces) + // * Open parentheses + // * Any amount of whitespace (including unicode nonbreaking spaces) + // * Either { or [, the only two valid characters to start a JSON string. + // * Any character, any number of times + // * Either } or ], the only two valid closing characters of a JSON string. + // * Any amount of whitespace (including unicode nonbreaking spaces) + // * A closing parenthesis, an optional semicolon, and any amount of whitespace (including unicode nonbreaking spaces) until the end of the file. + // This will miss anything that has comments, or more than one callback, or requires modification before use. + var outputDoc = ''; + // text = text.match(jsonp_regex)[1]; + var cleanData = '', + callback = ''; + var callback_results = jsonp_regex.exec(this.data); + if (callback_results && callback_results.length === 3) { + if (this.debug) { console.log("THIS IS JSONp"); } + callback = callback_results[1]; + cleanData = callback_results[2]; + } else { + if (this.debug) { console.log("Vanilla JSON"); } + cleanData = this.data; + } + if (this.debug) { console.log(cleanData); } + // Covert, and catch exceptions on failure + try { + // var jsonObj = this.nativeJSON.decode(cleanData); + var jsonObj = JSON.parse(cleanData); + if (jsonObj) { + outputDoc = this.jsonFormatter.jsonToHTML(jsonObj, callback); + } else { + throw "There was no object!"; + } + } catch (e) { + if (this.debug) { console.log(e); } + outputDoc = this.jsonFormatter.errorPage(e, this.data); + } + var links = ''; + if (this.targetType !== undefined) { + this.idType = this.targetType; + this.id = this.target; + } + var el; + if (this.idType === "class") { + el = document.getElementsByClassName(this.id); + if (el) { + el.className += el.className ? ' jsonViewOutput' : 'jsonViewOutput'; + el.innerHTML = links + outputDoc; + } + } else if (this.idType === "id") { + el = document.getElementById(this.id); + if (el) { + el.className += el.className ? ' jsonViewOutput' : 'jsonViewOutput'; + el.innerHTML = links + outputDoc; + } + el.innerHTML = links + outputDoc; + } + var items = document.getElementsByClassName('collapsible'); + for (var i = 0; i < items.length; i++) { + addCollapser(items[i].parentNode); + } + } else { + // console.log("JSONView: this is not json, not formatting."); + } +} \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/jsonview.min.js b/plugins/legacy-admin/framework/core/assets/js/vendor/jsonview.min.js new file mode 100644 index 000000000..b8c4f1bb5 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/jsonview.min.js @@ -0,0 +1,16 @@ +/* global console, jsonView *//* + * ViewJSON + * Version 1.0 + * A Google Chrome extension to display JSON in a user-friendly format + * + * This is a chromeified version of the JSONView Firefox extension by Ben Hollis: + * http://jsonview.com + * http://code.google.com/p/jsonview + * + * Also based on the XMLTree Chrome extension by Moonty & alan.stroop + * https://chrome.google.com/extensions/detail/gbammbheopgpmaagmckhpjbfgdfkpadb + * + * port by Jamie Wilkinson (@jamiew) | http://jamiedubs.com | http://github.com/jamiew + * MIT license / copyfree (f) F.A.T. Lab http://fffff.at + * Speed Project Approved: 2h + */function collapse(e){var t=e.target,n=t.parentNode.getElementsByClassName("collapsible");if(!n.length)return;n=n[0];if(n.style.display==="none"){var r=n.parentNode.getElementsByClassName("ellipsis")[0];n.parentNode.removeChild(r),n.style.display=""}else{n.style.display="none";var r=document.createElement("span");r.className="ellipsis",r.innerHTML=" … ",n.parentNode.insertBefore(r,n)}t.innerHTML=t.innerHTML==="-"?"+":"-"}function addCollapser(e){if(e.nodeName!=="LI")return;var t=document.createElement("div");t.className="collapser",t.innerHTML="-",t.addEventListener("click",collapse,!1),e.insertBefore(t,e.firstChild)}function jsonView(e,t){this.debug=!1;if(e.indexOf("#")!==-1)this.idType="id",this.id=e.replace("#","");else{if(e.indexOf(".")===-1){this.debug&&console.log("Can't find that element");return}this.idType="class",this.id=e.replace(".","")}this.data=document.getElementById(this.id).innerHTML;if(typeof t!==undefined)if(t.indexOf("#")!==-1)this.targetType="id",this.target=t.replace("#","");else{if(e.indexOf(".")===-1){this.debug&&console.log("Can't find the target element");return}this.targetType="class",this.target=t.replace(".","")}/^\(.*)\<\/pre\>$/.test(this.data)&&(this.debug&&console.log("JSONView: data is wrapped in
...
, stripping HTML..."),this.data=this.data.replace(/<(?:.|\s)*?>/g,""));var n=/^\s*([\[\{].*[\}\]])\s*$/,r=/^[\s\u200B\uFEFF]*([\w$\[\]\.]+)[\s\u200B\uFEFF]*\([\s\u200B\uFEFF]*([\[{][\s\S]*[\]}])[\s\u200B\uFEFF]*\);?[\s\u200B\uFEFF]*$/,i=/([\[\{][\s\S]*[\]\}])\)/,s=n.test(this.data),o=r.test(this.data);this.debug&&console.log("JSONView: is_json="+s+" is_jsonp="+o);if(s||o){this.debug&&console.log("JSONView: sexytime!");function u(){}u.prototype={htmlEncode:function(e){return e!=null?e.toString().replace(/&/g,"&").replace(/"/g,""").replace(//g,">"):""},decorateWithSpan:function(e,t){return''+this.htmlEncode(e)+""},valueToHTML:function(e){var t=typeof e,n="";return e===null?n+=this.decorateWithSpan("null","null"):e&&e.constructor===Array?n+=this.arrayToHTML(e):t==="object"?n+=this.objectToHTML(e):t==="number"?n+=this.decorateWithSpan(e,"num"):t==="string"?/^(http|https):\/\/[^\s]+$/.test(e)?n+=''+this.htmlEncode(e)+"":n+=this.decorateWithSpan('"'+e+'"',"string"):t==="boolean"&&(n+=this.decorateWithSpan(e,"bool")),n},arrayToHTML:function(e){var t='[
    ',n=!1;for(var r in e)n=!0,t+="
  • ",t+=this.valueToHTML(e[r]),t+="
  • ";return t+="
]",n||(t="[ ]"),t},objectToHTML:function(e){var t='{
    ',n=!1;for(var r in e)n=!0,t+="
  • ",t+=''+this.htmlEncode(r)+": ",t+=this.valueToHTML(e[r]),t+="
  • ";return t+="
}",n||(t="{ }"),t},jsonToHTML:function(e,t,n){var r="";return t?(r+='
'+t+" (
",r+='
'):r+='
',r+=this.valueToHTML(e),r+="
",t&&(r+='
)
'),this.toHTML(r,n)},errorPage:function(e,t,n){var r='
Error parsing JSON: '+e.message+"
";return r+="

"+e.stack+":

",r+='
'+this.htmlEncode(t)+"
",this.toHTML(r,n+" - Error")},toHTML:function(e){return e}},this.jsonFormatter=new u;var a="",f="",l="",c=r.exec(this.data);c&&c.length===3?(this.debug&&console.log("THIS IS JSONp"),l=c[1],f=c[2]):(this.debug&&console.log("Vanilla JSON"),f=this.data),this.debug&&console.log(f);try{var h=JSON.parse(f);if(!h)throw"There was no object!";a=this.jsonFormatter.jsonToHTML(h,l)}catch(p){this.debug&&console.log(p),a=this.jsonFormatter.errorPage(p,this.data)}var d="";this.targetType!==undefined&&(this.idType=this.targetType,this.id=this.target);var v;this.idType==="class"?(v=document.getElementsByClassName(this.id),v&&(v.className+=v.className?" jsonViewOutput":"jsonViewOutput",v.innerHTML=d+a)):this.idType==="id"&&(v=document.getElementById(this.id),v&&(v.className+=v.className?" jsonViewOutput":"jsonViewOutput",v.innerHTML=d+a),v.innerHTML=d+a);var m=document.getElementsByClassName("collapsible");for(var g=0;g' + entity + '' + html; + } + var icons = { + 'icon-move' : '', + 'icon-music' : '', + 'icon-network' : '', + 'icon-off' : '', + 'icon-ok' : '', + 'icon-ok-circle' : '', + 'icon-ok-sign' : '', + 'icon-paper-clip' : '', + 'icon-paper-clip-alt' : '', + 'icon-path' : '', + 'icon-plus-sign' : '', + 'icon-print' : '', + 'icon-qrcode' : '', + 'icon-question' : '', + 'icon-question-sign' : '', + 'icon-quotes' : '', + 'icon-quotes-alt' : '', + 'icon-random' : '', + 'icon-record' : '', + 'icon-reddit' : '', + 'icon-refresh' : '', + 'icon-screenshot' : '', + 'icon-search' : '', + 'icon-search-alt' : '', + 'icon-share' : '', + 'icon-share-alt' : '', + 'icon-shopping-cart' : '', + 'icon-shopping-cart-sign' : '', + 'icon-signal' : '', + 'icon-skype' : '', + 'icon-slideshare' : '', + 'icon-smiley' : '', + 'icon-th-large' : '', + 'icon-th-list' : '', + 'icon-thumbs-down' : '', + 'icon-thumbs-up' : '', + 'icon-time' : '', + 'icon-time-alt' : '', + 'icon-tint' : '', + 'icon-torso' : '', + 'icon-trash' : '', + 'icon-trash-alt' : '', + 'icon-tumblr' : '', + 'icon-w3c' : '', + 'icon-warning-sign' : '', + 'icon-website' : '', + 'icon-website-alt' : '', + 'icon-wheelchair' : '', + 'icon-wordpress' : '', + 'icon-wrench' : '', + 'icon-wrench-alt' : '', + 'icon-youtube' : '', + 'icon-zoom-in' : '', + 'icon-zoom-out' : '', + 'icon-pause-alt' : '', + 'icon-pencil' : '', + 'icon-pencil-alt' : '', + 'icon-person' : '', + 'icon-phone' : '', + 'icon-phone-alt' : '', + 'icon-photo' : '', + 'icon-photo-alt' : '', + 'icon-picasa' : '', + 'icon-picture' : '', + 'icon-pinterest' : '', + 'icon-plane' : '', + 'icon-play-alt' : '', + 'icon-play-circle' : '', + 'icon-plus' : '', + 'icon-remove' : '', + 'icon-remove-circle' : '', + 'icon-remove-sign' : '', + 'icon-repeat' : '', + 'icon-repeat-alt' : '', + 'icon-resize-full' : '', + 'icon-resize-horizontal' : '', + 'icon-resize-small' : '', + 'icon-resize-vertical' : '', + 'icon-retweet' : '', + 'icon-reverse-alt' : '', + 'icon-road' : '', + 'icon-rss' : '', + 'icon-screen' : '', + 'icon-screen-alt' : '', + 'icon-smiley-alt' : '', + 'icon-speaker' : '', + 'icon-stackoverflow' : '', + 'icon-star' : '', + 'icon-star-alt' : '', + 'icon-star-empty' : '', + 'icon-stop-alt' : '', + 'icon-stumbleupon' : '', + 'icon-tag' : '', + 'icon-tags' : '', + 'icon-tasks' : '', + 'icon-text-height' : '', + 'icon-text-width' : '', + 'icon-th' : '', + 'icon-twitter' : '', + 'icon-universal-access' : '', + 'icon-unlock' : '', + 'icon-unlock-alt' : '', + 'icon-upload' : '', + 'icon-user' : '', + 'icon-video' : '', + 'icon-video-alt' : '', + 'icon-video-chat' : '', + 'icon-view-mode' : '', + 'icon-vimeo' : '', + 'icon-vkontakte' : '', + 'icon-volume-down' : '', + 'icon-volume-off' : '', + 'icon-volume-up' : '', + 'icon-backward' : '', + 'icon-fast-backward' : '', + 'icon-fast-forward' : '', + 'icon-forward' : '', + 'icon-play' : '', + 'icon-step-backward' : '', + 'icon-step-forward' : '', + 'icon-briefcase' : '', + 'icon-bullhorn' : '', + 'icon-calendar' : '', + 'icon-calendar-sign' : '', + 'icon-address-book' : '', + 'icon-address-book-alt' : '', + 'icon-adjust' : '', + 'icon-adult' : '', + 'icon-align-center' : '', + 'icon-align-justify' : '', + 'icon-align-left' : '', + 'icon-align-right' : '', + 'icon-arrow-down' : '', + 'icon-arrow-left' : '', + 'icon-arrow-right' : '', + 'icon-arrow-up' : '', + 'icon-asl' : '', + 'icon-asterisk' : '', + 'icon-ban-circle' : '', + 'icon-barcode' : '', + 'icon-behance' : '', + 'icon-bell' : '', + 'icon-blind' : '', + 'icon-blogger' : '', + 'icon-bold' : '', + 'icon-book' : '', + 'icon-bookmark' : '', + 'icon-bookmark-empty' : '', + 'icon-braille' : '', + 'icon-camera' : '', + 'icon-cc' : '', + 'icon-certificate' : '', + 'icon-check' : '', + 'icon-check-empty' : '', + 'icon-chevron-down' : '', + 'icon-chevron-left' : '', + 'icon-chevron-right' : '', + 'icon-chevron-up' : '', + 'icon-child' : '', + 'icon-circle-arrow-down' : '', + 'icon-circle-arrow-left' : '', + 'icon-circle-arrow-right' : '', + 'icon-circle-arrow-up' : '', + 'icon-cloud' : '', + 'icon-cloud-alt' : '', + 'icon-cog' : '', + 'icon-cog-alt' : '', + 'icon-cogs' : '', + 'icon-comment' : '', + 'icon-comment-alt' : '', + 'icon-compass' : '', + 'icon-compass-alt' : '', + 'icon-credit-card' : '', + 'icon-css' : '', + 'icon-dashboard' : '', + 'icon-delicious' : '', + 'icon-deviantart' : '', + 'icon-digg' : '', + 'icon-download' : '', + 'icon-download-alt' : '', + 'icon-dribble' : '', + 'icon-edit' : '', + 'icon-eject' : '', + 'icon-envelope' : '', + 'icon-envelope-alt' : '', + 'icon-error' : '', + 'icon-error-alt' : '', + 'icon-exclamation-sign' : '', + 'icon-eye-close' : '', + 'icon-eye-open' : '', + 'icon-facebook' : '', + 'icon-facetime-video' : '', + 'icon-female' : '', + 'icon-file' : '', + 'icon-file-alt' : '', + 'icon-file-edit' : '', + 'icon-file-edit-alt' : '', + 'icon-file-new' : '', + 'icon-file-new-alt' : '', + 'icon-film' : '', + 'icon-filter' : '', + 'icon-fire' : '', + 'icon-flag' : '', + 'icon-flag-alt' : '', + 'icon-flickr' : '', + 'icon-folder' : '', + 'icon-folder-close' : '', + 'icon-folder-open' : '', + 'icon-folder-sign' : '', + 'icon-font' : '', + 'icon-fontsize' : '', + 'icon-forward-alt' : '', + 'icon-foursquare' : '', + 'icon-friendfeed' : '', + 'icon-friendfeed-rect' : '', + 'icon-fullscreen' : '', + 'icon-gift' : '', + 'icon-github' : '', + 'icon-github-text' : '', + 'icon-glass' : '', + 'icon-glasses' : '', + 'icon-globe' : '', + 'icon-globe-alt' : '', + 'icon-googleplus' : '', + 'icon-graph' : '', + 'icon-graph-alt' : '', + 'icon-group' : '', + 'icon-group-alt' : '', + 'icon-guidedog' : '', + 'icon-hand-down' : '', + 'icon-hand-left' : '', + 'icon-hand-right' : '', + 'icon-hand-up' : '', + 'icon-hdd' : '', + 'icon-headphones' : '', + 'icon-hearing-impaired' : '', + 'icon-heart' : '', + 'icon-heart-alt' : '', + 'icon-heart-empty' : '', + 'icon-home' : '', + 'icon-home-alt' : '', + 'icon-idea' : '', + 'icon-idea-alt' : '', + 'icon-inbox' : '', + 'icon-inbox-alt' : '', + 'icon-inbox-box' : '', + 'icon-indent-left' : '', + 'icon-indent-right' : '', + 'icon-info-sign' : '', + 'icon-instagram' : '', + 'icon-iphone-home' : '', + 'icon-italic' : '', + 'icon-key' : '', + 'icon-laptop' : '', + 'icon-laptop-alt' : '', + 'icon-leaf' : '', + 'icon-linkedin' : '', + 'icon-list' : '', + 'icon-list-alt' : '', + 'icon-lock' : '', + 'icon-lock-alt' : '', + 'icon-magnet' : '', + 'icon-male' : '', + 'icon-map-marker' : '', + 'icon-map-marker-alt' : '', + 'icon-mic' : '', + 'icon-mic-alt' : '', + 'icon-minus' : '', + 'icon-minus-sign' : '', + 'icon-pause' : '', + 'icon-fork' : '', + 'icon-broom' : '', + 'icon-return-key' : '', + 'icon-lastfm' : '', + 'icon-livejournal' : '', + 'icon-myspace' : '', + 'icon-soundcloud' : '', + 'icon-viadeo' : '', + 'icon-spotify' : '', + 'icon-caret-left' : '', + 'icon-caret-up' : '', + 'icon-caret-right' : '', + 'icon-caret-down' : '', + 'icon-stop' : '' + }, + els = document.getElementsByTagName('*'), + i, attr, html, c, el; + for (i = 0; ; i += 1) { + el = els[i]; + if(!el) { + break; + } + attr = el.getAttribute('data-icon'); + if (attr) { + addIcon(el, attr); + } + c = el.className; + c = c.match(/icon-[^\s'"]+/); + if (c && icons[c[0]]) { + addIcon(el, icons[c[0]]); + } + } +}; \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/qtip/jquery.qtip.js b/plugins/legacy-admin/framework/core/assets/js/vendor/qtip/jquery.qtip.js new file mode 100644 index 000000000..dfec8b8e3 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/qtip/jquery.qtip.js @@ -0,0 +1,3951 @@ +/* + * qTip2 - Pretty powerful tooltips - v2.2.0 + * http://qtip2.com + * + * Copyright (c) 2013 Craig Michael Thompson + * Released under the MIT, GPL licenses + * http://jquery.org/license + * + * Date: Thu Nov 21 2013 08:34 GMT+0000 + * Plugins: tips modal viewport svg imagemap ie6 + * Styles: basic css3 + */ +/*global window: false, jQuery: false, console: false, define: false */ + +if ( typeof jQuery.qtip === 'undefined' ) { + /* Cache window, document, undefined */ + (function( window, document, undefined ) { + + // Uses AMD or browser globals to create a jQuery plugin. + (function( factory ) { + "use strict"; + if ( typeof define === 'function' && define.amd ) { + define( ['jquery'], factory ); + } + else if ( jQuery && !jQuery.fn.qtip ) { + factory( jQuery ); + } + } + ( + function( $ ) { + "use strict"; // Enable ECMAScript "strict" operation for this function. See more: http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/ + + ;// Munge the primitives - Paul Irish tip + var TRUE = true, + FALSE = false, + NULL = null, + + // Common variables + X = 'x', Y = 'y', + WIDTH = 'width', + HEIGHT = 'height', + + // Positioning sides + TOP = 'top', + LEFT = 'left', + BOTTOM = 'bottom', + RIGHT = 'right', + CENTER = 'center', + + // Position adjustment types + FLIP = 'flip', + FLIPINVERT = 'flipinvert', + SHIFT = 'shift', + + // Shortcut vars + QTIP, PROTOTYPE, CORNER, CHECKS, + PLUGINS = {}, + NAMESPACE = 'qtip', + ATTR_HAS = 'data-hasqtip', + ATTR_ID = 'data-qtip-id', + WIDGET = ['ui-widget', 'ui-tooltip'], + SELECTOR = '.' + NAMESPACE, + INACTIVE_EVENTS = 'click dblclick mousedown mouseup mousemove mouseleave mouseenter'.split( ' ' ), + + CLASS_FIXED = NAMESPACE + '-fixed', + CLASS_DEFAULT = NAMESPACE + '-default', + CLASS_FOCUS = NAMESPACE + '-focus', + CLASS_HOVER = NAMESPACE + '-hover', + CLASS_DISABLED = NAMESPACE + '-disabled', + + replaceSuffix = '_replacedByqTip', + oldtitle = 'oldtitle', + trackingBound, + + // Browser detection + BROWSER = { + /* + * IE version detection + * + * Adapted from: http://ajaxian.com/archives/attack-of-the-ie-conditional-comment + * Credit to James Padolsey for the original implemntation! + */ + ie: (function() { + var v = 3, div = document.createElement( 'div' ); + while ( (div.innerHTML = '') ) { + if ( !div.getElementsByTagName( 'i' )[0] ) { + break; + } + } + return v > 4 ? v : NaN; + }()), + + /* + * iOS version detection + */ + iOS: parseFloat( + ('' + (/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec( navigator.userAgent ) || [0, ''])[1]) + .replace( 'undefined', '3_2' ).replace( '_', '.' ).replace( '_', '' ) + ) || FALSE + }; + + ; + function QTip( target, options, id, attr ) { + // Elements and ID + this.id = id; + this.target = target; + this.tooltip = NULL; + this.elements = {target: target}; + + // Internal constructs + this._id = NAMESPACE + '-' + id; + this.timers = {img: {}}; + this.options = options; + this.plugins = {}; + + // Cache object + this.cache = { + event: {}, + target: $(), + disabled: FALSE, + attr: attr, + onTooltip: FALSE, + lastClass: '' + }; + + // Set the initial flags + this.rendered = this.destroyed = this.disabled = this.waiting = + this.hiddenDuringWait = this.positioning = this.triggering = FALSE; + } + + PROTOTYPE = QTip.prototype; + + PROTOTYPE._when = function( deferreds ) { + return $.when.apply( $, deferreds ); + }; + + PROTOTYPE.render = function( show ) { + if ( this.rendered || this.destroyed ) { + return this; + } // If tooltip has already been rendered, exit + + var self = this, + options = this.options, + cache = this.cache, + elements = this.elements, + text = options.content.text, + title = options.content.title, + button = options.content.button, + posOptions = options.position, + namespace = '.' + this._id + ' ', + deferreds = [], + tooltip; + + // Add ARIA attributes to target + $.attr( this.target[0], 'aria-describedby', this._id ); + + // Create tooltip element + this.tooltip = elements.tooltip = tooltip = $( + '
', { + 'id': this._id, + 'class': [NAMESPACE, CLASS_DEFAULT, options.style.classes, NAMESPACE + '-pos-' + options.position.my.abbrev()].join( ' ' ), + 'width': options.style.width || '', + 'height': options.style.height || '', + 'tracking': posOptions.target === 'mouse' && posOptions.adjust.mouse, + + /* ARIA specific attributes */ + 'role': 'alert', + 'aria-live': 'polite', + 'aria-atomic': FALSE, + 'aria-describedby': this._id + '-content', + 'aria-hidden': TRUE + } + ) + .toggleClass( CLASS_DISABLED, this.disabled ) + .attr( ATTR_ID, this.id ) + .data( NAMESPACE, this ) + .appendTo( posOptions.container ) + .append( + // Create content element + elements.content = $( + '
', { + 'class': NAMESPACE + '-content', + 'id': this._id + '-content', + 'aria-atomic': TRUE + } + ) + ); + + // Set rendered flag and prevent redundant reposition calls for now + this.rendered = -1; + this.positioning = TRUE; + + // Create title... + if ( title ) { + + this._createTitle(); + + // Update title only if its not a callback (called in toggle if so) + if ( !$.isFunction( title ) ) { + deferreds.push( this._updateTitle( title, FALSE ) ); + } + } + + // Create button + if ( button ) { + this._createButton(); + } + + // Set proper rendered flag and update content if not a callback function (called in toggle) + if ( !$.isFunction( text ) ) { + deferreds.push( this._updateContent( text, FALSE ) ); + } + this.rendered = TRUE; + + // Setup widget classes + this._setWidget(); + + // Initialize 'render' plugins + $.each( + PLUGINS, function( name ) { + var instance; + if ( this.initialize === 'render' && (instance = this( self )) ) { + self.plugins[name] = instance; + } + } + ); + + // Unassign initial events and assign proper events + this._unassignEvents(); + this._assignEvents(); + + // When deferreds have completed + this._when( deferreds ).then( + function() { + // tooltiprender event + self._trigger( 'render' ); + + // Reset flags + self.positioning = FALSE; + + // Show tooltip if not hidden during wait period + if ( !self.hiddenDuringWait && (options.show.ready || show) ) { + self.toggle( TRUE, cache.event, FALSE ); + } + self.hiddenDuringWait = FALSE; + } + ); + + // Expose API + QTIP.api[this.id] = this; + + return this; + }; + + PROTOTYPE.destroy = function( immediate ) { + // Set flag the signify destroy is taking place to plugins + // and ensure it only gets destroyed once! + if ( this.destroyed ) { + return this.target; + } + + function process() { + if ( this.destroyed ) { + return; + } + this.destroyed = TRUE; + + var target = this.target, + title = target.attr( oldtitle ); + + // Destroy tooltip if rendered + if ( this.rendered ) { + this.tooltip.stop( 1, 0 ).find( '*' ).remove().end().remove(); + } + + // Destroy all plugins + $.each( + this.plugins, function( name ) { + this.destroy && this.destroy(); + } + ); + + // Clear timers and remove bound events + clearTimeout( this.timers.show ); + clearTimeout( this.timers.hide ); + this._unassignEvents(); + + // Remove api object and ARIA attributes + target.removeData( NAMESPACE ) + .removeAttr( ATTR_ID ) + .removeAttr( ATTR_HAS ) + .removeAttr( 'aria-describedby' ); + + // Reset old title attribute if removed + if ( this.options.suppress && title ) { + target.attr( 'title', title ).removeAttr( oldtitle ); + } + + // Remove qTip events associated with this API + this._unbind( target ); + + // Remove ID from used id objects, and delete object references + // for better garbage collection and leak protection + this.options = this.elements = this.cache = this.timers = + this.plugins = this.mouse = NULL; + + // Delete epoxsed API object + delete QTIP.api[this.id]; + } + + // If an immediate destory is needed + if ( (immediate !== TRUE || this.triggering === 'hide') && this.rendered ) { + this.tooltip.one( 'tooltiphidden', $.proxy( process, this ) ); + !this.triggering && this.hide(); + } + + // If we're not in the process of hiding... process + else { + process.call( this ); + } + + return this.target; + }; + + ; + function invalidOpt( a ) { + return a === NULL || $.type( a ) !== 'object'; + } + + function invalidContent( c ) { + return !( $.isFunction( c ) || (c && c.attr) || c.length || ($.type( c ) === 'object' && (c.jquery || c.then) )); + } + + // Option object sanitizer + function sanitizeOptions( opts ) { + var content, text, ajax, once; + + if ( invalidOpt( opts ) ) { + return FALSE; + } + + if ( invalidOpt( opts.metadata ) ) { + opts.metadata = {type: opts.metadata}; + } + + if ( 'content' in opts ) { + content = opts.content; + + if ( invalidOpt( content ) || content.jquery || content.done ) { + content = opts.content = { + text: (text = invalidContent( content ) ? FALSE : content) + }; + } + else { + text = content.text; + } + + // DEPRECATED - Old content.ajax plugin functionality + // Converts it into the proper Deferred syntax + if ( 'ajax' in content ) { + ajax = content.ajax; + once = ajax && ajax.once !== FALSE; + delete content.ajax; + + content.text = function( event, api ) { + var loading = text || $( this ).attr( api.options.content.attr ) || 'Loading...', + + deferred = $.ajax( + $.extend( {}, ajax, {context: api} ) + ) + .then( ajax.success, NULL, ajax.error ) + .then( + function( content ) { + if ( content && once ) { + api.set( 'content.text', content ); + } + return content; + }, + function( xhr, status, error ) { + if ( api.destroyed || xhr.status === 0 ) { + return; + } + api.set( 'content.text', status + ': ' + error ); + } + ); + + return !once ? (api.set( 'content.text', loading ), deferred) : loading; + }; + } + + if ( 'title' in content ) { + if ( !invalidOpt( content.title ) ) { + content.button = content.title.button; + content.title = content.title.text; + } + + if ( invalidContent( content.title || FALSE ) ) { + content.title = FALSE; + } + } + } + + if ( 'position' in opts && invalidOpt( opts.position ) ) { + opts.position = {my: opts.position, at: opts.position}; + } + + if ( 'show' in opts && invalidOpt( opts.show ) ) { + opts.show = opts.show.jquery ? {target: opts.show} : + opts.show === TRUE ? {ready: TRUE} : {event: opts.show}; + } + + if ( 'hide' in opts && invalidOpt( opts.hide ) ) { + opts.hide = opts.hide.jquery ? {target: opts.hide} : {event: opts.hide}; + } + + if ( 'style' in opts && invalidOpt( opts.style ) ) { + opts.style = {classes: opts.style}; + } + + // Sanitize plugin options + $.each( + PLUGINS, function() { + this.sanitize && this.sanitize( opts ); + } + ); + + return opts; + } + + // Setup builtin .set() option checks + CHECKS = PROTOTYPE.checks = { + builtin: { + // Core checks + '^id$': function( obj, o, v, prev ) { + var id = v === TRUE ? QTIP.nextid : v, + new_id = NAMESPACE + '-' + id; + + if ( id !== FALSE && id.length > 0 && !$( '#' + new_id ).length ) { + this._id = new_id; + + if ( this.rendered ) { + this.tooltip[0].id = this._id; + this.elements.content[0].id = this._id + '-content'; + this.elements.title[0].id = this._id + '-title'; + } + } + else { + obj[o] = prev; + } + }, + '^prerender': function( obj, o, v ) { + v && !this.rendered && this.render( this.options.show.ready ); + }, + + // Content checks + '^content.text$': function( obj, o, v ) { + this._updateContent( v ); + }, + '^content.attr$': function( obj, o, v, prev ) { + if ( this.options.content.text === this.target.attr( prev ) ) { + this._updateContent( this.target.attr( v ) ); + } + }, + '^content.title$': function( obj, o, v ) { + + // Remove title if content is null + if ( !v ) { + return this._removeTitle(); + } + + // If title isn't already created, create it now and update + v && !this.elements.title && this._createTitle(); + this._updateTitle( v ); + }, + '^content.button$': function( obj, o, v ) { + this._updateButton( v ); + }, + '^content.title.(text|button)$': function( obj, o, v ) { + this.set( 'content.' + o, v ); // Backwards title.text/button compat + }, + + // Position checks + '^position.(my|at)$': function( obj, o, v ) { + 'string' === typeof v && (obj[o] = new CORNER( v, o === 'at' )); + }, + '^position.container$': function( obj, o, v ) { + this.rendered && this.tooltip.appendTo( v ); + }, + + // Show checks + '^show.ready$': function( obj, o, v ) { + v && (!this.rendered && this.render( TRUE ) || this.toggle( TRUE )); + }, + + // Style checks + '^style.classes$': function( obj, o, v, p ) { + this.rendered && this.tooltip.removeClass( p ).addClass( v ); + }, + '^style.(width|height)': function( obj, o, v ) { + this.rendered && this.tooltip.css( o, v ); + }, + '^style.widget|content.title': function() { + this.rendered && this._setWidget(); + }, + '^style.def': function( obj, o, v ) { + this.rendered && this.tooltip.toggleClass( CLASS_DEFAULT, !!v ); + }, + + // Events check + '^events.(render|show|move|hide|focus|blur)$': function( obj, o, v ) { + this.rendered && this.tooltip[($.isFunction( v ) ? '' : 'un') + 'bind']( 'tooltip' + o, v ); + }, + + // Properties which require event reassignment + '^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)': function() { + if ( !this.rendered ) { + return; + } + + // Set tracking flag + var posOptions = this.options.position; + this.tooltip.attr( 'tracking', posOptions.target === 'mouse' && posOptions.adjust.mouse ); + + // Reassign events + this._unassignEvents(); + this._assignEvents(); + } + } + }; + + // Dot notation converter + function convertNotation( options, notation ) { + var i = 0, obj, option = options, + + // Split notation into array + levels = notation.split( '.' ); + + // Loop through + while ( option = option[levels[i++]] ) { + if ( i < levels.length ) { + obj = option; + } + } + + return [obj || options, levels.pop()]; + } + + PROTOTYPE.get = function( notation ) { + if ( this.destroyed ) { + return this; + } + + var o = convertNotation( this.options, notation.toLowerCase() ), + result = o[0][o[1]]; + + return result.precedance ? result.string() : result; + }; + + function setCallback( notation, args ) { + var category, rule, match; + + for ( category in this.checks ) { + for ( rule in this.checks[category] ) { + if ( match = (new RegExp( rule, 'i' )).exec( notation ) ) { + args.push( match ); + + if ( category === 'builtin' || this.plugins[category] ) { + this.checks[category][rule].apply( + this.plugins[category] || this, args + ); + } + } + } + } + } + + var rmove = /^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i, + rrender = /^prerender|show\.ready/i; + + PROTOTYPE.set = function( option, value ) { + if ( this.destroyed ) { + return this; + } + + var rendered = this.rendered, + reposition = FALSE, + options = this.options, + checks = this.checks, + name; + + // Convert singular option/value pair into object form + if ( 'string' === typeof option ) { + name = option; + option = {}; + option[name] = value; + } + else { + option = $.extend( {}, option ); + } + + // Set all of the defined options to their new values + $.each( + option, function( notation, value ) { + if ( rendered && rrender.test( notation ) ) { + delete option[notation]; + return; + } + + // Set new obj value + var obj = convertNotation( options, notation.toLowerCase() ), previous; + previous = obj[0][obj[1]]; + obj[0][obj[1]] = value && value.nodeType ? $( value ) : value; + + // Also check if we need to reposition + reposition = rmove.test( notation ) || reposition; + + // Set the new params for the callback + option[notation] = [obj[0], obj[1], value, previous]; + } + ); + + // Re-sanitize options + sanitizeOptions( options ); + + /* + * Execute any valid callbacks for the set options + * Also set positioning flag so we don't get loads of redundant repositioning calls. + */ + this.positioning = TRUE; + $.each( option, $.proxy( setCallback, this ) ); + this.positioning = FALSE; + + // Update position if needed + if ( this.rendered && this.tooltip[0].offsetWidth > 0 && reposition ) { + this.reposition( options.position.target === 'mouse' ? NULL : this.cache.event ); + } + + return this; + }; + + ; + PROTOTYPE._update = function( content, element, reposition ) { + var self = this, + cache = this.cache; + + // Make sure tooltip is rendered and content is defined. If not return + if ( !this.rendered || !content ) { + return FALSE; + } + + // Use function to parse content + if ( $.isFunction( content ) ) { + content = content.call( this.elements.target, cache.event, this ) || ''; + } + + // Handle deferred content + if ( $.isFunction( content.then ) ) { + cache.waiting = TRUE; + return content.then( + function( c ) { + cache.waiting = FALSE; + return self._update( c, element ); + }, NULL, function( e ) { + return self._update( e, element ); + } + ); + } + + // If content is null... return false + if ( content === FALSE || (!content && content !== '') ) { + return FALSE; + } + + // Append new content if its a DOM array and show it if hidden + if ( content.jquery && content.length > 0 ) { + element.empty().append( + content.css( {display: 'block', visibility: 'visible'} ) + ); + } + + // Content is a regular string, insert the new content + else { + element.html( content ); + } + + // Wait for content to be loaded, and reposition + return this._waitForContent( element ).then( + function( images ) { + if ( images.images && images.images.length && self.rendered && self.tooltip[0].offsetWidth > 0 ) { + self.reposition( cache.event, !images.length ); + } + } + ); + }; + + PROTOTYPE._waitForContent = function( element ) { + var cache = this.cache; + + // Set flag + cache.waiting = TRUE; + + // If imagesLoaded is included, ensure images have loaded and return promise + return ( $.fn.imagesLoaded ? element.imagesLoaded() : $.Deferred().resolve( [] ) ) + .done( + function() { + cache.waiting = FALSE; + } + ) + .promise(); + }; + + PROTOTYPE._updateContent = function( content, reposition ) { + this._update( content, this.elements.content, reposition ); + }; + + PROTOTYPE._updateTitle = function( content, reposition ) { + if ( this._update( content, this.elements.title, reposition ) === FALSE ) { + this._removeTitle( FALSE ); + } + }; + + PROTOTYPE._createTitle = function() { + var elements = this.elements, + id = this._id + '-title'; + + // Destroy previous title element, if present + if ( elements.titlebar ) { + this._removeTitle(); + } + + // Create title bar and title elements + elements.titlebar = $( + '
', { + 'class': NAMESPACE + '-titlebar ' + (this.options.style.widget ? createWidgetClass( 'header' ) : '') + } + ) + .append( + elements.title = $( + '
', { + 'id': id, + 'class': NAMESPACE + '-title', + 'aria-atomic': TRUE + } + ) + ) + .insertBefore( elements.content ) + + // Button-specific events + .delegate( + '.qtip-close', 'mousedown keydown mouseup keyup mouseout', function( event ) { + $( this ).toggleClass( + 'ui-state-active ui-state-focus', event.type.substr( -4 ) === 'down' + ); + } + ) + .delegate( + '.qtip-close', 'mouseover mouseout', function( event ) { + $( this ).toggleClass( 'ui-state-hover', event.type === 'mouseover' ); + } + ); + + // Create button if enabled + if ( this.options.content.button ) { + this._createButton(); + } + }; + + PROTOTYPE._removeTitle = function( reposition ) { + var elements = this.elements; + + if ( elements.title ) { + elements.titlebar.remove(); + elements.titlebar = elements.title = elements.button = NULL; + + // Reposition if enabled + if ( reposition !== FALSE ) { + this.reposition(); + } + } + }; + + ; + PROTOTYPE.reposition = function( event, effect ) { + if ( !this.rendered || this.positioning || this.destroyed ) { + return this; + } + + // Set positioning flag + this.positioning = TRUE; + + var cache = this.cache, + tooltip = this.tooltip, + posOptions = this.options.position, + target = posOptions.target, + my = posOptions.my, + at = posOptions.at, + viewport = posOptions.viewport, + container = posOptions.container, + adjust = posOptions.adjust, + method = adjust.method.split( ' ' ), + tooltipWidth = tooltip.outerWidth( FALSE ), + tooltipHeight = tooltip.outerHeight( FALSE ), + targetWidth = 0, + targetHeight = 0, + type = tooltip.css( 'position' ), + position = {left: 0, top: 0}, + visible = tooltip[0].offsetWidth > 0, + isScroll = event && event.type === 'scroll', + win = $( window ), + doc = container[0].ownerDocument, + mouse = this.mouse, + pluginCalculations, offset; + + // Check if absolute position was passed + if ( $.isArray( target ) && target.length === 2 ) { + // Force left top and set position + at = {x: LEFT, y: TOP}; + position = {left: target[0], top: target[1]}; + } + + // Check if mouse was the target + else if ( target === 'mouse' ) { + // Force left top to allow flipping + at = {x: LEFT, y: TOP}; + + // Use the cached mouse coordinates if available, or passed event has no coordinates + if ( mouse && mouse.pageX && (adjust.mouse || !event || !event.pageX) ) { + event = mouse; + } + + // If the passed event has no coordinates (such as a scroll event) + else if ( !event || !event.pageX ) { + // Use the mouse origin that caused the show event, if distance hiding is enabled + if ( (!adjust.mouse || this.options.show.distance) && cache.origin && cache.origin.pageX ) { + event = cache.origin; + } + + // Use cached event for resize/scroll events + else if ( !event || (event && (event.type === 'resize' || event.type === 'scroll')) ) { + event = cache.event; + } + } + + // Calculate body and container offset and take them into account below + if ( type !== 'static' ) { + position = container.offset(); + } + if ( doc.body.offsetWidth !== (window.innerWidth || doc.documentElement.clientWidth) ) { + offset = $( document.body ).offset(); + } + + // Use event coordinates for position + position = { + left: event.pageX - position.left + (offset && offset.left || 0), + top: event.pageY - position.top + (offset && offset.top || 0) + }; + + // Scroll events are a pain, some browsers + if ( adjust.mouse && isScroll && mouse ) { + position.left -= (mouse.scrollX || 0) - win.scrollLeft(); + position.top -= (mouse.scrollY || 0) - win.scrollTop(); + } + } + + // Target wasn't mouse or absolute... + else { + // Check if event targetting is being used + if ( target === 'event' ) { + if ( event && event.target && event.type !== 'scroll' && event.type !== 'resize' ) { + cache.target = $( event.target ); + } + else if ( !event.target ) { + cache.target = this.elements.target; + } + } + else if ( target !== 'event' ) { + cache.target = $( target.jquery ? target : this.elements.target ); + } + target = cache.target; + + // Parse the target into a jQuery object and make sure there's an element present + target = $( target ).eq( 0 ); + if ( target.length === 0 ) { + return this; + } + + // Check if window or document is the target + else if ( target[0] === document || target[0] === window ) { + targetWidth = BROWSER.iOS ? window.innerWidth : target.width(); + targetHeight = BROWSER.iOS ? window.innerHeight : target.height(); + + if ( target[0] === window ) { + position = { + top: (viewport || target).scrollTop(), + left: (viewport || target).scrollLeft() + }; + } + } + + // Check if the target is an element + else if ( PLUGINS.imagemap && target.is( 'area' ) ) { + pluginCalculations = PLUGINS.imagemap( + this, target, at, PLUGINS.viewport ? method : FALSE + ); + } + + // Check if the target is an SVG element + else if ( PLUGINS.svg && target && target[0].ownerSVGElement ) { + pluginCalculations = PLUGINS.svg( this, target, at, PLUGINS.viewport ? method : FALSE ); + } + + // Otherwise use regular jQuery methods + else { + targetWidth = target.outerWidth( FALSE ); + targetHeight = target.outerHeight( FALSE ); + position = target.offset(); + } + + // Parse returned plugin values into proper variables + if ( pluginCalculations ) { + targetWidth = pluginCalculations.width; + targetHeight = pluginCalculations.height; + offset = pluginCalculations.offset; + position = pluginCalculations.position; + } + + // Adjust position to take into account offset parents + position = this.reposition.offset( target, position, container ); + + // Adjust for position.fixed tooltips (and also iOS scroll bug in v3.2-4.0 & v4.3-4.3.2) + if ( (BROWSER.iOS > 3.1 && BROWSER.iOS < 4.1) || + (BROWSER.iOS >= 4.3 && BROWSER.iOS < 4.33) || + (!BROWSER.iOS && type === 'fixed') + ) { + position.left -= win.scrollLeft(); + position.top -= win.scrollTop(); + } + + // Adjust position relative to target + if ( !pluginCalculations || (pluginCalculations && pluginCalculations.adjustable !== FALSE) ) { + position.left += at.x === RIGHT ? targetWidth : at.x === CENTER ? targetWidth / 2 : 0; + position.top += at.y === BOTTOM ? targetHeight : at.y === CENTER ? targetHeight / 2 : 0; + } + } + + // Adjust position relative to tooltip + position.left += adjust.x + (my.x === RIGHT ? -tooltipWidth : my.x === CENTER ? -tooltipWidth / 2 : 0); + position.top += adjust.y + (my.y === BOTTOM ? -tooltipHeight : my.y === CENTER ? -tooltipHeight / 2 : 0); + + // Use viewport adjustment plugin if enabled + if ( PLUGINS.viewport ) { + position.adjusted = PLUGINS.viewport( + this, position, posOptions, targetWidth, targetHeight, tooltipWidth, tooltipHeight + ); + + // Apply offsets supplied by positioning plugin (if used) + if ( offset && position.adjusted.left ) { + position.left += offset.left; + } + if ( offset && position.adjusted.top ) { + position.top += offset.top; + } + } + + // Viewport adjustment is disabled, set values to zero + else { + position.adjusted = {left: 0, top: 0}; + } + + // tooltipmove event + if ( !this._trigger( 'move', [position, viewport.elem || viewport], event ) ) { + return this; + } + delete position.adjusted; + + // If effect is disabled, target it mouse, no animation is defined or positioning gives NaN out, set CSS directly + if ( effect === FALSE || !visible || isNaN( position.left ) || isNaN( position.top ) || target === 'mouse' || !$.isFunction( posOptions.effect ) ) { + tooltip.css( position ); + } + + // Use custom function if provided + else if ( $.isFunction( posOptions.effect ) ) { + posOptions.effect.call( tooltip, this, $.extend( {}, position ) ); + tooltip.queue( + function( next ) { + // Reset attributes to avoid cross-browser rendering bugs + $( this ).css( {opacity: '', height: ''} ); + if ( BROWSER.ie ) { + this.style.removeAttribute( 'filter' ); + } + + next(); + } + ); + } + + // Set positioning flag + this.positioning = FALSE; + + return this; + }; + + // Custom (more correct for qTip!) offset calculator + PROTOTYPE.reposition.offset = function( elem, pos, container ) { + if ( !container[0] ) { + return pos; + } + + var ownerDocument = $( elem[0].ownerDocument ), + quirks = !!BROWSER.ie && document.compatMode !== 'CSS1Compat', + parent = container[0], + scrolled, position, parentOffset, overflow; + + function scroll( e, i ) { + pos.left += i * e.scrollLeft(); + pos.top += i * e.scrollTop(); + } + + // Compensate for non-static containers offset + do { + if ( (position = $.css( parent, 'position' )) !== 'static' ) { + if ( position === 'fixed' ) { + parentOffset = parent.getBoundingClientRect(); + scroll( ownerDocument, -1 ); + } + else { + parentOffset = $( parent ).position(); + parentOffset.left += (parseFloat( $.css( parent, 'borderLeftWidth' ) ) || 0); + parentOffset.top += (parseFloat( $.css( parent, 'borderTopWidth' ) ) || 0); + } + + pos.left -= parentOffset.left + (parseFloat( $.css( parent, 'marginLeft' ) ) || 0); + pos.top -= parentOffset.top + (parseFloat( $.css( parent, 'marginTop' ) ) || 0); + + // If this is the first parent element with an overflow of "scroll" or "auto", store it + if ( !scrolled && (overflow = $.css( + parent, 'overflow' + )) !== 'hidden' && overflow !== 'visible' ) { + scrolled = $( parent ); + } + } + } + while ( (parent = parent.offsetParent) ); + + // Compensate for containers scroll if it also has an offsetParent (or in IE quirks mode) + if ( scrolled && (scrolled[0] !== ownerDocument[0] || quirks) ) { + scroll( scrolled, 1 ); + } + + return pos; + }; + + // Corner class + var C = (CORNER = PROTOTYPE.reposition.Corner = function( corner, forceY ) { + corner = ('' + corner).replace( /([A-Z])/, ' $1' ).replace( /middle/gi, CENTER ).toLowerCase(); + this.x = (corner.match( /left|right/i ) || corner.match( /center/ ) || ['inherit'])[0].toLowerCase(); + this.y = (corner.match( /top|bottom|center/i ) || ['inherit'])[0].toLowerCase(); + this.forceY = !!forceY; + + var f = corner.charAt( 0 ); + this.precedance = (f === 't' || f === 'b' ? Y : X); + }).prototype; + + C.invert = function( z, center ) { + this[z] = this[z] === LEFT ? RIGHT : this[z] === RIGHT ? LEFT : center || this[z]; + }; + + C.string = function() { + var x = this.x, y = this.y; + return x === y ? x : this.precedance === Y || (this.forceY && y !== 'center') ? y + ' ' + x : x + ' ' + y; + }; + + C.abbrev = function() { + var result = this.string().split( ' ' ); + return result[0].charAt( 0 ) + (result[1] && result[1].charAt( 0 ) || ''); + }; + + C.clone = function() { + return new CORNER( this.string(), this.forceY ); + }; + ; + PROTOTYPE.toggle = function( state, event ) { + var cache = this.cache, + options = this.options, + tooltip = this.tooltip; + + // Try to prevent flickering when tooltip overlaps show element + if ( event ) { + if ( (/over|enter/).test( event.type ) && (/out|leave/).test( cache.event.type ) && + options.show.target.add( event.target ).length === options.show.target.length && + tooltip.has( event.relatedTarget ).length ) { + return this; + } + + // Cache event + cache.event = cloneEvent( event ); + } + + // If we're currently waiting and we've just hidden... stop it + this.waiting && !state && (this.hiddenDuringWait = TRUE); + + // Render the tooltip if showing and it isn't already + if ( !this.rendered ) { + return state ? this.render( 1 ) : this; + } + else if ( this.destroyed || this.disabled ) { + return this; + } + + var type = state ? 'show' : 'hide', + opts = this.options[type], + otherOpts = this.options[!state ? 'show' : 'hide'], + posOptions = this.options.position, + contentOptions = this.options.content, + width = this.tooltip.css( 'width' ), + visible = this.tooltip.is( ':visible' ), + animate = state || opts.target.length === 1, + sameTarget = !event || opts.target.length < 2 || cache.target[0] === event.target, + identicalState, allow, showEvent, delay, after; + + // Detect state if valid one isn't provided + if ( (typeof state).search( 'boolean|number' ) ) { + state = !visible; + } + + // Check if the tooltip is in an identical state to the new would-be state + identicalState = !tooltip.is( ':animated' ) && visible === state && sameTarget; + + // Fire tooltip(show/hide) event and check if destroyed + allow = !identicalState ? !!this._trigger( type, [90] ) : NULL; + + // Check to make sure the tooltip wasn't destroyed in the callback + if ( this.destroyed ) { + return this; + } + + // If the user didn't stop the method prematurely and we're showing the tooltip, focus it + if ( allow !== FALSE && state ) { + this.focus( event ); + } + + // If the state hasn't changed or the user stopped it, return early + if ( !allow || identicalState ) { + return this; + } + + // Set ARIA hidden attribute + $.attr( tooltip[0], 'aria-hidden', !!!state ); + + // Execute state specific properties + if ( state ) { + // Store show origin coordinates + cache.origin = cloneEvent( this.mouse ); + + // Update tooltip content & title if it's a dynamic function + if ( $.isFunction( contentOptions.text ) ) { + this._updateContent( contentOptions.text, FALSE ); + } + if ( $.isFunction( contentOptions.title ) ) { + this._updateTitle( contentOptions.title, FALSE ); + } + + // Cache mousemove events for positioning purposes (if not already tracking) + if ( !trackingBound && posOptions.target === 'mouse' && posOptions.adjust.mouse ) { + $( document ).bind( 'mousemove.' + NAMESPACE, this._storeMouse ); + trackingBound = TRUE; + } + + // Update the tooltip position (set width first to prevent viewport/max-width issues) + if ( !width ) { + tooltip.css( 'width', tooltip.outerWidth( FALSE ) ); + } + this.reposition( event, arguments[2] ); + if ( !width ) { + tooltip.css( 'width', '' ); + } + + // Hide other tooltips if tooltip is solo + if ( !!opts.solo ) { + (typeof opts.solo === 'string' ? $( opts.solo ) : $( SELECTOR, opts.solo )) + .not( tooltip ).not( opts.target ).qtip( 'hide', $.Event( 'tooltipsolo' ) ); + } + } + else { + // Clear show timer if we're hiding + clearTimeout( this.timers.show ); + + // Remove cached origin on hide + delete cache.origin; + + // Remove mouse tracking event if not needed (all tracking qTips are hidden) + if ( trackingBound && !$( + SELECTOR + '[tracking="true"]:visible', opts.solo + ).not( tooltip ).length ) { + $( document ).unbind( 'mousemove.' + NAMESPACE ); + trackingBound = FALSE; + } + + // Blur the tooltip + this.blur( event ); + } + + // Define post-animation, state specific properties + after = $.proxy( + function() { + if ( state ) { + // Prevent antialias from disappearing in IE by removing filter + if ( BROWSER.ie ) { + tooltip[0].style.removeAttribute( 'filter' ); + } + + // Remove overflow setting to prevent tip bugs + tooltip.css( 'overflow', '' ); + + // Autofocus elements if enabled + if ( 'string' === typeof opts.autofocus ) { + $( this.options.show.autofocus, tooltip ).focus(); + } + + // If set, hide tooltip when inactive for delay period + this.options.show.target.trigger( 'qtip-' + this.id + '-inactive' ); + } + else { + // Reset CSS states + tooltip.css( + { + display: '', + visibility: '', + opacity: '', + left: '', + top: '' + } + ); + } + + // tooltipvisible/tooltiphidden events + this._trigger( state ? 'visible' : 'hidden' ); + }, this + ); + + // If no effect type is supplied, use a simple toggle + if ( opts.effect === FALSE || animate === FALSE ) { + tooltip[type](); + after(); + } + + // Use custom function if provided + else if ( $.isFunction( opts.effect ) ) { + tooltip.stop( 1, 1 ); + opts.effect.call( tooltip, this ); + tooltip.queue( + 'fx', function( n ) { + after(); + n(); + } + ); + } + + // Use basic fade function by default + else { + tooltip.fadeTo( 90, state ? 1 : 0, after ); + } + + // If inactive hide method is set, active it + if ( state ) { + opts.target.trigger( 'qtip-' + this.id + '-inactive' ); + } + + return this; + }; + + PROTOTYPE.show = function( event ) { + return this.toggle( TRUE, event ); + }; + + PROTOTYPE.hide = function( event ) { + return this.toggle( FALSE, event ); + }; + + ; + PROTOTYPE.focus = function( event ) { + if ( !this.rendered || this.destroyed ) { + return this; + } + + var qtips = $( SELECTOR ), + tooltip = this.tooltip, + curIndex = parseInt( tooltip[0].style.zIndex, 10 ), + newIndex = QTIP.zindex + qtips.length, + focusedElem; + + // Only update the z-index if it has changed and tooltip is not already focused + if ( !tooltip.hasClass( CLASS_FOCUS ) ) { + // tooltipfocus event + if ( this._trigger( 'focus', [newIndex], event ) ) { + // Only update z-index's if they've changed + if ( curIndex !== newIndex ) { + // Reduce our z-index's and keep them properly ordered + qtips.each( + function() { + if ( this.style.zIndex > curIndex ) { + this.style.zIndex = this.style.zIndex - 1; + } + } + ); + + // Fire blur event for focused tooltip + qtips.filter( '.' + CLASS_FOCUS ).qtip( 'blur', event ); + } + + // Set the new z-index + tooltip.addClass( CLASS_FOCUS )[0].style.zIndex = newIndex; + } + } + + return this; + }; + + PROTOTYPE.blur = function( event ) { + if ( !this.rendered || this.destroyed ) { + return this; + } + + // Set focused status to FALSE + this.tooltip.removeClass( CLASS_FOCUS ); + + // tooltipblur event + this._trigger( 'blur', [this.tooltip.css( 'zIndex' )], event ); + + return this; + }; + + ; + PROTOTYPE.disable = function( state ) { + if ( this.destroyed ) { + return this; + } + + // If 'toggle' is passed, toggle the current state + if ( state === 'toggle' ) { + state = !(this.rendered ? this.tooltip.hasClass( CLASS_DISABLED ) : this.disabled); + } + + // Disable if no state passed + else if ( 'boolean' !== typeof state ) { + state = TRUE; + } + + if ( this.rendered ) { + this.tooltip.toggleClass( CLASS_DISABLED, state ) + .attr( 'aria-disabled', state ); + } + + this.disabled = !!state; + + return this; + }; + + PROTOTYPE.enable = function() { + return this.disable( FALSE ); + }; + + ; + PROTOTYPE._createButton = function() { + var self = this, + elements = this.elements, + tooltip = elements.tooltip, + button = this.options.content.button, + isString = typeof button === 'string', + close = isString ? button : 'Close tooltip'; + + if ( elements.button ) { + elements.button.remove(); + } + + // Use custom button if one was supplied by user, else use default + if ( button.jquery ) { + elements.button = button; + } + else { + elements.button = $( + '', { + 'class': 'qtip-close ' + (this.options.style.widget ? '' : NAMESPACE + '-icon'), + 'title': close, + 'aria-label': close + } + ) + .prepend( + $( + '', { + 'class': 'ui-icon ui-icon-close', + 'html': '×' + } + ) + ); + } + + // Create button and setup attributes + elements.button.appendTo( elements.titlebar || tooltip ) + .attr( 'role', 'button' ) + .click( + function( event ) { + if ( !tooltip.hasClass( CLASS_DISABLED ) ) { + self.hide( event ); + } + return FALSE; + } + ); + }; + + PROTOTYPE._updateButton = function( button ) { + // Make sure tooltip is rendered and if not, return + if ( !this.rendered ) { + return FALSE; + } + + var elem = this.elements.button; + if ( button ) { + this._createButton(); + } + else { + elem.remove(); + } + }; + + ;// Widget class creator + function createWidgetClass( cls ) { + return WIDGET.concat( '' ).join( cls ? '-' + cls + ' ' : ' ' ); + } + + // Widget class setter method + PROTOTYPE._setWidget = function() { + var on = this.options.style.widget, + elements = this.elements, + tooltip = elements.tooltip, + disabled = tooltip.hasClass( CLASS_DISABLED ); + + tooltip.removeClass( CLASS_DISABLED ); + CLASS_DISABLED = on ? 'ui-state-disabled' : 'qtip-disabled'; + tooltip.toggleClass( CLASS_DISABLED, disabled ); + + tooltip.toggleClass( 'ui-helper-reset ' + createWidgetClass(), on ).toggleClass( + CLASS_DEFAULT, this.options.style.def && !on + ); + + if ( elements.content ) { + elements.content.toggleClass( createWidgetClass( 'content' ), on ); + } + if ( elements.titlebar ) { + elements.titlebar.toggleClass( createWidgetClass( 'header' ), on ); + } + if ( elements.button ) { + elements.button.toggleClass( NAMESPACE + '-icon', !on ); + } + }; + ; + function cloneEvent( event ) { + return event && { + type: event.type, + pageX: event.pageX, + pageY: event.pageY, + target: event.target, + relatedTarget: event.relatedTarget, + scrollX: event.scrollX || window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft, + scrollY: event.scrollY || window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop + } || {}; + } + + function delay( callback, duration ) { + // If tooltip has displayed, start hide timer + if ( duration > 0 ) { + return setTimeout( + $.proxy( callback, this ), duration + ); + } + else { + callback.call( this ); + } + } + + function showMethod( event ) { + if ( this.tooltip.hasClass( CLASS_DISABLED ) ) { + return FALSE; + } + + // Clear hide timers + clearTimeout( this.timers.show ); + clearTimeout( this.timers.hide ); + + // Start show timer + this.timers.show = delay.call( + this, + function() { + this.toggle( TRUE, event ); + }, + this.options.show.delay + ); + } + + function hideMethod( event ) { + if ( this.tooltip.hasClass( CLASS_DISABLED ) ) { + return FALSE; + } + + // Check if new target was actually the tooltip element + var relatedTarget = $( event.relatedTarget ), + ontoTooltip = relatedTarget.closest( SELECTOR )[0] === this.tooltip[0], + ontoTarget = relatedTarget[0] === this.options.show.target[0]; + + // Clear timers and stop animation queue + clearTimeout( this.timers.show ); + clearTimeout( this.timers.hide ); + + // Prevent hiding if tooltip is fixed and event target is the tooltip. + // Or if mouse positioning is enabled and cursor momentarily overlaps + if ( this !== relatedTarget[0] && + (this.options.position.target === 'mouse' && ontoTooltip) || + (this.options.hide.fixed && ( + (/mouse(out|leave|move)/).test( event.type ) && (ontoTooltip || ontoTarget)) + ) ) { + try { + event.preventDefault(); + event.stopImmediatePropagation(); + } catch ( e ) { + } + + return; + } + + // If tooltip has displayed, start hide timer + this.timers.hide = delay.call( + this, + function() { + this.toggle( FALSE, event ); + }, + this.options.hide.delay, + this + ); + } + + function inactiveMethod( event ) { + if ( this.tooltip.hasClass( CLASS_DISABLED ) || !this.options.hide.inactive ) { + return FALSE; + } + + // Clear timer + clearTimeout( this.timers.inactive ); + + this.timers.inactive = delay.call( + this, + function() { + this.hide( event ); + }, + this.options.hide.inactive + ); + } + + function repositionMethod( event ) { + if ( this.rendered && this.tooltip[0].offsetWidth > 0 ) { + this.reposition( event ); + } + } + + // Store mouse coordinates + PROTOTYPE._storeMouse = function( event ) { + (this.mouse = cloneEvent( event )).type = 'mousemove'; + }; + + // Bind events + PROTOTYPE._bind = function( targets, events, method, suffix, context ) { + var ns = '.' + this._id + (suffix ? '-' + suffix : ''); + events.length && $( targets ).bind( + (events.split ? events : events.join( ns + ' ' )) + ns, + $.proxy( method, context || this ) + ); + }; + PROTOTYPE._unbind = function( targets, suffix ) { + $( targets ).unbind( '.' + this._id + (suffix ? '-' + suffix : '') ); + }; + + // Apply common event handlers using delegate (avoids excessive .bind calls!) + var ns = '.' + NAMESPACE; + + function delegate( selector, events, method ) { + $( document.body ).delegate( + selector, + (events.split ? events : events.join( ns + ' ' )) + ns, + function() { + var api = QTIP.api[$.attr( this, ATTR_ID )]; + api && !api.disabled && method.apply( api, arguments ); + } + ); + } + + $( + function() { + delegate( + SELECTOR, ['mouseenter', 'mouseleave'], function( event ) { + var state = event.type === 'mouseenter', + tooltip = $( event.currentTarget ), + target = $( event.relatedTarget || event.target ), + options = this.options; + + // On mouseenter... + if ( state ) { + // Focus the tooltip on mouseenter (z-index stacking) + this.focus( event ); + + // Clear hide timer on tooltip hover to prevent it from closing + tooltip.hasClass( CLASS_FIXED ) && !tooltip.hasClass( CLASS_DISABLED ) && clearTimeout( this.timers.hide ); + } + + // On mouseleave... + else { + // Hide when we leave the tooltip and not onto the show target (if a hide event is set) + if ( options.position.target === 'mouse' && options.hide.event && + options.show.target && !target.closest( options.show.target[0] ).length ) { + this.hide( event ); + } + } + + // Add hover class + tooltip.toggleClass( CLASS_HOVER, state ); + } + ); + + // Define events which reset the 'inactive' event handler + delegate( '[' + ATTR_ID + ']', INACTIVE_EVENTS, inactiveMethod ); + } + ); + + // Event trigger + PROTOTYPE._trigger = function( type, args, event ) { + var callback = $.Event( 'tooltip' + type ); + callback.originalEvent = (event && $.extend( {}, event )) || this.cache.event || NULL; + + this.triggering = type; + this.tooltip.trigger( callback, [this].concat( args || [] ) ); + this.triggering = FALSE; + + return !callback.isDefaultPrevented(); + }; + + PROTOTYPE._bindEvents = function( showEvents, hideEvents, showTarget, hideTarget, showMethod, hideMethod ) { + // If hide and show targets are the same... + if ( hideTarget.add( showTarget ).length === hideTarget.length ) { + var toggleEvents = []; + + // Filter identical show/hide events + hideEvents = $.map( + hideEvents, function( type ) { + var showIndex = $.inArray( type, showEvents ); + + // Both events are identical, remove from both hide and show events + // and append to toggleEvents + if ( showIndex > -1 ) { + toggleEvents.push( showEvents.splice( showIndex, 1 )[0] ); + return; + } + + return type; + } + ); + + // Toggle events are special case of identical show/hide events, which happen in sequence + toggleEvents.length && this._bind( + showTarget, toggleEvents, function( event ) { + var state = this.rendered ? this.tooltip[0].offsetWidth > 0 : false; + (state ? hideMethod : showMethod).call( this, event ); + } + ); + } + + // Apply show/hide/toggle events + this._bind( showTarget, showEvents, showMethod ); + this._bind( hideTarget, hideEvents, hideMethod ); + }; + + PROTOTYPE._assignInitialEvents = function( event ) { + var options = this.options, + showTarget = options.show.target, + hideTarget = options.hide.target, + showEvents = options.show.event ? $.trim( '' + options.show.event ).split( ' ' ) : [], + hideEvents = options.hide.event ? $.trim( '' + options.hide.event ).split( ' ' ) : []; + + /* + * Make sure hoverIntent functions properly by using mouseleave as a hide event if + * mouseenter/mouseout is used for show.event, even if it isn't in the users options. + */ + if ( /mouse(over|enter)/i.test( options.show.event ) && !/mouse(out|leave)/i.test( options.hide.event ) ) { + hideEvents.push( 'mouseleave' ); + } + + /* + * Also make sure initial mouse targetting works correctly by caching mousemove coords + * on show targets before the tooltip has rendered. Also set onTarget when triggered to + * keep mouse tracking working. + */ + this._bind( + showTarget, 'mousemove', function( event ) { + this._storeMouse( event ); + this.cache.onTarget = TRUE; + } + ); + + // Define hoverIntent function + function hoverIntent( event ) { + // Only continue if tooltip isn't disabled + if ( this.disabled || this.destroyed ) { + return FALSE; + } + + // Cache the event data + this.cache.event = cloneEvent( event ); + this.cache.target = event ? $( event.target ) : [undefined]; + + // Start the event sequence + clearTimeout( this.timers.show ); + this.timers.show = delay.call( + this, + function() { + this.render( typeof event === 'object' || options.show.ready ); + }, + options.show.delay + ); + } + + // Filter and bind events + this._bindEvents( + showEvents, hideEvents, showTarget, hideTarget, hoverIntent, function() { + clearTimeout( this.timers.show ); + } + ); + + // Prerendering is enabled, create tooltip now + if ( options.show.ready || options.prerender ) { + hoverIntent.call( this, event ); + } + }; + + // Event assignment method + PROTOTYPE._assignEvents = function() { + var self = this, + options = this.options, + posOptions = options.position, + + tooltip = this.tooltip, + showTarget = options.show.target, + hideTarget = options.hide.target, + containerTarget = posOptions.container, + viewportTarget = posOptions.viewport, + documentTarget = $( document ), + bodyTarget = $( document.body ), + windowTarget = $( window ), + + showEvents = options.show.event ? $.trim( '' + options.show.event ).split( ' ' ) : [], + hideEvents = options.hide.event ? $.trim( '' + options.hide.event ).split( ' ' ) : []; + + + // Assign passed event callbacks + $.each( + options.events, function( name, callback ) { + self._bind( + tooltip, name === 'toggle' ? ['tooltipshow', 'tooltiphide'] : ['tooltip' + name], + callback, null, tooltip + ); + } + ); + + // Hide tooltips when leaving current window/frame (but not select/option elements) + if ( /mouse(out|leave)/i.test( options.hide.event ) && options.hide.leave === 'window' ) { + this._bind( + documentTarget, ['mouseout', 'blur'], function( event ) { + if ( !/select|option/.test( event.target.nodeName ) && !event.relatedTarget ) { + this.hide( event ); + } + } + ); + } + + // Enable hide.fixed by adding appropriate class + if ( options.hide.fixed ) { + hideTarget = hideTarget.add( tooltip.addClass( CLASS_FIXED ) ); + } + + /* + * Make sure hoverIntent functions properly by using mouseleave to clear show timer if + * mouseenter/mouseout is used for show.event, even if it isn't in the users options. + */ + else if ( /mouse(over|enter)/i.test( options.show.event ) ) { + this._bind( + hideTarget, 'mouseleave', function() { + clearTimeout( this.timers.show ); + } + ); + } + + // Hide tooltip on document mousedown if unfocus events are enabled + if ( ('' + options.hide.event).indexOf( 'unfocus' ) > -1 ) { + this._bind( + containerTarget.closest( 'html' ), ['mousedown', 'touchstart'], function( event ) { + var elem = $( event.target ), + enabled = this.rendered && !this.tooltip.hasClass( CLASS_DISABLED ) && this.tooltip[0].offsetWidth > 0, + isAncestor = elem.parents( SELECTOR ).filter( this.tooltip[0] ).length > 0; + + if ( elem[0] !== this.target[0] && elem[0] !== this.tooltip[0] && !isAncestor && !this.target.has( elem[0] ).length && enabled + ) { + this.hide( event ); + } + } + ); + } + + // Check if the tooltip hides when inactive + if ( 'number' === typeof options.hide.inactive ) { + // Bind inactive method to show target(s) as a custom event + this._bind( showTarget, 'qtip-' + this.id + '-inactive', inactiveMethod ); + + // Define events which reset the 'inactive' event handler + this._bind( hideTarget.add( tooltip ), QTIP.inactiveEvents, inactiveMethod, '-inactive' ); + } + + // Filter and bind events + this._bindEvents( showEvents, hideEvents, showTarget, hideTarget, showMethod, hideMethod ); + + // Mouse movement bindings + this._bind( + showTarget.add( tooltip ), 'mousemove', function( event ) { + // Check if the tooltip hides when mouse is moved a certain distance + if ( 'number' === typeof options.hide.distance ) { + var origin = this.cache.origin || {}, + limit = this.options.hide.distance, + abs = Math.abs; + + // Check if the movement has gone beyond the limit, and hide it if so + if ( abs( event.pageX - origin.pageX ) >= limit || abs( event.pageY - origin.pageY ) >= limit ) { + this.hide( event ); + } + } + + // Cache mousemove coords on show targets + this._storeMouse( event ); + } + ); + + // Mouse positioning events + if ( posOptions.target === 'mouse' ) { + // If mouse adjustment is on... + if ( posOptions.adjust.mouse ) { + // Apply a mouseleave event so we don't get problems with overlapping + if ( options.hide.event ) { + // Track if we're on the target or not + this._bind( + showTarget, ['mouseenter', 'mouseleave'], function( event ) { + this.cache.onTarget = event.type === 'mouseenter'; + } + ); + } + + // Update tooltip position on mousemove + this._bind( + documentTarget, 'mousemove', function( event ) { + // Update the tooltip position only if the tooltip is visible and adjustment is enabled + if ( this.rendered && this.cache.onTarget && !this.tooltip.hasClass( CLASS_DISABLED ) && this.tooltip[0].offsetWidth > 0 ) { + this.reposition( event ); + } + } + ); + } + } + + // Adjust positions of the tooltip on window resize if enabled + if ( posOptions.adjust.resize || viewportTarget.length ) { + this._bind( + $.event.special.resize ? viewportTarget : windowTarget, 'resize', repositionMethod + ); + } + + // Adjust tooltip position on scroll of the window or viewport element if present + if ( posOptions.adjust.scroll ) { + this._bind( windowTarget.add( posOptions.container ), 'scroll', repositionMethod ); + } + }; + + // Un-assignment method + PROTOTYPE._unassignEvents = function() { + var targets = [ + this.options.show.target[0], + this.options.hide.target[0], + this.rendered && this.tooltip[0], + this.options.position.container[0], + this.options.position.viewport[0], + this.options.position.container.closest( 'html' )[0], // unfocus + window, + document + ]; + + this._unbind( + $( [] ).pushStack( + $.grep( + targets, function( i ) { + return typeof i === 'object'; + } + ) + ) + ); + }; + + ;// Initialization method + function init( elem, id, opts ) { + var obj, posOptions, attr, config, title, + + // Setup element references + docBody = $( document.body ), + + // Use document body instead of document element if needed + newTarget = elem[0] === document ? docBody : elem, + + // Grab metadata from element if plugin is present + metadata = (elem.metadata) ? elem.metadata( opts.metadata ) : NULL, + + // If metadata type if HTML5, grab 'name' from the object instead, or use the regular data object otherwise + metadata5 = opts.metadata.type === 'html5' && metadata ? metadata[opts.metadata.name] : NULL, + + // Grab data from metadata.name (or data-qtipopts as fallback) using .data() method, + html5 = elem.data( opts.metadata.name || 'qtipopts' ); + + // If we don't get an object returned attempt to parse it manualyl without parseJSON + try { + html5 = typeof html5 === 'string' ? $.parseJSON( html5 ) : html5; + } catch ( e ) { + } + + // Merge in and sanitize metadata + config = $.extend( + TRUE, {}, QTIP.defaults, opts, + typeof html5 === 'object' ? sanitizeOptions( html5 ) : NULL, + sanitizeOptions( metadata5 || metadata ) + ); + + // Re-grab our positioning options now we've merged our metadata and set id to passed value + posOptions = config.position; + config.id = id; + + // Setup missing content if none is detected + if ( 'boolean' === typeof config.content.text ) { + attr = elem.attr( config.content.attr ); + + // Grab from supplied attribute if available + if ( config.content.attr !== FALSE && attr ) { + config.content.text = attr; + } + + // No valid content was found, abort render + else { + return FALSE; + } + } + + // Setup target options + if ( !posOptions.container.length ) { + posOptions.container = docBody; + } + if ( posOptions.target === FALSE ) { + posOptions.target = newTarget; + } + if ( config.show.target === FALSE ) { + config.show.target = newTarget; + } + if ( config.show.solo === TRUE ) { + config.show.solo = posOptions.container.closest( 'body' ); + } + if ( config.hide.target === FALSE ) { + config.hide.target = newTarget; + } + if ( config.position.viewport === TRUE ) { + config.position.viewport = posOptions.container; + } + + // Ensure we only use a single container + posOptions.container = posOptions.container.eq( 0 ); + + // Convert position corner values into x and y strings + posOptions.at = new CORNER( posOptions.at, TRUE ); + posOptions.my = new CORNER( posOptions.my ); + + // Destroy previous tooltip if overwrite is enabled, or skip element if not + if ( elem.data( NAMESPACE ) ) { + if ( config.overwrite ) { + elem.qtip( 'destroy', true ); + } + else if ( config.overwrite === FALSE ) { + return FALSE; + } + } + + // Add has-qtip attribute + elem.attr( ATTR_HAS, id ); + + // Remove title attribute and store it if present + if ( config.suppress && (title = elem.attr( 'title' )) ) { + // Final attr call fixes event delegatiom and IE default tooltip showing problem + elem.removeAttr( 'title' ).attr( oldtitle, title ).attr( 'title', '' ); + } + + // Initialize the tooltip and add API reference + obj = new QTip( elem, config, id, !!attr ); + elem.data( NAMESPACE, obj ); + + // Catch remove/removeqtip events on target element to destroy redundant tooltip + elem.one( + 'remove.qtip-' + id + ' removeqtip.qtip-' + id, function() { + var api; + if ( (api = $( this ).data( NAMESPACE )) ) { + api.destroy( true ); + } + } + ); + + return obj; + } + + // jQuery $.fn extension method + QTIP = $.fn.qtip = function( options, notation, newValue ) { + var command = ('' + options).toLowerCase(), // Parse command + returned = NULL, + args = $.makeArray( arguments ).slice( 1 ), + event = args[args.length - 1], + opts = this[0] ? $.data( this[0], NAMESPACE ) : NULL; + + // Check for API request + if ( (!arguments.length && opts) || command === 'api' ) { + return opts; + } + + // Execute API command if present + else if ( 'string' === typeof options ) { + this.each( + function() { + var api = $.data( this, NAMESPACE ); + if ( !api ) { + return TRUE; + } + + // Cache the event if possible + if ( event && event.timeStamp ) { + api.cache.event = event; + } + + // Check for specific API commands + if ( notation && (command === 'option' || command === 'options') ) { + if ( newValue !== undefined || $.isPlainObject( notation ) ) { + api.set( notation, newValue ); + } + else { + returned = api.get( notation ); + return FALSE; + } + } + + // Execute API command + else if ( api[command] ) { + api[command].apply( api, args ); + } + } + ); + + return returned !== NULL ? returned : this; + } + + // No API commands. validate provided options and setup qTips + else if ( 'object' === typeof options || !arguments.length ) { + // Sanitize options first + opts = sanitizeOptions( $.extend( TRUE, {}, options ) ); + + return this.each( + function( i ) { + var api, id; + + // Find next available ID, or use custom ID if provided + id = $.isArray( opts.id ) ? opts.id[i] : opts.id; + id = !id || id === FALSE || id.length < 1 || QTIP.api[id] ? QTIP.nextid++ : id; + + // Initialize the qTip and re-grab newly sanitized options + api = init( $( this ), id, opts ); + if ( api === FALSE ) { + return TRUE; + } + else { + QTIP.api[id] = api; + } + + // Initialize plugins + $.each( + PLUGINS, function() { + if ( this.initialize === 'initialize' ) { + this( api ); + } + } + ); + + // Assign initial pre-render events + api._assignInitialEvents( event ); + } + ); + } + }; + + // Expose class + $.qtip = QTip; + + // Populated in render method + QTIP.api = {}; + ; + $.each( + { + /* Allow other plugins to successfully retrieve the title of an element with a qTip applied */ + attr: function( attr, val ) { + if ( this.length ) { + var self = this[0], + title = 'title', + api = $.data( self, 'qtip' ); + + if ( attr === title && api && 'object' === typeof api && api.options.suppress ) { + if ( arguments.length < 2 ) { + return $.attr( self, oldtitle ); + } + + // If qTip is rendered and title was originally used as content, update it + if ( api && api.options.content.attr === title && api.cache.attr ) { + api.set( 'content.text', val ); + } + + // Use the regular attr method to set, then cache the result + return this.attr( oldtitle, val ); + } + } + + return $.fn['attr' + replaceSuffix].apply( this, arguments ); + }, + + /* Allow clone to correctly retrieve cached title attributes */ + clone: function( keepData ) { + var titles = $( [] ), title = 'title', + + // Clone our element using the real clone method + elems = $.fn['clone' + replaceSuffix].apply( this, arguments ); + + // Grab all elements with an oldtitle set, and change it to regular title attribute, if keepData is false + if ( !keepData ) { + elems.filter( '[' + oldtitle + ']' ).attr( + 'title', function() { + return $.attr( this, oldtitle ); + } + ) + .removeAttr( oldtitle ); + } + + return elems; + } + }, function( name, func ) { + if ( !func || $.fn[name + replaceSuffix] ) { + return TRUE; + } + + var old = $.fn[name + replaceSuffix] = $.fn[name]; + $.fn[name] = function() { + return func.apply( this, arguments ) || old.apply( this, arguments ); + }; + } + ); + + /* Fire off 'removeqtip' handler in $.cleanData if jQuery UI not present (it already does similar). + * This snippet is taken directly from jQuery UI source code found here: + * http://code.jquery.com/ui/jquery-ui-git.js + */ + if ( !$.ui ) { + $['cleanData' + replaceSuffix] = $.cleanData; + $.cleanData = function( elems ) { + for ( var i = 0, elem; (elem = $( elems[i] )).length; i++ ) { + if ( elem.attr( ATTR_HAS ) ) { + try { + elem.triggerHandler( 'removeqtip' ); + } + catch ( e ) { + } + } + } + $['cleanData' + replaceSuffix].apply( this, arguments ); + }; + } + + ;// qTip version + QTIP.version = '2.2.0'; + + // Base ID for all qTips + QTIP.nextid = 0; + + // Inactive events array + QTIP.inactiveEvents = INACTIVE_EVENTS; + + // Base z-index for all qTips + QTIP.zindex = 15000; + + // Define configuration defaults + QTIP.defaults = { + prerender: FALSE, + id: FALSE, + overwrite: TRUE, + suppress: TRUE, + content: { + text: TRUE, + attr: 'title', + title: FALSE, + button: FALSE + }, + position: { + my: 'top left', + at: 'bottom right', + target: FALSE, + container: FALSE, + viewport: FALSE, + adjust: { + x: 0, y: 0, + mouse: TRUE, + scroll: TRUE, + resize: TRUE, + method: 'flipinvert flipinvert' + }, + effect: function( api, pos, viewport ) { + $( this ).animate( + pos, { + duration: 200, + queue: FALSE + } + ); + } + }, + show: { + target: FALSE, + event: 'mouseenter', + effect: TRUE, + delay: 90, + solo: FALSE, + ready: FALSE, + autofocus: FALSE + }, + hide: { + target: FALSE, + event: 'mouseleave', + effect: TRUE, + delay: 0, + fixed: FALSE, + inactive: FALSE, + leave: 'window', + distance: FALSE + }, + style: { + classes: '', + widget: FALSE, + width: FALSE, + height: FALSE, + def: TRUE + }, + events: { + render: NULL, + move: NULL, + show: NULL, + hide: NULL, + toggle: NULL, + visible: NULL, + hidden: NULL, + focus: NULL, + blur: NULL + } + }; + + ; + var TIP, + + // .bind()/.on() namespace + TIPNS = '.qtip-tip', + + // Common CSS strings + MARGIN = 'margin', + BORDER = 'border', + COLOR = 'color', + BG_COLOR = 'background-color', + TRANSPARENT = 'transparent', + IMPORTANT = ' !important', + + // Check if the browser supports elements + HASCANVAS = !!document.createElement( 'canvas' ).getContext, + + // Invalid colour values used in parseColours() + INVALID = /rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i; + + // Camel-case method, taken from jQuery source + // http://code.jquery.com/jquery-1.8.0.js + function camel( s ) { + return s.charAt( 0 ).toUpperCase() + s.slice( 1 ); + } + + /* + * Modified from Modernizr's testPropsAll() + * http://modernizr.com/downloads/modernizr-latest.js + */ + var cssProps = {}, cssPrefixes = ["Webkit", "O", "Moz", "ms"]; + + function vendorCss( elem, prop ) { + var ucProp = prop.charAt( 0 ).toUpperCase() + prop.slice( 1 ), + props = (prop + ' ' + cssPrefixes.join( ucProp + ' ' ) + ucProp).split( ' ' ), + cur, val, i = 0; + + // If the property has already been mapped... + if ( cssProps[prop] ) { + return elem.css( cssProps[prop] ); + } + + while ( (cur = props[i++]) ) { + if ( (val = elem.css( cur )) !== undefined ) { + return cssProps[prop] = cur, val; + } + } + } + + // Parse a given elements CSS property into an int + function intCss( elem, prop ) { + return Math.ceil( parseFloat( vendorCss( elem, prop ) ) ); + } + + + // VML creation (for IE only) + if ( !HASCANVAS ) { + var createVML = function( tag, props, style ) { + return ''; + }; + } + + // Canvas only definitions + else { + var PIXEL_RATIO = window.devicePixelRatio || 1, + BACKING_STORE_RATIO = (function() { + var context = document.createElement( 'canvas' ).getContext( '2d' ); + return context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || + context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || 1; + }()), + SCALE = PIXEL_RATIO / BACKING_STORE_RATIO; + } + + + function Tip( qtip, options ) { + this._ns = 'tip'; + this.options = options; + this.offset = options.offset; + this.size = [options.width, options.height]; + + // Initialize + this.init( (this.qtip = qtip) ); + } + + $.extend( + Tip.prototype, { + init: function( qtip ) { + var context, tip; + + // Create tip element and prepend to the tooltip + tip = this.element = qtip.elements.tip = $( + '
', {'class': NAMESPACE + '-tip'} + ).prependTo( qtip.tooltip ); + + // Create tip drawing element(s) + if ( HASCANVAS ) { + // save() as soon as we create the canvas element so FF2 doesn't bork on our first restore()! + context = $( '' ).appendTo( this.element )[0].getContext( '2d' ); + + // Setup constant parameters + context.lineJoin = 'miter'; + context.miterLimit = 100000; + context.save(); + } + else { + context = createVML( 'shape', 'coordorigin="0,0"', 'position:absolute;' ); + this.element.html( context + context ); + + // Prevent mousing down on the tip since it causes problems with .live() handling in IE due to VML + qtip._bind( + $( '*', tip ).add( tip ), ['click', 'mousedown'], function( event ) { + event.stopPropagation(); + }, this._ns + ); + } + + // Bind update events + qtip._bind( qtip.tooltip, 'tooltipmove', this.reposition, this._ns, this ); + + // Create it + this.create(); + }, + + _swapDimensions: function() { + this.size[0] = this.options.height; + this.size[1] = this.options.width; + }, + _resetDimensions: function() { + this.size[0] = this.options.width; + this.size[1] = this.options.height; + }, + + _useTitle: function( corner ) { + var titlebar = this.qtip.elements.titlebar; + return titlebar && ( + corner.y === TOP || (corner.y === CENTER && this.element.position().top + (this.size[1] / 2) + this.options.offset < titlebar.outerHeight( TRUE )) + ); + }, + + _parseCorner: function( corner ) { + var my = this.qtip.options.position.my; + + // Detect corner and mimic properties + if ( corner === FALSE || my === FALSE ) { + corner = FALSE; + } + else if ( corner === TRUE ) { + corner = new CORNER( my.string() ); + } + else if ( !corner.string ) { + corner = new CORNER( corner ); + corner.fixed = TRUE; + } + + return corner; + }, + + _parseWidth: function( corner, side, use ) { + var elements = this.qtip.elements, + prop = BORDER + camel( side ) + 'Width'; + + return (use ? intCss( use, prop ) : ( + intCss( elements.content, prop ) || + intCss( this._useTitle( corner ) && elements.titlebar || elements.content, prop ) || + intCss( elements.tooltip, prop ) + )) || 0; + }, + + _parseRadius: function( corner ) { + var elements = this.qtip.elements, + prop = BORDER + camel( corner.y ) + camel( corner.x ) + 'Radius'; + + return BROWSER.ie < 9 ? 0 : + intCss( this._useTitle( corner ) && elements.titlebar || elements.content, prop ) || + intCss( elements.tooltip, prop ) || 0; + }, + + _invalidColour: function( elem, prop, compare ) { + var val = elem.css( prop ); + return !val || (compare && val === elem.css( compare )) || INVALID.test( val ) ? FALSE : val; + }, + + _parseColours: function( corner ) { + var elements = this.qtip.elements, + tip = this.element.css( 'cssText', '' ), + borderSide = BORDER + camel( corner[corner.precedance] ) + camel( COLOR ), + colorElem = this._useTitle( corner ) && elements.titlebar || elements.content, + css = this._invalidColour, color = []; + + // Attempt to detect the background colour from various elements, left-to-right precedance + color[0] = css( tip, BG_COLOR ) || css( colorElem, BG_COLOR ) || css( + elements.content, BG_COLOR + ) || + css( elements.tooltip, BG_COLOR ) || tip.css( BG_COLOR ); + + // Attempt to detect the correct border side colour from various elements, left-to-right precedance + color[1] = css( tip, borderSide, COLOR ) || css( colorElem, borderSide, COLOR ) || + css( elements.content, borderSide, COLOR ) || css( + elements.tooltip, borderSide, COLOR + ) || elements.tooltip.css( borderSide ); + + // Reset background and border colours + $( '*', tip ).add( tip ).css( + 'cssText', + BG_COLOR + ':' + TRANSPARENT + IMPORTANT + ';' + BORDER + ':0' + IMPORTANT + ';' + ); + + return color; + }, + + _calculateSize: function( corner ) { + var y = corner.precedance === Y, + width = this.options['width'], + height = this.options['height'], + isCenter = corner.abbrev() === 'c', + base = (y ? width : height) * (isCenter ? 0.5 : 1), + pow = Math.pow, + round = Math.round, + bigHyp, ratio, result, + + smallHyp = Math.sqrt( pow( base, 2 ) + pow( height, 2 ) ), + hyp = [(this.border / base) * smallHyp, (this.border / height) * smallHyp]; + + hyp[2] = Math.sqrt( pow( hyp[0], 2 ) - pow( this.border, 2 ) ); + hyp[3] = Math.sqrt( pow( hyp[1], 2 ) - pow( this.border, 2 ) ); + + bigHyp = smallHyp + hyp[2] + hyp[3] + (isCenter ? 0 : hyp[0]); + ratio = bigHyp / smallHyp; + + result = [round( ratio * width ), round( ratio * height )]; + return y ? result : result.reverse(); + }, + + // Tip coordinates calculator + _calculateTip: function( corner, size, scale ) { + scale = scale || 1; + size = size || this.size; + + var width = size[0] * scale, + height = size[1] * scale, + width2 = Math.ceil( width / 2 ), height2 = Math.ceil( height / 2 ), + + // Define tip coordinates in terms of height and width values + tips = { + br: [0, 0, width, height, width, 0], + bl: [0, 0, width, 0, 0, height], + tr: [0, height, width, 0, width, height], + tl: [0, 0, 0, height, width, height], + tc: [0, height, width2, 0, width, height], + bc: [0, 0, width, 0, width2, height], + rc: [0, 0, width, height2, 0, height], + lc: [width, 0, width, height, 0, height2] + }; + + // Set common side shapes + tips.lt = tips.br; + tips.rt = tips.bl; + tips.lb = tips.tr; + tips.rb = tips.tl; + + return tips[corner.abbrev()]; + }, + + // Tip coordinates drawer (canvas) + _drawCoords: function( context, coords ) { + context.beginPath(); + context.moveTo( coords[0], coords[1] ); + context.lineTo( coords[2], coords[3] ); + context.lineTo( coords[4], coords[5] ); + context.closePath(); + }, + + create: function() { + // Determine tip corner + var c = this.corner = (HASCANVAS || BROWSER.ie) && this._parseCorner( this.options.corner ); + + // If we have a tip corner... + if ( (this.enabled = !!this.corner && this.corner.abbrev() !== 'c') ) { + // Cache it + this.qtip.cache.corner = c.clone(); + + // Create it + this.update(); + } + + // Toggle tip element + this.element.toggle( this.enabled ); + + return this.corner; + }, + + update: function( corner, position ) { + if ( !this.enabled ) { + return this; + } + + var elements = this.qtip.elements, + tip = this.element, + inner = tip.children(), + options = this.options, + curSize = this.size, + mimic = options.mimic, + round = Math.round, + color, precedance, context, + coords, bigCoords, translate, newSize, border, BACKING_STORE_RATIO; + + // Re-determine tip if not already set + if ( !corner ) { + corner = this.qtip.cache.corner || this.corner; + } + + // Use corner property if we detect an invalid mimic value + if ( mimic === FALSE ) { + mimic = corner; + } + + // Otherwise inherit mimic properties from the corner object as necessary + else { + mimic = new CORNER( mimic ); + mimic.precedance = corner.precedance; + + if ( mimic.x === 'inherit' ) { + mimic.x = corner.x; + } + else if ( mimic.y === 'inherit' ) { + mimic.y = corner.y; + } + else if ( mimic.x === mimic.y ) { + mimic[corner.precedance] = corner[corner.precedance]; + } + } + precedance = mimic.precedance; + + // Ensure the tip width.height are relative to the tip position + if ( corner.precedance === X ) { + this._swapDimensions(); + } + else { + this._resetDimensions(); + } + + // Update our colours + color = this.color = this._parseColours( corner ); + + // Detect border width, taking into account colours + if ( color[1] !== TRANSPARENT ) { + // Grab border width + border = this.border = this._parseWidth( corner, corner[corner.precedance] ); + + // If border width isn't zero, use border color as fill if it's not invalid (1.0 style tips) + if ( options.border && border < 1 && !INVALID.test( color[1] ) ) { + color[0] = color[1]; + } + + // Set border width (use detected border width if options.border is true) + this.border = border = options.border !== TRUE ? options.border : border; + } + + // Border colour was invalid, set border to zero + else { + this.border = border = 0; + } + + // Determine tip size + newSize = this.size = this._calculateSize( corner ); + tip.css( + { + width: newSize[0], + height: newSize[1], + lineHeight: newSize[1] + 'px' + } + ); + + // Calculate tip translation + if ( corner.precedance === Y ) { + translate = [ + round( mimic.x === LEFT ? border : mimic.x === RIGHT ? newSize[0] - curSize[0] - border : (newSize[0] - curSize[0]) / 2 ), + round( mimic.y === TOP ? newSize[1] - curSize[1] : 0 ) + ]; + } + else { + translate = [ + round( mimic.x === LEFT ? newSize[0] - curSize[0] : 0 ), + round( mimic.y === TOP ? border : mimic.y === BOTTOM ? newSize[1] - curSize[1] - border : (newSize[1] - curSize[1]) / 2 ) + ]; + } + + // Canvas drawing implementation + if ( HASCANVAS ) { + // Grab canvas context and clear/save it + context = inner[0].getContext( '2d' ); + context.restore(); + context.save(); + context.clearRect( 0, 0, 6000, 6000 ); + + // Calculate coordinates + coords = this._calculateTip( mimic, curSize, SCALE ); + bigCoords = this._calculateTip( mimic, this.size, SCALE ); + + // Set the canvas size using calculated size + inner.attr( WIDTH, newSize[0] * SCALE ).attr( HEIGHT, newSize[1] * SCALE ); + inner.css( WIDTH, newSize[0] ).css( HEIGHT, newSize[1] ); + + // Draw the outer-stroke tip + this._drawCoords( context, bigCoords ); + context.fillStyle = color[1]; + context.fill(); + + // Draw the actual tip + context.translate( translate[0] * SCALE, translate[1] * SCALE ); + this._drawCoords( context, coords ); + context.fillStyle = color[0]; + context.fill(); + } + + // VML (IE Proprietary implementation) + else { + // Calculate coordinates + coords = this._calculateTip( mimic ); + + // Setup coordinates string + coords = 'm' + coords[0] + ',' + coords[1] + ' l' + coords[2] + + ',' + coords[3] + ' ' + coords[4] + ',' + coords[5] + ' xe'; + + // Setup VML-specific offset for pixel-perfection + translate[2] = border && /^(r|b)/i.test( corner.string() ) ? + BROWSER.ie === 8 ? 2 : 1 : 0; + + // Set initial CSS + inner.css( + { + coordsize: (newSize[0] + border) + ' ' + (newSize[1] + border), + antialias: '' + (mimic.string().indexOf( CENTER ) > -1), + left: translate[0] - (translate[2] * Number( precedance === X )), + top: translate[1] - (translate[2] * Number( precedance === Y )), + width: newSize[0] + border, + height: newSize[1] + border + } + ) + .each( + function( i ) { + var $this = $( this ); + + // Set shape specific attributes + $this[$this.prop ? 'prop' : 'attr']( + { + coordsize: (newSize[0] + border) + ' ' + (newSize[1] + border), + path: coords, + fillcolor: color[0], + filled: !!i, + stroked: !i + } + ) + .toggle( !!(border || i) ); + + // Check if border is enabled and add stroke element + !i && $this.html( + createVML( + 'stroke', + 'weight="' + (border * 2) + 'px" color="' + color[1] + '" miterlimit="1000" joinstyle="miter"' + ) + ); + } + ); + } + + // Opera bug #357 - Incorrect tip position + // https://github.com/Craga89/qTip2/issues/367 + window.opera && setTimeout( + function() { + elements.tip.css( + { + display: 'inline-block', + visibility: 'visible' + } + ); + }, 1 + ); + + // Position if needed + if ( position !== FALSE ) { + this.calculate( corner, newSize ); + } + }, + + calculate: function( corner, size ) { + if ( !this.enabled ) { + return FALSE; + } + + var self = this, + elements = this.qtip.elements, + tip = this.element, + userOffset = this.options.offset, + isWidget = elements.tooltip.hasClass( 'ui-widget' ), + position = {}, + precedance, corners; + + // Inherit corner if not provided + corner = corner || this.corner; + precedance = corner.precedance; + + // Determine which tip dimension to use for adjustment + size = size || this._calculateSize( corner ); + + // Setup corners and offset array + corners = [corner.x, corner.y]; + if ( precedance === X ) { + corners.reverse(); + } + + // Calculate tip position + $.each( + corners, function( i, side ) { + var b, bc, br; + + if ( side === CENTER ) { + b = precedance === Y ? LEFT : TOP; + position[b] = '50%'; + position[MARGIN + '-' + b] = -Math.round( size[precedance === Y ? 0 : 1] / 2 ) + userOffset; + } + else { + b = self._parseWidth( corner, side, elements.tooltip ); + bc = self._parseWidth( corner, side, elements.content ); + br = self._parseRadius( corner ); + + position[side] = Math.max( + -self.border, i ? bc : (userOffset + (br > b ? br : -b)) + ); + } + } + ); + + // Adjust for tip size + position[corner[precedance]] -= size[precedance === X ? 0 : 1]; + + // Set and return new position + tip.css( {margin: '', top: '', bottom: '', left: '', right: ''} ).css( position ); + return position; + }, + + reposition: function( event, api, pos, viewport ) { + if ( !this.enabled ) { + return; + } + + var cache = api.cache, + newCorner = this.corner.clone(), + adjust = pos.adjusted, + method = api.options.position.adjust.method.split( ' ' ), + horizontal = method[0], + vertical = method[1] || method[0], + shift = {left: FALSE, top: FALSE, x: 0, y: 0}, + offset, css = {}, props; + + function shiftflip( direction, precedance, popposite, side, opposite ) { + // Horizontal - Shift or flip method + if ( direction === SHIFT && newCorner.precedance === precedance && adjust[side] && newCorner[popposite] !== CENTER ) { + newCorner.precedance = newCorner.precedance === X ? Y : X; + } + else if ( direction !== SHIFT && adjust[side] ) { + newCorner[precedance] = newCorner[precedance] === CENTER ? + (adjust[side] > 0 ? side : opposite) : (newCorner[precedance] === side ? opposite : side); + } + } + + function shiftonly( xy, side, opposite ) { + if ( newCorner[xy] === CENTER ) { + css[MARGIN + '-' + side] = shift[xy] = offset[MARGIN + '-' + side] - adjust[side]; + } + else { + props = offset[opposite] !== undefined ? + [adjust[side], -offset[side]] : [-adjust[side], offset[side]]; + + if ( (shift[xy] = Math.max( props[0], props[1] )) > props[0] ) { + pos[side] -= adjust[side]; + shift[side] = FALSE; + } + + css[offset[opposite] !== undefined ? opposite : side] = shift[xy]; + } + } + + // If our tip position isn't fixed e.g. doesn't adjust with viewport... + if ( this.corner.fixed !== TRUE ) { + // Perform shift/flip adjustments + shiftflip( horizontal, X, Y, LEFT, RIGHT ); + shiftflip( vertical, Y, X, TOP, BOTTOM ); + + // Update and redraw the tip if needed (check cached details of last drawn tip) + if ( newCorner.string() !== cache.corner.string() && (cache.cornerTop !== adjust.top || cache.cornerLeft !== adjust.left) ) { + this.update( newCorner, FALSE ); + } + } + + // Setup tip offset properties + offset = this.calculate( newCorner ); + + // Readjust offset object to make it left/top + if ( offset.right !== undefined ) { + offset.left = -offset.right; + } + if ( offset.bottom !== undefined ) { + offset.top = -offset.bottom; + } + offset.user = this.offset; + + // Perform shift adjustments + if ( shift.left = (horizontal === SHIFT && !!adjust.left) ) { + shiftonly( X, LEFT, RIGHT ); + } + if ( shift.top = (vertical === SHIFT && !!adjust.top) ) { + shiftonly( Y, TOP, BOTTOM ); + } + + /* + * If the tip is adjusted in both dimensions, or in a + * direction that would cause it to be anywhere but the + * outer border, hide it! + */ + this.element.css( css ).toggle( + !((shift.x && shift.y) || (newCorner.x === CENTER && shift.y) || (newCorner.y === CENTER && shift.x)) + ); + + // Adjust position to accomodate tip dimensions + pos.left -= offset.left.charAt ? offset.user : + horizontal !== SHIFT || shift.top || !shift.left && !shift.top ? offset.left + this.border : 0; + pos.top -= offset.top.charAt ? offset.user : + vertical !== SHIFT || shift.left || !shift.left && !shift.top ? offset.top + this.border : 0; + + // Cache details + cache.cornerLeft = adjust.left; + cache.cornerTop = adjust.top; + cache.corner = newCorner.clone(); + }, + + destroy: function() { + // Unbind events + this.qtip._unbind( this.qtip.tooltip, this._ns ); + + // Remove the tip element(s) + if ( this.qtip.elements.tip ) { + this.qtip.elements.tip.find( '*' ) + .remove().end().remove(); + } + } + } + ); + + TIP = PLUGINS.tip = function( api ) { + return new Tip( api, api.options.style.tip ); + }; + + // Initialize tip on render + TIP.initialize = 'render'; + + // Setup plugin sanitization options + TIP.sanitize = function( options ) { + if ( options.style && 'tip' in options.style ) { + var opts = options.style.tip; + if ( typeof opts !== 'object' ) { + opts = options.style.tip = {corner: opts}; + } + if ( !(/string|boolean/i).test( typeof opts.corner ) ) { + opts.corner = TRUE; + } + } + }; + + // Add new option checks for the plugin + CHECKS.tip = { + '^position.my|style.tip.(corner|mimic|border)$': function() { + // Make sure a tip can be drawn + this.create(); + + // Reposition the tooltip + this.qtip.reposition(); + }, + '^style.tip.(height|width)$': function( obj ) { + // Re-set dimensions and redraw the tip + this.size = [obj.width, obj.height]; + this.update(); + + // Reposition the tooltip + this.qtip.reposition(); + }, + '^content.title|style.(classes|widget)$': function() { + this.update(); + } + }; + + // Extend original qTip defaults + $.extend( + TRUE, QTIP.defaults, { + style: { + tip: { + corner: TRUE, + mimic: FALSE, + width: 6, + height: 6, + border: TRUE, + offset: 0 + } + } + } + ); + + ; + var MODAL, OVERLAY, + MODALCLASS = 'qtip-modal', + MODALSELECTOR = '.' + MODALCLASS; + + OVERLAY = function() { + var self = this, + focusableElems = {}, + current, onLast, + prevState, elem; + + // Modified code from jQuery UI 1.10.0 source + // http://code.jquery.com/ui/1.10.0/jquery-ui.js + function focusable( element ) { + // Use the defined focusable checker when possible + if ( $.expr[':'].focusable ) { + return $.expr[':'].focusable; + } + + var isTabIndexNotNaN = !isNaN( $.attr( element, 'tabindex' ) ), + nodeName = element.nodeName && element.nodeName.toLowerCase(), + map, mapName, img; + + if ( 'area' === nodeName ) { + map = element.parentNode; + mapName = map.name; + if ( !element.href || !mapName || map.nodeName.toLowerCase() !== 'map' ) { + return false; + } + img = $( 'img[usemap=#' + mapName + ']' )[0]; + return !!img && img.is( ':visible' ); + } + return (/input|select|textarea|button|object/.test( nodeName ) ? + !element.disabled : + 'a' === nodeName ? + element.href || isTabIndexNotNaN : + isTabIndexNotNaN + ); + } + + // Focus inputs using cached focusable elements (see update()) + function focusInputs( blurElems ) { + // Blurring body element in IE causes window.open windows to unfocus! + if ( focusableElems.length < 1 && blurElems.length ) { + blurElems.not( 'body' ).blur(); + } + + // Focus the inputs + else { + focusableElems.first().focus(); + } + } + + // Steal focus from elements outside tooltip + function stealFocus( event ) { + if ( !elem.is( ':visible' ) ) { + return; + } + + var target = $( event.target ), + tooltip = current.tooltip, + container = target.closest( SELECTOR ), + targetOnTop; + + // Determine if input container target is above this + targetOnTop = container.length < 1 ? FALSE : + (parseInt( container[0].style.zIndex, 10 ) > parseInt( tooltip[0].style.zIndex, 10 )); + + // If we're showing a modal, but focus has landed on an input below + // this modal, divert focus to the first visible input in this modal + // or if we can't find one... the tooltip itself + if ( !targetOnTop && target.closest( SELECTOR )[0] !== tooltip[0] ) { + focusInputs( target ); + } + + // Detect when we leave the last focusable element... + onLast = event.target === focusableElems[focusableElems.length - 1]; + } + + $.extend( + self, { + init: function() { + // Create document overlay + elem = self.elem = $( + '
', { + id: 'qtip-overlay', + html: '
', + mousedown: function() { + return FALSE; + } + } + ) + .hide(); + + // Make sure we can't focus anything outside the tooltip + $( document.body ).bind( 'focusin' + MODALSELECTOR, stealFocus ); + + // Apply keyboard "Escape key" close handler + $( document ).bind( + 'keydown' + MODALSELECTOR, function( event ) { + if ( current && current.options.show.modal.escape && event.keyCode === 27 ) { + current.hide( event ); + } + } + ); + + // Apply click handler for blur option + elem.bind( + 'click' + MODALSELECTOR, function( event ) { + if ( current && current.options.show.modal.blur ) { + current.hide( event ); + } + } + ); + + return self; + }, + + update: function( api ) { + // Update current API reference + current = api; + + // Update focusable elements if enabled + if ( api.options.show.modal.stealfocus !== FALSE ) { + focusableElems = api.tooltip.find( '*' ).filter( + function() { + return focusable( this ); + } + ); + } + else { + focusableElems = []; + } + }, + + toggle: function( api, state, duration ) { + var docBody = $( document.body ), + tooltip = api.tooltip, + options = api.options.show.modal, + effect = options.effect, + type = state ? 'show' : 'hide', + visible = elem.is( ':visible' ), + visibleModals = $( MODALSELECTOR ).filter( ':visible:not(:animated)' ).not( tooltip ), + zindex; + + // Set active tooltip API reference + self.update( api ); + + // If the modal can steal the focus... + // Blur the current item and focus anything in the modal we an + if ( state && options.stealfocus !== FALSE ) { + focusInputs( $( ':focus' ) ); + } + + // Toggle backdrop cursor style on show + elem.toggleClass( 'blurs', options.blur ); + + // Append to body on show + if ( state ) { + elem.appendTo( document.body ); + } + + // Prevent modal from conflicting with show.solo, and don't hide backdrop is other modals are visible + if ( (elem.is( ':animated' ) && visible === state && prevState !== FALSE) || (!state && visibleModals.length) ) { + return self; + } + + // Stop all animations + elem.stop( TRUE, FALSE ); + + // Use custom function if provided + if ( $.isFunction( effect ) ) { + effect.call( elem, state ); + } + + // If no effect type is supplied, use a simple toggle + else if ( effect === FALSE ) { + elem[type](); + } + + // Use basic fade function + else { + elem.fadeTo( + parseInt( duration, 10 ) || 90, state ? 1 : 0, function() { + if ( !state ) { + elem.hide(); + } + } + ); + } + + // Reset position and detach from body on hide + if ( !state ) { + elem.queue( + function( next ) { + elem.css( {left: '', top: ''} ); + if ( !$( MODALSELECTOR ).length ) { + elem.detach(); + } + next(); + } + ); + } + + // Cache the state + prevState = state; + + // If the tooltip is destroyed, set reference to null + if ( current.destroyed ) { + current = NULL; + } + + return self; + } + } + ); + + self.init(); + }; + OVERLAY = new OVERLAY(); + + function Modal( api, options ) { + this.options = options; + this._ns = '-modal'; + + this.init( (this.qtip = api) ); + } + + $.extend( + Modal.prototype, { + init: function( qtip ) { + var tooltip = qtip.tooltip; + + // If modal is disabled... return + if ( !this.options.on ) { + return this; + } + + // Set overlay reference + qtip.elements.overlay = OVERLAY.elem; + + // Add unique attribute so we can grab modal tooltips easily via a SELECTOR, and set z-index + tooltip.addClass( MODALCLASS ).css( + 'z-index', QTIP.modal_zindex + $( MODALSELECTOR ).length + ); + + // Apply our show/hide/focus modal events + qtip._bind( + tooltip, ['tooltipshow', 'tooltiphide'], function( event, api, duration ) { + var oEvent = event.originalEvent; + + // Make sure mouseout doesn't trigger a hide when showing the modal and mousing onto backdrop + if ( event.target === tooltip[0] ) { + if ( oEvent && event.type === 'tooltiphide' && /mouse(leave|enter)/.test( oEvent.type ) && $( oEvent.relatedTarget ).closest( OVERLAY.elem[0] ).length ) { + try { + event.preventDefault(); + } catch ( e ) { + } + } + else if ( !oEvent || (oEvent && oEvent.type !== 'tooltipsolo') ) { + this.toggle( event, event.type === 'tooltipshow', duration ); + } + } + }, this._ns, this + ); + + // Adjust modal z-index on tooltip focus + qtip._bind( + tooltip, 'tooltipfocus', function( event, api ) { + // If focus was cancelled before it reached us, don't do anything + if ( event.isDefaultPrevented() || event.target !== tooltip[0] ) { + return; + } + + var qtips = $( MODALSELECTOR ), + + // Keep the modal's lower than other, regular qtips + newIndex = QTIP.modal_zindex + qtips.length, + curIndex = parseInt( tooltip[0].style.zIndex, 10 ); + + // Set overlay z-index + OVERLAY.elem[0].style.zIndex = newIndex - 1; + + // Reduce modal z-index's and keep them properly ordered + qtips.each( + function() { + if ( this.style.zIndex > curIndex ) { + this.style.zIndex -= 1; + } + } + ); + + // Fire blur event for focused tooltip + qtips.filter( '.' + CLASS_FOCUS ).qtip( 'blur', event.originalEvent ); + + // Set the new z-index + tooltip.addClass( CLASS_FOCUS )[0].style.zIndex = newIndex; + + // Set current + OVERLAY.update( api ); + + // Prevent default handling + try { + event.preventDefault(); + } catch ( e ) { + } + }, this._ns, this + ); + + // Focus any other visible modals when this one hides + qtip._bind( + tooltip, 'tooltiphide', function( event ) { + if ( event.target === tooltip[0] ) { + $( MODALSELECTOR ).filter( ':visible' ).not( tooltip ).last().qtip( + 'focus', event + ); + } + }, this._ns, this + ); + }, + + toggle: function( event, state, duration ) { + // Make sure default event hasn't been prevented + if ( event && event.isDefaultPrevented() ) { + return this; + } + + // Toggle it + OVERLAY.toggle( this.qtip, !!state, duration ); + }, + + destroy: function() { + // Remove modal class + this.qtip.tooltip.removeClass( MODALCLASS ); + + // Remove bound events + this.qtip._unbind( this.qtip.tooltip, this._ns ); + + // Delete element reference + OVERLAY.toggle( this.qtip, FALSE ); + delete this.qtip.elements.overlay; + } + } + ); + + + MODAL = PLUGINS.modal = function( api ) { + return new Modal( api, api.options.show.modal ); + }; + + // Setup sanitiztion rules + MODAL.sanitize = function( opts ) { + if ( opts.show ) { + if ( typeof opts.show.modal !== 'object' ) { + opts.show.modal = {on: !!opts.show.modal}; + } + else if ( typeof opts.show.modal.on === 'undefined' ) { + opts.show.modal.on = TRUE; + } + } + }; + + // Base z-index for all modal tooltips (use qTip core z-index as a base) + QTIP.modal_zindex = QTIP.zindex - 200; + + // Plugin needs to be initialized on render + MODAL.initialize = 'render'; + + // Setup option set checks + CHECKS.modal = { + '^show.modal.(on|blur)$': function() { + // Initialise + this.destroy(); + this.init(); + + // Show the modal if not visible already and tooltip is visible + this.qtip.elems.overlay.toggle( + this.qtip.tooltip[0].offsetWidth > 0 + ); + } + }; + + // Extend original api defaults + $.extend( + TRUE, QTIP.defaults, { + show: { + modal: { + on: FALSE, + effect: TRUE, + blur: TRUE, + stealfocus: TRUE, + escape: TRUE + } + } + } + ); + ; + PLUGINS.viewport = function( api, position, posOptions, targetWidth, targetHeight, elemWidth, elemHeight ) { + var target = posOptions.target, + tooltip = api.elements.tooltip, + my = posOptions.my, + at = posOptions.at, + adjust = posOptions.adjust, + method = adjust.method.split( ' ' ), + methodX = method[0], + methodY = method[1] || method[0], + viewport = posOptions.viewport, + container = posOptions.container, + cache = api.cache, + adjusted = {left: 0, top: 0}, + fixed, newMy, newClass, containerOffset, containerStatic, + viewportWidth, viewportHeight, viewportScroll, viewportOffset; + + // If viewport is not a jQuery element, or it's the window/document, or no adjustment method is used... return + if ( !viewport.jquery || target[0] === window || target[0] === document.body || adjust.method === 'none' ) { + return adjusted; + } + + // Cach container details + containerOffset = container.offset() || adjusted; + containerStatic = container.css( 'position' ) === 'static'; + + // Cache our viewport details + fixed = tooltip.css( 'position' ) === 'fixed'; + viewportWidth = viewport[0] === window ? viewport.width() : viewport.outerWidth( FALSE ); + viewportHeight = viewport[0] === window ? viewport.height() : viewport.outerHeight( FALSE ); + viewportScroll = {left: fixed ? 0 : viewport.scrollLeft(), top: fixed ? 0 : viewport.scrollTop()}; + viewportOffset = viewport.offset() || adjusted; + + // Generic calculation method + function calculate( side, otherSide, type, adjust, side1, side2, lengthName, targetLength, elemLength ) { + var initialPos = position[side1], + mySide = my[side], + atSide = at[side], + isShift = type === SHIFT, + myLength = mySide === side1 ? elemLength : mySide === side2 ? -elemLength : -elemLength / 2, + atLength = atSide === side1 ? targetLength : atSide === side2 ? -targetLength : -targetLength / 2, + sideOffset = viewportScroll[side1] + viewportOffset[side1] - (containerStatic ? 0 : containerOffset[side1]), + overflow1 = sideOffset - initialPos, + overflow2 = initialPos + elemLength - (lengthName === WIDTH ? viewportWidth : viewportHeight) - sideOffset, + offset = myLength - (my.precedance === side || mySide === my[otherSide] ? atLength : 0) - (atSide === CENTER ? targetLength / 2 : 0); + + // shift + if ( isShift ) { + offset = (mySide === side1 ? 1 : -1) * myLength; + + // Adjust position but keep it within viewport dimensions + position[side1] += overflow1 > 0 ? overflow1 : overflow2 > 0 ? -overflow2 : 0; + position[side1] = Math.max( + -containerOffset[side1] + viewportOffset[side1], + initialPos - offset, + Math.min( + Math.max( + -containerOffset[side1] + viewportOffset[side1] + (lengthName === WIDTH ? viewportWidth : viewportHeight), + initialPos + offset + ), + position[side1], + + // Make sure we don't adjust complete off the element when using 'center' + mySide === 'center' ? initialPos - myLength : 1E9 + ) + ); + + } + + // flip/flipinvert + else { + // Update adjustment amount depending on if using flipinvert or flip + adjust *= (type === FLIPINVERT ? 2 : 0); + + // Check for overflow on the left/top + if ( overflow1 > 0 && (mySide !== side1 || overflow2 > 0) ) { + position[side1] -= offset + adjust; + newMy.invert( side, side1 ); + } + + // Check for overflow on the bottom/right + else if ( overflow2 > 0 && (mySide !== side2 || overflow1 > 0) ) { + position[side1] -= (mySide === CENTER ? -offset : offset) + adjust; + newMy.invert( side, side2 ); + } + + // Make sure we haven't made things worse with the adjustment and reset if so + if ( position[side1] < viewportScroll && -position[side1] > overflow2 ) { + position[side1] = initialPos; + newMy = my.clone(); + } + } + + return position[side1] - initialPos; + } + + // Set newMy if using flip or flipinvert methods + if ( methodX !== 'shift' || methodY !== 'shift' ) { + newMy = my.clone(); + } + + // Adjust position based onviewport and adjustment options + adjusted = { + left: methodX !== 'none' ? calculate( + X, Y, methodX, adjust.x, LEFT, RIGHT, WIDTH, targetWidth, elemWidth + ) : 0, + top: methodY !== 'none' ? calculate( + Y, X, methodY, adjust.y, TOP, BOTTOM, HEIGHT, targetHeight, elemHeight + ) : 0 + }; + + // Set tooltip position class if it's changed + if ( newMy && cache.lastClass !== (newClass = NAMESPACE + '-pos-' + newMy.abbrev()) ) { + tooltip.removeClass( api.cache.lastClass ).addClass( (api.cache.lastClass = newClass) ); + } + + return adjusted; + }; + ; + PLUGINS.polys = { + // POLY area coordinate calculator + // Special thanks to Ed Cradock for helping out with this. + // Uses a binary search algorithm to find suitable coordinates. + polygon: function( baseCoords, corner ) { + var result = { + width: 0, height: 0, + position: { + top: 1e10, right: 0, + bottom: 0, left: 1e10 + }, + adjustable: FALSE + }, + i = 0, next, + coords = [], + compareX = 1, compareY = 1, + realX = 0, realY = 0, + newWidth, newHeight; + + // First pass, sanitize coords and determine outer edges + i = baseCoords.length; + while ( i-- ) { + next = [parseInt( baseCoords[--i], 10 ), parseInt( baseCoords[i + 1], 10 )]; + + if ( next[0] > result.position.right ) { + result.position.right = next[0]; + } + if ( next[0] < result.position.left ) { + result.position.left = next[0]; + } + if ( next[1] > result.position.bottom ) { + result.position.bottom = next[1]; + } + if ( next[1] < result.position.top ) { + result.position.top = next[1]; + } + + coords.push( next ); + } + + // Calculate height and width from outer edges + newWidth = result.width = Math.abs( result.position.right - result.position.left ); + newHeight = result.height = Math.abs( result.position.bottom - result.position.top ); + + // If it's the center corner... + if ( corner.abbrev() === 'c' ) { + result.position = { + left: result.position.left + (result.width / 2), + top: result.position.top + (result.height / 2) + }; + } + else { + // Second pass, use a binary search algorithm to locate most suitable coordinate + while ( newWidth > 0 && newHeight > 0 && compareX > 0 && compareY > 0 ) { + newWidth = Math.floor( newWidth / 2 ); + newHeight = Math.floor( newHeight / 2 ); + + if ( corner.x === LEFT ) { + compareX = newWidth; + } + else if ( corner.x === RIGHT ) { + compareX = result.width - newWidth; + } + else { + compareX += Math.floor( newWidth / 2 ); + } + + if ( corner.y === TOP ) { + compareY = newHeight; + } + else if ( corner.y === BOTTOM ) { + compareY = result.height - newHeight; + } + else { + compareY += Math.floor( newHeight / 2 ); + } + + i = coords.length; + while ( i-- ) { + if ( coords.length < 2 ) { + break; + } + + realX = coords[i][0] - result.position.left; + realY = coords[i][1] - result.position.top; + + if ( (corner.x === LEFT && realX >= compareX) || + (corner.x === RIGHT && realX <= compareX) || + (corner.x === CENTER && (realX < compareX || realX > (result.width - compareX))) || + (corner.y === TOP && realY >= compareY) || + (corner.y === BOTTOM && realY <= compareY) || + (corner.y === CENTER && (realY < compareY || realY > (result.height - compareY))) ) { + coords.splice( i, 1 ); + } + } + } + result.position = {left: coords[0][0], top: coords[0][1]}; + } + + return result; + }, + + rect: function( ax, ay, bx, by ) { + return { + width: Math.abs( bx - ax ), + height: Math.abs( by - ay ), + position: { + left: Math.min( ax, bx ), + top: Math.min( ay, by ) + } + }; + }, + + _angles: { + tc: 3 / 2, tr: 7 / 4, tl: 5 / 4, + bc: 1 / 2, br: 1 / 4, bl: 3 / 4, + rc: 2, lc: 1, c: 0 + }, + ellipse: function( cx, cy, rx, ry, corner ) { + var c = PLUGINS.polys._angles[corner.abbrev()], + rxc = c === 0 ? 0 : rx * Math.cos( c * Math.PI ), + rys = ry * Math.sin( c * Math.PI ); + + return { + width: (rx * 2) - Math.abs( rxc ), + height: (ry * 2) - Math.abs( rys ), + position: { + left: cx + rxc, + top: cy + rys + }, + adjustable: FALSE + }; + }, + circle: function( cx, cy, r, corner ) { + return PLUGINS.polys.ellipse( cx, cy, r, r, corner ); + } + }; + ; + PLUGINS.svg = function( api, svg, corner ) { + var doc = $( document ), + elem = svg[0], + root = $( elem.ownerSVGElement ), + xScale = 1, yScale = 1, + complex = true, + rootWidth, rootHeight, + mtx, transformed, viewBox, + len, next, i, points, + result, position, dimensions; + + // Ascend the parentNode chain until we find an element with getBBox() + while ( !elem.getBBox ) { + elem = elem.parentNode; + } + if ( !elem.getBBox || !elem.parentNode ) { + return FALSE; + } + + // Determine dimensions where possible + rootWidth = root.attr( 'width' ) || root.width() || parseInt( root.css( 'width' ), 10 ); + rootHeight = root.attr( 'height' ) || root.height() || parseInt( root.css( 'height' ), 10 ); + + // Add stroke characteristics to scaling + var strokeWidth2 = (parseInt( svg.css( 'stroke-width' ), 10 ) || 0) / 2; + if ( strokeWidth2 ) { + xScale += strokeWidth2 / rootWidth; + yScale += strokeWidth2 / rootHeight; + } + + // Determine which shape calculation to use + switch ( elem.nodeName ) { + case 'ellipse': + case 'circle': + result = PLUGINS.polys.ellipse( + elem.cx.baseVal.value, + elem.cy.baseVal.value, + (elem.rx || elem.r).baseVal.value + strokeWidth2, + (elem.ry || elem.r).baseVal.value + strokeWidth2, + corner + ); + break; + + case 'line': + case 'polygon': + case 'polyline': + // Determine points object (line has none, so mimic using array) + points = elem.points || [ + {x: elem.x1.baseVal.value, y: elem.y1.baseVal.value}, + {x: elem.x2.baseVal.value, y: elem.y2.baseVal.value} + ]; + + for ( result = [], i = -1, len = points.numberOfItems || points.length; ++i < len; ) { + next = points.getItem ? points.getItem( i ) : points[i]; + result.push.apply( result, [next.x, next.y] ); + } + + result = PLUGINS.polys.polygon( result, corner ); + break; + + // Unknown shape or rectangle? Use bounding box + default: + result = elem.getBoundingClientRect(); + result = { + width: result.width, height: result.height, + position: { + left: result.left, + top: result.top + } + }; + complex = false; + break; + } + + // Shortcut assignments + position = result.position; + root = root[0]; + + // If the shape was complex (i.e. not using bounding box calculations) + if ( complex ) { + // Convert position into a pixel value + if ( root.createSVGPoint ) { + mtx = elem.getScreenCTM(); + points = root.createSVGPoint(); + + points.x = position.left; + points.y = position.top; + transformed = points.matrixTransform( mtx ); + position.left = transformed.x; + position.top = transformed.y; + } + + // Calculate viewBox characteristics + if ( root.viewBox && (viewBox = root.viewBox.baseVal) && viewBox.width && viewBox.height ) { + xScale *= rootWidth / viewBox.width; + yScale *= rootHeight / viewBox.height; + } + } + + // Adjust by scroll offset + position.left += doc.scrollLeft(); + position.top += doc.scrollTop(); + + return result; + }; + ; + PLUGINS.imagemap = function( api, area, corner, adjustMethod ) { + if ( !area.jquery ) { + area = $( area ); + } + + var shape = area.attr( 'shape' ).toLowerCase().replace( 'poly', 'polygon' ), + image = $( 'img[usemap="#' + area.parent( 'map' ).attr( 'name' ) + '"]' ), + coordsString = $.trim( area.attr( 'coords' ) ), + coordsArray = coordsString.replace( /,$/, '' ).split( ',' ), + imageOffset, coords, i, next, result, len; + + // If we can't find the image using the map... + if ( !image.length ) { + return FALSE; + } + + // Pass coordinates string if polygon + if ( shape === 'polygon' ) { + result = PLUGINS.polys.polygon( coordsArray, corner ); + } + + // Otherwise parse the coordinates and pass them as arguments + else if ( PLUGINS.polys[shape] ) { + for ( i = -1, len = coordsArray.length, coords = []; ++i < len; ) { + coords.push( parseInt( coordsArray[i], 10 ) ); + } + + result = PLUGINS.polys[shape].apply( + this, coords.concat( corner ) + ); + } + + // If no shapre calculation method was found, return false + else { + return FALSE; + } + + // Make sure we account for padding and borders on the image + imageOffset = image.offset(); + imageOffset.left += Math.ceil( (image.outerWidth( FALSE ) - image.width()) / 2 ); + imageOffset.top += Math.ceil( (image.outerHeight( FALSE ) - image.height()) / 2 ); + + // Add image position to offset coordinates + result.position.left += imageOffset.left; + result.position.top += imageOffset.top; + + return result; + }; + ; + var IE6, + + /* + * BGIFrame adaption (http://plugins.jquery.com/project/bgiframe) + * Special thanks to Brandon Aaron + */ + BGIFRAME = ''; + + function Ie6( api, qtip ) { + this._ns = 'ie6'; + this.init( (this.qtip = api) ); + } + + $.extend( + Ie6.prototype, { + _scroll: function() { + var overlay = this.qtip.elements.overlay; + overlay && (overlay[0].style.top = $( window ).scrollTop() + 'px'); + }, + + init: function( qtip ) { + var tooltip = qtip.tooltip, + scroll; + + // Create the BGIFrame element if needed + if ( $( 'select, object' ).length < 1 ) { + this.bgiframe = qtip.elements.bgiframe = $( BGIFRAME ).appendTo( tooltip ); + + // Update BGIFrame on tooltip move + qtip._bind( tooltip, 'tooltipmove', this.adjustBGIFrame, this._ns, this ); + } + + // redraw() container for width/height calculations + this.redrawContainer = $( '
', {id: NAMESPACE + '-rcontainer'} ) + .appendTo( document.body ); + + // Fixup modal plugin if present too + if ( qtip.elements.overlay && qtip.elements.overlay.addClass( 'qtipmodal-ie6fix' ) ) { + qtip._bind( window, ['scroll', 'resize'], this._scroll, this._ns, this ); + qtip._bind( tooltip, ['tooltipshow'], this._scroll, this._ns, this ); + } + + // Set dimensions + this.redraw(); + }, + + adjustBGIFrame: function() { + var tooltip = this.qtip.tooltip, + dimensions = { + height: tooltip.outerHeight( FALSE ), + width: tooltip.outerWidth( FALSE ) + }, + plugin = this.qtip.plugins.tip, + tip = this.qtip.elements.tip, + tipAdjust, offset; + + // Adjust border offset + offset = parseInt( tooltip.css( 'borderLeftWidth' ), 10 ) || 0; + offset = {left: -offset, top: -offset}; + + // Adjust for tips plugin + if ( plugin && tip ) { + tipAdjust = (plugin.corner.precedance === 'x') ? [WIDTH, LEFT] : [HEIGHT, TOP]; + offset[tipAdjust[1]] -= tip[tipAdjust[0]](); + } + + // Update bgiframe + this.bgiframe.css( offset ).css( dimensions ); + }, + + // Max/min width simulator function + redraw: function() { + if ( this.qtip.rendered < 1 || this.drawing ) { + return this; + } + + var tooltip = this.qtip.tooltip, + style = this.qtip.options.style, + container = this.qtip.options.position.container, + perc, width, max, min; + + // Set drawing flag + this.qtip.drawing = 1; + + // If tooltip has a set height/width, just set it... like a boss! + if ( style.height ) { + tooltip.css( HEIGHT, style.height ); + } + if ( style.width ) { + tooltip.css( WIDTH, style.width ); + } + + // Simulate max/min width if not set width present... + else { + // Reset width and add fluid class + tooltip.css( WIDTH, '' ).appendTo( this.redrawContainer ); + + // Grab our tooltip width (add 1 if odd so we don't get wrapping problems.. huzzah!) + width = tooltip.width(); + if ( width % 2 < 1 ) { + width += 1; + } + + // Grab our max/min properties + max = tooltip.css( 'maxWidth' ) || ''; + min = tooltip.css( 'minWidth' ) || ''; + + // Parse into proper pixel values + perc = (max + min).indexOf( '%' ) > -1 ? container.width() / 100 : 0; + max = ((max.indexOf( '%' ) > -1 ? perc : 1) * parseInt( max, 10 )) || width; + min = ((min.indexOf( '%' ) > -1 ? perc : 1) * parseInt( min, 10 )) || 0; + + // Determine new dimension size based on max/min/current values + width = max + min ? Math.min( Math.max( width, min ), max ) : width; + + // Set the newly calculated width and remvoe fluid class + tooltip.css( WIDTH, Math.round( width ) ).appendTo( container ); + } + + // Set drawing flag + this.drawing = 0; + + return this; + }, + + destroy: function() { + // Remove iframe + this.bgiframe && this.bgiframe.remove(); + + // Remove bound events + this.qtip._unbind( [window, this.qtip.tooltip], this._ns ); + } + } + ); + + IE6 = PLUGINS.ie6 = function( api ) { + // Proceed only if the browser is IE6 + return BROWSER.ie === 6 ? new Ie6( api ) : FALSE; + }; + + IE6.initialize = 'render'; + + CHECKS.ie6 = { + '^content|style$': function() { + this.redraw(); + } + }; + ; + } + )); + }( window, document )); +} + + + + diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/qtip/jquery.qtip.min.js b/plugins/legacy-admin/framework/core/assets/js/vendor/qtip/jquery.qtip.min.js new file mode 100644 index 000000000..291133fda --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/qtip/jquery.qtip.min.js @@ -0,0 +1,3 @@ +/* qTip2 v2.2.0 None | qtip2.com | Licensed MIT, GPL | Sun Dec 15 2013 23:29:05 */ +if ( typeof jQuery.qtip === 'undefined' ) {!function(a,b,c){!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)}(function(d){"use strict";function e(a,b,c,e){this.id=c,this.target=a,this.tooltip=A,this.elements={target:a},this._id=J+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:z,attr:e,onTooltip:z,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=z}function f(a){return a===A||"object"!==d.type(a)}function g(a){return!(d.isFunction(a)||a&&a.attr||a.length||"object"===d.type(a)&&(a.jquery||a.then))}function h(a){var b,c,e,h;return f(a)?z:(f(a.metadata)&&(a.metadata={type:a.metadata}),"content"in a&&(b=a.content,f(b)||b.jquery||b.done?b=a.content={text:c=g(b)?z:b}:c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==z,delete b.ajax,b.text=function(a,b){var f=c||d(this).attr(b.options.content.attr)||"Loading...",g=d.ajax(d.extend({},e,{context:b})).then(e.success,A,e.error).then(function(a){return a&&h&&b.set("content.text",a),a},function(a,c,d){b.destroyed||0===a.status||b.set("content.text",c+": "+d)});return h?f:(b.set("content.text",f),g)}),"title"in b&&(f(b.title)||(b.button=b.title.button,b.title=b.title.text),g(b.title||z)&&(b.title=z))),"position"in a&&f(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&f(a.show)&&(a.show=a.show.jquery?{target:a.show}:a.show===y?{ready:y}:{event:a.show}),"hide"in a&&f(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&f(a.style)&&(a.style={classes:a.style}),d.each(I,function(){this.sanitize&&this.sanitize(a)}),a)}function i(a,b){for(var c,d=0,e=a,f=b.split(".");e=e[f[d++]];)d0?setTimeout(d.proxy(a,this),b):(a.call(this),void 0)}function n(a){return this.tooltip.hasClass(T)?z:(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this.timers.show=m.call(this,function(){this.toggle(y,a)},this.options.show.delay),void 0)}function o(a){if(this.tooltip.hasClass(T))return z;var b=d(a.relatedTarget),c=b.closest(N)[0]===this.tooltip[0],e=b[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==b[0]&&"mouse"===this.options.position.target&&c||this.options.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(c||e))try{a.preventDefault(),a.stopImmediatePropagation()}catch(f){}else this.timers.hide=m.call(this,function(){this.toggle(z,a)},this.options.hide.delay,this)}function p(a){return this.tooltip.hasClass(T)||!this.options.hide.inactive?z:(clearTimeout(this.timers.inactive),this.timers.inactive=m.call(this,function(){this.hide(a)},this.options.hide.inactive),void 0)}function q(a){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(a)}function r(a,c,e){d(b.body).delegate(a,(c.split?c:c.join($+" "))+$,function(){var a=t.api[d.attr(this,L)];a&&!a.disabled&&e.apply(a,arguments)})}function s(a,c,f){var g,i,j,k,l,m=d(b.body),n=a[0]===b?m:a,o=a.metadata?a.metadata(f.metadata):A,p="html5"===f.metadata.type&&o?o[f.metadata.name]:A,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(y,{},t.defaults,f,"object"==typeof q?h(q):A,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===z||!j)return z;k.content.text=j}if(i.container.length||(i.container=m),i.target===z&&(i.target=n),k.show.target===z&&(k.show.target=n),k.show.solo===y&&(k.show.solo=i.container.closest("body")),k.hide.target===z&&(k.hide.target=n),k.position.viewport===y&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new v(i.at,y),i.my=new v(i.my),a.data(J))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===z)return z;return a.attr(K,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(V,l).attr("title",""),g=new e(a,k,c,!!j),a.data(J,g),a.one("remove.qtip-"+c+" removeqtip.qtip-"+c,function(){var a;(a=d(this).data(J))&&a.destroy(!0)}),g}var t,u,v,w,x,y=!0,z=!1,A=null,B="x",C="y",D="top",E="left",F="bottom",G="right",H="center",I={},J="qtip",K="data-hasqtip",L="data-qtip-id",M=["ui-widget","ui-tooltip"],N="."+J,O="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),P=J+"-fixed",Q=J+"-default",R=J+"-focus",S=J+"-hover",T=J+"-disabled",U="_replacedByqTip",V="oldtitle",W={ie:function(){for(var a=3,c=b.createElement("div");(c.innerHTML="")&&c.getElementsByTagName("i")[0];);return a>4?a:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||z};u=e.prototype,u._when=function(a){return d.when.apply(d,a)},u.render=function(a){if(this.rendered||this.destroyed)return this;var b,c=this,e=this.options,f=this.cache,g=this.elements,h=e.content.text,i=e.content.title,j=e.content.button,k=e.position,l=("."+this._id+" ",[]);return d.attr(this.target[0],"aria-describedby",this._id),this.tooltip=g.tooltip=b=d("
",{id:this._id,"class":[J,Q,e.style.classes,J+"-pos-"+e.position.my.abbrev()].join(" "),width:e.style.width||"",height:e.style.height||"",tracking:"mouse"===k.target&&k.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":z,"aria-describedby":this._id+"-content","aria-hidden":y}).toggleClass(T,this.disabled).attr(L,this.id).data(J,this).appendTo(k.container).append(g.content=d("
",{"class":J+"-content",id:this._id+"-content","aria-atomic":y})),this.rendered=-1,this.positioning=y,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,z))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,z)),this.rendered=y,this._setWidget(),d.each(I,function(a){var b;"render"===this.initialize&&(b=this(c))&&(c.plugins[a]=b)}),this._unassignEvents(),this._assignEvents(),this._when(l).then(function(){c._trigger("render"),c.positioning=z,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(y,f.event,z),c.hiddenDuringWait=z}),t.api[this.id]=this,this},u.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=y;var a=this.target,b=a.attr(V);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),d.each(this.plugins,function(){this.destroy&&this.destroy()}),clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this._unassignEvents(),a.removeData(J).removeAttr(L).removeAttr(K).removeAttr("aria-describedby"),this.options.suppress&&b&&a.attr("title",b).removeAttr(V),this._unbind(a),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=A,delete t.api[this.id]}}return this.destroyed?this.target:(a===y&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},w=u.checks={builtin:{"^id$":function(a,b,c,e){var f=c===y?t.nextid:c,g=J+"-"+f;f!==z&&f.length>0&&!d("#"+g).length?(this._id=g,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):a[b]=e},"^prerender":function(a,b,c){c&&!this.rendered&&this.render(this.options.show.ready)},"^content.text$":function(a,b,c){this._updateContent(c)},"^content.attr$":function(a,b,c,d){this.options.content.text===this.target.attr(d)&&this._updateContent(this.target.attr(c))},"^content.title$":function(a,b,c){return c?(c&&!this.elements.title&&this._createTitle(),this._updateTitle(c),void 0):this._removeTitle()},"^content.button$":function(a,b,c){this._updateButton(c)},"^content.title.(text|button)$":function(a,b,c){this.set("content."+b,c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(a[b]=new v(c,"at"===b))},"^position.container$":function(a,b,c){this.rendered&&this.tooltip.appendTo(c)},"^show.ready$":function(a,b,c){c&&(!this.rendered&&this.render(y)||this.toggle(y))},"^style.classes$":function(a,b,c,d){this.rendered&&this.tooltip.removeClass(d).addClass(c)},"^style.(width|height)":function(a,b,c){this.rendered&&this.tooltip.css(b,c)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def":function(a,b,c){this.rendered&&this.tooltip.toggleClass(Q,!!c)},"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){this.rendered&&this.tooltip[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var a=this.options.position;this.tooltip.attr("tracking","mouse"===a.target&&a.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},u.get=function(a){if(this.destroyed)return this;var b=i(this.options,a.toLowerCase()),c=b[0][b[1]];return c.precedance?c.string():c};var X=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,Y=/^prerender|show\.ready/i;u.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=z,g=this.options;this.checks}return"string"==typeof a?(c=a,a={},a[c]=b):a=d.extend({},a),d.each(a,function(b,c){if(e&&Y.test(b))return delete a[b],void 0;var h,j=i(g,b.toLowerCase());h=j[0][j[1]],j[0][j[1]]=c&&c.nodeType?d(c):c,f=X.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=y,d.each(a,d.proxy(j,this)),this.positioning=z,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?A:this.cache.event),this},u._update=function(a,b){var c=this,e=this.cache;return this.rendered&&a?(d.isFunction(a)&&(a=a.call(this.elements.target,e.event,this)||""),d.isFunction(a.then)?(e.waiting=y,a.then(function(a){return e.waiting=z,c._update(a,b)},A,function(a){return c._update(a,b)})):a===z||!a&&""!==a?z:(a.jquery&&a.length>0?b.empty().append(a.css({display:"block",visibility:"visible"})):b.html(a),this._waitForContent(b).then(function(a){a.images&&a.images.length&&c.rendered&&c.tooltip[0].offsetWidth>0&&c.reposition(e.event,!a.length)}))):z},u._waitForContent=function(a){var b=this.cache;return b.waiting=y,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=z}).promise()},u._updateContent=function(a,b){this._update(a,this.elements.content,b)},u._updateTitle=function(a,b){this._update(a,this.elements.title,b)===z&&this._removeTitle(z)},u._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("
",{"class":J+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("
",{id:b,"class":J+"-title","aria-atomic":y})).insertBefore(a.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus","down"===a.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover","mouseover"===a.type)}),this.options.content.button&&this._createButton()},u._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=A,a!==z&&this.reposition())},u.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=y;var f,g,h=this.cache,i=this.tooltip,j=this.options.position,k=j.target,l=j.my,m=j.at,n=j.viewport,o=j.container,p=j.adjust,q=p.method.split(" "),r=i.outerWidth(z),s=i.outerHeight(z),t=0,u=0,v=i.css("position"),w={left:0,top:0},x=i[0].offsetWidth>0,A=c&&"scroll"===c.type,B=d(a),C=o[0].ownerDocument,J=this.mouse;if(d.isArray(k)&&2===k.length)m={x:E,y:D},w={left:k[0],top:k[1]};else if("mouse"===k)m={x:E,y:D},!J||!J.pageX||!p.mouse&&c&&c.pageX?c&&c.pageX||((!p.mouse||this.options.show.distance)&&h.origin&&h.origin.pageX?c=h.origin:(!c||c&&("resize"===c.type||"scroll"===c.type))&&(c=h.event)):c=J,"static"!==v&&(w=o.offset()),C.body.offsetWidth!==(a.innerWidth||C.documentElement.clientWidth)&&(g=d(b.body).offset()),w={left:c.pageX-w.left+(g&&g.left||0),top:c.pageY-w.top+(g&&g.top||0)},p.mouse&&A&&J&&(w.left-=(J.scrollX||0)-B.scrollLeft(),w.top-=(J.scrollY||0)-B.scrollTop());else{if("event"===k?c&&c.target&&"scroll"!==c.type&&"resize"!==c.type?h.target=d(c.target):c.target||(h.target=this.elements.target):"event"!==k&&(h.target=d(k.jquery?k:this.elements.target)),k=h.target,k=d(k).eq(0),0===k.length)return this;k[0]===b||k[0]===a?(t=W.iOS?a.innerWidth:k.width(),u=W.iOS?a.innerHeight:k.height(),k[0]===a&&(w={top:(n||k).scrollTop(),left:(n||k).scrollLeft()})):I.imagemap&&k.is("area")?f=I.imagemap(this,k,m,I.viewport?q:z):I.svg&&k&&k[0].ownerSVGElement?f=I.svg(this,k,m,I.viewport?q:z):(t=k.outerWidth(z),u=k.outerHeight(z),w=k.offset()),f&&(t=f.width,u=f.height,g=f.offset,w=f.position),w=this.reposition.offset(k,w,o),(W.iOS>3.1&&W.iOS<4.1||W.iOS>=4.3&&W.iOS<4.33||!W.iOS&&"fixed"===v)&&(w.left-=B.scrollLeft(),w.top-=B.scrollTop()),(!f||f&&f.adjustable!==z)&&(w.left+=m.x===G?t:m.x===H?t/2:0,w.top+=m.y===F?u:m.y===H?u/2:0)}return w.left+=p.x+(l.x===G?-r:l.x===H?-r/2:0),w.top+=p.y+(l.y===F?-s:l.y===H?-s/2:0),I.viewport?(w.adjusted=I.viewport(this,w,j,t,u,r,s),g&&w.adjusted.left&&(w.left+=g.left),g&&w.adjusted.top&&(w.top+=g.top)):w.adjusted={left:0,top:0},this._trigger("move",[w,n.elem||n],c)?(delete w.adjusted,e===z||!x||isNaN(w.left)||isNaN(w.top)||"mouse"===k||!d.isFunction(j.effect)?i.css(w):d.isFunction(j.effect)&&(j.effect.call(i,this,d.extend({},w)),i.queue(function(a){d(this).css({opacity:"",height:""}),W.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=z,this):this},u.reposition.offset=function(a,c,e){function f(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}if(!e[0])return c;var g,h,i,j,k=d(a[0].ownerDocument),l=!!W.ie&&"CSS1Compat"!==b.compatMode,m=e[0];do"static"!==(h=d.css(m,"position"))&&("fixed"===h?(i=m.getBoundingClientRect(),f(k,-1)):(i=d(m).position(),i.left+=parseFloat(d.css(m,"borderLeftWidth"))||0,i.top+=parseFloat(d.css(m,"borderTopWidth"))||0),c.left-=i.left+(parseFloat(d.css(m,"marginLeft"))||0),c.top-=i.top+(parseFloat(d.css(m,"marginTop"))||0),g||"hidden"===(j=d.css(m,"overflow"))||"visible"===j||(g=d(m)));while(m=m.offsetParent);return g&&(g[0]!==k[0]||l)&&f(g,1),c};var Z=(v=u.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,H).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!b;var c=a.charAt(0);this.precedance="t"===c||"b"===c?C:B}).prototype;Z.invert=function(a,b){this[a]=this[a]===E?G:this[a]===G?E:b||this[a]},Z.string=function(){var a=this.x,b=this.y;return a===b?a:this.precedance===C||this.forceY&&"center"!==b?b+" "+a:a+" "+b},Z.abbrev=function(){var a=this.string().split(" ");return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},Z.clone=function(){return new v(this.string(),this.forceY)},u.toggle=function(a,c){var e=this.cache,f=this.options,g=this.tooltip;if(c){if(/over|enter/.test(c.type)&&/out|leave/.test(e.event.type)&&f.show.target.add(c.target).length===f.show.target.length&&g.has(c.relatedTarget).length)return this;e.event=l(c)}if(this.waiting&&!a&&(this.hiddenDuringWait=y),!this.rendered)return a?this.render(1):this;if(this.destroyed||this.disabled)return this;var h,i,j,k=a?"show":"hide",m=this.options[k],n=(this.options[a?"hide":"show"],this.options.position),o=this.options.content,p=this.tooltip.css("width"),q=this.tooltip.is(":visible"),r=a||1===m.target.length,s=!c||m.target.length<2||e.target[0]===c.target;return(typeof a).search("boolean|number")&&(a=!q),h=!g.is(":animated")&&q===a&&s,i=h?A:!!this._trigger(k,[90]),this.destroyed?this:(i!==z&&a&&this.focus(c),!i||h?this:(d.attr(g[0],"aria-hidden",!a),a?(e.origin=l(this.mouse),d.isFunction(o.text)&&this._updateContent(o.text,z),d.isFunction(o.title)&&this._updateTitle(o.title,z),!x&&"mouse"===n.target&&n.adjust.mouse&&(d(b).bind("mousemove."+J,this._storeMouse),x=y),p||g.css("width",g.outerWidth(z)),this.reposition(c,arguments[2]),p||g.css("width",""),m.solo&&("string"==typeof m.solo?d(m.solo):d(N,m.solo)).not(g).not(m.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,x&&!d(N+'[tracking="true"]:visible',m.solo).not(g).length&&(d(b).unbind("mousemove."+J),x=z),this.blur(c)),j=d.proxy(function(){a?(W.ie&&g[0].style.removeAttribute("filter"),g.css("overflow",""),"string"==typeof m.autofocus&&d(this.options.show.autofocus,g).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):g.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(a?"visible":"hidden")},this),m.effect===z||r===z?(g[k](),j()):d.isFunction(m.effect)?(g.stop(1,1),m.effect.call(g,this),g.queue("fx",function(a){j(),a()})):g.fadeTo(90,a?1:0,j),a&&m.target.trigger("qtip-"+this.id+"-inactive"),this))},u.show=function(a){return this.toggle(y,a)},u.hide=function(a){return this.toggle(z,a)},u.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(N),c=this.tooltip,e=parseInt(c[0].style.zIndex,10),f=t.zindex+b.length;return c.hasClass(R)||this._trigger("focus",[f],a)&&(e!==f&&(b.each(function(){this.style.zIndex>e&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+R).qtip("blur",a)),c.addClass(R)[0].style.zIndex=f),this},u.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass(R),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},u.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(T):this.disabled):"boolean"!=typeof a&&(a=y),this.rendered&&this.tooltip.toggleClass(T,a).attr("aria-disabled",a),this.disabled=!!a,this)},u.enable=function(){return this.disable(z)},u._createButton=function(){var a=this,b=this.elements,c=b.tooltip,e=this.options.content.button,f="string"==typeof e,g=f?e:"Close tooltip";b.button&&b.button.remove(),b.button=e.jquery?e:d("",{"class":"qtip-close "+(this.options.style.widget?"":J+"-icon"),title:g,"aria-label":g}).prepend(d("",{"class":"ui-icon ui-icon-close",html:"×"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(T)||a.hide(b),z})},u._updateButton=function(a){if(!this.rendered)return z;var b=this.elements.button;a?this._createButton():b.remove()},u._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(T);c.removeClass(T),T=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(T,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass(Q,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(J+"-icon",!a)},u._storeMouse=function(a){(this.mouse=l(a)).type="mousemove"},u._bind=function(a,b,c,e,f){var g="."+this._id+(e?"-"+e:"");b.length&&d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this))},u._unbind=function(a,b){d(a).unbind("."+this._id+(b?"-"+b:""))};var $="."+J;d(function(){r(N,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(P)&&!c.hasClass(T)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(S,b)}),r("["+L+"]",O,p)}),u._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||A,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=z,!e.isDefaultPrevented()},u._bindEvents=function(a,b,c,e,f,g){if(e.add(c).length===e.length){var h=[];b=d.map(b,function(b){var c=d.inArray(b,a);return c>-1?(h.push(a.splice(c,1)[0]),void 0):b}),h.length&&this._bind(c,h,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)})}this._bind(c,a,f),this._bind(e,b,g)},u._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?z:(this.cache.event=l(a),this.cache.target=a?d(a.target):[c],clearTimeout(this.timers.show),this.timers.show=m.call(this,function(){this.render("object"==typeof a||e.show.ready)},e.show.delay),void 0)}var e=this.options,f=e.show.target,g=e.hide.target,h=e.show.event?d.trim(""+e.show.event).split(" "):[],i=e.hide.event?d.trim(""+e.hide.event).split(" "):[];/mouse(over|enter)/i.test(e.show.event)&&!/mouse(out|leave)/i.test(e.hide.event)&&i.push("mouseleave"),this._bind(f,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=y}),this._bindEvents(h,i,f,g,b,function(){clearTimeout(this.timers.show)}),(e.show.ready||e.prerender)&&b.call(this,a)},u._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),m=(d(b.body),d(a)),r=e.show.event?d.trim(""+e.show.event).split(" "):[],s=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeName)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(P)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(T)&&this.tooltip[0].offsetWidth>0,e=b.parents(N).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",p),this._bind(i.add(g),t.inactiveEvents,p,"-inactive")),this._bindEvents(r,s,h,i,n,o),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mouseenter","mouseleave"],function(a){this.cache.onTarget="mouseenter"===a.type}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(T)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:m,"resize",q),f.adjust.scroll&&this._bind(m.add(f.container),"scroll",q)},u._unassignEvents=function(){var c=[this.options.show.target[0],this.options.hide.target[0],this.rendered&&this.tooltip[0],this.options.position.container[0],this.options.position.viewport[0],this.options.position.container.closest("html")[0],a,b];this._unbind(d([]).pushStack(d.grep(c,function(a){return"object"==typeof a})))},t=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=A,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],J):A;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,J);if(!a)return y;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),z;a.set(b,e)}}),g!==A?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(y,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===z||c.length<1||t.api[c]?t.nextid++:c,b=s(d(this),c,k),b===z?y:(t.api[c]=b,d.each(I,function(){"initialize"===this.initialize&&this(b)}),b._assignInitialEvents(j),void 0)}))},d.qtip=e,t.api={},d.each({attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,V):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(V,b))}return d.fn["attr"+U].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+U].apply(this,arguments));return a||b.filter("["+V+"]").attr("title",function(){return d.attr(this,V)}).removeAttr(V),b}},function(a,b){if(!b||d.fn[a+U])return y;var c=d.fn[a+U]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+U]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(K))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+U].apply(this,arguments)}),t.version="2.2.0",t.nextid=0,t.inactiveEvents=O,t.zindex=15e3,t.defaults={prerender:z,id:z,overwrite:y,suppress:y,content:{text:y,attr:"title",title:z,button:z},position:{my:"top left",at:"bottom right",target:z,container:z,viewport:z,adjust:{x:0,y:0,mouse:y,scroll:y,resize:y,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:z})}},show:{target:z,event:"mouseenter",effect:y,delay:90,solo:z,ready:z,autofocus:z},hide:{target:z,event:"mouseleave",effect:y,delay:0,fixed:z,inactive:z,leave:"window",distance:z},style:{classes:"",widget:z,width:z,height:z,def:y},events:{render:A,move:A,show:A,hide:A,toggle:A,visible:A,hidden:A,focus:A,blur:A}}})}(window,document);} +//# sourceMappingURL=http://cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.0//var/www/qtip2/build/tmp/tmp-9404qaj6jps/jquery.qtip.min.map \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/redux.select2.sortable.js b/plugins/legacy-admin/framework/core/assets/js/vendor/redux.select2.sortable.js new file mode 100644 index 000000000..896c1adcc --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/redux.select2.sortable.js @@ -0,0 +1,152 @@ +/** + * jQuery Select2 Sortable + * - enable select2 to be sortable via normal select element + * + * author : Vafour + * modified : Kevin Provance (kprovance) + * inspired by : jQuery Chosen Sortable (https://github.com/mrhenry/jquery-chosen-sortable) + * License : GPL + */ + +(function ($) { + $.fn.extend({ + select2SortableOrder: function () { + var $this = this.filter('[multiple]'); + + $this.each(function () { + var $select = $(this); + + // skip elements not select2-ed + if (typeof ($select.data('select2')) !== 'object') { + return false; + } + + var $select2 = $select.siblings('.select2-container'); + var sorted; + + // Opt group names + var optArr = []; + + $select.find('optgroup').each(function(idx, val) { + optArr.push (val); + }); + + $select.find('option').each(function(idx, val) { + var groupName = $(this).parent('optgroup').prop('label'); + var optVal = this; + + if (groupName === undefined) { + if (this.value !== '' && !this.selected) { + optArr.push (optVal); + } + } + }); + + sorted = $($select2.find('.select2-choices li[class!="select2-search-field"]').map(function () { + if (!this) { + return undefined; + } + + if($(this).data('select2Data') != undefined){ + var id = $(this).data('select2Data').id; + return $select.find('option[value="' + id + '"]')[0]; + } + + + //var id = $(this).data('select2Data').id; + + //return $select.find('option[value="' + id + '"]')[0]; + })); + + sorted.push.apply(sorted, optArr); + + $select.children().remove(); + $select.append(sorted); + }); + + return $this; + }, + + select2Sortable: function () { + var args = Array.prototype.slice.call(arguments, 0); + $this = this.filter('[multiple]'), + validMethods = ['destroy']; + + if (args.length === 0 || typeof (args[0]) === 'object') { + var defaultOptions = { + bindOrder: 'formSubmit', // or sortableStop + sortableOptions: { + placeholder: 'ui-state-highlight', + items: 'li:not(.select2-search-field)', + tolerance: 'pointer' + } + }; + + var options = $.extend(defaultOptions, args[0]); + + // Init select2 only if not already initialized to prevent select2 configuration loss + if (typeof ($this.data('select2')) !== 'object') { + $this.select2(); + } + + $this.each(function () { + var $select = $(this) + var $select2choices = $select.siblings('.select2-container').find('.select2-choices'); + + // Init jQuery UI Sortable + $select2choices.sortable(options.sortableOptions); + + switch (options.bindOrder) { + case 'sortableStop': + // apply options ordering in sortstop event + $select2choices.on("sortstop.select2sortable", function (event, ui) { + $select.select2SortableOrder(); + }); + + $select.on('change', function (e) { + $(this).select2SortableOrder(); + }); + break; + + default: + // apply options ordering in form submit + $select.closest('form').unbind('submit.select2sortable').on('submit.select2sortable', function () { + $select.select2SortableOrder(); + }); + break; + } + }); + } + else if (typeof (args[0] === 'string')) { + if ($.inArray(args[0], validMethods) == -1) { + throw "Unknown method: " + args[0]; + } + + if (args[0] === 'destroy') { + $this.select2SortableDestroy(); + } + } + + return $this; + }, + + select2SortableDestroy: function () { + var $this = this.filter('[multiple]'); + $this.each(function () { + var $select = $(this) + var $select2choices = $select.parent().find('.select2-choices'); + + // unbind form submit event + $select.closest('form').unbind('submit.select2sortable'); + + // unbind sortstop event + $select2choices.unbind("sortstop.select2sortable"); + + // destroy select2Sortable + $select2choices.sortable('destroy'); + }); + + return $this; + } + }); +}(jQuery)); \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/redux.select2.sortable.min.js b/plugins/legacy-admin/framework/core/assets/js/vendor/redux.select2.sortable.min.js new file mode 100644 index 000000000..91a4968a6 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/redux.select2.sortable.min.js @@ -0,0 +1 @@ +!function(a){a.fn.extend({select2SortableOrder:function(){var b=this.filter("[multiple]");return b.each(function(){var b=a(this);if("object"!=typeof b.data("select2"))return!1;var c,d=b.siblings(".select2-container"),e=[];b.find("optgroup").each(function(a,b){e.push(b)}),b.find("option").each(function(){var b=a(this).parent("optgroup").prop("label"),c=this;void 0===b&&(""===this.value||this.selected||e.push(c))}),c=a(d.find('.select2-choices li[class!="select2-search-field"]').map(function(){if(!this)return void 0;if(void 0!=a(this).data("select2Data")){var c=a(this).data("select2Data").id;return b.find('option[value="'+c+'"]')[0]}})),c.push.apply(c,e),b.children().remove(),b.append(c)}),b},select2Sortable:function(){var b=Array.prototype.slice.call(arguments,0);if($this=this.filter("[multiple]"),validMethods=["destroy"],0===b.length||"object"==typeof b[0]){var c={bindOrder:"formSubmit",sortableOptions:{placeholder:"ui-state-highlight",items:"li:not(.select2-search-field)",tolerance:"pointer"}},d=a.extend(c,b[0]);"object"!=typeof $this.data("select2")&&$this.select2(),$this.each(function(){var b=a(this),c=b.siblings(".select2-container").find(".select2-choices");switch(c.sortable(d.sortableOptions),d.bindOrder){case"sortableStop":c.on("sortstop.select2sortable",function(){b.select2SortableOrder()}),b.on("change",function(){a(this).select2SortableOrder()});break;default:b.closest("form").unbind("submit.select2sortable").on("submit.select2sortable",function(){b.select2SortableOrder()})}})}else{if(-1==a.inArray(b[0],validMethods))throw"Unknown method: "+b[0];"destroy"===b[0]&&$this.select2SortableDestroy()}return $this},select2SortableDestroy:function(){var b=this.filter("[multiple]");return b.each(function(){var b=a(this),c=b.parent().find(".select2-choices");b.closest("form").unbind("submit.select2sortable"),c.unbind("sortstop.select2sortable"),c.sortable("destroy")}),b}})}(jQuery); \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/README.md b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/README.md new file mode 100644 index 000000000..64380c451 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/README.md @@ -0,0 +1,114 @@ +Select2 +======= + +Select2 is a jQuery-based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results. + +To get started, checkout examples and documentation at http://ivaynberg.github.com/select2 + +Use cases +--------- + +* Enhancing native selects with search. +* Enhancing native selects with a better multi-select interface. +* Loading data from JavaScript: easily load items via ajax and have them searchable. +* Nesting optgroups: native selects only support one level of nested. Select2 does not have this restriction. +* Tagging: ability to add new items on the fly. +* Working with large, remote datasets: ability to partially load a dataset based on the search term. +* Paging of large datasets: easy support for loading more pages when the results are scrolled to the end. +* Templating: support for custom rendering of results and selections. + +Browser compatibility +--------------------- +* IE 8+ +* Chrome 8+ +* Firefox 10+ +* Safari 3+ +* Opera 10.6+ + +Usage +----- +You can source Select2 directly from a CDN like [JSDliver](http://www.jsdelivr.com/#!select2) or [CDNJS](http://www.cdnjs.com/libraries/select2), [download it from this GitHub repo](https://github.com/ivaynberg/select2/tags), or use one of the integrations below. + +Integrations +------------ + +* [Wicket-Select2](https://github.com/ivaynberg/wicket-select2) (Java / [Apache Wicket](http://wicket.apache.org)) +* [select2-rails](https://github.com/argerim/select2-rails) (Ruby on Rails) +* [AngularUI](http://angular-ui.github.io/#ui-select) ([AngularJS](https://angularjs.org/)) +* [Django](https://github.com/applegrew/django-select2) +* [Symfony](https://github.com/19Gerhard85/sfSelect2WidgetsPlugin) +* [Symfony2](https://github.com/avocode/FormExtensions) +* [Bootstrap 2](https://github.com/t0m/select2-bootstrap-css) and [Bootstrap 3](https://github.com/t0m/select2-bootstrap-css/tree/bootstrap3) (CSS skins) +* [Meteor](https://github.com/nate-strauser/meteor-select2) (modern reactive JavaScript framework; + [Bootstrap 3 skin](https://github.com/esperadomedia/meteor-select2-bootstrap3-css/)) +* [Meteor](https://jquery-select2.meteor.com) +* [Yii 2.x](http://demos.krajee.com/widgets#select2) +* [Yii 1.x](https://github.com/tonybolzan/yii-select2) +* [AtmosphereJS](https://atmospherejs.com/package/jquery-select2) + +### Example Integrations + +* [Knockout.js](https://github.com/ivaynberg/select2/wiki/Knockout.js-Integration) +* [Socket.IO](https://github.com/ivaynberg/select2/wiki/Socket.IO-Integration) +* [PHP](https://github.com/ivaynberg/select2/wiki/PHP-Example) +* [.Net MVC] (https://github.com/ivaynberg/select2/wiki/.Net-MVC-Example) + +Internationalization (i18n) +--------------------------- + +Select2 supports multiple languages by simply including the right language JS +file (`select2_locale_it.js`, `select2_locale_nl.js`, etc.) after `select2.js`. + +Missing a language? Just copy `select2_locale_en.js.template`, translate +it, and make a pull request back to Select2 here on GitHub. + +Documentation +------------- + +The documentation for Select2 is available [through GitHub Pages](https://ivaynberg.github.io/select2/) and is located within this repository in the [`gh-pages` branch](https://github.com/ivaynberg/select2/tree/gh-pages). + +Community +--------- + +### Bug tracker + +Have a bug? Please create an issue here on GitHub! + +https://github.com/ivaynberg/select2/issues + +### Mailing list + +Have a question? Ask on our mailing list! + +select2@googlegroups.com + +https://groups.google.com/d/forum/select2 + +### IRC channel + +Need help implementing Select2 in your project? Ask in our IRC channel! + +**Network:** [Freenode](https://freenode.net/) (`chat.freenode.net`) + +**Channel:** `#select2` + +**Web access:** https://webchat.freenode.net/?channels=select2 + +Copyright and license +--------------------- + +Copyright 2012 Igor Vaynberg + +This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU +General Public License version 2 (the "GPL License"). You may choose either license to govern your +use of this software only upon the condition that you accept all of the terms of either the Apache +License or the GPL License. + +You may obtain a copy of the Apache License and the GPL License in the LICENSE file, or at: + +http://www.apache.org/licenses/LICENSE-2.0 +http://www.gnu.org/licenses/gpl-2.0.html + +Unless required by applicable law or agreed to in writing, software distributed under the Apache License +or the GPL License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +either express or implied. See the Apache License and the GPL License for the specific language governing +permissions and limitations under the Apache License and the GPL License. diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/release.sh b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/release.sh new file mode 100644 index 000000000..3b63f9662 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/release.sh @@ -0,0 +1,79 @@ +#!/bin/bash +set -e + +echo -n "Enter the version for this release: " + +read ver + +if [ ! $ver ]; then + echo "Invalid version." + exit +fi + +name="select2" +js="$name.js" +mini="$name.min.js" +css="$name.css" +release="$name-$ver" +tag="$ver" +branch="build-$ver" +curbranch=`git branch | grep "*" | sed "s/* //"` +timestamp=$(date) +tokens="s/@@ver@@/$ver/g;s/\@@timestamp@@/$timestamp/g" +remote="origin" + +echo "Pulling from origin" + +git pull + +echo "Updating Version Identifiers" + +sed -E -e "s/\"version\": \"([0-9\.]+)\",/\"version\": \"$ver\",/g" -i -- bower.json select2.jquery.json component.json composer.json package.json + +git add bower.json +git add select2.jquery.json +git add component.json +git add composer.json +git add package.json + +git commit -m "modified version identifiers in descriptors for release $ver" +git push + +git branch "$branch" +git checkout "$branch" + +echo "Tokenizing..." + +find . -name "$js" | xargs -I{} sed -e "$tokens" -i -- {} +find . -name "$css" | xargs -I{} sed -e "$tokens" -i -- {} + +sed -e "s/latest/$ver/g" -i -- bower.json + +git add "$js" +git add "$css" + +echo "Minifying..." + +echo "/*" > "$mini" +cat LICENSE | sed "$tokens" >> "$mini" +echo "*/" >> "$mini" + +curl -s \ + --data-urlencode "js_code@$js" \ + http://marijnhaverbeke.nl/uglifyjs \ + >> "$mini" + +git add "$mini" + +git commit -m "release $ver" + +echo "Tagging..." +git tag -a "$tag" -m "tagged version $ver" +git push "$remote" --tags + +echo "Cleaning Up..." + +git checkout "$curbranch" +git branch -D "$branch" + +echo "Done" diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2-bootstrap.css b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2-bootstrap.css new file mode 100644 index 000000000..3b83f0a22 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2-bootstrap.css @@ -0,0 +1,87 @@ +.form-control .select2-choice { + border: 0; + border-radius: 2px; +} + +.form-control .select2-choice .select2-arrow { + border-radius: 0 2px 2px 0; +} + +.form-control.select2-container { + height: auto !important; + padding: 0; +} + +.form-control.select2-container.select2-dropdown-open { + border-color: #5897FB; + border-radius: 3px 3px 0 0; +} + +.form-control .select2-container.select2-dropdown-open .select2-choices { + border-radius: 3px 3px 0 0; +} + +.form-control.select2-container .select2-choices { + border: 0 !important; + border-radius: 3px; +} + +.control-group.warning .select2-container .select2-choice, +.control-group.warning .select2-container .select2-choices, +.control-group.warning .select2-container-active .select2-choice, +.control-group.warning .select2-container-active .select2-choices, +.control-group.warning .select2-dropdown-open.select2-drop-above .select2-choice, +.control-group.warning .select2-dropdown-open.select2-drop-above .select2-choices, +.control-group.warning .select2-container-multi.select2-container-active .select2-choices { + border: 1px solid #C09853 !important; +} + +.control-group.warning .select2-container .select2-choice div { + border-left: 1px solid #C09853 !important; + background: #FCF8E3 !important; +} + +.control-group.error .select2-container .select2-choice, +.control-group.error .select2-container .select2-choices, +.control-group.error .select2-container-active .select2-choice, +.control-group.error .select2-container-active .select2-choices, +.control-group.error .select2-dropdown-open.select2-drop-above .select2-choice, +.control-group.error .select2-dropdown-open.select2-drop-above .select2-choices, +.control-group.error .select2-container-multi.select2-container-active .select2-choices { + border: 1px solid #B94A48 !important; +} + +.control-group.error .select2-container .select2-choice div { + border-left: 1px solid #B94A48 !important; + background: #F2DEDE !important; +} + +.control-group.info .select2-container .select2-choice, +.control-group.info .select2-container .select2-choices, +.control-group.info .select2-container-active .select2-choice, +.control-group.info .select2-container-active .select2-choices, +.control-group.info .select2-dropdown-open.select2-drop-above .select2-choice, +.control-group.info .select2-dropdown-open.select2-drop-above .select2-choices, +.control-group.info .select2-container-multi.select2-container-active .select2-choices { + border: 1px solid #3A87AD !important; +} + +.control-group.info .select2-container .select2-choice div { + border-left: 1px solid #3A87AD !important; + background: #D9EDF7 !important; +} + +.control-group.success .select2-container .select2-choice, +.control-group.success .select2-container .select2-choices, +.control-group.success .select2-container-active .select2-choice, +.control-group.success .select2-container-active .select2-choices, +.control-group.success .select2-dropdown-open.select2-drop-above .select2-choice, +.control-group.success .select2-dropdown-open.select2-drop-above .select2-choices, +.control-group.success .select2-container-multi.select2-container-active .select2-choices { + border: 1px solid #468847 !important; +} + +.control-group.success .select2-container .select2-choice div { + border-left: 1px solid #468847 !important; + background: #DFF0D8 !important; +} diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2-spinner.gif b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2-spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..5b33f7e54f4e55b6b8774d86d96895db9af044b4 GIT binary patch literal 1849 zcma*odr(tX9tZI2z31lM+(&YVk%mZ}5P~KlG2s=WSbGzm0!x7^P##Mnh7t-jP!X0Q zk_SQ}Po-L1tlDK;6l?(>v)e5ZBQx4|Y-Q?nr@Px3?9h(3ZWr3^tj=`TP57gKr87N$ zp2wWee1GRRCwo_xahnw)5cxNPJbCg2L6DV|6`#+yw6v6!mDS$f9-JvFD^n;GQ&UrZ zzh5jCkByB101O60U0q#p_1BM>Cv-vP?&s4@g_((4_1L=L$(a91)0=J91Gas#R{McE znYG^9*0A5YZ>#;~+Wkn(W5B0^yELIYLP!K}mB~<)AM@1&nqekynuaEGqPrzoH|KodRXJy)%+w_fu3nE5>@Bd_b zqC$EQ;{c`T&?EsNO|igL9gC7Ygxv?aQUEXMq?~>wg{EyW;VcJ37CUF#HjrT=KQO_* zS>M9yydXk18D(+QDJ1>r);Lav_uYKp$T?4vr{Q$lTo&pKv^?(>L-)G2*lwH!Ah7k? z7oH<8h-(KTKt5V6$8gF)C7Io&P5=SjTh)=zV=E2EUhQZP##L8S{d%UK>>+y82>+FV+#^BzW7u3F)Bb>=lYQ%%j`F>ASe zo*cw@V#u6T`A2He;70mR(V&iV&-7{qP~=SRf&jm9-T{*ZeZ}$rd0#6c&fLG^xJcf5 z+p<`wJYgW+_s*V{uI$nMB;%8`S_3>PfGOj3Rq}@Cx^+j?rk92fANSFDBYnOqQ>Vdj z)(|$AhP4t&Lb=Gvo2#3Gl%9<=Gv`Mz?Po@P4iLF!x}GUWJICDlFk-hS^Whyh7x~VH z@0vD1>HYD4&e+~yzS*-sFR{9`{QEEZO1zg7>R&7cHts-6j!xHVdA8eI+ZlVzd%`es zJT@$#GX(gvCJ1oJN%yLBK}{V=V;seo;!w|Yte!W1%5qLNFWqvZW>h&IiH+oPT=b@E zPhGzv5=(Un*X>v`>%8h_nj^NdYcE6NHS_ifkCV$*D)Tqrbu`s;<=t<4 zAHNqNV?6(g<1PY-w@#I-WYFViz?9TrkMr)u0g`O`u|>T;k|2sV*YF^punvT;$SuTy{j3Gv)yqD!R_CF>yR)MzmmYS5v+~R zXAdD%ng9?df;wd8GxR#%3O+gz};Vo;)sK%Bj-q>Oq%R7JU-KD?vYu>#2UjaDo z&8$>5xW~?KPD_#XFToU1hIb*VOMidUr6iYiO0N|i-7s`T8!cFT`rN!^1Pt78J93i6 z5HI1wIM$94m{3SLDvISDe6$ZG1;eq_D9RTaaC>=cO{@Bs>$IlPCPJJ$h$)-3vzNUQ6OsN#_zWxey!_9%hxwH2_dEJi=yY|1c7nDm2_Lm!Cof8-R_+9UkS zcBE(o47yE)oMR(Q=dp1a2wTX5KvvGyLqlWTa7V&!A*|w|)ax~1_~aJ0=_Lilg*0iQk7#ZD EAHN$8j{pDw literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2.css b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2.css new file mode 100644 index 000000000..2d07a0343 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2.css @@ -0,0 +1,704 @@ +/* +Version: 3.5.2 Timestamp: Sat Nov 1 14:43:36 EDT 2014 +*/ +.select2-container { + margin: 0; + position: relative; + display: inline-block; + /* inline-block for ie7 */ + zoom: 1; + *display: inline; + vertical-align: middle; +} + +.select2-container, +.select2-drop, +.select2-search, +.select2-search input { + /* + Force border-box so that % widths fit the parent + container without overlap because of margin/padding. + More Info : http://www.quirksmode.org/css/box.html + */ + -webkit-box-sizing: border-box; /* webkit */ + -moz-box-sizing: border-box; /* firefox */ + box-sizing: border-box; /* css3 */ +} + +.select2-container .select2-choice { + display: block; + height: 26px; + padding: 0 0 0 8px; + overflow: hidden; + position: relative; + + border: 1px solid #aaa; + white-space: nowrap; + line-height: 26px; + color: #444; + text-decoration: none; + + border-radius: 4px; + + background-clip: padding-box; + + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + background-color: #fff; + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff)); + background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%); + background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0); + background-image: linear-gradient(to top, #eee 0%, #fff 50%); +} + +html[dir="rtl"] .select2-container .select2-choice { + padding: 0 8px 0 0; +} + +.select2-container.select2-drop-above .select2-choice { + border-bottom-color: #aaa; + + border-radius: 0 0 4px 4px; + + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff)); + background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 90%); + background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 90%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0); + background-image: linear-gradient(to bottom, #eee 0%, #fff 90%); +} + +.select2-container.select2-allowclear .select2-choice .select2-chosen { + margin-right: 42px; +} + +.select2-container .select2-choice > .select2-chosen { + margin-right: 26px; + display: block; + overflow: hidden; + + white-space: nowrap; + + text-overflow: ellipsis; + float: none; + width: auto; +} + +html[dir="rtl"] .select2-container .select2-choice > .select2-chosen { + margin-left: 26px; + margin-right: 0; +} + +.select2-container .select2-choice abbr { + display: none; + width: 12px; + height: 12px; + position: absolute; + right: 24px; + top: 8px; + + font-size: 1px; + text-decoration: none; + + border: 0; + background: url('select2.png') right top no-repeat; + cursor: pointer; + outline: 0; +} + +.select2-container.select2-allowclear .select2-choice abbr { + display: inline-block; +} + +.select2-container .select2-choice abbr:hover { + background-position: right -11px; + cursor: pointer; +} + +.select2-drop-mask { + border: 0; + margin: 0; + padding: 0; + position: fixed; + left: 0; + top: 0; + min-height: 100%; + min-width: 100%; + height: auto; + width: auto; + opacity: 0; + z-index: 9998; + /* styles required for IE to work */ + background-color: #fff; + filter: alpha(opacity=0); +} + +.select2-drop { + width: 100%; + margin-top: -1px; + position: absolute; + z-index: 9999; + top: 100%; + + background: #fff; + color: #000; + border: 1px solid #aaa; + border-top: 0; + + border-radius: 0 0 4px 4px; + + -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15); + box-shadow: 0 4px 5px rgba(0, 0, 0, .15); +} + +.select2-drop.select2-drop-above { + margin-top: 1px; + border-top: 1px solid #aaa; + border-bottom: 0; + + border-radius: 4px 4px 0 0; + + -webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); + box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); +} + +.select2-drop-active { + border: 1px solid #5897fb; + border-top: none; +} + +.select2-drop.select2-drop-above.select2-drop-active { + border-top: 1px solid #5897fb; +} + +.select2-drop-auto-width { + border-top: 1px solid #aaa; + width: auto; +} + +.select2-drop-auto-width .select2-search { + padding-top: 4px; +} + +.select2-container .select2-choice .select2-arrow { + display: inline-block; + width: 18px; + height: 100%; + position: absolute; + right: 0; + top: 0; + + border-left: 1px solid #aaa; + border-radius: 0 4px 4px 0; + + background-clip: padding-box; + + background: #ccc; + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee)); + background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%); + background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0); + background-image: linear-gradient(to top, #ccc 0%, #eee 60%); +} + +html[dir="rtl"] .select2-container .select2-choice .select2-arrow { + left: 0; + right: auto; + + border-left: none; + border-right: 1px solid #aaa; + border-radius: 4px 0 0 4px; +} + +.select2-container .select2-choice .select2-arrow b { + display: block; + width: 100%; + height: 100%; + background: url('select2.png') no-repeat 0 1px; +} + +html[dir="rtl"] .select2-container .select2-choice .select2-arrow b { + background-position: 2px 1px; +} + +.select2-search { + display: inline-block; + width: 100%; + min-height: 26px; + margin: 0; + padding-left: 4px; + padding-right: 4px; + + position: relative; + z-index: 10000; + + white-space: nowrap; +} + +.select2-search input { + width: 100%; + height: auto !important; + min-height: 26px; + padding: 4px 20px 4px 5px; + margin: 0; + + outline: 0; + font-family: sans-serif; + font-size: 1em; + + border: 1px solid #aaa; + border-radius: 0; + + -webkit-box-shadow: none; + box-shadow: none; + + background: #fff url('select2.png') no-repeat 100% -22px; + background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee)); + background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%); + background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%); + background: url('select2.png') no-repeat 100% -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0; +} + +html[dir="rtl"] .select2-search input { + padding: 4px 5px 4px 20px; + + background: #fff url('select2.png') no-repeat -37px -22px; + background: url('select2.png') no-repeat -37px -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee)); + background: url('select2.png') no-repeat -37px -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%); + background: url('select2.png') no-repeat -37px -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%); + background: url('select2.png') no-repeat -37px -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0; +} + +.select2-drop.select2-drop-above .select2-search input { + margin-top: 4px; +} + +.select2-search input.select2-active { + background: #fff url('select2-spinner.gif') no-repeat 100%; + background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee)); + background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%); + background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%); + background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0; +} + +.select2-container-active .select2-choice, +.select2-container-active .select2-choices { + border: 1px solid #5897fb; + outline: none; + + -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3); + box-shadow: 0 0 5px rgba(0, 0, 0, .3); +} + +.select2-dropdown-open .select2-choice { + border-bottom-color: transparent; + -webkit-box-shadow: 0 1px 0 #fff inset; + box-shadow: 0 1px 0 #fff inset; + + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + + background-color: #eee; + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee)); + background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%); + background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0); + background-image: linear-gradient(to top, #fff 0%, #eee 50%); +} + +.select2-dropdown-open.select2-drop-above .select2-choice, +.select2-dropdown-open.select2-drop-above .select2-choices { + border: 1px solid #5897fb; + border-top-color: transparent; + + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee)); + background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%); + background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0); + background-image: linear-gradient(to bottom, #fff 0%, #eee 50%); +} + +.select2-dropdown-open .select2-choice .select2-arrow { + background: transparent; + border-left: none; + filter: none; +} +html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow { + border-right: none; +} + +.select2-dropdown-open .select2-choice .select2-arrow b { + background-position: -18px 1px; +} + +html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow b { + background-position: -16px 1px; +} + +.select2-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +/* results */ +.select2-results { + max-height: 200px; + padding: 0 0 0 4px; + margin: 4px 4px 4px 0; + position: relative; + overflow-x: hidden; + overflow-y: auto; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +html[dir="rtl"] .select2-results { + padding: 0 4px 0 0; + margin: 4px 0 4px 4px; +} + +.select2-results ul.select2-result-sub { + margin: 0; + padding-left: 0; +} + +.select2-results li { + list-style: none; + display: list-item; + background-image: none; +} + +.select2-results li.select2-result-with-children > .select2-result-label { + font-weight: bold; +} + +.select2-results .select2-result-label { + padding: 3px 7px 4px; + margin: 0; + cursor: pointer; + + min-height: 1em; + + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.select2-results-dept-1 .select2-result-label { padding-left: 20px } +.select2-results-dept-2 .select2-result-label { padding-left: 40px } +.select2-results-dept-3 .select2-result-label { padding-left: 60px } +.select2-results-dept-4 .select2-result-label { padding-left: 80px } +.select2-results-dept-5 .select2-result-label { padding-left: 100px } +.select2-results-dept-6 .select2-result-label { padding-left: 110px } +.select2-results-dept-7 .select2-result-label { padding-left: 120px } + +.select2-results .select2-highlighted { + background: #3875d7; + color: #fff; +} + +.select2-results li em { + background: #feffde; + font-style: normal; +} + +.select2-results .select2-highlighted em { + background: transparent; +} + +.select2-results .select2-highlighted ul { + background: #fff; + color: #000; +} + +.select2-results .select2-no-results, +.select2-results .select2-searching, +.select2-results .select2-ajax-error, +.select2-results .select2-selection-limit { + background: #f4f4f4; + display: list-item; + padding-left: 5px; +} + +/* +disabled look for disabled choices in the results dropdown +*/ +.select2-results .select2-disabled.select2-highlighted { + color: #666; + background: #f4f4f4; + display: list-item; + cursor: default; +} +.select2-results .select2-disabled { + background: #f4f4f4; + display: list-item; + cursor: default; +} + +.select2-results .select2-selected { + display: none; +} + +.select2-more-results.select2-active { + background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%; +} + +.select2-results .select2-ajax-error { + background: rgba(255, 50, 50, .2); +} + +.select2-more-results { + background: #f4f4f4; + display: list-item; +} + +/* disabled styles */ + +.select2-container.select2-container-disabled .select2-choice { + background-color: #f4f4f4; + background-image: none; + border: 1px solid #ddd; + cursor: default; +} + +.select2-container.select2-container-disabled .select2-choice .select2-arrow { + background-color: #f4f4f4; + background-image: none; + border-left: 0; +} + +.select2-container.select2-container-disabled .select2-choice abbr { + display: none; +} + + +/* multiselect */ + +.select2-container-multi .select2-choices { + height: auto !important; + height: 1%; + margin: 0; + padding: 0 5px 0 0; + position: relative; + + border: 1px solid #aaa; + cursor: text; + overflow: hidden; + + background-color: #fff; + background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff)); + background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%); + background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%); + background-image: linear-gradient(to bottom, #eee 1%, #fff 15%); +} + +html[dir="rtl"] .select2-container-multi .select2-choices { + padding: 0 0 0 5px; +} + +.select2-locked { + padding: 3px 5px 3px 5px !important; +} + +.select2-container-multi .select2-choices { + min-height: 26px; +} + +.select2-container-multi.select2-container-active .select2-choices { + border: 1px solid #5897fb; + outline: none; + + -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3); + box-shadow: 0 0 5px rgba(0, 0, 0, .3); +} +.select2-container-multi .select2-choices li { + float: left; + list-style: none; +} +html[dir="rtl"] .select2-container-multi .select2-choices li +{ + float: right; +} +.select2-container-multi .select2-choices .select2-search-field { + margin: 0; + padding: 0; + white-space: nowrap; +} + +.select2-container-multi .select2-choices .select2-search-field input { + padding: 5px; + margin: 1px 0; + + font-family: sans-serif; + font-size: 100%; + color: #666; + outline: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + background: transparent !important; +} + +.select2-container-multi .select2-choices .select2-search-field input.select2-active { + background: #fff url('select2-spinner.gif') no-repeat 100% !important; +} + +.select2-default { + color: #999 !important; +} + +.select2-container-multi .select2-choices .select2-search-choice { + padding: 3px 5px 3px 18px; + margin: 3px 0 3px 5px; + position: relative; + + line-height: 13px; + color: #333; + cursor: default; + border: 1px solid #aaaaaa; + + border-radius: 3px; + + -webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05); + box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05); + + background-clip: padding-box; + + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + background-color: #e4e4e4; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0); + background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee)); + background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); + background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); + background-image: linear-gradient(to bottom, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); +} +html[dir="rtl"] .select2-container-multi .select2-choices .select2-search-choice +{ + margin: 3px 5px 3px 0; + padding: 3px 18px 3px 5px; +} +.select2-container-multi .select2-choices .select2-search-choice .select2-chosen { + cursor: default; +} +.select2-container-multi .select2-choices .select2-search-choice-focus { + background: #d4d4d4; +} + +.select2-search-choice-close { + display: block; + width: 12px; + height: 13px; + position: absolute; + right: 3px; + top: 4px; + + font-size: 1px; + outline: none; + background: url('select2.png') right top no-repeat; +} +html[dir="rtl"] .select2-search-choice-close { + right: auto; + left: 3px; +} + +.select2-container-multi .select2-search-choice-close { + left: 3px; +} + +html[dir="rtl"] .select2-container-multi .select2-search-choice-close { + left: auto; + right: 2px; +} + +.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover { + background-position: right -11px; +} +.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close { + background-position: right -11px; +} + +/* disabled styles */ +.select2-container-multi.select2-container-disabled .select2-choices { + background-color: #f4f4f4; + background-image: none; + border: 1px solid #ddd; + cursor: default; +} + +.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice { + padding: 3px 5px 3px 5px; + border: 1px solid #ddd; + background-image: none; + background-color: #f4f4f4; +} + +.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close { display: none; + background: none; +} +/* end multiselect */ + + +.select2-result-selectable .select2-match, +.select2-result-unselectable .select2-match { + text-decoration: underline; +} + +.select2-offscreen, .select2-offscreen:focus { + clip: rect(0 0 0 0) !important; + width: 1px !important; + height: 1px !important; + border: 0 !important; + margin: 0 !important; + padding: 0 !important; + overflow: hidden !important; + position: absolute !important; + outline: 0 !important; + left: 0px !important; + top: 0px !important; +} + +.select2-display-none { + display: none; +} + +.select2-measure-scrollbar { + position: absolute; + top: -10000px; + left: -10000px; + width: 100px; + height: 100px; + overflow: scroll; +} + +/* Retina-ize icons */ + +@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 2dppx) { + .select2-search input, + .select2-search-choice-close, + .select2-container .select2-choice abbr, + .select2-container .select2-choice .select2-arrow b { + background-image: url('select2x2.png') !important; + background-repeat: no-repeat !important; + background-size: 60px 40px !important; + } + + .select2-search input { + background-position: 100% -21px !important; + } +} diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2.jquery.json b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2.jquery.json new file mode 100644 index 000000000..b005d8a20 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2.jquery.json @@ -0,0 +1,36 @@ +{ + "name": "select2", + "title": "Select2", + "description": "Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.", + "keywords": [ + "select", + "autocomplete", + "typeahead", + "dropdown", + "multiselect", + "tag", + "tagging" + ], + "version": "3.5.2", + "author": { + "name": "Igor Vaynberg", + "url": "https://github.com/ivaynberg" + }, + "licenses": [ + { + "type": "Apache", + "url": "http://www.apache.org/licenses/LICENSE-2.0" + }, + { + "type": "GPL v2", + "url": "http://www.gnu.org/licenses/gpl-2.0.html" + } + ], + "bugs": "https://github.com/ivaynberg/select2/issues", + "homepage": "http://ivaynberg.github.com/select2", + "docs": "http://ivaynberg.github.com/select2/", + "download": "https://github.com/ivaynberg/select2/tags", + "dependencies": { + "jquery": ">=1.7.1" + } +} diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2.js new file mode 100644 index 000000000..7590b8229 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2.js @@ -0,0 +1,3541 @@ +/* +Copyright 2012 Igor Vaynberg + +Version: 3.5.2 Timestamp: Sat Nov 1 14:43:36 EDT 2014 + +This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU +General Public License version 2 (the "GPL License"). You may choose either license to govern your +use of this software only upon the condition that you accept all of the terms of either the Apache +License or the GPL License. + +You may obtain a copy of the Apache License and the GPL License at: + + http://www.apache.org/licenses/LICENSE-2.0 + http://www.gnu.org/licenses/gpl-2.0.html + +Unless required by applicable law or agreed to in writing, software distributed under the +Apache License or the GPL License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the Apache License and the GPL License for +the specific language governing permissions and limitations under the Apache License and the GPL License. +*/ +(function ($) { + if(typeof $.fn.each2 == "undefined") { + $.extend($.fn, { + /* + * 4-10 times faster .each replacement + * use it carefully, as it overrides jQuery context of element on each iteration + */ + each2 : function (c) { + var j = $([0]), i = -1, l = this.length; + while ( + ++i < l + && (j.context = j[0] = this[i]) + && c.call(j[0], i, j) !== false //"this"=DOM, i=index, j=jQuery object + ); + return this; + } + }); + } +})(jQuery); + +(function ($, undefined) { + "use strict"; + /*global document, window, jQuery, console */ + + if (window.Select2 !== undefined) { + return; + } + + var AbstractSelect2, SingleSelect2, MultiSelect2, nextUid, sizer, + lastMousePosition={x:0,y:0}, $document, scrollBarDimensions, + + KEY = { + TAB: 9, + ENTER: 13, + ESC: 27, + SPACE: 32, + LEFT: 37, + UP: 38, + RIGHT: 39, + DOWN: 40, + SHIFT: 16, + CTRL: 17, + ALT: 18, + PAGE_UP: 33, + PAGE_DOWN: 34, + HOME: 36, + END: 35, + BACKSPACE: 8, + DELETE: 46, + isArrow: function (k) { + k = k.which ? k.which : k; + switch (k) { + case KEY.LEFT: + case KEY.RIGHT: + case KEY.UP: + case KEY.DOWN: + return true; + } + return false; + }, + isControl: function (e) { + var k = e.which; + switch (k) { + case KEY.SHIFT: + case KEY.CTRL: + case KEY.ALT: + return true; + } + + if (e.metaKey) return true; + + return false; + }, + isFunctionKey: function (k) { + k = k.which ? k.which : k; + return k >= 112 && k <= 123; + } + }, + MEASURE_SCROLLBAR_TEMPLATE = "
", + + DIACRITICS = {"\u24B6":"A","\uFF21":"A","\u00C0":"A","\u00C1":"A","\u00C2":"A","\u1EA6":"A","\u1EA4":"A","\u1EAA":"A","\u1EA8":"A","\u00C3":"A","\u0100":"A","\u0102":"A","\u1EB0":"A","\u1EAE":"A","\u1EB4":"A","\u1EB2":"A","\u0226":"A","\u01E0":"A","\u00C4":"A","\u01DE":"A","\u1EA2":"A","\u00C5":"A","\u01FA":"A","\u01CD":"A","\u0200":"A","\u0202":"A","\u1EA0":"A","\u1EAC":"A","\u1EB6":"A","\u1E00":"A","\u0104":"A","\u023A":"A","\u2C6F":"A","\uA732":"AA","\u00C6":"AE","\u01FC":"AE","\u01E2":"AE","\uA734":"AO","\uA736":"AU","\uA738":"AV","\uA73A":"AV","\uA73C":"AY","\u24B7":"B","\uFF22":"B","\u1E02":"B","\u1E04":"B","\u1E06":"B","\u0243":"B","\u0182":"B","\u0181":"B","\u24B8":"C","\uFF23":"C","\u0106":"C","\u0108":"C","\u010A":"C","\u010C":"C","\u00C7":"C","\u1E08":"C","\u0187":"C","\u023B":"C","\uA73E":"C","\u24B9":"D","\uFF24":"D","\u1E0A":"D","\u010E":"D","\u1E0C":"D","\u1E10":"D","\u1E12":"D","\u1E0E":"D","\u0110":"D","\u018B":"D","\u018A":"D","\u0189":"D","\uA779":"D","\u01F1":"DZ","\u01C4":"DZ","\u01F2":"Dz","\u01C5":"Dz","\u24BA":"E","\uFF25":"E","\u00C8":"E","\u00C9":"E","\u00CA":"E","\u1EC0":"E","\u1EBE":"E","\u1EC4":"E","\u1EC2":"E","\u1EBC":"E","\u0112":"E","\u1E14":"E","\u1E16":"E","\u0114":"E","\u0116":"E","\u00CB":"E","\u1EBA":"E","\u011A":"E","\u0204":"E","\u0206":"E","\u1EB8":"E","\u1EC6":"E","\u0228":"E","\u1E1C":"E","\u0118":"E","\u1E18":"E","\u1E1A":"E","\u0190":"E","\u018E":"E","\u24BB":"F","\uFF26":"F","\u1E1E":"F","\u0191":"F","\uA77B":"F","\u24BC":"G","\uFF27":"G","\u01F4":"G","\u011C":"G","\u1E20":"G","\u011E":"G","\u0120":"G","\u01E6":"G","\u0122":"G","\u01E4":"G","\u0193":"G","\uA7A0":"G","\uA77D":"G","\uA77E":"G","\u24BD":"H","\uFF28":"H","\u0124":"H","\u1E22":"H","\u1E26":"H","\u021E":"H","\u1E24":"H","\u1E28":"H","\u1E2A":"H","\u0126":"H","\u2C67":"H","\u2C75":"H","\uA78D":"H","\u24BE":"I","\uFF29":"I","\u00CC":"I","\u00CD":"I","\u00CE":"I","\u0128":"I","\u012A":"I","\u012C":"I","\u0130":"I","\u00CF":"I","\u1E2E":"I","\u1EC8":"I","\u01CF":"I","\u0208":"I","\u020A":"I","\u1ECA":"I","\u012E":"I","\u1E2C":"I","\u0197":"I","\u24BF":"J","\uFF2A":"J","\u0134":"J","\u0248":"J","\u24C0":"K","\uFF2B":"K","\u1E30":"K","\u01E8":"K","\u1E32":"K","\u0136":"K","\u1E34":"K","\u0198":"K","\u2C69":"K","\uA740":"K","\uA742":"K","\uA744":"K","\uA7A2":"K","\u24C1":"L","\uFF2C":"L","\u013F":"L","\u0139":"L","\u013D":"L","\u1E36":"L","\u1E38":"L","\u013B":"L","\u1E3C":"L","\u1E3A":"L","\u0141":"L","\u023D":"L","\u2C62":"L","\u2C60":"L","\uA748":"L","\uA746":"L","\uA780":"L","\u01C7":"LJ","\u01C8":"Lj","\u24C2":"M","\uFF2D":"M","\u1E3E":"M","\u1E40":"M","\u1E42":"M","\u2C6E":"M","\u019C":"M","\u24C3":"N","\uFF2E":"N","\u01F8":"N","\u0143":"N","\u00D1":"N","\u1E44":"N","\u0147":"N","\u1E46":"N","\u0145":"N","\u1E4A":"N","\u1E48":"N","\u0220":"N","\u019D":"N","\uA790":"N","\uA7A4":"N","\u01CA":"NJ","\u01CB":"Nj","\u24C4":"O","\uFF2F":"O","\u00D2":"O","\u00D3":"O","\u00D4":"O","\u1ED2":"O","\u1ED0":"O","\u1ED6":"O","\u1ED4":"O","\u00D5":"O","\u1E4C":"O","\u022C":"O","\u1E4E":"O","\u014C":"O","\u1E50":"O","\u1E52":"O","\u014E":"O","\u022E":"O","\u0230":"O","\u00D6":"O","\u022A":"O","\u1ECE":"O","\u0150":"O","\u01D1":"O","\u020C":"O","\u020E":"O","\u01A0":"O","\u1EDC":"O","\u1EDA":"O","\u1EE0":"O","\u1EDE":"O","\u1EE2":"O","\u1ECC":"O","\u1ED8":"O","\u01EA":"O","\u01EC":"O","\u00D8":"O","\u01FE":"O","\u0186":"O","\u019F":"O","\uA74A":"O","\uA74C":"O","\u01A2":"OI","\uA74E":"OO","\u0222":"OU","\u24C5":"P","\uFF30":"P","\u1E54":"P","\u1E56":"P","\u01A4":"P","\u2C63":"P","\uA750":"P","\uA752":"P","\uA754":"P","\u24C6":"Q","\uFF31":"Q","\uA756":"Q","\uA758":"Q","\u024A":"Q","\u24C7":"R","\uFF32":"R","\u0154":"R","\u1E58":"R","\u0158":"R","\u0210":"R","\u0212":"R","\u1E5A":"R","\u1E5C":"R","\u0156":"R","\u1E5E":"R","\u024C":"R","\u2C64":"R","\uA75A":"R","\uA7A6":"R","\uA782":"R","\u24C8":"S","\uFF33":"S","\u1E9E":"S","\u015A":"S","\u1E64":"S","\u015C":"S","\u1E60":"S","\u0160":"S","\u1E66":"S","\u1E62":"S","\u1E68":"S","\u0218":"S","\u015E":"S","\u2C7E":"S","\uA7A8":"S","\uA784":"S","\u24C9":"T","\uFF34":"T","\u1E6A":"T","\u0164":"T","\u1E6C":"T","\u021A":"T","\u0162":"T","\u1E70":"T","\u1E6E":"T","\u0166":"T","\u01AC":"T","\u01AE":"T","\u023E":"T","\uA786":"T","\uA728":"TZ","\u24CA":"U","\uFF35":"U","\u00D9":"U","\u00DA":"U","\u00DB":"U","\u0168":"U","\u1E78":"U","\u016A":"U","\u1E7A":"U","\u016C":"U","\u00DC":"U","\u01DB":"U","\u01D7":"U","\u01D5":"U","\u01D9":"U","\u1EE6":"U","\u016E":"U","\u0170":"U","\u01D3":"U","\u0214":"U","\u0216":"U","\u01AF":"U","\u1EEA":"U","\u1EE8":"U","\u1EEE":"U","\u1EEC":"U","\u1EF0":"U","\u1EE4":"U","\u1E72":"U","\u0172":"U","\u1E76":"U","\u1E74":"U","\u0244":"U","\u24CB":"V","\uFF36":"V","\u1E7C":"V","\u1E7E":"V","\u01B2":"V","\uA75E":"V","\u0245":"V","\uA760":"VY","\u24CC":"W","\uFF37":"W","\u1E80":"W","\u1E82":"W","\u0174":"W","\u1E86":"W","\u1E84":"W","\u1E88":"W","\u2C72":"W","\u24CD":"X","\uFF38":"X","\u1E8A":"X","\u1E8C":"X","\u24CE":"Y","\uFF39":"Y","\u1EF2":"Y","\u00DD":"Y","\u0176":"Y","\u1EF8":"Y","\u0232":"Y","\u1E8E":"Y","\u0178":"Y","\u1EF6":"Y","\u1EF4":"Y","\u01B3":"Y","\u024E":"Y","\u1EFE":"Y","\u24CF":"Z","\uFF3A":"Z","\u0179":"Z","\u1E90":"Z","\u017B":"Z","\u017D":"Z","\u1E92":"Z","\u1E94":"Z","\u01B5":"Z","\u0224":"Z","\u2C7F":"Z","\u2C6B":"Z","\uA762":"Z","\u24D0":"a","\uFF41":"a","\u1E9A":"a","\u00E0":"a","\u00E1":"a","\u00E2":"a","\u1EA7":"a","\u1EA5":"a","\u1EAB":"a","\u1EA9":"a","\u00E3":"a","\u0101":"a","\u0103":"a","\u1EB1":"a","\u1EAF":"a","\u1EB5":"a","\u1EB3":"a","\u0227":"a","\u01E1":"a","\u00E4":"a","\u01DF":"a","\u1EA3":"a","\u00E5":"a","\u01FB":"a","\u01CE":"a","\u0201":"a","\u0203":"a","\u1EA1":"a","\u1EAD":"a","\u1EB7":"a","\u1E01":"a","\u0105":"a","\u2C65":"a","\u0250":"a","\uA733":"aa","\u00E6":"ae","\u01FD":"ae","\u01E3":"ae","\uA735":"ao","\uA737":"au","\uA739":"av","\uA73B":"av","\uA73D":"ay","\u24D1":"b","\uFF42":"b","\u1E03":"b","\u1E05":"b","\u1E07":"b","\u0180":"b","\u0183":"b","\u0253":"b","\u24D2":"c","\uFF43":"c","\u0107":"c","\u0109":"c","\u010B":"c","\u010D":"c","\u00E7":"c","\u1E09":"c","\u0188":"c","\u023C":"c","\uA73F":"c","\u2184":"c","\u24D3":"d","\uFF44":"d","\u1E0B":"d","\u010F":"d","\u1E0D":"d","\u1E11":"d","\u1E13":"d","\u1E0F":"d","\u0111":"d","\u018C":"d","\u0256":"d","\u0257":"d","\uA77A":"d","\u01F3":"dz","\u01C6":"dz","\u24D4":"e","\uFF45":"e","\u00E8":"e","\u00E9":"e","\u00EA":"e","\u1EC1":"e","\u1EBF":"e","\u1EC5":"e","\u1EC3":"e","\u1EBD":"e","\u0113":"e","\u1E15":"e","\u1E17":"e","\u0115":"e","\u0117":"e","\u00EB":"e","\u1EBB":"e","\u011B":"e","\u0205":"e","\u0207":"e","\u1EB9":"e","\u1EC7":"e","\u0229":"e","\u1E1D":"e","\u0119":"e","\u1E19":"e","\u1E1B":"e","\u0247":"e","\u025B":"e","\u01DD":"e","\u24D5":"f","\uFF46":"f","\u1E1F":"f","\u0192":"f","\uA77C":"f","\u24D6":"g","\uFF47":"g","\u01F5":"g","\u011D":"g","\u1E21":"g","\u011F":"g","\u0121":"g","\u01E7":"g","\u0123":"g","\u01E5":"g","\u0260":"g","\uA7A1":"g","\u1D79":"g","\uA77F":"g","\u24D7":"h","\uFF48":"h","\u0125":"h","\u1E23":"h","\u1E27":"h","\u021F":"h","\u1E25":"h","\u1E29":"h","\u1E2B":"h","\u1E96":"h","\u0127":"h","\u2C68":"h","\u2C76":"h","\u0265":"h","\u0195":"hv","\u24D8":"i","\uFF49":"i","\u00EC":"i","\u00ED":"i","\u00EE":"i","\u0129":"i","\u012B":"i","\u012D":"i","\u00EF":"i","\u1E2F":"i","\u1EC9":"i","\u01D0":"i","\u0209":"i","\u020B":"i","\u1ECB":"i","\u012F":"i","\u1E2D":"i","\u0268":"i","\u0131":"i","\u24D9":"j","\uFF4A":"j","\u0135":"j","\u01F0":"j","\u0249":"j","\u24DA":"k","\uFF4B":"k","\u1E31":"k","\u01E9":"k","\u1E33":"k","\u0137":"k","\u1E35":"k","\u0199":"k","\u2C6A":"k","\uA741":"k","\uA743":"k","\uA745":"k","\uA7A3":"k","\u24DB":"l","\uFF4C":"l","\u0140":"l","\u013A":"l","\u013E":"l","\u1E37":"l","\u1E39":"l","\u013C":"l","\u1E3D":"l","\u1E3B":"l","\u017F":"l","\u0142":"l","\u019A":"l","\u026B":"l","\u2C61":"l","\uA749":"l","\uA781":"l","\uA747":"l","\u01C9":"lj","\u24DC":"m","\uFF4D":"m","\u1E3F":"m","\u1E41":"m","\u1E43":"m","\u0271":"m","\u026F":"m","\u24DD":"n","\uFF4E":"n","\u01F9":"n","\u0144":"n","\u00F1":"n","\u1E45":"n","\u0148":"n","\u1E47":"n","\u0146":"n","\u1E4B":"n","\u1E49":"n","\u019E":"n","\u0272":"n","\u0149":"n","\uA791":"n","\uA7A5":"n","\u01CC":"nj","\u24DE":"o","\uFF4F":"o","\u00F2":"o","\u00F3":"o","\u00F4":"o","\u1ED3":"o","\u1ED1":"o","\u1ED7":"o","\u1ED5":"o","\u00F5":"o","\u1E4D":"o","\u022D":"o","\u1E4F":"o","\u014D":"o","\u1E51":"o","\u1E53":"o","\u014F":"o","\u022F":"o","\u0231":"o","\u00F6":"o","\u022B":"o","\u1ECF":"o","\u0151":"o","\u01D2":"o","\u020D":"o","\u020F":"o","\u01A1":"o","\u1EDD":"o","\u1EDB":"o","\u1EE1":"o","\u1EDF":"o","\u1EE3":"o","\u1ECD":"o","\u1ED9":"o","\u01EB":"o","\u01ED":"o","\u00F8":"o","\u01FF":"o","\u0254":"o","\uA74B":"o","\uA74D":"o","\u0275":"o","\u01A3":"oi","\u0223":"ou","\uA74F":"oo","\u24DF":"p","\uFF50":"p","\u1E55":"p","\u1E57":"p","\u01A5":"p","\u1D7D":"p","\uA751":"p","\uA753":"p","\uA755":"p","\u24E0":"q","\uFF51":"q","\u024B":"q","\uA757":"q","\uA759":"q","\u24E1":"r","\uFF52":"r","\u0155":"r","\u1E59":"r","\u0159":"r","\u0211":"r","\u0213":"r","\u1E5B":"r","\u1E5D":"r","\u0157":"r","\u1E5F":"r","\u024D":"r","\u027D":"r","\uA75B":"r","\uA7A7":"r","\uA783":"r","\u24E2":"s","\uFF53":"s","\u00DF":"s","\u015B":"s","\u1E65":"s","\u015D":"s","\u1E61":"s","\u0161":"s","\u1E67":"s","\u1E63":"s","\u1E69":"s","\u0219":"s","\u015F":"s","\u023F":"s","\uA7A9":"s","\uA785":"s","\u1E9B":"s","\u24E3":"t","\uFF54":"t","\u1E6B":"t","\u1E97":"t","\u0165":"t","\u1E6D":"t","\u021B":"t","\u0163":"t","\u1E71":"t","\u1E6F":"t","\u0167":"t","\u01AD":"t","\u0288":"t","\u2C66":"t","\uA787":"t","\uA729":"tz","\u24E4":"u","\uFF55":"u","\u00F9":"u","\u00FA":"u","\u00FB":"u","\u0169":"u","\u1E79":"u","\u016B":"u","\u1E7B":"u","\u016D":"u","\u00FC":"u","\u01DC":"u","\u01D8":"u","\u01D6":"u","\u01DA":"u","\u1EE7":"u","\u016F":"u","\u0171":"u","\u01D4":"u","\u0215":"u","\u0217":"u","\u01B0":"u","\u1EEB":"u","\u1EE9":"u","\u1EEF":"u","\u1EED":"u","\u1EF1":"u","\u1EE5":"u","\u1E73":"u","\u0173":"u","\u1E77":"u","\u1E75":"u","\u0289":"u","\u24E5":"v","\uFF56":"v","\u1E7D":"v","\u1E7F":"v","\u028B":"v","\uA75F":"v","\u028C":"v","\uA761":"vy","\u24E6":"w","\uFF57":"w","\u1E81":"w","\u1E83":"w","\u0175":"w","\u1E87":"w","\u1E85":"w","\u1E98":"w","\u1E89":"w","\u2C73":"w","\u24E7":"x","\uFF58":"x","\u1E8B":"x","\u1E8D":"x","\u24E8":"y","\uFF59":"y","\u1EF3":"y","\u00FD":"y","\u0177":"y","\u1EF9":"y","\u0233":"y","\u1E8F":"y","\u00FF":"y","\u1EF7":"y","\u1E99":"y","\u1EF5":"y","\u01B4":"y","\u024F":"y","\u1EFF":"y","\u24E9":"z","\uFF5A":"z","\u017A":"z","\u1E91":"z","\u017C":"z","\u017E":"z","\u1E93":"z","\u1E95":"z","\u01B6":"z","\u0225":"z","\u0240":"z","\u2C6C":"z","\uA763":"z","\u0386":"\u0391","\u0388":"\u0395","\u0389":"\u0397","\u038A":"\u0399","\u03AA":"\u0399","\u038C":"\u039F","\u038E":"\u03A5","\u03AB":"\u03A5","\u038F":"\u03A9","\u03AC":"\u03B1","\u03AD":"\u03B5","\u03AE":"\u03B7","\u03AF":"\u03B9","\u03CA":"\u03B9","\u0390":"\u03B9","\u03CC":"\u03BF","\u03CD":"\u03C5","\u03CB":"\u03C5","\u03B0":"\u03C5","\u03C9":"\u03C9","\u03C2":"\u03C3"}; + + $document = $(document); + + nextUid=(function() { var counter=1; return function() { return counter++; }; }()); + + + function reinsertElement(element) { + var placeholder = $(document.createTextNode('')); + + element.before(placeholder); + placeholder.before(element); + placeholder.remove(); + } + + function stripDiacritics(str) { + // Used 'uni range + named function' from http://jsperf.com/diacritics/18 + function match(a) { + return DIACRITICS[a] || a; + } + + return str.replace(/[^\u0000-\u007E]/g, match); + } + + function indexOf(value, array) { + var i = 0, l = array.length; + for (; i < l; i = i + 1) { + if (equal(value, array[i])) return i; + } + return -1; + } + + function measureScrollbar () { + var $template = $( MEASURE_SCROLLBAR_TEMPLATE ); + $template.appendTo(document.body); + + var dim = { + width: $template.width() - $template[0].clientWidth, + height: $template.height() - $template[0].clientHeight + }; + $template.remove(); + + return dim; + } + + /** + * Compares equality of a and b + * @param a + * @param b + */ + function equal(a, b) { + if (a === b) return true; + if (a === undefined || b === undefined) return false; + if (a === null || b === null) return false; + // Check whether 'a' or 'b' is a string (primitive or object). + // The concatenation of an empty string (+'') converts its argument to a string's primitive. + if (a.constructor === String) return a+'' === b+''; // a+'' - in case 'a' is a String object + if (b.constructor === String) return b+'' === a+''; // b+'' - in case 'b' is a String object + return false; + } + + /** + * Splits the string into an array of values, transforming each value. An empty array is returned for nulls or empty + * strings + * @param string + * @param separator + */ + function splitVal(string, separator, transform) { + var val, i, l; + if (string === null || string.length < 1) return []; + val = string.split(separator); + for (i = 0, l = val.length; i < l; i = i + 1) val[i] = transform(val[i]); + return val; + } + + function getSideBorderPadding(element) { + return element.outerWidth(false) - element.width(); + } + + function installKeyUpChangeEvent(element) { + var key="keyup-change-value"; + element.on("keydown", function () { + if ($.data(element, key) === undefined) { + $.data(element, key, element.val()); + } + }); + element.on("keyup", function () { + var val= $.data(element, key); + if (val !== undefined && element.val() !== val) { + $.removeData(element, key); + element.trigger("keyup-change"); + } + }); + } + + + /** + * filters mouse events so an event is fired only if the mouse moved. + * + * filters out mouse events that occur when mouse is stationary but + * the elements under the pointer are scrolled. + */ + function installFilteredMouseMove(element) { + element.on("mousemove", function (e) { + var lastpos = lastMousePosition; + if (lastpos === undefined || lastpos.x !== e.pageX || lastpos.y !== e.pageY) { + $(e.target).trigger("mousemove-filtered", e); + } + }); + } + + /** + * Debounces a function. Returns a function that calls the original fn function only if no invocations have been made + * within the last quietMillis milliseconds. + * + * @param quietMillis number of milliseconds to wait before invoking fn + * @param fn function to be debounced + * @param ctx object to be used as this reference within fn + * @return debounced version of fn + */ + function debounce(quietMillis, fn, ctx) { + ctx = ctx || undefined; + var timeout; + return function () { + var args = arguments; + window.clearTimeout(timeout); + timeout = window.setTimeout(function() { + fn.apply(ctx, args); + }, quietMillis); + }; + } + + function installDebouncedScroll(threshold, element) { + var notify = debounce(threshold, function (e) { element.trigger("scroll-debounced", e);}); + element.on("scroll", function (e) { + if (indexOf(e.target, element.get()) >= 0) notify(e); + }); + } + + function focus($el) { + if ($el[0] === document.activeElement) return; + + /* set the focus in a 0 timeout - that way the focus is set after the processing + of the current event has finished - which seems like the only reliable way + to set focus */ + window.setTimeout(function() { + var el=$el[0], pos=$el.val().length, range; + + $el.focus(); + + /* make sure el received focus so we do not error out when trying to manipulate the caret. + sometimes modals or others listeners may steal it after its set */ + var isVisible = (el.offsetWidth > 0 || el.offsetHeight > 0); + if (isVisible && el === document.activeElement) { + + /* after the focus is set move the caret to the end, necessary when we val() + just before setting focus */ + if(el.setSelectionRange) + { + el.setSelectionRange(pos, pos); + } + else if (el.createTextRange) { + range = el.createTextRange(); + range.collapse(false); + range.select(); + } + } + }, 0); + } + + function getCursorInfo(el) { + el = $(el)[0]; + var offset = 0; + var length = 0; + if ('selectionStart' in el) { + offset = el.selectionStart; + length = el.selectionEnd - offset; + } else if ('selection' in document) { + el.focus(); + var sel = document.selection.createRange(); + length = document.selection.createRange().text.length; + sel.moveStart('character', -el.value.length); + offset = sel.text.length - length; + } + return { offset: offset, length: length }; + } + + function killEvent(event) { + event.preventDefault(); + event.stopPropagation(); + } + function killEventImmediately(event) { + event.preventDefault(); + event.stopImmediatePropagation(); + } + + function measureTextWidth(e) { + if (!sizer){ + var style = e[0].currentStyle || window.getComputedStyle(e[0], null); + sizer = $(document.createElement("div")).css({ + position: "absolute", + left: "-10000px", + top: "-10000px", + display: "none", + fontSize: style.fontSize, + fontFamily: style.fontFamily, + fontStyle: style.fontStyle, + fontWeight: style.fontWeight, + letterSpacing: style.letterSpacing, + textTransform: style.textTransform, + whiteSpace: "nowrap" + }); + sizer.attr("class","select2-sizer"); + $(document.body).append(sizer); + } + sizer.text(e.val()); + return sizer.width(); + } + + function syncCssClasses(dest, src, adapter) { + var classes, replacements = [], adapted; + + classes = $.trim(dest.attr("class")); + + if (classes) { + classes = '' + classes; // for IE which returns object + + $(classes.split(/\s+/)).each2(function() { + if (this.indexOf("select2-") === 0) { + replacements.push(this); + } + }); + } + + classes = $.trim(src.attr("class")); + + if (classes) { + classes = '' + classes; // for IE which returns object + + $(classes.split(/\s+/)).each2(function() { + if (this.indexOf("select2-") !== 0) { + adapted = adapter(this); + + if (adapted) { + replacements.push(adapted); + } + } + }); + } + + dest.attr("class", replacements.join(" ")); + } + + + function markMatch(text, term, markup, escapeMarkup) { + var match=stripDiacritics(text.toUpperCase()).indexOf(stripDiacritics(term.toUpperCase())), + tl=term.length; + + if (match<0) { + markup.push(escapeMarkup(text)); + return; + } + + markup.push(escapeMarkup(text.substring(0, match))); + markup.push(""); + markup.push(escapeMarkup(text.substring(match, match + tl))); + markup.push(""); + markup.push(escapeMarkup(text.substring(match + tl, text.length))); + } + + function defaultEscapeMarkup(markup) { + var replace_map = { + '\\': '\', + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + "/": '/' + }; + + return String(markup).replace(/[&<>"'\/\\]/g, function (match) { + return replace_map[match]; + }); + } + + /** + * Produces an ajax-based query function + * + * @param options object containing configuration parameters + * @param options.params parameter map for the transport ajax call, can contain such options as cache, jsonpCallback, etc. see $.ajax + * @param options.transport function that will be used to execute the ajax request. must be compatible with parameters supported by $.ajax + * @param options.url url for the data + * @param options.data a function(searchTerm, pageNumber, context) that should return an object containing query string parameters for the above url. + * @param options.dataType request data type: ajax, jsonp, other datatypes supported by jQuery's $.ajax function or the transport function if specified + * @param options.quietMillis (optional) milliseconds to wait before making the ajaxRequest, helps debounce the ajax function if invoked too often + * @param options.results a function(remoteData, pageNumber, query) that converts data returned form the remote request to the format expected by Select2. + * The expected format is an object containing the following keys: + * results array of objects that will be used as choices + * more (optional) boolean indicating whether there are more results available + * Example: {results:[{id:1, text:'Red'},{id:2, text:'Blue'}], more:true} + */ + function ajax(options) { + var timeout, // current scheduled but not yet executed request + handler = null, + quietMillis = options.quietMillis || 100, + ajaxUrl = options.url, + self = this; + + return function (query) { + window.clearTimeout(timeout); + timeout = window.setTimeout(function () { + var data = options.data, // ajax data function + url = ajaxUrl, // ajax url string or function + transport = options.transport || $.fn.select2.ajaxDefaults.transport, + // deprecated - to be removed in 4.0 - use params instead + deprecated = { + type: options.type || 'GET', // set type of request (GET or POST) + cache: options.cache || false, + jsonpCallback: options.jsonpCallback||undefined, + dataType: options.dataType||"json" + }, + params = $.extend({}, $.fn.select2.ajaxDefaults.params, deprecated); + + data = data ? data.call(self, query.term, query.page, query.context) : null; + url = (typeof url === 'function') ? url.call(self, query.term, query.page, query.context) : url; + + if (handler && typeof handler.abort === "function") { handler.abort(); } + + if (options.params) { + if ($.isFunction(options.params)) { + $.extend(params, options.params.call(self)); + } else { + $.extend(params, options.params); + } + } + + $.extend(params, { + url: url, + dataType: options.dataType, + data: data, + success: function (data) { + // TODO - replace query.page with query so users have access to term, page, etc. + // added query as third paramter to keep backwards compatibility + var results = options.results(data, query.page, query); + query.callback(results); + }, + error: function(jqXHR, textStatus, errorThrown){ + var results = { + hasError: true, + jqXHR: jqXHR, + textStatus: textStatus, + errorThrown: errorThrown + }; + + query.callback(results); + } + }); + handler = transport.call(self, params); + }, quietMillis); + }; + } + + /** + * Produces a query function that works with a local array + * + * @param options object containing configuration parameters. The options parameter can either be an array or an + * object. + * + * If the array form is used it is assumed that it contains objects with 'id' and 'text' keys. + * + * If the object form is used it is assumed that it contains 'data' and 'text' keys. The 'data' key should contain + * an array of objects that will be used as choices. These objects must contain at least an 'id' key. The 'text' + * key can either be a String in which case it is expected that each element in the 'data' array has a key with the + * value of 'text' which will be used to match choices. Alternatively, text can be a function(item) that can extract + * the text. + */ + function local(options) { + var data = options, // data elements + dataText, + tmp, + text = function (item) { return ""+item.text; }; // function used to retrieve the text portion of a data item that is matched against the search + + if ($.isArray(data)) { + tmp = data; + data = { results: tmp }; + } + + if ($.isFunction(data) === false) { + tmp = data; + data = function() { return tmp; }; + } + + var dataItem = data(); + if (dataItem.text) { + text = dataItem.text; + // if text is not a function we assume it to be a key name + if (!$.isFunction(text)) { + dataText = dataItem.text; // we need to store this in a separate variable because in the next step data gets reset and data.text is no longer available + text = function (item) { return item[dataText]; }; + } + } + + return function (query) { + var t = query.term, filtered = { results: [] }, process; + if (t === "") { + query.callback(data()); + return; + } + + process = function(datum, collection) { + var group, attr; + datum = datum[0]; + if (datum.children) { + group = {}; + for (attr in datum) { + if (datum.hasOwnProperty(attr)) group[attr]=datum[attr]; + } + group.children=[]; + $(datum.children).each2(function(i, childDatum) { process(childDatum, group.children); }); + if (group.children.length || query.matcher(t, text(group), datum)) { + collection.push(group); + } + } else { + if (query.matcher(t, text(datum), datum)) { + collection.push(datum); + } + } + }; + + $(data().results).each2(function(i, datum) { process(datum, filtered.results); }); + query.callback(filtered); + }; + } + + // TODO javadoc + function tags(data) { + var isFunc = $.isFunction(data); + return function (query) { + var t = query.term, filtered = {results: []}; + var result = isFunc ? data(query) : data; + if ($.isArray(result)) { + $(result).each(function () { + var isObject = this.text !== undefined, + text = isObject ? this.text : this; + if (t === "" || query.matcher(t, text)) { + filtered.results.push(isObject ? this : {id: this, text: this}); + } + }); + query.callback(filtered); + } + }; + } + + /** + * Checks if the formatter function should be used. + * + * Throws an error if it is not a function. Returns true if it should be used, + * false if no formatting should be performed. + * + * @param formatter + */ + function checkFormatter(formatter, formatterName) { + if ($.isFunction(formatter)) return true; + if (!formatter) return false; + if (typeof(formatter) === 'string') return true; + throw new Error(formatterName +" must be a string, function, or falsy value"); + } + + /** + * Returns a given value + * If given a function, returns its output + * + * @param val string|function + * @param context value of "this" to be passed to function + * @returns {*} + */ + function evaluate(val, context) { + if ($.isFunction(val)) { + var args = Array.prototype.slice.call(arguments, 2); + return val.apply(context, args); + } + return val; + } + + function countResults(results) { + var count = 0; + $.each(results, function(i, item) { + if (item.children) { + count += countResults(item.children); + } else { + count++; + } + }); + return count; + } + + /** + * Default tokenizer. This function uses breaks the input on substring match of any string from the + * opts.tokenSeparators array and uses opts.createSearchChoice to create the choice object. Both of those + * two options have to be defined in order for the tokenizer to work. + * + * @param input text user has typed so far or pasted into the search field + * @param selection currently selected choices + * @param selectCallback function(choice) callback tho add the choice to selection + * @param opts select2's opts + * @return undefined/null to leave the current input unchanged, or a string to change the input to the returned value + */ + function defaultTokenizer(input, selection, selectCallback, opts) { + var original = input, // store the original so we can compare and know if we need to tell the search to update its text + dupe = false, // check for whether a token we extracted represents a duplicate selected choice + token, // token + index, // position at which the separator was found + i, l, // looping variables + separator; // the matched separator + + if (!opts.createSearchChoice || !opts.tokenSeparators || opts.tokenSeparators.length < 1) return undefined; + + while (true) { + index = -1; + + for (i = 0, l = opts.tokenSeparators.length; i < l; i++) { + separator = opts.tokenSeparators[i]; + index = input.indexOf(separator); + if (index >= 0) break; + } + + if (index < 0) break; // did not find any token separator in the input string, bail + + token = input.substring(0, index); + input = input.substring(index + separator.length); + + if (token.length > 0) { + token = opts.createSearchChoice.call(this, token, selection); + if (token !== undefined && token !== null && opts.id(token) !== undefined && opts.id(token) !== null) { + dupe = false; + for (i = 0, l = selection.length; i < l; i++) { + if (equal(opts.id(token), opts.id(selection[i]))) { + dupe = true; break; + } + } + + if (!dupe) selectCallback(token); + } + } + } + + if (original!==input) return input; + } + + function cleanupJQueryElements() { + var self = this; + + $.each(arguments, function (i, element) { + self[element].remove(); + self[element] = null; + }); + } + + /** + * Creates a new class + * + * @param superClass + * @param methods + */ + function clazz(SuperClass, methods) { + var constructor = function () {}; + constructor.prototype = new SuperClass; + constructor.prototype.constructor = constructor; + constructor.prototype.parent = SuperClass.prototype; + constructor.prototype = $.extend(constructor.prototype, methods); + return constructor; + } + + AbstractSelect2 = clazz(Object, { + + // abstract + bind: function (func) { + var self = this; + return function () { + func.apply(self, arguments); + }; + }, + + // abstract + init: function (opts) { + var results, search, resultsSelector = ".select2-results"; + + // prepare options + this.opts = opts = this.prepareOpts(opts); + + this.id=opts.id; + + // destroy if called on an existing component + if (opts.element.data("select2") !== undefined && + opts.element.data("select2") !== null) { + opts.element.data("select2").destroy(); + } + + this.container = this.createContainer(); + + this.liveRegion = $('.select2-hidden-accessible'); + if (this.liveRegion.length == 0) { + this.liveRegion = $("", { + role: "status", + "aria-live": "polite" + }) + .addClass("select2-hidden-accessible") + .appendTo(document.body); + } + + this.containerId="s2id_"+(opts.element.attr("id") || "autogen"+nextUid()); + this.containerEventName= this.containerId + .replace(/([.])/g, '_') + .replace(/([;&,\-\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1'); + this.container.attr("id", this.containerId); + + this.container.attr("title", opts.element.attr("title")); + + this.body = $(document.body); + + syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass); + + this.container.attr("style", opts.element.attr("style")); + this.container.css(evaluate(opts.containerCss, this.opts.element)); + this.container.addClass(evaluate(opts.containerCssClass, this.opts.element)); + + this.elementTabIndex = this.opts.element.attr("tabindex"); + + // swap container for the element + this.opts.element + .data("select2", this) + .attr("tabindex", "-1") + .before(this.container) + .on("click.select2", killEvent); // do not leak click events + + this.container.data("select2", this); + + this.dropdown = this.container.find(".select2-drop"); + + syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass); + + this.dropdown.addClass(evaluate(opts.dropdownCssClass, this.opts.element)); + this.dropdown.data("select2", this); + this.dropdown.on("click", killEvent); + + this.results = results = this.container.find(resultsSelector); + this.search = search = this.container.find("input.select2-input"); + + this.queryCount = 0; + this.resultsPage = 0; + this.context = null; + + // initialize the container + this.initContainer(); + + this.container.on("click", killEvent); + + installFilteredMouseMove(this.results); + + this.dropdown.on("mousemove-filtered", resultsSelector, this.bind(this.highlightUnderEvent)); + this.dropdown.on("touchstart touchmove touchend", resultsSelector, this.bind(function (event) { + this._touchEvent = true; + this.highlightUnderEvent(event); + })); + this.dropdown.on("touchmove", resultsSelector, this.bind(this.touchMoved)); + this.dropdown.on("touchstart touchend", resultsSelector, this.bind(this.clearTouchMoved)); + + // Waiting for a click event on touch devices to select option and hide dropdown + // otherwise click will be triggered on an underlying element + this.dropdown.on('click', this.bind(function (event) { + if (this._touchEvent) { + this._touchEvent = false; + this.selectHighlighted(); + } + })); + + installDebouncedScroll(80, this.results); + this.dropdown.on("scroll-debounced", resultsSelector, this.bind(this.loadMoreIfNeeded)); + + // do not propagate change event from the search field out of the component + $(this.container).on("change", ".select2-input", function(e) {e.stopPropagation();}); + $(this.dropdown).on("change", ".select2-input", function(e) {e.stopPropagation();}); + + // if jquery.mousewheel plugin is installed we can prevent out-of-bounds scrolling of results via mousewheel + if ($.fn.mousewheel) { + results.mousewheel(function (e, delta, deltaX, deltaY) { + var top = results.scrollTop(); + if (deltaY > 0 && top - deltaY <= 0) { + results.scrollTop(0); + killEvent(e); + } else if (deltaY < 0 && results.get(0).scrollHeight - results.scrollTop() + deltaY <= results.height()) { + results.scrollTop(results.get(0).scrollHeight - results.height()); + killEvent(e); + } + }); + } + + installKeyUpChangeEvent(search); + search.on("keyup-change input paste", this.bind(this.updateResults)); + search.on("focus", function () { search.addClass("select2-focused"); }); + search.on("blur", function () { search.removeClass("select2-focused");}); + + this.dropdown.on("mouseup", resultsSelector, this.bind(function (e) { + if ($(e.target).closest(".select2-result-selectable").length > 0) { + this.highlightUnderEvent(e); + this.selectHighlighted(e); + } + })); + + // trap all mouse events from leaving the dropdown. sometimes there may be a modal that is listening + // for mouse events outside of itself so it can close itself. since the dropdown is now outside the select2's + // dom it will trigger the popup close, which is not what we want + // focusin can cause focus wars between modals and select2 since the dropdown is outside the modal. + this.dropdown.on("click mouseup mousedown touchstart touchend focusin", function (e) { e.stopPropagation(); }); + + this.nextSearchTerm = undefined; + + if ($.isFunction(this.opts.initSelection)) { + // initialize selection based on the current value of the source element + this.initSelection(); + + // if the user has provided a function that can set selection based on the value of the source element + // we monitor the change event on the element and trigger it, allowing for two way synchronization + this.monitorSource(); + } + + if (opts.maximumInputLength !== null) { + this.search.attr("maxlength", opts.maximumInputLength); + } + + var disabled = opts.element.prop("disabled"); + if (disabled === undefined) disabled = false; + this.enable(!disabled); + + var readonly = opts.element.prop("readonly"); + if (readonly === undefined) readonly = false; + this.readonly(readonly); + + // Calculate size of scrollbar + scrollBarDimensions = scrollBarDimensions || measureScrollbar(); + + this.autofocus = opts.element.prop("autofocus"); + opts.element.prop("autofocus", false); + if (this.autofocus) this.focus(); + + this.search.attr("placeholder", opts.searchInputPlaceholder); + }, + + // abstract + destroy: function () { + var element=this.opts.element, select2 = element.data("select2"), self = this; + + this.close(); + + if (element.length && element[0].detachEvent && self._sync) { + element.each(function () { + if (self._sync) { + this.detachEvent("onpropertychange", self._sync); + } + }); + } + if (this.propertyObserver) { + this.propertyObserver.disconnect(); + this.propertyObserver = null; + } + this._sync = null; + + if (select2 !== undefined) { + select2.container.remove(); + select2.liveRegion.remove(); + select2.dropdown.remove(); + element + .show() + .removeData("select2") + .off(".select2") + .prop("autofocus", this.autofocus || false); + if (this.elementTabIndex) { + element.attr({tabindex: this.elementTabIndex}); + } else { + element.removeAttr("tabindex"); + } + element.show(); + } + + cleanupJQueryElements.call(this, + "container", + "liveRegion", + "dropdown", + "results", + "search" + ); + }, + + // abstract + optionToData: function(element) { + if (element.is("option")) { + return { + id:element.prop("value"), + text:element.text(), + element: element.get(), + css: element.attr("class"), + disabled: element.prop("disabled"), + locked: equal(element.attr("locked"), "locked") || equal(element.data("locked"), true) + }; + } else if (element.is("optgroup")) { + return { + text:element.attr("label"), + children:[], + element: element.get(), + css: element.attr("class") + }; + } + }, + + // abstract + prepareOpts: function (opts) { + var element, select, idKey, ajaxUrl, self = this; + + element = opts.element; + + if (element.get(0).tagName.toLowerCase() === "select") { + this.select = select = opts.element; + } + + if (select) { + // these options are not allowed when attached to a select because they are picked up off the element itself + $.each(["id", "multiple", "ajax", "query", "createSearchChoice", "initSelection", "data", "tags"], function () { + if (this in opts) { + throw new Error("Option '" + this + "' is not allowed for Select2 when attached to a ", + "
", + " ", + "
    ", + "
", + "
"].join("")); + return container; + }, + + // single + enableInterface: function() { + if (this.parent.enableInterface.apply(this, arguments)) { + this.focusser.prop("disabled", !this.isInterfaceEnabled()); + } + }, + + // single + opening: function () { + var el, range, len; + + if (this.opts.minimumResultsForSearch >= 0) { + this.showSearch(true); + } + + this.parent.opening.apply(this, arguments); + + if (this.showSearchInput !== false) { + // IE appends focusser.val() at the end of field :/ so we manually insert it at the beginning using a range + // all other browsers handle this just fine + + this.search.val(this.focusser.val()); + } + if (this.opts.shouldFocusInput(this)) { + this.search.focus(); + // move the cursor to the end after focussing, otherwise it will be at the beginning and + // new text will appear *before* focusser.val() + el = this.search.get(0); + if (el.createTextRange) { + range = el.createTextRange(); + range.collapse(false); + range.select(); + } else if (el.setSelectionRange) { + len = this.search.val().length; + el.setSelectionRange(len, len); + } + } + + // initializes search's value with nextSearchTerm (if defined by user) + // ignore nextSearchTerm if the dropdown is opened by the user pressing a letter + if(this.search.val() === "") { + if(this.nextSearchTerm != undefined){ + this.search.val(this.nextSearchTerm); + this.search.select(); + } + } + + this.focusser.prop("disabled", true).val(""); + this.updateResults(true); + this.opts.element.trigger($.Event("select2-open")); + }, + + // single + close: function () { + if (!this.opened()) return; + this.parent.close.apply(this, arguments); + + this.focusser.prop("disabled", false); + + if (this.opts.shouldFocusInput(this)) { + this.focusser.focus(); + } + }, + + // single + focus: function () { + if (this.opened()) { + this.close(); + } else { + this.focusser.prop("disabled", false); + if (this.opts.shouldFocusInput(this)) { + this.focusser.focus(); + } + } + }, + + // single + isFocused: function () { + return this.container.hasClass("select2-container-active"); + }, + + // single + cancel: function () { + this.parent.cancel.apply(this, arguments); + this.focusser.prop("disabled", false); + + if (this.opts.shouldFocusInput(this)) { + this.focusser.focus(); + } + }, + + // single + destroy: function() { + $("label[for='" + this.focusser.attr('id') + "']") + .attr('for', this.opts.element.attr("id")); + this.parent.destroy.apply(this, arguments); + + cleanupJQueryElements.call(this, + "selection", + "focusser" + ); + }, + + // single + initContainer: function () { + + var selection, + container = this.container, + dropdown = this.dropdown, + idSuffix = nextUid(), + elementLabel; + + if (this.opts.minimumResultsForSearch < 0) { + this.showSearch(false); + } else { + this.showSearch(true); + } + + this.selection = selection = container.find(".select2-choice"); + + this.focusser = container.find(".select2-focusser"); + + // add aria associations + selection.find(".select2-chosen").attr("id", "select2-chosen-"+idSuffix); + this.focusser.attr("aria-labelledby", "select2-chosen-"+idSuffix); + this.results.attr("id", "select2-results-"+idSuffix); + this.search.attr("aria-owns", "select2-results-"+idSuffix); + + // rewrite labels from original element to focusser + this.focusser.attr("id", "s2id_autogen"+idSuffix); + + elementLabel = $("label[for='" + this.opts.element.attr("id") + "']"); + this.opts.element.focus(this.bind(function () { this.focus(); })); + + this.focusser.prev() + .text(elementLabel.text()) + .attr('for', this.focusser.attr('id')); + + // Ensure the original element retains an accessible name + var originalTitle = this.opts.element.attr("title"); + this.opts.element.attr("title", (originalTitle || elementLabel.text())); + + this.focusser.attr("tabindex", this.elementTabIndex); + + // write label for search field using the label from the focusser element + this.search.attr("id", this.focusser.attr('id') + '_search'); + + this.search.prev() + .text($("label[for='" + this.focusser.attr('id') + "']").text()) + .attr('for', this.search.attr('id')); + + this.search.on("keydown", this.bind(function (e) { + if (!this.isInterfaceEnabled()) return; + + // filter 229 keyCodes (input method editor is processing key input) + if (229 == e.keyCode) return; + + if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) { + // prevent the page from scrolling + killEvent(e); + return; + } + + switch (e.which) { + case KEY.UP: + case KEY.DOWN: + this.moveHighlight((e.which === KEY.UP) ? -1 : 1); + killEvent(e); + return; + case KEY.ENTER: + this.selectHighlighted(); + killEvent(e); + return; + case KEY.TAB: + this.selectHighlighted({noFocus: true}); + return; + case KEY.ESC: + this.cancel(e); + killEvent(e); + return; + } + })); + + this.search.on("blur", this.bind(function(e) { + // a workaround for chrome to keep the search field focussed when the scroll bar is used to scroll the dropdown. + // without this the search field loses focus which is annoying + if (document.activeElement === this.body.get(0)) { + window.setTimeout(this.bind(function() { + if (this.opened()) { + this.search.focus(); + } + }), 0); + } + })); + + this.focusser.on("keydown", this.bind(function (e) { + if (!this.isInterfaceEnabled()) return; + + if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.ESC) { + return; + } + + if (this.opts.openOnEnter === false && e.which === KEY.ENTER) { + killEvent(e); + return; + } + + if (e.which == KEY.DOWN || e.which == KEY.UP + || (e.which == KEY.ENTER && this.opts.openOnEnter)) { + + if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) return; + + this.open(); + killEvent(e); + return; + } + + if (e.which == KEY.DELETE || e.which == KEY.BACKSPACE) { + if (this.opts.allowClear) { + this.clear(); + } + killEvent(e); + return; + } + })); + + + installKeyUpChangeEvent(this.focusser); + this.focusser.on("keyup-change input", this.bind(function(e) { + if (this.opts.minimumResultsForSearch >= 0) { + e.stopPropagation(); + if (this.opened()) return; + this.open(); + } + })); + + selection.on("mousedown touchstart", "abbr", this.bind(function (e) { + if (!this.isInterfaceEnabled()) { + return; + } + + this.clear(); + killEventImmediately(e); + this.close(); + + if (this.selection) { + this.selection.focus(); + } + })); + + selection.on("mousedown touchstart", this.bind(function (e) { + // Prevent IE from generating a click event on the body + reinsertElement(selection); + + if (!this.container.hasClass("select2-container-active")) { + this.opts.element.trigger($.Event("select2-focus")); + } + + if (this.opened()) { + this.close(); + } else if (this.isInterfaceEnabled()) { + this.open(); + } + + killEvent(e); + })); + + dropdown.on("mousedown touchstart", this.bind(function() { + if (this.opts.shouldFocusInput(this)) { + this.search.focus(); + } + })); + + selection.on("focus", this.bind(function(e) { + killEvent(e); + })); + + this.focusser.on("focus", this.bind(function(){ + if (!this.container.hasClass("select2-container-active")) { + this.opts.element.trigger($.Event("select2-focus")); + } + this.container.addClass("select2-container-active"); + })).on("blur", this.bind(function() { + if (!this.opened()) { + this.container.removeClass("select2-container-active"); + this.opts.element.trigger($.Event("select2-blur")); + } + })); + this.search.on("focus", this.bind(function(){ + if (!this.container.hasClass("select2-container-active")) { + this.opts.element.trigger($.Event("select2-focus")); + } + this.container.addClass("select2-container-active"); + })); + + this.initContainerWidth(); + this.opts.element.hide(); + this.setPlaceholder(); + + }, + + // single + clear: function(triggerChange) { + var data=this.selection.data("select2-data"); + if (data) { // guard against queued quick consecutive clicks + var evt = $.Event("select2-clearing"); + this.opts.element.trigger(evt); + if (evt.isDefaultPrevented()) { + return; + } + var placeholderOption = this.getPlaceholderOption(); + this.opts.element.val(placeholderOption ? placeholderOption.val() : ""); + this.selection.find(".select2-chosen").empty(); + this.selection.removeData("select2-data"); + this.setPlaceholder(); + + if (triggerChange !== false){ + this.opts.element.trigger({ type: "select2-removed", val: this.id(data), choice: data }); + this.triggerChange({removed:data}); + } + } + }, + + /** + * Sets selection based on source element's value + */ + // single + initSelection: function () { + var selected; + if (this.isPlaceholderOptionSelected()) { + this.updateSelection(null); + this.close(); + this.setPlaceholder(); + } else { + var self = this; + this.opts.initSelection.call(null, this.opts.element, function(selected){ + if (selected !== undefined && selected !== null) { + self.updateSelection(selected); + self.close(); + self.setPlaceholder(); + self.nextSearchTerm = self.opts.nextSearchTerm(selected, self.search.val()); + } + }); + } + }, + + isPlaceholderOptionSelected: function() { + var placeholderOption; + if (this.getPlaceholder() === undefined) return false; // no placeholder specified so no option should be considered + return ((placeholderOption = this.getPlaceholderOption()) !== undefined && placeholderOption.prop("selected")) + || (this.opts.element.val() === "") + || (this.opts.element.val() === undefined) + || (this.opts.element.val() === null); + }, + + // single + prepareOpts: function () { + var opts = this.parent.prepareOpts.apply(this, arguments), + self=this; + + if (opts.element.get(0).tagName.toLowerCase() === "select") { + // install the selection initializer + opts.initSelection = function (element, callback) { + var selected = element.find("option").filter(function() { return this.selected && !this.disabled }); + // a single select box always has a value, no need to null check 'selected' + callback(self.optionToData(selected)); + }; + } else if ("data" in opts) { + // install default initSelection when applied to hidden input and data is local + opts.initSelection = opts.initSelection || function (element, callback) { + var id = element.val(); + //search in data by id, storing the actual matching item + var match = null; + opts.query({ + matcher: function(term, text, el){ + var is_match = equal(id, opts.id(el)); + if (is_match) { + match = el; + } + return is_match; + }, + callback: !$.isFunction(callback) ? $.noop : function() { + callback(match); + } + }); + }; + } + + return opts; + }, + + // single + getPlaceholder: function() { + // if a placeholder is specified on a single select without a valid placeholder option ignore it + if (this.select) { + if (this.getPlaceholderOption() === undefined) { + return undefined; + } + } + + return this.parent.getPlaceholder.apply(this, arguments); + }, + + // single + setPlaceholder: function () { + var placeholder = this.getPlaceholder(); + + if (this.isPlaceholderOptionSelected() && placeholder !== undefined) { + + // check for a placeholder option if attached to a select + if (this.select && this.getPlaceholderOption() === undefined) return; + + this.selection.find(".select2-chosen").html(this.opts.escapeMarkup(placeholder)); + + this.selection.addClass("select2-default"); + + this.container.removeClass("select2-allowclear"); + } + }, + + // single + postprocessResults: function (data, initial, noHighlightUpdate) { + var selected = 0, self = this, showSearchInput = true; + + // find the selected element in the result list + + this.findHighlightableChoices().each2(function (i, elm) { + if (equal(self.id(elm.data("select2-data")), self.opts.element.val())) { + selected = i; + return false; + } + }); + + // and highlight it + if (noHighlightUpdate !== false) { + if (initial === true && selected >= 0) { + this.highlight(selected); + } else { + this.highlight(0); + } + } + + // hide the search box if this is the first we got the results and there are enough of them for search + + if (initial === true) { + var min = this.opts.minimumResultsForSearch; + if (min >= 0) { + this.showSearch(countResults(data.results) >= min); + } + } + }, + + // single + showSearch: function(showSearchInput) { + if (this.showSearchInput === showSearchInput) return; + + this.showSearchInput = showSearchInput; + + this.dropdown.find(".select2-search").toggleClass("select2-search-hidden", !showSearchInput); + this.dropdown.find(".select2-search").toggleClass("select2-offscreen", !showSearchInput); + //add "select2-with-searchbox" to the container if search box is shown + $(this.dropdown, this.container).toggleClass("select2-with-searchbox", showSearchInput); + }, + + // single + onSelect: function (data, options) { + + if (!this.triggerSelect(data)) { return; } + + var old = this.opts.element.val(), + oldData = this.data(); + + this.opts.element.val(this.id(data)); + this.updateSelection(data); + + this.opts.element.trigger({ type: "select2-selected", val: this.id(data), choice: data }); + + this.nextSearchTerm = this.opts.nextSearchTerm(data, this.search.val()); + this.close(); + + if ((!options || !options.noFocus) && this.opts.shouldFocusInput(this)) { + this.focusser.focus(); + } + + if (!equal(old, this.id(data))) { + this.triggerChange({ added: data, removed: oldData }); + } + }, + + // single + updateSelection: function (data) { + + var container=this.selection.find(".select2-chosen"), formatted, cssClass; + + this.selection.data("select2-data", data); + + container.empty(); + if (data !== null) { + formatted=this.opts.formatSelection(data, container, this.opts.escapeMarkup); + } + if (formatted !== undefined) { + container.append(formatted); + } + cssClass=this.opts.formatSelectionCssClass(data, container); + if (cssClass !== undefined) { + container.addClass(cssClass); + } + + this.selection.removeClass("select2-default"); + + if (this.opts.allowClear && this.getPlaceholder() !== undefined) { + this.container.addClass("select2-allowclear"); + } + }, + + // single + val: function () { + var val, + triggerChange = false, + data = null, + self = this, + oldData = this.data(); + + if (arguments.length === 0) { + return this.opts.element.val(); + } + + val = arguments[0]; + + if (arguments.length > 1) { + triggerChange = arguments[1]; + } + + if (this.select) { + this.select + .val(val) + .find("option").filter(function() { return this.selected }).each2(function (i, elm) { + data = self.optionToData(elm); + return false; + }); + this.updateSelection(data); + this.setPlaceholder(); + if (triggerChange) { + this.triggerChange({added: data, removed:oldData}); + } + } else { + // val is an id. !val is true for [undefined,null,'',0] - 0 is legal + if (!val && val !== 0) { + this.clear(triggerChange); + return; + } + if (this.opts.initSelection === undefined) { + throw new Error("cannot call val() if initSelection() is not defined"); + } + this.opts.element.val(val); + this.opts.initSelection(this.opts.element, function(data){ + self.opts.element.val(!data ? "" : self.id(data)); + self.updateSelection(data); + self.setPlaceholder(); + if (triggerChange) { + self.triggerChange({added: data, removed:oldData}); + } + }); + } + }, + + // single + clearSearch: function () { + this.search.val(""); + this.focusser.val(""); + }, + + // single + data: function(value) { + var data, + triggerChange = false; + + if (arguments.length === 0) { + data = this.selection.data("select2-data"); + if (data == undefined) data = null; + return data; + } else { + if (arguments.length > 1) { + triggerChange = arguments[1]; + } + if (!value) { + this.clear(triggerChange); + } else { + data = this.data(); + this.opts.element.val(!value ? "" : this.id(value)); + this.updateSelection(value); + if (triggerChange) { + this.triggerChange({added: value, removed:data}); + } + } + } + } + }); + + MultiSelect2 = clazz(AbstractSelect2, { + + // multi + createContainer: function () { + var container = $(document.createElement("div")).attr({ + "class": "select2-container select2-container-multi" + }).html([ + "
    ", + "
  • ", + " ", + " ", + "
  • ", + "
", + "
", + "
    ", + "
", + "
"].join("")); + return container; + }, + + // multi + prepareOpts: function () { + var opts = this.parent.prepareOpts.apply(this, arguments), + self=this; + + // TODO validate placeholder is a string if specified + if (opts.element.get(0).tagName.toLowerCase() === "select") { + // install the selection initializer + opts.initSelection = function (element, callback) { + + var data = []; + + element.find("option").filter(function() { return this.selected && !this.disabled }).each2(function (i, elm) { + data.push(self.optionToData(elm)); + }); + callback(data); + }; + } else if ("data" in opts) { + // install default initSelection when applied to hidden input and data is local + opts.initSelection = opts.initSelection || function (element, callback) { + var ids = splitVal(element.val(), opts.separator, opts.transformVal); + //search in data by array of ids, storing matching items in a list + var matches = []; + opts.query({ + matcher: function(term, text, el){ + var is_match = $.grep(ids, function(id) { + return equal(id, opts.id(el)); + }).length; + if (is_match) { + matches.push(el); + } + return is_match; + }, + callback: !$.isFunction(callback) ? $.noop : function() { + // reorder matches based on the order they appear in the ids array because right now + // they are in the order in which they appear in data array + var ordered = []; + for (var i = 0; i < ids.length; i++) { + var id = ids[i]; + for (var j = 0; j < matches.length; j++) { + var match = matches[j]; + if (equal(id, opts.id(match))) { + ordered.push(match); + matches.splice(j, 1); + break; + } + } + } + callback(ordered); + } + }); + }; + } + + return opts; + }, + + // multi + selectChoice: function (choice) { + + var selected = this.container.find(".select2-search-choice-focus"); + if (selected.length && choice && choice[0] == selected[0]) { + + } else { + if (selected.length) { + this.opts.element.trigger("choice-deselected", selected); + } + selected.removeClass("select2-search-choice-focus"); + if (choice && choice.length) { + this.close(); + choice.addClass("select2-search-choice-focus"); + this.opts.element.trigger("choice-selected", choice); + } + } + }, + + // multi + destroy: function() { + $("label[for='" + this.search.attr('id') + "']") + .attr('for', this.opts.element.attr("id")); + this.parent.destroy.apply(this, arguments); + + cleanupJQueryElements.call(this, + "searchContainer", + "selection" + ); + }, + + // multi + initContainer: function () { + + var selector = ".select2-choices", selection; + + this.searchContainer = this.container.find(".select2-search-field"); + this.selection = selection = this.container.find(selector); + + var _this = this; + this.selection.on("click", ".select2-container:not(.select2-container-disabled) .select2-search-choice:not(.select2-locked)", function (e) { + _this.search[0].focus(); + _this.selectChoice($(this)); + }); + + // rewrite labels from original element to focusser + this.search.attr("id", "s2id_autogen"+nextUid()); + + this.search.prev() + .text($("label[for='" + this.opts.element.attr("id") + "']").text()) + .attr('for', this.search.attr('id')); + this.opts.element.focus(this.bind(function () { this.focus(); })); + + this.search.on("input paste", this.bind(function() { + if (this.search.attr('placeholder') && this.search.val().length == 0) return; + if (!this.isInterfaceEnabled()) return; + if (!this.opened()) { + this.open(); + } + })); + + this.search.attr("tabindex", this.elementTabIndex); + + this.keydowns = 0; + this.search.on("keydown", this.bind(function (e) { + if (!this.isInterfaceEnabled()) return; + + ++this.keydowns; + var selected = selection.find(".select2-search-choice-focus"); + var prev = selected.prev(".select2-search-choice:not(.select2-locked)"); + var next = selected.next(".select2-search-choice:not(.select2-locked)"); + var pos = getCursorInfo(this.search); + + if (selected.length && + (e.which == KEY.LEFT || e.which == KEY.RIGHT || e.which == KEY.BACKSPACE || e.which == KEY.DELETE || e.which == KEY.ENTER)) { + var selectedChoice = selected; + if (e.which == KEY.LEFT && prev.length) { + selectedChoice = prev; + } + else if (e.which == KEY.RIGHT) { + selectedChoice = next.length ? next : null; + } + else if (e.which === KEY.BACKSPACE) { + if (this.unselect(selected.first())) { + this.search.width(10); + selectedChoice = prev.length ? prev : next; + } + } else if (e.which == KEY.DELETE) { + if (this.unselect(selected.first())) { + this.search.width(10); + selectedChoice = next.length ? next : null; + } + } else if (e.which == KEY.ENTER) { + selectedChoice = null; + } + + this.selectChoice(selectedChoice); + killEvent(e); + if (!selectedChoice || !selectedChoice.length) { + this.open(); + } + return; + } else if (((e.which === KEY.BACKSPACE && this.keydowns == 1) + || e.which == KEY.LEFT) && (pos.offset == 0 && !pos.length)) { + + this.selectChoice(selection.find(".select2-search-choice:not(.select2-locked)").last()); + killEvent(e); + return; + } else { + this.selectChoice(null); + } + + if (this.opened()) { + switch (e.which) { + case KEY.UP: + case KEY.DOWN: + this.moveHighlight((e.which === KEY.UP) ? -1 : 1); + killEvent(e); + return; + case KEY.ENTER: + this.selectHighlighted(); + killEvent(e); + return; + case KEY.TAB: + this.selectHighlighted({noFocus:true}); + this.close(); + return; + case KEY.ESC: + this.cancel(e); + killEvent(e); + return; + } + } + + if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) + || e.which === KEY.BACKSPACE || e.which === KEY.ESC) { + return; + } + + if (e.which === KEY.ENTER) { + if (this.opts.openOnEnter === false) { + return; + } else if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) { + return; + } + } + + this.open(); + + if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) { + // prevent the page from scrolling + killEvent(e); + } + + if (e.which === KEY.ENTER) { + // prevent form from being submitted + killEvent(e); + } + + })); + + this.search.on("keyup", this.bind(function (e) { + this.keydowns = 0; + this.resizeSearch(); + }) + ); + + this.search.on("blur", this.bind(function(e) { + this.container.removeClass("select2-container-active"); + this.search.removeClass("select2-focused"); + this.selectChoice(null); + if (!this.opened()) this.clearSearch(); + e.stopImmediatePropagation(); + this.opts.element.trigger($.Event("select2-blur")); + })); + + this.container.on("click", selector, this.bind(function (e) { + if (!this.isInterfaceEnabled()) return; + if ($(e.target).closest(".select2-search-choice").length > 0) { + // clicked inside a select2 search choice, do not open + return; + } + this.selectChoice(null); + this.clearPlaceholder(); + if (!this.container.hasClass("select2-container-active")) { + this.opts.element.trigger($.Event("select2-focus")); + } + this.open(); + this.focusSearch(); + e.preventDefault(); + })); + + this.container.on("focus", selector, this.bind(function () { + if (!this.isInterfaceEnabled()) return; + if (!this.container.hasClass("select2-container-active")) { + this.opts.element.trigger($.Event("select2-focus")); + } + this.container.addClass("select2-container-active"); + this.dropdown.addClass("select2-drop-active"); + this.clearPlaceholder(); + })); + + this.initContainerWidth(); + this.opts.element.hide(); + + // set the placeholder if necessary + this.clearSearch(); + }, + + // multi + enableInterface: function() { + if (this.parent.enableInterface.apply(this, arguments)) { + this.search.prop("disabled", !this.isInterfaceEnabled()); + } + }, + + // multi + initSelection: function () { + var data; + if (this.opts.element.val() === "" && this.opts.element.text() === "") { + this.updateSelection([]); + this.close(); + // set the placeholder if necessary + this.clearSearch(); + } + if (this.select || this.opts.element.val() !== "") { + var self = this; + this.opts.initSelection.call(null, this.opts.element, function(data){ + if (data !== undefined && data !== null) { + self.updateSelection(data); + self.close(); + // set the placeholder if necessary + self.clearSearch(); + } + }); + } + }, + + // multi + clearSearch: function () { + var placeholder = this.getPlaceholder(), + maxWidth = this.getMaxSearchWidth(); + + if (placeholder !== undefined && this.getVal().length === 0 && this.search.hasClass("select2-focused") === false) { + this.search.val(placeholder).addClass("select2-default"); + // stretch the search box to full width of the container so as much of the placeholder is visible as possible + // we could call this.resizeSearch(), but we do not because that requires a sizer and we do not want to create one so early because of a firefox bug, see #944 + this.search.width(maxWidth > 0 ? maxWidth : this.container.css("width")); + } else { + this.search.val("").width(10); + } + }, + + // multi + clearPlaceholder: function () { + if (this.search.hasClass("select2-default")) { + this.search.val("").removeClass("select2-default"); + } + }, + + // multi + opening: function () { + this.clearPlaceholder(); // should be done before super so placeholder is not used to search + this.resizeSearch(); + + this.parent.opening.apply(this, arguments); + + this.focusSearch(); + + // initializes search's value with nextSearchTerm (if defined by user) + // ignore nextSearchTerm if the dropdown is opened by the user pressing a letter + if(this.search.val() === "") { + if(this.nextSearchTerm != undefined){ + this.search.val(this.nextSearchTerm); + this.search.select(); + } + } + + this.updateResults(true); + if (this.opts.shouldFocusInput(this)) { + this.search.focus(); + } + this.opts.element.trigger($.Event("select2-open")); + }, + + // multi + close: function () { + if (!this.opened()) return; + this.parent.close.apply(this, arguments); + }, + + // multi + focus: function () { + this.close(); + this.search.focus(); + }, + + // multi + isFocused: function () { + return this.search.hasClass("select2-focused"); + }, + + // multi + updateSelection: function (data) { + var ids = [], filtered = [], self = this; + + // filter out duplicates + $(data).each(function () { + if (indexOf(self.id(this), ids) < 0) { + ids.push(self.id(this)); + filtered.push(this); + } + }); + data = filtered; + + this.selection.find(".select2-search-choice").remove(); + $(data).each(function () { + self.addSelectedChoice(this); + }); + self.postprocessResults(); + }, + + // multi + tokenize: function() { + var input = this.search.val(); + input = this.opts.tokenizer.call(this, input, this.data(), this.bind(this.onSelect), this.opts); + if (input != null && input != undefined) { + this.search.val(input); + if (input.length > 0) { + this.open(); + } + } + + }, + + // multi + onSelect: function (data, options) { + + if (!this.triggerSelect(data) || data.text === "") { return; } + + this.addSelectedChoice(data); + + this.opts.element.trigger({ type: "selected", val: this.id(data), choice: data }); + + // keep track of the search's value before it gets cleared + this.nextSearchTerm = this.opts.nextSearchTerm(data, this.search.val()); + + this.clearSearch(); + this.updateResults(); + + if (this.select || !this.opts.closeOnSelect) this.postprocessResults(data, false, this.opts.closeOnSelect===true); + + if (this.opts.closeOnSelect) { + this.close(); + this.search.width(10); + } else { + if (this.countSelectableResults()>0) { + this.search.width(10); + this.resizeSearch(); + if (this.getMaximumSelectionSize() > 0 && this.val().length >= this.getMaximumSelectionSize()) { + // if we reached max selection size repaint the results so choices + // are replaced with the max selection reached message + this.updateResults(true); + } else { + // initializes search's value with nextSearchTerm and update search result + if(this.nextSearchTerm != undefined){ + this.search.val(this.nextSearchTerm); + this.updateResults(); + this.search.select(); + } + } + this.positionDropdown(); + } else { + // if nothing left to select close + this.close(); + this.search.width(10); + } + } + + // since its not possible to select an element that has already been + // added we do not need to check if this is a new element before firing change + this.triggerChange({ added: data }); + + if (!options || !options.noFocus) + this.focusSearch(); + }, + + // multi + cancel: function () { + this.close(); + this.focusSearch(); + }, + + addSelectedChoice: function (data) { + var enableChoice = !data.locked, + enabledItem = $( + "
  • " + + "
    " + + "
    " + + "
  • "), + disabledItem = $( + "
  • " + + "
    " + + "
  • "); + var choice = enableChoice ? enabledItem : disabledItem, + id = this.id(data), + val = this.getVal(), + formatted, + cssClass; + + formatted=this.opts.formatSelection(data, choice.find("div"), this.opts.escapeMarkup); + if (formatted != undefined) { + choice.find("div").replaceWith($("
    ").html(formatted)); + } + cssClass=this.opts.formatSelectionCssClass(data, choice.find("div")); + if (cssClass != undefined) { + choice.addClass(cssClass); + } + + if(enableChoice){ + choice.find(".select2-search-choice-close") + .on("mousedown", killEvent) + .on("click dblclick", this.bind(function (e) { + if (!this.isInterfaceEnabled()) return; + + this.unselect($(e.target)); + this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"); + killEvent(e); + this.close(); + this.focusSearch(); + })).on("focus", this.bind(function () { + if (!this.isInterfaceEnabled()) return; + this.container.addClass("select2-container-active"); + this.dropdown.addClass("select2-drop-active"); + })); + } + + choice.data("select2-data", data); + choice.insertBefore(this.searchContainer); + + val.push(id); + this.setVal(val); + }, + + // multi + unselect: function (selected) { + var val = this.getVal(), + data, + index; + selected = selected.closest(".select2-search-choice"); + + if (selected.length === 0) { + throw "Invalid argument: " + selected + ". Must be .select2-search-choice"; + } + + data = selected.data("select2-data"); + + if (!data) { + // prevent a race condition when the 'x' is clicked really fast repeatedly the event can be queued + // and invoked on an element already removed + return; + } + + var evt = $.Event("select2-removing"); + evt.val = this.id(data); + evt.choice = data; + this.opts.element.trigger(evt); + + if (evt.isDefaultPrevented()) { + return false; + } + + while((index = indexOf(this.id(data), val)) >= 0) { + val.splice(index, 1); + this.setVal(val); + if (this.select) this.postprocessResults(); + } + + selected.remove(); + + this.opts.element.trigger({ type: "select2-removed", val: this.id(data), choice: data }); + this.triggerChange({ removed: data }); + + return true; + }, + + // multi + postprocessResults: function (data, initial, noHighlightUpdate) { + var val = this.getVal(), + choices = this.results.find(".select2-result"), + compound = this.results.find(".select2-result-with-children"), + self = this; + + choices.each2(function (i, choice) { + var id = self.id(choice.data("select2-data")); + if (indexOf(id, val) >= 0) { + choice.addClass("select2-selected"); + // mark all children of the selected parent as selected + choice.find(".select2-result-selectable").addClass("select2-selected"); + } + }); + + compound.each2(function(i, choice) { + // hide an optgroup if it doesn't have any selectable children + if (!choice.is('.select2-result-selectable') + && choice.find(".select2-result-selectable:not(.select2-selected)").length === 0) { + choice.addClass("select2-selected"); + } + }); + + if (this.highlight() == -1 && noHighlightUpdate !== false && this.opts.closeOnSelect === true){ + self.highlight(0); + } + + //If all results are chosen render formatNoMatches + if(!this.opts.createSearchChoice && !choices.filter('.select2-result:not(.select2-selected)').length > 0){ + if(!data || data && !data.more && this.results.find(".select2-no-results").length === 0) { + if (checkFormatter(self.opts.formatNoMatches, "formatNoMatches")) { + this.results.append("
  • " + evaluate(self.opts.formatNoMatches, self.opts.element, self.search.val()) + "
  • "); + } + } + } + + }, + + // multi + getMaxSearchWidth: function() { + return this.selection.width() - getSideBorderPadding(this.search); + }, + + // multi + resizeSearch: function () { + var minimumWidth, left, maxWidth, containerLeft, searchWidth, + sideBorderPadding = getSideBorderPadding(this.search); + + minimumWidth = measureTextWidth(this.search) + 10; + + left = this.search.offset().left; + + maxWidth = this.selection.width(); + containerLeft = this.selection.offset().left; + + searchWidth = maxWidth - (left - containerLeft) - sideBorderPadding; + + if (searchWidth < minimumWidth) { + searchWidth = maxWidth - sideBorderPadding; + } + + if (searchWidth < 40) { + searchWidth = maxWidth - sideBorderPadding; + } + + if (searchWidth <= 0) { + searchWidth = minimumWidth; + } + + this.search.width(Math.floor(searchWidth)); + }, + + // multi + getVal: function () { + var val; + if (this.select) { + val = this.select.val(); + return val === null ? [] : val; + } else { + val = this.opts.element.val(); + return splitVal(val, this.opts.separator, this.opts.transformVal); + } + }, + + // multi + setVal: function (val) { + var unique; + if (this.select) { + this.select.val(val); + } else { + unique = []; + // filter out duplicates + $(val).each(function () { + if (indexOf(this, unique) < 0) unique.push(this); + }); + this.opts.element.val(unique.length === 0 ? "" : unique.join(this.opts.separator)); + } + }, + + // multi + buildChangeDetails: function (old, current) { + var current = current.slice(0), + old = old.slice(0); + + // remove intersection from each array + for (var i = 0; i < current.length; i++) { + for (var j = 0; j < old.length; j++) { + if (equal(this.opts.id(current[i]), this.opts.id(old[j]))) { + current.splice(i, 1); + if(i>0){ + i--; + } + old.splice(j, 1); + j--; + } + } + } + + return {added: current, removed: old}; + }, + + + // multi + val: function (val, triggerChange) { + var oldData, self=this; + + if (arguments.length === 0) { + return this.getVal(); + } + + oldData=this.data(); + if (!oldData.length) oldData=[]; + + // val is an id. !val is true for [undefined,null,'',0] - 0 is legal + if (!val && val !== 0) { + this.opts.element.val(""); + this.updateSelection([]); + this.clearSearch(); + if (triggerChange) { + this.triggerChange({added: this.data(), removed: oldData}); + } + return; + } + + // val is a list of ids + this.setVal(val); + + if (this.select) { + this.opts.initSelection(this.select, this.bind(this.updateSelection)); + if (triggerChange) { + this.triggerChange(this.buildChangeDetails(oldData, this.data())); + } + } else { + if (this.opts.initSelection === undefined) { + throw new Error("val() cannot be called if initSelection() is not defined"); + } + + this.opts.initSelection(this.opts.element, function(data){ + var ids=$.map(data, self.id); + self.setVal(ids); + self.updateSelection(data); + self.clearSearch(); + if (triggerChange) { + self.triggerChange(self.buildChangeDetails(oldData, self.data())); + } + }); + } + this.clearSearch(); + }, + + // multi + onSortStart: function() { + if (this.select) { + throw new Error("Sorting of elements is not supported when attached to instead."); + } + + // collapse search field into 0 width so its container can be collapsed as well + this.search.width(0); + // hide the container + this.searchContainer.hide(); + }, + + // multi + onSortEnd:function() { + + var val=[], self=this; + + // show search and move it to the end of the list + this.searchContainer.show(); + // make sure the search container is the last item in the list + this.searchContainer.appendTo(this.searchContainer.parent()); + // since we collapsed the width in dragStarted, we resize it here + this.resizeSearch(); + + // update selection + this.selection.find(".select2-search-choice").each(function() { + val.push(self.opts.id($(this).data("select2-data"))); + }); + this.setVal(val); + this.triggerChange(); + }, + + // multi + data: function(values, triggerChange) { + var self=this, ids, old; + if (arguments.length === 0) { + return this.selection + .children(".select2-search-choice") + .map(function() { return $(this).data("select2-data"); }) + .get(); + } else { + old = this.data(); + if (!values) { values = []; } + ids = $.map(values, function(e) { return self.opts.id(e); }); + this.setVal(ids); + this.updateSelection(values); + this.clearSearch(); + if (triggerChange) { + this.triggerChange(this.buildChangeDetails(old, this.data())); + } + } + } + }); + + $.fn.select2 = function () { + + var args = Array.prototype.slice.call(arguments, 0), + opts, + select2, + method, value, multiple, + allowedMethods = ["val", "destroy", "opened", "open", "close", "focus", "isFocused", "container", "dropdown", "onSortStart", "onSortEnd", "enable", "disable", "readonly", "positionDropdown", "data", "search"], + valueMethods = ["opened", "isFocused", "container", "dropdown"], + propertyMethods = ["val", "data"], + methodsMap = { search: "externalSearch" }; + + this.each(function () { + if (args.length === 0 || typeof(args[0]) === "object") { + opts = args.length === 0 ? {} : $.extend({}, args[0]); + opts.element = $(this); + + if (opts.element.get(0).tagName.toLowerCase() === "select") { + multiple = opts.element.prop("multiple"); + } else { + multiple = opts.multiple || false; + if ("tags" in opts) {opts.multiple = multiple = true;} + } + + select2 = multiple ? new window.Select2["class"].multi() : new window.Select2["class"].single(); + select2.init(opts); + } else if (typeof(args[0]) === "string") { + + if (indexOf(args[0], allowedMethods) < 0) { + throw "Unknown method: " + args[0]; + } + + value = undefined; + select2 = $(this).data("select2"); + if (select2 === undefined) return; + + method=args[0]; + + if (method === "container") { + value = select2.container; + } else if (method === "dropdown") { + value = select2.dropdown; + } else { + if (methodsMap[method]) method = methodsMap[method]; + + value = select2[method].apply(select2, args.slice(1)); + } + if (indexOf(args[0], valueMethods) >= 0 + || (indexOf(args[0], propertyMethods) >= 0 && args.length == 1)) { + return false; // abort the iteration, ready to return first matched value + } + } else { + throw "Invalid arguments to select2 plugin: " + args; + } + }); + return (value === undefined) ? this : value; + }; + + // plugin defaults, accessible to users + $.fn.select2.defaults = { + width: "copy", + loadMorePadding: 0, + closeOnSelect: true, + openOnEnter: true, + containerCss: {}, + dropdownCss: {}, + containerCssClass: "", + dropdownCssClass: "", + formatResult: function(result, container, query, escapeMarkup) { + var markup=[]; + markMatch(this.text(result), query.term, markup, escapeMarkup); + return markup.join(""); + }, + transformVal: function(val) { + return $.trim(val); + }, + formatSelection: function (data, container, escapeMarkup) { + return data ? escapeMarkup(this.text(data)) : undefined; + }, + sortResults: function (results, container, query) { + return results; + }, + formatResultCssClass: function(data) {return data.css;}, + formatSelectionCssClass: function(data, container) {return undefined;}, + minimumResultsForSearch: 0, + minimumInputLength: 0, + maximumInputLength: null, + maximumSelectionSize: 0, + id: function (e) { return e == undefined ? null : e.id; }, + text: function (e) { + if (e && this.data && this.data.text) { + if ($.isFunction(this.data.text)) { + return this.data.text(e); + } else { + return e[this.data.text]; + } + } else { + return e.text; + } + }, + matcher: function(term, text) { + return stripDiacritics(''+text).toUpperCase().indexOf(stripDiacritics(''+term).toUpperCase()) >= 0; + }, + separator: ",", + tokenSeparators: [], + tokenizer: defaultTokenizer, + escapeMarkup: defaultEscapeMarkup, + blurOnChange: false, + selectOnBlur: false, + adaptContainerCssClass: function(c) { return c; }, + adaptDropdownCssClass: function(c) { return null; }, + nextSearchTerm: function(selectedObject, currentSearchTerm) { return undefined; }, + searchInputPlaceholder: '', + createSearchChoicePosition: 'top', + shouldFocusInput: function (instance) { + // Attempt to detect touch devices + var supportsTouchEvents = (('ontouchstart' in window) || + (navigator.msMaxTouchPoints > 0)); + + // Only devices which support touch events should be special cased + if (!supportsTouchEvents) { + return true; + } + + // Never focus the input if search is disabled + if (instance.opts.minimumResultsForSearch < 0) { + return false; + } + + return true; + } + }; + + $.fn.select2.locales = []; + + $.fn.select2.locales['en'] = { + formatMatches: function (matches) { if (matches === 1) { return "One result is available, press enter to select it."; } return matches + " results are available, use up and down arrow keys to navigate."; }, + formatNoMatches: function () { return "No matches found"; }, + formatAjaxError: function (jqXHR, textStatus, errorThrown) { return "Loading failed"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Please enter " + n + " or more character" + (n == 1 ? "" : "s"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Please delete " + n + " character" + (n == 1 ? "" : "s"); }, + formatSelectionTooBig: function (limit) { return "You can only select " + limit + " item" + (limit == 1 ? "" : "s"); }, + formatLoadMore: function (pageNumber) { return "Loading more results…"; }, + formatSearching: function () { return "Searching…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['en']); + + $.fn.select2.ajaxDefaults = { + transport: $.ajax, + params: { + type: "GET", + cache: false, + dataType: "json" + } + }; + + // exports + window.Select2 = { + query: { + ajax: ajax, + local: local, + tags: tags + }, util: { + debounce: debounce, + markMatch: markMatch, + escapeMarkup: defaultEscapeMarkup, + stripDiacritics: stripDiacritics + }, "class": { + "abstract": AbstractSelect2, + "single": SingleSelect2, + "multi": MultiSelect2 + } + }; + +}(jQuery)); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2.min.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2.min.js new file mode 100644 index 000000000..b56419e2e --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2.min.js @@ -0,0 +1,23 @@ +/* +Copyright 2014 Igor Vaynberg + +Version: 3.5.2 Timestamp: Sat Nov 1 14:43:36 EDT 2014 + +This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU +General Public License version 2 (the "GPL License"). You may choose either license to govern your +use of this software only upon the condition that you accept all of the terms of either the Apache +License or the GPL License. + +You may obtain a copy of the Apache License and the GPL License at: + +http://www.apache.org/licenses/LICENSE-2.0 +http://www.gnu.org/licenses/gpl-2.0.html + +Unless required by applicable law or agreed to in writing, software distributed under the Apache License +or the GPL Licesnse is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +either express or implied. See the Apache License and the GPL License for the specific language governing +permissions and limitations under the Apache License and the GPL License. +*/ +!function(a){"undefined"==typeof a.fn.each2&&a.extend(a.fn,{each2:function(b){for(var c=a([0]),d=-1,e=this.length;++dc;c+=1)if(r(a,b[c]))return c;return-1}function q(){var b=a(l);b.appendTo(document.body);var c={width:b.width()-b[0].clientWidth,height:b.height()-b[0].clientHeight};return b.remove(),c}function r(a,c){return a===c?!0:a===b||c===b?!1:null===a||null===c?!1:a.constructor===String?a+""==c+"":c.constructor===String?c+""==a+"":!1}function s(a,b,c){var d,e,f;if(null===a||a.length<1)return[];for(d=a.split(b),e=0,f=d.length;f>e;e+=1)d[e]=c(d[e]);return d}function t(a){return a.outerWidth(!1)-a.width()}function u(c){var d="keyup-change-value";c.on("keydown",function(){a.data(c,d)===b&&a.data(c,d,c.val())}),c.on("keyup",function(){var e=a.data(c,d);e!==b&&c.val()!==e&&(a.removeData(c,d),c.trigger("keyup-change"))})}function v(c){c.on("mousemove",function(c){var d=h;(d===b||d.x!==c.pageX||d.y!==c.pageY)&&a(c.target).trigger("mousemove-filtered",c)})}function w(a,c,d){d=d||b;var e;return function(){var b=arguments;window.clearTimeout(e),e=window.setTimeout(function(){c.apply(d,b)},a)}}function x(a,b){var c=w(a,function(a){b.trigger("scroll-debounced",a)});b.on("scroll",function(a){p(a.target,b.get())>=0&&c(a)})}function y(a){a[0]!==document.activeElement&&window.setTimeout(function(){var d,b=a[0],c=a.val().length;a.focus();var e=b.offsetWidth>0||b.offsetHeight>0;e&&b===document.activeElement&&(b.setSelectionRange?b.setSelectionRange(c,c):b.createTextRange&&(d=b.createTextRange(),d.collapse(!1),d.select()))},0)}function z(b){b=a(b)[0];var c=0,d=0;if("selectionStart"in b)c=b.selectionStart,d=b.selectionEnd-c;else if("selection"in document){b.focus();var e=document.selection.createRange();d=document.selection.createRange().text.length,e.moveStart("character",-b.value.length),c=e.text.length-d}return{offset:c,length:d}}function A(a){a.preventDefault(),a.stopPropagation()}function B(a){a.preventDefault(),a.stopImmediatePropagation()}function C(b){if(!g){var c=b[0].currentStyle||window.getComputedStyle(b[0],null);g=a(document.createElement("div")).css({position:"absolute",left:"-10000px",top:"-10000px",display:"none",fontSize:c.fontSize,fontFamily:c.fontFamily,fontStyle:c.fontStyle,fontWeight:c.fontWeight,letterSpacing:c.letterSpacing,textTransform:c.textTransform,whiteSpace:"nowrap"}),g.attr("class","select2-sizer"),a(document.body).append(g)}return g.text(b.val()),g.width()}function D(b,c,d){var e,g,f=[];e=a.trim(b.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each2(function(){0===this.indexOf("select2-")&&f.push(this)})),e=a.trim(c.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each2(function(){0!==this.indexOf("select2-")&&(g=d(this),g&&f.push(g))})),b.attr("class",f.join(" "))}function E(a,b,c,d){var e=o(a.toUpperCase()).indexOf(o(b.toUpperCase())),f=b.length;return 0>e?(c.push(d(a)),void 0):(c.push(d(a.substring(0,e))),c.push(""),c.push(d(a.substring(e,e+f))),c.push(""),c.push(d(a.substring(e+f,a.length))),void 0)}function F(a){var b={"\\":"\","&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})}function G(c){var d,e=null,f=c.quietMillis||100,g=c.url,h=this;return function(i){window.clearTimeout(d),d=window.setTimeout(function(){var d=c.data,f=g,j=c.transport||a.fn.select2.ajaxDefaults.transport,k={type:c.type||"GET",cache:c.cache||!1,jsonpCallback:c.jsonpCallback||b,dataType:c.dataType||"json"},l=a.extend({},a.fn.select2.ajaxDefaults.params,k);d=d?d.call(h,i.term,i.page,i.context):null,f="function"==typeof f?f.call(h,i.term,i.page,i.context):f,e&&"function"==typeof e.abort&&e.abort(),c.params&&(a.isFunction(c.params)?a.extend(l,c.params.call(h)):a.extend(l,c.params)),a.extend(l,{url:f,dataType:c.dataType,data:d,success:function(a){var b=c.results(a,i.page,i);i.callback(b)},error:function(a,b,c){var d={hasError:!0,jqXHR:a,textStatus:b,errorThrown:c};i.callback(d)}}),e=j.call(h,l)},f)}}function H(b){var d,e,c=b,f=function(a){return""+a.text};a.isArray(c)&&(e=c,c={results:e}),a.isFunction(c)===!1&&(e=c,c=function(){return e});var g=c();return g.text&&(f=g.text,a.isFunction(f)||(d=g.text,f=function(a){return a[d]})),function(b){var g,d=b.term,e={results:[]};return""===d?(b.callback(c()),void 0):(g=function(c,e){var h,i;if(c=c[0],c.children){h={};for(i in c)c.hasOwnProperty(i)&&(h[i]=c[i]);h.children=[],a(c.children).each2(function(a,b){g(b,h.children)}),(h.children.length||b.matcher(d,f(h),c))&&e.push(h)}else b.matcher(d,f(c),c)&&e.push(c)},a(c().results).each2(function(a,b){g(b,e.results)}),b.callback(e),void 0)}}function I(c){var d=a.isFunction(c);return function(e){var f=e.term,g={results:[]},h=d?c(e):c;a.isArray(h)&&(a(h).each(function(){var a=this.text!==b,c=a?this.text:this;(""===f||e.matcher(f,c))&&g.results.push(a?this:{id:this,text:this})}),e.callback(g))}}function J(b,c){if(a.isFunction(b))return!0;if(!b)return!1;if("string"==typeof b)return!0;throw new Error(c+" must be a string, function, or falsy value")}function K(b,c){if(a.isFunction(b)){var d=Array.prototype.slice.call(arguments,2);return b.apply(c,d)}return b}function L(b){var c=0;return a.each(b,function(a,b){b.children?c+=L(b.children):c++}),c}function M(a,c,d,e){var h,i,j,k,l,f=a,g=!1;if(!e.createSearchChoice||!e.tokenSeparators||e.tokenSeparators.length<1)return b;for(;;){for(i=-1,j=0,k=e.tokenSeparators.length;k>j&&(l=e.tokenSeparators[j],i=a.indexOf(l),!(i>=0));j++);if(0>i)break;if(h=a.substring(0,i),a=a.substring(i+l.length),h.length>0&&(h=e.createSearchChoice.call(this,h,c),h!==b&&null!==h&&e.id(h)!==b&&null!==e.id(h))){for(g=!1,j=0,k=c.length;k>j;j++)if(r(e.id(h),e.id(c[j]))){g=!0;break}g||d(h)}}return f!==a?a:void 0}function N(){var b=this;a.each(arguments,function(a,c){b[c].remove(),b[c]=null})}function O(b,c){var d=function(){};return d.prototype=new b,d.prototype.constructor=d,d.prototype.parent=b.prototype,d.prototype=a.extend(d.prototype,c),d}if(window.Select2===b){var c,d,e,f,g,i,j,h={x:0,y:0},k={TAB:9,ENTER:13,ESC:27,SPACE:32,LEFT:37,UP:38,RIGHT:39,DOWN:40,SHIFT:16,CTRL:17,ALT:18,PAGE_UP:33,PAGE_DOWN:34,HOME:36,END:35,BACKSPACE:8,DELETE:46,isArrow:function(a){switch(a=a.which?a.which:a){case k.LEFT:case k.RIGHT:case k.UP:case k.DOWN:return!0}return!1},isControl:function(a){var b=a.which;switch(b){case k.SHIFT:case k.CTRL:case k.ALT:return!0}return a.metaKey?!0:!1},isFunctionKey:function(a){return a=a.which?a.which:a,a>=112&&123>=a}},l="
    ",m={"\u24b6":"A","\uff21":"A","\xc0":"A","\xc1":"A","\xc2":"A","\u1ea6":"A","\u1ea4":"A","\u1eaa":"A","\u1ea8":"A","\xc3":"A","\u0100":"A","\u0102":"A","\u1eb0":"A","\u1eae":"A","\u1eb4":"A","\u1eb2":"A","\u0226":"A","\u01e0":"A","\xc4":"A","\u01de":"A","\u1ea2":"A","\xc5":"A","\u01fa":"A","\u01cd":"A","\u0200":"A","\u0202":"A","\u1ea0":"A","\u1eac":"A","\u1eb6":"A","\u1e00":"A","\u0104":"A","\u023a":"A","\u2c6f":"A","\ua732":"AA","\xc6":"AE","\u01fc":"AE","\u01e2":"AE","\ua734":"AO","\ua736":"AU","\ua738":"AV","\ua73a":"AV","\ua73c":"AY","\u24b7":"B","\uff22":"B","\u1e02":"B","\u1e04":"B","\u1e06":"B","\u0243":"B","\u0182":"B","\u0181":"B","\u24b8":"C","\uff23":"C","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\xc7":"C","\u1e08":"C","\u0187":"C","\u023b":"C","\ua73e":"C","\u24b9":"D","\uff24":"D","\u1e0a":"D","\u010e":"D","\u1e0c":"D","\u1e10":"D","\u1e12":"D","\u1e0e":"D","\u0110":"D","\u018b":"D","\u018a":"D","\u0189":"D","\ua779":"D","\u01f1":"DZ","\u01c4":"DZ","\u01f2":"Dz","\u01c5":"Dz","\u24ba":"E","\uff25":"E","\xc8":"E","\xc9":"E","\xca":"E","\u1ec0":"E","\u1ebe":"E","\u1ec4":"E","\u1ec2":"E","\u1ebc":"E","\u0112":"E","\u1e14":"E","\u1e16":"E","\u0114":"E","\u0116":"E","\xcb":"E","\u1eba":"E","\u011a":"E","\u0204":"E","\u0206":"E","\u1eb8":"E","\u1ec6":"E","\u0228":"E","\u1e1c":"E","\u0118":"E","\u1e18":"E","\u1e1a":"E","\u0190":"E","\u018e":"E","\u24bb":"F","\uff26":"F","\u1e1e":"F","\u0191":"F","\ua77b":"F","\u24bc":"G","\uff27":"G","\u01f4":"G","\u011c":"G","\u1e20":"G","\u011e":"G","\u0120":"G","\u01e6":"G","\u0122":"G","\u01e4":"G","\u0193":"G","\ua7a0":"G","\ua77d":"G","\ua77e":"G","\u24bd":"H","\uff28":"H","\u0124":"H","\u1e22":"H","\u1e26":"H","\u021e":"H","\u1e24":"H","\u1e28":"H","\u1e2a":"H","\u0126":"H","\u2c67":"H","\u2c75":"H","\ua78d":"H","\u24be":"I","\uff29":"I","\xcc":"I","\xcd":"I","\xce":"I","\u0128":"I","\u012a":"I","\u012c":"I","\u0130":"I","\xcf":"I","\u1e2e":"I","\u1ec8":"I","\u01cf":"I","\u0208":"I","\u020a":"I","\u1eca":"I","\u012e":"I","\u1e2c":"I","\u0197":"I","\u24bf":"J","\uff2a":"J","\u0134":"J","\u0248":"J","\u24c0":"K","\uff2b":"K","\u1e30":"K","\u01e8":"K","\u1e32":"K","\u0136":"K","\u1e34":"K","\u0198":"K","\u2c69":"K","\ua740":"K","\ua742":"K","\ua744":"K","\ua7a2":"K","\u24c1":"L","\uff2c":"L","\u013f":"L","\u0139":"L","\u013d":"L","\u1e36":"L","\u1e38":"L","\u013b":"L","\u1e3c":"L","\u1e3a":"L","\u0141":"L","\u023d":"L","\u2c62":"L","\u2c60":"L","\ua748":"L","\ua746":"L","\ua780":"L","\u01c7":"LJ","\u01c8":"Lj","\u24c2":"M","\uff2d":"M","\u1e3e":"M","\u1e40":"M","\u1e42":"M","\u2c6e":"M","\u019c":"M","\u24c3":"N","\uff2e":"N","\u01f8":"N","\u0143":"N","\xd1":"N","\u1e44":"N","\u0147":"N","\u1e46":"N","\u0145":"N","\u1e4a":"N","\u1e48":"N","\u0220":"N","\u019d":"N","\ua790":"N","\ua7a4":"N","\u01ca":"NJ","\u01cb":"Nj","\u24c4":"O","\uff2f":"O","\xd2":"O","\xd3":"O","\xd4":"O","\u1ed2":"O","\u1ed0":"O","\u1ed6":"O","\u1ed4":"O","\xd5":"O","\u1e4c":"O","\u022c":"O","\u1e4e":"O","\u014c":"O","\u1e50":"O","\u1e52":"O","\u014e":"O","\u022e":"O","\u0230":"O","\xd6":"O","\u022a":"O","\u1ece":"O","\u0150":"O","\u01d1":"O","\u020c":"O","\u020e":"O","\u01a0":"O","\u1edc":"O","\u1eda":"O","\u1ee0":"O","\u1ede":"O","\u1ee2":"O","\u1ecc":"O","\u1ed8":"O","\u01ea":"O","\u01ec":"O","\xd8":"O","\u01fe":"O","\u0186":"O","\u019f":"O","\ua74a":"O","\ua74c":"O","\u01a2":"OI","\ua74e":"OO","\u0222":"OU","\u24c5":"P","\uff30":"P","\u1e54":"P","\u1e56":"P","\u01a4":"P","\u2c63":"P","\ua750":"P","\ua752":"P","\ua754":"P","\u24c6":"Q","\uff31":"Q","\ua756":"Q","\ua758":"Q","\u024a":"Q","\u24c7":"R","\uff32":"R","\u0154":"R","\u1e58":"R","\u0158":"R","\u0210":"R","\u0212":"R","\u1e5a":"R","\u1e5c":"R","\u0156":"R","\u1e5e":"R","\u024c":"R","\u2c64":"R","\ua75a":"R","\ua7a6":"R","\ua782":"R","\u24c8":"S","\uff33":"S","\u1e9e":"S","\u015a":"S","\u1e64":"S","\u015c":"S","\u1e60":"S","\u0160":"S","\u1e66":"S","\u1e62":"S","\u1e68":"S","\u0218":"S","\u015e":"S","\u2c7e":"S","\ua7a8":"S","\ua784":"S","\u24c9":"T","\uff34":"T","\u1e6a":"T","\u0164":"T","\u1e6c":"T","\u021a":"T","\u0162":"T","\u1e70":"T","\u1e6e":"T","\u0166":"T","\u01ac":"T","\u01ae":"T","\u023e":"T","\ua786":"T","\ua728":"TZ","\u24ca":"U","\uff35":"U","\xd9":"U","\xda":"U","\xdb":"U","\u0168":"U","\u1e78":"U","\u016a":"U","\u1e7a":"U","\u016c":"U","\xdc":"U","\u01db":"U","\u01d7":"U","\u01d5":"U","\u01d9":"U","\u1ee6":"U","\u016e":"U","\u0170":"U","\u01d3":"U","\u0214":"U","\u0216":"U","\u01af":"U","\u1eea":"U","\u1ee8":"U","\u1eee":"U","\u1eec":"U","\u1ef0":"U","\u1ee4":"U","\u1e72":"U","\u0172":"U","\u1e76":"U","\u1e74":"U","\u0244":"U","\u24cb":"V","\uff36":"V","\u1e7c":"V","\u1e7e":"V","\u01b2":"V","\ua75e":"V","\u0245":"V","\ua760":"VY","\u24cc":"W","\uff37":"W","\u1e80":"W","\u1e82":"W","\u0174":"W","\u1e86":"W","\u1e84":"W","\u1e88":"W","\u2c72":"W","\u24cd":"X","\uff38":"X","\u1e8a":"X","\u1e8c":"X","\u24ce":"Y","\uff39":"Y","\u1ef2":"Y","\xdd":"Y","\u0176":"Y","\u1ef8":"Y","\u0232":"Y","\u1e8e":"Y","\u0178":"Y","\u1ef6":"Y","\u1ef4":"Y","\u01b3":"Y","\u024e":"Y","\u1efe":"Y","\u24cf":"Z","\uff3a":"Z","\u0179":"Z","\u1e90":"Z","\u017b":"Z","\u017d":"Z","\u1e92":"Z","\u1e94":"Z","\u01b5":"Z","\u0224":"Z","\u2c7f":"Z","\u2c6b":"Z","\ua762":"Z","\u24d0":"a","\uff41":"a","\u1e9a":"a","\xe0":"a","\xe1":"a","\xe2":"a","\u1ea7":"a","\u1ea5":"a","\u1eab":"a","\u1ea9":"a","\xe3":"a","\u0101":"a","\u0103":"a","\u1eb1":"a","\u1eaf":"a","\u1eb5":"a","\u1eb3":"a","\u0227":"a","\u01e1":"a","\xe4":"a","\u01df":"a","\u1ea3":"a","\xe5":"a","\u01fb":"a","\u01ce":"a","\u0201":"a","\u0203":"a","\u1ea1":"a","\u1ead":"a","\u1eb7":"a","\u1e01":"a","\u0105":"a","\u2c65":"a","\u0250":"a","\ua733":"aa","\xe6":"ae","\u01fd":"ae","\u01e3":"ae","\ua735":"ao","\ua737":"au","\ua739":"av","\ua73b":"av","\ua73d":"ay","\u24d1":"b","\uff42":"b","\u1e03":"b","\u1e05":"b","\u1e07":"b","\u0180":"b","\u0183":"b","\u0253":"b","\u24d2":"c","\uff43":"c","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\xe7":"c","\u1e09":"c","\u0188":"c","\u023c":"c","\ua73f":"c","\u2184":"c","\u24d3":"d","\uff44":"d","\u1e0b":"d","\u010f":"d","\u1e0d":"d","\u1e11":"d","\u1e13":"d","\u1e0f":"d","\u0111":"d","\u018c":"d","\u0256":"d","\u0257":"d","\ua77a":"d","\u01f3":"dz","\u01c6":"dz","\u24d4":"e","\uff45":"e","\xe8":"e","\xe9":"e","\xea":"e","\u1ec1":"e","\u1ebf":"e","\u1ec5":"e","\u1ec3":"e","\u1ebd":"e","\u0113":"e","\u1e15":"e","\u1e17":"e","\u0115":"e","\u0117":"e","\xeb":"e","\u1ebb":"e","\u011b":"e","\u0205":"e","\u0207":"e","\u1eb9":"e","\u1ec7":"e","\u0229":"e","\u1e1d":"e","\u0119":"e","\u1e19":"e","\u1e1b":"e","\u0247":"e","\u025b":"e","\u01dd":"e","\u24d5":"f","\uff46":"f","\u1e1f":"f","\u0192":"f","\ua77c":"f","\u24d6":"g","\uff47":"g","\u01f5":"g","\u011d":"g","\u1e21":"g","\u011f":"g","\u0121":"g","\u01e7":"g","\u0123":"g","\u01e5":"g","\u0260":"g","\ua7a1":"g","\u1d79":"g","\ua77f":"g","\u24d7":"h","\uff48":"h","\u0125":"h","\u1e23":"h","\u1e27":"h","\u021f":"h","\u1e25":"h","\u1e29":"h","\u1e2b":"h","\u1e96":"h","\u0127":"h","\u2c68":"h","\u2c76":"h","\u0265":"h","\u0195":"hv","\u24d8":"i","\uff49":"i","\xec":"i","\xed":"i","\xee":"i","\u0129":"i","\u012b":"i","\u012d":"i","\xef":"i","\u1e2f":"i","\u1ec9":"i","\u01d0":"i","\u0209":"i","\u020b":"i","\u1ecb":"i","\u012f":"i","\u1e2d":"i","\u0268":"i","\u0131":"i","\u24d9":"j","\uff4a":"j","\u0135":"j","\u01f0":"j","\u0249":"j","\u24da":"k","\uff4b":"k","\u1e31":"k","\u01e9":"k","\u1e33":"k","\u0137":"k","\u1e35":"k","\u0199":"k","\u2c6a":"k","\ua741":"k","\ua743":"k","\ua745":"k","\ua7a3":"k","\u24db":"l","\uff4c":"l","\u0140":"l","\u013a":"l","\u013e":"l","\u1e37":"l","\u1e39":"l","\u013c":"l","\u1e3d":"l","\u1e3b":"l","\u017f":"l","\u0142":"l","\u019a":"l","\u026b":"l","\u2c61":"l","\ua749":"l","\ua781":"l","\ua747":"l","\u01c9":"lj","\u24dc":"m","\uff4d":"m","\u1e3f":"m","\u1e41":"m","\u1e43":"m","\u0271":"m","\u026f":"m","\u24dd":"n","\uff4e":"n","\u01f9":"n","\u0144":"n","\xf1":"n","\u1e45":"n","\u0148":"n","\u1e47":"n","\u0146":"n","\u1e4b":"n","\u1e49":"n","\u019e":"n","\u0272":"n","\u0149":"n","\ua791":"n","\ua7a5":"n","\u01cc":"nj","\u24de":"o","\uff4f":"o","\xf2":"o","\xf3":"o","\xf4":"o","\u1ed3":"o","\u1ed1":"o","\u1ed7":"o","\u1ed5":"o","\xf5":"o","\u1e4d":"o","\u022d":"o","\u1e4f":"o","\u014d":"o","\u1e51":"o","\u1e53":"o","\u014f":"o","\u022f":"o","\u0231":"o","\xf6":"o","\u022b":"o","\u1ecf":"o","\u0151":"o","\u01d2":"o","\u020d":"o","\u020f":"o","\u01a1":"o","\u1edd":"o","\u1edb":"o","\u1ee1":"o","\u1edf":"o","\u1ee3":"o","\u1ecd":"o","\u1ed9":"o","\u01eb":"o","\u01ed":"o","\xf8":"o","\u01ff":"o","\u0254":"o","\ua74b":"o","\ua74d":"o","\u0275":"o","\u01a3":"oi","\u0223":"ou","\ua74f":"oo","\u24df":"p","\uff50":"p","\u1e55":"p","\u1e57":"p","\u01a5":"p","\u1d7d":"p","\ua751":"p","\ua753":"p","\ua755":"p","\u24e0":"q","\uff51":"q","\u024b":"q","\ua757":"q","\ua759":"q","\u24e1":"r","\uff52":"r","\u0155":"r","\u1e59":"r","\u0159":"r","\u0211":"r","\u0213":"r","\u1e5b":"r","\u1e5d":"r","\u0157":"r","\u1e5f":"r","\u024d":"r","\u027d":"r","\ua75b":"r","\ua7a7":"r","\ua783":"r","\u24e2":"s","\uff53":"s","\xdf":"s","\u015b":"s","\u1e65":"s","\u015d":"s","\u1e61":"s","\u0161":"s","\u1e67":"s","\u1e63":"s","\u1e69":"s","\u0219":"s","\u015f":"s","\u023f":"s","\ua7a9":"s","\ua785":"s","\u1e9b":"s","\u24e3":"t","\uff54":"t","\u1e6b":"t","\u1e97":"t","\u0165":"t","\u1e6d":"t","\u021b":"t","\u0163":"t","\u1e71":"t","\u1e6f":"t","\u0167":"t","\u01ad":"t","\u0288":"t","\u2c66":"t","\ua787":"t","\ua729":"tz","\u24e4":"u","\uff55":"u","\xf9":"u","\xfa":"u","\xfb":"u","\u0169":"u","\u1e79":"u","\u016b":"u","\u1e7b":"u","\u016d":"u","\xfc":"u","\u01dc":"u","\u01d8":"u","\u01d6":"u","\u01da":"u","\u1ee7":"u","\u016f":"u","\u0171":"u","\u01d4":"u","\u0215":"u","\u0217":"u","\u01b0":"u","\u1eeb":"u","\u1ee9":"u","\u1eef":"u","\u1eed":"u","\u1ef1":"u","\u1ee5":"u","\u1e73":"u","\u0173":"u","\u1e77":"u","\u1e75":"u","\u0289":"u","\u24e5":"v","\uff56":"v","\u1e7d":"v","\u1e7f":"v","\u028b":"v","\ua75f":"v","\u028c":"v","\ua761":"vy","\u24e6":"w","\uff57":"w","\u1e81":"w","\u1e83":"w","\u0175":"w","\u1e87":"w","\u1e85":"w","\u1e98":"w","\u1e89":"w","\u2c73":"w","\u24e7":"x","\uff58":"x","\u1e8b":"x","\u1e8d":"x","\u24e8":"y","\uff59":"y","\u1ef3":"y","\xfd":"y","\u0177":"y","\u1ef9":"y","\u0233":"y","\u1e8f":"y","\xff":"y","\u1ef7":"y","\u1e99":"y","\u1ef5":"y","\u01b4":"y","\u024f":"y","\u1eff":"y","\u24e9":"z","\uff5a":"z","\u017a":"z","\u1e91":"z","\u017c":"z","\u017e":"z","\u1e93":"z","\u1e95":"z","\u01b6":"z","\u0225":"z","\u0240":"z","\u2c6c":"z","\ua763":"z","\u0386":"\u0391","\u0388":"\u0395","\u0389":"\u0397","\u038a":"\u0399","\u03aa":"\u0399","\u038c":"\u039f","\u038e":"\u03a5","\u03ab":"\u03a5","\u038f":"\u03a9","\u03ac":"\u03b1","\u03ad":"\u03b5","\u03ae":"\u03b7","\u03af":"\u03b9","\u03ca":"\u03b9","\u0390":"\u03b9","\u03cc":"\u03bf","\u03cd":"\u03c5","\u03cb":"\u03c5","\u03b0":"\u03c5","\u03c9":"\u03c9","\u03c2":"\u03c3"};i=a(document),f=function(){var a=1;return function(){return a++}}(),c=O(Object,{bind:function(a){var b=this;return function(){a.apply(b,arguments)}},init:function(c){var d,e,g=".select2-results";this.opts=c=this.prepareOpts(c),this.id=c.id,c.element.data("select2")!==b&&null!==c.element.data("select2")&&c.element.data("select2").destroy(),this.container=this.createContainer(),this.liveRegion=a(".select2-hidden-accessible"),0==this.liveRegion.length&&(this.liveRegion=a("",{role:"status","aria-live":"polite"}).addClass("select2-hidden-accessible").appendTo(document.body)),this.containerId="s2id_"+(c.element.attr("id")||"autogen"+f()),this.containerEventName=this.containerId.replace(/([.])/g,"_").replace(/([;&,\-\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g,"\\$1"),this.container.attr("id",this.containerId),this.container.attr("title",c.element.attr("title")),this.body=a(document.body),D(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.attr("style",c.element.attr("style")),this.container.css(K(c.containerCss,this.opts.element)),this.container.addClass(K(c.containerCssClass,this.opts.element)),this.elementTabIndex=this.opts.element.attr("tabindex"),this.opts.element.data("select2",this).attr("tabindex","-1").before(this.container).on("click.select2",A),this.container.data("select2",this),this.dropdown=this.container.find(".select2-drop"),D(this.dropdown,this.opts.element,this.opts.adaptDropdownCssClass),this.dropdown.addClass(K(c.dropdownCssClass,this.opts.element)),this.dropdown.data("select2",this),this.dropdown.on("click",A),this.results=d=this.container.find(g),this.search=e=this.container.find("input.select2-input"),this.queryCount=0,this.resultsPage=0,this.context=null,this.initContainer(),this.container.on("click",A),v(this.results),this.dropdown.on("mousemove-filtered",g,this.bind(this.highlightUnderEvent)),this.dropdown.on("touchstart touchmove touchend",g,this.bind(function(a){this._touchEvent=!0,this.highlightUnderEvent(a)})),this.dropdown.on("touchmove",g,this.bind(this.touchMoved)),this.dropdown.on("touchstart touchend",g,this.bind(this.clearTouchMoved)),this.dropdown.on("click",this.bind(function(){this._touchEvent&&(this._touchEvent=!1,this.selectHighlighted())})),x(80,this.results),this.dropdown.on("scroll-debounced",g,this.bind(this.loadMoreIfNeeded)),a(this.container).on("change",".select2-input",function(a){a.stopPropagation()}),a(this.dropdown).on("change",".select2-input",function(a){a.stopPropagation()}),a.fn.mousewheel&&d.mousewheel(function(a,b,c,e){var f=d.scrollTop();e>0&&0>=f-e?(d.scrollTop(0),A(a)):0>e&&d.get(0).scrollHeight-d.scrollTop()+e<=d.height()&&(d.scrollTop(d.get(0).scrollHeight-d.height()),A(a))}),u(e),e.on("keyup-change input paste",this.bind(this.updateResults)),e.on("focus",function(){e.addClass("select2-focused")}),e.on("blur",function(){e.removeClass("select2-focused")}),this.dropdown.on("mouseup",g,this.bind(function(b){a(b.target).closest(".select2-result-selectable").length>0&&(this.highlightUnderEvent(b),this.selectHighlighted(b))})),this.dropdown.on("click mouseup mousedown touchstart touchend focusin",function(a){a.stopPropagation()}),this.nextSearchTerm=b,a.isFunction(this.opts.initSelection)&&(this.initSelection(),this.monitorSource()),null!==c.maximumInputLength&&this.search.attr("maxlength",c.maximumInputLength);var h=c.element.prop("disabled");h===b&&(h=!1),this.enable(!h);var i=c.element.prop("readonly");i===b&&(i=!1),this.readonly(i),j=j||q(),this.autofocus=c.element.prop("autofocus"),c.element.prop("autofocus",!1),this.autofocus&&this.focus(),this.search.attr("placeholder",c.searchInputPlaceholder)},destroy:function(){var a=this.opts.element,c=a.data("select2"),d=this;this.close(),a.length&&a[0].detachEvent&&d._sync&&a.each(function(){d._sync&&this.detachEvent("onpropertychange",d._sync)}),this.propertyObserver&&(this.propertyObserver.disconnect(),this.propertyObserver=null),this._sync=null,c!==b&&(c.container.remove(),c.liveRegion.remove(),c.dropdown.remove(),a.show().removeData("select2").off(".select2").prop("autofocus",this.autofocus||!1),this.elementTabIndex?a.attr({tabindex:this.elementTabIndex}):a.removeAttr("tabindex"),a.show()),N.call(this,"container","liveRegion","dropdown","results","search")},optionToData:function(a){return a.is("option")?{id:a.prop("value"),text:a.text(),element:a.get(),css:a.attr("class"),disabled:a.prop("disabled"),locked:r(a.attr("locked"),"locked")||r(a.data("locked"),!0)}:a.is("optgroup")?{text:a.attr("label"),children:[],element:a.get(),css:a.attr("class")}:void 0},prepareOpts:function(c){var d,e,g,h,i=this;if(d=c.element,"select"===d.get(0).tagName.toLowerCase()&&(this.select=e=c.element),e&&a.each(["id","multiple","ajax","query","createSearchChoice","initSelection","data","tags"],function(){if(this in c)throw new Error("Option '"+this+"' is not allowed for Select2 when attached to a ","
    "," ","
      ","
    ","
    "].join(""));return b},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.focusser.prop("disabled",!this.isInterfaceEnabled())},opening:function(){var c,d,e;this.opts.minimumResultsForSearch>=0&&this.showSearch(!0),this.parent.opening.apply(this,arguments),this.showSearchInput!==!1&&this.search.val(this.focusser.val()),this.opts.shouldFocusInput(this)&&(this.search.focus(),c=this.search.get(0),c.createTextRange?(d=c.createTextRange(),d.collapse(!1),d.select()):c.setSelectionRange&&(e=this.search.val().length,c.setSelectionRange(e,e))),""===this.search.val()&&this.nextSearchTerm!=b&&(this.search.val(this.nextSearchTerm),this.search.select()),this.focusser.prop("disabled",!0).val(""),this.updateResults(!0),this.opts.element.trigger(a.Event("select2-open"))},close:function(){this.opened()&&(this.parent.close.apply(this,arguments),this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus())},focus:function(){this.opened()?this.close():(this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus())},isFocused:function(){return this.container.hasClass("select2-container-active")},cancel:function(){this.parent.cancel.apply(this,arguments),this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus()},destroy:function(){a("label[for='"+this.focusser.attr("id")+"']").attr("for",this.opts.element.attr("id")),this.parent.destroy.apply(this,arguments),N.call(this,"selection","focusser")},initContainer:function(){var b,g,c=this.container,d=this.dropdown,e=f();this.opts.minimumResultsForSearch<0?this.showSearch(!1):this.showSearch(!0),this.selection=b=c.find(".select2-choice"),this.focusser=c.find(".select2-focusser"),b.find(".select2-chosen").attr("id","select2-chosen-"+e),this.focusser.attr("aria-labelledby","select2-chosen-"+e),this.results.attr("id","select2-results-"+e),this.search.attr("aria-owns","select2-results-"+e),this.focusser.attr("id","s2id_autogen"+e),g=a("label[for='"+this.opts.element.attr("id")+"']"),this.opts.element.focus(this.bind(function(){this.focus()})),this.focusser.prev().text(g.text()).attr("for",this.focusser.attr("id"));var h=this.opts.element.attr("title");this.opts.element.attr("title",h||g.text()),this.focusser.attr("tabindex",this.elementTabIndex),this.search.attr("id",this.focusser.attr("id")+"_search"),this.search.prev().text(a("label[for='"+this.focusser.attr("id")+"']").text()).attr("for",this.search.attr("id")),this.search.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()&&229!=a.keyCode){if(a.which===k.PAGE_UP||a.which===k.PAGE_DOWN)return A(a),void 0;switch(a.which){case k.UP:case k.DOWN:return this.moveHighlight(a.which===k.UP?-1:1),A(a),void 0;case k.ENTER:return this.selectHighlighted(),A(a),void 0;case k.TAB:return this.selectHighlighted({noFocus:!0}),void 0;case k.ESC:return this.cancel(a),A(a),void 0}}})),this.search.on("blur",this.bind(function(){document.activeElement===this.body.get(0)&&window.setTimeout(this.bind(function(){this.opened()&&this.search.focus()}),0)})),this.focusser.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()&&a.which!==k.TAB&&!k.isControl(a)&&!k.isFunctionKey(a)&&a.which!==k.ESC){if(this.opts.openOnEnter===!1&&a.which===k.ENTER)return A(a),void 0;if(a.which==k.DOWN||a.which==k.UP||a.which==k.ENTER&&this.opts.openOnEnter){if(a.altKey||a.ctrlKey||a.shiftKey||a.metaKey)return;return this.open(),A(a),void 0}return a.which==k.DELETE||a.which==k.BACKSPACE?(this.opts.allowClear&&this.clear(),A(a),void 0):void 0}})),u(this.focusser),this.focusser.on("keyup-change input",this.bind(function(a){if(this.opts.minimumResultsForSearch>=0){if(a.stopPropagation(),this.opened())return;this.open()}})),b.on("mousedown touchstart","abbr",this.bind(function(a){this.isInterfaceEnabled()&&(this.clear(),B(a),this.close(),this.selection&&this.selection.focus())})),b.on("mousedown touchstart",this.bind(function(c){n(b),this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.opened()?this.close():this.isInterfaceEnabled()&&this.open(),A(c)})),d.on("mousedown touchstart",this.bind(function(){this.opts.shouldFocusInput(this)&&this.search.focus()})),b.on("focus",this.bind(function(a){A(a)})),this.focusser.on("focus",this.bind(function(){this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active")})).on("blur",this.bind(function(){this.opened()||(this.container.removeClass("select2-container-active"),this.opts.element.trigger(a.Event("select2-blur")))})),this.search.on("focus",this.bind(function(){this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active")})),this.initContainerWidth(),this.opts.element.hide(),this.setPlaceholder()},clear:function(b){var c=this.selection.data("select2-data");if(c){var d=a.Event("select2-clearing");if(this.opts.element.trigger(d),d.isDefaultPrevented())return;var e=this.getPlaceholderOption();this.opts.element.val(e?e.val():""),this.selection.find(".select2-chosen").empty(),this.selection.removeData("select2-data"),this.setPlaceholder(),b!==!1&&(this.opts.element.trigger({type:"select2-removed",val:this.id(c),choice:c}),this.triggerChange({removed:c}))}},initSelection:function(){if(this.isPlaceholderOptionSelected())this.updateSelection(null),this.close(),this.setPlaceholder();else{var c=this;this.opts.initSelection.call(null,this.opts.element,function(a){a!==b&&null!==a&&(c.updateSelection(a),c.close(),c.setPlaceholder(),c.nextSearchTerm=c.opts.nextSearchTerm(a,c.search.val()))})}},isPlaceholderOptionSelected:function(){var a;return this.getPlaceholder()===b?!1:(a=this.getPlaceholderOption())!==b&&a.prop("selected")||""===this.opts.element.val()||this.opts.element.val()===b||null===this.opts.element.val()},prepareOpts:function(){var b=this.parent.prepareOpts.apply(this,arguments),c=this;return"select"===b.element.get(0).tagName.toLowerCase()?b.initSelection=function(a,b){var d=a.find("option").filter(function(){return this.selected&&!this.disabled});b(c.optionToData(d))}:"data"in b&&(b.initSelection=b.initSelection||function(c,d){var e=c.val(),f=null;b.query({matcher:function(a,c,d){var g=r(e,b.id(d));return g&&(f=d),g},callback:a.isFunction(d)?function(){d(f)}:a.noop})}),b},getPlaceholder:function(){return this.select&&this.getPlaceholderOption()===b?b:this.parent.getPlaceholder.apply(this,arguments)},setPlaceholder:function(){var a=this.getPlaceholder();if(this.isPlaceholderOptionSelected()&&a!==b){if(this.select&&this.getPlaceholderOption()===b)return;this.selection.find(".select2-chosen").html(this.opts.escapeMarkup(a)),this.selection.addClass("select2-default"),this.container.removeClass("select2-allowclear")}},postprocessResults:function(a,b,c){var d=0,e=this;if(this.findHighlightableChoices().each2(function(a,b){return r(e.id(b.data("select2-data")),e.opts.element.val())?(d=a,!1):void 0}),c!==!1&&(b===!0&&d>=0?this.highlight(d):this.highlight(0)),b===!0){var g=this.opts.minimumResultsForSearch;g>=0&&this.showSearch(L(a.results)>=g)}},showSearch:function(b){this.showSearchInput!==b&&(this.showSearchInput=b,this.dropdown.find(".select2-search").toggleClass("select2-search-hidden",!b),this.dropdown.find(".select2-search").toggleClass("select2-offscreen",!b),a(this.dropdown,this.container).toggleClass("select2-with-searchbox",b))},onSelect:function(a,b){if(this.triggerSelect(a)){var c=this.opts.element.val(),d=this.data();this.opts.element.val(this.id(a)),this.updateSelection(a),this.opts.element.trigger({type:"select2-selected",val:this.id(a),choice:a}),this.nextSearchTerm=this.opts.nextSearchTerm(a,this.search.val()),this.close(),b&&b.noFocus||!this.opts.shouldFocusInput(this)||this.focusser.focus(),r(c,this.id(a))||this.triggerChange({added:a,removed:d})}},updateSelection:function(a){var d,e,c=this.selection.find(".select2-chosen");this.selection.data("select2-data",a),c.empty(),null!==a&&(d=this.opts.formatSelection(a,c,this.opts.escapeMarkup)),d!==b&&c.append(d),e=this.opts.formatSelectionCssClass(a,c),e!==b&&c.addClass(e),this.selection.removeClass("select2-default"),this.opts.allowClear&&this.getPlaceholder()!==b&&this.container.addClass("select2-allowclear")},val:function(){var a,c=!1,d=null,e=this,f=this.data();if(0===arguments.length)return this.opts.element.val();if(a=arguments[0],arguments.length>1&&(c=arguments[1]),this.select)this.select.val(a).find("option").filter(function(){return this.selected}).each2(function(a,b){return d=e.optionToData(b),!1}),this.updateSelection(d),this.setPlaceholder(),c&&this.triggerChange({added:d,removed:f});else{if(!a&&0!==a)return this.clear(c),void 0;if(this.opts.initSelection===b)throw new Error("cannot call val() if initSelection() is not defined");this.opts.element.val(a),this.opts.initSelection(this.opts.element,function(a){e.opts.element.val(a?e.id(a):""),e.updateSelection(a),e.setPlaceholder(),c&&e.triggerChange({added:a,removed:f})})}},clearSearch:function(){this.search.val(""),this.focusser.val("")},data:function(a){var c,d=!1;return 0===arguments.length?(c=this.selection.data("select2-data"),c==b&&(c=null),c):(arguments.length>1&&(d=arguments[1]),a?(c=this.data(),this.opts.element.val(a?this.id(a):""),this.updateSelection(a),d&&this.triggerChange({added:a,removed:c})):this.clear(d),void 0)}}),e=O(c,{createContainer:function(){var b=a(document.createElement("div")).attr({"class":"select2-container select2-container-multi"}).html(["
      ","
    • "," "," ","
    • ","
    ","
    ","
      ","
    ","
    "].join(""));return b},prepareOpts:function(){var b=this.parent.prepareOpts.apply(this,arguments),c=this;return"select"===b.element.get(0).tagName.toLowerCase()?b.initSelection=function(a,b){var d=[];a.find("option").filter(function(){return this.selected&&!this.disabled}).each2(function(a,b){d.push(c.optionToData(b))}),b(d)}:"data"in b&&(b.initSelection=b.initSelection||function(c,d){var e=s(c.val(),b.separator,b.transformVal),f=[];b.query({matcher:function(c,d,g){var h=a.grep(e,function(a){return r(a,b.id(g))}).length;return h&&f.push(g),h},callback:a.isFunction(d)?function(){for(var a=[],c=0;c0||(this.selectChoice(null),this.clearPlaceholder(),this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.open(),this.focusSearch(),b.preventDefault()))})),this.container.on("focus",b,this.bind(function(){this.isInterfaceEnabled()&&(this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"),this.clearPlaceholder())})),this.initContainerWidth(),this.opts.element.hide(),this.clearSearch()},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.search.prop("disabled",!this.isInterfaceEnabled())},initSelection:function(){if(""===this.opts.element.val()&&""===this.opts.element.text()&&(this.updateSelection([]),this.close(),this.clearSearch()),this.select||""!==this.opts.element.val()){var c=this;this.opts.initSelection.call(null,this.opts.element,function(a){a!==b&&null!==a&&(c.updateSelection(a),c.close(),c.clearSearch())})}},clearSearch:function(){var a=this.getPlaceholder(),c=this.getMaxSearchWidth();a!==b&&0===this.getVal().length&&this.search.hasClass("select2-focused")===!1?(this.search.val(a).addClass("select2-default"),this.search.width(c>0?c:this.container.css("width"))):this.search.val("").width(10)},clearPlaceholder:function(){this.search.hasClass("select2-default")&&this.search.val("").removeClass("select2-default")},opening:function(){this.clearPlaceholder(),this.resizeSearch(),this.parent.opening.apply(this,arguments),this.focusSearch(),""===this.search.val()&&this.nextSearchTerm!=b&&(this.search.val(this.nextSearchTerm),this.search.select()),this.updateResults(!0),this.opts.shouldFocusInput(this)&&this.search.focus(),this.opts.element.trigger(a.Event("select2-open"))},close:function(){this.opened()&&this.parent.close.apply(this,arguments)},focus:function(){this.close(),this.search.focus()},isFocused:function(){return this.search.hasClass("select2-focused")},updateSelection:function(b){var c=[],d=[],e=this;a(b).each(function(){p(e.id(this),c)<0&&(c.push(e.id(this)),d.push(this))}),b=d,this.selection.find(".select2-search-choice").remove(),a(b).each(function(){e.addSelectedChoice(this)}),e.postprocessResults()},tokenize:function(){var a=this.search.val();a=this.opts.tokenizer.call(this,a,this.data(),this.bind(this.onSelect),this.opts),null!=a&&a!=b&&(this.search.val(a),a.length>0&&this.open())},onSelect:function(a,c){this.triggerSelect(a)&&""!==a.text&&(this.addSelectedChoice(a),this.opts.element.trigger({type:"selected",val:this.id(a),choice:a}),this.nextSearchTerm=this.opts.nextSearchTerm(a,this.search.val()),this.clearSearch(),this.updateResults(),(this.select||!this.opts.closeOnSelect)&&this.postprocessResults(a,!1,this.opts.closeOnSelect===!0),this.opts.closeOnSelect?(this.close(),this.search.width(10)):this.countSelectableResults()>0?(this.search.width(10),this.resizeSearch(),this.getMaximumSelectionSize()>0&&this.val().length>=this.getMaximumSelectionSize()?this.updateResults(!0):this.nextSearchTerm!=b&&(this.search.val(this.nextSearchTerm),this.updateResults(),this.search.select()),this.positionDropdown()):(this.close(),this.search.width(10)),this.triggerChange({added:a}),c&&c.noFocus||this.focusSearch())},cancel:function(){this.close(),this.focusSearch()},addSelectedChoice:function(c){var j,k,d=!c.locked,e=a("
  • "),f=a("
  • "),g=d?e:f,h=this.id(c),i=this.getVal();j=this.opts.formatSelection(c,g.find("div"),this.opts.escapeMarkup),j!=b&&g.find("div").replaceWith(a("
    ").html(j)),k=this.opts.formatSelectionCssClass(c,g.find("div")),k!=b&&g.addClass(k),d&&g.find(".select2-search-choice-close").on("mousedown",A).on("click dblclick",this.bind(function(b){this.isInterfaceEnabled()&&(this.unselect(a(b.target)),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"),A(b),this.close(),this.focusSearch())})).on("focus",this.bind(function(){this.isInterfaceEnabled()&&(this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"))})),g.data("select2-data",c),g.insertBefore(this.searchContainer),i.push(h),this.setVal(i)},unselect:function(b){var d,e,c=this.getVal();if(b=b.closest(".select2-search-choice"),0===b.length)throw"Invalid argument: "+b+". Must be .select2-search-choice";if(d=b.data("select2-data")){var f=a.Event("select2-removing");if(f.val=this.id(d),f.choice=d,this.opts.element.trigger(f),f.isDefaultPrevented())return!1;for(;(e=p(this.id(d),c))>=0;)c.splice(e,1),this.setVal(c),this.select&&this.postprocessResults();return b.remove(),this.opts.element.trigger({type:"select2-removed",val:this.id(d),choice:d}),this.triggerChange({removed:d}),!0}},postprocessResults:function(a,b,c){var d=this.getVal(),e=this.results.find(".select2-result"),f=this.results.find(".select2-result-with-children"),g=this;e.each2(function(a,b){var c=g.id(b.data("select2-data"));p(c,d)>=0&&(b.addClass("select2-selected"),b.find(".select2-result-selectable").addClass("select2-selected"))}),f.each2(function(a,b){b.is(".select2-result-selectable")||0!==b.find(".select2-result-selectable:not(.select2-selected)").length||b.addClass("select2-selected")}),-1==this.highlight()&&c!==!1&&this.opts.closeOnSelect===!0&&g.highlight(0),!this.opts.createSearchChoice&&!e.filter(".select2-result:not(.select2-selected)").length>0&&(!a||a&&!a.more&&0===this.results.find(".select2-no-results").length)&&J(g.opts.formatNoMatches,"formatNoMatches")&&this.results.append("
  • "+K(g.opts.formatNoMatches,g.opts.element,g.search.val())+"
  • ")},getMaxSearchWidth:function(){return this.selection.width()-t(this.search)},resizeSearch:function(){var a,b,c,d,e,f=t(this.search);a=C(this.search)+10,b=this.search.offset().left,c=this.selection.width(),d=this.selection.offset().left,e=c-(b-d)-f,a>e&&(e=c-f),40>e&&(e=c-f),0>=e&&(e=a),this.search.width(Math.floor(e))},getVal:function(){var a;return this.select?(a=this.select.val(),null===a?[]:a):(a=this.opts.element.val(),s(a,this.opts.separator,this.opts.transformVal))},setVal:function(b){var c;this.select?this.select.val(b):(c=[],a(b).each(function(){p(this,c)<0&&c.push(this)}),this.opts.element.val(0===c.length?"":c.join(this.opts.separator)))},buildChangeDetails:function(a,b){for(var b=b.slice(0),a=a.slice(0),c=0;c0&&c--,a.splice(d,1),d--);return{added:b,removed:a}},val:function(c,d){var e,f=this;if(0===arguments.length)return this.getVal();if(e=this.data(),e.length||(e=[]),!c&&0!==c)return this.opts.element.val(""),this.updateSelection([]),this.clearSearch(),d&&this.triggerChange({added:this.data(),removed:e}),void 0;if(this.setVal(c),this.select)this.opts.initSelection(this.select,this.bind(this.updateSelection)),d&&this.triggerChange(this.buildChangeDetails(e,this.data()));else{if(this.opts.initSelection===b)throw new Error("val() cannot be called if initSelection() is not defined");this.opts.initSelection(this.opts.element,function(b){var c=a.map(b,f.id);f.setVal(c),f.updateSelection(b),f.clearSearch(),d&&f.triggerChange(f.buildChangeDetails(e,f.data()))})}this.clearSearch()},onSortStart:function(){if(this.select)throw new Error("Sorting of elements is not supported when attached to instead.");this.search.width(0),this.searchContainer.hide()},onSortEnd:function(){var b=[],c=this;this.searchContainer.show(),this.searchContainer.appendTo(this.searchContainer.parent()),this.resizeSearch(),this.selection.find(".select2-search-choice").each(function(){b.push(c.opts.id(a(this).data("select2-data")))}),this.setVal(b),this.triggerChange()},data:function(b,c){var e,f,d=this;return 0===arguments.length?this.selection.children(".select2-search-choice").map(function(){return a(this).data("select2-data")}).get():(f=this.data(),b||(b=[]),e=a.map(b,function(a){return d.opts.id(a)}),this.setVal(e),this.updateSelection(b),this.clearSearch(),c&&this.triggerChange(this.buildChangeDetails(f,this.data())),void 0)}}),a.fn.select2=function(){var d,e,f,g,h,c=Array.prototype.slice.call(arguments,0),i=["val","destroy","opened","open","close","focus","isFocused","container","dropdown","onSortStart","onSortEnd","enable","disable","readonly","positionDropdown","data","search"],j=["opened","isFocused","container","dropdown"],k=["val","data"],l={search:"externalSearch"};return this.each(function(){if(0===c.length||"object"==typeof c[0])d=0===c.length?{}:a.extend({},c[0]),d.element=a(this),"select"===d.element.get(0).tagName.toLowerCase()?h=d.element.prop("multiple"):(h=d.multiple||!1,"tags"in d&&(d.multiple=h=!0)),e=h?new window.Select2["class"].multi:new window.Select2["class"].single,e.init(d);else{if("string"!=typeof c[0])throw"Invalid arguments to select2 plugin: "+c;if(p(c[0],i)<0)throw"Unknown method: "+c[0];if(g=b,e=a(this).data("select2"),e===b)return;if(f=c[0],"container"===f?g=e.container:"dropdown"===f?g=e.dropdown:(l[f]&&(f=l[f]),g=e[f].apply(e,c.slice(1))),p(c[0],j)>=0||p(c[0],k)>=0&&1==c.length)return!1}}),g===b?this:g},a.fn.select2.defaults={width:"copy",loadMorePadding:0,closeOnSelect:!0,openOnEnter:!0,containerCss:{},dropdownCss:{},containerCssClass:"",dropdownCssClass:"",formatResult:function(a,b,c,d){var e=[];return E(this.text(a),c.term,e,d),e.join("")},transformVal:function(b){return a.trim(b)},formatSelection:function(a,c,d){return a?d(this.text(a)):b},sortResults:function(a){return a},formatResultCssClass:function(a){return a.css},formatSelectionCssClass:function(){return b},minimumResultsForSearch:0,minimumInputLength:0,maximumInputLength:null,maximumSelectionSize:0,id:function(a){return a==b?null:a.id},text:function(b){return b&&this.data&&this.data.text?a.isFunction(this.data.text)?this.data.text(b):b[this.data.text]:b.text +},matcher:function(a,b){return o(""+b).toUpperCase().indexOf(o(""+a).toUpperCase())>=0},separator:",",tokenSeparators:[],tokenizer:M,escapeMarkup:F,blurOnChange:!1,selectOnBlur:!1,adaptContainerCssClass:function(a){return a},adaptDropdownCssClass:function(){return null},nextSearchTerm:function(){return b},searchInputPlaceholder:"",createSearchChoicePosition:"top",shouldFocusInput:function(a){var b="ontouchstart"in window||navigator.msMaxTouchPoints>0;return b?a.opts.minimumResultsForSearch<0?!1:!0:!0}},a.fn.select2.locales=[],a.fn.select2.locales.en={formatMatches:function(a){return 1===a?"One result is available, press enter to select it.":a+" results are available, use up and down arrow keys to navigate."},formatNoMatches:function(){return"No matches found"},formatAjaxError:function(){return"Loading failed"},formatInputTooShort:function(a,b){var c=b-a.length;return"Please enter "+c+" or more character"+(1==c?"":"s")},formatInputTooLong:function(a,b){var c=a.length-b;return"Please delete "+c+" character"+(1==c?"":"s")},formatSelectionTooBig:function(a){return"You can only select "+a+" item"+(1==a?"":"s")},formatLoadMore:function(){return"Loading more results\u2026"},formatSearching:function(){return"Searching\u2026"}},a.extend(a.fn.select2.defaults,a.fn.select2.locales.en),a.fn.select2.ajaxDefaults={transport:a.ajax,params:{type:"GET",cache:!1,dataType:"json"}},window.Select2={query:{ajax:G,local:H,tags:I},util:{debounce:w,markMatch:E,escapeMarkup:F,stripDiacritics:o},"class":{"abstract":c,single:d,multi:e}}}}(jQuery); \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2.png b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2.png new file mode 100644 index 0000000000000000000000000000000000000000..1d804ffb99699b9e030f1010314de0970b5a000d GIT binary patch literal 613 zcmV-r0-F7aP)#WY!I$JQV$)A5aAS1BM||2XVJl=+L1^1S1H% zM-&lx?NZpUrHhn>fk<>POqf2sh40}xxGZfc+t+#Eb(qHy9_3*1(U%t9t)QDnI#YAL(|ACV(>)>6WD-t!8tutHkdb^#3`HzoJG3A2@T`% zA|K@o*b!`R#(7)PWrMFn2))Ca3MR4(zaT`Zr61*kZK5NPnZwQszxh$fyv3?&4c>$q z2m=+yc0dRXRAsPDxF6sD;@rK4JGdR_``1S~o6Xi@2&aR6hcSrEp9HVRzEqVDqBn<1%hR=D4e1f^ra^A|34Cjc=Gny{F(o#MrvPYgZuTJOz(n)-F<| zj()qR;C={)N<0RRvDZ^@6ND+W*}gh-Lip(MDt!(zMSO)!j2j+*hxgzC-e3$@(O2p* zu;+gddm(cZwXTCLx*Ky4THOa*^b^F`woveIeCK^0aR|TJ00000NkvXXu0mjfA#WC6 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ar.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ar.js new file mode 100644 index 000000000..e991b726c --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ar.js @@ -0,0 +1,19 @@ +/** + * Select2 Arabic translation. + * + * Author: Adel KEDJOUR + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['ar'] = { + formatNoMatches: function () { return "لم يتم العثور على مطابقات"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; if (n == 1){ return "الرجاء إدخال حرف واحد على الأكثر"; } return n == 2 ? "الرجاء إدخال حرفين على الأكثر" : "الرجاء إدخال " + n + " على الأكثر"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; if (n == 1){ return "الرجاء إدخال حرف واحد على الأقل"; } return n == 2 ? "الرجاء إدخال حرفين على الأقل" : "الرجاء إدخال " + n + " على الأقل "; }, + formatSelectionTooBig: function (limit) { if (limit == 1){ return "يمكنك أن تختار إختيار واحد فقط"; } return limit == 2 ? "يمكنك أن تختار إختيارين فقط" : "يمكنك أن تختار " + limit + " إختيارات فقط"; }, + formatLoadMore: function (pageNumber) { return "تحميل المزيد من النتائج…"; }, + formatSearching: function () { return "البحث…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['ar']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_az.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_az.js new file mode 100644 index 000000000..19fd95b7a --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_az.js @@ -0,0 +1,20 @@ +/** + * Select2 Azerbaijani translation. + * + * Author: Farhad Safarov + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['az'] = { + formatMatches: function (matches) { return matches + " nəticə mövcuddur, hərəkət etdirmək üçün yuxarı və aşağı düymələrindən istifadə edin."; }, + formatNoMatches: function () { return "Nəticə tapılmadı"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return n + " simvol daxil edin"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return n + " simvol silin"; }, + formatSelectionTooBig: function (limit) { return "Sadəcə " + limit + " element seçə bilərsiniz"; }, + formatLoadMore: function (pageNumber) { return "Daha çox nəticə yüklənir…"; }, + formatSearching: function () { return "Axtarılır…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['az']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_bg.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_bg.js new file mode 100644 index 000000000..3283d0ae5 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_bg.js @@ -0,0 +1,20 @@ +/** + * Select2 Bulgarian translation. + * + * @author Lubomir Vikev + * @author Uriy Efremochkin + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['bg'] = { + formatNoMatches: function () { return "Няма намерени съвпадения"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Моля въведете още " + n + " символ" + (n > 1 ? "а" : ""); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Моля въведете с " + n + " по-малко символ" + (n > 1 ? "а" : ""); }, + formatSelectionTooBig: function (limit) { return "Можете да направите до " + limit + (limit > 1 ? " избора" : " избор"); }, + formatLoadMore: function (pageNumber) { return "Зареждат се още…"; }, + formatSearching: function () { return "Търсене…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['bg']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ca.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ca.js new file mode 100644 index 000000000..dbea39e93 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ca.js @@ -0,0 +1,19 @@ +/** + * Select2 Catalan translation. + * + * Author: David Planella + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['ca'] = { + formatNoMatches: function () { return "No s'ha trobat cap coincidència"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Introduïu " + n + " caràcter" + (n == 1 ? "" : "s") + " més"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Introduïu " + n + " caràcter" + (n == 1? "" : "s") + "menys"; }, + formatSelectionTooBig: function (limit) { return "Només podeu seleccionar " + limit + " element" + (limit == 1 ? "" : "s"); }, + formatLoadMore: function (pageNumber) { return "S'estan carregant més resultats…"; }, + formatSearching: function () { return "S'està cercant…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['ca']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_cs.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_cs.js new file mode 100644 index 000000000..ef1218564 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_cs.js @@ -0,0 +1,51 @@ +/** + * Select2 Czech translation. + * + * Author: Michal Marek + * Author - sklonovani: David Vallner + */ +(function ($) { + "use strict"; + // use text for the numbers 2 through 4 + var smallNumbers = { + 2: function(masc) { return (masc ? "dva" : "dvě"); }, + 3: function() { return "tři"; }, + 4: function() { return "čtyři"; } + } + $.fn.select2.locales['cs'] = { + formatNoMatches: function () { return "Nenalezeny žádné položky"; }, + formatInputTooShort: function (input, min) { + var n = min - input.length; + if (n == 1) { + return "Prosím zadejte ještě jeden znak"; + } else if (n <= 4) { + return "Prosím zadejte ještě další "+smallNumbers[n](true)+" znaky"; + } else { + return "Prosím zadejte ještě dalších "+n+" znaků"; + } + }, + formatInputTooLong: function (input, max) { + var n = input.length - max; + if (n == 1) { + return "Prosím zadejte o jeden znak méně"; + } else if (n <= 4) { + return "Prosím zadejte o "+smallNumbers[n](true)+" znaky méně"; + } else { + return "Prosím zadejte o "+n+" znaků méně"; + } + }, + formatSelectionTooBig: function (limit) { + if (limit == 1) { + return "Můžete zvolit jen jednu položku"; + } else if (limit <= 4) { + return "Můžete zvolit maximálně "+smallNumbers[limit](false)+" položky"; + } else { + return "Můžete zvolit maximálně "+limit+" položek"; + } + }, + formatLoadMore: function (pageNumber) { return "Načítají se další výsledky…"; }, + formatSearching: function () { return "Vyhledávání…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['cs']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_da.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_da.js new file mode 100644 index 000000000..702238b9a --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_da.js @@ -0,0 +1,19 @@ +/** + * Select2 Danish translation. + * + * Author: Anders Jenbo + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['da'] = { + formatNoMatches: function () { return "Ingen resultater fundet"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Angiv venligst " + n + " tegn mere"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Angiv venligst " + n + " tegn mindre"; }, + formatSelectionTooBig: function (limit) { return "Du kan kun vælge " + limit + " emne" + (limit === 1 ? "" : "r"); }, + formatLoadMore: function (pageNumber) { return "Indlæser flere resultater…"; }, + formatSearching: function () { return "Søger…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['da']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_de.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_de.js new file mode 100644 index 000000000..e27541720 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_de.js @@ -0,0 +1,18 @@ +/** + * Select2 German translation + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['de'] = { + formatNoMatches: function () { return "Keine Übereinstimmungen gefunden"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Bitte " + n + " Zeichen mehr eingeben"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Bitte " + n + " Zeichen weniger eingeben"; }, + formatSelectionTooBig: function (limit) { return "Sie können nur " + limit + " Eintr" + (limit === 1 ? "ag" : "äge") + " auswählen"; }, + formatLoadMore: function (pageNumber) { return "Lade mehr Ergebnisse…"; }, + formatSearching: function () { return "Suche…"; }, + formatMatches: function (matches) { return matches + " Ergebnis " + (matches > 1 ? "se" : "") + " verfügbar, zum Navigieren die Hoch-/Runter-Pfeiltasten verwenden."; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['de']); +})(jQuery); \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_el.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_el.js new file mode 100644 index 000000000..d17459e1d --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_el.js @@ -0,0 +1,19 @@ +/** + * Select2 Greek translation. + * + * @author Uriy Efremochkin + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['el'] = { + formatNoMatches: function () { return "Δεν βρέθηκαν αποτελέσματα"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Παρακαλούμε εισάγετε " + n + " περισσότερο" + (n > 1 ? "υς" : "") + " χαρακτήρ" + (n > 1 ? "ες" : "α"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Παρακαλούμε διαγράψτε " + n + " χαρακτήρ" + (n > 1 ? "ες" : "α"); }, + formatSelectionTooBig: function (limit) { return "Μπορείτε να επιλέξετε μόνο " + limit + " αντικείμεν" + (limit > 1 ? "α" : "ο"); }, + formatLoadMore: function (pageNumber) { return "Φόρτωση περισσότερων…"; }, + formatSearching: function () { return "Αναζήτηση…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['el']); +})(jQuery); \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_en.js.template b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_en.js.template new file mode 100644 index 000000000..f758b1100 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_en.js.template @@ -0,0 +1,20 @@ +/** + * Select2 translation. + * + * Author: Your Name + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['en'] = { + formatMatches: function (matches) { if (matches === 1) { return "One result is available, press enter to select it."; } return matches + " results are available, use up and down arrow keys to navigate."; }, + formatNoMatches: function () { return "No matches found"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Please enter " + n + " or more character" + (n == 1 ? "" : "s"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Please delete " + n + " character" + (n == 1 ? "" : "s"); }, + formatSelectionTooBig: function (limit) { return "You can only select " + limit + " item" + (limit == 1 ? "" : "s"); }, + formatLoadMore: function (pageNumber) { return "Loading more results…"; }, + formatSearching: function () { return "Searching…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['en']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_es.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_es.js new file mode 100644 index 000000000..92a19861e --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_es.js @@ -0,0 +1,19 @@ +/** + * Select2 Spanish translation + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['es'] = { + formatMatches: function (matches) { if (matches === 1) { return "Un resultado disponible, presione enter para seleccionarlo."; } return matches + " resultados disponibles, use las teclas de dirección para navegar."; }, + formatNoMatches: function () { return "No se encontraron resultados"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Por favor, introduzca " + n + " car" + (n == 1? "ácter" : "acteres"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Por favor, elimine " + n + " car" + (n == 1? "ácter" : "acteres"); }, + formatSelectionTooBig: function (limit) { return "Sólo puede seleccionar " + limit + " elemento" + (limit == 1 ? "" : "s"); }, + formatLoadMore: function (pageNumber) { return "Cargando más resultados…"; }, + formatSearching: function () { return "Buscando…"; }, + formatAjaxError: function() { return "La carga falló"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['es']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_et.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_et.js new file mode 100644 index 000000000..4d69f55e3 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_et.js @@ -0,0 +1,19 @@ +/** + * Select2 Estonian translation. + * + * Author: Kuldar Kalvik + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['et'] = { + formatNoMatches: function () { return "Tulemused puuduvad"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Sisesta " + n + " täht" + (n == 1 ? "" : "e") + " rohkem"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Sisesta " + n + " täht" + (n == 1? "" : "e") + " vähem"; }, + formatSelectionTooBig: function (limit) { return "Saad vaid " + limit + " tulemus" + (limit == 1 ? "e" : "t") + " valida"; }, + formatLoadMore: function (pageNumber) { return "Laen tulemusi.."; }, + formatSearching: function () { return "Otsin.."; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['et']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_eu.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_eu.js new file mode 100644 index 000000000..67ae8d05a --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_eu.js @@ -0,0 +1,45 @@ +/** + * Select2 Basque translation. + * + * Author: Julen Ruiz Aizpuru + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['eu'] = { + formatNoMatches: function () { + return "Ez da bat datorrenik aurkitu"; + }, + formatInputTooShort: function (input, min) { + var n = min - input.length; + if (n === 1) { + return "Idatzi karaktere bat gehiago"; + } else { + return "Idatzi " + n + " karaktere gehiago"; + } + }, + formatInputTooLong: function (input, max) { + var n = input.length - max; + if (n === 1) { + return "Idatzi karaktere bat gutxiago"; + } else { + return "Idatzi " + n + " karaktere gutxiago"; + } + }, + formatSelectionTooBig: function (limit) { + if (limit === 1 ) { + return "Elementu bakarra hauta dezakezu"; + } else { + return limit + " elementu hauta ditzakezu soilik"; + } + }, + formatLoadMore: function (pageNumber) { + return "Emaitza gehiago kargatzen…"; + }, + formatSearching: function () { + return "Bilatzen…"; + } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['eu']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_fa.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_fa.js new file mode 100644 index 000000000..b3ffd8b7d --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_fa.js @@ -0,0 +1,21 @@ +/** + * Select2 Persian translation. + * + * Author: Ali Choopan + * Author: Ebrahim Byagowi + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['fa'] = { + formatMatches: function (matches) { return matches + " نتیجه موجود است، کلیدهای جهت بالا و پایین را برای گشتن استفاده کنید."; }, + formatNoMatches: function () { return "نتیجه‌ای یافت نشد."; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "لطفاً " + n + " نویسه بیشتر وارد نمایید"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "لطفاً " + n + " نویسه را حذف کنید."; }, + formatSelectionTooBig: function (limit) { return "شما فقط می‌توانید " + limit + " مورد را انتخاب کنید"; }, + formatLoadMore: function (pageNumber) { return "در حال بارگیری موارد بیشتر…"; }, + formatSearching: function () { return "در حال جستجو…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['fa']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_fi.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_fi.js new file mode 100644 index 000000000..6487fbdad --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_fi.js @@ -0,0 +1,30 @@ +/** + * Select2 Finnish translation + */ +(function ($) { + "use strict"; + $.fn.select2.locales['fi'] = { + formatNoMatches: function () { + return "Ei tuloksia"; + }, + formatInputTooShort: function (input, min) { + var n = min - input.length; + return "Ole hyvä ja anna " + n + " merkkiä lisää"; + }, + formatInputTooLong: function (input, max) { + var n = input.length - max; + return "Ole hyvä ja anna " + n + " merkkiä vähemmän"; + }, + formatSelectionTooBig: function (limit) { + return "Voit valita ainoastaan " + limit + " kpl"; + }, + formatLoadMore: function (pageNumber) { + return "Ladataan lisää tuloksia…"; + }, + formatSearching: function () { + return "Etsitään…"; + } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['fi']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_fr.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_fr.js new file mode 100644 index 000000000..d5485d6be --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_fr.js @@ -0,0 +1,18 @@ +/** + * Select2 French translation + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['fr'] = { + formatMatches: function (matches) { return matches + " résultats sont disponibles, utilisez les flèches haut et bas pour naviguer."; }, + formatNoMatches: function () { return "Aucun résultat trouvé"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Saisissez " + n + " caractère" + (n == 1? "" : "s") + " supplémentaire" + (n == 1? "" : "s") ; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Supprimez " + n + " caractère" + (n == 1? "" : "s"); }, + formatSelectionTooBig: function (limit) { return "Vous pouvez seulement sélectionner " + limit + " élément" + (limit == 1 ? "" : "s"); }, + formatLoadMore: function (pageNumber) { return "Chargement de résultats supplémentaires…"; }, + formatSearching: function () { return "Recherche en cours…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['fr']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_gl.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_gl.js new file mode 100644 index 000000000..9335167da --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_gl.js @@ -0,0 +1,45 @@ +/** + * Select2 Galician translation + * + * Author: Leandro Regueiro + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['gl'] = { + formatNoMatches: function () { + return "Non se atoparon resultados"; + }, + formatInputTooShort: function (input, min) { + var n = min - input.length; + if (n === 1) { + return "Engada un carácter"; + } else { + return "Engada " + n + " caracteres"; + } + }, + formatInputTooLong: function (input, max) { + var n = input.length - max; + if (n === 1) { + return "Elimine un carácter"; + } else { + return "Elimine " + n + " caracteres"; + } + }, + formatSelectionTooBig: function (limit) { + if (limit === 1 ) { + return "Só pode seleccionar un elemento"; + } else { + return "Só pode seleccionar " + limit + " elementos"; + } + }, + formatLoadMore: function (pageNumber) { + return "Cargando máis resultados…"; + }, + formatSearching: function () { + return "Buscando…"; + } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['gl']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_he.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_he.js new file mode 100644 index 000000000..789dcdcaa --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_he.js @@ -0,0 +1,19 @@ +/** +* Select2 Hebrew translation. +* +* Author: Yakir Sitbon +*/ +(function ($) { + "use strict"; + + $.fn.select2.locales['he'] = { + formatNoMatches: function () { return "לא נמצאו התאמות"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "נא להזין עוד " + n + " תווים נוספים"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "נא להזין פחות " + n + " תווים"; }, + formatSelectionTooBig: function (limit) { return "ניתן לבחור " + limit + " פריטים"; }, + formatLoadMore: function (pageNumber) { return "טוען תוצאות נוספות…"; }, + formatSearching: function () { return "מחפש…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['he']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_hr.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_hr.js new file mode 100644 index 000000000..ce8051c78 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_hr.js @@ -0,0 +1,24 @@ +/** + * Select2 Croatian translation. + * + * @author Edi Modrić + * @author Uriy Efremochkin + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['hr'] = { + formatNoMatches: function () { return "Nema rezultata"; }, + formatInputTooShort: function (input, min) { return "Unesite još" + character(min - input.length); }, + formatInputTooLong: function (input, max) { return "Unesite" + character(input.length - max) + " manje"; }, + formatSelectionTooBig: function (limit) { return "Maksimalan broj odabranih stavki je " + limit; }, + formatLoadMore: function (pageNumber) { return "Učitavanje rezultata…"; }, + formatSearching: function () { return "Pretraga…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['hr']); + + function character (n) { + return " " + n + " znak" + (n%10 < 5 && n%10 > 0 && (n%100 < 5 || n%100 > 19) ? n%10 > 1 ? "a" : "" : "ova"); + } +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_hu.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_hu.js new file mode 100644 index 000000000..f431f2463 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_hu.js @@ -0,0 +1,17 @@ +/** + * Select2 Hungarian translation + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['hu'] = { + formatNoMatches: function () { return "Nincs találat."; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Túl rövid. Még " + n + " karakter hiányzik."; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Túl hosszú. " + n + " karakterrel több, mint kellene."; }, + formatSelectionTooBig: function (limit) { return "Csak " + limit + " elemet lehet kiválasztani."; }, + formatLoadMore: function (pageNumber) { return "Töltés…"; }, + formatSearching: function () { return "Keresés…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['hu']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_id.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_id.js new file mode 100644 index 000000000..e9c1fd9b9 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_id.js @@ -0,0 +1,19 @@ +/** + * Select2 Indonesian translation. + * + * Author: Ibrahim Yusuf + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['id'] = { + formatNoMatches: function () { return "Tidak ada data yang sesuai"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Masukkan " + n + " huruf lagi" + (n == 1 ? "" : "s"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Hapus " + n + " huruf" + (n == 1 ? "" : "s"); }, + formatSelectionTooBig: function (limit) { return "Anda hanya dapat memilih " + limit + " pilihan" + (limit == 1 ? "" : "s"); }, + formatLoadMore: function (pageNumber) { return "Mengambil data…"; }, + formatSearching: function () { return "Mencari…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['id']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_is.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_is.js new file mode 100644 index 000000000..273f33de8 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_is.js @@ -0,0 +1,17 @@ +/** + * Select2 Icelandic translation. + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['is'] = { + formatNoMatches: function () { return "Ekkert fannst"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Vinsamlegast skrifið " + n + " staf" + (n > 1 ? "i" : "") + " í viðbót"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Vinsamlegast styttið texta um " + n + " staf" + (n > 1 ? "i" : ""); }, + formatSelectionTooBig: function (limit) { return "Þú getur aðeins valið " + limit + " atriði"; }, + formatLoadMore: function (pageNumber) { return "Sæki fleiri niðurstöður…"; }, + formatSearching: function () { return "Leita…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['is']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_it.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_it.js new file mode 100644 index 000000000..6e2b8e237 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_it.js @@ -0,0 +1,17 @@ +/** + * Select2 Italian translation + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['it'] = { + formatNoMatches: function () { return "Nessuna corrispondenza trovata"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Inserisci ancora " + n + " caratter" + (n == 1? "e" : "i"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Inserisci " + n + " caratter" + (n == 1? "e" : "i") + " in meno"; }, + formatSelectionTooBig: function (limit) { return "Puoi selezionare solo " + limit + " element" + (limit == 1 ? "o" : "i"); }, + formatLoadMore: function (pageNumber) { return "Caricamento in corso…"; }, + formatSearching: function () { return "Ricerca…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['it']); +})(jQuery); \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ja.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ja.js new file mode 100644 index 000000000..7dbd8d7ee --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ja.js @@ -0,0 +1,17 @@ +/** + * Select2 Japanese translation. + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['ja'] = { + formatNoMatches: function () { return "該当なし"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "後" + n + "文字入れてください"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "検索文字列が" + n + "文字長すぎます"; }, + formatSelectionTooBig: function (limit) { return "最多で" + limit + "項目までしか選択できません"; }, + formatLoadMore: function (pageNumber) { return "読込中・・・"; }, + formatSearching: function () { return "検索中・・・"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['ja']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ka.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ka.js new file mode 100644 index 000000000..6cbe1d8f3 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ka.js @@ -0,0 +1,19 @@ +/** + * Select2 Georgian (Kartuli) translation. + * + * Author: Dimitri Kurashvili dimakura@gmail.com + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['ka'] = { + formatNoMatches: function () { return "ვერ მოიძებნა"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "გთხოვთ შეიყვანოთ კიდევ " + n + " სიმბოლო"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "გთხოვთ წაშალოთ " + n + " სიმბოლო"; }, + formatSelectionTooBig: function (limit) { return "თქვენ შეგიძლიათ მხოლოდ " + limit + " ჩანაწერის მონიშვნა"; }, + formatLoadMore: function (pageNumber) { return "შედეგის ჩატვირთვა…"; }, + formatSearching: function () { return "ძებნა…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['ka']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ko.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ko.js new file mode 100644 index 000000000..bf036e09e --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ko.js @@ -0,0 +1,19 @@ +/** + * Select2 Korean translation. + * + * @author Swen Mun + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['ko'] = { + formatNoMatches: function () { return "결과 없음"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "너무 짧습니다. "+n+"글자 더 입력해주세요."; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "너무 깁니다. "+n+"글자 지워주세요."; }, + formatSelectionTooBig: function (limit) { return "최대 "+limit+"개까지만 선택하실 수 있습니다."; }, + formatLoadMore: function (pageNumber) { return "불러오는 중…"; }, + formatSearching: function () { return "검색 중…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['ko']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_lt.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_lt.js new file mode 100644 index 000000000..7d7040f72 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_lt.js @@ -0,0 +1,26 @@ +/** + * Select2 Lithuanian translation. + * + * @author CRONUS Karmalakas + * @author Uriy Efremochkin + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['lt'] = { + formatNoMatches: function () { return "Atitikmenų nerasta"; }, + formatInputTooShort: function (input, min) { return "Įrašykite dar" + character(min - input.length); }, + formatInputTooLong: function (input, max) { return "Pašalinkite" + character(input.length - max); }, + formatSelectionTooBig: function (limit) { + return "Jūs galite pasirinkti tik " + limit + " element" + ((limit%100 > 9 && limit%100 < 21) || limit%10 == 0 ? "ų" : limit%10 > 1 ? "us" : "ą"); + }, + formatLoadMore: function (pageNumber) { return "Kraunama daugiau rezultatų…"; }, + formatSearching: function () { return "Ieškoma…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['lt']); + + function character (n) { + return " " + n + " simbol" + ((n%100 > 9 && n%100 < 21) || n%10 == 0 ? "ių" : n%10 > 1 ? "ius" : "į"); + } +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_lv.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_lv.js new file mode 100644 index 000000000..4afc5b41c --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_lv.js @@ -0,0 +1,19 @@ +/** + * Select2 Latvian translation. + * + * @author Uriy Efremochkin + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['lv'] = { + formatNoMatches: function () { return "Sakritību nav"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Lūdzu ievadiet vēl " + n + " simbol" + (n == 11 ? "us" : n%10 == 1 ? "u" : "us"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Lūdzu ievadiet par " + n + " simbol" + (n == 11 ? "iem" : n%10 == 1 ? "u" : "iem") + " mazāk"; }, + formatSelectionTooBig: function (limit) { return "Jūs varat izvēlēties ne vairāk kā " + limit + " element" + (limit == 11 ? "us" : limit%10 == 1 ? "u" : "us"); }, + formatLoadMore: function (pageNumber) { return "Datu ielāde…"; }, + formatSearching: function () { return "Meklēšana…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['lv']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_mk.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_mk.js new file mode 100644 index 000000000..8a51a9e0b --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_mk.js @@ -0,0 +1,19 @@ +/** + * Select2 Macedonian translation. + * + * Author: Marko Aleksic + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['mk'] = { + formatNoMatches: function () { return "Нема пронајдено совпаѓања"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Ве молиме внесете уште " + n + " карактер" + (n == 1 ? "" : "и"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Ве молиме внесете " + n + " помалку карактер" + (n == 1? "" : "и"); }, + formatSelectionTooBig: function (limit) { return "Можете да изберете само " + limit + " ставк" + (limit == 1 ? "а" : "и"); }, + formatLoadMore: function (pageNumber) { return "Вчитување резултати…"; }, + formatSearching: function () { return "Пребарување…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['mk']); +})(jQuery); \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ms.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ms.js new file mode 100644 index 000000000..46588d6d7 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ms.js @@ -0,0 +1,19 @@ +/** + * Select2 Malay translation. + * + * Author: Kepoweran + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['ms'] = { + formatNoMatches: function () { return "Tiada padanan yang ditemui"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Sila masukkan " + n + " aksara lagi"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Sila hapuskan " + n + " aksara"; }, + formatSelectionTooBig: function (limit) { return "Anda hanya boleh memilih " + limit + " pilihan"; }, + formatLoadMore: function (pageNumber) { return "Sedang memuatkan keputusan…"; }, + formatSearching: function () { return "Mencari…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['ms']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_nb.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_nb.js new file mode 100644 index 000000000..cb5dfaeef --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_nb.js @@ -0,0 +1,22 @@ +/** + * Select2 Norwegian Bokmål translation. + * + * Author: Torgeir Veimo + * Author: Bjørn Johansen + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['nb'] = { + formatMatches: function (matches) { if (matches === 1) { return "Ett resultat er tilgjengelig, trykk enter for å velge det."; } return matches + " resultater er tilgjengelig. Bruk piltastene opp og ned for å navigere."; }, + formatNoMatches: function () { return "Ingen treff"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Vennligst skriv inn " + n + (n>1 ? " flere tegn" : " tegn til"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Vennligst fjern " + n + " tegn"; }, + formatSelectionTooBig: function (limit) { return "Du kan velge maks " + limit + " elementer"; }, + formatLoadMore: function (pageNumber) { return "Laster flere resultater …"; }, + formatSearching: function () { return "Søker …"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['no']); +})(jQuery); + diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_nl.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_nl.js new file mode 100644 index 000000000..985741ec2 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_nl.js @@ -0,0 +1,17 @@ +/** + * Select2 Dutch translation + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['nl'] = { + formatNoMatches: function () { return "Geen resultaten gevonden"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Vul nog " + n + " karakter" + (n == 1? "" : "s") + " in"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Haal " + n + " karakter" + (n == 1? "" : "s") + " weg"; }, + formatSelectionTooBig: function (limit) { return "Maximaal " + limit + " item" + (limit == 1 ? "" : "s") + " toegestaan"; }, + formatLoadMore: function (pageNumber) { return "Meer resultaten laden…"; }, + formatSearching: function () { return "Zoeken…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['nl']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_pl.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_pl.js new file mode 100644 index 000000000..87c261941 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_pl.js @@ -0,0 +1,54 @@ +/** + * Select2 Polish translation. + * + * @author Jan Kondratowicz + * @author Uriy Efremochkin + * @author Michał Połtyn + * @author Damian Zajkowski + */ +(function($) { + "use strict"; + + $.fn.select2.locales['pl'] = { + formatNoMatches: function() { + return "Brak wyników"; + }, + formatInputTooShort: function(input, min) { + return "Wpisz co najmniej" + character(min - input.length, "znak", "i"); + }, + formatInputTooLong: function(input, max) { + return "Wpisana fraza jest za długa o" + character(input.length - max, "znak", "i"); + }, + formatSelectionTooBig: function(limit) { + return "Możesz zaznaczyć najwyżej" + character(limit, "element", "y"); + }, + formatLoadMore: function(pageNumber) { + return "Ładowanie wyników…"; + }, + formatSearching: function() { + return "Szukanie…"; + } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['pl']); + + function character(n, word, pluralSuffix) { + //Liczba pojedyncza - brak suffiksu + //jeden znak + //jeden element + var suffix = ''; + if (n > 1 && n < 5) { + //Liczaba mnoga ilość od 2 do 4 - własny suffiks + //Dwa znaki, trzy znaki, cztery znaki. + //Dwa elementy, trzy elementy, cztery elementy + suffix = pluralSuffix; + } else if (n == 0 || n >= 5) { + //Ilość 0 suffiks ów + //Liczaba mnoga w ilości 5 i więcej - suffiks ów (nie poprawny dla wszystkich wyrazów, np. 100 wiadomości) + //Zero znaków, Pięć znaków, sześć znaków, siedem znaków, osiem znaków. + //Zero elementów Pięć elementów, sześć elementów, siedem elementów, osiem elementów. + suffix = 'ów'; + } + return " " + n + " " + word + suffix; + } +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_pt-BR.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_pt-BR.js new file mode 100644 index 000000000..51b037de5 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_pt-BR.js @@ -0,0 +1,18 @@ +/** + * Select2 Brazilian Portuguese translation + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['pt-BR'] = { + formatNoMatches: function () { return "Nenhum resultado encontrado"; }, + formatAjaxError: function () { return "Erro na busca"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Digite " + (min == 1 ? "" : "mais") + " " + n + " caracter" + (n == 1? "" : "es"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Apague " + n + " caracter" + (n == 1? "" : "es"); }, + formatSelectionTooBig: function (limit) { return "Só é possível selecionar " + limit + " elemento" + (limit == 1 ? "" : "s"); }, + formatLoadMore: function (pageNumber) { return "Carregando mais resultados…"; }, + formatSearching: function () { return "Buscando…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['pt-BR']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_pt-PT.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_pt-PT.js new file mode 100644 index 000000000..ae55a4fc4 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_pt-PT.js @@ -0,0 +1,17 @@ +/** + * Select2 Portuguese (Portugal) translation + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['pt-PT'] = { + formatNoMatches: function () { return "Nenhum resultado encontrado"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Introduza " + n + " car" + (n == 1 ? "ácter" : "acteres"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Apague " + n + " car" + (n == 1 ? "ácter" : "acteres"); }, + formatSelectionTooBig: function (limit) { return "Só é possível selecionar " + limit + " elemento" + (limit == 1 ? "" : "s"); }, + formatLoadMore: function (pageNumber) { return "A carregar mais resultados…"; }, + formatSearching: function () { return "A pesquisar…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['pt-PT']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ro.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ro.js new file mode 100644 index 000000000..21b0cf181 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ro.js @@ -0,0 +1,17 @@ +/** + * Select2 Romanian translation. + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['ro'] = { + formatNoMatches: function () { return "Nu a fost găsit nimic"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Vă rugăm să introduceți incă " + n + " caracter" + (n == 1 ? "" : "e"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Vă rugăm să introduceți mai puțin de " + n + " caracter" + (n == 1? "" : "e"); }, + formatSelectionTooBig: function (limit) { return "Aveți voie să selectați cel mult " + limit + " element" + (limit == 1 ? "" : "e"); }, + formatLoadMore: function (pageNumber) { return "Se încarcă…"; }, + formatSearching: function () { return "Căutare…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['ro']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_rs.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_rs.js new file mode 100644 index 000000000..72c16389c --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_rs.js @@ -0,0 +1,19 @@ +/** + * Select2 Serbian translation. + * + * @author Limon Monte + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['rs'] = { + formatNoMatches: function () { return "Ništa nije pronađeno"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Ukucajte bar još " + n + " simbol" + (n % 10 == 1 && n % 100 != 11 ? "" : "a"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Obrišite " + n + " simbol" + (n % 10 == 1 && n % 100 != 11 ? "" : "a"); }, + formatSelectionTooBig: function (limit) { return "Možete izabrati samo " + limit + " stavk" + (limit % 10 == 1 && limit % 100 != 11 ? "u" : (limit % 10 >= 2 && limit % 10 <= 4 && (limit % 100 < 12 || limit % 100 > 14)? "e" : "i")); }, + formatLoadMore: function (pageNumber) { return "Preuzimanje još rezultata…"; }, + formatSearching: function () { return "Pretraga…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['rs']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ru.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ru.js new file mode 100644 index 000000000..2a6c7702c --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ru.js @@ -0,0 +1,23 @@ +/** + * Select2 Russian translation. + * + * @author Uriy Efremochkin + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['ru'] = { + formatNoMatches: function () { return "Совпадений не найдено"; }, + formatInputTooShort: function (input, min) { return "Пожалуйста, введите еще хотя бы" + character(min - input.length); }, + formatInputTooLong: function (input, max) { return "Пожалуйста, введите на" + character(input.length - max) + " меньше"; }, + formatSelectionTooBig: function (limit) { return "Вы можете выбрать не более " + limit + " элемент" + (limit%10 == 1 && limit%100 != 11 ? "а" : "ов"); }, + formatLoadMore: function (pageNumber) { return "Загрузка данных…"; }, + formatSearching: function () { return "Поиск…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['ru']); + + function character (n) { + return " " + n + " символ" + (n%10 < 5 && n%10 > 0 && (n%100 < 5 || n%100 > 20) ? n%10 > 1 ? "a" : "" : "ов"); + } +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_sk.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_sk.js new file mode 100644 index 000000000..027530c93 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_sk.js @@ -0,0 +1,50 @@ +/** + * Select2 Slovak translation. + * + * Author: David Vallner + */ +(function ($) { + "use strict"; + // use text for the numbers 2 through 4 + var smallNumbers = { + 2: function(masc) { return (masc ? "dva" : "dve"); }, + 3: function() { return "tri"; }, + 4: function() { return "štyri"; } + }; + $.fn.select2.locales['sk'] = { + formatNoMatches: function () { return "Nenašli sa žiadne položky"; }, + formatInputTooShort: function (input, min) { + var n = min - input.length; + if (n == 1) { + return "Prosím, zadajte ešte jeden znak"; + } else if (n <= 4) { + return "Prosím, zadajte ešte ďalšie "+smallNumbers[n](true)+" znaky"; + } else { + return "Prosím, zadajte ešte ďalších "+n+" znakov"; + } + }, + formatInputTooLong: function (input, max) { + var n = input.length - max; + if (n == 1) { + return "Prosím, zadajte o jeden znak menej"; + } else if (n >= 2 && n <= 4) { + return "Prosím, zadajte o "+smallNumbers[n](true)+" znaky menej"; + } else { + return "Prosím, zadajte o "+n+" znakov menej"; + } + }, + formatSelectionTooBig: function (limit) { + if (limit == 1) { + return "Môžete zvoliť len jednu položku"; + } else if (limit >= 2 && limit <= 4) { + return "Môžete zvoliť najviac "+smallNumbers[limit](false)+" položky"; + } else { + return "Môžete zvoliť najviac "+limit+" položiek"; + } + }, + formatLoadMore: function (pageNumber) { return "Načítavajú sa ďalšie výsledky…"; }, + formatSearching: function () { return "Vyhľadávanie…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['sk']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_sv.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_sv.js new file mode 100644 index 000000000..96f8c0a88 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_sv.js @@ -0,0 +1,19 @@ +/** + * Select2 Swedish translation. + * + * Author: Jens Rantil + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['sv'] = { + formatNoMatches: function () { return "Inga träffar"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Var god skriv in " + n + (n>1 ? " till tecken" : " tecken till"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Var god sudda ut " + n + " tecken"; }, + formatSelectionTooBig: function (limit) { return "Du kan max välja " + limit + " element"; }, + formatLoadMore: function (pageNumber) { return "Laddar fler resultat…"; }, + formatSearching: function () { return "Söker…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['sv']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_th.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_th.js new file mode 100644 index 000000000..7f3e6ef8c --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_th.js @@ -0,0 +1,19 @@ +/** + * Select2 Thai translation. + * + * Author: Atsawin Chaowanakritsanakul + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['th'] = { + formatNoMatches: function () { return "ไม่พบข้อมูล"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "โปรดพิมพ์เพิ่มอีก " + n + " ตัวอักษร"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "โปรดลบออก " + n + " ตัวอักษร"; }, + formatSelectionTooBig: function (limit) { return "คุณสามารถเลือกได้ไม่เกิน " + limit + " รายการ"; }, + formatLoadMore: function (pageNumber) { return "กำลังค้นข้อมูลเพิ่ม…"; }, + formatSearching: function () { return "กำลังค้นข้อมูล…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['th']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_tr.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_tr.js new file mode 100644 index 000000000..1dda95ca3 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_tr.js @@ -0,0 +1,19 @@ +/** + * Select2 Turkish translation. + * + * Author: Salim KAYABAŞI + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['tr'] = { + formatNoMatches: function () { return "Sonuç bulunamadı"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "En az " + n + " karakter daha girmelisiniz"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return n + " karakter azaltmalısınız"; }, + formatSelectionTooBig: function (limit) { return "Sadece " + limit + " seçim yapabilirsiniz"; }, + formatLoadMore: function (pageNumber) { return "Daha fazla…"; }, + formatSearching: function () { return "Aranıyor…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['tr']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ug-CN.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ug-CN.js new file mode 100644 index 000000000..579588a7a --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_ug-CN.js @@ -0,0 +1,16 @@ +/** + * Select2 Uyghur translation + */ +(function ($) { + "use strict"; + $.fn.select2.locales['ug-CN'] = { + formatNoMatches: function () { return "ماس كېلىدىغان ئۇچۇر تېپىلمىدى"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "يەنە " + n + " ھەرپ كىرگۈزۈڭ";}, + formatInputTooLong: function (input, max) { var n = input.length - max; return "" + n + "ھەرپ ئۆچۈرۈڭ";}, + formatSelectionTooBig: function (limit) { return "ئەڭ كۆپ بولغاندا" + limit + " تال ئۇچۇر تاللىيالايسىز"; }, + formatLoadMore: function (pageNumber) { return "ئۇچۇرلار ئوقۇلىۋاتىدۇ…"; }, + formatSearching: function () { return "ئىزدەۋاتىدۇ…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['ug-CN']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_uk.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_uk.js new file mode 100644 index 000000000..b5bd0e02d --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_uk.js @@ -0,0 +1,25 @@ +/** + * Select2 Ukrainian translation. + * + * @author bigmihail + * @author Uriy Efremochkin + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['uk'] = { + formatMatches: function (matches) { return character(matches, "результат") + " знайдено, використовуйте клавіші зі стрілками вверх та вниз для навігації."; }, + formatNoMatches: function () { return "Нічого не знайдено"; }, + formatInputTooShort: function (input, min) { return "Введіть буль ласка ще " + character(min - input.length, "символ"); }, + formatInputTooLong: function (input, max) { return "Введіть буль ласка на " + character(input.length - max, "символ") + " менше"; }, + formatSelectionTooBig: function (limit) { return "Ви можете вибрати лише " + character(limit, "елемент"); }, + formatLoadMore: function (pageNumber) { return "Завантаження даних…"; }, + formatSearching: function () { return "Пошук…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['uk']); + + function character (n, word) { + return n + " " + word + (n%10 < 5 && n%10 > 0 && (n%100 < 5 || n%100 > 19) ? n%10 > 1 ? "и" : "" : "ів"); + } +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_vi.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_vi.js new file mode 100644 index 000000000..cc67065f9 --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_vi.js @@ -0,0 +1,20 @@ +/** + * Select2 Vietnamese translation. + * + * Author: Long Nguyen + */ +(function ($) { + "use strict"; + + $.fn.select2.locales['vi'] = { + formatNoMatches: function () { return "Không tìm thấy kết quả"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Vui lòng nhập nhiều hơn " + n + " ký tự" + (n == 1 ? "" : "s"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Vui lòng nhập ít hơn " + n + " ký tự" + (n == 1? "" : "s"); }, + formatSelectionTooBig: function (limit) { return "Chỉ có thể chọn được " + limit + " tùy chọn" + (limit == 1 ? "" : "s"); }, + formatLoadMore: function (pageNumber) { return "Đang lấy thêm kết quả…"; }, + formatSearching: function () { return "Đang tìm…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['vi']); +})(jQuery); + diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_zh-CN.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_zh-CN.js new file mode 100644 index 000000000..e988dac1a --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_zh-CN.js @@ -0,0 +1,16 @@ +/** + * Select2 Chinese translation + */ +(function ($) { + "use strict"; + $.fn.select2.locales['zh-CN'] = { + formatNoMatches: function () { return "没有找到匹配项"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "请再输入" + n + "个字符";}, + formatInputTooLong: function (input, max) { var n = input.length - max; return "请删掉" + n + "个字符";}, + formatSelectionTooBig: function (limit) { return "你只能选择最多" + limit + "项"; }, + formatLoadMore: function (pageNumber) { return "加载结果中…"; }, + formatSearching: function () { return "搜索中…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['zh-CN']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_zh-TW.js b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_zh-TW.js new file mode 100644 index 000000000..85dbd5afc --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2_locale_zh-TW.js @@ -0,0 +1,16 @@ +/** + * Select2 Traditional Chinese translation + */ +(function ($) { + "use strict"; + $.fn.select2.locales['zh-TW'] = { + formatNoMatches: function () { return "沒有找到相符的項目"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "請再輸入" + n + "個字元";}, + formatInputTooLong: function (input, max) { var n = input.length - max; return "請刪掉" + n + "個字元";}, + formatSelectionTooBig: function (limit) { return "你只能選擇最多" + limit + "項"; }, + formatLoadMore: function (pageNumber) { return "載入中…"; }, + formatSearching: function () { return "搜尋中…"; } + }; + + $.extend($.fn.select2.defaults, $.fn.select2.locales['zh-TW']); +})(jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2x2.png b/plugins/legacy-admin/framework/core/assets/js/vendor/select2/select2x2.png new file mode 100644 index 0000000000000000000000000000000000000000..4bdd5c961d452c49dfa0789c2c7ffb82c238fc24 GIT binary patch literal 845 zcmV-T1G4;yP)upQ6WKflyv?C|ADVW!U!t`EpA+x zB)5#EjWk-_X77YJZtQo`E0SF)^1bZr%)B7Cd`*OK*r z5WG-7e-R9G9^69ksDt29&oyHqxPSt|-S>xi3%PTd+GjY+BGF|nWC(7D-sd(kxqd9~ zS@2YF5vB+>dP8+$l^{oO3-lEWiGA*QIU)Wds#9M6RZ9N zcQ4y4)xqQOxD=vwu%7cz1nY#$lT&y8HCmkWgpwQP#3dhnYj9|2aS_R}IUF_^6s#$= zTm%~>A#oM?KIg$kh=<`gJkeoHa2LrulVy$Yx+N_0R3$4I!R*0677f(FKqm`2_o4~W z0h}fQZ`lC^1A+m;fM7uI(R1`S0KtG@KrkQ}5DW+&@cTnDVIow56KciMk7a899t0bC zC1KI{TsMe5NAR%GD_5`B-@ad4k~K3SO%H z_M31|`HV?E6)u$E3c&*<*n20+V@mRCop>R5;DWuZCmjSo7p@R&OYl^@G")[0]; + return colorInput.type === "color" && colorInput.value !== "!"; + })(), + replaceInput = [ + "
    ", + "
    ", + "
    ", + //"
    " + opts.inputText + "
    ", + "
    " + ].join(''), + markup = (function () { + + // IE does not support gradients with multiple stops, so we need to simulate + // that for the rainbow slider with 8 divs that each have a single gradient + var gradientFix = ""; + if (IE) { + for (var i = 1; i <= 6; i++) { + gradientFix += "
    "; + } + } + + return [ + "
    ", + "
    ", + "
    ", + "
    ", + "
    ", + "
    ", + "
    ", + "
    ", + "
    ", + "
    ", + "
    ", + "
    ", + "
    ", + "
    ", + "
    ", + "
    ", + "
    ", + "
    ", + "
    ", + gradientFix, + "
    ", + "
    ", + "
    ", + "
    ", + "
    ", + "", + "
    ", + "
    ", + "
    ", + "", + "", + "
    ", + "
    ", + "
    " + ].join(""); + })(); + + function paletteTemplate (p, color, className, tooltipFormat) { + var html = []; + for (var i = 0; i < p.length; i++) { + var current = p[i]; + if(current) { + var tiny = tinycolor(current); + var c = tiny.toHsl().l < 0.5 ? "sp-thumb-el sp-thumb-dark" : "sp-thumb-el sp-thumb-light"; + c += (tinycolor.equals(color, current)) ? " sp-thumb-active" : ""; + + var formattedString = tiny.toString(tooltipFormat || "rgb"); + var swatchStyle = rgbaSupport ? ("background-color:" + tiny.toRgbString()) : "filter:" + tiny.toFilter(); + html.push(''); + } else { + var cls = 'sp-clear-display'; + html.push(''); + } + } + return "
    " + html.join('') + "
    "; + } + + function hideAll() { + for (var i = 0; i < spectrums.length; i++) { + if (spectrums[i]) { + spectrums[i].hide(); + } + } + } + + function instanceOptions(o, callbackContext) { + var opts = $.extend({}, defaultOpts, o); + opts.callbacks = { + 'move': bind(opts.move, callbackContext), + 'change': bind(opts.change, callbackContext), + 'show': bind(opts.show, callbackContext), + 'hide': bind(opts.hide, callbackContext), + 'beforeShow': bind(opts.beforeShow, callbackContext) + }; + + return opts; + } + + function spectrum(element, o) { + + var opts = instanceOptions(o, element), + flat = opts.flat, + showSelectionPalette = opts.showSelectionPalette, + localStorageKey = opts.localStorageKey, + theme = opts.theme, + callbacks = opts.callbacks, + resize = throttle(reflow, 10), + visible = false, + dragWidth = 0, + dragHeight = 0, + dragHelperHeight = 0, + slideHeight = 0, + slideWidth = 0, + alphaWidth = 0, + alphaSlideHelperWidth = 0, + slideHelperHeight = 0, + currentHue = 0, + currentSaturation = 0, + currentValue = 0, + currentAlpha = 1, + palette = [], + paletteArray = [], + paletteLookup = {}, + selectionPalette = opts.selectionPalette.slice(0), + maxSelectionSize = opts.maxSelectionSize, + draggingClass = "sp-dragging", + inputText = opts.inputText, + shiftMovementDirection = null; + + var doc = element.ownerDocument, + body = doc.body, + boundElement = $(element), + disabled = false, + container = $(markup, doc).addClass(theme), + dragger = container.find(".sp-color"), + dragHelper = container.find(".sp-dragger"), + slider = container.find(".sp-hue"), + slideHelper = container.find(".sp-slider"), + alphaSliderInner = container.find(".sp-alpha-inner"), + alphaSlider = container.find(".sp-alpha"), + alphaSlideHelper = container.find(".sp-alpha-handle"), + textInput = container.find(".sp-input"), + paletteContainer = container.find(".sp-palette"), + initialColorContainer = container.find(".sp-initial"), + cancelButton = container.find(".sp-cancel"), + clearButton = container.find(".sp-clear"), + chooseButton = container.find(".sp-choose"), + isInput = boundElement.is("input"), + isInputTypeColor = isInput && inputTypeColorSupport && boundElement.attr("type") === "color", + shouldReplace = isInput && !flat, + replacer = (shouldReplace) ? $(replaceInput).addClass(theme).addClass(opts.className).addClass(opts.replacerClassName) : $([]), + offsetElement = (shouldReplace) ? replacer : boundElement, + previewElement = replacer.find(".sp-preview-inner"), + initialColor = opts.color || (isInput && boundElement.val()), + colorOnShow = false, + preferredFormat = opts.preferredFormat, + currentPreferredFormat = preferredFormat, + clickoutFiresChange = !opts.showButtons || opts.clickoutFiresChange, + isEmpty = !initialColor, + allowEmpty = opts.allowEmpty && !isInputTypeColor; + + if (inputText !== '') { + var x = $(offsetElement).find('div.sp-dd'); + x.text(inputText); + } + + function applyOptions() { + + if (opts.showPaletteOnly) { + opts.showPalette = true; + } + + if (opts.palette) { + palette = opts.palette.slice(0); + paletteArray = $.isArray(palette[0]) ? palette : [palette]; + paletteLookup = {}; + for (var i = 0; i < paletteArray.length; i++) { + for (var j = 0; j < paletteArray[i].length; j++) { + var rgb = tinycolor(paletteArray[i][j]).toRgbString(); + paletteLookup[rgb] = true; + } + } + } + + container.toggleClass("sp-flat", flat); + container.toggleClass("sp-input-disabled", !opts.showInput); + container.toggleClass("sp-alpha-enabled", opts.showAlpha); + container.toggleClass("sp-clear-enabled", allowEmpty); + container.toggleClass("sp-buttons-disabled", !opts.showButtons); + container.toggleClass("sp-palette-disabled", !opts.showPalette); + container.toggleClass("sp-palette-only", opts.showPaletteOnly); + container.toggleClass("sp-initial-disabled", !opts.showInitial); + container.addClass(opts.className).addClass(opts.containerClassName); + + reflow(); + } + + function initialize() { + + if (IE) { + container.find("*:not(input)").attr("unselectable", "on"); + } + + applyOptions(); + + if (shouldReplace) { + boundElement.after(replacer).hide(); + } + + if (!allowEmpty) { + clearButton.hide(); + } + + if (flat) { + boundElement.after(container).hide(); + } + else { + + var appendTo = opts.appendTo === "parent" ? boundElement.parent() : $(opts.appendTo); + if (appendTo.length !== 1) { + appendTo = $("body"); + } + + appendTo.append(container); + } + + updateSelectionPaletteFromStorage(); + + offsetElement.bind("click.spectrum touchstart.spectrum", function (e) { + if (!disabled) { + toggle(); + } + + e.stopPropagation(); + + if (!$(e.target).is("input")) { + e.preventDefault(); + } + }); + + if(boundElement.is(":disabled") || (opts.disabled === true)) { + disable(); + } + + // Prevent clicks from bubbling up to document. This would cause it to be hidden. + container.click(stopPropagation); + + // Handle user typed input + textInput.change(setFromTextInput); + textInput.bind("paste", function () { + setTimeout(setFromTextInput, 1); + }); + textInput.keydown(function (e) { if (e.keyCode == 13) { setFromTextInput(); } }); + + cancelButton.text(opts.cancelText); + cancelButton.bind("click.spectrum", function (e) { + e.stopPropagation(); + e.preventDefault(); + hide("cancel"); + }); + + clearButton.attr("title", opts.clearText); + clearButton.bind("click.spectrum", function (e) { + e.stopPropagation(); + e.preventDefault(); + isEmpty = true; + move(); + + if(flat) { + //for the flat style, this is a change event + updateOriginalInput(true); + } + }); + + chooseButton.text(opts.chooseText); + chooseButton.bind("click.spectrum", function (e) { + e.stopPropagation(); + e.preventDefault(); + + if (isValid()) { + updateOriginalInput(true); + hide(); + } + }); + + draggable(alphaSlider, function (dragX, dragY, e) { + currentAlpha = (dragX / alphaWidth); + isEmpty = false; + if (e.shiftKey) { + currentAlpha = Math.round(currentAlpha * 10) / 10; + } + + move(); + }, dragStart, dragStop); + + draggable(slider, function (dragX, dragY) { + currentHue = parseFloat(dragY / slideHeight); + isEmpty = false; + if (!opts.showAlpha) { + currentAlpha = 1; + } + move(); + }, dragStart, dragStop); + + draggable(dragger, function (dragX, dragY, e) { + + // shift+drag should snap the movement to either the x or y axis. + if (!e.shiftKey) { + shiftMovementDirection = null; + } + else if (!shiftMovementDirection) { + var oldDragX = currentSaturation * dragWidth; + var oldDragY = dragHeight - (currentValue * dragHeight); + var furtherFromX = Math.abs(dragX - oldDragX) > Math.abs(dragY - oldDragY); + + shiftMovementDirection = furtherFromX ? "x" : "y"; + } + + var setSaturation = !shiftMovementDirection || shiftMovementDirection === "x"; + var setValue = !shiftMovementDirection || shiftMovementDirection === "y"; + + if (setSaturation) { + currentSaturation = parseFloat(dragX / dragWidth); + } + if (setValue) { + currentValue = parseFloat((dragHeight - dragY) / dragHeight); + } + + isEmpty = false; + if (!opts.showAlpha) { + currentAlpha = 1; + } + + move(); + + }, dragStart, dragStop); + + if (!!initialColor) { + set(initialColor); + + // In case color was black - update the preview UI and set the format + // since the set function will not run (default color is black). + updateUI(); + currentPreferredFormat = preferredFormat || tinycolor(initialColor).format; + + addColorToSelectionPalette(initialColor); + } + else { + updateUI(); + } + + if (flat) { + show(); + } + + function palletElementClick(e) { + if (e.data && e.data.ignore) { + set($(this).data("color")); + move(); + } + else { + set($(this).data("color")); + move(); + updateOriginalInput(true); + hide(); + } + + return false; + } + + var paletteEvent = IE ? "mousedown.spectrum" : "click.spectrum touchstart.spectrum"; + paletteContainer.delegate(".sp-thumb-el", paletteEvent, palletElementClick); + initialColorContainer.delegate(".sp-thumb-el:nth-child(1)", paletteEvent, { ignore: true }, palletElementClick); + } + + function updateSelectionPaletteFromStorage() { + + if (localStorageKey && window.localStorage) { + + // Migrate old palettes over to new format. May want to remove this eventually. + try { + var oldPalette = window.localStorage[localStorageKey].split(",#"); + if (oldPalette.length > 1) { + delete window.localStorage[localStorageKey]; + $.each(oldPalette, function(i, c) { + addColorToSelectionPalette(c); + }); + } + } + catch(e) { } + + try { + selectionPalette = window.localStorage[localStorageKey].split(";"); + } + catch (e) { } + } + } + + function addColorToSelectionPalette(color) { + if (showSelectionPalette) { + var rgb = tinycolor(color).toRgbString(); + if (!paletteLookup[rgb] && $.inArray(rgb, selectionPalette) === -1) { + selectionPalette.push(rgb); + while(selectionPalette.length > maxSelectionSize) { + selectionPalette.shift(); + } + } + + if (localStorageKey && window.localStorage) { + try { + window.localStorage[localStorageKey] = selectionPalette.join(";"); + } + catch(e) { } + } + } + } + + function getUniqueSelectionPalette() { + var unique = []; + if (opts.showPalette) { + for (i = 0; i < selectionPalette.length; i++) { + var rgb = tinycolor(selectionPalette[i]).toRgbString(); + + if (!paletteLookup[rgb]) { + unique.push(selectionPalette[i]); + } + } + } + + return unique.reverse().slice(0, opts.maxSelectionSize); + } + + function drawPalette() { + + var currentColor = get(); + + var html = $.map(paletteArray, function (palette, i) { + return paletteTemplate(palette, currentColor, "sp-palette-row sp-palette-row-" + i, opts.preferredFormat); + }); + + updateSelectionPaletteFromStorage(); + + if (selectionPalette) { + html.push(paletteTemplate(getUniqueSelectionPalette(), currentColor, "sp-palette-row sp-palette-row-selection", opts.preferredFormat)); + } + + paletteContainer.html(html.join("")); + } + + function drawInitial() { + if (opts.showInitial) { + var initial = colorOnShow; + var current = get(); + initialColorContainer.html(paletteTemplate([initial, current], current, "sp-palette-row-initial", opts.preferredFormat)); + } + } + + function dragStart() { + if (dragHeight <= 0 || dragWidth <= 0 || slideHeight <= 0) { + reflow(); + } + container.addClass(draggingClass); + shiftMovementDirection = null; + boundElement.trigger('dragstart.spectrum', [ get() ]); + } + + function dragStop() { + container.removeClass(draggingClass); + boundElement.trigger('dragstop.spectrum', [ get() ]); + } + + function setFromTextInput() { + + var value = textInput.val(); + + if ((value === null || value === "") && allowEmpty) { + set(null); + updateOriginalInput(true); + } + else { + var tiny = tinycolor(value); + if (tiny.ok) { + set(tiny); + updateOriginalInput(true); + } + else { + textInput.addClass("sp-validation-error"); + } + } + } + + function toggle() { + if (visible) { + hide(); + } + else { + show(); + } + } + + function show() { + var event = $.Event('beforeShow.spectrum'); + + if (visible) { + reflow(); + return; + } + + boundElement.trigger(event, [ get() ]); + + if (callbacks.beforeShow(get()) === false || event.isDefaultPrevented()) { + return; + } + + hideAll(); + visible = true; + + $(doc).bind("click.spectrum", hide); + $(window).bind("resize.spectrum", resize); + replacer.addClass("sp-active"); + container.removeClass("sp-hidden"); + + reflow(); + updateUI(); + + colorOnShow = get(); + + drawInitial(); + callbacks.show(colorOnShow); + boundElement.trigger('show.spectrum', [ colorOnShow ]); + } + + function hide(e) { + + // Return on right click + if (e && e.type == "click" && e.button == 2) { return; } + + // Return if hiding is unnecessary + if (!visible || flat) { return; } + visible = false; + + $(doc).unbind("click.spectrum", hide); + $(window).unbind("resize.spectrum", resize); + + replacer.removeClass("sp-active"); + container.addClass("sp-hidden"); + + var colorHasChanged = !tinycolor.equals(get(), colorOnShow); + + if (colorHasChanged) { + if (clickoutFiresChange && e !== "cancel") { + updateOriginalInput(true); + } + else { + revert(); + } + } + + callbacks.hide(get()); + boundElement.trigger('hide.spectrum', [ get() ]); + } + + function revert() { + set(colorOnShow, true); + } + + function set(color, ignoreFormatChange) { + if (tinycolor.equals(color, get())) { + // Update UI just in case a validation error needs + // to be cleared. + updateUI(); + return; + } + + var newColor, newHsv; + if (!color && allowEmpty) { + isEmpty = true; + } else { + isEmpty = false; + newColor = tinycolor(color); + newHsv = newColor.toHsv(); + + currentHue = (newHsv.h % 360) / 360; + currentSaturation = newHsv.s; + currentValue = newHsv.v; + currentAlpha = newHsv.a; + } + updateUI(); + + if (newColor && newColor.ok && !ignoreFormatChange) { + currentPreferredFormat = preferredFormat || newColor.format; + } + } + + function get(opts) { + opts = opts || { }; + + if (allowEmpty && isEmpty) { + return null; + } + + return tinycolor.fromRatio({ + h: currentHue, + s: currentSaturation, + v: currentValue, + a: Math.round(currentAlpha * 100) / 100 + }, { format: opts.format || currentPreferredFormat }); + } + + function isValid() { + return !textInput.hasClass("sp-validation-error"); + } + + function move() { + updateUI(); + + callbacks.move(get()); + boundElement.trigger('move.spectrum', [ get() ]); + } + + function updateUI() { + + textInput.removeClass("sp-validation-error"); + + updateHelperLocations(); + + // Update dragger background color (gradients take care of saturation and value). + var flatColor = tinycolor.fromRatio({ h: currentHue, s: 1, v: 1 }); + dragger.css("background-color", flatColor.toHexString()); + + // Get a format that alpha will be included in (hex and names ignore alpha) + var format = currentPreferredFormat; + if (currentAlpha < 1 && !(currentAlpha === 0 && format === "name")) { + if (format === "hex" || format === "hex3" || format === "hex6" || format === "name") { + format = "rgb"; + } + } + + var realColor = get({ format: format }), + displayColor = ''; + + //reset background info for preview element + previewElement.removeClass("sp-clear-display"); + previewElement.css('background-color', 'transparent'); + + if (!realColor && allowEmpty) { + // Update the replaced elements background with icon indicating no color selection + previewElement.addClass("sp-clear-display"); + } + else { + var realHex = realColor.toHexString(), + realRgb = realColor.toRgbString(); + + // Update the replaced elements background color (with actual selected color) + if (rgbaSupport || realColor.alpha === 1) { + previewElement.css("background-color", realRgb); + } + else { + previewElement.css("background-color", "transparent"); + previewElement.css("filter", realColor.toFilter()); + } + + if (opts.showAlpha) { + var rgb = realColor.toRgb(); + rgb.a = 0; + var realAlpha = tinycolor(rgb).toRgbString(); + var gradient = "linear-gradient(left, " + realAlpha + ", " + realHex + ")"; + + if (IE) { + alphaSliderInner.css("filter", tinycolor(realAlpha).toFilter({ gradientType: 1 }, realHex)); + } + else { + alphaSliderInner.css("background", "-webkit-" + gradient); + alphaSliderInner.css("background", "-moz-" + gradient); + alphaSliderInner.css("background", "-ms-" + gradient); + // Use current syntax gradient on unprefixed property. + alphaSliderInner.css("background", + "linear-gradient(to right, " + realAlpha + ", " + realHex + ")"); + } + } + + displayColor = realColor.toString(format); + } + + // Update the text entry input as it changes happen + if (opts.showInput) { + textInput.val(displayColor); + } + + if (opts.showPalette) { + drawPalette(); + } + + drawInitial(); + } + + function updateHelperLocations() { + var s = currentSaturation; + var v = currentValue; + + if(allowEmpty && isEmpty) { + //if selected color is empty, hide the helpers + alphaSlideHelper.hide(); + slideHelper.hide(); + dragHelper.hide(); + } + else { + //make sure helpers are visible + alphaSlideHelper.show(); + slideHelper.show(); + dragHelper.show(); + + // Where to show the little circle in that displays your current selected color + var dragX = s * dragWidth; + var dragY = dragHeight - (v * dragHeight); + dragX = Math.max( + -dragHelperHeight, + Math.min(dragWidth - dragHelperHeight, dragX - dragHelperHeight) + ); + dragY = Math.max( + -dragHelperHeight, + Math.min(dragHeight - dragHelperHeight, dragY - dragHelperHeight) + ); + dragHelper.css({ + "top": dragY + "px", + "left": dragX + "px" + }); + + var alphaX = currentAlpha * alphaWidth; + alphaSlideHelper.css({ + "left": (alphaX - (alphaSlideHelperWidth / 2)) + "px" + }); + + // Where to show the bar that displays your current selected hue + var slideY = (currentHue) * slideHeight; + slideHelper.css({ + "top": (slideY - slideHelperHeight) + "px" + }); + } + } + + function updateOriginalInput(fireCallback) { + var color = get(), + displayColor = '', + hasChanged = !tinycolor.equals(color, colorOnShow); + + if (color) { + displayColor = color.toString(currentPreferredFormat); + // Update the selection palette with the current color + addColorToSelectionPalette(color); + } + + if (isInput) { + boundElement.val(displayColor); + } + + colorOnShow = color; + + if (fireCallback && hasChanged) { + callbacks.change(color); + boundElement.trigger('change', [ color ]); + } + } + + function reflow() { + dragWidth = dragger.width(); + dragHeight = dragger.height(); + dragHelperHeight = dragHelper.height(); + slideWidth = slider.width(); + slideHeight = slider.height(); + slideHelperHeight = slideHelper.height(); + alphaWidth = alphaSlider.width(); + alphaSlideHelperWidth = alphaSlideHelper.width(); + + if (!flat) { + container.css("position", "absolute"); + container.offset(getOffset(container, offsetElement)); + } + + updateHelperLocations(); + + if (opts.showPalette) { + drawPalette(); + } + + boundElement.trigger('reflow.spectrum'); + } + + function destroy() { + boundElement.show(); + offsetElement.unbind("click.spectrum touchstart.spectrum"); + container.remove(); + replacer.remove(); + spectrums[spect.id] = null; + } + + function option(optionName, optionValue) { + if (optionName === undefined) { + return $.extend({}, opts); + } + if (optionValue === undefined) { + return opts[optionName]; + } + + opts[optionName] = optionValue; + applyOptions(); + } + + function enable() { + disabled = false; + boundElement.attr("disabled", false); + offsetElement.removeClass("sp-disabled"); + } + + function disable() { + hide(); + disabled = true; + boundElement.attr("disabled", true); + offsetElement.addClass("sp-disabled"); + } + + initialize(); + + var spect = { + show: show, + hide: hide, + toggle: toggle, + reflow: reflow, + option: option, + enable: enable, + disable: disable, + set: function (c) { + set(c); + updateOriginalInput(); + }, + get: get, + destroy: destroy, + container: container + }; + + spect.id = spectrums.push(spect) - 1; + + return spect; + } + + /** + * checkOffset - get the offset below/above and left/right element depending on screen position + * Thanks https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.datepicker.js + */ + function getOffset(picker, input) { + var extraY = 0; + var dpWidth = picker.outerWidth(); + var dpHeight = picker.outerHeight(); + var inputHeight = input.outerHeight(); + var doc = picker[0].ownerDocument; + var docElem = doc.documentElement; + var viewWidth = docElem.clientWidth + $(doc).scrollLeft(); + var viewHeight = docElem.clientHeight + $(doc).scrollTop(); + var offset = input.offset(); + offset.top += inputHeight; + + offset.left -= + Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? + Math.abs(offset.left + dpWidth - viewWidth) : 0); + + offset.top -= + Math.min(offset.top, ((offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? + Math.abs(dpHeight + inputHeight - extraY) : extraY)); + + return offset; + } + + /** + * noop - do nothing + */ + function noop() { + + } + + /** + * stopPropagation - makes the code only doing this a little easier to read in line + */ + function stopPropagation(e) { + e.stopPropagation(); + } + + /** + * Create a function bound to a given object + * Thanks to underscore.js + */ + function bind(func, obj) { + var slice = Array.prototype.slice; + var args = slice.call(arguments, 2); + return function () { + return func.apply(obj, args.concat(slice.call(arguments))); + }; + } + + /** + * Lightweight drag helper. Handles containment within the element, so that + * when dragging, the x is within [0,element.width] and y is within [0,element.height] + */ + function draggable(element, onmove, onstart, onstop) { + onmove = onmove || function () { }; + onstart = onstart || function () { }; + onstop = onstop || function () { }; + var doc = element.ownerDocument || document; + var dragging = false; + var offset = {}; + var maxHeight = 0; + var maxWidth = 0; + var hasTouch = ('ontouchstart' in window); + + var duringDragEvents = {}; + duringDragEvents["selectstart"] = prevent; + duringDragEvents["dragstart"] = prevent; + duringDragEvents["touchmove mousemove"] = move; + duringDragEvents["touchend mouseup"] = stop; + + function prevent(e) { + if (e.stopPropagation) { + e.stopPropagation(); + } + if (e.preventDefault) { + e.preventDefault(); + } + e.returnValue = false; + } + + function move(e) { + if (dragging) { + // Mouseup happened outside of window + if (IE && document.documentMode < 9 && !e.button) { + return stop(); + } + + var touches = e.originalEvent.touches; + var pageX = touches ? touches[0].pageX : e.pageX; + var pageY = touches ? touches[0].pageY : e.pageY; + + var dragX = Math.max(0, Math.min(pageX - offset.left, maxWidth)); + var dragY = Math.max(0, Math.min(pageY - offset.top, maxHeight)); + + if (hasTouch) { + // Stop scrolling in iOS + prevent(e); + } + + onmove.apply(element, [dragX, dragY, e]); + } + } + + function start(e) { + var rightclick = (e.which) ? (e.which == 3) : (e.button == 2); + var touches = e.originalEvent.touches; + + if (!rightclick && !dragging) { + if (onstart.apply(element, arguments) !== false) { + dragging = true; + maxHeight = $(element).height(); + maxWidth = $(element).width(); + offset = $(element).offset(); + + $(doc).bind(duringDragEvents); + $(doc.body).addClass("sp-dragging"); + + if (!hasTouch) { + move(e); + } + + prevent(e); + } + } + } + + function stop() { + if (dragging) { + $(doc).unbind(duringDragEvents); + $(doc.body).removeClass("sp-dragging"); + onstop.apply(element, arguments); + } + dragging = false; + } + + $(element).bind("touchstart mousedown", start); + } + + function throttle(func, wait, debounce) { + var timeout; + return function () { + var context = this, args = arguments; + var throttler = function () { + timeout = null; + func.apply(context, args); + }; + if (debounce) clearTimeout(timeout); + if (debounce || !timeout) timeout = setTimeout(throttler, wait); + }; + } + + function log(){/* jshint -W021 */if(window.console){if(Function.prototype.bind)log=Function.prototype.bind.call(console.log,console);else log=function(){Function.prototype.apply.call(console.log,console,arguments);};log.apply(this,arguments);}} + + /** + * Define a jQuery plugin + */ + var dataID = "spectrum.id"; + $.fn.spectrum = function (opts, extra) { + + if (typeof opts == "string") { + + var returnValue = this; + var args = Array.prototype.slice.call( arguments, 1 ); + + this.each(function () { + var spect = spectrums[$(this).data(dataID)]; + if (spect) { + var method = spect[opts]; + if (!method) { + throw new Error( "Spectrum: no such method: '" + opts + "'" ); + } + + if (opts == "get") { + returnValue = spect.get(); + } + else if (opts == "container") { + returnValue = spect.container; + } + else if (opts == "option") { + returnValue = spect.option.apply(spect, args); + } + else if (opts == "destroy") { + spect.destroy(); + $(this).removeData(dataID); + } + else { + method.apply(spect, args); + } + } + }); + + return returnValue; + } + + // Initializing a new instance of spectrum + return this.spectrum("destroy").each(function () { + var options = $.extend({}, opts, $(this).data()); + var spect = spectrum(this, options); + $(this).data(dataID, spect.id); + }); + }; + + $.fn.spectrum.load = true; + $.fn.spectrum.loadOpts = {}; + $.fn.spectrum.draggable = draggable; + $.fn.spectrum.defaults = defaultOpts; + + $.spectrum = { }; + $.spectrum.localization = { }; + $.spectrum.palettes = { }; + + $.fn.spectrum.processNativeColorInputs = function () { + if (!inputTypeColorSupport) { + $("input[type=color]").spectrum({ + preferredFormat: "hex6" + }); + } + }; + + // TinyColor v0.9.17 + // https://github.com/bgrins/TinyColor + // 2013-08-10, Brian Grinstead, MIT License + + (function() { + + var trimLeft = /^[\s,#]+/, + trimRight = /\s+$/, + tinyCounter = 0, + math = Math, + mathRound = math.round, + mathMin = math.min, + mathMax = math.max, + mathRandom = math.random; + + function tinycolor (color, opts) { + + color = (color) ? color : ''; + opts = opts || { }; + + // If input is already a tinycolor, return itself + if (typeof color == "object" && color.hasOwnProperty("_tc_id")) { + return color; + } + + var rgb = inputToRGB(color); + var r = rgb.r, + g = rgb.g, + b = rgb.b, + a = rgb.a, + roundA = mathRound(100*a) / 100, + format = opts.format || rgb.format; + + // Don't let the range of [0,255] come back in [0,1]. + // Potentially lose a little bit of precision here, but will fix issues where + // .5 gets interpreted as half of the total, instead of half of 1 + // If it was supposed to be 128, this was already taken care of by `inputToRgb` + if (r < 1) { r = mathRound(r); } + if (g < 1) { g = mathRound(g); } + if (b < 1) { b = mathRound(b); } + + return { + ok: rgb.ok, + format: format, + _tc_id: tinyCounter++, + alpha: a, + getAlpha: function() { + return a; + }, + setAlpha: function(value) { + a = boundAlpha(value); + roundA = mathRound(100*a) / 100; + }, + toHsv: function() { + var hsv = rgbToHsv(r, g, b); + return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: a }; + }, + toHsvString: function() { + var hsv = rgbToHsv(r, g, b); + var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100); + return (a == 1) ? + "hsv(" + h + ", " + s + "%, " + v + "%)" : + "hsva(" + h + ", " + s + "%, " + v + "%, "+ roundA + ")"; + }, + toHsl: function() { + var hsl = rgbToHsl(r, g, b); + return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: a }; + }, + toHslString: function() { + var hsl = rgbToHsl(r, g, b); + var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100); + return (a == 1) ? + "hsl(" + h + ", " + s + "%, " + l + "%)" : + "hsla(" + h + ", " + s + "%, " + l + "%, "+ roundA + ")"; + }, + toHex: function(allow3Char) { + return rgbToHex(r, g, b, allow3Char); + }, + toHexString: function(allow3Char) { + return '#' + this.toHex(allow3Char); + }, + toHex8: function() { + return rgbaToHex(r, g, b, a); + }, + toHex8String: function() { + return '#' + this.toHex8(); + }, + toRgb: function() { + return { r: mathRound(r), g: mathRound(g), b: mathRound(b), a: a }; + }, + toRgbString: function() { + return (a == 1) ? + "rgb(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ")" : + "rgba(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ", " + roundA + ")"; + }, + toPercentageRgb: function() { + return { r: mathRound(bound01(r, 255) * 100) + "%", g: mathRound(bound01(g, 255) * 100) + "%", b: mathRound(bound01(b, 255) * 100) + "%", a: a }; + }, + toPercentageRgbString: function() { + return (a == 1) ? + "rgb(" + mathRound(bound01(r, 255) * 100) + "%, " + mathRound(bound01(g, 255) * 100) + "%, " + mathRound(bound01(b, 255) * 100) + "%)" : + "rgba(" + mathRound(bound01(r, 255) * 100) + "%, " + mathRound(bound01(g, 255) * 100) + "%, " + mathRound(bound01(b, 255) * 100) + "%, " + roundA + ")"; + }, + toName: function() { + if (a === 0) { + return "transparent"; + } + + return hexNames[rgbToHex(r, g, b, true)] || false; + }, + toFilter: function(secondColor) { + var hex8String = '#' + rgbaToHex(r, g, b, a); + var secondHex8String = hex8String; + var gradientType = opts && opts.gradientType ? "GradientType = 1, " : ""; + + if (secondColor) { + var s = tinycolor(secondColor); + secondHex8String = s.toHex8String(); + } + + return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")"; + }, + toString: function(format) { + var formatSet = !!format; + format = format || this.format; + + var formattedString = false; + var hasAlphaAndFormatNotSet = !formatSet && a < 1 && a > 0; + var formatWithAlpha = hasAlphaAndFormatNotSet && (format === "hex" || format === "hex6" || format === "hex3" || format === "name"); + + if (format === "rgb") { + formattedString = this.toRgbString(); + } + if (format === "prgb") { + formattedString = this.toPercentageRgbString(); + } + if (format === "hex" || format === "hex6") { + formattedString = this.toHexString(); + } + if (format === "hex3") { + formattedString = this.toHexString(true); + } + if (format === "hex8") { + formattedString = this.toHex8String(); + } + if (format === "name") { + formattedString = this.toName(); + } + if (format === "hsl") { + formattedString = this.toHslString(); + } + if (format === "hsv") { + formattedString = this.toHsvString(); + } + + if (formatWithAlpha) { + return this.toRgbString(); + } + + return formattedString || this.toHexString(); + } + }; + } + + // If input is an object, force 1 into "1.0" to handle ratios properly + // String input requires "1.0" as input, so 1 will be treated as 1 + tinycolor.fromRatio = function(color, opts) { + if (typeof color == "object") { + var newColor = {}; + for (var i in color) { + if (color.hasOwnProperty(i)) { + if (i === "a") { + newColor[i] = color[i]; + } + else { + newColor[i] = convertToPercentage(color[i]); + } + } + } + color = newColor; + } + + return tinycolor(color, opts); + }; + + // Given a string or object, convert that input to RGB + // Possible string inputs: + // + // "red" + // "#f00" or "f00" + // "#ff0000" or "ff0000" + // "#ff000000" or "ff000000" + // "rgb 255 0 0" or "rgb (255, 0, 0)" + // "rgb 1.0 0 0" or "rgb (1, 0, 0)" + // "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1" + // "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1" + // "hsl(0, 100%, 50%)" or "hsl 0 100% 50%" + // "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1" + // "hsv(0, 100%, 100%)" or "hsv 0 100% 100%" + // + function inputToRGB(color) { + + var rgb = { r: 0, g: 0, b: 0 }; + var a = 1; + var ok = false; + var format = false; + + if (typeof color == "string") { + color = stringInputToObject(color); + } + + if (typeof color == "object") { + if (color.hasOwnProperty("r") && color.hasOwnProperty("g") && color.hasOwnProperty("b")) { + rgb = rgbToRgb(color.r, color.g, color.b); + ok = true; + format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb"; + } + else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("v")) { + color.s = convertToPercentage(color.s); + color.v = convertToPercentage(color.v); + rgb = hsvToRgb(color.h, color.s, color.v); + ok = true; + format = "hsv"; + } + else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("l")) { + color.s = convertToPercentage(color.s); + color.l = convertToPercentage(color.l); + rgb = hslToRgb(color.h, color.s, color.l); + ok = true; + format = "hsl"; + } + + if (color.hasOwnProperty("a")) { + a = color.a; + } + } + + a = boundAlpha(a); + + return { + ok: ok, + format: color.format || format, + r: mathMin(255, mathMax(rgb.r, 0)), + g: mathMin(255, mathMax(rgb.g, 0)), + b: mathMin(255, mathMax(rgb.b, 0)), + a: a + }; + } + + + // Conversion Functions + // -------------------- + + // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from: + // + + // `rgbToRgb` + // Handle bounds / percentage checking to conform to CSS color spec + // + // *Assumes:* r, g, b in [0, 255] or [0, 1] + // *Returns:* { r, g, b } in [0, 255] + function rgbToRgb(r, g, b){ + return { + r: bound01(r, 255) * 255, + g: bound01(g, 255) * 255, + b: bound01(b, 255) * 255 + }; + } + + // `rgbToHsl` + // Converts an RGB color value to HSL. + // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1] + // *Returns:* { h, s, l } in [0,1] + function rgbToHsl(r, g, b) { + + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + + var max = mathMax(r, g, b), min = mathMin(r, g, b); + var h, s, l = (max + min) / 2; + + if(max == min) { + h = s = 0; // achromatic + } + else { + var d = max - min; + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + switch(max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + + h /= 6; + } + + return { h: h, s: s, l: l }; + } + + // `hslToRgb` + // Converts an HSL color value to RGB. + // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100] + // *Returns:* { r, g, b } in the set [0, 255] + function hslToRgb(h, s, l) { + var r, g, b; + + h = bound01(h, 360); + s = bound01(s, 100); + l = bound01(l, 100); + + function hue2rgb(p, q, t) { + if(t < 0) t += 1; + if(t > 1) t -= 1; + if(t < 1/6) return p + (q - p) * 6 * t; + if(t < 1/2) return q; + if(t < 2/3) return p + (q - p) * (2/3 - t) * 6; + return p; + } + + if(s === 0) { + r = g = b = l; // achromatic + } + else { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = hue2rgb(p, q, h + 1/3); + g = hue2rgb(p, q, h); + b = hue2rgb(p, q, h - 1/3); + } + + return { r: r * 255, g: g * 255, b: b * 255 }; + } + + // `rgbToHsv` + // Converts an RGB color value to HSV + // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1] + // *Returns:* { h, s, v } in [0,1] + function rgbToHsv(r, g, b) { + + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + + var max = mathMax(r, g, b), min = mathMin(r, g, b); + var h, s, v = max; + + var d = max - min; + s = max === 0 ? 0 : d / max; + + if(max == min) { + h = 0; // achromatic + } + else { + switch(max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + h /= 6; + } + return { h: h, s: s, v: v }; + } + + // `hsvToRgb` + // Converts an HSV color value to RGB. + // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100] + // *Returns:* { r, g, b } in the set [0, 255] + function hsvToRgb(h, s, v) { + + h = bound01(h, 360) * 6; + s = bound01(s, 100); + v = bound01(v, 100); + + var i = math.floor(h), + f = h - i, + p = v * (1 - s), + q = v * (1 - f * s), + t = v * (1 - (1 - f) * s), + mod = i % 6, + r = [v, q, p, p, t, v][mod], + g = [t, v, v, q, p, p][mod], + b = [p, p, t, v, v, q][mod]; + + return { r: r * 255, g: g * 255, b: b * 255 }; + } + + // `rgbToHex` + // Converts an RGB color to hex + // Assumes r, g, and b are contained in the set [0, 255] + // Returns a 3 or 6 character hex + function rgbToHex(r, g, b, allow3Char) { + + var hex = [ + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)) + ]; + + // Return a 3 character hex if possible + if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) { + return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); + } + + return hex.join(""); + } + // `rgbaToHex` + // Converts an RGBA color plus alpha transparency to hex + // Assumes r, g, b and a are contained in the set [0, 255] + // Returns an 8 character hex + function rgbaToHex(r, g, b, a) { + + var hex = [ + pad2(convertDecimalToHex(a)), + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)) + ]; + + return hex.join(""); + } + + // `equals` + // Can be called with any tinycolor input + tinycolor.equals = function (color1, color2) { + if (!color1 || !color2) { return false; } + return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString(); + }; + tinycolor.random = function() { + return tinycolor.fromRatio({ + r: mathRandom(), + g: mathRandom(), + b: mathRandom() + }); + }; + + + // Modification Functions + // ---------------------- + // Thanks to less.js for some of the basics here + // + + tinycolor.desaturate = function (color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.s -= amount / 100; + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); + }; + tinycolor.saturate = function (color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.s += amount / 100; + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); + }; + tinycolor.greyscale = function(color) { + return tinycolor.desaturate(color, 100); + }; + tinycolor.lighten = function(color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.l += amount / 100; + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); + }; + tinycolor.darken = function (color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.l -= amount / 100; + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); + }; + tinycolor.complement = function(color) { + var hsl = tinycolor(color).toHsl(); + hsl.h = (hsl.h + 180) % 360; + return tinycolor(hsl); + }; + + + // Combination Functions + // --------------------- + // Thanks to jQuery xColor for some of the ideas behind these + // + + tinycolor.triad = function(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l }) + ]; + }; + tinycolor.tetrad = function(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l }) + ]; + }; + tinycolor.splitcomplement = function(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}), + tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l}) + ]; + }; + tinycolor.analogous = function(color, results, slices) { + results = results || 6; + slices = slices || 30; + + var hsl = tinycolor(color).toHsl(); + var part = 360 / slices; + var ret = [tinycolor(color)]; + + for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) { + hsl.h = (hsl.h + part) % 360; + ret.push(tinycolor(hsl)); + } + return ret; + }; + tinycolor.monochromatic = function(color, results) { + results = results || 6; + var hsv = tinycolor(color).toHsv(); + var h = hsv.h, s = hsv.s, v = hsv.v; + var ret = []; + var modification = 1 / results; + + while (results--) { + ret.push(tinycolor({ h: h, s: s, v: v})); + v = (v + modification) % 1; + } + + return ret; + }; + + + // Readability Functions + // --------------------- + // + + // `readability` + // Analyze the 2 colors and returns an object with the following properties: + // `brightness`: difference in brightness between the two colors + // `color`: difference in color/hue between the two colors + tinycolor.readability = function(color1, color2) { + var a = tinycolor(color1).toRgb(); + var b = tinycolor(color2).toRgb(); + var brightnessA = (a.r * 299 + a.g * 587 + a.b * 114) / 1000; + var brightnessB = (b.r * 299 + b.g * 587 + b.b * 114) / 1000; + var colorDiff = ( + Math.max(a.r, b.r) - Math.min(a.r, b.r) + + Math.max(a.g, b.g) - Math.min(a.g, b.g) + + Math.max(a.b, b.b) - Math.min(a.b, b.b) + ); + + return { + brightness: Math.abs(brightnessA - brightnessB), + color: colorDiff + }; + }; + + // `readable` + // http://www.w3.org/TR/AERT#color-contrast + // Ensure that foreground and background color combinations provide sufficient contrast. + // *Example* + // tinycolor.readable("#000", "#111") => false + tinycolor.readable = function(color1, color2) { + var readability = tinycolor.readability(color1, color2); + return readability.brightness > 125 && readability.color > 500; + }; + + // `mostReadable` + // Given a base color and a list of possible foreground or background + // colors for that base, returns the most readable color. + // *Example* + // tinycolor.mostReadable("#123", ["#fff", "#000"]) => "#000" + tinycolor.mostReadable = function(baseColor, colorList) { + var bestColor = null; + var bestScore = 0; + var bestIsReadable = false; + for (var i=0; i < colorList.length; i++) { + + // We normalize both around the "acceptable" breaking point, + // but rank brightness constrast higher than hue. + + var readability = tinycolor.readability(baseColor, colorList[i]); + var readable = readability.brightness > 125 && readability.color > 500; + var score = 3 * (readability.brightness / 125) + (readability.color / 500); + + if ((readable && ! bestIsReadable) || + (readable && bestIsReadable && score > bestScore) || + ((! readable) && (! bestIsReadable) && score > bestScore)) { + bestIsReadable = readable; + bestScore = score; + bestColor = tinycolor(colorList[i]); + } + } + return bestColor; + }; + + + // Big List of Colors + // ------------------ + // + var names = tinycolor.names = { + aliceblue: "f0f8ff", + antiquewhite: "faebd7", + aqua: "0ff", + aquamarine: "7fffd4", + azure: "f0ffff", + beige: "f5f5dc", + bisque: "ffe4c4", + black: "000", + blanchedalmond: "ffebcd", + blue: "00f", + blueviolet: "8a2be2", + brown: "a52a2a", + burlywood: "deb887", + burntsienna: "ea7e5d", + cadetblue: "5f9ea0", + chartreuse: "7fff00", + chocolate: "d2691e", + coral: "ff7f50", + cornflowerblue: "6495ed", + cornsilk: "fff8dc", + crimson: "dc143c", + cyan: "0ff", + darkblue: "00008b", + darkcyan: "008b8b", + darkgoldenrod: "b8860b", + darkgray: "a9a9a9", + darkgreen: "006400", + darkgrey: "a9a9a9", + darkkhaki: "bdb76b", + darkmagenta: "8b008b", + darkolivegreen: "556b2f", + darkorange: "ff8c00", + darkorchid: "9932cc", + darkred: "8b0000", + darksalmon: "e9967a", + darkseagreen: "8fbc8f", + darkslateblue: "483d8b", + darkslategray: "2f4f4f", + darkslategrey: "2f4f4f", + darkturquoise: "00ced1", + darkviolet: "9400d3", + deeppink: "ff1493", + deepskyblue: "00bfff", + dimgray: "696969", + dimgrey: "696969", + dodgerblue: "1e90ff", + firebrick: "b22222", + floralwhite: "fffaf0", + forestgreen: "228b22", + fuchsia: "f0f", + gainsboro: "dcdcdc", + ghostwhite: "f8f8ff", + gold: "ffd700", + goldenrod: "daa520", + gray: "808080", + green: "008000", + greenyellow: "adff2f", + grey: "808080", + honeydew: "f0fff0", + hotpink: "ff69b4", + indianred: "cd5c5c", + indigo: "4b0082", + ivory: "fffff0", + khaki: "f0e68c", + lavender: "e6e6fa", + lavenderblush: "fff0f5", + lawngreen: "7cfc00", + lemonchiffon: "fffacd", + lightblue: "add8e6", + lightcoral: "f08080", + lightcyan: "e0ffff", + lightgoldenrodyellow: "fafad2", + lightgray: "d3d3d3", + lightgreen: "90ee90", + lightgrey: "d3d3d3", + lightpink: "ffb6c1", + lightsalmon: "ffa07a", + lightseagreen: "20b2aa", + lightskyblue: "87cefa", + lightslategray: "789", + lightslategrey: "789", + lightsteelblue: "b0c4de", + lightyellow: "ffffe0", + lime: "0f0", + limegreen: "32cd32", + linen: "faf0e6", + magenta: "f0f", + maroon: "800000", + mediumaquamarine: "66cdaa", + mediumblue: "0000cd", + mediumorchid: "ba55d3", + mediumpurple: "9370db", + mediumseagreen: "3cb371", + mediumslateblue: "7b68ee", + mediumspringgreen: "00fa9a", + mediumturquoise: "48d1cc", + mediumvioletred: "c71585", + midnightblue: "191970", + mintcream: "f5fffa", + mistyrose: "ffe4e1", + moccasin: "ffe4b5", + navajowhite: "ffdead", + navy: "000080", + oldlace: "fdf5e6", + olive: "808000", + olivedrab: "6b8e23", + orange: "ffa500", + orangered: "ff4500", + orchid: "da70d6", + palegoldenrod: "eee8aa", + palegreen: "98fb98", + paleturquoise: "afeeee", + palevioletred: "db7093", + papayawhip: "ffefd5", + peachpuff: "ffdab9", + peru: "cd853f", + pink: "ffc0cb", + plum: "dda0dd", + powderblue: "b0e0e6", + purple: "800080", + red: "f00", + rosybrown: "bc8f8f", + royalblue: "4169e1", + saddlebrown: "8b4513", + salmon: "fa8072", + sandybrown: "f4a460", + seagreen: "2e8b57", + seashell: "fff5ee", + sienna: "a0522d", + silver: "c0c0c0", + skyblue: "87ceeb", + slateblue: "6a5acd", + slategray: "708090", + slategrey: "708090", + snow: "fffafa", + springgreen: "00ff7f", + steelblue: "4682b4", + tan: "d2b48c", + teal: "008080", + thistle: "d8bfd8", + tomato: "ff6347", + turquoise: "40e0d0", + violet: "ee82ee", + wheat: "f5deb3", + white: "fff", + whitesmoke: "f5f5f5", + yellow: "ff0", + yellowgreen: "9acd32" + }; + + // Make it easy to access colors via `hexNames[hex]` + var hexNames = tinycolor.hexNames = flip(names); + + + // Utilities + // --------- + + // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }` + function flip(o) { + var flipped = { }; + for (var i in o) { + if (o.hasOwnProperty(i)) { + flipped[o[i]] = i; + } + } + return flipped; + } + + // Return a valid alpha value [0,1] with all invalid values being set to 1 + function boundAlpha(a) { + a = parseFloat(a); + + if (isNaN(a) || a < 0 || a > 1) { + a = 1; + } + + return a; + } + + // Take input from [0, n] and return it as [0, 1] + function bound01(n, max) { + if (isOnePointZero(n)) { n = "100%"; } + + var processPercent = isPercentage(n); + n = mathMin(max, mathMax(0, parseFloat(n))); + + // Automatically convert percentage into number + if (processPercent) { + n = parseInt(n * max, 10) / 100; + } + + // Handle floating point rounding errors + if ((math.abs(n - max) < 0.000001)) { + return 1; + } + + // Convert into [0, 1] range if it isn't already + return (n % max) / parseFloat(max); + } + + // Force a number between 0 and 1 + function clamp01(val) { + return mathMin(1, mathMax(0, val)); + } + + // Parse a base-16 hex value into a base-10 integer + function parseIntFromHex(val) { + return parseInt(val, 16); + } + + // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1 + // + function isOnePointZero(n) { + return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1; + } + + // Check to see if string passed in is a percentage + function isPercentage(n) { + return typeof n === "string" && n.indexOf('%') != -1; + } + + // Force a hex value to have 2 characters + function pad2(c) { + return c.length == 1 ? '0' + c : '' + c; + } + + // Replace a decimal with it's percentage value + function convertToPercentage(n) { + if (n <= 1) { + n = (n * 100) + "%"; + } + + return n; + } + + // Converts a decimal to a hex value + function convertDecimalToHex(d) { + return Math.round(parseFloat(d) * 255).toString(16); + } + // Converts a hex value to a decimal + function convertHexToDecimal(h) { + return (parseIntFromHex(h) / 255); + } + + var matchers = (function() { + + // + var CSS_INTEGER = "[-\\+]?\\d+%?"; + + // + var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; + + // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome. + var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")"; + + // Actual matching. + // Parentheses and commas are optional, but not required. + // Whitespace can take the place of commas or opening paren + var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + + return { + rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), + rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), + hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), + hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), + hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), + hex3: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, + hex6: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, + hex8: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ + }; + })(); + + // `stringInputToObject` + // Permissive string parsing. Take in a number of formats, and output an object + // based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}` + function stringInputToObject(color) { + + color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase(); + var named = false; + if (names[color]) { + color = names[color]; + named = true; + } + else if (color == 'transparent') { + return { r: 0, g: 0, b: 0, a: 0, format: "name" }; + } + + // Try to match string input using regular expressions. + // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360] + // Just return an object and let the conversion functions handle that. + // This way the result will be the same whether the tinycolor is initialized with string or object. + var match; + if ((match = matchers.rgb.exec(color))) { + return { r: match[1], g: match[2], b: match[3] }; + } + if ((match = matchers.rgba.exec(color))) { + return { r: match[1], g: match[2], b: match[3], a: match[4] }; + } + if ((match = matchers.hsl.exec(color))) { + return { h: match[1], s: match[2], l: match[3] }; + } + if ((match = matchers.hsla.exec(color))) { + return { h: match[1], s: match[2], l: match[3], a: match[4] }; + } + if ((match = matchers.hsv.exec(color))) { + return { h: match[1], s: match[2], v: match[3] }; + } + if ((match = matchers.hex8.exec(color))) { + return { + a: convertHexToDecimal(match[1]), + r: parseIntFromHex(match[2]), + g: parseIntFromHex(match[3]), + b: parseIntFromHex(match[4]), + format: named ? "name" : "hex8" + }; + } + if ((match = matchers.hex6.exec(color))) { + return { + r: parseIntFromHex(match[1]), + g: parseIntFromHex(match[2]), + b: parseIntFromHex(match[3]), + format: named ? "name" : "hex" + }; + } + if ((match = matchers.hex3.exec(color))) { + return { + r: parseIntFromHex(match[1] + '' + match[1]), + g: parseIntFromHex(match[2] + '' + match[2]), + b: parseIntFromHex(match[3] + '' + match[3]), + format: named ? "name" : "hex" + }; + } + + return false; + } + + // Expose tinycolor to window, does not need to run in non-browser context. + window.tinycolor = tinycolor; + + })(); + + + $(function () { + if ($.fn.spectrum.load) { + $.fn.spectrum.processNativeColorInputs(); + } + }); + +})(window, jQuery); diff --git a/plugins/legacy-admin/framework/core/assets/js/vendor/spectrum/redux-spectrum.min.js b/plugins/legacy-admin/framework/core/assets/js/vendor/spectrum/redux-spectrum.min.js new file mode 100644 index 000000000..b3a3a6cda --- /dev/null +++ b/plugins/legacy-admin/framework/core/assets/js/vendor/spectrum/redux-spectrum.min.js @@ -0,0 +1 @@ +!function(a,b,c){function d(a,b,c,d){for(var e=[],f=0;f')}else{var l="sp-clear-display";e.push('')}}return"
    "+e.join("")+"
    "}function e(){for(var a=0;aMath.abs(b-e);sa=f?"x":"y"}}else sa=null;var g=!sa||"x"===sa,h=!sa||"y"===sa;g&&(ia=parseFloat(a/_)),h&&(ja=parseFloat((aa-b)/aa)),Va=!1,T.showAlpha||(ka=1),K()},A,B),Qa?(H(Qa),L(),Ta=Sa||tinycolor(Qa).format,w(Qa)):L(),U&&E();var d=q?"mousedown.spectrum":"click.spectrum touchstart.spectrum";Fa.delegate(".sp-thumb-el",d,a),Ga.delegate(".sp-thumb-el:nth-child(1)",d,{ignore:!0},a)}function v(){if(W&&a.localStorage){try{var c=a.localStorage[W].split(",#");c.length>1&&(delete a.localStorage[W],b.each(c,function(a,b){w(b)}))}catch(d){}try{oa=a.localStorage[W].split(";")}catch(d){}}}function w(c){if(V){var d=tinycolor(c).toRgbString();if(!na[d]&&-1===b.inArray(d,oa))for(oa.push(d);oa.length>pa;)oa.shift();if(W&&a.localStorage)try{a.localStorage[W]=oa.join(";")}catch(e){}}}function x(){var a=[];if(T.showPalette)for(i=0;i=aa||0>=_||0>=ca)&&O(),wa.addClass(qa),sa=null,ua.trigger("dragstart.spectrum",[I()])}function B(){wa.removeClass(qa),ua.trigger("dragstop.spectrum",[I()])}function C(){var a=Ea.val();if(null!==a&&""!==a||!Wa){var b=tinycolor(a);b.ok?(H(b),N(!0)):Ea.addClass("sp-validation-error")}else H(null),N(!0)}function D(){$?F():E()}function E(){var c=b.Event("beforeShow.spectrum");return $?void O():(ua.trigger(c,[I()]),void(Y.beforeShow(I())===!1||c.isDefaultPrevented()||(e(),$=!0,b(ta).bind("click.spectrum",F),b(a).bind("resize.spectrum",Z),Na.addClass("sp-active"),wa.removeClass("sp-hidden"),O(),L(),Ra=I(),z(),Y.show(Ra),ua.trigger("show.spectrum",[Ra]))))}function F(c){if((!c||"click"!=c.type||2!=c.button)&&$&&!U){$=!1,b(ta).unbind("click.spectrum",F),b(a).unbind("resize.spectrum",Z),Na.removeClass("sp-active"),wa.addClass("sp-hidden");var d=!tinycolor.equals(I(),Ra);d&&(Ua&&"cancel"!==c?N(!0):G()),Y.hide(I()),ua.trigger("hide.spectrum",[I()])}}function G(){H(Ra,!0)}function H(a,b){if(tinycolor.equals(a,I()))return void L();var c,d;!a&&Wa?Va=!0:(Va=!1,c=tinycolor(a),d=c.toHsv(),ha=d.h%360/360,ia=d.s,ja=d.v,ka=d.a),L(),c&&c.ok&&!b&&(Ta=Sa||c.format)}function I(a){return a=a||{},Wa&&Va?null:tinycolor.fromRatio({h:ha,s:ia,v:ja,a:Math.round(100*ka)/100},{format:a.format||Ta})}function J(){return!Ea.hasClass("sp-validation-error")}function K(){L(),Y.move(I()),ua.trigger("move.spectrum",[I()])}function L(){Ea.removeClass("sp-validation-error"),M();var a=tinycolor.fromRatio({h:ha,s:1,v:1});xa.css("background-color",a.toHexString());var b=Ta;1>ka&&(0!==ka||"name"!==b)&&("hex"===b||"hex3"===b||"hex6"===b||"name"===b)&&(b="rgb");var c=I({format:b}),d="";if(Pa.removeClass("sp-clear-display"),Pa.css("background-color","transparent"),!c&&Wa)Pa.addClass("sp-clear-display");else{var e=c.toHexString(),f=c.toRgbString();if(r||1===c.alpha?Pa.css("background-color",f):(Pa.css("background-color","transparent"),Pa.css("filter",c.toFilter())),T.showAlpha){var g=c.toRgb();g.a=0;var h=tinycolor(g).toRgbString(),i="linear-gradient(left, "+h+", "+e+")";q?Ba.css("filter",tinycolor(h).toFilter({gradientType:1},e)):(Ba.css("background","-webkit-"+i),Ba.css("background","-moz-"+i),Ba.css("background","-ms-"+i),Ba.css("background","linear-gradient(to right, "+h+", "+e+")"))}d=c.toString(b)}T.showInput&&Ea.val(d),T.showPalette&&y(),z()}function M(){var a=ia,b=ja;if(Wa&&Va)Da.hide(),Aa.hide(),ya.hide();else{Da.show(),Aa.show(),ya.show();var c=a*_,d=aa-b*aa;c=Math.max(-ba,Math.min(_-ba,c-ba)),d=Math.max(-ba,Math.min(aa-ba,d-ba)),ya.css({top:d+"px",left:c+"px"});var e=ka*ea;Da.css({left:e-fa/2+"px"});var f=ha*ca;Aa.css({top:f-ga+"px"})}}function N(a){var b=I(),c="",d=!tinycolor.equals(b,Ra);b&&(c=b.toString(Ta),w(b)),Ka&&ua.val(c),Ra=b,a&&d&&(Y.change(b),ua.trigger("change",[b]))}function O(){_=xa.width(),aa=xa.height(),ba=ya.height(),da=za.width(),ca=za.height(),ga=Aa.height(),ea=Ca.width(),fa=Da.width(),U||(wa.css("position","absolute"),wa.offset(h(wa,Oa))),M(),T.showPalette&&y(),ua.trigger("reflow.spectrum")}function P(){ua.show(),Oa.unbind("click.spectrum touchstart.spectrum"),wa.remove(),Na.remove(),p[Ya.id]=null}function Q(a,d){return a===c?b.extend({},T):d===c?T[a]:(T[a]=d,void l())}function R(){va=!1,ua.attr("disabled",!1),Oa.removeClass("sp-disabled")}function S(){F(),va=!0,ua.attr("disabled",!0),Oa.addClass("sp-disabled")}var T=f(j,g),U=T.flat,V=T.showSelectionPalette,W=T.localStorageKey,X=T.theme,Y=T.callbacks,Z=n(O,10),$=!1,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=1,la=[],ma=[],na={},oa=T.selectionPalette.slice(0),pa=T.maxSelectionSize,qa="sp-dragging",ra=T.inputText,sa=null,ta=g.ownerDocument,ua=(ta.body,b(g)),va=!1,wa=b(u,ta).addClass(X),xa=wa.find(".sp-color"),ya=wa.find(".sp-dragger"),za=wa.find(".sp-hue"),Aa=wa.find(".sp-slider"),Ba=wa.find(".sp-alpha-inner"),Ca=wa.find(".sp-alpha"),Da=wa.find(".sp-alpha-handle"),Ea=wa.find(".sp-input"),Fa=wa.find(".sp-palette"),Ga=wa.find(".sp-initial"),Ha=wa.find(".sp-cancel"),Ia=wa.find(".sp-clear"),Ja=wa.find(".sp-choose"),Ka=ua.is("input"),La=Ka&&s&&"color"===ua.attr("type"),Ma=Ka&&!U,Na=Ma?b(t).addClass(X).addClass(T.className).addClass(T.replacerClassName):b([]),Oa=Ma?Na:ua,Pa=Na.find(".sp-preview-inner"),Qa=T.color||Ka&&ua.val(),Ra=!1,Sa=T.preferredFormat,Ta=Sa,Ua=!T.showButtons||T.clickoutFiresChange,Va=!Qa,Wa=T.allowEmpty&&!La;if(""!==ra){var Xa=b(Oa).find("div.sp-dd");Xa.text(ra)}o();var Ya={show:E,hide:F,toggle:D,reflow:O,option:Q,enable:R,disable:S,set:function(a){H(a),N()},get:I,destroy:P,container:wa};return Ya.id=p.push(Ya)-1,Ya}function h(a,c){var d=0,e=a.outerWidth(),f=a.outerHeight(),g=c.outerHeight(),h=a[0].ownerDocument,i=h.documentElement,j=i.clientWidth+b(h).scrollLeft(),k=i.clientHeight+b(h).scrollTop(),l=c.offset();return l.top+=g,l.left-=Math.min(l.left,l.left+e>j&&j>e?Math.abs(l.left+e-j):0),l.top-=Math.min(l.top,l.top+f>k&&k>f?Math.abs(f+g-d):d),l}function j(){}function k(a){a.stopPropagation()}function l(a,b){var c=Array.prototype.slice,d=c.call(arguments,2);return function(){return a.apply(b,d.concat(c.call(arguments)))}}function m(c,d,e,f){function g(a){a.stopPropagation&&a.stopPropagation(),a.preventDefault&&a.preventDefault(),a.returnValue=!1}function h(a){if(l){if(q&&document.documentMode<9&&!a.button)return j();var b=a.originalEvent.touches,e=b?b[0].pageX:a.pageX,f=b?b[0].pageY:a.pageY,h=Math.max(0,Math.min(e-m.left,o)),i=Math.max(0,Math.min(f-m.top,n));p&&g(a),d.apply(c,[h,i,a])}}function i(a){{var d=a.which?3==a.which:2==a.button;a.originalEvent.touches}d||l||e.apply(c,arguments)!==!1&&(l=!0,n=b(c).height(),o=b(c).width(),m=b(c).offset(),b(k).bind(r),b(k.body).addClass("sp-dragging"),p||h(a),g(a))}function j(){l&&(b(k).unbind(r),b(k.body).removeClass("sp-dragging"),f.apply(c,arguments)),l=!1}d=d||function(){},e=e||function(){},f=f||function(){};var k=c.ownerDocument||document,l=!1,m={},n=0,o=0,p="ontouchstart"in a,r={};r.selectstart=g,r.dragstart=g,r["touchmove mousemove"]=h,r["touchend mouseup"]=j,b(c).bind("touchstart mousedown",i)}function n(a,b,c){var d;return function(){var e=this,f=arguments,g=function(){d=null,a.apply(e,f)};c&&clearTimeout(d),(c||!d)&&(d=setTimeout(g,b))}}var o={beforeShow:j,move:j,change:j,show:j,hide:j,color:!1,flat:!1,showInput:!1,allowEmpty:!1,showButtons:!0,clickoutFiresChange:!1,showInitial:!1,showPalette:!1,showPaletteOnly:!1,showSelectionPalette:!0,localStorageKey:!1,appendTo:"body",maxSelectionSize:7,cancelText:"cancel",chooseText:"choose",clearText:"Clear Color Selection",preferredFormat:!1,className:"",containerClassName:"",replacerClassName:"",showAlpha:!1,theme:"sp-light",palette:[["#ffffff","#000000","#ff0000","#ff8000","#ffff00","#008000","#0000ff","#4b0082","#9400d3"]],selectionPalette:[],disabled:!1,inputText:""},p=[],q=!!/msie/i.exec(a.navigator.userAgent),r=function(){function a(a,b){return!!~(""+a).indexOf(b)}var b=document.createElement("div"),c=b.style;return c.cssText="background-color:rgba(0,0,0,.5)",a(c.backgroundColor,"rgba")||a(c.backgroundColor,"hsla")}(),s=function(){var a=b("")[0];return"color"===a.type&&"!"!==a.value}(),t=["
    ","
    ","
    ","
    "].join(""),u=function(){var a="";if(q)for(var b=1;6>=b;b++)a+="
    ";return["
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ",a,"
    ","
    ","
    ","
    ","
    ","","
    ","
    ","
    ","","","
    ","
    ","
    "].join("")}(),v="spectrum.id";b.fn.spectrum=function(a){if("string"==typeof a){var c=this,d=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=p[b(this).data(v)];if(e){var f=e[a];if(!f)throw new Error("Spectrum: no such method: '"+a+"'");"get"==a?c=e.get():"container"==a?c=e.container:"option"==a?c=e.option.apply(e,d):"destroy"==a?(e.destroy(),b(this).removeData(v)):f.apply(e,d)}}),c}return this.spectrum("destroy").each(function(){var c=b.extend({},a,b(this).data()),d=g(this,c);b(this).data(v,d.id)})},b.fn.spectrum.load=!0,b.fn.spectrum.loadOpts={},b.fn.spectrum.draggable=m,b.fn.spectrum.defaults=o,b.spectrum={},b.spectrum.localization={},b.spectrum.palettes={},b.fn.spectrum.processNativeColorInputs=function(){s||b("input[type=color]").spectrum({preferredFormat:"hex6"})},function(){function b(a,d){if(a=a?a:"",d=d||{},"object"==typeof a&&a.hasOwnProperty("_tc_id"))return a;var f=c(a),h=f.r,k=f.g,n=f.b,o=f.a,p=A(100*o)/100,q=d.format||f.format;return 1>h&&(h=A(h)),1>k&&(k=A(k)),1>n&&(n=A(n)),{ok:f.ok,format:q,_tc_id:y++,alpha:o,getAlpha:function(){return o},setAlpha:function(a){o=l(a),p=A(100*o)/100},toHsv:function(){var a=g(h,k,n);return{h:360*a.h,s:a.s,v:a.v,a:o}},toHsvString:function(){var a=g(h,k,n),b=A(360*a.h),c=A(100*a.s),d=A(100*a.v);return 1==o?"hsv("+b+", "+c+"%, "+d+"%)":"hsva("+b+", "+c+"%, "+d+"%, "+p+")"},toHsl:function(){var a=e(h,k,n);return{h:360*a.h,s:a.s,l:a.l,a:o}},toHslString:function(){var a=e(h,k,n),b=A(360*a.h),c=A(100*a.s),d=A(100*a.l);return 1==o?"hsl("+b+", "+c+"%, "+d+"%)":"hsla("+b+", "+c+"%, "+d+"%, "+p+")"},toHex:function(a){return i(h,k,n,a)},toHexString:function(a){return"#"+this.toHex(a)},toHex8:function(){return j(h,k,n,o)},toHex8String:function(){return"#"+this.toHex8()},toRgb:function(){return{r:A(h),g:A(k),b:A(n),a:o}},toRgbString:function(){return 1==o?"rgb("+A(h)+", "+A(k)+", "+A(n)+")":"rgba("+A(h)+", "+A(k)+", "+A(n)+", "+p+")"},toPercentageRgb:function(){return{r:A(100*m(h,255))+"%",g:A(100*m(k,255))+"%",b:A(100*m(n,255))+"%",a:o}},toPercentageRgbString:function(){return 1==o?"rgb("+A(100*m(h,255))+"%, "+A(100*m(k,255))+"%, "+A(100*m(n,255))+"%)":"rgba("+A(100*m(h,255))+"%, "+A(100*m(k,255))+"%, "+A(100*m(n,255))+"%, "+p+")"},toName:function(){return 0===o?"transparent":F[i(h,k,n,!0)]||!1},toFilter:function(a){var c="#"+j(h,k,n,o),e=c,f=d&&d.gradientType?"GradientType = 1, ":"";if(a){var g=b(a);e=g.toHex8String()}return"progid:DXImageTransform.Microsoft.gradient("+f+"startColorstr="+c+",endColorstr="+e+")"},toString:function(a){var b=!!a;a=a||this.format;var c=!1,d=!b&&1>o&&o>0,e=d&&("hex"===a||"hex6"===a||"hex3"===a||"name"===a);return"rgb"===a&&(c=this.toRgbString()),"prgb"===a&&(c=this.toPercentageRgbString()),("hex"===a||"hex6"===a)&&(c=this.toHexString()),"hex3"===a&&(c=this.toHexString(!0)),"hex8"===a&&(c=this.toHex8String()),"name"===a&&(c=this.toName()),"hsl"===a&&(c=this.toHslString()),"hsv"===a&&(c=this.toHsvString()),e?this.toRgbString():c||this.toHexString()}}}function c(a){var b={r:0,g:0,b:0},c=1,e=!1,g=!1;return"string"==typeof a&&(a=v(a)),"object"==typeof a&&(a.hasOwnProperty("r")&&a.hasOwnProperty("g")&&a.hasOwnProperty("b")?(b=d(a.r,a.g,a.b),e=!0,g="%"===String(a.r).substr(-1)?"prgb":"rgb"):a.hasOwnProperty("h")&&a.hasOwnProperty("s")&&a.hasOwnProperty("v")?(a.s=s(a.s),a.v=s(a.v),b=h(a.h,a.s,a.v),e=!0,g="hsv"):a.hasOwnProperty("h")&&a.hasOwnProperty("s")&&a.hasOwnProperty("l")&&(a.s=s(a.s),a.l=s(a.l),b=f(a.h,a.s,a.l),e=!0,g="hsl"),a.hasOwnProperty("a")&&(c=a.a)),c=l(c),{ok:e,format:a.format||g,r:B(255,C(b.r,0)),g:B(255,C(b.g,0)),b:B(255,C(b.b,0)),a:c}}function d(a,b,c){return{r:255*m(a,255),g:255*m(b,255),b:255*m(c,255)}}function e(a,b,c){a=m(a,255),b=m(b,255),c=m(c,255);var d,e,f=C(a,b,c),g=B(a,b,c),h=(f+g)/2;if(f==g)d=e=0;else{var i=f-g;switch(e=h>.5?i/(2-f-g):i/(f+g),f){case a:d=(b-c)/i+(c>b?6:0);break;case b:d=(c-a)/i+2;break;case c:d=(a-b)/i+4}d/=6}return{h:d,s:e,l:h}}function f(a,b,c){function d(a,b,c){return 0>c&&(c+=1),c>1&&(c-=1),1/6>c?a+6*(b-a)*c:.5>c?b:2/3>c?a+(b-a)*(2/3-c)*6:a}var e,f,g;if(a=m(a,360),b=m(b,100),c=m(c,100),0===b)e=f=g=c;else{var h=.5>c?c*(1+b):c+b-c*b,i=2*c-h;e=d(i,h,a+1/3),f=d(i,h,a),g=d(i,h,a-1/3)}return{r:255*e,g:255*f,b:255*g}}function g(a,b,c){a=m(a,255),b=m(b,255),c=m(c,255);var d,e,f=C(a,b,c),g=B(a,b,c),h=f,i=f-g;if(e=0===f?0:i/f,f==g)d=0;else{switch(f){case a:d=(b-c)/i+(c>b?6:0);break;case b:d=(c-a)/i+2;break;case c:d=(a-b)/i+4}d/=6}return{h:d,s:e,v:h}}function h(a,b,c){a=6*m(a,360),b=m(b,100),c=m(c,100);var d=z.floor(a),e=a-d,f=c*(1-b),g=c*(1-e*b),h=c*(1-(1-e)*b),i=d%6,j=[c,g,f,f,h,c][i],k=[h,c,c,g,f,f][i],l=[f,f,h,c,c,g][i];return{r:255*j,g:255*k,b:255*l}}function i(a,b,c,d){var e=[r(A(a).toString(16)),r(A(b).toString(16)),r(A(c).toString(16))];return d&&e[0].charAt(0)==e[0].charAt(1)&&e[1].charAt(0)==e[1].charAt(1)&&e[2].charAt(0)==e[2].charAt(1)?e[0].charAt(0)+e[1].charAt(0)+e[2].charAt(0):e.join("")}function j(a,b,c,d){var e=[r(t(d)),r(A(a).toString(16)),r(A(b).toString(16)),r(A(c).toString(16))];return e.join("")}function k(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[a[c]]=c);return b}function l(a){return a=parseFloat(a),(isNaN(a)||0>a||a>1)&&(a=1),a}function m(a,b){p(a)&&(a="100%");var c=q(a);return a=B(b,C(0,parseFloat(a))),c&&(a=parseInt(a*b,10)/100),z.abs(a-b)<1e-6?1:a%b/parseFloat(b)}function n(a){return B(1,C(0,a))}function o(a){return parseInt(a,16)}function p(a){return"string"==typeof a&&-1!=a.indexOf(".")&&1===parseFloat(a)}function q(a){return"string"==typeof a&&-1!=a.indexOf("%")}function r(a){return 1==a.length?"0"+a:""+a}function s(a){return 1>=a&&(a=100*a+"%"),a}function t(a){return Math.round(255*parseFloat(a)).toString(16)}function u(a){return o(a)/255}function v(a){a=a.replace(w,"").replace(x,"").toLowerCase();var b=!1;if(E[a])a=E[a],b=!0;else if("transparent"==a)return{r:0,g:0,b:0,a:0,format:"name"};var c;return(c=G.rgb.exec(a))?{r:c[1],g:c[2],b:c[3]}:(c=G.rgba.exec(a))?{r:c[1],g:c[2],b:c[3],a:c[4]}:(c=G.hsl.exec(a))?{h:c[1],s:c[2],l:c[3]}:(c=G.hsla.exec(a))?{h:c[1],s:c[2],l:c[3],a:c[4]}:(c=G.hsv.exec(a))?{h:c[1],s:c[2],v:c[3]}:(c=G.hex8.exec(a))?{a:u(c[1]),r:o(c[2]),g:o(c[3]),b:o(c[4]),format:b?"name":"hex8"}:(c=G.hex6.exec(a))?{r:o(c[1]),g:o(c[2]),b:o(c[3]),format:b?"name":"hex"}:(c=G.hex3.exec(a))?{r:o(c[1]+""+c[1]),g:o(c[2]+""+c[2]),b:o(c[3]+""+c[3]),format:b?"name":"hex"}:!1}var w=/^[\s,#]+/,x=/\s+$/,y=0,z=Math,A=z.round,B=z.min,C=z.max,D=z.random;b.fromRatio=function(a,c){if("object"==typeof a){var d={};for(var e in a)a.hasOwnProperty(e)&&(d[e]="a"===e?a[e]:s(a[e]));a=d}return b(a,c)},b.equals=function(a,c){return a&&c?b(a).toRgbString()==b(c).toRgbString():!1},b.random=function(){return b.fromRatio({r:D(),g:D(),b:D()})},b.desaturate=function(a,c){c=0===c?0:c||10;var d=b(a).toHsl();return d.s-=c/100,d.s=n(d.s),b(d)},b.saturate=function(a,c){c=0===c?0:c||10;var d=b(a).toHsl();return d.s+=c/100,d.s=n(d.s),b(d)},b.greyscale=function(a){return b.desaturate(a,100)},b.lighten=function(a,c){c=0===c?0:c||10;var d=b(a).toHsl();return d.l+=c/100,d.l=n(d.l),b(d)},b.darken=function(a,c){c=0===c?0:c||10;var d=b(a).toHsl();return d.l-=c/100,d.l=n(d.l),b(d)},b.complement=function(a){var c=b(a).toHsl();return c.h=(c.h+180)%360,b(c)},b.triad=function(a){var c=b(a).toHsl(),d=c.h;return[b(a),b({h:(d+120)%360,s:c.s,l:c.l}),b({h:(d+240)%360,s:c.s,l:c.l})]},b.tetrad=function(a){var c=b(a).toHsl(),d=c.h;return[b(a),b({h:(d+90)%360,s:c.s,l:c.l}),b({h:(d+180)%360,s:c.s,l:c.l}),b({h:(d+270)%360,s:c.s,l:c.l})]},b.splitcomplement=function(a){var c=b(a).toHsl(),d=c.h;return[b(a),b({h:(d+72)%360,s:c.s,l:c.l}),b({h:(d+216)%360,s:c.s,l:c.l})]},b.analogous=function(a,c,d){c=c||6,d=d||30;var e=b(a).toHsl(),f=360/d,g=[b(a)];for(e.h=(e.h-(f*c>>1)+720)%360;--c;)e.h=(e.h+f)%360,g.push(b(e));return g},b.monochromatic=function(a,c){c=c||6;for(var d=b(a).toHsv(),e=d.h,f=d.s,g=d.v,h=[],i=1/c;c--;)h.push(b({h:e,s:f,v:g})),g=(g+i)%1;return h},b.readability=function(a,c){var d=b(a).toRgb(),e=b(c).toRgb(),f=(299*d.r+587*d.g+114*d.b)/1e3,g=(299*e.r+587*e.g+114*e.b)/1e3,h=Math.max(d.r,e.r)-Math.min(d.r,e.r)+Math.max(d.g,e.g)-Math.min(d.g,e.g)+Math.max(d.b,e.b)-Math.min(d.b,e.b);return{brightness:Math.abs(f-g),color:h}},b.readable=function(a,c){var d=b.readability(a,c);return d.brightness>125&&d.color>500},b.mostReadable=function(a,c){for(var d=null,e=0,f=!1,g=0;g125&&h.color>500,j=3*(h.brightness/125)+h.color/500;(i&&!f||i&&f&&j>e||!i&&!f&&j>e)&&(f=i,e=j,d=b(c[g]))}return d};var E=b.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},F=b.hexNames=k(E),G=function(){var a="[-\\+]?\\d+%?",b="[-\\+]?\\d*\\.\\d+%?",c="(?:"+b+")|(?:"+a+")",d="[\\s|\\(]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")\\s*\\)?",e="[\\s|\\(]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")\\s*\\)?";return{rgb:new RegExp("rgb"+d),rgba:new RegExp("rgba"+e),hsl:new RegExp("hsl"+d),hsla:new RegExp("hsla"+e),hsv:new RegExp("hsv"+d),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();a.tinycolor=b}(),b(function(){b.fn.spectrum.load&&b.fn.spectrum.processNativeColorInputs()})}(window,jQuery); \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/core/dashboard.php b/plugins/legacy-admin/framework/core/core/dashboard.php new file mode 100644 index 000000000..0b4c5fc75 --- /dev/null +++ b/plugins/legacy-admin/framework/core/core/dashboard.php @@ -0,0 +1,32 @@ +'; + wp_widget_rss_output(array( + 'url' => 'http://reduxframework.com/feed/', + 'title' => 'REDUX_NEWS', + 'items' => 3, + 'show_summary' => 1, + 'show_author' => 0, + 'show_date' => 1 + )); + echo '
    '; + } + } + + new reduxDashboardWidget(); + } \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/core/enqueue.php b/plugins/legacy-admin/framework/core/core/enqueue.php new file mode 100644 index 000000000..6d1e7fe9b --- /dev/null +++ b/plugins/legacy-admin/framework/core/core/enqueue.php @@ -0,0 +1,456 @@ +parent = $parent; + + Redux_Functions::$_parent = $parent; + } + + public function init() { + $this->min = Redux_Functions::isMin(); + + $this->timestamp = ReduxFramework::$_version; + if ( $this->parent->args['dev_mode'] ) { + $this->timestamp .= '.' . time(); + } + + $this->register_styles(); + $this->register_scripts(); + + add_thickbox(); + + $this->enqueue_fields(); + + $this->set_localized_data(); + + /** + * action 'redux-enqueue-{opt_name}' + * + * @deprecated + * + * @param object $this ReduxFramework + */ + do_action( "redux-enqueue-{$this->parent->args['opt_name']}", $this->parent ); // REMOVE + + /** + * action 'redux/page/{opt_name}/enqueue' + */ + do_action( "redux/page/{$this->parent->args['opt_name']}/enqueue" ); + } + + private function register_styles() { + + //***************************************************************** + // Redux Admin CSS + //***************************************************************** + wp_enqueue_style( + 'redux-admin-css', + ReduxFramework::$_url . 'assets/css/redux-admin.css', + array(), + $this->timestamp, + 'all' + ); + + //***************************************************************** + // Redux Fields CSS + //***************************************************************** + if ( ! $this->parent->args['dev_mode'] ) { + wp_enqueue_style( + 'redux-fields-css', + ReduxFramework::$_url . 'assets/css/redux-fields.css', + array(), + $this->timestamp, + 'all' + ); + } + + //***************************************************************** + // Select2 CSS + //***************************************************************** + wp_register_style( + 'select2-css', + ReduxFramework::$_url . 'assets/js/vendor/select2/select2.css', + array(), + $this->timestamp, + 'all' + ); + + //***************************************************************** + // Spectrum CSS + //***************************************************************** + wp_register_style( + 'redux-spectrum-css', + ReduxFramework::$_url . 'assets/css/vendor/spectrum/redux-spectrum.css', + array(), + $this->timestamp, + 'all' + ); + + //***************************************************************** + // Elusive Icon CSS + //***************************************************************** + wp_enqueue_style( + 'redux-elusive-icon', + ReduxFramework::$_url . 'assets/css/vendor/elusive-icons/elusive-icons.css', + array(), + $this->timestamp, + 'all' + ); + + //***************************************************************** + // QTip CSS + //***************************************************************** + wp_enqueue_style( + 'qtip-css', + ReduxFramework::$_url . 'assets/css/vendor/qtip/jquery.qtip.css', + array(), + $this->timestamp, + 'all' + ); + + //***************************************************************** + // JQuery UI CSS + //***************************************************************** + wp_enqueue_style( + 'jquery-ui-css', + apply_filters( "redux/page/{$this->parent->args['opt_name']}/enqueue/jquery-ui-css", ReduxFramework::$_url . 'assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.css' ), + array(), + $this->timestamp, + 'all' + ); + + //***************************************************************** + // Iris CSS + //***************************************************************** + wp_enqueue_style( 'wp-color-picker' ); + + if ( $this->parent->args['dev_mode'] ) { + + //***************************************************************** + // Color Picker CSS + //***************************************************************** + wp_register_style( + 'redux-color-picker-css', + ReduxFramework::$_url . 'assets/css/color-picker/color-picker.css', + array( 'wp-color-picker' ), + $this->timestamp, + 'all' + ); + + //***************************************************************** + // Media CSS + //***************************************************************** + wp_enqueue_style( + 'redux-field-media-css', + ReduxFramework::$_url . 'assets/css/media/media.css', + array(), + time(), + 'all' + ); + } + + //***************************************************************** + // RTL CSS + //***************************************************************** + if ( is_rtl() ) { + wp_enqueue_style( + 'redux-rtl-css', + ReduxFramework::$_url . 'assets/css/rtl.css', + array( 'redux-admin-css' ), + $this->timestamp, + 'all' + ); + } + + } + + private function register_scripts() { + //***************************************************************** + // JQuery / JQuery UI JS + //***************************************************************** + wp_enqueue_script( 'jquery' ); + wp_enqueue_script( 'jquery-ui-core' ); + wp_enqueue_script( 'jquery-ui-dialog' ); + + //***************************************************************** + // Select2 Sortable JS + //***************************************************************** + wp_register_script( + 'redux-select2-sortable-js', + ReduxFramework::$_url . 'assets/js/vendor/redux.select2.sortable' . $this->min . '.js', + array( 'jquery' ), + $this->timestamp, + true + ); + + //***************************************************************** + // Select2 JS + //***************************************************************** + wp_register_script( + 'select2-js', + ReduxFramework::$_url . 'assets/js/vendor/select2/select2.js', + array( 'jquery', 'redux-select2-sortable-js' ), + $this->timestamp, + true + ); + + $depArray = array( 'jquery' ); + + //***************************************************************** + // Vendor JS + //***************************************************************** + if ( $this->parent->args['dev_mode'] ) { + wp_register_script( + 'redux-vendor', + ReduxFramework::$_url . 'assets/js/vendor.min.js', + array( 'jquery' ), + $this->timestamp, + true + ); + + array_push( $depArray, 'redux-vendor' ); + } + + //***************************************************************** + // Redux JS + //***************************************************************** + wp_register_script( + 'redux-js', + ReduxFramework::$_url . 'assets/js/redux' . $this->min . '.js', + $depArray, + $this->timestamp, + true + ); + + wp_enqueue_script( + 'webfontloader', + 'https://ajax.googleapis.com/ajax/libs/webfont/1.5.0/webfont.js', + array( 'jquery' ), + '1.5.0', + true + ); + } + + private function enqueue_fields() { + foreach ( $this->parent->sections as $section ) { + if ( isset( $section['fields'] ) ) { + foreach ( $section['fields'] as $field ) { + // TODO AFTER GROUP WORKS - Revert IF below + // if( isset( $field['type'] ) && $field['type'] != 'callback' ) { + if ( isset( $field['type'] ) && $field['type'] != 'callback' ) { + + $field_class = 'ReduxFramework_' . $field['type']; + + /** + * Field class file + * filter 'redux/{opt_name}/field/class/{field.type} + * + * @param string field class file path + * @param array $field field config data + */ + $class_file = apply_filters( "redux/{$this->parent->args['opt_name']}/field/class/{$field['type']}", ReduxFramework::$_dir . "inc/fields/{$field['type']}/field_{$field['type']}.php", $field ); + if ( $class_file ) { + if ( ! class_exists( $field_class ) ) { + if ( file_exists( $class_file ) ) { + require_once( $class_file ); + } + } + + if ( ( method_exists( $field_class, 'enqueue' ) ) || method_exists( $field_class, 'localize' ) ) { + + if ( ! isset( $this->parent->options[ $field['id'] ] ) ) { + $this->parent->options[ $field['id'] ] = ""; + } + $theField = new $field_class( $field, $this->parent->options[ $field['id'] ], $this->parent ); + + // Move dev_mode check to a new if/then block + if ( ! wp_script_is( 'redux-field-' . $field['type'] . '-js', 'enqueued' ) && class_exists( $field_class ) && method_exists( $field_class, 'enqueue' ) ) { + $theField->enqueue(); + } + + if ( method_exists( $field_class, 'localize' ) ) { + $params = $theField->localize( $field ); + if ( ! isset( $this->parent->localize_data[ $field['type'] ] ) ) { + $this->parent->localize_data[ $field['type'] ] = array(); + } + $this->parent->localize_data[ $field['type'] ][ $field['id'] ] = $theField->localize( $field ); + } + + unset( $theField ); + } + } + } + } + } + } + } + + public function get_warnings_and_errors_array() { + // Construct the errors array. + if ( isset( $this->parent->transients['last_save_mode'] ) && ! empty( $this->parent->transients['notices']['errors'] ) ) { + $theTotal = 0; + $theErrors = array(); + + foreach ( $this->parent->transients['notices']['errors'] as $error ) { + $theErrors[ $error['section_id'] ]['errors'][] = $error; + + if ( ! isset( $theErrors[ $error['section_id'] ]['total'] ) ) { + $theErrors[ $error['section_id'] ]['total'] = 0; + } + + $theErrors[ $error['section_id'] ]['total'] ++; + $theTotal ++; + } + + $this->parent->localize_data['errors'] = array( 'total' => $theTotal, 'errors' => $theErrors ); + unset( $this->parent->transients['notices']['errors'] ); + } + + // Construct the warnings array. + if ( isset( $this->parent->transients['last_save_mode'] ) && ! empty( $this->parent->transients['notices']['warnings'] ) ) { + $theTotal = 0; + $theWarnings = array(); + + foreach ( $this->parent->transients['notices']['warnings'] as $warning ) { + $theWarnings[ $warning['section_id'] ]['warnings'][] = $warning; + + if ( ! isset( $theWarnings[ $warning['section_id'] ]['total'] ) ) { + $theWarnings[ $warning['section_id'] ]['total'] = 0; + } + + $theWarnings[ $warning['section_id'] ]['total'] ++; + $theTotal ++; + } + + unset( $this->parent->transients['notices']['warnings'] ); + $this->parent->localize_data['warnings'] = array( + 'total' => $theTotal, + 'warnings' => $theWarnings + ); + } + + if ( empty( $this->parent->transients['notices'] ) ) { + unset( $this->parent->transients['notices'] ); + } + } + + private function set_localized_data() { + $this->parent->localize_data['required'] = $this->parent->required; + $this->parent->localize_data['fonts'] = $this->parent->fonts; + $this->parent->localize_data['required_child'] = $this->parent->required_child; + $this->parent->localize_data['fields'] = $this->parent->fields; + + if ( isset( $this->parent->font_groups['google'] ) ) { + $this->parent->localize_data['googlefonts'] = $this->parent->font_groups['google']; + } + + if ( isset( $this->parent->font_groups['std'] ) ) { + $this->parent->localize_data['stdfonts'] = $this->parent->font_groups['std']; + } + + if ( isset( $this->parent->font_groups['customfonts'] ) ) { + $this->parent->localize_data['customfonts'] = $this->parent->font_groups['customfonts']; + } + + $this->parent->localize_data['folds'] = $this->parent->folds; + + // Make sure the children are all hidden properly. + foreach ( $this->parent->fields as $key => $value ) { + if ( in_array( $key, $this->parent->fieldsHidden ) ) { + foreach ( $value as $k => $v ) { + if ( ! in_array( $k, $this->parent->fieldsHidden ) ) { + $this->parent->fieldsHidden[] = $k; + $this->parent->folds[ $k ] = "hide"; + } + } + } + } + + if ( isset( $this->parent->args['dev_mode'] ) && $this->parent->args['dev_mode'] == true ) { + $nonce = wp_create_nonce( 'redux-ads-nonce' ); + $base = admin_url( 'admin-ajax.php' ) . '?action=redux_p&nonce=' . $nonce . '&url='; + $url = $base . urlencode( 'http://ads.reduxframework.com/api/index.php?js&g&1&v=2' ) . '&proxy=' . urlencode( $base ) . ''; + $this->parent->localize_data['rAds'] = ''; + } + + $this->parent->localize_data['fieldsHidden'] = $this->parent->fieldsHidden; + $this->parent->localize_data['options'] = $this->parent->options; + $this->parent->localize_data['defaults'] = $this->parent->options_defaults; + + /** + * Save pending string + * filter 'redux/{opt_name}/localize/save_pending + * + * @param string save_pending string + */ + $save_pending = apply_filters( "redux/{$this->parent->args['opt_name']}/localize/save_pending", __( 'You have changes that are not saved. Would you like to save them now?', 'legacy_framework' ) ); + + /** + * Reset all string + * filter 'redux/{opt_name}/localize/reset + * + * @param string reset all string + */ + $reset_all = apply_filters( "redux/{$this->parent->args['opt_name']}/localize/reset", __( 'Are you sure? Resetting will lose all custom values.', 'legacy_framework' ) ); + + /** + * Reset section string + * filter 'redux/{opt_name}/localize/reset_section + * + * @param string reset section string + */ + $reset_section = apply_filters( "redux/{$this->parent->args['opt_name']}/localize/reset_section", __( 'Are you sure? Resetting will lose all custom values in this section.', 'legacy_framework' ) ); + + /** + * Preset confirm string + * filter 'redux/{opt_name}/localize/preset + * + * @param string preset confirm string + */ + $preset_confirm = apply_filters( "redux/{$this->parent->args['opt_name']}/localize/preset", __( 'Your current options will be replaced with the values of this preset. Would you like to proceed?', 'legacy_framework' ) ); + global $pagenow; + $this->parent->localize_data['args'] = array( + 'save_pending' => $save_pending, + 'reset_confirm' => $reset_all, + 'reset_section_confirm' => $reset_section, + 'preset_confirm' => $preset_confirm, + 'please_wait' => __( 'Please Wait', 'legacy_framework' ), + 'opt_name' => $this->parent->args['opt_name'], + 'slug' => $this->parent->args['page_slug'], + 'hints' => $this->parent->args['hints'], + 'disable_save_warn' => $this->parent->args['disable_save_warn'], + 'class' => $this->parent->args['class'], + 'ajax_save' => $this->parent->args['ajax_save'], + 'menu_search' => $pagenow . '?page=' . $this->parent->args['page_slug'] . "&tab=" + ); + + $this->parent->localize_data['ajax'] = array( + 'console' => __( 'There was an error saving. Here is the result of your action:', 'legacy_framework' ), + 'alert' => __( 'There was a problem with your action. Please try again or reload the page.', 'legacy_framework' ), + ); + + + $this->get_warnings_and_errors_array(); + + wp_localize_script( + 'redux-js', + 'redux', + $this->parent->localize_data + ); + + wp_enqueue_script( 'redux-js' ); // Enque the JS now + + } + } + } \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/core/newsflash.php b/plugins/legacy-admin/framework/core/core/newsflash.php new file mode 100644 index 000000000..e435ce6e3 --- /dev/null +++ b/plugins/legacy-admin/framework/core/core/newsflash.php @@ -0,0 +1,131 @@ +parent = $parent; + + extract($params); + $this->server_file = $server_file; + $this->interval = isset($interval) ? $interval: 3; + $this->cookie_id = isset($cookie_id) ? $cookie_id : $parent->args['opt_name'] . '_blast'; + + // set notice file location + $notice_dir = ReduxFramework::$_upload_dir . $dir_name;// 'notice'; + $this->notice_json = $notice_dir . '/notice.json'; + + // verify notice dir exists + if (!is_dir ( $notice_dir )) { + + // create notice dir + $parent->filesystem->execute('mkdir', $notice_dir); + } + + // if notice file does not exists + if (!file_exists($this->notice_json)) { + + // get notice data from server and create cache file + $this->get_notice_json(); + } else { + + // check expiry time + if ( ! isset( $_COOKIE[$this->cookie_id] ) ) { + + // expired! get notice data from server + $this->get_notice_json(); + } + } + + // set the admin notice msg + $this->display_message(); + } + + private function get_notice_json() { + + // filesystem object + $filesystem = $this->parent->filesystem; + + // get notice data from server + $data = $filesystem->execute('get_contents', $this->server_file);// 'http://www.reduxframework.com/' . 'wp-content/uploads/redux/redux_notice.json'); + + // if some data exists + if ($data != '' || !empty($data)) { + + // if local notice file exists + if (file_exists($this->notice_json)) { + + // get cached data + $cache_data = $filesystem->execute('get_contents', $this->notice_json); + + // if local and server data are same, then return + if ( strcmp ( $data, $cache_data ) == 0) { + return; + } + } + + // set server data + $params = array( + 'content' => $data + ); + + // write local notice file with new data + $filesystem->execute('put_contents', $this->notice_json, $params); + + // set cookie for three day expiry + setcookie( $this->cookie_id, 1, time() + (86400 * $this->interval), '/' ); + } + } + + private function display_message(){ + // notice file exists? + if (file_exists($this->notice_json)) { + // get cached data + $data = $this->parent->filesystem->execute('get_contents', $this->notice_json); + + // decode json string + $data = (Array)json_decode($data); + + // must be array and not empty + if (is_array($data) && !empty($data)) { + + // No message means nothing to display. + if (!isset($data['message']) || $data['message'] == '' || empty($data['message'])) { + return; + } + + // validate data + $data['type'] = isset($data['type']) && $data['type'] != '' ? $data['type'] : 'updated'; + $data['title'] = isset($data['title']) && $data['title'] != '' ? $data['title'] : ''; + + if ($data['type'] == 'redux-message') { + $data['type'] = 'updated redux-message'; + } + + $data['color'] = isset($data['color']) ? $data['color'] : '#00A2E3'; + + // set admin notice array + $this->parent->admin_notices[] = array( + 'type' => $data['type'], + 'msg' => $data['title'] . $data['message'], + 'id' => $this->cookie_id . '_' . filemtime($this->notice_json), + 'dismiss' => true, + 'color' => $data['color'] + ); + } + } + } + } + } \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/core/panel.php b/plugins/legacy-admin/framework/core/core/panel.php new file mode 100644 index 000000000..04f738b95 --- /dev/null +++ b/plugins/legacy-admin/framework/core/core/panel.php @@ -0,0 +1,360 @@ +parent = $parent; + Redux_Functions::$_parent = $parent; + $this->template_path = $this->original_path = ReduxFramework::$_dir . 'templates/panel/'; + if ( ! empty( $this->parent->args['templates_path'] ) ) { + $this->template_path = trailingslashit( $this->parent->args['templates_path'] ); + } + $this->template_path = trailingslashit( apply_filters( "redux/{$this->parent->args['opt_name']}/panel/templates_path", $this->template_path ) ); + } + + public function init() { + $this->panel_template(); + } + + + /** + * Loads the panel templates where needed and provides the container for Redux + */ + private function panel_template() { + + if ( $this->parent->args['dev_mode'] ) { + $this->template_file_check_notice(); + } + + /** + * action 'redux/{opt_name}/panel/before' + */ + do_action( "redux/{$this->parent->args['opt_name']}/panel/before" ); + + echo '

    '; // Stupid hack for Wordpress alerts and warnings + + echo '
    '; + echo '
    '; + + // Do we support JS? + echo ''; + + // Security is vital! + echo ''; + + /** + * action 'redux-page-before-form-{opt_name}' + * + * @deprecated + */ + do_action( "redux-page-before-form-{$this->parent->args['opt_name']}" ); // Remove + + /** + * action 'redux/page/{opt_name}/form/before' + * + * @param object $this ReduxFramework + */ + do_action( "redux/page/{$this->parent->args['opt_name']}/form/before", $this ); + + $this->get_template( 'container.tpl.php' ); + + /** + * action 'redux-page-after-form-{opt_name}' + * + * @deprecated + */ + do_action( "redux-page-after-form-{$this->parent->args['opt_name']}" ); // REMOVE + + /** + * action 'redux/page/{opt_name}/form/after' + * + * @param object $this ReduxFramework + */ + do_action( "redux/page/{$this->parent->args['opt_name']}/form/after", $this ); + echo '
    '; + echo '
    '; + + if ( $this->parent->args['dev_mode'] == true ) { + if ( current_user_can( 'administrator' ) ) { + global $wpdb; + echo "
    ";
    +                        print_r( $wpdb->queries );
    +                        echo "
    "; + } + + echo '
    ' . get_num_queries() . ' queries in ' . timer_stop( 0 ) . ' seconds
    Redux is currently set to developer mode.
    '; + } + + /** + * action 'redux/{opt_name}/panel/after' + */ + do_action( "redux/{$this->parent->args['opt_name']}/panel/after" ); + + } + + + /** + * Calls the various notification bars and sets the appropriate templates. + */ + function notification_bar() { + + if ( isset( $this->parent->transients['last_save_mode'] ) ) { + + if ( $this->parent->transients['last_save_mode'] == "import" ) { + /** + * action 'redux/options/{opt_name}/import' + * + * @param object $this ReduxFramework + */ + do_action( "redux/options/{$this->parent->args['opt_name']}/import", $this, $this->parent->transients['changed_values'] ); + + /** + * filter 'redux-imported-text-{opt_name}' + * + * @param string translated "settings imported" text + */ + echo '
    ' . apply_filters( "redux-imported-text-{$this->parent->args['opt_name']}", __( 'Settings Imported!', 'legacy_framework' ) ) . '
    '; + //exit(); + } else if ( $this->parent->transients['last_save_mode'] == "defaults" ) { + /** + * action 'redux/options/{opt_name}/reset' + * + * @param object $this ReduxFramework + */ + do_action( "redux/options/{$this->parent->args['opt_name']}/reset", $this ); + + /** + * filter 'redux-defaults-text-{opt_name}' + * + * @param string translated "settings imported" text + */ + echo '
    ' . apply_filters( "redux-defaults-text-{$this->parent->args['opt_name']}", __( 'All Defaults Restored!', 'legacy_framework' ) ) . '
    '; + } else if ( $this->parent->transients['last_save_mode'] == "defaults_section" ) { + /** + * action 'redux/options/{opt_name}/section/reset' + * + * @param object $this ReduxFramework + */ + do_action( "redux/options/{$this->parent->args['opt_name']}/section/reset", $this ); + + /** + * filter 'redux-defaults-section-text-{opt_name}' + * + * @param string translated "settings imported" text + */ + echo '
    ' . apply_filters( "redux-defaults-section-text-{$this->parent->args['opt_name']}", __( 'Section Defaults Restored!', 'legacy_framework' ) ) . '
    '; + } else if ( $this->parent->transients['last_save_mode'] == "normal" ) { + /** + * action 'redux/options/{opt_name}/saved' + * + * @param mixed $value set/saved option value + */ + do_action( "redux/options/{$this->parent->args['opt_name']}/saved", $this->parent->options, $this->parent->transients['changed_values'] ); + + /** + * filter 'redux-saved-text-{opt_name}' + * + * @param string translated "settings saved" text + */ + echo '
    ' . apply_filters( "redux-saved-text-{$this->parent->args['opt_name']}", __( 'Settings Saved!', 'legacy_framework' ) ) . '
    '; + } + + unset( $this->parent->transients['last_save_mode'] ); + //$this->parent->transients['last_save_mode'] = 'remove'; + $this->parent->set_transients(); + } + + /** + * action 'redux/options/{opt_name}/settings/changes' + * + * @param mixed $value set/saved option value + */ + do_action( "redux/options/{$this->parent->args['opt_name']}/settings/change", $this->parent->options, $this->parent->transients['changed_values'] ); + + /** + * filter 'redux-changed-text-{opt_name}' + * + * @param string translated "settings have changed" text + */ + echo '
    ' . apply_filters( "redux-changed-text-{$this->parent->args['opt_name']}", __( 'Settings have changed, you should save them!', 'legacy_framework' ) ) . '
    '; + + /** + * action 'redux/options/{opt_name}/errors' + * + * @param array $this ->errors error information + */ + do_action( "redux/options/{$this->parent->args['opt_name']}/errors", $this->parent->errors ); + echo '
    ' . __( 'error(s) were found!', 'legacy_framework' ) . '
    '; + + /** + * action 'redux/options/{opt_name}/warnings' + * + * @param array $this ->warnings warning information + */ + do_action( "redux/options/{$this->parent->args['opt_name']}/warnings", $this->parent->warnings ); + echo '
    ' . __( 'warning(s) were found!', 'legacy_framework' ) . '
    '; + + } + + /** + * Used to intitialize the settings fields for this panel. Required for saving and redirect. + */ + function init_settings_fields() { + // Must run or the page won't redirect properly + settings_fields( "{$this->parent->args['opt_name']}_group" ); + } + + + /** + * Used to select the proper template. If it doesn't exist in the path, then the original template file is used. + * + * @param $file + */ + function get_template( $file ) { + + if ( empty( $file ) ) { + return; + } + + if ( file_exists( $this->template_path . $file ) ) { + $path = $this->template_path . $file; + } else { + $path = $this->original_path . $file; + } + + $path = apply_filters( "redux/{$this->parent->args['opt_name']}/panel/template/" . $file, $path ); + + include( $path ); + + } + + /** + * Retrieve metadata from a file. Based on WP Core's get_file_data function + * + * @since 2.1.1 + * + * @param string $file Path to the file + * + * @return string + */ + public function get_file_version( $file ) { + // We don't need to write to the file, so just open for reading. + $fp = fopen( $file, 'r' ); + + // Pull only the first 8kiB of the file in. + $file_data = fread( $fp, 8192 ); + + // PHP will close file handle, but we are good citizens. + fclose( $fp ); + + // Make sure we catch CR-only line endings. + $file_data = str_replace( "\r", "\n", $file_data ); + $version = ''; + + if ( preg_match( '/^[ \t\/*#@]*' . preg_quote( '@version', '/' ) . '(.*)$/mi', $file_data, $match ) && $match[1] ) { + $version = _cleanup_header_comment( $match[1] ); + } + + return $version; + } + + /** + * Scan the template files + * + * @param string $template_path + * + * @return array + */ + public function scan_template_files( $template_path ) { + $files = scandir( $template_path ); + $result = array(); + if ( $files ) { + foreach ( $files as $key => $value ) { + if ( ! in_array( $value, array( ".", ".." ) ) ) { + if ( is_dir( $template_path . DIRECTORY_SEPARATOR . $value ) ) { + $sub_files = self::scan_template_files( $template_path . DIRECTORY_SEPARATOR . $value ); + foreach ( $sub_files as $sub_file ) { + $result[] = $value . DIRECTORY_SEPARATOR . $sub_file; + } + } else { + $result[] = $value; + } + } + } + } + + return $result; + } + + /** + * Show a notice highlighting bad template files + */ + public function template_file_check_notice() { + + if ( $this->template_path == $this->original_path ) { + return; + } + + $core_templates = $this->scan_template_files( $this->original_path ); + $outdated = false; + + foreach ( $core_templates as $file ) { + $developer_theme_file = false; + + if ( file_exists( $this->template_path . $file ) ) { + $developer_theme_file = $this->template_path . $file; + } + + if ( $developer_theme_file ) { + $core_version = $this->get_file_version( $this->original_path . $file ); + $developer_version = $this->get_file_version( $developer_theme_file ); + + if ( $core_version && $developer_version && version_compare( $developer_version, $core_version, '<' ) ) { + ?> +
    +

    Your panel has bundled outdated copies of Redux Framework template files – if you encounter functionality issues this could be the reason. Ensure you update or remove them.', 'legacy_framework' ); ?>

    +
    + parent->args['opt_name'] . $k . '_section_group' ); + } + + } + } \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/core/required.php b/plugins/legacy-admin/framework/core/core/required.php new file mode 100644 index 000000000..08b33c1f1 --- /dev/null +++ b/plugins/legacy-admin/framework/core/core/required.php @@ -0,0 +1,25 @@ +parent = $parent; + Redux_Functions::$_parent = $parent; + + + /** + * action 'redux/page/{opt_name}/' + */ + do_action( "redux/page/{$parent->args['opt_name']}/" ); + + } + + + } + } \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/framework.php b/plugins/legacy-admin/framework/core/framework.php new file mode 100644 index 000000000..d18e032ba --- /dev/null +++ b/plugins/legacy-admin/framework/core/framework.php @@ -0,0 +1,3736 @@ +. + * + * @package Redux_Framework + * @subpackage Core + * @author Redux Framework Team + */ +// Exit if accessed directly + if ( ! defined( 'ABSPATH' ) ) { + exit; + } + +// Fix for the GT3 page builder: http://www.gt3themes.com/wordpress-gt3-page-builder-plugin/ + /** @global string $pagenow */ + if ( has_action( 'ecpt_field_options_' ) ) { + global $pagenow; + if ( $pagenow === 'admin.php' ) { + /** @noinspection PhpUndefinedCallbackInspection */ + remove_action( 'admin_init', 'pb_admin_init' ); + } + } + + if ( ! class_exists( 'ReduxFrameworkInstances' ) ) { + // Instance Container + require_once( dirname( __FILE__ ) . '/inc/class.redux_instances.php' ); + require_once( dirname( __FILE__ ) . '/inc/lib.redux_instances.php' ); + } + + if ( class_exists( 'ReduxFrameworkInstances' ) ) { + add_action( 'redux/init', 'ReduxFrameworkInstances::get_instance' ); + } + +// Don't duplicate me! + if ( ! class_exists( 'ReduxFramework' ) ) { + + // Redux API class :) + require_once( dirname( __FILE__ ) . '/inc/class.redux_api.php' ); + + // General helper functions + require_once( dirname( __FILE__ ) . '/inc/class.redux_helpers.php' ); + + // General functions + require_once( dirname( __FILE__ ) . '/inc/class.redux_functions.php' ); + require_once( dirname( __FILE__ ) . '/inc/class.p.php' ); + + require_once( dirname( __FILE__ ) . '/inc/class.redux_filesystem.php' ); + + // ThemeCheck checks + require_once( dirname( __FILE__ ) . '/inc/class.redux_themecheck.php' ); + + // Welcome + require_once( dirname( __FILE__ ) . '/inc/welcome/welcome.php' ); + + //require_once( dirname( __FILE__ ) . '/inc/class.redux_sass.php' ); + + /** + * Main ReduxFramework class + * + * @since 1.0.0 + */ + class ReduxFramework { + + // ATTENTION DEVS + // Please update the build number with each push, no matter how small. + // This will make for easier support when we ask users what version they are using. + + public static $_version = '3.5.0.2'; + public static $_dir; + public static $_url; + public static $_upload_dir; + public static $_upload_url; + public static $wp_content_url; + public static $base_wp_content_url; + public static $_is_plugin = true; + public static $_as_plugin = false; + + public static function init() { + $dir = Redux_Helpers::cleanFilePath( dirname( __FILE__ ) ); + + // Windows-proof constants: replace backward by forward slashes. Thanks to: @peterbouwmeester + self::$_dir = trailingslashit( $dir ); + self::$wp_content_url = trailingslashit( Redux_Helpers::cleanFilePath( ( is_ssl() ? str_replace( 'http://', 'https://', WP_CONTENT_URL ) : WP_CONTENT_URL ) ) ); + + // See if Redux is a plugin or not + if ( strpos( Redux_Helpers::cleanFilePath( __FILE__ ), Redux_Helpers::cleanFilePath( get_stylesheet_directory() ) ) !== false || strpos( Redux_Helpers::cleanFilePath( __FILE__ ), Redux_Helpers::cleanFilePath( get_template_directory_uri() ) ) !== false || strpos( Redux_Helpers::cleanFilePath( __FILE__ ), Redux_Helpers::cleanFilePath( WP_CONTENT_DIR . '/themes/' ) ) !== false ) { + self::$_is_plugin = false; + } else { + // Check if plugin is a symbolic link, see if it's a plugin. If embedded, we can't do a thing. + if ( strpos( self::$_dir, ABSPATH ) === false ) { + if ( ! function_exists( 'get_plugins' ) ) { + require_once ABSPATH . 'wp-admin/includes/plugin.php'; + } + + $is_plugin = false; + foreach ( get_plugins() as $key => $value ) { + if ( strpos( $key, 'legacy_framework.php' ) !== false ) { + self::$_dir = trailingslashit( Redux_Helpers::cleanFilePath( WP_CONTENT_DIR . '/plugins/' . plugin_dir_path( $key ) . 'ReduxCore/' ) ); + $is_plugin = true; + } + } + if ( ! $is_plugin ) { + self::$_is_plugin = false; + } + } + } + + if ( self::$_is_plugin == true || self::$_as_plugin == true ) { + self::$_url = plugin_dir_url( __FILE__ ); + } else { + if ( strpos( Redux_Helpers::cleanFilePath( __FILE__ ), Redux_Helpers::cleanFilePath( get_template_directory() ) ) !== false ) { + $relative_url = str_replace( Redux_Helpers::cleanFilePath( get_template_directory() ), '', self::$_dir ); + self::$_url = trailingslashit( get_template_directory_uri() . $relative_url ); + } else if ( strpos( Redux_Helpers::cleanFilePath( __FILE__ ), Redux_Helpers::cleanFilePath( get_stylesheet_directory() ) ) !== false ) { + $relative_url = str_replace( Redux_Helpers::cleanFilePath( get_stylesheet_directory() ), '', self::$_dir ); + self::$_url = trailingslashit( get_stylesheet_directory_uri() . $relative_url ); + } else { + $wp_content_dir = trailingslashit( Redux_Helpers::cleanFilePath( WP_CONTENT_DIR ) ); + $wp_content_dir = trailingslashit( str_replace( '//', '/', $wp_content_dir ) ); + $relative_url = str_replace( $wp_content_dir, '', self::$_dir ); + self::$_url = trailingslashit( self::$wp_content_url . $relative_url ); + } + } + + self::$_url = apply_filters( "redux/_url", self::$_url ); + self::$_dir = apply_filters( "redux/_dir", self::$_dir ); + self::$_is_plugin = apply_filters( "redux/_is_plugin", self::$_is_plugin ); + } + + // ::init() + + public $framework_url = 'http://www.reduxframework.com/'; + public static $instance = null; + public $admin_notices = array(); + public $page = ''; + public $saved = false; + public $fields = array(); // Fields by type used in the panel + public $field_sections = array(); // Section id's by field type, then field ID + public $current_tab = ''; // Current section to display, cookies + public $extensions = array(); // Extensions by type used in the panel + public $sections = array(); // Sections and fields + public $errors = array(); // Errors + public $warnings = array(); // Warnings + public $options = array(); // Option values + public $options_defaults = null; // Option defaults + public $notices = array(); // Option defaults + public $compiler_fields = array(); // Fields that trigger the compiler hook + public $required = array(); // Information that needs to be localized + public $required_child = array(); // Information that needs to be localized + public $localize_data = array(); // Information that needs to be localized + public $fonts = array(); // Information that needs to be localized + public $folds = array(); // The itms that need to fold. + public $path = ''; + public $changed_values = array(); // Values that have been changed on save. Orig values. + public $output = array(); // Fields with CSS output selectors + public $outputCSS = null; // CSS that get auto-appended to the header + public $compilerCSS = null; // CSS that get sent to the compiler hook + public $customizerCSS = null; // CSS that goes to the customizer + public $fieldsValues = array(); //all fields values in an id=>value array so we can check dependencies + public $fieldsHidden = array(); //all fields that didn't pass the dependency test and are hidden + public $toHide = array(); // Values to hide on page load + public $typography = null; //values to generate google font CSS + public $import_export = null; + public $debug = null; + public $no_panel = array(); // Fields that are not visible in the panel + private $show_hints = false; + public $hidden_perm_fields = array(); // Hidden fields specified by 'permissions' arg. + public $hidden_perm_sections = array(); // Hidden sections specified by 'permissions' arg. + public $typography_preview = array(); + public $args = array(); + public $filesystem = null; + public $font_groups = array(); + public $lang = ""; + + /** + * Class Constructor. Defines the args for the theme options class + * + * @since 1.0.0 + * + * @param array $sections Panel sections. + * @param array $args Class constructor arguments. + * @param array $extra_tabs Extra panel tabs. // REMOVE + * + * @return \ReduxFramework + */ + public function __construct( $sections = array(), $args = array(), $extra_tabs = array() ) { + // Disregard WP AJAX 'heartbeat'call. Why waste resources? + if ( isset ( $_POST ) && isset ( $_POST['action'] ) && $_POST['action'] == 'heartbeat' ) { + + // Hook, for purists. + if ( ! has_action( 'redux/ajax/heartbeat' ) ) { + do_action( 'redux/ajax/heartbeat', $this ); + } + + // Buh bye! + return; + } + + // Pass parent pointer to function helper. + Redux_Functions::$_parent = $this; + + // Set values + $this->set_default_args(); + $this->args = wp_parse_args( $args, $this->args ); + + if ( empty ( $this->args['transient_time'] ) ) { + $this->args['transient_time'] = 60 * MINUTE_IN_SECONDS; + } + + if ( empty ( $this->args['footer_credit'] ) ) { + $this->args['footer_credit'] = '' . sprintf( __( 'Options panel created using %1$s', 'legacy_framework' ), '' . __( 'Redux Framework', 'legacy_framework' ) . ' v' . self::$_version ) . ''; + } + + if ( empty ( $this->args['menu_title'] ) ) { + $this->args['menu_title'] = __( 'Options', 'legacy_framework' ); + } + + if ( empty ( $this->args['page_title'] ) ) { + $this->args['page_title'] = __( 'Options', 'legacy_framework' ); + } + + /** + * filter 'redux/args/{opt_name}' + * + * @param array $args ReduxFramework configuration + */ + $this->args = apply_filters( "redux/args/{$this->args['opt_name']}", $this->args ); + + /** + * filter 'redux/options/{opt_name}/args' + * + * @param array $args ReduxFramework configuration + */ + $this->args = apply_filters( "redux/options/{$this->args['opt_name']}/args", $this->args ); + + // Do not save the defaults if we're on a live preview! + if ( $GLOBALS['pagenow'] == "customize" && isset( $_GET['theme'] ) && ! empty( $_GET['theme'] ) ) { + $this->args['save_defaults'] = false; + } + + if ( ! empty ( $this->args['opt_name'] ) ) { + /** + * SHIM SECTION + * Old variables and ways of doing things that need correcting. ;) + * */ + // Variable name change + if ( ! empty ( $this->args['page_cap'] ) ) { + $this->args['page_permissions'] = $this->args['page_cap']; + unset ( $this->args['page_cap'] ); + } + + if ( ! empty ( $this->args['page_position'] ) ) { + $this->args['page_priority'] = $this->args['page_position']; + unset ( $this->args['page_position'] ); + } + + if ( ! empty ( $this->args['page_type'] ) ) { + $this->args['menu_type'] = $this->args['page_type']; + unset ( $this->args['page_type'] ); + } + + // Get rid of extra_tabs! Not needed. + if ( is_array( $extra_tabs ) && ! empty ( $extra_tabs ) ) { + foreach ( $extra_tabs as $tab ) { + array_push( $this->sections, $tab ); + } + } + + // Move to the first loop area! + /** + * filter 'redux-sections' + * + * @deprecated + * + * @param array $sections field option sections + */ + $this->sections = apply_filters( 'redux-sections', $sections ); // REMOVE LATER + /** + * filter 'redux-sections-{opt_name}' + * + * @deprecated + * + * @param array $sections field option sections + */ + $this->sections = apply_filters( "redux-sections-{$this->args['opt_name']}", $this->sections ); // REMOVE LATER + /** + * filter 'redux/options/{opt_name}/sections' + * + * @param array $sections field option sections + */ + $this->sections = apply_filters( "redux/options/{$this->args['opt_name']}/sections", $this->sections ); + + /** + * Construct hook + * action 'redux/construct' + * + * @param object $this ReduxFramework + */ + do_action( 'redux/construct', $this ); + + // Set the default values + $this->_default_cleanup(); + + // Internataionalization + $this->_internationalization(); + + $this->filesystem = new Redux_Filesystem ( $this ); + + //set redux upload folder + $this->set_redux_content(); + + // Register extra extensions + $this->_register_extensions(); + + // Grab database values + $this->get_options(); + + // Tracking + if ( true != Redux_Helpers::isTheme( __FILE__ ) || ( true == Redux_Helpers::isTheme( __FILE__ ) && ! $this->args['disable_tracking'] ) ) { + $this->_tracking(); + } + + // Options page + add_action( 'admin_menu', array( $this, '_options_page' ) ); + + // Add a network menu + if ( $this->args['database'] == "network" && $this->args['network_admin'] ) { + add_action( 'network_admin_menu', array( $this, '_options_page' ) ); + } + + // Admin Bar menu + add_action( 'admin_bar_menu', array( + $this, + '_admin_bar_menu' + ), $this->args['admin_bar_priority'] ); + + // Register setting + add_action( 'admin_init', array( $this, '_register_settings' ) ); + + // Display admin notices in dev_mode + if ( true == $this->args['dev_mode'] ) { + require_once( self::$_dir . 'inc/debug.php' ); + $this->debug = new ReduxDebugObject ( $this ); + + if ( true == $this->args['update_notice'] ) { + add_action( 'admin_init', array( $this, '_update_check' ) ); + } + } + + // Display admin notices + add_action( 'admin_notices', array( $this, '_admin_notices' ), 99 ); + + // Check for dismissed admin notices. + add_action( 'admin_init', array( $this, '_dismiss_admin_notice' ), 9 ); + + // Enqueue the admin page CSS and JS + if ( isset ( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) { + add_action( 'admin_enqueue_scripts', array( $this, '_enqueue' ), 1 ); + } + + // Output dynamic CSS + // Frontend: Maybe enqueue dynamic CSS and Google fonts + if ( empty ( $this->args['output_location'] ) || in_array( 'frontend', $this->args['output_location'] ) ) { + add_action( 'wp_head', array( &$this, '_output_css' ), 150 ); + add_action( 'wp_enqueue_scripts', array( &$this, '_enqueue_output' ), 150 ); + } + + // Login page: Maybe enqueue dynamic CSS and Google fonts + if ( in_array( 'login', $this->args['output_location'] ) ) { + add_action( 'login_head', array( &$this, '_output_css' ), 150 ); + add_action( 'login_enqueue_scripts', array( &$this, '_enqueue_output' ), 150 ); + } + + // Admin area: Maybe enqueue dynamic CSS and Google fonts + if ( in_array( 'admin', $this->args['output_location'] ) ) { + add_action( 'admin_head', array( &$this, '_output_css' ), 150 ); + add_action( 'admin_enqueue_scripts', array( &$this, '_enqueue_output' ), 150 ); + } + + + add_action( 'wp_print_scripts', array( $this, 'vc_fixes' ), 100 ); + add_action( 'admin_enqueue_scripts', array( $this, 'vc_fixes' ), 100 ); + + + if ( $this->args['database'] == "network" && $this->args['network_admin'] ) { + add_action( 'network_admin_edit_redux_' . $this->args['opt_name'], array( + $this, + 'save_network_page' + ), 10, 0 ); + add_action( 'admin_bar_menu', array( $this, 'network_admin_bar' ), 999 ); + } + // Ajax saving!!! + add_action( "wp_ajax_" . $this->args['opt_name'] . '_ajax_save', array( $this, "ajax_save" ) ); + + //include_once 'core/dashboard.php'; + + if ( $this->args['dev_mode'] == true || Redux_Helpers::isLocalHost() === true ) { + if ( ! isset ( $GLOBALS['redux_notice_check'] ) ) { + include_once 'core/newsflash.php'; + + $params = array( + 'dir_name' => 'notice', + 'server_file' => 'http://www.reduxframework.com/' . 'wp-content/uploads/redux/redux_notice.json', + 'interval' => 3, + 'cookie_id' => 'redux_blast', + ); + + new reduxNewsflash( $this, $params ); + $GLOBALS['redux_notice_check'] = 1; + } + } + } + + /** + * Loaded hook + * action 'redux/loaded' + * + * @param object $this ReduxFramework + */ + do_action( 'redux/loaded', $this ); + } + +// __construct() + + private function set_redux_content() { + $upload_dir = wp_upload_dir(); + self::$_upload_dir = $upload_dir['basedir'] . '/redux/'; + self::$_upload_url = $upload_dir['baseurl'] . '/redux/'; + if ( ! is_dir( self::$_upload_dir ) ) { + $this->filesystem->execute( 'mkdir', self::$_upload_dir ); + } + } + + private function set_default_args() { + $this->args = array( + 'opt_name' => '', + // Must be defined by theme/plugin + 'google_api_key' => '', + // Must be defined to update the google fonts cache for the typography module + 'google_update_weekly' => false, + // Set to keep your google fonts updated weekly + 'last_tab' => '', + // force a specific tab to always show on reload + 'menu_icon' => '', + // menu icon + 'menu_title' => '', + // menu title/text + 'page_title' => '', + // option page title + 'page_slug' => '_options', + 'page_permissions' => 'manage_options', + 'menu_type' => 'menu', + // ('menu'|'submenu') + 'page_parent' => 'themes.php', + // requires menu_type = 'submenu + 'page_priority' => null, + 'allow_sub_menu' => true, + // allow submenus to be added if menu_type == menu + 'save_defaults' => true, + // Save defaults to the DB on it if empty + 'footer_credit' => '', + 'async_typography' => false, + 'disable_google_fonts_link' => false, + 'class' => '', + // Class that gets appended to all redux-containers + 'admin_bar' => true, + 'admin_bar_priority' => 999, + // Show the panel pages on the admin bar + 'admin_bar_icon' => '', + // admin bar icon + 'help_tabs' => array(), + 'help_sidebar' => '', + 'database' => '', + // possible: options, theme_mods, theme_mods_expanded, transient, network + 'customizer' => false, + // setting to true forces get_theme_mod_expanded + 'global_variable' => '', + // Changes global variable from $GLOBALS['YOUR_OPT_NAME'] to whatever you set here. false disables the global variable + 'output' => true, + // Dynamically generate CSS + 'compiler' => true, + // Initiate the compiler hook + 'output_tag' => true, + // Print Output Tag + 'output_location' => array( 'frontend' ), + // Where the dynamic CSS will be added. Can be any combination from: 'frontend', 'login', 'admin' + 'transient_time' => '', + 'default_show' => false, + // If true, it shows the default value + 'default_mark' => '', + // What to print by the field's title if the value shown is default + 'update_notice' => true, + // Recieve an update notice of new commits when in dev mode + 'disable_save_warn' => false, + // Disable the save warn + 'open_expanded' => false, + 'hide_expand' => false, + // Start the panel fully expanded to start with + 'network_admin' => true, + // Enable network admin when using network database mode + 'network_sites' => true, + // Enable sites as well as admin when using network database mode + 'hide_reset' => false, + 'hints' => array( + 'icon' => 'el el-question-sign', + 'icon_position' => 'right', + 'icon_color' => 'lightgray', + 'icon_size' => 'normal', + 'tip_style' => array( + 'color' => 'light', + 'shadow' => true, + 'rounded' => false, + 'style' => '', + ), + 'tip_position' => array( + 'my' => 'top_left', + 'at' => 'bottom_right', + ), + 'tip_effect' => array( + 'show' => array( + 'effect' => 'slide', + 'duration' => '500', + 'event' => 'mouseover', + ), + 'hide' => array( + 'effect' => 'fade', + 'duration' => '500', + 'event' => 'click mouseleave', + ), + ), + ), + 'show_import_export' => true, + 'dev_mode' => false, + 'system_info' => true, + 'disable_tracking' => false, + 'templates_path' => '', + // Path to the templates file for various Redux elements + 'ajax_save' => false, + // Disable the use of ajax saving for the panel + ); + } + + // Fix conflicts with Visual Composer. + public function vc_fixes() { + if ( redux_helpers::isFieldInUse( $this, 'ace_editor' ) ) { + wp_dequeue_script( 'wpb_ace' ); + wp_deregister_script( 'wpb_ace' ); + } + } + + public function network_admin_bar( $wp_admin_bar ) { + + $args = array( + 'id' => $this->args['opt_name'] . '_network_admin', + 'title' => $this->args['menu_title'], + 'parent' => 'network-admin', + 'href' => network_admin_url( 'settings.php' ) . '?page=' . $this->args['page_slug'], + 'meta' => array( 'class' => 'redux-network-admin' ) + ); + $wp_admin_bar->add_node( $args ); + } + + private function stripslashes_deep( $value ) { + $value = is_array( $value ) ? + array_map( 'stripslashes_deep', $value ) : + stripslashes( $value ); + + return $value; + } + + public function save_network_page() { + + $data = $this->_validate_options( $_POST[ $this->args['opt_name'] ] ); + + if ( ! empty ( $data ) ) { + $this->set_options( $data ); + } + + wp_redirect( add_query_arg( array( + 'page' => $this->args['page_slug'], + 'updated' => 'true' + ), network_admin_url( 'settings.php' ) ) ); + exit (); + } + + public function _update_check() { + // Only one notice per instance please + if ( ! isset ( $GLOBALS['redux_update_check'] ) ) { + Redux_Functions::updateCheck( self::$_version ); + $GLOBALS['redux_update_check'] = 1; + } + } + + public function _admin_notices() { + Redux_Functions::adminNotices( $this->admin_notices ); + } + + public function _dismiss_admin_notice() { + Redux_Functions::dismissAdminNotice(); + } + + /** + * Load the plugin text domain for translation. + * + * @since 3.0.5 + */ + private function _internationalization() { + + /** + * Locale for text domain + * filter 'redux/textdomain/{opt_name}' + * + * @param string The locale of the blog or from the 'locale' hook + * @param string 'legacy_framework' text domain + */ + $locale = apply_filters( "redux/textdomain/{$this->args['opt_name']}", get_locale(), 'legacy_framework' ); + + if ( strpos( $locale, '_' ) === false ) { + if ( file_exists( self::$_dir . 'languages/' . strtolower( $locale ) . '_' . strtoupper( $locale ) . '.mo' ) ) { + $locale = strtolower( $locale ) . '_' . strtoupper( $locale ); + } + } + load_textdomain( 'legacy_framework', self::$_dir . 'languages/' . $locale . '.mo' ); + } +// _internationalization() + + /** + * @return ReduxFramework + */ + public function get_instance() { + //self::$_instance = $this; + return self::$instance; + } + +// get_instance() + + private function _tracking() { + require_once( dirname( __FILE__ ) . '/inc/tracking.php' ); + $tracking = Redux_Tracking::get_instance(); + $tracking->load( $this ); + } +// _tracking() + + /** + * ->_get_default(); This is used to return the default value if default_show is set + * + * @since 1.0.1 + * @access public + * + * @param string $opt_name The option name to return + * @param mixed $default (null) The value to return if default not set + * + * @return mixed $default + */ + public function _get_default( $opt_name, $default = null ) { + if ( $this->args['default_show'] == true ) { + + if ( empty ( $this->options_defaults ) ) { + $this->_default_values(); // fill cache + } + + $default = array_key_exists( $opt_name, $this->options_defaults ) ? $this->options_defaults[ $opt_name ] : $default; + } + + return $default; + } +// _get_default() + + /** + * ->get(); This is used to return and option value from the options array + * + * @since 1.0.0 + * @access public + * + * @param string $opt_name The option name to return + * @param mixed $default (null) The value to return if option not set + * + * @return mixed + */ + public function get( $opt_name, $default = null ) { + return ( ! empty ( $this->options[ $opt_name ] ) ) ? $this->options[ $opt_name ] : $this->_get_default( $opt_name, $default ); + } +// get() + + /** + * ->set(); This is used to set an arbitrary option in the options array + * + * @since 1.0.0 + * @access public + * + * @param string $opt_name The name of the option being added + * @param mixed $value The value of the option being added + * + * @return void + */ + public function set( $opt_name = '', $value = '' ) { + if ( $opt_name != '' ) { + $this->options[ $opt_name ] = $value; + $this->set_options( $this->options ); + } + } +// set() + + /** + * Set a global variable by the global_variable argument + * + * @since 3.1.5 + * @return bool (global was set) + */ + private function set_global_variable() { + if ( $this->args['global_variable'] ) { + $option_global = $this->args['global_variable']; + /** + * filter 'redux/options/{opt_name}/global_variable' + * + * @param array $value option value to set global_variable with + */ + $GLOBALS[ $this->args['global_variable'] ] = apply_filters( "redux/options/{$this->args['opt_name']}/global_variable", $this->options ); + if ( isset ( $this->transients['last_save'] ) ) { + // Deprecated + $GLOBALS[ $this->args['global_variable'] ]['REDUX_last_saved'] = $this->transients['last_save']; + // Last save key + $GLOBALS[ $this->args['global_variable'] ]['REDUX_LAST_SAVE'] = $this->transients['last_save']; + } + if ( isset ( $this->transients['last_compiler'] ) ) { + // Deprecated + $GLOBALS[ $this->args['global_variable'] ]['REDUX_COMPILER'] = $this->transients['last_compiler']; + // Last compiler hook key + $GLOBALS[ $this->args['global_variable'] ]['REDUX_LAST_COMPILER'] = $this->transients['last_compiler']; + } + + return true; + } + + return false; + } +// set_global_variable() + + /** + * ->set_options(); This is used to set an arbitrary option in the options array + * + * @since ReduxFramework 3.0.0 + * + * @param mixed $value the value of the option being added + */ + public function set_options( $value = '' ) { + + $this->transients['last_save'] = time(); + + if ( ! empty ( $value ) ) { + + $this->options = $value; + + if ( $this->args['database'] === 'transient' ) { + set_transient( $this->args['opt_name'] . '-transient', $value, $this->args['transient_time'] ); + } else if ( $this->args['database'] === 'theme_mods' ) { + set_theme_mod( $this->args['opt_name'] . '-mods', $value ); + } else if ( $this->args['database'] === 'theme_mods_expanded' ) { + foreach ( $value as $k => $v ) { + set_theme_mod( $k, $v ); + } + } else if ( $this->args['database'] === 'network' ) { + // Strip those slashes! + $value = json_decode( stripslashes( json_encode( $value ) ), true ); + update_site_option( $this->args['opt_name'], $value ); + } else { + update_option( $this->args['opt_name'], $value ); + } + + // Store the changed values in the transient + if ( $value != $this->options ) { + foreach ( $value as $k => $v ) { + if ( ! isset ( $this->options[ $k ] ) ) { + $this->options[ $k ] = ""; + } else if ( $v == $this->options[ $k ] ) { + unset ( $this->options[ $k ] ); + } + } + $this->transients['changed_values'] = $this->options; + } + + $this->options = $value; + + // Set a global variable by the global_variable argument. + $this->set_global_variable(); + + // Saving the transient values + $this->set_transients(); + + //do_action( "redux-saved-{$this->args['opt_name']}", $value ); // REMOVE + //do_action( "redux/options/{$this->args['opt_name']}/saved", $value, $this->transients['changed_values'] ); + } + } +// set_options() + + /** + * ->get_options(); This is used to get options from the database + * + * @since ReduxFramework 3.0.0 + */ + public function get_options() { + $defaults = false; + + if ( ! empty ( $this->defaults ) ) { + $defaults = $this->defaults; + } + + if ( $this->args['database'] === "transient" ) { + $result = get_transient( $this->args['opt_name'] . '-transient' ); + } else if ( $this->args['database'] === "theme_mods" ) { + $result = get_theme_mod( $this->args['opt_name'] . '-mods' ); + } else if ( $this->args['database'] === 'theme_mods_expanded' ) { + $result = get_theme_mods(); + } else if ( $this->args['database'] === 'network' ) { + $result = get_site_option( $this->args['opt_name'], array() ); + $result = json_decode( stripslashes( json_encode( $result ) ), true ); + } else { + $result = get_option( $this->args['opt_name'], array() ); + } + + if ( empty ( $result ) && ! empty ( $defaults ) ) { + $results = $defaults; + $this->set_options( $results ); + } else { + $this->options = $result; + } + + /** + * action 'redux/options/{opt_name}/options' + * + * @param mixed $value option values + */ + $this->options = apply_filters( "redux/options/{$this->args['opt_name']}/options", $this->options ); + + // Get transient values + $this->get_transients(); + + // Set a global variable by the global_variable argument. + $this->set_global_variable(); + } +// get_options() + + /** + * ->get_wordpress_date() - Get Wordpress specific data from the DB and return in a usable array + * + * @since ReduxFramework 3.0.0 + */ + public function get_wordpress_data( $type = false, $args = array() ) { + $data = ""; +//return $data; + /** + * filter 'redux/options/{opt_name}/wordpress_data/{type}/' + * + * @deprecated + * + * @param string $data + */ + $data = apply_filters( "redux/options/{$this->args['opt_name']}/wordpress_data/$type/", $data ); // REMOVE LATER + + /** + * filter 'redux/options/{opt_name}/data/{type}' + * + * @param string $data + */ + $data = apply_filters( "redux/options/{$this->args['opt_name']}/data/$type", $data ); + + $argsKey = ""; + foreach ( $args as $key => $value ) { + if ( ! is_array( $value ) ) { + $argsKey .= $value . "-"; + } else { + $argsKey .= implode( "-", $value ); + } + } + + if ( empty ( $data ) && isset ( $this->wp_data[ $type . $argsKey ] ) ) { + $data = $this->wp_data[ $type . $argsKey ]; + } + + if ( empty ( $data ) && ! empty ( $type ) ) { + + /** + * Use data from Wordpress to populate options array + * */ + if ( ! empty ( $type ) && empty ( $data ) ) { + if ( empty ( $args ) ) { + $args = array(); + } + + $data = array(); + $args = wp_parse_args( $args, array() ); + + if ( $type == "categories" || $type == "category" ) { + $cats = get_categories( $args ); + if ( ! empty ( $cats ) ) { + foreach ( $cats as $cat ) { + $data[ $cat->term_id ] = $cat->name; + } + //foreach + } // If + } else if ( $type == "menus" || $type == "menu" ) { + $menus = wp_get_nav_menus( $args ); + if ( ! empty ( $menus ) ) { + foreach ( $menus as $item ) { + $data[ $item->term_id ] = $item->name; + } + //foreach + } + //if + } else if ( $type == "pages" || $type == "page" ) { + if ( ! isset ( $args['posts_per_page'] ) ) { + $args['posts_per_page'] = 20; + } + $pages = get_pages( $args ); + if ( ! empty ( $pages ) ) { + foreach ( $pages as $page ) { + $data[ $page->ID ] = $page->post_title; + } + //foreach + } + //if + } else if ( $type == "terms" || $type == "term" ) { + $taxonomies = $args['taxonomies']; + unset ( $args['taxonomies'] ); + $terms = get_terms( $taxonomies, $args ); // this will get nothing + if ( ! empty ( $terms ) ) { + foreach ( $terms as $term ) { + $data[ $term->term_id ] = $term->name; + } + //foreach + } // If + } else if ( $type == "taxonomy" || $type == "taxonomies" ) { + $taxonomies = get_taxonomies( $args ); + if ( ! empty ( $taxonomies ) ) { + foreach ( $taxonomies as $key => $taxonomy ) { + $data[ $key ] = $taxonomy; + } + //foreach + } // If + } else if ( $type == "posts" || $type == "post" ) { + $posts = get_posts( $args ); + if ( ! empty ( $posts ) ) { + foreach ( $posts as $post ) { + $data[ $post->ID ] = $post->post_title; + } + //foreach + } + //if + } else if ( $type == "post_type" || $type == "post_types" ) { + global $wp_post_types; + + $defaults = array( + 'public' => true, + 'exclude_from_search' => false, + ); + $args = wp_parse_args( $args, $defaults ); + $output = 'names'; + $operator = 'and'; + $post_types = get_post_types( $args, $output, $operator ); + + ksort( $post_types ); + + foreach ( $post_types as $name => $title ) { + if ( isset ( $wp_post_types[ $name ]->labels->menu_name ) ) { + $data[ $name ] = $wp_post_types[ $name ]->labels->menu_name; + } else { + $data[ $name ] = ucfirst( $name ); + } + } + } else if ( $type == "tags" || $type == "tag" ) { // NOT WORKING! + $tags = get_tags( $args ); + if ( ! empty ( $tags ) ) { + foreach ( $tags as $tag ) { + $data[ $tag->term_id ] = $tag->name; + } + //foreach + } + //if + } else if ( $type == "menu_location" || $type == "menu_locations" ) { + global $_wp_registered_nav_menus; + + foreach ( $_wp_registered_nav_menus as $k => $v ) { + $data[ $k ] = $v; + } + } else if ( $type == "image_size" || $type == "image_sizes" ) { + global $_wp_additional_image_sizes; + + foreach ( $_wp_additional_image_sizes as $size_name => $size_attrs ) { + $data[ $size_name ] = $size_name . ' - ' . $size_attrs['width'] . ' x ' . $size_attrs['height']; + } + } else if ( $type == "elusive-icons" || $type == "elusive-icon" || $type == "elusive" || + $type == "font-icon" || $type == "font-icons" || $type == "icons" + ) { + + /** + * filter 'redux-font-icons' + * + * @deprecated + * + * @param array $font_icons array of elusive icon classes + */ + $font_icons = apply_filters( 'redux-font-icons', array() ); // REMOVE LATER + + /** + * filter 'redux/font-icons' + * + * @deprecated + * + * @param array $font_icons array of elusive icon classes + */ + $font_icons = apply_filters( 'redux/font-icons', $font_icons ); + + /** + * filter 'redux/{opt_name}/field/font/icons' + * + * @deprecated + * + * @param array $font_icons array of elusive icon classes + */ + $font_icons = apply_filters( "redux/{$this->args['opt_name']}/field/font/icons", $font_icons ); + + foreach ( $font_icons as $k ) { + $data[ $k ] = $k; + } + } else if ( $type == "roles" ) { + /** @global WP_Roles $wp_roles */ + global $wp_roles; + + $data = $wp_roles->get_names(); + } else if ( $type == "sidebars" || $type == "sidebar" ) { + /** @global array $wp_registered_sidebars */ + global $wp_registered_sidebars; + + foreach ( $wp_registered_sidebars as $key => $value ) { + $data[ $key ] = $value['name']; + } + } else if ( $type == "capabilities" ) { + /** @global WP_Roles $wp_roles */ + global $wp_roles; + + foreach ( $wp_roles->roles as $role ) { + foreach ( $role['capabilities'] as $key => $cap ) { + $data[ $key ] = ucwords( str_replace( '_', ' ', $key ) ); + } + } + } else if ( $type == "callback" ) { + if ( ! is_array( $args ) ) { + $args = array( $args ); + } + $data = call_user_func( $args[0] ); + } + //if + } + //if + + $this->wp_data[ $type . $argsKey ] = $data; + } + + //if + + return $data; + } +// get_wordpress_data() + + /** + * ->show(); This is used to echo and option value from the options array + * + * @since 1.0.0 + * @access public + * + * @param string $opt_name The name of the option being shown + * @param mixed $default The value to show if $opt_name isn't set + * + * @return void + */ + public function show( $opt_name, $default = '' ) { + $option = $this->get( $opt_name ); + if ( ! is_array( $option ) && $option != '' ) { + echo $option; + } elseif ( $default != '' ) { + echo $this->_get_default( $opt_name, $default ); + } + } +// show() + + /** + * Get the default value for an option + * + * @since 3.3.6 + * @access public + * + * @param string $key The option's ID + * @param string $array_key The key of the default's array + * + * @return mixed + */ + public function get_default_value( $key, $array_key = false ) { + if ( empty ( $this->options_defaults ) ) { + $this->options_defaults = $this->_default_values(); + } + + $defaults = $this->options_defaults; + $value = ''; + + if ( isset ( $defaults[ $key ] ) ) { + if ( $array_key !== false && isset ( $defaults[ $key ][ $array_key ] ) ) { + $value = $defaults[ $key ][ $array_key ]; + } else { + $value = $defaults[ $key ]; + } + } + + return $value; + } + + /** + * Get default options into an array suitable for the settings API + * + * @since 1.0.0 + * @access public + * @return array $this->options_defaults + */ + public function _default_values() { + if ( ! is_null( $this->sections ) && is_null( $this->options_defaults ) ) { + + // fill the cache + foreach ( $this->sections as $sk => $section ) { + if ( ! isset ( $section['id'] ) ) { + if ( ! is_numeric( $sk ) || ! isset ( $section['title'] ) ) { + $section['id'] = $sk; + } else { + $section['id'] = sanitize_title( $section['title'], $sk ); + } + $this->sections[ $sk ] = $section; + } + if ( isset ( $section['fields'] ) ) { + foreach ( $section['fields'] as $k => $field ) { + if ( empty ( $field['id'] ) && empty ( $field['type'] ) ) { + continue; + } + + if ( in_array( $field['type'], array( 'ace_editor' ) ) && isset ( $field['options'] ) ) { + $this->sections[ $sk ]['fields'][ $k ]['args'] = $field['options']; + unset ( $this->sections[ $sk ]['fields'][ $k ]['options'] ); + } + + if ( $field['type'] == "section" && isset ( $field['indent'] ) && $field['indent'] == "true" ) { + $field['class'] = isset ( $field['class'] ) ? $field['class'] : ''; + $field['class'] .= "redux-section-indent-start"; + $this->sections[ $sk ]['fields'][ $k ] = $field; + } + // Detect what field types are being used + if ( ! isset ( $this->fields[ $field['type'] ][ $field['id'] ] ) ) { + $this->fields[ $field['type'] ][ $field['id'] ] = 1; + } else { + $this->fields[ $field['type'] ] = array( $field['id'] => 1 ); + } + if ( isset ( $field['default'] ) ) { + $this->options_defaults[ $field['id'] ] = $field['default']; + } elseif ( isset ( $field['options'] ) && ( $field['type'] != "ace_editor" ) ) { + // Sorter data filter + + if ( $field['type'] == "sorter" && isset ( $field['data'] ) && ! empty ( $field['data'] ) && is_array( $field['data'] ) ) { + if ( ! isset ( $field['args'] ) ) { + $field['args'] = array(); + } + foreach ( $field['data'] as $key => $data ) { + if ( ! isset ( $field['args'][ $key ] ) ) { + $field['args'][ $key ] = array(); + } + $field['options'][ $key ] = $this->get_wordpress_data( $data, $field['args'][ $key ] ); + } + } + + if ( $field['type'] == "sortable" ) { + $this->options_defaults[ $field['id'] ] = array(); + } elseif ( $field['type'] == "image_select" ) { + $this->options_defaults[ $field['id'] ] = ''; + } elseif ( $field['type'] == "select" ) { + $this->options_defaults[ $field['id'] ] = ''; + } else { + $this->options_defaults[ $field['id'] ] = $field['options']; + } + } + } + } + } + } + + /** + * filter 'redux/options/{opt_name}/defaults' + * + * @param array $defaults option default values + */ + $this->transients['changed_values'] = isset ( $this->transients['changed_values'] ) ? $this->transients['changed_values'] : array(); + $this->options_defaults = apply_filters( "redux/options/{$this->args['opt_name']}/defaults", $this->options_defaults, $this->transients['changed_values'] ); + + return $this->options_defaults; + } + + /** + * Set default options on admin_init if option doesn't exist + * + * @since 1.0.0 + * @access public + * @return void + */ + private function _default_cleanup() { + + // Fix the global variable name + if ( $this->args['global_variable'] == "" && $this->args['global_variable'] !== false ) { + $this->args['global_variable'] = str_replace( '-', '_', $this->args['opt_name'] ); + } + } + + /** + * Class Add Sub Menu Function, creates options submenu in Wordpress admin area. + * + * @since 3.1.9 + * @access private + * @return void + */ + private function add_submenu( $page_parent, $page_title, $menu_title, $page_permissions, $page_slug ) { + global $submenu; + + // Just in case. One never knows. + $page_parent = strtolower( $page_parent ); + + $test = array( + 'index.php' => 'dashboard', + 'edit.php' => 'posts', + 'upload.php' => 'media', + 'link-manager.php' => 'links', + 'edit.php?post_type=page' => 'pages', + 'edit-comments.php' => 'comments', + 'themes.php' => 'theme', + 'plugins.php' => 'plugins', + 'users.php' => 'users', + 'tools.php' => 'management', + 'options-general.php' => 'options', + ); + + if ( isset ( $test[ $page_parent ] ) ) { + $function = 'add_' . $test[ $page_parent ] . '_page'; + $this->page = $function ( + $page_title, $menu_title, $page_permissions, $page_slug, array( $this, 'generate_panel' ) + ); + } else { + // Network settings and Post type menus. These do not have + // wrappers and need to be appened to using add_submenu_page. + // Okay, since we've left the post type menu appending + // as default, we need to validate it, so anything that + // isn't post_type= doesn't get through and mess + // things up. + $addMenu = false; + if ( 'settings.php' != $page_parent ) { + // Establish the needle + $needle = '?post_type='; + + // Check if it exists in the page_parent (how I miss instr) + $needlePos = strrpos( $page_parent, $needle ); + + // It's there, so... + if ( $needlePos > 0 ) { + + // Get the post type. + $postType = substr( $page_parent, $needlePos + strlen( $needle ) ); + + // Ensure it exists. + if ( post_type_exists( $postType ) ) { + // Set flag to add the menu page + $addMenu = true; + } + // custom menu + } elseif ( isset ( $submenu[ $this->args['page_parent'] ] ) ) { + $addMenu = true; + } else { + global $menu; + + foreach ( $menu as $menupriority => $menuitem ) { + $needle_menu_slug = isset ( $menuitem ) ? $menuitem[2] : false; + if ( $needle_menu_slug != false ) { + + // check if the current needle menu equals page_parent + if ( strcasecmp( $needle_menu_slug, $page_parent ) == 0 ) { + + // found an empty parent menu + $addMenu = true; + } + } + } + } + } else { + // The page_parent was settings.php, so set menu add + // flag to true. + $addMenu = true; + } + // Add the submenu if it's permitted. + if ( true == $addMenu ) { + $this->page = add_submenu_page( + $page_parent, $page_title, $menu_title, $page_permissions, $page_slug, array( + &$this, + 'generate_panel' + ) + ); + } + } + } + + /** + * Class Options Page Function, creates main options page. + * + * @since 1.0.0 + * @access public + * @return void + */ + public function _options_page() { + + if ( $this->args['menu_type'] == 'hidden' ) { + + // No menu to add! + } else if ( $this->args['menu_type'] == 'submenu' ) { + $this->add_submenu( + $this->args['page_parent'], $this->args['page_title'], $this->args['menu_title'], $this->args['page_permissions'], $this->args['page_slug'] + ); + } else { + $this->page = add_menu_page( + $this->args['page_title'], $this->args['menu_title'], $this->args['page_permissions'], $this->args['page_slug'], array( + &$this, + 'generate_panel' + ), $this->args['menu_icon'], $this->args['page_priority'] + ); + + if ( true === $this->args['allow_sub_menu'] ) { + if ( ! isset ( $section['type'] ) || $section['type'] != 'divide' ) { + foreach ( $this->sections as $k => $section ) { + $canBeSubSection = ( $k > 0 && ( ! isset ( $this->sections[ ( $k ) ]['type'] ) || $this->sections[ ( $k ) ]['type'] != "divide" ) ) ? true : false; + + if ( ! isset ( $section['title'] ) || ( $canBeSubSection && ( isset ( $section['subsection'] ) && $section['subsection'] == true ) ) ) { + continue; + } + + if ( isset ( $section['submenu'] ) && $section['submenu'] == false ) { + continue; + } + + if ( isset ( $section['customizer_only'] ) && $section['customizer_only'] == true ) { + continue; + } + + if ( isset ( $section['hidden'] ) && $section['hidden'] == true ) { + continue; + } + + add_submenu_page( + $this->args['page_slug'], $section['title'], $section['title'], $this->args['page_permissions'], $this->args['page_slug'] . '&tab=' . $k, + //create_function( '$a', "return null;" ) + '__return_null' + ); + } + + // Remove parent submenu item instead of adding null item. + remove_submenu_page( $this->args['page_slug'], $this->args['page_slug'] ); + } + + if ( true == $this->args['dev_mode'] ) { + $this->debug->add_submenu(); + } + + if ( true == $this->args['system_info'] ) { + add_submenu_page( + $this->args['page_slug'], __( 'System Info', 'legacy_framework' ), __( 'System Info', 'legacy_framework' ), $this->args['page_permissions'], $this->args['page_slug'] . '&tab=system_info_default', '__return_null' + ); + } + } + } + + add_action( "load-{$this->page}", array( &$this, '_load_page' ) ); + } +// _options_page() + + /** + * Add admin bar menu + * + * @since 3.1.5.16 + * @access public + * @global $menu , $submenu, $wp_admin_bar + * @return void + */ + public function _admin_bar_menu() { + global $menu, $submenu, $wp_admin_bar; + + $ct = wp_get_theme(); + $theme_data = $ct; + + if ( ! is_super_admin() || ! is_admin_bar_showing() || ! $this->args['admin_bar'] || $this->args['menu_type'] == 'hidden' ) { + return; + } + + if ( $menu ) { + foreach ( $menu as $menu_item ) { + if ( isset ( $menu_item[2] ) && $menu_item[2] === $this->args["page_slug"] ) { + + // Fetch the title + $title = empty ( $this->args['admin_bar_icon'] ) ? $menu_item[0] : '' . $menu_item[0]; + + $nodeargs = array( + 'id' => $menu_item[2], + 'title' => $title, + 'href' => admin_url( 'admin.php?page=' . $menu_item[2] ), + 'meta' => array() + ); + $wp_admin_bar->add_node( $nodeargs ); + + break; + } + } + + if ( isset ( $submenu[ $this->args["page_slug"] ] ) && is_array( $submenu[ $this->args["page_slug"] ] ) ) { + foreach ( $submenu[ $this->args["page_slug"] ] as $index => $redux_options_submenu ) { + $subnodeargs = array( + 'id' => $this->args["page_slug"] . '_' . $index, + 'title' => $redux_options_submenu[0], + 'parent' => $this->args["page_slug"], + 'href' => admin_url( 'admin.php?page=' . $redux_options_submenu[2] ), + ); + + $wp_admin_bar->add_node( $subnodeargs ); + } + } + + // Let's deal with external links + if ( isset ( $this->args['admin_bar_links'] ) ) { + + // Group for Main Root Menu (External Group) + $wp_admin_bar->add_node( array( + 'id' => $this->args["page_slug"] . '-external', + 'parent' => $this->args["page_slug"], + 'group' => true, + 'meta' => array( 'class' => 'ab-sub-secondary' ) + ) ); + + // Add Child Menus to External Group Menu + foreach ( $this->args['admin_bar_links'] as $link ) { + if ( ! isset ( $link['id'] ) ) { + $link['id'] = $this->args["page_slug"] . '-sub-' . sanitize_html_class( $link['title'] ); + } + $externalnodeargs = array( + 'id' => $link['id'], + 'title' => $link['title'], + 'parent' => $this->args["page_slug"] . '-external', + 'href' => $link['href'], + 'meta' => array( 'target' => '_blank' ) + ); + + $wp_admin_bar->add_node( $externalnodeargs ); + } + } + } else { + // Fetch the title + $title = empty ( $this->args['admin_bar_icon'] ) ? $this->args['menu_title'] : '' . $this->args['menu_title']; + + $nodeargs = array( + 'id' => $this->args["page_slug"], + 'title' => $title, + // $theme_data->get( 'Name' ) . " " . __( 'Options', 'legacy_framework' ), + 'href' => admin_url( 'admin.php?page=' . $this->args["page_slug"] ), + 'meta' => array() + ); + + $wp_admin_bar->add_node( $nodeargs ); + } + } +// _admin_bar_menu() + + /** + * Output dynamic CSS at bottom of HEAD + * + * @since 3.2.8 + * @access public + * @return void + */ + public function _output_css() { + if ( $this->args['output'] == false && $this->args['compiler'] == false ) { + return; + } + + if ( isset ( $this->no_output ) ) { + return; + } + + if ( ! empty ( $this->outputCSS ) && ( $this->args['output_tag'] == true || ( isset ( $_POST['customized'] ) ) ) ) { + echo ''; + } + } + + /** + * Enqueue CSS and Google fonts for front end + * + * @since 1.0.0 + * @access public + * @return void + */ + public function _enqueue_output() { + if ( $this->args['output'] == false && $this->args['compiler'] == false ) { + return; + } + + /** @noinspection PhpUnusedLocalVariableInspection */ + foreach ( $this->sections as $k => $section ) { + if ( isset ( $section['type'] ) && ( $section['type'] == 'divide' ) ) { + continue; + } + + if ( isset ( $section['fields'] ) ) { + /** @noinspection PhpUnusedLocalVariableInspection */ + foreach ( $section['fields'] as $fieldk => $field ) { + if ( isset ( $field['type'] ) && $field['type'] != "callback" ) { + $field_class = "ReduxFramework_{$field['type']}"; + if ( ! class_exists( $field_class ) ) { + + if ( ! isset ( $field['compiler'] ) ) { + $field['compiler'] = ""; + } + + /** + * Field class file + * filter 'redux/{opt_name}/field/class/{field.type} + * + * @param string field class file + * @param array $field field config data + */ + $class_file = apply_filters( "redux/{$this->args['opt_name']}/field/class/{$field['type']}", self::$_dir . "inc/fields/{$field['type']}/field_{$field['type']}.php", $field ); + + if ( $class_file && file_exists( $class_file ) && ! class_exists( $field_class ) ) { + /** @noinspection PhpIncludeInspection */ + require_once( $class_file ); + } + } + + if ( ! empty ( $this->options[ $field['id'] ] ) && class_exists( $field_class ) && method_exists( $field_class, 'output' ) && $this->_can_output_css( $field ) ) { + $field = apply_filters( "redux/field/{$this->args['opt_name']}/output_css", $field ); + + if ( ! empty ( $field['output'] ) && ! is_array( $field['output'] ) ) { + $field['output'] = array( $field['output'] ); + } + + $value = isset ( $this->options[ $field['id'] ] ) ? $this->options[ $field['id'] ] : ''; + $enqueue = new $field_class ( $field, $value, $this ); + + if ( ( ( isset ( $field['output'] ) && ! empty ( $field['output'] ) ) || ( isset ( $field['compiler'] ) && ! empty ( $field['compiler'] ) ) || $field['type'] == "typography" || $field['type'] == "icon_select" ) ) { + $enqueue->output(); + } + } + } + } + } + } + + // For use like in the customizer. Stops the output, but passes the CSS in the variable for the compiler + if ( isset ( $this->no_output ) ) { + return; + } + + if ( ! empty ( $this->typography ) && ! empty ( $this->typography ) && filter_var( $this->args['output'], FILTER_VALIDATE_BOOLEAN ) ) { + $version = ! empty ( $this->transients['last_save'] ) ? $this->transients['last_save'] : ''; + $typography = new ReduxFramework_typography ( null, null, $this ); + + if ( $this->args['async_typography'] && ! empty ( $this->typography ) ) { + $families = array(); + foreach ( $this->typography as $key => $value ) { + $families[] = $key; + } + ?> + + args['disable_google_fonts_link'] ) { + $protocol = ( ! empty ( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443 ) ? "https:" : "http:"; + + //echo ''; + wp_register_style( 'redux-google-fonts-' . $this->args['opt_name'], $protocol . $typography->makeGoogleWebfontLink( $this->typography ), '', $version ); + wp_enqueue_style( 'redux-google-fonts-' . $this->args['opt_name'] ); + } + } + } +// _enqueue_output() + + /** + * Enqueue CSS/JS for options page + * + * @since 1.0.0 + * @access public + * @global $wp_styles + * @return void + */ + public function _enqueue() { + include_once( 'core/enqueue.php' ); + $enqueue = new reduxCoreEnqueue ( $this ); + $enqueue->init(); + + +// if ($this->args['sass']['enabled']) { +// $ret = reduxSassCompiler::compile_sass($this); +// +// if ($ret == reduxSassCompiler::SASS_FILE_COMPILE || $ret == reduxSassCompiler::SASS_NO_COMPILE) { +// if (file_exists(ReduxFramework::$_upload_dir . $this->args['opt_name'] . '-redux.css')) { +// wp_enqueue_style( +// 'redux-fields-css', +// ReduxFramework::$_upload_url . $this->args['opt_name'] . '-redux.css', +// array(), +// $timestamp, +// 'all' +// ); +// } +// } +// } + } +// _enqueue() + + /** + * Show page help + * + * @since 1.0.0 + * @access public + * @return void + */ + public function _load_page() { + + // Do admin head action for this page + add_action( 'admin_head', array( &$this, 'admin_head' ) ); + + // Do admin footer text hook + add_filter( 'admin_footer_text', array( &$this, 'admin_footer_text' ) ); + + $screen = get_current_screen(); + + if ( is_array( $this->args['help_tabs'] ) ) { + foreach ( $this->args['help_tabs'] as $tab ) { + $screen->add_help_tab( $tab ); + } + } + + // If hint argument is set, display hint tab + if ( true == $this->show_hints ) { + global $current_user; + + // Users enable/disable hint choice + $hint_status = get_user_meta( $current_user->ID, 'ignore_hints' ) ? get_user_meta( $current_user->ID, 'ignore_hints', true ) : 'true'; + + // current page parameters + $curPage = $_GET['page']; + + $curTab = '0'; + if ( isset ( $_GET['tab'] ) ) { + $curTab = $_GET['tab']; + } + + // Default url values for enabling hints. + $dismiss = 'true'; + $s = __( 'Enable', 'legacy_framework' ); + + // Values for disabling hints. + if ( 'true' == $hint_status ) { + $dismiss = 'false'; + $s = __( 'Disable', 'legacy_framework' ); + } + + // Make URL + $url = '' . $s . ' hints'; + + $event = __( 'moving the mouse over', 'legacy_framework' ); + if ( 'click' == $this->args['hints']['tip_effect']['show']['event'] ) { + $event = __( 'clicking', 'legacy_framework' ); + } + + // Construct message + $msg = sprintf( __( 'Hints are tooltips that popup when %d the hint icon, offering addition information about the field in which they appear. They can be %d d by using the link below.', 'legacy_framework' ), $event, strtolower( $s ) ) . '

    ' . $url; + + // Construct hint tab + $tab = array( + 'id' => 'redux-hint-tab', + 'title' => __( 'Hints', 'legacy_framework' ), + 'content' => '

    ' . $msg . '

    ' + ); + + $screen->add_help_tab( $tab ); + } + + // Sidebar text + if ( $this->args['help_sidebar'] != '' ) { + + // Specify users text from arguments + $screen->set_help_sidebar( $this->args['help_sidebar'] ); + } else { + + // If sidebar text is empty and hints are active, display text + // about hints. + if ( true == $this->show_hints ) { + $screen->set_help_sidebar( '

    Redux Framework

    Hint Tooltip Preferences

    ' ); + } + } + + /** + * action 'redux-load-page-{opt_name}' + * + * @deprecated + * + * @param object $screen WP_Screen + */ + do_action( "redux-load-page-{$this->args['opt_name']}", $screen ); // REMOVE + + /** + * action 'redux/page/{opt_name}/load' + * + * @param object $screen WP_Screen + */ + do_action( "redux/page/{$this->args['opt_name']}/load", $screen ); + } +// _load_page() + + /** + * Do action redux-admin-head for options page + * + * @since 1.0.0 + * @access public + * @return void + */ + public function admin_head() { + /** + * action 'redux-admin-head-{opt_name}' + * + * @deprecated + * + * @param object $this ReduxFramework + */ + do_action( "redux-admin-head-{$this->args['opt_name']}", $this ); // REMOVE + + /** + * action 'redux/page/{opt_name}/header' + * + * @param object $this ReduxFramework + */ + do_action( "redux/page/{$this->args['opt_name']}/header", $this ); + } +// admin_head() + + /** + * Return footer text + * + * @since 2.0.0 + * @access public + * @return string $this->args['footer_credit'] + */ + public function admin_footer_text() { + return $this->args['footer_credit']; + } +// admin_footer_text() + + /** + * Return default output string for use in panel + * + * @since 3.1.5 + * @access public + * @return string default_output + */ + private function get_default_output_string( $field ) { + $default_output = ""; + + if ( ! isset ( $field['default'] ) ) { + $field['default'] = ""; + } + + if ( ! is_array( $field['default'] ) ) { + if ( ! empty ( $field['options'][ $field['default'] ] ) ) { + if ( ! empty ( $field['options'][ $field['default'] ]['alt'] ) ) { + $default_output .= $field['options'][ $field['default'] ]['alt'] . ', '; + } else { + // TODO: This serialize fix may not be the best solution. Look into it. PHP 5.4 error without serialize + if ( ! is_array( $field['options'][ $field['default'] ] ) ) { + $default_output .= $field['options'][ $field['default'] ] . ", "; + } else { + $default_output .= serialize( $field['options'][ $field['default'] ] ) . ", "; + } + } + } else if ( ! empty ( $field['options'][ $field['default'] ] ) ) { + $default_output .= $field['options'][ $field['default'] ] . ", "; + } else if ( ! empty ( $field['default'] ) ) { + if ( $field['type'] == 'switch' && isset ( $field['on'] ) && isset ( $field['off'] ) ) { + $default_output .= ( $field['default'] == 1 ? $field['on'] : $field['off'] ) . ', '; + } else { + $default_output .= $field['default'] . ', '; + } + } + } else { + foreach ( $field['default'] as $defaultk => $defaultv ) { + if ( ! empty ( $field['options'][ $defaultv ]['alt'] ) ) { + $default_output .= $field['options'][ $defaultv ]['alt'] . ', '; + } else if ( ! empty ( $field['options'][ $defaultv ] ) ) { + $default_output .= $field['options'][ $defaultv ] . ", "; + } else if ( ! empty ( $field['options'][ $defaultk ] ) ) { + $default_output .= $field['options'][ $defaultk ] . ", "; + } else if ( ! empty ( $defaultv ) ) { + $default_output .= $defaultv . ', '; + } + } + } + + if ( ! empty ( $default_output ) ) { + $default_output = __( 'Default', 'legacy_framework' ) . ": " . substr( $default_output, 0, - 2 ); + } + + if ( ! empty ( $default_output ) ) { + $default_output = '' . $default_output . '
    '; + } + + return $default_output; + } + +// get_default_output_string() + + public function get_header_html( $field ) { + global $current_user; + + // Set to empty string to avoid wanrings. + $hint = ''; + $th = ""; + + if ( isset ( $field['title'] ) && isset ( $field['type'] ) && $field['type'] !== "info" && $field['type'] !== "section" ) { + $default_mark = ( ! empty ( $field['default'] ) && isset ( $this->options[ $field['id'] ] ) && $this->options[ $field['id'] ] == $field['default'] && ! empty ( $this->args['default_mark'] ) && isset ( $field['default'] ) ) ? $this->args['default_mark'] : ''; + + // If a hint is specified in the field, process it. + if ( isset ( $field['hint'] ) && ! '' == $field['hint'] ) { + + // Set show_hints flag to true, so helptab will be displayed. + $this->show_hints = true; + + // Get user pref for displaying hints. + $metaVal = get_user_meta( $current_user->ID, 'ignore_hints', true ); + if ( 'true' == $metaVal || empty ( $metaVal ) ) { + + // Set hand cursor for clickable hints + $pointer = ''; + if ( isset ( $this->args['hints']['tip_effect']['show']['event'] ) && 'click' == $this->args['hints']['tip_effect']['show']['event'] ) { + $pointer = 'pointer'; + } + + $size = '16px'; + if ( 'large' == $this->args['hints']['icon_size'] ) { + $size = '18px'; + } + + // In case docs are ignored. + $titleParam = isset ( $field['hint']['title'] ) ? $field['hint']['title'] : ''; + $contentParam = isset ( $field['hint']['content'] ) ? $field['hint']['content'] : ''; + + $hint_color = isset ( $this->args['hints']['icon_color'] ) ? $this->args['hints']['icon_color'] : '#d3d3d3'; + + // Set hint html with appropriate position css + $hint = '
      
    '; + } + } + + if ( ! empty ( $field['title'] ) ) { + if ( 'left' == $this->args['hints']['icon_position'] ) { + $th = $hint . $field['title'] . $default_mark . ""; + } else { + $th = $field['title'] . $default_mark . "" . $hint; + } + } + + if ( isset ( $field['subtitle'] ) ) { + $th .= '' . $field['subtitle'] . ''; + } + } + + if ( ! empty ( $th ) ) { + $th = '
    ' . $th . '
    '; + } + + if ( $this->args['default_show'] === true && isset ( $field['default'] ) && isset ( $this->options[ $field['id'] ] ) && $this->options[ $field['id'] ] != $field['default'] && $field['type'] !== "info" && $field['type'] !== "group" && $field['type'] !== "section" && $field['type'] !== "editor" && $field['type'] !== "ace_editor" ) { + $th .= $this->get_default_output_string( $field ); + } + + return $th; + } + + /** + * Register Option for use + * + * @since 1.0.0 + * @access public + * @return void + */ + public function _register_settings() { + + // TODO - REMOVE + // Not used by new sample-config, but in here for legacy builds + // This is bad and can break things. Hehe. + if ( ! function_exists( 'wp_get_current_user' ) ) { + include( ABSPATH . "wp-includes/pluggable.php" ); + } + + register_setting( $this->args['opt_name'] . '_group', $this->args['opt_name'], array( + $this, + '_validate_options' + ) ); + + if ( is_null( $this->sections ) ) { + return; + } + + if ( empty( $this->options_defaults ) ) { + $this->options_defaults = $this->_default_values(); + } + + $runUpdate = false; + + foreach ( $this->sections as $k => $section ) { + if ( isset ( $section['type'] ) && $section['type'] == 'divide' ) { + continue; + } + + $display = true; + + if ( isset ( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) { + if ( isset ( $section['panel'] ) && $section['panel'] == false ) { + $display = false; + } + } + + + // DOVY! Replace $k with $section['id'] when ready + /** + * filter 'redux-section-{index}-modifier-{opt_name}' + * + * @param array $section section configuration + */ + $section = apply_filters( "redux-section-{$k}-modifier-{$this->args['opt_name']}", $section ); + + /** + * filter 'redux/options/{opt_name}/section/{section.id}' + * + * @param array $section section configuration + */ + if ( isset ( $section['id'] ) ) { + $section = apply_filters( "redux/options/{$this->args['opt_name']}/section/{$section['id']}", $section ); + } + + if ( empty ( $section ) ) { + unset ( $this->sections[ $k ] ); + continue; + } + + if ( ! isset ( $section['title'] ) ) { + $section['title'] = ""; + } + + $heading = isset ( $section['heading'] ) ? $section['heading'] : $section['title']; + + if ( isset ( $section['permissions'] ) ) { + if ( ! current_user_can( $section['permissions'] ) ) { + $this->hidden_perm_sections[] = $section['title']; + + foreach ( $section['fields'] as $num => $field_data ) { + $field_type = $field_data['type']; + + if ( $field_type != 'section' || $field_type != 'divide' || $field_type != 'info' || $field_type != 'raw' ) { + $field_id = $field_data['id']; + $default = isset ( $this->options_defaults[ $field_id ] ) ? $this->options_defaults[ $field_id ] : ''; + $data = isset ( $this->options[ $field_id ] ) ? $this->options[ $field_id ] : $default; + + $this->hidden_perm_fields[ $field_id ] = $data; + } + } + + continue; + } + } + + if ( ! $display ) { + $this->no_panel_section[ $k ] = $section; + } else { + add_settings_section( $this->args['opt_name'] . $k . '_section', $heading, array( + &$this, + '_section_desc' + ), $this->args['opt_name'] . $k . '_section_group' ); + } + + $sectionIndent = false; + if ( isset ( $section['fields'] ) ) { + foreach ( $section['fields'] as $fieldk => $field ) { + if ( ! isset ( $field['type'] ) ) { + continue; // You need a type! + } + + if ( $field['type'] == "info" && isset( $field['raw_html'] ) && $field['raw_html'] == true ) { + $field['type'] = "raw"; + $field['content'] = $field['desc']; + $field['desc'] = ""; + $this->sections[ $k ]['fields'][ $fieldk ] = $field; + } else if ( $field['type'] == "info" ) { + if ( ! isset( $field['full_width'] ) ) { + $field['full_width'] = true; + $this->sections[ $k ]['fields'][ $fieldk ] = $field; + } + } + + if ( $field['type'] == "raw" ) { + if ( isset( $field['align'] ) ) { + $field['full_width'] = $field['align'] ? false : true; + unset( $field['align'] ); + } else if ( ! isset( $field['full_width'] ) ) { + $field['full_width'] = true; + } + $this->sections[ $k ]['fields'][ $fieldk ] = $field; + } + + + /** + * filter 'redux/options/{opt_name}/field/{field.id}' + * + * @param array $field field config + */ + $field = apply_filters( "redux/options/{$this->args['opt_name']}/field/{$field['id']}/register", $field ); + + + $this->field_types[ $field['type'] ] = isset ( $this->field_types[ $field['type'] ] ) ? $this->field_types[ $field['type'] ] : array(); + + $this->field_sections[ $field['type'] ][ $field['id'] ] = $k; + + $display = true; + + if ( isset ( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) { + if ( isset ( $field['panel'] ) && $field['panel'] == false ) { + $display = false; + } + } + if ( isset ( $field['customizer_only'] ) && $field['customizer_only'] == true ) { + //$display = false; + } + + if ( isset ( $field['permissions'] ) ) { + + if ( ! current_user_can( $field['permissions'] ) ) { + $data = isset ( $this->options[ $field['id'] ] ) ? $this->options[ $field['id'] ] : $this->options_defaults[ $field['id'] ]; + + $this->hidden_perm_fields[ $field['id'] ] = $data; + + continue; + } + } + + if ( ! isset ( $field['id'] ) ) { + echo '

    No field ID is set.

    ';
    +                                print_r( $field );
    +                                echo "

    "; + continue; + } + + if ( isset ( $field['type'] ) && $field['type'] == "section" ) { + if ( isset ( $field['indent'] ) && $field['indent'] == true ) { + $sectionIndent = true; + } else { + $sectionIndent = false; + } + } + + if ( isset ( $field['type'] ) && $field['type'] == "info" && $sectionIndent ) { + $field['indent'] = $sectionIndent; + } + + $th = $this->get_header_html( $field ); + + $field['name'] = $this->args['opt_name'] . '[' . $field['id'] . ']'; + + // Set the default value if present + $this->options_defaults[ $field['id'] ] = isset ( $this->options_defaults[ $field['id'] ] ) ? $this->options_defaults[ $field['id'] ] : ''; + + // Set the defaults to the value if not present + $doUpdate = false; + + // Check fields for values in the default parameter + if ( ! isset ( $this->options[ $field['id'] ] ) && isset ( $field['default'] ) ) { + $this->options_defaults[ $field['id'] ] = $this->options[ $field['id'] ] = $field['default']; + $doUpdate = true; + + // Check fields that hae no default value, but an options value with settings to + // be saved by default + } elseif ( ! isset ( $this->options[ $field['id'] ] ) && isset ( $field['options'] ) ) { + + // If sorter field, check for options as save them as defaults + if ( $field['type'] == 'sorter' || $field['type'] == 'sortable' ) { + $this->options_defaults[ $field['id'] ] = $this->options[ $field['id'] ] = $field['options']; + $doUpdate = true; + } + } + + // CORRECT URLS if media URLs are wrong, but attachment IDs are present. + if ( $field['type'] == "media" ) { + if ( isset ( $this->options[ $field['id'] ]['id'] ) && isset ( $this->options[ $field['id'] ]['url'] ) && ! empty ( $this->options[ $field['id'] ]['url'] ) && strpos( $this->options[ $field['id'] ]['url'], str_replace( 'http://', '', WP_CONTENT_URL ) ) === false ) { + $data = wp_get_attachment_url( $this->options[ $field['id'] ]['id'] ); + + if ( isset ( $data ) && ! empty ( $data ) ) { + $this->options[ $field['id'] ]['url'] = $data; + $data = wp_get_attachment_image_src( $this->options[ $field['id'] ]['id'], array( + 150, + 150 + ) ); + $this->options[ $field['id'] ]['thumbnail'] = $data[0]; + $doUpdate = true; + } + } + } + + if ( $field['type'] == "background" ) { + if ( isset ( $this->options[ $field['id'] ]['media']['id'] ) && isset ( $this->options[ $field['id'] ]['background-image'] ) && ! empty ( $this->options[ $field['id'] ]['background-image'] ) && strpos( $this->options[ $field['id'] ]['background-image'], str_replace( 'http://', '', WP_CONTENT_URL ) ) === false ) { + $data = wp_get_attachment_url( $this->options[ $field['id'] ]['media']['id'] ); + + if ( isset ( $data ) && ! empty ( $data ) ) { + $this->options[ $field['id'] ]['background-image'] = $data; + $data = wp_get_attachment_image_src( $this->options[ $field['id'] ]['media']['id'], array( + 150, + 150 + ) ); + $this->options[ $field['id'] ]['media']['thumbnail'] = $data[0]; + $doUpdate = true; + } + } + } + + if ( $field['type'] == "slides" ) { + if ( isset ( $this->options[ $field['id'] ] ) && is_array( $this->options[ $field['id'] ] ) && isset ( $this->options[ $field['id'] ][0]['attachment_id'] ) && isset ( $this->options[ $field['id'] ][0]['image'] ) && ! empty ( $this->options[ $field['id'] ][0]['image'] ) && strpos( $this->options[ $field['id'] ][0]['image'], str_replace( 'http://', '', WP_CONTENT_URL ) ) === false ) { + foreach ( $this->options[ $field['id'] ] as $key => $val ) { + $data = wp_get_attachment_url( $val['attachment_id'] ); + + if ( isset ( $data ) && ! empty ( $data ) ) { + $this->options[ $field['id'] ][ $key ]['image'] = $data; + $data = wp_get_attachment_image_src( $val['attachment_id'], array( + 150, + 150 + ) ); + $this->options[ $field['id'] ][ $key ]['thumb'] = $data[0]; + $doUpdate = true; + } + } + } + } + // END -> CORRECT URLS if media URLs are wrong, but attachment IDs are present. + + if ( true == $doUpdate && ! isset ( $this->never_save_to_db ) ) { + if ( $this->args['save_defaults'] ) { // Only save that to the DB if allowed to + $runUpdate = true; + } + // elseif($this->saved != '' && $this->saved != false) { + // $runUpdate = true; + //} + } + + if ( ! isset ( $field['class'] ) ) { // No errors please + $field['class'] = ""; + } + $id = $field['id']; + + /** + * filter 'redux-field-{field.id}modifier-{opt_name}' + * + * @deprecated + * + * @param array $field field config + */ + $field = apply_filters( "redux-field-{$field['id']}modifier-{$this->args['opt_name']}", $field ); // REMOVE LATER + + /** + * filter 'redux/options/{opt_name}/field/{field.id}' + * + * @param array $field field config + */ + $field = apply_filters( "redux/options/{$this->args['opt_name']}/field/{$field['id']}", $field ); + + if ( empty ( $field ) || ! $field || $field == false ) { + unset ( $this->sections[ $k ]['fields'][ $fieldk ] ); + continue; + } + + if ( ! empty ( $this->folds[ $field['id'] ]['parent'] ) ) { // This has some fold items, hide it by default + $field['class'] .= " fold"; + } + + if ( ! empty ( $this->folds[ $field['id'] ]['children'] ) ) { // Sets the values you shoe fold children on + $field['class'] .= " foldParent"; + } + + if ( ! empty ( $field['compiler'] ) ) { + $field['class'] .= " compiler"; + $this->compiler_fields[ $field['id'] ] = 1; + } + + if ( isset ( $field['unit'] ) && ! isset ( $field['units'] ) ) { + $field['units'] = $field['unit']; + unset ( $field['unit'] ); + } + + $this->sections[ $k ]['fields'][ $fieldk ] = $field; + + if ( isset ( $this->args['display_source'] ) ) { + $th .= ''; + $th .= '
    View Source'; + } + + /** + * action 'redux/options/{opt_name}/field/field.type}/register' + */ + do_action( "redux/options/{$this->args['opt_name']}/field/{$field['type']}/register", $field ); + + $this->check_dependencies( $field ); + + if ( ! $display || isset ( $this->no_panel_section[ $k ] ) ) { + $this->no_panel[] = $field['id']; + } else { + if ( isset ( $field['hidden'] ) && $field['hidden'] ) { + $field['label_for'] = 'redux_hide_field'; + } + + add_settings_field( + "{$fieldk}_field", $th, array( + &$this, + '_field_input' + ), "{$this->args['opt_name']}{$k}_section_group", "{$this->args['opt_name']}{$k}_section", $field + ); + + } + } + } + } + + /** + * action 'redux-register-settings-{opt_name}' + * + * @deprecated + */ + do_action( "redux-register-settings-{$this->args['opt_name']}" ); // REMOVE + + /** + * action 'redux/options/{opt_name}/register' + * + * @param array option sections + */ + do_action( "redux/options/{$this->args['opt_name']}/register", $this->sections ); + + if ( $runUpdate && ! isset ( $this->never_save_to_db ) ) { // Always update the DB with new fields + $this->set_options( $this->options ); + } + + if ( isset ( $this->transients['run_compiler'] ) && $this->transients['run_compiler'] ) { + + $this->no_output = true; + $this->_enqueue_output(); + + + /** + * action 'redux-compiler-{opt_name}' + * + * @deprecated + * + * @param array options + * @param string CSS that get sent to the compiler hook + */ + do_action( "redux-compiler-{$this->args['opt_name']}", $this->options, $this->compilerCSS, $this->transients['changed_values'] ); // REMOVE + + /** + * action 'redux/options/{opt_name}a' + * + * @param array options + * @param string CSS that get sent to the compiler hook + */ + do_action( "redux/options/{$this->args['opt_name']}/compiler", $this->options, $this->compilerCSS, $this->transients['changed_values'] ); + + /** + * action 'redux/options/{opt_name}/compiler/advanced' + * + * @param array options + * @param string CSS that get sent to the compiler hook, which sends the full Redux object + */ + do_action( "redux/options/{$this->args['opt_name']}/compiler/advanced", $this ); + + unset ( $this->transients['run_compiler'] ); + $this->set_transients(); + } + } +// _register_settings() + + /** + * Register Extensions for use + * + * @since 3.0.0 + * @access public + * @return void + */ + private function _register_extensions() { + $path = dirname( __FILE__ ) . '/inc/extensions/'; + $folders = scandir( $path, 1 ); + + /** + * action 'redux/extensions/{opt_name}/before' + * + * @param object $this ReduxFramework + */ + do_action( "redux/extensions/{$this->args['opt_name']}/before", $this ); + + foreach ( $folders as $folder ) { if($folder != "customizer"){ + if ( $folder === '.' || $folder === '..' || ! is_dir( $path . $folder ) || substr( $folder, 0, 1 ) === '.' || substr( $folder, 0, 1 ) === '@' || substr( $folder, 0, 4 ) === '_vti' ) { + continue; + } + + $extension_class = 'ReduxFramework_Extension_' . $folder; + + /** + * filter 'redux-extensionclass-load' + * + * @deprecated + * + * @param string extension class file path + * @param string $extension_class extension class name + */ + $class_file = apply_filters( "redux-extensionclass-load", "$path/$folder/extension_{$folder}.php", $extension_class ); // REMOVE LATER + + /** + * filter 'redux/extension/{opt_name}/{folder}' + * + * @param string extension class file path + * @param string $extension_class extension class name + */ + $class_file = apply_filters( "redux/extension/{$this->args['opt_name']}/$folder", "$path/$folder/extension_{$folder}.php", $class_file ); + + if ( $class_file ) { + if ( file_exists( $class_file ) ) { + require_once( $class_file ); + } + + $this->extensions[ $folder ] = new $extension_class ( $this ); + } + }} + + /** + * action 'redux-register-extensions-{opt_name}' + * + * @deprecated + * + * @param object $this ReduxFramework + */ + do_action( "redux-register-extensions-{$this->args['opt_name']}", $this ); // REMOVE + + /** + * action 'redux/extensions/{opt_name}' + * + * @param object $this ReduxFramework + */ + do_action( "redux/extensions/{$this->args['opt_name']}", $this ); + } + + private function get_transients() { + if ( ! isset ( $this->transients ) ) { + $this->transients = get_option( $this->args['opt_name'] . '-transients', array() ); + $this->transients_check = $this->transients; + } + } + + public function set_transients() { + if ( ! isset ( $this->transients ) || ! isset ( $this->transients_check ) || $this->transients != $this->transients_check ) { + update_option( $this->args['opt_name'] . '-transients', $this->transients ); + $this->transients_check = $this->transients; + } + } + + /** + * Validate the Options options before insertion + * + * @since 3.0.0 + * @access public + * + * @param array $plugin_options The options array + * + * @return array|mixed|string|void + */ + public function _validate_options( $plugin_options ) { +//print_r($plugin_options); + // exit(); + if ( isset ( $this->validation_ran ) ) { + return $plugin_options; + } + $this->validation_ran = 1; + + // Save the values not in the panel + if ( isset ( $plugin_options['redux-no_panel'] ) ) { + $keys = explode( '|', $plugin_options['redux-no_panel'] ); + foreach ( $keys as $key ) { + $plugin_options[ $key ] = $this->options[ $key ]; + } + if ( isset ( $plugin_options['redux-no_panel'] ) ) { + unset ( $plugin_options['redux-no_panel'] ); + } + } + + if ( ! empty ( $this->hidden_perm_fields ) && is_array( $this->hidden_perm_fields ) ) { + foreach ( $this->hidden_perm_fields as $id => $data ) { + $plugin_options[ $id ] = $data; + } + } + + if ( $plugin_options == $this->options ) { + return $plugin_options; + } + + $time = time(); + + // Sets last saved time + $this->transients['last_save'] = $time; + + // Import + if ( ( isset( $plugin_options['import_code'] ) && ! empty( $plugin_options['import_code'] ) ) || ( isset( $plugin_options['import_link'] ) && ! empty( $plugin_options['import_link'] ) ) ) { + $this->transients['last_save_mode'] = "import"; // Last save mode + $this->transients['last_compiler'] = $time; + $this->transients['last_import'] = $time; + $this->transients['run_compiler'] = 1; + + if ( $plugin_options['import_code'] != '' ) { + $import = $plugin_options['import_code']; + } elseif ( $plugin_options['import_link'] != '' ) { + $import = wp_remote_retrieve_body( wp_remote_get( $plugin_options['import_link'] ) ); + } + + if ( ! empty ( $import ) ) { + $imported_options = json_decode( $import, true ); + } + + if ( ! empty ( $imported_options ) && is_array( $imported_options ) && isset ( $imported_options['redux-backup'] ) && $imported_options['redux-backup'] == '1' ) { + + $this->transients['changed_values'] = array(); + foreach ( $plugin_options as $key => $value ) { + if ( isset ( $imported_options[ $key ] ) && $imported_options[ $key ] != $value ) { + $this->transients['changed_values'][ $key ] = $value; + $plugin_options[ $key ] = $value; + } + } + + /** + * action 'redux/options/{opt_name}/import' + * + * @param &array [&$plugin_options, redux_options] + */ + do_action_ref_array( "redux/options/{$this->args['opt_name']}/import", array( + &$plugin_options, + $imported_options, + $this->transients['changed_values'] + ) ); + + setcookie( 'redux_current_tab', '', 1, '/', $time + 1000, "/" ); + $_COOKIE['redux_current_tab'] = 1; + + unset ( $plugin_options['defaults'], $plugin_options['compiler'], $plugin_options['import'], $plugin_options['import_code'] ); + if ( $this->args['database'] == 'transient' || $this->args['database'] == 'theme_mods' || $this->args['database'] == 'theme_mods_expanded' || $this->args['database'] == 'network' ) { + $this->set_options( $plugin_options ); + + return; + } + + $plugin_options = wp_parse_args( $imported_options, $plugin_options ); + + $this->set_transients(); // Update the transients + + return $plugin_options; + } + } + + // Reset all to defaults + if ( ! empty ( $plugin_options['defaults'] ) ) { + if ( empty ( $this->options_defaults ) ) { + $this->options_defaults = $this->_default_values(); + } + + /** + * apply_filters 'redux/validate/{opt_name}/defaults' + * + * @param &array [ $this->options_defaults, $plugin_options] + */ + $plugin_options = apply_filters( "redux/validate/{$this->args['opt_name']}/defaults", $this->options_defaults ); + + // Section reset + //setcookie('redux-compiler-' . $this->args['opt_name'], 1, time() + 3000, '/'); + + + $this->transients['changed_values'] = array(); + + if ( empty ( $this->options ) ) { + $this->options = $this->options_defaults; + } + + foreach ( $this->options as $key => $value ) { + if ( isset ( $plugin_options[ $key ] ) && $value != $plugin_options[ $key ] ) { + $this->transients['changed_values'][ $key ] = $value; + } + } + + $this->transients['run_compiler'] = 1; + $this->transients['last_save_mode'] = "defaults"; // Last save mode + //setcookie('redux-compiler-' . $this->args['opt_name'], 1, time() + 1000, "/"); + //setcookie("redux-saved-{$this->args['opt_name']}", 'defaults', time() + 1000, "/"); + + $this->set_transients(); // Update the transients + + return $plugin_options; + } + + // Section reset to defaults + if ( ! empty ( $plugin_options['defaults-section'] ) ) { + if ( isset ( $plugin_options['redux-section'] ) && isset ( $this->sections[ $plugin_options['redux-section'] ]['fields'] ) ) { + /** + * apply_filters 'redux/validate/{opt_name}/defaults_section' + * + * @param &array [ $this->options_defaults, $plugin_options] + */ + foreach ( $this->sections[ $plugin_options['redux-section'] ]['fields'] as $field ) { + if ( isset ( $this->options_defaults[ $field['id'] ] ) ) { + $plugin_options[ $field['id'] ] = $this->options_defaults[ $field['id'] ]; + } else { + $plugin_options[ $field['id'] ] = ""; + } + + if ( isset ( $field['compiler'] ) ) { + $compiler = true; + } + } + + $plugin_options = apply_filters( "redux/validate/{$this->args['opt_name']}/defaults_section", $plugin_options ); + } + + $this->transients['changed_values'] = array(); + foreach ( $this->options as $key => $value ) { + if ( isset ( $plugin_options[ $key ] ) && $value != $plugin_options[ $key ] ) { + $this->transients['changed_values'][ $key ] = $value; + } + } + + if ( isset ( $compiler ) ) { + //$this->run_compiler = true; + //setcookie('redux-compiler-' . $this->args['opt_name'], 1, time()+1000, '/'); + //$plugin_options['REDUX_COMPILER'] = time(); + $this->transients['last_compiler'] = $time; + $this->transients['run_compiler'] = 1; + } + + $this->transients['last_save_mode'] = "defaults_section"; // Last save mode + //setcookie("redux-saved-{$this->args['opt_name']}", 'defaults_section', time() + 1000, "/"); + unset ( $plugin_options['defaults'], $plugin_options['defaults_section'], $plugin_options['import'], $plugin_options['import_code'], $plugin_options['import_link'], $plugin_options['compiler'], $plugin_options['redux-section'] ); + + $this->set_transients(); + + return $plugin_options; + } + +// if ($this->transients['last_save_mode'] != 'remove') { + $this->transients['last_save_mode'] = "normal"; // Last save mode +// } else { +// $this->transients['last_save_mode'] = ''; +// } + + /** + * apply_filters 'redux/validate/{opt_name}/before_validation' + * + * @param &array [&$plugin_options, redux_options] + */ + $plugin_options = apply_filters( "redux/validate/{$this->args['opt_name']}/before_validation", $plugin_options, $this->options ); + + // Validate fields (if needed) + $plugin_options = $this->_validate_values( $plugin_options, $this->options, $this->sections ); + + if ( ! empty ( $this->errors ) || ! empty ( $this->warnings ) ) { + $this->transients['notices'] = array( 'errors' => $this->errors, 'warnings' => $this->warnings ); + } + + /** + * action 'redux-validate-{opt_name}' + * + * @deprecated + * + * @param &array [&$plugin_options, redux_options] + */ + do_action_ref_array( "redux-validate-{$this->args['opt_name']}", array( + &$plugin_options, + $this->options + ) ); // REMOVE + + if ( ! isset ( $this->transients['changed_values'] ) ) { + $this->transients['changed_values'] = array(); + } + + /** + * action 'redux/options/{opt_name}/validate' + * + * @param &array [&$plugin_options, redux_options] + */ + do_action_ref_array( "redux/options/{$this->args['opt_name']}/validate", array( + &$plugin_options, + $this->options, + $this->transients['changed_values'] + ) ); + + if ( ! empty ( $plugin_options['compiler'] ) ) { + unset ( $plugin_options['compiler'] ); + + $this->transients['last_compiler'] = $time; + $this->transients['run_compiler'] = 1; + } + + $this->transients['changed_values'] = array(); // Changed values since last save + foreach ( $this->options as $key => $value ) { + if ( isset ( $plugin_options[ $key ] ) && $value != $plugin_options[ $key ] ) { + $this->transients['changed_values'][ $key ] = $value; + } + } + + unset ( $plugin_options['defaults'], $plugin_options['defaults_section'], $plugin_options['import'], $plugin_options['import_code'], $plugin_options['import_link'], $plugin_options['compiler'], $plugin_options['redux-section'] ); + if ( $this->args['database'] == 'transient' || $this->args['database'] == 'theme_mods' || $this->args['database'] == 'theme_mods_expanded' ) { + $this->set_options( $plugin_options ); + + return; + } + + if ( defined( 'WP_CACHE' ) && WP_CACHE && class_exists( 'W3_ObjectCache' ) ) { + //echo "here"; + $w3 = W3_ObjectCache::instance(); + $key = $w3->_get_cache_key( $this->args['opt_name'] . '-transients', 'transient' ); + //echo $key; + $w3->delete( $key, 'transient', true ); + //set_transient($this->args['opt_name'].'-transients', $this->transients); + //exit(); + } + + $this->set_transients( $this->transients ); + + return $plugin_options; + } + + public function ajax_save() { + + if ( ! wp_verify_nonce( $_REQUEST['nonce'], "redux_ajax_nonce" ) ) { + json_encode( array( + 'status' => __( 'Invalid security credential, please reload the page and try again.', 'legacy_framework' ), + 'action' => 'reload' + ) ); + die(); + } + $redux = ReduxFrameworkInstances::get_instance( $_POST['opt_name'] ); + + if ( ! empty ( $_POST['data'] ) && ! empty ( $redux->args['opt_name'] ) ) { + + $values = array(); + //if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) { + // $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST); + // while (list($key, $val) = each($process)) { + // foreach ($val as $k => $v) { + // unset($process[$key][$k]); + // if (is_array($v)) { + // $process[$key][stripslashes($k)] = $v; + // $process[] = &$process[$key][stripslashes($k)]; + // } else { + // $process[$key][stripslashes($k)] = stripslashes($v); + // } + // } + // } + // unset($process); + //} + $_POST['data'] = stripslashes( $_POST['data'] ); + parse_str( $_POST['data'], $values ); + $values = $values[ $redux->args['opt_name'] ]; + + + if ( function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc() ) { + $values = array_map( 'stripslashes_deep', $values ); + } + + //$beforeDeep = $values; + //// Ace editor hack for < PHP 5.4. Oy + //if ( isset( $this->fields['ace_editor'] ) ) { + // if ( function_exists( 'get_magic_quotes_gpc' ) && get_magic_quotes_gpc() ) { + // foreach ( $this->fields['ace_editor'] as $id => $v ) { + // if ( version_compare( phpversion(), '5.4', '<' ) ) { + // $values[ $id ] = stripslashes( $beforeDeep[ $id ] ); + // } else { + // $values[ $id ] = $beforeDeep[ $id ]; + // } + // } + // } + //} + + if ( ! empty ( $values ) ) { + + try { + if ( isset ( $redux->validation_ran ) ) { + unset ( $redux->validation_ran ); + } + $redux->set_options( $redux->_validate_options( $values ) ); + + if ( ( isset ( $values['defaults'] ) && ! empty ( $values['defaults'] ) ) || ( isset ( $values['defaults-section'] ) && ! empty ( $values['defaults-section'] ) ) ) { + echo json_encode( array( 'status' => 'success', 'action' => 'reload' ) ); + die (); + } + + include_once( 'core/enqueue.php' ); + $enqueue = new reduxCoreEnqueue ( $redux ); + $enqueue->get_warnings_and_errors_array(); + + include_once( 'core/panel.php' ); + $panel = new reduxCorePanel ( $redux ); + ob_start(); + $panel->notification_bar(); + $notification_bar = ob_get_contents(); + ob_end_clean(); + + $success = array( + 'status' => 'success', + 'options' => $redux->options, + 'errors' => isset ( $redux->localize_data['errors'] ) ? $redux->localize_data['errors'] : null, + 'warnings' => isset ( $redux->localize_data['warnings'] ) ? $redux->localize_data['warnings'] : null, + 'notification_bar' => $notification_bar + ); + + + echo json_encode( $success ); + } catch ( Exception $e ) { + echo json_encode( array( 'status' => $e->getMessage() ) ); + } + } else { + echo json_encode( array( 'status' => __( 'Your panel has no fields. Nothing to save.', 'legacy_framework' ) ) ); + } + } + if ( isset ( $this->transients['run_compiler'] ) && $this->transients['run_compiler'] ) { + + $this->no_output = true; + $this->_enqueue_output(); + + + /** + * action 'redux-compiler-{opt_name}' + * + * @deprecated + * + * @param array options + * @param string CSS that get sent to the compiler hook + */ + do_action( "redux-compiler-{$this->args['opt_name']}", $this->options, $this->compilerCSS, $this->transients['changed_values'] ); // REMOVE + + /** + * action 'redux/options/{opt_name}/compiler' + * + * @param array options + * @param string CSS that get sent to the compiler hook + */ + do_action( "redux/options/{$this->args['opt_name']}/compiler", $this->options, $this->compilerCSS, $this->transients['changed_values'] ); + + /** + * action 'redux/options/{opt_name}/compiler/advanced' + * + * @param array options + * @param string CSS that get sent to the compiler hook, which sends the full Redux object + */ + do_action( "redux/options/{$this->args['opt_name']}/compiler/advanced", $this ); + + unset ( $this->transients['run_compiler'] ); + $this->set_transients(); + } + + die (); + } + + /** + * Validate values from options form (used in settings api validate function) + * calls the custom validation class for the field so authors can override with custom classes + * + * @since 1.0.0 + * @access public + * + * @param array $plugin_options + * @param array $options + * + * @return array $plugin_options + */ + public function _validate_values( $plugin_options, $options, $sections ) { + foreach ( $sections as $k => $section ) { + if ( isset ( $section['fields'] ) ) { + foreach ( $section['fields'] as $fkey => $field ) { + + if ( is_array( $field ) ) { + $field['section_id'] = $k; + } + + if ( isset ( $field['type'] ) && ( $field['type'] == 'checkbox' || $field['type'] == 'checkbox_hide_below' || $field['type'] == 'checkbox_hide_all' ) ) { + if ( ! isset ( $plugin_options[ $field['id'] ] ) ) { + $plugin_options[ $field['id'] ] = 0; + } + } + + // Default 'not_empty 'flag to false. + $isNotEmpty = false; + + // Make sure 'validate' field is set. + if ( isset ( $field['validate'] ) ) { + + // Make sure 'validate field' is set to 'not_empty' or 'email_not_empty' + if ( $field['validate'] == 'not_empty' || $field['validate'] == 'email_not_empty' || $field['validate'] == 'numeric_not_empty' ) { + + // Set the flag. + $isNotEmpty = true; + } + } + + // Check for empty id value + + if ( ! isset ( $field['id'] ) || ! isset ( $plugin_options[ $field['id'] ] ) || ( isset ( $plugin_options[ $field['id'] ] ) && $plugin_options[ $field['id'] ] == '' ) ) { + + // If we are looking for an empty value, in the case of 'not_empty' + // then we need to keep processing. + if ( ! $isNotEmpty ) { + + // Empty id and not checking for 'not_empty. Bail out... + continue; + } + } + + // Force validate of custom field types + if ( isset ( $field['type'] ) && ! isset ( $field['validate'] ) ) { + if ( $field['type'] == 'color' || $field['type'] == 'color_gradient' ) { + $field['validate'] = 'color'; + } elseif ( $field['type'] == 'date' ) { + $field['validate'] = 'date'; + } + } + + if ( isset ( $field['validate'] ) ) { + $validate = 'Redux_Validation_' . $field['validate']; + + if ( ! class_exists( $validate ) ) { + /** + * filter 'redux-validateclass-load' + * + * @deprecated + * + * @param string validation class file path + * @param string $validate validation class name + */ + $class_file = apply_filters( "redux-validateclass-load", self::$_dir . "inc/validation/{$field['validate']}/validation_{$field['validate']}.php", $validate ); // REMOVE LATER + + /** + * filter 'redux/validate/{opt_name}/class/{field.validate}' + * + * @param string validation class file path + * @param string $class_file validation class file path + */ + $class_file = apply_filters( "redux/validate/{$this->args['opt_name']}/class/{$field['validate']}", self::$_dir . "inc/validation/{$field['validate']}/validation_{$field['validate']}.php", $class_file ); + + if ( $class_file ) { + if ( file_exists( $class_file ) ) { + require_once( $class_file ); + } + } + } + + if ( class_exists( $validate ) ) { + + //!DOVY - DB saving stuff. Is this right? + if ( empty ( $options[ $field['id'] ] ) ) { + $options[ $field['id'] ] = ''; + } + + if ( isset ( $plugin_options[ $field['id'] ] ) && is_array( $plugin_options[ $field['id'] ] ) && ! empty ( $plugin_options[ $field['id'] ] ) ) { + foreach ( $plugin_options[ $field['id'] ] as $key => $value ) { + $before = $after = null; + if ( isset ( $plugin_options[ $field['id'] ][ $key ] ) && ( ! empty ( $plugin_options[ $field['id'] ][ $key ] ) || $plugin_options[ $field['id'] ][ $key ] == '0' ) ) { + if ( is_array( $plugin_options[ $field['id'] ][ $key ] ) ) { + $before = $plugin_options[ $field['id'] ][ $key ]; + } else { + $before = trim( $plugin_options[ $field['id'] ][ $key ] ); + } + } + + if ( isset ( $options[ $field['id'] ][ $key ] ) && ( ! empty ( $plugin_options[ $field['id'] ][ $key ] ) || $plugin_options[ $field['id'] ][ $key ] == '0' ) ) { + $after = $options[ $field['id'] ][ $key ]; + } + + $validation = new $validate ( $this, $field, $before, $after ); + if ( ! empty ( $validation->value ) || $validation->value == '0' ) { + $plugin_options[ $field['id'] ][ $key ] = $validation->value; + } else { + unset ( $plugin_options[ $field['id'] ][ $key ] ); + } + + if ( isset ( $validation->error ) ) { + $this->errors[] = $validation->error; + } + + if ( isset ( $validation->warning ) ) { + $this->warnings[] = $validation->warning; + } + } + } else { + if ( is_array( $plugin_options[ $field['id'] ] ) ) { + $pofi = $plugin_options[ $field['id'] ]; + } else { + $pofi = trim( $plugin_options[ $field['id'] ] ); + } + + $validation = new $validate ( $this, $field, $pofi, $options[ $field['id'] ] ); + $plugin_options[ $field['id'] ] = $validation->value; + + if ( isset ( $validation->error ) ) { + $this->errors[] = $validation->error; + } + + if ( isset ( $validation->warning ) ) { + $this->warnings[] = $validation->warning; + } + } + + continue; + } + } + if ( isset ( $field['validate_callback'] ) && ( is_callable( $field['validate_callback'] ) || ( is_string( $field['validate_callback'] ) && function_exists( $field['validate_callback'] ) ) ) ) { + $callback = $field['validate_callback']; + unset ( $field['validate_callback'] ); + + $callbackvalues = call_user_func( $callback, $field, $plugin_options[ $field['id'] ], $options[ $field['id'] ] ); + $plugin_options[ $field['id'] ] = $callbackvalues['value']; + + if ( isset ( $callbackvalues['error'] ) ) { + $this->errors[] = $callbackvalues['error']; + } + // TODO - This warning message is failing. Hmm. + if ( isset ( $callbackvalues['warning'] ) ) { + $this->warnings[] = $callbackvalues['warning']; + } + } + } + } + } + + return $plugin_options; + } + + /** + * Return Section Menu HTML + * + * @since 3.1.5 + * @access public + * @return void + */ + public function section_menu( $k, $section, $suffix = "", $sections = array() ) { + $display = true; + + $section['class'] = isset ( $section['class'] ) ? ' ' . $section['class'] : ''; + + if ( isset ( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) { + if ( isset ( $section['panel'] ) && $section['panel'] == false ) { + $display = false; + } + } + + if ( ! $display ) { + return ""; + } + + if ( empty ( $sections ) ) { + $sections = $this->sections; + } + + $string = ""; + if ( ( isset ( $this->args['icon_type'] ) && $this->args['icon_type'] == 'image' ) || ( isset ( $section['icon_type'] ) && $section['icon_type'] == 'image' ) ) { + //if( !empty( $this->args['icon_type'] ) && $this->args['icon_type'] == 'image' ) { + $icon = ( ! isset ( $section['icon'] ) ) ? '' : ' '; + } else { + if ( ! empty ( $section['icon_class'] ) ) { + $icon_class = ' ' . $section['icon_class']; + } elseif ( ! empty ( $this->args['default_icon_class'] ) ) { + $icon_class = ' ' . $this->args['default_icon_class']; + } else { + $icon_class = ''; + } + $icon = ( ! isset ( $section['icon'] ) ) ? ' ' : ' '; + } + if ( strpos( $icon, 'el-icon-' ) !== false ) { + $icon = str_replace( 'el-icon-', 'el el-', $icon ); + } + + $hide_section = ''; + if ( isset ( $section['hidden'] ) ) { + $hide_section = ( $section['hidden'] == true ) ? ' hidden ' : ''; + } + + $canBeSubSection = ( $k > 0 && ( ! isset ( $sections[ ( $k ) ]['type'] ) || $sections[ ( $k ) ]['type'] != "divide" ) ) ? true : false; + + if ( ! $canBeSubSection && isset ( $section['subsection'] ) && $section['subsection'] == true ) { + unset ( $section['subsection'] ); + } + + if ( isset ( $section['type'] ) && $section['type'] == "divide" ) { + $string .= '
  •  
  • '; + } else if ( ! isset ( $section['subsection'] ) || $section['subsection'] != true ) { + + // DOVY! REPLACE $k with $section['ID'] when used properly. + //$active = ( ( is_numeric($this->current_tab) && $this->current_tab == $k ) || ( !is_numeric($this->current_tab) && $this->current_tab === $k ) ) ? ' active' : ''; + $subsections = ( isset ( $sections[ ( $k + 1 ) ] ) && isset ( $sections[ ( $k + 1 ) ]['subsection'] ) && $sections[ ( $k + 1 ) ]['subsection'] == true ) ? true : false; + $subsectionsClass = $subsections ? ' hasSubSections' : ''; + $subsectionsClass .= ( ! isset ( $section['fields'] ) || empty ( $section['fields'] ) ) ? ' empty_section' : ''; + $extra_icon = $subsections ? ' ' : ''; + $string .= ''; + } + + return $string; + } +// section_menu() + + /** + * HTML OUTPUT. + * + * @since 1.0.0 + * @access public + * @return void + */ + public function generate_panel() { + include_once( 'core/panel.php' ); + $panel = new reduxCorePanel ( $this ); + $panel->init(); + $this->set_transients(); + } + + /** + * Section HTML OUTPUT. + * + * @since 1.0.0 + * @access public + * + * @param array $section + * + * @return void + */ + public function _section_desc( $section ) { + $id = trim( rtrim( $section['id'], '_section' ), $this->args['opt_name'] ); + + if ( isset ( $this->sections[ $id ]['desc'] ) && ! empty ( $this->sections[ $id ]['desc'] ) ) { + echo '
    ' . $this->sections[ $id ]['desc'] . '
    '; + } + } + + /** + * Field HTML OUTPUT. + * Gets option from options array, then calls the specific field type class - allows extending by other devs + * + * @since 1.0.0 + * + * @param array $field + * @param string $v + * + * @return void + */ + public function _field_input( $field, $v = null ) { + + if ( isset ( $field['callback'] ) && ( is_callable( $field['callback'] ) || ( is_string( $field['callback'] ) && function_exists( $field['callback'] ) ) ) ) { + + $value = ( isset ( $this->options[ $field['id'] ] ) ) ? $this->options[ $field['id'] ] : ''; + + /** + * action 'redux-before-field-{opt_name}' + * + * @deprecated + * + * @param array $field field data + * @param string $value field.id + */ + do_action( "redux-before-field-{$this->args['opt_name']}", $field, $value ); // REMOVE + + /** + * action 'redux/field/{opt_name}/{field.type}/callback/before' + * + * @param array $field field data + * @param string $value field.id + */ + do_action( "redux/field/{$this->args['opt_name']}/{$field['type']}/callback/before", $field, $value ); + + /** + * action 'redux/field/{opt_name}/callback/before' + * + * @param array $field field data + * @param string $value field.id + */ + do_action( "redux/field/{$this->args['opt_name']}/callback/before", $field, $value ); + + call_user_func( $field['callback'], $field, $value ); + + + /** + * action 'redux-after-field-{opt_name}' + * + * @deprecated + * + * @param array $field field data + * @param string $value field.id + */ + do_action( "redux-after-field-{$this->args['opt_name']}", $field, $value ); // REMOVE + + /** + * action 'redux/field/{opt_name}/{field.type}/callback/after' + * + * @param array $field field data + * @param string $value field.id + */ + do_action( "redux/field/{$this->args['opt_name']}/{$field['type']}/callback/after", $field, $value ); + + /** + * action 'redux/field/{opt_name}/callback/after' + * + * @param array $field field data + * @param string $value field.id + */ + do_action( "redux/field/{$this->args['opt_name']}/callback/after", $field, $value ); + + return; + } + + if ( isset ( $field['type'] ) ) { + + // If the field is set not to display in the panel + $display = true; + if ( isset ( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) { + if ( isset ( $field['panel'] ) && $field['panel'] == false ) { + $display = false; + } + } + + if ( ! $display ) { + return; + } + + $field_class = "ReduxFramework_{$field['type']}"; + + if ( ! class_exists( $field_class ) ) { +// $class_file = apply_filters( 'redux/field/class/'.$field['type'], self::$_dir . 'inc/fields/' . $field['type'] . '/field_' . $field['type'] . '.php', $field ); // REMOVE + /** + * filter 'redux/{opt_name}/field/class/{field.type}' + * + * @param string field class file path + * @param array $field field data + */ + $class_file = apply_filters( "redux/{$this->args['opt_name']}/field/class/{$field['type']}", self::$_dir . "inc/fields/{$field['type']}/field_{$field['type']}.php", $field ); + + if ( $class_file ) { + if ( file_exists( $class_file ) ) { + require_once( $class_file ); + } + } + } + + if ( class_exists( $field_class ) ) { + $value = isset ( $this->options[ $field['id'] ] ) ? $this->options[ $field['id'] ] : ''; + + if ( $v !== null ) { + $value = $v; + } + + /** + * action 'redux-before-field-{opt_name}' + * + * @deprecated + * + * @param array $field field data + * @param string $value field id + */ + do_action( "redux-before-field-{$this->args['opt_name']}", $field, $value ); // REMOVE + + /** + * action 'redux/field/{opt_name}/{field.type}/render/before' + * + * @param array $field field data + * @param string $value field id + */ + do_action( "redux/field/{$this->args['opt_name']}/{$field['type']}/render/before", $field, $value ); + + /** + * action 'redux/field/{$this->args['opt_name']}/render/before' + * + * @param array $field field data + * @param string $value field id + */ + do_action( "redux/field/{$this->args['opt_name']}/render/before", $field, $value ); + + if ( ! isset ( $field['name_suffix'] ) ) { + $field['name_suffix'] = ""; + } + + $render = new $field_class ( $field, $value, $this ); + ob_start(); + + $render->render(); + + /* + + echo "
    ";
    +                      print_r($value);
    +                      echo "
    "; + */ + + /** + * filter 'redux-field-{opt_name}' + * + * @deprecated + * + * @param string rendered field markup + * @param array $field field data + */ + $_render = apply_filters( "redux-field-{$this->args['opt_name']}", ob_get_contents(), $field ); // REMOVE + + /** + * filter 'redux/field/{opt_name}/{field.type}/render/after' + * + * @param string rendered field markup + * @param array $field field data + */ + $_render = apply_filters( "redux/field/{$this->args['opt_name']}/{$field['type']}/render/after", $_render, $field ); + + /** + * filter 'redux/field/{opt_name}/render/after' + * + * @param string rendered field markup + * @param array $field field data + */ + $_render = apply_filters( "redux/field/{$this->args['opt_name']}/render/after", $_render, $field ); + + ob_end_clean(); + + //save the values into a unique array in case we need it for dependencies + $this->fieldsValues[ $field['id'] ] = ( isset ( $value['url'] ) && is_array( $value ) ) ? $value['url'] : $value; + + //create default data und class string and checks the dependencies of an object + $class_string = ''; + $data_string = ''; + + $this->check_dependencies( $field ); + + /** + * action 'redux/field/{opt_name}/{field.type}/fieldset/before/{opt_name}' + * + * @param array $field field data + * @param string $value field id + */ + do_action( "redux/field/{$this->args['opt_name']}/{$field['type']}/fieldset/before/{$this->args['opt_name']}", $field, $value ); + + /** + * action 'redux/field/{opt_name}/fieldset/before/{opt_name}' + * + * @param array $field field data + * @param string $value field id + */ + do_action( "redux/field/{$this->args['opt_name']}/fieldset/before/{$this->args['opt_name']}", $field, $value ); + + //if ( ! isset( $field['fields'] ) || empty( $field['fields'] ) ) { + $hidden = ''; + if ( isset ( $field['hidden'] ) && $field['hidden'] ) { + $hidden = 'hidden '; + } + + if ( isset( $field['full_width'] ) && $field['full_width'] == true ) { + $class_string .= "redux_remove_th"; + } + + echo '
    '; + //} + + echo $_render; + + if ( ! empty ( $field['desc'] ) ) { + $field['description'] = $field['desc']; + } + + echo ( isset ( $field['description'] ) && $field['type'] != "info" && $field['type'] !== "section" && ! empty ( $field['description'] ) ) ? '
    ' . $field['description'] . '
    ' : ''; + + //if ( ! isset( $field['fields'] ) || empty( $field['fields'] ) ) { + echo '
    '; + //} + + /** + * action 'redux-after-field-{opt_name}' + * + * @deprecated + * + * @param array $field field data + * @param string $value field id + */ + do_action( "redux-after-field-{$this->args['opt_name']}", $field, $value ); // REMOVE + + /** + * action 'redux/field/{opt_name}/{field.type}/fieldset/after/{opt_name}' + * + * @param array $field field data + * @param string $value field id + */ + do_action( "redux/field/{$this->args['opt_name']}/{$field['type']}/fieldset/after/{$this->args['opt_name']}", $field, $value ); + + /** + * action 'redux/field/{opt_name}/fieldset/after/{opt_name}' + * + * @param array $field field data + * @param string $value field id + */ + do_action( "redux/field/{$this->args['opt_name']}/fieldset/after/{$this->args['opt_name']}", $field, $value ); + } + } + } +// _field_input() + + /** + * Can Output CSS + * Check if a field meets its requirements before outputting to CSS + * + * @param $field + * + * @return bool + */ + public function _can_output_css( $field ) { + $return = true; + + $field = apply_filters( "redux/field/{$this->args['opt_name']}/_can_output_css", $field ); + if ( isset ( $field['force_output'] ) && $field['force_output'] == true ) { + return $return; + } + + if ( ! empty ( $field['required'] ) ) { + if ( isset ( $field['required'][0] ) ) { + if ( ! is_array( $field['required'][0] ) && count( $field['required'] ) == 3 ) { + $parentValue = $GLOBALS[ $this->args['global_variable'] ][ $field['required'][0] ]; + $checkValue = $field['required'][2]; + $operation = $field['required'][1]; + $return = $this->compareValueDependencies( $parentValue, $checkValue, $operation ); + } else if ( is_array( $field['required'][0] ) ) { + foreach ( $field['required'] as $required ) { + if ( ! is_array( $required[0] ) && count( $required ) == 3 ) { + $parentValue = $GLOBALS[ $this->args['global_variable'] ][ $required[0] ]; + $checkValue = $required[2]; + $operation = $required[1]; + $return = $this->compareValueDependencies( $parentValue, $checkValue, $operation ); + } + if ( ! $return ) { + return $return; + } + } + } + } + } + + return $return; + } +// _can_output_css + + /** + * Checks dependencies between objects based on the $field['required'] array + * If the array is set it needs to have exactly 3 entries. + * The first entry describes which field should be monitored by the current field. eg: "content" + * The second entry describes the comparison parameter. eg: "equals, not, is_larger, is_smaller ,contains" + * The third entry describes the value that we are comparing against. + * Example: if the required array is set to array('content','equals','Hello World'); then the current + * field will only be displayed if the field with id "content" has exactly the value "Hello World" + * + * @param array $field + * + * @return array $params + */ + public function check_dependencies( $field ) { + //$params = array('data_string' => "", 'class_string' => ""); + + if ( ! empty ( $field['required'] ) ) { + + //$this->folds[$field['id']] = $this->folds[$field['id']] ? $this->folds[$field['id']] : array(); + if ( ! isset ( $this->required_child[ $field['id'] ] ) ) { + $this->required_child[ $field['id'] ] = array(); + } + + if ( ! isset ( $this->required[ $field['id'] ] ) ) { + $this->required[ $field['id'] ] = array(); + } + + if ( is_array( $field['required'][0] ) ) { + foreach ( $field['required'] as $value ) { + if ( is_array( $value ) && count( $value ) == 3 ) { + $data = array(); + $data['parent'] = $value[0]; + $data['operation'] = $value[1]; + $data['checkValue'] = $value[2]; + + $this->required[ $data['parent'] ][ $field['id'] ][] = $data; + + if ( ! in_array( $data['parent'], $this->required_child[ $field['id'] ] ) ) { + $this->required_child[ $field['id'] ][] = $data; + } + + $this->checkRequiredDependencies( $field, $data ); + } + } + } else { + $data = array(); + $data['parent'] = $field['required'][0]; + $data['operation'] = $field['required'][1]; + $data['checkValue'] = $field['required'][2]; + + $this->required[ $data['parent'] ][ $field['id'] ][] = $data; + + if ( ! in_array( $data['parent'], $this->required_child[ $field['id'] ] ) ) { + $this->required_child[ $field['id'] ][] = $data; + } + + $this->checkRequiredDependencies( $field, $data ); + } + } + //return $params; + } + + // Compare data for required field + private function compareValueDependencies( $parentValue, $checkValue, $operation ) { + $return = false; + switch ( $operation ) { + case '=': + case 'equals': + $data['operation'] = "="; + + if ( is_array( $parentValue ) ) { + foreach ( $parentValue as $idx => $val ) { + if ( is_array( $checkValue ) ) { + foreach ( $checkValue as $i => $v ) { + if ( $val == $v ) { + $return = true; + } + } + } else { + if ( $val == $checkValue ) { + $return = true; + } + } + } + } else { + if ( is_array( $checkValue ) ) { + foreach ( $checkValue as $i => $v ) { + if ( $parentValue == $v ) { + $return = true; + } + } + } else { + if ( $parentValue == $checkValue ) { + $return = true; + } + } + } + break; + + case '!=': + case 'not': + $data['operation'] = "!=="; + if ( is_array( $parentValue ) ) { + foreach ( $parentValue as $idx => $val ) { + if ( is_array( $checkValue ) ) { + foreach ( $checkValue as $i => $v ) { + if ( $val != $v ) { + $return = true; + } + } + } else { + if ( $val != $checkValue ) { + $return = true; + } + } + } + } else { + if ( is_array( $checkValue ) ) { + foreach ( $checkValue as $i => $v ) { + if ( $parentValue != $v ) { + $return = true; + } + } + } else { + if ( $parentValue != $checkValue ) { + $return = true; + } + } + } + +// if ( is_array( $checkValue ) ) { +// if ( ! in_array( $parentValue, $checkValue ) ) { +// $return = true; +// } +// } else { +// if ( $parentValue != $checkValue ) { +// $return = true; +// } else if ( is_array( $parentValue ) ) { +// if ( ! in_array( $checkValue, $parentValue ) ) { +// $return = true; +// } +// } +// } + break; + case '>': + case 'greater': + case 'is_larger': + $data['operation'] = ">"; + if ( $parentValue > $checkValue ) { + $return = true; + } + break; + case '>=': + case 'greater_equal': + case 'is_larger_equal': + $data['operation'] = ">="; + if ( $parentValue >= $checkValue ) { + $return = true; + } + break; + case '<': + case 'less': + case 'is_smaller': + $data['operation'] = "<"; + if ( $parentValue < $checkValue ) { + $return = true; + } + break; + case '<=': + case 'less_equal': + case 'is_smaller_equal': + $data['operation'] = "<="; + if ( $parentValue <= $checkValue ) { + $return = true; + } + break; + case 'contains': + if ( is_array( $parentValue ) ) { + $parentValue = implode( ',', $parentValue ); + } + + if ( is_array( $checkValue ) ) { + foreach ( $checkValue as $idx => $opt ) { + if ( strpos( $parentValue, $opt ) !== false ) { + $return = true; + } + } + } else { + if ( strpos( $parentValue, $checkValue ) !== false ) { + $return = true; + } + } + + break; + case 'doesnt_contain': + case 'not_contain': + if ( is_array( $parentValue ) ) { + $parentValue = implode( ',', $parentValue ); + } + + if ( is_array( $checkValue ) ) { + foreach ( $checkValue as $idx => $opt ) { + if ( strpos( $parentValue, $opt ) === false ) { + $return = true; + } + } + } else { + if ( strpos( $parentValue, $checkValue ) === false ) { + $return = true; + } + } + + break; + case 'is_empty_or': + if ( empty ( $parentValue ) || $parentValue == $checkValue ) { + $return = true; + } + break; + case 'not_empty_and': + if ( ! empty ( $parentValue ) && $parentValue != $checkValue ) { + $return = true; + } + break; + case 'is_empty': + case 'empty': + case '!isset': + if ( empty ( $parentValue ) || $parentValue == "" || $parentValue == null ) { + $return = true; + } + break; + case 'not_empty': + case '!empty': + case 'isset': + if ( ! empty ( $parentValue ) && $parentValue != "" && $parentValue != null ) { + $return = true; + } + break; + } + + return $return; + } + + private function checkRequiredDependencies( $field, $data ) { + //required field must not be hidden. otherwise hide this one by default + + if ( ! in_array( $data['parent'], $this->fieldsHidden ) && ( ! isset ( $this->folds[ $field['id'] ] ) || $this->folds[ $field['id'] ] != "hide" ) ) { + if ( isset ( $this->options[ $data['parent'] ] ) ) { + //echo $data['parent']; + $return = $this->compareValueDependencies( $this->options[ $data['parent'] ], $data['checkValue'], $data['operation'] ); + //$return = $this->compareValueDependencies( $data['parent'], $data['checkValue'], $data['operation'] ); + } + } + + if ( ( isset ( $return ) && $return ) && ( ! isset ( $this->folds[ $field['id'] ] ) || $this->folds[ $field['id'] ] != "hide" ) ) { + $this->folds[ $field['id'] ] = "show"; + } else { + $this->folds[ $field['id'] ] = "hide"; + if ( ! in_array( $field['id'], $this->fieldsHidden ) ) { + $this->fieldsHidden[] = $field['id']; + } + } + } + + /** + * converts an array into a html data string + * + * @param array $data example input: array('id'=>'true') + * + * @return string $data_string example output: data-id='true' + */ + public function create_data_string( $data = array() ) { + $data_string = ""; + + foreach ( $data as $key => $value ) { + if ( is_array( $value ) ) { + $value = implode( "|", $value ); + } + $data_string .= " data-$key='$value' "; + } + + return $data_string; + } + } + + // ReduxFramework + + /** + * action 'redux/init' + * + * @param null + */ + do_action( 'redux/init', ReduxFramework::init() ); + } // class_exists('ReduxFramework') diff --git a/plugins/legacy-admin/framework/core/inc/browser.php b/plugins/legacy-admin/framework/core/inc/browser.php new file mode 100644 index 000000000..99e9b695b --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/browser.php @@ -0,0 +1,1195 @@ +getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) { + * echo 'You have Firefox version 2 or greater'; + * } + * User agents sampled from: http://www.useragentstring.com/ + * Based on original work from Gary White (http://apptools.com/phptools/browser/ + * CHANGELOG: + * 2012-12-26 (v1.9c by Chris Christoff): + * + Changed vars to publics + * 2012-12-23 (v1.9b by Chris Christoff): + * + Removed the browser string return and added spacing. + * + Also removed return HTML formatting. + * 2012-12-23 (v1.9a by Chris Christoff): + * + Split user string and add formatting so we can print a nicely + * formatted user agent string + * 2010-08-20 (v1.9): + * + Added MSN Explorer Browser (legacy) + * + Added Bing/MSN Robot (Thanks Rob MacDonald) + * + Added the Android Platform (PLATFORM_ANDROID) + * + Fixed issue with Android 1.6/2.2 (Thanks Tom Hirashima) + * 2010-04-27 (v1.8): + * + Added iPad Support + * 2010-03-07 (v1.7): + * + *MAJOR* Rebuild (preg_match and other "slow" routine removal(s)) + * + Almost allof Gary's original code has been replaced + * + Large PHPUNIT testing environment created to validate new releases and additions + * + Added FreeBSD Platform + * + Added OpenBSD Platform + * + Added NetBSD Platform + * + Added SunOS Platform + * + Added OpenSolaris Platform + * + Added support of the Iceweazel Browser + * + Added isChromeFrame() call to check if chromeframe is in use + * + Moved the Opera check in front of the Firefox check due to legacy Opera User Agents + * + Added the __toString() method (Thanks Deano) + * 2009-11-15: + * + Updated the checkes for Firefox + * + Added the NOKIA platform + * + Added Checks for the NOKIA brower(s) + * 2009-11-08: + * + PHP 5.3 Support + * + Added support for BlackBerry OS and BlackBerry browser + * + Added support for the Opera Mini browser + * + Added additional documenation + * + Added support for isRobot() and isMobile() + * + Added support for Opera version 10 + * + Added support for deprecated Netscape Navigator version 9 + * + Added support for IceCat + * + Added support for Shiretoko + * 2010-04-27 (v1.8): + * + Added iPad Support + * 2009-08-18: + * + Updated to support PHP 5.3 - removed all deprecated function calls + * + Updated to remove all double quotes (") -- converted to single quotes (') + * 2009-04-27: + * + Updated the IE check to remove a typo and bug (thanks John) + * 2009-04-22: + * + Added detection for GoogleBot + * + Added detection for the W3C Validator. + * + Added detection for Yahoo! Slurp + * 2009-03-14: + * + Added detection for iPods. + * + Added Platform detection for iPhones + * + Added Platform detection for iPods + * 2009-02-16: (Rick Hale) + * + Added version detection for Android phones. + * 2008-12-09: + * + Removed unused constant + * 2008-11-07: + * + Added Google's Chrome to the detection list + * + Added isBrowser(string) to the list of functions special thanks to + * Daniel 'mavrick' Lang for the function concept (http://mavrick.id.au) + * Gary White noted: "Since browser detection is so unreliable, I am + * no longer maintaining this script. You are free to use and or + * modify/update it as you want, however the author assumes no + * responsibility for the accuracy of the detected values." + * Anyone experienced with Gary's script might be interested in these notes: + * Added class constants + * Added detection and version detection for Google's Chrome + * Updated the version detection for Amaya + * Updated the version detection for Firefox + * Updated the version detection for Lynx + * Updated the version detection for WebTV + * Updated the version detection for NetPositive + * Updated the version detection for IE + * Updated the version detection for OmniWeb + * Updated the version detection for iCab + * Updated the version detection for Safari + * Updated Safari to remove mobile devices (iPhone) + * Added detection for iPhone + * Added detection for robots + * Added detection for mobile devices + * Added detection for BlackBerry + * Removed Netscape checks (matches heavily with firefox & mozilla) + */ + + + // Exit if accessed directly + if ( ! defined( 'ABSPATH' ) ) { + exit; + } + + if ( ! class_exists( 'Browser' ) ) { + + /** + * Browser detection class + * + * @author Chris Schuld + * @since 1.0 + */ + class Browser { + public $_agent = ''; + public $_browser_name = ''; + public $_version = ''; + public $_platform = ''; + public $_os = ''; + public $_is_aol = false; + public $_is_mobile = false; + public $_is_robot = false; + public $_aol_version = ''; + + public $BROWSER_UNKNOWN = 'unknown'; + public $VERSION_UNKNOWN = 'unknown'; + + public $BROWSER_OPERA = 'Opera'; // Http://www.opera.com/ + public $BROWSER_OPERA_MINI = 'Opera Mini'; // Http://www.opera.com/mini/ + public $BROWSER_WEBTV = 'WebTV'; // Http://www.webtv.net/pc/ + public $BROWSER_IE = 'Internet Explorer'; // Http://www.microsoft.com/ie/ + public $BROWSER_POCKET_IE = 'Pocket Internet Explorer'; // Http://en.wikipedia.org/wiki/Internet_Explorer_Mobile + public $BROWSER_KONQUEROR = 'Konqueror'; // Http://www.konqueror.org/ + public $BROWSER_ICAB = 'iCab'; // Http://www.icab.de/ + public $BROWSER_OMNIWEB = 'OmniWeb'; // Http://www.omnigroup.com/applications/omniweb/ + public $BROWSER_FIREBIRD = 'Firebird'; // Http://www.ibphoenix.com/ + public $BROWSER_FIREFOX = 'Firefox'; // Http://www.mozilla.com/en-US/firefox/firefox.html + public $BROWSER_ICEWEASEL = 'Iceweasel'; // Http://www.geticeweasel.org/ + public $BROWSER_SHIRETOKO = 'Shiretoko'; // Http://wiki.mozilla.org/Projects/shiretoko + public $BROWSER_MOZILLA = 'Mozilla'; // Http://www.mozilla.com/en-US/ + public $BROWSER_AMAYA = 'Amaya'; // Http://www.w3.org/Amaya/ + public $BROWSER_LYNX = 'Lynx'; // Http://en.wikipedia.org/wiki/Lynx + public $BROWSER_SAFARI = 'Safari'; // Http://apple.com + public $BROWSER_IPHONE = 'iPhone'; // Http://apple.com + public $BROWSER_IPOD = 'iPod'; // Http://apple.com + public $BROWSER_IPAD = 'iPad'; // Http://apple.com + public $BROWSER_CHROME = 'Chrome'; // Http://www.google.com/chrome + public $BROWSER_ANDROID = 'Android'; // Http://www.android.com/ + public $BROWSER_GOOGLEBOT = 'GoogleBot'; // Http://en.wikipedia.org/wiki/Googlebot + public $BROWSER_SLURP = 'Yahoo! Slurp'; // Http://en.wikipedia.org/wiki/Yahoo!_Slurp + public $BROWSER_W3CVALIDATOR = 'W3C Validator'; // Http://validator.w3.org/ + public $BROWSER_BLACKBERRY = 'BlackBerry'; // Http://www.blackberry.com/ + public $BROWSER_ICECAT = 'IceCat'; // Http://en.wikipedia.org/wiki/GNU_IceCat + public $BROWSER_NOKIA_S60 = 'Nokia S60 OSS Browser'; // Http://en.wikipedia.org/wiki/Web_Browser_for_S60 + public $BROWSER_NOKIA = 'Nokia Browser'; // * all other WAP-based browsers on the Nokia Platform + public $BROWSER_MSN = 'MSN Browser'; // Http://explorer.msn.com/ + public $BROWSER_MSNBOT = 'MSN Bot'; // Http://search.msn.com/msnbot.htm + // Http://en.wikipedia.org/wiki/Msnbot (used for Bing as well) + + public $BROWSER_NETSCAPE_NAVIGATOR = 'Netscape Navigator'; // Http://browser.netscape.com/ (DEPRECATED) + public $BROWSER_GALEON = 'Galeon'; // Http://galeon.sourceforge.net/ (DEPRECATED) + public $BROWSER_NETPOSITIVE = 'NetPositive'; // Http://en.wikipedia.org/wiki/NetPositive (DEPRECATED) + public $BROWSER_PHOENIX = 'Phoenix'; // Http://en.wikipedia.org/wiki/History_of_Mozilla_Firefox (DEPRECATED) + + public $PLATFORM_UNKNOWN = 'unknown'; + public $PLATFORM_WINDOWS = 'Windows'; + public $PLATFORM_WINDOWS_CE = 'Windows CE'; + public $PLATFORM_APPLE = 'Apple'; + public $PLATFORM_LINUX = 'Linux'; + public $PLATFORM_OS2 = 'OS/2'; + public $PLATFORM_BEOS = 'BeOS'; + public $PLATFORM_IPHONE = 'iPhone'; + public $PLATFORM_IPOD = 'iPod'; + public $PLATFORM_IPAD = 'iPad'; + public $PLATFORM_BLACKBERRY = 'BlackBerry'; + public $PLATFORM_NOKIA = 'Nokia'; + public $PLATFORM_FREEBSD = 'FreeBSD'; + public $PLATFORM_OPENBSD = 'OpenBSD'; + public $PLATFORM_NETBSD = 'NetBSD'; + public $PLATFORM_SUNOS = 'SunOS'; + public $PLATFORM_OPENSOLARIS = 'OpenSolaris'; + public $PLATFORM_ANDROID = 'Android'; + + public $OPERATING_SYSTEM_UNKNOWN = 'unknown'; + + function Browser( $useragent = '' ) { + $this->reset(); + + if ( $useragent != '' ) { + $this->setUserAgent( $useragent ); + } else { + $this->determine(); + } + } + + /** + * Reset all properties + */ + function reset() { + $this->_agent = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : ''; + $this->_browser_name = $this->BROWSER_UNKNOWN; + $this->_version = $this->VERSION_UNKNOWN; + $this->_platform = $this->PLATFORM_UNKNOWN; + $this->_os = $this->OPERATING_SYSTEM_UNKNOWN; + $this->_is_aol = false; + $this->_is_mobile = false; + $this->_is_robot = false; + $this->_aol_version = $this->VERSION_UNKNOWN; + } + + /** + * Check to see if the specific browser is valid + * + * @param string $browserName + * + * @return True if the browser is the specified browser + */ + function isBrowser( $browserName ) { + return ( 0 == strcasecmp( $this->_browser_name, trim( $browserName ) ) ); + } + + /** + * The name of the browser. All return types are from the class contants + * + * @return string Name of the browser + */ + function getBrowser() { + return $this->_browser_name; + } + + /** + * Set the name of the browser + * + * @param $browser The name of the Browser + */ + function setBrowser( $browser ) { + return $this->_browser_name = $browser; + } + + /** + * The name of the platform. All return types are from the class contants + * + * @return string Name of the browser + */ + function getPlatform() { + return $this->_platform; + } + + /** + * Set the name of the platform + * + * @param $platform The name of the Platform + */ + function setPlatform( $platform ) { + return $this->_platform = $platform; + } + + /** + * The version of the browser. + * + * @return string Version of the browser (will only contain alpha-numeric characters and a period) + */ + function getVersion() { + return $this->_version; + } + + /** + * Set the version of the browser + * + * @param $version The version of the Browser + */ + function setVersion( $version ) { + $this->_version = preg_replace( '/[^0-9,.,a-z,A-Z-]/', '', $version ); + } + + /** + * The version of AOL. + * + * @return string Version of AOL (will only contain alpha-numeric characters and a period) + */ + function getAolVersion() { + return $this->_aol_version; + } + + /** + * Set the version of AOL + * + * @param $version The version of AOL + */ + function setAolVersion( $version ) { + $this->_aol_version = preg_replace( '/[^0-9,.,a-z,A-Z]/', '', $version ); + } + + /** + * Is the browser from AOL? + * + * @return boolean True if the browser is from AOL otherwise false + */ + function isAol() { + return $this->_is_aol; + } + + /** + * Is the browser from a mobile device? + * + * @return boolean True if the browser is from a mobile device otherwise false + */ + function isMobile() { + return $this->_is_mobile; + } + + /** + * Is the browser from a robot (ex Slurp,GoogleBot)? + * + * @return boolean True if the browser is from a robot otherwise false + */ + function isRobot() { + return $this->_is_robot; + } + + /** + * Set the browser to be from AOL + * + * @param $isAol + */ + function setAol( $isAol ) { + $this->_is_aol = $isAol; + } + + /** + * Set the Browser to be mobile + * + * @param boolean $value is the browser a mobile brower or not + */ + function setMobile( $value = true ) { + $this->_is_mobile = $value; + } + + /** + * Set the Browser to be a robot + * + * @param boolean $value is the browser a robot or not + */ + function setRobot( $value = true ) { + $this->_is_robot = $value; + } + + /** + * Get the user agent value in use to determine the browser + * + * @return string The user agent from the HTTP header + */ + function getUserAgent() { + return $this->_agent; + } + + /** + * Set the user agent value (the construction will use the HTTP header value - this will overwrite it) + * + * @param $agent_string The value for the User Agent + */ + function setUserAgent( $agent_string ) { + $this->reset(); + $this->_agent = $agent_string; + $this->determine(); + } + + /** + * Used to determine if the browser is actually "chromeframe" + * + * @since 1.7 + * @return boolean True if the browser is using chromeframe + */ + function isChromeFrame() { + return ( strpos( $this->_agent, 'chromeframe' ) !== false ); + } + + /** + * Returns a formatted string with a summary of the details of the browser. + * + * @return string formatted string with a summary of the browser + */ + function __toString() { + $text1 = $this->getUserAgent(); // Grabs the UA string + $UAline1 = substr( $text1, 0, 32 ); // The first line we print should only be the first 32 characters of the UA string + $text2 = $this->getUserAgent(); // Now we grab it again and save it to a string + $towrapUA = str_replace( $UAline1, '', $text2 ); // The rest of the printoff (other than first line) is equivalent + // to the whole string minus the part we printed off. IE + // User Agent: thefirst32charactersfromUAline1 + // the rest of it is now stored in + // $text2 to be printed off + // But we need to add spaces before each line that is split other than line 1 + $space = ''; + for ( $i = 0; $i < 25; $i ++ ) { + $space .= ' '; + } + + // Now we split the remaining string of UA ($text2) into lines that are prefixed by spaces for formatting + $wordwrapped = chunk_split( $towrapUA, 32, "\n $space" ); + + return "Platform: {$this->getPlatform()} \n" . + "Browser Name: {$this->getBrowser()} \n" . + "Browser Version: {$this->getVersion()} \n" . + "User Agent String: $UAline1 \n\t\t\t " . + "$wordwrapped"; + } + + /** + * Protected routine to calculate and determine what the browser is in use (including platform) + */ + function determine() { + $this->checkPlatform(); + $this->checkBrowsers(); + $this->checkForAol(); + } + + /** + * Protected routine to determine the browser type + * + * @return boolean True if the browser was detected otherwise false + */ + function checkBrowsers() { + return ( + // Well-known, well-used + // Special Notes: + // (1) Opera must be checked before FireFox due to the odd + // user agents used in some older versions of Opera + // (2) WebTV is strapped onto Internet Explorer so we must + // check for WebTV before IE + // (3) (deprecated) Galeon is based on Firefox and needs to be + // tested before Firefox is tested + // (4) OmniWeb is based on Safari so OmniWeb check must occur + // before Safari + // (5) Netscape 9+ is based on Firefox so Netscape checks + // before FireFox are necessary + $this->checkBrowserWebTv() || + $this->checkBrowserInternetExplorer() || + $this->checkBrowserOpera() || + $this->checkBrowserGaleon() || + $this->checkBrowserNetscapeNavigator9Plus() || + $this->checkBrowserFirefox() || + $this->checkBrowserChrome() || + $this->checkBrowserOmniWeb() || + + // Common mobile + $this->checkBrowserAndroid() || + $this->checkBrowseriPad() || + $this->checkBrowseriPod() || + $this->checkBrowseriPhone() || + $this->checkBrowserBlackBerry() || + $this->checkBrowserNokia() || + + // Common bots + $this->checkBrowserGoogleBot() || + $this->checkBrowserMSNBot() || + $this->checkBrowserSlurp() || + + // WebKit base check (post mobile and others) + $this->checkBrowserSafari() || + + // Everyone else + $this->checkBrowserNetPositive() || + $this->checkBrowserFirebird() || + $this->checkBrowserKonqueror() || + $this->checkBrowserIcab() || + $this->checkBrowserPhoenix() || + $this->checkBrowserAmaya() || + $this->checkBrowserLynx() || + + $this->checkBrowserShiretoko() || + $this->checkBrowserIceCat() || + $this->checkBrowserW3CValidator() || + $this->checkBrowserMozilla() /* Mozilla is such an open standard that you must check it last */ + ); + } + + /** + * Determine if the user is using a BlackBerry (last updated 1.7) + * + * @return boolean True if the browser is the BlackBerry browser otherwise false + */ + function checkBrowserBlackBerry() { + if ( stripos( $this->_agent, 'blackberry' ) !== false ) { + $aresult = explode( "/", stristr( $this->_agent, "BlackBerry" ) ); + $aversion = explode( ' ', $aresult[1] ); + $this->setVersion( $aversion[0] ); + $this->_browser_name = $this->BROWSER_BLACKBERRY; + $this->setMobile( true ); + + return true; + } + + return false; + } + + /** + * Determine if the user is using an AOL User Agent (last updated 1.7) + * + * @return boolean True if the browser is from AOL otherwise false + */ + function checkForAol() { + $this->setAol( false ); + $this->setAolVersion( $this->VERSION_UNKNOWN ); + + if ( stripos( $this->_agent, 'aol' ) !== false ) { + $aversion = explode( ' ', stristr( $this->_agent, 'AOL' ) ); + $this->setAol( true ); + $this->setAolVersion( preg_replace( '/[^0-9\.a-z]/i', '', $aversion[1] ) ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is the GoogleBot or not (last updated 1.7) + * + * @return boolean True if the browser is the GoogletBot otherwise false + */ + function checkBrowserGoogleBot() { + if ( stripos( $this->_agent, 'googlebot' ) !== false ) { + $aresult = explode( '/', stristr( $this->_agent, 'googlebot' ) ); + $aversion = explode( ' ', $aresult[1] ); + $this->setVersion( str_replace( ';', '', $aversion[0] ) ); + $this->_browser_name = $this->BROWSER_GOOGLEBOT; + $this->setRobot( true ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is the MSNBot or not (last updated 1.9) + * + * @return boolean True if the browser is the MSNBot otherwise false + */ + function checkBrowserMSNBot() { + if ( stripos( $this->_agent, "msnbot" ) !== false ) { + $aresult = explode( "/", stristr( $this->_agent, "msnbot" ) ); + $aversion = explode( " ", $aresult[1] ); + $this->setVersion( str_replace( ";", "", $aversion[0] ) ); + $this->_browser_name = $this->BROWSER_MSNBOT; + $this->setRobot( true ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is the W3C Validator or not (last updated 1.7) + * + * @return boolean True if the browser is the W3C Validator otherwise false + */ + function checkBrowserW3CValidator() { + if ( stripos( $this->_agent, 'W3C-checklink' ) !== false ) { + $aresult = explode( '/', stristr( $this->_agent, 'W3C-checklink' ) ); + $aversion = explode( ' ', $aresult[1] ); + $this->setVersion( $aversion[0] ); + $this->_browser_name = $this->BROWSER_W3CVALIDATOR; + + return true; + } else if ( stripos( $this->_agent, 'W3C_Validator' ) !== false ) { + // Some of the Validator versions do not delineate w/ a slash - add it back in + $ua = str_replace( "W3C_Validator ", "W3C_Validator/", $this->_agent ); + $aresult = explode( '/', stristr( $ua, 'W3C_Validator' ) ); + $aversion = explode( ' ', $aresult[1] ); + $this->setVersion( $aversion[0] ); + $this->_browser_name = $this->BROWSER_W3CVALIDATOR; + + return true; + } + + return false; + } + + /** + * Determine if the browser is the Yahoo! Slurp Robot or not (last updated 1.7) + * + * @return boolean True if the browser is the Yahoo! Slurp Robot otherwise false + */ + function checkBrowserSlurp() { + if ( stripos( $this->_agent, 'slurp' ) !== false ) { + $aresult = explode( '/', stristr( $this->_agent, 'Slurp' ) ); + $aversion = explode( ' ', $aresult[1] ); + $this->setVersion( $aversion[0] ); + $this->_browser_name = $this->BROWSER_SLURP; + $this->setRobot( true ); + $this->setMobile( false ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is Internet Explorer or not (last updated 1.7) + * + * @return boolean True if the browser is Internet Explorer otherwise false + */ + function checkBrowserInternetExplorer() { + + // Test for v1 - v1.5 IE + if ( stripos( $this->_agent, 'microsoft internet explorer' ) !== false ) { + $this->setBrowser( $this->BROWSER_IE ); + $this->setVersion( '1.0' ); + $aresult = stristr( $this->_agent, '/' ); + if ( preg_match( '/308|425|426|474|0b1/i', $aresult ) ) { + $this->setVersion( '1.5' ); + } + + return true; + // Test for versions > 1.5 + } else if ( stripos( $this->_agent, 'msie' ) !== false && stripos( $this->_agent, 'opera' ) === false ) { + // See if the browser is the odd MSN Explorer + if ( stripos( $this->_agent, 'msnb' ) !== false ) { + $aresult = explode( ' ', stristr( str_replace( ';', '; ', $this->_agent ), 'MSN' ) ); + $this->setBrowser( $this->BROWSER_MSN ); + $this->setVersion( str_replace( array( '(', ')', ';' ), '', $aresult[1] ) ); + + return true; + } + $aresult = explode( ' ', stristr( str_replace( ';', '; ', $this->_agent ), 'msie' ) ); + $this->setBrowser( $this->BROWSER_IE ); + $this->setVersion( str_replace( array( '(', ')', ';' ), '', $aresult[1] ) ); + + return true; + // Test for Pocket IE + } else if ( stripos( $this->_agent, 'mspie' ) !== false || stripos( $this->_agent, 'pocket' ) !== false ) { + $aresult = explode( ' ', stristr( $this->_agent, 'mspie' ) ); + $this->setPlatform( $this->PLATFORM_WINDOWS_CE ); + $this->setBrowser( $this->BROWSER_POCKET_IE ); + $this->setMobile( true ); + + if ( stripos( $this->_agent, 'mspie' ) !== false ) { + $this->setVersion( $aresult[1] ); + } else { + $aversion = explode( '/', $this->_agent ); + $this->setVersion( $aversion[1] ); + } + + return true; + } + + return false; + } + + /** + * Determine if the browser is Opera or not (last updated 1.7) + * + * @return boolean True if the browser is Opera otherwise false + */ + function checkBrowserOpera() { + if ( stripos( $this->_agent, 'opera mini' ) !== false ) { + $resultant = stristr( $this->_agent, 'opera mini' ); + if ( preg_match( '/\//', $resultant ) ) { + $aresult = explode( '/', $resultant ); + $aversion = explode( ' ', $aresult[1] ); + $this->setVersion( $aversion[0] ); + } else { + $aversion = explode( ' ', stristr( $resultant, 'opera mini' ) ); + $this->setVersion( $aversion[1] ); + } + $this->_browser_name = $this->BROWSER_OPERA_MINI; + $this->setMobile( true ); + + return true; + } else if ( stripos( $this->_agent, 'opera' ) !== false ) { + $resultant = stristr( $this->_agent, 'opera' ); + if ( preg_match( '/Version\/(10.*)$/', $resultant, $matches ) ) { + $this->setVersion( $matches[1] ); + } else if ( preg_match( '/\//', $resultant ) ) { + $aresult = explode( '/', str_replace( "(", " ", $resultant ) ); + $aversion = explode( ' ', $aresult[1] ); + $this->setVersion( $aversion[0] ); + } else { + $aversion = explode( ' ', stristr( $resultant, 'opera' ) ); + $this->setVersion( isset( $aversion[1] ) ? $aversion[1] : "" ); + } + $this->_browser_name = $this->BROWSER_OPERA; + + return true; + } + + return false; + } + + /** + * Determine if the browser is Chrome or not (last updated 1.7) + * + * @return boolean True if the browser is Chrome otherwise false + */ + function checkBrowserChrome() { + if ( stripos( $this->_agent, 'Chrome' ) !== false ) { + $aresult = explode( '/', stristr( $this->_agent, 'Chrome' ) ); + $aversion = explode( ' ', $aresult[1] ); + $this->setVersion( $aversion[0] ); + $this->setBrowser( $this->BROWSER_CHROME ); + + return true; + } + + return false; + } + + + /** + * Determine if the browser is WebTv or not (last updated 1.7) + * + * @return boolean True if the browser is WebTv otherwise false + */ + function checkBrowserWebTv() { + if ( stripos( $this->_agent, 'webtv' ) !== false ) { + $aresult = explode( '/', stristr( $this->_agent, 'webtv' ) ); + $aversion = explode( ' ', $aresult[1] ); + $this->setVersion( $aversion[0] ); + $this->setBrowser( $this->BROWSER_WEBTV ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is NetPositive or not (last updated 1.7) + * + * @return boolean True if the browser is NetPositive otherwise false + */ + function checkBrowserNetPositive() { + if ( stripos( $this->_agent, 'NetPositive' ) !== false ) { + $aresult = explode( '/', stristr( $this->_agent, 'NetPositive' ) ); + $aversion = explode( ' ', $aresult[1] ); + $this->setVersion( str_replace( array( '(', ')', ';' ), '', $aversion[0] ) ); + $this->setBrowser( $this->BROWSER_NETPOSITIVE ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is Galeon or not (last updated 1.7) + * + * @return boolean True if the browser is Galeon otherwise false + */ + function checkBrowserGaleon() { + if ( stripos( $this->_agent, 'galeon' ) !== false ) { + $aresult = explode( ' ', stristr( $this->_agent, 'galeon' ) ); + $aversion = explode( '/', $aresult[0] ); + $this->setVersion( $aversion[1] ); + $this->setBrowser( $this->BROWSER_GALEON ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is Konqueror or not (last updated 1.7) + * + * @return boolean True if the browser is Konqueror otherwise false + */ + function checkBrowserKonqueror() { + if ( stripos( $this->_agent, 'Konqueror' ) !== false ) { + $aresult = explode( ' ', stristr( $this->_agent, 'Konqueror' ) ); + $aversion = explode( '/', $aresult[0] ); + $this->setVersion( $aversion[1] ); + $this->setBrowser( $this->BROWSER_KONQUEROR ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is iCab or not (last updated 1.7) + * + * @return boolean True if the browser is iCab otherwise false + */ + function checkBrowserIcab() { + if ( stripos( $this->_agent, 'icab' ) !== false ) { + $aversion = explode( ' ', stristr( str_replace( '/', ' ', $this->_agent ), 'icab' ) ); + $this->setVersion( $aversion[1] ); + $this->setBrowser( $this->BROWSER_ICAB ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is OmniWeb or not (last updated 1.7) + * + * @return boolean True if the browser is OmniWeb otherwise false + */ + function checkBrowserOmniWeb() { + if ( stripos( $this->_agent, 'omniweb' ) !== false ) { + $aresult = explode( '/', stristr( $this->_agent, 'omniweb' ) ); + $aversion = explode( ' ', isset( $aresult[1] ) ? $aresult[1] : "" ); + $this->setVersion( $aversion[0] ); + $this->setBrowser( $this->BROWSER_OMNIWEB ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is Phoenix or not (last updated 1.7) + * + * @return boolean True if the browser is Phoenix otherwise false + */ + function checkBrowserPhoenix() { + if ( stripos( $this->_agent, 'Phoenix' ) !== false ) { + $aversion = explode( '/', stristr( $this->_agent, 'Phoenix' ) ); + $this->setVersion( $aversion[1] ); + $this->setBrowser( $this->BROWSER_PHOENIX ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is Firebird or not (last updated 1.7) + * + * @return boolean True if the browser is Firebird otherwise false + */ + function checkBrowserFirebird() { + if ( stripos( $this->_agent, 'Firebird' ) !== false ) { + $aversion = explode( '/', stristr( $this->_agent, 'Firebird' ) ); + $this->setVersion( $aversion[1] ); + $this->setBrowser( $this->BROWSER_FIREBIRD ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is Netscape Navigator 9+ or not (last updated 1.7) + * NOTE: (http://browser.netscape.com/ - Official support ended on March 1st, 2008) + * + * @return boolean True if the browser is Netscape Navigator 9+ otherwise false + */ + function checkBrowserNetscapeNavigator9Plus() { + if ( stripos( $this->_agent, 'Firefox' ) !== false && preg_match( '/Navigator\/([^ ]*)/i', $this->_agent, $matches ) ) { + $this->setVersion( $matches[1] ); + $this->setBrowser( $this->BROWSER_NETSCAPE_NAVIGATOR ); + + return true; + } else if ( stripos( $this->_agent, 'Firefox' ) === false && preg_match( '/Netscape6?\/([^ ]*)/i', $this->_agent, $matches ) ) { + $this->setVersion( $matches[1] ); + $this->setBrowser( $this->BROWSER_NETSCAPE_NAVIGATOR ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is Shiretoko or not (https://wiki.mozilla.org/Projects/shiretoko) (last updated 1.7) + * + * @return boolean True if the browser is Shiretoko otherwise false + */ + function checkBrowserShiretoko() { + if ( stripos( $this->_agent, 'Mozilla' ) !== false && preg_match( '/Shiretoko\/([^ ]*)/i', $this->_agent, $matches ) ) { + $this->setVersion( $matches[1] ); + $this->setBrowser( $this->BROWSER_SHIRETOKO ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is Ice Cat or not (http://en.wikipedia.org/wiki/GNU_IceCat) (last updated 1.7) + * + * @return boolean True if the browser is Ice Cat otherwise false + */ + function checkBrowserIceCat() { + if ( stripos( $this->_agent, 'Mozilla' ) !== false && preg_match( '/IceCat\/([^ ]*)/i', $this->_agent, $matches ) ) { + $this->setVersion( $matches[1] ); + $this->setBrowser( $this->BROWSER_ICECAT ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is Nokia or not (last updated 1.7) + * + * @return boolean True if the browser is Nokia otherwise false + */ + function checkBrowserNokia() { + if ( preg_match( "/Nokia([^\/]+)\/([^ SP]+)/i", $this->_agent, $matches ) ) { + $this->setVersion( $matches[2] ); + if ( stripos( $this->_agent, 'Series60' ) !== false || strpos( $this->_agent, 'S60' ) !== false ) { + $this->setBrowser( $this->BROWSER_NOKIA_S60 ); + } else { + $this->setBrowser( $this->BROWSER_NOKIA ); + } + $this->setMobile( true ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is Firefox or not (last updated 1.7) + * + * @return boolean True if the browser is Firefox otherwise false + */ + function checkBrowserFirefox() { + if ( stripos( $this->_agent, 'safari' ) === false ) { + if ( preg_match( "/Firefox[\/ \(]([^ ;\)]+)/i", $this->_agent, $matches ) ) { + $this->setVersion( $matches[1] ); + $this->setBrowser( $this->BROWSER_FIREFOX ); + + return true; + } else if ( preg_match( "/Firefox$/i", $this->_agent, $matches ) ) { + $this->setVersion( "" ); + $this->setBrowser( $this->BROWSER_FIREFOX ); + + return true; + } + } + + return false; + } + + /** + * Determine if the browser is Firefox or not (last updated 1.7) + * + * @return boolean True if the browser is Firefox otherwise false + */ + function checkBrowserIceweasel() { + if ( stripos( $this->_agent, 'Iceweasel' ) !== false ) { + $aresult = explode( '/', stristr( $this->_agent, 'Iceweasel' ) ); + $aversion = explode( ' ', $aresult[1] ); + $this->setVersion( $aversion[0] ); + $this->setBrowser( $this->BROWSER_ICEWEASEL ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is Mozilla or not (last updated 1.7) + * + * @return boolean True if the browser is Mozilla otherwise false + */ + function checkBrowserMozilla() { + if ( stripos( $this->_agent, 'mozilla' ) !== false && preg_match( '/rv:[0-9].[0-9][a-b]?/i', $this->_agent ) && stripos( $this->_agent, 'netscape' ) === false ) { + $aversion = explode( ' ', stristr( $this->_agent, 'rv:' ) ); + preg_match( '/rv:[0-9].[0-9][a-b]?/i', $this->_agent, $aversion ); + $this->setVersion( str_replace( 'rv:', '', $aversion[0] ) ); + $this->setBrowser( $this->BROWSER_MOZILLA ); + + return true; + } else if ( stripos( $this->_agent, 'mozilla' ) !== false && preg_match( '/rv:[0-9]\.[0-9]/i', $this->_agent ) && stripos( $this->_agent, 'netscape' ) === false ) { + $aversion = explode( '', stristr( $this->_agent, 'rv:' ) ); + $this->setVersion( str_replace( 'rv:', '', $aversion[0] ) ); + $this->setBrowser( $this->BROWSER_MOZILLA ); + + return true; + } else if ( stripos( $this->_agent, 'mozilla' ) !== false && preg_match( '/mozilla\/([^ ]*)/i', $this->_agent, $matches ) && stripos( $this->_agent, 'netscape' ) === false ) { + $this->setVersion( $matches[1] ); + $this->setBrowser( $this->BROWSER_MOZILLA ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is Lynx or not (last updated 1.7) + * + * @return boolean True if the browser is Lynx otherwise false + */ + function checkBrowserLynx() { + if ( stripos( $this->_agent, 'lynx' ) !== false ) { + $aresult = explode( '/', stristr( $this->_agent, 'Lynx' ) ); + $aversion = explode( ' ', ( isset( $aresult[1] ) ? $aresult[1] : "" ) ); + $this->setVersion( $aversion[0] ); + $this->setBrowser( $this->BROWSER_LYNX ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is Amaya or not (last updated 1.7) + * + * @return boolean True if the browser is Amaya otherwise false + */ + function checkBrowserAmaya() { + if ( stripos( $this->_agent, 'amaya' ) !== false ) { + $aresult = explode( '/', stristr( $this->_agent, 'Amaya' ) ); + $aversion = explode( ' ', $aresult[1] ); + $this->setVersion( $aversion[0] ); + $this->setBrowser( $this->BROWSER_AMAYA ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is Safari or not (last updated 1.7) + * + * @return boolean True if the browser is Safari otherwise false + */ + function checkBrowserSafari() { + if ( stripos( $this->_agent, 'Safari' ) !== false && stripos( $this->_agent, 'iPhone' ) === false && stripos( $this->_agent, 'iPod' ) === false ) { + $aresult = explode( '/', stristr( $this->_agent, 'Version' ) ); + if ( isset( $aresult[1] ) ) { + $aversion = explode( ' ', $aresult[1] ); + $this->setVersion( $aversion[0] ); + } else { + $this->setVersion( $this->VERSION_UNKNOWN ); + } + $this->setBrowser( $this->BROWSER_SAFARI ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is iPhone or not (last updated 1.7) + * + * @return boolean True if the browser is iPhone otherwise false + */ + function checkBrowseriPhone() { + if ( stripos( $this->_agent, 'iPhone' ) !== false ) { + $aresult = explode( '/', stristr( $this->_agent, 'Version' ) ); + if ( isset( $aresult[1] ) ) { + $aversion = explode( ' ', $aresult[1] ); + $this->setVersion( $aversion[0] ); + } else { + $this->setVersion( $this->VERSION_UNKNOWN ); + } + $this->setMobile( true ); + $this->setBrowser( $this->BROWSER_IPHONE ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is iPod or not (last updated 1.7) + * + * @return boolean True if the browser is iPod otherwise false + */ + function checkBrowseriPad() { + if ( stripos( $this->_agent, 'iPad' ) !== false ) { + $aresult = explode( '/', stristr( $this->_agent, 'Version' ) ); + if ( isset( $aresult[1] ) ) { + $aversion = explode( ' ', $aresult[1] ); + $this->setVersion( $aversion[0] ); + } else { + $this->setVersion( $this->VERSION_UNKNOWN ); + } + $this->setMobile( true ); + $this->setBrowser( $this->BROWSER_IPAD ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is iPod or not (last updated 1.7) + * + * @return boolean True if the browser is iPod otherwise false + */ + function checkBrowseriPod() { + if ( stripos( $this->_agent, 'iPod' ) !== false ) { + $aresult = explode( '/', stristr( $this->_agent, 'Version' ) ); + if ( isset( $aresult[1] ) ) { + $aversion = explode( ' ', $aresult[1] ); + $this->setVersion( $aversion[0] ); + } else { + $this->setVersion( $this->VERSION_UNKNOWN ); + } + $this->setMobile( true ); + $this->setBrowser( $this->BROWSER_IPOD ); + + return true; + } + + return false; + } + + /** + * Determine if the browser is Android or not (last updated 1.7) + * + * @return boolean True if the browser is Android otherwise false + */ + function checkBrowserAndroid() { + if ( stripos( $this->_agent, 'Android' ) !== false ) { + $aresult = explode( ' ', stristr( $this->_agent, 'Android' ) ); + if ( isset( $aresult[1] ) ) { + $aversion = explode( ' ', $aresult[1] ); + $this->setVersion( $aversion[0] ); + } else { + $this->setVersion( $this->VERSION_UNKNOWN ); + } + $this->setMobile( true ); + $this->setBrowser( $this->BROWSER_ANDROID ); + + return true; + } + + return false; + } + + /** + * Determine the user's platform (last updated 1.7) + */ + function checkPlatform() { + if ( stripos( $this->_agent, 'windows' ) !== false ) { + $this->_platform = $this->PLATFORM_WINDOWS; + } elseif ( stripos( $this->_agent, 'iPad' ) !== false ) { + $this->_platform = $this->PLATFORM_IPAD; + } elseif ( stripos( $this->_agent, 'iPod' ) !== false ) { + $this->_platform = $this->PLATFORM_IPOD; + } elseif ( stripos( $this->_agent, 'iPhone' ) !== false ) { + $this->_platform = $this->PLATFORM_IPHONE; + } elseif ( stripos( $this->_agent, 'mac' ) !== false ) { + $this->_platform = $this->PLATFORM_APPLE; + } elseif ( stripos( $this->_agent, 'android' ) !== false ) { + $this->_platform = $this->PLATFORM_ANDROID; + } elseif ( stripos( $this->_agent, 'linux' ) !== false ) { + $this->_platform = $this->PLATFORM_LINUX; + } elseif ( stripos( $this->_agent, 'Nokia' ) !== false ) { + $this->_platform = $this->PLATFORM_NOKIA; + } elseif ( stripos( $this->_agent, 'BlackBerry' ) !== false ) { + $this->_platform = $this->PLATFORM_BLACKBERRY; + } elseif ( stripos( $this->_agent, 'FreeBSD' ) !== false ) { + $this->_platform = $this->PLATFORM_FREEBSD; + } elseif ( stripos( $this->_agent, 'OpenBSD' ) !== false ) { + $this->_platform = $this->PLATFORM_OPENBSD; + } elseif ( stripos( $this->_agent, 'NetBSD' ) !== false ) { + $this->_platform = $this->PLATFORM_NETBSD; + } elseif ( stripos( $this->_agent, 'OpenSolaris' ) !== false ) { + $this->_platform = $this->PLATFORM_OPENSOLARIS; + } elseif ( stripos( $this->_agent, 'SunOS' ) !== false ) { + $this->_platform = $this->PLATFORM_SUNOS; + } elseif ( stripos( $this->_agent, 'OS\/2' ) !== false ) { + $this->_platform = $this->PLATFORM_OS2; + } elseif ( stripos( $this->_agent, 'BeOS' ) !== false ) { + $this->_platform = $this->PLATFORM_BEOS; + } elseif ( stripos( $this->_agent, 'win' ) !== false ) { + $this->_platform = $this->PLATFORM_WINDOWS; + } + } + } + } +?> diff --git a/plugins/legacy-admin/framework/core/inc/class.p.php b/plugins/legacy-admin/framework/core/inc/class.p.php new file mode 100644 index 000000000..0e919cf01 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/class.p.php @@ -0,0 +1,301 @@ + and +// are disabled by default, see for more information. +// callback - If specified, the response JSON will be wrapped in this named +// function call. This parameter and are disabled by +// default, see for more information. +// user_agent - This value will be sent to the remote URL request as the +// `User-Agent:` HTTP request header. If omitted, the browser user agent +// will be passed through. +// send_cookies - If send_cookies=1, all cookies will be forwarded through to +// the remote URL request. +// send_session - If send_session=1 and send_cookies=1, the SID cookie will be +// forwarded through to the remote URL request. +// full_headers - If a JSON request and full_headers=1, the JSON response will +// contain detailed header information. +// full_status - If a JSON request and full_status=1, the JSON response will +// contain detailed cURL status information, otherwise it will just contain +// the `http_code` property. +// +// Topic: POST Parameters +// +// All POST parameters are automatically passed through to the remote URL +// request. +// +// Topic: JSON requests +// +// This request will return the contents of the specified url in JSON format. +// +// Request: +// +// > ba-simple-proxy.php?url=http://example.com/ +// +// Response: +// +// > { "contents": "...", "headers": {...}, "status": {...} } +// +// JSON object properties: +// +// contents - (String) The contents of the remote URL resource. +// headers - (Object) A hash of HTTP headers returned by the remote URL +// resource. +// status - (Object) A hash of status codes returned by cURL. +// +// Topic: JSONP requests +// +// This request will return the contents of the specified url in JSONP format +// (but only if $enable_jsonp is enabled in the PHP script). +// +// Request: +// +// > ba-simple-proxy.php?url=http://example.com/&callback=foo +// +// Response: +// +// > foo({ "contents": "...", "headers": {...}, "status": {...} }) +// +// JSON object properties: +// +// contents - (String) The contents of the remote URL resource. +// headers - (Object) A hash of HTTP headers returned by the remote URL +// resource. +// status - (Object) A hash of status codes returned by cURL. +// +// Topic: Native requests +// +// This request will return the contents of the specified url in the format it +// was received in, including the same content-type and other headers (but only +// if $enable_native is enabled in the PHP script). +// +// Request: +// +// > ba-simple-proxy.php?url=http://example.com/&mode=native +// +// Response: +// +// > ... +// +// Topic: Notes +// +// * Assumes magic_quotes_gpc = Off in php.ini +// +// Topic: Configuration Options +// +// These variables can be manually edited in the PHP file if necessary. +// +// $enable_jsonp - Only enable if you really need to. If you +// install this script on the same server as the page you're calling it +// from, plain JSON will work. Defaults to false. +// $enable_native - You can enable , but you should only do +// this if you also whitelist specific URLs using $valid_url_regex, to avoid +// possible XSS vulnerabilities. Defaults to false. +// $valid_url_regex - This regex is matched against the url parameter to +// ensure that it is valid. This setting only needs to be used if either +// $enable_jsonp or $enable_native are enabled. Defaults to '/.*/' which +// validates all URLs. +// +// ############################################################################ + + + $_GET['mode'] = "native"; + $_GET['full_headers'] = 1; + $_GET['full_status'] = 1; + $_GET['send_cookies'] = 1; + + +// Change these configuration options if needed, see above descriptions for info. + $enable_jsonp = false; + $enable_native = true; + $valid_url_regex = '/.*/'; + +// ############################################################################ + $url = $_GET['url']; + + if ( isset( $_GET['nonce'] ) ) { + $url = str_replace( 'nonce=' . $_GET['nonce'] . '&', '', $url ); + } + + + if ( ! $url ) { + + // Passed url not specified. + $contents = 'ERROR: url not specified'; + $status = array( 'http_code' => 'ERROR' ); + + } else if ( ! preg_match( $valid_url_regex, $url ) ) { + + // Passed url doesn't match $valid_url_regex. + $contents = 'ERROR: invalid url'; + $status = array( 'http_code' => 'ERROR' ); + + } else { + $url = urldecode( $url ); + if ( isset( $_GET['proxy'] ) ) { + $url .= '&proxy=' . $_GET['proxy']; + } + + // Ad URL rewrite + if ( strpos( $url, 'http' ) === false ) { + $url = 'http:' . $url; + } + + if ( isset( $_GET['callback'] ) ) { + foreach ( $_GET as $key => $value ) { + if ( in_array( $key, array( 'url', 'mode', 'full_headers', 'full_status', 'send_cookies' ) ) ) { + continue; + } + $url .= "&" . $key . '=' . $value; + } + } + + + $args = array( + 'user-agent' => isset( $_GET['user_agent'] ) ? $_GET['user_agent'] : $_SERVER['HTTP_USER_AGENT'], + 'method' => 'GET', + ); + + if ( isset( $_GET['send_cookies'] ) && $_GET['send_cookies'] ) { + $cookie = array(); + foreach ( $_COOKIE as $key => $value ) { + $cookie[] = $key . '=' . $value; + } + if ( isset( $_GET['send_session'] ) && $_GET['send_session'] ) { + $cookie[] = SID; + } + $args['cookies'] = $cookie; + + } + if ( strtolower( $_SERVER['REQUEST_METHOD'] ) == 'post' ) { + $args['body'] = $_POST; + $args['method'] = 'POST'; + + } + + + $response = wp_remote_request( + $url, + $args + ); + + if ( ! is_wp_error( $response ) ) { + $status = $response['response']['code']; + $contents = $response['body']; + } + + } + + + if ( isset( $_GET['mode'] ) && $_GET['mode'] == 'native' ) { + if ( ! $enable_native ) { + $contents = 'ERROR: invalid mode'; + $status = array( 'http_code' => 'ERROR' ); + } + + if ( isset( $response['headers']['content-type'] ) ) { + header( 'Content-Type: ' . $response['headers']['content-type'] ); + } + if ( isset( $response['headers']['content-language'] ) ) { + header( 'Content-Language: ' . $response['headers']['content-language'] ); + } + if ( isset( $response['headers']['set-cookie'] ) ) { + header( 'Set-Cookie: ' . $response['headers']['set-cookie'] ); + } + + print str_replace( 'ads.reduxframework.com', 'look.reduxframework.com', $contents ); + + } else { + + // $data will be serialized into JSON data. + $data = array(); + + // Propagate all HTTP headers into the JSON data object. + if ( isset( $_GET['full_headers'] ) && $_GET['full_headers'] ) { + $data['headers'] = array(); + + } + + // Propagate all cURL request / response info to the JSON data object. + if ( isset( $_GET['full_status'] ) && $_GET['full_status'] ) { + $data['status'] = $status; + } else { + $data['status'] = array(); + $data['status']['http_code'] = $status['http_code']; + } + + // Set the JSON data object contents, decoding it from JSON if possible. + $decoded_json = json_decode( $contents ); + $data['contents'] = str_replace( 'e(window).width()', 'window.innerWidth||e(window).width()', $decoded_json ? $decoded_json : $contents ); + + // Generate appropriate content-type header. + + $is_xhr = isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) ? strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) : 'xmlhttprequest'; + header( 'Content-type: application/' . ( $is_xhr ? 'json' : 'x-javascript' ) ); + + // Get JSONP callback. + $jsonp_callback = $enable_jsonp && isset( $_GET['callback'] ) ? $_GET['callback'] : null; + + // Generate JSON/JSONP string + $json = json_encode( $data ); + + print $jsonp_callback ? "$jsonp_callback($json)" : $json; + + } + + } + } + + new Redux_P(); + diff --git a/plugins/legacy-admin/framework/core/inc/class.redux_api.php b/plugins/legacy-admin/framework/core/inc/class.redux_api.php new file mode 100644 index 000000000..2ed7e3f48 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/class.redux_api.php @@ -0,0 +1,462 @@ +{$closure}->bindTo( $this ), $args ); + } + + public function __toString() { + return call_user_func( $this->{"__toString"}->bindTo( $this ) ); + } + + public static function load() { + add_action( 'after_setup_theme', array( 'Redux', 'createRedux' ) ); + add_action( 'init', array( 'Redux', 'createRedux' ) ); + } + + public static function init( $opt_name = "" ) { + if ( ! empty( $opt_name ) ) { + self::loadRedux( $opt_name ); + remove_action( 'setup_theme', array( 'Redux', 'createRedux' ) ); + } + } + + public static function loadExtensions( $ReduxFramework ) { + if ( $instanceExtensions = self::getExtensions( $ReduxFramework->args['opt_name'], "" ) ) { + foreach ( $instanceExtensions as $name => $extension ) { + if ( ! class_exists( $extension['class'] ) ) { + // In case you wanted override your override, hah. + $extension['path'] = apply_filters( 'redux/extension/' . $ReduxFramework->args['opt_name'] . '/' . $name, $extension['path'] ); + if ( file_exists( $extension['path'] ) ) { + require_once( $extension['path'] ); + } + } + if ( ! isset( $ReduxFramework->extensions[ $name ] ) ) { + if ( class_exists( $extension['class'] ) ) { + $ReduxFramework->extensions[ $name ] = new $extension['class']( $ReduxFramework ); + } else { + echo '

    No class named ' . $extension['class'] . ' exists. Please verify your extension path.

    '; + } + + } + } + } + } + + public static function extensionPath( $extension, $folder = true ) { + if ( ! isset( Redux::$extensions[ $extension ] ) ) { + return; + } + $path = end( Redux::$extensions[ $extension ] ); + if ( ! $folder ) { + return $path; + } + + return str_replace( 'extension_' . $extension . '.php', '', $path ); + } + + + public static function loadRedux( $opt_name = "" ) { + + if ( empty( $opt_name ) ) { + return; + } + + $check = ReduxFrameworkInstances::get_instance( $opt_name ); + if ( isset( $check->apiHasRun ) ) { + return; + } + + $args = self::constructArgs( $opt_name ); + $sections = self::constructSections( $opt_name ); + if ( ! class_exists( 'ReduxFramework' ) ) { + echo '

    Redux Framework is not installed. Please install it.

    '; + + return; + } + if ( isset( self::$uses_extensions[ $opt_name ] ) && ! empty( self::$uses_extensions[ $opt_name ] ) ) { + add_action( "redux/extensions/{$opt_name}/before", array( 'Redux', 'loadExtensions' ), 0 ); + } + + $redux = new ReduxFramework( $sections, $args ); + $redux->apiHasRun = 1; + self::$init[ $opt_name ] = 1; + if ( isset( $redux->args['opt_name'] ) && $redux->args['opt_name'] != $opt_name ) { + self::$init[ $redux->args['opt_name'] ] = 1; + } + + } + + public static function createRedux() { + foreach ( self::$sections as $opt_name => $theSections ) { + if ( ! self::$init[ $opt_name ] ) { + self::loadRedux( $opt_name ); + } + } + } + + public static function constructArgs( $opt_name ) { + $args = isset( self::$args[ $opt_name ] ) ? self::$args[ $opt_name ] : array(); + + $args['opt_name'] = $opt_name; + if ( ! isset( $args['menu_title'] ) ) { + $args['menu_title'] = ucfirst( $opt_name ) . ' Options'; + } + if ( ! isset( $args['page_title'] ) ) { + $args['page_title'] = ucfirst( $opt_name ) . ' Options'; + } + if ( ! isset( $args['page_slug'] ) ) { + $args['page_slug'] = $opt_name . '_options'; + } + + return $args; + } + + public static function constructSections( $opt_name ) { + $sections = array(); + if ( ! isset( self::$sections[ $opt_name ] ) ) { + return $sections; + + } + foreach ( self::$sections[ $opt_name ] as $section_id => $section ) { + $section['fields'] = self::constructFields( $opt_name, $section_id ); + $p = $section['priority']; + while ( isset( $sections[ $p ] ) ) { + echo $p ++; + } + $sections[ $p ] = $section; + } + ksort( $sections ); + + return $sections; + } + + public static function constructFields( $opt_name = "", $section_id = "" ) { + $fields = array(); + if ( ! empty( self::$fields[ $opt_name ] ) ) { + foreach ( self::$fields[ $opt_name ] as $key => $field ) { + if ( $field['section_id'] == $section_id ) { + $p = $field['priority']; + while ( isset( $fields[ $p ] ) ) { + echo $p ++; + } + $fields[ $p ] = $field; + } + } + } + ksort( $fields ); + + return $fields; + } + + public static function getSection( $opt_name = '', $id = '' ) { + self::check_opt_name( $opt_name ); + if ( ! empty( $opt_name ) && ! empty( $id ) ) { + if ( ! isset( self::$sections[ $opt_name ][ $id ] ) ) { + $id = strtolower( sanitize_html_class( $id ) ); + } + + return isset( self::$sections[ $opt_name ][ $id ] ) ? self::$sections[ $opt_name ][ $id ] : false; + } + + return false; + } + + public static function setSections( $opt_name = '', $sections = array() ) { + self::check_opt_name( $opt_name ); + if ( ! empty( $sections ) ) { + foreach ( $sections as $section ) { + Redux::setSection( $opt_name, $section ); + } + } + } + + public static function setSection( $opt_name = '', $section = array() ) { + self::check_opt_name( $opt_name ); + if ( ! isset( $section['id'] ) ) { + $section['id'] = strtolower( sanitize_html_class( $section['title'] ) ); + if ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) ) { + $orig = $section['id']; + $i = 0; + while ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) ) { + $section['id'] = $orig . '_' . $i; + } + } + } + + if ( ! empty( $opt_name ) && is_array( $section ) && ! empty( $section ) ) { + if ( ! isset( $section['id'] ) && ! isset( $section['title'] ) ) { + self::$errors[ $opt_name ]['section']['missing_title'] = "Unable to create a section due to missing id and title."; + + return; + } + if ( ! isset( $section['priority'] ) ) { + $section['priority'] = self::getPriority( $opt_name, 'sections' ); + } + if ( isset( $section['fields'] ) ) { + if ( ! empty( $section['fields'] ) && is_array( $section['fields'] ) ) { + self::processFieldsArray( $opt_name, $section['id'], $section['fields'] ); + } + unset( $section['fields'] ); + } + self::$sections[ $opt_name ][ $section['id'] ] = $section; + } else { + self::$errors[ $opt_name ]['section']['empty'] = "Unable to create a section due an empty section array or the section variable passed was not an array."; + + return; + } + } + + public static function processFieldsArray( $opt_name = "", $section_id = "", $fields = array() ) { + if ( ! empty( $opt_name ) && ! empty( $section_id ) && is_array( $fields ) && ! empty( $fields ) ) { + foreach ( $fields as $field ) { + if ( ! is_array( $field ) ) { + continue; + } + $field['section_id'] = $section_id; + self::setField( $opt_name, $field ); + } + } + } + + public static function getField( $opt_name = '', $id = '' ) { + self::check_opt_name( $opt_name ); + if ( ! empty( $opt_name ) && ! empty( $id ) ) { + return isset( self::$fields[ $opt_name ][ $id ] ) ? self::$fields[ $opt_name ][ $id ] : false; + } + + return false; + } + + public static function setField( $opt_name = '', $field = array() ) { + self::check_opt_name( $opt_name ); + + if ( ! empty( $opt_name ) && is_array( $field ) && ! empty( $field ) ) { + + if ( ! isset( $field['priority'] ) ) { + $field['priority'] = self::getPriority( $opt_name, 'fields' ); + } + self::$fields[ $opt_name ][ $field['id'] ] = $field; + } + } + + public static function setHelpTab( $opt_name = "", $tab = array() ) { + self::check_opt_name( $opt_name ); + if ( ! empty( $opt_name ) && ! empty( $tab ) ) { + if ( ! isset( self::$args[ $opt_name ]['help_tabs'] ) ) { + self::$args[ $opt_name ]['help_tabs'] = array(); + } + if ( isset( $tab['id'] ) ) { + self::$args[ $opt_name ]['help_tabs'][] = $tab; + } else if ( is_array( end( $tab ) ) ) { + foreach ( $tab as $tab_item ) { + self::$args[ $opt_name ]['help_tabs'][] = $tab_item; + } + } + } + } + + public static function setHelpSidebar( $opt_name = "", $content = "" ) { + self::check_opt_name( $opt_name ); + if ( ! empty( $opt_name ) && ! empty( $content ) ) { + self::$args[ $opt_name ]['help_sidebar'] = $content; + } + } + + public static function setArgs( $opt_name = "", $args = array() ) { + self::check_opt_name( $opt_name ); + if ( ! empty( $opt_name ) && ! empty( $args ) && is_array( $args ) ) { + self::$args[ $opt_name ] = wp_parse_args( $args, self::$args[ $opt_name ] ); + } + } + + public static function getArgs( $opt_name = "" ) { + self::check_opt_name( $opt_name ); + if ( ! empty( $opt_name ) && ! empty( self::$args[ $opt_name ] ) ) { + return self::$args[ $opt_name ]; + } + } + + public static function getArg( $opt_name = "", $key = "" ) { + self::check_opt_name( $opt_name ); + if ( ! empty( $opt_name ) && ! empty( $key ) && ! empty( self::$args[ $opt_name ] ) ) { + return self::$args[ $opt_name ][ $key ]; + } else { + return; + } + } + + public static function getPriority( $opt_name, $type ) { + $priority = self::$priority[ $opt_name ][ $type ]; + self::$priority[ $opt_name ][ $type ] += 1; + + return $priority; + } + + public static function check_opt_name( $opt_name = "" ) { + if ( empty( $opt_name ) || is_array( $opt_name ) ) { + return; + } + if ( ! isset( self::$args[ $opt_name ] ) ) { + self::$args[ $opt_name ] = array(); + self::$priority[ $opt_name ]['args'] = 1; + } + if ( ! isset( self::$sections[ $opt_name ] ) ) { + self::$sections[ $opt_name ] = array(); + self::$priority[ $opt_name ]['sections'] = 1; + } + if ( ! isset( self::$fields[ $opt_name ] ) ) { + self::$fields[ $opt_name ] = array(); + self::$priority[ $opt_name ]['fields'] = 1; + } + if ( ! isset( self::$help[ $opt_name ] ) ) { + self::$help[ $opt_name ] = array(); + self::$priority[ $opt_name ]['help'] = 1; + } + if ( ! isset( self::$errors[ $opt_name ] ) ) { + self::$errors[ $opt_name ] = array(); + } + if ( ! isset( self::$init[ $opt_name ] ) ) { + self::$init[ $opt_name ] = false; + } + } + + /** + * Retrieve metadata from a file. Based on WP Core's get_file_data function + * + * @since 2.1.1 + * + * @param string $file Path to the file + * + * @return string + */ + public static function getFileVersion( $file, $size = 8192 ) { + // We don't need to write to the file, so just open for reading. + $fp = fopen( $file, 'r' ); + + // Pull only the first 8kiB of the file in. + $file_data = fread( $fp, $size ); + + // PHP will close file handle, but we are good citizens. + fclose( $fp ); + + // Make sure we catch CR-only line endings. + $file_data = str_replace( "\r", "\n", $file_data ); + $version = ''; + + if ( preg_match( '/^[ \t\/*#@]*' . preg_quote( '@version', '/' ) . '(.*)$/mi', $file_data, $match ) && $match[1] ) { + $version = _cleanup_header_comment( $match[1] ); + } + + return $version; + } + + public static function checkExtensionClassFile( $opt_name, $name = "", $class_file = "" ) { + if ( file_exists( $class_file ) ) { + self::$uses_extensions[ $opt_name ] = isset( self::$uses_extensions[ $opt_name ] ) ? self::$uses_extensions[ $opt_name ] : array(); + if ( ! in_array( $name, self::$uses_extensions[ $opt_name ] ) ) { + self::$uses_extensions[ $opt_name ][] = $name; + } + + self::$extensions[ $name ] = isset( self::$extensions[ $name ] ) ? self::$extensions[ $name ] : array(); + $version = self::getFileVersion( $class_file ); + self::$extensions[ $name ][ $version ] = isset( self::$extensions[ $name ][ $version ] ) ? self::$extensions[ $name ][ $version ] : $class_file; + } + } + + public static function setExtensions( $opt_name, $path ) { + if ( is_dir( $path ) ) { + $path = trailingslashit( $path ); + $folder = str_replace( '.php', '', basename( $path ) ); + if ( file_exists( $path . 'extension_' . $folder . '.php' ) ) { + self::checkExtensionClassFile( $opt_name, $folder, $path . 'extension_' . $folder . '.php' ); + } else { + $folders = scandir( $path, 1 ); + foreach ( $folders as $folder ) { + if ( $folder === '.' or $folder === '..' ) { + continue; + } + if ( file_exists( $path . $folder . '/extension_' . $folder . '.php' ) ) { + self::checkExtensionClassFile( $opt_name, $folder, $path . $folder . '/extension_' . $folder . '.php' ); + } else if ( is_dir( $path . $folder ) ) { + self::setExtensions( $opt_name, $path . $folder ); + continue; + } + } + } + } else if ( file_exists( $path ) ) { + $name = explode( 'extension_', basename( $path ) ); + if ( isset( $name[1] ) && ! empty( $name[1] ) ) { + $name = str_replace( '.php', '', $name[1] ); + self::checkExtensionClassFile( $opt_name, $name, $path ); + } + } + } + + public static function getExtensions( $opt_name = "", $key = "" ) { + if ( empty( $opt_name ) ) { + if ( empty( $key ) ) { + return self::$extension_paths[ $key ]; + } else { + if ( isset( self::$extension_paths[ $key ] ) ) { + return self::$extension_paths[ $key ]; + } + } + } else { + if ( empty( self::$uses_extensions[ $opt_name ] ) ) { + return false; + } + $instanceExtensions = array(); + foreach ( self::$uses_extensions[ $opt_name ] as $extension ) { + $class_file = end( self::$extensions[ $extension ] ); + $name = str_replace( '.php', '', basename( $extension ) ); + $extension_class = 'ReduxFramework_Extension_' . $name; + $instanceExtensions[ $extension ] = array( + 'path' => $class_file, + 'class' => $extension_class + ); + } + + return $instanceExtensions; + } + + return false; + } + } + + Redux::load(); + } diff --git a/plugins/legacy-admin/framework/core/inc/class.redux_filesystem.php b/plugins/legacy-admin/framework/core/inc/class.redux_filesystem.php new file mode 100644 index 000000000..e41075176 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/class.redux_filesystem.php @@ -0,0 +1,215 @@ +filesystem = $this; + $this->parent = $parent; + } + + public function ftp_form() { + if ( isset( $this->parent->ftp_form ) && ! empty( $this->parent->ftp_form ) ) { + echo '

    '; + echo __( 'Unable to modify required files. Please ensure that', 'legacy_framework' ); + echo ' ' . Redux_Helpers::cleanFilePath( trailingslashit( WP_CONTENT_DIR ) ) . '/uploads/ '; + echo __( 'has the proper read/write permissions or enter your FTP information below.', 'legacy_framework' ); + echo '

    ' . $this->parent->ftp_form . '
    '; + } + } + + function filesystem_init( $form_url, $method = '', $context = false, $fields = null ) { + global $wp_filesystem; + if ( ! empty( $this->creds ) ) { + return true; + } + + ob_start(); + + /* first attempt to get credentials */ + if ( false === ( $this->creds = request_filesystem_credentials( $form_url, $method, false, $context ) ) ) { + $this->creds = array(); + $this->parent->ftp_form = ob_get_contents(); + ob_end_clean(); + + /** + * if we comes here - we don't have credentials + * so the request for them is displaying + * no need for further processing + **/ + + return false; + } + + /* now we got some credentials - try to use them*/ + if ( ! WP_Filesystem( $this->creds ) ) { + $this->creds = array(); + /* incorrect connection data - ask for credentials again, now with error message */ + request_filesystem_credentials( $form_url, '', true, $context ); + $this->parent->ftp_form = ob_get_contents(); + ob_end_clean(); + + return false; + } + + return true; + } + + public function execute( $action, $file = '', $params = '' ) { + + if ( empty( $this->parent->args ) ) { + return; + } + + if ( ! empty ( $params ) ) { + extract( $params ); + } + + // Setup the filesystem with creds + require_once( ABSPATH . '/wp-admin/includes/template.php' ); + require_once( ABSPATH . '/wp-admin/includes/file.php' ); + + if ( $this->parent->args['menu_type'] == 'submenu' ) { + $page_parent = $this->parent->args['page_parent']; + $base = $page_parent . '?page=' . $this->parent->args['page_slug']; + } else { + $base = 'admin.php?page=' . $this->parent->args['page_slug']; + } + + $url = wp_nonce_url( $base, 'redux-options' ); + + $this->filesystem_init( $url, 'direct', dirname( $file ) ); + + return $this->do_action( $action, $file, $params ); + } + + public function do_action( $action, $file = '', $params = '' ) { + + if ( ! empty ( $params ) ) { + extract( $params ); + } + + global $wp_filesystem; + + if ( ! isset( $params['chmod'] ) || ( isset( $params['chmod'] ) && empty( $params['chmod'] ) ) ) { + if ( defined( 'FS_CHMOD_FILE' ) ) { + $chmod = FS_CHMOD_FILE; + } else { + $chmod = 0644; + } + } + $res = false; + if ( ! isset( $recursive ) ) { + $recursive = false; + } + + //$target_dir = $wp_filesystem->find_folder( dirname( $file ) ); + + // Do unique stuff + if ( $action == 'mkdir' ) { + + if ( defined( 'FS_CHMOD_DIR' ) ) { + $chmod = FS_CHMOD_DIR; + } else { + $chmod = 0755; + } + $res = $wp_filesystem->mkdir( $file ); + if ( ! $res ) { + wp_mkdir_p( $file ); + + $res = file_exists( $file ); + if ( ! $res ) { + mkdir( $file, $chmod, true ); + $res = file_exists( $file ); + } + } + } elseif ( $action == 'rmdir' ) { + $res = $wp_filesystem->rmdir( $file, $recursive ); + } elseif ( $action == 'copy' && ! isset( $this->filesystem->killswitch ) ) { + if ( isset( $this->parent->ftp_form ) && ! empty( $this->parent->ftp_form ) ) { + $res = copy( $file, $destination ); + if ( $res ) { + chmod( $destination, $chmod ); + } + } else { + $res = $wp_filesystem->copy( $file, $destination, $overwrite, $chmod ); + } + } elseif ( $action == 'move' && ! isset( $this->filesystem->killswitch ) ) { + $res = $wp_filesystem->copy( $file, $destination, $overwrite ); + } elseif ( $action == 'delete' ) { + $res = $wp_filesystem->delete( $file, $recursive ); + } elseif ( $action == 'rmdir' ) { + $res = $wp_filesystem->rmdir( $file, $recursive ); + } elseif ( $action == 'dirlist' ) { + if ( ! isset( $include_hidden ) ) { + $include_hidden = true; + } + $res = $wp_filesystem->dirlist( $file, $include_hidden, $recursive ); + } elseif ( $action == 'put_contents' && ! isset( $this->filesystem->killswitch ) ) { + // Write a string to a file + if ( isset( $this->parent->ftp_form ) && ! empty( $this->parent->ftp_form ) ) { + $res = file_put_contents( $file, $content, $chmod ); + if ( $res ) { + chmod( $file, $chmod ); + } + } else { + $res = $wp_filesystem->put_contents( $file, $content, $chmod ); + } + } elseif ( $action == 'chown' ) { + // Changes file owner + if ( isset( $owner ) && ! empty( $owner ) ) { + $res = $wp_filesystem->chmod( $file, $chmod, $recursive ); + } + } elseif ( $action == 'owner' ) { + // Gets file owner + $res = $wp_filesystem->owner( $file ); + } elseif ( $action == 'chmod' ) { + + if ( ! isset( $params['chmod'] ) || ( isset( $params['chmod'] ) && empty( $params['chmod'] ) ) ) { + $chmod = false; + } + + $res = $wp_filesystem->chmod( $file, $chmod, $recursive ); + + } elseif ( $action == 'get_contents' ) { + // Reads entire file into a string + if ( isset( $this->parent->ftp_form ) && ! empty( $this->parent->ftp_form ) ) { + $res = file_get_contents( $file ); + } else { + $res = $wp_filesystem->get_contents( $file ); + } + } elseif ( $action == 'get_contents_array' ) { + // Reads entire file into an array + $res = $wp_filesystem->get_contents_array( $file ); + } elseif ( $action == 'object' ) { + $res = $wp_filesystem; + } elseif ( $action == 'unzip' ) { + $unzipfile = unzip_file( $file, $destination ); + if ( $unzipfile ) { + $res = true; + } + } + if ( isset( $res ) && ! $res ) { + $this->killswitch = true; + } + + if ( ! $res ) { + add_action( "redux/page/{$this->parent->args['opt_name']}/form/before", array( + $this, + 'ftp_form' + ) ); + } + + return $res; + } + } + } diff --git a/plugins/legacy-admin/framework/core/inc/class.redux_functions.php b/plugins/legacy-admin/framework/core/inc/class.redux_functions.php new file mode 100644 index 000000000..02d21e24f --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/class.redux_functions.php @@ -0,0 +1,278 @@ +args['dev_mode'] ) { + $min = '.min'; + } + + return $min; + } + + /** + * Parse CSS from output/compiler array + * + * @since 3.2.8 + * @access private + * @return $css CSS string + */ + public static function parseCSS( $cssArray = array(), $style = '', $value = '' ) { + + // Something wrong happened + if ( count( $cssArray ) == 0 ) { + return; + } else { //if ( count( $cssArray ) >= 1 ) { + $css = ''; + + foreach ( $cssArray as $element => $selector ) { + + // The old way + if ( $element === 0 ) { + $css = self::theOldWay( $cssArray, $style ); + + return $css; + } + + // New way continued + $cssStyle = $element . ':' . $value . ';'; + + $css .= $selector . '{' . $cssStyle . '}'; + } + } + + return $css; + } + + private static function theOldWay( $cssArray, $style ) { + $keys = implode( ",", $cssArray ); + $css = $keys . "{" . $style . '}'; + + return $css; + } + + /** + * initWpFilesystem - Initialized the Wordpress filesystem, if it already isn't. + * + * @since 3.2.3 + * @access public + * @return void + */ + public static function initWpFilesystem() { + global $wp_filesystem; + + // Initialize the Wordpress filesystem, no more using file_put_contents function + if ( empty( $wp_filesystem ) ) { + require_once( ABSPATH . '/wp-admin/includes/file.php' ); + WP_Filesystem(); + } + } + + /** + * verFromGit - Retrives latest Redux version from GIT + * + * @since 3.2.0 + * @access private + * @return string $ver + */ + private static function verFromGit() { + // Get the raw framework.php from github + $gitpage = wp_remote_get( + 'https://raw.github.com/ReduxFramework/legacy_framework/master/ReduxCore/framework.php', array( + 'headers' => array( + 'Accept-Encoding' => '' + ), + 'sslverify' => true, + 'timeout' => 300 + ) ); + + // Is the response code the corect one? + if ( ! is_wp_error( $gitpage ) ) { + if ( isset( $gitpage['body'] ) ) { + // Get the page text. + $body = $gitpage['body']; + + // Find version line in framework.php + $needle = 'public static $_version ='; + $pos = strpos( $body, $needle ); + + // If it's there, continue. We don't want errors if $pos = 0. + if ( $pos > 0 ) { + + // Look for the semi-colon at the end of the version line + $semi = strpos( $body, ";", $pos ); + + // Error avoidance. If the semi-colon is there, continue. + if ( $semi > 0 ) { + + // Extract the version line + $text = substr( $body, $pos, ( $semi - $pos ) ); + + // Find the first quote around the veersion number. + $quote = strpos( $body, "'", $pos ); + + // Extract the version number + $ver = substr( $body, $quote, ( $semi - $quote ) ); + + // Strip off quotes. + $ver = str_replace( "'", '', $ver ); + + return $ver; + } + } + } + } + } + + /** + * updateCheck - Checks for updates to Redux Framework + * + * @since 3.2.0 + * @access public + * + * @param string $curVer Current version of Redux Framework + * + * @return void - Admin notice is diaplyed if new version is found + */ + public static function updateCheck( $curVer ) { + + // If no cookie, check for new ver + if ( ! isset( $_COOKIE['redux_update_check'] ) ) { // || 1 == strcmp($_COOKIE['redux_update_check'], self::$_version)) { + // actual ver number from git repo + $ver = self::verFromGit(); + + // hour long cookie. + setcookie( "redux_update_check", $ver, time() + 3600, '/' ); + } else { + + // saved value from cookie. If it's different from current ver + // we can still show the update notice. + $ver = $_COOKIE['redux_update_check']; + } + + // Set up admin notice on new version + //if ( 1 == strcmp( $ver, $curVer ) ) { + if ( version_compare( $ver, $curVer, '>' ) ) { + self::$_parent->admin_notices[] = array( + 'type' => 'updated', + 'msg' => 'A new build of Redux is now available!

    Your version: ' . $curVer . '
    New version: ' . $ver . '

    If you are not a developer, your theme/plugin author shipped with dev_mode on. Contact them to fix it, but in the meantime you can use our dev_mode disabler.

    Get it now  |', + 'id' => 'dev_notice_' . $ver, + 'dismiss' => true, + ); + } + } + + /** + * adminNotices - Evaluates user dismiss option for displaying admin notices + * + * @since 3.2.0 + * @access public + * @return void + */ + public static function adminNotices($notices = array()) { + global $current_user, $pagenow; + + // Check for an active admin notice array + if ( ! empty( $notices ) ) { + + // Enum admin notices + foreach ( $notices as $notice ) { + + $add_style = ''; + if (strpos($notice['type'], 'redux-message') != false) { + $add_style = 'style="border-left: 4px solid ' . $notice['color'] . '!important;"'; + } + + if ( true == $notice['dismiss'] ) { + + // Get user ID + $userid = $current_user->ID; + + if ( ! get_user_meta( $userid, 'ignore_' . $notice['id'] ) ) { + + // Check if we are on admin.php. If we are, we have + // to get the current page slug and tab, so we can + // feed it back to Wordpress. Why> admin.php cannot + // be accessed without the page parameter. We add the + // tab to return the user to the last panel they were + // on. + $pageName = ''; + $curTab = ''; + if ( $pagenow == 'admin.php' || $pagenow == 'themes.php' ) { + + // Get the current page. To avoid errors, we'll set + // the redux page slug if the GET is empty. + $pageName = empty( $_GET['page'] ) ? '&page=' . self::$_parent->args['page_slug'] : '&page=' . $_GET['page']; + + // Ditto for the current tab. + $curTab = empty( $_GET['tab'] ) ? '&tab=0' : '&tab=' . $_GET['tab']; + } + + // Print the notice with the dismiss link + echo ''; + } + } else { + + // Standard notice + echo '

    ' . $notice['msg'] . '.

    '; + } + } + + // Clear the admin notice array + self::$_parent->admin_notices = array(); + } + } + + /** + * dismissAdminNotice - Updates user meta to store dismiss notice preference + * + * @since 3.2.0 + * @access public + * @return void + */ + public static function dismissAdminNotice() { + global $current_user; + + // Verify the dismiss and id parameters are present. + if ( isset( $_GET['dismiss'] ) && isset( $_GET['id'] ) ) { + if ( 'true' == $_GET['dismiss'] || 'false' == $_GET['dismiss'] ) { + + // Get the user id + $userid = $current_user->ID; + + // Get the notice id + $id = $_GET['id']; + $val = $_GET['dismiss']; + + // Add the dismiss request to the user meta. + update_user_meta( $userid, 'ignore_' . $id, $val ); + } + } + } + } +} \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/class.redux_helpers.php b/plugins/legacy-admin/framework/core/inc/class.redux_helpers.php new file mode 100644 index 000000000..1786f3f9b --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/class.redux_helpers.php @@ -0,0 +1,661 @@ +sections as $k => $section ) { + if ( ! isset( $section['title'] ) ) { + continue; + } + + if ( isset( $section['fields'] ) && ! empty( $section['fields'] ) ) { + if ( Redux_Helpers::recursive_array_search( $field, $section['fields'] ) ) { + return $k; + continue; + } + } + } + } + + public static function isFieldInUseByType( $fields, $field = array() ) { + foreach ( $field as $name ) { + if ( array_key_exists( $name, $fields ) ) { + return true; + } + } + + return false; + } + + public static function isFieldInUse( $parent, $field ) { + foreach ( $parent->sections as $k => $section ) { + if ( ! isset( $section['title'] ) ) { + continue; + } + + if ( isset( $section['fields'] ) && ! empty( $section['fields'] ) ) { + if ( Redux_Helpers::recursive_array_search( $field, $section['fields'] ) ) { + return true; + continue; + } + } + } + } + + public static function major_version( $v ) { + $version = explode( '.', $v ); + if ( count( $version ) > 1 ) { + return $version[0] . '.' . $version[1]; + } else { + return $v; + } + } + + public static function isLocalHost(){ + return ($_SERVER['REMOTE_ADDR'] === '127.0.0.1' || $_SERVER['REMOTE_ADDR'] === 'localhost' ) ? 1 : 0; + } + + public static function getTrackingObject() { + $hash = md5( network_site_url() . '-' . $_SERVER['REMOTE_ADDR'] ); + + global $blog_id, $wpdb; + $pts = array(); + + foreach ( get_post_types( array( 'public' => true ) ) as $pt ) { + $count = wp_count_posts( $pt ); + $pts[ $pt ] = $count->publish; + } + + $comments_count = wp_count_comments(); + $theme_data = wp_get_theme(); + $theme = array( + 'version' => $theme_data->Version, + 'name' => $theme_data->Name, + 'author' => $theme_data->Author, + 'template' => $theme_data->Template, + ); + + if ( ! function_exists( 'get_plugin_data' ) ) { + require_once( ABSPATH . 'wp-admin/includes/admin.php' ); + } + + $plugins = array(); + foreach ( get_option( 'active_plugins', array() ) as $plugin_path ) { + $plugin_info = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin_path ); + + $slug = str_replace( '/' . basename( $plugin_path ), '', $plugin_path ); + $plugins[ $slug ] = array( + 'version' => $plugin_info['Version'], + 'name' => $plugin_info['Name'], + 'plugin_uri' => $plugin_info['PluginURI'], + 'author' => $plugin_info['AuthorName'], + 'author_uri' => $plugin_info['AuthorURI'], + ); + } + if ( is_multisite() ) { + foreach ( get_option( 'active_sitewide_plugins', array() ) as $plugin_path ) { + $plugin_info = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin_path ); + $slug = str_replace( '/' . basename( $plugin_path ), '', $plugin_path ); + $plugins[ $slug ] = array( + 'version' => $plugin_info['Version'], + 'name' => $plugin_info['Name'], + 'plugin_uri' => $plugin_info['PluginURI'], + 'author' => $plugin_info['AuthorName'], + 'author_uri' => $plugin_info['AuthorURI'], + ); + } + } + + + $version = explode( '.', PHP_VERSION ); + $version = array( + 'major' => $version[0], + 'minor' => $version[0] . '.' . $version[1], + 'release' => PHP_VERSION + ); + + $user_query = new WP_User_Query( array( 'blog_id' => $blog_id, 'count_total' => true, ) ); + $comments_query = new WP_Comment_Query(); + + $data = array( + '_id' => $hash, + 'localhost' => ( $_SERVER['REMOTE_ADDR'] === '127.0.0.1' ) ? 1 : 0, + 'php' => $version, + 'site' => array( + 'hash' => $hash, + 'version' => get_bloginfo( 'version' ), + 'multisite' => is_multisite(), + 'users' => $user_query->get_total(), + 'lang' => get_locale(), + 'wp_debug' => ( defined( 'WP_DEBUG' ) ? WP_DEBUG ? true : false : false ), + 'memory' => WP_MEMORY_LIMIT, + ), + 'pts' => $pts, + 'comments' => array( + 'total' => $comments_count->total_comments, + 'approved' => $comments_count->approved, + 'spam' => $comments_count->spam, + 'pings' => $comments_query->query( array( 'count' => true, 'type' => 'pingback' ) ), + ), + 'options' => apply_filters( 'redux/tracking/options', array() ), + 'theme' => $theme, + 'redux' => array( + 'mode' => ReduxFramework::$_is_plugin ? 'plugin' : 'theme', + 'version' => ReduxFramework::$_version, + 'demo_mode' => get_option( 'ReduxFrameworkPlugin' ), + ), + 'developer' => apply_filters( 'redux/tracking/developer', array() ), + 'plugins' => $plugins, + ); + + $parts = explode( ' ', $_SERVER['SERVER_SOFTWARE'] ); + $software = array(); + foreach ( $parts as $part ) { + if ( $part[0] == "(" ) { + continue; + } + if ( strpos( $part, '/' ) !== false ) { + $chunk = explode( "/", $part ); + $software[ strtolower( $chunk[0] ) ] = $chunk[1]; + } + } + $software['full'] = $_SERVER['SERVER_SOFTWARE']; + $data['environment'] = $software; + if ( function_exists( 'mysqli_get_server_info' ) ) { + $link = mysqli_connect() or die( "Error " . mysqli_error( $link ) ); + $data['environment']['mysql'] = mysqli_get_server_info( $link ); + } else if ( class_exists( 'PDO' ) && method_exists( 'PDO', 'getAttribute' ) ) { + $data['environment']['mysql'] = PDO::getAttribute( PDO::ATTR_SERVER_VERSION ); + } else { + $data['environment']['mysql'] = mysql_get_server_info(); + } + if ( empty( $data['developer'] ) ) { + unset( $data['developer'] ); + } + + return $data; + } + + public static function trackingObject() { + + $data = wp_remote_post( + 'http://verify.redux.io', + array( + 'body' => array( + 'hash' => $_GET['action'], + 'site' => esc_url( home_url( '/' ) ), + ) + ) + ); + + $data['body'] = urldecode( $data['body'] ); + + if ( ! isset( $_GET['code'] ) || $data['body'] != $_GET['code'] ) { + die(); + } + + return Redux_Helpers::getTrackingObject(); + } + + public static function isParentTheme( $file ) { + $file = self::cleanFilePath( $file ); + $dir = self::cleanFilePath( get_template_directory() ); + + $file = str_replace( '//', '/', $file ); + $dir = str_replace( '//', '/', $dir ); + + if ( strpos( $file, $dir ) !== false ) { + return true; + } + + return false; + } + + public static function isChildTheme( $file ) { + $file = self::cleanFilePath( $file ); + $dir = self::cleanFilePath( get_stylesheet_directory() ); + + $file = str_replace( '//', '/', $file ); + $dir = str_replace( '//', '/', $dir ); + + if ( strpos( $file, $dir ) !== false ) { + return true; + } + + return false; + } + + private static function reduxAsPlugin() { + return ReduxFramework::$_as_plugin; + } + + public static function isTheme( $file ) { + + if ( true == self::isChildTheme( $file ) || true == self::isParentTheme( $file ) ) { + return true; + } + + return false; + } + + public static function array_in_array( $needle, $haystack ) { + //Make sure $needle is an array for foreach + if ( ! is_array( $needle ) ) { + $needle = array( $needle ); + } + //For each value in $needle, return TRUE if in $haystack + foreach ( $needle as $pin ) //echo 'needle' . $pin; + { + if ( in_array( $pin, $haystack ) ) { + return true; + } + } + + //Return FALSE if none of the values from $needle are found in $haystack + return false; + } + + public static function recursive_array_search( $needle, $haystack ) { + foreach ( $haystack as $key => $value ) { + if ( $needle === $value || ( is_array( $value ) && self::recursive_array_search( $needle, $value ) !== false ) ) { + return true; + } + } + + return false; + } + + /** + * Take a path and return it clean + * + * @param string $path + * + * @since 3.1.7 + */ + public static function cleanFilePath( $path ) { + $path = str_replace( '', '', str_replace( array( "\\", "\\\\" ), '/', $path ) ); + + if ( $path[ strlen( $path ) - 1 ] === '/' ) { + $path = rtrim( $path, '/' ); + } + + return $path; + } + + /** + * Take a path and delete it + * + * @param string $path + * + * @since 3.3.3 + */ + public static function rmdir( $dir ) { + if ( is_dir( $dir ) ) { + $objects = scandir( $dir ); + foreach ( $objects as $object ) { + if ( $object != "." && $object != ".." ) { + if ( filetype( $dir . "/" . $object ) == "dir" ) { + rrmdir( $dir . "/" . $object ); + } else { + unlink( $dir . "/" . $object ); + } + } + } + reset( $objects ); + rmdir( $dir ); + } + } + + /** + * Field Render Function. + * Takes the color hex value and converts to a rgba. + * + * @since ReduxFramework 3.0.4 + */ + public static function hex2rgba( $hex, $alpha = '' ) { + $hex = str_replace( "#", "", $hex ); + if ( strlen( $hex ) == 3 ) { + $r = hexdec( substr( $hex, 0, 1 ) . substr( $hex, 0, 1 ) ); + $g = hexdec( substr( $hex, 1, 1 ) . substr( $hex, 1, 1 ) ); + $b = hexdec( substr( $hex, 2, 1 ) . substr( $hex, 2, 1 ) ); + } else { + $r = hexdec( substr( $hex, 0, 2 ) ); + $g = hexdec( substr( $hex, 2, 2 ) ); + $b = hexdec( substr( $hex, 4, 2 ) ); + } + $rgb = $r . ',' . $g . ',' . $b; + + if ( '' == $alpha ) { + return $rgb; + } else { + $alpha = floatval( $alpha ); + + return 'rgba(' . $rgb . ',' . $alpha . ')'; + } + } + + public static function makeBoolStr( $var ) { + if ( $var == false || $var == 'false' || $var == 0 || $var == '0' || $var == '' || empty( $var ) ) { + return 'false'; + } else { + return 'true'; + } + } + + public static function compileSystemStatus( $json_output = false, $remote_checks = false ) { + global $wpdb; + + $sysinfo = array(); + + $sysinfo['home_url'] = home_url(); + $sysinfo['site_url'] = site_url(); + $sysinfo['redux_ver'] = esc_html( ReduxFramework::$_version ); + $sysinfo['redux_data_dir'] = ReduxFramework::$_upload_dir; + $sysinfo['redux_data_writeable'] = self::makeBoolStr( @fopen( ReduxFramework::$_upload_dir . 'test-log.log', 'a' ) ); + $sysinfo['wp_ver'] = get_bloginfo( 'version' ); + $sysinfo['wp_multisite'] = is_multisite(); + $sysinfo['permalink_structure'] = get_option( 'permalink_structure' ) ? get_option( 'permalink_structure' ) : 'Default'; + $sysinfo['front_page_display'] = get_option( 'show_on_front' ); + if ( $sysinfo['front_page_display'] == 'page' ) { + $front_page_id = get_option( 'page_on_front' ); + $blog_page_id = get_option( 'page_for_posts' ); + + $sysinfo['front_page'] = $front_page_id != 0 ? get_the_title( $front_page_id ) . ' (#' . $front_page_id . ')' : 'Unset'; + $sysinfo['posts_page'] = $blog_page_id != 0 ? get_the_title( $blog_page_id ) . ' (#' . $blog_page_id . ')' : 'Unset'; + } + + $sysinfo['wp_mem_limit']['raw'] = self::let_to_num( WP_MEMORY_LIMIT ); + $sysinfo['wp_mem_limit']['size'] = size_format( $sysinfo['wp_mem_limit']['raw'] ); + + $sysinfo['db_table_prefix'] = 'Length: ' . strlen( $wpdb->prefix ) . ' - Status: ' . ( strlen( $wpdb->prefix ) > 16 ? 'ERROR: Too long' : 'Acceptable' ); + + $sysinfo['wp_debug'] = 'false'; + if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { + $sysinfo['wp_debug'] = 'true'; + } + + $sysinfo['wp_lang'] = get_locale(); + + if ( ! class_exists( 'Browser' ) ) { + require_once ReduxFramework::$_dir . 'inc/browser.php'; + } + + $browser = new Browser(); + + $sysinfo['browser'] = array( + 'agent' => $browser->getUserAgent(), + 'browser' => $browser->getBrowser(), + 'version' => $browser->getVersion(), + 'platform' => $browser->getPlatform(), + //'mobile' => $browser->isMobile() ? 'true' : 'false', + ); + + $sysinfo['server_info'] = esc_html( $_SERVER['SERVER_SOFTWARE'] ); + $sysinfo['localhost'] = self::makeBoolStr( self::isLocalHost()); + $sysinfo['php_ver'] = function_exists( 'phpversion' ) ? esc_html( phpversion() ) : 'phpversion() function does not exist.'; + + if ( function_exists( 'ini_get' ) ) { + $sysinfo['php_mem_limit'] = size_format( self::let_to_num( ini_get( 'memory_limit' ) ) ); + $sysinfo['php_post_max_size'] = size_format( self::let_to_num( ini_get( 'post_max_size' ) ) ); + $sysinfo['php_time_limit'] = ini_get( 'max_execution_time' ); + $sysinfo['php_max_input_var'] = ini_get( 'max_input_vars' ); + $sysinfo['php_display_errors'] = self::makeBoolStr( ini_get( 'display_errors' ) ); + } + + $sysinfo['suhosin_installed'] = extension_loaded( 'suhosin' ); + $sysinfo['mysql_ver'] = $wpdb->db_version(); + $sysinfo['max_upload_size'] = size_format( wp_max_upload_size() ); + + $sysinfo['def_tz_is_utc'] = 'true'; + if ( date_default_timezone_get() !== 'UTC' ) { + $sysinfo['def_tz_is_utc'] = 'false'; + } + + $sysinfo['fsockopen_curl'] = 'false'; + if ( function_exists( 'fsockopen' ) || function_exists( 'curl_init' ) ) { + $sysinfo['fsockopen_curl'] = 'true'; + } + + //$sysinfo['soap_client'] = 'false'; + //if ( class_exists( 'SoapClient' ) ) { + // $sysinfo['soap_client'] = 'true'; + //} + // + //$sysinfo['dom_document'] = 'false'; + //if ( class_exists( 'DOMDocument' ) ) { + // $sysinfo['dom_document'] = 'true'; + //} + + //$sysinfo['gzip'] = 'false'; + //if ( is_callable( 'gzopen' ) ) { + // $sysinfo['gzip'] = 'true'; + //} + + if ( $remote_checks == true ) { + $response = wp_remote_post( 'https://www.paypal.com/cgi-bin/webscr', array( + 'sslverify' => false, + 'timeout' => 60, + 'user-agent' => 'ReduxFramework/' . ReduxFramework::$_version, + 'body' => array( + 'cmd' => '_notify-validate' + ) + ) ); + + if ( ! is_wp_error( $response ) && $response['response']['code'] >= 200 && $response['response']['code'] < 300 ) { + $sysinfo['wp_remote_post'] = 'true'; + $sysinfo['wp_remote_post_error'] = ''; + } else { + $sysinfo['wp_remote_post'] = 'false'; + $sysinfo['wp_remote_post_error'] = $response->get_error_message(); + } + + $response = wp_remote_get( 'http://reduxframework.com/wp-admin/admin-ajax.php?action=get_redux_extensions' ); + + if ( ! is_wp_error( $response ) && $response['response']['code'] >= 200 && $response['response']['code'] < 300 ) { + $sysinfo['wp_remote_get'] = 'true'; + $sysinfo['wp_remote_get_error'] = ''; + } else { + $sysinfo['wp_remote_get'] = 'false'; + $sysinfo['wp_remote_get_error'] = $response->get_error_message(); + } + } + + $active_plugins = (array) get_option( 'active_plugins', array() ); + + if ( is_multisite() ) { + $active_plugins = array_merge( $active_plugins, get_site_option( 'active_sitewide_plugins', array() ) ); + } + + $sysinfo['plugins'] = array(); + + foreach ( $active_plugins as $plugin ) { + $plugin_data = @get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin ); + $plugin_name = esc_html( $plugin_data['Name'] ); + + $sysinfo['plugins'][ $plugin_name ] = $plugin_data; + } + + $redux = ReduxFrameworkInstances::get_all_instances(); + + $sysinfo['redux_instances'] = array(); + + if ( ! empty( $redux ) && is_array( $redux ) ) { + foreach ( $redux as $inst => $data ) { + Redux::init( $inst ); + + $sysinfo['redux_instances'][ $inst ]['args'] = $data->args; + $sysinfo['redux_instances'][ $inst ]['sections'] = $data->sections; + foreach ( $sysinfo['redux_instances'][ $inst ]['sections'] as $sKey => $section ) { + if ( isset( $section['fields'] ) && is_array( $section['fields'] ) ) { + foreach ( $section['fields'] as $fKey => $field ) { + if ( isset( $field['validate_callback'] ) ) { + unset( $sysinfo['redux_instances'][ $inst ]['sections'][ $sKey ]['fields'][ $fKey ]['validate_callback'] ); + } + if ( $field['type'] == "js_button" ) { + if ( isset( $field['script'] ) && isset( $field['script']['ver'] ) ) { + unset( $sysinfo['redux_instances'][ $inst ]['sections'][ $sKey ]['fields'][ $fKey ]['script']['ver'] ); + } + } + + } + } + } + $sysinfo['redux_instances'][ $inst ]['extensions'] = Redux::getExtensions( $inst ); + + if ( isset( $data->args['templates_path'] ) && $data->args['templates_path'] != '' ) { + $sysinfo['redux_instances'][ $inst ]['templates'] = self::getReduxTemplates( $data->args['templates_path'] ); + } + } + } + + $active_theme = wp_get_theme(); + + $sysinfo['theme']['name'] = $active_theme->Name; + $sysinfo['theme']['version'] = $active_theme->Version; + $sysinfo['theme']['author_uri'] = $active_theme->{'Author URI'}; + $sysinfo['theme']['is_child'] = self::makeBoolStr( is_child_theme() ); + + if ( is_child_theme() ) { + $parent_theme = wp_get_theme( $active_theme->Template ); + + $sysinfo['theme']['parent_name'] = $parent_theme->Name; + $sysinfo['theme']['parent_version'] = $parent_theme->Version; + $sysinfo['theme']['parent_author_uri'] = $parent_theme->{'Author URI'}; + } + + //if ( $json_output ) { + // $sysinfo = json_encode( $sysinfo ); + //} + + //print_r($sysinfo); + //exit(); + + return $sysinfo; + } + + private static function getReduxTemplates( $custom_template_path ) { + $template_paths = array( 'ReduxFramework' => ReduxFramework::$_dir . 'templates/panel' ); + $scanned_files = array(); + $found_files = array(); + $outdated_templates = false; + + foreach ( $template_paths as $plugin_name => $template_path ) { + $scanned_files[ $plugin_name ] = self::scan_template_files( $template_path ); + } + + foreach ( $scanned_files as $plugin_name => $files ) { + foreach ( $files as $file ) { + if ( file_exists( $custom_template_path . '/' . $file ) ) { + $theme_file = $custom_template_path . '/' . $file; + } else { + $theme_file = false; + } + + if ( $theme_file ) { + $core_version = self::get_template_version( ReduxFramework::$_dir . 'templates/panel/' . $file ); + $theme_version = self::get_template_version( $theme_file ); + + if ( $core_version && ( empty( $theme_version ) || version_compare( $theme_version, $core_version, '<' ) ) ) { + if ( ! $outdated_templates ) { + $outdated_templates = true; + } + + $found_files[ $plugin_name ][] = sprintf( __( '%s version %s is out of date. The core version is %s', 'legacy_framework' ), str_replace( WP_CONTENT_DIR . '/themes/', '', $theme_file ), $theme_version ? $theme_version : '-', $core_version ); + } else { + $found_files[ $plugin_name ][] = sprintf( '%s', str_replace( WP_CONTENT_DIR . '/themes/', '', $theme_file ) ); + } + } + } + } + + return $found_files; + } + + private static function scan_template_files( $template_path ) { + $files = scandir( $template_path ); + $result = array(); + + if ( $files ) { + foreach ( $files as $key => $value ) { + if ( ! in_array( $value, array( ".", ".." ) ) ) { + if ( is_dir( $template_path . DIRECTORY_SEPARATOR . $value ) ) { + $sub_files = redux_scan_template_files( $template_path . DIRECTORY_SEPARATOR . $value ); + foreach ( $sub_files as $sub_file ) { + $result[] = $value . DIRECTORY_SEPARATOR . $sub_file; + } + } else { + $result[] = $value; + } + } + } + } + + return $result; + } + + private static function get_template_version( $file ) { + + // Avoid notices if file does not exist + if ( ! file_exists( $file ) ) { + return ''; + } + + // We don't need to write to the file, so just open for reading. + $fp = fopen( $file, 'r' ); + + // Pull only the first 8kiB of the file in. + $file_data = fread( $fp, 8192 ); + + // PHP will close file handle, but we are good citizens. + fclose( $fp ); + + // Make sure we catch CR-only line endings. + $file_data = str_replace( "\r", "\n", $file_data ); + $version = ''; + + if ( preg_match( '/^[ \t\/*#@]*' . preg_quote( '@version', '/' ) . '(.*)$/mi', $file_data, $match ) && $match[1] ) { + $version = _cleanup_header_comment( $match[1] ); + } + + return $version; + } + + private static function let_to_num( $size ) { + $l = substr( $size, - 1 ); + $ret = substr( $size, 0, - 1 ); + + switch ( strtoupper( $l ) ) { + case 'P': + $ret *= 1024; + case 'T': + $ret *= 1024; + case 'G': + $ret *= 1024; + case 'M': + $ret *= 1024; + case 'K': + $ret *= 1024; + } + + return $ret; + } + + } + } + + + diff --git a/plugins/legacy-admin/framework/core/inc/class.redux_instances.php b/plugins/legacy-admin/framework/core/inc/class.redux_instances.php new file mode 100644 index 000000000..18c15dfab --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/class.redux_instances.php @@ -0,0 +1,164 @@ +options = get_option( 'legacy_framework-tracking' ); + $this->options['dev_mode'] = false; + + if ( ! isset( $this->options['hash'] ) || ! $this->options['hash'] || empty( $this->options['hash'] ) ) { + $this->options['hash'] = md5( network_site_url() . '-' . $_SERVER['REMOTE_ADDR'] ); + update_option( 'legacy_framework-tracking', $this->options ); + } + + if ( isset( $_GET['redux_framework_disable_tracking'] ) && ! empty( $_GET['redux_framework_disable_tracking'] ) ) { + $this->options['allow_tracking'] = false; + update_option( 'legacy_framework-tracking', $this->options ); + } + + if ( isset( $_GET['redux_framework_enable_tracking'] ) && ! empty( $_GET['redux_framework_enable_tracking'] ) ) { + $this->options['allow_tracking'] = true; + update_option( 'legacy_framework-tracking', $this->options ); + } + + header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); + header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" ); + header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); + header( 'Cache-Control: no-store, no-cache, must-revalidate' ); + header( 'Cache-Control: post-check=0, pre-check=0', false ); + header( 'Pragma: no-cache' ); + $instances = ReduxFrameworkInstances::get_all_instances(); + + if ( isset( $_REQUEST['i'] ) && ! empty( $_REQUEST['i'] ) ) { + if ( is_array( $instances ) && ! empty( $instances ) ) { + foreach ( $instances as $opt_name => $data ) { + if ( md5( $opt_name . '-debug' ) == $_REQUEST['i'] ) { + $array = $instances[ $opt_name ]; + } + if ($data->args['dev_mode']) { + $this->options['dev_mode'] = $data->args['dev_mode']; + } + } + } + if ( isset( $array ) ) { + if ( isset( $array->extensions ) && is_array( $array->extensions ) && ! empty( $array->extensions ) ) { + foreach ( $array->extensions as $key => $extension ) { + if ( isset( $extension->$version ) ) { + $array->extensions[ $key ] = $extension->$version; + } else { + $array->extensions[ $key ] = true; + } + } + } + if ( isset( $array->import_export ) ) { + unset( $array->import_export ); + } + if ( isset( $array->debug ) ) { + unset( $array->debug ); + } + } else { + die(); + } + + } else { + $array = Redux_Helpers::trackingObject(); + if ( is_array( $instances ) && ! empty( $instances ) ) { + $array['instances'] = array(); + foreach ( $instances as $opt_name => $data ) { + $array['instances'][] = $opt_name; + } + } + $array['key'] = md5( AUTH_KEY . SECURE_AUTH_KEY ); + } + + echo @json_encode( $array, true ); + die(); + } + + function capture( $ReduxFramework ) { + $this->store( $ReduxFramework ); + } + + private function store( $ReduxFramework ) { + if ( $ReduxFramework instanceof ReduxFramework ) { + $key = $ReduxFramework->args['opt_name']; + self::$instances[ $key ] = $ReduxFramework; + } + } + } diff --git a/plugins/legacy-admin/framework/core/inc/class.redux_sass.php b/plugins/legacy-admin/framework/core/inc/class.redux_sass.php new file mode 100644 index 000000000..75412f56f --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/class.redux_sass.php @@ -0,0 +1,255 @@ +args['sass']['enabled'] && !$parent->args['sass']['page_output']) { + $ids = ''; + + foreach($parent->options as $id => $opts) { + $ids .= $id . '|'; + } + + $ids = rtrim($ids,'|'); + + return $ids; + } + } + + public static function get_id_matrix(){ + if (!file_exists(self::$matrix_file)) { + $ids = get_option(self::$matrix_key); + } else { + $ids = file_get_contents(self::$matrix_file); + } + + return $ids; + } + + public static function set_id_matrix($ids) { + $ret = @file_put_contents(self::$matrix_file, $ids); + + if ($ret == false) { + return update_option(self::$matrix_key, $ids); + } + } + + public static function add_path ($path) { + if (!in_array($path, self::$path)) { + array_push(self::$path, $path); + } + } + + public static function add_import($import) { + if (!in_array($import, self::$import)) { + array_push (self::$import, $import); + } + } + + public static function is_scss_newer($dir, $filename){ + $css_time = filemtime($dir . '/' . $filename . '.css'); + $scss_time = filemtime($dir . '/' . $filename . '.scss'); + + if ($scss_time > $css_time) { + echo 'css: ' . $css_time . '
    '; + echo 'scss: ' . $scss_time . '
    '; + + return true; + } + + return false; + } + + public static function compile_sass($parent) { + if (!empty(self::$path)) { + + $do_compile = false; + $as_output = false; + + if (!self::is_sass_dir ( ReduxFramework::$_upload_dir . 'sass' )){ + $as_output = true; + } + + if ($parent->args['sass']['page_output']) { + $as_output = true; + } + + $mb = $parent->extensions['metaboxes']; + if (!empty($mb->boxes)) { + $as_output = true; + } + + $opt_name = $parent->args['opt_name']; + + self::$matrix_file = ReduxFramework::$_upload_dir . 'sass/' . $opt_name . '-id-matrix'; + self::$matrix_key = 'redux-sass-' . $opt_name . '-id-matrix'; + + if (!$as_output) { + $current_ids = self::get_current_id_matrix($parent); + $saved_ids = self::get_id_matrix(); + + if ($saved_ids == '' || empty($saved_ids)) { + $ret = self::set_id_matrix($current_ids); + $do_compile = true; + } else { + if ($current_ids != $saved_ids) { + logconsole('not the same'); + self::set_id_matrix($current_ids); + $do_compile = true; + } else { + logconsole('the same'); + } + } + } else { + $do_compile = true; + } + + if ($do_compile || self::$_do_compile) { + logconsole('compiler run'); + if ( !class_exists( 'scssc' ) && !isset( $GLOBALS['redux_scss_compiler'] ) ) { + $GLOBALS['redux_scss_compiler'] = true; + require( "scssphp/scss.inc.php" ); + } + + $scss = new scssc(); + + $scss->setImportPaths( self::$path ); + + if (!$parent->args['dev_mode']) { + $scss->setFormatter ( "scss_formatter_compressed" ); + } + + $new_css = ''; + + foreach (self::$import as $import) { + $new_css .= $scss->compile( $import ); + } + + unset ($scss); + + if ($new_css != '') { + if ($as_output) { + self::css_to_page($opt_name, $new_css); + return self::SASS_PAGE_OUTPUT; + } else { + $css_file = Redux_Helpers::cleanFilePath( ReduxFramework::$_upload_dir . $parent->args['opt_name'] . '-redux.css'); + + $ret = @file_put_contents($css_file, $new_css); + + if ($ret == false) { + self::css_to_page($opt_name, $new_css); + return self::SASS_PAGE_OUTPUT; + } + + return self::SASS_FILE_COMPILE; + } + } + } // do_compile + } + + return self::SASS_NO_COMPILE; + } + + private static function css_to_page($opt_name, $css) { + echo ''; + } + + public static function compile_single_field($parent, $scss_path, $filename) { + echo 'single field compile: ' . $scss_path . ' ' . $filename; + + if ( !class_exists( 'scssc' ) && !isset( $GLOBALS['redux_scss_compiler'] ) ) { + $GLOBALS['redux_scss_compiler'] = true; + require( "scssphp/scss.inc.php" ); + } + + $scss = new scssc(); + + $scss->setImportPaths( $scss_path ); + + if (!$parent->args['dev_mode']) { + $scss->setFormatter ( "scss_formatter_compressed" ); + } + + $new_css = $scss->compile( '@import "' . $filename . '.scss"' ); + + unset ($scss); + + $ret = @file_put_contents($scss_path . '/' . $filename . '.css', $new_css); + } + } +} + +if (!function_exists ( 'redux_enqueue_style')) { + /** + * Enqueues style for SASS comnpile or WP enqueue, depending on 'use_sass' arg. + * + * @since 3.3.9 + * @access public + * @param string $handle Name of the stylesheet. + * @param string $css_src Path to the stylesheet from the root directory of WordPress. Example: '/css/mystyle.css'. + * @param string $scss_dir Directory path to SCSS file. + * @param array $deps An array of registered style handles this stylesheet depends on. Default empty array. + * @param string $ver String specifying the stylesheet version number, if it has one. This parameter is used to ensure that the correct version is sent to the client regardless of caching, and so should be included if a version number is available and makes sense for the stylesheet. + * @param string $media Optional. The media for which this stylesheet has been defined. Default 'all'. Accepts 'all', 'aural', 'braille', 'handheld', 'projection', 'print', 'screen', 'tty', or 'tv'. + * @return void + */ + function redux_enqueue_style ($parent, $handle, $css_src, $scss_dir, $deps = array(), $ver = '', $media = false){ + if ($parent->args['sass']['enabled']) { + //if ($parent->args['dev_mode'] || $parent->args['sass']['page_output']) { + $path_parts = pathinfo($css_src); + + $filename = $path_parts['filename']; +//echo $filename . '
    '; + $scss_dir = Redux_Helpers::cleanFilePath($scss_dir); + $scss_dir = untrailingslashit($scss_dir); + + $is_diff = reduxSassCompiler::is_scss_newer($scss_dir, $filename); + + if ($is_diff) { + reduxSassCompiler::compile_single_field($parent, $scss_dir, $filename); + reduxSassCompiler::$_do_compile = true; + } + + reduxSassCompiler::add_path($scss_dir); + reduxSassCompiler::add_import('@import "' . $filename . '.scss"'); + //} + } else { + wp_enqueue_style( + $handle, + $css_src, + $deps, + $ver, + $media + ); + } + } +} \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/class.redux_themecheck.php b/plugins/legacy-admin/framework/core/inc/class.redux_themecheck.php new file mode 100644 index 000000000..89fe3bb4d --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/class.redux_themecheck.php @@ -0,0 +1,123 @@ +load(); + } + } + + public function load() { + + $redux = new ReduxFramework(); + $redux->init(); + + + + //if ( ! empty( $redux ) ) { + + + $dir = ReduxFramework::$_dir . '../'; + + if ( isset( $_POST['themename'] ) && ! empty( $_POST['themename'] ) ) { + if ( strpos( $dir, $_POST['themename'] ) !== false ) { + ?> +
    +

    Redux Framework', '', '' ); + ?> +

    +
    +

    Redux directory. They may cause errors in Theme-Check.', 'legacy_framework' ); + echo '

      '; + foreach ( $errors as $error ) { + echo '
    • ~/' . $error . '
    • '; + } + ?> +
    . + * + * @package ReduxFramework + * @subpackage debug object + * @author Dovy Paukstys + * @author Kevin Provance (kprovance) + * @version 3.1.8 + */ + +// Exit if accessed directly + if ( ! defined( 'ABSPATH' ) ) { + exit; + } + + if ( ! class_exists( 'ReduxDebugObject' ) ) { + + /** + * Main ReduxFramework_import_export class + * + * @since 1.0.0 + */ + class ReduxDebugObject { + public function __construct( $parent ) { + $this->parent = $parent; + } + + public function render() { + echo '
    '; + echo '

    ' . __( 'Options Object', 'legacy_framework' ) . '

    '; + echo '
    '; + echo '
    '; + echo '
    '; + + if ( version_compare( phpversion(), "5.3.0", ">=" ) ) { + $json = json_encode( $this->parent->options, true ); + } else { + $json = json_encode( $this->parent->options ); + } + + echo '
    ' . $json . '
    '; + + echo '' . __( 'Show Object in Javascript Console Object', 'legacy_framework' ) . ''; + + echo '
    '; + } + + public function render_tab() { + echo ''; + } + + public function add_submenu() { + add_submenu_page( + $this->parent->args['page_slug'], + __( 'Options Object', 'legacy_framework' ), + __( 'Options Object', 'legacy_framework' ), + $this->parent->args['page_permissions'], + $this->parent->args['page_slug'] . '&tab=dev_mode_default', + '__return_null' + ); + } + } + } diff --git a/plugins/legacy-admin/framework/core/inc/extensions/README.txt b/plugins/legacy-admin/framework/core/inc/extensions/README.txt new file mode 100644 index 000000000..ea1d54cf6 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/extensions/README.txt @@ -0,0 +1 @@ +This directory is a placeholder for Redux Framework extensions. diff --git a/plugins/legacy-admin/framework/core/inc/extensions/customizer/extension_customizer.php b/plugins/legacy-admin/framework/core/inc/extensions/customizer/extension_customizer.php new file mode 100644 index 000000000..8541f504a --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/extensions/customizer/extension_customizer.php @@ -0,0 +1,683 @@ +. + * + * @package ReduxFramework + * @author Dovy Paukstys (dovy) + * @version 3.0.0 + */ + +// Exit if accessed directly + if ( ! defined( 'ABSPATH' ) ) { + exit; + } + +// Don't duplicate me! + if ( ! class_exists( 'ReduxFramework_extension_customizer' ) ) { + + /** + * Main ReduxFramework customizer extension class + * + * @since 1.0.0 + */ + class ReduxFramework_extension_customizer { + + // Protected vars + protected $redux; + private $_extension_url; + private $_extension_dir; + private $parent; + private $orig_options = array(); + private static $post_values = array(); + public static $version = "2.0"; + + /** + * Class Constructor. Defines the args for the extions class + * + * @since 1.0.0 + * @access public + * + * @param array $sections Panel sections. + * @param array $args Class constructor arguments. + * @param array $extra_tabs Extra panel tabs. + * + * @return void + */ + public function __construct( $parent ) { + //add_action('wp_head', array( $this, '_enqueue_new' )); + + global $pagenow, $wp_customize; + if ( ! isset( $wp_customize ) && $pagenow !== "customize.php" && $pagenow !== "admin-ajax.php" ) { + return; + } + if ( ( $pagenow !== "customize.php" && $pagenow !== "admin-ajax.php" && ! isset( $GLOBALS['wp_customize'] ) ) ) { + //return; + } + + $this->parent = $parent; + + if ( empty( $this->_extension_dir ) ) { + $this->_extension_dir = trailingslashit( str_replace( '\\', '/', dirname( __FILE__ ) ) ); + $this->_extension_url = site_url( str_replace( trailingslashit( str_replace( '\\', '/', ABSPATH ) ), '', $this->_extension_dir ) ); + } + + self::get_post_values(); + + + // Create defaults array + $defaults = array(); + /* + customize_controls_init + customize_controls_enqueue_scripts + customize_controls_print_styles + customize_controls_print_scripts + customize_controls_print_footer_scripts + */ + + + if ( ! ( isset( $_POST['action'] ) || ( isset( $_POST['action'] ) && $_POST['action'] != "customize_save" ) ) ) { + + add_action( "redux/options/{$this->parent->args['opt_name']}/options", array( + $this, + '_override_values' + ), 100 ); + + //if ( ! isset( $_POST['customized'] ) || $pagenow == "admin-ajax.php" ) { + if ( current_user_can( $this->parent->args['page_permissions'] ) ) { + add_action( 'customize_register', array( + $this, + '_register_customizer_controls' + ) ); // Create controls + } + //} + + + add_action( 'wp_head', array( $this, 'customize_preview_init' ) ); + } + + + //add_action( 'customize_save', array( $this, 'customizer_save_before' ) ); // Before save + add_action( 'customize_save_after', array( &$this, 'customizer_save_after' ) ); // After save + + + //add_action( 'wp_enqueue_scripts', array( &$this, '_enqueue_previewer_css' ) ); // Enqueue previewer css + //add_action( 'wp_enqueue_scripts', array( &$this, '_enqueue_previewer_js' ) ); // Enqueue previewer javascript + //add_action( "wp_footer", array( $this, '_enqueue_new' ), 100 ); + //$this->_enqueue_new(); + } + + function customize_preview_init() { + do_action( 'redux/customizer/live_preview' ); + } + + protected static function get_post_values() { + if ( empty( self::$post_values ) && isset( $_POST['customized'] ) && ! empty( $_POST['customized'] ) ) { + self::$post_values = json_decode( stripslashes_deep( $_POST['customized'] ), true ); + } + } + + public function _override_values( $data ) { + + self::get_post_values(); + + if ( isset( $_POST['customized'] ) && ! empty( self::$post_values ) ) { + + if ( is_array( self::$post_values ) ) { + foreach ( self::$post_values as $key => $value ) { + if ( strpos( $key, $this->parent->args['opt_name'] ) !== false ) { + $key = str_replace( $this->parent->args['opt_name'] . '[', '', rtrim( $key, "]" ) ); + $data[ $key ] = $value; + $GLOBALS[ $this->parent->args['global_variable'] ][ $key ] = $value; + $this->parent->options[ $key ] = $value; + } + } + } + + } + + return $data; + } + + public function _enqueue_new() { + //echo ""; + //echo ""; + //echo ""; + //echo ""; + //echo ""; + //echo ""; + //echo ""; + //echo ""; + //echo ""; + //echo ""; + //echo ""; + //echo ""; + + /* + wp_enqueue_script('redux-extension-customizer-codemirror-js', $this->_extension_url . 'new/codemirror.min.js'); + wp_enqueue_script('redux-extension-customizer-color-js', $this->_extension_url . 'new/colors-control.js'); + wp_enqueue_script('redux-extension-customizer-controls-js', $this->_extension_url . 'new/customizer-control.js'); + wp_enqueue_script('redux-extension-customizer-fonts-js', $this->_extension_url . 'new/fonts-customizer-admin.js'); + wp_enqueue_script('redux-extension-customizer-header-js', $this->_extension_url . 'new/header-control.js'); + wp_enqueue_script('redux-extension-customizer-models-js', $this->_extension_url . 'new/header-models.js'); + wp_enqueue_script('redux-extension-customizer-slimscroll-js', $this->_extension_url . 'new/jquery.slimscroll.js'); + wp_enqueue_script('redux-extension-customizer-droppable-js', $this->_extension_url . 'new/jquery.ui.droppable.min.js'); + wp_enqueue_script('redux-extension-customizer-editor-js', $this->_extension_url . 'new/media-editor.min.js'); + wp_enqueue_script('redux-extension-customizer-new-js', $this->_extension_url . 'new/new-customizer.js'); + wp_enqueue_script('redux-extension-customizer-previewing-js', $this->_extension_url . 'new/previewing.js'); + wp_enqueue_script('redux-extension-customizer-theme-js', $this->_extension_url . 'new/theme-customizer.js'); + */ + } + + // All sections, settings, and controls will be added here + public function _register_customizer_controls( $wp_customize ) { + $order = array( + 'heading' => - 500, + 'option' => - 500, + ); + $defaults = array( + 'default-color' => '', + 'default-image' => '', + 'wp-head-callback' => '', + 'admin-head-callback' => '', + 'admin-preview-callback' => '' + ); + $panel = ""; + + foreach ( $this->parent->sections as $key => $section ) { + + // Not a type that should go on the customizer + if ( empty( $section['fields'] ) || ( isset( $section['type'] ) && $section['type'] == "divide" ) ) { + continue; + } + + // If section customizer is set to false + if ( isset( $section['customizer'] ) && $section['customizer'] === false ) { + continue; + } + + // Evaluate section permissions + if ( isset( $section['permissions'] ) ) { + if ( ! current_user_can( $section['permissions'] ) ) { + continue; + } + } + + // No errors please + if ( ! isset( $section['desc'] ) ) { + $section['desc'] = ""; + } + + // Fill the description if there is a subtitle + if ( empty( $section['desc'] ) && ! empty( $section['subtitle'] ) ) { + $section['desc'] = $section['subtitle']; + } + + // Let's make a section ID from the title + if ( empty( $section['id'] ) ) { + $section['id'] = strtolower( str_replace( " ", "", $section['title'] ) ); + } + + // No title is present, let's show what section is missing a title + if ( ! isset( $section['title'] ) ) { + //print_r( $section ); + } + + // Let's set a default priority + if ( empty( $section['priority'] ) ) { + $section['priority'] = $order['heading']; + $order['heading'] ++; + } + + if ( method_exists( $wp_customize, 'add_panel' ) && ( ! isset( $section['subsection'] ) || ( isset( $section['subsection'] ) && $section['subsection'] != true ) ) && isset( $this->parent->sections[ ( $key + 1 ) ]['subsection'] ) && $this->parent->sections[ ( $key + 1 ) ]['subsection'] ) { + + $wp_customize->add_panel( $section['id'], array( + 'priority' => $section['priority'], + 'capability' => 'customize', + 'theme_supports' => '', + 'title' => $section['title'], + 'description' => $section['desc'], + ) ); + $panel = $section['id']; + + $wp_customize->add_section( $section['id'], array( + 'title' => $section['title'], + 'priority' => $section['priority'], + 'description' => $section['desc'], + 'panel' => $panel + ) ); + + + } else { + if ( ! isset( $section['subsection'] ) || ( isset( $section['subsection'] ) && $section['subsection'] != true ) ) { + $panel = ""; + } + $wp_customize->add_section( $section['id'], array( + 'title' => $section['title'], + 'priority' => $section['priority'], + 'description' => $section['desc'], + 'panel' => $panel + ) ); + } + + + foreach ( $section['fields'] as $skey => $option ) { + + // Evaluate section permissions + if ( isset( $option['permissions'] ) ) { + if ( ! current_user_can( $option['permissions'] ) ) { + continue; + } + } + if ( isset( $option['validate'] ) && $option['validate'] != false ) { + continue; + } + + if ( isset( $option['validate_callback'] ) && !empty( $option['validate_callback'] ) ) { + continue; + } + + if ( isset( $option['customizer'] ) && $option['customizer'] === false ) { + continue; + } + if ( $this->parent->args['customizer'] === false && ( ! isset( $option['customizer'] ) || $option['customizer'] !== true ) ) { + continue; + } + + //Change the item priority if not set + if ( $option['type'] != 'heading' && ! isset( $option['priority'] ) ) { + $option['priority'] = $order['option']; + $order['option'] ++; + } + + if ( ! empty( $this->options_defaults[ $option['id'] ] ) ) { + $option['default'] = $this->options_defaults['option']['id']; + } + + //$option['id'] = $this->parent->args['opt_name'].'['.$option['id'].']'; + //echo $option['id']; + + if ( ! isset( $option['default'] ) ) { + $option['default'] = ""; + } + if ( ! isset( $option['title'] ) ) { + $option['title'] = ""; + } + + // Wordpress doesn't support multi-select + if ( $option['type'] == "select" && isset( $option['multi'] ) && $option['multi'] == true ) { + continue; + } + + $option['id'] = $this->parent->args['opt_name'] . '[' . $option['id'] . ']'; + + if ( $option['type'] != "heading" || ! empty( $option['type'] ) ) { + $wp_customize->add_setting( $option['id'], + array( + 'default' => $option['default'], + 'type' => 'option', + 'capabilities' => 'edit_theme_options', + //'capabilities' => $this->parent->args['page_permissions'], + 'transport' => 'refresh', + 'theme_supports' => '', + //'sanitize_callback' => '__return_false', + 'sanitize_callback' => array( $this, '_field_validation' ), + //'sanitize_js_callback' =>array( &$parent, '_field_input' ), + ) + ); + } + + if ( ! empty( $option['data'] ) && empty( $option['options'] ) ) { + if ( empty( $option['args'] ) ) { + $option['args'] = array(); + } + + if ( $option['data'] == "elusive-icons" || $option['data'] == "elusive-icon" || $option['data'] == "elusive" ) { + $icons_file = ReduxFramework::$_dir . 'inc/fields/select/elusive-icons.php'; + $icons_file = apply_filters( 'redux-font-icons-file', $icons_file ); + + if ( file_exists( $icons_file ) ) { + require_once $icons_file; + } + } + $option['options'] = $this->parent->get_wordpress_data( $option['data'], $option['args'] ); + } + + switch ( $option['type'] ) { + case 'heading': + // We don't want to put up the section unless it's used by something visible in the customizer + $section = $option; + $section['id'] = strtolower( str_replace( " ", "", $option['title'] ) ); + $order['heading'] = - 500; + + if ( ! empty( $option['priority'] ) ) { + $section['priority'] = $option['priority']; + } else { + $section['priority'] = $order['heading']; + $order['heading'] ++; + } + break; + + case 'text': + if ( isset( $option['data'] ) && $option['data'] ) { + continue; + } + //if ($option['title'] == "Twitter Publisher Username") { + // print_r($option); + // $trueID = str_replace(array(']', 'redux_demo['),'',$option['id']); + // $data = get_option($this->parent->args['opt_name']); + // print_r($data[$trueID]); + // print_r($this->parent->options[$trueID]); + // exit(); + //} + $wp_customize->add_control( $option['id'], array( + 'label' => $option['title'], + 'section' => $section['id'], + 'settings' => $option['id'], + 'priority' => $option['priority'], + 'type' => 'text', + ) ); + break; + + case 'select': + case 'button_set': + if ( ! isset( $option['options'] ) ) { + continue; + } + + $newOptions = array(); + foreach ( $option['options'] as $key => $value ) { + if ( is_array( $value ) ) { + foreach ( $value as $key => $v ) { + $newOptions[] = $v; + } + + } + } + + if ( ! empty( $newOptions ) ) { + $option['options'] = $newOptions; + } + + if ( ( isset( $option['sortable'] ) && $option['sortable'] ) ) { + continue; + } + + if ( ( isset( $option['multi'] ) && $option['multi'] ) ) { + continue; + } + + $wp_customize->add_control( $option['id'], array( + 'label' => $option['title'], + 'section' => $section['id'], + 'settings' => $option['id'], + 'priority' => $option['priority'], + 'type' => 'select', + 'choices' => $option['options'] + ) ); + break; + + case 'radio': + //continue; + $wp_customize->add_control( $option['id'], array( + 'label' => $option['title'], + 'section' => $section['id'], + 'settings' => $option['id'], + 'priority' => $option['priority'], + 'type' => 'radio', + 'choices' => $option['options'] + ) ); + break; + + case 'checkbox': + if ( ( isset( $option['data'] ) && $option['data'] ) || ( ( isset( $option['multi'] ) && $option['multi'] ) ) || ( ( isset( $option['options'] ) && ! empty( $option['options'] ) ) ) ) { + continue; + } + $wp_customize->add_control( $option['id'], array( + 'label' => $option['title'], + 'section' => $section['id'], + 'settings' => $option['id'], + 'priority' => $option['priority'], + 'type' => 'checkbox', + ) ); + break; + + case 'media': + continue; + $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, $option['id'], array( + 'label' => $option['title'], + 'section' => $section['id'], + 'settings' => $option['id'], + 'priority' => $option['priority'] + ) ) ); + break; + + case 'color': + $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, $option['id'], array( + 'label' => $option['title'], + 'section' => $section['id'], + 'settings' => $option['id'], + 'priority' => $option['priority'] + ) ) ); + break; + + case 'switch': + continue; + $wp_customize->add_control( new Redux_customizer_switch( $wp_customize, $option['id'], array( + 'label' => $option['title'], + 'section' => $section['id'], + 'settings' => $option['id'], + 'field' => $option, + 'ReduxFramework' => $this->parent, + 'priority' => $option['priority'], + ) ) ); + + break; + + default: + break; + } + } + } + + /* + title_tagline - Site Title & Tagline + colors - Colors + header_image - Header Image + background_image - Background Image + nav - Navigation + static_front_page - Static Front Page + */ + } + + public function customizer_save_before( $plugin_options ) { + $this->before_save = $this->parent->options; + //$parent->_field_input( $plugin_options ); + } + + public function customizer_save_after( $wp_customize ) { + + if ( empty( $this->parent->options ) ) { + $this->parent->get_options(); + } + if ( empty( $this->orig_options ) && ! empty( $this->parent->options ) ) { + $this->orig_options = $this->parent->options; + } + + $options = json_decode( stripslashes_deep( $_POST['customized'] ), true ); + $compiler = false; + $changed = false; + + foreach ( $options as $key => $value ) { + if ( strpos( $key, $this->parent->args['opt_name'] ) !== false ) { + $key = str_replace( $this->parent->args['opt_name'] . '[', '', rtrim( $key, "]" ) ); + + if ( ! isset( $this->orig_options[ $key ] ) || $this->orig_options[ $key ] != $value || ( isset( $this->orig_options[ $key ] ) && ! empty( $this->orig_options[ $key ] ) && empty( $value ) ) ) { + $this->parent->options[ $key ] = $value; + $changed = true; + if ( isset( $this->parent->compiler_fields[ $key ] ) ) { + $compiler = true; + } + } + } + } + + if ( $changed ) { + $this->parent->set_options( $this->parent->options ); + if ( $compiler ) { + // Have to set this to stop the output of the CSS and typography stuff. + $this->parent->no_output = true; + $this->parent->_enqueue_output(); + do_action( "redux/options/{$this->parent->args['opt_name']}/compiler", $this->parent->options, $this->parent->compilerCSS ); + do_action( "redux/options/{$this->args['opt_name']}/compiler/advanced", $this->parent ); + } + } + + } + + /** + * Enqueue CSS/JS for preview pane + * + * @since 1.0.0 + * @access public + * @global $wp_styles + * @return void + */ + public function _enqueue_previewer() { + wp_enqueue_script( + 'redux-extension-previewer-js', + $this->_extension_url . 'assets/js/preview.js' + ); + + $localize = array( + 'save_pending' => __( 'You have changes that are not saved. Would you like to save them now?', 'legacy_framework' ), + 'reset_confirm' => __( 'Are you sure? Resetting will lose all custom values.', 'legacy_framework' ), + 'preset_confirm' => __( 'Your current options will be replaced with the values of this preset. Would you like to proceed?', 'legacy_framework' ), + 'opt_name' => $this->args['opt_name'], + //'folds' => $this->folds, + 'options' => $this->parent->options, + 'defaults' => $this->parent->options_defaults, + ); + + wp_localize_script( + 'redux-extension-previewer-js', + 'reduxPost', + $localize + ); + } + + /** + * Enqueue CSS/JS for the customizer controls + * + * @since 1.0.0 + * @access public + * @global $wp_styles + * @return void + */ + public function _enqueue() { + global $wp_styles; + + //wp_enqueue_style( 'wp-pointer' ); + //wp_enqueue_script( 'wp-pointer' ); + // Remove when code is in place! + //wp_enqueue_script('redux-extension-customizer-js', $this->_extension_url . 'assets/js/customizer.js'); + // Get styles + //wp_enqueue_style('redux-extension-customizer-css', $this->_extension_url . 'assets/css/customizer.css'); + + $localize = array( + 'save_pending' => __( 'You have changes that are not saved. Would you like to save them now?', 'legacy_framework' ), + 'reset_confirm' => __( 'Are you sure? Resetting will lose all custom values.', 'legacy_framework' ), + 'preset_confirm' => __( 'Your current options will be replaced with the values of this preset. Would you like to proceed?', 'legacy_framework' ), + 'opt_name' => $this->args['opt_name'], + //'folds' => $this->folds, + 'field' => $this->parent->options, + 'defaults' => $this->parent->options_defaults, + ); + + // Values used by the javascript + wp_localize_script( + 'redux-js', + 'redux_opts', + $localize + ); + + do_action( 'redux-enqueue-' . $this->args['opt_name'] ); + + foreach ( $this->sections as $section ) { + if ( isset( $section['fields'] ) ) { + foreach ( $section['fields'] as $field ) { + if ( isset( $field['type'] ) ) { + $field_class = 'ReduxFramework_' . $field['type']; + + if ( ! class_exists( $field_class ) ) { + $class_file = apply_filters( 'redux-typeclass-load', $this->path . 'inc/fields/' . $field['type'] . '/field_' . $field['type'] . '.php', $field_class ); + if ( $class_file ) { + /** @noinspection PhpIncludeInspection */ + require_once( $class_file ); + } + } + + if ( class_exists( $field_class ) && method_exists( $field_class, 'enqueue' ) ) { + $enqueue = new $field_class( '', '', $this ); + $enqueue->enqueue(); + } + } + } + } + } + } + + /** + * Register Option for use + * + * @since 1.0.0 + * @access public + * @return void + */ + public function _register_setting() { + + } + + /** + * Validate the options before insertion + * + * @since 3.0.0 + * @access public + * + * @param array $plugin_options The options array + * + * @return + */ + public function _field_validation( $value ) { + //print_r( $value ); + //print_r( $_POST ); + + return $value; + + //return $this->parent->_validate_options( $plugin_options ); + } + + /** + * HTML OUTPUT. + * + * @since 1.0.0 + * @access public + * @return void + */ + public function _customizer_html_output() { + + } + } // class + function redux_customizer_custom_validation( $field ) { + return $field; + } + } // if diff --git a/plugins/legacy-admin/framework/core/inc/extensions/import_export/extension_import_export.php b/plugins/legacy-admin/framework/core/inc/extensions/import_export/extension_import_export.php new file mode 100644 index 000000000..c8d6b8961 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/extensions/import_export/extension_import_export.php @@ -0,0 +1,207 @@ +. + * + * @package ReduxFramework + * @author Dovy Paukstys (dovy) + * @version 4.0.0 + */ + +// Exit if accessed directly + if ( ! defined( 'ABSPATH' ) ) { + exit; + } + +// Don't duplicate me! + if ( ! class_exists( 'ReduxFramework_extension_import_export' ) ) { + + + /** + * Main ReduxFramework import_export extension class + * + * @since 3.1.6 + */ + class ReduxFramework_extension_import_export extends ReduxFramework { + + // Protected vars + protected $parent; + public $extension_url; + public $extension_dir; + public static $theInstance; + public static $version = "4.0"; + public $is_field = false; + + /** + * Class Constructor. Defines the args for the extions class + * + * @since 1.0.0 + * @access public + * + * @param array $sections Panel sections. + * @param array $args Class constructor arguments. + * @param array $extra_tabs Extra panel tabs. + * + * @return void + */ + public function __construct( $parent ) { + + $this->parent = $parent; + if ( empty( $this->extension_dir ) ) { + $this->extension_dir = trailingslashit( str_replace( '\\', '/', dirname( __FILE__ ) ) ); + } + $this->field_name = 'import_export'; + + + self::$theInstance = $this; + + add_action( "wp_ajax_redux_link_options-" . $this->parent->args['opt_name'], array( + $this, + "link_options" + ) ); + add_action( "wp_ajax_nopriv_redux_link_options-" . $this->parent->args['opt_name'], array( + $this, + "link_options" + ) ); + + add_action( "wp_ajax_redux_download_options-" . $this->parent->args['opt_name'], array( + $this, + "download_options" + ) ); + add_action( "wp_ajax_nopriv_redux_download_options-" . $this->parent->args['opt_name'], array( + $this, + "download_options" + ) ); + + do_action("redux/options/{$this->parent->args['opt_name']}/import", array($this, 'remove_cookie')); + + $this->is_field = Redux_Helpers::isFieldInUse($parent, 'import_export'); + + if ( !$this->is_field && $this->parent->args['show_import_export'] ) { + $this->add_section(); + } + + add_filter( 'redux/' . $this->parent->args['opt_name'] . '/field/class/' . $this->field_name, array( + &$this, + 'overload_field_path' + ) ); // Adds the local field + + //add_filter( 'upload_mimes', array( + // $this, + // 'custom_upload_mimes' + //) ); + + } + + /** + * Adds the appropriate mime types to WordPress + * + * @param array $existing_mimes + * + * @return array + */ + function custom_upload_mimes( $existing_mimes = array() ) { + $existing_mimes['redux'] = 'application/json'; + return $existing_mimes; + } + + public function add_section() { + $this->parent->sections[] = array( + 'id' => 'import/export', + 'title' => __( 'Import / Export', 'legacy_framework' ), + 'heading' => '', + 'icon' => 'el el-refresh', + 'fields' => array( + array( + 'id' => 'redux_import_export', + 'type'=> 'import_export', + 'title' => '', + ) + ), + ); + } + + function link_options() { + if ( ! isset( $_GET['secret'] ) || $_GET['secret'] != md5( md5( AUTH_KEY . SECURE_AUTH_KEY ) . '-' . $this->parent->args['opt_name'] ) ) { + wp_die( 'Invalid Secret for options use' ); + exit; + } + + $var = $this->parent->options; + $var['redux-backup'] = '1'; + if ( isset( $var['REDUX_imported'] ) ) { + unset( $var['REDUX_imported'] ); + } + + echo json_encode( $var ); + + die(); + } + + public function download_options() { + if ( ! isset( $_GET['secret'] ) || $_GET['secret'] != md5( md5( AUTH_KEY . SECURE_AUTH_KEY ) . '-' . $this->parent->args['opt_name'] ) ) { + wp_die( 'Invalid Secret for options use' ); + exit; + } + + $this->parent->get_options(); + $backup_options = $this->parent->options; + $backup_options['redux-backup'] = '1'; + if ( isset( $var['REDUX_imported'] ) ) { + unset( $var['REDUX_imported'] ); + } + + $content = json_encode( $backup_options ); + + if ( isset( $_GET['action'] ) && $_GET['action'] == 'redux_download_options-'.$this->parent->args['opt_name'] ) { + header( 'Content-Description: File Transfer' ); + header( 'Content-type: application/txt' ); + header( 'Content-Disposition: attachment; filename="redux_options_' . $this->parent->args['opt_name'] . '_backup_' . date( 'd-m-Y' ) . '.json"' ); + header( 'Content-Transfer-Encoding: binary' ); + header( 'Expires: 0' ); + header( 'Cache-Control: must-revalidate' ); + header( 'Pragma: public' ); + + echo $content; + + exit; + } else { + header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); + header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" ); + header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); + header( 'Cache-Control: no-store, no-cache, must-revalidate' ); + header( 'Cache-Control: post-check=0, pre-check=0', false ); + header( 'Pragma: no-cache' ); + + // Can't include the type. Thanks old Firefox and IE. BAH. + //header("Content-type: application/json"); + echo $content; + exit; + } + } + + // Forces the use of the embeded field path vs what the core typically would use + public function overload_field_path( $field ) { + return dirname( __FILE__ ) . '/' . $this->field_name . '/field_' . $this->field_name . '.php'; + } + + public function remove_cookie() { + + // Remove the import/export tab cookie. + if ( $_COOKIE['redux_current_tab'] == 'import_export_default' ) { + setcookie( 'redux_current_tab', '', 1, '/' ); + $_COOKIE['redux_current_tab'] = 1; + } + } + + } // class + } // if diff --git a/plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.css b/plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.css new file mode 100644 index 000000000..70f310d35 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.css @@ -0,0 +1 @@ +#redux-import-link-wrapper,#redux-import-code-wrapper{display:none}#redux-export-code,#redux-export-link-value{display:none}#redux-import-action span{color:#B94A48} diff --git a/plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.js b/plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.js new file mode 100644 index 000000000..5b2cac8d8 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.js @@ -0,0 +1,195 @@ +/*global redux_change, redux*/ + +(function( $ ) { + "use strict"; + + redux.field_objects = redux.field_objects || {}; + redux.field_objects.import_export = redux.field_objects.import_export || {}; + + $( document ).ready( + function() { + redux.field_objects.import_export.init(); + } + ); + + redux.field_objects.import_export.init = function( selector ) { + + if ( !selector ) { + selector = $( document ).find( '.redux-container-import_export' ); + } + + var parent = selector; + + if ( !selector.hasClass( 'redux-field-container' ) ) { + parent = selector.parents( '.redux-field-container:first' ); + } + + if ( parent.hasClass( 'redux-field-init' ) ) { + parent.removeClass( 'redux-field-init' ); + } else { + return; + } + + $( '#redux-import' ).click( + function( e ) { + if ( $( '#import-code-value' ).val() === "" && $( '#import-link-value' ).val() === "" ) { + e.preventDefault(); + return false; + } + window.onbeforeunload = null; + redux.args.ajax_save = false; + } + ); + + $( '#redux-import-code-button' ).click( + function() { + var $el = $( '#redux-import-code-wrapper' ); + if ( $( '#redux-import-link-wrapper' ).is( ':visible' ) ) { + $( '#import-link-value' ).text( '' ); + $( '#redux-import-link-wrapper' ).slideUp( + 'fast', function() { + $el.slideDown( + 'fast', function() { + $( '#import-code-value' ).focus(); + } + ); + } + ); + } else { + if ( $el.is( ':visible' ) ) { + $el.slideUp(); + } else { + $el.slideDown( + 'medium', function() { + $( '#import-code-value' ).focus(); + } + ); + } + } + } + ); + + $( '#redux-import-link-button' ).click( + function() { + var $el = $( '#redux-import-link-wrapper' ); + if ( $( '#redux-import-code-wrapper' ).is( ':visible' ) ) { + $( '#import-code-value' ).text( '' ); + $( '#redux-import-code-wrapper' ).slideUp( + 'fast', function() { + $el.slideDown( + 'fast', function() { + $( '#import-link-value' ).focus(); + } + ); + } + ); + } else { + if ( $el.is( ':visible' ) ) { + $el.slideUp(); + } else { + $el.slideDown( + 'medium', function() { + $( '#import-link-value' ).focus(); + } + ); + } + } + } + ); + + $( '#redux-export-code-copy' ).click( + function() { + var $el = $( '#redux-export-code' ); + if ( $( '#redux-export-link-value' ).is( ':visible' ) ) { + $( '#redux-export-link-value' ).slideUp( + 'fast', function() { + $el.slideDown( + 'medium', function() { + var options = redux.options; + options['redux-backup'] = 1; + $( this ).text( JSON.stringify( options ) ).focus().select(); + } + ); + } + ); + } else { + if ( $el.is( ':visible' ) ) { + $el.slideUp().text( '' ); + } else { + $el.slideDown( + 'medium', function() { + var options = redux.options; + options['redux-backup'] = 1; + $( this ).text( JSON.stringify( options ) ).focus().select(); + } + ); + } + } + } + ); + + $( '.redux-container-import_export textarea' ).focusout( + function() { + var $id = $( this ).attr( 'id' ); + var $el = $( this ); + var $container = $el; + if ( $id == "import-link-value" || $id == "import-code-value" ) { + $container = $( this ).parent(); + } + $container.slideUp( + 'medium', function() { + if ( $id != "redux-export-link-value" ) { + $el.text( '' ); + } + } + ); + } + ); + + + $( '#redux-export-link' ).click( + function() { + var $el = $( '#redux-export-link-value' ); + if ( $( '#redux-export-code' ).is( ':visible' ) ) { + $( '#redux-export-code' ).slideUp( + 'fast', function() { + $el.slideDown().focus().select(); + } + ); + } else { + if ( $el.is( ':visible' ) ) { + $el.slideUp(); + } else { + $el.slideDown( + 'medium', function() { + $( this ).focus().select(); + } + ); + } + + } + } + ); + + var textBox1 = document.getElementById( "redux-export-code" ); + textBox1.onfocus = function() { + textBox1.select(); + // Work around Chrome's little problem + textBox1.onmouseup = function() { + // Prevent further mouseup intervention + textBox1.onmouseup = null; + return false; + }; + }; + var textBox2 = document.getElementById( "import-code-value" ); + textBox2.onfocus = function() { + textBox2.select(); + // Work around Chrome's little problem + textBox2.onmouseup = function() { + // Prevent further mouseup intervention + textBox2.onmouseup = null; + return false; + }; + }; + }; +})( jQuery ); \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.min.js b/plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.min.js new file mode 100644 index 000000000..468e6e8db --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.min.js @@ -0,0 +1 @@ +!function(a){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.import_export=redux.field_objects.import_export||{},a(document).ready(function(){redux.field_objects.import_export.init()}),redux.field_objects.import_export.init=function(b){b||(b=a(document).find(".redux-container-import_export"));var c=b;if(b.hasClass("redux-field-container")||(c=b.parents(".redux-field-container:first")),c.hasClass("redux-field-init")){c.removeClass("redux-field-init"),a("#redux-import").click(function(b){return""===a("#import-code-value").val()&&""===a("#import-link-value").val()?(b.preventDefault(),!1):(window.onbeforeunload=null,void(redux.args.ajax_save=!1))}),a("#redux-import-code-button").click(function(){var b=a("#redux-import-code-wrapper");a("#redux-import-link-wrapper").is(":visible")?(a("#import-link-value").text(""),a("#redux-import-link-wrapper").slideUp("fast",function(){b.slideDown("fast",function(){a("#import-code-value").focus()})})):b.is(":visible")?b.slideUp():b.slideDown("medium",function(){a("#import-code-value").focus()})}),a("#redux-import-link-button").click(function(){var b=a("#redux-import-link-wrapper");a("#redux-import-code-wrapper").is(":visible")?(a("#import-code-value").text(""),a("#redux-import-code-wrapper").slideUp("fast",function(){b.slideDown("fast",function(){a("#import-link-value").focus()})})):b.is(":visible")?b.slideUp():b.slideDown("medium",function(){a("#import-link-value").focus()})}),a("#redux-export-code-copy").click(function(){var b=a("#redux-export-code");a("#redux-export-link-value").is(":visible")?a("#redux-export-link-value").slideUp("fast",function(){b.slideDown("medium",function(){var b=redux.options;b["redux-backup"]=1,a(this).text(JSON.stringify(b)).focus().select()})}):b.is(":visible")?b.slideUp().text(""):b.slideDown("medium",function(){var b=redux.options;b["redux-backup"]=1,a(this).text(JSON.stringify(b)).focus().select()})}),a(".redux-container-import_export textarea").focusout(function(){var b=a(this).attr("id"),c=a(this),d=c;("import-link-value"==b||"import-code-value"==b)&&(d=a(this).parent()),d.slideUp("medium",function(){"redux-export-link-value"!=b&&c.text("")})}),a("#redux-export-link").click(function(){var b=a("#redux-export-link-value");a("#redux-export-code").is(":visible")?a("#redux-export-code").slideUp("fast",function(){b.slideDown().focus().select()}):b.is(":visible")?b.slideUp():b.slideDown("medium",function(){a(this).focus().select()})});var d=document.getElementById("redux-export-code");d.onfocus=function(){d.select(),d.onmouseup=function(){return d.onmouseup=null,!1}};var e=document.getElementById("import-code-value");e.onfocus=function(){e.select(),e.onmouseup=function(){return e.onmouseup=null,!1}}}}}(jQuery); \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.php b/plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.php new file mode 100644 index 000000000..5d0c9e85a --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.php @@ -0,0 +1,194 @@ +. + * + * @package ReduxFramework + * @author Dovy Paukstys + * @version 3.1.5 + */ + +// Exit if accessed directly + if ( ! defined( 'ABSPATH' ) ) { + exit; + } + +// Don't duplicate me! + if ( ! class_exists( 'ReduxFramework_import_export' ) ) { + + /** + * Main ReduxFramework_import_export class + * + * @since 1.0.0 + */ + class ReduxFramework_import_export extends ReduxFramework { + + /** + * Field Constructor. + * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function + * + * @since 1.0.0 + * @access public + * @return void + */ + function __construct( $field = array(), $value = '', $parent ) { + + + $this->parent = $parent; + $this->field = $field; + $this->value = $value; + $this->is_field = $this->parent->extensions['import_export']->is_field; + + if ( empty( $this->extension_dir ) ) { + $this->extension_dir = trailingslashit( str_replace( '\\', '/', dirname( __FILE__ ) ) ); + $this->extension_url = site_url( str_replace( trailingslashit( str_replace( '\\', '/', ABSPATH ) ), '', $this->extension_dir ) ); + } + + // Set default args for this field to avoid bad indexes. Change this to anything you use. + $defaults = array( + 'options' => array(), + 'stylesheet' => '', + 'output' => true, + 'enqueue' => true, + 'enqueue_frontend' => true + ); + $this->field = wp_parse_args( $this->field, $defaults ); + + } + + /** + * Field Render Function. + * Takes the vars and outputs the HTML for the field in the settings + * + * @since 1.0.0 + * @access public + * @return void + */ + public function render() { + + $secret = md5( md5( AUTH_KEY . SECURE_AUTH_KEY ) . '-' . $this->parent->args['opt_name'] ); + + // No errors please + $defaults = array( + 'full_width' => true, + 'overflow' => 'inherit', + ); + + $this->field = wp_parse_args( $this->field, $defaults ); + + if ( $this->is_field ) { + $fullWidth = $this->field['full_width']; + } + + $bDoClose = false; + + $id = $this->parent->args['opt_name'] . '-' . $this->field['id']; + + if ( ! $this->is_field || ( $this->is_field && false == $fullWidth ) ) : ?> + + + +
    + +
    + +

    +

    + +
    +

    + +
    + + + +

      

    + +
     
    +

    +
    +

    +
    + parent->args['opt_name'] . '&secret=' . $secret ); + ?> +

    +

    + + + + + +
    + +
    + + + + + \nsnippet cite\n ${1}\nsnippet code\n ${1}\nsnippet col\n ${1}\nsnippet col+\n \n col+${1}\nsnippet colgroup\n \n ${1}\n \nsnippet colgroup+\n \n \n col+${1}\n \nsnippet command\n \nsnippet command:c\n \nsnippet command:r\n \nsnippet datagrid\n \n ${1}\n \nsnippet datalist\n \n ${1}\n \nsnippet datatemplate\n \n ${1}\n \nsnippet dd\n
    ${1}
    \nsnippet dd.\n
    ${2}
    \nsnippet dd#\n
    ${2}
    \nsnippet del\n ${1}\nsnippet details\n
    ${1}
    \nsnippet dfn\n ${1}\nsnippet dialog\n \n ${1}\n \nsnippet div\n
    \n ${1}\n
    \nsnippet div.\n
    \n ${2}\n
    \nsnippet div#\n
    \n ${2}\n
    \nsnippet dl\n
    \n ${1}\n
    \nsnippet dl.\n
    \n ${2}\n
    \nsnippet dl#\n
    \n ${2}\n
    \nsnippet dl+\n
    \n
    ${1}
    \n
    ${2}
    \n dt+${3}\n
    \nsnippet dt\n
    ${1}
    \nsnippet dt.\n
    ${2}
    \nsnippet dt#\n
    ${2}
    \nsnippet dt+\n
    ${1}
    \n
    ${2}
    \n dt+${3}\nsnippet em\n ${1}\nsnippet embed\n \n ${2}\n \nsnippet fieldset#\n
    \n ${2}\n
    \nsnippet fieldset+\n
    \n ${1}\n ${2}\n
    \n fieldset+${3}\nsnippet figcaption\n
    ${1}
    \nsnippet figure\n
    ${1}
    \nsnippet footer\n
    \n ${1}\n
    \nsnippet footer.\n
    \n ${2}\n
    \nsnippet footer#\n
    \n ${2}\n
    \nsnippet form\n
    \n ${3}\n \nsnippet form.\n
    \n ${4}\n \nsnippet form#\n
    \n ${4}\n \nsnippet h1\n

    ${1}

    \nsnippet h1.\n

    ${2}

    \nsnippet h1#\n

    ${2}

    \nsnippet h2\n

    ${1}

    \nsnippet h2.\n

    ${2}

    \nsnippet h2#\n

    ${2}

    \nsnippet h3\n

    ${1}

    \nsnippet h3.\n

    ${2}

    \nsnippet h3#\n

    ${2}

    \nsnippet h4\n

    ${1}

    \nsnippet h4.\n

    ${2}

    \nsnippet h4#\n

    ${2}

    \nsnippet h5\n
    ${1}
    \nsnippet h5.\n
    ${2}
    \nsnippet h5#\n
    ${2}
    \nsnippet h6\n
    ${1}
    \nsnippet h6.\n
    ${2}
    \nsnippet h6#\n
    ${2}
    \nsnippet head\n \n \n\n ${1:`substitute(Filename(\'\', \'Page Title\'), \'^.\', \'\\u&\', \'\')`}\n ${2}\n \nsnippet header\n
    \n ${1}\n
    \nsnippet header.\n
    \n ${2}\n
    \nsnippet header#\n
    \n ${2}\n
    \nsnippet hgroup\n
    \n ${1}\n
    \nsnippet hgroup.\n
    \n ${1}\n \nsnippet html5\n \n \n \n \n ${1:`substitute(Filename(\'\', \'Page Title\'), \'^.\', \'\\u&\', \'\')`}\n ${2:meta}\n \n \n ${3:body}\n \n \nsnippet i\n ${1}\nsnippet iframe\n ${2}\nsnippet iframe.\n ${3}\nsnippet iframe#\n ${3}\nsnippet img\n ${2}${3}\nsnippet img.\n ${3}${4}\nsnippet img#\n ${3}${4}\nsnippet input\n ${5}\nsnippet input.\n ${6}\nsnippet input:text\n ${4}\nsnippet input:submit\n ${4}\nsnippet input:hidden\n ${4}\nsnippet input:button\n ${4}\nsnippet input:image\n ${5}\nsnippet input:checkbox\n ${3}\nsnippet input:radio\n ${3}\nsnippet input:color\n ${4}\nsnippet input:date\n ${4}\nsnippet input:datetime\n ${4}\nsnippet input:datetime-local\n ${4}\nsnippet input:email\n ${4}\nsnippet input:file\n ${4}\nsnippet input:month\n ${4}\nsnippet input:number\n ${4}\nsnippet input:password\n ${4}\nsnippet input:range\n ${4}\nsnippet input:reset\n ${4}\nsnippet input:search\n ${4}\nsnippet input:time\n ${4}\nsnippet input:url\n ${4}\nsnippet input:week\n ${4}\nsnippet ins\n ${1}\nsnippet kbd\n ${1}\nsnippet keygen\n ${1}\nsnippet label\n \nsnippet label:i\n \n ${7}\nsnippet label:s\n \n \nsnippet legend\n ${1}\nsnippet legend+\n ${1}\nsnippet li\n
  • ${1}
  • \nsnippet li.\n
  • ${2}
  • \nsnippet li+\n
  • ${1}
  • \n li+${2}\nsnippet lia\n
  • ${1}
  • \nsnippet lia+\n
  • ${1}
  • \n lia+${3}\nsnippet link\n ${5}\nsnippet link:atom\n ${2}\nsnippet link:css\n ${4}\nsnippet link:favicon\n ${2}\nsnippet link:rss\n ${2}\nsnippet link:touch\n ${2}\nsnippet map\n \n ${2}\n \nsnippet map.\n \n ${3}\n \nsnippet map#\n \n ${5}${6}\n ${7}\nsnippet mark\n ${1}\nsnippet menu\n \n ${1}\n \nsnippet menu:c\n \n ${1}\n \nsnippet menu:t\n \n ${1}\n \nsnippet meta\n ${3}\nsnippet meta:compat\n ${3}\nsnippet meta:refresh\n ${3}\nsnippet meta:utf\n ${3}\nsnippet meter\n ${1}\nsnippet nav\n \nsnippet nav.\n \nsnippet nav#\n \nsnippet noscript\n \nsnippet object\n \n ${3}\n ${4}\n# Embed QT Movie\nsnippet movie\n \n \n \n \n \n ${6}\nsnippet ol\n
      \n ${1}\n
    \nsnippet ol.\n
      \n ${2}\n
    \nsnippet ol+\n
      \n
    1. ${1}
    2. \n li+${2}\n
    \nsnippet opt\n \nsnippet opt+\n \n opt+${3}\nsnippet optt\n \nsnippet optgroup\n \n \n opt+${3}\n \nsnippet output\n ${1}\nsnippet p\n

    ${1}

    \nsnippet param\n ${3}\nsnippet pre\n
    \n		${1}\n	
    \nsnippet progress\n ${1}\nsnippet q\n ${1}\nsnippet rp\n ${1}\nsnippet rt\n ${1}\nsnippet ruby\n \n ${1}\n \nsnippet s\n ${1}\nsnippet samp\n \n ${1}\n \nsnippet script\n + parent->args['dev_mode'] ) { + wp_enqueue_style( + 'redux-field-section-css', + ReduxFramework::$_url . 'inc/fields/section/field_section.css', + array(), + time(), + 'all' + ); + } + } + } + } \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/section/field_section.scss b/plugins/legacy-admin/framework/core/inc/fields/section/field_section.scss new file mode 100644 index 000000000..2a70c87e3 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/section/field_section.scss @@ -0,0 +1,24 @@ +.redux-main { + .form-table-section-indented { + width: 95%; + margin-left: 5%; + } + + .form-table-section tr:first-of-type th:first-of-type { + padding: 0px !important; + } + + h3 { + margin-top: 10px; + } + + .form-table-section-indented > tbody > tr{ + &:first-child { + display: none; + } + + &:nth-last-child(2) { + border-bottom: 0; + } + } +} \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/select/elusive-icons.php b/plugins/legacy-admin/framework/core/inc/fields/select/elusive-icons.php new file mode 100644 index 000000000..a10d67613 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/select/elusive-icons.php @@ -0,0 +1,312 @@ + 0 ) { + var select2_params = $( this ).siblings( '.select2_params' ).val(); + select2_params = JSON.parse( select2_params ); + default_params = $.extend( {}, default_params, select2_params ); + } + + if ( $( this ).hasClass( 'font-icons' ) ) { + default_params = $.extend( + {}, { + formatResult: redux.field_objects.select.addIcon, + formatSelection: redux.field_objects.select.addIcon, + escapeMarkup: function( m ) { + return m; + } + }, default_params + ); + } + + $( this ).select2( default_params ); + + if ( $( this ).hasClass( 'select2-sortable' ) ) { + default_params = {}; + default_params.bindOrder = 'sortableStop'; + default_params.sortableOptions = {placeholder: 'ui-state-highlight'}; + $( this ).select2Sortable( default_params ); + } + + $( this ).on( + "change", function() { + redux_change( $( $( this ) ) ); + $( this ).select2SortableOrder(); + } + ); + } + ); + } + ); + }; + + redux.field_objects.select.addIcon = function( icon ) { + if ( icon.hasOwnProperty( 'id' ) ) { + return "" + "  " + icon.text + ""; + } + }; +})( jQuery ); \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/select/field_select.min.js b/plugins/legacy-admin/framework/core/inc/fields/select/field_select.min.js new file mode 100644 index 000000000..4f1aa049d --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/select/field_select.min.js @@ -0,0 +1 @@ +!function(a){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.select=redux.field_objects.select||{},redux.field_objects.select.init=function(b){b||(b=a(document).find(".redux-container-select:visible")),a(b).each(function(){var b=a(this),c=b;b.hasClass("redux-field-container")||(c=b.parents(".redux-field-container:first")),c.is(":hidden")||c.hasClass("redux-field-init")&&(c.removeClass("redux-field-init"),b.find("select.redux-select-item").each(function(){var b={width:"resolve",triggerChange:!0,allowClear:!0};if(a(this).siblings(".select2_params").size()>0){var c=a(this).siblings(".select2_params").val();c=JSON.parse(c),b=a.extend({},b,c)}a(this).hasClass("font-icons")&&(b=a.extend({},{formatResult:redux.field_objects.select.addIcon,formatSelection:redux.field_objects.select.addIcon,escapeMarkup:function(a){return a}},b)),a(this).select2(b),a(this).hasClass("select2-sortable")&&(b={},b.bindOrder="sortableStop",b.sortableOptions={placeholder:"ui-state-highlight"},a(this).select2Sortable(b)),a(this).on("change",function(){redux_change(a(a(this))),a(this).select2SortableOrder()})}))})},redux.field_objects.select.addIcon=function(a){return a.hasOwnProperty("id")?"  "+a.text+"":void 0}}(jQuery); \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/select/field_select.php b/plugins/legacy-admin/framework/core/inc/fields/select/field_select.php new file mode 100644 index 000000000..4c3fa41be --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/select/field_select.php @@ -0,0 +1,176 @@ +parent = $parent; + $this->field = $field; + $this->value = $value; + } + + /** + * Field Render Function. + * Takes the vars and outputs the HTML for the field in the settings + * + * @since ReduxFramework 1.0.0 + */ + public function render() { + $sortable = ( isset( $this->field['sortable'] ) && $this->field['sortable'] ) ? ' select2-sortable"' : ""; + + if ( ! empty( $sortable ) ) { // Dummy proofing :P + $this->field['multi'] = true; + } + + if ( ! empty( $this->field['data'] ) && empty( $this->field['options'] ) ) { + if ( empty( $this->field['args'] ) ) { + $this->field['args'] = array(); + } + + if ( $this->field['data'] == "elusive-icons" || $this->field['data'] == "elusive-icon" || $this->field['data'] == "elusive" ) { + $icons_file = ReduxFramework::$_dir . 'inc/fields/select/elusive-icons.php'; + /** + * filter 'redux-font-icons-file}' + * + * @param array $icon_file File for the icons + */ + $icons_file = apply_filters( 'redux-font-icons-file', $icons_file ); + + /** + * filter 'redux/{opt_name}/field/font/icons/file' + * + * @param array $icon_file File for the icons + */ + $icons_file = apply_filters( "redux/{$this->parent->args['opt_name']}/field/font/icons/file", $icons_file ); + if ( file_exists( $icons_file ) ) { + require_once( $icons_file ); + } + } + + $this->field['options'] = $this->parent->get_wordpress_data( $this->field['data'], $this->field['args'] ); + } + + if ( ! empty( $this->field['data'] ) && ( $this->field['data'] == "elusive-icons" || $this->field['data'] == "elusive-icon" || $this->field['data'] == "elusive" ) ) { + $this->field['class'] = " font-icons"; + } + //if + + if ( ! empty( $this->field['options'] ) ) { + $multi = ( isset( $this->field['multi'] ) && $this->field['multi'] ) ? ' multiple="multiple"' : ""; + + if ( ! empty( $this->field['width'] ) ) { + $width = ' style="' . $this->field['width'] . '"'; + } else { + $width = ' style="width: 40%;"'; + } + + $nameBrackets = ""; + if ( ! empty( $multi ) ) { + $nameBrackets = "[]"; + } + + $placeholder = ( isset( $this->field['placeholder'] ) ) ? esc_attr( $this->field['placeholder'] ) : __( 'Select an item', 'legacy_framework' ); + + if ( isset( $this->field['select2'] ) ) { // if there are any let's pass them to js + $select2_params = json_encode( $this->field['select2'] ); + $select2_params = htmlspecialchars( $select2_params, ENT_QUOTES ); + + echo ''; + } + + if ( isset( $this->field['multi'] ) && $this->field['multi'] && isset( $this->field['sortable'] ) && $this->field['sortable'] && ! empty( $this->value ) && is_array( $this->value ) ) { + $origOption = $this->field['options']; + $this->field['options'] = array(); + + foreach ( $this->value as $value ) { + $this->field['options'][ $value ] = $origOption[ $value ]; + } + + if ( count( $this->field['options'] ) < count( $origOption ) ) { + foreach ( $origOption as $key => $value ) { + if ( ! in_array( $key, $this->field['options'] ) ) { + $this->field['options'][ $key ] = $value; + } + } + } + } + + $sortable = ( isset( $this->field['sortable'] ) && $this->field['sortable'] ) ? ' select2-sortable"' : ""; + + echo ''; + } else { + echo '' . __( 'No items of this type were found.', 'legacy_framework' ) . ''; + } + } //function + + private function make_option($id, $value, $group_name = '') { + if ( is_array( $this->value ) ) { + $selected = ( is_array( $this->value ) && in_array( $id, $this->value ) ) ? ' selected="selected"' : ''; + } else { + $selected = selected( $this->value, $id, false ); + } + + echo ''; + } + + /** + * Enqueue Function. + * If this field requires any scripts, or css define this function and register/enqueue the scripts/css + * + * @since ReduxFramework 1.0.0 + */ + public function enqueue() { + wp_enqueue_style( 'select2-css' ); + + wp_enqueue_script( + 'redux-field-select-js', + ReduxFramework::$_url . 'inc/fields/select/field_select' . Redux_Functions::isMin() . '.js', + array( 'jquery', 'select2-js', 'redux-js' ), + time(), + true + ); + + if ($this->parent->args['dev_mode']) { + wp_enqueue_style( + 'redux-field-select-css', + ReduxFramework::$_url . 'inc/fields/select/field_select.css', + array(), + time(), + 'all' + ); + } + } //function + } //class +} \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/select/field_select.scss b/plugins/legacy-admin/framework/core/inc/fields/select/field_select.scss new file mode 100644 index 000000000..066386e75 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/select/field_select.scss @@ -0,0 +1,9 @@ +.redux-container-select { + li.ui-state-highlight { + height: 20px; + margin-top: 2px; + margin-left: 5px; + width: 64px; + margin-bottom: 0; + } +} \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.css b/plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.css new file mode 100644 index 000000000..b4a9459ca --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.css @@ -0,0 +1 @@ +.redux-container-select_image{margin-top:2px;margin-left:5px;width:100%;margin-bottom:0}.redux-preview-image{max-height:250px;max-width:250px;padding:5px;margin-top:10px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px} diff --git a/plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.js b/plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.js new file mode 100644 index 000000000..296f41ec6 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.js @@ -0,0 +1,72 @@ +/*global redux_change, redux*/ + +(function( $ ) { + "use strict"; + + redux.field_objects = redux.field_objects || {}; + redux.field_objects.select_image = redux.field_objects.select_image || {}; + + $( document ).ready( + function() { + //redux.field_objects.select_image.init(); + } + ); + + redux.field_objects.select_image.init = function( selector ) { + + if ( !selector ) { + selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-select_image:visible' ); + } + + $( selector ).each( + function() { + var el = $( this ); + var parent = el; + if ( !el.hasClass( 'redux-field-container' ) ) { + parent = el.parents( '.redux-field-container:first' ); + } + if ( parent.is( ":hidden" ) ) { // Skip hidden fields + return; + } + if ( parent.hasClass( 'redux-field-init' ) ) { + parent.removeClass( 'redux-field-init' ); + } else { + return; + } + var default_params = { + width: 'resolve', + triggerChange: true, + allowClear: true + }; + + var select2_handle = el.find( '.redux-container-select_image' ).find( '.select2_params' ); + + if ( select2_handle.size() > 0 ) { + var select2_params = select2_handle.val(); + + select2_params = JSON.parse( select2_params ); + default_params = $.extend( {}, default_params, select2_params ); + } + + el.find( 'select.redux-select-images' ).select2( default_params ); + + el.find( '.redux-select-images' ).on( + 'change', function() { + var preview = $( this ).parents( '.redux-field:first' ).find( '.redux-preview-image' ); + + if ( $( this ).val() === "" ) { + preview.fadeOut( + 'medium', function() { + preview.attr( 'src', '' ); + } + ); + } else { + preview.attr( 'src', $( this ).val() ); + preview.fadeIn().css( 'visibility', 'visible' ); + } + } + ); + } + ); + }; +})( jQuery ); \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.min.js b/plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.min.js new file mode 100644 index 000000000..613a6d88f --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.min.js @@ -0,0 +1 @@ +!function(a){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.select_image=redux.field_objects.select_image||{},a(document).ready(function(){}),redux.field_objects.select_image.init=function(b){b||(b=a(document).find(".redux-group-tab:visible").find(".redux-container-select_image:visible")),a(b).each(function(){var b=a(this),c=b;if(b.hasClass("redux-field-container")||(c=b.parents(".redux-field-container:first")),!c.is(":hidden")&&c.hasClass("redux-field-init")){c.removeClass("redux-field-init");var d={width:"resolve",triggerChange:!0,allowClear:!0},e=b.find(".redux-container-select_image").find(".select2_params");if(e.size()>0){var f=e.val();f=JSON.parse(f),d=a.extend({},d,f)}b.find("select.redux-select-images").select2(d),b.find(".redux-select-images").on("change",function(){var b=a(this).parents(".redux-field:first").find(".redux-preview-image");""===a(this).val()?b.fadeOut("medium",function(){b.attr("src","")}):(b.attr("src",a(this).val()),b.fadeIn().css("visibility","visible"))})}})}}(jQuery); \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.php b/plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.php new file mode 100644 index 000000000..a007d0b07 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.php @@ -0,0 +1,176 @@ + + */ + +// Exit if accessed directly +if ( ! defined( 'ABSPATH' ) ) { + exit; +} + +if ( ! class_exists( 'ReduxFramework_select_image' ) ) { + class ReduxFramework_select_image { + + /** + * Field Constructor. + * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function + * + * @since ReduxFramework 1.0.0 + */ + function __construct( $field = array(), $value = '', $parent ) { + $this->parent = $parent; + $this->field = $field; + $this->value = $value; + } + + /** + * Field Render Function. + * Takes the vars and outputs the HTML for the field in the settings + * + * @since ReduxFramework 1.0.0 + */ + function render() { + + // If options is NOT empty, the process + if ( ! empty( $this->field['options'] ) ) { + + // Strip off the file ext + if ( isset( $this->value ) ) { + $name = explode( ".", $this->value ); + $name = str_replace( '.' . end( $name ), '', $this->value ); + $name = basename( $name ); + //$this->value = trim( $name ); + $filename = trim($name); + } + + // beancounter + $x = 1; + + // Process width + if ( ! empty( $this->field['width'] ) ) { + $width = ' style="width:' . $this->field['width'] . ';"'; + } else { + $width = ' style="width: 40%;"'; + } + + // Process placeholder + $placeholder = ( isset( $this->field['placeholder'] ) ) ? esc_attr( $this->field['placeholder'] ) : __( 'Select an item', 'legacy_framework' ); + + if ( isset( $this->field['select2'] ) ) { // if there are any let's pass them to js + $select2_params = json_encode( $this->field['select2'] ); + $select2_params = htmlspecialchars( $select2_params, ENT_QUOTES ); + + echo ''; + } + + // Begin the '; + echo ''; + + + // Enum through the options array + foreach ( $this->field['options'] as $k => $v ) { + + // No array? No problem! + if ( ! is_array( $v ) ) { + $v = array( 'img' => $v ); + } + + // No title set? Make it blank. + if ( ! isset( $v['title'] ) ) { + $v['title'] = ''; + } + + // No alt? Set it to title. We do this so the alt tag shows + // something. It also makes HTML/SEO purists happy. + if ( ! isset( $v['alt'] ) ) { + $v['alt'] = $v['title']; + } + + // Set the selected entry + $selected = selected( $this->value, $v['img'], false ); + + // If selected returns something other than a blank space, we + // found our default/saved name. Save the array number in a + // variable to use later on when we want to extract its associted + // url. + if ( '' != $selected ) { + $arrNum = $x; + } + + // Add the option tag, with values. + echo ''; + + // Add a bean + $x ++; + } + + // Close the '; + + // Some space + echo '

    '; + + // Show the preview image. + echo '
    '; + + // just in case. You never know. + if ( ! isset( $arrNum ) ) { + $this->value = ''; + } + + // Set the default image. To get the url from the default name, + // we save the array count from the for/each loop, when the default image + // is mark as selected. Since the for/each loop starts at one, we must + // substract one from the saved array number. We then pull the url + // out of the options array, and there we go. + if ( '' == $this->value ) { + echo ''; + } else { + echo ''; + } + + // Close the
    tag. + echo '
    '; + } else { + + // No options specified. Really? + echo '' . __( 'No items of this type were found.', 'legacy_framework' ) . ''; + } + } //function + + /** + * Enqueue Function. + * If this field requires any scripts, or css define this function and register/enqueue the scripts/css + * + * @since ReduxFramework 1.0.0 + */ + function enqueue() { + wp_enqueue_style( 'select2-css' ); + + wp_enqueue_script( + 'field-select-image-js', + ReduxFramework::$_url . 'inc/fields/select_image/field_select_image' . Redux_Functions::isMin() . '.js', + array('jquery', 'select2-js', 'redux-js'), + time(), + true + ); + + if ($this->parent->args['dev_mode']) { + wp_enqueue_style( + 'redux-field-select-image-css', + ReduxFramework::$_url . 'inc/fields/select_image/field_select_image.css', + array(), + time(), + 'all' + ); + } + } //function + } //class +} \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.scss b/plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.scss new file mode 100644 index 000000000..97e859725 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/select_image/field_select_image.scss @@ -0,0 +1,19 @@ +.redux-container-select_image { + margin-top: 2px; + margin-left: 5px; + width: 100%; + margin-bottom: 0; +} + +.redux-preview-image { + max-height: 250px; + max-width: 250px; + padding: 5px; + margin-top: 10px; + border: 1px solid #e3e3e3; + background: #f7f7f7; + -moz-border-radius: 3px; + -khtml-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.css b/plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.css new file mode 100644 index 000000000..dcbeb1c12 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.css @@ -0,0 +1 @@ +.redux-container-slider .redux-slider-container{margin-left:25px;margin-right:25px;width:200px;display:inline-block;vertical-align:middle}.redux-container-slider .redux-slider-input,.redux-container-slider .redux-slider-select-one,.redux-container-slider .redux-slider-select-two{width:100px !important;text-align:center}.redux-container-slider .redux-slider-label{position:absolute;margin-left:-5px}.redux-container-slider .redux-slider-label-one{position:absolute;margin-left:-22px}.redux-container-slider .redux-slider-label-two{position:absolute;margin-top:-21px;margin-left:245px}@media screen and (max-width: 782px){.redux-container-slider input{display:inline-block !important}}@media screen and (max-width: 570px){.redux-container-slider{text-align:center}.redux-container-slider input,.redux-container-slider select,.redux-container-slider .redux-slider-label,.redux-container-slider .select2-container{display:block !important;position:inherit;margin:10px auto}.redux-container-slider .redux-slider-container{margin-top:3px;width:80%}} diff --git a/plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.js b/plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.js new file mode 100644 index 000000000..215f6299b --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.js @@ -0,0 +1,268 @@ +/*global redux_change, redux*/ + +(function( $ ) { + "use strict"; + + redux.field_objects = redux.field_objects || {}; + redux.field_objects.slider = redux.field_objects.slider || {}; + + $( document ).ready( + function() { + + } + ); + + redux.field_objects.slider.init = function( selector ) { + + if ( !selector ) { + selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-slider:visible' ); + } + + $( selector ).each( + function() { + var el = $( this ); + var parent = el; + + if ( !el.hasClass( 'redux-field-container' ) ) { + parent = el.parents( '.redux-field-container:first' ); + } + if ( parent.is( ":hidden" ) ) { // Skip hidden fields + return; + } + if ( parent.hasClass( 'redux-field-init' ) ) { + parent.removeClass( 'redux-field-init' ); + } else { + return; + } + + el.find( 'div.redux-slider-container' ).each( + function() { + + var start, toClass, defClassOne, defClassTwo, connectVal; + var DISPLAY_NONE = 0; + var DISPLAY_LABEL = 1; + var DISPLAY_TEXT = 2; + var DISPLAY_SELECT = 3; + + var mainID = $( this ).data( 'id' ); + var minVal = $( this ).data( 'min' ); + var maxVal = $( this ).data( 'max' ); + var stepVal = $( this ).data( 'step' ); + var handles = $( this ).data( 'handles' ); + var defValOne = $( this ).data( 'default-one' ); + var defValTwo = $( this ).data( 'default-two' ); + var resVal = $( this ).data( 'resolution' ); + var displayValue = parseInt( ($( this ).data( 'display' )) ); + var rtlVal = Boolean( $( this ).data( 'rtl' ) ); + var floatMark = ($( this ).data( 'float-mark' )); + + var rtl; + if ( rtlVal === true ) { + rtl = 'rtl'; + } else { + rtl = 'ltr'; + } + + // range array + var range = [minVal, maxVal]; + + // Set default values for dual slides. + var startTwo = [defValOne, defValTwo]; + + // Set default value for single slide + var startOne = [defValOne]; + + var inputOne, inputTwo; + if ( displayValue == DISPLAY_TEXT ) { + defClassOne = el.find( '.redux-slider-input-one-' + mainID ); + defClassTwo = el.find( '.redux-slider-input-two-' + mainID ); + + inputOne = defClassOne; + inputTwo = defClassTwo; + } else if ( displayValue == DISPLAY_SELECT ) { + defClassOne = el.find( '.redux-slider-select-one-' + mainID ); + defClassTwo = el.find( '.redux-slider-select-two-' + mainID ); + + redux.field_objects.slider.loadSelect( defClassOne, minVal, maxVal, resVal, stepVal ); + + if ( handles === 2 ) { + redux.field_objects.slider.loadSelect( defClassTwo, minVal, maxVal, resVal, stepVal ); + } + + } else if ( displayValue == DISPLAY_LABEL ) { + defClassOne = el.find( '#redux-slider-label-one-' + mainID ); + defClassTwo = el.find( '#redux-slider-label-two-' + mainID ); + } else if ( displayValue == DISPLAY_NONE ) { + defClassOne = el.find( '.redux-slider-value-one-' + mainID ); + defClassTwo = el.find( '.redux-slider-value-two-' + mainID ); + } + + var classOne, classTwo; + if ( displayValue == DISPLAY_LABEL ) { + var x = [defClassOne, 'html']; + var y = [defClassTwo, 'html']; + + classOne = [x]; + classTwo = [x, y]; + } else { + classOne = [defClassOne]; + classTwo = [defClassOne, defClassTwo]; + } + + if ( handles === 2 ) { + start = startTwo; + toClass = classTwo; + connectVal = true; + } else { + start = startOne; + toClass = classOne; + connectVal = 'lower'; + } + + var slider = $( this ).noUiSlider( + { + range: range, + start: start, + handles: handles, + step: stepVal, + connect: connectVal, + behaviour: "tap-drag", + direction: rtl, + serialization: { + resolution: resVal, + to: toClass, + mark: floatMark, + }, + slide: function() { + if ( displayValue == DISPLAY_LABEL ) { + if ( handles === 2 ) { + var inpSliderVal = slider.val(); + el.find( 'input.redux-slider-value-one-' + mainID ).attr( + 'value', inpSliderVal[0] + ); + el.find( 'input.redux-slider-value-two-' + mainID ).attr( + 'value', inpSliderVal[1] + ); + } else { + el.find( 'input.redux-slider-value-one-' + mainID ).attr( + 'value', slider.val() + ); + } + } + + if ( displayValue == DISPLAY_SELECT ) { + if ( handles === 2 ) { + el.find( '.redux-slider-select-one' ).select2( 'val', slider.val()[0] ); + el.find( '.redux-slider-select-two' ).select2( 'val', slider.val()[1] ); + } else { + el.find( '.redux-slider-select-one' ).select2( 'val', slider.val() ); + } + } + + redux_change( $( this ).parents( '.redux-field-container:first' ).find( 'input' ) ); + } + } + ); + + if ( displayValue === DISPLAY_TEXT ) { + inputOne.keydown( + function( e ) { + + var sliderOne = slider.val(); + var value = parseInt( sliderOne[0] ); + + switch ( e.which ) { + case 38: + slider.val( [value + 1, null] ); + break; + case 40: + slider.val( [value - 1, null] ); + break; + case 13: + e.preventDefault(); + break; + } + } + ); + + if ( handles === 2 ) { + inputTwo.keydown( + function( e ) { + var sliderTwo = slider.val(); + var value = parseInt( sliderTwo[1] ); + + switch ( e.which ) { + case 38: + slider.val( [null, value + 1] ); + break; + case 40: + slider.val( [null, value - 1] ); + break; + case 13: + e.preventDefault(); + break; + } + } + ); + } + } + } + ); + + var default_params = { + width: 'resolve', + triggerChange: true, + allowClear: true + }; + + var select2_handle = el.find( '.select2_params' ); + if ( select2_handle.size() > 0 ) { + var select2_params = select2_handle.val(); + + select2_params = JSON.parse( select2_params ); + default_params = $.extend( {}, default_params, select2_params ); + } + + el.find( 'select.redux-slider-select-one, select.redux-slider-select-two' ).select2( default_params ); + + } + ); + + }; + + // Return true for float value, false otherwise + redux.field_objects.slider.isFloat = function( mixed_var ) { + return +mixed_var === mixed_var && (!(isFinite( mixed_var ))) || Boolean( (mixed_var % 1) ); + }; + + // Return number of integers after the decimal point. + redux.field_objects.slider.decimalCount = function( res ) { + var q = res.toString().split( '.' ); + return q[1].length; + }; + + redux.field_objects.slider.loadSelect = function( myClass, min, max, res, step ) { + + //var j = step + ((decCount ) - (step )); // 18; + + for ( var i = min; i <= max; i = i + res ) { + //var step = 2; + + //if (j === (step + ((decCount ) - (step )))) { + var n = i; + if ( redux.field_objects.slider.isFloat( res ) ) { + var decCount = redux.field_objects.slider.decimalCount( res ); + n = i.toFixed( decCount ); + } + + $( myClass ).append( + '' + ); + //j = 0; + //} + //j++; + } + }; + + +})( jQuery ); diff --git a/plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.min.js b/plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.min.js new file mode 100644 index 000000000..aca94ada3 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.min.js @@ -0,0 +1 @@ +!function(a){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.slider=redux.field_objects.slider||{},a(document).ready(function(){}),redux.field_objects.slider.init=function(b){b||(b=a(document).find(".redux-group-tab:visible").find(".redux-container-slider:visible")),a(b).each(function(){var b=a(this),c=b;if(b.hasClass("redux-field-container")||(c=b.parents(".redux-field-container:first")),!c.is(":hidden")&&c.hasClass("redux-field-init")){c.removeClass("redux-field-init"),b.find("div.redux-slider-container").each(function(){var c,d,e,f,g,h,i=0,j=1,k=2,l=3,m=a(this).data("id"),n=a(this).data("min"),o=a(this).data("max"),p=a(this).data("step"),q=a(this).data("handles"),r=a(this).data("default-one"),s=a(this).data("default-two"),t=a(this).data("resolution"),u=parseInt(a(this).data("display")),v=Boolean(a(this).data("rtl")),w=a(this).data("float-mark");h=v===!0?"rtl":"ltr";var x,y,z=[n,o],A=[r,s],B=[r];u==k?(e=b.find(".redux-slider-input-one-"+m),f=b.find(".redux-slider-input-two-"+m),x=e,y=f):u==l?(e=b.find(".redux-slider-select-one-"+m),f=b.find(".redux-slider-select-two-"+m),redux.field_objects.slider.loadSelect(e,n,o,t,p),2===q&&redux.field_objects.slider.loadSelect(f,n,o,t,p)):u==j?(e=b.find("#redux-slider-label-one-"+m),f=b.find("#redux-slider-label-two-"+m)):u==i&&(e=b.find(".redux-slider-value-one-"+m),f=b.find(".redux-slider-value-two-"+m));var C,D;if(u==j){var E=[e,"html"],F=[f,"html"];C=[E],D=[E,F]}else C=[e],D=[e,f];2===q?(c=A,d=D,g=!0):(c=B,d=C,g="lower");var G=a(this).noUiSlider({range:z,start:c,handles:q,step:p,connect:g,behaviour:"tap-drag",direction:h,serialization:{resolution:t,to:d,mark:w},slide:function(){if(u==j)if(2===q){var c=G.val();b.find("input.redux-slider-value-one-"+m).attr("value",c[0]),b.find("input.redux-slider-value-two-"+m).attr("value",c[1])}else b.find("input.redux-slider-value-one-"+m).attr("value",G.val());u==l&&(2===q?(b.find(".redux-slider-select-one").select2("val",G.val()[0]),b.find(".redux-slider-select-two").select2("val",G.val()[1])):b.find(".redux-slider-select-one").select2("val",G.val())),redux_change(a(this).parents(".redux-field-container:first").find("input"))}});u===k&&(x.keydown(function(a){var b=G.val(),c=parseInt(b[0]);switch(a.which){case 38:G.val([c+1,null]);break;case 40:G.val([c-1,null]);break;case 13:a.preventDefault()}}),2===q&&y.keydown(function(a){var b=G.val(),c=parseInt(b[1]);switch(a.which){case 38:G.val([null,c+1]);break;case 40:G.val([null,c-1]);break;case 13:a.preventDefault()}}))});var d={width:"resolve",triggerChange:!0,allowClear:!0},e=b.find(".select2_params");if(e.size()>0){var f=e.val();f=JSON.parse(f),d=a.extend({},d,f)}b.find("select.redux-slider-select-one, select.redux-slider-select-two").select2(d)}})},redux.field_objects.slider.isFloat=function(a){return+a===a&&!isFinite(a)||Boolean(a%1)},redux.field_objects.slider.decimalCount=function(a){var b=a.toString().split(".");return b[1].length},redux.field_objects.slider.loadSelect=function(b,c,d,e){for(var f=c;d>=f;f+=e){var g=f;if(redux.field_objects.slider.isFloat(e)){var h=redux.field_objects.slider.decimalCount(e);g=f.toFixed(h)}a(b).append('")}}}(jQuery); \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.php b/plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.php new file mode 100644 index 000000000..5935898c0 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.php @@ -0,0 +1,412 @@ +. + * + * @package ReduxFramework + * @subpackage Field_Slider + * @author Kevin Provance (kprovance) + * @version 2.0.0 + */ + +// Exit if accessed directly +if ( ! defined( 'ABSPATH' ) ) { + exit; +} + +if ( ! class_exists( 'ReduxFramework_slider' ) ) { + class ReduxFramework_slider { + + /** + * Field Constructor. + * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function + * + * @since ReduxFramework 3.1.8 + */ + private $display_none = 0; + private $display_label = 1; + private $display_text = 2; + private $display_select = 3; + + function __construct( $field = array(), $value = '', $parent ) { + + //parent::__construct( $parent->sections, $parent->args ); + $this->parent = $parent; + $this->field = $field; + $this->value = $value; + + // Set defaults + $defaults = array( + 'handles' => 1, + 'resolution' => 1, + 'display_value' => 'text', + 'float_mark' => '.', + ); + + $this->field = wp_parse_args( $this->field, $defaults ); + + // Sanitize float mark + switch ( $this->field['float_mark'] ) { + case ',': + case '.': + break; + default: + $this->field['float_mark'] = '.'; + break; + } + + // Sanitize resolution value + $this->field['resolution'] = $this->cleanVal( $this->field['resolution'] ); + + // Sanitize handle value + switch ( $this->field['handles'] ) { + case 0: + case 1: + $this->field['handles'] = 1; + break; + default: + $this->field['handles'] = 2; + break; + } + + // Sanitize display value + switch ( $this->field['display_value'] ) { + case 'label': + $this->field['display_value'] = $this->display_label; + break; + case 'text': + default: + $this->field['display_value'] = $this->display_text; + break; + case 'select': + $this->field['display_value'] = $this->display_select; + break; + case 'none': + $this->field['display_value'] = $this->display_none; + break; + } + } + + private function cleanVal( $var ) { + if ( is_float( $var ) ) { + $cleanVar = floatval( $var ); + } else { + $cleanVar = intval( $var ); + } + + return $cleanVar; + } + + private function cleanDefault( $val ) { + if ( empty( $val ) && ! empty( $this->field['default'] ) && $this->cleanVal( $this->field['min'] ) >= 1 ) { + $val = $this->cleanVal( $this->field['default'] ); + } + + if ( empty( $val ) && $this->cleanVal( $this->field['min'] ) >= 1 ) { + $val = $this->cleanVal( $this->field['min'] ); + } + + if ( empty( $val ) ) { + $val = 0; + } + + // Extra Validation + if ( $val < $this->field['min'] ) { + $val = $this->cleanVal( $this->field['min'] ); + } else if ( $val > $this->field['max'] ) { + $val = $this->cleanVal( $this->field['max'] ); + } + + return $val; + } + + private function cleanDefaultArray( $val ) { + $one = $this->value[1]; + $two = $this->value[2]; + + if ( empty( $one ) && ! empty( $this->field['default'][1] ) && $this->cleanVal( $this->field['min'] ) >= 1 ) { + $one = $this->cleanVal( $this->field['default'][1] ); + } + + if ( empty( $one ) && $this->cleanVal( $this->field['min'] ) >= 1 ) { + $one = $this->cleanVal( $this->field['min'] ); + } + + if ( empty( $one ) ) { + $one = 0; + } + + if ( empty( $two ) && ! empty( $this->field['default'][2] ) && $this->cleanVal( $this->field['min'] ) >= 1 ) { + $two = $this->cleanVal( $this->field['default'][1] + 1 ); + } + + if ( empty( $two ) && $this->cleanVal( $this->field['min'] ) >= 1 ) { + $two = $this->cleanVal( $this->field['default'][1] + 1 ); + } + + if ( empty( $two ) ) { + $two = $this->field['default'][1] + 1; + } + + $val[0] = $one; + $val[1] = $two; + + return $val; + } + + + /** + * Clean the field data to the fields defaults given the parameters. + * + * @since Redux_Framework 3.1.8 + */ + function clean() { + + // Set min to 0 if no value is set. + $this->field['min'] = empty( $this->field['min'] ) ? 0 : $this->cleanVal( $this->field['min'] ); + + // Set max to min + 1 if empty. + $this->field['max'] = empty( $this->field['max'] ) ? $this->field['min'] + 1 : $this->cleanVal( $this->field['max'] ); + + // Set step to 1 if step is empty ot step > max. + $this->field['step'] = empty( $this->field['step'] ) || $this->field['step'] > $this->field['max'] ? 1 : $this->cleanVal( $this->field['step'] ); + + if ( 2 == $this->field['handles'] ) { + if ( ! is_array( $this->value ) ) { + $this->value[1] = 0; + $this->value[2] = 1; + } + $this->value = $this->cleanDefaultArray( $this->value ); + } else { + if ( is_array( $this->value ) ) { + $this->value = 0; + } + $this->value = $this->cleanDefault( $this->value ); + } + + // More dummy checks + //if ( ! is_array( $this->field['default'] ) && 2 == $this->field['handles'] ) { + if ( ! is_array( $this->value ) && 2 == $this->field['handles'] ) { + $this->value[0] = $this->field['min']; + $this->value[1] = $this->field['min'] + 1; + } + + //if ( is_array( $this->field['default'] ) && 1 == $this->field['handles'] ) { + if ( is_array( $this->value ) && 1 == $this->field['handles'] ) { + $this->value = $this->field['min']; + } + + } + + /** + * Enqueue Function. + * If this field requires any scripts, or css define this function and register/enqueue the scripts/css + * + * @since ReduxFramework 3.1.8 + */ + function enqueue() { + + $min = Redux_Functions::isMin(); + + wp_enqueue_style( 'select2-css' ); + + wp_enqueue_style( + 'redux-nouislider-css', + ReduxFramework::$_url . 'inc/fields/slider/vendor/nouislider/redux.jquery.nouislider.css', + array(), + '5.0.0', + 'all' + ); + + wp_register_script( + 'redux-nouislider-js', + ReduxFramework::$_url . 'inc/fields/slider/vendor/nouislider/redux.jquery.nouislider' . $min . '.js', + array( 'jquery' ), + '5.0.0', + true + ); + + wp_enqueue_script( + 'redux-field-slider-js', + ReduxFramework::$_url . 'inc/fields/slider/field_slider' . $min . '.js', + array( 'jquery', 'redux-nouislider-js', 'redux-js', 'select2-js' ), + time(), + true + ); + + if ($this->parent->args['dev_mode']) { + wp_enqueue_style( + 'redux-field-slider-css', + ReduxFramework::$_url . 'inc/fields/slider/field_slider.css', + array(), + time(), + 'all' + ); + } + } + + //function + + /** + * Field Render Function. + * Takes the vars and outputs the HTML for the field in the settings + * + * @since ReduxFramework 0.0.4 + */ + function render() { + + $this->clean(); + + $fieldID = $this->field['id']; + $fieldName = $this->field['name'] . $this->field['name_suffix']; + //$fieldName = $this->parent->args['opt_name'] . '[' . $this->field['id'] . ']'; + + // Set handle number variable. + $twoHandles = false; + if ( 2 == $this->field['handles'] ) { + $twoHandles = true; + } + + // Set default values(s) + if ( true == $twoHandles ) { + $valOne = $this->value[0]; + $valTwo = $this->value[1]; + + $html = 'data-default-one="' . $valOne . '" '; + $html .= 'data-default-two="' . $valTwo . '" '; + + $nameOne = $fieldName . '[1]'; + $nameTwo = $fieldName . '[2]'; + + $idOne = $fieldID . '[1]'; + $idTwo = $fieldID . '[2]'; + } else { + $valOne = $this->value; + $valTwo = ''; + + $html = 'data-default-one="' . $valOne . '"'; + + $nameOne = $fieldName; + $nameTwo = ''; + + $idOne = $fieldID; + $idTwo = ''; + } + + $showInput = false; + $showLabel = false; + $showSelect = false; + + // TEXT output + if ( $this->display_text == $this->field['display_value'] ) { + $showInput = true; + echo ''; + + // LABEL output + } elseif ( $this->display_label == $this->field['display_value'] ) { + $showLabel = true; + + $labelNum = $twoHandles ? '-one' : ''; + + echo '
    +
    '; + + // SELECT output + } elseif ( $this->display_select == $this->field['display_value'] ) { + $showSelect = true; + + if ( isset( $this->field['select2'] ) ) { // if there are any let's pass them to js + $select2_params = json_encode( $this->field['select2'] ); + $select2_params = htmlspecialchars( $select2_params, ENT_QUOTES ); + + echo ''; + } + + + echo ''; + } + + // DIV output + echo + '
    +
    '; + + // Double slider output + if ( true == $twoHandles ) { + + // TEXT + if ( true == $showInput ) { + echo ''; + } + + // LABEL + if ( true == $showLabel ) { + echo '
    +
    '; + } + + // SELECT + if ( true == $showSelect ) { + echo ''; + + } + } + + // NO output (input hidden) + if ( $this->display_none == $this->field['display_value'] || $this->display_label == $this->field['display_value'] ) { + echo ''; + + // double slider hidden output + if ( true == $twoHandles ) { + echo ''; + } + } + } + } +} \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.scss b/plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.scss new file mode 100644 index 000000000..2887e42bf --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/slider/field_slider.scss @@ -0,0 +1,61 @@ +.redux-container-slider { + .redux-slider-container { + margin-left: 25px; + margin-right: 25px; + width: 200px; + display: inline-block; + vertical-align: middle; + } + + .redux-slider-input, + .redux-slider-select-one, + .redux-slider-select-two { + width: 100px !important; + text-align: center; + } + + .redux-slider-label { + position: absolute; + margin-left: -5px; + } + + .redux-slider-label-one { + position: absolute; + margin-left: -22px; + } + + .redux-slider-label-two { + position: absolute; + margin-top: -21px; + margin-left: 245px; + } +} + +@media screen and (max-width: 782px) { + .redux-container-slider { + input { + display: inline-block !important; + } + } +} + +// Select Slider +@media screen and (max-width: 570px) { + .redux-container-slider { + text-align: center; + + input, + select, + .redux-slider-label, + .select2-container { + display: block !important; + position: inherit; + margin: 10px auto; + } + + .redux-slider-container { + margin-top: 3px; + width: 80%; + } + } +} diff --git a/plugins/legacy-admin/framework/core/inc/fields/slider/vendor/nouislider/redux.jquery.nouislider.css b/plugins/legacy-admin/framework/core/inc/fields/slider/vendor/nouislider/redux.jquery.nouislider.css new file mode 100644 index 000000000..995bbd103 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/slider/vendor/nouislider/redux.jquery.nouislider.css @@ -0,0 +1,172 @@ + +/* Functional styling; + * These styles are required for noUiSlider to function. + * You don't need to change these rules to apply your design. + */ +.noUi-target, +.noUi-target * { +-webkit-touch-callout: none; +-webkit-user-select: none; +-ms-touch-action: none; +-ms-user-select: none; +-moz-user-select: none; +-moz-box-sizing: border-box; + box-sizing: border-box; +} +.noUi-base { + width: 100%; + height: 100%; + position: relative; +} +.noUi-origin { + position: absolute; + right: 0; + top: 0; + left: 0; + bottom: 0; +} +.noUi-handle { + position: relative; + z-index: 1; +} +.noUi-stacking .noUi-handle { +/* This class is applied to the lower origin when + its values is > 50%. */ + z-index: 10; +} +.noUi-stacking + .noUi-origin { +/* Fix stacking order in IE7, which incorrectly + creates a new context for the origins. */ + *z-index: -1; +} +.noUi-state-tap .noUi-origin { +-webkit-transition: left 0.3s, top 0.3s; + transition: left 0.3s, top 0.3s; +} +.noUi-state-drag * { + cursor: inherit !important; +} + +/* Slider size and handle placement; + */ +.noUi-horizontal { + height: 18px; +} +.noUi-horizontal .noUi-handle { + width: 34px; + height: 28px; + left: -17px; + top: -6px; +} +.noUi-horizontal.noUi-extended { + padding: 0 15px; +} +.noUi-horizontal.noUi-extended .noUi-origin { + right: -15px; +} +.noUi-vertical { + width: 18px; +} +.noUi-vertical .noUi-handle { + width: 28px; + height: 34px; + left: -6px; + top: -17px; +} +.noUi-vertical.noUi-extended { + padding: 15px 0; +} +.noUi-vertical.noUi-extended .noUi-origin { + bottom: -15px; +} + +/* Styling; + */ +.noUi-background { + background: #FAFAFA; + box-shadow: inset 0 1px 1px #f0f0f0; +} +.noUi-connect { + background: #3FB8AF; + box-shadow: inset 0 0 3px rgba(51,51,51,0.45); +-webkit-transition: background 450ms; + transition: background 450ms; +} +.noUi-origin { + border-radius: 2px; +} +.noUi-target { + border-radius: 4px; + border: 1px solid #D3D3D3; + box-shadow: inset 0 1px 1px #F0F0F0, 0 3px 6px -5px #BBB; +} +.noUi-target.noUi-connect { + box-shadow: inset 0 0 3px rgba(51,51,51,0.45), 0 3px 6px -5px #BBB; +} + +/* Handles and cursors; + */ +.noUi-dragable { + cursor: w-resize; +} +.noUi-vertical .noUi-dragable { + cursor: n-resize; +} +.noUi-handle { + border: 1px solid #D9D9D9; + border-radius: 3px; + background: #FFF; + cursor: default; + box-shadow: inset 0 0 1px #FFF, + inset 0 1px 7px #EBEBEB, + 0 3px 6px -3px #BBB; +} +.noUi-active { + box-shadow: inset 0 0 1px #FFF, + inset 0 1px 7px #DDD, + 0 3px 6px -3px #BBB; +} + +/* Handle stripes; + */ +.noUi-handle:before, +.noUi-handle:after { + content: ""; + display: block; + position: absolute; + height: 14px; + width: 1px; + background: #E8E7E6; + left: 14px; + top: 6px; +} +.noUi-handle:after { + left: 17px; +} +.noUi-vertical .noUi-handle:before, +.noUi-vertical .noUi-handle:after { + width: 14px; + height: 1px; + left: 6px; + top: 14px; +} +.noUi-vertical .noUi-handle:after { + top: 17px; +} + +/* Disabled state; + */ +[disabled].noUi-connect, +[disabled] .noUi-connect { + background: #B8B8B8; +} +[disabled] .noUi-handle { + cursor: not-allowed; +} + +/* Blocked state; + */ +.noUi-state-blocked.noUi-connect, +.noUi-state-blocked .noUi-connect { + background: #4FDACF; +} diff --git a/plugins/legacy-admin/framework/core/inc/fields/slider/vendor/nouislider/redux.jquery.nouislider.js b/plugins/legacy-admin/framework/core/inc/fields/slider/vendor/nouislider/redux.jquery.nouislider.js new file mode 100644 index 000000000..4c05d20f8 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/slider/vendor/nouislider/redux.jquery.nouislider.js @@ -0,0 +1,1420 @@ +/*! $.noUiSlider + @version 5.0.0 + @author Leon Gersen https://twitter.com/LeonGersen + @license WTFPL http://www.wtfpl.net/about/ + @documentation http://refreshless.com/nouislider/ +*/ + +// ==ClosureCompiler== +// @externs_url http://refreshless.com/externs/jquery-1.8.js +// @compilation_level ADVANCED_OPTIMIZATIONS +// @warning_level VERBOSE +// ==/ClosureCompiler== + +/*jshint laxcomma: true */ +/*jshint smarttabs: true */ +/*jshint sub: true */ + +/*jslint browser: true */ +/*jslint continue: true */ +/*jslint plusplus: true */ +/*jslint white: true */ +/*jslint sub: true */ + +(function( $ ){ + + 'use strict'; + + if ( $['zepto'] && !$.fn.removeData ) { + throw new ReferenceError('Zepto is loaded without the data module.'); + } + + $.fn['noUiSlider'] = function( options, rebuild ){ + + var + // Cache the document and body selectors; + doc = $(document) + ,body = $('body') + + // Namespace for binding and unbinding slider events; + ,namespace = '.nui' + + // Copy of the current value function; + ,$VAL = $.fn.val + + // Re-usable list of classes; + ,clsList = [ + /* 0 */ 'noUi-base' + /* 1 */ ,'noUi-origin' + /* 2 */ ,'noUi-handle' + /* 3 */ ,'noUi-input' + /* 4 */ ,'noUi-active' + /* 5 */ ,'noUi-state-tap' + /* 6 */ ,'noUi-target' + /* 7 */ ,'-lower' + /* 8 */ ,'-upper' + /* 9 */ ,'noUi-connect' + /* 10 */ ,'noUi-horizontal' + /* 11 */ ,'noUi-vertical' + /* 12 */ ,'noUi-background' + /* 13 */ ,'noUi-stacking' + /* 14 */ ,'noUi-block' + /* 15 */ ,'noUi-state-blocked' + /* 16 */ ,'noUi-ltr' + /* 17 */ ,'noUi-rtl' + /* 18 */ ,'noUi-dragable' + /* 19 */ ,'noUi-extended' + /* 20 */ ,'noUi-state-drag' + ] + + // Determine the events to bind. IE11 implements pointerEvents without + // a prefix, which breaks compatibility with the IE10 implementation. + ,actions = window.navigator['pointerEnabled'] ? { + start: 'pointerdown' + ,move: 'pointermove' + ,end: 'pointerup' + } : window.navigator['msPointerEnabled'] ? { + start: 'MSPointerDown' + ,move: 'MSPointerMove' + ,end: 'MSPointerUp' + } : { + start: 'mousedown touchstart' + ,move: 'mousemove touchmove' + ,end: 'mouseup touchend' + }; + + +// Percentage calculation + + // (percentage) How many percent is this value of this range? + function fromPercentage ( range, value ) { + return (value * 100) / ( range[1] - range[0] ); + } + + // (percentage) Where is this value on this range? + function toPercentage ( range, value ) { + return fromPercentage( range, range[0] < 0 ? + value + Math.abs(range[0]) : + value - range[0] ); + } + + // (value) How much is this percentage on this range? + function isPercentage ( range, value ) { + return ((value * ( range[1] - range[0] )) / 100) + range[0]; + } + + +// Type tests + + // Test in an object is an instance of jQuery or Zepto. + function isInstance ( a ) { + return a instanceof $ || ( $['zepto'] && $['zepto']['isZ'](a) ); + } + + // Checks whether a value is numerical. + function isNumeric ( a ) { + return !isNaN( parseFloat( a ) ) && isFinite( a ); + } + + +// General helper functions + + // Test an array of objects, and calls them if they are a function. + function call ( functions, scope ) { + + // Allow the passing of an unwrapped function. + // Leaves other code a more comprehensible. + if( !$.isArray( functions ) ){ + functions = [ functions ]; + } + + $.each( functions, function(){ + if (typeof this === 'function') { + this.call(scope); + } + }); + } + + // Returns a proxy to set a target using the public value method. + function setN ( target, number ) { + + return function(){ + + // Determine the correct position to set, + // leave the other one unchanged. + var val = [null, null]; + val[ number ] = $(this).val(); + + // Trigger the 'set' callback + target.val(val, true); + }; + } + + // Round a value to the closest 'to'. + function closest ( value, to ){ + return Math.round(value / to) * to; + } + + // Format output value to specified standards. + function format ( value, options ) { + + // Round the value to the resolution that was set + // with the serialization options. + value = value.toFixed( options['decimals'] ); + + // Rounding away decimals might cause a value of -0 + // when using very small ranges. Remove those cases. + if ( parseFloat(value) === 0 ) { + value = value.replace('-0', '0'); + } + + // Apply the proper decimal mark to the value. + return value.replace( '.', options['serialization']['mark'] ); + } + + // Determine the handle closest to an event. + function closestHandle ( handles, location, style ) { + + if ( handles.length === 1 ) { + return handles[0]; + } + + var total = handles[0].offset()[style] + + handles[1].offset()[style]; + + return handles[ location < total / 2 ? 0 : 1 ]; + } + + // Round away small numbers in floating point implementation. + function digits ( value, round ) { + return parseFloat(value.toFixed(round)); + } + +// Event abstraction + + // Provide a clean event with standardized offset values. + function fixEvent ( e ) { + + // Prevent scrolling and panning on touch events, while + // attempting to slide. The tap event also depends on this. + e.preventDefault(); + + // Filter the event to register the type, which can be + // touch, mouse or pointer. Offset changes need to be + // made on an event specific basis. + var touch = e.type.indexOf('touch') === 0 + ,mouse = e.type.indexOf('mouse') === 0 + ,pointer = e.type.indexOf('pointer') === 0 + ,x,y, event = e; + + // IE10 implemented pointer events with a prefix; + if ( e.type.indexOf('MSPointer') === 0 ) { + pointer = true; + } + + // Get the originalEvent, if the event has been wrapped + // by jQuery. Zepto doesn't wrap the event. + if ( e.originalEvent ) { + e = e.originalEvent; + } + + if ( touch ) { + // noUiSlider supports one movement at a time, + // so we can select the first 'changedTouch'. + x = e.changedTouches[0].pageX; + y = e.changedTouches[0].pageY; + } + if ( mouse || pointer ) { + + // Polyfill the pageXOffset and pageYOffset + // variables for IE7 and IE8; + if( !pointer && window.pageXOffset === undefined ){ + window.pageXOffset = document.documentElement.scrollLeft; + window.pageYOffset = document.documentElement.scrollTop; + } + + x = e.clientX + window.pageXOffset; + y = e.clientY + window.pageYOffset; + } + + return $.extend( event, { + 'pointX': x + ,'pointY': y + ,cursor: mouse + }); + } + + // Handler for attaching events trough a proxy + function attach ( events, element, callback, pass ) { + + var target = pass.target; + + // Add the noUiSlider namespace to all events. + events = events.replace( /\s/g, namespace + ' ' ) + namespace; + + // Bind a closure on the target. + return element.on( events, function( e ){ + + // jQuery and Zepto handle unset attributes differently. + var disabled = target.attr('disabled'); + disabled = !( disabled === undefined || disabled === null ); + + // Test if there is anything that should prevent an event + // from being handled, such as a disabled state or an active + // 'tap' transition. + if( target.hasClass('noUi-state-tap') || disabled ) { + return false; + } + + // Call the event handler with three arguments: + // - The event; + // - An object with data for the event; + // - The slider options; + // Having the slider options as a function parameter prevents + // getting it in every function, which muddies things up. + callback ( + fixEvent( e ) + ,pass + ,target.data('base').data('options') + ); + }); + } + + +// Serialization and value storage + + // Store a value on all serialization targets, or get the current value. + function serialize ( a ) { + + /*jshint validthis: true */ + + // Re-scope target for availability within .each; + var target = this.target; + + // Get the value for this handle + if ( a === undefined ) { + return this.element.data('value'); + } + + // Write the value to all serialization objects + // or store a new value on the handle + if ( a === true ) { + a = this.element.data('value'); + } else { + this.element.data('value', a); + } + + // Prevent a serialization call if the value wasn't initialized. + if ( a === undefined ) { + return; + } + + // If the provided element was a function, + // call it with the slider as scope. Otherwise, + // simply call the function on the object. + $.each( this.elements, function() { + if ( typeof this === 'function' ) { + this.call(target, a); + } else { + this[0][this[1]](a); + } + }); + } + + // Map serialization to [ element, method ]. Attach events where required. + function storeElement ( handle, item, number ) { + + // Add a change event to the supplied jQuery objects, + // which triggers the value-setting function on the target. + if ( isInstance( item ) ) { + + var elements = [], target = handle.data('target'); + + // Link the field to the other handle if the + // slider is inverted. + if ( handle.data('options').direction ) { + number = number ? 0 : 1; + } + + // Loop all items so the change event is properly bound, + // and the items can individually be added to the array. + item.each(function(){ + + // Bind the change event. + $(this).on('change' + namespace, setN( target, number )); + + // Store the element with the proper handler. + elements.push([ $(this), 'val' ]); + }); + + return elements; + } + + // Append a new input to the noUiSlider base. + // Prevent the change event from flowing upward. + if ( typeof item === 'string' ) { + + item = [ $('') + .appendTo(handle) + .addClass(clsList[3]) + .change(function ( e ) { + e.stopPropagation(); + }), 'val']; + } + + return [item]; + } + + // Access point and abstraction for serialization. + function store ( handle, i, serialization ) { + + var elements = []; + + // Loops all items in the provided serialization setting, + // add the proper events to them or create new input fields, + // and add them as data to the handle so they can be kept + // in sync with the slider value. + $.each( serialization['to'][i], function( index ){ + elements = elements.concat( + storeElement( handle, serialization['to'][i][index], i ) + ); + }); + + return { + element: handle + ,elements: elements + ,target: handle.data('target') + ,'val': serialize + }; + } + + +// Handle placement + + // Fire callback on unsuccessful handle movement. + function block ( base, stateless ) { + + var target = base.data('target'); + + if ( !target.hasClass(clsList[14]) ){ + + // The visual effects should not always be applied. + if ( !stateless ) { + target.addClass(clsList[15]); + setTimeout(function(){ + target.removeClass(clsList[15]); + }, 450); + } + + target.addClass(clsList[14]); + call( base.data('options').block, target ); + } + } + + // Change inline style and apply proper classes. + function placeHandle ( handle, to ) { + + var settings = handle.data('options'); + + to = digits(to, 7); + + // If the slider can move, remove the class + // indicating the block state. + handle.data('target').removeClass(clsList[14]); + + // Set handle to new location + handle.css( settings['style'], to + '%' ).data('pct', to); + + // Force proper handle stacking + if ( handle.is(':first-child') ) { + handle.toggleClass(clsList[13], to > 50 ); + } + + if ( settings['direction'] ) { + to = 100 - to; + } + + // Write the value to the serialization object. + handle.data('store').val( + format ( isPercentage( settings['range'], to ), settings ) + ); + } + + // Test suggested values and apply margin, step. + function setHandle ( handle, to ) { + + var base = handle.data('base'), settings = base.data('options'), + handles = base.data('handles'), lower = 0, upper = 100; + + // Catch invalid user input + if ( !isNumeric( to ) ){ + return false; + } + + // Handle the step option. + if ( settings['step'] ){ + to = closest( to, settings['step'] ); + } + + if ( handles.length > 1 ){ + if ( handle[0] !== handles[0][0] ) { + lower = digits(handles[0].data('pct')+settings['margin'],7); + } else { + upper = digits(handles[1].data('pct')-settings['margin'],7); + } + } + + // Limit position to boundaries. When the handles aren't set yet, + // they return -1 as a percentage value. + to = Math.min( Math.max( to, lower ), upper < 0 ? 100 : upper ); + + // Stop handling this call if the handle can't move past another. + // Return an array containing the hit limit, so the caller can + // provide feedback. ( block callback ). + if ( to === handle.data('pct') ) { + return [!lower ? false : lower, upper === 100 ? false : upper]; + } + + placeHandle ( handle, to ); + return true; + } + + // Handles movement by tapping + function jump ( base, handle, to, callbacks ) { + + // Flag the slider as it is now in a transitional state. + // Transition takes 300 ms, so re-enable the slider afterwards. + base.addClass(clsList[5]); + setTimeout(function(){ + base.removeClass(clsList[5]); + }, 300); + + // Move the handle to the new position. + setHandle( handle, to ); + + // Trigger the 'slide' and 'set' callbacks, + // pass the target so that it is 'this'. + call( callbacks, base.data('target') ); + + base.data('target').change(); + } + + +// Event handlers + + // Handle movement on document for handle and range drag. + function move ( event, Dt, Op ) { + + // Map event movement to a slider percentage. + var handles = Dt.handles, limits, + proposal = event[ Dt.point ] - Dt.start[ Dt.point ]; + + proposal = ( proposal * 100 ) / Dt.size; + + if ( handles.length === 1 ) { + + // Run handle placement, receive true for success or an + // array with potential limits. + limits = setHandle( handles[0], Dt.positions[0] + proposal ); + + if ( limits !== true ) { + + if ( $.inArray ( handles[0].data('pct'), limits ) >= 0 ){ + block ( Dt.base, !Op['margin'] ); + } + return; + } + + } else { + + // Dragging the range could be implemented by forcing the + // 'move' event on both handles, but this solution proved + // lagging on slower devices, resulting in range errors. The + // slightly ugly solution below is considerably faster, and + // it can't move the handle out of sync. Bypass the standard + // setting method, as other checks are needed. + + var l1, u1, l2, u2; + + // Round the proposal to the step setting. + if ( Op['step'] ) { + proposal = closest( proposal, Op['step'] ); + } + + // Determine the new position, store it twice. Once for + // limiting, once for checking whether placement should occur. + l1 = l2 = Dt.positions[0] + proposal; + u1 = u2 = Dt.positions[1] + proposal; + + // Round the values within a sensible range. + if ( l1 < 0 ) { + u1 += -1 * l1; + l1 = 0; + } else if ( u1 > 100 ) { + l1 -= ( u1 - 100 ); + u1 = 100; + } + + // Don't perform placement if no handles are to be changed. + // Check if the lowest value is set to zero. + if ( l2 < 0 && !l1 && !handles[0].data('pct') ) { + return; + } + // The highest value is limited to 100%. + if ( u1 === 100 && u2 > 100 && handles[1].data('pct') === 100 ){ + return; + } + + placeHandle ( handles[0], l1 ); + placeHandle ( handles[1], u1 ); + } + + // Trigger the 'slide' event, if the handle was moved. + call( Op['slide'], Dt.target ); + } + + // Unbind move events on document, call callbacks. + function end ( event, Dt, Op ) { + + // The handle is no longer active, so remove the class. + if ( Dt.handles.length === 1 ) { + Dt.handles[0].data('grab').removeClass(clsList[4]); + } + + // Remove cursor styles and text-selection events bound to the body. + if ( event.cursor ) { + body.css('cursor', '').off( namespace ); + } + + // Unbind the move and end events, which are added on 'start'. + doc.off( namespace ); + + // Trigger the change event. + Dt.target.removeClass( clsList[14] +' '+ clsList[20]).change(); + + // Trigger the 'end' callback. + call( Op['set'], Dt.target ); + } + + // Bind move events on document. + function start ( event, Dt, Op ) { + + // Mark the handle as 'active' so it can be styled. + if( Dt.handles.length === 1 ) { + Dt.handles[0].data('grab').addClass(clsList[4]); + } + + // A drag should never propagate up to the 'tap' event. + event.stopPropagation(); + + // Attach the move event. + attach ( actions.move, doc, move, { + start: event + ,base: Dt.base + ,target: Dt.target + ,handles: Dt.handles + ,positions: [ Dt.handles[0].data('pct') + ,Dt.handles[ Dt.handles.length - 1 ].data('pct') ] + ,point: Op['orientation'] ? 'pointY' : 'pointX' + ,size: Op['orientation'] ? Dt.base.height() : Dt.base.width() + }); + + // Unbind all movement when the drag ends. + attach ( actions.end, doc, end, { + target: Dt.target + ,handles: Dt.handles + }); + + // Text selection isn't an issue on touch devices, + // so adding additional callbacks isn't required. + if ( event.cursor ) { + + // Prevent the 'I' cursor and extend the range-drag cursor. + body.css('cursor', $(event.target).css('cursor')); + + // Mark the target with a dragging state. + if ( Dt.handles.length > 1 ) { + Dt.target.addClass(clsList[20]); + } + + // Prevent text selection when dragging the handles. + body.on('selectstart' + namespace, function( ){ + return false; + }); + } + } + + // Move closest handle to tapped location. + function tap ( event, Dt, Op ) { + + var base = Dt.base, handle, to, point, size; + + // The tap event shouldn't propagate up to trigger 'edge'. + event.stopPropagation(); + + // Determine the direction of the slider. + if ( Op['orientation'] ) { + point = event['pointY']; + size = base.height(); + } else { + point = event['pointX']; + size = base.width(); + } + + // Find the closest handle and calculate the tapped point. + handle = closestHandle( base.data('handles'), point, Op['style'] ); + to = (( point - base.offset()[ Op['style'] ] ) * 100 ) / size; + + // The set handle to the new position. + jump( base, handle, to, [ Op['slide'], Op['set'] ]); + } + + // Move handle to edges when target gets tapped. + function edge ( event, Dt, Op ) { + + var handles = Dt.base.data('handles'), to, i; + + i = Op['orientation'] ? event['pointY'] : event['pointX']; + i = i < Dt.base.offset()[Op['style']]; + + to = i ? 0 : 100; + i = i ? 0 : handles.length - 1; + + jump ( Dt.base, handles[i], to, [ Op['slide'], Op['set'] ]); + } + +// API + + // Validate and standardize input. + function test ( input, sliders ){ + + /* Every input option is tested and parsed. This'll prevent + endless validation in internal methods. These tests are + structured with an item for every option available. An + option can be marked as required by setting the 'r' flag. + The testing function is provided with three arguments: + - The provided value for the option; + - A reference to the options object; + - The name for the option; + + The testing function returns false when an error is detected, + or true when everything is OK. It can also modify the option + object, to make sure all values can be correctly looped elsewhere. */ + + function values ( a ) { + + if ( a.length !== 2 ){ + return false; + } + + // Convert the array to floats + a = [ parseFloat(a[0]), parseFloat(a[1]) ]; + + // Test if all values are numerical + if( !isNumeric(a[0]) || !isNumeric(a[1]) ){ + return false; + } + + // The lowest value must really be the lowest value. + if( a[1] < a[0] ){ + return false; + } + + return a; + } + + var serialization = { + resolution: function(q,o){ + + // Parse the syntactic sugar that is the serialization + // resolution option to a usable integer. + // Checking for a string '1', since the resolution needs + // to be cast to a string to split in on the period. + switch( q ){ + case 1: + case 0.1: + case 0.01: + case 0.001: + case 0.0001: + case 0.00001: + q = q.toString().split('.'); + o['decimals'] = q[0] === '1' ? 0 : q[1].length; + break; + case undefined: + o['decimals'] = 2; + break; + default: + return false; + } + + return true; + } + ,mark: function(q,o,w){ + + if ( !q ) { + o[w]['mark'] = '.'; + return true; + } + + switch( q ){ + case '.': + case ',': + return true; + default: + return false; + } + } + ,to: function(q,o,w){ + + // Checks whether a variable is a candidate to be a + // valid serialization target. + function ser(r){ + return isInstance ( r ) || + typeof r === 'string' || + typeof r === 'function' || + r === false || + ( isInstance ( r[0] ) && + typeof r[0][r[1]] === 'function' ); + } + + // Flatten the serialization array into a reliable + // set of elements, which can be tested and looped. + function filter ( value ) { + + var items = [[],[]]; + + // If a single value is provided it can be pushed + // immediately. + if ( ser(value) ) { + items[0].push(value); + } else { + + // Otherwise, determine whether this is an + // array of single elements or sets. + $.each(value, function(i, val) { + + // Don't handle an overflow of elements. + if( i > 1 ){ + return; + } + + // Decide if this is a group or not + if( ser(val) ){ + items[i].push(val); + } else { + items[i] = items[i].concat(val); + } + }); + } + + return items; + } + + if ( !q ) { + o[w]['to'] = [[],[]]; + } else { + + var i, j; + + // Flatten the serialization array + q = filter ( q ); + + // Reverse the API for RTL sliders. + if ( o['direction'] && q[1].length ) { + q.reverse(); + } + + // Test all elements in the flattened array. + for ( i = 0; i < o['handles']; i++ ) { + for ( j = 0; j < q[i].length; j++ ) { + + // Return false on invalid input + if( !ser(q[i][j]) ){ + return false; + } + + // Remove 'false' elements, since those + // won't be handled anyway. + if( !q[i][j] ){ + q[i].splice(j, 1); + } + } + } + + // Write the new values back + o[w]['to'] = q; + } + + return true; + } + }, tests = { + /* Handles. + * Has default, can be 1 or 2. + */ + 'handles': { + 'r': true + ,'t': function(q){ + q = parseInt(q, 10); + return ( q === 1 || q === 2 ); + } + } + /* Range. + * Must be an array of two numerical floats, + * which can't be identical. + */ + ,'range': { + 'r': true + ,'t': function(q,o,w){ + + o[w] = values(q); + + // The values can't be identical. + return o[w] && o[w][0] !== o[w][1]; + } + } + /* Start. + * Must be an array of two numerical floats when handles = 2; + * Uses 'range' test. + * When handles = 1, a single float is also allowed. + */ + ,'start': { + 'r': true + ,'t': function(q,o,w){ + if( o['handles'] === 1 ){ + if( $.isArray(q) ){ + q = q[0]; + } + q = parseFloat(q); + o.start = [q]; + return isNumeric(q); + } + + o[w] = values(q); + return !!o[w]; + } + } + /* Connect. + * Must be true or false when handles = 2; + * Can use 'lower' and 'upper' when handles = 1. + */ + ,'connect': { + 'r': true + ,'t': function(q,o,w){ + + if ( q === 'lower' ) { + o[w] = 1; + } else if ( q === 'upper' ) { + o[w] = 2; + } else if ( q === true ) { + o[w] = 3; + } else if ( q === false ) { + o[w] = 0; + } else { + return false; + } + + return true; + } + } + /* Connect. + * Will default to horizontal, not required. + */ + ,'orientation': { + 't': function(q,o,w){ + switch (q){ + case 'horizontal': + o[w] = 0; + break; + case 'vertical': + o[w] = 1; + break; + default: return false; + } + return true; + } + } + /* Margin. + * Must be a float, has a default value. + */ + ,'margin': { + 'r': true + ,'t': function(q,o,w){ + q = parseFloat(q); + o[w] = fromPercentage(o['range'], q); + return isNumeric(q); + } + } + /* Direction. + * Required, can be 'ltr' or 'rtl'. + */ + ,'direction': { + 'r': true + ,'t': function(q,o,w){ + + switch ( q ) { + case 'ltr': o[w] = 0; + break; + case 'rtl': o[w] = 1; + // Invert connection for RTL sliders; + o['connect'] = [0,2,1,3][o['connect']]; + break; + default: + return false; + } + + return true; + } + } + /* Behaviour. + * Required, defines responses to tapping and + * dragging elements. + */ + ,'behaviour': { + 'r': true + ,'t': function(q,o,w){ + + o[w] = { + 'tap': q !== (q = q.replace('tap', '')) + ,'extend': q !== (q = q.replace('extend', '')) + ,'drag': q !== (q = q.replace('drag', '')) + ,'fixed': q !== (q = q.replace('fixed', '')) + }; + + return !q.replace('none','').replace(/\-/g,''); + } + } + /* Serialization. + * Required, but has default. Must be an array + * when using two handles, can be a single value when using + * one handle. 'mark' can be period (.) or comma (,). + */ + ,'serialization': { + 'r': true + ,'t': function(q,o,w){ + + return serialization.to( q['to'], o, w ) && + serialization.resolution( q['resolution'], o ) && + serialization.mark( q['mark'], o, w ); + } + } + /* Slide. + * Not required. Must be a function. + */ + ,'slide': { + 't': function(q){ + return $.isFunction(q); + } + } + /* Set. + * Not required. Must be a function. + * Tested using the 'slide' test. + */ + ,'set': { + 't': function(q){ + return $.isFunction(q); + } + } + /* Block. + * Not required. Must be a function. + * Tested using the 'slide' test. + */ + ,'block': { + 't': function(q){ + return $.isFunction(q); + } + } + /* Step. + * Not required. + */ + ,'step': { + 't': function(q,o,w){ + q = parseFloat(q); + o[w] = fromPercentage ( o['range'], q ); + return isNumeric(q); + } + } + }; + + $.each( tests, function( name, test ){ + + /*jslint devel: true */ + + var value = input[name], isSet = value !== undefined; + + // If the value is required but not set, fail. + if( ( test['r'] && !isSet ) || + // If the test returns false, fail. + ( isSet && !test['t']( value, input, name ) ) ){ + + // For debugging purposes it might be very useful to know + // what option caused the trouble. Since throwing an error + // will prevent further script execution, log the error + // first. Test for console, as it might not be available. + if( console && console.log && console.group ){ + console.group( 'Invalid noUiSlider initialisation:' ); + console.log( 'Option:\t', name ); + console.log( 'Value:\t', value ); + console.log( 'Slider(s):\t', sliders ); + console.groupEnd(); + } + + throw new RangeError('noUiSlider'); + } + }); + } + + // Parse options, add classes, attach events, create HTML. + function create ( options ) { + + /*jshint validthis: true */ + + // Store the original set of options on all targets, + // so they can be re-used and re-tested later. + // Make sure to break the relation with the options, + // which will be changed by the 'test' function. + this.data('options', $.extend(true, {}, options)); + + // Set defaults where applicable; + options = $.extend({ + 'handles': 2 + ,'margin': 0 + ,'connect': false + ,'direction': 'ltr' + ,'behaviour': 'tap' + ,'orientation': 'horizontal' + }, options); + + // Make sure the test for serialization runs. + options['serialization'] = options['serialization'] || {}; + + // Run all options through a testing mechanism to ensure correct + // input. The test function will throw errors, so there is + // no need to capture the result of this call. It should be noted + // that options might get modified to be handled properly. E.g. + // wrapping integers in arrays. + test( options, this ); + + // Pre-define the styles. + options['style'] = options['orientation'] ? 'top' : 'left'; + + return this.each(function(){ + + var target = $(this), i, dragable, handles = [], handle, + base = $('
    ').appendTo(target); + + // Throw an error if the slider was already initialized. + if ( target.data('base') ) { + throw new Error('Slider was already initialized.'); + } + + // Apply classes and data to the target. + target.data('base', base).addClass([ + clsList[6] + ,clsList[16 + options['direction']] + ,clsList[10 + options['orientation']] ].join(' ')); + + for (i = 0; i < options['handles']; i++ ) { + + handle = $('
    ').appendTo(base); + + // Add all default and option-specific classes to the + // origins and handles. + handle.addClass( clsList[1] ); + + handle.children().addClass([ + clsList[2] + ,clsList[2] + clsList[ 7 + options['direction'] + + ( options['direction'] ? -1 * i : i ) ]].join(' ') ); + + // Make sure every handle has access to all variables. + handle.data({ + 'base': base + ,'target': target + ,'options': options + ,'grab': handle.children() + ,'pct': -1 + }).attr('data-style', options['style']); + + // Every handle has a storage point, which takes care + // of triggering the proper serialization callbacks. + handle.data({ + 'store': store(handle, i, options['serialization']) + }); + + // Store handles on the base + handles.push(handle); + } + + // Apply the required connection classes to the elements + // that need them. Some classes are made up for several + // segments listed in the class list, to allow easy + // renaming and provide a minor compression benefit. + switch ( options['connect'] ) { + case 1: target.addClass( clsList[9] ); + handles[0].addClass( clsList[12] ); + break; + case 3: handles[1].addClass( clsList[12] ); + /* falls through */ + case 2: handles[0].addClass( clsList[9] ); + /* falls through */ + case 0: target.addClass(clsList[12]); + break; + } + + // Merge base classes with default, + // and store relevant data on the base element. + base.addClass( clsList[0] ).data({ + 'target': target + ,'options': options + ,'handles': handles + }); + + // Use the public value method to set the start values. + target.val( options['start'] ); + + // Attach the standard drag event to the handles. + if ( !options['behaviour']['fixed'] ) { + for ( i = 0; i < handles.length; i++ ) { + + // These events are only bound to the visual handle + // element, not the 'real' origin element. + attach ( actions.start, handles[i].children(), start, { + base: base + ,target: target + ,handles: [ handles[i] ] + }); + } + } + + // Attach the tap event to the slider base. + if ( options['behaviour']['tap'] ) { + attach ( actions.start, base, tap, { + base: base + ,target: target + }); + } + + // Extend tapping behaviour to target + if ( options['behaviour']['extend'] ) { + + target.addClass( clsList[19] ); + + if ( options['behaviour']['tap'] ) { + attach ( actions.start, target, edge, { + base: base + ,target: target + }); + } + } + + // Make the range dragable. + if ( options['behaviour']['drag'] ){ + + dragable = base.find('.'+clsList[9]).addClass(clsList[18]); + + // When the range is fixed, the entire range can + // be dragged by the handles. The handle in the first + // origin will propagate the start event upward, + // but it needs to be bound manually on the other. + if ( options['behaviour']['fixed'] ) { + dragable = dragable + .add( base.children().not(dragable).data('grab') ); + } + + attach ( actions.start, dragable, start, { + base: base + ,target: target + ,handles: handles + }); + } + }); + } + + // Return value for the slider, relative to 'range'. + function getValue ( ) { + + /*jshint validthis: true */ + + var base = $(this).data('base'), answer = []; + + // Loop the handles, and get the value from the input + // for every handle on its' own. + $.each( base.data('handles'), function(){ + answer.push( $(this).data('store').val() ); + }); + + // If the slider has just one handle, return a single value. + // Otherwise, return an array, which is in reverse order + // if the slider is used RTL. + if ( answer.length === 1 ) { + return answer[0]; + } + + if ( base.data('options').direction ) { + return answer.reverse(); + } + + return answer; + } + + // Set value for the slider, relative to 'range'. + function setValue ( args, set ) { + + /*jshint validthis: true */ + + // If the value is to be set to a number, which is valid + // when using a one-handle slider, wrap it in an array. + if( !$.isArray(args) ){ + args = [args]; + } + + // Setting is handled properly for each slider in the data set. + return this.each(function(){ + + var b = $(this).data('base'), to, i, + handles = Array.prototype.slice.call(b.data('handles'),0), + settings = b.data('options'); + + // If there are multiple handles to be set run the setting + // mechanism twice for the first handle, to make sure it + // can be bounced of the second one properly. + if ( handles.length > 1) { + handles[2] = handles[0]; + } + + // The RTL settings is implemented by reversing the front-end, + // internal mechanisms are the same. + if ( settings['direction'] ) { + args.reverse(); + } + + for ( i = 0; i < handles.length; i++ ){ + + // Calculate a new position for the handle. + to = args[ i%2 ]; + + // The set request might want to ignore this handle. + // Test for 'undefined' too, as a two-handle slider + // can still be set with an integer. + if( to === null || to === undefined ) { + continue; + } + + // Add support for the comma (,) as a decimal symbol. + // Replace it by a period so it is handled properly by + // parseFloat. Omitting this would result in a removal + // of decimals. This way, the developer can also + // input a comma separated string. + if( $.type(to) === 'string' ) { + to = to.replace(',', '.'); + } + + // Calculate the new handle position + to = toPercentage( settings['range'], parseFloat( to ) ); + + // Invert the value if this is an right-to-left slider. + if ( settings['direction'] ) { + to = 100 - to; + } + + // If the value of the input doesn't match the slider, + // reset it. Sometimes the input is changed to a value the + // slider has rejected. This can occur when using 'select' + // or 'input[type="number"]' elements. In this case, set + // the value back to the input. + if ( setHandle( handles[i], to ) !== true ){ + handles[i].data('store').val( true ); + } + + // Optionally trigger the 'set' event. + if( set === true ) { + call( settings['set'], $(this) ); + } + } + }); + } + + // Unbind all attached events, remove classed and HTML. + function destroy ( target ) { + + // Start the list of elements to be unbound with the target. + var elements = [[target,'']]; + + // Get the fields bound to both handles. + $.each(target.data('base').data('handles'), function(){ + elements = elements.concat( $(this).data('store').elements ); + }); + + // Remove all events added by noUiSlider. + $.each(elements, function(){ + if( this.length > 1 ){ + this[0].off( namespace ); + } + }); + + // Remove all classes from the target. + target.removeClass(clsList.join(' ')); + + // Empty the target and remove all data. + target.empty().removeData('base options'); + } + + // Merge options with current initialization, destroy slider + // and reinitialize. + function build ( options ) { + + /*jshint validthis: true */ + + return this.each(function(){ + + // When uninitialised, jQuery will return '', + // Zepto returns undefined. Both are falsy. + var values = $(this).val() || false, + current = $(this).data('options'), + // Extend the current setup with the new options. + setup = $.extend( {}, current, options ); + + // If there was a slider initialised, remove it first. + if ( values !== false ) { + destroy( $(this) ); + } + + // Make the destroy method publicly accessible. + if( !options ) { + return; + } + + // Create a new slider + $(this)['noUiSlider']( setup ); + + // Set the slider values back. If the start options changed, + // it gets precedence. + if ( values !== false && setup.start === current.start ) { + $(this).val( values ); + } + }); + } + + // Overwrite the native jQuery value function + // with a simple handler. noUiSlider will use the internal + // value method, anything else will use the standard method. + $.fn.val = function(){ + + // If the function is called without arguments, + // act as a 'getter'. Call the getValue function + // in the same scope as this call. + if ( this.hasClass( clsList[6] ) ){ + return arguments.length ? + setValue.apply( this, arguments ) : + getValue.apply( this ); + } + + // If this isn't noUiSlider, continue with jQuery's + // original method. + return $VAL.apply( this, arguments ); + }; + + return ( rebuild ? build : create ).call( this, options ); + }; + +}( window['jQuery'] || window['Zepto'] )); diff --git a/plugins/legacy-admin/framework/core/inc/fields/slider/vendor/nouislider/redux.jquery.nouislider.min.js b/plugins/legacy-admin/framework/core/inc/fields/slider/vendor/nouislider/redux.jquery.nouislider.min.js new file mode 100644 index 000000000..73dfa3ce5 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/slider/vendor/nouislider/redux.jquery.nouislider.min.js @@ -0,0 +1,20 @@ +(function(f){if(f.zepto&&!f.fn.removeData)throw new ReferenceError("Zepto is loaded without the data module.");f.fn.noUiSlider=function(C,D){function s(a,b){return 100*b/(a[1]-a[0])}function E(a,b){return b*(a[1]-a[0])/100+a[0]}function t(a){return a instanceof f||f.zepto&&f.zepto.isZ(a)}function n(a){return!isNaN(parseFloat(a))&&isFinite(a)}function r(a,b){f.isArray(a)||(a=[a]);f.each(a,function(){"function"===typeof this&&this.call(b)})}function F(a,b){return function(){var c=[null,null];c[b]=f(this).val(); +a.val(c,!0)}}function G(a,b){a=a.toFixed(b.decimals);0===parseFloat(a)&&(a=a.replace("-0","0"));return a.replace(".",b.serialization.mark)}function u(a){return parseFloat(a.toFixed(7))}function p(a,b,c,d){var e=d.target;a=a.replace(/\s/g,h+" ")+h;b.on(a,function(a){var b=e.attr("disabled");if(e.hasClass("noUi-state-tap")||void 0!==b&&null!==b)return!1;var g;a.preventDefault();var b=0===a.type.indexOf("touch"),h=0===a.type.indexOf("mouse"),l=0===a.type.indexOf("pointer"),v,H=a;0===a.type.indexOf("MSPointer")&& +(l=!0);a.originalEvent&&(a=a.originalEvent);b&&(g=a.changedTouches[0].pageX,v=a.changedTouches[0].pageY);if(h||l)l||void 0!==window.pageXOffset||(window.pageXOffset=document.documentElement.scrollLeft,window.pageYOffset=document.documentElement.scrollTop),g=a.clientX+window.pageXOffset,v=a.clientY+window.pageYOffset;g=f.extend(H,{pointX:g,pointY:v,cursor:h});c(g,d,e.data("base").data("options"))})}function I(a){var b=this.target;if(void 0===a)return this.element.data("value");!0===a?a=this.element.data("value"): +this.element.data("value",a);void 0!==a&&f.each(this.elements,function(){if("function"===typeof this)this.call(b,a);else this[0][this[1]](a)})}function J(a,b,c){if(t(b)){var d=[],e=a.data("target");a.data("options").direction&&(c=c?0:1);b.each(function(){f(this).on("change"+h,F(e,c));d.push([f(this),"val"])});return d}"string"===typeof b&&(b=[f('').appendTo(a).addClass(g[3]).change(function(a){a.stopPropagation()}),"val"]);return[b]}function K(a,b,c){var d=[];f.each(c.to[b], +function(e){d=d.concat(J(a,c.to[b][e],b))});return{element:a,elements:d,target:a.data("target"),val:I}}function L(a,b){var c=a.data("target");c.hasClass(g[14])||(b||(c.addClass(g[15]),setTimeout(function(){c.removeClass(g[15])},450)),c.addClass(g[14]),r(a.data("options").h,c))}function w(a,b){var c=a.data("options");b=u(b);a.data("target").removeClass(g[14]);a.css(c.style,b+"%").data("pct",b);a.is(":first-child")&&a.toggleClass(g[13],50k?100:k);if(b===a.data("pct"))return[e?e:!1,100===k?!1:k];w(a,b);return!0}function A(a,b,c,d){a.addClass(g[5]);setTimeout(function(){a.removeClass(g[5])},300);x(b,c);r(d,a.data("target"));a.data("target").change()}function M(a,b,c){var d= +b.a,e=a[b.d]-b.start[b.d],e=100*e/b.size;if(1===d.length){if(a=x(d[0],b.c[0]+e),!0!==a){0<=f.inArray(d[0].data("pct"),a)&&L(b.b,!c.margin);return}}else{var k,m;c.step&&(a=c.step,e=Math.round(e/a)*a);a=k=b.c[0]+e;e=m=b.c[1]+e;0>a?(e+=-1*a,a=0):100k&&!a&&!d[0].data("pct")||100===e&&100").appendTo(b);if(b.data("base"))throw Error("Slider was already initialized.");b.data("base",k).addClass([g[6],g[16+a.direction],g[10+a.orientation]].join(" "));for(c=0;c
    ").appendTo(k),e.addClass(g[1]),e.children().addClass([g[2], +g[2]+g[7+a.direction+(a.direction?-1*c:c)]].join(" ")),e.data({base:k,target:b,options:a,grab:e.children(),pct:-1}).attr("data-style",a.style),e.data({store:K(e,c,a.serialization)}),d.push(e);switch(a.connect){case 1:b.addClass(g[9]);d[0].addClass(g[12]);break;case 3:d[1].addClass(g[12]);case 2:d[0].addClass(g[9]);case 0:b.addClass(g[12])}k.addClass(g[0]).data({target:b,options:a,handles:d});b.val(a.start);if(!a.behaviour.fixed)for(c=0;ch[0]?d+Math.abs(h[0]):d-h[0]);g.direction&&(d=100-d);!0!==x(e[c],d)&&e[c].data("store").val(!0);!0===b&&r(g.set,f(this))}})}function U(a){var b=[[a,""]];f.each(a.data("base").data("handles"), +function(){b=b.concat(f(this).data("store").elements)});f.each(b,function(){1
    + extension_url . 'field_import_export' . Redux_Functions::isMin() . '.js', + array( 'jquery' ), + ReduxFramework_extension_import_export::$version, + true + ); + + wp_enqueue_style( + 'redux-import-export', + $this->extension_url . 'field_import_export.css', + time(), + true + ); + + } + + /** + * Output Function. + * Used to enqueue to the front-end + * + * @since 1.0.0 + * @access public + * @return void + */ + public function output() { + + if ( $this->field['enqueue_frontend'] ) { + + } + + } + + } + } diff --git a/plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.scss b/plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.scss new file mode 100644 index 000000000..ca285843d --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/extensions/import_export/import_export/field_import_export.scss @@ -0,0 +1,13 @@ +#redux-import-link-wrapper, +#redux-import-code-wrapper { + display: none; +} + +#redux-export-code, +#redux-export-link-value { + display: none; +} + +#redux-import-action span { + color: #B94A48; +} \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.css b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.css new file mode 100644 index 000000000..01f9e6f9e --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.css @@ -0,0 +1 @@ +.redux-container-ace_editor .ace-wrapper{position:static}.redux-container-ace_editor .ace_editor{height:200px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.redux-container-ace_editor .ace_gutter{z-index:1 !important} diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.js b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.js new file mode 100644 index 000000000..4c2e398fe --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.js @@ -0,0 +1,58 @@ +/*global jQuery, document, redux*/ + +(function( $ ) { + "use strict"; + + redux.field_objects = redux.field_objects || {}; + redux.field_objects.ace_editor = redux.field_objects.ace_editor || {}; + + redux.field_objects.ace_editor.init = function( selector ) { + if ( !selector ) { + selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-ace_editor:visible' ); + } + + $( selector ).each( + function() { + var el = $( this ); + var parent = el; + if ( !el.hasClass( 'redux-field-container' ) ) { + parent = el.parents( '.redux-field-container:first' ); + } + if ( parent.is( ":hidden" ) ) { // Skip hidden fields + return; + } + if ( parent.hasClass( 'redux-field-init' ) ) { + parent.removeClass( 'redux-field-init' ); + } else { + return; + } + el.find( '.ace-editor' ).each( + function( index, element ) { + var area = element; + var params = JSON.parse( $( this ).parent().find( '.localize_data' ).val() ); + var editor = $( element ).attr( 'data-editor' ); + + var aceeditor = ace.edit( editor ); + aceeditor.setTheme( "ace/theme/" + jQuery( element ).attr( 'data-theme' ) ); + aceeditor.getSession().setMode( "ace/mode/" + $( element ).attr( 'data-mode' ) ); + var parent = ''; + if ( el.hasClass( 'redux-field-container' ) ) { + parent = el.attr( 'data-id' ); + } else { + parent = el.parents( '.redux-field-container:first' ).attr( 'data-id' ); + } + + aceeditor.setOptions( params ); + aceeditor.on( + 'change', function( e ) { + $( '#' + area.id ).val( aceeditor.getSession().getValue() ); + redux_change( $( element ) ); + aceeditor.resize(); + } + ); + } + ); + } + ); + }; +})( jQuery ); \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.min.js b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.min.js new file mode 100644 index 000000000..3aef5fbec --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.min.js @@ -0,0 +1 @@ +!function(a){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.ace_editor=redux.field_objects.ace_editor||{},redux.field_objects.ace_editor.init=function(b){b||(b=a(document).find(".redux-group-tab:visible").find(".redux-container-ace_editor:visible")),a(b).each(function(){var b=a(this),c=b;b.hasClass("redux-field-container")||(c=b.parents(".redux-field-container:first")),c.is(":hidden")||c.hasClass("redux-field-init")&&(c.removeClass("redux-field-init"),b.find(".ace-editor").each(function(c,d){var e=d,f=JSON.parse(a(this).parent().find(".localize_data").val()),g=a(d).attr("data-editor"),h=ace.edit(g);h.setTheme("ace/theme/"+jQuery(d).attr("data-theme")),h.getSession().setMode("ace/mode/"+a(d).attr("data-mode"));var i="";i=b.hasClass("redux-field-container")?b.attr("data-id"):b.parents(".redux-field-container:first").attr("data-id"),h.setOptions(f),h.on("change",function(){a("#"+e.id).val(h.getSession().getValue()),redux_change(a(d)),h.resize()})}))})}}(jQuery); \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.php b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.php new file mode 100644 index 000000000..58f78ec63 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.php @@ -0,0 +1,132 @@ +. + * + * @package Redux_Field + * @subpackage ACE_Editor + * @version 3.0.0 + */ + +// Exit if accessed directly +if ( ! defined( 'ABSPATH' ) ) { + exit; +} + +// Don't duplicate me! +if ( ! class_exists( 'ReduxFramework_ace_editor' ) ) { + class ReduxFramework_ace_editor { + + /** + * Field Constructor. + * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function + * + * @since ReduxFramework 1.0.0 + */ + function __construct( $field = array(), $value = '', $parent ) { + $this->parent = $parent; + $this->field = $field; + $this->value = $value; + + if ( is_array( $this->value ) ) { + $this->value = ''; + } else { + $this->value = trim( $this->value ); + } + + if ( ! empty( $this->field['options'] ) ) { + $this->field['args'] = $this->field['options']; + unset( $this->field['options'] ); + } + + } + + /** + * Field Render Function. + * Takes the vars and outputs the HTML for the field in the settings + * + * @since ReduxFramework 1.0.0 + */ + function render() { + + if ( ! isset( $this->field['mode'] ) ) { + $this->field['mode'] = 'javascript'; + } + if ( ! isset( $this->field['theme'] ) ) { + $this->field['theme'] = 'monokai'; + } + + $params = array( + 'minLines' => 10, + 'maxLines' => 30, + ); + + if ( isset( $this->field['args'] ) && ! empty( $this->field['args'] ) && is_array( $this->field['args'] ) ) { + $params = wp_parse_args( $this->field['args'], $params ); + } + + ?> +
    + + +
    value ); ?>
    +
    + parent->args['dev_mode']) { + wp_enqueue_style( + 'redux-field-ace-editor-css', + ReduxFramework::$_url . 'inc/fields/ace_editor/field_ace_editor.css', + array(), + time(), + 'all' + ); + } + + wp_enqueue_script( + 'ace-editor-js', + ReduxFramework::$_url . 'inc/fields/ace_editor/vendor/ace.js', + array( 'jquery' ), + time(), + true + ); + + wp_enqueue_script( + 'redux-field-ace-editor-js', + ReduxFramework::$_url . 'inc/fields/ace_editor/field_ace_editor' . Redux_Functions::isMin() . '.js', + array( 'jquery', 'ace-editor-js', 'redux-js' ), + time(), + true + ); + } + } +} \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.scss b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.scss new file mode 100644 index 000000000..77d303717 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/field_ace_editor.scss @@ -0,0 +1,16 @@ +.redux-container-ace_editor { + .ace-wrapper { + position: static; + } + + .ace_editor { + height: 200px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + } + + .ace_gutter { + z-index: 1 !important; + } +} \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/ace.js b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/ace.js new file mode 100644 index 000000000..bd6ce3196 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/ace.js @@ -0,0 +1,11 @@ +(function(){function s(r){var i=function(e,t){return n("",e,t)},s=e;r&&(e[r]||(e[r]={}),s=e[r]);if(!s.define||!s.define.packaged)t.original=s.define,s.define=t,s.define.packaged=!0;if(!s.require||!s.require.packaged)n.original=s.require,s.require=i,s.require.packaged=!0}var ACE_NAMESPACE = "ace",e=function(){return this}();if(!ACE_NAMESPACE&&typeof requirejs!="undefined")return;var t=function(e,n,r){if(typeof e!="string"){t.original?t.original.apply(window,arguments):(console.error("dropping module because define wasn't a string."),console.trace());return}arguments.length==2&&(r=n),t.modules||(t.modules={},t.payloads={}),t.payloads[e]=r,t.modules[e]=null},n=function(e,t,r){if(Object.prototype.toString.call(t)==="[object Array]"){var s=[];for(var o=0,u=t.length;o1&&u(t,"")>-1&&(a=RegExp(this.source,r.replace.call(o(this),"g","")),r.replace.call(e.slice(t.index),a,function(){for(var e=1;et.index&&this.lastIndex--}return t},s||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t})}),ace.define("ace/lib/es5-shim",["require","exports","module"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t==="undefined"||t==="boolean"||t==="number"||t==="string"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n=="function"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r=="function"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError("Function.prototype.bind called on incompatible "+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,"__defineGetter__"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,"XXX"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+ta)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h>>0;if(a(t)!="[object Function]")throw new TypeError;while(++s>>0,s=Array(i),o=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var u=0;u>>0,s=[],o,u=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var f=0;f>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduce of empty array with no initial value");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError("reduce of empty array with no initial value")}while(!0);for(;s>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduceRight of empty array with no initial value");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)=="[object String]"?this.split(""):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!="object")throw new TypeError("typeof prototype["+typeof t+"] != 'object'");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document=="undefined"||w(document.createElement("div"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T="Property description must be an object: ",N="Object.defineProperty called on non-object: ",C="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(t,n,r){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(N+t);if(typeof r!="object"&&typeof r!="function"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,"value"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,"get")&&l(t,n,r.get),f(r,"set")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n=="function"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n="";while(f(t,n))n+="?";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!="object"&&typeof e!="function"||e===null)throw new TypeError("Object.keys called on a non-object");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n=0?parseFloat((i.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]):parseFloat((i.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=(window.Controllers||window.controllers)&&window.navigator.product==="Gecko",t.isOldGecko=t.isGecko&&parseInt((i.match(/rv\:(\d+)/)||[])[1],10)<4,t.isOpera=window.opera&&Object.prototype.toString.call(window.opera)=="[object Opera]",t.isWebKit=parseFloat(i.split("WebKit/")[1])||undefined,t.isChrome=parseFloat(i.split(" Chrome/")[1])||undefined,t.isAIR=i.indexOf("AdobeAIR")>=0,t.isIPad=i.indexOf("iPad")>=0,t.isTouchPad=i.indexOf("TouchPad")>=0,t.isChromeOS=i.indexOf(" CrOS ")>=0}),ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"],function(e,t,n){"use strict";function o(e,t,n){var o=s(t);if(!i.isMac&&u){if(u[91]||u[92])o|=8;if(u.altGr){if((3&o)==3)return;u.altGr=0}if(n===18||n===17){var f="location"in t?t.location:t.keyLocation;if(n===17&&f===1)a=t.timeStamp;else if(n===18&&o===3&&f===2){var l=-a;a=t.timeStamp,l+=a,l<3&&(u.altGr=!0)}}}if(n in r.MODIFIER_KEYS){switch(r.MODIFIER_KEYS[n]){case"Alt":o=2;break;case"Shift":o=4;break;case"Ctrl":o=1;break;default:o=8}n=-1}o&8&&(n===91||n===93)&&(n=-1);if(!o&&n===13){var f="location"in t?t.location:t.keyLocation;if(f===3){e(t,o,-n);if(t.defaultPrevented)return}}if(i.isChromeOS&&o&8){e(t,o,n);if(t.defaultPrevented)return;o&=-9}return!!o||n in r.FUNCTION_KEYS||n in r.PRINTABLE_KEYS?e(t,o,n):!1}var r=e("./keys"),i=e("./useragent");t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var r=function(){n.call(e,window.event)};n._wrapper=r,e.attachEvent("on"+t,r)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent("on"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return e.type=="dblclick"?0:e.type=="contextmenu"||i.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,n,r){function i(e){n&&n(e),r&&r(e),t.removeListener(document,"mousemove",n,!0),t.removeListener(document,"mouseup",i,!0),t.removeListener(document,"dragstart",i,!0)}return t.addListener(document,"mousemove",n,!0),t.addListener(document,"mouseup",i,!0),t.addListener(document,"dragstart",i,!0),i},t.addMouseWheelListener=function(e,n){"onmousewheel"in e?t.addListener(e,"mousewheel",function(e){var t=8;e.wheelDeltaX!==undefined?(e.wheelX=-e.wheelDeltaX/t,e.wheelY=-e.wheelDeltaY/t):(e.wheelX=0,e.wheelY=-e.wheelDelta/t),n(e)}):"onwheel"in e?t.addListener(e,"wheel",function(e){var t=.35;switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=e.deltaX*t||0,e.wheelY=e.deltaY*t||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=(e.deltaX||0)*5,e.wheelY=(e.deltaY||0)*5}n(e)}):t.addListener(e,"DOMMouseScroll",function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=(e.detail||0)*5,e.wheelY=0):(e.wheelX=0,e.wheelY=(e.detail||0)*5),n(e)})},t.addMultiMouseDownListener=function(e,n,r,s){var o=0,u,a,f,l={2:"dblclick",3:"tripleclick",4:"quadclick"};t.addListener(e,"mousedown",function(e){t.getButton(e)!==0?o=0:e.detail>1?(o++,o>4&&(o=1)):o=1;if(i.isIE){var c=Math.abs(e.clientX-u)>5||Math.abs(e.clientY-a)>5;if(!f||c)o=1;f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),o==1&&(u=e.clientX,a=e.clientY)}e._clicks=o,r[s]("mousedown",e);if(o>4)o=0;else if(o>1)return r[s](l[o],e)}),i.isOldIE&&t.addListener(e,"dblclick",function(e){o=2,f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),r[s]("mousedown",e),r[s](l[o],e)})};var s=!i.isMac||!i.isOpera||"KeyboardEvent"in window?function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)}:function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)};t.getModifierString=function(e){return r.KEY_MODS[s(e)]};var u=null,a=0;t.addCommandKeyListener=function(e,n){var r=t.addListener;if(i.isOldGecko||i.isOpera&&!("KeyboardEvent"in window)){var s=null;r(e,"keydown",function(e){s=e.keyCode}),r(e,"keypress",function(e){return o(n,e,s)})}else{var a=null;r(e,"keydown",function(e){u[e.keyCode]=!0;var t=o(n,e,e.keyCode);return a=e.defaultPrevented,t}),r(e,"keypress",function(e){a&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),a=null)}),r(e,"keyup",function(e){u[e.keyCode]=null}),u||(u=Object.create(null),r(window,"focus",function(e){u=Object.create(null)}))}};if(window.postMessage&&!i.isOldIE){var f=1;t.nextTick=function(e,n){n=n||window;var r="zero-timeout-message-"+f;t.addListener(n,"message",function i(s){s.data==r&&(t.stopPropagation(s),t.removeListener(n,"message",i),e())}),n.postMessage(r,"*")}}t.nextFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame,t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}}),ace.define("ace/lib/lang",["require","exports","module"],function(e,t,n){"use strict";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){var n="";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\s\s*/,i=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(r,"")},t.stringTrimRight=function(e){return e.replace(i,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n1),e.preventDefault()},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var n=this.editor;n.$blockScrolling++,this.mousedownEvent.getShiftKey()?n.selection.selectToPosition(e):t||n.selection.moveToPosition(e),t||this.select(),n.renderer.scroller.setCapture&&n.renderer.scroller.setCapture(),n.setStyle("ace_selecting"),this.setState("select"),n.$blockScrolling--},this.select=function(){var e,t=this.editor,n=t.renderer.screenToTextCoordinates(this.x,this.y);t.$blockScrolling++;if(this.$clickSelection){var r=this.$clickSelection.comparePoint(n);if(r==-1)e=this.$clickSelection.end;else if(r==1)e=this.$clickSelection.start;else{var i=f(this.$clickSelection,n);n=i.cursor,e=i.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(n),t.$blockScrolling--,t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n=this.editor,r=n.renderer.screenToTextCoordinates(this.x,this.y),i=n.selection[e](r.row,r.column);n.$blockScrolling++;if(this.$clickSelection){var s=this.$clickSelection.comparePoint(i.start),o=this.$clickSelection.comparePoint(i.end);if(s==-1&&o<=0){t=this.$clickSelection.end;if(i.end.row!=r.row||i.end.column!=r.column)r=i.start}else if(o==1&&s>=0){t=this.$clickSelection.start;if(i.start.row!=r.row||i.start.column!=r.column)r=i.end}else if(s==-1&&o==1)r=i.end,t=i.start;else{var u=f(this.$clickSelection,r);r=u.cursor,t=u.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(r),n.$blockScrolling--,n.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle("ace_selecting"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e=a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y),t=Date.now();(e>o||t-this.mousedownEvent.time>this.$focusTimout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,r=n.session,i=r.getBracketRange(t);i?(i.isEmpty()&&(i.start.column--,i.end.column++),this.setState("select")):(i=n.selection.getWordRange(t.row,t.column),this.setState("selectByWords")),this.$clickSelection=i,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState("selectByLines");var r=n.getSelectionRange();r.isMultiLine()&&r.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(r.start.row),this.$clickSelection.end=n.selection.getLineRange(r.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState("selectAll")},this.onMouseWheel=function(e){if(e.getAccelKey())return;e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=e.domEvent.timeStamp,n=t-(this.$lastScrollTime||0),r=this.editor,i=r.renderer.isScrollableBy(e.wheelX*e.speed,e.wheelY*e.speed);if(i||n<200)return this.$lastScrollTime=t,r.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()}}).call(u.prototype),t.DefaultHandlers=u}),ace.define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"],function(e,t,n){"use strict";function s(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}var r=e("./lib/oop"),i=e("./lib/dom");(function(){this.$init=function(){return this.$element=i.createElement("div"),this.$element.className="ace_tooltip",this.$element.style.display="none",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){i.setInnerText(this.getElement(),e)},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+"px",this.getElement().style.top=t+"px"},this.setClassName=function(e){i.addCssClass(this.getElement(),e)},this.show=function(e,t,n){e!=null&&this.setText(e),t!=null&&n!=null&&this.setPosition(t,n),this.isOpen||(this.getElement().style.display="block",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display="none",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth}}).call(s.prototype),t.Tooltip=s}),ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"],function(e,t,n){"use strict";function u(e){function l(){var r=u.getDocumentPosition().row,s=n.$annotations[r];if(!s)return c();var o=t.session.getLength();if(r==o){var a=t.renderer.pixelToScreenCoordinates(0,u.y).row,l=u.$pos;if(a>t.session.documentToScreenRow(l.row,l.column))return c()}if(f==s)return;f=s.text.join("
    "),i.setHtml(f),i.show(),t.on("mousewheel",c);if(e.$tooltipFollowsMouse)h(u);else{var p=n.$cells[t.session.documentToScreenRow(r,0)].element,d=p.getBoundingClientRect(),v=i.getElement().style;v.left=d.right+"px",v.top=d.bottom+"px"}}function c(){o&&(o=clearTimeout(o)),f&&(i.hide(),f=null,t.removeEventListener("mousewheel",c))}function h(e){i.setPosition(e.x,e.y)}var t=e.editor,n=t.renderer.$gutterLayer,i=new a(t.container);e.editor.setDefaultHandler("guttermousedown",function(r){if(!t.isFocused()||r.getButton()!=0)return;var i=n.getRegion(r);if(i=="foldWidgets")return;var s=r.getDocumentPosition().row,o=t.session.selection;if(r.getShiftKey())o.selectTo(s,0);else{if(r.domEvent.detail==2)return t.selectAll(),r.preventDefault();e.$clickSelection=t.selection.getLineRange(s)}return e.setState("selectByLines"),e.captureMouse(r),r.preventDefault()});var o,u,f;e.editor.setDefaultHandler("guttermousemove",function(t){var n=t.domEvent.target||t.domEvent.srcElement;if(r.hasCssClass(n,"ace_fold-widget"))return c();f&&e.$tooltipFollowsMouse&&h(t),u=t;if(o)return;o=setTimeout(function(){o=null,u&&!e.isMousePressed?l():c()},50)}),s.addListener(t.renderer.$gutter,"mouseout",function(e){u=null;if(!f||o)return;o=setTimeout(function(){o=null,c()},50)}),t.on("changeSession",c)}function a(e){o.call(this,e)}var r=e("../lib/dom"),i=e("../lib/oop"),s=e("../lib/event"),o=e("../tooltip").Tooltip;i.inherits(a,o),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,r=window.innerHeight||document.documentElement.clientHeight,i=this.getWidth(),s=this.getHeight();e+=15,t+=15,e+i>n&&(e-=e+i-n),t+s>r&&(t-=20+s),o.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=u}),ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],function(e,t,n){"use strict";var r=e("../lib/event"),i=e("../lib/useragent"),s=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){r.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){r.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos?this.$pos:(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY),this.$pos)},this.inSelection=function(){if(this.$inSelection!==null)return this.$inSelection;var e=this.editor,t=e.getSelectionRange();if(t.isEmpty())this.$inSelection=!1;else{var n=this.getDocumentPosition();this.$inSelection=t.contains(n.row,n.column)}return this.$inSelection},this.getButton=function(){return r.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=i.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(s.prototype)}),ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],function(e,t,n){"use strict";function f(e){function T(e,n){var r=Date.now(),i=!n||e.row!=n.row,s=!n||e.column!=n.column;if(!S||i||s)t.$blockScrolling+=1,t.moveCursorToPosition(e),t.$blockScrolling-=1,S=r,x={x:p,y:d};else{var o=l(x.x,x.y,p,d);o>a?S=null:r-S>=u&&(t.renderer.scrollCursorIntoView(),S=null)}}function N(e,n){var r=Date.now(),i=t.renderer.layerConfig.lineHeight,s=t.renderer.layerConfig.characterWidth,u=t.renderer.scroller.getBoundingClientRect(),a={x:{left:p-u.left,right:u.right-p},y:{top:d-u.top,bottom:u.bottom-d}},f=Math.min(a.x.left,a.x.right),l=Math.min(a.y.top,a.y.bottom),c={row:e.row,column:e.column};f/s<=2&&(c.column+=a.x.left=o&&t.renderer.scrollCursorIntoView(c):E=r:E=null}function C(){var e=g;g=t.renderer.screenToTextCoordinates(p,d),T(g,e),N(g,e)}function k(){m=t.selection.toOrientedRange(),h=t.session.addMarker(m,"ace_selection",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(v),C(),v=setInterval(C,20),y=0,i.addListener(document,"mousemove",O)}function L(){clearInterval(v),t.session.removeMarker(h),h=null,t.$blockScrolling+=1,t.selection.fromOrientedRange(m),t.$blockScrolling-=1,t.isFocused()&&!w&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),m=null,g=null,y=0,E=null,S=null,i.removeListener(document,"mousemove",O)}function O(){A==null&&(A=setTimeout(function(){A!=null&&h&&L()},20))}function M(e){var t=e.types;return!t||Array.prototype.some.call(t,function(e){return e=="text/plain"||e=="Text"})}function _(e){var t=["copy","copymove","all","uninitialized"],n=["move","copymove","linkmove","all","uninitialized"],r=s.isMac?e.altKey:e.ctrlKey,i="uninitialized";try{i=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var o="none";return r&&t.indexOf(i)>=0?o="copy":n.indexOf(i)>=0?o="move":t.indexOf(i)>=0&&(o="copy"),o}var t=e.editor,n=r.createElement("img");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",s.isOpera&&(n.style.cssText="width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;");var f=["dragWait","dragWaitEnd","startDrag","dragReadyEnd","onMouseDrag"];f.forEach(function(t){e[t]=this[t]},this),t.addEventListener("mousedown",this.onMouseDown.bind(e));var c=t.container,h,p,d,v,m,g,y=0,b,w,E,S,x;this.onDragStart=function(e){if(this.cancelDrag||!c.draggable){var r=this;return setTimeout(function(){r.startSelect(),r.captureMouse(e)},0),e.preventDefault()}m=t.getSelectionRange();var i=e.dataTransfer;i.effectAllowed=t.getReadOnly()?"copy":"copyMove",s.isOpera&&(t.container.appendChild(n),n.scrollTop=0),i.setDragImage&&i.setDragImage(n,0,0),s.isOpera&&t.container.removeChild(n),i.clearData(),i.setData("Text",t.session.getTextRange()),w=!0,this.setState("drag")},this.onDragEnd=function(e){c.draggable=!1,w=!1,this.setState(null);if(!t.getReadOnly()){var n=e.dataTransfer.dropEffect;!b&&n=="move"&&t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle("")},this.onDragEnter=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||k(),y++,e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragOver=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||(k(),y++),A!==null&&(A=null),e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragLeave=function(e){y--;if(y<=0&&h)return L(),b=null,i.preventDefault(e)},this.onDrop=function(e){if(!g)return;var n=e.dataTransfer;if(w)switch(b){case"move":m.contains(g.row,g.column)?m={start:g,end:g}:m=t.moveText(m,g);break;case"copy":m=t.moveText(m,g,!0)}else{var r=n.getData("Text");m={start:g,end:t.session.insert(g,r)},t.focus(),b=null}return L(),i.preventDefault(e)},i.addListener(c,"dragstart",this.onDragStart.bind(e)),i.addListener(c,"dragend",this.onDragEnd.bind(e)),i.addListener(c,"dragenter",this.onDragEnter.bind(e)),i.addListener(c,"dragover",this.onDragOver.bind(e)),i.addListener(c,"dragleave",this.onDragLeave.bind(e)),i.addListener(c,"drop",this.onDrop.bind(e));var A=null}function l(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}var r=e("../lib/dom"),i=e("../lib/event"),s=e("../lib/useragent"),o=200,u=200,a=5;(function(){this.dragWait=function(){var e=Date.now()-this.mousedownEvent.time;e>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){var e=this.editor.container;e.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle(""),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor,t=e.container;t.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle("ace_dragging");var n=s.isWin?"default":"move";e.renderer.setCursorStyle(n),this.setState("dragReady")},this.onMouseDrag=function(e){var t=this.editor.container;if(s.isIE&&this.state=="dragReady"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>3&&t.dragDrop()}if(this.state==="dragWait"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))}},this.onMouseDown=function(e){if(!this.$dragEnabled)return;this.mousedownEvent=e;var t=this.editor,n=e.inSelection(),r=e.getButton(),i=e.domEvent.detail||1;if(i===1&&r===0&&n){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var o=e.domEvent.target||e.domEvent.srcElement;"unselectable"in o&&(o.unselectable="on");if(t.getDragDelay()){if(s.isWebKit){this.cancelDrag=!0;var u=t.container;u.draggable=!0}this.setState("dragWait")}else this.startDrag();this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}).call(f.prototype),t.DragdropHandler=f}),ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";var r=e("./dom");t.get=function(e,t){var n=new XMLHttpRequest;n.open("GET",e,!0),n.onreadystatechange=function(){n.readyState===4&&t(n.responseText)},n.send(null)},t.loadScript=function(e,t){var n=r.getDocumentHead(),i=document.createElement("script");i.src=e,n.appendChild(i),i.onload=i.onreadystatechange=function(e,n){if(n||!i.readyState||i.readyState=="loaded"||i.readyState=="complete")i=i.onload=i.onreadystatechange=null,n||t()}},t.qualifyURL=function(e){var t=document.createElement("a");return t.href=e,t.href}}),ace.define("ace/lib/event_emitter",["require","exports","module"],function(e,t,n){"use strict";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!="object"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o1&&(i=n[n.length-2]);var o=a[t+"Path"];return o==null?o=a.basePath:r=="/"&&(t=r=""),o&&o.slice(-1)!="/"&&(o+="/"),o+t+r+i+this.get("suffix")},t.setModuleUrl=function(e,t){return a.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,r){var i,o;Array.isArray(n)&&(o=n[0],n=n[1]);try{i=e(n)}catch(u){}if(i&&!t.$loading[n])return r&&r(i);t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(r);if(t.$loading[n].length>1)return;var a=function(){e([n],function(e){t._emit("load.module",{name:n,module:e});var r=t.$loading[n];t.$loading[n]=null,r.forEach(function(t){t&&t(e)})})};if(!t.get("packaged"))return a();s.loadScript(t.moduleUrl(n,o),a)},t.init=f}),ace.define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop_handler","ace/config"],function(e,t,n){"use strict";var r=e("../lib/event"),i=e("../lib/useragent"),s=e("./default_handlers").DefaultHandlers,o=e("./default_gutter_handler").GutterHandler,u=e("./mouse_event").MouseEvent,a=e("./dragdrop_handler").DragdropHandler,f=e("../config"),l=function(e){var t=this;this.editor=e,new s(this),new o(this),new a(this);var n=function(t){(!document.hasFocus||!document.hasFocus())&&window.focus(),e.focus()},u=e.renderer.getMouseEventTarget();r.addListener(u,"click",this.onMouseEvent.bind(this,"click")),r.addListener(u,"mousemove",this.onMouseMove.bind(this,"mousemove")),r.addMultiMouseDownListener(u,[400,300,250],this,"onMouseEvent"),e.renderer.scrollBarV&&(r.addMultiMouseDownListener(e.renderer.scrollBarV.inner,[400,300,250],this,"onMouseEvent"),r.addMultiMouseDownListener(e.renderer.scrollBarH.inner,[400,300,250],this,"onMouseEvent"),i.isIE&&(r.addListener(e.renderer.scrollBarV.element,"mousedown",n),r.addListener(e.renderer.scrollBarH.element,"mousedown",n))),r.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,"mousewheel"));var f=e.renderer.$gutter;r.addListener(f,"mousedown",this.onMouseEvent.bind(this,"guttermousedown")),r.addListener(f,"click",this.onMouseEvent.bind(this,"gutterclick")),r.addListener(f,"dblclick",this.onMouseEvent.bind(this,"gutterdblclick")),r.addListener(f,"mousemove",this.onMouseEvent.bind(this,"guttermousemove")),r.addListener(u,"mousedown",n),r.addListener(f,"mousedown",function(t){return e.focus(),r.preventDefault(t)}),e.on("mousemove",function(n){if(t.state||t.$dragDelay||!t.$dragEnabled)return;var r=e.renderer.screenToTextCoordinates(n.x,n.y),i=e.session.selection.getRange(),s=e.renderer;!i.isEmpty()&&i.insideStart(r.row,r.column)?s.setCursorStyle("default"):s.setCursorStyle("")})};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new u(t,this.editor))},this.onMouseMove=function(e,t){var n=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;if(!n||!n.length)return;this.editor._emit(e,new u(t,this.editor))},this.onMouseWheel=function(e,t){var n=new u(t,this.editor);n.speed=this.$scrollSpeed*2,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var n=this.editor.renderer;n.$keepTextAreaAtCursor&&(n.$keepTextAreaAtCursor=null);var s=this,o=function(e){if(!e)return;if(i.isWebKit&&!e.which&&s.releaseMouse)return s.releaseMouse();s.x=e.clientX,s.y=e.clientY,t&&t(e),s.mouseEvent=new u(e,s.editor),s.$mouseMoved=!0},a=function(e){clearInterval(l),f(),s[s.state+"End"]&&s[s.state+"End"](e),s.state="",n.$keepTextAreaAtCursor==null&&(n.$keepTextAreaAtCursor=!0,n.$moveTextAreaToCursor()),s.isMousePressed=!1,s.$onCaptureMouseMove=s.releaseMouse=null,e&&s.onMouseEvent("mouseup",e)},f=function(){s[s.state]&&s[s.state](),s.$mouseMoved=!1};if(i.isOldIE&&e.domEvent.type=="dblclick")return setTimeout(function(){a(e)});s.$onCaptureMouseMove=o,s.releaseMouse=r.capture(this.editor.container,o,a);var l=setInterval(f,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){if(t&&t.domEvent&&t.domEvent.type!="contextmenu")return;this.editor.off("nativecontextmenu",e),t&&t.domEvent&&r.stopEvent(t.domEvent)}.bind(this);setTimeout(e,10),this.editor.on("nativecontextmenu",e)}}).call(l.prototype),f.defineOptions(l.prototype,"mouseHandler",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:i.isMac?150:0},dragEnabled:{initialValue:!0},focusTimout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=l}),ace.define("ace/mouse/fold_handler",["require","exports","module"],function(e,t,n){"use strict";function r(e){e.on("click",function(t){var n=t.getDocumentPosition(),r=e.session,i=r.getFoldAt(n.row,n.column,1);i&&(t.getAccelKey()?r.removeFold(i):r.expandFold(i),t.stop())}),e.on("gutterclick",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n=="foldWidgets"){var r=t.getDocumentPosition().row,i=e.session;i.foldWidgets&&i.foldWidgets[r]&&e.session.onFoldWidgetClick(r,t),e.isFocused()||e.focus(),t.stop()}}),e.on("gutterdblclick",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n=="foldWidgets"){var r=t.getDocumentPosition().row,i=e.session,s=i.getParentFoldRangeData(r,!0),o=s.range||s.firstRange;if(o){r=o.start.row;var u=i.getFoldAt(r,i.getLine(r).length,1);u?i.removeFold(u):(i.addFold("...",o),e.renderer.scrollCursorIntoView({row:o.start.row,column:0}))}t.stop()}})}t.FoldHandler=r}),ace.define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"],function(e,t,n){"use strict";var r=e("../lib/keys"),i=e("../lib/event"),s=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]==e)return;while(t[t.length-1]&&t[t.length-1]!=this.$defaultHandler)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)},this.addKeyboardHandler=function(e,t){if(!e)return;typeof e=="function"&&!e.handleKeyboard&&(e.handleKeyboard=e);var n=this.$handlers.indexOf(e);n!=-1&&this.$handlers.splice(n,1),t==undefined?this.$handlers.push(e):this.$handlers.splice(t,0,e),n==-1&&e.attach&&e.attach(this.$editor)},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return t==-1?!1:(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map(function(n){return n.getStatusText&&n.getStatusText(t,e)||""}).filter(Boolean).join(" ")},this.$callKeyboardHandlers=function(e,t,n,r){var s,o=!1,u=this.$editor.commands;for(var a=this.$handlers.length;a--;){s=this.$handlers[a].handleKeyboard(this.$data,e,t,n,r);if(!s||!s.command)continue;s.command=="null"?o=!0:o=u.exec(s.command,this.$editor,s.args,r),o&&r&&e!=-1&&s.passEvent!=1&&s.command.passEvent!=1&&i.stopEvent(r);if(o)break}return o},this.onCommandKey=function(e,t,n){var i=r.keyCodeToString(n);this.$callKeyboardHandlers(t,i,n,e)},this.onTextInput=function(e){var t=this.$callKeyboardHandlers(-1,e);t||this.$editor.commands.exec("insertstring",this.$editor,e)}}).call(s.prototype),t.KeyBinding=s}),ace.define("ace/range",["require","exports","module"],function(e,t,n){"use strict";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e=="object"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e=="object"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?tthis.end.column?1:0:ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.rowt)var r={row:t+1,column:0};else if(this.start.rowt.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.isEmpty()?o.fromPoints(t,t):this.isBackwards()?o.fromPoints(t,e):o.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){var e=this.doc.getLength()-1;this.setSelectionAnchor(0,0),this.moveCursorTo(e,this.doc.getLine(e).length)},this.setRange=this.setSelectionRange=function(e,t){t?(this.setSelectionAnchor(e.end.row,e.end.column),this.selectTo(e.start.row,e.start.column)):(this.setSelectionAnchor(e.start.row,e.start.column),this.selectTo(e.end.row,e.end.column)),this.getRange().isEmpty()&&(this.$isEmpty=!0),this.$desiredColumn=null},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection(function(){this.moveCursorTo(e,t)})},this.selectToPosition=function(e){this.$moveSelection(function(){this.moveCursorToPosition(e)})},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(typeof t=="undefined"){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n=typeof e=="number"?e:this.lead.row,r,i=this.session.getFoldLine(n);return i?(n=i.start.row,r=i.end.row):r=n,t===!0?new o(n,0,r,this.session.getLine(r).length):new o(n,0,r+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.moveCursorLeft=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,-1))this.moveCursorTo(t.start.row,t.start.column);else if(e.column===0)e.row>0&&this.moveCursorTo(e.row-1,this.doc.getLine(e.row-1).length);else{var n=this.session.getTabSize();this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(e.column-n,e.column).split(" ").length-1==n?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,1))this.moveCursorTo(t.end.row,t.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row0&&(t.column=r)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i;this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var s=this.session.getFoldAt(e,t,1);if(s){this.moveCursorTo(s.end.row,s.end.column);return}if(i=this.session.nonTokenRe.exec(r))t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,r=n.substring(t);if(t>=n.length){this.moveCursorTo(e,n.length),this.moveCursorRight(),e0&&this.moveCursorWordLeft();return}if(o=this.session.tokenRe.exec(s))t-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0;this.moveCursorTo(e,t)},this.$shortWordEndIndex=function(e){var t,n=0,r,i=/\s/,s=this.session.tokenRe;s.lastIndex=0;if(t=this.session.tokenRe.exec(e))n=this.session.tokenRe.lastIndex;else{while((r=e[n])&&i.test(r))n++;if(n<1){s.lastIndex=0;while((r=e[n])&&!s.test(r)){s.lastIndex=0,n++;if(i.test(r)){if(n>2){n--;break}while((r=e[n])&&i.test(r))n++;if(n>2)break}}}}return s.lastIndex=0,n},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i=this.session.getFoldAt(e,t,1);if(i)return this.moveCursorTo(i.end.row,i.end.column);if(t==n.length){var s=this.doc.getLength();do e++,r=this.doc.getLine(e);while(e0&&/^\s*$/.test(r));t=r.length,/\s+$/.test(r)||(r="")}var s=i.stringReverse(r),o=this.$shortWordEndIndex(s);return this.moveCursorTo(e,t-o)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n=this.session.documentToScreenPosition(this.lead.row,this.lead.column);t===0&&(this.$desiredColumn?n.column=this.$desiredColumn:this.$desiredColumn=n.column);var r=this.session.screenToDocumentPosition(n.row+e,n.column);e!==0&&t===0&&r.row===this.lead.row&&r.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[r.row]&&r.row++,this.moveCursorTo(r.row,r.column+t,t===0)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var r=this.session.getFoldAt(e,t,1);r&&(e=r.start.row,t=r.start.column),this.$keepDesiredColumnOnChange=!0,this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var r=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(r.row,r.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e.call(null,this);var n=this.getCursor();return o.fromPoints(t,n)}catch(r){return o.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map(function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t});else{var e=this.getRange();e.isBackwards=this.isBackwards()}return e},this.fromJSON=function(e){if(e.start==undefined){if(this.rangeList){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=o.fromPoints(e[t].start,e[t].end);e.isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(u.prototype),t.Selection=u}),ace.define("ace/tokenizer",["require","exports","module","ace/config"],function(e,t,n){"use strict";var r=e("./config"),i=2e3,s=function(e){this.states=e,this.regExps={},this.matchMappings={};for(var t in this.states){var n=this.states[t],r=[],i=0,s=this.matchMappings[t]={defaultToken:"text"},o="g",u=[];for(var a=0;a1?f.onMatch=this.$applyToken:f.onMatch=f.token),c>1&&(/\\\d/.test(f.regex)?l=f.regex.replace(/\\([0-9]+)/g,function(e,t){return"\\"+(parseInt(t,10)+i+1)}):(c=1,l=this.removeCapturingGroups(f.regex)),!f.splitRegex&&typeof f.token!="string"&&u.push(f)),s[i]=a,i+=c,r.push(l),f.onMatch||(f.onMatch=null)}r.length||(s[0]=0,r.push("$")),u.forEach(function(e){e.splitRegex=this.createSplitterRegexp(e.regex,o)},this),this.regExps[t]=new RegExp("("+r.join(")|(")+")|($)",o)}};(function(){this.$setMaxTokenCount=function(e){i=e|0},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if(typeof n=="string")return[{type:n,value:e}];var r=[];for(var i=0,s=n.length;il){var g=e.substring(l,m-v.length);h.type==p?h.value+=g:(h.type&&f.push(h),h={type:p,value:g})}for(var y=0;yi){c>2*e.length&&this.reportError("infinite loop with in ace tokenizer",{startState:t,line:e});while(l1&&n[0]!==r&&n.unshift("#tmp",r),{tokens:f,state:n.length?n:r}},this.reportError=r.reportError}).call(s.prototype),t.Tokenizer=s}),ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../lib/lang"),i=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{defaultToken:"text"}]}};(function(){this.addRules=function(e,t){if(!t){for(var n in e)this.$rules[n]=e[n];return}for(var n in e){var r=e[n];for(var i=0;i=this.$rowTokens.length){this.$row+=1,e||(e=this.$session.getLength());if(this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(n!==undefined)return n;n=0;while(t>0)t-=1,n+=e[t].value.length;return n}}).call(r.prototype),t.TokenIterator=r}),ace.define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"],function(e,t,n){"use strict";var r=e("../tokenizer").Tokenizer,i=e("./text_highlight_rules").TextHighlightRules,s=e("./behaviour").Behaviour,o=e("../unicode"),u=e("../lib/lang"),a=e("../token_iterator").TokenIterator,f=e("../range").Range,l=function(){this.HighlightRules=i,this.$behaviour=new s};(function(){this.tokenRe=new RegExp("^["+o.packages.L+o.packages.Mn+o.packages.Mc+o.packages.Nd+o.packages.Pc+"\\$_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+o.packages.L+o.packages.Mn+o.packages.Mc+o.packages.Nd+o.packages.Pc+"\\$_]|\\s])+","g"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules,this.$tokenizer=new r(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart="",this.blockComment="",this.toggleCommentLines=function(e,t,n,r){function w(e){for(var t=n;t<=r;t++)e(i.getLine(t),t)}var i=t.doc,s=!0,o=!0,a=Infinity,f=t.getTabSize(),l=!1;if(!this.lineCommentStart){if(!this.blockComment)return!1;var c=this.blockComment.start,h=this.blockComment.end,p=new RegExp("^(\\s*)(?:"+u.escapeRegExp(c)+")"),d=new RegExp("(?:"+u.escapeRegExp(h)+")\\s*$"),v=function(e,t){if(g(e,t))return;if(!s||/\S/.test(e))i.insertInLine({row:t,column:e.length},h),i.insertInLine({row:t,column:a},c)},m=function(e,t){var n;(n=e.match(d))&&i.removeInLine(t,e.length-n[0].length,e.length),(n=e.match(p))&&i.removeInLine(t,n[1].length,n[0].length)},g=function(e,n){if(p.test(e))return!0;var r=t.getTokens(n);for(var i=0;i2?r%f!=f-1:r%f==0}}var E=Infinity;w(function(e,t){var n=e.search(/\S/);n!==-1?(ne.length&&(E=e.length)}),a==Infinity&&(a=E,s=!1,o=!1),l&&a%f!=0&&(a=Math.floor(a/f)*f),w(o?m:v)},this.toggleBlockComment=function(e,t,n,r){var i=this.blockComment;if(!i)return;!i.start&&i[0]&&(i=i[0]);var s=new a(t,r.row,r.column),o=s.getCurrentToken(),u=t.selection,l=t.selection.toOrientedRange(),c,h;if(o&&/comment/.test(o.type)){var p,d;while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.start);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;p=new f(m,g,m,g+i.start.length);break}o=s.stepBackward()}var s=new a(t,r.row,r.column),o=s.getCurrentToken();while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.end);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;d=new f(m,g,m,g+i.end.length);break}o=s.stepForward()}d&&t.remove(d),p&&(t.remove(p),c=p.start.row,h=-i.start.length)}else h=i.start.length,c=n.start.row,t.insert(n.end,i.end),t.insert(n.start,i.start);l.start.row==c&&(l.start.column+=h),l.end.row==c&&(l.end.column+=h),t.selection.fromOrientedRange(l)},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){this.$embeds=[],this.$modes={};for(var t in e)e[t]&&(this.$embeds.push(t),this.$modes[t]=new e[t]);var n=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"];for(var t=0;tthis.row)return;if(n.start.row==this.row&&n.start.column>this.column)return;var r=this.row,i=this.column,s=n.start,o=n.end;if(t.action==="insertText")if(s.row===r&&s.column<=i){if(s.column!==i||!this.$insertRight)s.row===o.row?i+=o.column-s.column:(i-=s.column,r+=o.row-s.row)}else s.row!==o.row&&s.row=i?i=s.column:i=Math.max(0,i-(o.column-s.column)):s.row!==o.row&&s.row=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=e("./range").Range,o=e("./anchor").Anchor,u=function(e){this.$lines=[],e.length===0?this.$lines=[""]:Array.isArray(e)?this._insertLines(0,e):this.insert({row:0,column:0},e)};(function(){r.implement(this,i),this.setValue=function(e){var t=this.getLength();this.remove(new s(0,0,t,this.getLine(t-1).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new o(this,e,t)},"aaa".split(/a/).length===0?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal("changeNewLineMode")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e=="\r\n"||e=="\r"||e=="\n"},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){if(e.start.row==e.end.row)return this.getLine(e.start.row).substring(e.start.column,e.end.column);var t=this.getLines(e.start.row,e.end.row);t[0]=(t[0]||"").substring(e.start.column);var n=t.length-1;return e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column)),t.join(this.getNewLineCharacter())},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):e.row<0&&(e.row=0),e},this.insert=function(e,t){if(!t||t.length===0)return e;e=this.$clipPosition(e),this.getLength()<=1&&this.$detectNewLine(t);var n=this.$split(t),r=n.splice(0,1)[0],i=n.length==0?null:n.splice(n.length-1,1)[0];return e=this.insertInLine(e,r),i!==null&&(e=this.insertNewLine(e),e=this._insertLines(e.row,n),e=this.insertInLine(e,i||"")),e},this.insertLines=function(e,t){return e>=this.getLength()?this.insert({row:e,column:0},"\n"+t.join("\n")):this._insertLines(Math.max(e,0),t)},this._insertLines=function(e,t){if(t.length==0)return{row:e,column:0};while(t.length>61440){var n=this._insertLines(e,t.slice(0,61440));t=t.slice(61440),e=n.row}var r=[e,0];r.push.apply(r,t),this.$lines.splice.apply(this.$lines,r);var i=new s(e,0,e+t.length,0),o={action:"insertLines",range:i,lines:t};return this._signal("change",{data:o}),i.end},this.insertNewLine=function(e){e=this.$clipPosition(e);var t=this.$lines[e.row]||"";this.$lines[e.row]=t.substring(0,e.column),this.$lines.splice(e.row+1,0,t.substring(e.column,t.length));var n={row:e.row+1,column:0},r={action:"insertText",range:s.fromPoints(e,n),text:this.getNewLineCharacter()};return this._signal("change",{data:r}),n},this.insertInLine=function(e,t){if(t.length==0)return e;var n=this.$lines[e.row]||"";this.$lines[e.row]=n.substring(0,e.column)+t+n.substring(e.column);var r={row:e.row,column:e.column+t.length},i={action:"insertText",range:s.fromPoints(e,r),text:t};return this._signal("change",{data:i}),r},this.remove=function(e){e instanceof s||(e=s.fromPoints(e.start,e.end)),e.start=this.$clipPosition(e.start),e.end=this.$clipPosition(e.end);if(e.isEmpty())return e.start;var t=e.start.row,n=e.end.row;if(e.isMultiLine()){var r=e.start.column==0?t:t+1,i=n-1;e.end.column>0&&this.removeInLine(n,0,e.end.column),i>=r&&this._removeLines(r,i),r!=t&&(this.removeInLine(t,e.start.column,this.getLine(t).length),this.removeNewLine(e.start.row))}else this.removeInLine(t,e.start.column,e.end.column);return e.start},this.removeInLine=function(e,t,n){if(t==n)return;var r=new s(e,t,e,n),i=this.getLine(e),o=i.substring(t,n),u=i.substring(0,t)+i.substring(n,i.length);this.$lines.splice(e,1,u);var a={action:"removeText",range:r,text:o};return this._signal("change",{data:a}),r.start},this.removeLines=function(e,t){return e<0||t>=this.getLength()?this.remove(new s(e,0,t+1,0)):this._removeLines(e,t)},this._removeLines=function(e,t){var n=new s(e,0,t+1,0),r=this.$lines.splice(e,t-e+1),i={action:"removeLines",range:n,nl:this.getNewLineCharacter(),lines:r};return this._signal("change",{data:i}),r},this.removeNewLine=function(e){var t=this.getLine(e),n=this.getLine(e+1),r=new s(e,t.length,e+1,0),i=t+n;this.$lines.splice(e,2,i);var o={action:"removeText",range:r,text:this.getNewLineCharacter()};this._signal("change",{data:o})},this.replace=function(e,t){e instanceof s||(e=s.fromPoints(e.start,e.end));if(t.length==0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);if(t)var n=this.insert(e.start,t);else n=e.start;return n},this.applyDeltas=function(e){for(var t=0;t=0;t--){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action=="insertLines"?this._removeLines(r.start.row,r.end.row-1):n.action=="insertText"?this.remove(r):n.action=="removeLines"?this._insertLines(r.start.row,n.lines):n.action=="removeText"&&this.insert(r.start,n.text)}},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i20){n.running=setTimeout(n.$worker,20);break}}n.currentLine=t,s<=r&&n.fireUpdateEvent(s,r)}};(function(){r.implement(this,i),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._signal("update",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.range,n=t.start.row,r=t.end.row-n;if(r===0)this.lines[n]=null;else if(e.action=="removeText"||e.action=="removeLines")this.lines.splice(n,r+1,null),this.states.splice(n,r+1,null);else{var i=Array(r+1);i.unshift(n,1),this.lines.splice.apply(this.lines,i),this.states.splice.apply(this.states,i)}this.currentLine=Math.min(n,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||"start"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1],r=this.tokenizer.getLineTokens(t,n,e);return this.states[e]+""!=r.state+""?(this.states[e]=r.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=r.tokens}}).call(s.prototype),t.BackgroundTokenizer=s}),ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(e,t,n){"use strict";var r=e("./lib/lang"),i=e("./lib/oop"),s=e("./range").Range,o=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){if(this.regExp+""==e+"")return;this.regExp=e,this.cache=[]},this.update=function(e,t,n,i){if(!this.regExp)return;var o=i.firstRow,u=i.lastRow;for(var a=o;a<=u;a++){var f=this.cache[a];f==null&&(f=r.getMatchOffsets(n.getLine(a),this.regExp),f.length>this.MAX_RANGES&&(f=f.slice(0,this.MAX_RANGES)),f=f.map(function(e){return new s(a,e.offset,a,e.offset+e.length)}),this.cache[a]=f.length?f:"");for(var l=f.length;l--;)t.drawSingleLineMarker(e,f[l].toScreenRange(n),this.clazz,i)}}}).call(o.prototype),t.SearchHighlight=o}),ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"],function(e,t,n){"use strict";function i(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new r(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach(function(e){e.setFoldLine(this)},this)}var r=e("../range").Range;(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach(function(t){t.start.row+=e,t.end.row+=e})},this.addFold=function(e){if(e.sameRow){if(e.start.rowthis.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(e),this.folds.sort(function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)}),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var r=0,i=this.folds,s,o,u,a=!0;t==null&&(t=this.end.row,n=this.end.column);for(var f=0;f0)continue;var a=i(e,o.start);return u===0?t&&a!==0?-s-2:s:a>0||a===0&&!t?s:-s-1}return-s-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);n<0&&(n=-n-1);var r=this.pointIndex(e.end,t,n);return r<0?r=-r-1:r++,this.ranges.splice(n,r-n,e)},this.addList=function(e){var t=[];for(var n=e.length;n--;)t.push.call(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){var e=[],t=this.ranges;t=t.sort(function(e,t){return i(e.start,t.start)});var n=t[0],r;for(var s=1;s=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.rowi)break;c.start.row==i&&c.start.column>=n.column&&(c.start.column!=n.column||!this.$insertRight)&&(c.start.column+=u,c.start.row+=o);if(c.end.row==i&&c.end.column>=n.column){if(c.end.column==n.column&&this.$insertRight)continue;c.end.column==n.column&&u>0&&fc.start.column&&c.end.column==a[f+1].start.column&&(c.end.column-=u),c.end.column+=u,c.end.row+=o}}if(o!=0&&f=e)return i;if(i.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,r=0;t&&(r=n.indexOf(t)),r==-1&&(r=0);for(r;r=e)return i}return null},this.getFoldedRowCount=function(e,t){var n=this.$foldData,r=t-e+1;for(var i=0;i=t){u=e?r-=t-u:r=0);break}o>=e&&(u>=e?r-=o-u:r-=o-e+1)}return r},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort(function(e,t){return e.start.row-t.start.row}),e},this.addFold=function(e,t){var n=this.$foldData,r=!1,o;e instanceof s?o=e:(o=new s(t,e),o.collapseChildren=t.collapseChildren),this.$clipRangeToDocument(o.range);var u=o.start.row,a=o.start.column,f=o.end.row,l=o.end.column;if(u0&&(this.removeFolds(p),p.forEach(function(e){o.addSubFold(e)}));for(var d=0;d0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach(function(e){this.expandFold(e)},this)},this.unfold=function(e,t){var n,i;e==null?(n=new r(0,0,this.getLength(),0),t=!0):typeof e=="number"?n=new r(e,0,e,this.getLine(e).length):"row"in e?n=r.fromPoints(e,e):n=e,i=this.getFoldsInRangeList(n);if(t)this.removeFolds(i);else{var s=i;while(s.length)this.expandFolds(s),s=this.getFoldsInRangeList(n)}if(i.length)return i},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getRowFoldStart=function(e,t){var n=this.getFoldLine(e,t);return n?n.start.row:e},this.getFoldDisplayLine=function(e,t,n,r,i){r==null&&(r=e.start.row),i==null&&(i=0),t==null&&(t=e.end.row),n==null&&(n=this.getLine(t).length);var s=this.doc,o="";return e.walk(function(e,t,n,u){if(t=e){i=s.end.row;try{var o=this.addFold("...",s);o&&(o.collapseChildren=n)}catch(u){}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error("invalid fold style: "+e+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle==e)return;this.$foldStyle=e,e=="manual"&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)},this.$setFolding=function(e){if(this.$foldMode==e)return;this.$foldMode=e,this.off("change",this.$updateFoldWidgets),this.off("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets),this._emit("changeAnnotation");if(!e||this.$foldStyle=="manual"){this.foldWidgets=null;return}this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets),this.on("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};var r=e-1,i;while(r>=0){var s=n[r];s==null&&(s=n[r]=this.getFoldWidget(r));if(s=="start"){var o=this.getFoldWidgetRange(r);i||(i=o);if(o&&o.end.row>=e)break}r--}return{range:r!==-1&&o,firstRange:i}},this.onFoldWidgetClick=function(e,t){t=t.domEvent;var n={children:t.shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey},r=this.$toggleFoldWidget(e,n);if(!r){var i=t.target||t.srcElement;i&&/ace_fold-widget/.test(i.className)&&(i.className+=" ace_invalid")}},this.$toggleFoldWidget=function(e,t){if(!this.getFoldWidget)return;var n=this.getFoldWidget(e),r=this.getLine(e),i=n==="end"?-1:1,s=this.getFoldAt(e,i===-1?0:r.length,i);if(s){t.children||t.all?this.removeFold(s):this.expandFold(s);return}var o=this.getFoldWidgetRange(e,!0);if(o&&!o.isMultiLine()){s=this.getFoldAt(o.start.row,o.start.column,1);if(s&&o.isEqual(s.range)){this.removeFold(s);return}}if(t.siblings){var u=this.getParentFoldRangeData(e);if(u.range)var a=u.range.start.row+1,f=u.range.end.row;this.foldAll(a,f,t.all?1e4:0)}else t.children?(f=o?o.end.row:this.getLength(),this.foldAll(e+1,o.end.row,t.all?1e4:0)):o&&(t.all&&(o.collapseChildren=1e4),this.addFold("...",o));return o},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var n=this.$toggleFoldWidget(t,{});if(n)return;var r=this.getParentFoldRangeData(t,!0);n=r.range||r.firstRange;if(n){t=n.start.row;var i=this.getFoldAt(t,this.getLine(t).length,1);i?this.removeFold(i):this.addFold("...",n)}},this.updateFoldWidgets=function(e){var t=e.data,n=t.range,r=n.start.row,i=n.end.row-r;if(i===0)this.foldWidgets[r]=null;else if(t.action=="removeText"||t.action=="removeLines")this.foldWidgets.splice(r,i+1,null);else{var s=Array(i+1);s.unshift(r,1),this.foldWidgets.splice.apply(this.foldWidgets,s)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}var r=e("../range").Range,i=e("./fold_line").FoldLine,s=e("./fold").Fold,o=e("../token_iterator").TokenIterator;t.Folding=u}),ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],function(e,t,n){"use strict";function s(){this.findMatchingBracket=function(e,t){if(e.column==0)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(n=="")return null;var r=n.match(/([\(\[\{])|([\)\]\}])/);return r?r[1]?this.$findClosingBracket(r[1],e):this.$findOpeningBracket(r[2],e):null},this.getBracketRange=function(e){var t=this.getLine(e.row),n=!0,r,s=t.charAt(e.column-1),o=s&&s.match(/([\(\[\{])|([\)\]\}])/);o||(s=t.charAt(e.column),e={row:e.row,column:e.column+1},o=s&&s.match(/([\(\[\{])|([\)\]\}])/),n=!1);if(!o)return null;if(o[1]){var u=this.$findClosingBracket(o[1],e);if(!u)return null;r=i.fromPoints(e,u),n||(r.end.column++,r.start.column--),r.cursor=r.end}else{var u=this.$findOpeningBracket(o[2],e);if(!u)return null;r=i.fromPoints(u,e),n||(r.start.column++,r.end.column--),r.cursor=r.start}return r},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{"},this.$findOpeningBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp("(\\.?"+u.type.replace(".","\\.").replace("rparen",".paren").replace(/\b(?:end|start|begin)\b/,"")+")+"));var a=t.column-o.getCurrentTokenColumn()-2,f=u.value;for(;;){while(a>=0){var l=f.charAt(a);if(l==i){s-=1;if(s==0)return{row:o.getCurrentTokenRow(),column:a+o.getCurrentTokenColumn()}}else l==e&&(s+=1);a-=1}do u=o.stepBackward();while(u&&!n.test(u.type));if(u==null)break;f=u.value,a=f.length-1}return null},this.$findClosingBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp("(\\.?"+u.type.replace(".","\\.").replace("lparen",".paren").replace(/\b(?:end|start|begin)\b/,"")+")+"));var a=t.column-o.getCurrentTokenColumn();for(;;){var f=u.value,l=f.length;while(a=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510}r.implement(this,o),this.setDocument=function(e){this.doc&&this.doc.removeListener("change",this.$onChange),this.doc=e,e.on("change",this.$onChange),this.bgTokenizer&&this.bgTokenizer.setDocument(this.getDocument()),this.resetCaches()},this.getDocument=function(){return this.doc},this.$resetRowCache=function(e){if(!e){this.$docRowCache=[],this.$screenRowCache=[];return}var t=this.$docRowCache.length,n=this.$getRowCacheIndex(this.$docRowCache,e)+1;t>n&&(this.$docRowCache.splice(n,t),this.$screenRowCache.splice(n,t))},this.$getRowCacheIndex=function(e,t){var n=0,r=e.length-1;while(n<=r){var i=n+r>>1,s=e[i];if(t>s)n=i+1;else{if(!(t=t)break}return r=n[s],r?(r.index=s,r.start=i-r.value.length,r):null},this.setUndoManager=function(e){this.$undoManager=e,this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel();if(e){var t=this;this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.$deltasFold.length&&(t.$deltas.push({group:"fold",deltas:t.$deltasFold}),t.$deltasFold=[]),t.$deltasDoc.length&&(t.$deltas.push({group:"doc",deltas:t.$deltasDoc}),t.$deltasDoc=[]),t.$deltas.length>0&&e.execute({action:"aceupdate",args:[t.$deltas,t],merge:t.mergeUndoDeltas}),t.mergeUndoDeltas=!1,t.$deltas=[]},this.$informUndoManager=i.delayedCall(this.$syncInformUndoManager)}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?i.stringRepeat(" ",this.getTabSize()):" "},this.setUseSoftTabs=function(e){this.setOption("useSoftTabs",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption("tabSize",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize===0},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption("overwrite",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=""),this.$decorations[e]+=" "+t,this._signal("changeBreakpoint",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||"").replace(" "+t,""),this._signal("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t0&&(r=!!n.charAt(t-1).match(this.tokenRe)),r||(r=!!n.charAt(t).match(this.tokenRe));if(r)var i=this.tokenRe;else if(/^\s+$/.test(n.slice(t-1,t+1)))var i=/\s/;else var i=this.nonTokenRe;var s=t;if(s>0){do s--;while(s>=0&&n.charAt(s).match(i));s++}var o=t;while(oe&&(e=t.screenWidth)}),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){this.$modified=!1;if(this.$useWrapMode)return this.screenWidth=this.$wrapLimit;var t=this.doc.getAllLines(),n=this.$rowLengthCache,r=0,i=0,s=this.$foldData[i],o=s?s.start.row:Infinity,u=t.length;for(var a=0;ao){a=s.end.row+1;if(a>=u)break;s=this.$foldData[i++],o=s?s.start.row:Infinity}n[a]==null&&(n[a]=this.$getStringScreenWidth(t[a])[0]),n[a]>r&&(r=n[a])}this.screenWidth=r}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.undoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;var n=null;for(var r=e.length-1;r!=-1;r--){var i=e[r];i.group=="doc"?(this.doc.revertDeltas(i.deltas),n=this.$getUndoSelection(i.deltas,!0,n)):i.deltas.forEach(function(e){this.addFolds(e.folds)},this)}return this.$fromUndo=!1,n&&this.$undoSelect&&!t&&this.selection.setSelectionRange(n),n},this.redoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;var n=null;for(var r=0;re.end.column&&(s.start.column+=u),s.end.row==e.end.row&&s.end.column>e.end.column&&(s.end.column+=u)),o&&s.start.row>=e.end.row&&(s.start.row+=o,s.end.row+=o)}s.end=this.insert(s.start,r);if(i.length){var a=e.start,l=s.start,o=l.row-a.row,u=l.column-a.column;this.addFolds(i.map(function(e){return e=e.clone(),e.start.row==a.row&&(e.start.column+=u),e.end.row==a.row&&(e.end.column+=u),e.start.row+=o,e.end.row+=o,e}))}return s},this.indentRows=function(e,t,n){n=n.replace(/\t/g,this.getTabString());for(var r=e;r<=t;r++)this.insert({row:r,column:0},n)},this.outdentRows=function(e){var t=e.collapseRows(),n=new f(0,0,0,0),r=this.getTabSize();for(var i=t.start.row;i<=t.end.row;++i){var s=this.getLine(i);n.start.row=i,n.end.row=i;for(var o=0;o0){var r=this.getRowFoldEnd(t+n);if(r>this.doc.getLength()-1)return 0;var i=r-t}else{e=this.$clipRowToDocument(e),t=this.$clipRowToDocument(t);var i=t-e+1}var s=new f(e,0,t,Number.MAX_VALUE),o=this.getFoldsInRange(s).map(function(e){return e=e.clone(),e.start.row+=i,e.end.row+=i,e}),u=n==0?this.doc.getLines(e,t):this.doc.removeLines(e,t);return this.doc.insertLines(e+i,u),o.length&&this.addFolds(o),i},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){t=Math.max(0,t);if(e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0);if(e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){if(this.$wrapLimitRange.min!==e||this.$wrapLimitRange.max!==t)this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this._signal("changeWrapMode")},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;n.max<0&&(n={min:t,max:t});var r=this.$constrainWrapLimit(e,n.min,n.max);return r!=this.$wrapLimit&&r>1?(this.$wrapLimit=r,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal("changeWrapLimit")),!0):!1},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n,r=e.data.action,i=e.data.range.start.row,s=e.data.range.end.row,o=e.data.range.start,u=e.data.range.end,a=null;r.indexOf("Lines")!=-1?(r=="insertLines"?s=i+e.data.lines.length:s=i,n=e.data.lines?e.data.lines.length:s-i):n=s-i,this.$updating=!0;if(n!=0)if(r.indexOf("remove")!=-1){this[t?"$wrapData":"$rowLengthCache"].splice(i,n);var f=this.$foldData;a=this.getFoldsInRange(e.data.range),this.removeFolds(a);var l=this.getFoldLine(u.row),c=0;if(l){l.addRemoveChars(u.row,u.column,o.column-u.column),l.shiftRow(-n);var h=this.getFoldLine(i);h&&h!==l&&(h.merge(l),l=h),c=f.indexOf(l)+1}for(c;c=u.row&&l.shiftRow(-n)}s=i}else{var p=Array(n);p.unshift(i,0);var d=t?this.$wrapData:this.$rowLengthCache;d.splice.apply(d,p);var f=this.$foldData,l=this.getFoldLine(i),c=0;if(l){var v=l.range.compareInside(o.row,o.column);v==0?(l=l.split(o.row,o.column),l&&(l.shiftRow(n),l.addRemoveChars(s,0,u.column-o.column))):v==-1&&(l.addRemoveChars(i,0,u.column-o.column),l.shiftRow(n)),c=f.indexOf(l)+1}for(c;c=i&&l.shiftRow(n)}}else{n=Math.abs(e.data.range.start.column-e.data.range.end.column),r.indexOf("remove")!=-1&&(a=this.getFoldsInRange(e.data.range),this.removeFolds(a),n=-n);var l=this.getFoldLine(i);l&&l.addRemoveChars(i,o.column,n)}return t&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,t?this.$updateWrapData(i,s):this.$updateRowLengthCache(i,s),a},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(e,t){var r=this.doc.getAllLines(),i=this.getTabSize(),s=this.$wrapData,o=this.$wrapLimit,a,f,l=e;t=Math.min(t,r.length-1);while(l<=t)f=this.getFoldLine(l,f),f?(a=[],f.walk(function(e,t,i,s){var o;if(e!=null){o=this.$getDisplayTokens(e,a.length),o[0]=n;for(var f=1;fr){var h=o+r;if(e[h-1]>=p&&e[h]>=p){c(h);continue}if(e[h]==n||e[h]==u){for(h;h!=o-1;h--)if(e[h]==n)break;if(h>o){c(h);continue}h=o+r;for(h;h>2)),o-1);while(h>d&&e[h]d&&e[h]d&&e[h]==l)h--}else while(h>d&&e[h]d){c(++h);continue}h=o+r,e[h]==t&&h--,c(h)}return i},this.$getDisplayTokens=function(n,r){var i=[],s;r=r||0;for(var o=0;o39&&u<48||u>57&&u<64?i.push(l):u>=4352&&m(u)?i.push(e,t):i.push(e)}return i},this.$getStringScreenWidth=function(e,t,n){if(t==0)return[0,0];t==null&&(t=Infinity),n=n||0;var r,i;for(i=0;i=4352&&m(r)?n+=2:n+=1;if(n>t)break}return[n,i]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.getRowLineCount=function(e){return!this.$useWrapMode||!this.$wrapData[e]?1:this.$wrapData[e].length+1},this.getScreenLastRowColumn=function(e){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE);return this.documentToScreenColumn(t.row,t.column)},this.getDocumentLastRowColumn=function(e,t){var n=this.documentToScreenRow(e,t);return this.getScreenLastRowColumn(n)},this.getDocumentLastRowColumnPosition=function(e,t){var n=this.documentToScreenRow(e,t);return this.screenToDocumentPosition(n,Number.MAX_VALUE/10)},this.getRowSplitData=function(e){return this.$useWrapMode?this.$wrapData[e]:undefined},this.getScreenTabSize=function(e){return this.$tabSize-e%this.$tabSize},this.screenToDocumentRow=function(e,t){return this.screenToDocumentPosition(e,t).row},this.screenToDocumentColumn=function(e,t){return this.screenToDocumentPosition(e,t).column},this.screenToDocumentPosition=function(e,t){if(e<0)return{row:0,column:0};var n,r=0,i=0,s,o=0,u=0,a=this.$screenRowCache,f=this.$getRowCacheIndex(a,e),l=a.length;if(l&&f>=0)var o=a[f],r=this.$docRowCache[f],c=e>a[l-1];else var c=!l;var h=this.getLength()-1,p=this.getNextFoldLine(r),d=p?p.start.row:Infinity;while(o<=e){u=this.getRowLength(r);if(o+u>e||r>=h)break;o+=u,r++,r>d&&(r=p.end.row+1,p=this.getNextFoldLine(r,p),d=p?p.start.row:Infinity),c&&(this.$docRowCache.push(r),this.$screenRowCache.push(o))}if(p&&p.start.row<=r)n=this.getFoldDisplayLine(p),r=p.start.row;else{if(o+u<=e||r>h)return{row:h,column:this.getLine(h).length};n=this.getLine(r),p=null}if(this.$useWrapMode){var v=this.$wrapData[r];if(v){var m=Math.floor(e-o);s=v[m],m>0&&v.length&&(i=v[m-1]||v[v.length-1],n=n.substring(i))}}return i+=this.$getStringScreenWidth(n,t)[1],this.$useWrapMode&&i>=s&&(i=s-1),p?p.idxToPosition(i):{row:r,column:i}},this.documentToScreenPosition=function(e,t){if(typeof t=="undefined")var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var r=0,i=null,s=null;s=this.getFoldAt(e,t,1),s&&(e=s.start.row,t=s.start.column);var o,u=0,a=this.$docRowCache,f=this.$getRowCacheIndex(a,e),l=a.length;if(l&&f>=0)var u=a[f],r=this.$screenRowCache[f],c=e>a[l-1];else var c=!l;var h=this.getNextFoldLine(u),p=h?h.start.row:Infinity;while(u=p){o=h.end.row+1;if(o>e)break;h=this.getNextFoldLine(o,h),p=h?h.start.row:Infinity}else o=u+1;r+=this.getRowLength(u),u=o,c&&(this.$docRowCache.push(u),this.$screenRowCache.push(r))}var d="";h&&u>=p?(d=this.getFoldDisplayLine(h,e,t),i=h.start.row):(d=this.getLine(e).substring(0,t),i=e);if(this.$useWrapMode){var v=this.$wrapData[i];if(v){var m=0;while(d.length>=v[m])r++,m++;d=d.substring(v[m-1]||0,d.length)}}return{row:r,column:this.$getStringScreenWidth(d)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(!this.$useWrapMode){e=this.getLength();var n=this.$foldData;for(var r=0;ro&&(s=t.end.row+1,t=this.$foldData[r++],o=t?t.start.row:Infinity)}}return this.lineWidgets&&(e+=this.$getWidgetScreenLength()),e},this.$setFontMetrics=function(e){},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()}}).call(p.prototype),e("./edit_session/folding").Folding.call(p.prototype),e("./edit_session/bracket_match").BracketMatch.call(p.prototype),s.defineOptions(p.prototype,"session",{wrap:{set:function(e){!e||e=="off"?e=!1:e=="free"?e=!0:e=="printMargin"?e=-1:typeof e=="string"&&(e=parseInt(e,10)||!1);if(this.$wrap==e)return;if(!e)this.setUseWrapMode(!1);else{var t=typeof e=="number"?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}this.$wrap=e},get:function(){return this.getUseWrapMode()?this.$wrap==-1?"printMargin":this.getWrapLimitRange().min?this.$wrap:"free":"off"},handlesSet:!0},wrapMethod:{set:function(e){e=e=="auto"?this.$mode.type!="text":e!="text",e!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$modified=!0,this.$resetRowCache(0),this.$updateWrapData(0,this.getLength()-1)))},initialValue:"auto"},firstLineNumber:{set:function(){this._signal("changeBreakpoint")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){if(isNaN(e)||this.$tabSize===e)return;this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal("changeTabSize")},initialValue:4,handlesSet:!0},overwrite:{set:function(e){this._signal("changeOverwrite")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId}}}),t.EditSession=p}),ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(e,t,n){"use strict";var r=e("./lib/lang"),i=e("./lib/oop"),s=e("./range").Range,o=function(){this.$options={}};(function(){this.set=function(e){return i.mixin(this.$options,e),this},this.getOptions=function(){return r.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,n=this.$matchIterator(e,t);if(!n)return!1;var r=null;return n.forEach(function(e,n,i){if(!e.start){var o=e.offset+(i||0);r=new s(n,o,n,o+e.length);if(!e.length&&t.start&&t.start.start&&t.skipCurrent!=0&&r.isEqual(t.start))return r=null,!1}else r=e;return!0}),r},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,i=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),o=[],u=t.re;if(t.$isMultiLine){var a=u.length,f=i.length-a,l;e:for(var c=u.offset||0;c<=f;c++){for(var h=0;hv)continue;o.push(l=new s(c,v,c+a-1,m)),a>2&&(c=c+a-2)}}else for(var g=0;gE&&o[h].end.row==n.end.row)h--;o=o.slice(g,h+1);for(g=0,h=o.length;g=0;u--)if(i(o[u],t,s))return!0};else var u=function(e,t,s){var o=r.getMatchOffsets(e,n);for(var u=0;u=o;r--)if(n(e.getLine(r),r))return;if(t.wrap==0)return;for(r=u,o=s.row;r>=o;r--)if(n(e.getLine(r),r))return}:function(n){var r=s.row,i=e.getLine(r).substr(s.column);if(n(i,r,s.column))return;for(r+=1;r<=u;r++)if(n(e.getLine(r),r))return;if(t.wrap==0)return;for(r=o,u=s.row;r<=u;r++)if(n(e.getLine(r),r))return};return{forEach:a}}}).call(o.prototype),t.Search=o}),ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],function(e,t,n){"use strict";function o(e,t){this.platform=t||(i.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function u(e,t){o.call(this,e,t),this.$singleCommand=!1}var r=e("../lib/keys"),i=e("../lib/useragent"),s=r.KEY_MODS;u.prototype=o.prototype,function(){this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var n=e&&(typeof e=="string"?e:e.name);e=this.commands[n],t||delete this.commands[n];var r=this.commandKeyBinding;for(var i in r){var s=r[i];if(s==e)delete r[i];else if(Array.isArray(s)){var o=s.indexOf(e);o!=-1&&(s.splice(o,1),s.length==1&&(r[i]=s[0]))}}},this.bindKey=function(e,t,n){typeof e=="object"&&(e=e[this.platform]);if(!e)return;if(typeof t=="function")return this.addCommand({exec:t,bindKey:e,name:t.name||e});e.split("|").forEach(function(e){var r="";if(e.indexOf(" ")!=-1){var i=e.split(/\s+/);e=i.pop(),i.forEach(function(e){var t=this.parseKeys(e),n=s[t.hashId]+t.key;r+=(r?" ":"")+n,this._addCommandToBinding(r,"chainKeys")},this),r+=" "}var o=this.parseKeys(e),u=s[o.hashId]+o.key;this._addCommandToBinding(r+u,t,n)},this)},this._addCommandToBinding=function(e,t,n){var r=this.commandKeyBinding,i;t?!r[e]||this.$singleCommand?r[e]=t:(Array.isArray(r[e])?(i=r[e].indexOf(t))!=-1&&r[e].splice(i,1):r[e]=[r[e]],n||t.isDefault?r[e].unshift(t):r[e].push(t)):delete r[e]},this.addCommands=function(e){e&&Object.keys(e).forEach(function(t){var n=e[t];if(!n)return;if(typeof n=="string")return this.bindKey(n,t);typeof n=="function"&&(n={exec:n});if(typeof n!="object")return;n.name||(n.name=t),this.addCommand(n)},this)},this.removeCommands=function(e){Object.keys(e).forEach(function(t){this.removeCommand(e[t])},this)},this.bindKeys=function(e){Object.keys(e).forEach(function(t){this.bindKey(t,e[t])},this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function(e){return e}),n=t.pop(),i=r[n];if(r.FUNCTION_KEYS[i])n=r.FUNCTION_KEYS[i].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(t.length==1&&t[0]=="shift")return{key:n.toUpperCase(),hashId:-1}}var s=0;for(var o=t.length;o--;){var u=r.KEY_MODS[t[o]];if(u==null)return typeof console!="undefined"&&console.error("invalid modifier "+t[o]+" in "+e),!1;s|=u}return{key:n,hashId:s}},this.findKeyCommand=function(t,n){var r=s[t]+n;return this.commandKeyBinding[r]},this.handleKeyboard=function(e,t,n,r){var i=s[t]+n,o=this.commandKeyBinding[i];e.$keyChain&&(e.$keyChain+=" "+i,o=this.commandKeyBinding[e.$keyChain]||o);if(o)if(o=="chainKeys"||o[o.length-1]=="chainKeys")return e.$keyChain=e.$keyChain||i,{command:"null"};return e.$keyChain&&r>0&&(e.$keyChain=""),{command:o}}}.call(o.prototype),t.HashHandler=o,t.MultiHashHandler=u}),ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../keyboard/hash_handler").MultiHashHandler,s=e("../lib/event_emitter").EventEmitter,o=function(e,t){i.call(this,t,e),this.byName=this.commands,this.setDefaultHandler("exec",function(e){return e.command.exec(e.editor,e.args||{})})};r.inherits(o,i),function(){r.implement(this,s),this.exec=function(e,t,n){if(Array.isArray(e)){for(var r=e.length;r--;)if(this.exec(e[r],t,n))return!0;return!1}typeof e=="string"&&(e=this.commands[e]);if(!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;var i={editor:t,command:e,args:n};return i.returnValue=this._emit("exec",i),this._signal("afterExec",i),i.returnValue===!1?!1:!0},this.toggleRecording=function(e){if(this.$inReplay)return;return e&&e._emit("changeStatus"),this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(this.$inReplay||!this.macro)return;if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach(function(t){typeof t=="string"?this.exec(t,e):this.exec(t[0],e,t[1])},this)}finally{this.$inReplay=!1}},this.trimMacro=function(e){return e.map(function(e){return typeof e[0]!="string"&&(e[0]=e[0].name),e[1]||(e=e[0]),e})}}.call(o.prototype),t.CommandManager=o}),ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"],function(e,t,n){"use strict";function o(e,t){return{win:e,mac:t}}var r=e("../lib/lang"),i=e("../config"),s=e("../range").Range;t.commands=[{name:"showSettingsMenu",bindKey:o("Ctrl-,","Command-,"),exec:function(e){i.loadModule("ace/ext/settings_menu",function(t){t.init(e),e.showSettingsMenu()})},readOnly:!0},{name:"goToNextError",bindKey:o("Alt-E","Ctrl-E"),exec:function(e){i.loadModule("ace/ext/error_marker",function(t){t.showErrorMarker(e,1)})},scrollIntoView:"animate",readOnly:!0},{name:"goToPreviousError",bindKey:o("Alt-Shift-E","Ctrl-Shift-E"),exec:function(e){i.loadModule("ace/ext/error_marker",function(t){t.showErrorMarker(e,-1)})},scrollIntoView:"animate",readOnly:!0},{name:"selectall",bindKey:o("Ctrl-A","Command-A"),exec:function(e){e.selectAll()},readOnly:!0},{name:"centerselection",bindKey:o(null,"Ctrl-L"),exec:function(e){e.centerSelection()},readOnly:!0},{name:"gotoline",bindKey:o("Ctrl-L","Command-L"),exec:function(e){var t=parseInt(prompt("Enter line number:"),10);isNaN(t)||e.gotoLine(t)},readOnly:!0},{name:"fold",bindKey:o("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(e){e.session.toggleFold(!1)},scrollIntoView:"center",readOnly:!0},{name:"unfold",bindKey:o("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(e){e.session.toggleFold(!0)},scrollIntoView:"center",readOnly:!0},{name:"toggleFoldWidget",bindKey:o("F2","F2"),exec:function(e){e.session.toggleFoldWidget()},scrollIntoView:"center",readOnly:!0},{name:"toggleParentFoldWidget",bindKey:o("Alt-F2","Alt-F2"),exec:function(e){e.session.toggleFoldWidget(!0)},scrollIntoView:"center",readOnly:!0},{name:"foldall",bindKey:o("Ctrl-Alt-0","Ctrl-Command-Option-0"),exec:function(e){e.session.foldAll()},scrollIntoView:"center",readOnly:!0},{name:"foldOther",bindKey:o("Alt-0","Command-Option-0"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:"center",readOnly:!0},{name:"unfoldall",bindKey:o("Alt-Shift-0","Command-Option-Shift-0"),exec:function(e){e.session.unfold()},scrollIntoView:"center",readOnly:!0},{name:"findnext",bindKey:o("Ctrl-K","Command-G"),exec:function(e){e.findNext()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"findprevious",bindKey:o("Ctrl-Shift-K","Command-Shift-G"),exec:function(e){e.findPrevious()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"selectOrFindNext",bindKey:o("Alt-K","Ctrl-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:"selectOrFindPrevious",bindKey:o("Alt-Shift-K","Ctrl-Shift-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:"find",bindKey:o("Ctrl-F","Command-F"),exec:function(e){i.loadModule("ace/ext/searchbox",function(t){t.Search(e)})},readOnly:!0},{name:"overwrite",bindKey:"Insert",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:"selecttostart",bindKey:o("Ctrl-Shift-Home","Command-Shift-Up"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotostart",bindKey:o("Ctrl-Home","Command-Home|Command-Up"),exec:function(e){e.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectup",bindKey:o("Shift-Up","Shift-Up"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golineup",bindKey:o("Up","Up|Ctrl-P"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttoend",bindKey:o("Ctrl-Shift-End","Command-Shift-Down"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotoend",bindKey:o("Ctrl-End","Command-End|Command-Down"),exec:function(e){e.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectdown",bindKey:o("Shift-Down","Shift-Down"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golinedown",bindKey:o("Down","Down|Ctrl-N"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordleft",bindKey:o("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordleft",bindKey:o("Ctrl-Left","Option-Left"),exec:function(e){e.navigateWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolinestart",bindKey:o("Alt-Shift-Left","Command-Shift-Left"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolinestart",bindKey:o("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(e){e.navigateLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectleft",bindKey:o("Shift-Left","Shift-Left"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoleft",bindKey:o("Left","Left|Ctrl-B"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordright",bindKey:o("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordright",bindKey:o("Ctrl-Right","Option-Right"),exec:function(e){e.navigateWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolineend",bindKey:o("Alt-Shift-Right","Command-Shift-Right"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolineend",bindKey:o("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(e){e.navigateLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectright",bindKey:o("Shift-Right","Shift-Right"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoright",bindKey:o("Right","Right|Ctrl-F"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectpagedown",bindKey:"Shift-PageDown",exec:function(e){e.selectPageDown()},readOnly:!0},{name:"pagedown",bindKey:o(null,"Option-PageDown"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:"gotopagedown",bindKey:o("PageDown","PageDown|Ctrl-V"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:"selectpageup",bindKey:"Shift-PageUp",exec:function(e){e.selectPageUp()},readOnly:!0},{name:"pageup",bindKey:o(null,"Option-PageUp"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:"gotopageup",bindKey:"PageUp",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:"scrollup",bindKey:o("Ctrl-Up",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",bindKey:o("Ctrl-Down",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",bindKey:"Shift-Home",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectlineend",bindKey:"Shift-End",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"togglerecording",bindKey:o("Ctrl-Alt-E","Command-Option-E"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:"replaymacro",bindKey:o("Ctrl-Shift-E","Command-Shift-E"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:"jumptomatching",bindKey:o("Ctrl-P","Ctrl-P"),exec:function(e){e.jumpToMatching()},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"selecttomatching",bindKey:o("Ctrl-Shift-P","Ctrl-Shift-P"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"expandToMatching",bindKey:o("Ctrl-Shift-M","Ctrl-Shift-M"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"passKeysToBrowser",bindKey:o("null","null"),exec:function(){},passEvent:!0,readOnly:!0},{name:"cut",exec:function(e){var t=e.getSelectionRange();e._emit("cut",t),e.selection.isEmpty()||(e.session.remove(t),e.clearSelection())},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"removeline",bindKey:o("Ctrl-D","Command-D"),exec:function(e){e.removeLines()},scrollIntoView:"cursor",multiSelectAction:"forEachLine"},{name:"duplicateSelection",bindKey:o("Ctrl-Shift-D","Command-Shift-D"),exec:function(e){e.duplicateSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"sortlines",bindKey:o("Ctrl-Alt-S","Command-Alt-S"),exec:function(e){e.sortLines()},scrollIntoView:"selection",multiSelectAction:"forEachLine"},{name:"togglecomment",bindKey:o("Ctrl-/","Command-/"),exec:function(e){e.toggleCommentLines()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"toggleBlockComment",bindKey:o("Ctrl-Shift-/","Command-Shift-/"),exec:function(e){e.toggleBlockComment()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"modifyNumberUp",bindKey:o("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(e){e.modifyNumber(1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"modifyNumberDown",bindKey:o("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"replace",bindKey:o("Ctrl-H","Command-Option-F"),exec:function(e){i.loadModule("ace/ext/searchbox",function(t){t.Search(e,!0)})}},{name:"undo",bindKey:o("Ctrl-Z","Command-Z"),exec:function(e){e.undo()}},{name:"redo",bindKey:o("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(e){e.redo()}},{name:"copylinesup",bindKey:o("Alt-Shift-Up","Command-Option-Up"),exec:function(e){e.copyLinesUp()},scrollIntoView:"cursor"},{name:"movelinesup",bindKey:o("Alt-Up","Option-Up"),exec:function(e){e.moveLinesUp()},scrollIntoView:"cursor"},{name:"copylinesdown",bindKey:o("Alt-Shift-Down","Command-Option-Down"),exec:function(e){e.copyLinesDown()},scrollIntoView:"cursor"},{name:"movelinesdown",bindKey:o("Alt-Down","Option-Down"),exec:function(e){e.moveLinesDown()},scrollIntoView:"cursor"},{name:"del",bindKey:o("Delete","Delete|Ctrl-D|Shift-Delete"),exec:function(e){e.remove("right")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"backspace",bindKey:o("Shift-Backspace|Backspace","Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(e){e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"cut_or_delete",bindKey:o("Shift-Delete",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestart",bindKey:o("Alt-Backspace","Command-Backspace"),exec:function(e){e.removeToLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineend",bindKey:o("Alt-Delete","Ctrl-K"),exec:function(e){e.removeToLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordleft",bindKey:o("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(e){e.removeWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordright",bindKey:o("Ctrl-Delete","Alt-Delete"),exec:function(e){e.removeWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"outdent",bindKey:o("Shift-Tab","Shift-Tab"),exec:function(e){e.blockOutdent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"indent",bindKey:o("Tab","Tab"),exec:function(e){e.indent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"blockoutdent",bindKey:o("Ctrl-[","Ctrl-["),exec:function(e){e.blockOutdent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"blockindent",bindKey:o("Ctrl-]","Ctrl-]"),exec:function(e){e.blockIndent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"insertstring",exec:function(e,t){e.insert(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"inserttext",exec:function(e,t){e.insert(r.stringRepeat(t.text||"",t.times||1))},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"splitline",bindKey:o(null,"Ctrl-O"),exec:function(e){e.splitLine()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"transposeletters",bindKey:o("Ctrl-T","Ctrl-T"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:"cursor"},{name:"touppercase",bindKey:o("Ctrl-U","Ctrl-U"),exec:function(e){e.toUpperCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"tolowercase",bindKey:o("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(e){e.toLowerCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"expandtoline",bindKey:o("Ctrl-Shift-L","Command-Shift-L"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"joinlines",bindKey:o(null,null),exec:function(e){var t=e.selection.isBackwards(),n=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),i=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),o=e.session.doc.getLine(n.row).length,u=e.session.doc.getTextRange(e.selection.getRange()),a=u.replace(/\n\s*/," ").length,f=e.session.doc.getLine(n.row);for(var l=n.row+1;l<=i.row+1;l++){var c=r.stringTrimLeft(r.stringTrimRight(e.session.doc.getLine(l)));c.length!==0&&(c=" "+c),f+=c}i.row+10?(e.selection.moveCursorTo(n.row,n.column),e.selection.selectTo(n.row,n.column+a)):(o=e.session.doc.getLine(n.row).length>o?o+1:o,e.selection.moveCursorTo(n.row,o))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",bindKey:o(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,r=e.selection.rangeList.ranges,i=[];r.length<1&&(r=[e.selection.getRange()]);for(var o=0;o=r.lastRow||n.end.row<=r.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead);break;default:}t.scrollIntoView=="animate"&&this.renderer.animateScrolling(this.curOp.scrollTop)}this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=["backspace","del","insertstring"],this.$historyTracker=function(e){if(!this.$mergeUndoDeltas)return;var t=this.prevOp,n=this.$mergeableCommands,r=t.command&&e.command.name==t.command.name;if(e.command.name=="insertstring"){var i=e.args;this.mergeNextCommand===undefined&&(this.mergeNextCommand=!0),r=r&&this.mergeNextCommand&&(!/\s/.test(i)||/\s/.test(t.args)),this.mergeNextCommand=!0}else r=r&&n.indexOf(e.command.name)!==-1;this.$mergeUndoDeltas!="always"&&Date.now()-this.sequenceStartTime>2e3&&(r=!1),r?this.session.mergeUndoDeltas=!0:n.indexOf(e.command.name)!==-1&&(this.sequenceStartTime=Date.now())},this.setKeyboardHandler=function(e,t){if(e&&typeof e=="string"){this.$keybindingId=e;var n=this;g.loadModule(["keybinding",e],function(r){n.$keybindingId==e&&n.keyBinding.setKeyboardHandler(r&&r.handler),t&&t()})}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session==e)return;var t=this.session;if(t){this.session.removeEventListener("change",this.$onDocumentChange),this.session.removeEventListener("changeMode",this.$onChangeMode),this.session.removeEventListener("tokenizerUpdate",this.$onTokenizerUpdate),this.session.removeEventListener("changeTabSize",this.$onChangeTabSize),this.session.removeEventListener("changeWrapLimit",this.$onChangeWrapLimit),this.session.removeEventListener("changeWrapMode",this.$onChangeWrapMode),this.session.removeEventListener("onChangeFold",this.$onChangeFold),this.session.removeEventListener("changeFrontMarker",this.$onChangeFrontMarker),this.session.removeEventListener("changeBackMarker",this.$onChangeBackMarker),this.session.removeEventListener("changeBreakpoint",this.$onChangeBreakpoint),this.session.removeEventListener("changeAnnotation",this.$onChangeAnnotation),this.session.removeEventListener("changeOverwrite",this.$onCursorChange),this.session.removeEventListener("changeScrollTop",this.$onScrollTopChange),this.session.removeEventListener("changeScrollLeft",this.$onScrollLeftChange);var n=this.session.getSelection();n.removeEventListener("changeCursor",this.$onCursorChange),n.removeEventListener("changeSelection",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.addEventListener("change",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.addEventListener("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.addEventListener("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.addEventListener("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.addEventListener("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.addEventListener("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.addEventListener("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.addEventListener("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.addEventListener("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.addEventListener("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.addEventListener("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.addEventListener("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.addEventListener("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.addEventListener("changeScrollLeft",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.addEventListener("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.addEventListener("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal("changeSession",{session:e,oldSession:t}),t&&t._signal("changeEditor",{oldEditor:this}),e&&e._signal("changeEditor",{editor:this})},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?t==1?this.navigateFileEnd():t==-1&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption("fontSize")||i.computedStyle(this.container,"fontSize")},this.setFontSize=function(e){this.setOption("fontSize",e)},this.$highlightBrackets=function(){this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null);if(this.$highlightPending)return;var e=this;this.$highlightPending=!0,setTimeout(function(){e.$highlightPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=t.findMatchingBracket(e.getCursorPosition());if(n)var r=new p(n.row,n.column,n.row,n.column+1);else if(t.$mode.getMatching)var r=t.$mode.getMatching(e.session);r&&(t.$bracketHighlight=t.addMarker(r,"ace_bracket","text"))},50)},this.$highlightTags=function(){if(this.$highlightTagPending)return;var e=this;this.$highlightTagPending=!0,setTimeout(function(){e.$highlightTagPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=e.getCursorPosition(),r=new y(e.session,n.row,n.column),i=r.getCurrentToken();if(!i||!/\b(?:tag-open|tag-name)/.test(i.type)){t.removeMarker(t.$tagHighlight),t.$tagHighlight=null;return}i.type.indexOf("tag-open")!=-1&&(i=r.stepForward());var s=i.value,o=0,u=r.stepBackward();if(u.value=="<"){do u=i,i=r.stepForward(),i&&i.value===s&&i.type.indexOf("tag-name")!==-1&&(u.value==="<"?o++:u.value==="=0)}else{do i=u,u=r.stepBackward(),i&&i.value===s&&i.type.indexOf("tag-name")!==-1&&(u.value==="<"?o++:u.value==="1)&&(t=!1)}if(e.$highlightLineMarker&&!t)e.removeMarker(e.$highlightLineMarker.id),e.$highlightLineMarker=null;else if(!e.$highlightLineMarker&&t){var n=new p(t.row,t.column,t.row,Infinity);n.id=e.addMarker(n,"ace_active-line","screenLine"),e.$highlightLineMarker=n}else t&&(e.$highlightLineMarker.start.row=t.row,e.$highlightLineMarker.end.row=t.row,e.$highlightLineMarker.start.column=t.column,e._signal("changeBackMarker"))},this.onSelectionChange=function(e){var t=this.session;t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null;if(!this.selection.isEmpty()){var n=this.selection.getRange(),r=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,"ace_selection",r)}else this.$updateHighlightActiveLine();var i=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(i),this._signal("changeSelection")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(t.isEmpty()||t.isMultiLine())return;var n=t.start.column-1,r=t.end.column+1,i=e.getLine(t.start.row),s=i.length,o=i.substring(Math.max(n,0),Math.min(r,s));if(n>=0&&/^[\w\d]/.test(o)||r<=s&&/[\w\d]$/.test(o))return;o=i.substring(t.start.column,t.end.column);if(!/^[\w\d]+$/.test(o))return;var u=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:o});return u},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit("changeMode",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText();return this._signal("copy",e),e},this.onCopy=function(){this.commands.exec("copy",this)},this.onCut=function(){this.commands.exec("cut",this)},this.onPaste=function(e){if(this.$readOnly)return;var t={text:e};this._signal("paste",t),e=t.text;if(!this.inMultiSelectMode||this.inVirtualSelectionMode)this.insert(e);else{var n=e.split(/\r\n|\r|\n/),r=this.selection.rangeList.ranges;if(n.length>r.length||n.length<2||!n[1])return this.commands.exec("insertstring",this,e);for(var i=r.length;i--;){var s=r[i];s.isEmpty()||this.session.remove(s),this.session.insert(s.start,n[i])}}this.renderer.scrollCursorIntoView()},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var n=this.session,r=n.getMode(),i=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var s=r.transformAction(n.getState(i.row),"insertion",this,n,e);s&&(e!==s.text&&(this.session.mergeUndoDeltas=!1,this.$mergeNextCommand=!1),e=s.text)}e==" "&&(e=this.session.getTabString());if(!this.selection.isEmpty()){var o=this.getSelectionRange();i=this.session.remove(o),this.clearSelection()}else if(this.session.getOverwrite()){var o=new p.fromPoints(i,i);o.end.column+=e.length,this.session.remove(o)}if(e=="\n"||e=="\r\n"){var u=n.getLine(i.row);if(i.column>u.search(/\S|$/)){var a=u.substr(i.column).search(/\S|$/);n.doc.removeInLine(i.row,i.column,i.column+a)}}this.clearSelection();var f=i.column,l=n.getState(i.row),u=n.getLine(i.row),c=r.checkOutdent(l,u,e),h=n.insert(i,e);s&&s.selection&&(s.selection.length==2?this.selection.setSelectionRange(new p(i.row,f+s.selection[0],i.row,f+s.selection[1])):this.selection.setSelectionRange(new p(i.row+s.selection[0],s.selection[1],i.row+s.selection[2],s.selection[3])));if(n.getDocument().isNewLine(e)){var d=r.getNextLineIndent(l,u.slice(0,i.column),n.getTabString());n.insert({row:i.row+1,column:0},d)}c&&r.autoOutdent(l,n,i.row)},this.onTextInput=function(e){this.keyBinding.onTextInput(e)},this.onCommandKey=function(e,t,n){this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption("scrollSpeed",e)},this.getScrollSpeed=function(){return this.getOption("scrollSpeed")},this.setDragDelay=function(e){this.setOption("dragDelay",e)},this.getDragDelay=function(){return this.getOption("dragDelay")},this.setSelectionStyle=function(e){this.setOption("selectionStyle",e)},this.getSelectionStyle=function(){return this.getOption("selectionStyle")},this.setHighlightActiveLine=function(e){this.setOption("highlightActiveLine",e)},this.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.setHighlightSelectedWord=function(e){this.setOption("highlightSelectedWord",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption("readOnly",e)},this.getReadOnly=function(){return this.getOption("readOnly")},this.setBehavioursEnabled=function(e){this.setOption("behavioursEnabled",e)},this.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},this.setWrapBehavioursEnabled=function(e){this.setOption("wrapBehavioursEnabled",e)},this.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},this.setShowFoldWidgets=function(e){this.setOption("showFoldWidgets",e)},this.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.remove=function(e){this.selection.isEmpty()&&(e=="left"?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,r=n.getState(t.start.row),i=n.getMode().transformAction(r,"deletion",this,n,t);if(t.end.column===0){var s=n.getTextRange(t);if(s[s.length-1]=="\n"){var o=n.getLine(t.end.row);/^\s+$/.test(o)&&(t.end.column=o.length)}}i&&(t=i)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(!this.selection.isEmpty())return;var e=this.getCursorPosition(),t=e.column;if(t===0)return;var n=this.session.getLine(e.row),r,i;tt.toLowerCase()?1:0});var r=new p(0,0,0,0);for(var i=e.first;i<=e.last;i++){var s=t.getLine(i);r.start.row=i,r.end.row=i,r.end.column=s.length,t.replace(r,n[i-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\-]?[0-9]+(?:\.[0-9]+)?/g;n.lastIndex=0;var r=this.session.getLine(e);while(n.lastIndex=t){var s={value:i[0],start:i.index,end:i.index+i[0].length};return s}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,r=new p(t,n-1,t,n),i=this.session.getTextRange(r);if(!isNaN(parseFloat(i))&&isFinite(i)){var s=this.getNumberAt(t,n);if(s){var o=s.value.indexOf(".")>=0?s.start+s.value.indexOf(".")+1:s.end,u=s.start+s.value.length-o,a=parseFloat(s.value);a*=Math.pow(10,u),o!==s.end&&np+1)break;p=d.last}l--,u=this.session.$moveLines(h,p,t?0:e),t&&e==-1&&(c=l+1);while(c<=l)o[c].moveBy(u,0),c++;t||(u=0),a+=u}i.fromOrientedRange(i.ranges[0]),i.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,r=this.renderer.layerConfig,i=e*Math.floor(r.height/r.lineHeight);this.$blockScrolling++,t===!0?this.selection.$moveSelection(function(){this.moveCursorBy(i,0)}):t===!1&&(this.selection.moveCursorBy(i,0),this.selection.clearSelection()),this.$blockScrolling--;var s=n.scrollTop;n.scrollBy(0,i*r.lineHeight),t!=null&&n.scrollCursorIntoView(null,.5),n.animateScrolling(s)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,r){this.renderer.scrollToLine(e,t,n,r)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var n=this.getCursorPosition(),r=new y(this.session,n.row,n.column),i=r.getCurrentToken(),s=i||r.stepForward();if(!s)return;var o,u=!1,a={},f=n.column-s.start,l,c={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(s.value.match(/[{}()\[\]]/g))for(;f=0;--s)this.$tryReplace(n[s],e)&&r++;return this.selection.setSelectionRange(i),this.$blockScrolling-=1,r},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return t=this.$search.replace(n,t),t!==null?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),typeof e=="string"||e instanceof RegExp?t.needle=e:typeof e=="object"&&r.mixin(t,e);var i=this.selection.getRange();t.needle==null&&(e=this.session.getTextRange(i)||this.$search.$options.needle,e||(i=this.session.getWordRange(i.start.row,i.start.column),e=this.session.getTextRange(i)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:i});var s=this.$search.find(this.session);if(t.preventScroll)return s;if(s)return this.revealRange(s,n),s;t.backwards?i.start=i.end:i.end=i.start,this.selection.setRange(i)},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.$blockScrolling+=1,this.session.unfold(e),this.selection.setSelectionRange(e),this.$blockScrolling-=1;var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),t!==!1&&this.renderer.animateScrolling(n)},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal("destroy",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(!e)return;var t,n=this,r=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement("div"));var i=this.$scrollAnchor;i.style.cssText="position:absolute",this.container.insertBefore(i,this.container.firstChild);var s=this.on("changeSelection",function(){r=!0}),o=this.renderer.on("beforeRender",function(){r&&(t=n.renderer.container.getBoundingClientRect())}),u=this.renderer.on("afterRender",function(){if(r&&t&&(n.isFocused()||n.searchBox&&n.searchBox.isFocused())){var e=n.renderer,s=e.$cursorLayer.$pixelPos,o=e.layerConfig,u=s.top-o.offset;s.top>=0&&u+t.top<0?r=!0:s.topwindow.innerHeight?r=!1:r=null,r!=null&&(i.style.top=u+"px",i.style.left=s.left+"px",i.style.height=o.lineHeight+"px",i.scrollIntoView(r)),r=t=null}});this.setAutoScrollEditorIntoView=function(e){if(e)return;delete this.setAutoScrollEditorIntoView,this.removeEventListener("changeSelection",s),this.renderer.removeEventListener("afterRender",u),this.renderer.removeEventListener("beforeRender",o)}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||"ace",t=this.renderer.$cursorLayer;if(!t)return;t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&e!="wide",i.setCssClass(t.element,"ace_slim-cursors",/slim/.test(e))}}).call(b.prototype),g.defineOptions(b.prototype,"editor",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:e})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.$resetCursorStyle()},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",showLineNumbers:"renderer",showGutter:"renderer",displayIndentGuides:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",tabSize:"session",wrap:"session",foldStyle:"session",mode:"session"}),t.Editor=b}),ace.define("ace/undomanager",["require","exports","module"],function(e,t,n){"use strict";var r=function(){this.reset()};(function(){this.execute=function(e){var t=e.args[0];this.$doc=e.args[1],e.merge&&this.hasUndo()&&(this.dirtyCounter--,t=this.$undoStack.pop().concat(t)),this.$undoStack.push(t),this.$redoStack=[],this.dirtyCounter<0&&(this.dirtyCounter=NaN),this.dirtyCounter++},this.undo=function(e){var t=this.$undoStack.pop(),n=null;return t&&(n=this.$doc.undoChanges(t,e),this.$redoStack.push(t),this.dirtyCounter--),n},this.redo=function(e){var t=this.$redoStack.pop(),n=null;return t&&(n=this.$doc.redoChanges(t,e),this.$undoStack.push(t),this.dirtyCounter++),n},this.reset=function(){this.$undoStack=[],this.$redoStack=[],this.dirtyCounter=0},this.hasUndo=function(){return this.$undoStack.length>0},this.hasRedo=function(){return this.$redoStack.length>0},this.markClean=function(){this.dirtyCounter=0},this.isClean=function(){return this.dirtyCounter===0}}).call(r.prototype),t.UndoManager=r}),ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("../lib/dom"),i=e("../lib/oop"),s=e("../lib/lang"),o=e("../lib/event_emitter").EventEmitter,u=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_gutter-layer",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$cells=[]};(function(){i.implement(this,o),this.setSession=function(e){this.session&&this.session.removeEventListener("change",this.$updateAnnotations),this.session=e,e&&e.on("change",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.addGutterDecoration"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.removeGutterDecoration"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];for(var t=0;to&&(v=s.end.row+1,s=t.getNextFoldLine(v,s),o=s?s.start.row:Infinity);if(v>i){while(this.$cells.length>d+1)p=this.$cells.pop(),this.element.removeChild(p.element);break}p=this.$cells[++d],p||(p={element:null,textNode:null,foldWidget:null},p.element=r.createElement("div"),p.textNode=document.createTextNode(""),p.element.appendChild(p.textNode),this.element.appendChild(p.element),this.$cells[d]=p);var m="ace_gutter-cell ";a[v]&&(m+=a[v]),f[v]&&(m+=f[v]),this.$annotations[v]&&(m+=this.$annotations[v].className),p.element.className!=m&&(p.element.className=m);var g=t.getRowLength(v)*e.lineHeight+"px";g!=p.element.style.height&&(p.element.style.height=g);if(u){var y=u[v];y==null&&(y=u[v]=t.getFoldWidget(v))}if(y){p.foldWidget||(p.foldWidget=r.createElement("span"),p.element.appendChild(p.foldWidget));var m="ace_fold-widget ace_"+y;y=="start"&&v==o&&vn.right-t.right)return"foldWidgets"}}).call(u.prototype),t.Gutter=u}),ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],function(e,t,n){"use strict";var r=e("../range").Range,i=e("../lib/dom"),s=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_marker-layer",e.appendChild(this.element)};(function(){this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.update=function(e){var e=e||this.config;if(!e)return;this.config=e;var t=[];for(var n in this.markers){var r=this.markers[n];if(!r.range){r.update(t,this,this.session,e);continue}var i=r.range.clipRows(e.firstRow,e.lastRow);if(i.isEmpty())continue;i=i.toScreenRange(this.session);if(r.renderer){var s=this.$getTop(i.start.row,e),o=this.$padding+i.start.column*e.characterWidth;r.renderer(t,i,o,s,e)}else r.type=="fullLine"?this.drawFullLineMarker(t,i,r.clazz,e):r.type=="screenLine"?this.drawScreenLineMarker(t,i,r.clazz,e):i.isMultiLine()?r.type=="text"?this.drawTextMarker(t,i,r.clazz,e):this.drawMultiLineMarker(t,i,r.clazz,e):this.drawSingleLineMarker(t,i,r.clazz+" ace_start",e)}this.element.innerHTML=t.join("")},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(e,t,n,i,s){var o=t.start.row,u=new r(o,t.start.column,o,this.session.getScreenLastRowColumn(o));this.drawSingleLineMarker(e,u,n+" ace_start",i,1,s),o=t.end.row,u=new r(o,0,o,t.end.column),this.drawSingleLineMarker(e,u,n,i,0,s);for(o=t.start.row+1;o"),u=this.$getTop(t.end.row,r);var f=t.end.column*r.characterWidth;e.push("
    "),o=(t.end.row-t.start.row-1)*r.lineHeight;if(o<0)return;u=this.$getTop(t.start.row+1,r),e.push("
    ")},this.drawSingleLineMarker=function(e,t,n,r,i,s){var o=r.lineHeight,u=(t.end.column+(i||0)-t.start.column)*r.characterWidth,a=this.$getTop(t.start.row,r),f=this.$padding+t.start.column*r.characterWidth;e.push("
    ")},this.drawFullLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;t.start.row!=t.end.row&&(o+=this.$getTop(t.end.row,r)-s),e.push("
    ")},this.drawScreenLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;e.push("
    ")}}).call(s.prototype),t.Marker=s}),ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/dom"),s=e("../lib/lang"),o=e("../lib/useragent"),u=e("../lib/event_emitter").EventEmitter,a=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_text-layer",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this)};(function(){r.implement(this,u),this.EOF_CHAR="\u00b6",this.EOL_CHAR_LF="\u00ac",this.EOL_CHAR_CRLF="\u00a4",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR="\u2192",this.SPACE_CHAR="\u00b7",this.$padding=0,this.$updateEolChar=function(){var e=this.session.doc.getNewLineCharacter()=="\n"?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=e)return this.EOL_CHAR=e,!0},this.setPadding=function(e){this.$padding=e,this.element.style.padding="0 "+e+"px"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on("changeCharacterSize",function(e){this._signal("changeCharacterSize",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles==e?!1:(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides==e?!1:(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;var t=this.$tabStrings=[0];for(var n=1;n"+this.TAB_CHAR+s.stringRepeat("\u00a0",n-1)+""):t.push(s.stringRepeat("\u00a0",n));if(this.displayIndentGuides){this.$indentGuideRe=/\s\S| \t|\t |\s$/;var r="ace_indent-guide",i="",o="";if(this.showInvisibles){r+=" ace_invisible",i=" ace_invisible_space",o=" ace_invisible_tab";var u=s.stringRepeat(this.SPACE_CHAR,this.tabSize),a=this.TAB_CHAR+s.stringRepeat("\u00a0",this.tabSize-1)}else var u=s.stringRepeat("\u00a0",this.tabSize),a=u;this.$tabStrings[" "]=""+u+"",this.$tabStrings[" "]=""+a+""}},this.updateLines=function(e,t,n){(this.config.lastRow!=e.lastRow||this.config.firstRow!=e.firstRow)&&this.scrollLines(e),this.config=e;var r=Math.max(t,e.firstRow),i=Math.min(n,e.lastRow),s=this.element.childNodes,o=0;for(var u=e.firstRow;uf&&(u=a.end.row+1,a=this.session.getNextFoldLine(u,a),f=a?a.start.row:Infinity);if(u>i)break;var l=s[o++];if(l){var c=[];this.$renderLine(c,u,!this.$useLineGroups(),u==f?a:!1),l.style.height=e.lineHeight*this.session.getRowLength(u)+"px",l.innerHTML=c.join("")}u++}},this.scrollLines=function(e){var t=this.config;this.config=e;if(!t||t.lastRow0;r--)n.removeChild(n.firstChild);if(t.lastRow>e.lastRow)for(var r=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);r>0;r--)n.removeChild(n.lastChild);if(e.firstRowt.lastRow){var i=this.$renderLinesFragment(e,t.lastRow+1,e.lastRow);n.appendChild(i)}},this.$renderLinesFragment=function(e,t,n){var r=this.element.ownerDocument.createDocumentFragment(),s=t,o=this.session.getNextFoldLine(s),u=o?o.start.row:Infinity;for(;;){s>u&&(s=o.end.row+1,o=this.session.getNextFoldLine(s,o),u=o?o.start.row:Infinity);if(s>n)break;var a=i.createElement("div"),f=[];this.$renderLine(f,s,!1,s==u?o:!1),a.innerHTML=f.join("");if(this.$useLineGroups())a.className="ace_line_group",r.appendChild(a),a.style.height=e.lineHeight*this.session.getRowLength(s)+"px";else while(a.firstChild)r.appendChild(a.firstChild);s++}return r},this.update=function(e){this.config=e;var t=[],n=e.firstRow,r=e.lastRow,i=n,s=this.session.getNextFoldLine(i),o=s?s.start.row:Infinity;for(;;){i>o&&(i=s.end.row+1,s=this.session.getNextFoldLine(i,s),o=s?s.start.row:Infinity);if(i>r)break;this.$useLineGroups()&&t.push("
    "),this.$renderLine(t,i,!1,i==o?s:!1),this.$useLineGroups()&&t.push("
    "),i++}this.element.innerHTML=t.join("")},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,r){var i=this,o=/\t|&|<|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g,u=function(e,n,r,o,u){if(n)return i.showInvisibles?""+s.stringRepeat(i.SPACE_CHAR,e.length)+"":s.stringRepeat("\u00a0",e.length);if(e=="&")return"&";if(e=="<")return"<";if(e==" "){var a=i.session.getScreenTabSize(t+o);return t+=a-1,i.$tabStrings[a]}if(e=="\u3000"){var f=i.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk",l=i.showInvisibles?i.SPACE_CHAR:"";return t+=1,""+l+""}return r?""+i.SPACE_CHAR+"":(t+=1,""+e+"")},a=r.replace(o,u);if(!this.$textToken[n.type]){var f="ace_"+n.type.replace(/\./g," ace_"),l="";n.type=="fold"&&(l=" style='width:"+n.value.length*this.config.characterWidth+"px;' "),e.push("",a,"")}else e.push(a);return t+r.length},this.renderIndentGuide=function(e,t,n){var r=t.search(this.$indentGuideRe);return r<=0||r>=n?t:t[0]==" "?(r-=r%this.tabSize,e.push(s.stringRepeat(this.$tabStrings[" "],r/this.tabSize)),t.substr(r)):t[0]==" "?(e.push(s.stringRepeat(this.$tabStrings[" "],r)),t.substr(r)):t},this.$renderWrappedLine=function(e,t,n,r){var i=0,s=0,o=n[0],u=0;for(var a=0;a=o)u=this.$renderToken(e,u,f,l.substring(0,o-i)),l=l.substring(o-i),i=o,r||e.push("","
    "),s++,u=0,o=n[s]||Number.MAX_VALUE;l.length!=0&&(i+=l.length,u=this.$renderToken(e,u,f,l))}}},this.$renderSimpleLine=function(e,t){var n=0,r=t[0],i=r.value;this.displayIndentGuides&&(i=this.renderIndentGuide(e,i)),i&&(n=this.$renderToken(e,n,r,i));for(var s=1;s");if(i.length){var s=this.session.getRowSplitData(t);s&&s.length?this.$renderWrappedLine(e,i,s,n):this.$renderSimpleLine(e,i)}this.showInvisibles&&(r&&(t=r.end.row),e.push("",t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,"")),n||e.push("
    ")},this.$getFoldLineTokens=function(e,t){function i(e,t,n){var i=0,s=0;while(s+e[i].value.lengthn-t&&(o=o.substring(0,n-t)),r.push({type:e[i].type,value:o}),s=t+o.length,i+=1}while(sn?r.push({type:e[i].type,value:o.substring(0,n-s)}):r.push(e[i]),s+=o.length,i+=1}}var n=this.session,r=[],s=n.getTokens(e);return t.walk(function(e,t,o,u,a){e!=null?r.push({type:"fold",value:e}):(a&&(s=n.getTokens(t)),s.length&&i(s,u,o))},t.end.row,this.session.getLine(t.end.row).length),r},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(a.prototype),t.Text=a}),ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";var r=e("../lib/dom"),i,s=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_cursor-layer",e.appendChild(this.element),i===undefined&&(i="opacity"in this.element),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),r.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=this.$updateVisibility.bind(this)};(function(){this.$updateVisibility=function(e){var t=this.cursors;for(var n=t.length;n--;)t[n].style.visibility=e?"":"hidden"},this.$updateOpacity=function(e){var t=this.cursors;for(var n=t.length;n--;)t[n].style.opacity=e?"":"0"},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e!=this.smoothBlinking&&!i&&(this.smoothBlinking=e,r.setCssClass(this.element,"ace_smooth-blinking",e),this.$updateCursors(!0),this.$updateCursors=(e?this.$updateOpacity:this.$updateVisibility).bind(this),this.restartTimer())},this.addCursor=function(){var e=r.createElement("div");return e.className="ace_cursor",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,r.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,r.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.smoothBlinking&&r.removeCssClass(this.element,"ace_smooth-blinking"),e(!0);if(!this.isBlinking||!this.blinkInterval||!this.isVisible)return;this.smoothBlinking&&setTimeout(function(){r.addCssClass(this.element,"ace_smooth-blinking")}.bind(this));var t=function(){this.timeoutId=setTimeout(function(){e(!1)},.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval(function(){e(!0),t()},this.blinkInterval),t()},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e),r=this.$padding+n.column*this.config.characterWidth,i=(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:r,top:i}},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,n=0,r=0;if(t===undefined||t.length===0)t=[{cursor:null}];for(var n=0,i=t.length;ne.height+e.offset||s.top<0)&&n>1)continue;var o=(this.cursors[r++]||this.addCursor()).style;this.drawCursor?this.drawCursor(o,s,e,t[n],this.session):(o.left=s.left+"px",o.top=s.top+"px",o.width=e.characterWidth+"px",o.height=e.lineHeight+"px")}while(this.cursors.length>r)this.removeCursor();var u=this.session.getOverwrite();this.$setOverwrite(u),this.$pixelPos=s,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?r.addCssClass(this.element,"ace_overwrite-cursors"):r.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(s.prototype),t.Cursor=s}),ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./lib/event"),o=e("./lib/event_emitter").EventEmitter,u=function(e){this.element=i.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+this.classSuffix,this.inner=i.createElement("div"),this.inner.className="ace_scrollbar-inner",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,s.addListener(this.element,"scroll",this.onScroll.bind(this)),s.addListener(this.element,"mousedown",s.preventDefault)};(function(){r.implement(this,o),this.setVisible=function(e){this.element.style.display=e?"":"none",this.isVisible=e}}).call(u.prototype);var a=function(e,t){u.call(this,e),this.scrollTop=0,t.$scrollbarWidth=this.width=i.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+"px"};r.inherits(a,u),function(){this.classSuffix="-v",this.onScroll=function(){this.skipEvent||(this.scrollTop=this.element.scrollTop,this._emit("scroll",{data:this.scrollTop})),this.skipEvent=!1},this.getWidth=function(){return this.isVisible?this.width:0},this.setHeight=function(e){this.element.style.height=e+"px"},this.setInnerHeight=function(e){this.inner.style.height=e+"px"},this.setScrollHeight=function(e){this.inner.style.height=e+"px"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=this.element.scrollTop=e)}}.call(a.prototype);var f=function(e,t){u.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+"px"};r.inherits(f,u),function(){this.classSuffix="-h",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+"px"},this.setInnerWidth=function(e){this.inner.style.width=e+"px"},this.setScrollWidth=function(e){this.inner.style.width=e+"px"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(f.prototype),t.ScrollBar=a,t.ScrollBarV=a,t.ScrollBarH=f,t.VScrollBar=a,t.HScrollBar=f}),ace.define("ace/renderloop",["require","exports","module","ace/lib/event"],function(e,t,n){"use strict";var r=e("./lib/event"),i=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.window=t||window};(function(){this.schedule=function(e){this.changes=this.changes|e;if(!this.pending&&this.changes){this.pending=!0;var t=this;r.nextFrame(function(){t.pending=!1;var e;while(e=t.changes)t.changes=0,t.onRender(e)},this.window)}}}).call(i.prototype),t.RenderLoop=i}),ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/dom"),s=e("../lib/lang"),o=e("../lib/useragent"),u=e("../lib/event_emitter").EventEmitter,a=0,f=t.FontMetrics=function(e,t){this.el=i.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=i.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=i.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),a||this.$testFractionalRect(),this.$measureNode.innerHTML=s.stringRepeat("X",a),this.$characterSize={width:0,height:0},this.checkForSizeChanges()};(function(){r.implement(this,u),this.$characterSize={width:0,height:0},this.$testFractionalRect=function(){var e=i.createElement("div");this.$setMeasureNodeStyles(e.style),e.style.width="0.2px",document.documentElement.appendChild(e);var t=e.getBoundingClientRect().width;t>0&&t<1?a=50:a=100,e.parentNode.removeChild(e)},this.$setMeasureNodeStyles=function(e,t){e.width=e.height="auto",e.left=e.top="0px",e.visibility="hidden",e.position="absolute",e.whiteSpace="pre",o.isIE<8?e["font-family"]="inherit":e.font="inherit",e.overflow=t?"hidden":"visible"},this.checkForSizeChanges=function(){var e=this.$measureSizes();if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight="bold";var t=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit("changeCharacterSize",{data:e})}},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=setInterval(function(){e.checkForSizeChanges()},500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&this.$pollSizeChangesTimer},this.$measureSizes=function(){if(a===50){var e=null;try{e=this.$measureNode.getBoundingClientRect()}catch(t){e={width:0,height:0}}var n={height:e.height,width:e.width/a}}else var n={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/a};return n.width===0||n.height===0?null:n},this.$measureCharWidth=function(e){this.$main.innerHTML=s.stringRepeat(e,a);var t=this.$main.getBoundingClientRect();return t.width/a},this.getCharacterWidth=function(e){var t=this.charSizes[e];return t===undefined&&(this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}).call(f.prototype)}),ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/lib/useragent","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./config"),o=e("./lib/useragent"),u=e("./layer/gutter").Gutter,a=e("./layer/marker").Marker,f=e("./layer/text").Text,l=e("./layer/cursor").Cursor,c=e("./scrollbar").HScrollBar,h=e("./scrollbar").VScrollBar,p=e("./renderloop").RenderLoop,d=e("./layer/font_metrics").FontMetrics,v=e("./lib/event_emitter").EventEmitter,m='.ace_editor {position: relative;overflow: hidden;font: 12px/normal \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', monospace;direction: ltr;}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;min-width: 100%;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \'\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC");}.ace_scrollbar {position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;text-indent: -1em;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;}.ace_text-input.ace_composition {background: inherit;color: inherit;z-index: 1000;opacity: 1;text-indent: 0;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;white-space: pre;height: 100%;width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;}.ace_text-layer {font: inherit !important;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;border-left: 2px solid}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {-webkit-transition: opacity 0.18s;transition: opacity 0.18s;}.ace_editor.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;}.ace_line .ace_fold {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC");}.ace_tooltip {background-color: #FFF;background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block; }.ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==");}.ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");}.ace_dark .ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {-webkit-transition: opacity 0.4s ease 0.05s;transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {-webkit-transition: opacity 0.05s ease 0.05s;transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}';i.importCssString(m,"ace_editor");var g=function(e,t){var n=this;this.container=e||i.createElement("div"),this.$keepTextAreaAtCursor=!o.isOldIE,i.addCssClass(this.container,"ace_editor"),this.setTheme(t),this.$gutter=i.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.scroller=i.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=i.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new u(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new a(this.content);var r=this.$textLayer=new f(this.content);this.canvas=r.element,this.$markerFront=new a(this.content),this.$cursorLayer=new l(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new h(this.container,this),this.scrollBarH=new c(this.container,this),this.scrollBarV.addEventListener("scroll",function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)}),this.scrollBarH.addEventListener("scroll",function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)}),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new d(this.container,500),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener("changeCharacterSize",function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal("changeCharacterSize",e)}),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$loop=new p(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),s.resetOptions(this),s._emit("renderer",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,r.implement(this,v),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off("changeNewLineMode",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e);if(!e)return;this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on("changeNewLineMode",this.onChangeNewLineMode)},this.updateLines=function(e,t,n){t===undefined&&(t=Infinity),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRowthis.layerConfig.lastRow)return;this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar()},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,n,r){if(this.resizing>2)return;this.resizing>0?this.resizing++:this.resizing=e?1:0;var i=this.container;r||(r=i.clientHeight||i.scrollHeight),n||(n=i.clientWidth||i.scrollWidth);var s=this.$updateCachedSize(e,t,n,r);if(!this.$size.scrollerHeight||!n&&!r)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(s|this.$changes,!0):this.$loop.schedule(s|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null},this.$updateCachedSize=function(e,t,n,r){r-=this.$extraHeight||0;var i=0,s=this.$size,o={width:s.width,height:s.height,scrollerHeight:s.scrollerHeight,scrollerWidth:s.scrollerWidth};r&&(e||s.height!=r)&&(s.height=r,i|=this.CHANGE_SIZE,s.scrollerHeight=s.height,this.$horizScroll&&(s.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+"px",i|=this.CHANGE_SCROLL);if(n&&(e||s.width!=n)){i|=this.CHANGE_SIZE,s.width=n,t==null&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,this.scrollBarH.element.style.left=this.scroller.style.left=t+"px",s.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()),this.scrollBarH.element.style.right=this.scroller.style.right=this.scrollBarV.getWidth()+"px",this.scroller.style.bottom=this.scrollBarH.getHeight()+"px";if(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)i|=this.CHANGE_FULL}return s.$dirty=!n||!r,i&&this._signal("resize",o),i},this.onGutterResize=function(){var e=this.$showGutter?this.$gutter.offsetWidth:0;e!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,e,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()?this.$loop.schedule(this.CHANGE_FULL):this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):(this.$computeLayerConfig(),this.$loop.schedule(this.CHANGE_MARKER))},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-this.$padding*2,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption("animatedScroll",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption("showInvisibles",e)},this.getShowInvisibles=function(){return this.getOption("showInvisibles")},this.getDisplayIndentGuides=function(){return this.getOption("displayIndentGuides")},this.setDisplayIndentGuides=function(e){this.setOption("displayIndentGuides",e)},this.setShowPrintMargin=function(e){this.setOption("showPrintMargin",e)},this.getShowPrintMargin=function(){return this.getOption("showPrintMargin")},this.setPrintMarginColumn=function(e){this.setOption("printMarginColumn",e)},this.getPrintMarginColumn=function(){return this.getOption("printMarginColumn")},this.getShowGutter=function(){return this.getOption("showGutter")},this.setShowGutter=function(e){return this.setOption("showGutter",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.$updateGutterLineHighlight=function(){var e=this.$cursorLayer.$pixelPos,t=this.layerConfig.lineHeight;if(this.session.getUseWrapMode()){var n=this.session.selection.getCursor();n.column=0,e=this.$cursorLayer.getPixelPosition(n,!0),t*=this.session.getRowLength(n.row)}this.$gutterLineHighlight.style.top=e.top-this.layerConfig.offset+"px",this.$gutterLineHighlight.style.height=t+"px"},this.$updatePrintMargin=function(){if(!this.$showPrintMargin&&!this.$printMarginEl)return;if(!this.$printMarginEl){var e=i.createElement("div");e.className="ace_layer ace_print-margin-layer",this.$printMarginEl=i.createElement("div"),this.$printMarginEl.className="ace_print-margin",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=this.characterWidth*this.$printMarginColumn+this.$padding+"px",t.visibility=this.$showPrintMargin?"visible":"hidden",this.session&&this.session.$wrap==-1&&this.adjustWrapLimit()},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.content},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(!this.$keepTextAreaAtCursor)return;var e=this.layerConfig,t=this.$cursorLayer.$pixelPos.top,n=this.$cursorLayer.$pixelPos.left;t-=e.offset;var r=this.textarea.style,i=this.lineHeight;if(t<0||t>e.height-i){r.top=r.left="0";return}var s=this.characterWidth;if(this.$composition){var o=this.textarea.value.replace(/^\x01+/,"");s*=this.session.$getStringScreenWidth(o)[0]+2,i+=2}n-=this.scrollLeft,n>this.$size.scrollerWidth-s&&(n=this.$size.scrollerWidth-s),n+=this.gutterWidth,r.height=i+"px",r.width=s+"px",r.left=Math.min(n,this.$size.scrollerWidth-s)+"px",r.top=Math.min(t,this.$size.height-i)+"px"},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(this.layerConfig.offset===0?0:1)},this.getLastFullyVisibleRow=function(){var e=Math.floor((this.layerConfig.height+this.layerConfig.offset)/this.layerConfig.lineHeight);return this.layerConfig.firstRow-1+e},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,r){var i=this.scrollMargin;i.top=e|0,i.bottom=t|0,i.right=r|0,i.left=n|0,i.v=i.top+i.bottom,i.h=i.left+i.right,i.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-i.top),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption("hScrollBarAlwaysVisible",e)},this.getVScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption("vScrollBarAlwaysVisible",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){this.$changes&&(e|=this.$changes,this.$changes=0);if(!this.session||!this.container.offsetWidth||this.$frozen||!e&&!t){this.$changes|=e;return}if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender");var n=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){e|=this.$computeLayerConfig();if(n.firstRow!=this.layerConfig.firstRow&&n.firstRowScreen==this.layerConfig.firstRowScreen){var r=this.scrollTop+(n.firstRow-this.layerConfig.firstRow)*this.lineHeight;r>0&&(this.scrollTop=r,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig())}n=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),this.$gutterLayer.element.style.marginTop=-n.offset+"px",this.content.style.marginTop=-n.offset+"px",this.content.style.width=n.width+2*this.$padding+"px",this.content.style.height=n.minHeight+"px"}e&this.CHANGE_H_SCROLL&&(this.content.style.marginLeft=-this.scrollLeft+"px",this.scroller.className=this.scrollLeft<=0?"ace_scroller":"ace_scroller ace_scroll-left");if(e&this.CHANGE_FULL){this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this._signal("afterRender");return}if(e&this.CHANGE_SCROLL){e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(n):this.$textLayer.scrollLines(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this.$moveTextAreaToCursor(),this._signal("afterRender");return}e&this.CHANGE_TEXT?(this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(n):(e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER)&&this.$showGutter&&this.$gutterLayer.update(n),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(n),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(n),this._signal("afterRender")},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.max((this.$minLines||1)*this.lineHeight,Math.min(t,e))+this.scrollMargin.v+(this.$extraHeight||0),r=e>t;if(n!=this.desiredHeight||this.$size.height!=this.desiredHeight||r!=this.$vScroll){r!=this.$vScroll&&(this.$vScroll=r,this.scrollBarV.setVisible(r));var i=this.container.clientWidth;this.container.style.height=n+"px",this.$updateCachedSize(!0,this.$gutterWidth,i,n),this.desiredHeight=n,this._signal("autosize")}},this.$computeLayerConfig=function(){this.$maxLines&&this.lineHeight>1&&this.$autosize();var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,r=this.session.getScreenLength(),i=r*this.lineHeight,s=this.scrollTop%this.lineHeight,o=t.scrollerHeight+this.lineHeight,u=this.$getLongestLine(),a=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-u-2*this.$padding<0),f=this.$horizScroll!==a;f&&(this.$horizScroll=a,this.scrollBarH.setVisible(a));var l=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;i+=l,this.session.setScrollTop(Math.max(-this.scrollMargin.top,Math.min(this.scrollTop,i-t.scrollerHeight+this.scrollMargin.bottom))),this.session.setScrollLeft(Math.max(-this.scrollMargin.left,Math.min(this.scrollLeft,u+2*this.$padding-t.scrollerWidth+this.scrollMargin.right)));var c=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-i+l<0||this.scrollTop),h=this.$vScroll!==c;h&&(this.$vScroll=c,this.scrollBarV.setVisible(c));var p=Math.ceil(o/this.lineHeight)-1,d=Math.max(0,Math.round((this.scrollTop-s)/this.lineHeight)),v=d+p,m,g,y=this.lineHeight;d=e.screenToDocumentRow(d,0);var b=e.getFoldLine(d);b&&(d=b.start.row),m=e.documentToScreenRow(d,0),g=e.getRowLength(d)*y,v=Math.min(e.screenToDocumentRow(v,0),e.getLength()-1),o=t.scrollerHeight+e.getRowLength(v)*y+g,s=this.scrollTop-m*y;var w=0;this.layerConfig.width!=u&&(w=this.CHANGE_H_SCROLL);if(f||h)w=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal("scrollbarVisibilityChanged"),h&&(u=this.$getLongestLine());return this.layerConfig={width:u,padding:this.$padding,firstRow:d,firstRowScreen:m,lastRow:v,lineHeight:y,characterWidth:this.characterWidth,minHeight:o,maxHeight:i,offset:s,gutterOffset:Math.max(0,Math.ceil((s+t.height-t.scrollerHeight)/y)),height:this.$size.scrollerHeight},w},this.$updateLines=function(){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(e>n.lastRow+1)return;if(ts?(t&&(s-=t*this.$size.scrollerHeight),s===0&&(s=-this.scrollMargin.top),this.session.setScrollTop(s)):a+this.$size.scrollerHeight-ui?(i=1-this.scrollMargin.top)return!0;if(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom)return!0;if(e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left)return!0;if(e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right)return!0},this.pixelToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=(e+this.scrollLeft-n.left-this.$padding)/this.characterWidth,i=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),s=Math.round(r);return{row:i,column:s,side:r-s>0?1:-1}},this.screenToTextCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=Math.round((e+this.scrollLeft-n.left-this.$padding)/this.characterWidth),i=(t+this.scrollTop-n.top)/this.lineHeight;return this.session.screenToDocumentPosition(i,Math.max(r,0))},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=this.session.documentToScreenPosition(e,t),i=this.$padding+Math.round(r.column*this.characterWidth),s=r.row*this.lineHeight;return{pageX:n.left+i-this.scrollLeft,pageY:n.top+s-this.scrollTop}},this.visualizeFocus=function(){i.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){i.removeCssClass(this.container,"ace_focus")},this.showComposition=function(e){this.$composition||(this.$composition={keepTextAreaAtCursor:this.$keepTextAreaAtCursor,cssText:this.textarea.style.cssText}),this.$keepTextAreaAtCursor=!0,i.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor()},this.setCompositionText=function(e){this.$moveTextAreaToCursor()},this.hideComposition=function(){if(!this.$composition)return;i.removeCssClass(this.textarea,"ace_composition"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null},this.setTheme=function(e,t){function o(r){if(n.$themeId!=e)return t&&t();if(!r.cssClass)return;i.importCssString(r.cssText,r.cssClass,n.container.ownerDocument),n.theme&&i.removeCssClass(n.container,n.theme.cssClass);var s="padding"in r?r.padding:"padding"in(n.theme||{})?4:n.$padding;n.$padding&&s!=n.$padding&&n.setPadding(s),n.$theme=r.cssClass,n.theme=r,i.addCssClass(n.container,r.cssClass),i.setCssClass(n.container,"ace_dark",r.isDark),n.$size&&(n.$size.width=0,n.$updateSizeAsync()),n._dispatchEvent("themeLoaded",{theme:r}),t&&t()}var n=this;this.$themeId=e,n._dispatchEvent("themeChange",{theme:e});if(!e||typeof e=="string"){var r=e||this.$options.theme.initialValue;s.loadModule(["theme",r],o)}else o(e)},this.getTheme=function(){return this.$themeId},this.setStyle=function(e,t){i.setCssClass(this.container,e,t!==!1)},this.unsetStyle=function(e){i.removeCssClass(this.container,e)},this.setCursorStyle=function(e){this.scroller.style.cursor!=e&&(this.scroller.style.cursor=e)},this.setMouseCursor=function(e){this.scroller.style.cursor=e},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(g.prototype),s.defineOptions(g.prototype,"renderer",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(e){typeof e=="number"&&(this.$printMarginColumn=e),this.$showPrintMargin=!!e,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(e){this.$gutter.style.display=e?"block":"none",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(e){i.setCssClass(this.$gutter,"ace_fade-fold-widgets",e)},initialValue:!1},showFoldWidgets:{set:function(e){this.$gutterLayer.setShowFoldWidgets(e)},initialValue:!0},showLineNumbers:{set:function(e){this.$gutterLayer.setShowLineNumbers(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(e){if(!this.$gutterLineHighlight){this.$gutterLineHighlight=i.createElement("div"),this.$gutterLineHighlight.className="ace_gutter-active-line",this.$gutter.appendChild(this.$gutterLineHighlight);return}this.$gutterLineHighlight.style.display=e?"":"none",this.$cursorLayer.$pixelPos&&this.$updateGutterLineHighlight()},initialValue:!1,value:!0},hScrollBarAlwaysVisible:{set:function(e){(!this.$hScrollBarAlwaysVisible||!this.$horizScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(e){(!this.$vScrollBarAlwaysVisible||!this.$vScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(e){typeof e=="number"&&(e+="px"),this.container.style.fontSize=e,this.updateFontSize()},initialValue:12},fontFamily:{set:function(e){this.container.style.fontFamily=e,this.updateFontSize()}},maxLines:{set:function(e){this.updateFull()}},minLines:{set:function(e){this.updateFull()}},scrollPastEnd:{set:function(e){e=+e||0;if(this.$scrollPastEnd==e)return;this.$scrollPastEnd=e,this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(e){this.$gutterLayer.$fixedWidth=!!e,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(e){this.setTheme(e)},get:function(){return this.$themeId||this.theme},initialValue:"./theme/textmate",handlesSet:!0}}),t.VirtualRenderer=g}),ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/net"),s=e("../lib/event_emitter").EventEmitter,o=e("../config"),u=function(t,n,r,i){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl);if(o.get("packaged")||!e.toUrl)i=i||o.moduleUrl(n,"worker");else{var s=this.$normalizePath;i=i||s(e.toUrl("ace/worker/worker.js",null,"_"));var u={};t.forEach(function(t){u[t]=s(e.toUrl(t,null,"_").replace(/(\.js)?(\?.*)?$/,""))})}try{this.$worker=new Worker(i)}catch(a){if(!(a instanceof window.DOMException))throw a;var f=this.$workerBlob(i),l=window.URL||window.webkitURL,c=l.createObjectURL(f);this.$worker=new Worker(c),l.revokeObjectURL(c)}this.$worker.postMessage({init:!0,tlns:u,module:n,classname:r}),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){r.implement(this,s),this.onMessage=function(e){var t=e.data;switch(t.type){case"event":this._signal(t.name,{data:t.data});break;case"call":var n=this.callbacks[t.id];n&&(n(t.data),delete this.callbacks[t.id]);break;case"error":this.reportError(t.data);break;case"log":window.console&&console.log&&console.log.apply(console,t.data)}},this.reportError=function(e){window.console&&console.error&&console.error(e)},this.$normalizePath=function(e){return i.qualifyURL(e)},this.terminate=function(){this._signal("terminate",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off("change",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,n){if(n){var r=this.callbackId++;this.callbacks[r]=n,t.push(r)}this.send(e,t)},this.emit=function(e,t){try{this.$worker.postMessage({event:e,data:{data:t.data}})}catch(n){console.error(n.stack)}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call("setValue",[e.getValue()]),e.on("change",this.changeListener)},this.changeListener=function(e){this.deltaQueue?this.deltaQueue.push(e.data):(this.deltaQueue=[e.data],setTimeout(this.$sendDeltaQueue,0))},this.$sendDeltaQueue=function(){var e=this.deltaQueue;if(!e)return;this.deltaQueue=null,e.length>20&&e.length>this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:e})},this.$workerBlob=function(e){var t="importScripts('"+i.qualifyURL(e)+"');";try{return new Blob([t],{type:"application/javascript"})}catch(n){var r=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder,s=new r;return s.append(t),s.getBlob("application/javascript")}}}).call(u.prototype);var a=function(e,t,n){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.callbackId=1,this.callbacks={},this.messageBuffer=[];var r=null,i=!1,u=Object.create(s),a=this;this.$worker={},this.$worker.terminate=function(){},this.$worker.postMessage=function(e){a.messageBuffer.push(e),r&&(i?setTimeout(f):f())},this.setEmitSync=function(e){i=e};var f=function(){var e=a.messageBuffer.shift();e.command?r[e.command].apply(r,e.args):e.event&&u._signal(e.event,e.data)};u.postMessage=function(e){a.onMessage({data:e})},u.callback=function(e,t){this.postMessage({type:"call",id:t,data:e})},u.emit=function(e,t){this.postMessage({type:"event",name:e,data:t})},o.loadModule(["worker",t],function(e){r=new e[n](u);while(a.messageBuffer.length)f()})};a.prototype=u.prototype,t.UIWorkerClient=a,t.WorkerClient=u}),ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],function(e,t,n){"use strict";var r=e("./range").Range,i=e("./lib/event_emitter").EventEmitter,s=e("./lib/oop"),o=function(e,t,n,r,i,s){var o=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=i,this.othersClass=s,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=r,this.$onCursorChange=function(){setTimeout(function(){o.onCursorChange()})},this.$pos=n;var u=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=u.length,this.setup(),e.selection.on("changeCursor",this.$onCursorChange)};(function(){s.implement(this,i),this.setup=function(){var e=this,t=this.doc,n=this.session,i=this.$pos;this.selectionBefore=n.selection.toJSON(),n.selection.inMultiSelectMode&&n.selection.toSingleRange(),this.pos=t.createAnchor(i.row,i.column),this.markerId=n.addMarker(new r(i.row,i.column,i.row,i.column+this.length),this.mainClass,null,!1),this.pos.on("change",function(t){n.removeMarker(e.markerId),e.markerId=n.addMarker(new r(t.value.row,t.value.column,t.value.row,t.value.column+e.length),e.mainClass,null,!1)}),this.others=[],this.$others.forEach(function(n){var r=t.createAnchor(n.row,n.column);e.others.push(r)}),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(this.othersActive)return;var e=this.session,t=this;this.othersActive=!0,this.others.forEach(function(n){n.markerId=e.addMarker(new r(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1),n.on("change",function(i){e.removeMarker(n.markerId),n.markerId=e.addMarker(new r(i.value.row,i.value.column,i.value.row,i.value.column+t.length),t.othersClass,null,!1)})})},this.hideOtherMarkers=function(){if(!this.othersActive)return;this.othersActive=!1;for(var e=0;e=this.pos.column&&n.start.column<=this.pos.column+this.length+1){var s=n.start.column-this.pos.column;this.length+=i;if(!this.session.$fromUndo){if(t.action==="insertText")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};u.row===n.start.row&&n.start.column=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};u.row===n.start.row&&n.start.column=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",e)):(this.hideOtherMarkers(),this._emit("cursorLeave",e))},this.detach=function(){this.session.removeMarker(this.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.pos.detach();for(var e=0;e1&&!this.inMultiSelectMode&&(this._signal("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length?this.$onRemoveRange(e):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal("addRange",{range:e})},this.$onRemoveRange=function(e){this.rangeCount=this.rangeList.ranges.length;if(this.rangeCount==1&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var r=this.ranges.indexOf(e[n]);this.ranges.splice(r,1)}this._signal("removeRange",{ranges:e}),this.rangeCount===0&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),t=t||this.ranges[0],t&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){if(this.rangeList)return;this.rangeList=new r,this.ranges=[],this.rangeCount=0},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var n=this.getRange(),r=this.isBackwards(),s=n.start.row,o=n.end.row;if(s==o){if(r)var u=n.end,a=n.start;else var u=n.start,a=n.end;this.addRange(i.fromPoints(a,a)),this.addRange(i.fromPoints(u,u));return}var f=[],l=this.getLineRange(s,!0);l.start.column=n.start.column,f.push(l);for(var c=s+1;c1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var r=this.session.documentToScreenPosition(this.selectionLead),s=this.session.documentToScreenPosition(this.selectionAnchor),o=this.rectangularRangeBlock(r,s);o.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var r=[],s=e.column0)d--;if(d>0){var m=0;while(r[m].isEmpty())m++}for(var g=d;g>=m;g--)r[g].isEmpty()&&r.splice(g,1)}return r}}.call(s.prototype);var d=e("./editor").Editor;(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,"ace_selection",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(!e.marker)return;this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);t!=-1&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length},this.removeSelectionMarkers=function(e){var t=this.session.$selectionMarkers;for(var n=e.length;n--;){var r=e[n];if(!r.marker)continue;this.session.removeMarker(r.marker);var i=t.indexOf(r);i!=-1&&t.splice(i,1)}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){if(this.inMultiSelectMode)return;this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(f.keyboardHandler),this.commands.setDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onSingleSelect=function(e){if(this.session.multiSelect.inVirtualMode)return;this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(f.keyboardHandler),this.commands.removeDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit("changeSelection")},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(!n.multiSelect)return;if(!t.multiSelectAction){var r=t.exec(n,e.args||{});n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()}else t.multiSelectAction=="forEach"?r=n.forEachSelection(t,e.args):t.multiSelectAction=="forEachLine"?r=n.forEachSelection(t,e.args,!0):t.multiSelectAction=="single"?(n.exitMultiSelectMode(),r=t.exec(n,e.args||{})):r=t.multiSelectAction(n,e.args||{});return r},this.forEachSelection=function(e,t,n){if(this.inVirtualSelectionMode)return;var r=n&&n.keepOrder,i=n==1||n&&n.$byLines,o=this.session,u=this.selection,a=u.rangeList,f=(r?u:a).ranges,l;if(!f.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var c=u._eventRegistry;u._eventRegistry={};var h=new s(o);this.inVirtualSelectionMode=!0;for(var p=f.length;p--;){if(i)while(p>0&&f[p].start.row==f[p-1].end.row)p--;h.fromOrientedRange(f[p]),h.index=p,this.selection=o.selection=h;var d=e.exec?e.exec(this,t||{}):e(this,t||{});!l&&d!==undefined&&(l=d),h.toOrientedRange(f[p])}h.detach(),this.selection=o.selection=u,this.inVirtualSelectionMode=!1,u._eventRegistry=c,u.mergeOverlappingRanges();var v=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),v&&v.from==v.to&&this.renderer.animateScrolling(v.from),l},this.exitMultiSelectMode=function(){if(!this.inMultiSelectMode||this.inVirtualSelectionMode)return;this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e="";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var t=this.multiSelect.rangeList.ranges,n=[];for(var r=0;r0);u<0&&(u=0),f>=c&&(f=c-1)}var p=this.session.doc.removeLines(u,f);p=this.$reAlignText(p,l),this.session.doc.insert({row:u,column:0},p.join("\n")+"\n"),l||(o.start.column=0,o.end.column=p[p.length-1].length),this.selection.setRange(o)}else{s.forEach(function(e){t.substractPoint(e.cursor)});var d=0,v=Infinity,m=n.map(function(t){var n=t.cursor,r=e.getLine(n.row),i=r.substr(n.column).search(/\S/g);return i==-1&&(i=0),n.column>d&&(d=n.column),io?e.insert(r,a.stringRepeat(" ",s-o)):e.remove(new i(r.row,r.column,r.row,r.column-s+o)),t.start.column=t.end.column=d,t.start.row=t.end.row=r.row,t.cursor=t.end}),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}},this.$reAlignText=function(e,t){function u(e){return a.stringRepeat(" ",e)}function f(e){return e[2]?u(i)+e[2]+u(s-e[2].length+o)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function l(e){return e[2]?u(i+s-e[2].length)+e[2]+u(o," ")+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function c(e){return e[2]?u(i)+e[2]+u(o)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}var n=!0,r=!0,i,s,o;return e.map(function(e){var t=e.match(/(\s*)(.*?)(\s*)([=:].*)/);return t?i==null?(i=t[1].length,s=t[2].length,o=t[3].length,t):(i+s+o!=t[1].length+t[2].length+t[3].length&&(r=!1),i!=t[1].length&&(n=!1),i>t[1].length&&(i=t[1].length),st[3].length&&(o=t[3].length),t):[e]}).map(t?f:n?r?l:f:c)}}).call(d.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var n=e.oldSession;n&&(n.multiSelect.off("addRange",this.$onAddRange),n.multiSelect.off("removeRange",this.$onRemoveRange),n.multiSelect.off("multiSelect",this.$onMultiSelect),n.multiSelect.off("singleSelect",this.$onSingleSelect),n.multiSelect.lead.off("change",this.$checkMultiselectChange),n.multiSelect.anchor.off("change",this.$checkMultiselectChange)),t&&(t.multiSelect.on("addRange",this.$onAddRange),t.multiSelect.on("removeRange",this.$onRemoveRange),t.multiSelect.on("multiSelect",this.$onMultiSelect),t.multiSelect.on("singleSelect",this.$onSingleSelect),t.multiSelect.lead.on("change",this.$checkMultiselectChange),t.multiSelect.anchor.on("change",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=m,e("./config").defineOptions(d.prototype,"editor",{enableMultiselect:{set:function(e){m(this),e?(this.on("changeSession",this.$multiselectOnSessionChange),this.on("mousedown",o)):(this.off("changeSession",this.$multiselectOnSessionChange),this.off("mousedown",o))},value:!0}})}),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../../range").Range,i=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?"start":t=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(r)?"end":""},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var i=/\S/,s=e.getLine(t),o=s.search(i);if(o==-1)return;var u=n||s.length,a=e.getLength(),f=t,l=t;while(++tf){var h=e.getLine(l).length;return new r(f,u,l,h)}},this.openingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i+1},u=e.$findClosingBracket(t,o,s);if(!u)return;var a=e.foldWidgets[u.row];return a==null&&(a=e.getFoldWidget(u.row)),a=="start"&&u.row>o.row&&(u.row--,u.column=e.getLine(u.row).length),r.fromPoints(o,u)},this.closingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i},u=e.$findOpeningBracket(t,o);if(!u)return;return u.column++,o.column--,r.fromPoints(u,o)}}).call(i.prototype)}),ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;border-radius: 2px;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}';var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)}),ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"],function(e,t,n){"use strict";function o(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on("change",this.updateOnChange),this.session.on("changeEditor",this.$onChangeEditor)}var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./range").Range;(function(){this.getRowLength=function(e){var t;return this.lineWidgets?t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0:t=0,!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach(function(t){t&&t.rowCount&&(e+=t.rowCount)}),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach();if(this.editor==e)return;this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on("beforeRender",this.measureWidgets),e.renderer.on("afterRender",this.renderWidgets))},this.detach=function(e){var t=this.editor;if(!t)return;this.editor=null,t.widgetManager=null,t.renderer.off("beforeRender",this.measureWidgets),t.renderer.off("afterRender",this.renderWidgets);var n=this.session.lineWidgets;n&&n.forEach(function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))})},this.updateOnChange=function(e){var t=this.session.lineWidgets;if(!t)return;var n=e.data,r=n.range,i=r.start.row,s=r.end.row-i;if(s!==0)if(n.action=="removeText"||n.action=="removeLines"){var o=t.splice(i+1,s);o.forEach(function(e){e&&this.removeLineWidget(e)},this),this.$updateRows()}else{var u=new Array(s);u.unshift(i,0),t.splice.apply(t,u),this.$updateRows()}},this.$updateRows=function(){var e=this.session.lineWidgets;if(!e)return;var t=!0;e.forEach(function(e,n){e&&(t=!1,e.row=n)}),t&&(this.session.lineWidgets=null)},this.addLineWidget=function(e){this.session.lineWidgets||(this.session.lineWidgets=new Array(this.session.getLength())),this.session.lineWidgets[e.row]=e;var t=this.editor.renderer;return e.html&&!e.el&&(e.el=i.createElement("div"),e.el.innerHTML=e.html),e.el&&(i.addCssClass(e.el,"ace_lineWidgetContainer"),e.el.style.position="absolute",e.el.style.zIndex=5,t.container.appendChild(e.el),e._inDocument=!0),e.coverGutter||(e.el.style.zIndex=3),e.pixelHeight||(e.pixelHeight=e.el.offsetHeight),e.rowCount==null&&(e.rowCount=e.pixelHeight/t.layerConfig.lineHeight),this.session._emit("changeFold",{data:{start:{row:e.row}}}),this.$updateRows(),this.renderWidgets(null,t),e},this.removeLineWidget=function(e){e._inDocument=!1,e.el&&e.el.parentNode&&e.el.parentNode.removeChild(e.el);if(e.editor&&e.editor.destroy)try{e.editor.destroy()}catch(t){}this.session.lineWidgets&&(this.session.lineWidgets[e.row]=undefined),this.session._emit("changeFold",{data:{start:{row:e.row}}}),this.$updateRows()},this.onWidgetChanged=function(e){this.session._changedWidgets.push(e),this.editor&&this.editor.renderer.updateFull()},this.measureWidgets=function(e,t){var n=this.session._changedWidgets,r=t.layerConfig;if(!n||!n.length)return;var i=Infinity;for(var s=0;s0&&!r[i])i--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var o=i;o<=s;o++){var u=r[o];if(!u||!u.el)continue;u._inDocument||(u._inDocument=!0,t.container.appendChild(u.el));var a=t.$cursorLayer.getPixelPosition({row:o,column:0},!0).top;u.coverLine||(a+=n.lineHeight*this.session.getRowLineCount(u.row)),u.el.style.top=a-n.offset+"px";var f=u.coverGutter?0:t.gutterWidth;u.fixedWidth||(f-=t.scrollLeft),u.el.style.left=f+"px",u.fixedWidth?u.el.style.right=t.scrollBar.getWidth()+"px":u.el.style.right=""}}}).call(o.prototype),t.LineWidgets=o}),ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"],function(e,t,n){"use strict";function o(e,t,n){var r=0,i=e.length-1;while(r<=i){var s=r+i>>1,o=n(t,e[s]);if(o>0)r=s+1;else{if(!(o<0))return s;i=s-1}}return-(r+1)}function u(e,t,n){var r=e.getAnnotations().sort(s.comparePoints);if(!r.length)return;var i=o(r,{row:t,column:-1},s.comparePoints);i<0&&(i=-i-1),i>=r.length-1?i=n>0?0:r.length-1:i===0&&n<0&&(i=r.length-1);var u=r[i];if(!u||!n)return;if(u.row===t){do u=r[i+=n];while(u&&u.row===t);if(!u)return r.slice()}var a=[];t=u.row;do a[n<0?"unshift":"push"](u),u=r[i+=n];while(u&&u.row==t);return a.length&&a}var r=e("../line_widgets").LineWidgets,i=e("../lib/dom"),s=e("../range").Range;t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new r(n),n.widgetManager.attach(e));var s=e.getCursorPosition(),o=s.row,a=n.lineWidgets&&n.lineWidgets[o];a?a.destroy():o-=t;var f=u(n,o,t),l;if(f){var c=f[0];s.column=(c.pos&&typeof c.column!="number"?c.pos.sc:c.column)||0,s.row=c.row,l=e.renderer.$gutterLayer.$annotations[s.row]}else{if(a)return;l={text:["Looks good!"],className:"ace_ok"}}e.session.unfold(s.row),e.selection.moveToPosition(s);var h={row:s.row,fixedWidth:!0,coverGutter:!0,el:i.createElement("div")},p=h.el.appendChild(i.createElement("div")),d=h.el.appendChild(i.createElement("div"));d.className="error_widget_arrow "+l.className;var v=e.renderer.$cursorLayer.getPixelPosition(s).left;d.style.left=v+e.renderer.gutterWidth-5+"px",h.el.className="error_widget_wrapper",p.className="error_widget "+l.className,p.innerHTML=l.text.join("
    "),p.appendChild(i.createElement("div"));var m=function(e,t,n){if(t===0&&(n==="esc"||n==="return"))return h.destroy(),{command:"null"}};h.destroy=function(){if(e.$mouseHandler.isMousePressed)return;e.keyBinding.removeKeyboardHandler(m),n.widgetManager.removeLineWidget(h),e.off("changeSelection",h.destroy),e.off("changeSession",h.destroy),e.off("mouseup",h.destroy),e.off("change",h.destroy)},e.keyBinding.addKeyboardHandler(m),e.on("changeSelection",h.destroy),e.on("changeSession",h.destroy),e.on("mouseup",h.destroy),e.on("change",h.destroy),e.session.widgetManager.addLineWidget(h),h.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:h.el.offsetHeight})},i.importCssString(" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }","")}),ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"],function(e,t,n){"use strict";e("./lib/fixoldbrowsers");var r=e("./lib/dom"),i=e("./lib/event"),s=e("./editor").Editor,o=e("./edit_session").EditSession,u=e("./undomanager").UndoManager,a=e("./virtual_renderer").VirtualRenderer;e("./worker/worker_client"),e("./keyboard/hash_handler"),e("./placeholder"),e("./multi_select"),e("./mode/folding/fold_mode"),e("./theme/textmate"),e("./ext/error_marker"),t.config=e("./config"),t.require=e,t.edit=function(e){if(typeof e=="string"){var n=e;e=document.getElementById(n);if(!e)throw new Error("ace.edit can't find div #"+n)}if(e&&e.env&&e.env.editor instanceof s)return e.env.editor;var o="";if(e&&/input|textarea/i.test(e.tagName)){var u=e;o=u.value,e=r.createElement("pre"),u.parentNode.replaceChild(e,u)}else o=r.getInnerText(e),e.innerHTML="";var f=t.createEditSession(o),l=new s(new a(e));l.setSession(f);var c={document:f,editor:l,onResize:l.resize.bind(l,null)};return u&&(c.textarea=u),i.addListener(window,"resize",c.onResize),l.on("destroy",function(){i.removeListener(window,"resize",c.onResize),c.editor.container.env=null}),l.container.env=l.env=c,l},t.createEditSession=function(e,t){var n=new o(e,t);return n.setUndoManager(new u),n},t.EditSession=o,t.UndoManager=u}); + (function() { + ace.require(["ace/ace"], function(a) { + a && a.config.init(true); + if (!window.ace) + window.ace = a; + for (var key in a) if (a.hasOwnProperty(key)) + window.ace[key] = a[key]; + }); + })(); + \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/ext-emmet.js b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/ext-emmet.js new file mode 100644 index 000000000..ded0318b9 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/ext-emmet.js @@ -0,0 +1,5 @@ +ace.define("ace/snippets",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/anchor","ace/keyboard/hash_handler","ace/tokenizer","ace/lib/dom","ace/editor"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=e("./lib/lang"),o=e("./range").Range,u=e("./anchor").Anchor,a=e("./keyboard/hash_handler").HashHandler,f=e("./tokenizer").Tokenizer,l=o.comparePoints,c=function(){this.snippetMap={},this.snippetNameMap={}};(function(){r.implement(this,i),this.getTokenizer=function(){function e(e,t,n){return e=e.substr(1),/^\d+$/.test(e)&&!n.inFormatString?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return"(?:[^\\\\"+e+"]|\\\\.)"}return c.$tokenizer=new f({start:[{regex:/:/,onMatch:function(e,t,n){return n.length&&n[0].expectIf?(n[0].expectIf=!1,n[0].elseBranch=n[0],[n[0]]):":"}},{regex:/\\./,onMatch:function(e,t,n){var r=e[1];return r=="}"&&n.length?e=r:"`$\\".indexOf(r)!=-1?e=r:n.inFormatString&&(r=="n"?e="\n":r=="t"?e="\n":"ulULE".indexOf(r)!=-1&&(e={changeCase:r,local:r>"a"})),[e]}},{regex:/}/,onMatch:function(e,t,n){return[n.length?n.shift():e]}},{regex:/\$(?:\d+|\w+)/,onMatch:e},{regex:/\$\{[\dA-Z_a-z]+/,onMatch:function(t,n,r){var i=e(t.substr(1),n,r);return r.unshift(i[0]),i},next:"snippetVar"},{regex:/\n/,token:"newline",merge:!1}],snippetVar:[{regex:"\\|"+t("\\|")+"*\\|",onMatch:function(e,t,n){n[0].choices=e.slice(1,-1).split(",")},next:"start"},{regex:"/("+t("/")+"+)/(?:("+t("/")+"*)/)(\\w*):?",onMatch:function(e,t,n){var r=n[0];return r.fmtString=e,e=this.splitRegex.exec(e),r.guard=e[1],r.fmt=e[2],r.flag=e[3],""},next:"start"},{regex:"`"+t("`")+"*`",onMatch:function(e,t,n){return n[0].code=e.splice(1,-1),""},next:"start"},{regex:"\\?",onMatch:function(e,t,n){n[0]&&(n[0].expectIf=!0)},next:"start"},{regex:"([^:}\\\\]|\\\\.)*:?",token:"",next:"start"}],formatString:[{regex:"/("+t("/")+"+)/",token:"regex"},{regex:"",onMatch:function(e,t,n){n.inFormatString=!0},next:"start"}]}),c.prototype.getTokenizer=function(){return c.$tokenizer},c.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},this.$getDefaultValue=function(e,t){if(/^[A-Z]\d+$/.test(t)){var n=t.substr(1);return(this.variables[t[0]+"__"]||{})[n]}if(/^\d+$/.test(t))return(this.variables.__||{})[t];t=t.replace(/^TM_/,"");if(!e)return;var r=e.session;switch(t){case"CURRENT_WORD":var i=r.getWordRange();case"SELECTION":case"SELECTED_TEXT":return r.getTextRange(i);case"CURRENT_LINE":return r.getLine(e.getCursorPosition().row);case"PREV_LINE":return r.getLine(e.getCursorPosition().row-1);case"LINE_INDEX":return e.getCursorPosition().column;case"LINE_NUMBER":return e.getCursorPosition().row+1;case"SOFT_TABS":return r.getUseSoftTabs()?"YES":"NO";case"TAB_SIZE":return r.getTabSize();case"FILENAME":case"FILEPATH":return"";case"FULLNAME":return"Ace"}},this.variables={},this.getVariableValue=function(e,t){return this.variables.hasOwnProperty(t)?this.variables[t](e,t)||"":this.$getDefaultValue(e,t)||""},this.tmStrFormat=function(e,t,n){var r=t.flag||"",i=t.guard;i=new RegExp(i,r.replace(/[^gi]/,""));var s=this.tokenizeTmSnippet(t.fmt,"formatString"),o=this,u=e.replace(i,function(){o.variables.__=arguments;var e=o.resolveVariables(s,n),t="E";for(var r=0;r=0&&s.splice(o,1)}}var n=this.snippetMap,r=this.snippetNameMap;e.content?i(e):Array.isArray(e)&&e.forEach(i)},this.parseSnippetFile=function(e){e=e.replace(/\r/g,"");var t=[],n={},r=/^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm,i;while(i=r.exec(e)){if(i[1])try{n=JSON.parse(i[1]),t.push(n)}catch(s){}if(i[4])n.content=i[4].replace(/^\t/gm,""),t.push(n),n={};else{var o=i[2],u=i[3];if(o=="regex"){var a=/\/((?:[^\/\\]|\\.)*)|$/g;n.guard=a.exec(u)[1],n.trigger=a.exec(u)[1],n.endTrigger=a.exec(u)[1],n.endGuard=a.exec(u)[1]}else o=="snippet"?(n.tabTrigger=u.match(/^\S*/)[0],n.name||(n.name=u)):n[o]=u}}return t},this.getSnippetByName=function(e,t){var n=this.snippetNameMap,r;return this.getActiveScopes(t).some(function(t){var i=n[t];return i&&(r=i[e]),!!r},this),r}}).call(c.prototype);var h=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=s.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on("change",this.$onChange),this.editor.on("changeSelection",this.$onChangeSelection),this.editor.on("changeSession",this.$onChangeSession),this.editor.commands.on("afterExec",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener("change",this.$onChange),this.editor.removeListener("changeSelection",this.$onChangeSelection),this.editor.removeListener("changeSession",this.$onChangeSession),this.editor.commands.removeListener("afterExec",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t=e.data.range,n=e.data.action[0]=="r",r=t.start,i=t.end,s=r.row,o=i.row,u=o-s,a=i.column-r.column;n&&(u=-u,a=-a);if(!this.$inChange&&n){var f=this.selectedTabstop,c=f&&!f.some(function(e){return l(e.start,r)<=0&&l(e.end,i)>=0});if(c)return this.detach()}var h=this.ranges;for(var p=0;p0){this.removeRange(d),p--;continue}d.start.row==s&&d.start.column>r.column&&(d.start.column+=a),d.end.row==s&&d.end.column>=r.column&&(d.end.column+=a),d.start.row>=s&&(d.start.row+=u),d.end.row>=s&&(d.end.row+=u),l(d.start,d.end)>0&&this.removeRange(d)}h.length||this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(!e||!e.hasLinkedRanges)return;this.$inChange=!0;var n=this.editor.session,r=n.getTextRange(e.firstNonLinked);for(var i=e.length;i--;){var s=e[i];if(!s.linked)continue;var o=t.snippetManager.tmStrFormat(r,s.original);n.replace(s,o)}this.$inChange=!1},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(!this.editor)return;var e=this.editor.selection.lead,t=this.editor.selection.anchor,n=this.editor.selection.isEmpty();for(var r=this.ranges.length;r--;){if(this.ranges[r].linked)continue;var i=this.ranges[r].contains(e.row,e.column),s=n||this.ranges[r].contains(t.row,t.column);if(i&&s)return}this.detach()},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,n=this.index+(e||1);n=Math.min(Math.max(n,1),t),n==t&&(n=0),this.selectTabstop(n),n===0&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];t&&this.addTabstopMarkers(t),this.index=e,t=this.tabstops[this.index];if(!t||!t.length)return;this.selectedTabstop=t;if(!this.editor.inVirtualSelectionMode){var n=this.editor.multiSelect;n.toSingleRange(t.firstNonLinked.clone());for(var r=t.length;r--;){if(t.hasLinkedRanges&&t[r].linked)continue;n.addRange(t[r].clone(),!0)}n.ranges[0]&&n.addRange(n.ranges[0].clone())}else this.editor.selection.setRange(t.firstNonLinked);this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.addTabstops=function(e,t,n){this.$openTabstops||(this.$openTabstops=[]);if(!e[0]){var r=o.fromPoints(n,n);v(r.start,t),v(r.end,t),e[0]=[r],e[0].index=0}var i=this.index,s=[i+1,0],u=this.ranges;e.forEach(function(e,n){var r=this.$openTabstops[n]||e;for(var i=e.length;i--;){var a=e[i],f=o.fromPoints(a.start,a.end||a.start);d(f.start,t),d(f.end,t),f.original=a,f.tabstop=r,u.push(f),r!=e?r.unshift(f):r[i]=f,a.fmtString?(f.linked=!0,r.hasLinkedRanges=!0):r.firstNonLinked||(r.firstNonLinked=f)}r.firstNonLinked||(r.hasLinkedRanges=!1),r===e&&(s.push(r),this.$openTabstops[n]=r),this.addTabstopMarkers(r)},this),s.length>2&&(this.tabstops.length&&s.push(s.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,s))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,"ace_snippet-marker","text"))})},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},this.removeRange=function(e){var t=e.tabstop.indexOf(e);e.tabstop.splice(t,1),t=this.ranges.indexOf(e),this.ranges.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(t=this.tabstops.indexOf(e.tabstop),t!=-1&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new a,this.keyboardHandler.bindKeys({Tab:function(e){if(t.snippetManager&&t.snippetManager.expandWithTab(e))return;e.tabstopManager.tabNext(1)},"Shift-Tab":function(e){e.tabstopManager.tabNext(-1)},Esc:function(e){e.tabstopManager.detach()},Return:function(e){return!1}})}).call(h.prototype);var p={};p.onChange=u.prototype.onChange,p.setPosition=function(e,t){this.pos.row=e,this.pos.column=t},p.update=function(e,t,n){this.$insertRight=n,this.pos=e,this.onChange(t)};var d=function(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row},v=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};e("./lib/dom").importCssString(".ace_snippet-marker { -moz-box-sizing: border-box; box-sizing: border-box; background: rgba(194, 193, 208, 0.09); border: 1px dotted rgba(211, 208, 235, 0.62); position: absolute;}"),t.snippetManager=new c;var m=e("./editor").Editor;(function(){this.insertSnippet=function(e,n){return t.snippetManager.insertSnippet(this,e,n)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(m.prototype)}),ace.define("ace/ext/emmet",["require","exports","module","ace/keyboard/hash_handler","ace/editor","ace/snippets","ace/range","resources","resources","range","tabStops","resources","utils","actions","ace/config","ace/config"],function(e,t,n){"use strict";function f(){}var r=e("ace/keyboard/hash_handler").HashHandler,i=e("ace/editor").Editor,s=e("ace/snippets").snippetManager,o=e("ace/range").Range,u,a;f.prototype={setupContext:function(e){this.ace=e,this.indentation=e.session.getTabString(),u||(u=window.emmet),u.require("resources").setVariable("indentation",this.indentation),this.$syntax=null,this.$syntax=this.getSyntax()},getSelectionRange:function(){var e=this.ace.getSelectionRange(),t=this.ace.session.doc;return{start:t.positionToIndex(e.start),end:t.positionToIndex(e.end)}},createSelection:function(e,t){var n=this.ace.session.doc;this.ace.selection.setRange({start:n.indexToPosition(e),end:n.indexToPosition(t)})},getCurrentLineRange:function(){var e=this.ace,t=e.getCursorPosition().row,n=e.session.getLine(t).length,r=e.session.doc.positionToIndex({row:t,column:0});return{start:r,end:r+n}},getCaretPos:function(){var e=this.ace.getCursorPosition();return this.ace.session.doc.positionToIndex(e)},setCaretPos:function(e){var t=this.ace.session.doc.indexToPosition(e);this.ace.selection.moveToPosition(t)},getCurrentLine:function(){var e=this.ace.getCursorPosition().row;return this.ace.session.getLine(e)},replaceContent:function(e,t,n,r){n==null&&(n=t==null?this.getContent().length:t),t==null&&(t=0);var i=this.ace,u=i.session.doc,a=o.fromPoints(u.indexToPosition(t),u.indexToPosition(n));i.session.remove(a),a.end=a.start,e=this.$updateTabstops(e),s.insertSnippet(i,e)},getContent:function(){return this.ace.getValue()},getSyntax:function(){if(this.$syntax)return this.$syntax;var e=this.ace.session.$modeId.split("/").pop();if(e=="html"||e=="php"){var t=this.ace.getCursorPosition(),n=this.ace.session.getState(t.row);typeof n!="string"&&(n=n[0]),n&&(n=n.split("-"),n.length>1?e=n[0]:e=="php"&&(e="html"))}return e},getProfileName:function(){switch(this.getSyntax()){case"css":return"css";case"xml":case"xsl":return"xml";case"html":var e=u.require("resources").getVariable("profile");return e||(e=this.ace.session.getLines(0,2).join("").search(/]+XHTML/i)!=-1?"xhtml":"html"),e}return"xhtml"},prompt:function(e){return prompt(e)},getSelection:function(){return this.ace.session.getTextRange()},getFilePath:function(){return""},$updateTabstops:function(e){var t=1e3,n=0,r=null,i=u.require("range"),s=u.require("tabStops"),o=u.require("resources").getVocabulary("user"),a={tabstop:function(e){var o=parseInt(e.group,10),u=o===0;u?o=++n:o+=t;var f=e.placeholder;f&&(f=s.processText(f,a));var l="${"+o+(f?":"+f:"")+"}";return u&&(r=i.create(e.start,l)),l},escape:function(e){return e=="$"?"\\$":e=="\\"?"\\\\":e}};return e=s.processText(e,a),o.variables.insert_final_tabstop&&!/\$\{0\}$/.test(e)?e+="${0}":r&&(e=u.require("utils").replaceSubstring(e,"${0}",r)),e}};var l={expand_abbreviation:{mac:"ctrl+alt+e",win:"alt+e"},match_pair_outward:{mac:"ctrl+d",win:"ctrl+,"},match_pair_inward:{mac:"ctrl+j",win:"ctrl+shift+0"},matching_pair:{mac:"ctrl+alt+j",win:"alt+j"},next_edit_point:"alt+right",prev_edit_point:"alt+left",toggle_comment:{mac:"command+/",win:"ctrl+/"},split_join_tag:{mac:"shift+command+'",win:"shift+ctrl+`"},remove_tag:{mac:"command+'",win:"shift+ctrl+;"},evaluate_math_expression:{mac:"shift+command+y",win:"shift+ctrl+y"},increment_number_by_1:"ctrl+up",decrement_number_by_1:"ctrl+down",increment_number_by_01:"alt+up",decrement_number_by_01:"alt+down",increment_number_by_10:{mac:"alt+command+up",win:"shift+alt+up"},decrement_number_by_10:{mac:"alt+command+down",win:"shift+alt+down"},select_next_item:{mac:"shift+command+.",win:"shift+ctrl+."},select_previous_item:{mac:"shift+command+,",win:"shift+ctrl+,"},reflect_css_value:{mac:"shift+command+r",win:"shift+ctrl+r"},encode_decode_data_url:{mac:"shift+ctrl+d",win:"ctrl+'"},expand_abbreviation_with_tab:"Tab",wrap_with_abbreviation:{mac:"shift+ctrl+a",win:"shift+ctrl+a"}},c=new f;t.commands=new r,t.runEmmetCommand=function(e){try{c.setupContext(e);if(c.getSyntax()=="php")return!1;var t=u.require("actions");if(this.action=="expand_abbreviation_with_tab"&&!e.selection.isEmpty())return!1;if(this.action=="wrap_with_abbreviation")return setTimeout(function(){t.run("wrap_with_abbreviation",c)},0);var n=e.selection.lead,r=e.session.getTokenAt(n.row,n.column);if(r&&/\btag\b/.test(r.type))return!1;var i=t.run(this.action,c)}catch(s){e._signal("changeStatus",typeof s=="string"?s:s.message),console.log(s),i=!1}return i};for(var h in l)t.commands.addCommand({name:"emmet:"+h,action:h,bindKey:l[h],exec:t.runEmmetCommand,multiSelectAction:"forEach"});t.updateCommands=function(e,n){n?e.keyBinding.addKeyboardHandler(t.commands):e.keyBinding.removeKeyboardHandler(t.commands)},t.isSupportedMode=function(e){return e&&/css|less|scss|sass|stylus|html|php|twig|ejs/.test(e)};var p=function(n,r){var i=r;if(!i)return;var s=t.isSupportedMode(i.session.$modeId);n.enableEmmet===!1&&(s=!1),s&&typeof a=="string"&&e("ace/config").loadModule(a,function(){a=null}),t.updateCommands(i,s)};t.AceEmmetEditor=f,e("ace/config").defineOptions(i.prototype,"editor",{enableEmmet:{set:function(e){this[e?"on":"removeListener"]("changeMode",p),p({enableEmmet:!!e},this)},value:!0}}),t.setCore=function(e){typeof e=="string"?a=e:u=e}}); + (function() { + ace.require(["ace/ext/emmet"], function() {}); + })(); + \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/ext-searchbox.js b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/ext-searchbox.js new file mode 100644 index 000000000..964646ba5 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/ext-searchbox.js @@ -0,0 +1,5 @@ +ace.define("ace/ext/searchbox",["require","exports","module","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/keyboard/hash_handler","ace/lib/keys"],function(e,t,n){"use strict";var r=e("../lib/dom"),i=e("../lib/lang"),s=e("../lib/event"),o=".ace_search {background-color: #ddd;border: 1px solid #cbcbcb;border-top: 0 none;max-width: 325px;overflow: hidden;margin: 0;padding: 4px;padding-right: 6px;padding-bottom: 0;position: absolute;top: 0px;z-index: 99;white-space: normal;}.ace_search.left {border-left: 0 none;border-radius: 0px 0px 5px 0px;left: 0;}.ace_search.right {border-radius: 0px 0px 0px 5px;border-right: 0 none;right: 0;}.ace_search_form, .ace_replace_form {border-radius: 3px;border: 1px solid #cbcbcb;float: left;margin-bottom: 4px;overflow: hidden;}.ace_search_form.ace_nomatch {outline: 1px solid red;}.ace_search_field {background-color: white;border-right: 1px solid #cbcbcb;border: 0 none;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box;float: left;height: 22px;outline: 0;padding: 0 7px;width: 214px;margin: 0;}.ace_searchbtn,.ace_replacebtn {background: #fff;border: 0 none;border-left: 1px solid #dcdcdc;cursor: pointer;float: left;height: 22px;margin: 0;padding: 0;position: relative;}.ace_searchbtn:last-child,.ace_replacebtn:last-child {border-top-right-radius: 3px;border-bottom-right-radius: 3px;}.ace_searchbtn:disabled {background: none;cursor: default;}.ace_searchbtn {background-position: 50% 50%;background-repeat: no-repeat;width: 27px;}.ace_searchbtn.prev {background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=); }.ace_searchbtn.next {background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=); }.ace_searchbtn_close {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;border-radius: 50%;border: 0 none;color: #656565;cursor: pointer;float: right;font: 16px/16px Arial;height: 14px;margin: 5px 1px 9px 5px;padding: 0;text-align: center;width: 14px;}.ace_searchbtn_close:hover {background-color: #656565;background-position: 50% 100%;color: white;}.ace_replacebtn.prev {width: 54px}.ace_replacebtn.next {width: 27px}.ace_button {margin-left: 2px;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;overflow: hidden;opacity: 0.7;border: 1px solid rgba(100,100,100,0.23);padding: 1px;-moz-box-sizing: border-box;box-sizing: border-box;color: black;}.ace_button:hover {background-color: #eee;opacity:1;}.ace_button:active {background-color: #ddd;}.ace_button.checked {border-color: #3399ff;opacity:1;}.ace_search_options{margin-bottom: 3px;text-align: right;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;}",u=e("../keyboard/hash_handler").HashHandler,a=e("../lib/keys");r.importCssString(o,"ace_searchbox");var f=''.replace(/>\s+/g,">"),l=function(e,t,n){var i=r.createElement("div");i.innerHTML=f,this.element=i.firstChild,this.$init(),this.setEditor(e)};(function(){this.setEditor=function(e){e.searchBox=this,e.container.appendChild(this.element),this.editor=e},this.$initElements=function(e){this.searchBox=e.querySelector(".ace_search_form"),this.replaceBox=e.querySelector(".ace_replace_form"),this.searchOptions=e.querySelector(".ace_search_options"),this.regExpOption=e.querySelector("[action=toggleRegexpMode]"),this.caseSensitiveOption=e.querySelector("[action=toggleCaseSensitive]"),this.wholeWordOption=e.querySelector("[action=toggleWholeWords]"),this.searchInput=this.searchBox.querySelector(".ace_search_field"),this.replaceInput=this.replaceBox.querySelector(".ace_search_field")},this.$init=function(){var e=this.element;this.$initElements(e);var t=this;s.addListener(e,"mousedown",function(e){setTimeout(function(){t.activeInput.focus()},0),s.stopPropagation(e)}),s.addListener(e,"click",function(e){var n=e.target||e.srcElement,r=n.getAttribute("action");r&&t[r]?t[r]():t.$searchBarKb.commands[r]&&t.$searchBarKb.commands[r].exec(t),s.stopPropagation(e)}),s.addCommandKeyListener(e,function(e,n,r){var i=a.keyCodeToString(r),o=t.$searchBarKb.findKeyCommand(n,i);o&&o.exec&&(o.exec(t),s.stopEvent(e))}),this.$onChange=i.delayedCall(function(){t.find(!1,!1)}),s.addListener(this.searchInput,"input",function(){t.$onChange.schedule(20)}),s.addListener(this.searchInput,"focus",function(){t.activeInput=t.searchInput,t.searchInput.value&&t.highlight()}),s.addListener(this.replaceInput,"focus",function(){t.activeInput=t.replaceInput,t.searchInput.value&&t.highlight()})},this.$closeSearchBarKb=new u([{bindKey:"Esc",name:"closeSearchBar",exec:function(e){e.searchBox.hide()}}]),this.$searchBarKb=new u,this.$searchBarKb.bindKeys({"Ctrl-f|Command-f|Ctrl-H|Command-Option-F":function(e){var t=e.isReplace=!e.isReplace;e.replaceBox.style.display=t?"":"none",e[t?"replaceInput":"searchInput"].focus()},"Ctrl-G|Command-G":function(e){e.findNext()},"Ctrl-Shift-G|Command-Shift-G":function(e){e.findPrev()},esc:function(e){setTimeout(function(){e.hide()})},Return:function(e){e.activeInput==e.replaceInput&&e.replace(),e.findNext()},"Shift-Return":function(e){e.activeInput==e.replaceInput&&e.replace(),e.findPrev()},"Alt-Return":function(e){e.activeInput==e.replaceInput&&e.replaceAll(),e.findAll()},Tab:function(e){(e.activeInput==e.replaceInput?e.searchInput:e.replaceInput).focus()}}),this.$searchBarKb.addCommands([{name:"toggleRegexpMode",bindKey:{win:"Alt-R|Alt-/",mac:"Ctrl-Alt-R|Ctrl-Alt-/"},exec:function(e){e.regExpOption.checked=!e.regExpOption.checked,e.$syncOptions()}},{name:"toggleCaseSensitive",bindKey:{win:"Alt-C|Alt-I",mac:"Ctrl-Alt-R|Ctrl-Alt-I"},exec:function(e){e.caseSensitiveOption.checked=!e.caseSensitiveOption.checked,e.$syncOptions()}},{name:"toggleWholeWords",bindKey:{win:"Alt-B|Alt-W",mac:"Ctrl-Alt-B|Ctrl-Alt-W"},exec:function(e){e.wholeWordOption.checked=!e.wholeWordOption.checked,e.$syncOptions()}}]),this.$syncOptions=function(){r.setCssClass(this.regExpOption,"checked",this.regExpOption.checked),r.setCssClass(this.wholeWordOption,"checked",this.wholeWordOption.checked),r.setCssClass(this.caseSensitiveOption,"checked",this.caseSensitiveOption.checked),this.find(!1,!1)},this.highlight=function(e){this.editor.session.highlight(e||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},this.find=function(e,t){var n=this.editor.find(this.searchInput.value,{skipCurrent:e,backwards:t,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked}),i=!n&&this.searchInput.value;r.setCssClass(this.searchBox,"ace_nomatch",i),this.editor._emit("findSearchBox",{match:!i}),this.highlight()},this.findNext=function(){this.find(!0,!1)},this.findPrev=function(){this.find(!0,!0)},this.findAll=function(){var e=this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked}),t=!e&&this.searchInput.value;r.setCssClass(this.searchBox,"ace_nomatch",t),this.editor._emit("findSearchBox",{match:!t}),this.highlight(),this.hide()},this.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},this.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},this.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},this.hide=function(){this.element.style.display="none",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},this.show=function(e,t){this.element.style.display="",this.replaceBox.style.display=t?"":"none",this.isReplace=t,e&&(this.searchInput.value=e),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb)},this.isFocused=function(){var e=document.activeElement;return e==this.searchInput||e==this.replaceInput}}).call(l.prototype),t.SearchBox=l,t.Search=function(e,t){var n=e.searchBox||new l(e);n.show(e.session.getTextRange(),t)}}); + (function() { + ace.require(["ace/ext/searchbox"], function() {}); + })(); + \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-css.js b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-css.js new file mode 100644 index 000000000..cb54989ab --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-css.js @@ -0,0 +1 @@ +ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero",f=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",l=t.supportConstantFonts="arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0);this.$rules={start:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"@.*?{",push:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"\\}",next:"pop"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}],ruleset:[{token:"paren.rparen",regex:"\\}",next:"pop"},{token:"comment",regex:"\\/\\*",push:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{token:["support.function","string","support.function"],regex:"(url\\()(.*)(\\))"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},h=function(){this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==""&&l!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+l+"}",selection:!1};if(h.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])||n.inMultiSelectMode?(h.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){c(n);var p=u.substring(s.column,s.column+1);if(p=="}"){var d=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(d!==null&&h.isAutoInsertedClosing(s,u,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(i=="\n"||i=="\r\n"){c(n);var v="";h.isMaybeInsertedClosing(s,u)&&(v=o.stringRepeat("}",f.maybeInsertedBrackets),h.clearMaybeInsertedClosing());var p=u.substring(s.column,s.column+1);if(p==="}"){var m=r.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!m)return null;var g=this.$getIndent(r.getLine(m.row))}else{if(!v){h.clearMaybeInsertedClosing();return}var g=this.$getIndent(u)}var y=g+r.getTabString();return{text:"\n"+y+"\n"+g+v,selection:[1,y.length,1,y.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),h=f.substring(a.column,a.column+1),p=r.getTokenAt(a.row,a.column),d=r.getTokenAt(a.row,a.column+1);if(l=="\\"&&p&&/escape/.test(p.type))return null;var v=p&&/string/.test(p.type),m=!d||/string/.test(d.type),g;if(h==s)g=v!==m;else{if(v&&!m)return null;if(v&&m)return null;var y=r.$mode.tokenRe;y.lastIndex=0;var b=y.test(l);y.lastIndex=0;var w=y.test(l);if(b||w)return null;if(h&&!/[\s;,.})\]\\]/.test(h))return null;g=!0}return{text:g?s+s:"",selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};h.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(h,i),t.CstyleBehaviour=h}),ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=function(){this.inherit(s),this.add("colon","insertion",function(e,t,n,r,i){if(i===":"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\s+/)&&(a=u.stepBackward());if(a&&a.type==="support.type"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===":")return{text:"",selection:[1,1]};if(!f.substring(s.column).match(/^\s*;/))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===":"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\s+/)&&(f=a.stepBackward());if(f&&f.type==="support.type"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===";")return i.end.column++,i}}}),this.add("semicolon","insertion",function(e,t,n,r,i){if(i===";"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===";")return{text:"",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/)#(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./css_highlight_rules").CssHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./behaviour/css").CssBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules="cStyle",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("csslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/css"}.call(l.prototype),t.Mode=l}) \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-html.js b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-html.js new file mode 100644 index 000000000..7b9e89a65 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-html.js @@ -0,0 +1 @@ +ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b",s="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[{token:"comment",regex:"\\/\\/",next:"line_comment"},i.getStartRule("doc-start"),{token:"comment",regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+r+")(\\.)(prototype)(\\.)("+r+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\.)("+r+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+r+")(\\.)("+r+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+r+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:r},{token:"keyword.operator",regex:/--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],start:[i.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/",next:"line_comment_regex_allowed"},{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:r},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],comment_regex_allowed:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment",caseInsensitive:!0}],comment:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:"no_regex"},{defaultToken:"comment",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:"comment",regex:"$|^",next:"start"},{defaultToken:"comment",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:"comment",regex:"$|^",next:"no_regex"},{defaultToken:"comment",caseInsensitive:!0}],qqstring:[{token:"constant.language.escape",regex:s},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:s},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)return n.unshift("start",t),"paren";if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:s},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},h=function(){this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==""&&l!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+l+"}",selection:!1};if(h.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])||n.inMultiSelectMode?(h.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){c(n);var p=u.substring(s.column,s.column+1);if(p=="}"){var d=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(d!==null&&h.isAutoInsertedClosing(s,u,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(i=="\n"||i=="\r\n"){c(n);var v="";h.isMaybeInsertedClosing(s,u)&&(v=o.stringRepeat("}",f.maybeInsertedBrackets),h.clearMaybeInsertedClosing());var p=u.substring(s.column,s.column+1);if(p==="}"){var m=r.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!m)return null;var g=this.$getIndent(r.getLine(m.row))}else{if(!v){h.clearMaybeInsertedClosing();return}var g=this.$getIndent(u)}var y=g+r.getTabString();return{text:"\n"+y+"\n"+g+v,selection:[1,y.length,1,y.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),h=f.substring(a.column,a.column+1),p=r.getTokenAt(a.row,a.column),d=r.getTokenAt(a.row,a.column+1);if(l=="\\"&&p&&/escape/.test(p.type))return null;var v=p&&/string/.test(p.type),m=!d||/string/.test(d.type),g;if(h==s)g=v!==m;else{if(v&&!m)return null;if(v&&m)return null;var y=r.$mode.tokenRe;y.lastIndex=0;var b=y.test(l);y.lastIndex=0;var w=y.test(l);if(b||w)return null;if(h&&!/[\s;,.})\]\\]/.test(h))return null;g=!0}return{text:g?s+s:"",selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};h.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(h,i),t.CstyleBehaviour=h}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/)#(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../range").Range,a=e("../worker/worker_client").WorkerClient,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero",f=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",l=t.supportConstantFonts="arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0);this.$rules={start:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"@.*?{",push:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"\\}",next:"pop"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}],ruleset:[{token:"paren.rparen",regex:"\\}",next:"pop"},{token:"comment",regex:"\\/\\*",push:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{token:["support.function","string","support.function"],regex:"(url\\()(.*)(\\))"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=function(){this.inherit(s),this.add("colon","insertion",function(e,t,n,r,i){if(i===":"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\s+/)&&(a=u.stepBackward());if(a&&a.type==="support.type"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===":")return{text:"",selection:[1,1]};if(!f.substring(s.column).match(/^\s*;/))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===":"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\s+/)&&(f=a.stepBackward());if(f&&f.type==="support.type"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===";")return i.end.column++,i}}}),this.add("semicolon","insertion",function(e,t,n,r,i){if(i===";"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===";")return{text:"",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./css_highlight_rules").CssHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./behaviour/css").CssBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules="cStyle",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("csslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/css"}.call(l.prototype),t.Mode=l}),ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(e){this.$rules={start:[{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:["punctuation.xml-decl.xml","keyword.xml-decl.xml"],regex:"(<\\?)(xml)(?=[\\s])",next:"xml_decl",caseInsensitive:!0},{token:["punctuation.instruction.xml","keyword.instruction.xml"],regex:"(<\\?)([-_a-zA-Z0-9]+)",next:"processing_instruction"},{token:"comment.xml",regex:"<\\!--",next:"comment"},{token:["xml-pe.doctype.xml","xml-pe.doctype.xml"],regex:"(<\\!)(DOCTYPE)(?=[\\s])",next:"doctype",caseInsensitive:!0},{include:"tag"},{token:"text.end-tag-open.xml",regex:"",next:"start"}],processing_instruction:[{token:"punctuation.instruction.xml",regex:"\\?>",next:"start"},{defaultToken:"instruction.xml"}],doctype:[{include:"whitespace"},{include:"string"},{token:"xml-pe.doctype.xml",regex:">",next:"start"},{token:"xml-pe.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"punctuation.int-subset",regex:"\\[",push:"int_subset"}],int_subset:[{token:"text.xml",regex:"\\s+"},{token:"punctuation.int-subset.xml",regex:"]",next:"pop"},{token:["punctuation.markup-decl.xml","keyword.markup-decl.xml"],regex:"(<\\!)([-_a-zA-Z0-9]+)",push:[{token:"text",regex:"\\s+"},{token:"punctuation.markup-decl.xml",regex:">",next:"pop"},{include:"string"}]}],cdata:[{token:"string.cdata.xml",regex:"\\]\\]>",next:"start"},{token:"text.xml",regex:"\\s+"},{token:"text.xml",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment.xml",regex:"-->",next:"start"},{defaultToken:"comment.xml"}],reference:[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],attr_reference:[{token:"constant.language.escape.reference.attribute-value.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],tag:[{token:["meta.tag.punctuation.tag-open.xml","meta.tag.punctuation.end-tag-open.xml","meta.tag.tag-name.xml"],regex:"(?:(<)|(",next:"start"}]}],tag_whitespace:[{token:"text.tag-whitespace.xml",regex:"\\s+"}],whitespace:[{token:"text.whitespace.xml",regex:"\\s+"}],string:[{token:"string.xml",regex:"'",push:[{token:"string.xml",regex:"'",next:"pop"},{defaultToken:"string.xml"}]},{token:"string.xml",regex:'"',push:[{token:"string.xml",regex:'"',next:"pop"},{defaultToken:"string.xml"}]}],attributes:[{token:"entity.other.attribute-name.xml",regex:"(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"},{token:"keyword.operator.attribute-equals.xml",regex:"="},{include:"tag_whitespace"},{include:"attribute_value"}],attribute_value:[{token:"string.attribute-value.xml",regex:"'",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:["meta.tag.punctuation.tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(<)("+n+"(?=\\s|>|$))",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:t+"start"}]}),this.$rules[n+"-end"]=[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:["meta.tag.punctuation.end-tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(|$))",next:n+"-end"},{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\["},{token:"string.cdata.xml",regex:"\\]\\]>"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./css_highlight_rules").CssHighlightRules,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./xml_highlight_rules").XmlHighlightRules,a=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",option:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),f=function(){u.call(this),this.addRules({attributes:[{include:"tag_whitespace"},{token:"entity.other.attribute-name.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"keyword.operator.attribute-equals.xml",regex:"=",push:[{include:"tag_whitespace"},{token:"string.unquoted.attribute-value.html",regex:"[^<>='\"`\\s]+",next:"pop"},{token:"empty",regex:"",next:"pop"}]},{include:"attribute_value"}],tag:[{token:function(e,t){var n=a[t];return["meta.tag.punctuation."+(e=="<"?"":"end-")+"tag-open.xml","meta.tag"+(n?"."+n:"")+".tag-name.xml"]},regex:"(",next:"start"}]}),this.embedTagRules(s,"css-","style"),this.embedTagRules(o,"js-","script"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";function u(e,t){return e.type.lastIndexOf(t+".xml")>-1}var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),a=function(){this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==""&&a!=="'"&&a!='"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,"attribute-value")||u(p,"string")))return{text:"",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,"tag-whitespace")||u(p,"whitespace"))p=h.stepBackward();var d=!c||c.match(/\s/);if(u(p,"attribute-equals")&&(d||c==">")||u(p,"decl-attribute-equals")&&(d||c=="?"))return{text:o+o,selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,"tag-name")||u(f,"tag-whitespace")||u(f,"attribute-name")||u(f,"attribute-equals")||u(f,"attribute-value")))return;if(u(f,"reference.attribute-value"))return;if(u(f,"attribute-value")){var l=f.value.charAt(0);if(l=='"'||l=="'"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,"tag-name"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),"end-tag-open"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,n,r,i){if(i=="\n"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf("tag-close")!==-1){while(f&&f.type.indexOf("tag-name")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf("end-tag")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value==="-1}var r=e("../../lib/oop"),i=e("../../lib/lang"),s=e("../../range").Range,o=e("./fold_mode").FoldMode,u=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName="",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t=="markbeginend"?"end":"":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?"":this._findEndTagInLine(e,n,r.tagName,r.end.column)?"":"start":""},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i";break}}return r}if(l(s,"tag-close"))return r.selfClosing=s.value=="/>",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,"tag-open"))return n.closing=l(t,"end-tag-open"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,"tag-name")?n.tagName=t.value:l(t,"tag-close")&&(n.selfClosing=t.value=="/>",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./mixed").FoldMode,s=e("./xml").FoldMode,o=e("./cstyle").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{"js-":new o,"css-":new o})};r.inherits(u,i)}),ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"],function(e,t,n){"use strict";function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,"tag-name"))i=n.stepBackward();if(i)return i.value}var r=e("../token_iterator").TokenIterator,i=["accesskey","class","contenteditable","contextmenu","dir","draggable","dropzone","hidden","id","inert","itemid","itemprop","itemref","itemscope","itemtype","lang","spellcheck","style","tabindex","title","translate"],s=["onabort","onblur","oncancel","oncanplay","oncanplaythrough","onchange","onclick","onclose","oncontextmenu","oncuechange","ondblclick","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondragstart","ondrop","ondurationchange","onemptied","onended","onerror","onfocus","oninput","oninvalid","onkeydown","onkeypress","onkeyup","onload","onloadeddata","onloadedmetadata","onloadstart","onmousedown","onmousemove","onmouseout","onmouseover","onmouseup","onmousewheel","onpause","onplay","onplaying","onprogress","onratechange","onreset","onscroll","onseeked","onseeking","onselect","onshow","onstalled","onsubmit","onsuspend","ontimeupdate","onvolumechange","onwaiting"],o=i.concat(s),u={html:["manifest"],head:[],title:[],base:["href","target"],link:["href","hreflang","rel","media","type","sizes"],meta:["http-equiv","name","content","charset"],style:["type","media","scoped"],script:["charset","type","src","defer","async"],noscript:["href"],body:["onafterprint","onbeforeprint","onbeforeunload","onhashchange","onmessage","onoffline","onpopstate","onredo","onresize","onstorage","onundo","onunload"],section:[],nav:[],article:["pubdate"],aside:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],footer:[],address:[],main:[],p:[],hr:[],pre:[],blockquote:["cite"],ol:["start","reversed"],ul:[],li:["value"],dl:[],dt:[],dd:[],figure:[],figcaption:[],div:[],a:["href","target","ping","rel","media","hreflang","type"],em:[],strong:[],small:[],s:[],cite:[],q:["cite"],dfn:[],abbr:[],data:[],time:["datetime"],code:[],"var":[],samp:[],kbd:[],sub:[],sup:[],i:[],b:[],u:[],mark:[],ruby:[],rt:[],rp:[],bdi:[],bdo:[],span:[],br:[],wbr:[],ins:["cite","datetime"],del:["cite","datetime"],img:["alt","src","height","width","usemap","ismap"],iframe:["name","src","height","width","sandbox","seamless"],embed:["src","height","width","type"],object:["param","data","type","height","width","usemap","name","form","classid"],param:["name","value"],video:["src","autobuffer","autoplay","loop","controls","width","height","poster"],audio:["src","autobuffer","autoplay","loop","controls"],source:["src","type","media"],track:["kind","src","srclang","label","default"],canvas:["width","height"],map:["name"],area:["shape","coords","href","hreflang","alt","target","media","rel","ping","type"],svg:[],math:[],table:["summary"],caption:[],colgroup:["span"],col:["span"],tbody:[],thead:[],tfoot:[],tr:[],td:["headers","rowspan","colspan"],th:["headers","rowspan","colspan","scope"],form:["accept-charset","action","autocomplete","enctype","method","name","novalidate","target"],fieldset:["disabled","form","name"],legend:[],label:["form","for"],input:["type","accept","alt","autocomplete","checked","disabled","form","formaction","formenctype","formmethod","formnovalidate","formtarget","height","list","max","maxlength","min","multiple","pattern","placeholder","readonly","required","size","src","step","width","files","value"],button:["autofocus","disabled","form","formaction","formenctype","formmethod","formnovalidate","formtarget","name","value","type"],select:["autofocus","disabled","form","multiple","name","size"],datalist:[],optgroup:["disabled","label"],option:["disabled","selected","label","value"],textarea:["autofocus","disabled","form","maxlength","name","placeholder","readonly","required","rows","cols","wrap"],keygen:["autofocus","challenge","disabled","form","keytype","name"],output:["for","form","name"],progress:["value","max"],meter:["value","min","max","low","high","optimum"],details:["open"],summary:[],command:["type","label","icon","disabled","checked","radiogroup","command"],menu:["type","label"],dialog:["open"]},a=Object.keys(u),c=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);return i?f(i,"tag-name")||f(i,"tag-open")||f(i,"end-tag-open")?this.getTagCompletions(e,t,n,r):f(i,"tag-whitespace")||f(i,"attribute-name")?this.getAttributeCompetions(e,t,n,r):[]:[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:"tag",score:Number.MAX_VALUE}})},this.getAttributeCompetions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(u[i])),s.map(function(e){return{caption:e,snippet:e+'="$0"',meta:"attribute",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text").Mode,o=e("./javascript").Mode,u=e("./css").Mode,a=e("./html_highlight_rules").HtmlHighlightRules,f=e("./behaviour/xml").XmlBehaviour,l=e("./folding/html").FoldMode,c=e("./html_completions").HtmlCompletions,h=e("../worker/worker_client").WorkerClient,p=["area","base","br","col","embed","hr","img","input","keygen","link","meta","menuitem","param","source","track","wbr"],d=["li","dt","dd","p","rt","rp","optgroup","option","colgroup","td","th"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({"js-":o,"css-":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:""},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h(["ace"],"ace/mode/html_worker","Worker");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call("setOptions",[{context:this.fragmentContext}]),t.on("error",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/html"}.call(v.prototype),t.Mode=v}) \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-javascript.js b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-javascript.js new file mode 100644 index 000000000..4696564ed --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-javascript.js @@ -0,0 +1 @@ +ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b",s="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[{token:"comment",regex:"\\/\\/",next:"line_comment"},i.getStartRule("doc-start"),{token:"comment",regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+r+")(\\.)(prototype)(\\.)("+r+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\.)("+r+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+r+")(\\.)("+r+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+r+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:r},{token:"keyword.operator",regex:/--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],start:[i.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/",next:"line_comment_regex_allowed"},{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:r},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],comment_regex_allowed:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment",caseInsensitive:!0}],comment:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:"no_regex"},{defaultToken:"comment",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:"comment",regex:"$|^",next:"start"},{defaultToken:"comment",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:"comment",regex:"$|^",next:"no_regex"},{defaultToken:"comment",caseInsensitive:!0}],qqstring:[{token:"constant.language.escape",regex:s},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:s},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)return n.unshift("start",t),"paren";if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:s},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},h=function(){this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==""&&l!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+l+"}",selection:!1};if(h.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])||n.inMultiSelectMode?(h.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){c(n);var p=u.substring(s.column,s.column+1);if(p=="}"){var d=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(d!==null&&h.isAutoInsertedClosing(s,u,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(i=="\n"||i=="\r\n"){c(n);var v="";h.isMaybeInsertedClosing(s,u)&&(v=o.stringRepeat("}",f.maybeInsertedBrackets),h.clearMaybeInsertedClosing());var p=u.substring(s.column,s.column+1);if(p==="}"){var m=r.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!m)return null;var g=this.$getIndent(r.getLine(m.row))}else{if(!v){h.clearMaybeInsertedClosing();return}var g=this.$getIndent(u)}var y=g+r.getTabString();return{text:"\n"+y+"\n"+g+v,selection:[1,y.length,1,y.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),h=f.substring(a.column,a.column+1),p=r.getTokenAt(a.row,a.column),d=r.getTokenAt(a.row,a.column+1);if(l=="\\"&&p&&/escape/.test(p.type))return null;var v=p&&/string/.test(p.type),m=!d||/string/.test(d.type),g;if(h==s)g=v!==m;else{if(v&&!m)return null;if(v&&m)return null;var y=r.$mode.tokenRe;y.lastIndex=0;var b=y.test(l);y.lastIndex=0;var w=y.test(l);if(b||w)return null;if(h&&!/[\s;,.})\]\\]/.test(h))return null;g=!0}return{text:g?s+s:"",selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};h.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(h,i),t.CstyleBehaviour=h}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/)#(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../range").Range,a=e("../worker/worker_client").WorkerClient,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(c.prototype),t.Mode=c}) \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-json.js b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-json.js new file mode 100644 index 000000000..e9e8e9390 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-json.js @@ -0,0 +1 @@ +ace.define("ace/mode/json_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"variable",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]\\s*(?=:)'},{token:"string",regex:'"',next:"string"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:"invalid.illegal",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"invalid.illegal",regex:"\\/\\/.*$"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],string:[{token:"constant.language.escape",regex:/\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|["\\\/bfnrt])/},{token:"string",regex:'[^"\\\\]+'},{token:"string",regex:'"',next:"start"},{token:"string",regex:"",next:"start"}]}};r.inherits(s,i),t.JsonHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},h=function(){this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==""&&l!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+l+"}",selection:!1};if(h.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])||n.inMultiSelectMode?(h.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){c(n);var p=u.substring(s.column,s.column+1);if(p=="}"){var d=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(d!==null&&h.isAutoInsertedClosing(s,u,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(i=="\n"||i=="\r\n"){c(n);var v="";h.isMaybeInsertedClosing(s,u)&&(v=o.stringRepeat("}",f.maybeInsertedBrackets),h.clearMaybeInsertedClosing());var p=u.substring(s.column,s.column+1);if(p==="}"){var m=r.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!m)return null;var g=this.$getIndent(r.getLine(m.row))}else{if(!v){h.clearMaybeInsertedClosing();return}var g=this.$getIndent(u)}var y=g+r.getTabString();return{text:"\n"+y+"\n"+g+v,selection:[1,y.length,1,y.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),h=f.substring(a.column,a.column+1),p=r.getTokenAt(a.row,a.column),d=r.getTokenAt(a.row,a.column+1);if(l=="\\"&&p&&/escape/.test(p.type))return null;var v=p&&/string/.test(p.type),m=!d||/string/.test(d.type),g;if(h==s)g=v!==m;else{if(v&&!m)return null;if(v&&m)return null;var y=r.$mode.tokenRe;y.lastIndex=0;var b=y.test(l);y.lastIndex=0;var w=y.test(l);if(b||w)return null;if(h&&!/[\s;,.})\]\\]/.test(h))return null;g=!0}return{text:g?s+s:"",selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};h.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(h,i),t.CstyleBehaviour=h}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/)#(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define("ace/mode/json",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/json_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/worker/worker_client"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./json_highlight_rules").JsonHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("./behaviour/cstyle").CstyleBehaviour,a=e("./folding/cstyle").FoldMode,f=e("../worker/worker_client").WorkerClient,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(l,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);if(e=="start"){var i=t.match(/^.*[\{\(\[]\s*$/);i&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new f(["ace"],"ace/mode/json_worker","JsonWorker");return t.attachToDocument(e.getDocument()),t.on("error",function(t){e.setAnnotations([t.data])}),t.on("ok",function(){e.clearAnnotations()}),t},this.$id="ace/mode/json"}.call(l.prototype),t.Mode=l}) \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-less.js b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-less.js new file mode 100644 index 000000000..c92ac8d5b --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-less.js @@ -0,0 +1 @@ +ace.define("ace/mode/less_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=i.arrayToMap(function(){var e="-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-".split("|"),t="appearance|background-clip|background-inline-policy|background-origin|background-size|binding|border-bottom-colors|border-left-colors|border-right-colors|border-top-colors|border-end|border-end-color|border-end-style|border-end-width|border-image|border-start|border-start-color|border-start-style|border-start-width|box-align|box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|box-pack|box-sizing|column-count|column-gap|column-width|column-rule|column-rule-width|column-rule-style|column-rule-color|float-edge|font-feature-settings|font-language-override|force-broken-image-icon|image-region|margin-end|margin-start|opacity|outline|outline-color|outline-offset|outline-radius|outline-radius-bottomleft|outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|outline-style|outline-width|padding-end|padding-start|stack-sizing|tab-size|text-blink|text-decoration-color|text-decoration-line|text-decoration-style|transform|transform-origin|transition|transition-delay|transition-duration|transition-property|transition-timing-function|user-focus|user-input|user-modify|user-select|window-shadow|border-radius".split("|"),n="azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index".split("|"),r=[];for(var i=0,s=e.length;i|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",regex:".+"}]}};r.inherits(o,s),t.LessHighlightRules=o}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},h=function(){this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==""&&l!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+l+"}",selection:!1};if(h.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])||n.inMultiSelectMode?(h.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){c(n);var p=u.substring(s.column,s.column+1);if(p=="}"){var d=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(d!==null&&h.isAutoInsertedClosing(s,u,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(i=="\n"||i=="\r\n"){c(n);var v="";h.isMaybeInsertedClosing(s,u)&&(v=o.stringRepeat("}",f.maybeInsertedBrackets),h.clearMaybeInsertedClosing());var p=u.substring(s.column,s.column+1);if(p==="}"){var m=r.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!m)return null;var g=this.$getIndent(r.getLine(m.row))}else{if(!v){h.clearMaybeInsertedClosing();return}var g=this.$getIndent(u)}var y=g+r.getTabString();return{text:"\n"+y+"\n"+g+v,selection:[1,y.length,1,y.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),h=f.substring(a.column,a.column+1),p=r.getTokenAt(a.row,a.column),d=r.getTokenAt(a.row,a.column+1);if(l=="\\"&&p&&/escape/.test(p.type))return null;var v=p&&/string/.test(p.type),m=!d||/string/.test(d.type),g;if(h==s)g=v!==m;else{if(v&&!m)return null;if(v&&m)return null;var y=r.$mode.tokenRe;y.lastIndex=0;var b=y.test(l);y.lastIndex=0;var w=y.test(l);if(b||w)return null;if(h&&!/[\s;,.})\]\\]/.test(h))return null;g=!0}return{text:g?s+s:"",selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};h.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(h,i),t.CstyleBehaviour=h}),ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=function(){this.inherit(s),this.add("colon","insertion",function(e,t,n,r,i){if(i===":"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\s+/)&&(a=u.stepBackward());if(a&&a.type==="support.type"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===":")return{text:"",selection:[1,1]};if(!f.substring(s.column).match(/^\s*;/))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===":"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\s+/)&&(f=a.stepBackward());if(f&&f.type==="support.type"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===";")return i.end.column++,i}}}),this.add("semicolon","insertion",function(e,t,n,r,i){if(i===";"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===";")return{text:"",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/)#(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define("ace/mode/less",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/less_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./less_highlight_rules").LessHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("./behaviour/css").CssBehaviour,a=e("./folding/cstyle").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id="ace/mode/less"}.call(f.prototype),t.Mode=f}) \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-markdown.js b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-markdown.js new file mode 100644 index 000000000..44d4f824a --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-markdown.js @@ -0,0 +1 @@ +ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b",s="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[{token:"comment",regex:"\\/\\/",next:"line_comment"},i.getStartRule("doc-start"),{token:"comment",regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+r+")(\\.)(prototype)(\\.)("+r+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\.)("+r+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+r+")(\\.)("+r+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+r+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:r},{token:"keyword.operator",regex:/--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],start:[i.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/",next:"line_comment_regex_allowed"},{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:r},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],comment_regex_allowed:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment",caseInsensitive:!0}],comment:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:"no_regex"},{defaultToken:"comment",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:"comment",regex:"$|^",next:"start"},{defaultToken:"comment",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:"comment",regex:"$|^",next:"no_regex"},{defaultToken:"comment",caseInsensitive:!0}],qqstring:[{token:"constant.language.escape",regex:s},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:s},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)return n.unshift("start",t),"paren";if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:s},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},h=function(){this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==""&&l!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+l+"}",selection:!1};if(h.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])||n.inMultiSelectMode?(h.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){c(n);var p=u.substring(s.column,s.column+1);if(p=="}"){var d=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(d!==null&&h.isAutoInsertedClosing(s,u,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(i=="\n"||i=="\r\n"){c(n);var v="";h.isMaybeInsertedClosing(s,u)&&(v=o.stringRepeat("}",f.maybeInsertedBrackets),h.clearMaybeInsertedClosing());var p=u.substring(s.column,s.column+1);if(p==="}"){var m=r.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!m)return null;var g=this.$getIndent(r.getLine(m.row))}else{if(!v){h.clearMaybeInsertedClosing();return}var g=this.$getIndent(u)}var y=g+r.getTabString();return{text:"\n"+y+"\n"+g+v,selection:[1,y.length,1,y.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),h=f.substring(a.column,a.column+1),p=r.getTokenAt(a.row,a.column),d=r.getTokenAt(a.row,a.column+1);if(l=="\\"&&p&&/escape/.test(p.type))return null;var v=p&&/string/.test(p.type),m=!d||/string/.test(d.type),g;if(h==s)g=v!==m;else{if(v&&!m)return null;if(v&&m)return null;var y=r.$mode.tokenRe;y.lastIndex=0;var b=y.test(l);y.lastIndex=0;var w=y.test(l);if(b||w)return null;if(h&&!/[\s;,.})\]\\]/.test(h))return null;g=!0}return{text:g?s+s:"",selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};h.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(h,i),t.CstyleBehaviour=h}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/)#(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../range").Range,a=e("../worker/worker_client").WorkerClient,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(e){this.$rules={start:[{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:["punctuation.xml-decl.xml","keyword.xml-decl.xml"],regex:"(<\\?)(xml)(?=[\\s])",next:"xml_decl",caseInsensitive:!0},{token:["punctuation.instruction.xml","keyword.instruction.xml"],regex:"(<\\?)([-_a-zA-Z0-9]+)",next:"processing_instruction"},{token:"comment.xml",regex:"<\\!--",next:"comment"},{token:["xml-pe.doctype.xml","xml-pe.doctype.xml"],regex:"(<\\!)(DOCTYPE)(?=[\\s])",next:"doctype",caseInsensitive:!0},{include:"tag"},{token:"text.end-tag-open.xml",regex:"",next:"start"}],processing_instruction:[{token:"punctuation.instruction.xml",regex:"\\?>",next:"start"},{defaultToken:"instruction.xml"}],doctype:[{include:"whitespace"},{include:"string"},{token:"xml-pe.doctype.xml",regex:">",next:"start"},{token:"xml-pe.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"punctuation.int-subset",regex:"\\[",push:"int_subset"}],int_subset:[{token:"text.xml",regex:"\\s+"},{token:"punctuation.int-subset.xml",regex:"]",next:"pop"},{token:["punctuation.markup-decl.xml","keyword.markup-decl.xml"],regex:"(<\\!)([-_a-zA-Z0-9]+)",push:[{token:"text",regex:"\\s+"},{token:"punctuation.markup-decl.xml",regex:">",next:"pop"},{include:"string"}]}],cdata:[{token:"string.cdata.xml",regex:"\\]\\]>",next:"start"},{token:"text.xml",regex:"\\s+"},{token:"text.xml",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment.xml",regex:"-->",next:"start"},{defaultToken:"comment.xml"}],reference:[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],attr_reference:[{token:"constant.language.escape.reference.attribute-value.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],tag:[{token:["meta.tag.punctuation.tag-open.xml","meta.tag.punctuation.end-tag-open.xml","meta.tag.tag-name.xml"],regex:"(?:(<)|(",next:"start"}]}],tag_whitespace:[{token:"text.tag-whitespace.xml",regex:"\\s+"}],whitespace:[{token:"text.whitespace.xml",regex:"\\s+"}],string:[{token:"string.xml",regex:"'",push:[{token:"string.xml",regex:"'",next:"pop"},{defaultToken:"string.xml"}]},{token:"string.xml",regex:'"',push:[{token:"string.xml",regex:'"',next:"pop"},{defaultToken:"string.xml"}]}],attributes:[{token:"entity.other.attribute-name.xml",regex:"(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"},{token:"keyword.operator.attribute-equals.xml",regex:"="},{include:"tag_whitespace"},{include:"attribute_value"}],attribute_value:[{token:"string.attribute-value.xml",regex:"'",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:["meta.tag.punctuation.tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(<)("+n+"(?=\\s|>|$))",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:t+"start"}]}),this.$rules[n+"-end"]=[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:["meta.tag.punctuation.end-tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(|$))",next:n+"-end"},{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\["},{token:"string.cdata.xml",regex:"\\]\\]>"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";function u(e,t){return e.type.lastIndexOf(t+".xml")>-1}var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),a=function(){this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==""&&a!=="'"&&a!='"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,"attribute-value")||u(p,"string")))return{text:"",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,"tag-whitespace")||u(p,"whitespace"))p=h.stepBackward();var d=!c||c.match(/\s/);if(u(p,"attribute-equals")&&(d||c==">")||u(p,"decl-attribute-equals")&&(d||c=="?"))return{text:o+o,selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,"tag-name")||u(f,"tag-whitespace")||u(f,"attribute-name")||u(f,"attribute-equals")||u(f,"attribute-value")))return;if(u(f,"reference.attribute-value"))return;if(u(f,"attribute-value")){var l=f.value.charAt(0);if(l=='"'||l=="'"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,"tag-name"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),"end-tag-open"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,n,r,i){if(i=="\n"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf("tag-close")!==-1){while(f&&f.type.indexOf("tag-name")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf("end-tag")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value==="-1}var r=e("../../lib/oop"),i=e("../../lib/lang"),s=e("../../range").Range,o=e("./fold_mode").FoldMode,u=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName="",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t=="markbeginend"?"end":"":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?"":this._findEndTagInLine(e,n,r.tagName,r.end.column)?"":"start":""},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i";break}}return r}if(l(s,"tag-close"))return r.selfClosing=s.value=="/>",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,"tag-open"))return n.closing=l(t,"end-tag-open"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,"tag-name")?n.tagName=t.value:l(t,"tag-close")&&(n.selfClosing=t.value=="/>",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define("ace/mode/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/xml_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/xml"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text").Mode,o=e("./xml_highlight_rules").XmlHighlightRules,u=e("./behaviour/xml").XmlBehaviour,a=e("./folding/xml").FoldMode,f=function(){this.HighlightRules=o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,s),function(){this.voidElements=i.arrayToMap([]),this.blockComment={start:""},this.$id="ace/mode/xml"}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero",f=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",l=t.supportConstantFonts="arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0);this.$rules={start:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"@.*?{",push:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"\\}",next:"pop"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}],ruleset:[{token:"paren.rparen",regex:"\\}",next:"pop"},{token:"comment",regex:"\\/\\*",push:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{token:["support.function","string","support.function"],regex:"(url\\()(.*)(\\))"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=function(){this.inherit(s),this.add("colon","insertion",function(e,t,n,r,i){if(i===":"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\s+/)&&(a=u.stepBackward());if(a&&a.type==="support.type"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===":")return{text:"",selection:[1,1]};if(!f.substring(s.column).match(/^\s*;/))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===":"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\s+/)&&(f=a.stepBackward());if(f&&f.type==="support.type"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===";")return i.end.column++,i}}}),this.add("semicolon","insertion",function(e,t,n,r,i){if(i===";"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===";")return{text:"",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./css_highlight_rules").CssHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./behaviour/css").CssBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules="cStyle",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("csslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/css"}.call(l.prototype),t.Mode=l}),ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./css_highlight_rules").CssHighlightRules,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./xml_highlight_rules").XmlHighlightRules,a=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",option:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),f=function(){u.call(this),this.addRules({attributes:[{include:"tag_whitespace"},{token:"entity.other.attribute-name.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"keyword.operator.attribute-equals.xml",regex:"=",push:[{include:"tag_whitespace"},{token:"string.unquoted.attribute-value.html",regex:"[^<>='\"`\\s]+",next:"pop"},{token:"empty",regex:"",next:"pop"}]},{include:"attribute_value"}],tag:[{token:function(e,t){var n=a[t];return["meta.tag.punctuation."+(e=="<"?"":"end-")+"tag-open.xml","meta.tag"+(n?"."+n:"")+".tag-name.xml"]},regex:"(",next:"start"}]}),this.embedTagRules(s,"css-","style"),this.embedTagRules(o,"js-","script"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!="string"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):""},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./mixed").FoldMode,s=e("./xml").FoldMode,o=e("./cstyle").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{"js-":new o,"css-":new o})};r.inherits(u,i)}),ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"],function(e,t,n){"use strict";function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,"tag-name"))i=n.stepBackward();if(i)return i.value}var r=e("../token_iterator").TokenIterator,i=["accesskey","class","contenteditable","contextmenu","dir","draggable","dropzone","hidden","id","inert","itemid","itemprop","itemref","itemscope","itemtype","lang","spellcheck","style","tabindex","title","translate"],s=["onabort","onblur","oncancel","oncanplay","oncanplaythrough","onchange","onclick","onclose","oncontextmenu","oncuechange","ondblclick","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondragstart","ondrop","ondurationchange","onemptied","onended","onerror","onfocus","oninput","oninvalid","onkeydown","onkeypress","onkeyup","onload","onloadeddata","onloadedmetadata","onloadstart","onmousedown","onmousemove","onmouseout","onmouseover","onmouseup","onmousewheel","onpause","onplay","onplaying","onprogress","onratechange","onreset","onscroll","onseeked","onseeking","onselect","onshow","onstalled","onsubmit","onsuspend","ontimeupdate","onvolumechange","onwaiting"],o=i.concat(s),u={html:["manifest"],head:[],title:[],base:["href","target"],link:["href","hreflang","rel","media","type","sizes"],meta:["http-equiv","name","content","charset"],style:["type","media","scoped"],script:["charset","type","src","defer","async"],noscript:["href"],body:["onafterprint","onbeforeprint","onbeforeunload","onhashchange","onmessage","onoffline","onpopstate","onredo","onresize","onstorage","onundo","onunload"],section:[],nav:[],article:["pubdate"],aside:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],footer:[],address:[],main:[],p:[],hr:[],pre:[],blockquote:["cite"],ol:["start","reversed"],ul:[],li:["value"],dl:[],dt:[],dd:[],figure:[],figcaption:[],div:[],a:["href","target","ping","rel","media","hreflang","type"],em:[],strong:[],small:[],s:[],cite:[],q:["cite"],dfn:[],abbr:[],data:[],time:["datetime"],code:[],"var":[],samp:[],kbd:[],sub:[],sup:[],i:[],b:[],u:[],mark:[],ruby:[],rt:[],rp:[],bdi:[],bdo:[],span:[],br:[],wbr:[],ins:["cite","datetime"],del:["cite","datetime"],img:["alt","src","height","width","usemap","ismap"],iframe:["name","src","height","width","sandbox","seamless"],embed:["src","height","width","type"],object:["param","data","type","height","width","usemap","name","form","classid"],param:["name","value"],video:["src","autobuffer","autoplay","loop","controls","width","height","poster"],audio:["src","autobuffer","autoplay","loop","controls"],source:["src","type","media"],track:["kind","src","srclang","label","default"],canvas:["width","height"],map:["name"],area:["shape","coords","href","hreflang","alt","target","media","rel","ping","type"],svg:[],math:[],table:["summary"],caption:[],colgroup:["span"],col:["span"],tbody:[],thead:[],tfoot:[],tr:[],td:["headers","rowspan","colspan"],th:["headers","rowspan","colspan","scope"],form:["accept-charset","action","autocomplete","enctype","method","name","novalidate","target"],fieldset:["disabled","form","name"],legend:[],label:["form","for"],input:["type","accept","alt","autocomplete","checked","disabled","form","formaction","formenctype","formmethod","formnovalidate","formtarget","height","list","max","maxlength","min","multiple","pattern","placeholder","readonly","required","size","src","step","width","files","value"],button:["autofocus","disabled","form","formaction","formenctype","formmethod","formnovalidate","formtarget","name","value","type"],select:["autofocus","disabled","form","multiple","name","size"],datalist:[],optgroup:["disabled","label"],option:["disabled","selected","label","value"],textarea:["autofocus","disabled","form","maxlength","name","placeholder","readonly","required","rows","cols","wrap"],keygen:["autofocus","challenge","disabled","form","keytype","name"],output:["for","form","name"],progress:["value","max"],meter:["value","min","max","low","high","optimum"],details:["open"],summary:[],command:["type","label","icon","disabled","checked","radiogroup","command"],menu:["type","label"],dialog:["open"]},a=Object.keys(u),c=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);return i?f(i,"tag-name")||f(i,"tag-open")||f(i,"end-tag-open")?this.getTagCompletions(e,t,n,r):f(i,"tag-whitespace")||f(i,"attribute-name")?this.getAttributeCompetions(e,t,n,r):[]:[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:"tag",score:Number.MAX_VALUE}})},this.getAttributeCompetions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(u[i])),s.map(function(e){return{caption:e,snippet:e+'="$0"',meta:"attribute",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text").Mode,o=e("./javascript").Mode,u=e("./css").Mode,a=e("./html_highlight_rules").HtmlHighlightRules,f=e("./behaviour/xml").XmlBehaviour,l=e("./folding/html").FoldMode,c=e("./html_completions").HtmlCompletions,h=e("../worker/worker_client").WorkerClient,p=["area","base","br","col","embed","hr","img","input","keygen","link","meta","menuitem","param","source","track","wbr"],d=["li","dt","dd","p","rt","rp","optgroup","option","colgroup","td","th"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({"js-":o,"css-":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:""},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h(["ace"],"ace/mode/html_worker","Worker");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call("setOptions",[{context:this.fragmentContext}]),t.on("error",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/html"}.call(v.prototype),t.Mode=v}),ace.define("ace/mode/markdown_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules","ace/mode/html_highlight_rules","ace/mode/css_highlight_rules"],function(e,t,n){"use strict";function c(e,t){return{token:"support.function",regex:"^\\s*```"+e+"\\s*$",push:t+"start"}}var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./xml_highlight_rules").XmlHighlightRules,a=e("./html_highlight_rules").HtmlHighlightRules,f=e("./css_highlight_rules").CssHighlightRules,l=function(e){return"(?:[^"+i.escapeRegExp(e)+"\\\\]|\\\\.)*"},h=function(){a.call(this),this.$rules.start.unshift({token:"empty_line",regex:"^$",next:"allowBlock"},{token:"markup.heading.1",regex:"^=+(?=\\s*$)"},{token:"markup.heading.2",regex:"^\\-+(?=\\s*$)"},{token:function(e){return"markup.heading."+e.length},regex:/^#{1,6}(?=\s*[^ #]|\s+#.)/,next:"header"},c("(?:javascript|js)","jscode-"),c("xml","xmlcode-"),c("html","htmlcode-"),c("css","csscode-"),{token:"support.function",regex:"^\\s*```\\s*\\S*(?:{.*?\\})?\\s*$",next:"githubblock"},{token:"string.blockquote",regex:"^\\s*>\\s*(?:[*+-]|\\d+\\.)?\\s+",next:"blockquote"},{token:"constant",regex:"^ {0,2}(?:(?: ?\\* ?){3,}|(?: ?\\- ?){3,}|(?: ?\\_ ?){3,})\\s*$",next:"allowBlock"},{token:"markup.list",regex:"^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+",next:"listblock-start"},{include:"basic"}),this.addRules({basic:[{token:"constant.language.escape",regex:/\\[\\`*_{}\[\]()#+\-.!]/},{token:"support.function",regex:"(`+)(.*?[^`])(\\1)"},{token:["text","constant","text","url","string","text"],regex:'^([ ]{0,3}\\[)([^\\]]+)(\\]:\\s*)([^ ]+)(\\s*(?:["][^"]+["])?(\\s*))$'},{token:["text","string","text","constant","text"],regex:"(\\[)("+l("]")+")(\\]s*\\[)("+l("]")+")(\\])"},{token:["text","string","text","markup.underline","string","text"],regex:"(\\[)("+l("]")+")(\\]\\()"+'((?:[^\\)\\s\\\\]|\\\\.|\\s(?=[^"]))*)'+'(\\s*"'+l('"')+'"\\s*)?'+"(\\))"},{token:"string.strong",regex:"([*]{2}|[_]{2}(?=\\S))(.*?\\S[*_]*)(\\1)"},{token:"string.emphasis",regex:"([*]|[_](?=\\S))(.*?\\S[*_]*)(\\1)"},{token:["text","url","text"],regex:"(<)((?:https?|ftp|dict):[^'\">\\s]+|(?:mailto:)?[-.\\w]+\\@[-a-z0-9]+(?:\\.[-a-z0-9]+)*\\.[a-z]+)(>)"}],allowBlock:[{token:"support.function",regex:"^ {4}.+",next:"allowBlock"},{token:"empty",regex:"",next:"start"}],header:[{regex:"$",next:"start"},{include:"basic"},{defaultToken:"heading"}],"listblock-start":[{token:"support.variable",regex:/(?:\[[ x]\])?/,next:"listblock"}],listblock:[{token:"empty_line",regex:"^$",next:"start"},{token:"markup.list",regex:"^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+",next:"listblock-start"},{include:"basic",noEscape:!0},{token:"support.function",regex:"^\\s*```\\s*[a-zA-Z]*(?:{.*?\\})?\\s*$",next:"githubblock"},{defaultToken:"list"}],blockquote:[{token:"empty_line",regex:"^\\s*$",next:"start"},{token:"string.blockquote",regex:"^\\s*>\\s*(?:[*+-]|\\d+\\.)?\\s+",next:"blockquote"},{include:"basic",noEscape:!0},{defaultToken:"string.blockquote"}],githubblock:[{token:"support.function",regex:"^\\s*```",next:"start"},{token:"support.function",regex:".+"}]}),this.embedRules(o,"jscode-",[{token:"support.function",regex:"^\\s*```",next:"pop"}]),this.embedRules(a,"htmlcode-",[{token:"support.function",regex:"^\\s*```",next:"pop"}]),this.embedRules(f,"csscode-",[{token:"support.function",regex:"^\\s*```",next:"pop"}]),this.embedRules(u,"xmlcode-",[{token:"support.function",regex:"^\\s*```",next:"pop"}]),this.normalizeRules()};r.inherits(h,s),t.MarkdownHighlightRules=h}),ace.define("ace/mode/folding/markdown",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.foldingStartMarker=/^(?:[=-]+\s*$|#{1,6} |`{3})/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?r[0]=="`"?e.bgTokenizer.getState(n)=="start"?"end":"start":"start":""},this.getFoldWidgetRange=function(e,t,n){function l(t){return f=e.getTokens(t)[0],f&&f.type.lastIndexOf(c,0)===0}function h(){var e=f.value[0];return e=="="?6:e=="-"?5:7-f.value.search(/[^#]/)}var r=e.getLine(n),i=r.length,o=e.getLength(),u=n,a=n;if(!r.match(this.foldingStartMarker))return;if(r[0]=="`"){if(e.bgTokenizer.getState(n)!=="start"){while(++n0){r=e.getLine(n);if(r[0]=="`"&r.substring(0,3)=="```")break}return new s(n,r.length,u,0)}var f,c="markup.heading";if(l(n)){var p=h();while(++n=p)break}a=n-(!f||["=","-"].indexOf(f.value[0])==-1?1:2);if(a>u)while(a>u&&/^\s*$/.test(e.getLine(a)))a--;if(a>u){var v=e.getLine(a).length;return new s(u,i,a,v)}}}}.call(o.prototype)}),ace.define("ace/mode/markdown",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript","ace/mode/xml","ace/mode/html","ace/mode/markdown_highlight_rules","ace/mode/folding/markdown"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript").Mode,o=e("./xml").Mode,u=e("./html").Mode,a=e("./markdown_highlight_rules").MarkdownHighlightRules,f=e("./folding/markdown").FoldMode,l=function(){this.HighlightRules=a,this.createModeDelegates({"js-":s,"xml-":o,"html-":u}),this.foldingRules=new f};r.inherits(l,i),function(){this.type="text",this.blockComment={start:""},this.getNextLineIndent=function(e,t,n){if(e=="listblock"){var r=/^(\s*)(?:([-+*])|(\d+)\.)(\s+)/.exec(t);if(!r)return"";var i=r[2];return i||(i=parseInt(r[3],10)+1+"."),r[1]+i+r[4]}return this.$getIndent(t)},this.$id="ace/mode/markdown"}.call(l.prototype),t.Mode=l}) \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-mysql.js b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-mysql.js new file mode 100644 index 000000000..733d69269 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-mysql.js @@ -0,0 +1 @@ +ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/mysql_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./doc_comment_highlight_rules").DocCommentHighlightRules,o=e("./text_highlight_rules").TextHighlightRules,u=function(){function i(e){var t=e.start,n=e.escape;return{token:"string.start",regex:t,next:[{token:"constant.language.escape",regex:n},{token:"string.end",next:"start",regex:t},{defaultToken:"string"}]}}var e="alter|and|as|asc|between|count|create|delete|desc|distinct|drop|from|having|in|insert|into|is|join|like|not|on|or|order|select|set|table|union|update|values|where|accessible|action|add|after|algorithm|all|analyze|asensitive|at|authors|auto_increment|autocommit|avg|avg_row_length|before|binary|binlog|both|btree|cache|call|cascade|cascaded|case|catalog_name|chain|change|changed|character|check|checkpoint|checksum|class_origin|client_statistics|close|coalesce|code|collate|collation|collations|column|columns|comment|commit|committed|completion|concurrent|condition|connection|consistent|constraint|contains|continue|contributors|convert|cross|current_date|current_time|current_timestamp|current_user|cursor|data|database|databases|day_hour|day_microsecond|day_minute|day_second|deallocate|dec|declare|default|delay_key_write|delayed|delimiter|des_key_file|describe|deterministic|dev_pop|dev_samp|deviance|directory|disable|discard|distinctrow|div|dual|dumpfile|each|elseif|enable|enclosed|end|ends|engine|engines|enum|errors|escape|escaped|even|event|events|every|execute|exists|exit|explain|extended|fast|fetch|field|fields|first|flush|for|force|foreign|found_rows|full|fulltext|function|general|global|grant|grants|group|groupby_concat|handler|hash|help|high_priority|hosts|hour_microsecond|hour_minute|hour_second|if|ignore|ignore_server_ids|import|index|index_statistics|infile|inner|innodb|inout|insensitive|insert_method|install|interval|invoker|isolation|iterate|key|keys|kill|language|last|leading|leave|left|level|limit|linear|lines|list|load|local|localtime|localtimestamp|lock|logs|low_priority|master|master_heartbeat_period|master_ssl_verify_server_cert|masters|match|max|max_rows|maxvalue|message_text|middleint|migrate|min|min_rows|minute_microsecond|minute_second|mod|mode|modifies|modify|mutex|mysql_errno|natural|next|no|no_write_to_binlog|offline|offset|one|online|open|optimize|option|optionally|out|outer|outfile|pack_keys|parser|partition|partitions|password|phase|plugin|plugins|prepare|preserve|prev|primary|privileges|procedure|processlist|profile|profiles|purge|query|quick|range|read|read_write|reads|real|rebuild|recover|references|regexp|relaylog|release|remove|rename|reorganize|repair|repeatable|replace|require|resignal|restrict|resume|return|returns|revoke|right|rlike|rollback|rollup|row|row_format|rtree|savepoint|schedule|schema|schema_name|schemas|second_microsecond|security|sensitive|separator|serializable|server|session|share|show|signal|slave|slow|smallint|snapshot|soname|spatial|specific|sql|sql_big_result|sql_buffer_result|sql_cache|sql_calc_found_rows|sql_no_cache|sql_small_result|sqlexception|sqlstate|sqlwarning|ssl|start|starting|starts|status|std|stddev|stddev_pop|stddev_samp|storage|straight_join|subclass_origin|sum|suspend|table_name|table_statistics|tables|tablespace|temporary|terminated|to|trailing|transaction|trigger|triggers|truncate|uncommitted|undo|uninstall|unique|unlock|upgrade|usage|use|use_frm|user|user_resources|user_statistics|using|utc_date|utc_time|utc_timestamp|value|variables|varying|view|views|warnings|when|while|with|work|write|xa|xor|year_month|zerofill|begin|do|then|else|loop|repeat",t="by|bool|boolean|bit|blob|decimal|double|enum|float|long|longblob|longtext|medium|mediumblob|mediumint|mediumtext|time|timestamp|tinyblob|tinyint|tinytext|text|bigint|int|int1|int2|int3|int4|int8|integer|float|float4|float8|double|char|varbinary|varchar|varcharacter|precision|date|datetime|year|unsigned|signed|numeric",n="charset|clear|connect|edit|ego|exit|go|help|nopager|notee|nowarning|pager|print|prompt|quit|rehash|source|status|system|tee",r=this.createKeywordMapper({"support.function":t,keyword:e,constant:"false|true|null|unknown|date|time|timestamp|ODBCdotTable|zerolessFloat","variable.language":n},"identifier",!0);this.$rules={start:[{token:"comment",regex:"(?:-- |#).*$"},i({start:'"',escape:/\\[0'"bnrtZ\\%_]?/}),i({start:"'",escape:/\\[0'"bnrtZ\\%_]?/}),s.getStartRule("doc-start"),{token:"comment",regex:/\/\*/,next:"comment"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+|[xX]'[0-9a-fA-F]+'|0[bB][01]+|[bB]'[01]+'/},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"constant.class",regex:"@@?[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"constant.buildin",regex:"`[^`]*`"},{token:"keyword.operator",regex:"\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|="},{token:"paren.lparen",regex:"[\\(]"},{token:"paren.rparen",regex:"[\\)]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}]},this.embedRules(s,"doc-",[s.getEndRule("start")]),this.normalizeRules()};r.inherits(u,o),t.MysqlHighlightRules=u}),ace.define("ace/mode/mysql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/mysql_highlight_rules","ace/range"],function(e,t,n){var r=e("../lib/oop"),i=e("../mode/text").Mode,s=e("./mysql_highlight_rules").MysqlHighlightRules,o=e("../range").Range,u=function(){this.HighlightRules=s};r.inherits(u,i),function(){this.lineCommentStart=["--","#"],this.blockComment={start:"/*",end:"*/"},this.$id="ace/mode/mysql"}.call(u.prototype),t.Mode=u}) \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-php.js b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-php.js new file mode 100644 index 000000000..8d0f83fd7 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-php.js @@ -0,0 +1 @@ +ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero",f=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",l=t.supportConstantFonts="arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0);this.$rules={start:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"@.*?{",push:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"\\}",next:"pop"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}],ruleset:[{token:"paren.rparen",regex:"\\}",next:"pop"},{token:"comment",regex:"\\/\\*",push:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{token:["support.function","string","support.function"],regex:"(url\\()(.*)(\\))"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b",s="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[{token:"comment",regex:"\\/\\/",next:"line_comment"},i.getStartRule("doc-start"),{token:"comment",regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+r+")(\\.)(prototype)(\\.)("+r+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\.)("+r+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+r+")(\\.)("+r+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+r+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:r},{token:"keyword.operator",regex:/--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],start:[i.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/",next:"line_comment_regex_allowed"},{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:r},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],comment_regex_allowed:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment",caseInsensitive:!0}],comment:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:"no_regex"},{defaultToken:"comment",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:"comment",regex:"$|^",next:"start"},{defaultToken:"comment",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:"comment",regex:"$|^",next:"no_regex"},{defaultToken:"comment",caseInsensitive:!0}],qqstring:[{token:"constant.language.escape",regex:s},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:s},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)return n.unshift("start",t),"paren";if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:s},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(e){this.$rules={start:[{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:["punctuation.xml-decl.xml","keyword.xml-decl.xml"],regex:"(<\\?)(xml)(?=[\\s])",next:"xml_decl",caseInsensitive:!0},{token:["punctuation.instruction.xml","keyword.instruction.xml"],regex:"(<\\?)([-_a-zA-Z0-9]+)",next:"processing_instruction"},{token:"comment.xml",regex:"<\\!--",next:"comment"},{token:["xml-pe.doctype.xml","xml-pe.doctype.xml"],regex:"(<\\!)(DOCTYPE)(?=[\\s])",next:"doctype",caseInsensitive:!0},{include:"tag"},{token:"text.end-tag-open.xml",regex:"",next:"start"}],processing_instruction:[{token:"punctuation.instruction.xml",regex:"\\?>",next:"start"},{defaultToken:"instruction.xml"}],doctype:[{include:"whitespace"},{include:"string"},{token:"xml-pe.doctype.xml",regex:">",next:"start"},{token:"xml-pe.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"punctuation.int-subset",regex:"\\[",push:"int_subset"}],int_subset:[{token:"text.xml",regex:"\\s+"},{token:"punctuation.int-subset.xml",regex:"]",next:"pop"},{token:["punctuation.markup-decl.xml","keyword.markup-decl.xml"],regex:"(<\\!)([-_a-zA-Z0-9]+)",push:[{token:"text",regex:"\\s+"},{token:"punctuation.markup-decl.xml",regex:">",next:"pop"},{include:"string"}]}],cdata:[{token:"string.cdata.xml",regex:"\\]\\]>",next:"start"},{token:"text.xml",regex:"\\s+"},{token:"text.xml",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment.xml",regex:"-->",next:"start"},{defaultToken:"comment.xml"}],reference:[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],attr_reference:[{token:"constant.language.escape.reference.attribute-value.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],tag:[{token:["meta.tag.punctuation.tag-open.xml","meta.tag.punctuation.end-tag-open.xml","meta.tag.tag-name.xml"],regex:"(?:(<)|(",next:"start"}]}],tag_whitespace:[{token:"text.tag-whitespace.xml",regex:"\\s+"}],whitespace:[{token:"text.whitespace.xml",regex:"\\s+"}],string:[{token:"string.xml",regex:"'",push:[{token:"string.xml",regex:"'",next:"pop"},{defaultToken:"string.xml"}]},{token:"string.xml",regex:'"',push:[{token:"string.xml",regex:'"',next:"pop"},{defaultToken:"string.xml"}]}],attributes:[{token:"entity.other.attribute-name.xml",regex:"(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"},{token:"keyword.operator.attribute-equals.xml",regex:"="},{include:"tag_whitespace"},{include:"attribute_value"}],attribute_value:[{token:"string.attribute-value.xml",regex:"'",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:["meta.tag.punctuation.tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(<)("+n+"(?=\\s|>|$))",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:t+"start"}]}),this.$rules[n+"-end"]=[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:["meta.tag.punctuation.end-tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(|$))",next:n+"-end"},{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\["},{token:"string.cdata.xml",regex:"\\]\\]>"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./css_highlight_rules").CssHighlightRules,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./xml_highlight_rules").XmlHighlightRules,a=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",option:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),f=function(){u.call(this),this.addRules({attributes:[{include:"tag_whitespace"},{token:"entity.other.attribute-name.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"keyword.operator.attribute-equals.xml",regex:"=",push:[{include:"tag_whitespace"},{token:"string.unquoted.attribute-value.html",regex:"[^<>='\"`\\s]+",next:"pop"},{token:"empty",regex:"",next:"pop"}]},{include:"attribute_value"}],tag:[{token:function(e,t){var n=a[t];return["meta.tag.punctuation."+(e=="<"?"":"end-")+"tag-open.xml","meta.tag"+(n?"."+n:"")+".tag-name.xml"]},regex:"(",next:"start"}]}),this.embedTagRules(s,"css-","style"),this.embedTagRules(o,"js-","script"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define("ace/mode/php_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules","ace/mode/html_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./doc_comment_highlight_rules").DocCommentHighlightRules,o=e("./text_highlight_rules").TextHighlightRules,u=e("./html_highlight_rules").HtmlHighlightRules,a=function(){var e=s,t=i.arrayToMap("abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|aggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|apache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|apache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|apc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|apc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|apd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|apd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|array_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|array_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|array_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|array_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|array_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|array_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|atan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|bbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|bcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|bcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|bcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|bindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|cachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|cairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|cairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|cairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|cairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|cairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|cairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|cairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|cairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|cairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|cairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|cairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|cairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|cairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|cairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|cairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|cairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|cairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|cairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|cairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|cairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|cairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|cairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|cairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|cairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|cairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|cairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|cal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|chdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|class_parents|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|classkit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|com_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|com_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|convert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|counter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|crack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|ctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|cubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|cubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|cubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|cubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|cubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|cubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|cubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|cubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|cubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|cubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|cubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|curl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|curl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|curl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|date_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|date_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|date_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|dateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|db2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|db2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|db2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|db2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|db2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|db2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|dba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|dbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|dbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|dbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|dbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|dbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|dbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|dbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|dbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|define_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|dio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|dns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|domattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|domdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|domdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|domdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|domdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|domdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|domelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|domelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|domexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|domnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|domnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|domnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|domnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|domnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|domtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|domxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|domxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|enchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|enchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|enchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|enchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|eregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|event_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|event_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|event_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|event_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|expm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|fam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|fbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|fbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|fbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|fbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|fbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|fbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|fbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|fbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|fdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|fdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|fdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|fdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|file_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|filepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|filetype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|finfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|forward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|ftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|ftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|ftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|func_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|gearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|geoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|geoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|get_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|get_declared_interfaces|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|get_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|get_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|getcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|gethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|getmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|getrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|gettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|gmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|gmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|gmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|gnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|gnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|gnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|grapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|gupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|gupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|gupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|gupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|gupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|gupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|gupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|gupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|gupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|gzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|halt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|haruannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|harudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|harudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|harudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|harudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|harudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|harudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|harudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|harudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|haruencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|harufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|harufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|haruimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|haruoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|harupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|harupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|harupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|harupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|harupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|harupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|harupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|harupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|harupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|harupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|harupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|harupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|harupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|harupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|hash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|header_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|html_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|http_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|http_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|http_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|http_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|http_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|http_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|http_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|http_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|httpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|httpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|httpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|httpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|httpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|httpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|httpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|httpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|httpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|httprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|httprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|httprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|httprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|httprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|httprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|httprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|httprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|httprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|httprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|httprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|httprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|httprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|httpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|httpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|httpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|httpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|httpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|httpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|httpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|hw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|hw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|hw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|hw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|hw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|hw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|hw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|hwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|hwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|hwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|hwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|hwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|hwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|hwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|ibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|ibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|ibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|ibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|ibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|ibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|ibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|iconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|id3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|idn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|ifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|ifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|ifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|ifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|iis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|iis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|iis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|imagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|imagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|imagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|imagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|imagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|imagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|imagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|imagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|imagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|imagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|imagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|imagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|imagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|imagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|imagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|imagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|imagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|imagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|imagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|imagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|imagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|imagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|imagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|imagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|imagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|imagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|imagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|imagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|imagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|imagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|imagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|imagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|imagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|imagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|imagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|imagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|imagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|imagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|imagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|imagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|imagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|imagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|imagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|imagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|imagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|imagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|imagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|imagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|imagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|imagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|imagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|imagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|imagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|imagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|imagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|imagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|imagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|imagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|imagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|imagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|imagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|imagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|imagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|imagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|imagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|imagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|imagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|imagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|imagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|imagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|imagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|imagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|imagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|imagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|imagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|imagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|imagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|imagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|imagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|imagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|imagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|imagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|imagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|imagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|imagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|imagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|imagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|imagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|imagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|imagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|imagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|imagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|imagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|imagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|imagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|imagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|imagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|imagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|imagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|imagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|imagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|imagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|imap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|imap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|imap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|imap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|imap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|imap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|imap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|imap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|include_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|ingres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|ingres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|ingres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|ingres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|ingres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|inotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|intldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|is_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|is_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|iscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|iterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|jddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|json_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|kadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|kadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|ldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|ldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|ldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|ldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|ldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|libxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|limititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|lzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|m_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|m_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|m_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|m_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|mailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|mailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|mailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|maxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|maxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|maxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|maxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|maxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|maxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|maxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|maxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|maxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|maxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|maxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|maxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|maxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|maxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|maxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|mb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|mb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|mb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|mb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|mb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|mb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|mb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|mcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|mcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|mcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|mcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|mcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|mcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|mdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|mhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|ming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|mongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|mongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|mongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|mqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|mqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|msession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|msession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|msg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|msql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|msql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|msql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|msql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|mssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|mssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|mssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|mssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|mssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|mysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|mysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|mysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|mysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|mysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|mysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_bind_param|mysqli_bind_result|mysqli_client_encoding|mysqli_connect|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_escape_string|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_report|mysqli_result|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_set_opt|mysqli_slave_query|mysqli_stmt|mysqli_warning|mysqlnd_ms_get_stats|mysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|mysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|ncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|ncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|ncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|ncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|ncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|ncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|ncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|ncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|ncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|ncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|ncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|ncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|ncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|ncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|ncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|ncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|ncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|ncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|ncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|ncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|ncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|ncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|newt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|newt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|newt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|newt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|newt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|newt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|newt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|newt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|newt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|newt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|newt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|newt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|newt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|newt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|newt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|newt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|newt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|newt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|newt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|notes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|notes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|numberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|ob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|ob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|oci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|oci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|oci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|oci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|oci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|oci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|oci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|oci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|oci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|octdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|odbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|odbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|odbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|odbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|odbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|openal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|openal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|openal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|openlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|openssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|openssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|openssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|openssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|openssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|openssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|openssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|outofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|ovrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|ovrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|ovrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|parse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|pcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|pcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|pdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|pdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|pdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|pdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|pdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|pdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|pdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|pdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|pdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|pdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|pdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|pdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|pdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|pdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|pdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|pdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|pdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|pdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|pdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|pdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|pdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|pdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|pdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|pdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|pg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|pg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|pg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|pg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|pg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|pg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|pg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|pg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|pg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|php_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|png2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|posix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|posix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|posix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|preg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|printer_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|printer_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|printer_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|printer_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|printer_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|ps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|ps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|ps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|ps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|ps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|ps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|ps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|ps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|ps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|pspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|pspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|pspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|px_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|px_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|px_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|radius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|radius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|radius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|radius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|rararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|readline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|readline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|readline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|recursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|recursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|reflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|regexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|resourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|rpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|rrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|runkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|runkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|runkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|runkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|samconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|samconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|sammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|sca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|sdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|sdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|sdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|sdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|sdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|sdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|sdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|sdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|sdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|sdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|sdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|sdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|sdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|sdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|sdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|sdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|sdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|sem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|session_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|session_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|session_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|session_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|set_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|setstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|shm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|similar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|snmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|snmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|snmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|soapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|socket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|socket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|socket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|solrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|solrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|solrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|spl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|splfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|splpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|sqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|sqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|sqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|sqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|sqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|sqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|ssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|ssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|ssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|ssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|stats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|stats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|stats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|stats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|stats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|stats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|stats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|stats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|stats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|stats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|stats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|stats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|str_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|stream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|stream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|stream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|stream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|stream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|stream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|stream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|stream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|stripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|strstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|svn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|svn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|svn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|svn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|svn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|svn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|swf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|swf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|swf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|swf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|swf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|swf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|swf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|swf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|swfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|swfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|swish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|swishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|swishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|sybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|sybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|sybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|sybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|tcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|tidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|time_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|timezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|tokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|transliterator|traversable|trigger_error|trim|uasort|ucfirst|ucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|udm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|udm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|uksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|urldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|variant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|variant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|variant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|vpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|vpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|vpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|w32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|wddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|win32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|win32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|wincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|wincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|wincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|wincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|xattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|xdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|xdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|xhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|xml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|xml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|xml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|xml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|xmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|xmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|xmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|xmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|xmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|xmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|xmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|xmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|xmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|xmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|xmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|xpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|xslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|xslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|yaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|yaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|yaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|yp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|zip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|ziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|ziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|ziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|ziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|ziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|ziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type".split("|")),n=i.arrayToMap("abstract|and|array|as|break|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|final|for|foreach|function|global|goto|if|implements|interface|instanceof|namespace|new|or|private|protected|public|static|switch|throw|try|use|var|while|xor".split("|")),r=i.arrayToMap("die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset".split("|")),o=i.arrayToMap("true|false|null|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__".split("|")),u=i.arrayToMap("$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|$http_response_header|$argc|$argv".split("|")),a=i.arrayToMap("key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|com_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|cubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|hw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|maxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|mysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|mysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|mysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|PDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|PDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|PDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|PDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|PDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|px_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregisterset_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|sql_regcase".split("|")),f=i.arrayToMap("cfunction|old_function".split("|")),l=i.arrayToMap([]);this.$rules={start:[{token:"comment",regex:/(?:#|\/\/)(?:[^?]|\?[^>])*/},e.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/][gimy]*\\s*(?=[).,;]|$)"},{token:"string",regex:'"',next:"qqstring"},{token:"string",regex:"'",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language",regex:"\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|VERSION))|__COMPILER_HALT_OFFSET__)\\b"},{token:["keyword","text","support.class"],regex:"\\b(new)(\\s+)(\\w+)"},{token:["support.class","keyword.operator"],regex:"\\b(\\w+)(::)"},{token:"constant.language",regex:"\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\b"},{token:function(e){return n.hasOwnProperty(e)?"keyword":o.hasOwnProperty(e)?"constant.language":u.hasOwnProperty(e)?"variable.language":l.hasOwnProperty(e)?"invalid.illegal":t.hasOwnProperty(e)?"support.function":e=="debugger"?"invalid.deprecated":e.match(/^(\$[a-zA-Z_\x7f-\uffff][a-zA-Z0-9_\x7f-\uffff]*|self|parent)$/)?"variable":"identifier"},regex:/[a-zA-Z_$\x7f-\uffff][a-zA-Z0-9_\x7f-\uffff]*/},{onMatch:function(e,t,n){e=e.substr(3);if(e[0]=="'"||e[0]=='"')e=e.slice(1,-1);return n.unshift(this.next,e),"markup.list"},regex:/<<<(?:\w+|'\w+'|"\w+")$/,next:"heredoc"},{token:"keyword.operator",regex:"::|!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|=|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],heredoc:[{onMatch:function(e,t,n){return n[1]!=e?"string":(n.shift(),n.shift(),"markup.list")},regex:"^\\w+(?=;?$)",next:"start"},{token:"string",regex:".*"}],comment:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}],qqstring:[{token:"constant.language.escape",regex:'\\\\(?:[nrtvef\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'},{token:"variable",regex:/\$[\w]+(?:\[[\w\]+]|[=\-]>\w+)?/},{token:"variable",regex:/\$\{[^"\}]+\}?/},{token:"string",regex:'"',next:"start"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:/\\['\\]/},{token:"string",regex:"'",next:"start"},{defaultToken:"string"}]},this.embedRules(s,"doc-",[s.getEndRule("start")])};r.inherits(a,o);var f=function(){u.call(this);var e=[{token:"support.php_tag",regex:"<\\?(?:php|=)?",push:"php-start"}],t=[{token:"support.php_tag",regex:"\\?>",next:"pop"}];for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],e);this.embedRules(a,"php-",t,["start"]),this.normalizeRules()};r.inherits(f,u),t.PhpHighlightRules=f,t.PhpLangHighlightRules=a}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},h=function(){this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==""&&l!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+l+"}",selection:!1};if(h.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])||n.inMultiSelectMode?(h.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){c(n);var p=u.substring(s.column,s.column+1);if(p=="}"){var d=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(d!==null&&h.isAutoInsertedClosing(s,u,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(i=="\n"||i=="\r\n"){c(n);var v="";h.isMaybeInsertedClosing(s,u)&&(v=o.stringRepeat("}",f.maybeInsertedBrackets),h.clearMaybeInsertedClosing());var p=u.substring(s.column,s.column+1);if(p==="}"){var m=r.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!m)return null;var g=this.$getIndent(r.getLine(m.row))}else{if(!v){h.clearMaybeInsertedClosing();return}var g=this.$getIndent(u)}var y=g+r.getTabString();return{text:"\n"+y+"\n"+g+v,selection:[1,y.length,1,y.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),h=f.substring(a.column,a.column+1),p=r.getTokenAt(a.row,a.column),d=r.getTokenAt(a.row,a.column+1);if(l=="\\"&&p&&/escape/.test(p.type))return null;var v=p&&/string/.test(p.type),m=!d||/string/.test(d.type),g;if(h==s)g=v!==m;else{if(v&&!m)return null;if(v&&m)return null;var y=r.$mode.tokenRe;y.lastIndex=0;var b=y.test(l);y.lastIndex=0;var w=y.test(l);if(b||w)return null;if(h&&!/[\s;,.})\]\\]/.test(h))return null;g=!0}return{text:g?s+s:"",selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};h.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(h,i),t.CstyleBehaviour=h}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/)#(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../range").Range,a=e("../worker/worker_client").WorkerClient,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=function(){this.inherit(s),this.add("colon","insertion",function(e,t,n,r,i){if(i===":"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\s+/)&&(a=u.stepBackward());if(a&&a.type==="support.type"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===":")return{text:"",selection:[1,1]};if(!f.substring(s.column).match(/^\s*;/))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===":"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\s+/)&&(f=a.stepBackward());if(f&&f.type==="support.type"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===";")return i.end.column++,i}}}),this.add("semicolon","insertion",function(e,t,n,r,i){if(i===";"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===";")return{text:"",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./css_highlight_rules").CssHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./behaviour/css").CssBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules="cStyle",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("csslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/css"}.call(l.prototype),t.Mode=l}),ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";function u(e,t){return e.type.lastIndexOf(t+".xml")>-1}var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),a=function(){this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==""&&a!=="'"&&a!='"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,"attribute-value")||u(p,"string")))return{text:"",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,"tag-whitespace")||u(p,"whitespace"))p=h.stepBackward();var d=!c||c.match(/\s/);if(u(p,"attribute-equals")&&(d||c==">")||u(p,"decl-attribute-equals")&&(d||c=="?"))return{text:o+o,selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,"tag-name")||u(f,"tag-whitespace")||u(f,"attribute-name")||u(f,"attribute-equals")||u(f,"attribute-value")))return;if(u(f,"reference.attribute-value"))return;if(u(f,"attribute-value")){var l=f.value.charAt(0);if(l=='"'||l=="'"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,"tag-name"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),"end-tag-open"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,n,r,i){if(i=="\n"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf("tag-close")!==-1){while(f&&f.type.indexOf("tag-name")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf("end-tag")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value==="-1}var r=e("../../lib/oop"),i=e("../../lib/lang"),s=e("../../range").Range,o=e("./fold_mode").FoldMode,u=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName="",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t=="markbeginend"?"end":"":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?"":this._findEndTagInLine(e,n,r.tagName,r.end.column)?"":"start":""},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i";break}}return r}if(l(s,"tag-close"))return r.selfClosing=s.value=="/>",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,"tag-open"))return n.closing=l(t,"end-tag-open"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,"tag-name")?n.tagName=t.value:l(t,"tag-close")&&(n.selfClosing=t.value=="/>",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./mixed").FoldMode,s=e("./xml").FoldMode,o=e("./cstyle").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{"js-":new o,"css-":new o})};r.inherits(u,i)}),ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"],function(e,t,n){"use strict";function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,"tag-name"))i=n.stepBackward();if(i)return i.value}var r=e("../token_iterator").TokenIterator,i=["accesskey","class","contenteditable","contextmenu","dir","draggable","dropzone","hidden","id","inert","itemid","itemprop","itemref","itemscope","itemtype","lang","spellcheck","style","tabindex","title","translate"],s=["onabort","onblur","oncancel","oncanplay","oncanplaythrough","onchange","onclick","onclose","oncontextmenu","oncuechange","ondblclick","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondragstart","ondrop","ondurationchange","onemptied","onended","onerror","onfocus","oninput","oninvalid","onkeydown","onkeypress","onkeyup","onload","onloadeddata","onloadedmetadata","onloadstart","onmousedown","onmousemove","onmouseout","onmouseover","onmouseup","onmousewheel","onpause","onplay","onplaying","onprogress","onratechange","onreset","onscroll","onseeked","onseeking","onselect","onshow","onstalled","onsubmit","onsuspend","ontimeupdate","onvolumechange","onwaiting"],o=i.concat(s),u={html:["manifest"],head:[],title:[],base:["href","target"],link:["href","hreflang","rel","media","type","sizes"],meta:["http-equiv","name","content","charset"],style:["type","media","scoped"],script:["charset","type","src","defer","async"],noscript:["href"],body:["onafterprint","onbeforeprint","onbeforeunload","onhashchange","onmessage","onoffline","onpopstate","onredo","onresize","onstorage","onundo","onunload"],section:[],nav:[],article:["pubdate"],aside:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],footer:[],address:[],main:[],p:[],hr:[],pre:[],blockquote:["cite"],ol:["start","reversed"],ul:[],li:["value"],dl:[],dt:[],dd:[],figure:[],figcaption:[],div:[],a:["href","target","ping","rel","media","hreflang","type"],em:[],strong:[],small:[],s:[],cite:[],q:["cite"],dfn:[],abbr:[],data:[],time:["datetime"],code:[],"var":[],samp:[],kbd:[],sub:[],sup:[],i:[],b:[],u:[],mark:[],ruby:[],rt:[],rp:[],bdi:[],bdo:[],span:[],br:[],wbr:[],ins:["cite","datetime"],del:["cite","datetime"],img:["alt","src","height","width","usemap","ismap"],iframe:["name","src","height","width","sandbox","seamless"],embed:["src","height","width","type"],object:["param","data","type","height","width","usemap","name","form","classid"],param:["name","value"],video:["src","autobuffer","autoplay","loop","controls","width","height","poster"],audio:["src","autobuffer","autoplay","loop","controls"],source:["src","type","media"],track:["kind","src","srclang","label","default"],canvas:["width","height"],map:["name"],area:["shape","coords","href","hreflang","alt","target","media","rel","ping","type"],svg:[],math:[],table:["summary"],caption:[],colgroup:["span"],col:["span"],tbody:[],thead:[],tfoot:[],tr:[],td:["headers","rowspan","colspan"],th:["headers","rowspan","colspan","scope"],form:["accept-charset","action","autocomplete","enctype","method","name","novalidate","target"],fieldset:["disabled","form","name"],legend:[],label:["form","for"],input:["type","accept","alt","autocomplete","checked","disabled","form","formaction","formenctype","formmethod","formnovalidate","formtarget","height","list","max","maxlength","min","multiple","pattern","placeholder","readonly","required","size","src","step","width","files","value"],button:["autofocus","disabled","form","formaction","formenctype","formmethod","formnovalidate","formtarget","name","value","type"],select:["autofocus","disabled","form","multiple","name","size"],datalist:[],optgroup:["disabled","label"],option:["disabled","selected","label","value"],textarea:["autofocus","disabled","form","maxlength","name","placeholder","readonly","required","rows","cols","wrap"],keygen:["autofocus","challenge","disabled","form","keytype","name"],output:["for","form","name"],progress:["value","max"],meter:["value","min","max","low","high","optimum"],details:["open"],summary:[],command:["type","label","icon","disabled","checked","radiogroup","command"],menu:["type","label"],dialog:["open"]},a=Object.keys(u),c=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);return i?f(i,"tag-name")||f(i,"tag-open")||f(i,"end-tag-open")?this.getTagCompletions(e,t,n,r):f(i,"tag-whitespace")||f(i,"attribute-name")?this.getAttributeCompetions(e,t,n,r):[]:[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:"tag",score:Number.MAX_VALUE}})},this.getAttributeCompetions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(u[i])),s.map(function(e){return{caption:e,snippet:e+'="$0"',meta:"attribute",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text").Mode,o=e("./javascript").Mode,u=e("./css").Mode,a=e("./html_highlight_rules").HtmlHighlightRules,f=e("./behaviour/xml").XmlBehaviour,l=e("./folding/html").FoldMode,c=e("./html_completions").HtmlCompletions,h=e("../worker/worker_client").WorkerClient,p=["area","base","br","col","embed","hr","img","input","keygen","link","meta","menuitem","param","source","track","wbr"],d=["li","dt","dd","p","rt","rp","optgroup","option","colgroup","td","th"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({"js-":o,"css-":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:""},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h(["ace"],"ace/mode/html_worker","Worker");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call("setOptions",[{context:this.fragmentContext}]),t.on("error",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/html"}.call(v.prototype),t.Mode=v}),ace.define("ace/mode/php",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/php_highlight_rules","ace/mode/php_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/unicode","ace/mode/html","ace/mode/javascript","ace/mode/css"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./php_highlight_rules").PhpHighlightRules,o=e("./php_highlight_rules").PhpLangHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("../worker/worker_client").WorkerClient,l=e("./behaviour/cstyle").CstyleBehaviour,c=e("./folding/cstyle").FoldMode,h=e("../unicode"),p=e("./html").Mode,d=e("./javascript").Mode,v=e("./css").Mode,m=function(e){this.HighlightRules=o,this.$outdent=new u,this.$behaviour=new l,this.foldingRules=new c};r.inherits(m,i),function(){this.tokenRe=new RegExp("^["+h.packages.L+h.packages.Mn+h.packages.Mc+h.packages.Nd+h.packages.Pc+"_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+h.packages.L+h.packages.Mn+h.packages.Mc+h.packages.Nd+h.packages.Pc+"_]|s])+","g"),this.lineCommentStart=["//","#"],this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var u=t.match(/^.*[\{\(\[\:]\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o!="doc-start")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id="ace/mode/php-inline"}.call(m.prototype);var g=function(e){if(e&&e.inline){var t=new m;return t.createWorker=this.createWorker,t.inlinePhp=!0,t}p.call(this),this.HighlightRules=s,this.createModeDelegates({"js-":d,"css-":v,"php-":m}),this.foldingRules.subModes["php-"]=new c};r.inherits(g,p),function(){this.createWorker=function(e){var t=new f(["ace"],"ace/mode/php_worker","PhpWorker");return t.attachToDocument(e.getDocument()),this.inlinePhp&&t.call("setOptions",[{inline:!0}]),t.on("error",function(t){e.setAnnotations(t.data)}),t.on("ok",function(){e.clearAnnotations()}),t},this.$id="ace/mode/php"}.call(g.prototype),t.Mode=g}) \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-plain_text.js b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-plain_text.js new file mode 100644 index 000000000..be72ab998 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-plain_text.js @@ -0,0 +1 @@ +ace.define("ace/mode/plain_text",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/text_highlight_rules","ace/mode/behaviour"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./text_highlight_rules").TextHighlightRules,o=e("./behaviour").Behaviour,u=function(){this.HighlightRules=s,this.$behaviour=new o};r.inherits(u,i),function(){this.type="text",this.getNextLineIndent=function(e,t,n){return""},this.$id="ace/mode/plain_text"}.call(u.prototype),t.Mode=u}) \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-sass.js b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-sass.js new file mode 100644 index 000000000..91a991d6d --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-sass.js @@ -0,0 +1 @@ +ace.define("ace/mode/scss_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=i.arrayToMap(function(){var e="-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-".split("|"),t="appearance|background-clip|background-inline-policy|background-origin|background-size|binding|border-bottom-colors|border-left-colors|border-right-colors|border-top-colors|border-end|border-end-color|border-end-style|border-end-width|border-image|border-start|border-start-color|border-start-style|border-start-width|box-align|box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|box-pack|box-sizing|column-count|column-gap|column-width|column-rule|column-rule-width|column-rule-style|column-rule-color|float-edge|font-feature-settings|font-language-override|force-broken-image-icon|image-region|margin-end|margin-start|opacity|outline|outline-color|outline-offset|outline-radius|outline-radius-bottomleft|outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|outline-style|outline-width|padding-end|padding-start|stack-sizing|tab-size|text-blink|text-decoration-color|text-decoration-line|text-decoration-style|transform|transform-origin|transition|transition-delay|transition-duration|transition-property|transition-timing-function|user-focus|user-input|user-modify|user-select|window-shadow|border-radius".split("|"),n="azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index".split("|"),r=[];for(var i=0,s=e.length;i|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",regex:".+"}]}};r.inherits(o,s),t.ScssHighlightRules=o}),ace.define("ace/mode/sass_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/scss_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./scss_highlight_rules").ScssHighlightRules,o=function(){s.call(this);var e=this.$rules.start;e[1].token=="comment"&&(e.splice(1,1,{onMatch:function(e,t,n){return n.unshift(this.next,-1,e.length-2,t),"comment"},regex:/^\s*\/\*/,next:"comment"},{token:"error.invalid",regex:"/\\*|[{;}]"},{token:"support.type",regex:/^\s*:[\w\-]+\s/}),this.$rules.comment=[{regex:/^\s*/,onMatch:function(e,t,n){return n[1]===-1&&(n[1]=Math.max(n[2],e.length-1)),e.length<=n[1]?(n.shift(),n.shift(),n.shift(),this.next=n.shift(),"text"):(this.next="","comment")},next:"start"},{defaultToken:"comment"}])};r.inherits(o,s),t.SassHighlightRules=o}),ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!="#")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++nl){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\S/),a=s.search(/\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",regex:".+"}]}};r.inherits(o,s),t.ScssHighlightRules=o}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},h=function(){this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==""&&l!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+l+"}",selection:!1};if(h.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])||n.inMultiSelectMode?(h.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){c(n);var p=u.substring(s.column,s.column+1);if(p=="}"){var d=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(d!==null&&h.isAutoInsertedClosing(s,u,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(i=="\n"||i=="\r\n"){c(n);var v="";h.isMaybeInsertedClosing(s,u)&&(v=o.stringRepeat("}",f.maybeInsertedBrackets),h.clearMaybeInsertedClosing());var p=u.substring(s.column,s.column+1);if(p==="}"){var m=r.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!m)return null;var g=this.$getIndent(r.getLine(m.row))}else{if(!v){h.clearMaybeInsertedClosing();return}var g=this.$getIndent(u)}var y=g+r.getTabString();return{text:"\n"+y+"\n"+g+v,selection:[1,y.length,1,y.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),h=f.substring(a.column,a.column+1),p=r.getTokenAt(a.row,a.column),d=r.getTokenAt(a.row,a.column+1);if(l=="\\"&&p&&/escape/.test(p.type))return null;var v=p&&/string/.test(p.type),m=!d||/string/.test(d.type),g;if(h==s)g=v!==m;else{if(v&&!m)return null;if(v&&m)return null;var y=r.$mode.tokenRe;y.lastIndex=0;var b=y.test(l);y.lastIndex=0;var w=y.test(l);if(b||w)return null;if(h&&!/[\s;,.})\]\\]/.test(h))return null;g=!0}return{text:g?s+s:"",selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};h.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(h,i),t.CstyleBehaviour=h}),ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=function(){this.inherit(s),this.add("colon","insertion",function(e,t,n,r,i){if(i===":"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\s+/)&&(a=u.stepBackward());if(a&&a.type==="support.type"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===":")return{text:"",selection:[1,1]};if(!f.substring(s.column).match(/^\s*;/))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===":"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\s+/)&&(f=a.stepBackward());if(f&&f.type==="support.type"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===";")return i.end.column++,i}}}),this.add("semicolon","insertion",function(e,t,n,r,i){if(i===";"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===";")return{text:"",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/)#(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define("ace/mode/scss",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/scss_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./scss_highlight_rules").ScssHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("./behaviour/css").CssBehaviour,a=e("./folding/cstyle").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id="ace/mode/scss"}.call(f.prototype),t.Mode=f}) \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-text.js b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-text.js new file mode 100644 index 000000000..e69de29bb diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-xml.js b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-xml.js new file mode 100644 index 000000000..e9a5bc792 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/mode-xml.js @@ -0,0 +1 @@ +ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(e){this.$rules={start:[{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:["punctuation.xml-decl.xml","keyword.xml-decl.xml"],regex:"(<\\?)(xml)(?=[\\s])",next:"xml_decl",caseInsensitive:!0},{token:["punctuation.instruction.xml","keyword.instruction.xml"],regex:"(<\\?)([-_a-zA-Z0-9]+)",next:"processing_instruction"},{token:"comment.xml",regex:"<\\!--",next:"comment"},{token:["xml-pe.doctype.xml","xml-pe.doctype.xml"],regex:"(<\\!)(DOCTYPE)(?=[\\s])",next:"doctype",caseInsensitive:!0},{include:"tag"},{token:"text.end-tag-open.xml",regex:"",next:"start"}],processing_instruction:[{token:"punctuation.instruction.xml",regex:"\\?>",next:"start"},{defaultToken:"instruction.xml"}],doctype:[{include:"whitespace"},{include:"string"},{token:"xml-pe.doctype.xml",regex:">",next:"start"},{token:"xml-pe.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"punctuation.int-subset",regex:"\\[",push:"int_subset"}],int_subset:[{token:"text.xml",regex:"\\s+"},{token:"punctuation.int-subset.xml",regex:"]",next:"pop"},{token:["punctuation.markup-decl.xml","keyword.markup-decl.xml"],regex:"(<\\!)([-_a-zA-Z0-9]+)",push:[{token:"text",regex:"\\s+"},{token:"punctuation.markup-decl.xml",regex:">",next:"pop"},{include:"string"}]}],cdata:[{token:"string.cdata.xml",regex:"\\]\\]>",next:"start"},{token:"text.xml",regex:"\\s+"},{token:"text.xml",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment.xml",regex:"-->",next:"start"},{defaultToken:"comment.xml"}],reference:[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],attr_reference:[{token:"constant.language.escape.reference.attribute-value.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],tag:[{token:["meta.tag.punctuation.tag-open.xml","meta.tag.punctuation.end-tag-open.xml","meta.tag.tag-name.xml"],regex:"(?:(<)|(",next:"start"}]}],tag_whitespace:[{token:"text.tag-whitespace.xml",regex:"\\s+"}],whitespace:[{token:"text.whitespace.xml",regex:"\\s+"}],string:[{token:"string.xml",regex:"'",push:[{token:"string.xml",regex:"'",next:"pop"},{defaultToken:"string.xml"}]},{token:"string.xml",regex:'"',push:[{token:"string.xml",regex:'"',next:"pop"},{defaultToken:"string.xml"}]}],attributes:[{token:"entity.other.attribute-name.xml",regex:"(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"},{token:"keyword.operator.attribute-equals.xml",regex:"="},{include:"tag_whitespace"},{include:"attribute_value"}],attribute_value:[{token:"string.attribute-value.xml",regex:"'",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:["meta.tag.punctuation.tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(<)("+n+"(?=\\s|>|$))",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:t+"start"}]}),this.$rules[n+"-end"]=[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:["meta.tag.punctuation.end-tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(|$))",next:n+"-end"},{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\["},{token:"string.cdata.xml",regex:"\\]\\]>"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";function u(e,t){return e.type.lastIndexOf(t+".xml")>-1}var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),a=function(){this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==""&&a!=="'"&&a!='"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,"attribute-value")||u(p,"string")))return{text:"",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,"tag-whitespace")||u(p,"whitespace"))p=h.stepBackward();var d=!c||c.match(/\s/);if(u(p,"attribute-equals")&&(d||c==">")||u(p,"decl-attribute-equals")&&(d||c=="?"))return{text:o+o,selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,"tag-name")||u(f,"tag-whitespace")||u(f,"attribute-name")||u(f,"attribute-equals")||u(f,"attribute-value")))return;if(u(f,"reference.attribute-value"))return;if(u(f,"attribute-value")){var l=f.value.charAt(0);if(l=='"'||l=="'"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,"tag-name"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),"end-tag-open"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,n,r,i){if(i=="\n"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf("tag-close")!==-1){while(f&&f.type.indexOf("tag-name")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf("end-tag")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value==="-1}var r=e("../../lib/oop"),i=e("../../lib/lang"),s=e("../../range").Range,o=e("./fold_mode").FoldMode,u=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName="",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t=="markbeginend"?"end":"":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?"":this._findEndTagInLine(e,n,r.tagName,r.end.column)?"":"start":""},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i";break}}return r}if(l(s,"tag-close"))return r.selfClosing=s.value=="/>",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,"tag-open"))return n.closing=l(t,"end-tag-open"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,"tag-name")?n.tagName=t.value:l(t,"tag-close")&&(n.selfClosing=t.value=="/>",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define("ace/mode/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/xml_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/xml"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text").Mode,o=e("./xml_highlight_rules").XmlHighlightRules,u=e("./behaviour/xml").XmlBehaviour,a=e("./folding/xml").FoldMode,f=function(){this.HighlightRules=o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,s),function(){this.voidElements=i.arrayToMap([]),this.blockComment={start:""},this.$id="ace/mode/xml"}.call(f.prototype),t.Mode=f}) \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/snippets/css.js b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/snippets/css.js new file mode 100644 index 000000000..23306a8a9 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/snippets/css.js @@ -0,0 +1 @@ +ace.define("ace/snippets/css",["require","exports","module"],function(e,t,n){"use strict";t.snippetText="snippet .\n ${1} {\n ${2}\n }\nsnippet !\n !important\nsnippet bdi:m+\n -moz-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\nsnippet bdi:m\n -moz-border-image: ${1};\nsnippet bdrz:m\n -moz-border-radius: ${1};\nsnippet bxsh:m+\n -moz-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\nsnippet bxsh:m\n -moz-box-shadow: ${1};\nsnippet bdi:w+\n -webkit-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\nsnippet bdi:w\n -webkit-border-image: ${1};\nsnippet bdrz:w\n -webkit-border-radius: ${1};\nsnippet bxsh:w+\n -webkit-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\nsnippet bxsh:w\n -webkit-box-shadow: ${1};\nsnippet @f\n @font-face {\n font-family: ${1};\n src: url(${2});\n }\nsnippet @i\n @import url(${1});\nsnippet @m\n @media ${1:print} {\n ${2}\n }\nsnippet bg+\n background: #${1:FFF} url(${2}) ${3:0} ${4:0} ${5:no-repeat};\nsnippet bga\n background-attachment: ${1};\nsnippet bga:f\n background-attachment: fixed;\nsnippet bga:s\n background-attachment: scroll;\nsnippet bgbk\n background-break: ${1};\nsnippet bgbk:bb\n background-break: bounding-box;\nsnippet bgbk:c\n background-break: continuous;\nsnippet bgbk:eb\n background-break: each-box;\nsnippet bgcp\n background-clip: ${1};\nsnippet bgcp:bb\n background-clip: border-box;\nsnippet bgcp:cb\n background-clip: content-box;\nsnippet bgcp:nc\n background-clip: no-clip;\nsnippet bgcp:pb\n background-clip: padding-box;\nsnippet bgc\n background-color: #${1:FFF};\nsnippet bgc:t\n background-color: transparent;\nsnippet bgi\n background-image: url(${1});\nsnippet bgi:n\n background-image: none;\nsnippet bgo\n background-origin: ${1};\nsnippet bgo:bb\n background-origin: border-box;\nsnippet bgo:cb\n background-origin: content-box;\nsnippet bgo:pb\n background-origin: padding-box;\nsnippet bgpx\n background-position-x: ${1};\nsnippet bgpy\n background-position-y: ${1};\nsnippet bgp\n background-position: ${1:0} ${2:0};\nsnippet bgr\n background-repeat: ${1};\nsnippet bgr:n\n background-repeat: no-repeat;\nsnippet bgr:x\n background-repeat: repeat-x;\nsnippet bgr:y\n background-repeat: repeat-y;\nsnippet bgr:r\n background-repeat: repeat;\nsnippet bgz\n background-size: ${1};\nsnippet bgz:a\n background-size: auto;\nsnippet bgz:ct\n background-size: contain;\nsnippet bgz:cv\n background-size: cover;\nsnippet bg\n background: ${1};\nsnippet bg:ie\n filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='${1}',sizingMethod='${2:crop}');\nsnippet bg:n\n background: none;\nsnippet bd+\n border: ${1:1px} ${2:solid} #${3:000};\nsnippet bdb+\n border-bottom: ${1:1px} ${2:solid} #${3:000};\nsnippet bdbc\n border-bottom-color: #${1:000};\nsnippet bdbi\n border-bottom-image: url(${1});\nsnippet bdbi:n\n border-bottom-image: none;\nsnippet bdbli\n border-bottom-left-image: url(${1});\nsnippet bdbli:c\n border-bottom-left-image: continue;\nsnippet bdbli:n\n border-bottom-left-image: none;\nsnippet bdblrz\n border-bottom-left-radius: ${1};\nsnippet bdbri\n border-bottom-right-image: url(${1});\nsnippet bdbri:c\n border-bottom-right-image: continue;\nsnippet bdbri:n\n border-bottom-right-image: none;\nsnippet bdbrrz\n border-bottom-right-radius: ${1};\nsnippet bdbs\n border-bottom-style: ${1};\nsnippet bdbs:n\n border-bottom-style: none;\nsnippet bdbw\n border-bottom-width: ${1};\nsnippet bdb\n border-bottom: ${1};\nsnippet bdb:n\n border-bottom: none;\nsnippet bdbk\n border-break: ${1};\nsnippet bdbk:c\n border-break: close;\nsnippet bdcl\n border-collapse: ${1};\nsnippet bdcl:c\n border-collapse: collapse;\nsnippet bdcl:s\n border-collapse: separate;\nsnippet bdc\n border-color: #${1:000};\nsnippet bdci\n border-corner-image: url(${1});\nsnippet bdci:c\n border-corner-image: continue;\nsnippet bdci:n\n border-corner-image: none;\nsnippet bdf\n border-fit: ${1};\nsnippet bdf:c\n border-fit: clip;\nsnippet bdf:of\n border-fit: overwrite;\nsnippet bdf:ow\n border-fit: overwrite;\nsnippet bdf:r\n border-fit: repeat;\nsnippet bdf:sc\n border-fit: scale;\nsnippet bdf:sp\n border-fit: space;\nsnippet bdf:st\n border-fit: stretch;\nsnippet bdi\n border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\nsnippet bdi:n\n border-image: none;\nsnippet bdl+\n border-left: ${1:1px} ${2:solid} #${3:000};\nsnippet bdlc\n border-left-color: #${1:000};\nsnippet bdli\n border-left-image: url(${1});\nsnippet bdli:n\n border-left-image: none;\nsnippet bdls\n border-left-style: ${1};\nsnippet bdls:n\n border-left-style: none;\nsnippet bdlw\n border-left-width: ${1};\nsnippet bdl\n border-left: ${1};\nsnippet bdl:n\n border-left: none;\nsnippet bdlt\n border-length: ${1};\nsnippet bdlt:a\n border-length: auto;\nsnippet bdrz\n border-radius: ${1};\nsnippet bdr+\n border-right: ${1:1px} ${2:solid} #${3:000};\nsnippet bdrc\n border-right-color: #${1:000};\nsnippet bdri\n border-right-image: url(${1});\nsnippet bdri:n\n border-right-image: none;\nsnippet bdrs\n border-right-style: ${1};\nsnippet bdrs:n\n border-right-style: none;\nsnippet bdrw\n border-right-width: ${1};\nsnippet bdr\n border-right: ${1};\nsnippet bdr:n\n border-right: none;\nsnippet bdsp\n border-spacing: ${1};\nsnippet bds\n border-style: ${1};\nsnippet bds:ds\n border-style: dashed;\nsnippet bds:dtds\n border-style: dot-dash;\nsnippet bds:dtdtds\n border-style: dot-dot-dash;\nsnippet bds:dt\n border-style: dotted;\nsnippet bds:db\n border-style: double;\nsnippet bds:g\n border-style: groove;\nsnippet bds:h\n border-style: hidden;\nsnippet bds:i\n border-style: inset;\nsnippet bds:n\n border-style: none;\nsnippet bds:o\n border-style: outset;\nsnippet bds:r\n border-style: ridge;\nsnippet bds:s\n border-style: solid;\nsnippet bds:w\n border-style: wave;\nsnippet bdt+\n border-top: ${1:1px} ${2:solid} #${3:000};\nsnippet bdtc\n border-top-color: #${1:000};\nsnippet bdti\n border-top-image: url(${1});\nsnippet bdti:n\n border-top-image: none;\nsnippet bdtli\n border-top-left-image: url(${1});\nsnippet bdtli:c\n border-corner-image: continue;\nsnippet bdtli:n\n border-corner-image: none;\nsnippet bdtlrz\n border-top-left-radius: ${1};\nsnippet bdtri\n border-top-right-image: url(${1});\nsnippet bdtri:c\n border-top-right-image: continue;\nsnippet bdtri:n\n border-top-right-image: none;\nsnippet bdtrrz\n border-top-right-radius: ${1};\nsnippet bdts\n border-top-style: ${1};\nsnippet bdts:n\n border-top-style: none;\nsnippet bdtw\n border-top-width: ${1};\nsnippet bdt\n border-top: ${1};\nsnippet bdt:n\n border-top: none;\nsnippet bdw\n border-width: ${1};\nsnippet bd\n border: ${1};\nsnippet bd:n\n border: none;\nsnippet b\n bottom: ${1};\nsnippet b:a\n bottom: auto;\nsnippet bxsh+\n box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\nsnippet bxsh\n box-shadow: ${1};\nsnippet bxsh:n\n box-shadow: none;\nsnippet bxz\n box-sizing: ${1};\nsnippet bxz:bb\n box-sizing: border-box;\nsnippet bxz:cb\n box-sizing: content-box;\nsnippet cps\n caption-side: ${1};\nsnippet cps:b\n caption-side: bottom;\nsnippet cps:t\n caption-side: top;\nsnippet cl\n clear: ${1};\nsnippet cl:b\n clear: both;\nsnippet cl:l\n clear: left;\nsnippet cl:n\n clear: none;\nsnippet cl:r\n clear: right;\nsnippet cp\n clip: ${1};\nsnippet cp:a\n clip: auto;\nsnippet cp:r\n clip: rect(${1:0} ${2:0} ${3:0} ${4:0});\nsnippet c\n color: #${1:000};\nsnippet ct\n content: ${1};\nsnippet ct:a\n content: attr(${1});\nsnippet ct:cq\n content: close-quote;\nsnippet ct:c\n content: counter(${1});\nsnippet ct:cs\n content: counters(${1});\nsnippet ct:ncq\n content: no-close-quote;\nsnippet ct:noq\n content: no-open-quote;\nsnippet ct:n\n content: normal;\nsnippet ct:oq\n content: open-quote;\nsnippet coi\n counter-increment: ${1};\nsnippet cor\n counter-reset: ${1};\nsnippet cur\n cursor: ${1};\nsnippet cur:a\n cursor: auto;\nsnippet cur:c\n cursor: crosshair;\nsnippet cur:d\n cursor: default;\nsnippet cur:ha\n cursor: hand;\nsnippet cur:he\n cursor: help;\nsnippet cur:m\n cursor: move;\nsnippet cur:p\n cursor: pointer;\nsnippet cur:t\n cursor: text;\nsnippet d\n display: ${1};\nsnippet d:mib\n display: -moz-inline-box;\nsnippet d:mis\n display: -moz-inline-stack;\nsnippet d:b\n display: block;\nsnippet d:cp\n display: compact;\nsnippet d:ib\n display: inline-block;\nsnippet d:itb\n display: inline-table;\nsnippet d:i\n display: inline;\nsnippet d:li\n display: list-item;\nsnippet d:n\n display: none;\nsnippet d:ri\n display: run-in;\nsnippet d:tbcp\n display: table-caption;\nsnippet d:tbc\n display: table-cell;\nsnippet d:tbclg\n display: table-column-group;\nsnippet d:tbcl\n display: table-column;\nsnippet d:tbfg\n display: table-footer-group;\nsnippet d:tbhg\n display: table-header-group;\nsnippet d:tbrg\n display: table-row-group;\nsnippet d:tbr\n display: table-row;\nsnippet d:tb\n display: table;\nsnippet ec\n empty-cells: ${1};\nsnippet ec:h\n empty-cells: hide;\nsnippet ec:s\n empty-cells: show;\nsnippet exp\n expression()\nsnippet fl\n float: ${1};\nsnippet fl:l\n float: left;\nsnippet fl:n\n float: none;\nsnippet fl:r\n float: right;\nsnippet f+\n font: ${1:1em} ${2:Arial},${3:sans-serif};\nsnippet fef\n font-effect: ${1};\nsnippet fef:eb\n font-effect: emboss;\nsnippet fef:eg\n font-effect: engrave;\nsnippet fef:n\n font-effect: none;\nsnippet fef:o\n font-effect: outline;\nsnippet femp\n font-emphasize-position: ${1};\nsnippet femp:a\n font-emphasize-position: after;\nsnippet femp:b\n font-emphasize-position: before;\nsnippet fems\n font-emphasize-style: ${1};\nsnippet fems:ac\n font-emphasize-style: accent;\nsnippet fems:c\n font-emphasize-style: circle;\nsnippet fems:ds\n font-emphasize-style: disc;\nsnippet fems:dt\n font-emphasize-style: dot;\nsnippet fems:n\n font-emphasize-style: none;\nsnippet fem\n font-emphasize: ${1};\nsnippet ff\n font-family: ${1};\nsnippet ff:c\n font-family: ${1:'Monotype Corsiva','Comic Sans MS'},cursive;\nsnippet ff:f\n font-family: ${1:Capitals,Impact},fantasy;\nsnippet ff:m\n font-family: ${1:Monaco,'Courier New'},monospace;\nsnippet ff:ss\n font-family: ${1:Helvetica,Arial},sans-serif;\nsnippet ff:s\n font-family: ${1:Georgia,'Times New Roman'},serif;\nsnippet fza\n font-size-adjust: ${1};\nsnippet fza:n\n font-size-adjust: none;\nsnippet fz\n font-size: ${1};\nsnippet fsm\n font-smooth: ${1};\nsnippet fsm:aw\n font-smooth: always;\nsnippet fsm:a\n font-smooth: auto;\nsnippet fsm:n\n font-smooth: never;\nsnippet fst\n font-stretch: ${1};\nsnippet fst:c\n font-stretch: condensed;\nsnippet fst:e\n font-stretch: expanded;\nsnippet fst:ec\n font-stretch: extra-condensed;\nsnippet fst:ee\n font-stretch: extra-expanded;\nsnippet fst:n\n font-stretch: normal;\nsnippet fst:sc\n font-stretch: semi-condensed;\nsnippet fst:se\n font-stretch: semi-expanded;\nsnippet fst:uc\n font-stretch: legacy-condensed;\nsnippet fst:ue\n font-stretch: legacy-expanded;\nsnippet fs\n font-style: ${1};\nsnippet fs:i\n font-style: italic;\nsnippet fs:n\n font-style: normal;\nsnippet fs:o\n font-style: oblique;\nsnippet fv\n font-variant: ${1};\nsnippet fv:n\n font-variant: normal;\nsnippet fv:sc\n font-variant: small-caps;\nsnippet fw\n font-weight: ${1};\nsnippet fw:b\n font-weight: bold;\nsnippet fw:br\n font-weight: bolder;\nsnippet fw:lr\n font-weight: lighter;\nsnippet fw:n\n font-weight: normal;\nsnippet f\n font: ${1};\nsnippet h\n height: ${1};\nsnippet h:a\n height: auto;\nsnippet l\n left: ${1};\nsnippet l:a\n left: auto;\nsnippet lts\n letter-spacing: ${1};\nsnippet lh\n line-height: ${1};\nsnippet lisi\n list-style-image: url(${1});\nsnippet lisi:n\n list-style-image: none;\nsnippet lisp\n list-style-position: ${1};\nsnippet lisp:i\n list-style-position: inside;\nsnippet lisp:o\n list-style-position: outside;\nsnippet list\n list-style-type: ${1};\nsnippet list:c\n list-style-type: circle;\nsnippet list:dclz\n list-style-type: decimal-leading-zero;\nsnippet list:dc\n list-style-type: decimal;\nsnippet list:d\n list-style-type: disc;\nsnippet list:lr\n list-style-type: lower-roman;\nsnippet list:n\n list-style-type: none;\nsnippet list:s\n list-style-type: square;\nsnippet list:ur\n list-style-type: upper-roman;\nsnippet lis\n list-style: ${1};\nsnippet lis:n\n list-style: none;\nsnippet mb\n margin-bottom: ${1};\nsnippet mb:a\n margin-bottom: auto;\nsnippet ml\n margin-left: ${1};\nsnippet ml:a\n margin-left: auto;\nsnippet mr\n margin-right: ${1};\nsnippet mr:a\n margin-right: auto;\nsnippet mt\n margin-top: ${1};\nsnippet mt:a\n margin-top: auto;\nsnippet m\n margin: ${1};\nsnippet m:4\n margin: ${1:0} ${2:0} ${3:0} ${4:0};\nsnippet m:3\n margin: ${1:0} ${2:0} ${3:0};\nsnippet m:2\n margin: ${1:0} ${2:0};\nsnippet m:0\n margin: 0;\nsnippet m:a\n margin: auto;\nsnippet mah\n max-height: ${1};\nsnippet mah:n\n max-height: none;\nsnippet maw\n max-width: ${1};\nsnippet maw:n\n max-width: none;\nsnippet mih\n min-height: ${1};\nsnippet miw\n min-width: ${1};\nsnippet op\n opacity: ${1};\nsnippet op:ie\n filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100});\nsnippet op:ms\n -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100})';\nsnippet orp\n orphans: ${1};\nsnippet o+\n outline: ${1:1px} ${2:solid} #${3:000};\nsnippet oc\n outline-color: ${1:#000};\nsnippet oc:i\n outline-color: invert;\nsnippet oo\n outline-offset: ${1};\nsnippet os\n outline-style: ${1};\nsnippet ow\n outline-width: ${1};\nsnippet o\n outline: ${1};\nsnippet o:n\n outline: none;\nsnippet ovs\n overflow-style: ${1};\nsnippet ovs:a\n overflow-style: auto;\nsnippet ovs:mq\n overflow-style: marquee;\nsnippet ovs:mv\n overflow-style: move;\nsnippet ovs:p\n overflow-style: panner;\nsnippet ovs:s\n overflow-style: scrollbar;\nsnippet ovx\n overflow-x: ${1};\nsnippet ovx:a\n overflow-x: auto;\nsnippet ovx:h\n overflow-x: hidden;\nsnippet ovx:s\n overflow-x: scroll;\nsnippet ovx:v\n overflow-x: visible;\nsnippet ovy\n overflow-y: ${1};\nsnippet ovy:a\n overflow-y: auto;\nsnippet ovy:h\n overflow-y: hidden;\nsnippet ovy:s\n overflow-y: scroll;\nsnippet ovy:v\n overflow-y: visible;\nsnippet ov\n overflow: ${1};\nsnippet ov:a\n overflow: auto;\nsnippet ov:h\n overflow: hidden;\nsnippet ov:s\n overflow: scroll;\nsnippet ov:v\n overflow: visible;\nsnippet pb\n padding-bottom: ${1};\nsnippet pl\n padding-left: ${1};\nsnippet pr\n padding-right: ${1};\nsnippet pt\n padding-top: ${1};\nsnippet p\n padding: ${1};\nsnippet p:4\n padding: ${1:0} ${2:0} ${3:0} ${4:0};\nsnippet p:3\n padding: ${1:0} ${2:0} ${3:0};\nsnippet p:2\n padding: ${1:0} ${2:0};\nsnippet p:0\n padding: 0;\nsnippet pgba\n page-break-after: ${1};\nsnippet pgba:aw\n page-break-after: always;\nsnippet pgba:a\n page-break-after: auto;\nsnippet pgba:l\n page-break-after: left;\nsnippet pgba:r\n page-break-after: right;\nsnippet pgbb\n page-break-before: ${1};\nsnippet pgbb:aw\n page-break-before: always;\nsnippet pgbb:a\n page-break-before: auto;\nsnippet pgbb:l\n page-break-before: left;\nsnippet pgbb:r\n page-break-before: right;\nsnippet pgbi\n page-break-inside: ${1};\nsnippet pgbi:a\n page-break-inside: auto;\nsnippet pgbi:av\n page-break-inside: avoid;\nsnippet pos\n position: ${1};\nsnippet pos:a\n position: absolute;\nsnippet pos:f\n position: fixed;\nsnippet pos:r\n position: relative;\nsnippet pos:s\n position: static;\nsnippet q\n quotes: ${1};\nsnippet q:en\n quotes: '\\201C' '\\201D' '\\2018' '\\2019';\nsnippet q:n\n quotes: none;\nsnippet q:ru\n quotes: '\\00AB' '\\00BB' '\\201E' '\\201C';\nsnippet rz\n resize: ${1};\nsnippet rz:b\n resize: both;\nsnippet rz:h\n resize: horizontal;\nsnippet rz:n\n resize: none;\nsnippet rz:v\n resize: vertical;\nsnippet r\n right: ${1};\nsnippet r:a\n right: auto;\nsnippet tbl\n table-layout: ${1};\nsnippet tbl:a\n table-layout: auto;\nsnippet tbl:f\n table-layout: fixed;\nsnippet tal\n text-align-last: ${1};\nsnippet tal:a\n text-align-last: auto;\nsnippet tal:c\n text-align-last: center;\nsnippet tal:l\n text-align-last: left;\nsnippet tal:r\n text-align-last: right;\nsnippet ta\n text-align: ${1};\nsnippet ta:c\n text-align: center;\nsnippet ta:l\n text-align: left;\nsnippet ta:r\n text-align: right;\nsnippet td\n text-decoration: ${1};\nsnippet td:l\n text-decoration: line-through;\nsnippet td:n\n text-decoration: none;\nsnippet td:o\n text-decoration: overline;\nsnippet td:u\n text-decoration: underline;\nsnippet te\n text-emphasis: ${1};\nsnippet te:ac\n text-emphasis: accent;\nsnippet te:a\n text-emphasis: after;\nsnippet te:b\n text-emphasis: before;\nsnippet te:c\n text-emphasis: circle;\nsnippet te:ds\n text-emphasis: disc;\nsnippet te:dt\n text-emphasis: dot;\nsnippet te:n\n text-emphasis: none;\nsnippet th\n text-height: ${1};\nsnippet th:a\n text-height: auto;\nsnippet th:f\n text-height: font-size;\nsnippet th:m\n text-height: max-size;\nsnippet th:t\n text-height: text-size;\nsnippet ti\n text-indent: ${1};\nsnippet ti:-\n text-indent: -9999px;\nsnippet tj\n text-justify: ${1};\nsnippet tj:a\n text-justify: auto;\nsnippet tj:d\n text-justify: distribute;\nsnippet tj:ic\n text-justify: inter-cluster;\nsnippet tj:ii\n text-justify: inter-ideograph;\nsnippet tj:iw\n text-justify: inter-word;\nsnippet tj:k\n text-justify: kashida;\nsnippet tj:t\n text-justify: tibetan;\nsnippet to+\n text-outline: ${1:0} ${2:0} #${3:000};\nsnippet to\n text-outline: ${1};\nsnippet to:n\n text-outline: none;\nsnippet tr\n text-replace: ${1};\nsnippet tr:n\n text-replace: none;\nsnippet tsh+\n text-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\nsnippet tsh\n text-shadow: ${1};\nsnippet tsh:n\n text-shadow: none;\nsnippet tt\n text-transform: ${1};\nsnippet tt:c\n text-transform: capitalize;\nsnippet tt:l\n text-transform: lowercase;\nsnippet tt:n\n text-transform: none;\nsnippet tt:u\n text-transform: uppercase;\nsnippet tw\n text-wrap: ${1};\nsnippet tw:no\n text-wrap: none;\nsnippet tw:n\n text-wrap: normal;\nsnippet tw:s\n text-wrap: suppress;\nsnippet tw:u\n text-wrap: unrestricted;\nsnippet t\n top: ${1};\nsnippet t:a\n top: auto;\nsnippet va\n vertical-align: ${1};\nsnippet va:bl\n vertical-align: baseline;\nsnippet va:b\n vertical-align: bottom;\nsnippet va:m\n vertical-align: middle;\nsnippet va:sub\n vertical-align: sub;\nsnippet va:sup\n vertical-align: super;\nsnippet va:tb\n vertical-align: text-bottom;\nsnippet va:tt\n vertical-align: text-top;\nsnippet va:t\n vertical-align: top;\nsnippet v\n visibility: ${1};\nsnippet v:c\n visibility: collapse;\nsnippet v:h\n visibility: hidden;\nsnippet v:v\n visibility: visible;\nsnippet whsc\n white-space-collapse: ${1};\nsnippet whsc:ba\n white-space-collapse: break-all;\nsnippet whsc:bs\n white-space-collapse: break-strict;\nsnippet whsc:k\n white-space-collapse: keep-all;\nsnippet whsc:l\n white-space-collapse: loose;\nsnippet whsc:n\n white-space-collapse: normal;\nsnippet whs\n white-space: ${1};\nsnippet whs:n\n white-space: normal;\nsnippet whs:nw\n white-space: nowrap;\nsnippet whs:pl\n white-space: pre-line;\nsnippet whs:pw\n white-space: pre-wrap;\nsnippet whs:p\n white-space: pre;\nsnippet wid\n widows: ${1};\nsnippet w\n width: ${1};\nsnippet w:a\n width: auto;\nsnippet wob\n word-break: ${1};\nsnippet wob:ba\n word-break: break-all;\nsnippet wob:bs\n word-break: break-strict;\nsnippet wob:k\n word-break: keep-all;\nsnippet wob:l\n word-break: loose;\nsnippet wob:n\n word-break: normal;\nsnippet wos\n word-spacing: ${1};\nsnippet wow\n word-wrap: ${1};\nsnippet wow:no\n word-wrap: none;\nsnippet wow:n\n word-wrap: normal;\nsnippet wow:s\n word-wrap: suppress;\nsnippet wow:u\n word-wrap: unrestricted;\nsnippet z\n z-index: ${1};\nsnippet z:a\n z-index: auto;\nsnippet zoo\n zoom: 1;\n",t.scope="css"}) \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/snippets/html.js b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/snippets/html.js new file mode 100644 index 000000000..a220d3df1 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/fields/ace_editor/vendor/snippets/html.js @@ -0,0 +1 @@ +ace.define("ace/snippets/html",["require","exports","module"],function(e,t,n){"use strict";t.snippetText='# Some useful Unicode entities\n# Non-Breaking Space\nsnippet nbs\n  \n# \u2190\nsnippet left\n ←\n# \u2192\nsnippet right\n →\n# \u2191\nsnippet up\n ↑\n# \u2193\nsnippet down\n ↓\n# \u21a9\nsnippet return\n ↩\n# \u21e4\nsnippet backtab\n ⇤\n# \u21e5\nsnippet tab\n ⇥\n# \u21e7\nsnippet shift\n ⇧\n# \u2303\nsnippet ctrl\n ⌃\n# \u2305\nsnippet enter\n ⌅\n# \u2318\nsnippet cmd\n ⌘\n# \u2325\nsnippet option\n ⌥\n# \u2326\nsnippet delete\n ⌦\n# \u232b\nsnippet backspace\n ⌫\n# \u238b\nsnippet esc\n ⎋\n# Generic Doctype\nsnippet doctype HTML 4.01 Strict\n \nsnippet doctype HTML 4.01 Transitional\n \nsnippet doctype HTML 5\n \nsnippet doctype XHTML 1.0 Frameset\n \nsnippet doctype XHTML 1.0 Strict\n \nsnippet doctype XHTML 1.0 Transitional\n \nsnippet doctype XHTML 1.1\n \n# HTML Doctype 4.01 Strict\nsnippet docts\n \n# HTML Doctype 4.01 Transitional\nsnippet doct\n \n# HTML Doctype 5\nsnippet doct5\n \n# XHTML Doctype 1.0 Frameset\nsnippet docxf\n \n# XHTML Doctype 1.0 Strict\nsnippet docxs\n \n# XHTML Doctype 1.0 Transitional\nsnippet docxt\n \n# XHTML Doctype 1.1\nsnippet docx\n \n# Attributes\nsnippet attr\n ${1:attribute}="${2:property}"\nsnippet attr+\n ${1:attribute}="${2:property}" attr+${3}\nsnippet .\n class="${1}"${2}\nsnippet #\n id="${1}"${2}\nsnippet alt\n alt="${1}"${2}\nsnippet charset\n charset="${1:utf-8}"${2}\nsnippet data\n data-${1}="${2:$1}"${3}\nsnippet for\n for="${1}"${2}\nsnippet height\n height="${1}"${2}\nsnippet href\n href="${1:#}"${2}\nsnippet lang\n lang="${1:en}"${2}\nsnippet media\n media="${1}"${2}\nsnippet name\n name="${1}"${2}\nsnippet rel\n rel="${1}"${2}\nsnippet scope\n scope="${1:row}"${2}\nsnippet src\n src="${1}"${2}\nsnippet title=\n title="${1}"${2}\nsnippet type\n type="${1}"${2}\nsnippet value\n value="${1}"${2}\nsnippet width\n width="${1}"${2}\n# Elements\nsnippet a\n ${2:$1}\nsnippet a.\n ${3:$1}\nsnippet a#\n ${3:$1}\nsnippet a:ext\n ${2:$1}\nsnippet a:mail\n ${3:email me}\nsnippet abbr\n ${2}\nsnippet address\n
    \n ${1}\n
    \nsnippet area\n ${4}\nsnippet area+\n ${4}\n area+${5}\nsnippet area:c\n ${3}\nsnippet area:d\n ${3}\nsnippet area:p\n ${3}\nsnippet area:r\n ${3}\nsnippet article\n
    \n ${1}\n
    \nsnippet article.\n
    \n ${2}\n
    \nsnippet article#\n
    \n ${2}\n
    \nsnippet aside\n \nsnippet aside.\n \nsnippet aside#\n \nsnippet audio\n
    ${1}
    + + + + +


    + +


    + +
    + + + +
    +

    + + +
    +

    + +

    + +

    + '; + foreach ( $redux as $panel ) { + echo ' ' . $panel->args['display_name'] . ''; + if ( ! empty( $panel->args['display_version'] ) ) { + echo ' v' . $panel->args['display_version']; + } + echo ' 
    '; + } + echo '
    '; + } + + + // + // $t = wp_get_theme(); + // $active_theme = array( + // 'name' => $t->get( 'Name' ), + // 'version' => $t->get( 'Version' ), + // 'template' => $t->get( 'Template' ), + // 'productURL' => $t->get( 'ThemeURI' ), + // 'author' => $t->get( 'Author' ), + // 'authorURL' => $t->get( 'AuthorURI' ), + // ); + // $parent_theme = array(); + // + // if ( ! empty( $active_theme['Template'] ) ) { + // $pt = wp_get_theme( $active_theme['Template'] ); + // $parent_theme = array( + // 'name' => $pt->get( 'Name' ), + // 'version' => $pt->get( 'Version' ), + // 'template' => $pt->get( 'Template' ), + // 'productURL' => $pt->get( 'ThemeURI' ), + // 'author' => $pt->get( 'Author' ), + // 'authorURL' => $pt->get( 'AuthorURI' ), + // ); + // } + // + // + // $products = array( 'plugins' => array(), 'theme' => array(), 'unknown' => array() ); + // + // $active_plugins = (array) get_option( 'active_plugins', array() ); + // + // if ( is_multisite() ) { + // $active_plugins = array_merge( $active_plugins, get_site_option( 'active_sitewide_plugins', array() ) ); + // } + // + // $plugins = array(); + // + // foreach ( $active_plugins as $plugin ) : + // $plugin_data = @get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin ); + // $plugins[ $plugin_data['Name'] ] = array( + // 'name' => $plugin_data['Name'], + // 'title' => $plugin_data['Title'], + // 'version' => $plugin_data['Version'], + // 'productURL' => $plugin_data['PluginURI'], + // 'author' => $plugin_data['Author'], + // 'authorURL' => $plugin_data['AuthorURI'], + // ); + // endforeach; + // + // + // foreach ( $redux as $panel ) { + // if ( $active_theme == $panel->args['display_name'] ) { + // $products['theme'] = $active_theme; + // } else if ( $parent_theme == $panel->args['display_name'] ) { + // $products['theme'] = $parent_theme; + // } else if ( isset( $plugins[ $panel->args['display_name'] ] ) ) { + // $products['plugins'][] = array( + // 'name' => $panel->args['display_name'], + // 'version' => $panel->args['display_version'] + // ); + // } else { + // $products['unknown'][] = array( + // 'name' => $panel->args['display_name'], + // 'version' => $panel->args['display_version'] + // ); + // } + // } + // print_r( $products ); + //?> + + + + + + + + + + + + + + + + + + Name ); ?> + + + + + Name ); ?> + Name; ?> + Version; ?> + + + + + +
    + + +

    + following article before asking for support from us directly.', 'legacy_framework' ), array( 'a' => array( 'href' => array() ) ) ), esc_url( 'http://docs.reduxframework.com/core/support-defined/' ) ); + ?> + + + +

    + +
    + + + +
    +
    + +
    \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/inc/welcome/welcome.php b/plugins/legacy-admin/framework/core/inc/welcome/welcome.php new file mode 100644 index 000000000..45833da63 --- /dev/null +++ b/plugins/legacy-admin/framework/core/inc/welcome/welcome.php @@ -0,0 +1,558 @@ +redux_loaded ) { + return; + } + $this->redux_loaded = true; + add_action( 'admin_menu', array( $this, 'admin_menus' ) ); + + if ( isset( $_GET['page'] ) ) { + if ( substr( $_GET['page'], 0, 6 ) == "redux-" ) { + $version = explode( '.', ReduxFramework::$_version ); + $this->display_version = $version[0] . '.' . $version[1]; + add_filter( 'admin_footer_text', array( $this, 'change_wp_footer' ) ); + add_action( 'admin_head', array( $this, 'admin_head' ) ); + } else { + $this->check_version(); + } + } else { + $this->check_version(); + } + update_option( 'redux_version_upgraded_from', ReduxFramework::$_version ); + set_transient( '_redux_activation_redirect', true, 30 ); + + } + + + public function check_version() { + global $pagenow; + + if ($pagenow == "admin-ajax.php" || ( $GLOBALS['pagenow'] == "customize" && isset( $_GET['theme'] ) && ! empty( $_GET['theme'] ) ) ) { + return; + } + + $saveVer = Redux_Helpers::major_version( get_option( 'redux_version_upgraded_from' ) ); + $curVer = Redux_Helpers::major_version( ReduxFramework::$_version ); + $compare = false; + + if ( Redux_Helpers::isLocalHost() ) { + $compare = true; + } else if ( class_exists( 'ReduxFrameworkPlugin' ) ) { + $compare = true; + } else { + $redux = ReduxFrameworkInstances::get_all_instances(); + foreach ( $redux as $panel ) { + if ( $panel->args['dev_mode'] == 1 ) { + $compare = true; + break; + } + } + } + + if ( $compare ) { + $redirect = false; + if ( empty( $saveVer ) ) { + $redirect = true; // First time + } else if ( version_compare( $curVer, $saveVer, '>' ) ) { + $redirect = true; // Previous version + } + if ( $redirect ) { + //wp_safe_redirect( admin_url( 'tools.php?page=redux-about' ) ); + //exit(); + } + } + } + + public function change_wp_footer() { + echo 'If you like Redux please leave us a 5 star rating. A huge thank you from Redux in advance!'; + } + + public function support_hash() { + + if ( ! wp_verify_nonce( $_POST['nonce'], 'redux-support-hash' ) ) { + die(); + } + + $data = get_option( 'redux_support_hash' ); + $data = wp_parse_args( $data, array( 'check' => '', 'identifier' => '' ) ); + $generate_hash = true; + $system_info = Redux_Helpers::compileSystemStatus(); + $newHash = md5( json_encode( $system_info ) ); + $return = array(); + if ( $newHash == $data['check'] ) { + unset( $generate_hash ); + } + $post_data = array( + 'hash' => md5( network_site_url() . '-' . $_SERVER['REMOTE_ADDR'] ), + 'site' => esc_url( home_url( '/' ) ), + 'tracking' => Redux_Helpers::getTrackingObject(), + 'system_status' => $system_info, + ); + $post_data = json_encode( $post_data ); + + if ( isset( $generate_hash ) && $generate_hash ) { + $data['check'] = $newHash; + $data['identifier'] = ""; + $response = wp_remote_post( 'http://support.redux.io/v1/', array( + 'method' => 'POST', + 'timeout' => 65, + 'redirection' => 5, + 'httpversion' => '1.0', + 'blocking' => true, + 'compress' => true, + 'headers' => array(), + 'body' => array( + 'data' => $post_data + ) + ) + ); + + if ( is_wp_error( $response ) ) { + echo json_encode( array( + 'status' => 'error', + 'message' => $response->get_error_message() + ) ); + die( 1 ); + } else { + $response_code = wp_remote_retrieve_response_code( $response ); + if ( $response_code == 200 ) { + $response = wp_remote_retrieve_body( $response ); + $return = json_decode( $response, true ); + if ( isset( $return['identifier'] ) ) { + $data['identifier'] = $return['identifier']; + update_option( 'redux_support_hash', $data ); + } + } else { + $response = wp_remote_retrieve_body( $response ); + echo json_encode( array( + 'status' => 'error', + 'message' => $response + ) ); + } + } + } + + if ( ! empty( $data['identifier'] ) ) { + $return['status'] = "success"; + $return['identifier'] = $data['identifier']; + } else { + $return['status'] = "error"; + $return['message'] = __( "Support hash could not be generated. Please try again later.", 'legacy_framework' ); + } + + echo json_encode( $return ); + + die( 1 ); + } + + /** + * Register the Dashboard Pages which are later hidden but these pages + * are used to render the Welcome and Credits pages. + * + * @access public + * @since 1.4 + * @return void + */ + public function admin_menus() { + + // About Page + add_management_page( + __( 'Welcome to Redux Framework', 'legacy_framework' ), __( 'Redux Framework', 'legacy_framework' ), $this->minimum_capability, 'redux-about', array( + $this, + 'about_screen' + ) + ); + + // Changelog Page + add_management_page( + __( 'Redux Framework Changelog', 'legacy_framework' ), __( 'Redux Framework Changelog', 'legacy_framework' ), $this->minimum_capability, 'redux-changelog', array( + $this, + 'changelog_screen' + ) + ); + + // Support Page + add_management_page( + __( 'Get Support', 'legacy_framework' ), __( 'Get Support', 'legacy_framework' ), $this->minimum_capability, 'redux-support', array( + $this, + 'get_support' + ) + ); + + // Support Page + add_management_page( + __( 'Redux Extensions', 'legacy_framework' ), __( 'Redux Extensions', 'legacy_framework' ), $this->minimum_capability, 'redux-extensions', array( + $this, + 'redux_extensions' + ) + ); + + + // Credits Page + add_management_page( + __( 'The people that develop Redux Framework', 'legacy_framework' ), __( 'The people that develop Redux Framework', 'legacy_framework' ), $this->minimum_capability, 'redux-credits', array( + $this, + 'credits_screen' + ) + ); + + // Status Page + add_management_page( + __( 'Redux Framework Status', 'legacy_framework' ), __( 'Redux Framework Status', 'legacy_framework' ), $this->minimum_capability, 'redux-status', array( + $this, + 'status_screen' + ) + ); + + remove_submenu_page( 'tools.php', 'redux-about' ); + remove_submenu_page( 'tools.php', 'redux-status' ); + remove_submenu_page( 'tools.php', 'redux-changelog' ); + remove_submenu_page( 'tools.php', 'redux-getting-started' ); + remove_submenu_page( 'tools.php', 'redux-credits' ); + remove_submenu_page( 'tools.php', 'redux-support' ); + remove_submenu_page( 'tools.php', 'redux-extensions' ); + + + } + + /** + * Hide Individual Dashboard Pages + * + * @access public + * @since 1.4 + * @return void + */ + public function admin_head() { + + // Badge for welcome page + $badge_url = ReduxFramework::$_url . 'assets/images/redux-badge.png'; + ?> + + + + + + + + + + + + + + + + + + + + +

    '; + + include_once( 'views/about.php' ); + + } + + /** + * Render Changelog Screen + * + * @access public + * @since 2.0.3 + * @return void + */ + public function changelog_screen() { + // Stupid hack for Wordpress alerts and warnings + echo '

    '; + + include_once( 'views/changelog.php' ); + + } + + /** + * Render Changelog Screen + * + * @access public + * @since 2.0.3 + * @return void + */ + public function redux_extensions() { + // Stupid hack for Wordpress alerts and warnings + echo '

    '; + + include_once( 'views/extensions.php' ); + + } + + + /** + * Render Get Support Screen + * + * @access public + * @since 1.9 + * @return void + */ + public function get_support() { + // Stupid hack for Wordpress alerts and warnings + echo '

    '; + + include_once( 'views/support.php' ); + + } + + /** + * Render Credits Screen + * + * @access public + * @since 1.4 + * @return void + */ + public function credits_screen() { + // Stupid hack for Wordpress alerts and warnings + echo '

    '; + + include_once( 'views/credits.php' ); + + } + + /** + * Render Status Report Screen + * + * @access public + * @since 1.4 + * @return void + */ + public function status_screen() { + // Stupid hack for Wordpress alerts and warnings + echo '

    '; + + include_once( 'views/status_report.php' ); + + } + + /** + * Parse the Redux readme.txt file + * + * @since 2.0.3 + * @return string $readme HTML formatted readme file + */ + public function parse_readme() { + if ( file_exists( ReduxFramework::$_dir . 'inc/fields/raw/parsedown.php' ) ) { + require_once ReduxFramework::$_dir . 'inc/fields/raw/parsedown.php'; + $Parsedown = new Parsedown(); + + return $Parsedown->text( trim( str_replace( '# Redux Framework Changelog', '', wp_remote_retrieve_body( wp_remote_get( ReduxFramework::$_url . '../CHANGELOG.md' ) ) ) ) ); + } + + return ''; + + } + + public function actions() { + ?> +

    + Docs + Review Us + Donate + + +

    + get_contributors(); + + if ( empty ( $contributors ) ) { + return ''; + } + + $contributor_list = ''; + + return $contributor_list; + } + + /** + * Retreive list of contributors from GitHub. + * + * @access public + * @since 1.4 + * @return array $contributors List of contributors + */ + public function get_contributors() { + $contributors = get_transient( 'redux_contributors' ); + + if ( false !== $contributors ) { + return $contributors; + } + + $response = wp_remote_get( 'https://api.github.com/repos/ReduxFramework/legacy_framework/contributors', array( 'sslverify' => false ) ); + + if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) { + return array(); + } + + $contributors = json_decode( wp_remote_retrieve_body( $response ) ); + + if ( ! is_array( $contributors ) ) { + return array(); + } + + set_transient( 'redux_contributors', $contributors, 3600 ); + + return $contributors; + } + } + + new Redux_Welcome(); + diff --git a/plugins/legacy-admin/framework/core/languages/README.txt b/plugins/legacy-admin/framework/core/languages/README.txt new file mode 100644 index 000000000..57b2f194e --- /dev/null +++ b/plugins/legacy-admin/framework/core/languages/README.txt @@ -0,0 +1 @@ +Please visit: https://github.com/ReduxFramework/ReduxFramework/wiki/Translate for details on how you can help. diff --git a/plugins/legacy-admin/framework/core/languages/ar.mo b/plugins/legacy-admin/framework/core/languages/ar.mo new file mode 100644 index 0000000000000000000000000000000000000000..9605c4275cbbb94ca6bfb133e5f255b9d8baac81 GIT binary patch literal 19075 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 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/bn_BD.mo b/plugins/legacy-admin/framework/core/languages/bn_BD.mo new file mode 100644 index 0000000000000000000000000000000000000000..f944e029cdb4113f6d302cb7d949f6a0fcdcf7c8 GIT binary patch literal 6761 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 CFI8!x~F$t-1c_e zQ&o5B*1hGux4OI55RDPOup!2<1OhnLwGNICwvq9RbT&UsPR7wzaM@cO0O^a_7^?B z4S$gOe}}JvchULP@EBD68=%H{$g>VL|5>Q{SD?n-fc%-n^BE}p-wie1vry~$Ae23B zLyh~pQ2qYUm;c1`OHk|n3X~pShnn{vAgY?Xf1vvQ)llX8pzLa)>^KAEj}`bmunDE_ zO(;J+4Yl43%6~r(8QQ!TYQA5GKLkGpOFKg8^LeOs{4rF&FG1=54alE)ksposFHnBH zn@;-fbx`fE_nd%gpMm;*9%}wYsP(MDI^6W_?}b{=`#eA3`5}0M`rm-k^9xYx`ZClw zUxQlr-@+e-{{&^ndvJ>4_f7DP@DZr~8&LXe`EnP|QqG~q{S=g*FZl8wL5=sP@D%(O zyoI9ovbYJ#zko3mpSPj`KZly{>rip~cToDh0_VtHZ-fuQZMKOiPC_oAfY_&C(}k3g+=9cuii zp}uSR_7o}(-UDT?=b*;PeM#*9){BM8q|6=eETgZ`|m={`!1+?-VdechkW~QLizEN zQ1kyD)H=Ta<)5!Y>=*{*@@L@$U0{5Nh6sp~in4N}pAz@!kQaVaK=s8q_*I;`v*i zAB8pQKMoZqUxWJouROo)>%Rk0#rzkPe)r-u?Vmcda0zPuKGZlPU;afnNBLP_|7X7b zFQEMO*HGjABh)^+hr(U(=%YSQ`^uk!iq$Ek>+1x~tLH+6(k{|baiHfX5uK6JQ)>wk zJ@d$QwsF`aO(RNTcd&%`vdp!-^;i_#Hr-Qyr3cDH)J5iEX zjr3uN2})rY6;YZ5vAq=KgE$!3m4PbmXj&hH%s^EfOPH!14C5lVH(Xw%nG5eXbHgI- z2SwDf0Scvw9k{HWW_=enth6`tL95rv(qR(XxuOVKU1@c=b~VjQRSwtPa03_6D=iq^ z%nwI)Io+}ILyBm4u^S{EXN#`0%ftSb%WT@V7t?sy-*1f5j=318xic5j!KnPPOHtA@ z7c&Nql8${c9cFeR%5qE;BraA9Hp$H;r|=6}!-2b-jrFC}-BRHI!vgE=?%yByk$h&A*^&j3X}hgDAE^7-o)ds z^C8MFxprZ$6E@Z>l$&MeLTQ>Xe_mjt=5U}-9;;dwT|Ch1jzSjXSeIUAIkf~>6xbYl zw+hTj&2|t+p=~KPP}J@OvIAjPH!JP7SxL+|z*n%0ojE&Y4=iR@gFHw7(5!Y{lHv$9 zhS$Zc#xBU6-3X$>j4ijCMJ;El#UC2x277T^^@Eh3+!a<^r+RCmseF5*G*C0xcHXSH zX|gOFmD|c-+E@Ek>Zo$`j5AF%8yl}Gw7qMa1v_|sAdg&P%bI2}BDk6(jM}$XlXhy> zT+p|r!e)()Gfa93u{GYcU97d`@I&S}3|e?)Cn~zt4ql52##&1)GBE2mmdyH{A0MBX zejqh3(2U`LNxN zT9HmrPBd-Na%VAT&}y;y&@9UBAn3TdX~j`XtktUHGEHiVs)n7Jnm${bnyF2lwlg!0 znKO-}?yIT>61!ur}m?c6~>t)T6)+U2B`hD1lhp4*Cwef=A@oa-3(a~8z41@6qe zVH4a>F~2Y~Ypd4_ClY)A1v`Cm_Sh4({nNK$JJ}Fzb_TU*`dnhC>SyYY&|x*zC03i~ zz#0Taw_)q`$wSp?+LM)-=%Df^R!>|e`TcTiis zmbHGS{SSQkK+&cPvQ~GMW!I)y_@M@_`j+Dklbcv)>8B?Mpxq)Qd5MymKk6HH#LB;0 z_O%wp?Y$Rn+2v7{fc3}{xJi_MwK-19%|7QV*Te0o7vuGV{Hts+<3Tu%o(x?UM;*t7 z*zD~+&moh9c@f3>j7#oNb6VzMSyj)CLK?@9%?s}RAS1XAeaE3dJ=cBaii7kl?{Tap zVX4tDWEmNT@cCIsp%ms^Gu^%C+eN}O zBp7f`n!R@?0o|c)*wK7qgEAuqGRq0wz6jr~QIJ0=0451*&s^SN0kfinUXv@W1JWA7g z<20>_zU`vm_$jlrGD(Yg&jRIW;mhY}d$-Fu%Jcr@ zna7Q~F3h(ww{5Nx=t-H%VGI69;X0&?Wo>5^hf(JspF^!}%RUQTQ7;$0x_6tdha%tX zCw6jZSX!8WbUK{vc~AczE$lsiG`C}wh2@8RnEUJwgOlCmWNpf94-K_&i!6p}a=Yar zfl~U8y*Ms39d0JU8ygqnT_O8o($Gik9qNvgy>g%4+0t=+_HMJNyp&~SlrE zJo^2e$zV&z&`a_`g^)7B?c~mkFjssuoelL50Wm$!kab|NVfS9>9QZ^34Msg?XNb6$ z_Q}~_Hq`&uR?WA#9fS(LWW=e!A)|k!vn|Ko$dnjfBE*SjO{MYK6L{tH)GTEk-XzTA j?j1s!Arulp!G9%MLBat|6xI#*0G-X&p%dr-J30IxiRMd? literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/de_DE.mo b/plugins/legacy-admin/framework/core/languages/de_DE.mo new file mode 100644 index 0000000000000000000000000000000000000000..74a0f2bce6705921d0060602dc28d5e1d116eb6d GIT binary patch literal 18003 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 Zu0tg!PqZh(3;X>IwsNG7RT953_&;jV04V?f literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/el.mo b/plugins/legacy-admin/framework/core/languages/el.mo new file mode 100644 index 0000000000000000000000000000000000000000..3cec8b060a80ef12f5f95d6e2ab73bf5c51fe58b GIT binary patch literal 18442 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 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/es_ES.mo b/plugins/legacy-admin/framework/core/languages/es_ES.mo new file mode 100644 index 0000000000000000000000000000000000000000..f2fe50b08f54b092cda5424faec15c998e15b9ee GIT binary patch literal 16206 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 H2)+LT@KhWb literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/es_MX.mo b/plugins/legacy-admin/framework/core/languages/es_MX.mo new file mode 100644 index 0000000000000000000000000000000000000000..906a2ad3d1a92fa6179b3b5f835b1f5f8a38b5f8 GIT binary patch literal 6325 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 UEbCabUp&5i?ts=4?Tg+21G_HLPXGV_ literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/fi.mo b/plugins/legacy-admin/framework/core/languages/fi.mo new file mode 100644 index 0000000000000000000000000000000000000000..d04d4cc79c344fee2f69fcc60ecb4bd7695d2ac1 GIT binary patch literal 4727 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 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/fr_FR.mo b/plugins/legacy-admin/framework/core/languages/fr_FR.mo new file mode 100644 index 0000000000000000000000000000000000000000..17dfb6e249c1d169894bf8e24e7e3783ee62facf GIT binary patch literal 23875 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 L;N>h@ij@BcCfFcM literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/he_IL.mo b/plugins/legacy-admin/framework/core/languages/he_IL.mo new file mode 100644 index 0000000000000000000000000000000000000000..f831823a5477be3f7eb2a8dee68a16a2cb1988c8 GIT binary patch literal 11072 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 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/hi_IN.mo b/plugins/legacy-admin/framework/core/languages/hi_IN.mo new file mode 100644 index 0000000000000000000000000000000000000000..eb687d385f0fe0c524d0b54714a60a09b23cc64a GIT binary patch literal 9289 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 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/hr.mo b/plugins/legacy-admin/framework/core/languages/hr.mo new file mode 100644 index 0000000000000000000000000000000000000000..6f577572edd64c46127ab48084496a3209171e39 GIT binary patch literal 9232 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 UqYMYuU11Riy&ZPiG>Fyz0HUV$sQ>@~ literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/id_ID.mo b/plugins/legacy-admin/framework/core/languages/id_ID.mo new file mode 100644 index 0000000000000000000000000000000000000000..9434f24b0e9480737e9f701503211996cc47dac8 GIT binary patch literal 9286 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 PxkSiq@MwsJkE#Cw)jSfr literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/it_IT.mo b/plugins/legacy-admin/framework/core/languages/it_IT.mo new file mode 100644 index 0000000000000000000000000000000000000000..948d994bf87729e252f49781bbd34a9627cedf86 GIT binary patch literal 16176 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 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/ja.mo b/plugins/legacy-admin/framework/core/languages/ja.mo new file mode 100644 index 0000000000000000000000000000000000000000..30a0a90569a30907bfae54ac670cd73237d04700 GIT binary patch literal 19459 zcmc(l36xybdFLNXz`>3kV>@7QoF{@j5ZKxvlfK0i70iw?k-eauUv~- z?a9*BjZkZ|1V};>5|Yp^p%x%8+7-t*HgRw~J~Q^5lf}uDsuz1E%uI4TW6$xN`Tg&` zuez$bF>>OZ)akGP@7{OUZ@;(d@2jpmnZUME6upWE|{0;DvAN9Ozz?;Dg1-kg zg3_BuLCNKhz?;GKAVYbty83T}+RuLh`SX6nzrO^33Tpgsu&BM@TcFBq*L&U~Fbk^R zTcF1O9;o&IJ*f5kA6I`hOp!ib2R;Vg20j8l1*-p#K*_fcRKK5q+V{^LUWF2i@7IFk zK_BFmw*VBM+CYu7!j=C797TBzC_Q}%l)jw@rT>2oUJm{Ul$`!6sCj=3`ryw%RM5NO zMl1h%Q2KlqsC7LEYCR8wT1Omw6Z~UP`<%*T;>SYJyaz|?y{q2`E~fk%sQEweyLSB_ z1;vLOLCMhvHP5F&@%?U4a-R&cMDHO`>uv_MzC5UTd%!W^R`53Po1n)1M^NMZ6R2^1 z=I|QF9~9pob{GTIF9~X#KLl?9*Md)iuY$LNccGL! z!6jfl_zUn3aEx!?KMwNe_3%&g9|k3_;|@=Nn*R+~{syRa-vYJIw?XN_Pr=8)Ux2dT zFQN=uZyeMW8Cdi@GG1H2mJ5ufLPu*yq-va3~~#ybdV{#U^r;7L$? zUG)3*{ZeouDoW@G9^asC~Z%N)Nsc!b0yqf{5PxCs6&aWm2`T2giaFKrQ95xtG7XochQx94r;w0rqgG@>%peWJZ~fftU(D0ct=00BWB9 z38D(#?=Z;6z-gf5{U|8DWWg=qW-tWD+-2w80ZKpiy7EC#a_9xcm%jk71%C+61Ah!^ ze-rPv{0l*~`zok;p9d#_uYl5%e*`}Zew=^W=K_b1f?9tJydL~A_z<`T)ciki@Bf#3 ze|e+b=Z&D+e-2c;FMz)Q^PucLJJF8Y1Ik}*1@8e*g6j8E@EPz!EK>8o2x?ugy7DPd z`*;hKe*6d&fBv7VznsBXl6O6*cJo2)vlUePXTdq(tKf9-vdLC%_k-fo=Rx)R1BW?K z{9WV9J3+NO0cu@;3TmC-0*xG8`Ns}_4yye%_u6*Xf#WIP3jP3m6jXc|_c?4^WpE03 z`+evVm;@!yw?RzGyNs6_Z#;N8crU2^PXV=_8Lm9rl|K){dhZcX>w6Y_20Q?2-JhLm z>t})*_e-GUkN|1ob%9rd-vs{y_%@gUXHK*6@GN)}<-Y}Q0mW2}b1QfScqjOY%ZSsU z=36ww#-9LulyVwGbl!IyzVCj|%Tb;V{xNtOOn{$#fW3lyL5A{*;9~IhnRc9l!@mJF z|6LDSc~1kcqTJ;02~g|(vU|S?Y@>Vv{5UuYB_9J$1aT=|D=2Bg=<_um>Y-y$x2yb~L;14#(6^!0(08HebC!n`^bGWSQDp_DdHxINF6c=} z_K(?_&lmW=0@?$;-_+QD3*GaTUGKM-3;Gik_>6(3K-Z|?K39PW=r(98 z^ft5zx&itW^a<#GNsm4D>!|GV}uUAf(Up7EBJY)ICoE3sBOPzvytB!*78Tp*Nt{ zp+AJYNin}Q6Exp*)9CC?lSgO$TQadsW}<&zJnqj4+9x%{CVTfa8MVFQ^2%|bsF=A?|3>N_oL%1glPBuvq!J(Ub& zYHT0aRuXfV-WE$F{a8Gn37Ei6>`h;hj-}#)Fq11A)ASX&AeEI}`KXmYeL2Qw**61r zVIS+87*6Pj3W4cz?q)zt-sUQ=>5Ac-p@58U;0<2_d zn9s?7`3tcvR+P+|_jAHrqB%hWRI|(#90WRzE=U4bM zGO@OxJqj#}+}Kn5U})f7vi z@#&6+cqDCVGq|cuMjkdaT8Fza>&({s4+TNmxu94xZY^6LC6AZG*HRPnm*PLL=xl44 zPsaUN%1YmF3H|m=m}(j0qZQHYt{+=MvE*O%2Ge&_`eEeq5(I?X=*Vz>h{4i^s@vfOowJVS<{%^cMX!y!!o$iF z8dLCNMym1+$dHZTecM|TO|2TG!;hu$W|?~5U#OB8xirueaerxtpU-MkbxqxZPYfeEjCN#7tNm)4P(l3h2G3m8V%Qmcx`+qo+J`N)+vet6DmO1 zXhjv=6f9N##PqfLgj>)&Mm&;Xy&K&K-sz4ewQL(&*(9 zbNmyd`~~S)lU(^Mao_OwUY=8d?@UIygYO(w)|*YxMz}}>>0`yQW{n{}+?2NI#}e%> zh~MObX}vcmz~FIuDWX}{%$QG07WdjWGD$tQD_H>|0nQ1rpP-GcG&4RyKG%^B{B~Jt zvqCWghdwbn5rfM~5&#?qHKY@XxZk8;h=20iF+kURZgaCYH|0esjzfR$(kJK~Rr@&b zfZRlZjAdKB9X;;mtTz{3^~X;bJLI^s-n>{gixY}_^RTCopg}6N!0yhQXLWROERpk~ zs538!Vo253WJ2PsH;jP$6fd69=%IMIdsW?e_jwlgu zed_(ia+5W+F53z+&L_l{A&)F6n~4yNHZRsOFP0qRwuC2CVHnLTx$C{@lpNwU| zHXId@4*4gOzK>kkJ}t1Br#D}G^cF}^HaKQI_sSn3VP0SqR$G&b)6&Kh=OUC+m#Z{n zW!dP0QSTr=#zYMlRZ37nr|MWS`9o?s`eB-4p|~U)HAZJE=Ju=7RYssC-VsBW*!---+8)cKn8PL~<`9+* z6iw`w@ULe7b{F~7vJ|;bbQIFEmInBWOuzxL3Er8IY>q_><&|wJK)6>XO(YK5(mB}X zyq^*+vu|~rtzO5S zTM3D5hO|X&&*W3$xb!4Newt_tMtO{$N#T9GhY=3?u6Xxw!p1#=nz|;vemFrwVAfRj zrzG+^&6_ubyv6s;pEGmL{iD!FIBSHftg1aD%~71@WMMVTxSeHVhLao1}nnv4&^A)CvBbE1iON}3*IbaF))X61HEC;~E0$6C;T^{t2nieO~-Sb#awDj3Ac z#TT0s2dgS4*X1xlyY_o8ZJ0|M#hA0yg5{H>h(ix7oIOj7Fv~WMVvJEqQ=g0BkjxI8 ze^HPntJB6t7|U2K=@p@mdnRTuPPlgD5nBDSDTdq=YTBkm5+7nBL=vM>=9%IufaHgX z?LC!|zM0h;Ma6oD2CM0GNqubIs>6i5(tFKdTLozlIrxt5tb|Cf!S6C0*I5haq0CB6>~Yu~Vq0^$bYnw9 zMkmwe=vJa0ee&EJ++mp+ zjpWG+aB%asNOJA%^`>{CIapyfi@u0+*@kqj02`8Su!bjM4Yyx2d*X2{Uu8#E(st@|Zh$m0FSt!*o<#E{wUOX(IN& zB$mr%7)+0?xwfQxG_}D{t$j4LZl-bvR~}mE0&cCETIaFty0L7$;sy596mXi$ARP8- zr1J>6vLYAf`+`KO&K>m|{SJ2iZr|keZF#v^c&=F3FmT~qY0Yl)jZU$9Rk8a;^LMt` zy}H=-Oy7>xr8TEY>$Z4lX% z!+XWT=3>|CV&Q01?&>Xe@6}k{M~dBN%MG~_>wn|W;PX#;wqdc*JFw?a|Gv}3F4{d; z?0TcveUO=lUKhJqakp6*t7qLkUTNi_V&MRDZYvf}@nrVJ{7iO~_pG9H{%~n!ceG^K zu&dbF<>{SP)Lra4W_HImpBXsxN@>G!HuX~J+_QAmg1gR`DH(~b+HV~(7>8KagQiW_K!g3X5ICatp+V(B< zUOczH|6Fg>q|n=c3h}HNxUdN+4AmC9UYBlmo%Z^+tSTKtKE3^idI$HsfHaET8;x*T ziPIUc?}gp{Z)`UVW^oscS|9Z;o?Po)JcFR%#>RmYXG<&h7rS@pJ(^eQ(V%^sr5vSw ztNWgRP3^kYdOTrOrC0X%9ed3y4pVTmcXst6?_QUB$(B%w-ho5MO1;~Q-LP?wT>v9n zBQiRp!Og?*VrRkV(zDu(SZVmigY@tK##}7ymZcS*lsXS?!Qi%PWu~ooE(J8oNEHj% zgd{vO3Z~2`s999ox1+Pvvr|>wPZzt_t8dpc7tihJ>)9A-J=VAi?Y5)8WW@l5(ytcEizAkuU9AyQj48Ae=s=C1Xe3J5A#rt2-60PL5$$u?s!vRj0GB z_Z{9f(0$H}VArOBGdL>aOtrcZc;GB&VD+oDHWZc1HfFYk$7H8CL(~Vw-cojt_B*@i zyT7tMmiD29n=59i9Hl%3=4cfhE9r@9H3cssJ1q}6Y+}B-sA5WuZJsQ45k=OE$qGIf z7~h7&CyU($BUc3yX@!J=-tf0iW+f}@9qioRziYo&$zNkA#%pOjmiUZoR64lUNP~W? z8YVsE)!aGwc$dK~o$vXLVHKAKk8TwY`wt>$#JR`J9~mm5-*l?9h1Ig`O{MjlN^734 zbPitshV!Kz1SGg=6d{VL&J)Q~q8C*f+)#E6)`+5*wysz>SS+kB$Fz&*a6fAYj_m7u zc0KMwj!MpHS84ZarHwsuV8fiSiH&k#7tdYj-^8+Hr0+Jq>bscqc&T@_;ygaM7YnAn z(R#-3>M}Fp3-M?+cAAjT-Sf^__)oZoVaG3?In(zfZF(=B*%`*WqU^$c^ZD=bo#(ro1{k)M2(ZI0}CSs*3 zT~Z^K7x~EQAzdw38|bTY)9TmAufk)G+@fIOqjiSze|DHEi<16FLBJ_?^*l8eC^p%2 z0ITUNlzR48Drd29lA@N3+OOPi%-TeL>6&7%$zl`|TvKARn z72CCX=Y`3MF{hEzjMC-}gL~F_r8f?EqPw)+>hf9$?vO?D4+*i?X z&|07iP{q!5?k>W8V_WQ8U#v|pdrRjTW5AqD+fE#SbREB%EeDD()FxZWU+gzygmuqh_B1RLU+Q&?h&+|46<`zl}ilG^5H8< z!fx0+Z~$jTFhN`FGM_JY;ij0L>D)PlRA5!HYp;41)(sX;_N{rr?1SB5I@lb$Q#Y3% zuqm5~+T@cy?>&jlkfH>mMh(5l0iw*ra}zG52qbsa5o0JjEFAasMTU>gME+6Q5~Yk7 zQ|02fNmKdSTKfLAmBoTwcx60=tvDLo2a^(tS9^npxA$*;xqmx*uM!~gWg2pE+&1of zP3b(N5e|8V*-C|VrCpox;r7q(>D!IFD;zdK;vjynHqkG3p#mlkK-D+_umQ!HasWYk zBb*OpuaeMqvtim3(8P$E(Y5hI$2ib9ui%b|@CZey2&Xlt5E~n#v&cyHxvSVs;Ktv6 zP5%qW?KkMY$pwtR(gx0(gtya}I}Tcsjr5DRMmQ!*VKY@ysYzXir82ayRKyY9A9aq# zo)Ivwr&bPZdOe!FtlUFOK%s_ZYth>5SmjGdv0he&%sB2nX@p*JSs}sL2##MQS0^~z z6W9?vU;mC>cBdTn$(N0mReN&c0l`dz?{;b_k7&Gx+>8Pp({m&sA3htMR!o6ph!$sH#u*3K|u!OB*6bzx`e7|EZ!_lO-id|_-X0_{br?{?QA zpBgzOvQ^__BD2Sf)&v4MQFIgKh@4d9A<7Hl#qifm?~cgyu5!$k`*6vgaz$%YYz|*; zM>MLS9}6rnzpq3e5FF>#b4C_N(QJ&j)=$a2JxH9L{8~ zIE;OA%4objF^yc?cW7JR=`9h9O@7BwnTXKWy|T2M+n(rjP<2qTsSmSOpO2)5a&n3c zwm*7AhAbVkY1h!fXK#HHaR=Q;{*3mOIgpkAZpksqFQQ*6*u^plv$>xuXvSefqKFjbB zpOx8ZMKG2XMps)$xM4s`)Io0aNU=c3XDyt>aefuKQDvXL=k{MbgZrZc?qqG0ybV); z=#l`hdz9Z|z?e1OVCM#19qE@CrS)66PkdK)HTvck7~)pnx>dTJbNadqE}EZfV9Vuu zXRc9oCbcY2$jzT!B*NY8C4`VH4PA?Qu;7j?|R_T-s)? z-`Or_ZF}{Ex5E8Kie(K(iRw|YL~RIWry>&?%EQXP4Y3Bn>ZEBBxV_hm0wWIixfe}{ ztG%8unz9Z__C3!zsO&?e`0%gq#36H{m+6{Q2BwBx4lO{sXXp0okSv~~c7m#Gwld`4 zb<7o}<8Z+aZQMiQP~Wk=rIRe^DCc8cdAPVGdyojMZyfry6;qSY;A5ULYuGu=SLutB zk(xMucn-gBjAnY8zdl^MF7=CSfUJ*pcSm|ZD~X7+6yrE~$#3>x^s3s7)cG24?2QptU zMOk2BUG(}_=^SmU#<9!&=%+6*tm;kyvmEA!jnBchv8!I&=Ynp}iHPQMKJt=SB;>g!$O?r?v_$*cOl_w+S~R$R>Hmu;XjDnv4b9vm#KJ6-BoRg`se zib9+w7vQ^?4I3|>Ct6DCza-#P9~Ua-h(gG(*8gZZPTC8ff9)tmeOH008#f(&!GO>& zX?NutVSPfc z{Wi%&2K&8I>G+f67be`9gB-4S_+^TeyZZWnSf=X@77iO_I%4iTFO)WLkFuu0MlO>% zUcf~RZri93>u&t4S6QoE;N;qYL-O1Fy2l+XY7L}1uKk*R?o&QW>-RiZM8)?DoF++W zT&f_o=_Ll}TRM)~2V^QFxChVZ%V1+CydbkAGkTZr$heCi*tbgGq857JIlI~=$?w8z Hh0*^HTMVP? literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/km.mo b/plugins/legacy-admin/framework/core/languages/km.mo new file mode 100644 index 0000000000000000000000000000000000000000..2e66d5e1261e0849512875747785d2b2943c9cf2 GIT binary patch literal 9679 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 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/ne_NP.mo b/plugins/legacy-admin/framework/core/languages/ne_NP.mo new file mode 100644 index 0000000000000000000000000000000000000000..cefe9c1562bcc1984cd9eda7544682e412fbe915 GIT binary patch literal 13862 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

    ^;UPgv3gx$1HTBS!YoS=rq@zd zt@u~l8+Cf!tL^nWwHNqyN6`s>-4sgWn4KHJ@U8)F--U=POG22i)5hr_^f{6hW2#gw zH_@moZ$`~LmIuv+)6K;PnhRfSE*>`y=;G~_=E8~Q;;%OsUT7}-VRPYmx*nmyg8mV@ zKGj_KJQEh13s2iMPc|3tYc9NsOr|sbBm$ZXUuiDf$CcVjU_WF(Z9AV}0=?HI=7dB_v!VscQ z*=|<3-A~w&M_G)G@xw7oNULq%uHDS}2D{V<6wU$sl_vx~Kdb2REA@}!Zm zKQ=urjh3h966!S<7k-=y;^rTvBcb6Zn+q@70DYmk@SKe-fgtLnj?#&EK~%`>xc!u+ ztBczLv$6G!GFZ?jL%epBeezr@*zXCOaW3!R5{&q?rRoE$d(3J(UU?oMpm*9A)Oib}P-K(dMj65ug6h5X0c7r}3cLVjZbUKo&w{ zTQ02SIP`OF(7IS6pKWRX1P#PGd1S@e!72~~q@cnH#+NaFiK@s-#JG?TG67|lTb!7R zQFQc?yb0Qkh<7U-t@~Dz5j0B^;#0&`u?DUU!wyRcKYxKGVbs z%C(CM-oSgjD+}ecmQT?~yA2|LPv800IQ6?JK-`r~{la^)sAmgX%;h=Dfws8_fZXUQ zQREvn981r3{$;MY@SyTRQ*%kEoz!ZB^U^ag3Eh~t^b^U7gHW?sn4WW=w)BV@tt05TT#MEY7ia# zCL!CO7ayR1nl_M%;iIus9dL1SMN5U}JJ>$)`Pw$77TKkeH&cHY^dw)Z=1@|n4e zRRqS_?2Aw*Hr-PCtw6A|)wxrrH(ibc1YcY~mtenFzf{jbXSk~uZWn(|R@HIn0AH`WT*hd|knes-Zd@vb%lN{A$gjHzTQ+9gtu16^vZ#27e7BY-imubJu z#}=aDVssyER=avcT~T%IT!?yePWLxfslvG9!WJaSa+OJS0zo!k7ge?}Q3+2n+a;ce z4_R8+yD~{mfKJBBUR2HwOQo7fs>fv3jF=Hf91gLA}Vz!@KDS^#%+K>kcE{9IrUey5ngaSvq{M}o@tn)gN$l4`jqq4@Xd(Pb<3 z)c-^NiKd#X9a1Q^RaDfV}JMgMgL#(Dt>up^1OQ>@pwd4~MdoHY& zz#XUhip{Kc=09%5ahx1Q92MBhb{f#jTz@TMFFfQ99ElPP7&yf-HunJA%PokuKgINHhss`?3bav|2w2d9}1M;a)E(Wp&Yx=heo z`$sQZ)m$|2e#d*97p%e+$6ZX?-t=|UhS14kQzZ_0$R_%QhcA%jvQRE`HIpNnUQM=D zKs+2`S*HMz%NP!8B_$be&Wdpbghd zY*UKTW`Cy;i+OSBL8p%}Qb{QWD6--YS@OG9Lth8XP+)H#i0?5i$6O!x0qQ$%N(1Y+ zvt578W1U+df6~B>OltjjQuw3>&QLFJ-IZE4HW!b{as;ilmKtlDrycd?$zDv2a0? z+)k+Os_=`nNq@NI+Gi|}+$k)!wc_jx^?hzRL1zlvvaauX+@_$$s3cgYdceAF=BZwL z+O_Q_F`Qf$s>Cp*!(|%htJVMS4(o7yXpb&eeTXW7KSiX>%Jyly3U9ijljtZ6I`_G3 z<6(TSSTWkZusmS@xl2rMl{bZzNz^WPR6r7Ofv%H0#6hv6=Z*iEq5oTA;B}hbHW3_y Xm;71DAvnXxb`2 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/nl_NL.mo b/plugins/legacy-admin/framework/core/languages/nl_NL.mo new file mode 100644 index 0000000000000000000000000000000000000000..8ce8f394a5ad2c4d4d358aea9c3cbe0b52a91037 GIT binary patch literal 16640 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 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/pt_BR.mo b/plugins/legacy-admin/framework/core/languages/pt_BR.mo new file mode 100644 index 0000000000000000000000000000000000000000..153f3e37ae1be81cee5cc84ebdb08a05c1201e14 GIT binary patch literal 22782 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 QG^(wuaB-BVueFi?1@_Ay6951J literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/redux-framework.pot b/plugins/legacy-admin/framework/core/languages/redux-framework.pot new file mode 100644 index 000000000..554d81f41 --- /dev/null +++ b/plugins/legacy-admin/framework/core/languages/redux-framework.pot @@ -0,0 +1,1540 @@ +# Copyright (C) 2015 Team Redux +# This file is distributed under the GPL3+. +msgid "" +msgstr "" +"Project-Id-Version: Redux Framework 3.4.4.9.4\n" +"Report-Msgid-Bugs-To: " +"https://github.com/ReduxFramework/ReduxFramework/issues\n" +"POT-Creation-Date: 2015-04-02 04:45:17+00:00\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2015-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"X-Generator: grunt-wp-i18n 0.4.9\n" +"X-Poedit-KeywordsList: " +"__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_" +"attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n" +"Language: en\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-Country: United States\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-Basepath: ../\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-Bookmarks: \n" +"X-Textdomain-Support: yes\n" + +#: ReduxCore/core/enqueue.php:397 +#: ReduxCore/inc/extensions/customizer/extension_customizer.php:562 +msgid "You have changes that are not saved. Would you like to save them now?" +msgstr "" + +#: ReduxCore/core/enqueue.php:405 +#: ReduxCore/inc/extensions/customizer/extension_customizer.php:563 +msgid "Are you sure? Resetting will lose all custom values." +msgstr "" + +#: ReduxCore/core/enqueue.php:413 +msgid "Are you sure? Resetting will lose all custom values in this section." +msgstr "" + +#: ReduxCore/core/enqueue.php:421 +#: ReduxCore/inc/extensions/customizer/extension_customizer.php:564 +msgid "" +"Your current options will be replaced with the values of this preset. Would " +"you like to proceed?" +msgstr "" + +#: ReduxCore/core/enqueue.php:428 +msgid "Please Wait" +msgstr "" + +#: ReduxCore/core/enqueue.php:439 +msgid "There was an error saving. Here is the result of your action:" +msgstr "" + +#: ReduxCore/core/enqueue.php:440 +msgid "There was a problem with your action. Please try again or reload the page." +msgstr "" + +#: ReduxCore/core/panel.php:65 +msgid "Warning- This options panel will not work properly without javascript!" +msgstr "" + +#: ReduxCore/core/panel.php:141 +msgid "Settings Imported!" +msgstr "" + +#: ReduxCore/core/panel.php:156 +msgid "All Defaults Restored!" +msgstr "" + +#: ReduxCore/core/panel.php:170 +msgid "Section Defaults Restored!" +msgstr "" + +#: ReduxCore/core/panel.php:184 +msgid "Settings Saved!" +msgstr "" + +#: ReduxCore/core/panel.php:204 +msgid "Settings have changed, you should save them!" +msgstr "" + +#: ReduxCore/core/panel.php:212 +msgid "error(s) were found!" +msgstr "" + +#: ReduxCore/core/panel.php:220 +msgid "warning(s) were found!" +msgstr "" + +#: ReduxCore/core/panel.php:340 +msgid "" +"Your panel has bundled outdated copies of Redux Framework template " +"files – if you encounter functionality issues this could be " +"the reason. Ensure you update or remove them." +msgstr "" + +#: ReduxCore/framework.php:220 +msgid "Options panel created using %1$s" +msgstr "" + +#. Plugin Name of the plugin/theme +msgid "Redux Framework" +msgstr "" + +#: ReduxCore/framework.php:224 ReduxCore/framework.php:228 +msgid "Options" +msgstr "" + +#: ReduxCore/framework.php:1381 +#: ReduxCore/templates/panel/menu_container.tpl.php:63 +msgid "System Info" +msgstr "" + +#: ReduxCore/framework.php:1684 +msgid "Enable" +msgstr "" + +#: ReduxCore/framework.php:1689 +msgid "Disable" +msgstr "" + +#: ReduxCore/framework.php:1695 +msgid "moving the mouse over" +msgstr "" + +#: ReduxCore/framework.php:1697 +msgid "clicking" +msgstr "" + +#: ReduxCore/framework.php:1701 +msgid "" +"Hints are tooltips that popup when %d the hint icon, offering addition " +"information about the field in which they appear. They can be %d d by " +"using the link below." +msgstr "" + +#: ReduxCore/framework.php:1706 +msgid "Hints" +msgstr "" + +#: ReduxCore/framework.php:1833 +msgid "Default" +msgstr "" + +#: ReduxCore/framework.php:2687 +msgid "Invalid security credential, please reload the page and try again." +msgstr "" + +#: ReduxCore/framework.php:2753 +msgid "Your panel has no fields. Nothing to save." +msgstr "" + +#: ReduxCore/inc/class.redux_filesystem.php:23 +msgid "Unable to modify required files. Please ensure that" +msgstr "" + +#: ReduxCore/inc/class.redux_filesystem.php:25 +msgid "has the proper read/write permissions or enter your FTP information below." +msgstr "" + +#: ReduxCore/inc/class.redux_functions.php:237 +msgid "Dismiss" +msgstr "" + +#: ReduxCore/inc/class.redux_helpers.php:577 +msgid "" +"%s version %s is out of " +"date. The core version is %s" +msgstr "" + +#: ReduxCore/inc/class.redux_themecheck.php:61 +msgid "" +"The theme you are testing has %s embedded. We invite you to read the " +"%sTheme-Check Documentation%s to understand some warnings you will see " +"because of Redux." +msgstr "" + +#: ReduxCore/inc/class.redux_themecheck.php:109 +msgid "" +"The following directories & files are still located in your " +"Redux directory. They may cause errors in Theme-Check." +msgstr "" + +#: ReduxCore/inc/debug.php:41 ReduxCore/inc/debug.php:69 +#: ReduxCore/inc/debug.php:76 ReduxCore/inc/debug.php:77 +msgid "Options Object" +msgstr "" + +#: ReduxCore/inc/debug.php:54 +msgid "Show Object in Javascript Console Object" +msgstr "" + +#: ReduxCore/inc/extensions/customizer/extension_customizer.php:597 +msgid "You have changes that are not saved. Would you like to save them now?" +msgstr "" + +#: ReduxCore/inc/extensions/customizer/extension_customizer.php:598 +msgid "Are you sure? Resetting will lose all custom values." +msgstr "" + +#: ReduxCore/inc/extensions/customizer/extension_customizer.php:599 +msgid "" +"Your current options will be replaced with the values of this preset. " +"Would you like to proceed?" +msgstr "" + +#: ReduxCore/inc/extensions/import_export/extension_import_export.php:120 +msgid "Import / Export" +msgstr "" + +#: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:106 +msgid "Import Options" +msgstr "" + +#: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:107 +msgid "Import from File" +msgstr "" + +#: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:107 +msgid "Import from URL" +msgstr "" + +#: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:110 +msgid "" +"Input your backup file below and hit Import to restore your sites options " +"from a backup." +msgstr "" + +#: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:115 +msgid "" +"Input the URL to another sites options set and hit Import to load the " +"options from that site." +msgstr "" + +#: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:119 +msgid "Import" +msgstr "" + +#: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:119 +msgid "" +"WARNING! This will overwrite all existing option values, please proceed " +"with caution!" +msgstr "" + +#: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:122 +msgid "Export Options" +msgstr "" + +#: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:124 +msgid "" +"Here you can copy/download your current option settings. Keep this safe as " +"you can use it as a backup should anything go wrong, or you can use it to " +"restore your settings on this site (or any other site)." +msgstr "" + +#: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:129 +msgid "Copy Data" +msgstr "" + +#: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:129 +msgid "Download Data File" +msgstr "" + +#: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:129 +msgid "Copy Export URL" +msgstr "" + +#: ReduxCore/inc/fields/background/field_background.php:124 +#: ReduxCore/inc/fields/color/field_color.php:73 +#: ReduxCore/inc/fields/color_gradient/field_color_gradient.php:79 +#: ReduxCore/inc/fields/color_gradient/field_color_gradient.php:91 +msgid "Transparent" +msgstr "" + +#: ReduxCore/inc/fields/background/field_background.php:141 +msgid "Background Repeat" +msgstr "" + +#: ReduxCore/inc/fields/background/field_background.php:157 +msgid "Background Clip" +msgstr "" + +#: ReduxCore/inc/fields/background/field_background.php:173 +msgid "Background Origin" +msgstr "" + +#: ReduxCore/inc/fields/background/field_background.php:188 +msgid "Background Size" +msgstr "" + +#: ReduxCore/inc/fields/background/field_background.php:203 +msgid "Background Attachment" +msgstr "" + +#: ReduxCore/inc/fields/background/field_background.php:223 +msgid "Background Position" +msgstr "" + +#: ReduxCore/inc/fields/background/field_background.php:277 +#: ReduxCore/inc/fields/media/field_media.php:149 +msgid "No media selected" +msgstr "" + +#: ReduxCore/inc/fields/background/field_background.php:314 +#: ReduxCore/inc/fields/media/field_media.php:198 +#: ReduxCore/inc/fields/slides/field_slides.php:126 +#: ReduxCore/inc/fields/slides/field_slides.php:188 +msgid "Upload" +msgstr "" + +#: ReduxCore/inc/fields/background/field_background.php:321 +#: ReduxCore/inc/fields/media/field_media.php:205 +#: ReduxCore/inc/fields/multi_text/field_multi_text.php:69 +#: ReduxCore/inc/fields/multi_text/field_multi_text.php:73 +#: ReduxCore/inc/fields/multi_text/field_multi_text.php:76 +#: ReduxCore/inc/fields/slides/field_slides.php:133 +#: ReduxCore/inc/fields/slides/field_slides.php:190 +msgid "Remove" +msgstr "" + +#: ReduxCore/inc/fields/border/field_border.php:125 +#: ReduxCore/inc/fields/spacing/field_spacing.php:191 +msgid "All" +msgstr "" + +#: ReduxCore/inc/fields/border/field_border.php:138 +#: ReduxCore/inc/fields/spacing/field_spacing.php:215 +msgid "Top" +msgstr "" + +#: ReduxCore/inc/fields/border/field_border.php:145 +#: ReduxCore/inc/fields/spacing/field_spacing.php:222 +msgid "Right" +msgstr "" + +#: ReduxCore/inc/fields/border/field_border.php:152 +#: ReduxCore/inc/fields/spacing/field_spacing.php:229 +msgid "Bottom" +msgstr "" + +#: ReduxCore/inc/fields/border/field_border.php:159 +#: ReduxCore/inc/fields/spacing/field_spacing.php:236 +msgid "Left" +msgstr "" + +#: ReduxCore/inc/fields/border/field_border.php:173 +msgid "Border style" +msgstr "" + +#: ReduxCore/inc/fields/color_gradient/field_color_gradient.php:68 +msgid "From " +msgstr "" + +#: ReduxCore/inc/fields/color_gradient/field_color_gradient.php:82 +msgid "To " +msgstr "" + +#: ReduxCore/inc/fields/dimensions/field_dimensions.php:162 +msgid "Width" +msgstr "" + +#: ReduxCore/inc/fields/dimensions/field_dimensions.php:178 +#: ReduxCore/inc/fields/typography/field_typography.php:442 +msgid "Height" +msgstr "" + +#: ReduxCore/inc/fields/dimensions/field_dimensions.php:189 +#: ReduxCore/inc/fields/dimensions/field_dimensions.php:190 +#: ReduxCore/inc/fields/spacing/field_spacing.php:245 +#: ReduxCore/inc/fields/spacing/field_spacing.php:246 +msgid "Units" +msgstr "" + +#: ReduxCore/inc/fields/gallery/field_gallery.php:73 +msgid "Add/Edit Gallery" +msgstr "" + +#: ReduxCore/inc/fields/gallery/field_gallery.php:74 +msgid "Clear Gallery" +msgstr "" + +#: ReduxCore/inc/fields/link_color/field_link_color.php:87 +msgid "Regular" +msgstr "" + +#: ReduxCore/inc/fields/link_color/field_link_color.php:91 +msgid "Hover" +msgstr "" + +#: ReduxCore/inc/fields/link_color/field_link_color.php:95 +msgid "Visited" +msgstr "" + +#: ReduxCore/inc/fields/link_color/field_link_color.php:99 +msgid "Active" +msgstr "" + +#: ReduxCore/inc/fields/multi_text/field_multi_text.php:61 +msgid "Add More" +msgstr "" + +#: ReduxCore/inc/fields/password/field_password.php:62 +msgid "Password" +msgstr "" + +#: ReduxCore/inc/fields/password/field_password.php:63 +msgid "Username" +msgstr "" + +#: ReduxCore/inc/fields/select/field_select.php:83 +#: ReduxCore/inc/fields/select_image/field_select_image.php:63 +msgid "Select an item" +msgstr "" + +#: ReduxCore/inc/fields/select/field_select.php:134 +#: ReduxCore/inc/fields/select_image/field_select_image.php:144 +msgid "No items of this type were found." +msgstr "" + +#: ReduxCore/inc/fields/slides/field_slides.php:68 +msgid "Slide" +msgstr "" + +#: ReduxCore/inc/fields/slides/field_slides.php:73 +#: ReduxCore/inc/fields/slides/field_slides.php:174 +msgid "New %s" +msgstr "" + +#: ReduxCore/inc/fields/slides/field_slides.php:145 +#: ReduxCore/inc/fields/slides/field_slides.php:200 +msgid "Title" +msgstr "" + +#: ReduxCore/inc/fields/slides/field_slides.php:149 +#: ReduxCore/inc/fields/slides/field_slides.php:204 +msgid "Description" +msgstr "" + +#: ReduxCore/inc/fields/slides/field_slides.php:153 +#: ReduxCore/inc/fields/slides/field_slides.php:207 +msgid "URL" +msgstr "" + +#: ReduxCore/inc/fields/slides/field_slides.php:167 +#: ReduxCore/inc/fields/slides/field_slides.php:220 +msgid "Delete" +msgstr "" + +#: ReduxCore/inc/fields/slides/field_slides.php:223 +msgid "Add %s" +msgstr "" + +#: ReduxCore/inc/fields/switch/field_switch.php:41 +msgid "On" +msgstr "" + +#: ReduxCore/inc/fields/switch/field_switch.php:44 +msgid "Off" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:231 +msgid "Font Family" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:232 +msgid "Font family" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:258 +#: ReduxCore/inc/fields/typography/field_typography.php:259 +msgid "Backup Font Family" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:273 +#: ReduxCore/inc/fields/typography/field_typography.php:281 +msgid "Font style" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:274 +msgid "Font Weight & Style" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:281 +msgid "Style" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:321 +msgid "Font subsets" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:323 +msgid "Font Subsets" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:325 +msgid "Subsets" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:325 +msgid "Font script" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:342 +#: ReduxCore/inc/fields/typography/field_typography.php:343 +#: ReduxCore/inc/fields/typography/field_typography.php:344 +msgid "Text Align" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:365 +#: ReduxCore/inc/fields/typography/field_typography.php:366 +#: ReduxCore/inc/fields/typography/field_typography.php:367 +msgid "Text Transform" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:388 +#: ReduxCore/inc/fields/typography/field_typography.php:389 +#: ReduxCore/inc/fields/typography/field_typography.php:390 +msgid "Font Variant" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:408 +#: ReduxCore/inc/fields/typography/field_typography.php:409 +#: ReduxCore/inc/fields/typography/field_typography.php:410 +msgid "Text Decoration" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:432 +#: ReduxCore/inc/fields/typography/field_typography.php:433 +msgid "Font Size" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:433 +msgid "Size" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:441 +#: ReduxCore/inc/fields/typography/field_typography.php:442 +msgid "Line Height" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:450 +#: ReduxCore/inc/fields/typography/field_typography.php:451 +msgid "Word Spacing" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:459 +#: ReduxCore/inc/fields/typography/field_typography.php:460 +msgid "Letter Spacing" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:478 +msgid "Font Color" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:480 +msgid "Font color" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:879 +msgid "Standard Fonts" +msgstr "" + +#: ReduxCore/inc/fields/typography/field_typography.php:980 +msgid "Google Webfonts" +msgstr "" + +#: ReduxCore/inc/tracking.php:129 +msgid "Help improve Our Panel" +msgstr "" + +#: ReduxCore/inc/tracking.php:130 +msgid "" +"Please helps us improve our panel by allowing us to gather anonymous usage " +"stats so we know which configurations, plugins and themes to test to ensure " +"compatibility." +msgstr "" + +#: ReduxCore/inc/tracking.php:135 +msgid "Allow tracking" +msgstr "" + +#: ReduxCore/inc/tracking.php:140 +msgid "Do not allow tracking" +msgstr "" + +#: ReduxCore/inc/tracking.php:151 +msgid "Welcome to the Redux Demo Panel" +msgstr "" + +#: ReduxCore/inc/tracking.php:152 +msgid "Getting Started" +msgstr "" + +#: ReduxCore/inc/tracking.php:152 +msgid "" +"This panel demonstrates the many features of Redux. Before digging in, we " +"suggest you get up to speed by reviewing %1$s." +msgstr "" + +#: ReduxCore/inc/tracking.php:152 +msgid "our documentation" +msgstr "" + +#: ReduxCore/inc/tracking.php:153 +msgid "Redux Generator" +msgstr "" + +#: ReduxCore/inc/tracking.php:153 +msgid "" +"Want to get a head start? Use the %1$s. It will create a customized " +"boilerplate theme or a standalone admin folder complete with all things " +"Redux (with the help of Underscores and TGM). Save yourself a headache and " +"try it today." +msgstr "" + +#: ReduxCore/inc/tracking.php:154 ReduxCore/inc/welcome/welcome.php:212 +msgid "Redux Extensions" +msgstr "" + +#: ReduxCore/inc/tracking.php:154 +msgid "" +"Did you know we have extensions, which greatly enhance the features of " +"Redux? Visit our %1$s to learn more!" +msgstr "" + +#: ReduxCore/inc/tracking.php:154 +msgid "extensions directory" +msgstr "" + +#: ReduxCore/inc/tracking.php:155 +msgid "Like Redux?" +msgstr "" + +#: ReduxCore/inc/tracking.php:155 +msgid "" +"If so, please %1$s and consider making a %2$s to keep development of Redux " +"moving forward." +msgstr "" + +#: ReduxCore/inc/tracking.php:155 +msgid "leave us a favorable review on WordPress.org" +msgstr "" + +#: ReduxCore/inc/tracking.php:155 +msgid "donation" +msgstr "" + +#: ReduxCore/inc/tracking.php:156 +msgid "Newsletter" +msgstr "" + +#: ReduxCore/inc/tracking.php:156 +msgid "" +"If you'd like to keep up to with all things Redux, please subscribe to our " +"newsletter" +msgstr "" + +#: ReduxCore/inc/tracking.php:157 +msgid "Email address" +msgstr "" + +#: ReduxCore/inc/tracking.php:157 +msgid "Subscribe" +msgstr "" + +#: ReduxCore/inc/tracking.php:166 +msgid "Close" +msgstr "" + +#: ReduxCore/inc/validation/color/validation_color.php:15 +#: ReduxCore/inc/validation/color_rgba/validation_color_rgba.php:14 +#: ReduxCore/inc/validation/colorrgba/validation_colorrgba.php:16 +msgid "This field must be a valid color value." +msgstr "" + +#: ReduxCore/inc/validation/comma_numeric/validation_comma_numeric.php:16 +msgid "You must provide a comma separated list of numerical values for this option." +msgstr "" + +#: ReduxCore/inc/validation/css/validation_css.php:38 +msgid "Unsafe strings were found in your CSS and have been filtered out." +msgstr "" + +#: ReduxCore/inc/validation/date/validation_date.php:16 +msgid "This field must be a valid date." +msgstr "" + +#: ReduxCore/inc/validation/email/validation_email.php:16 +#: ReduxCore/inc/validation/email_not_empty/validation_email_not_empty.php:16 +msgid "You must provide a valid email for this option." +msgstr "" + +#: ReduxCore/inc/validation/no_html/validation_no_html.php:15 +msgid "You must not enter any HTML in this field, all HTML tags have been removed." +msgstr "" + +#: ReduxCore/inc/validation/no_special_chars/validation_no_special_chars.php:16 +msgid "" +"You must not enter any special characters in this field, all special " +"characters have been removed." +msgstr "" + +#: ReduxCore/inc/validation/not_empty/validation_not_empty.php:16 +msgid "This field cannot be empty. Please provide a value." +msgstr "" + +#: ReduxCore/inc/validation/numeric/validation_numeric.php:16 +#: ReduxCore/inc/validation/numeric_not_empty/validation_numeric_not_empty.php:16 +msgid "You must provide a numerical value for this option." +msgstr "" + +#: ReduxCore/inc/validation/unique_slug/validation_unique_slug.php:16 +msgid "" +"That URL slug is in use, please choose another. %s is open for " +"use." +msgstr "" + +#: ReduxCore/inc/validation/url/validation_url.php:16 +msgid "You must provide a valid URL for this option." +msgstr "" + +#: ReduxCore/inc/welcome/views/about.php:2 +msgid "Welcome to Redux Framework %s" +msgstr "" + +#: ReduxCore/inc/welcome/views/about.php:5 +msgid "" +"Thank you for updating to the latest version! Redux Framework %s is a huge " +"step forward in Redux Development. Look at all that's new." +msgstr "" + +#: ReduxCore/inc/welcome/views/about.php:8 +#: ReduxCore/inc/welcome/views/changelog.php:8 +#: ReduxCore/inc/welcome/views/credits.php:8 +#: ReduxCore/inc/welcome/views/extensions.php:82 +#: ReduxCore/inc/welcome/views/status_report.php:31 +#: ReduxCore/inc/welcome/views/support.php:8 +msgid "Version %s" +msgstr "" + +#: ReduxCore/inc/welcome/views/about.php:15 +msgid "What is Redux Framework?" +msgstr "" + +#: ReduxCore/inc/welcome/views/about.php:17 +msgid "" +"Redux Framework is the core of many products on the web. It is an option " +"framework which developers use to\n" +" enhance their products." +msgstr "" + +#: ReduxCore/inc/welcome/views/about.php:22 +msgid "Learn More" +msgstr "" + +#: ReduxCore/inc/welcome/views/about.php:28 +msgid "New in this Release" +msgstr "" + +#: ReduxCore/inc/welcome/views/changelog.php:2 +msgid "Redux Framework - Changelog" +msgstr "" + +#: ReduxCore/inc/welcome/views/changelog.php:5 +#: ReduxCore/inc/welcome/views/status_report.php:28 +msgid "" +"Our core mantra at Redux is backwards compatibility. With hundreds of " +"thousands of instances worldwide, you can be assured that we will take care " +"of you and your clients." +msgstr "" + +#: ReduxCore/inc/welcome/views/credits.php:2 +msgid "Redux Framework - A Community Effort" +msgstr "" + +#: ReduxCore/inc/welcome/views/credits.php:5 +msgid "" +"We recognize we are nothing without our community. We would like to thank " +"all of those who help Redux to be what it is. Thank you for your " +"involvement." +msgstr "" + +#: ReduxCore/inc/welcome/views/credits.php:14 +msgid "" +"Redux is created by a community of developers world wide. Want to have your " +"name listed too? Contribute to Redux." +msgstr "" + +#: ReduxCore/inc/welcome/views/extensions.php:76 +msgid "Redux Framework - Extensions" +msgstr "" + +#: ReduxCore/inc/welcome/views/extensions.php:79 +msgid "" +"Supercharge your Redux experience. Our extensions provide you with features " +"that will take your products to the next level." +msgstr "" + +#: ReduxCore/inc/welcome/views/extensions.php:88 +msgid "" +"While some are built specificially for developers, extensions such as " +"Custom Fonts are sure to make any user happy." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:25 +msgid "Redux Framework - System Status" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:38 +msgid "" +"Please copy and paste this information in your ticket when contacting " +"support:" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:41 +msgid "Get System Report" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:44 +msgid "Understanding the Status Report" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:51 +msgid "Copied!" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:51 +msgid "Copy for Support" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:60 +msgid "WordPress Environment" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:65 +msgid "Home URL" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:66 +msgid "The URL of your site's homepage." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:70 +msgid "Site URL" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:71 +msgid "The root URL of your site." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:75 +msgid "Redux Version" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:76 +msgid "The version of Redux Framework installed on your site." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:80 +msgid "Redux Data Directory Writable" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:83 +msgid "" +"Redux and its extensions write data to the uploads directory. " +"This directory must be writable." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:88 +msgid "To allow data saving, make %s writable." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:93 +msgid "WP Version" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:94 +msgid "The version of WordPress installed on your site." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:98 +msgid "WP Multisite" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:99 +msgid "Whether or not you have WordPress Multisite enabled." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:107 +msgid "Permalink Structure" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:108 +msgid "" +"The current permalink structure as defined in Wordpress " +"Settings->Permalinks." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:113 +msgid "Front Page Display" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:114 +msgid "The current Reading mode of Wordpress." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:122 +msgid "Front Page" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:123 +msgid "The currently selected page which acts as the site's Front Page." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:127 +msgid "Posts Page" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:128 +msgid "The currently selected page in where blog posts are displayed." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:135 +msgid "WP Memory Limit" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:136 +msgid "The maximum amount of memory (RAM) that your site can use at one time." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:141 +msgid "" +"%s - We recommend setting memory to at least 40MB. See: Increasing memory allocated to PHP" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:148 +msgid "Database Table Prefix" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:150 +msgid "The prefix structure of the current Wordpress database." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:154 +msgid "WP Debug Mode" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:155 +msgid "Displays whether or not WordPress is in Debug Mode." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:163 +msgid "Language" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:164 +msgid "The current language used by WordPress. Default = English" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:172 +msgid "Browser" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:177 +msgid "Browser Info" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:178 +msgid "Information about web browser current in use." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:193 +msgid "Server Environment" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:198 +msgid "Server Info" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:199 +msgid "Information about the web server that is currently hosting your site." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:203 +msgid "Localhost Environment" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:204 +msgid "Is the server running in a localhost environment." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:214 +msgid "PHP Version" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:215 +msgid "The version of PHP installed on your hosting server." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:220 +msgid "PHP Memory Limit" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:221 +#: ReduxCore/inc/welcome/views/status_report.php:226 +msgid "The largest filesize that can be contained in one post." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:225 +msgid "PHP Post Max Size" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:230 +msgid "PHP Time Limit" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:231 +msgid "" +"The amount of time (in seconds) that your site will spend on a single " +"operation before timing out (to avoid server lockups)" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:235 +msgid "PHP Max Input Vars" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:236 +msgid "" +"The maximum number of variables your server can use for a single function " +"to avoid overloads." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:240 +msgid "PHP Display Errors" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:241 +msgid "Determines if PHP will display errors within the browser." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:252 +msgid "SUHOSIN Installed" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:253 +msgid "" +"Suhosin is an advanced protection system for PHP installations. It was " +"designed to protect your servers on the one hand against a number of well " +"known problems in PHP applications and on the other hand against potential " +"unknown vulnerabilities within these applications or the PHP core itself. " +"If enabled on your server, Suhosin may need to be configured to increase " +"its data submission limits." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:262 +msgid "MySQL Version" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:263 +msgid "The version of MySQL installed on your hosting server." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:267 +msgid "Max Upload Size" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:268 +msgid "The largest filesize that can be uploaded to your WordPress installation." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:272 +msgid "Default Timezone is UTC" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:275 +msgid "The default timezone for your server." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:278 +msgid "Default timezone is %s - it should be UTC" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:289 +msgid "Used when communicating with remote services with PHP." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:295 +msgid "" +"Your server does not have fsockopen or cURL enabled - cURL is used to " +"communicate with other servers. Please contact your hosting provider." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:334 +msgid "Remote Post" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:335 +msgid "Used to send data to remote servers." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:340 +msgid "" +"wp_remote_post() failed. Many advanced features may not function. Contact " +"your hosting provider." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:343 +#: ReduxCore/inc/welcome/views/status_report.php:358 +msgid "Error: %s" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:350 +msgid "Remote Get" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:351 +msgid "Used to grab information from remote servers for updates updates." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:356 +msgid "" +"wp_remote_get() failed. This is needed to get information from remote " +"servers. Contact your hosting provider." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:390 +msgid "Active Plugins" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:406 +msgid "Visit plugin homepage" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:430 +msgid "Redux Instance: " +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:437 +msgid "The opt_name argument for this instance of Redux." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:445 +msgid "The global_variable argument for this instance of Redux." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:453 +msgid "Indicates if developer mode is enabled for this instance of Redux." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:458 +msgid "Indicates if ajax based saving is enabled for this instance of Redux." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:463 +msgid "" +"The page slug denotes the string used for the options panel page for this " +"instance of Redux." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:468 +msgid "" +"The page permissions variable sets the permission level required to access " +"the options panel for this instance of Redux." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:473 +msgid "" +"This variable set whether or not the menu is displayed as an admin menu " +"item for this instance of Redux." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:478 +msgid "" +"The page parent variable sets where the options menu will be placed on the " +"WordPress admin sidebar for this instance of Redux." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:484 +msgid "Indicates if the compiler flag is enabled for this instance of Redux." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:489 +msgid "" +"Indicates if output flag for globally shutting off all CSS output is " +"enabled for this instance of Redux." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:494 +msgid "" +"The output_tag variable sets whether or not dynamic CSS will be generated " +"for the customizer and Google fonts for this instance of Redux." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:503 +msgid "" +"The specified template path containing custom template files for this " +"instance of Redux." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:508 +msgid "List of template files overriding the default Redux template files." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:531 +msgid "Indicates the installed Redux extensions and their version numbers." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:562 +msgid "Theme" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:567 +msgid "Name" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:568 +msgid "The name of the current active theme." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:572 +msgid "Version" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:573 +msgid "The installed version of the current active theme." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:578 +msgid "is available" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:583 +msgid "Author URL" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:584 +msgid "The theme developers URL." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:588 +msgid "Child Theme" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:589 +msgid "Displays whether or not the current theme is a child theme." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:591 +msgid "" +"If you're modifying Redux Framework or a parent theme you didn't build " +"personally, we recommend using a child theme. See: How to create a child theme" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:599 +msgid "Parent Theme Name" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:601 +msgid "The name of the parent theme." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:605 +msgid "Parent Theme Version" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:608 +msgid "The installed version of the parent theme." +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:612 +msgid "Parent Theme Author URL" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:615 +msgid "The parent theme developers URL." +msgstr "" + +#: ReduxCore/inc/welcome/views/support.php:2 +msgid "Redux Framework - Support" +msgstr "" + +#: ReduxCore/inc/welcome/views/support.php:5 +msgid "" +"We are an open source project used by developers to make powerful control " +"panels." +msgstr "" + +#: ReduxCore/inc/welcome/views/support.php:20 +msgid "Generate a Support URL" +msgstr "" + +#: ReduxCore/inc/welcome/views/support.php:21 +msgid "Select Support Type" +msgstr "" + +#: ReduxCore/inc/welcome/views/support.php:22 +#: ReduxCore/inc/welcome/views/support.php:65 +msgid "How to Get Support" +msgstr "" + +#: ReduxCore/inc/welcome/views/support.php:27 +msgid "Submit a Support Request" +msgstr "" + +#: ReduxCore/inc/welcome/views/support.php:30 +msgid "To get started, we will need to generate a support hash." +msgstr "" + +#: ReduxCore/inc/welcome/views/support.php:33 +msgid "" +"This will provide to your developer all the information they may need to " +"remedy your issue. This action WILL send information securely to a remote " +"server. To see the type of information sent, please look at the Status tab." +msgstr "" + +#: ReduxCore/inc/welcome/views/support.php:37 +msgid "" +"Generate\n" +" a Support URL" +msgstr "" + +#: ReduxCore/inc/welcome/views/support.php:44 +msgid "Select Your Support Type" +msgstr "" + +#: ReduxCore/inc/welcome/views/support.php:47 +msgid "What type of user are you?" +msgstr "" + +#: ReduxCore/inc/welcome/views/support.php:52 +msgid "User" +msgstr "" + +#: ReduxCore/inc/welcome/views/support.php:53 +msgid "I am a user, using a pre-built product." +msgstr "" + +#: ReduxCore/inc/welcome/views/support.php:56 +msgid "Developer" +msgstr "" + +#: ReduxCore/inc/welcome/views/support.php:57 +msgid "I am a developer, building a product using Redux." +msgstr "" + +#: ReduxCore/inc/welcome/views/support.php:68 +msgid "" +"Please proceed to the Redux Framework issue tracker and supply us with your " +"support URL below. Please also provide any information that will help us to " +"reproduce your issue." +msgstr "" + +#: ReduxCore/inc/welcome/views/support.php:74 +msgid "" +"Listed below are the Wordpress plugins and/or theme installed on your site " +"that utilize Redux Framework. We do not directly support products created " +"with our framework. It is the responsibility of the plugin or theme " +"developer to support their work. You will need to contact the author(s) of " +"the products listed below with your support questions." +msgstr "" + +#: ReduxCore/inc/welcome/views/support.php:77 +msgid "" +"Please be sure to include for your developer - via cut and paste - the " +"Support URL in the box below." +msgstr "" + +#: ReduxCore/inc/welcome/views/support.php:215 +msgid "" +"Should the developer not be responsive, read the following article before asking for support from us " +"directly." +msgstr "" + +#: ReduxCore/inc/welcome/welcome.php:168 +msgid "Support hash could not be generated. Please try again later." +msgstr "" + +#: ReduxCore/inc/welcome/welcome.php:188 +msgid "Welcome to Redux Framework" +msgstr "" + +#: ReduxCore/inc/welcome/welcome.php:196 +msgid "Redux Framework Changelog" +msgstr "" + +#: ReduxCore/inc/welcome/welcome.php:204 class.redux-plugin.php:410 +msgid "Get Support" +msgstr "" + +#: ReduxCore/inc/welcome/welcome.php:221 +msgid "The people that develop Redux Framework" +msgstr "" + +#: ReduxCore/inc/welcome/welcome.php:229 +msgid "Redux Framework Status" +msgstr "" + +#: ReduxCore/inc/welcome/welcome.php:334 +msgid "What's New" +msgstr "" + +#: ReduxCore/inc/welcome/welcome.php:338 +msgid "Extensions" +msgstr "" + +#: ReduxCore/inc/welcome/welcome.php:342 +msgid "Changelog" +msgstr "" + +#: ReduxCore/inc/welcome/welcome.php:346 +msgid "Credits" +msgstr "" + +#: ReduxCore/inc/welcome/welcome.php:350 +msgid "Support" +msgstr "" + +#: ReduxCore/inc/welcome/welcome.php:354 +msgid "Status" +msgstr "" + +#: ReduxCore/inc/welcome/welcome.php:511 +msgid "View %s" +msgstr "" + +#: ReduxCore/templates/panel/footer.tpl.php:43 +#: ReduxCore/templates/panel/header_stickybar.tpl.php:20 +msgid "Save Changes" +msgstr "" + +#: ReduxCore/templates/panel/footer.tpl.php:46 +#: ReduxCore/templates/panel/header_stickybar.tpl.php:22 +msgid "Reset Section" +msgstr "" + +#: ReduxCore/templates/panel/footer.tpl.php:47 +#: ReduxCore/templates/panel/header_stickybar.tpl.php:23 +msgid "Reset All" +msgstr "" + +#: ReduxCore/templates/panel/footer.tpl.php:52 +#: ReduxCore/templates/panel/header_stickybar.tpl.php:26 +msgid "Working..." +msgstr "" + +#: ReduxCore/templates/panel/header.tpl.php:18 +msgid "Developer Mode Enabled" +msgstr "" + +#: ReduxCore/templates/panel/header_stickybar.tpl.php:16 +msgid "Expand" +msgstr "" + +#: class.redux-plugin.php:306 +msgid "Redux Framework has an embedded demo." +msgstr "" + +#: class.redux-plugin.php:306 +msgid "Click here to activate the sample config file." +msgstr "" + +#: class.redux-plugin.php:407 +msgid "Docs" +msgstr "" + +#: class.redux-plugin.php:408 +msgid "Repo" +msgstr "" + +#: class.redux-plugin.php:409 +msgid "Builder" +msgstr "" + +#: class.redux-plugin.php:415 +msgid "Deactivate Demo Mode" +msgstr "" + +#: class.redux-plugin.php:417 +msgid "Activate Demo Mode" +msgstr "" + +#: tests/includes/class-tivwp-dm-controller.php:28 +msgid "Must call in of after the \"plugins_loaded\" action." +msgstr "" + +#: tests/includes/class-tivwp-dm-controller.php:138 +msgid "Unknown action \"%1$s\" specified for %2$s" +msgstr "" + +#: tests/includes/class-tivwp-dm-controller.php:143 +msgid "The unknown action has been replaced with \"%s\"" +msgstr "" + +#: tests/includes/class-tivwp-dm-controller.php:158 +msgid "Automatic action performed: \"%s\"" +msgstr "" + +#: tests/includes/class-tivwp-dm.php:112 +msgid "Activate Development Plugins" +msgstr "" + +#: tests/includes/class-tivwp-dm.php:119 +msgid "Deactivate Development Plugins" +msgstr "" + +#: tests/includes/class-tivwp-dm.php:131 +msgid "You do not have sufficient permissions to access this page." +msgstr "" + +#. Plugin URI of the plugin/theme +msgid "http://wordpress.org/plugins/legacy_framework" +msgstr "" + +#. Description of the plugin/theme +msgid "" +"Redux is a simple, truly extensible options framework for WordPress themes " +"and plugins." +msgstr "" + +#. Author of the plugin/theme +msgid "Team Redux" +msgstr "" + +#. Author URI of the plugin/theme +msgid "http://reduxframework.com" +msgstr "" + +#: ReduxCore/inc/welcome/views/status_report.php:412 +msgctxt "by author" +msgid "by %s" +msgstr "" \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/languages/ro_RO.mo b/plugins/legacy-admin/framework/core/languages/ro_RO.mo new file mode 100644 index 0000000000000000000000000000000000000000..5597eff1730ab6305a03d92ab10a5ae39ea16056 GIT binary patch literal 23543 zcmcJX36vdIdFPAG#=n`cNS1(ns zy4AugMo!2O0ttlRCD;VBg=AP}LKt9}nZ$AsNeltPI*G$FlM~3yIg=BT9L~&~%i3_)r+^nd+t2%Qu*3aoP~ZPX!284d_kj#K`ZTCcs~sODfmaA+J76& z^dNW-sQWF?i=vl<6W|f>eo)_kA5=g86VyDO!eVP&F9!8|11SF70p1QyfwzJm1@-;1 z7x?wQ4Agg5fSUixfa^i6%NB40cnio7qt}3<*WIAnc`)365M0jv$3XGzS3$apz6(ko zE`n(u4=w|>UQY#W9YM$am7w^17bre>87Tgq1~sk{d@pz>sBv8l(Z3H~4{BW3xF|Xc z?gTaOOBjsk@LbT|gDdqOJO-W!@Bc8|e-YHUu3-^1uMME&;YLvFycJZxH-lQ2qoDZW z6`lP5!jM|{&_bzZ5_#RN>`7rpK;K#sA!9!#I{c&)T`xD?M@Kd1L{U>l2xD_JZ z0^S8qgMS9@12?Yq^L-si)#&#?{)@iNKQVauI@S~%fKLX$3~FAFf}-0$hUbr8@AdFg z0y=On@2>|n|JQ*GIl4FCXF%zn?}L|t%MfPio#%tUzyfUqA#wDH>;3!hfTGJkfTF`Q zU*hNe9Pk<3UkN__ar6hOzg<7$<@`8^N{sFR_1)V+@yC52q7^*^ia!4pdv9Pne{ zY4G!)#yx0`{~U;DMBe}(1~1v_=l6N=Pr3gpsQ%uw z4L$`w2)-6v_fk*CkAQ0L6X5f~M?m%aJy7)jU!drC#r7yV30@2Kz;}RJhl_T2J@a%> zd~rpm~Ha1FP6LCs?xRQ*?j z>i;fKeElonO7NYa*5e^i>-=@_+2FT8t?LiKZ-dX+>DTM;!S#>h!7fkV4Je_1X&dKA#3P&(DST-vTw> z?}D1=KZ6?QnmxYW1gP(hf{1i91Fiz!1&W_P3tj^LIjHX*4fqeB=zr;6-~J21Cvtxs zsBzs0YMk3ajpt@?8F(8gIckIYeh}~%!9MqQgY)1ex8R3Bw>!ZN+~2h?ihdpZIQUL* z-+r&Rz6ZXE`^yhR(SHCR0M~)9JZMWCy#<6Nqc4FC@R^go{ti&<{dw^5;FrNCfL{Z} z_kR)Y{|00T(SHLquN!{W#|JM3HNQFV8I1GQ;On`6^C7>UmreQgUk+-W8=&aF1$+^B z0#ti%1Zg^YEBGYZ`3}ewqwgN}^74`+UXM+I`fdPfe7_Fr`*(p~06zd;2A)3Z`+XC5 zjQe{)STOoK5ET%;gonZcd^z|L@Fe(@TfH5g2UY(O5EhLtf0>{E%fM;w-wX0z^khC> z22O+G+b$?R`Bm`A;Jx4#;DZ4_2{MG}3*d9WRkwM1>;Qj;`wV;@_wu z@a*4$_fW(u*N0~x1yf3&BAQgcS8#DE-258&T*{XzZOSwS(J&o74vL45Q+|h{b^R1Y zzgJTJin5(@Ed}*e|MqhAuPCpk{71^|l)EWUr@$We`}2Um1-^;$mz0_COrW*>Bg(&~ zh_6_FlgBTBKS!y4pXA~u%10VFrwLgb@|!jst}$SaQ$ZRrzzJ_r2q6=M)?forIi0f8U1}c+(?J(cLn9Wlt0l8za5nK*;N$% za=@FxCgmVyE#<3}4^Z^`Jmo8tODK0xK16vJMZaI6yoT~wN=&(t@+d{Wmr&k7d8=;t zC6vOh{6DM0^#Ra@>vaL|4=8wq@-oU7DetDdj$*&fv7614_LdbZixpc}7VfG%&ht%f zd#mLRB=eis##^K9%|SXB4-&UC>1J+!)=EYn%_W_z-%WZ0H`ys?(q7?TQimp1atG|s za=RbPdamzlxj0W;JQt^(c)F9g!E8KmGkFpZItwm2HAs3bo+Yl8wBxcfaP6|kD6(GM zNe2rqYr9=>vEX*5GwC4ixSiR2uam{CqTvqDCTf^strUDyxOSGie!O6#?B`iCDT*vF z*0`c<&bqj8Q-eJ1^A(*=#tV~iXU)>Dd&zv!Nd|)?cWG~s%;d2~LlgR@8}}C0*uSpJ zOdFc>+Fh-5;BJaLog`n-gVYb7F&F(#yxGY$nf2sJeYHh?}!ov(cv$ zowPrCe=vs!dZSM!v%+XS`s`5BhqXqZOr@t2yD$50cLw+Fj=O1RA=;7UEf%>LEOdCE z4H$2`qf1hMdScWw(CW$!4O7P7>!e3o!8JNoU+S z$ZYy1Q);A$yM1J!nf2P~jBBSISZG3v7fobYM|5YYC$j#6{p0qfy_3;|WJN3evaHPA z?ldnDz_^!m^af@tqMeCoyhLypJv?7@1IO_#%$@*66Uh*xa&6U_tTcez)sx(|qMd2W zIPhc-0?j9GHl7<5y)|xrHbuy4(e6RJrl(z-8Nj!NsCOu7m8am~qbZB$G^Lg6uPhvt z5)peQSIgUfn=UqHhS zvbU>?N^)_l#lX0;Sw_1~^^tQymJe#l-6b_OR4}{dkaWLRyZy|f-JRrAD)lxxydpAw zgI}`TUk28*$Htfbs+>leL+zt+p2kRmy*ZYoGqVGC6>PH!-6c-7=gnc0ZO_g2*sr0l z;`!P?uG-I04bkorJ>eN!yn9p9OVDwQ@TO$owxh%b2_iY2l>^xYcNjrtM4iIkAIJu2 zJEa0ESyP2IW$g-RN)yJaQ-fH|)c1wIM_CPKJqNhmdE8Crv;1UqQ>N87zF71$n}MFk zlIb==TSPY-DS%GjrCoG8+;Q+irDjdp_*iECXP#?u?R(4ug0>AohCUf(7)|*-5FgsQ6;X9@T zV@a9&5ma3|ETh-2DTa0xAJUx5&<^M#9<6RfH)D91u>LjsHb6HF(mp~W+u6_h3}t>c z>A98ObfPr|E=8#@j&?iAr7YlU(~YQesa+EV7u%{z5wV6$1Xb^amPZRN?xQ;MhLdGo zFhWiz>Z0YQ7hGAWRejn)DY!kJ6sRf|7#j9yPgmj{z^#RoFLYmvzpuXZwk>Hoa%f-GjNMD6M|*mGgh#aEwYrZ{ zQq}sR1ie2XCN!sF7A^~2P*>iKeOpztc5UUw9+1RZH?9tBsZRZhT%f(hOh^mE0a(iw zbJK89;50=0lJxL*)*R47!LXxJ4MTri?nO&&?y-q58pgJ382lDpxI_J2-uU zkE_RcmY7}FltE_LUL<6_qJxNm+i?B5p-wEK$+#%cZ>?w&QO#g;+}AL>Xwr+yu{a%6 z*RxEupv_vjiD!L>h@V+FNd^^Ql9|}}3BKwrbTginMU0<FxH>8q=x#@J3YGwaGkfCe>YGTEZNG0-X#O_Vt=& z$)Pn?Ll!YSN==dx+G19{*hliA838IggQu(_>P^~AetgUmv-J(P+is5=o@>czm0<@J;i~HYeS!-rO%9B&}~=%R3XIVY5LFAwikLI%v4y9lGtk z1=KJBPyJ@v`;9?)+8p7r1gpmw2@N#!2~491RQa0Wn}$0kXDCD>_B5#0eqh5pu zLp#01LXY?mOW!~xi0BeL<`&|Ps_$l12X%Xn7^4y;akxWRI<0vu2CNu&r9gs-(Cp`D zGq<@wj7-@}_Y)n8_*=s`hklG74Xq>m#+7Rbqsl7UwAt1=xLtW6#&O3G*Gaj9l~~A( z1!>XvXUa~TgIK8q=x6*RExw&F&Rh{7v(fmm9$i2MOsml7=m7LqD1@wE@?ZF+1 z4r_gFnYcV9`lT~Hf4MVhW?oVG`@?zME9AjMhtU%!ZH7_~r6OqYGBUs{T_-mEg&vll zzTCGybSJSN;x{yRYeAoE#y^6+>Y!)qPqukHp5XRvUeXEvQGsRZl^Tv2@wllh#i-uH zfW}21PBQyul`fnFsT8D_Bj#?tzs z;52zBCVT_A21HC`6%IphDbd@4N=c5(C%oM&PnazqG?hA1wc9E;ytrN7vwws1(tN89 z>8cK92I z0V^7yH5v;m$tUi|Gf6QIG~@?q^tEtuaYT}b2nbI7%CukPD`yPGxXv^54NaVwMdRF0pA6?m# zF9UD;M3ROzo!EMlUTZ=d;}c6N9aiGX$2J6lN)158q}#`XA!%vh351@Ljfs7dOkLF9 zbmhSEg}sxfs4)A-sHbFJXvlkPGI%|iX}Q}XkP?UPyfg^0){X>i#xkWdB)4XuFL@Mr zyPTPkJEoP~9iVd&cuGGqmDy({$s#B|Ibx{|twJ|z zrEPuw^Cc3|@{&+fCOCd#RlZST>BwTruTXC*oK%xf0!R@nri+gB<=6+%JT&J@^vw%Y zjAAO-o8*S`Su&{+|FLCdyb3{%^nI1M@%fr6A8AUeIh!ftY2sRSW3w@}C*8i-wN&p* zbe?)p??LzZp1m*Dh>p;>Dp=HQv98Fcm4JsWLE@c%?`qU8O+z`ltI=)n5KAU*&&!?| zUAh7FHAuTCCtA;YWIv*#-dZ6((NPw(Ms>X;P2-lO$=jaQ6*l2?mhG{s*gO~|1f$K}y6a#7XX*+7uM z8ws|#iblqQ(!=?_-*E{;77WsW-pPhVUbs z`LS9t+oQgH%Nvq#$(`2pJK3XUlT#$E|p){;<%}=0* z^VzEIz}$MICu-K)N~6(EBN~ZHq86L2w((|oFzU%M7}q&!te;|=&J3UAQ6EfKY7 zWcke65RLo#WAz6SHVki@bDPBeMY!3h1uh7!@Bj?kFDDka0T)S@F z__}pe9y^4CDCM`P?#8k8>)iV5$2VR_Me6N~i@}&Vi&*9?A9t-hp2>>tjT_wN`tqeS z5)zGcDbP!vHJcQ;I@gL($z&iYz5*&!?18QTq07UQl5b8%a2*|TTJw ze%re7RjXF@R<2*SZtMCRSKo0*xY@F0-Ri5ZTGd+)u3o)u!}$8ut2ZsXb*xTBjk6nC zGVJ;OSi1g(o?F+ru5lw3CNpi^j_tthBF8#A?i!7?BagG}WH%-N9(Tis6Qs2V`NBBP zj=Vj5KgAZq_qQYq5|m;eig(-{KfdXBvg!D#@%3vqG`XxUdU~+wc+c+FT*s^4@m`ko ztH<@tnvKm(WJit@Zs#Gm{6b8?ZVahfLI75oszEoWxH~XM>0S6jpJ_(@&e=2cf`d=?qwK;mcJ@VMs3y9Bbw6|T?z%`t> zYQ-JS1qc+E_alGShRrnpYBD>m#jEczZV+?y$$l*%p-gu$Y{SrP4EV8l0WqU`qh9(rttPbFNW7n)v#%Pwz9vV~M58$)&WDV54=a&DlL zoV$nhs(5XCKQ8R67*VQZBDTEI9Bu(T$13}_>Mb#^1CmZ7dg#r)=B!fRWbcTR2?XRH z_6g`{V=(6zJHL$4?mbXv#O63Op)2!0Uxi- z{g8H%?%pD&o$Zsi22GM5|+EkMkT&Z*|r%49+ISr`0L$ zFaZkdU6?`R2%yyI7%kM|RarQU1miY)gxx3xjM`EztMsW9VVv_Q?hMKfXNUImTF9_0 zo)XBZ*wnldHu>Wd%+P3p+GS;>4tUZ|AAZ2w?50`7m27$PDFzfJkv{w&+wflENlKey z)F~q!GSa4m`2}bQ2GF9exinf;V+Y#n_R+U~-t-ug9%!KC)jZ9T>}aD~bi#<#A0(hj z?IewP9WDRjM20#I$BcHy(rK-Djhh?N-87RCzcjjIUCA~yX@Q+>e|iDiZ4N<;YH(D1DXy;vwEg#X(9Ms%ps`Uq5s7K+u0?gsJf`nFJ1Uq&A7u4YPDB40Y}nr zEX5g*oM~cQa#w=ogttgsdsYcmtCr-Ynqz}oXv`@!#%gPJbtg5s;RmUW#X=SQqKeQ^`Bg&{G% zWZCK0GCzI|w~cBVF)fB^f8`G=e>yZAX>=fg%PP^9{F!t2 zNtc#me6Ch}WFk8uUC0-`lq{HbKnC9F(#Y9yAr^u?)P}`#F)K{ag2t-+RZmLjDu+=V z#F+};g?4S#LH#Ma1H?M$qmhGLQiWo6c&hSVyc46)O8OX&QOB-$FT?8h>a3sonLpPh zW!Ccg7){9P*);iDmy%D55L*c*fZa>}7DRv5;fT%BHYer781>xTKs;tYVV>xamrlNE z3_7@zOqXJOES7a45!RtF>&OqPQ-5A{%v{tT@tp4vipB_<4-U}jw(n<0=8;8f1n$&v zwY1~+0VP`EfQ!PMnWb2j=+aBq7IBh01yHv?XN*ztp#a8Oc?2W z43$Z6m0b{POl0To8GXkl%mqRuCXD^nevV$!+2RPw4!TK2V3y7J6ZpfD%*khP6&pZU z!W91(Fu|OcazBVnZT+y5Dbhpq06(*(V)`bSR30yyU1R7!n}Lg#dTPN59Z?5vX_Y1S zwi82ryiooUNd_a!pVE!wfab znjCqj4*SeO#h!@h_!O09lSXBMKJm~3<#htWC+w{kNh z>mXe)l3l63l0SEWM2kPC<{NWeED5#EfvSnkE zZZb}#%8%ynpk!@)mzlQ?UQTpyEgm_`HWF;%JYY?=ywL>uCn5M>Vv(!I)EPC@bwq(; zwli+gq2Sv|tDhm4XLnftx?Ox%9*E4aG#NTs7G*o`*D&ksQW!esBy%wS zcAmjp2%VwpSX4F~A%6lUd+rcyP6k)&qw{t6z$}{bWygcipFQJ`*gUZRHY9}($6l9XuaH)GdVj@Fg!j9_6BQyt;KL%2Kx^il`#mRlliI@7o zqM8ZZCr7vU@PmjLL0HUwywdA~DhJ$dB0c+riI?P8a_HLHA z$W6=1kd0LmKjm+Eo2Au<{pQ59KT2hZ<8#rOAAoWoda5^Z7IYk#+xe-%Cz9wV?8jhS5yIV|C+RofgBR{vMD}1^@$rq%+uO?@X zdWEfia*9lQ&*yFGqkv_!4|7j;b?He!Vm%IClkMQ(Qe}RtXin;sH6j7P-!(5Gu+LEV zcmfK_f3y>VtPQj0iR{>-1zvnqkn^=rB=FYgfkEZmrLpMKh!i4Aks>5{Z5z!@Snx=Z z_oc40c6gtO~Z{40GpTKFdhjLs%Si|jQHBJ-oN~L+JQ2Qto1d%h0+~ABJ%}qr~1=!@J2q7vqu_+@y*v6kSi0q~yB}LXVZ^f1R z!zip8HjE=B#C@YSfX9l#afMqMa-&A=BqOR@?zz^GoihHxh%zQWdIU|oZ<05^SgUxY z97CqPseP<#Db1VZW36PYD5opWQSm}J*@(>aP5i~7xTKaG=9=lOF-wr-Xi&1L-bzF3 zhKsga)(D$3<}JfsVU&}BTtxfI-i)&O7V&bJgS-TkGlnH_D9_zvn_o(> zNmUF}C+7NS0jnrkDM~5(DtMx5$n;n8%$!Uz1#|k({$0aALeFzxr+&xU&$KbWz#wxQeUWUjo z$+IDlGSy^j9}Y^YMtHqt#jPvGmGHxoYcISErzK$`jh%;z>Mh-wd+GbiLXe^}EYQe-kZ{x0+V7@c6u%+O1~>$>OlbvPup zq?FnuOiBDnbMg1Tp0MEzq%@2_RLK<)2~wBl{27|=e9CNOns|$k)oSJL44WN(j(<&a zL8(H9$85xs{#4Z|%it`HjN<>g8N|e&!2Ho|9Sk`ZNJ=gCaBs8mN1X+%{S zDULrYE2Zg}7B@eF6GoW+wP6sZ*cJ)U$e9^F)QQdDc{HlinEAi(oTkWwbuf2c8bNBuIAv=bLbNgdf#I7Glp67?xOojE%kPbvzQf3q*F;>vC;UwcVBc;iM|rt+>h+Z*3~xifi-7 z)^7IqyytvjyxMp9iIi9iZf&3eOJ&{Cc?mGAOxEfSUJD zK%i+lUEd2z-p_-QXB7NXa2nKj z!z}tWa2=@YUw~V|{{gDsIyz~b5%6j-2WtK=hWlRuF@5wB_#pT_@P6>UyevD7f_i@( z)cSXV($ij0dih4c?|}2UJ_cgy=+8m%;b)-ucge@1=r_T4gVOIjP~%z{#r;7`GY;N>h@diyM>{>wr2TMe2W z!u=em`3j)qNI~=4}rS> z2q^yT1&6_(fQm=IHQ)1n2-Nz17u0+)_ziFeC_TRiXVCMjz)he7Zv(#oYP|1*YrtQE z_ku&8hNIvU;5zWPSg)R3=V)Vf?4p#;6vbz3;eqF2Ye31rJ}>&J>W4=cKu(V z_fuFh2Ur&J2%PZiIej|!bfrDH>#$b1VKL8hlzW^@- zuSLk!;3DudU0 zD*AVzc>4yR0;evXgmY8{v#l!h)#mC+fTsd;6H$xcL~Dl{d>U6!OwxHJbD<^ z_y@xCBOoG2GoaS>pFvzVdfyV?|2k0eE(LL&Xg#R$3IQJhCFgz+lSSVH-w!rGt?REq zt^ZPtJrBGF)OZU5t^oD?bD-8!4)>o0wT|zB8voyemx4b9F-i2d;AZfuo1$m~H~~Vn z=oEM}_?O^^z{|OiJPuq7_Jhx0?4uv z*H?Yk%e@r*B=^^XFMwm<0q}o=TJJMM-mWi#S9AR%P<;Gr@MGXrIF0O*0Y|{iAXJWC z2iJpt3M&3w19|1Q*MX9|4^+Pu;3_Z|uD=6ny?+9VPd@<_?=D-$`>cBayo&1)$nq7g z3!v=uOBO%I^(XG|eA>Ix>+dl5NuGZnl>YuBD7mk^)7!fr)O?#kt#3Q{ad0Z!e-_kw zUIwMdAA-{3-+-F;!wCNXcq@oXqUS-4*8ruzzXIoje+y#rXdX_e`^!Q3`C3r=cnDNn zO+d}}hae`7{w)~)Mil*Hc>dt9ufrY({~OOMclr4B;N8S*uKx(!0)CXmYTO;*rQlx?^?Yy#_$v4X z@cqBz@iDN*^)J9z!FY2N)xpakVG(>3%z-}#V{ko6IRd^BaO+kdAN~=%hWnS@htGiX zLA`e`h$zwDf%Cy-+sL)xb`WvR=C6UjN83Zg4ECpYucJNbFD(Wi;PbzvVVdZ9+AB2u zeTKHrK4EWAb~;8wb@nGczfOCIwuaXG_pieZ@mqhl(Ef;q%b4wDhfmRP`RE6ZTIV0;usrrHP<(iiCZ33!`g@vo4-NOTzjp-`h#z@cQ5XD; z(=M}5QS>;tigtat7Ay^)KLi$N3u)rYVcNAc`O9}{yJ){lgF5y%!M|UjeV$gKi8uO# zg3(j7H)#85;*b7brG0}Y{@+1+AMFv^AJFu7KkdD=uhZU5%hDdDB{XOseUJ8Sn&Q&c zv{BkOY1?S>P5IYRTA9}QN9eU!@=@^jY2xn?ZH%^;_A>1nTKb0z+Fy--zZO2<7x3PI zI|8Oq=R-BU0C986Kf1Myc8K;2?Fem}wwsor4bvuR`rGco{>7c6e?>b;d&2Jcxii#qC))QH{rzUArK;cKL$DU0=;stGBt8 z`Mlc@Pu)I{T^_B>)e1Yawb-qWC(CYqIUoC50B@}?SM5W8x#TLv`goy~xNJ3c*`3)! zF*{m}U2P&;bK})GTPsexcvmeh<+&HTd_0z|7i(^;USfuFDO)Vmrd@f=t;r_SZgpY2 zP|FtG>he^nSkC5?jN391YhapSzNJX*;*r^|H~QjJ$Qy@!lEa8m{P7t0BY;zO=Z|4FwqTdcs*$SXw^ivG%kY0ZbN-?l-FU;s&cVD*?L$kk4LMD zakkpB*Q#P6x5F8gYGs#A$*n<>>|_PP=E|k9!nhkN6tVXzX*ya}u1woMZe5|YBU**Q z3biC!9k=?oogt z7885Ept74YwQ{*w zD^wEt5%MeL3ZhI+#3i@DM|?9#z4vlV zl-{~|T{?_iD*{DpOBJ}R1@TzZX9)tS5t2X@1#c)o?45uLVG7<==Cr<^PozuDW9E?! zGhuY2Uf_-<^=g}Ayl$p2LR$bEIb~obS{IMi_{Y-fNF|$7{8%Ton_^c)8)Dp$*is_k zC(6Ae^@{Wsp2&UlF-^_UhB73NCz)?dCW2$rr1dGe)0mP@MsG|Kmb0j$NG8L7xkFwo znQLTXOSY zJB}pLrfiZB6Y|j}NM9x>Q@?~|MVma4wq*;o^z#I3Oc=8jCPXYhAw;$?FD~-}mK@KT z(J_8$da}&DdXgpg5t?wm1pdZuM~S@P{lurRdaIOaRc0`RaVD`FV`4s-Rd$4X!aCt- zvV#AO7F393qBOW~supr_dX<>JO=Jmb3DFIzRP-3LRM9n&R%s#JDwwPF>44O9nvoikDy^zz_=)_xla!K$mOOq;YPg(b z``hEmW*M%0Xm!0?xxdSNLSgUg4Qf7+Dmh9o>IT^kqmwq_tWbqW!4X?d=N(CeR#~M?gXT&ql8YonpP)h?j9;VLWH+K!$oD=Um>6$Y zQhw0;96GPoa@tPnwa=$@Q1YP47yrcXb@HupIGtdea+vukGE{;kA$e1tAk$>rN14o) z%~B6H2pf;Y8Ml_w1IJXxA&XToYhfo}gJ|x~VSRuj(ff@RU9J33?K6de(XkI`K?6iH zM(x@~V^h`7a4X+gnrkmD_a#RZ&@Tf?KXmpb4i%Y-dnS%2D}-Mc5(cvEgl&XI+v0Wg znPl&$9`;OWPSx~9yr-=w0~Klz6ywt>kx{RbRq+|A4%upZ6A3(7&KJg}QQ8;kg(})m zfj~hT8y7;7{*?VX$mT2}sZ$Gn-(wS&$5?4!9`_X;G zWVz0QB)YGF6Qro#J)4pH3Y1r3W4k65EaVY~;;KMkB{5Bf*QDN+_#abJ@Cr{`_cLwpv2v{eIMt$3jhEbBJT|8TBV4 zkWDp!9Qff@%ww3iNHJi=Zcm`^e5B?1$F}+P8=P$r;f6#(BHC8S*CzOv9EZqk>e+28 zg4x!w<>OX~q%NMu2^UhNkJs9*$d1`ou7u{Y73{R!>fiPy1df{eGfr#ST3Z>Thg7fl z&PhkP#F0|8jcU!M3ON!okv6Vs*N^>76(P!7ja#9_^TKo_G2T+-!&U7#Kv^u$ zW@wvj`B-Lachkymyf?MNM0m$xE@~8uJ7SVAnG_rE-m-q3G;3m8MC1I7)L{2(+401e zf1|O5UuAzPc4>Kzv6Ru+va4$6FbwrkAc*`c3qk768D}=)U0w~FuEmYQxWp|dVmXoUS zPQ`R0g<`@cG?Qe?)$vGsvaUQHP5BtxE8wPTSv$x6wfX*#D276GY}M2AIPRpf>0h6W z7xMjg*2k0nE#)CMQL9ywp@9JoyeI0T8TdJ1VYSt-_mXJAVeh<68@Kdx5@~DeSIs%( zmJBYwxqom;|KL)$WXaHyn}(Jw`OM(p(BL31_itv23Nu~rF701(iyQpx(2}LR$b0Lu zNv+?Cfuc(GA)Tp_iQMf;i8HZku6)P1s3<9y^KxmtPK@f`5@#n_Zk;ejtX}9pEOHCA zG*&h>HI-opLsc{u@3IAAMrkVh3)OYodr3Y#Q#W3hVwZ47x)`3Oy)~{W^rmfS( znZbD!<9+t^*T0jORm-DWWZPA}WKWw`&=_Ip-W$JPEdB??Z+Hso#{E!0}_ z4>_A_-lig3=3@Uaj7f%EiCr_7$+D%l>8lMsE?Zbyuy}CUvc>ND>zzIh&R@28v0LE= z9j|k}eA$xp(e2A_(nsqtc>Cf(_voX(3-1grqR(RbELn8hy!-oG8>At=C#kcpsY-ug z@vS8{n7JwQSzg#w)_HUPog{vC=o3ROlNso^T`upK%u)vrx%SOf9E#Mc(?d>088LwE z3ETbl^LyiI>VSN*j_5b!wr{^}dwkpWT|}AMJv+@gl)zx^ealUc1G1EBKINjXaeA+eM;>NM& z{>B;m`m1rMakg=;d7$}Z`uup~MB`1~d8@gH4!avO%_kbCb~EZ7h#A*7=B(eFJbtUWR};?&ICFt@X|L>B7LM3RxWQNE_!EamK_tpt;YnqPh2?8HZN(HNVUh=nqZr zL%B>QMTYsMAk#@0$S=*-ds1s@KJJ=(ctQQK1xwq@+-JG-xRa_IXW_ej@7FlpIxm?$ z0k%pfkj^yL8}^p$d73E#7yNoPF)QW1m$YSA-RyHb;DfmH1`Ts`T^vWL`}~v4Eb|UD zUc@Ly3zlFUe1k=tLqkxhc_3=M!jM|mDX~Qy#kf-bg@`aC88xB^+T8yR#1a3E^qSIZ zK5867!zTb+yc8|t;u!uN5iI3V%UE->VSdzjRifKkL@!&wd0>x?B~LkKqo1}385&g` z^NW|#S3sD?QM$utD8~nNIDrmCQfw_v$aXOQuH<4t22Vk^*Kk$090eH}-G=cL@A0QiW#j+?4ZH;(g0a9&7^k`w`a z^g7=-BYj|{SG;C%{!=0w?vF6M=;?Qg!SM^+y8Hey$=uxCarafkK4sQ8W^ZHY|f|X#^bZL79|eInUYwK zer1XfH#_xzqHz`zzhL9xtXiwIARV*@zTi!*HAJH3zNqmmi&hReFG3&{sx)PsHg2QS ze|9E&WzJ9^HC}5|PjbI(Qtv?s>?(g28!Q<*KKd{)L%fmylTk%9I-$od(PpVbZxE(f zQAnBMgKiNy6yb~!}_r7AgWsXm8Z-bFs&|?3VZTFrzzkw?eH?uxYH5 z2KPum$a^qqd=0%GHQ{kq1w&~Ue{ShZdW#ybD~f8$?;^cFj1ksvdHe9m*g9= zp=rM5-0GeV+ID%}Jpu`&-!n!=bJ2D$69(-{3c@?3K>L~c%7zv&y6;0ss7J!K5b?Ga z*wqip_{c@EWOZ5NB&CL2f=H7+S!C{3uOEFoGs z!f>G+L>eoYng^SY&mNMeK6Mf172D+{3K&*@DcVb{8AXWB4BwW}EJe(+HDhe0KkfyO zlD}CLmzpp13Y6&Gn9lkUgA$<_h3c_@^r8}v(vlk|l%7pZRxFyLMB1mC`y8*z@h#6f z0(v{i5adWPFGzt1M-ZjL_T}(NBPgTd6-?3-^akv9%MIzLsYnfy1Wl`uB+hjEjb${s zVGu^IlSfQZp@5OvRf)33$L+qP_7(ixgP8)D4u3i7T^9}^9KJ4cVz!V0w64@W8C~JI zr+D%v*J9ryjGTtU;-%k4kng`l0rAPVbKG+Mp)7%;xIEbf_nT27-=I|*$Ey&G& zr%5`hoVqq(L9>bgp@7t=8dpTxjVd(ljJ9GEI*n&1_B=OD<5n6z&I^`N#JCm>*w>}~ zxo!2QQn0+*4sy_ySi)A1b?ys65M$})asEB+9Vzt;#Pf!fM@b&zknJLy`&7!jsh)^S zeCxR2rzefBT=J`*&f-e<>%C0sc}keFpR05UfGSV55~Bjgp`d0THgw|IK}FM$Oks&6 zU9$q0iYa^>DwvR+RaobGQ!gW6hBRO#Rv%o^hh;*5G>FO|o(+5qQmEGQi9=Pbm3J0a zyuLfDS7T%vmLTUW|GGF4$#@qE1mY+RJ0T~E8sFfMHV$l(;|V(kek zW?P#-xY$E7Ft)AG{e6sLJfaX$e6aFa>*vz$d+sS3@8(q;y1Sbm6Y)58cv=snP+P)Y z^=2kb+@_@@KOBNEMUkps#Fn;Dk2tPH$lj`tc&Ji9`)znG<7w~W7i#Y)-D5WtBW-94 zGt-}zTN=}RY(GkpVc)V+8D~%!R6RaB*GqVXm7aVbhGIQ!k(m=eM;+(%Dd1sSs%MX7 z7A>|NW<#=3b^4Vc0~0EgcBDdSt&`dcH3;NaPUWJFEq8*-34`_{BbXr`KgE*uQzKqi ze$>XsXRFhVGd2&4wCc&@iW5P`YCk3cdQowm~@nhFu_u+A3P7Vf0ky zq&{S51vmk(#xi}C-(Q~9J5hj(3p6xzTZTo@hDwPlH@T4W8>`(ObhiGz>` zv~vb^vK@ZUYcJU=tWAaz*R5Jr6&ffYPMm;1=u2cq-6EwaEtY|3SUjEl2r*q^y!!mg=39Z8L#)a*Ya0n|91Ssy76@t zXU3Luvvw{$F9*l+E2I*`aLB>xRN7lIS8|deyH4+$2hty_HNIvqOMIyXYw1iwrJf~D zRKTEVrD>I-e$qst_*y%HMUB>ZrQAZ)v7)f!z9mr4I7mR8IMOnZU9@*4VSt|WrER`4 zRXb{Sr`9=Bl)?g5SLKLY(hEjaG+}2pJEO^@oqMATye8d<$I^U9hP4oNh~YWS^v5nb zgEZpll)h_lTOu;Nf<*Ei?SM^d9XVBel=sMP{HqD|E4>l>e=Celes_EXy;~h`R*?^ZlmX2`pwCIjWYRK$*-t9BJgRSjn34dj2PgRG z%cIt=R6|7kqL9gzKn`^5>zG1LtfZ$5Xt9U0HJcZ2hZ z$H$}Y%dTHQvUnZoo4aVonVQqSE%bu$ObqRvpT)2cr5Ouep6;TPc3I-N##Fg!#|sRM zHz@imB%YzC>K`p!n+m>S(|uN{J{lyP22z~6#;f+0Sf@%x@wsE8vX?AEs^liT!?ig8 zl)SQdx4tZEX!1}OnU^VIb`rx%p4N$o4=D;{B9w9w1qpvnb*X=C-8G=v_b9 zWPRw{zWB6RF{{d7lpCByrKg<<>kHwoqS5$)^qlr0vV8STQk$Hgn#+{w$2x~H&`-yi z!P^8Ex$=25*}Y9h$y&Q@+oU}Pe2#(BonW9Oqf5wiU{gg}+lS~W670q>VPC}Cbm|#g z#h7XtmiX(MCrz`GVjqLPfbi_=5LNjGz1oqswpXym&Pb7wz`(y+wMA(A397b~)E>MLQcwLOm^)z&uZ< z#*P^8I0J+fXG(?IiuATT`s_osmdLtqDVky&fVKH>ZlWm%2GKNaa0{b^oa-=3>nV+A zP1G77RKIMbypO8HG5&F=-aBuXO3Wt|{Ei|zMA5Pp4%mPD@RuHv$Z=cZO1^f8HX3&Q ze!{9lM1XDSmc#b->2h^;XhFa`fVq0dVv$*)gd&*eW}AZNxa^ui&n;%#%Hi0HSo;RQBl-$N=~!0Q zd6q=8OfbX|B`UK0mqZU=6m-XWwoW`ztZd~#49-wesm!Z5z-23^nF(PCnX98HB%a-5W#a07-`k`BU4Swt5{X+6<7CZA=p*%0|f(BOTYuCpQ zP2d`05yPcH>B^X9zb|=8t3^##CYTXPU14Wsc^%bg`60oI`Kix9VebaYUbeTz*^~=I z2=y+mX}dk@C41ddSCoWF_C32oo)!1$1aivRMU=125vsMb4dSL%h5|rO=7$7yOJ5*m zr^hOo9!*&~B`d2GL!wZes}BmZ-(s2el`gD6SC-SSm5w*}TR^bi^B|FuGGF(p?1hL( z&tN_k$vgPU`DUmy_y^aF7FB}li%t&r7rN>1Mm7Fd|99;zQ}r7E)ht} zQGsVaR%q_m566etP5R|ir^!hIOB9%(hBl(orgak26w8!csEdQzJ86X``Hs;4w1i^M z7uzDP@~5f`rCHSqX~F3AA71oTIsB7LqPm_fA*tZo))htcz7TX1wtFo~;Sm4#XFMbq z&=QRLRyFC)G4oP8<|GT)kJV)&e=IB2(!uLl`;tTQ4F49Edj=myFBYYUsZ_}6uW+nf zO*!;VlQO1`X>>>xqFc&n72keyCrRHys&tr)jMUZhodi@Y=u$|>$(FvGQjraTVMi~QodZSsyHz*s43 zDBFhJg`M?5VggzkA}mt#3i&}fSH+%m*twT#Me@KLb9CJL(Es-mYF)O6X2mBW2@*sQt(1%+0sFGbLo75BgESI|MG6+uJ8P`Qpdr+0r^w^ z#LvHh-v@sc{N4wZdI9_)_wf_8)^X&-+>Q zSHNSSjQb2I^IoX&Dk$TYz)yjzpy=VNpveCSlzINT#=iwc?jb1ieiu9j{wpZ^{0~s{ zbBsn*tUd~gex3(K&J&>Mu?dR&v*3S&cR-o%GQ#bFZ-BDyr$1cj>m`ssHN}stKU25Q zfgO`cpsGZH$YiG0KW@HpvZrY z#Sm4^fMU06;4guTpvd2?zkd~!c^-n_0{<9X1gAcR?!n&&zsAB(LDBc+U#R9^19y2( z!B2yeIGN151j>3nkRhrBMXz52MW1hjBJUGW`o9B;T;Bsxf%*Z6Y1EHE(a-;aGT(=A z3VDAXl>L1Y6uD2wo-v&j#uYj_zKdABR;AeUNBT)9e1D*i?9+Y)|RO7p#=;66v zuJ-dOP~c~JE82~h0tA}IZ) zLAIh^0p9@^!3Ox;C(sRe7W`fC&q3*b3T28PPlDoq=RlGFJSh8~1%C`)2W8$@KUuB6 z0*XC<3lzQfz|Vl+sN4S%l<~XZ*TKI7Z-IB|{0jJO@TWkzL?3cp;+9yI{oUY}>l!yh z{UzgGv{#=C$94R8{DV32|Isjes6PM;1-^fOYADT#q|EV zT%+huZ1XC&_~Pfe#g^x}F^9MR8Bnf|aL;p3%L|wI4ld)b34ZTzi+$xf&HV*#v9rXy zT!gur@lOXoCwatuyq~CxMt3vYnK^zUKYr;%u1{tr%P#2IAkeq%#>Gi)!6EyYYM%VSyRLVZ8r;>1hiQl*p4aVLU+o9SzKb`uo!69 z(F-OY=*!_+SeRH}b{k3TOprJAa@Wel+CK*ilU)^(=ZOT@|N?JtB z)7T93ozxFF{OMjAn8N02HjdStX-8|BE17M!C``L6vL0?-bh)4MaNAv*qA)e*io*5O zTshFU-G-hkc};RP-!;jaXx8f6Wp5S9QQN$W%ij27?AFwL>~gE-T{=+nnMLkgU9OZ4 zvSkb8ZS*7ZE4Cx{66}RJUF+=`y_mV6Y!~`!76$6FYnQSEuO;3p^Nb(#l`v-G3q8!Q zO%P-lL@gwK<^?hSf!P-NHX9V(Fj-SqV!IiNvm9P3S63WXy<&P{JgA;K^>Z1=x>ADd z^QtZMY;3c_qT*Fo7UG|Jxhz~3nmG60Z@VJwgme%G8_A*Xq6U*AFH;lUdDu%) zT`He*O+54s`xb51O<_k5T&Xw0ysHaW4H9pb&`h*T>W(^f1b~kyBe5hlZ|W;dXjp^Y z)cpu9S&?8STr%&4exa&wkC+a}@>FvYOzk*qNBW}eU8RnZ&nANnp@V}jt5s}xwX9mN7&LD~f+X{t#m?t3t|({}PxY9levNL=w(547 z6MQzS2(2&?rq7Gah-Zi%M|`pt_QiErsOOc@b2(bX8WL6nL$1?GeCcI3Q=5f0X`@V+ z=i>BDb=USBG+R|a_(F$gIjO;xacjN=QE#%E!ymfM0lqqEFs%Bd)(+M*+ zT|3R#K`Nuy3B!*@Nr~=+$RJ_L+h`2wpnx*+rr(A5$(L%a*#~i$L|?A_W2sBTwH@k^ z&3-8uWrr{8eDnoBXZm2wUbRr9Ai~loBLXeT>4wdrcW*d5p%Vws`!pb8$fsw#LRJtn*WOXBTm@uP z-OFv3n4VQDgr6*WB3CORq&`9!edTBtSP4m^Uho5cUm^uq^%@n(XLCsk>a{Q^y8L2# zh@ZSt2Z&ETV;9Or=OYgqxuLGvV#3=~*jM&x# z2?K|J7j?cUJDso%2NAF~lU$F6{g!L8ASc5ZW({Uq%-lM5Z(I)=wJBO8&7j=WS7d&P zq+`@71ZCq^z7__JxpFOUEW4KO7Dbx3CMPN5y5(xK?Rt}b;CS4#ugFo_{Mh21Zjjx3c}pjh?!4wRXD>(<&*RLgWM<~fY5l66 z(k*=|ximAaPoC7t#hG)`c!tL53&&n>T(ya%ViujQWhH`cq>b>*`9x1O&oy76!=jVQ zvoS~ZPEFBm>1K2CP_uJU&p^j5eb6{hxm09>mKJh@O38c_(+A&g*n!ka`As;nr5`-F z@W5Vpu-Q5@G2P~I^pHryg$Id$pE$>-Xt>e-I!wIhdz*++m<9R7G$5^gsL#os&jg{I&Fe zogY1lQ3nQQ{}BP*A3l|YUmeAwV)&$=4AjCVYAM&P?%TaxLl#KmByxS7xvl-}Fe}%G zJM9o}=iC*w@pL(NmG4mkH1%B>HGGoUBs6-m{yB;T)QFQ{5(1seoj;)J2)w zdl<&U$9&#$tC`u74;(f)Uhzd%H&Ictg)Lcxe6hc6i^#!S!zZ!p${brJV932*X!9ar zxD;Mh+nv-PfH~Z>l)Au0YB@&EFo=iSIvVbzA=(bRiQW6Ax=(c_uPMuO?8u9~owV)x z>b~0|Vd*WFNz{E)^f`O%KTYV1TN zTJC2h_L2v`aapuS<+#5al~p#03f8^sB7Yo{?Hg*s&~%fMLE|T#4|i5Ej#_BQnGB!V zCTCF17}i7#S>cG0Q_7QmrAD&&{w_+c&u3wrFt`??J|cJ__P<>WpT?T4<~^gJs?p={ zZJZA$#X5)8L%+zZ`@APU;Z3I{L*dZ42CMWjL%XZ)k9(rt;kM`=chUVpV3OgJ@c{4I z-bsf~nkaGa;qXaSJ`A7kZ%1Zyj$0uh`Z$LxGP_EMAc5WA<~NgdW4n&RQLYO}XyvO% z`lYVt+H%xeb+HJz9*F&X6#V1{R|aV^+!526`e6m%##Nm^_Z=3OlV%<}HGF%2*W{w! zYIURLIRlRDTvn&Pi2slDhVSg}mQ<>^!@3Pf>OKf!(IHyWabQCX<6Bdfhac%roMU{toj)IhW z$7~&EGh!|3sN+XJpa5~j$ly#*A{enx(T~69obrSSFepmrj5pj)h_dQ{rz5sRjP8bv zPRx32)5=Y10^A{^4tH{n?fL#A4*5YfUgByc&BWjC#e|W>?-mX`pr+m1jW{EQI9Oix z)f`(#uR>(Q?U)W#I4L>P9Rx?tL2vk&lK7UG4%Y7?r5^6Ua>54$3g@y?M+AqE50O$r zts{#{O^Fi-kM=m&$L~$};s@g?>f;%b=_n2(Nynn0Lz*Ai$j2_$VQd=jzeztFIU_;H zMw@US4j2t!)4vKNe8efdC;fk?yraDjAM&t3bq?E-TxSlr2*%u&q~^KK*OI$l)F zODy$68#VPUiBQ`^ix3uCAY$7rdgQoAjv2GIDtmdM-E@bKn|g&~1xY>}4}m_%oneOlfPWr_qMoW1`*}M{ z%Mm+E&?l7~bypwp6>WGQkSuzLG{&opj*gCZ%71k4Np YkvgubDq@ypN7Mqd6n34{?SUNs2ZuATjQ{`u literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/sl_SI.mo b/plugins/legacy-admin/framework/core/languages/sl_SI.mo new file mode 100644 index 0000000000000000000000000000000000000000..41358aae480e6f56492a0c6312a7bbb8720c1ead GIT binary patch literal 4548 zcmZveYlvh=6@W`kVw`AV5{<4gvDUa|H`(s#d2HPDWU|?L?CvDHnQhxQ;UH5Ip^C;m#p7|vd&lGA^5Gb{4*%)z6xdD z*P!_Abtrbe2}Pej!w5*P-a~78L#e z0B7Le%knXtCiU}B#;?JT!Zws~PnYFq;R(v$gre7Ppy>I#l5atY&$prI_ioASnY{29 z6n$=oV)xw;71W`!JORbebtvOcmt2C;>P9GjI{;<=d!e+~;1PHn&ccnd{rgb#`5}BC{5*0Rxf8ki`7DJy5Q#~7=w9e6 zzWAh6@Qfi3A>z+RkS`!&o6IlI!vm-X;2Gp|$RR}THMtWXMdlFEuZBz@3&_35XApVB zhT$Xj9xe+r@IK_hvOEn>mfv+KK0A)c-cBOoBY6l{bqc8<_aIed_=x}J%fkKeQ^+UE zvYa*97uoaSQ|to;**A#|x&QA*jv>S6C?9g3hR--3vX2@WMGhdt=Pvm;*$A$0g4J`j z>-9Mw*+CVEBFY&baV+AubjVDj8tLv6+YR!9kt+-vQW_)03HQO>t z)5gB3W@Fdr=$1vX;I$cA6)mem;!Ri{gLuLP3?8>utaHCsWQ zaS3)TbY;>KdQ=Y<8J34@owb`mEpBeA#Y7G3O6tXpwrvEpWb%B=XOUWptzk=_FfOQN z8}+vJsmydOZJle&x@B^05^cL1Hi~SdBf_d$_Bw47o0)(~%hdKQNIfs2M@x_mzE)UU zf?&C@X~p!d9&B^2Rt9$GT56+%stARZu){8_?Bv0A^+K}g)vDc=30*T$t1i&E>NS$8 zwdJ#FEs@P$ON-4}%WalmiaKwzoJIAaT%C7BAx?e5MWLmhBFZDL6CW@QRr22ErfWF% zS*JFWjb~Ush`9zktV7G?IyFs#OvV<28bz2&n+e(wqB31BHdOT!z86QuVTxU+2wrKR zE7l}_>x7DYG6*S~Wj;HcAJJP9<(qPl4yvWh%Vt#;qDpB)U0<_DBjV;PRL$(*}n%751n=Z6^8`XyIjur#=_V(H$wsMX~mKIkloS8zW${bfmU60qsj#X;o zmD+?JAFq#3*2l;1uhr_c8l5Z4wvR`B@}9mEm9d&0J64~Vq$B;#nmkliGn3@81V~-a zF~aRSuV>`gb~TqrOFzT~RP+#^KN7W_7qzP!*~3hbG<$fxvT9AYu2*8>D{(~P;o;{I zeOOG!;;pT%YB7`BwA+Q@>A;KmXgbPm(A%zT4g-8NE+-z%fjZ3C98=n!~(`&1zD#!Qxi4~hRtIQ`2A8~Ki_3;fC_H3x@ zVy%&-xR;r@a>{4jysne9DCX0XQ+n_@eKL+_4@kMx}93zu8$oZZ}2(%NTgzF zJt@jZCuvI76YtYu^ z4KIyux7pip^z3s_57RD@oY3mHBV6i}j?sSCL~Wy%NGn$^vFKhoG5xr0+WzuIJE)Yj zMl#!V?XtqCxx^#3pSX_B(Wc8CuO8#ll6}^p*I~k4qm3A58m{ei>hn%7Pps|~sh41; zI_Hv$IOD-~xFRnYj8c!`A92M6lgGWLRSUcS&t;g=-^FN}H!^qSB}d|NISGtp(nNJB z^N+*f!p8pvpBMkQ`8cIv*lJ$*d5pHBP zm-Vh(a>-tKF;Z)NACWJZAu;N4llLvFQ@J~MlYAFszTxD(V(zoHFD8hEaU0bJ@iF)u zXrUwlcY^k!6UiQx<(|*E22<=bc$)tr*WB{gmbL2|-EZPno4h9rH}|seVwB4@=ordY zIqqGSE0VD62AfJW?U!|KJLp3Y*c`1_S~7Gm60F!COy31blG4Vyl2-{3f>3b_H_6wM zq$L6zc{=M#JXpdpGkqe^aCLT=LuQgqx?t3WCT;B^Z_kr6Wf2Ko+{^hg8wsxOcq~Ot zvm0|dT*F8XU)*qc$Drkv@36VDId}tuA~{?r);1EV5sLX#(mPE9S5*0*BprtVZjb7Y z(^p<1WxL$(8&=hix|Y6j3G<|P;fsJbEN6L;vN6r5LCS91{t?c7n*;4y2i5-o*=KB0 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/sv_SE.mo b/plugins/legacy-admin/framework/core/languages/sv_SE.mo new file mode 100644 index 0000000000000000000000000000000000000000..e39d7672ffcee136f7a99865fab899d52fd4b373 GIT binary patch literal 13234 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 RCnoH+WbnYg#)f_-|1aElT4(?O literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/tr_TR.mo b/plugins/legacy-admin/framework/core/languages/tr_TR.mo new file mode 100644 index 0000000000000000000000000000000000000000..e33468781d54b9b5bdca870052109b9206504acf GIT binary patch literal 21185 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 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/languages/zh_CN.mo b/plugins/legacy-admin/framework/core/languages/zh_CN.mo new file mode 100644 index 0000000000000000000000000000000000000000..166f0e05cc295f67c03022b3061cb1ed8d17e9d5 GIT binary patch literal 16659 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 b`-Cg}J{!X{-y&w9KJuEu@M}Cxncx2hi-2Sh literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/framework/core/templates/panel/container.tpl.php b/plugins/legacy-admin/framework/core/templates/panel/container.tpl.php new file mode 100644 index 000000000..c65ef6078 --- /dev/null +++ b/plugins/legacy-admin/framework/core/templates/panel/container.tpl.php @@ -0,0 +1,44 @@ +parent->args['open_expanded'] ) ? ' fully-expanded' : '' . ( ! empty( $this->parent->args['class'] ) ? ' ' . $this->parent->args['class'] : '' ); + $nonce = wp_create_nonce("redux_ajax_nonce"); +?> +

    + parent->args['database'] == "network" && $this->parent->args['network_admin'] && is_network_admin() ? './edit.php?action=redux_' . $this->parent->args['opt_name'] : './options.php' ) ?> +
    + + + parent->no_panel ) ) : ?> + + + init_settings_fields(); + + // Last tab? + $this->parent->options['last_tab'] = ( isset( $_GET['tab'] ) && ! isset( $this->parent->transients['last_save_mode'] ) ) ? $_GET['tab'] : ''; + ?> + + + get_template( 'content.tpl.php' ); ?> + +
    +
    + +parent->args['footer_text'] ) ) : ?> + + diff --git a/plugins/legacy-admin/framework/core/templates/panel/content.tpl.php b/plugins/legacy-admin/framework/core/templates/panel/content.tpl.php new file mode 100644 index 000000000..9dfee5e4b --- /dev/null +++ b/plugins/legacy-admin/framework/core/templates/panel/content.tpl.php @@ -0,0 +1,121 @@ + + +get_template( 'header.tpl.php' ); ?> + + +parent->args['intro_text'] ) ) : ?> +
    parent->args['intro_text']; ?>
    + + + + + +get_template( 'menu_container.tpl.php' ); ?> + +
    + + get_template( 'header_stickybar.tpl.php' ); ?> +
     
    + parent->sections as $k => $section ) { + if ( isset( $section['customizer_only'] ) && $section['customizer_only'] == true ) { + continue; + } + + //$active = ( ( is_numeric($this->parent->current_tab) && $this->parent->current_tab == $k ) || ( !is_numeric($this->parent->current_tab) && $this->parent->current_tab === $k ) ) ? ' style="display: block;"' : ''; + $section['class'] = isset( $section['class'] ) ? ' ' . $section['class'] : ''; + echo '
    '; + //echo '
    '; + + echo '
      '; + + foreach ($section['tab'] as $subkey => $subsection) { + //echo '-=' . $subkey . '=-'; + echo '
    • ' . $subsection['title'] . '
    • '; + } + + echo '
    '; + foreach ($section['tab'] as $subkey => $subsection) { + echo '
    '; + echo '
    '; + echo "hello ".$subkey; + do_settings_sections( $this->parent->args['opt_name'] . $k . '_tab_' . $subkey . '_section_group' ); + echo "
    "; + echo "
    "; + } + echo "
    "; + } else { + */ + + // Don't display in the + $display = true; + if ( isset( $_GET['page'] ) && $_GET['page'] == $this->parent->args['page_slug'] ) { + if ( isset( $section['panel'] ) && $section['panel'] == "false" ) { + $display = false; + } + } + + if ( $display ) { + $this->output_section( $k ); + } + //} + echo "
    "; + //echo '
    '; + } + + // + // // Debug object output + // if ( $this->parent->args['dev_mode'] == true ) { + // $this->parent->debug->render(); + // } + //?> + parent->args['system_info'] === true ) : + // require_once ReduxFramework::$_dir . 'inc/sysinfo.php'; + // $system_info = new Simple_System_Info(); + // ?> + + + + + get( true );?> + + + + + parent->args['opt_name']}", $this ); // REMOVE LATER + + /** + * action 'redux/page/{opt_name}/sections/after' + * + * @param object $this ReduxFramework + */ + do_action( "redux/page/{$this->parent->args['opt_name']}/sections/after", $this ); + ?> +
    + + get_template( 'footer.tpl.php' ); ?> + +

    +
    \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/templates/panel/footer.tpl.php b/plugins/legacy-admin/framework/core/templates/panel/footer.tpl.php new file mode 100644 index 000000000..e905b0419 --- /dev/null +++ b/plugins/legacy-admin/framework/core/templates/panel/footer.tpl.php @@ -0,0 +1,57 @@ + + + diff --git a/plugins/legacy-admin/framework/core/templates/panel/header.tpl.php b/plugins/legacy-admin/framework/core/templates/panel/header.tpl.php new file mode 100644 index 000000000..23bfe159a --- /dev/null +++ b/plugins/legacy-admin/framework/core/templates/panel/header.tpl.php @@ -0,0 +1,31 @@ + +
    + parent->args['display_name'] ) ) : ?> +
    + + parent->args['dev_mode'] ) && $this->parent->args['dev_mode'] ) : ?> + + + +

    parent->args['display_name']; ?>

    + + parent->args['display_version'] ) ) : ?> + parent->args['display_version']; ?> + + +
    + + +
    +
    \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/templates/panel/header_stickybar.tpl.php b/plugins/legacy-admin/framework/core/templates/panel/header_stickybar.tpl.php new file mode 100644 index 000000000..7ba8e36c5 --- /dev/null +++ b/plugins/legacy-admin/framework/core/templates/panel/header_stickybar.tpl.php @@ -0,0 +1,36 @@ + +
    +
    + + parent->args['hide_expand'] ? ' style="display: none;"' : '' ?>> + +
    + + + parent->args['hide_reset'] ) : ?> + parent->args['opt_name'] . '[defaults-section]', false ); ?> + parent->args['opt_name'] . '[defaults]', false ); ?> + +
    +
     
    +
    +
    + + +
    + notification_bar(); ?> +
    + + +
    \ No newline at end of file diff --git a/plugins/legacy-admin/framework/core/templates/panel/menu_container.tpl.php b/plugins/legacy-admin/framework/core/templates/panel/menu_container.tpl.php new file mode 100644 index 000000000..17205422f --- /dev/null +++ b/plugins/legacy-admin/framework/core/templates/panel/menu_container.tpl.php @@ -0,0 +1,67 @@ + +
    +
      + parent->sections as $k => $section ) { + $title = isset ( $section[ 'title' ] ) ? $section[ 'title' ] : ''; + + $skip_sec = false; + foreach ( $this->parent->hidden_perm_sections as $num => $section_title ) { + if ( $section_title == $title ) { + $skip_sec = true; + } + } + + if ( isset ( $section[ 'customizer_only' ] ) && $section[ 'customizer_only' ] == true ) { + continue; + } + + if ( false == $skip_sec ) { + echo $this->parent->section_menu ( $k, $section ); + $skip_sec = false; + } + } + + /** + * action 'redux-page-after-sections-menu-{opt_name}' + * + * @param object $this ReduxFramework + */ + do_action ( "redux-page-after-sections-menu-{$this->parent->args[ 'opt_name' ]}", $this ); + + /** + * action 'redux/page/{opt_name}/menu/after' + * + * @param object $this ReduxFramework + */ + do_action ( "redux/page/{$this->parent->args[ 'opt_name' ]}/menu/after", $this ); + + ?> + + parent->args[ 'system_info' ] === true ) : ?> + + +
    +
    \ No newline at end of file diff --git a/plugins/legacy-admin/framework/options/legacy-config.php b/plugins/legacy-admin/framework/options/legacy-config.php new file mode 100644 index 000000000..02121d4d2 --- /dev/null +++ b/plugins/legacy-admin/framework/options/legacy-config.php @@ -0,0 +1,2165 @@ + SET ARGUMENTS + * All the possible arguments for Redux. + * For full documentation on arguments, please refer to: https://github.com/ReduxFramework/ReduxFramework/wiki/Arguments + * */ + + + + + /*ADDED in Legacy Admin - START */ + // manageoptions and super admin + + $legacyadmin_permissions = legacy_get_option( "legacyadmin_plugin_access","manage_options"); + if($legacyadmin_permissions == "super_admin" && is_super_admin()){ + $legacyadmin_permissions = 'manage_options'; + } + + // specific user + $legacyadmin_userid = legacy_get_option( "legacyadmin_plugin_userid",""); + if($legacyadmin_permissions == "specific_user" && $legacyadmin_userid == get_current_user_id()){ + $legacyadmin_permissions = 'read'; + } + + // if plugin is network activated, then hide it from inner sites. + $menu_type = 'menu'; + + if ( ! function_exists( 'is_plugin_active_for_network' ) ){ + require_once( ABSPATH . '/wp-admin/includes/plugin.php' ); + } + + // Makes sure the plugin is defined before trying to use it + if ( is_plugin_active_for_network( 'legacy-admin/legacy-core.php' )){ + if(!is_main_site()){ + $menu_type = 'hidden'; + } + } + + +/*ADDED in Legacy Admin - END*/ + + + + + $theme = wp_get_theme(); // For use with some settings. Not necessary. + + $args = array( + // TYPICAL -> Change these values as you need/desire + 'opt_name' => $opt_name, + // This is where your data is stored in the database and also becomes your global variable name. + 'display_name' => 'Legacy Admin', + // Name that appears at the top of your panel + 'display_version' => '9.2', + // Version that appears at the top of your panel + 'menu_type' => $menu_type, + //Specify if the admin menu should appear or not. Options: menu or submenu (Under appearance only) + 'allow_sub_menu' => true, + // Show the sections below the admin menu item or not + 'menu_title' => __( 'Legacy Admin', 'legacy_framework' ), + 'page_title' => __( 'Legacy Admin', 'legacy_framework' ), + // You will need to generate a Google API key to use this feature. + // Please visit: https://developers.google.com/fonts/docs/developer_api#Auth + 'google_api_key' => '', + // Set it you want google fonts to update weekly. A google_api_key value is required. + 'google_update_weekly' => false, + // Must be defined to add google fonts to the typography module + 'async_typography' => true, + // Use a asynchronous font on the front end or font string + //'disable_google_fonts_link' => true, // Disable this in case you want to create your own google fonts loader + 'admin_bar' => true, + // Show the panel pages on the admin bar + 'admin_bar_icon' => 'dashicons-art', + // Choose an icon for the admin bar menu + 'admin_bar_priority' => 50, + // Choose an priority for the admin bar menu + 'global_variable' => 'legacyadmin', + // Set a different name for your global variable other than the opt_name + 'dev_mode' => false, + // Show the time the page took to load, etc + 'update_notice' => true, + // If dev_mode is enabled, will notify developer of updated versions available in the GitHub Repo + 'customizer' => false, + // Enable basic customizer support + //'open_expanded' => true, // Allow you to start the panel in an expanded way initially. + //'disable_save_warn' => true, // Disable the save warning when a user changes a field + + // OPTIONAL -> Give you extra features + 'page_priority' => null, + // Order where the menu appears in the admin area. If there is any conflict, something will not show. Warning. + 'page_parent' => 'themes.php', + // For a full list of options, visit: http://codex.wordpress.org/Function_Reference/add_submenu_page#Parameters + 'page_permissions' => $legacyadmin_permissions, + // Permissions needed to access the options panel. + 'menu_icon' => '', + // Specify a custom URL to an icon + 'last_tab' => '', + // Force your panel to always open to a specific tab (by id) + 'page_icon' => 'icon-themes', + // Icon displayed in the admin panel next to your menu_title + 'page_slug' => '_legacyoptions', + // Page slug used to denote the panel + 'save_defaults' => true, + // On load save the defaults to DB before user clicks save or not + 'default_show' => false, + // If true, shows the default value next to each field that is not the default value. + 'default_mark' => '', + // What to print by the field's title if the value shown is default. Suggested: * + 'show_import_export' => true, + // Shows the Import/Export panel when not used as a field. + + // CAREFUL -> These options are for advanced use only + 'transient_time' => 60 * MINUTE_IN_SECONDS, + 'output' => true, + // Global shut-off for dynamic CSS output by the framework. Will also disable google fonts output + 'output_tag' => true, + // Allows dynamic CSS to be generated for customizer and google fonts, but stops the dynamic CSS from going to the head + 'footer_credit' => ' ', // Disable the footer credit of Redux. Please leave if you can help it. + + // FUTURE -> Not in use yet, but reserved or partially implemented. Use at your own risk. + 'database' => '', + // possible: options, theme_mods, theme_mods_expanded, transient. Not fully functional, warning! + 'system_info' => false, + // REMOVE + + //'compiler' => true, + + // HINTS + 'hints' => array( + 'icon' => 'el el-question-sign', + 'icon_position' => 'right', + 'icon_color' => 'lightgray', + 'icon_size' => 'normal', + 'tip_style' => array( + 'color' => 'light', + 'shadow' => true, + 'rounded' => false, + 'style' => '', + ), + 'tip_position' => array( + 'my' => 'top left', + 'at' => 'bottom right', + ), + 'tip_effect' => array( + 'show' => array( + 'effect' => 'slide', + 'duration' => '500', + 'event' => 'mouseover', + ), + 'hide' => array( + 'effect' => 'slide', + 'duration' => '500', + 'event' => 'click mouseleave', + ), + ), + ) + ); + + Redux::setArgs( $opt_name, $args ); + + /* + * ---> END ARGUMENTS + */ + + + /* + * ---> START HELP TABS + */ +/* + $tabs = array( + array( + 'id' => 'redux-help-tab-1', + 'title' => __( 'Theme Information 1', 'legacy_framework' ), + 'content' => __( '

    This is the tab content, HTML is allowed.

    ', 'legacy_framework' ) + ), + array( + 'id' => 'redux-help-tab-2', + 'title' => __( 'Theme Information 2', 'legacy_framework' ), + 'content' => __( '

    This is the tab content, HTML is allowed.

    ', 'legacy_framework' ) + ) + ); + Redux::setHelpTab( $opt_name, $tabs ); + + // Set the help sidebar + $content = __( '

    This is the sidebar content, HTML is allowed.

    ', 'legacy_framework' ); + Redux::setHelpSidebar( $opt_name, $content ); +*/ + + /* + * <--- END HELP TABS + */ + + + /* + * + * ---> START SECTIONS + * + */ + + /* + + As of Redux 3.5+, there is an extensive API. This API can be used in a mix/match mode allowing for + + + */ + + // -> START Basic Fields + $standard_fonts = array( + '0' => 'Select Font', + 'Arial, Helvetica, sans-serif' => 'Arial, Helvetica, sans-serif', + "'Arial Black', Gadget, sans-serif" => "'Arial Black', Gadget, sans-serif", + "'Bookman Old Style', serif" => "'Bookman Old Style', serif", + "'Comic Sans MS', cursive" => "'Comic Sans MS', cursive", + "Courier, monospace" => "Courier, monospace", + "Garamond, serif" => "Garamond, serif", + "Georgia, serif" => "Georgia, serif", + "Impact, Charcoal, sans-serif" => "Impact, Charcoal, sans-serif", + "'Lucida Console', Monaco, monospace" => "'Lucida Console', Monaco, monospace", + "'Lucida Sans Unicode', 'Lucida Grande', sans-serif" => "'Lucida Sans Unicode', 'Lucida Grande', sans-serif", + "'MS Sans Serif', Geneva, sans-serif" => "'MS Sans Serif', Geneva, sans-serif", + "'MS Serif', 'New York', sans-serif" => "'MS Serif', 'New York', sans-serif", + "'Palatino Linotype', 'Book Antiqua', Palatino, serif" => "'Palatino Linotype', 'Book Antiqua', Palatino, serif", + "Tahoma, Geneva, sans-serif" => "Tahoma, Geneva, sans-serif", + "'Times New Roman', Times, serif" => "'Times New Roman', Times, serif", + "'Trebuchet MS', Helvetica, sans-serif" => "'Trebuchet MS', Helvetica, sans-serif", + "Verdana, Geneva, sans-serif" => "Verdana, Geneva, sans-serif" + ); + + + $google_fonts = array( + "0" => "Select Font", + "ABeeZee" => "ABeeZee", + "Abel" => "Abel", + "Abril Fatface" => "Abril Fatface", + "Aclonica" => "Aclonica", + "Acme" => "Acme", + "Actor" => "Actor", + "Adamina" => "Adamina", + "Advent Pro" => "Advent Pro", + "Aguafina Script" => "Aguafina Script", + "Akronim" => "Akronim", + "Aladin" => "Aladin", + "Aldrich" => "Aldrich", + "Alef" => "Alef", + "Alegreya" => "Alegreya", + "Alegreya SC" => "Alegreya SC", + "Alegreya Sans" => "Alegreya Sans", + "Alegreya Sans SC" => "Alegreya Sans SC", + "Alex Brush" => "Alex Brush", + "Alfa Slab One" => "Alfa Slab One", + "Alice" => "Alice", + "Alike" => "Alike", + "Alike Angular" => "Alike Angular", + "Allan" => "Allan", + "Allerta" => "Allerta", + "Allerta Stencil" => "Allerta Stencil", + "Allura" => "Allura", + "Almendra" => "Almendra", + "Almendra Display" => "Almendra Display", + "Almendra SC" => "Almendra SC", + "Amarante" => "Amarante", + "Amaranth" => "Amaranth", + "Amatic SC" => "Amatic SC", + "Amethysta" => "Amethysta", + "Anaheim" => "Anaheim", + "Andada" => "Andada", + "Andika" => "Andika", + "Angkor" => "Angkor", + "Annie Use Your Telescope" => "Annie Use Your Telescope", + "Anonymous Pro" => "Anonymous Pro", + "Antic" => "Antic", + "Antic Didone" => "Antic Didone", + "Antic Slab" => "Antic Slab", + "Anton" => "Anton", + "Arapey" => "Arapey", + "Arbutus" => "Arbutus", + "Arbutus Slab" => "Arbutus Slab", + "Architects Daughter" => "Architects Daughter", + "Archivo Black" => "Archivo Black", + "Archivo Narrow" => "Archivo Narrow", + "Arimo" => "Arimo", + "Arizonia" => "Arizonia", + "Armata" => "Armata", + "Artifika" => "Artifika", + "Arvo" => "Arvo", + "Asap" => "Asap", + "Asset" => "Asset", + "Astloch" => "Astloch", + "Asul" => "Asul", + "Atomic Age" => "Atomic Age", + "Aubrey" => "Aubrey", + "Audiowide" => "Audiowide", + "Autour One" => "Autour One", + "Average" => "Average", + "Average Sans" => "Average Sans", + "Averia Gruesa Libre" => "Averia Gruesa Libre", + "Averia Libre" => "Averia Libre", + "Averia Sans Libre" => "Averia Sans Libre", + "Averia Serif Libre" => "Averia Serif Libre", + "Bad Script" => "Bad Script", + "Balthazar" => "Balthazar", + "Bangers" => "Bangers", + "Basic" => "Basic", + "Battambang" => "Battambang", + "Baumans" => "Baumans", + "Bayon" => "Bayon", + "Belgrano" => "Belgrano", + "Belleza" => "Belleza", + "BenchNine" => "BenchNine", + "Bentham" => "Bentham", + "Berkshire Swash" => "Berkshire Swash", + "Bevan" => "Bevan", + "Bigelow Rules" => "Bigelow Rules", + "Bigshot One" => "Bigshot One", + "Bilbo" => "Bilbo", + "Bilbo Swash Caps" => "Bilbo Swash Caps", + "Bitter" => "Bitter", + "Black Ops One" => "Black Ops One", + "Bokor" => "Bokor", + "Bonbon" => "Bonbon", + "Boogaloo" => "Boogaloo", + "Bowlby One" => "Bowlby One", + "Bowlby One SC" => "Bowlby One SC", + "Brawler" => "Brawler", + "Bree Serif" => "Bree Serif", + "Bubblegum Sans" => "Bubblegum Sans", + "Bubbler One" => "Bubbler One", + "Buda" => "Buda", + "Buenard" => "Buenard", + "Butcherman" => "Butcherman", + "Butterfly Kids" => "Butterfly Kids", + "Cabin" => "Cabin", + "Cabin Condensed" => "Cabin Condensed", + "Cabin Sketch" => "Cabin Sketch", + "Caesar Dressing" => "Caesar Dressing", + "Cagliostro" => "Cagliostro", + "Calligraffitti" => "Calligraffitti", + "Cambo" => "Cambo", + "Candal" => "Candal", + "Cantarell" => "Cantarell", + "Cantata One" => "Cantata One", + "Cantora One" => "Cantora One", + "Capriola" => "Capriola", + "Cardo" => "Cardo", + "Carme" => "Carme", + "Carrois Gothic" => "Carrois Gothic", + "Carrois Gothic SC" => "Carrois Gothic SC", + "Carter One" => "Carter One", + "Caudex" => "Caudex", + "Cedarville Cursive" => "Cedarville Cursive", + "Ceviche One" => "Ceviche One", + "Changa One" => "Changa One", + "Chango" => "Chango", + "Chau Philomene One" => "Chau Philomene One", + "Chela One" => "Chela One", + "Chelsea Market" => "Chelsea Market", + "Chenla" => "Chenla", + "Cherry Cream Soda" => "Cherry Cream Soda", + "Cherry Swash" => "Cherry Swash", + "Chewy" => "Chewy", + "Chicle" => "Chicle", + "Chivo" => "Chivo", + "Cinzel" => "Cinzel", + "Cinzel Decorative" => "Cinzel Decorative", + "Clicker Script" => "Clicker Script", + "Coda" => "Coda", + "Coda Caption" => "Coda Caption", + "Codystar" => "Codystar", + "Combo" => "Combo", + "Comfortaa" => "Comfortaa", + "Coming Soon" => "Coming Soon", + "Concert One" => "Concert One", + "Condiment" => "Condiment", + "Content" => "Content", + "Contrail One" => "Contrail One", + "Convergence" => "Convergence", + "Cookie" => "Cookie", + "Copse" => "Copse", + "Corben" => "Corben", + "Courgette" => "Courgette", + "Cousine" => "Cousine", + "Coustard" => "Coustard", + "Covered By Your Grace" => "Covered By Your Grace", + "Crafty Girls" => "Crafty Girls", + "Creepster" => "Creepster", + "Crete Round" => "Crete Round", + "Crimson Text" => "Crimson Text", + "Croissant One" => "Croissant One", + "Crushed" => "Crushed", + "Cuprum" => "Cuprum", + "Cutive" => "Cutive", + "Cutive Mono" => "Cutive Mono", + "Damion" => "Damion", + "Dancing Script" => "Dancing Script", + "Dangrek" => "Dangrek", + "Dawning of a New Day" => "Dawning of a New Day", + "Days One" => "Days One", + "Delius" => "Delius", + "Delius Swash Caps" => "Delius Swash Caps", + "Delius Unicase" => "Delius Unicase", + "Della Respira" => "Della Respira", + "Denk One" => "Denk One", + "Devonshire" => "Devonshire", + "Didact Gothic" => "Didact Gothic", + "Diplomata" => "Diplomata", + "Diplomata SC" => "Diplomata SC", + "Domine" => "Domine", + "Donegal One" => "Donegal One", + "Doppio One" => "Doppio One", + "Dorsa" => "Dorsa", + "Dosis" => "Dosis", + "Dr Sugiyama" => "Dr Sugiyama", + "Droid Sans" => "Droid Sans", + "Droid Sans Mono" => "Droid Sans Mono", + "Droid Serif" => "Droid Serif", + "Duru Sans" => "Duru Sans", + "Dynalight" => "Dynalight", + "EB Garamond" => "EB Garamond", + "Eagle Lake" => "Eagle Lake", + "Eater" => "Eater", + "Economica" => "Economica", + "Electrolize" => "Electrolize", + "Elsie" => "Elsie", + "Elsie Swash Caps" => "Elsie Swash Caps", + "Emblema One" => "Emblema One", + "Emilys Candy" => "Emilys Candy", + "Engagement" => "Engagement", + "Englebert" => "Englebert", + "Enriqueta" => "Enriqueta", + "Erica One" => "Erica One", + "Esteban" => "Esteban", + "Euphoria Script" => "Euphoria Script", + "Ewert" => "Ewert", + "Exo" => "Exo", + "Exo 2" => "Exo 2", + "Expletus Sans" => "Expletus Sans", + "Fanwood Text" => "Fanwood Text", + "Fascinate" => "Fascinate", + "Fascinate Inline" => "Fascinate Inline", + "Faster One" => "Faster One", + "Fasthand" => "Fasthand", + "Fauna One" => "Fauna One", + "Federant" => "Federant", + "Federo" => "Federo", + "Felipa" => "Felipa", + "Fenix" => "Fenix", + "Finger Paint" => "Finger Paint", + "Fjalla One" => "Fjalla One", + "Fjord One" => "Fjord One", + "Flamenco" => "Flamenco", + "Flavors" => "Flavors", + "Fondamento" => "Fondamento", + "Fontdiner Swanky" => "Fontdiner Swanky", + "Forum" => "Forum", + "Francois One" => "Francois One", + "Freckle Face" => "Freckle Face", + "Fredericka the Great" => "Fredericka the Great", + "Fredoka One" => "Fredoka One", + "Freehand" => "Freehand", + "Fresca" => "Fresca", + "Frijole" => "Frijole", + "Fruktur" => "Fruktur", + "Fugaz One" => "Fugaz One", + "GFS Didot" => "GFS Didot", + "GFS Neohellenic" => "GFS Neohellenic", + "Gabriela" => "Gabriela", + "Gafata" => "Gafata", + "Galdeano" => "Galdeano", + "Galindo" => "Galindo", + "Gentium Basic" => "Gentium Basic", + "Gentium Book Basic" => "Gentium Book Basic", + "Geo" => "Geo", + "Geostar" => "Geostar", + "Geostar Fill" => "Geostar Fill", + "Germania One" => "Germania One", + "Gilda Display" => "Gilda Display", + "Give You Glory" => "Give You Glory", + "Glass Antiqua" => "Glass Antiqua", + "Glegoo" => "Glegoo", + "Gloria Hallelujah" => "Gloria Hallelujah", + "Goblin One" => "Goblin One", + "Gochi Hand" => "Gochi Hand", + "Gorditas" => "Gorditas", + "Goudy Bookletter 1911" => "Goudy Bookletter 1911", + "Graduate" => "Graduate", + "Grand Hotel" => "Grand Hotel", + "Gravitas One" => "Gravitas One", + "Great Vibes" => "Great Vibes", + "Griffy" => "Griffy", + "Gruppo" => "Gruppo", + "Gudea" => "Gudea", + "Habibi" => "Habibi", + "Hammersmith One" => "Hammersmith One", + "Hanalei" => "Hanalei", + "Hanalei Fill" => "Hanalei Fill", + "Handlee" => "Handlee", + "Hanuman" => "Hanuman", + "Happy Monkey" => "Happy Monkey", + "Headland One" => "Headland One", + "Henny Penny" => "Henny Penny", + "Herr Von Muellerhoff" => "Herr Von Muellerhoff", + "Holtwood One SC" => "Holtwood One SC", + "Homemade Apple" => "Homemade Apple", + "Homenaje" => "Homenaje", + "IM Fell DW Pica" => "IM Fell DW Pica", + "IM Fell DW Pica SC" => "IM Fell DW Pica SC", + "IM Fell Double Pica" => "IM Fell Double Pica", + "IM Fell Double Pica SC" => "IM Fell Double Pica SC", + "IM Fell English" => "IM Fell English", + "IM Fell English SC" => "IM Fell English SC", + "IM Fell French Canon" => "IM Fell French Canon", + "IM Fell French Canon SC" => "IM Fell French Canon SC", + "IM Fell Great Primer" => "IM Fell Great Primer", + "IM Fell Great Primer SC" => "IM Fell Great Primer SC", + "Iceberg" => "Iceberg", + "Iceland" => "Iceland", + "Imprima" => "Imprima", + "Inconsolata" => "Inconsolata", + "Inder" => "Inder", + "Indie Flower" => "Indie Flower", + "Inika" => "Inika", + "Irish Grover" => "Irish Grover", + "Istok Web" => "Istok Web", + "Italiana" => "Italiana", + "Italianno" => "Italianno", + "Jacques Francois" => "Jacques Francois", + "Jacques Francois Shadow" => "Jacques Francois Shadow", + "Jim Nightshade" => "Jim Nightshade", + "Jockey One" => "Jockey One", + "Jolly Lodger" => "Jolly Lodger", + "Josefin Sans" => "Josefin Sans", + "Josefin Slab" => "Josefin Slab", + "Joti One" => "Joti One", + "Judson" => "Judson", + "Julee" => "Julee", + "Julius Sans One" => "Julius Sans One", + "Junge" => "Junge", + "Jura" => "Jura", + "Just Another Hand" => "Just Another Hand", + "Just Me Again Down Here" => "Just Me Again Down Here", + "Kameron" => "Kameron", + "Kantumruy" => "Kantumruy", + "Karla" => "Karla", + "Kaushan Script" => "Kaushan Script", + "Kavoon" => "Kavoon", + "Kdam Thmor" => "Kdam Thmor", + "Keania One" => "Keania One", + "Kelly Slab" => "Kelly Slab", + "Kenia" => "Kenia", + "Khmer" => "Khmer", + "Kite One" => "Kite One", + "Knewave" => "Knewave", + "Kotta One" => "Kotta One", + "Koulen" => "Koulen", + "Kranky" => "Kranky", + "Kreon" => "Kreon", + "Kristi" => "Kristi", + "Krona One" => "Krona One", + "La Belle Aurore" => "La Belle Aurore", + "Lancelot" => "Lancelot", + "Lato" => "Lato", + "League Script" => "League Script", + "Leckerli One" => "Leckerli One", + "Ledger" => "Ledger", + "Lekton" => "Lekton", + "Lemon" => "Lemon", + "Libre Baskerville" => "Libre Baskerville", + "Life Savers" => "Life Savers", + "Lilita One" => "Lilita One", + "Lily Script One" => "Lily Script One", + "Limelight" => "Limelight", + "Linden Hill" => "Linden Hill", + "Lobster" => "Lobster", + "Lobster Two" => "Lobster Two", + "Londrina Outline" => "Londrina Outline", + "Londrina Shadow" => "Londrina Shadow", + "Londrina Sketch" => "Londrina Sketch", + "Londrina Solid" => "Londrina Solid", + "Lora" => "Lora", + "Love Ya Like A Sister" => "Love Ya Like A Sister", + "Loved by the King" => "Loved by the King", + "Lovers Quarrel" => "Lovers Quarrel", + "Luckiest Guy" => "Luckiest Guy", + "Lusitana" => "Lusitana", + "Lustria" => "Lustria", + "Macondo" => "Macondo", + "Macondo Swash Caps" => "Macondo Swash Caps", + "Magra" => "Magra", + "Maiden Orange" => "Maiden Orange", + "Mako" => "Mako", + "Marcellus" => "Marcellus", + "Marcellus SC" => "Marcellus SC", + "Marck Script" => "Marck Script", + "Margarine" => "Margarine", + "Marko One" => "Marko One", + "Marmelad" => "Marmelad", + "Marvel" => "Marvel", + "Mate" => "Mate", + "Mate SC" => "Mate SC", + "Maven Pro" => "Maven Pro", + "McLaren" => "McLaren", + "Meddon" => "Meddon", + "MedievalSharp" => "MedievalSharp", + "Medula One" => "Medula One", + "Megrim" => "Megrim", + "Meie Script" => "Meie Script", + "Merienda" => "Merienda", + "Merienda One" => "Merienda One", + "Merriweather" => "Merriweather", + "Merriweather Sans" => "Merriweather Sans", + "Metal" => "Metal", + "Metal Mania" => "Metal Mania", + "Metamorphous" => "Metamorphous", + "Metrophobic" => "Metrophobic", + "Michroma" => "Michroma", + "Milonga" => "Milonga", + "Miltonian" => "Miltonian", + "Miltonian Tattoo" => "Miltonian Tattoo", + "Miniver" => "Miniver", + "Miss Fajardose" => "Miss Fajardose", + "Modern Antiqua" => "Modern Antiqua", + "Molengo" => "Molengo", + "Molle" => "Molle", + "Monda" => "Monda", + "Monofett" => "Monofett", + "Monoton" => "Monoton", + "Monsieur La Doulaise" => "Monsieur La Doulaise", + "Montaga" => "Montaga", + "Montez" => "Montez", + "Montserrat" => "Montserrat", + "Montserrat Alternates" => "Montserrat Alternates", + "Montserrat Subrayada" => "Montserrat Subrayada", + "Moul" => "Moul", + "Moulpali" => "Moulpali", + "Mountains of Christmas" => "Mountains of Christmas", + "Mouse Memoirs" => "Mouse Memoirs", + "Mr Bedfort" => "Mr Bedfort", + "Mr Dafoe" => "Mr Dafoe", + "Mr De Haviland" => "Mr De Haviland", + "Mrs Saint Delafield" => "Mrs Saint Delafield", + "Mrs Sheppards" => "Mrs Sheppards", + "Muli" => "Muli", + "Mystery Quest" => "Mystery Quest", + "Neucha" => "Neucha", + "Neuton" => "Neuton", + "New Rocker" => "New Rocker", + "News Cycle" => "News Cycle", + "Niconne" => "Niconne", + "Nixie One" => "Nixie One", + "Nobile" => "Nobile", + "Nokora" => "Nokora", + "Norican" => "Norican", + "Nosifer" => "Nosifer", + "Nothing You Could Do" => "Nothing You Could Do", + "Noticia Text" => "Noticia Text", + "Noto Sans" => "Noto Sans", + "Noto Serif" => "Noto Serif", + "Nova Cut" => "Nova Cut", + "Nova Flat" => "Nova Flat", + "Nova Mono" => "Nova Mono", + "Nova Oval" => "Nova Oval", + "Nova Round" => "Nova Round", + "Nova Script" => "Nova Script", + "Nova Slim" => "Nova Slim", + "Nova Square" => "Nova Square", + "Numans" => "Numans", + "Nunito" => "Nunito", + "Odor Mean Chey" => "Odor Mean Chey", + "Offside" => "Offside", + "Old Standard TT" => "Old Standard TT", + "Oldenburg" => "Oldenburg", + "Oleo Script" => "Oleo Script", + "Oleo Script Swash Caps" => "Oleo Script Swash Caps", + "Open Sans" => "Open Sans", + "Open Sans Condensed" => "Open Sans Condensed", + "Oranienbaum" => "Oranienbaum", + "Orbitron" => "Orbitron", + "Oregano" => "Oregano", + "Orienta" => "Orienta", + "Original Surfer" => "Original Surfer", + "Oswald" => "Oswald", + "Over the Rainbow" => "Over the Rainbow", + "Overlock" => "Overlock", + "Overlock SC" => "Overlock SC", + "Ovo" => "Ovo", + "Oxygen" => "Oxygen", + "Oxygen Mono" => "Oxygen Mono", + "PT Mono" => "PT Mono", + "PT Sans" => "PT Sans", + "PT Sans Caption" => "PT Sans Caption", + "PT Sans Narrow" => "PT Sans Narrow", + "PT Serif" => "PT Serif", + "PT Serif Caption" => "PT Serif Caption", + "Pacifico" => "Pacifico", + "Paprika" => "Paprika", + "Parisienne" => "Parisienne", + "Passero One" => "Passero One", + "Passion One" => "Passion One", + "Pathway Gothic One" => "Pathway Gothic One", + "Patrick Hand" => "Patrick Hand", + "Patrick Hand SC" => "Patrick Hand SC", + "Patua One" => "Patua One", + "Paytone One" => "Paytone One", + "Peralta" => "Peralta", + "Permanent Marker" => "Permanent Marker", + "Petit Formal Script" => "Petit Formal Script", + "Petrona" => "Petrona", + "Philosopher" => "Philosopher", + "Piedra" => "Piedra", + "Pinyon Script" => "Pinyon Script", + "Pirata One" => "Pirata One", + "Plaster" => "Plaster", + "Play" => "Play", + "Playball" => "Playball", + "Playfair Display" => "Playfair Display", + "Playfair Display SC" => "Playfair Display SC", + "Podkova" => "Podkova", + "Poiret One" => "Poiret One", + "Poller One" => "Poller One", + "Poly" => "Poly", + "Pompiere" => "Pompiere", + "Pontano Sans" => "Pontano Sans", + "Port Lligat Sans" => "Port Lligat Sans", + "Port Lligat Slab" => "Port Lligat Slab", + "Prata" => "Prata", + "Preahvihear" => "Preahvihear", + "Press Start 2P" => "Press Start 2P", + "Princess Sofia" => "Princess Sofia", + "Prociono" => "Prociono", + "Prosto One" => "Prosto One", + "Puritan" => "Puritan", + "Purple Purse" => "Purple Purse", + "Quando" => "Quando", + "Quantico" => "Quantico", + "Quattrocento" => "Quattrocento", + "Quattrocento Sans" => "Quattrocento Sans", + "Questrial" => "Questrial", + "Quicksand" => "Quicksand", + "Quintessential" => "Quintessential", + "Qwigley" => "Qwigley", + "Racing Sans One" => "Racing Sans One", + "Radley" => "Radley", + "Raleway" => "Raleway", + "Raleway Dots" => "Raleway Dots", + "Rambla" => "Rambla", + "Rammetto One" => "Rammetto One", + "Ranchers" => "Ranchers", + "Rancho" => "Rancho", + "Rationale" => "Rationale", + "Redressed" => "Redressed", + "Reenie Beanie" => "Reenie Beanie", + "Revalia" => "Revalia", + "Ribeye" => "Ribeye", + "Ribeye Marrow" => "Ribeye Marrow", + "Righteous" => "Righteous", + "Risque" => "Risque", + "Roboto" => "Roboto", + "Roboto Condensed" => "Roboto Condensed", + "Roboto Slab" => "Roboto Slab", + "Rochester" => "Rochester", + "Rock Salt" => "Rock Salt", + "Rokkitt" => "Rokkitt", + "Romanesco" => "Romanesco", + "Ropa Sans" => "Ropa Sans", + "Rosario" => "Rosario", + "Rosarivo" => "Rosarivo", + "Rouge Script" => "Rouge Script", + "Ruda" => "Ruda", + "Rufina" => "Rufina", + "Ruge Boogie" => "Ruge Boogie", + "Ruluko" => "Ruluko", + "Rum Raisin" => "Rum Raisin", + "Ruslan Display" => "Ruslan Display", + "Russo One" => "Russo One", + "Ruthie" => "Ruthie", + "Rye" => "Rye", + "Sacramento" => "Sacramento", + "Sail" => "Sail", + "Salsa" => "Salsa", + "Sanchez" => "Sanchez", + "Sancreek" => "Sancreek", + "Sansita One" => "Sansita One", + "Sarina" => "Sarina", + "Satisfy" => "Satisfy", + "Scada" => "Scada", + "Schoolbell" => "Schoolbell", + "Seaweed Script" => "Seaweed Script", + "Sevillana" => "Sevillana", + "Seymour One" => "Seymour One", + "Shadows Into Light" => "Shadows Into Light", + "Shadows Into Light Two" => "Shadows Into Light Two", + "Shanti" => "Shanti", + "Share" => "Share", + "Share Tech" => "Share Tech", + "Share Tech Mono" => "Share Tech Mono", + "Shojumaru" => "Shojumaru", + "Short Stack" => "Short Stack", + "Siemreap" => "Siemreap", + "Sigmar One" => "Sigmar One", + "Signika" => "Signika", + "Signika Negative" => "Signika Negative", + "Simonetta" => "Simonetta", + "Sintony" => "Sintony", + "Sirin Stencil" => "Sirin Stencil", + "Six Caps" => "Six Caps", + "Skranji" => "Skranji", + "Slackey" => "Slackey", + "Smokum" => "Smokum", + "Smythe" => "Smythe", + "Sniglet" => "Sniglet", + "Snippet" => "Snippet", + "Snowburst One" => "Snowburst One", + "Sofadi One" => "Sofadi One", + "Sofia" => "Sofia", + "Sonsie One" => "Sonsie One", + "Sorts Mill Goudy" => "Sorts Mill Goudy", + "Source Code Pro" => "Source Code Pro", + "Source Sans Pro" => "Source Sans Pro", + "Special Elite" => "Special Elite", + "Spicy Rice" => "Spicy Rice", + "Spinnaker" => "Spinnaker", + "Spirax" => "Spirax", + "Squada One" => "Squada One", + "Stalemate" => "Stalemate", + "Stalinist One" => "Stalinist One", + "Stardos Stencil" => "Stardos Stencil", + "Stint Legacy Condensed" => "Stint Legacy Condensed", + "Stint Legacy Expanded" => "Stint Legacy Expanded", + "Stoke" => "Stoke", + "Strait" => "Strait", + "Sue Ellen Francisco" => "Sue Ellen Francisco", + "Sunshiney" => "Sunshiney", + "Supermercado One" => "Supermercado One", + "Suwannaphum" => "Suwannaphum", + "Swanky and Moo Moo" => "Swanky and Moo Moo", + "Syncopate" => "Syncopate", + "Tangerine" => "Tangerine", + "Taprom" => "Taprom", + "Tauri" => "Tauri", + "Telex" => "Telex", + "Tenor Sans" => "Tenor Sans", + "Text Me One" => "Text Me One", + "The Girl Next Door" => "The Girl Next Door", + "Tienne" => "Tienne", + "Tinos" => "Tinos", + "Titan One" => "Titan One", + "Titillium Web" => "Titillium Web", + "Trade Winds" => "Trade Winds", + "Trocchi" => "Trocchi", + "Trochut" => "Trochut", + "Trykker" => "Trykker", + "Tulpen One" => "Tulpen One", + "Ubuntu" => "Ubuntu", + "Ubuntu Condensed" => "Ubuntu Condensed", + "Ubuntu Mono" => "Ubuntu Mono", + "Legacy" => "Legacy", + "Uncial Antiqua" => "Uncial Antiqua", + "Underdog" => "Underdog", + "Unica One" => "Unica One", + "UnifrakturCook" => "UnifrakturCook", + "UnifrakturMaguntia" => "UnifrakturMaguntia", + "Unkempt" => "Unkempt", + "Unlock" => "Unlock", + "Unna" => "Unna", + "VT323" => "VT323", + "Vampiro One" => "Vampiro One", + "Varela" => "Varela", + "Varela Round" => "Varela Round", + "Vast Shadow" => "Vast Shadow", + "Vibur" => "Vibur", + "Vidaloka" => "Vidaloka", + "Viga" => "Viga", + "Voces" => "Voces", + "Volkhov" => "Volkhov", + "Vollkorn" => "Vollkorn", + "Voltaire" => "Voltaire", + "Waiting for the Sunrise" => "Waiting for the Sunrise", + "Wallpoet" => "Wallpoet", + "Walter Turncoat" => "Walter Turncoat", + "Warnes" => "Warnes", + "Wellfleet" => "Wellfleet", + "Wendy One" => "Wendy One", + "Wire One" => "Wire One", + "Yanone Kaffeesatz" => "Yanone Kaffeesatz", + "Yellowtail" => "Yellowtail", + "Yeseva One" => "Yeseva One", + "Yesteryear" => "Yesteryear", + "Zeyada" => "Zeyada", + ); + + + $more_settings_msg = 'You have chosen an inbuilt theme. One or more setting options in this section are applicable for custom theme only.'; + + + global $legacy_color_list; + + foreach($legacy_color_list as $colorid => $colorname){ + $legacy_color_thumbs[$colorid]['title'] = esc_attr($colorname, 'legacy_framework'); + $legacy_color_thumbs[$colorid]['img'] = ReduxFramework::$_url . '../../images/assets/'.$colorid.'.jpg'; + } + + //plugins_url('/', __FILE__)."../../images/logo.png" + $modbaseurl = plugins_url('/', __FILE__); + $modbaseurl = str_replace("framework/options/","",$modbaseurl); + + + Redux::setSection( $opt_name, array( + 'id' => 'pick-theme', + 'title' => __('Pick Theme', 'legacy_framework'), + 'icon' => 'el-icon-css', + 'fields' => array( + array( + 'id' => 'dynamic-css-type', + 'type' => 'image_select', + 'title' => __('Choose Theme', 'legacy_framework'), + 'desc' => __('Select the default themes inbuilt with the plugin or choose custom theme options defined below.', 'legacy_framework'), + 'options' => $legacy_color_thumbs, + 'default' => 'custom' + ), + + + + array( + 'id' => 'primary-color', + 'type' => 'color', + 'title' => __('Primary Color of theme', 'legacy_framework'), + 'subtitle' => __('Pick primary color for theme.', 'legacy_framework'), + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'default' => '#f45246', + 'validate' => 'color', + ), + ), + ) ); + + Redux::setSection( $opt_name, array( + 'title' => __('Layout', 'legacy_framework'), + 'icon' => 'el-icon-css', + 'fields' => array( + array( + 'id' => 'page-bg', + 'type' => 'background', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Page Background', 'legacy_framework'), + 'subtitle' => __('Background image, color and settings etc. for admin page', 'legacy_framework'), + 'default' => array( + 'background-color' => '#f0f1f2', + ) + ), + array( + 'id' => 'heading-color', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Heading Color', 'legacy_framework'), + 'subtitle' => __('Pick color for headings and titles in the theme.', 'legacy_framework'), + 'default' => '#7d8a9d', + 'validate' => 'color', + ), + array( + 'id' => 'body-text-color', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Body Text Color', 'legacy_framework'), + 'subtitle' => __('Pick color for page text.', 'legacy_framework'), + 'default' => '#7d8a9d', + 'validate' => 'color', + ), + array( + 'id' => 'link-color', + 'type' => 'link_color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Anchor/URL Links Color', 'legacy_framework'), + 'subtitle' => __('Pick colors for different states of URL links', 'legacy_framework'), + 'active' => false, // Disable Active Color + 'default' => array( + 'regular' => '#2a3e4c', + 'hover' => '#f45246', + ) + ), + array( + 'id' => 'opt1-info-field', + 'type' => 'info', + 'desc' => __($more_settings_msg, 'legacy_framework'), + 'required' => array( 'dynamic-css-type', 'not', 'custom' ), + ), + + ), + ) ); + + Redux::setSection( $opt_name, array( + 'title' => __('Typography Fonts', 'legacy_framework'), + 'icon' => 'el-icon-font', + 'fields' => array( + array( + 'id' => 'google_body', + 'type' => 'typography', + 'title' => __('Body Font', 'legacy_framework'), + 'subtitle' => __('Specify the body font properties.', 'legacy_framework'), + 'google' => true, + 'font-backup' => true, // Select a backup non-google font in addition to a google font + 'font-style' => true, // Includes font-style and weight. Can use font-style or font-weight to declare + 'font-size' => true, + 'line-height' => true, + 'text-align' => false, + 'word-spacing' => false, // Defaults to false + 'letter-spacing' => false, // Defaults to false + 'color' => false, + 'default' => array( + 'font-family' => 'Open Sans', + 'font-weight' => '400', + 'font-backup' => "Arial, Helvetica, sans-serif", + 'font-size' => '14px', + 'line-height' => '23px', + ), + ), + array( + 'id' => 'google_nav', + 'type' => 'typography', + 'title' => __('Main Menu Font', 'legacy_framework'), + 'subtitle' => __('Specify the main menu font properties.', 'legacy_framework'), + 'google' => true, + 'font-backup' => true, // Select a backup non-google font in addition to a google font + 'font-style' => true, // Includes font-style and weight. Can use font-style or font-weight to declare + 'font-size' => true, + 'line-height' => true, + 'text-align' => false, + 'word-spacing' => true, // Defaults to false + 'letter-spacing' => true, // Defaults to false + 'color' => false, + 'default' => array( + 'font-family' => 'Roboto Condensed', + 'font-weight' => '300', + 'font-backup' => "Arial, Helvetica, sans-serif", + 'font-size' => '17px', + 'line-height' => '46px', + ), + ), + array( + 'id' => 'google_headings', + 'type' => 'typography', + 'title' => __('Headings Font', 'legacy_framework'), + 'subtitle' => __('Specify the heading font properties.', 'legacy_framework'), + 'google' => true, + 'font-backup' => true, // Select a backup non-google font in addition to a google font + 'font-style' => true, // Includes font-style and weight. Can use font-style or font-weight to declare + 'font-size' => false, + 'line-height' => false, + 'text-align' => false, + 'word-spacing' => true, // Defaults to false + 'letter-spacing' => true, // Defaults to false + 'color' => false, + 'default' => array( + 'font-family' => 'Roboto Condensed', + 'font-weight' => '300', + 'font-backup' => "Arial, Helvetica, sans-serif" + ), + ), + array( + 'id' => 'google_button', + 'type' => 'typography', + 'title' => __('Button Font', 'legacy_framework'), + 'subtitle' => __('Specify the button font properties.', 'legacy_framework'), + 'google' => true, + 'font-backup' => true, // Select a backup non-google font in addition to a google font + 'font-style' => true, // Includes font-style and weight. Can use font-style or font-weight to declare + 'font-size' => true, + 'line-height' => true, + 'text-align' => false, + 'word-spacing' => true, // Defaults to false + 'letter-spacing' => true, // Defaults to false + 'color' => false, + 'default' => array( + 'font-family' => 'Roboto Condensed', + 'font-weight' => '300', + 'font-backup' => "Arial, Helvetica, sans-serif", + 'font-size' => '15px', + 'line-height' => '23px', + ), + ), + + array( + 'id' => 'google_pagehead', + 'type' => 'typography', + 'title' => __('Page Heading Font', 'legacy_framework'), + 'subtitle' => __('Specify the page heading font properties.', 'legacy_framework'), + 'google' => true, + 'font-backup' => true, // Select a backup non-google font in addition to a google font + 'font-style' => true, // Includes font-style and weight. Can use font-style or font-weight to declare + 'font-size' => true, + 'line-height' => true, + 'text-align' => false, + 'word-spacing' => true, // Defaults to false + 'letter-spacing' => true, // Defaults to false + 'color' => false, + 'default' => array( + 'font-family' => 'Roboto Condensed', + 'font-weight' => '400', + 'font-backup' => "Arial, Helvetica, sans-serif", + 'font-size' => '36px', + 'line-height' => '55px', + ), + ), + + + + array( + 'id' => 'submenu-line-height', + 'type' => 'text', + 'title' => __( 'Submenu Line Height', 'legacy_framework' ), + 'subtitle' => __( 'Line height of submenu items in admin menu. Font size will be same as menu item filled above.', 'legacy_framework' ), + 'default' => '40px', + ), + + + + ), + ) ); + + Redux::setSection( $opt_name, array( + 'title' => __('Admin Menu', 'legacy_framework'), + 'icon' => 'el-icon-css', + 'fields' => array( + + /*array( + 'id' => 'enable-allusers-legacyadmin', + 'type' => 'switch', + 'title' => __('Enable Legacy Admin Panel for users', 'legacy_framework'), + 'desc' => __('Check ON to show Legacy Admin Settings Panel to all Users, OFF to show only to Admin User.', 'legacy_framework'), + 'default' => '0'// 1 = on | 0 = off + ),*/ + + + array( + 'id' => 'menu-bg', + 'type' => 'background', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Menu Background', 'legacy_framework'), + 'subtitle' => __('Background image, color and settings etc. for Admin Menu', 'legacy_framework'), + 'default' => array( + 'background-color' => '#2a3e4c', + ) + ), + array( + 'id' => 'menu-color', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Menu Text Color', 'legacy_framework'), + 'subtitle' => __('Pick link/text color for admin menu.', 'legacy_framework'), + 'default' => '#ffffff', + 'validate' => 'color', + ), + array( + 'id' => 'menu-hover-color', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Menu Hover Text Color', 'legacy_framework'), + 'subtitle' => __('Pick link/text color for admin menu on hover.', 'legacy_framework'), + 'default' => '#ffffff', + 'validate' => 'color', + ), + array( + 'id' => 'submenu-color', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('SubMenu Text Color', 'legacy_framework'), + 'subtitle' => __('Pick link/text color for admin submenu.', 'legacy_framework'), + 'default' => '#aeb2b7', + 'validate' => 'color', + ), + array( + 'id' => 'menu-primary-bg', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Menu Primary Background Color', 'legacy_framework'), + 'subtitle' => __('Pick background color for admin menu. It is the hover or default background color of Menu link', 'legacy_framework'), + 'default' => '#f45246', + 'validate' => 'color', + ), + array( + 'id' => 'menu-secondary-bg', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Menu Secondary Background Color', 'legacy_framework'), + 'subtitle' => __('Pick background color for admin submenu. It is the hover or default background color of Submenu link', 'legacy_framework'), + 'default' => '#141c22', + 'validate' => 'color', + ), + + array( + 'id' => 'menu-icon-line-bg', + 'type' => 'background', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Menu Icon Connection Line Background', 'legacy_framework'), + 'subtitle' => __('Color of icons connecting Line in admin menu', 'legacy_framework'), + 'default' => array( + 'background-color' => '#aeb2b7', + ) + ), + array( + 'id' => 'menu-icon-color', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Menu Icon Color', 'legacy_framework'), + 'subtitle' => __('Pick icon color for admin menu.', 'legacy_framework'), + 'default' => '#aeb2b7', + 'validate' => 'color', + ), + array( + 'id' => 'menu-icon-bg', + 'type' => 'background', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Menu Icon Background', 'legacy_framework'), + 'subtitle' => __('Background color Admin Menu icons', 'legacy_framework'), + 'default' => array( + 'background-color' => '#2a3e4c', + ) + ), + + array( + 'id' => 'menu-active-icon-color', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Active Menu Icon Color', 'legacy_framework'), + 'subtitle' => __('Pick icon color for active state or hover state of admin menu item.', 'legacy_framework'), + 'default' => '#f45246', + 'validate' => 'color', + ), + array( + 'id' => 'menu-active-icon-bg', + 'type' => 'background', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Active Menu Icon Background', 'legacy_framework'), + 'subtitle' => __('Icon background color for active state or hover state of admin menu item', 'legacy_framework'), + 'default' => array( + 'background-color' => '#f0f1f2', + ) + ), + array( + 'id' => 'submenu-active-icon-bg', + 'type' => 'background', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Active SubMenu Icon Background', 'legacy_framework'), + 'subtitle' => __('Icon background color for active state or hover state of admin submenu item', 'legacy_framework'), + 'default' => array( + 'background-color' => '#f45246', + ) + ), + + + array( + 'id' => 'menu-transform-text', + 'type' => 'select', + 'title' => __('Menu Text transform', 'legacy_framework'), + 'subtitle' => __('Pick to convert menu item to uppercase, lowercase, capitalize each word or use original.', 'legacy_framework'), + "default" => "uppercase", + "options" => array('uppercase' => 'Uppercase','lowercase' =>'Lowercase','capitalize' => 'Capitalize', 'none' => 'Use Original') + ), + array( + 'id' => 'opt2-info-field', + 'type' => 'info', + 'desc' => __($more_settings_msg, 'legacy_framework'), + 'required' => array( 'dynamic-css-type', 'not', 'custom' ), + ), + + ), + ) ); + + Redux::setSection( $opt_name, array( + 'title' => __('Logo Settings', 'legacy_framework'), + 'icon' => 'el-icon-star', + // 'submenu' => false, // Setting submenu to false on a given section will hide it from the WordPress sidebar menu! + 'fields' => array( + array( + 'id' => 'enable-logo', + 'type' => 'switch', + 'title' => __('Show Logo', 'legacy_framework'), + 'desc' => __('Check ON to show logo in menu and favicon, OFF to disable.', 'legacy_framework'), + 'default' => '1'// 1 = on | 0 = off + ), + + array( + 'id' => 'logo-url', + 'type' => 'text', + 'title' => __( 'Logo URL', 'legacy_framework' ), + 'subtitle' => __( 'On clicking logo, user will be redirected to this mentioned url.', 'legacy_framework' ), + 'validate' => 'url', + 'default' => '', + // 'text_hint' => array( + // 'title' => '', + // 'content' => 'Please enter a valid URL in this field.' + // ) + ), + + array( + 'id' => 'logo-bg', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Logo Background', 'legacy_framework'), + 'subtitle' => __('Background image, color and settings etc. for logo in Admin Menu', 'legacy_framework'), + 'default' => '#2a3e4c', + 'validate' => 'color', + ), + + array( + 'id' => 'logo', + 'type' => 'media', + 'url' => true, + 'readonly' => false, + //'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Logo', 'legacy_framework'), + 'subtitle' => __('Upload your own logo of 230px (width) * 69px (height)', 'legacy_framework'), + 'default' => array('url' => $modbaseurl."images/logo.png") + ), + array( + 'id' => 'logo_folded', + 'type' => 'media', + 'url' => true, + 'readonly' => false, + //'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Collapsed Menu Logo', 'legacy_framework'), + 'subtitle' => __('Upload your own logo of 46px (width) * 69px (height)', 'legacy_framework'), + 'default' => array('url' => $modbaseurl."images/logo-folded.png") + ), + + + array( + 'id' => 'login-logo', + 'type' => 'media', + 'url' => true, + 'readonly' => false, + 'title' => __('Login Page Logo', 'legacy_framework'), + 'subtitle' => __('Upload your login page logo.', 'legacy_framework'), + 'default' => array('url' => $modbaseurl."images/login-logo.png") + ), + + array( + 'id' => 'favicon', + 'type' => 'media', + 'url' => true, + 'readonly' => false, + 'compiler' => 'true', + 'title' => __('Favicon', 'legacy_framework'), + 'subtitle' => __('image that will be used as favicon (16px x 16px).', 'legacy_framework'), + 'default' => array('url' => $modbaseurl."images/favicon.png") + ), + array( + 'id' => 'iphone_icon', + 'type' => 'media', + 'readonly' => false, + 'url' => true, + 'compiler' => 'true', + 'title' => __('Apple Iphone Icon', 'legacy_framework'), + 'subtitle' => __('Apple Iphone Icon (57px x 57px).', 'legacy_framework'), + 'default' => array('url' => $modbaseurl."images/apple-touch-icon-57-precomposed.png") + ), + array( + 'id' => 'iphone_icon_retina', + 'type' => 'media', + 'url' => true, + 'readonly' => false, + 'compiler' => 'true', + 'title' => __('Apple Iphone Retina Icon', 'legacy_framework'), + 'subtitle' => __('Apple Iphone Retina Icon (114px x 114px).', 'legacy_framework'), + 'default' => array('url' => $modbaseurl."images/apple-touch-icon-114-precomposed.png") + ), + array( + 'id' => 'ipad_icon', + 'type' => 'media', + 'url' => true, + 'readonly' => false, + 'compiler' => 'true', + 'title' => __('Apple iPad Icon', 'legacy_framework'), + 'subtitle' => __('Apple Iphone Retina Icon (72px x 72px).', 'legacy_framework'), + 'default' => array('url' => $modbaseurl."images/apple-touch-icon-72-precomposed.png") + ), + array( + 'id' => 'ipad_icon_retina', + 'type' => 'media', + 'url' => true, + 'readonly' => false, + 'compiler' => 'true', + 'title' => __('Apple iPad Retina Icon', 'legacy_framework'), + 'subtitle' => __('Apple iPad Retina Icon (144px x 144px).', 'legacy_framework'), + 'default' => array('url' => $modbaseurl."images/apple-touch-icon-144-precomposed.png") + ), + ), + ) ); + + Redux::setSection( $opt_name, array( + 'title' => __('Content Box', 'legacy_framework'), + 'icon' => 'el-icon-css', + 'fields' => array( + + array( + 'id' => 'box-bg', + 'type' => 'background', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Content Box Background', 'legacy_framework'), + 'subtitle' => __('Background image, color and settings etc. for Content Boxes. Eg: Welcome box on dashboard', 'legacy_framework'), + 'default' => array( + 'background-color' => '#ffffff', + ) + ), + array( + 'id' => 'box-head-bg', + 'type' => 'background', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Content Box Header Background', 'legacy_framework'), + 'subtitle' => __('Background image, color and settings etc. for Content Box Header area. Eg: Welcome box on dashboard', 'legacy_framework'), + 'default' => array( + 'background-color' => '#64ca92', + ) + ), + + array( + 'id' => 'box-head-color', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Box Head Text Color', 'legacy_framework'), + 'subtitle' => __('Pick text color for content box header area.', 'legacy_framework'), + 'default' => '#ffffff', + 'validate' => 'color', + ), + array( + 'id' => 'opt3-info-field', + 'type' => 'info', + 'desc' => __($more_settings_msg, 'legacy_framework'), + 'required' => array( 'dynamic-css-type', 'not', 'custom' ), + ), + ), + ) ); + + Redux::setSection( $opt_name, array( + 'title' => __('Button', 'legacy_framework'), + 'icon' => 'el-icon-css', + 'fields' => array( + array( + 'id' => 'button-primary-bg', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Primary Button Background Color', 'legacy_framework'), + 'subtitle' => __('Pick background color for primary button', 'legacy_framework'), + 'default' => '#f45246', + 'validate' => 'color', + ), + array( + 'id' => 'button-primary-hover-bg', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Primary Button Hover Background Color', 'legacy_framework'), + 'subtitle' => __('Pick hover background color for primary button', 'legacy_framework'), + 'default' => '#18b3dc', + 'validate' => 'color', + ), + array( + 'id' => 'button-secondary-bg', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Secondary Button Background Color', 'legacy_framework'), + 'subtitle' => __('Pick background color for secondary button', 'legacy_framework'), + 'default' => '#a9a9a9', + 'validate' => 'color', + ), + array( + 'id' => 'button-secondary-hover-bg', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Secondary Button Hover Background Color', 'legacy_framework'), + 'subtitle' => __('Pick hover background color for secondary button', 'legacy_framework'), + 'default' => '#999999', + 'validate' => 'color', + ), + array( + 'id' => 'button-text-color', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Button Text Color', 'legacy_framework'), + 'subtitle' => __('Pick text color for a button.', 'legacy_framework'), + 'default' => '#ffffff', + 'validate' => 'color', + ), + array( + 'id' => 'opt4-info-field', + 'type' => 'info', + 'desc' => __($more_settings_msg, 'legacy_framework'), + 'required' => array( 'dynamic-css-type', 'not', 'custom' ), + ), + + ), + ) ); + + Redux::setSection( $opt_name, array( + 'title' => __('Form', 'legacy_framework'), + 'icon' => 'el-icon-css', + 'fields' => array( + + array( + 'id' => 'form-bg', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'type' => 'color', + 'title' => __('Form Elements Background Color', 'legacy_framework'), + 'subtitle' => __('Pick background color for form elements', 'legacy_framework'), + 'default' => '#ffffff', + 'validate' => 'color', + ), + + array( + 'id' => 'form-text-color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'type' => 'color', + 'title' => __('Form Elements Text Color', 'legacy_framework'), + 'subtitle' => __('Pick text color for form elements', 'legacy_framework'), + 'default' => '#7d8a9d', + 'validate' => 'color', + ), + + array( + 'id' => 'form-border-color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'type' => 'color', + 'title' => __('Form Elements Border Color', 'legacy_framework'), + 'subtitle' => __('Pick border color for form elements.', 'legacy_framework'), + 'default' => '#e2e2e4', + 'validate' => 'color', + ), + array( + 'id' => 'opt5-info-field', + 'type' => 'info', + 'desc' => __($more_settings_msg, 'legacy_framework'), + 'required' => array( 'dynamic-css-type', 'not', 'custom' ), + ), + + ), + ) ); + + Redux::setSection( $opt_name, array( + 'title' => __('Login Page', 'legacy_framework'), + 'icon' => 'el-icon-css', + 'fields' => array( + + /*array( + 'id' => 'enable-login', + 'type' => 'switch', + 'title' => __('Enable Custom Login Screen', 'legacy_framework'), + 'desc' => __('Check ON to show custom login screen. OFF for default WordPress Login Page.', 'legacy_framework'), + 'default' => '1'// 1 = on | 0 = off + ),*/ + + + array( + 'id' => 'login-background', + 'tiles' => true, + //'required' => array('dynamic-css-type', 'equals', 'custom'), + 'type' => 'background', + 'title' => __('Login Page Background', 'legacy_framework'), + 'subtitle' => __('Background image, color and settings etc. for login page (Eg: http://www.yourdomain.com/wp-login.php)', 'legacy_framework'), + 'preview' => false, + 'preview_media' => true, + 'default' => array( + 'background-color' => '#a1a4a6', + 'background-position' => 'center center', + 'background-image' => $modbaseurl."images/login-bg.png", + ) + ), + + array( + 'id' => 'login-form-background', + 'type' => 'color_gradient', + 'title' => __( 'Header Gradient Color Option', 'legacy_framework' ), + 'subtitle' => __( 'Only color validation can be done on this field type', 'legacy_framework' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'legacy_framework' ), + 'default' => array( + 'from' => '#181845', + 'to' => '#000000' + ) + ), + + /* + array( + 'id' => 'login-form-background', + 'tiles' => true, + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'type' => 'background', + 'title' => __('Login Form Box Background', 'legacy_framework'), + 'subtitle' => __('Background image, color and settings etc. for login form box', 'legacy_framework'), + 'preview' => false, + 'preview_media' => true, + 'default' => array( + 'background-color' => 'transparent', + ) + ), + */ + array( + 'id' => 'login-text-color', + 'type' => 'color', + //'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Login Page Text color', 'legacy_framework'), + 'subtitle' => __('Pick color for login page text.', 'legacy_framework'), + 'validate' => 'color', + 'default' => '#9a9a9a', + ), + + array( + 'id' => 'login-link-color', + 'type' => 'link_color', + // 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Login Page Anchor/URL Links Color', 'legacy_framework'), + 'subtitle' => __('Pick colors for different states of login page links', 'legacy_framework'), + //'regular' => false, // Disable Regular Color + //'hover' => false, // Disable Hover Color + 'active' => false, // Disable Active Color + //'visited' => true, // Enable Visited Color + 'default' => array( + 'regular' => '#9a9a9a', + 'hover' => '#aaaaaa', + ) + ), + + array( + 'id' => 'login-input-text-color', + 'type' => 'color', + // 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Login Input Fields Text color', 'legacy_framework'), + 'subtitle' => __('Pick text color for login page input fields.', 'legacy_framework'), + 'validate' => 'color', + 'default' => '#f5f5f5', + ), + + array( + 'id' => 'login-input-bg-color', + 'type' => 'color', + // 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Login Input Fields background color', 'legacy_framework'), + 'subtitle' => __('Pick background color for login page input fields.', 'legacy_framework'), + 'validate' => 'color', + 'default' => 'transparent', + ), + array( + 'id' => 'login-input-bg-opacity', + 'type' => 'text', + 'title' => __('Login Input Fields background Opacity', 'legacy_framework'), + 'subtitle' => __('Define opacity in range from 0.1 to 1.0. Eg: 0.8', 'legacy_framework'), + 'default' => '0.5', + ), + array( + 'id' => 'login-input-bg-hover-opacity', + 'type' => 'text', + 'title' => __('Login Input Fields Focus/Hover background Opacity', 'legacy_framework'), + 'subtitle' => __('Define opacity in range from 0.1 to 1.0. Eg: 0.8', 'legacy_framework'), + 'default' => '0.8', + ), + + array( + 'id' => 'login-input-border-color', + 'type' => 'color', + // 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Login Input Fields bottom border color', 'legacy_framework'), + 'subtitle' => __('Pick bottom border color for login page input fields.', 'legacy_framework'), + 'validate' => 'color', + 'default' => '#8b8c91', + ), + + + + array( + 'id' => 'login-button-bg', + 'type' => 'color', + // 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Login Button Background Color', 'legacy_framework'), + 'subtitle' => __('Pick background color for login button', 'legacy_framework'), + 'default' => '#f45246', + 'validate' => 'color', + ), + array( + 'id' => 'login-button-hover-bg', + 'type' => 'color', + // 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Login Button Hover Background Color', 'legacy_framework'), + 'subtitle' => __('Pick hover background color for login button', 'legacy_framework'), + 'default' => '#18b3dc', + 'validate' => 'color', + ), + + array( + 'id' => 'login-button-text-color', + 'type' => 'color', + // 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Login button Text Color', 'legacy_framework'), + 'subtitle' => __('Pick text color for a login button.', 'legacy_framework'), + 'default' => '#ffffff', + 'validate' => 'color', + ), + + + array("title" => "Back to main site Link", + "desc" => "Select to show or hide back to main site link on login page.", + "id" => "backtosite_login_link", + "default" => '0', + "type" => "switch"), + + array("title" => "Forgot Password Link", + "desc" => "Select to show or hide Forgot Password link on login page.", + "id" => "forgot_login_link", + "default" => '1', + "type" => "switch"), + + array( + 'id' => 'login-logo-title', + 'type' => 'text', + 'title' => __('Login Logo Title', 'legacy_framework'), + 'subtitle' => __('The title tooltip shown on login logo when mouse is taken over it.', 'legacy_framework'), + 'default' => 'Legacy - White Lable WordPress Admin Theme', + ), + + + /*array( + 'id' => 'opt6-info-field', + 'type' => 'info', + 'desc' => __($more_settings_msg, 'legacy_framework'), + 'required' => array( 'dynamic-css-type', 'not', 'custom' ), + ),*/ + ), + ) ); + + Redux::setSection( $opt_name, array( + 'title' => __('Admin Top Bar', 'legacy_framework'), + 'icon' => 'el-icon-css', + 'fields' => array( + + array( + 'id' => 'enable-topbar', + 'type' => 'switch', + 'title' => __('Enable Admin Top Bar in admin panel', 'legacy_framework'), + 'desc' => __('Check ON to show admin panel top bar in the menu, OFF to hide.', 'legacy_framework'), + 'default' => '1'// 1 = on | 0 = off + ), + + array( + 'id' => 'enable-topbar-wp', + 'type' => 'switch', + 'title' => __('Enable Top Bar on front End (on website)', 'legacy_framework'), + 'desc' => __('Check ON to show admin panel top bar on the website for logged in users, OFF to hide.', 'legacy_framework'), + 'default' => '1'// 1 = on | 0 = off + ), + + // array("title" => "Admin Top Bar Style", + // "desc" => "Select the default style to display the top bar menu.", + // "id" => "topbar-style", + // "default" => "style2", + // "type" => "select", + // "options" => array('style1' => '100% Width Style','style2' =>'Besides Main Menu'), + // ), + + array( + 'id' => 'topbar-menu-color', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Top Bar Menu Text Color', 'legacy_framework'), + 'subtitle' => __('Pick link/text color for top bar menu.', 'legacy_framework'), + 'default' => '#ffffff', + 'validate' => 'color', + ), + + + array( + 'id' => 'topbar-menu-bg', + 'type' => 'background', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Top Bar Menu Background', 'legacy_framework'), + 'subtitle' => __('Background image, color and settings etc. for top bar Menu', 'legacy_framework'), + 'default' => array( + 'background-color' => '#18b3dc', + ) + ), + + array( + 'id' => 'topbar-submenu-color', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Top Bar SubMenu Text Color', 'legacy_framework'), + 'subtitle' => __('Pick link/text color for top bar submenu.', 'legacy_framework'), + 'default' => '#aeb2b7', + 'validate' => 'color', + ), + array( + 'id' => 'topbar-submenu-bg', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Top Bar SubMenu Primary Background Color', 'legacy_framework'), + 'subtitle' => __('Pick background color for top bar menu. It is the hover or default background color of Menu link', 'legacy_framework'), + 'default' => '#2a3e4c', + 'validate' => 'color', + ), + + + array( + 'id' => 'topbar-submenu-hover-bg', + 'type' => 'color', + 'required' => array('dynamic-css-type', 'equals', 'custom'), + 'title' => __('Top Bar SubMenu Secondary Background Color', 'legacy_framework'), + 'subtitle' => __('Pick background color for top bar submenu. It is the hover or default background color of Submenu link', 'legacy_framework'), + 'default' => '#141c22', + 'validate' => 'color', + ), + + array( + 'id' => 'enable-topbar-links-wp', + 'type' => 'switch', + 'title' => __('Top Bar WordPress Menu', 'legacy_framework'), + 'desc' => __('Check ON to show top bar wordpress menu and submenu links, OFF to hide.', 'legacy_framework'), + 'default' => '1'// 1 = on | 0 = off + ), + + + array( + 'id' => 'enable-topbar-links-site', + 'type' => 'switch', + 'title' => __('Top Bar Site Menu', 'legacy_framework'), + 'desc' => __('Check ON to show top bar site menu and submenu links, OFF to hide.', 'legacy_framework'), + 'default' => '1'// 1 = on | 0 = off + ), + + array( + 'id' => 'enable-topbar-links-comments', + 'type' => 'switch', + 'title' => __('Top Bar Comments link', 'legacy_framework'), + 'desc' => __('Check ON to show top bar comments link, OFF to hide.', 'legacy_framework'), + 'default' => '1'// 1 = on | 0 = off + ), + + array( + 'id' => 'enable-topbar-links-new', + 'type' => 'switch', + 'title' => __('Top Bar Add New Menu', 'legacy_framework'), + 'desc' => __('Check ON to show top bar add new menu and submenu links, OFF to hide.', 'legacy_framework'), + 'default' => '1'// 1 = on | 0 = off + ), + + array( + 'id' => 'enable-topbar-links-legacyadmin', + 'type' => 'switch', + 'title' => __('Top Bar Legacy Admin Menu', 'legacy_framework'), + 'desc' => __('Check ON to show top bar Legacy Admin menu and submenu links, OFF to hide.', 'legacy_framework'), + 'default' => '1'// 1 = on | 0 = off + ), + + array( + 'id' => 'enable-topbar-myaccount', + 'type' => 'switch', + 'title' => __('Top Bar My Account', 'legacy_framework'), + 'desc' => __('Check ON to show top bar My Account Menu, OFF to hide.', 'legacy_framework'), + 'default' => '1'// 1 = on | 0 = off + ), + + + array( + 'id' => 'enable-topbar-directlogout', + 'type' => 'switch', + 'title' => __('Direct Logout Link', 'legacy_framework'), + 'desc' => __('Check ON to show logout link in the top bar besides user account menu, OFF to hide.', 'legacy_framework'), + 'default' => '0'// 1 = on | 0 = off + ), + + array( + 'id' => 'topbar-removeids', + 'type' => 'text', + 'title' => __('Remove Top bar Link Node ids', 'legacy_framework'), + 'desc' => __('Enter node ids of link top bar to remove. Separate by comma(,) Eg: new-content,comments', 'legacy_framework'), + 'default' => '', + ), + + array( + 'id' => 'myaccount_greet', + 'type' => 'text', + 'title' => __('Greet User with', 'legacy_framework'), + 'desc' => __('Enter the greeting word for logged in user. Default is Howdy. Eg: Welcome ', 'legacy_framework'), + 'default' => 'Howdy', + ), + + + + array( + 'id' => 'opt7-info-field', + 'type' => 'info', + 'desc' => __($more_settings_msg, 'legacy_framework'), + 'required' => array( 'dynamic-css-type', 'not', 'custom' ), + ), + + ), + ) ); + + Redux::setSection( $opt_name, array( + 'title' => __('Page Loader', 'legacy_framework'), + 'icon' => 'el-icon-css', + 'fields' => array( + + array( + 'id' => 'enable-pageloader', + 'type' => 'switch', + 'title' => __('Enable Page Loading Top Bar', 'legacy_framework'), + 'desc' => __('Check ON to enable progress bar on top, OFF to disable.', 'legacy_framework'), + 'default' => '1'// 1 = on | 0 = off + ), + + + ), + ) ); + + + Redux::setSection( $opt_name, array( + 'title' => __('Email Settings', 'legacy_framework'), + 'icon' => 'el-icon-css', + 'fields' => array( + + array( + 'id' => 'from-mail-email', + 'type' => 'text', + 'title' => __('From Mail Email Address', 'legacy_framework'), + 'desc' => __('Change the from email address used in an email sent using the wp_mail function. (Default is wordpress@domain.com). Change it to your personal brand or domain name. To avoid being marked as spam make sure the email is from the same domain as your website.', 'legacy_framework'), + 'default' => '', + ), + + array( + 'id' => 'from-mail-name', + 'type' => 'text', + 'title' => __('From Mail Name', 'legacy_framework'), + 'desc' => __('Change the from name used in an email sent using the wp_mail function. (Default is Wordpress). Change it to your personal brand or domain name.', 'legacy_framework'), + 'default' => '', + ), + + + + ), +) ); + + + Redux::setSection( $opt_name, array( + 'title' => __('Extra Settings', 'legacy_framework'), + 'icon' => 'el-icon-css', + 'fields' => array( + + array("title" => "Footer Text", + "desc" => "Enter the text that displays in the footer bar. HTML markup can be used.", + "id" => "footer_text", + "default" => 'Thank you for creating with WordPress and Legacy White Label WordPress Admin Theme', + "type" => "editor"), + + array("title" => "Footer Version", + "desc" => "Select to show WordPress version info in footer area or not.", + "id" => "footer_version", + "default" => '1', + "type" => "switch"), + + + array("title" => "Screen Option Tab", + "desc" => "Select to show screen option tab in top right corner of admin screen", + "id" => "screen_option_tab", + "default" => '1', + "type" => "switch"), + + array("title" => "Screen Help Tab", + "desc" => "Select to show screen help tab in top right corner of admin screen", + "id" => "screen_help_tab", + "default" => '1', + "type" => "switch"), + + + array( + 'id' => 'custom-css', + 'type' => 'ace_editor', + 'title' => __( 'Custom CSS Code', 'legacy_framework' ), + 'subtitle' => __( 'Paste your CSS code here. This code will be applied in all your admin panel', 'legacy_framework' ), + 'mode' => 'css', + 'theme' => 'monokai', + 'desc' => 'In case if you need to overwrite any CSS setting, you can add !important at the end of CSS property. eg: color: #da2234 !important; +
    +You can use dynamic css variables in custom css code. +
    +Eg:
    +.css-selector{
    +    background: var(--tp-primary-color);
    +    border-color: var(--tp-primary-color);
    +}
    +
    +Following is the list of defined css variables based on your settings configured. +
    +:root {
    +  --tp-primary-color: #f45246;
    +  --tp-page-bg-background-color: #f0f1f2;
    +  --tp-heading-color: #7d8a9d;
    +  --tp-body-text-color: #7d8a9d;
    +  --tp-link-color-regular: #2a3e4c;
    +  --tp-link-color-hover: #f45246;
    +  --tp-menu-bg-background-color: #2a3e4c;
    +  --tp-menu-color: #ffffff;
    +  --tp-menu-hover-color: #ffffff;
    +  --tp-submenu-color: #aeb2b7;
    +  --tp-menu-primary-bg: #f45246;
    +  --tp-menu-secondary-bg: #141c22;
    +  --tp-box-bg-background-color: #ffffff;
    +  --tp-box-head-bg-background-color: #64ca92;
    +  --tp-box-head-color: #ffffff;
    +  --tp-button-primary-bg: #f45246;
    +  --tp-button-primary-hover-bg: #18b3dc;
    +  --tp-button-secondary-bg: #a9a9a9;
    +  --tp-button-secondary-hover-bg: #999999;
    +  --tp-button-text-color: #ffffff;
    +  --tp-form-bg: #ffffff;
    +  --tp-form-text-color: #7d8a9d;
    +  --tp-form-border-color: #e2e2e4;
    +  --tp-logo-bg: #2a3e4c;
    +  --tp-topbar-menu-color: #ffffff;
    +  --tp-topbar-menu-bg-background-color: #18b3dc;
    +  --tp-topbar-submenu-color: #aeb2b7;
    +  --tp-topbar-submenu-bg: #2a3e4c;
    +  --tp-topbar-submenu-hover-bg: #141c22;
    +}
    +
    + ', + 'default' => "" + ), + + array( + 'id' => 'custom-login-css', + 'type' => 'ace_editor', + 'title' => __( 'Custom Login Page CSS Code', 'legacy_framework' ), + 'subtitle' => __( 'Paste your CSS code here. This code will be applied on your admin login page.', 'legacy_framework' ), + 'mode' => 'css', + 'theme' => 'monokai', + 'desc' => 'In case if you need to overwrite any CSS setting, you can add !important at the end of CSS property. eg: color: #da2234 !important; ', + 'default' => "" + ), + + ), + ) ); + + /* + * <--- END SECTIONS + */ + + /** + * Custom function for the callback validation referenced above + * */ + if ( ! function_exists( 'redux_validate_callback_function' ) ) { + function redux_validate_callback_function( $field, $value, $existing_value ) { + $error = false; + $warning = false; + + //do your validation + if ( $value == 1 ) { + $error = true; + $value = $existing_value; + } elseif ( $value == 2 ) { + $warning = true; + $value = $existing_value; + } + + $return['value'] = $value; + + if ( $error == true ) { + $return['error'] = $field; + $field['msg'] = 'your custom error message'; + } + + if ( $warning == true ) { + $return['warning'] = $field; + $field['msg'] = 'your custom warning message'; + } + + return $return; + } + } + + /** + * Custom function for the callback referenced above + */ + if ( ! function_exists( 'redux_my_custom_field' ) ) { + function redux_my_custom_field( $field, $value ) { + print_r( $field ); + echo '
    '; + print_r( $value ); + } + } + + /** + * Custom function for filtering the sections array. Good for child themes to override or add to the sections. + * Simply include this function in the child themes functions.php file. + * NOTE: the defined constants for URLs, and directories will NOT be available at this point in a child theme, + * so you must use get_template_directory_uri() if you want to use any of the built in icons + * */ + function dynamic_section_delete_legacy_conflict( $sections ) { + //$sections = array(); + $sections[] = array( + 'title' => __( 'Section via hook', 'legacy_framework' ), + 'desc' => __( '

    This is a section created by adding a filter to the sections array. Can be used by child themes to add/remove sections from the options.

    ', 'legacy_framework' ), + 'icon' => 'el el-paper-clip', + // Leave this as a blank section, no options just some intro text set above. + 'fields' => array() + ); + + return $sections; + } + + /** + * Filter hook for filtering the args. Good for child themes to override or add to the args array. Can also be used in other functions. + * */ + function change_arguments_delete_legacy_conflict( $args ) { + //$args['dev_mode'] = true; + + return $args; + } + + /** + * Filter hook for filtering the default value of any given field. Very useful in development mode. + * */ + function change_defaults_delete_legacy_conflict( $defaults ) { + $defaults['str_replace'] = 'Testing filter hook!'; + + return $defaults; + } + + // Remove the demo link and the notice of integrated demo from the legacy_framework plugin + function remove_demo_delete_legacy_conflict() { + + // Used to hide the demo mode link from the plugin page. Only used when Redux is a plugin. + if ( class_exists( 'ReduxFrameworkPlugin' ) ) { + remove_filter( 'plugin_row_meta', array( + ReduxFrameworkPlugin::instance(), + 'plugin_metalinks' + ), null, 2 ); + + // Used to hide the activation notice informing users of the demo panel. Only used when Redux is a plugin. + remove_action( 'admin_notices', array( ReduxFrameworkPlugin::instance(), 'admin_notices' ) ); + } + } diff --git a/plugins/legacy-admin/images/apple-touch-icon-114-precomposed.png b/plugins/legacy-admin/images/apple-touch-icon-114-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..3699a04b7bfbd2e881c06c7c4bfd116a40c240ce GIT binary patch literal 790 zcmV+x1L^#UP)P)t-s^ioFk zVpsH1M)Xof^ioFu|NsB_`2YR={`2$x?(F!HiT8bU_lAD>i-Y-@lJ|mo_H$|XcWw1p zP4;YJ{^a8P%g6oI)BCuy`lq47bCWs%000DZQchFx{`llc5d>BM00MSNL_t(&-tF7r zj+-zL1Yo$@4gnGqUm$t^CoOGHosx|;GG0@u_5Ka=m)#M@+$qhs=Ga=n4|8yRG>tj9 zno9nxN>;Lx;Lxs_XeS`q9`HA-!8dNSzV#Mt2uX=#gnkvlK9$|vi6Rll7MUKDCsRfxoRg{0}5#=s7CDL~mb?QS* z?1q5Bs!i3p(L}`?veXxmBkDXEC319|u%bPlZw91dju2&z24vYB(W4USnTQ;fNS~0S z4ml*`2(tX$fgbZo?~-x^nJ>zzUajmA;auqagFA%5&r-7k5k* zWcgi=lleJfs)Q_X>L6sP`!S#V+?k^!+qsV-%b%HqN761AC&LoGsJ+|!=JfqcICaFy zcKPwe{M#Py$OR_99|;*|tno&aCVyHH@=KI`ezm`rm@V1m2-z;;V)Te_zA+!RPtFnK zFk6({^cn8am4@^jLAKXZ%nVOU)=J9}SzcTu2&^XZBsntDcw&k?$y6CB-<>>}8WlN- z4Vjx$PL3c&pDa(FBPUbxoN}fLQsz05>5(0PlQPeaVzzi*!^Bk8NSL@wqzN&fM4osHkS21>C($Q*d^Jz@JQ#h_ z^j-9w^9fOvH1TBv5qFbQoSgP~|HeOtD_O}+RkD(mBv(|jlK(w<{Es{S!cSPf1CS=# Uy1D4q*Z=?k07*qoM6N<$f@wF3O8@`> literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/apple-touch-icon-144-precomposed.png b/plugins/legacy-admin/images/apple-touch-icon-144-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..2e9dd4f3f56b6741f38e3d52a05c9373a5d7eca5 GIT binary patch literal 507 zcmeAS@N?(olHy`uVBq!ia0vp^6F``S8Ays|{O<-*Dgizru3v)O{{R2~bMCZXD;NJ< zGVj;A6~DHu|Fv=T?>*bUM*IKhYWh~3wbsdZ3j+h=Bu^K|kc@k8uNh`BB?=t<$iGO< z@ahgO#i=_R?v=grrOTn{hP^EqM|{BrlY z%lGf)GTCCrxA^kG-5k62@YBF<%8WkkL-Fq?$`V<;?SLWI?UOXY?~$vzp+{9APmm|iBrv+<$#Th)2S`rx^gjlSuSg+`Ox55t)}6mb!p^C}-uOfTh$hIWOpubY;%wnJ;aTtc lD)Ic`bt#~5oc1@oUbB6&PS5@fLttz&c)I$ztaD0e0ss$2&(#0` literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/apple-touch-icon-57-precomposed.png b/plugins/legacy-admin/images/apple-touch-icon-57-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..5bbec3659f5e412ec1e970c3753e503d77777a5e GIT binary patch literal 553 zcmV+^0@nSBP)_(Lo|yTXllYK`{odU5SWW-= z`Tg40_G@7IqMP`OgZ|{=_jYak&C2}A#`>$J`@FaJfOq<}uW}%Ab^rhX26R$RQ{L;` z$>HOb3|4^v00DJLL_t(Y$L*Kfa)TfchA~N@;3=RrB$~eeV>Wel{tZ(G%3Y`NDr@{^ z{}0!bI98%$tB#_QWm_c^i_ap>1N=s}j%(rGGDtJ5#}1x>@9il~YU)^1*bf5x3{OkopvjTI25Xy&dVcCS z$uw!UsG2+WlE?zbG--ZtbPeV<>8Jxokm;xxfL?-3MdgmFk!fDWeZ2Cm?6OYW}hoS3;v8 zrQO%9+wL3Gl?20)3sm)?ux(^HA(I#rw0l!PNM6@O9XaJ=2Nht+vASHF-gjK&?v@p`->;9 r;f4OI?+GumfGmHHFaLHZ|6ch5GFwr}2%qPH00000NkvXXu0mjfIlmV3 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/apple-touch-icon-72-precomposed.png b/plugins/legacy-admin/images/apple-touch-icon-72-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..bc9933d1529445beb6d0244bfbd97591ed6e27f7 GIT binary patch literal 569 zcmV-90>=G`P)AK61oB%00004bW%=J=JM&%5vC-a0004;Nkl9SGw)Dr`l>cwVPu9`7?nK`IQ&F*=2!piSiu1;CLopYeYJXo%;l`rYP$7!srXV9MWasSN~Qp--QPtf#cVJ2G_!kpriu`ju>i! zQ-?xuTG43MkTZtD17S=0sluRuC6EnH9||4%5kQ*zvB(FIz-f7|UJ)eB84jRh=PrRP zZyS*_K?lwqkT7RHcR&Zv9gr|*-N6w+O-BypOwjnUo2oD9<;OIna|YzQE$znfg;i2j zB4ZsL>1 zTuCUF_-m$|6A%*TI}`mRAnwU%N}TdZLaN=r3-DZ|A==m>Cvp-HOKzfZTP1{4%iAi> zISt`G#)VqRA-u;>aOxvynxchY_!r`WF6e(jXMLd z8zcMwTMRtRj0{Wy%mP5Euf2ci zTy92sqsp?ywa%)1H4IGqZ*DKvm^x z@}@V*L2r6zuKajtV&3a{a1EgW45$i28JLh1_@4K_!645*|NH0JQIZclHCIfk6JcOr z2KvYX=v+p2c20IyxR)83m|0lagam~}#6u=u;!rSgbZczccvw^{G=i3wdr zmWplq7ec*{=A_0gIiR)l(Ke&?K?$NkAEPD1R~m4wtXSK#`pOK}kUe3?LSOkXt%}o5 z*7~Z(7^*M2acb3MhE>zMZk*cd*=(#NyZ*thhqX_WR_HDXiH@D^)92AU%Vv|8XQ@E> z(K{dIQ`H3Tix(fMoif9{CicAGx1dDXkL5P*H$7XR(gNozBUZmo)6&vAr{<}nc2>?a zMbUfB%$)*n>shb!ipx&95$ka=G9t#%C{szv_-y+JkJ4E|uS7ErZQZh-=YZD5*6hqU z$%fFyT-Pq`F=klpCc1WMMH*vRk9M@zhck?G9&eiQdYMV+G;w~Pwg`_2pA-K~SoX@K z_4@3IeAhq37A#*Zy?>_jhhIi_x#Tk!#QJ*o<@F^l_hd0TEqLT_hxXFz8_eyq>&&spl|Ed#;yp{M~b?+gj6d1$mkx z?HA2{`m5Fa^jEI@>90iY>tE5_7r#O+a*j)|!ld|j5cB>s90#TzH9-ajRwh>D`~plp zfh?ke!UhX33J57QelTPOrxhkfU|QK@$o_p}MH2t}qz^~r?;YB|)33)+`S*?e!A{$r z#IIZ!U8H~I!rGnUuQI~!bbmF`&U5`WOLV)^Utg}<6YG|>=ALhUaK}@QE!k4Yc%m|t z;5;((f%~H$!JdJSk`W3qKxsGUMW$sUIgLA0?VReqnytwmrcS zb8_DDzWjy z*GIYIU*IN|kJ4FY4)c_A-A)J}$z5@isiJqQw1U6jw#90@bb@cOu5>BnKUEd{`e8{- zmVVrR6$h(=2uZOQ#ukIAn&i{WC0M9;80{{R3 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/assets/color10.jpg b/plugins/legacy-admin/images/assets/color10.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1e733445240800acd0bf29ee09a3182d3e986c1 GIT binary patch literal 1372 zcmex=3^2gV%E8IT&cp(gl>&(arD0M) znvn_U5w`!g7KV5b6 z+_Jmp<*uLpqQtb|d0j-~BGt>E&M~kcRLo)E;A)1L;dxqtL2&+w;{7@f7lmGQIxv7d zWeIc?BRd;62i)mQ42&$Sf+3ff*@T3}#5qJ2OxzkS(50 zB{xo)?0@hyaoT$h>qjkXjP5>UuL+pi7QIK|eV5RN)8#F)ADzM^^FB21)9^a1drzSJ zC}%|K?n8V(7HacsuW-CCVkse+8F&1;%F9E`9lfQrf>L8PNP3t$TT7+Q-f`xgWz@-i z{~12?32mKR`=8;VjB2*p@Ba*kEWEDye*e$VQZRMR?Dzi}I3B8S9$N0_&7`H3nzG@x zi>b45MB4m4XWp6lu|OHIL`h%f7?lwQ{k5u2MNngiMY1q*=Ow&fxC1n5_;Avy1m%= zu*v?`VPm;tCpql)|?BTm%HE`-}&3AL5_i5y&gSjmy)9{%b!?x)9u^FM@&q+ zQ>AYm@8Gb{<~dWf^T~tMrPcB=Q*X{N{cIP6Zq)fH8_pbGJrC+;DY>z!W48%py$8 z3_t`2Od^56Jj0?OWDo#OCrpgMbTVa%mzS!l(522ymo1B;0(CW}P4V_pT`F{GZ?N+= zs~yU37TKMG5(~FjJzm?N@+ngMagWfw&U}~ci=r>;zNlB7TeS1|zO|7z?+MDC=&ui3 zyYu=zkbL}VpgS}L85meufC!k`pn#EyHbZ)Ner@#us>k`iwH)124ySA*`wA{DmN*(_z$NMaKuQpzdoNxTk zVcV=HYq1iU2c@^J2@Oa;vwz}OefK|JljZYIxc~fHA+8-0x)Myh5nudI+VlJNC&vF7 Z?AI&Z%AT~92}H;?y%R6k-Fox?O#q}rCQASS literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/assets/color11.jpg b/plugins/legacy-admin/images/assets/color11.jpg new file mode 100644 index 0000000000000000000000000000000000000000..64bf0a613d4209c81d85143f86020eecd22f5871 GIT binary patch literal 1480 zcmex=;!aTst%D~7Zc!`BgNIYaRhp?!EiCbgK#>4C)VveE7i+Z>8S*`p!GWT(TYNUMB>3r#CV`km#J3n8fTXS%y9`Zzq@DSMZP^cG3s=6`pF~8WP(W5){QqawJsqu5}@N8XQ{Cr_q+p&Av zo{z1))7FQcV(>cp+T=x&WNO}`=X>93fAhLCyG%KI!DATxYeq&=&g0pQ)3&~=`J#8> z#_gk-Hfa-cUcK7sP#F;$HJ8WPXXTeU-}g@aw=$$S?^bS=3@4P959a0Zol{(3bZzhX zd9Amkr7PB39Cj8?mqB*MIfDyFZXP!W2kcArX^$EMDt7t3UozAEa?dioJsXM#0oTI0^ zn(jC~lc&(`e1^%pbR(~>v{T3^-ErAw$)?(GW*@G9{3O3Bbe2}=Ec>uy%cSM(+&{V+ zr@9)a|Jo09u#O-D12Y@2uz@9fV6tanU=|CSc!^ao@S>1`WAGw20bzwi!$Pprfmz(1 zp=ZL0Dz>+hiW9!@-ZFAld?CFhrOo+*dB#zm_60E)yCnG?b}kk%l4~q>(@3#pde#$g zqKfsb#KH+*xMvvxm5ZAs0hR0hVpctHU8{sY*80riU-ApDL`fd`UFUjt;T-?%PhxLj z;Y@juJ!zNt`q(D{fB8Qz`0F^~*VG_&)`B-n1$Z5*I{Ma1>Q0yaYKH zce)pY_?~B%58J%I<}gv{N5)5G2`d^OL9i%sEq-6ocfY5u3ze%ZCXmOtcELVzK= z_16h1E}QD29x!0%_(e4^1ncsZzgF<*OmSHN4Co^aHbB=fv4DaX<{xHOpo7_11ck&y zCtv0e77;EGT)=l1mQ-6b&7NCtWlE`iKJj?uRZG@w$`or&k(#; z^*=+K=&#Lx{kBa1ClUVY{8uYO#n$~ljtg@!NU*;8-MTjCxL!=4XK-xG%;odr)z=A~ zRm*&S{p9PG&7QL=zkaHEsB*ix2+K6|o2pb9Cpya~c&W#{@Yb}+A}@o~r#_5?DadfX z=)CK#R8uKqn^Y%f^Qj3Z4z+C)*POa($D_p9HM1f9DN8$cPuuc@lDBc&yT*DaeU{;YOvr5 z8?#^Bj`yA%|2`EGcK;bZ0#llzATZM~FtRYia|ROwBeO`LAd8TKqJd)oI5{yf0+Z7= ziM4IoiCs66cFJi_e1u9o?{HMyu5)i{W?|TLQ79oI#9Z|D^$Dv8obGKPqxm+(x^->*4cP|3PVAN|1pWlv&{p0+v5Q222V9 zV5b13>>0L1>56shY&xy8>5pR3O`bMq#R(_t0(NDJolf0!GiTZLsULx&?M**+Wo(N+ Mn6V{Fr~dy<03qSlBLDyZ literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/assets/color13.jpg b/plugins/legacy-admin/images/assets/color13.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da6ad4748a8bfb42a1ebe2f45f2c83416e02d3d0 GIT binary patch literal 1444 zcmex=u@XMpRrnfD0T7gZ07p%y5|lIjKO>EcX0cy7GFMBYy$&l@V;Vu|7ki0w!GSC zRk88?GX_qH#s0X^<2Ix3OR!&}aR+#UY z7#M+3z$PdpEDx<^NrZJ)BUT?e+IQR;l@SW*Fz4?*fTXYn(e52*+mZiW6sTN9IiiP zmOOiv{wAwrTdKNwuzhmy(#@KdyJr5DnyWk0^X!%LH?F+QIpvqPtnS!y@3f%eQsZx? zR?$Y2XRn;Uapk3(Q|8?D`P=I^?Yz?G+_DE%PxigOv1aR*uI|?xy*ci+aV+e7e&**M zAMt(1b!v-uJKyjO+4%L`TmD4VpySuAx7fB!^_Gu$cj22*C`@{aY_;f$ZM}hxWtNG` z9~eap_I>Ot{xL_tws&&nw%rA`Me#d#Ywp`IbnUfaboNg2H^_|`~E1l ze>U{WJ(=_DDU)>2l-rYTo;}54wm)>wUA1?WD7trcE4{d3&%0*5!W%)L?gZ`+5BB|0 z;QnCf*?Tfq?5UNs(q!pLw{%aHn8jo0eyaQIrFrqmJ-1_b$nDg8_Tc_`&3tpu-Sd2( z-FkcA>q)LRLCQ=l>Ra|jxS#r3BPRH1Z#-*D&HC_ziSpW4KY#^=Qg2*wV&Tw#S+53; zmj4WofeB1akb!}fi4B+~;2DIGi8)YYBQSv}EWF4fpy=2LNlHwNz@)UwC3<5>$M&R^ zf_X=Sl-V2M`AMwll#AANanbDVuB}IpMm>78wy>bi=~|@Ec8ScXwtevn-JaYB;q{q! z5|>XoXIXbNc_JA9U0(Rk@9~|vHAACH7c1Q>d1&S;V`zj|zoh*i|G4W5}N&h>oC z%8U|BJsni*_f2PKmjB9oN2lw0ezm@_>FG+l<<(*_Th*_;PdXLOGHr5?vcatWrykp; pEokTek!2Ot7zzfL?jQeu698sqMU?;m literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/assets/color14.jpg b/plugins/legacy-admin/images/assets/color14.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a10b08e7dbc52195f64be1df242d2b88db79ca53 GIT binary patch literal 1494 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 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/assets/color18.jpg b/plugins/legacy-admin/images/assets/color18.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8cc71b129d659615193f1763d572dfa53c11996c GIT binary patch literal 1536 zcmex=u@XMpRrIFD$ERa@CyI_nh|Se5kKMI*k8f~# zn{EF5cPy33;whF%YqGb^F{GYP{-{Jg z`RkMIYzMb%Z~alOyvy$Oy1h4S3a7Me3BDR?Ff~)d;>$v8ue{YR=bGK9c*=bC z!u36~qZPF!tdDay@<{#J74tqt&`Vvm&wP^mmZW2%GiI#Qa9X327}?qNs734i8GUo% zus^eXx7<#AJcZxfIqp+#PSu)xeHlF)1L;#Qi}y};mAGGKanDunWViUTq?#SexYlf} zN>e}Gm9XkRgTbCVzR{m@%`WG*_XXJ8<*oj-uyV(&?N1>7UQoG9>ibit&xNM>C%4@8 z-6m(r%)65%MW#w`$7znAaqkx$vJ2n+VnhGbcfWL$pH}bd1`A3_mvXAel-cconA`u) z9+=Y91wjc5nAzbOijjetNhEOLML{727SW)M0*Z-+kVM7A2uxIS^5$(?F1>us%408I zYZdOQIyEP+t8ka*u@}pw7a^F-C9Kltw7BwEHUAQs{Lh@r^FM=htIB_d-b0h>k3ICX ze_XKm<-9y$k$@NMFP_|wd2GPJAjSVKyr`<_XY9#W+)vBZSLjc@GjG8@uu$OFbGD2P zjSK%hpXjqu`qo?JmmWI8fzoCVKO0;q7^qsng&8I{(mf!>@CXkAlhL cPrr5Lp5GFj2UK@0+jQ31w9U8dAOF7z0IPdwfB*mh literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/assets/color19.jpg b/plugins/legacy-admin/images/assets/color19.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2cc412846156d8b601d3373ab63a9721c0c78c5c GIT binary patch literal 1577 zcmex=u@XMpRrHa900jM zS@!?87zbU)d-HrF( zxGMXb``RyiDz;BEEOUlw*wN>}bT8uQO}>cLOu!m~_3k210WgFR&OWe#BxQ85J*x5k!@hcB^9C^`lO zCofuj@u7fWVB#bLpm#Zd!N6$GFvTq8Zt)Lw0d)Gw*`E1Ry&)E(!8{YtpC1%;+@9PLQ2TKK9U zQCq9@rTh(il-731*PW*tBa^IxokceCJP)zWOS+Le?^fR*^~zVeF3X}Lyf(RX+PxDv zT6nIn|M&~f-^Tl+m*{g${+3?1-6Kv={mr?*c@y?1`QM!T>#kyj%lysOUw1iuXyLbY zoi=54*2^%ziSjoO&sewf^2Hy2A3;pkeDdV-7W=q>nf-hZ_j8B~$8I|vd&WtMV`5^P zVfU?q;?}CqVn?~O4xSTzeI{B&W3}DtN-JOK!W^^nx$bo$pNcYX$*)&mbNpw){g&4q zdD^M#o>_A9RBSjbvFwe7dtJ2cs z?Xl>Smojd5CvL0Gvi`7q@?^g|sYpsV!gD?5sCZl`J*3~?`s|1J@k5_$xF0{P+{gOy z!=C$0KYqmJH_R-%)p4X#Ol}9nP4)lmfk{Y1kb#kjg@v6Fo+B6;n3-4tC$b8PiU}zM z1uwdINx;AmoLHC`fr;gE+=`u1*;mE2eXABd&0HT6v)1xe_tfRKfkj)MuhI*f^VRj# z<#|9Q#Xu!~ASLHRVm_ToHWFHQyfzyT)zij6dzw@#C(jANV;$!;W1rKY_OYGG> z-1^-n2_`lDSc=+QUXy2q@*h%ai~Sx5ZC-!mPoWFvLXlJ5*&bhy7Jk~cr9UQIUK|6*Kvrp>$Sb@}$nzwI+V zJD;gs`0TXlp&j8|4`VcV_HPGBywOk8+L$T0DufN&rr z7XgbCdxoPMgzOzpCf(qaU+`pO4om-qqKIuw?irRkk<7~9o@`9v>AyYc=maDCJZ~|F z6MuK&5KhTjwEEG?8*;~P@h4}5hvdv|EpNDy_iVf%vtlax!iru`pZwAx_ATHKo%<*HN!^-oS#1-WY1(~L fXUWB@YX_Vu+RAfWJ3#Ad*4C)CVNdfv{=W$T9g=&i literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/assets/color2.jpg b/plugins/legacy-admin/images/assets/color2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b20ecbb91f6c8ac44db5a888ea914385f2f4c37 GIT binary patch literal 1574 zcmb7Ddo)yA9NuS+nPC_+$7Brhh{5vAbE%bgnHWlD7$JG4^w2|+S18;(B9D=7ukeLim z27n*{AhZG56R;AKC*>i~-v zWMUWO{(wA;YE-~uP*xKqU({Ou zOWDt}D!8)ylM4k`$15HANBeg3&Cx=?PfiZ3a`DDxU#b)i`AP0B#8OT^2eioXH|7}Nx!0;&0zJdmd> zqUzc*{4%ndJ0y73C9aXxXUJB*EIqm<8?`Bqx`&)WMRw@A;9mR|_Wipfib+);2ubRx zt~>p-s`ss3Bu!{DlYszHll{DO9tn-irs>N-(Y@r{$lpcoUP0!^z2gEr>bAMJ7#D0E zRyE%u++@`qqQ`5XcGWIFSL1i_bbqPXZf|axAlSNmsIiFkFfW?DxL0Bl)U$oUg8JaY zKv!{c&^=QsMwf54bY=Ft{Hr>qmHMxx#j8_!W+_p_q3Iio#kbdTXRyP+SO#3IpXd(L zAQ0MTmlbB-?U`_tIEAW5B|P>%ktO(&5Jztwl`^jc<_f%+K9=F9kZSFy>={qe@eA{W zn81PfnDsiYYfM)(HkiWijCq^mdwF50SljwBk)WPbRm(lq$Khs7sZe7VDE;AyAcQ0<3TYf4i1;o}z5jJ29d1)mO<$NY6rtxf;P z+?_Pqh+QH}wc2M;i_v7_CYY@m;*SoN>=IVSjzty4vG++0J2Tj=G__-JO2~`?Mxldt9o!y#EdT=gaPRcKh^; zzbljDCKKefKiZdR4uAQ%AI%B4&a=ilcYn55jF}!AN)w|sWrUy^$Ke*j@vWrL9HGfT zRC`n?x>ml`SXL1^-12MrU?8-7Zc{Crv&u2uineC=Tim`)jDx3Kt|eXHksVE%3}Ne~ zCad}VS-J66ueDKMbG&!X)abWOpRiC-nDB`;JiD}p@8tVF8y33g?jiQ>kOBCmsNvd+ z6np>He@NLQLK(;yAK*M6chclP^L;<9C`Xc9dB!%VIV91wmR?QRtRq>KvM%342K47F dUhRwJQ5`Zz2bgAwd%ezvcpUzUscW+Se*qGRa|i$c literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/assets/color20.jpg b/plugins/legacy-admin/images/assets/color20.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1b108ddee1bec24ac4ff6568217276d7fba8cb92 GIT binary patch literal 1516 zcmex=p_Bnt}*D;pOZ8!Iat4+keZ7atEl zA0H1dFTbFeFu#DPATO`5l(49{gruY-zmT-7w1ljfgro$>5JsR@HdZ!nHa2bv0bT(K zlEME&41ydCt_(5EjDieIf{e_9jQ@`?NQ0co3Unv}Z~&di&dCgt1bTy+5eN{Hj7-d| zENtxmZ!z#NGcqsl^g=;#cg zxw%K5e~HRWVAvhETl`|bPGqCzwds|w`#)Fxc;3FwEWY|ltL>ueOD&VmaQbc8eLkjs z_Vwd7wuPI1-&fImE4Ekjv{-^y>C$^uSHc{a=3UIbG-qQP%krq$=WAV47?2e7ntW+s zs5~|8>(g!nRjW&L6Brokf&Q=oI+Br%jgJfHWC&npU;_G5h>=}TeDY-uVG&UU6St7i z#+HpoE=edEI))`rS+wM#fLM?L(4!nc|1;V%%-xo67^xdVS#QD%j!D^HZw=Ex9tJVt$5tsVn+2d(YQe z>GDK#L1yvOP>ngQCcJtztCk8+Sk}1o{M3*|MIskWc79ql#m{LL+jP6opw5$xiQA%c zY#j9$7wJc~wJN&p$Ci#}1UpCi}GU9bTaMyQ^NThGo{K`8$?>Oh4ec z8n-}z+mpC0Z#lS3r5#I`FR{&Hdm?juu9@({*D@&rWzu}SZ8vi_d}O&C@#B~|Z%}Z+ zwkZ8ZAD_a{f^Hla9u%BlZgOw3k~^&MUa#|G`LbE{0j!=S{@r^`F8^xK@?KOE`*PX* zD~v(0!jInjn*3Y9HR;8C@v6+_Ul~Fs8zw)NIK0(kt<%zseUgT}-+8W^YKZ> za@?rqZ{N>$IA`09iYDhHXRhy=b?j!yu{+bx${Iwk{H~YGYvrCYExfP!m*%^aFICSv ztPah4=I_2Pqj}ArrH_)b?l(gMN%2uy_C4QZp;b9~-p?k?5IyyKy5Y0g+Lyewj~)Iq z<;12c$6_zpNS|)?CE_Lvul@`AXlR;$aKmlgZE^||J{p_8KjeMn$W>%_?B~=M77qI( z&AaJ#;v)``+W`XXSyg^Ny?*?(d%tL(o&W9^>-#6a`=$N($?tt#U_nWJ>!s+PInuPBbQkAz%Q zIy?m?DXJ*4xcz7F;@$7w+k27Y?3c15ht9huY*Q1f(q`R%Q?9(pO7DlyZiLMA+=vP@V?b@>Sp)YIxoqz9opypJu`foeNhk+Bf8>_EcteltT zAAfo4%GFn^=i9IOeUag>S26ofJC3Jeh1)i>Z(8#>H;q3ZD8IY!+Ol`nQH{Z1aO?iZ G|2F~eE?M>f literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/assets/color21.jpg b/plugins/legacy-admin/images/assets/color21.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b261a24cea5af68e35ce50d55dacdd72dd7652f5 GIT binary patch literal 11739 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 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/assets/color22.jpg b/plugins/legacy-admin/images/assets/color22.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7fb3b7e3c17855525b87013749d1d88c36635643 GIT binary patch literal 11331 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 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/assets/color23.jpg b/plugins/legacy-admin/images/assets/color23.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ef2c5305bea0b15998517ccdeefc9e744b658868 GIT binary patch literal 17697 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 ruXD6AzUopb!2Jfnl}Y literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/assets/color24.jpg b/plugins/legacy-admin/images/assets/color24.jpg new file mode 100644 index 0000000000000000000000000000000000000000..84d29990a469eea975e7b55a9dc425090317f1d8 GIT binary patch literal 17761 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 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/assets/color25.jpg b/plugins/legacy-admin/images/assets/color25.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf941304483e20dfad3ff07afb2582410efc1714 GIT binary patch literal 18073 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 Us<2aDq{&ba1mraT$^X9z01IJLhX4Qo literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/assets/color4.jpg b/plugins/legacy-admin/images/assets/color4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3089a99bfa38cda91e4a6f4cc27f07aeb0dabf2a GIT binary patch literal 1528 zcmex=u@XMpRr88<$;31lknKl`J>`^V&6f4coPFmUfHKe6%GpT-v~ z`#bfwKhOE~iGlUG-JZq#7mL^z2>nx=XU=~6V$=H<(vJ^65Xt%Ubq-kN^4^2rz9j7a z#rEUF4_0ZLz3B>7jQWoj+EX?^;WsQf>AWfO6Z?!^DGP7v{A4~8rcrpyEMebYNuO1#tCpm` zd)OhkH2G+^fbyFo!7(+OYJ3-Ftys3>N05)~LeoIs!VgPkSUY7cn)Udhr$JfERaevF zhbASw$aQ%x&*m*^t2EcyiA-kC@D1(EI9B)SpTeyC%ZxpHrn)Y< zFd@>FrNBc)L|~S1?HLKHz6jsa%=n(!Q#QI`)eSrePT-FTF%lb8;-CvIUHu}EB<>X&P4MG~u)gN%Ala{C8n z`4vC5^`yUB|A^CHoo(*ZlxiKroW$ziN{Wx{fj*ATeo=4kE65GEU`W-#JSo*gW z*Q2@J)7{L!m5AOC-7}}k{LwAL`MdUasM^etDxW&>jo;BtwQu*o_I`DJSD4ph4~D~< zViFe{^e-GWd9F7(|1F1>SLV4`wfnaOLjHz*DtvJt>eDHo3Nr8aY@gik_9xoS_v z4P>u&?HAIzn0%ybOTbC z)Vap?;IhrMY{vWHg;gPwJUzA)HadJf^L>HUzIB)0Zn@&u7ShUgweVg3&6?g-kMG>y z^iw+Y_|E;QpUhVG7uTJBk{d4f?CnGYQ<@)(zdcgk1|2F|1AaFPU literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/assets/color5.jpg b/plugins/legacy-admin/images/assets/color5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..74b0757905e294a87b26c1b0b5d18b8c9dc79a24 GIT binary patch literal 1698 zcmbVM2T+tp7~TKB%F(WH2*=SZ=ipHfkYLUn-JwcHY6K}cVw5_lC};#DB29`13W!1k zLKD0UBJBV{j-r4U1<`;60V&D_aTE#p!6B2$WHL$K?(EL)+i&N+Z@%5NCu?JXXk%q< z1t16j2x(yLDKH0U6l%SrQD_VrjlmLdSOn4%1Ux}jnn;wDmX#q<6y!+cEo2#4DxJDT zQBg@ri72P6s!UT=pefPTFM-e)3>Jfx!r`Q7Bv}&eKVz*8knq3~_@E#XfJqRF1g&)d z`npWay4*j2M`U6pU>w3KK?nfq&ol-LqtG~LZ3IZ6AOI6lL?lr3MgAK#qlGkwm4O)m z(B{c^VdviJ?W~5-y~?K{@0Mz2h@i)pVIg75YRv4IWglAw(Cgu;Zf;P-W9y9dvpT_^ zB8@3NAq@AVj$g;mq`i*g-o|7)(9*-mi z;()H4m~{TMbiiNd>4AQ&sGEs;$G1`sD^Zo>@MCc-x`M8q4kR>D)_k8~m(yDe4L-<~ z>puKHHpJSW4f%Ez*rulNuGJbw^Le*hPY?q-;)e^3xEBvRzgO_ly!@Xgns z#9BaZf1`K53SuIK{WppShLGY}@z|qGn3(sO zj$)?qBa0qZsZ4OMw)4_{EuwaGWPa_+OiE(>RO&$?+gCbPF}7dvD)O{BF<8-ZyYeGMQsY>EC%FN)VijVSCl^bo-~0-6>eb z(Z$fVgYBOeXdT$uNi09%kk3xurywUY?7o!9gWak};-1=DjIZXTKeV|YW9a;rT&vvY z+GJ7jU8I|i6H|RuWc%n7fv-WA7G^HfzUplm9Ha$#4+&)G@8gX+1AQ6_T8gxpqkRr- zJ|1`S^6PWln%Kk_I_Z%o1NZfnaaSm`rizCP48vH@qMwtHz^k>DGyR_KOXu+$Kz2T^ z=TjTWCyd2oFq=;kKrldK#cm`N`J^}?`f@mV+pax5 z^+}{`<)BfE^TI6EE(49(apSFAr%rA#nUPHo&hh`(i#Vy-kt10)Ou2igbpGj8>4P}| z&t=B`ZpbQU%I%MMH4itl;F)&u!Y1q!cKDQ$&%Vz2{o!3 zhb#Owal%hT*8HxZ3wk$nk$-dvwH_RAbvN8IMesVSz023fFwX6fc{xXOw63*oo4Bus zEor2lA8Wr#n==f4fNMU4!$gOPRy-V4&QIt^%94et`bN5onvLh8=Z#+KS94qRki+jU L&W;@IUK{=$wqKzh literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/assets/color6.jpg b/plugins/legacy-admin/images/assets/color6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..56b3db08dffb343e4b32dcba0fd5ddfe08951a75 GIT binary patch literal 1416 zcmex=G)-EY3GhJk@K_?M-_=D@iv2bZ5e%fNi`%F{2& z&%$murY*K+{k%Ql(E-N!JI=iNdFRya0-Y=A*%m!@x`8vk@h*N_GqL+f$#1CA$Ro)g zvwDti$d%82(i5k={Jzn)JKUy{x6Ua~zrc|6QP%F~)NKzUSDd?6D6_ADS-j)r_cLp^ zGo5uS>kIn*g+X4<=FeBCK%NZH$v~f210Bl9#?H&m3iAvL10xeNt00@On0V-=EHYTLFt)Sc_}lQ7tz5NzS+FE`rkLB;e4k}TVwZG!U)`JOlcKvMQu^v%qZucnJvN!Iu1YnWux(;W ze%P0fdI9HUyXQG8DvK~2Z8+N79kcfOiKA-eHs{R?yCM$ma(@(=vb0BfNuBC6FYMgL zLv9)$JDAzb42zE6TP!kj-ea4;&yMbNwkgxAkMpi#2M|OyA6mHdtYVm%bbS}Ak_mSftGzCswV!h^e z(xWYGg5D;xx<^GRUkjn0U^_YS`f&+#Qyz1koP6~-)GaG~qBbj5d>4~``Fk1~o^;T# z>s;&O`Q1fr6>nnxGh7BH78R82U#@SMxqxj>l5HRR5^ZO6#c75E*nG@c7!aHeC zo>R2w<07FO>!l|Yv3{G79aU#Fp}kgr~UID@Zhf4s5zuR e(f$k+%uQWdovo{Vdl@rh!-2$=)%EiKZvp@d+d8@c literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/assets/color7.jpg b/plugins/legacy-admin/images/assets/color7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fec684964e196cff6b4fb6fa69299247fd7aea97 GIT binary patch literal 1532 zcmex=p_Bnt}*D;pOZ8!Iat4+keZ7atEl zA0H1dFTbFeFu#DPATO`5l(49{gruY-zmT-7w1ljfgro$>5JsR@HdZ!nHa2bv0bT(K zlEME&41ydCt_(5EjDieIf{e_9jQ@`?NCO?o#0+vS9I$Y(vT?FAgCv3CXp+pVj7%(S z?Eh~u@Gt`<1(*eZ`o8ebt}-w`V}1?j>9g;bR$kEMOxX3LTkim)mTvK%iJ!hOU6>|x ztYUK>gV4gu*0JpR4!WHAyzy>+h6_2C7GiLq~^obA9-8lxDUSmzE8!?pdGA? zQ-J}Knccsdf$>wC;OPt8PEkM?$O9c~1Ed+*ScO*UUS+gr*cEwXQJijrZ4f47<>ntJR`onL z(AHb+dnxEz5ywKQARECXm1#a74h0K63*b$ELMrvNGV-0}3!9>heR-EvmuTBAxHK`6 zi{phy#}t8C!nJ357EUz5jF8(0wNb$=4JpBV}JDvy2-HC6E7Cg7icE^6EZOU_f zstfB_&eq&rw%Nn1+IFeVCLKe8iGmUdhUe;cUTi*aee1l(^O}#VwR%VJOS^=f`t;bt z@OYCELr3F8lVDd9fd$1slz(e`?%L9vo+a@FXBO8j{^B>r*Mz0bBiZp+^1^G8Om_PP3_ z6>Hp?4$KRUV!pX)QkfEmI*Z4K!;&WTn?*0?g^Jz3!F*MF(VbPg`!}$!{u+PqP}==! zNPwh2c<}kXrM;+ClKnT9Pg^c99hx$Eqp%}K^3gVl6RLkC)|C{kbo+NlZeq-fr$N1c zci8H$`o|}1_WRcP!t;)gC)=~L&#!zx{X@ab?f0%#_f_%B%=}?t^ZR_w{^pjm`@U_y zQ+%P~$+`;@!dx^ZF4i0F7J2*hZ*5oEr+@p7T36P`C(YfnfBi|Jei6nz|q`+i)?mGQu+sD5J0liUm!)cuAC1Auw^Fut5MgSursJlhx$; zSwYW3P{??Qh&EW9NHXqPtnKbprdQemwLQzlzWQIB^61{mUq*AHuiCo>cULWcajGys z`v1d5@;KYTz%@sx_(rfPV z^s>D+Z(ai8Tlo^n%>S6fz9Wv^|IuNW=>;1us@~Bt@hs=&6^cCs5}3>QR(#^+pP$-a z#T{#Fu+m9>B4+rBTjD2cPfgP?J4gE~d*A9Rl>WSNji)-g|3?k`Dp3)=AShkv!35}cGh^WdVX75Tj0I;hjHt}S6}_l IQ2+lX09LC}5dZ)H literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/assets/color8.jpg b/plugins/legacy-admin/images/assets/color8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c7c58af8e45038ecb25552b636a000361cb4f7f GIT binary patch literal 1582 zcmex=j|G5J!j7#O$|-`T7Xi;~#))qA0MWCK&!h39Ec zKYP8MptHrW_Eme5-L?iMx2wh5ENU+8PT|(&2|MnQRIHo)bK0?!FMm3jNkn{mHubhb zWJc09D`(-E+45($nfd#l65Md;_;!GCQaUWgk8iiGtDo9<=ynHKWDAf);HgFc}4GYX};8dn& z-CAm&FnxAS=~l10gZgGaUT01D+Z31k@!D0*-zKVG}aF<=*8m-*_%M1g4;(b63r zYupbUxBM_y=Gfj1#X4qs3tE1gG0W#h>D{=d()9JCP1n*6NoK3`0=LG`qQ@1^%`rS0 z9j^!)~?pV6UNJV3PZ1G_c_kBNbXvZ!@q+cSavl$9+qca#6E~K!NOr8ge&&gZ(HUXYdjTNqcce0> zJu>a8XbUjQQ;zt{t$Y-wVX-fOON@_e3hF1h09oa1ML zEsW-Fu9aG9+^l)q{Nn1L!bifgo>wP4i^z#}WJ}We`q}owJf+Ry*04kx|hFcu77 zKl6RdN6}e3@7(~0s?XX_Ts-SMpC=#s;+kvAUw<*$-}(NRu*(;|{}tWx#r8h~MAT&a zX${Yq$?IKPU%bzeInCR>;;%h0Iq3=lGde39D+@e1f$|GW;6))(1w+S)tRiAT3k8Ig z64?X|8o>#Oi4mB9UY=O@tmb0Llkj4@j9o?AJLjAD*4Yc4%Qb%1^{8{kor^Jn#?rI2 zyVR14T?<{#eZ zq+pl`4isSNW6$vVx@`~wwPae&E6lXoT ztGu(~ouB4C)yF#_!Vle9qh>{(oz1S{{mcLB>;~6Ysv1wGbQT;+iJbWSykXedi@bM2 zSC=@Ki)P&wxO+5eyNh`tSWxGy(9}tOE+-O|Y&t$apMNb+?qrbL^7%m9+1=;QjBN)I myM+tBd95?K^UtDhqrK8@F!4?8;hov-MR~F(ca+utzXUr0nsOh{Nlm|s9lUR*+2T2@w8P)tEdUPehuMpg!72qP;iD?1xIFFQN0jF5nk z49VdCAqGJX23Lj{W=25G@Oo>z1%vO|rt|wx zK3%mSE9Cco2Kftz4{l=+HhvYkTdscEs>YSUo3c%N`PMqSud(gk{glOMd%A8YbI|gX zYuQq=QEmMZ)#Bx+I8yV@MXh36>UVO@83rcF=*>`##taN?VQ;`jzpj|Sfk9sQbL#0( zhbt?utYlzd2fE%G=rkr4c3uvk7a%@hW@TVx6JlZ!6c3qvnVmyeL{vh-#I3Pq<6*_1 z(3C|>E?Yom*!8Nhjji3p1;I@QZK{D z_R6Pa?rj2+=B%y9#op|2e=_l^(>s+TTS_jix~Ow0DatA{G-Fz(p{}gSsx96oGp6;; z3XM{o<>T${tF>0>teWcLWmCgC(=Iliy~jd6>i%j9?QF~?d(Je zp16e6#y)1{hYwgtv3GZt5}+#fV(WHl@gd9`F3)9;nDo3;I| z)^VLRE=bLM9(pixSsu??n^!xuP0k*ix_oXpYud~mMq56wda&lgqDL(}6C2b8H6G5G zxMIyZN11@@jQN^ZPphz&Z^^f~9ml<{wW=ff=UVC2i$!C83!F-DcRL(r2x+ z-YLA+b56CkgVjo|i^lz_8SJ5oQT1w79k+L`hPpC*MeF`q7kBME7_CV?^hFN?*~tdls_Q>pji~N|&2v+yjR#*H?k*AirxfOc5Tzv}@6k3}qZ&t@m{_C^*>EC+K={5V;zchM3{p(+~*iZlVFFCz0 z{`!}Ri(^ta5)ZoyY;}74NPxZf(#6-ER3MM4$Cl%Oe`0f#ex=2WEBz> z5L6I02rP7POavz{CPrZL+8*;{?g8?MZ-3=Ez5N4NPh-B>$(Sis)9>i-h(84k3~fPR8OX-W&I&I)m{=GX#eybY zVrCT-G6)P#Ty&95Kv==h5gZ!8LdKqGoACtje`qzulV_E=Y(GqgLD}E z+mycZKil=6A%4ABPq>GO_AJ9#g@AP#M@t%=b}kmZ#LD#yEIc!RrKs)!l^;!dg$37t z{H^#K`*!M+A2+AnKlI%?-T&UMFZFEA)BQxXqxfPiLe}1~zO8-EaMRuWt>@~l&EISK d>Yc8{x(OQLCP}*-7RK%<`*{0!zUr>B0<3_GFc1fb;6NA-6g&syA(0|5q1^v~Kta0TXecQM{)7Kg z0Q40YTvRXuU|~?56ifaLX@?Kwq|9?qVB60d8Z+d>X>Ipt|w zI5ESyGX_Y@{TS2h-)!EM{O;^r)R$S63(Ad<>mry>uS4@#`LJ8}co?@1Ee2GHs~N z?yR0>O?R&J+A6N`Nc-D*T1~1q+twT}nJlH@A8f>WrhB`ET-0$#Y;QET2Ya>sX;a0> zBs<@`+OE$>-8EHU)5{NgD?J=f;e4p^dP=z*$I;qmGPgC4o^e1>jz6u-|0H2&pi$!g zj!SJAQaewwcfCZBit{^5EFOz%Fdk3R4d2vGt88>gS)aoXnoKyG<7UtloRO032}Dm? zQ@mN`c=r(F)1qYQmATtaAzsF+Pj1S}4P@6-O1xSp#}|4{I+<@1uko^4c3TC&j6`%& zoC3ST+~+AzyHflneco}!!xY6iM7=T5ks|$GwI*}YT(5EJ@sycvf?nR$>LbAzdTte- z@h%`UIEE-Ya^Rc~P2Fo>ZRyVmDuE9R4%A()DoN5)NL>_D@1FnGLseg&8Rm*xyKOhg zEvdk+22!sOVIPJa`o^t)z&53Mxc0J^%Y4T+ln7SVASLmdEf~#T9sNO{B}-hEG~!Cv z_6LNIVDdGpKdm0EqOD`|<7sRTzWeP~-#muCWiPot`>v?zS9aKKm$>^IisHRCSAE=V zpM3v*P*tS&PB$_1m}E`Jv1JmXzt?CwP%-IiX{n6p{)kzJ>Yu!e^HTgGoge;{m%WzX zR53{2%}JqYz**zHXjwKsTlW_F4Dcr zqm_igfvpS4MH*WD3KUvyMlNr_&lo!W<)pi%vox~6BC2f81_pkUSpR( zQa7v+U}t$p>;ymD=^5f+;Xp%lay4Nlh*9Vqw>s$4x4*09p^f|fcH5I!+V;Y&7X^>R zL&pk($=u9QJH~eBR>F&~4&KPc+pgEFk$joDVXP=|`1WE{nwicvDMz%mK0%MzL3<$T zZAZ(&S%iG$j6`$|tc)0a|t z3$v+}^}RtFO3zNA>#d_O$!Z4}vRyK=1Dd;SA7Yb!3UG~l^2T(k_e?gT<@H7GBTWt| ztl~NbgSN9n^L-8^mm5T^5B`PI(R#fWWgf{IFkH-g!}2^>c=T4&h0mlQ=Jex{XFKKB ze=|kOomw$bxxVu`wk!fu9ZvC-?>02cy1J86I!fHfdQLW7IFX08YuEWoY|_emu4Yv} z_|2(gMhf5g3U32jCNa81WX@FK@wO))tVS%v-cY{NaGb*;G< zwWF>n=X*cb;_vQh9@ji^+S-qOtx+zdol_eDg-kR5cep{J;-SuKq5Xa2OR+a0Mr9!* z2#4)){j-1~(l{v>z5$6FG22L((U*0!@t(8 z{4u5HTUpN6lqjI!e<1kv>uY@Q|3AO~T)p(~)r&tD&;DAo?0Ze|x9r5P(f&WCPxzV| z^=rrGp9^OGoHhAJSL64}0v)dv!a(ymOM?7@U;cZ0{ri`XZ(sj(daMK#Eb?@543W5; zdfrp0MM1#jqD%EDrkO6gqu+- hUt8s1x^C8fh6YQHu37JAeh1pl;OXk;vd$@?2>?&{iZ%cM literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/login-bg.png b/plugins/legacy-admin/images/login-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..739fd4372e47942766f165e02fd1522b05744880 GIT binary patch literal 567513 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

    pXZTs!U+JDkcD$_`#0hS%|Eil+Y) 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�eB+~qwhEx5vE|9^|` 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 z

    ^>{y9|Htzo$GpbP(>Rco1oPc(_Kl&P+B7rY*%y{@uy zlBml!E6b}A9#5NIH(D&VUHN*mmqyLmTV|V!VzPaNCQDVRt!kG&!Wbo>eMDiMp-r)@ z(3BsU*RPiQxR#v>xUT)+is{U=j*EVW-MJI#8k4>LbkW=`*HsM4Q`h7erp)*uHCIfb z>Hd+e-R~Y$$*xo5R=mh|BlMe=U8>JZr}e??@s?3d-+nDoTKAO4`*q**sO*Tg%+Ou; zCV$)2*7tth>iSEsbCu8EdcArHW91j_b?l9ow}xL&pDOabSoYJ$nC2tjX0_b;A@{ww zx7kAENZ7sDVEOqw^mOYEnz{+;%kPvc7C$|YNxVV7?-AF>q91=(1lhVrtl6gY+#$xh zC;Nx~cKInRJ_R+Ij{FPOEv$VqYx?m;_bx6zAq9yZ1o?6D4}MWsPY?44Ei-^wn!(f6 K&t;ucLK6V{!a!00 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/js/legacy-jquery.ui.elements.js b/plugins/legacy-admin/js/legacy-jquery.ui.elements.js new file mode 100644 index 000000000..6cfe8042a --- /dev/null +++ b/plugins/legacy-admin/js/legacy-jquery.ui.elements.js @@ -0,0 +1,535 @@ +/** + * @Package: WordPress Plugin + * @Subpackage: Legacy - White Label WordPress Admin Theme + * @Since: Legacy 1.0 + * @WordPress Version: 4.0 or above + * This file is part of Legacy - White Label WordPress Admin Theme Plugin. + */ + +/*! jQuery UI - v1.10.4 - 2014-10-19- core*/ +(function(e, t) { + function i(t, i) { + var a, n, r, o = t.nodeName.toLowerCase(); + return"area" === o ? (a = t.parentNode, n = a.name, t.href && n && "map" === a.nodeName.toLowerCase() ? (r = e("img[usemap=#" + n + "]")[0], !!r && s(r)) : !1) : (/input|select|textarea|button|object/.test(o) ? !t.disabled : "a" === o ? t.href || i : i) && s(t) + } + function s(t) { + return e.expr.filters.visible(t) && !e(t).parents().addBack().filter(function() { + return"hidden" === e.css(this, "visibility") + }).length + } + var a = 0, n = /^ui-id-\d+$/; + e.ui = e.ui || {}, e.extend(e.ui, {version: "1.10.4", keyCode: {BACKSPACE: 8, COMMA: 188, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, LEFT: 37, NUMPAD_ADD: 107, NUMPAD_DECIMAL: 110, NUMPAD_DIVIDE: 111, NUMPAD_ENTER: 108, NUMPAD_MULTIPLY: 106, NUMPAD_SUBTRACT: 109, PAGE_DOWN: 34, PAGE_UP: 33, PERIOD: 190, RIGHT: 39, SPACE: 32, TAB: 9, UP: 38}}), e.fn.extend({focus: function(t) { + return function(i, s) { + return"number" == typeof i ? this.each(function() { + var t = this; + setTimeout(function() { + e(t).focus(), s && s.call(t) + }, i) + }) : t.apply(this, arguments) + } + }(e.fn.focus), scrollParent: function() { + var t; + return t = e.ui.ie && /(static|relative)/.test(this.css("position")) || /absolute/.test(this.css("position")) ? this.parents().filter(function() { + return/(relative|absolute|fixed)/.test(e.css(this, "position")) && /(auto|scroll)/.test(e.css(this, "overflow") + e.css(this, "overflow-y") + e.css(this, "overflow-x")) + }).eq(0) : this.parents().filter(function() { + return/(auto|scroll)/.test(e.css(this, "overflow") + e.css(this, "overflow-y") + e.css(this, "overflow-x")) + }).eq(0), /fixed/.test(this.css("position")) || !t.length ? e(document) : t + }, zIndex: function(i) { + if (i !== t) + return this.css("zIndex", i); + if (this.length) + for (var s, a, n = e(this[0]); n.length && n[0] !== document; ) { + if (s = n.css("position"), ("absolute" === s || "relative" === s || "fixed" === s) && (a = parseInt(n.css("zIndex"), 10), !isNaN(a) && 0 !== a)) + return a; + n = n.parent() + } + return 0 + }, uniqueId: function() { + return this.each(function() { + this.id || (this.id = "ui-id-" + ++a) + }) + }, removeUniqueId: function() { + return this.each(function() { + n.test(this.id) && e(this).removeAttr("id") + }) + }}), e.extend(e.expr[":"], {data: e.expr.createPseudo ? e.expr.createPseudo(function(t) { + return function(i) { + return!!e.data(i, t) + } + }) : function(t, i, s) { + return!!e.data(t, s[3]) + }, focusable: function(t) { + return i(t, !isNaN(e.attr(t, "tabindex"))) + }, tabbable: function(t) { + var s = e.attr(t, "tabindex"), a = isNaN(s); + return(a || s >= 0) && i(t, !a) + }}), e("").outerWidth(1).jquery || e.each(["Width", "Height"], function(i, s) { + function a(t, i, s, a) { + return e.each(n, function() { + i -= parseFloat(e.css(t, "padding" + this)) || 0, s && (i -= parseFloat(e.css(t, "border" + this + "Width")) || 0), a && (i -= parseFloat(e.css(t, "margin" + this)) || 0) + }), i + } + var n = "Width" === s ? ["Left", "Right"] : ["Top", "Bottom"], r = s.toLowerCase(), o = {innerWidth: e.fn.innerWidth, innerHeight: e.fn.innerHeight, outerWidth: e.fn.outerWidth, outerHeight: e.fn.outerHeight}; + e.fn["inner" + s] = function(i) { + return i === t ? o["inner" + s].call(this) : this.each(function() { + e(this).css(r, a(this, i) + "px") + }) + }, e.fn["outer" + s] = function(t, i) { + return"number" != typeof t ? o["outer" + s].call(this, t) : this.each(function() { + e(this).css(r, a(this, t, !0, i) + "px") + }) + } + }), e.fn.addBack || (e.fn.addBack = function(e) { + return this.add(null == e ? this.prevObject : this.prevObject.filter(e)) + }), e("").data("a-b", "a").removeData("a-b").data("a-b") && (e.fn.removeData = function(t) { + return function(i) { + return arguments.length ? t.call(this, e.camelCase(i)) : t.call(this) + } + }(e.fn.removeData)), e.ui.ie = !!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()), e.support.selectstart = "onselectstart"in document.createElement("div"), e.fn.extend({disableSelection: function() { + return this.bind((e.support.selectstart ? "selectstart" : "mousedown") + ".ui-disableSelection", function(e) { + e.preventDefault() + }) + }, enableSelection: function() { + return this.unbind(".ui-disableSelection") + }}), e.extend(e.ui, {plugin: {add: function(t, i, s) { + var a, n = e.ui[t].prototype; + for (a in s) + n.plugins[a] = n.plugins[a] || [], n.plugins[a].push([i, s[a]]) + }, call: function(e, t, i) { + var s, a = e.plugins[t]; + if (a && e.element[0].parentNode && 11 !== e.element[0].parentNode.nodeType) + for (s = 0; a.length > s; s++) + e.options[a[s][0]] && a[s][1].apply(e.element, i) + }}, hasScroll: function(t, i) { + if ("hidden" === e(t).css("overflow")) + return!1; + var s = i && "left" === i ? "scrollLeft" : "scrollTop", a = !1; + return t[s] > 0 ? !0 : (t[s] = 1, a = t[s] > 0, t[s] = 0, a) + }}) +})(jQuery); + +/*! jQuery UI - v1.10.4 - 2014-10-19 - widget*/ +(function(e, t) { + var i = 0, s = Array.prototype.slice, a = e.cleanData; + e.cleanData = function(t) { + for (var i, s = 0; null != (i = t[s]); s++) + try { + e(i).triggerHandler("remove") + } catch (n) { + } + a(t) + }, e.widget = function(i, s, a) { + var n, r, o, h, l = {}, u = i.split(".")[0]; + i = i.split(".")[1], n = u + "-" + i, a || (a = s, s = e.Widget), e.expr[":"][n.toLowerCase()] = function(t) { + return!!e.data(t, n) + }, e[u] = e[u] || {}, r = e[u][i], o = e[u][i] = function(e, i) { + return this._createWidget ? (arguments.length && this._createWidget(e, i), t) : new o(e, i) + }, e.extend(o, r, {version: a.version, _proto: e.extend({}, a), _childConstructors: []}), h = new s, h.options = e.widget.extend({}, h.options), e.each(a, function(i, a) { + return e.isFunction(a) ? (l[i] = function() { + var e = function() { + return s.prototype[i].apply(this, arguments) + }, t = function(e) { + return s.prototype[i].apply(this, e) + }; + return function() { + var i, s = this._super, n = this._superApply; + return this._super = e, this._superApply = t, i = a.apply(this, arguments), this._super = s, this._superApply = n, i + } + }(), t) : (l[i] = a, t) + }), o.prototype = e.widget.extend(h, {widgetEventPrefix: r ? h.widgetEventPrefix || i : i}, l, {constructor: o, namespace: u, widgetName: i, widgetFullName: n}), r ? (e.each(r._childConstructors, function(t, i) { + var s = i.prototype; + e.widget(s.namespace + "." + s.widgetName, o, i._proto) + }), delete r._childConstructors) : s._childConstructors.push(o), e.widget.bridge(i, o) + }, e.widget.extend = function(i) { + for (var a, n, r = s.call(arguments, 1), o = 0, h = r.length; h > o; o++) + for (a in r[o]) + n = r[o][a], r[o].hasOwnProperty(a) && n !== t && (i[a] = e.isPlainObject(n) ? e.isPlainObject(i[a]) ? e.widget.extend({}, i[a], n) : e.widget.extend({}, n) : n); + return i + }, e.widget.bridge = function(i, a) { + var n = a.prototype.widgetFullName || i; + e.fn[i] = function(r) { + var o = "string" == typeof r, h = s.call(arguments, 1), l = this; + return r = !o && h.length ? e.widget.extend.apply(null, [r].concat(h)) : r, o ? this.each(function() { + var s, a = e.data(this, n); + return a ? e.isFunction(a[r]) && "_" !== r.charAt(0) ? (s = a[r].apply(a, h), s !== a && s !== t ? (l = s && s.jquery ? l.pushStack(s.get()) : s, !1) : t) : e.error("no such method '" + r + "' for " + i + " widget instance") : e.error("cannot call methods on " + i + " prior to initialization; " + "attempted to call method '" + r + "'") + }) : this.each(function() { + var t = e.data(this, n); + t ? t.option(r || {})._init() : e.data(this, n, new a(r, this)) + }), l + } + }, e.Widget = function() { + }, e.Widget._childConstructors = [], e.Widget.prototype = {widgetName: "widget", widgetEventPrefix: "", defaultElement: "

    ", options: {disabled: !1, create: null}, _createWidget: function(t, s) { + s = e(s || this.defaultElement || this)[0], this.element = e(s), this.uuid = i++, this.eventNamespace = "." + this.widgetName + this.uuid, this.options = e.widget.extend({}, this.options, this._getCreateOptions(), t), this.bindings = e(), this.hoverable = e(), this.focusable = e(), s !== this && (e.data(s, this.widgetFullName, this), this._on(!0, this.element, {remove: function(e) { + e.target === s && this.destroy() + }}), this.document = e(s.style ? s.ownerDocument : s.document || s), this.window = e(this.document[0].defaultView || this.document[0].parentWindow)), this._create(), this._trigger("create", null, this._getCreateEventData()), this._init() + }, _getCreateOptions: e.noop, _getCreateEventData: e.noop, _create: e.noop, _init: e.noop, destroy: function() { + this._destroy(), this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)), this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName + "-disabled " + "ui-state-disabled"), this.bindings.unbind(this.eventNamespace), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus") + }, _destroy: e.noop, widget: function() { + return this.element + }, option: function(i, s) { + var a, n, r, o = i; + if (0 === arguments.length) + return e.widget.extend({}, this.options); + if ("string" == typeof i) + if (o = {}, a = i.split("."), i = a.shift(), a.length) { + for (n = o[i] = e.widget.extend({}, this.options[i]), r = 0; a.length - 1 > r; r++) + n[a[r]] = n[a[r]] || {}, n = n[a[r]]; + if (i = a.pop(), 1 === arguments.length) + return n[i] === t ? null : n[i]; + n[i] = s + } else { + if (1 === arguments.length) + return this.options[i] === t ? null : this.options[i]; + o[i] = s + } + return this._setOptions(o), this + }, _setOptions: function(e) { + var t; + for (t in e) + this._setOption(t, e[t]); + return this + }, _setOption: function(e, t) { + return this.options[e] = t, "disabled" === e && (this.widget().toggleClass(this.widgetFullName + "-disabled ui-state-disabled", !!t).attr("aria-disabled", t), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus")), this + }, enable: function() { + return this._setOption("disabled", !1) + }, disable: function() { + return this._setOption("disabled", !0) + }, _on: function(i, s, a) { + var n, r = this; + "boolean" != typeof i && (a = s, s = i, i = !1), a ? (s = n = e(s), this.bindings = this.bindings.add(s)) : (a = s, s = this.element, n = this.widget()), e.each(a, function(a, o) { + function h() { + return i || r.options.disabled !== !0 && !e(this).hasClass("ui-state-disabled") ? ("string" == typeof o ? r[o] : o).apply(r, arguments) : t + } + "string" != typeof o && (h.guid = o.guid = o.guid || h.guid || e.guid++); + var l = a.match(/^(\w+)\s*(.*)$/), u = l[1] + r.eventNamespace, d = l[2]; + d ? n.delegate(d, u, h) : s.bind(u, h) + }) + }, _off: function(e, t) { + t = (t || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace, e.unbind(t).undelegate(t) + }, _delay: function(e, t) { + function i() { + return("string" == typeof e ? s[e] : e).apply(s, arguments) + } + var s = this; + return setTimeout(i, t || 0) + }, _hoverable: function(t) { + this.hoverable = this.hoverable.add(t), this._on(t, {mouseenter: function(t) { + e(t.currentTarget).addClass("ui-state-hover") + }, mouseleave: function(t) { + e(t.currentTarget).removeClass("ui-state-hover") + }}) + }, _focusable: function(t) { + this.focusable = this.focusable.add(t), this._on(t, {focusin: function(t) { + e(t.currentTarget).addClass("ui-state-focus") + }, focusout: function(t) { + e(t.currentTarget).removeClass("ui-state-focus") + }}) + }, _trigger: function(t, i, s) { + var a, n, r = this.options[t]; + if (s = s || {}, i = e.Event(i), i.type = (t === this.widgetEventPrefix ? t : this.widgetEventPrefix + t).toLowerCase(), i.target = this.element[0], n = i.originalEvent) + for (a in n) + a in i || (i[a] = n[a]); + return this.element.trigger(i, s), !(e.isFunction(r) && r.apply(this.element[0], [i].concat(s)) === !1 || i.isDefaultPrevented()) + }}, e.each({show: "fadeIn", hide: "fadeOut"}, function(t, i) { + e.Widget.prototype["_" + t] = function(s, a, n) { + "string" == typeof a && (a = {effect: a}); + var r, o = a ? a === !0 || "number" == typeof a ? i : a.effect || i : t; + a = a || {}, "number" == typeof a && (a = {duration: a}), r = !e.isEmptyObject(a), a.complete = n, a.delay && s.delay(a.delay), r && e.effects && e.effects.effect[o] ? s[t](a) : o !== t && s[o] ? s[o](a.duration, a.easing, n) : s.queue(function(i) { + e(this)[t](), n && n.call(s[0]), i() + }) + } + }) +})(jQuery); + +/*! jQuery UI - v1.10.4 - 2014-10-19 - mouse*/ +(function(e) { + var t = !1; + e(document).mouseup(function() { + t = !1 + }), e.widget("ui.mouse", {version: "1.10.4", options: {cancel: "input,textarea,button,select,option", distance: 1, delay: 0}, _mouseInit: function() { + var t = this; + this.element.bind("mousedown." + this.widgetName, function(e) { + return t._mouseDown(e) + }).bind("click." + this.widgetName, function(i) { + return!0 === e.data(i.target, t.widgetName + ".preventClickEvent") ? (e.removeData(i.target, t.widgetName + ".preventClickEvent"), i.stopImmediatePropagation(), !1) : undefined + }), this.started = !1 + }, _mouseDestroy: function() { + this.element.unbind("." + this.widgetName), this._mouseMoveDelegate && e(document).unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate) + }, _mouseDown: function(i) { + if (!t) { + this._mouseStarted && this._mouseUp(i), this._mouseDownEvent = i; + var s = this, a = 1 === i.which, n = "string" == typeof this.options.cancel && i.target.nodeName ? e(i.target).closest(this.options.cancel).length : !1; + return a && !n && this._mouseCapture(i) ? (this.mouseDelayMet = !this.options.delay, this.mouseDelayMet || (this._mouseDelayTimer = setTimeout(function() { + s.mouseDelayMet = !0 + }, this.options.delay)), this._mouseDistanceMet(i) && this._mouseDelayMet(i) && (this._mouseStarted = this._mouseStart(i) !== !1, !this._mouseStarted) ? (i.preventDefault(), !0) : (!0 === e.data(i.target, this.widgetName + ".preventClickEvent") && e.removeData(i.target, this.widgetName + ".preventClickEvent"), this._mouseMoveDelegate = function(e) { + return s._mouseMove(e) + }, this._mouseUpDelegate = function(e) { + return s._mouseUp(e) + }, e(document).bind("mousemove." + this.widgetName, this._mouseMoveDelegate).bind("mouseup." + this.widgetName, this._mouseUpDelegate), i.preventDefault(), t = !0, !0)) : !0 + } + }, _mouseMove: function(t) { + return e.ui.ie && (!document.documentMode || 9 > document.documentMode) && !t.button ? this._mouseUp(t) : this._mouseStarted ? (this._mouseDrag(t), t.preventDefault()) : (this._mouseDistanceMet(t) && this._mouseDelayMet(t) && (this._mouseStarted = this._mouseStart(this._mouseDownEvent, t) !== !1, this._mouseStarted ? this._mouseDrag(t) : this._mouseUp(t)), !this._mouseStarted) + }, _mouseUp: function(t) { + return e(document).unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate), this._mouseStarted && (this._mouseStarted = !1, t.target === this._mouseDownEvent.target && e.data(t.target, this.widgetName + ".preventClickEvent", !0), this._mouseStop(t)), !1 + }, _mouseDistanceMet: function(e) { + return Math.max(Math.abs(this._mouseDownEvent.pageX - e.pageX), Math.abs(this._mouseDownEvent.pageY - e.pageY)) >= this.options.distance + }, _mouseDelayMet: function() { + return this.mouseDelayMet + }, _mouseStart: function() { + }, _mouseDrag: function() { + }, _mouseStop: function() { + }, _mouseCapture: function() { + return!0 + }}) +})(jQuery); + +/*! jQuery UI - v1.10.4 - 2014-10-19 - sortable*/ +(function(e) { + function t(e, t, i) { + return e > t && t + i > e + } + function i(e) { + return/left|right/.test(e.css("float")) || /inline|table-cell/.test(e.css("display")) + } + e.widget("ui.sortable", e.ui.mouse, {version: "1.10.4", widgetEventPrefix: "sort", ready: !1, options: {appendTo: "parent", axis: !1, connectWith: !1, containment: !1, cursor: "auto", cursorAt: !1, dropOnEmpty: !0, forcePlaceholderSize: !1, forceHelperSize: !1, grid: !1, handle: !1, helper: "original", items: "> *", opacity: !1, placeholder: !1, revert: !1, scroll: !0, scrollSensitivity: 20, scrollSpeed: 20, scope: "default", tolerance: "intersect", zIndex: 1e3, activate: null, beforeStop: null, change: null, deactivate: null, out: null, over: null, receive: null, remove: null, sort: null, start: null, stop: null, update: null}, _create: function() { + var e = this.options; + this.containerCache = {}, this.element.addClass("ui-sortable"), this.refresh(), this.floating = this.items.length ? "x" === e.axis || i(this.items[0].item) : !1, this.offset = this.element.offset(), this._mouseInit(), this.ready = !0 + }, _destroy: function() { + this.element.removeClass("ui-sortable ui-sortable-disabled"), this._mouseDestroy(); + for (var e = this.items.length - 1; e >= 0; e--) + this.items[e].item.removeData(this.widgetName + "-item"); + return this + }, _setOption: function(t, i) { + "disabled" === t ? (this.options[t] = i, this.widget().toggleClass("ui-sortable-disabled", !!i)) : e.Widget.prototype._setOption.apply(this, arguments) + }, _mouseCapture: function(t, i) { + var s = null, a = !1, n = this; + return this.reverting ? !1 : this.options.disabled || "static" === this.options.type ? !1 : (this._refreshItems(t), e(t.target).parents().each(function() { + return e.data(this, n.widgetName + "-item") === n ? (s = e(this), !1) : undefined + }), e.data(t.target, n.widgetName + "-item") === n && (s = e(t.target)), s ? !this.options.handle || i || (e(this.options.handle, s).find("*").addBack().each(function() { + this === t.target && (a = !0) + }), a) ? (this.currentItem = s, this._removeCurrentsFromItems(), !0) : !1 : !1) + }, _mouseStart: function(t, i, s) { + var a, n, r = this.options; + if (this.currentContainer = this, this.refreshPositions(), this.helper = this._createHelper(t), this._cacheHelperProportions(), this._cacheMargins(), this.scrollParent = this.helper.scrollParent(), this.offset = this.currentItem.offset(), this.offset = {top: this.offset.top - this.margins.top, left: this.offset.left - this.margins.left}, e.extend(this.offset, {click: {left: t.pageX - this.offset.left, top: t.pageY - this.offset.top}, parent: this._getParentOffset(), relative: this._getRelativeOffset()}), this.helper.css("position", "absolute"), this.cssPosition = this.helper.css("position"), this.originalPosition = this._generatePosition(t), this.originalPageX = t.pageX, this.originalPageY = t.pageY, r.cursorAt && this._adjustOffsetFromHelper(r.cursorAt), this.domPosition = {prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0]}, this.helper[0] !== this.currentItem[0] && this.currentItem.hide(), this._createPlaceholder(), r.containment && this._setContainment(), r.cursor && "auto" !== r.cursor && (n = this.document.find("body"), this.storedCursor = n.css("cursor"), n.css("cursor", r.cursor), this.storedStylesheet = e("").appendTo(n)), r.opacity && (this.helper.css("opacity") && (this._storedOpacity = this.helper.css("opacity")), this.helper.css("opacity", r.opacity)), r.zIndex && (this.helper.css("zIndex") && (this._storedZIndex = this.helper.css("zIndex")), this.helper.css("zIndex", r.zIndex)), this.scrollParent[0] !== document && "HTML" !== this.scrollParent[0].tagName && (this.overflowOffset = this.scrollParent.offset()), this._trigger("start", t, this._uiHash()), this._preserveHelperProportions || this._cacheHelperProportions(), !s) + for (a = this.containers.length - 1; a >= 0; a--) + this.containers[a]._trigger("activate", t, this._uiHash(this)); + return e.ui.ddmanager && (e.ui.ddmanager.current = this), e.ui.ddmanager && !r.dropBehaviour && e.ui.ddmanager.prepareOffsets(this, t), this.dragging = !0, this.helper.addClass("ui-sortable-helper"), this._mouseDrag(t), !0 + }, _mouseDrag: function(t) { + var i, s, a, n, r = this.options, o = !1; + for (this.position = this._generatePosition(t), this.positionAbs = this._convertPositionTo("absolute"), this.lastPositionAbs || (this.lastPositionAbs = this.positionAbs), this.options.scroll && (this.scrollParent[0] !== document && "HTML" !== this.scrollParent[0].tagName?(this.overflowOffset.top + this.scrollParent[0].offsetHeight - t.pageY < r.scrollSensitivity?this.scrollParent[0].scrollTop = o = this.scrollParent[0].scrollTop + r.scrollSpeed:t.pageY - this.overflowOffset.top < r.scrollSensitivity && (this.scrollParent[0].scrollTop = o = this.scrollParent[0].scrollTop - r.scrollSpeed), this.overflowOffset.left + this.scrollParent[0].offsetWidth - t.pageX < r.scrollSensitivity?this.scrollParent[0].scrollLeft = o = this.scrollParent[0].scrollLeft + r.scrollSpeed:t.pageX - this.overflowOffset.left < r.scrollSensitivity && (this.scrollParent[0].scrollLeft = o = this.scrollParent[0].scrollLeft - r.scrollSpeed)):(t.pageY - e(document).scrollTop() < r.scrollSensitivity?o = e(document).scrollTop(e(document).scrollTop() - r.scrollSpeed):e(window).height() - (t.pageY - e(document).scrollTop()) < r.scrollSensitivity && (o = e(document).scrollTop(e(document).scrollTop() + r.scrollSpeed)), t.pageX - e(document).scrollLeft() < r.scrollSensitivity?o = e(document).scrollLeft(e(document).scrollLeft() - r.scrollSpeed):e(window).width() - (t.pageX - e(document).scrollLeft()) < r.scrollSensitivity && (o = e(document).scrollLeft(e(document).scrollLeft() + r.scrollSpeed))), o !== !1 && e.ui.ddmanager && !r.dropBehaviour && e.ui.ddmanager.prepareOffsets(this, t)), this.positionAbs = this._convertPositionTo("absolute"), this.options.axis && "y" === this.options.axis || (this.helper[0].style.left = this.position.left + "px"), this.options.axis && "x" === this.options.axis || (this.helper[0].style.top = this.position.top + "px"), i = this.items.length - 1; i >= 0; i--) + if (s = this.items[i], a = s.item[0], n = this._intersectsWithPointer(s), n && s.instance === this.currentContainer && a !== this.currentItem[0] && this.placeholder[1 === n ? "next" : "prev"]()[0] !== a && !e.contains(this.placeholder[0], a) && ("semi-dynamic" === this.options.type ? !e.contains(this.element[0], a) : !0)) { + if (this.direction = 1 === n ? "down" : "up", "pointer" !== this.options.tolerance && !this._intersectsWithSides(s)) + break; + this._rearrange(t, s), this._trigger("change", t, this._uiHash()); + break + } + return this._contactContainers(t), e.ui.ddmanager && e.ui.ddmanager.drag(this, t), this._trigger("sort", t, this._uiHash()), this.lastPositionAbs = this.positionAbs, !1 + }, _mouseStop: function(t, i) { + if (t) { + if (e.ui.ddmanager && !this.options.dropBehaviour && e.ui.ddmanager.drop(this, t), this.options.revert) { + var s = this, a = this.placeholder.offset(), n = this.options.axis, r = {}; + n && "x" !== n || (r.left = a.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft)), n && "y" !== n || (r.top = a.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop)), this.reverting = !0, e(this.helper).animate(r, parseInt(this.options.revert, 10) || 500, function() { + s._clear(t) + }) + } else + this._clear(t, i); + return!1 + } + }, cancel: function() { + if (this.dragging) { + this._mouseUp({target: null}), "original" === this.options.helper ? this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper") : this.currentItem.show(); + for (var t = this.containers.length - 1; t >= 0; t--) + this.containers[t]._trigger("deactivate", null, this._uiHash(this)), this.containers[t].containerCache.over && (this.containers[t]._trigger("out", null, this._uiHash(this)), this.containers[t].containerCache.over = 0) + } + return this.placeholder && (this.placeholder[0].parentNode && this.placeholder[0].parentNode.removeChild(this.placeholder[0]), "original" !== this.options.helper && this.helper && this.helper[0].parentNode && this.helper.remove(), e.extend(this, {helper: null, dragging: !1, reverting: !1, _noFinalSort: null}), this.domPosition.prev ? e(this.domPosition.prev).after(this.currentItem) : e(this.domPosition.parent).prepend(this.currentItem)), this + }, serialize: function(t) { + var i = this._getItemsAsjQuery(t && t.connected), s = []; + return t = t || {}, e(i).each(function() { + var i = (e(t.item || this).attr(t.attribute || "id") || "").match(t.expression || /(.+)[\-=_](.+)/); + i && s.push((t.key || i[1] + "[]") + "=" + (t.key && t.expression ? i[1] : i[2])) + }), !s.length && t.key && s.push(t.key + "="), s.join("&") + }, toArray: function(t) { + var i = this._getItemsAsjQuery(t && t.connected), s = []; + return t = t || {}, i.each(function() { + s.push(e(t.item || this).attr(t.attribute || "id") || "") + }), s + }, _intersectsWith: function(e) { + var t = this.positionAbs.left, i = t + this.helperProportions.width, s = this.positionAbs.top, a = s + this.helperProportions.height, n = e.left, r = n + e.width, o = e.top, h = o + e.height, l = this.offset.click.top, u = this.offset.click.left, d = "x" === this.options.axis || s + l > o && h > s + l, c = "y" === this.options.axis || t + u > n && r > t + u, p = d && c; + return"pointer" === this.options.tolerance || this.options.forcePointerForContainers || "pointer" !== this.options.tolerance && this.helperProportions[this.floating ? "width" : "height"] > e[this.floating ? "width" : "height"] ? p : t + this.helperProportions.width / 2 > n && r > i - this.helperProportions.width / 2 && s + this.helperProportions.height / 2 > o && h > a - this.helperProportions.height / 2 + }, _intersectsWithPointer: function(e) { + var i = "x" === this.options.axis || t(this.positionAbs.top + this.offset.click.top, e.top, e.height), s = "y" === this.options.axis || t(this.positionAbs.left + this.offset.click.left, e.left, e.width), a = i && s, n = this._getDragVerticalDirection(), r = this._getDragHorizontalDirection(); + return a ? this.floating ? r && "right" === r || "down" === n ? 2 : 1 : n && ("down" === n ? 2 : 1) : !1 + }, _intersectsWithSides: function(e) { + var i = t(this.positionAbs.top + this.offset.click.top, e.top + e.height / 2, e.height), s = t(this.positionAbs.left + this.offset.click.left, e.left + e.width / 2, e.width), a = this._getDragVerticalDirection(), n = this._getDragHorizontalDirection(); + return this.floating && n ? "right" === n && s || "left" === n && !s : a && ("down" === a && i || "up" === a && !i) + }, _getDragVerticalDirection: function() { + var e = this.positionAbs.top - this.lastPositionAbs.top; + return 0 !== e && (e > 0 ? "down" : "up") + }, _getDragHorizontalDirection: function() { + var e = this.positionAbs.left - this.lastPositionAbs.left; + return 0 !== e && (e > 0 ? "right" : "left") + }, refresh: function(e) { + return this._refreshItems(e), this.refreshPositions(), this + }, _connectWith: function() { + var e = this.options; + return e.connectWith.constructor === String ? [e.connectWith] : e.connectWith + }, _getItemsAsjQuery: function(t) { + function i() { + o.push(this) + } + var s, a, n, r, o = [], h = [], l = this._connectWith(); + if (l && t) + for (s = l.length - 1; s >= 0; s--) + for (n = e(l[s]), a = n.length - 1; a >= 0; a--) + r = e.data(n[a], this.widgetFullName), r && r !== this && !r.options.disabled && h.push([e.isFunction(r.options.items) ? r.options.items.call(r.element) : e(r.options.items, r.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), r]); + for (h.push([e.isFunction(this.options.items)?this.options.items.call(this.element, null, {options:this.options, item:this.currentItem}):e(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]), s = h.length - 1; s >= 0; s--) + h[s][0].each(i); + return e(o) + }, _removeCurrentsFromItems: function() { + var t = this.currentItem.find(":data(" + this.widgetName + "-item)"); + this.items = e.grep(this.items, function(e) { + for (var i = 0; t.length > i; i++) + if (t[i] === e.item[0]) + return!1; + return!0 + }) + }, _refreshItems: function(t) { + this.items = [], this.containers = [this]; + var i, s, a, n, r, o, h, l, u = this.items, d = [[e.isFunction(this.options.items) ? this.options.items.call(this.element[0], t, {item: this.currentItem}) : e(this.options.items, this.element), this]], c = this._connectWith(); + if (c && this.ready) + for (i = c.length - 1; i >= 0; i--) + for (a = e(c[i]), s = a.length - 1; s >= 0; s--) + n = e.data(a[s], this.widgetFullName), n && n !== this && !n.options.disabled && (d.push([e.isFunction(n.options.items) ? n.options.items.call(n.element[0], t, {item: this.currentItem}) : e(n.options.items, n.element), n]), this.containers.push(n)); + for (i = d.length - 1; i >= 0; i--) + for (r = d[i][1], o = d[i][0], s = 0, l = o.length; l > s; s++) + h = e(o[s]), h.data(this.widgetName + "-item", r), u.push({item: h, instance: r, width: 0, height: 0, left: 0, top: 0}) + }, refreshPositions: function(t) { + this.offsetParent && this.helper && (this.offset.parent = this._getParentOffset()); + var i, s, a, n; + for (i = this.items.length - 1; i >= 0; i--) + s = this.items[i], s.instance !== this.currentContainer && this.currentContainer && s.item[0] !== this.currentItem[0] || (a = this.options.toleranceElement ? e(this.options.toleranceElement, s.item) : s.item, t || (s.width = a.outerWidth(), s.height = a.outerHeight()), n = a.offset(), s.left = n.left, s.top = n.top); + if (this.options.custom && this.options.custom.refreshContainers) + this.options.custom.refreshContainers.call(this); + else + for (i = this.containers.length - 1; i >= 0; i--) + n = this.containers[i].element.offset(), this.containers[i].containerCache.left = n.left, this.containers[i].containerCache.top = n.top, this.containers[i].containerCache.width = this.containers[i].element.outerWidth(), this.containers[i].containerCache.height = this.containers[i].element.outerHeight(); + return this + }, _createPlaceholder: function(t) { + t = t || this; + var i, s = t.options; + s.placeholder && s.placeholder.constructor !== String || (i = s.placeholder, s.placeholder = {element: function() { + var s = t.currentItem[0].nodeName.toLowerCase(), a = e("<" + s + ">", t.document[0]).addClass(i || t.currentItem[0].className + " ui-sortable-placeholder").removeClass("ui-sortable-helper"); + return"tr" === s ? t.currentItem.children().each(function() { + e(" ", t.document[0]).attr("colspan", e(this).attr("colspan") || 1).appendTo(a) + }) : "img" === s && a.attr("src", t.currentItem.attr("src")), i || a.css("visibility", "hidden"), a + }, update: function(e, a) { + (!i || s.forcePlaceholderSize) && (a.height() || a.height(t.currentItem.innerHeight() - parseInt(t.currentItem.css("paddingTop") || 0, 10) - parseInt(t.currentItem.css("paddingBottom") || 0, 10)), a.width() || a.width(t.currentItem.innerWidth() - parseInt(t.currentItem.css("paddingLeft") || 0, 10) - parseInt(t.currentItem.css("paddingRight") || 0, 10))) + }}), t.placeholder = e(s.placeholder.element.call(t.element, t.currentItem)), t.currentItem.after(t.placeholder), s.placeholder.update(t, t.placeholder) + }, _contactContainers: function(s) { + var a, n, r, o, h, l, u, d, c, p, f = null, m = null; + for (a = this.containers.length - 1; a >= 0; a--) + if (!e.contains(this.currentItem[0], this.containers[a].element[0])) + if (this._intersectsWith(this.containers[a].containerCache)) { + if (f && e.contains(this.containers[a].element[0], f.element[0])) + continue; + f = this.containers[a], m = a + } else + this.containers[a].containerCache.over && (this.containers[a]._trigger("out", s, this._uiHash(this)), this.containers[a].containerCache.over = 0); + if (f) + if (1 === this.containers.length) + this.containers[m].containerCache.over || (this.containers[m]._trigger("over", s, this._uiHash(this)), this.containers[m].containerCache.over = 1); + else { + for (r = 1e4, o = null, p = f.floating || i(this.currentItem), h = p?"left":"top", l = p?"width":"height", u = this.positionAbs[h] + this.offset.click[h], n = this.items.length - 1; n >= 0; n--) + e.contains(this.containers[m].element[0], this.items[n].item[0]) && this.items[n].item[0] !== this.currentItem[0] && (!p || t(this.positionAbs.top + this.offset.click.top, this.items[n].top, this.items[n].height)) && (d = this.items[n].item.offset()[h], c = !1, Math.abs(d - u) > Math.abs(d + this.items[n][l] - u) && (c = !0, d += this.items[n][l]), r > Math.abs(d - u) && (r = Math.abs(d - u), o = this.items[n], this.direction = c ? "up" : "down")); + if (!o && !this.options.dropOnEmpty) + return; + if (this.currentContainer === this.containers[m]) + return; + o ? this._rearrange(s, o, null, !0) : this._rearrange(s, null, this.containers[m].element, !0), this._trigger("change", s, this._uiHash()), this.containers[m]._trigger("change", s, this._uiHash(this)), this.currentContainer = this.containers[m], this.options.placeholder.update(this.currentContainer, this.placeholder), this.containers[m]._trigger("over", s, this._uiHash(this)), this.containers[m].containerCache.over = 1 + } + }, _createHelper: function(t) { + var i = this.options, s = e.isFunction(i.helper) ? e(i.helper.apply(this.element[0], [t, this.currentItem])) : "clone" === i.helper ? this.currentItem.clone() : this.currentItem; + return s.parents("body").length || e("parent" !== i.appendTo ? i.appendTo : this.currentItem[0].parentNode)[0].appendChild(s[0]), s[0] === this.currentItem[0] && (this._storedCSS = {width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left")}), (!s[0].style.width || i.forceHelperSize) && s.width(this.currentItem.width()), (!s[0].style.height || i.forceHelperSize) && s.height(this.currentItem.height()), s + }, _adjustOffsetFromHelper: function(t) { + "string" == typeof t && (t = t.split(" ")), e.isArray(t) && (t = {left: +t[0], top: +t[1] || 0}), "left"in t && (this.offset.click.left = t.left + this.margins.left), "right"in t && (this.offset.click.left = this.helperProportions.width - t.right + this.margins.left), "top"in t && (this.offset.click.top = t.top + this.margins.top), "bottom"in t && (this.offset.click.top = this.helperProportions.height - t.bottom + this.margins.top) + }, _getParentOffset: function() { + this.offsetParent = this.helper.offsetParent(); + var t = this.offsetParent.offset(); + return"absolute" === this.cssPosition && this.scrollParent[0] !== document && e.contains(this.scrollParent[0], this.offsetParent[0]) && (t.left += this.scrollParent.scrollLeft(), t.top += this.scrollParent.scrollTop()), (this.offsetParent[0] === document.body || this.offsetParent[0].tagName && "html" === this.offsetParent[0].tagName.toLowerCase() && e.ui.ie) && (t = {top: 0, left: 0}), {top: t.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0), left: t.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)} + }, _getRelativeOffset: function() { + if ("relative" === this.cssPosition) { + var e = this.currentItem.position(); + return{top: e.top - (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(), left: e.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()} + } + return{top: 0, left: 0} + }, _cacheMargins: function() { + this.margins = {left: parseInt(this.currentItem.css("marginLeft"), 10) || 0, top: parseInt(this.currentItem.css("marginTop"), 10) || 0} + }, _cacheHelperProportions: function() { + this.helperProportions = {width: this.helper.outerWidth(), height: this.helper.outerHeight()} + }, _setContainment: function() { + var t, i, s, a = this.options; + "parent" === a.containment && (a.containment = this.helper[0].parentNode), ("document" === a.containment || "window" === a.containment) && (this.containment = [0 - this.offset.relative.left - this.offset.parent.left, 0 - this.offset.relative.top - this.offset.parent.top, e("document" === a.containment ? document : window).width() - this.helperProportions.width - this.margins.left, (e("document" === a.containment ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top]), /^(document|window|parent)$/.test(a.containment) || (t = e(a.containment)[0], i = e(a.containment).offset(), s = "hidden" !== e(t).css("overflow"), this.containment = [i.left + (parseInt(e(t).css("borderLeftWidth"), 10) || 0) + (parseInt(e(t).css("paddingLeft"), 10) || 0) - this.margins.left, i.top + (parseInt(e(t).css("borderTopWidth"), 10) || 0) + (parseInt(e(t).css("paddingTop"), 10) || 0) - this.margins.top, i.left + (s ? Math.max(t.scrollWidth, t.offsetWidth) : t.offsetWidth) - (parseInt(e(t).css("borderLeftWidth"), 10) || 0) - (parseInt(e(t).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left, i.top + (s ? Math.max(t.scrollHeight, t.offsetHeight) : t.offsetHeight) - (parseInt(e(t).css("borderTopWidth"), 10) || 0) - (parseInt(e(t).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top]) + }, _convertPositionTo: function(t, i) { + i || (i = this.position); + var s = "absolute" === t ? 1 : -1, a = "absolute" !== this.cssPosition || this.scrollParent[0] !== document && e.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent, n = /(html|body)/i.test(a[0].tagName); + return{top: i.top + this.offset.relative.top * s + this.offset.parent.top * s - ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : n ? 0 : a.scrollTop()) * s, left: i.left + this.offset.relative.left * s + this.offset.parent.left * s - ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : n ? 0 : a.scrollLeft()) * s} + }, _generatePosition: function(t) { + var i, s, a = this.options, n = t.pageX, r = t.pageY, o = "absolute" !== this.cssPosition || this.scrollParent[0] !== document && e.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent, h = /(html|body)/i.test(o[0].tagName); + return"relative" !== this.cssPosition || this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0] || (this.offset.relative = this._getRelativeOffset()), this.originalPosition && (this.containment && (t.pageX - this.offset.click.left < this.containment[0] && (n = this.containment[0] + this.offset.click.left), t.pageY - this.offset.click.top < this.containment[1] && (r = this.containment[1] + this.offset.click.top), t.pageX - this.offset.click.left > this.containment[2] && (n = this.containment[2] + this.offset.click.left), t.pageY - this.offset.click.top > this.containment[3] && (r = this.containment[3] + this.offset.click.top)), a.grid && (i = this.originalPageY + Math.round((r - this.originalPageY) / a.grid[1]) * a.grid[1], r = this.containment ? i - this.offset.click.top >= this.containment[1] && i - this.offset.click.top <= this.containment[3] ? i : i - this.offset.click.top >= this.containment[1] ? i - a.grid[1] : i + a.grid[1] : i, s = this.originalPageX + Math.round((n - this.originalPageX) / a.grid[0]) * a.grid[0], n = this.containment ? s - this.offset.click.left >= this.containment[0] && s - this.offset.click.left <= this.containment[2] ? s : s - this.offset.click.left >= this.containment[0] ? s - a.grid[0] : s + a.grid[0] : s)), {top: r - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : h ? 0 : o.scrollTop()), left: n - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : h ? 0 : o.scrollLeft())} + }, _rearrange: function(e, t, i, s) { + i ? i[0].appendChild(this.placeholder[0]) : t.item[0].parentNode.insertBefore(this.placeholder[0], "down" === this.direction ? t.item[0] : t.item[0].nextSibling), this.counter = this.counter ? ++this.counter : 1; + var a = this.counter; + this._delay(function() { + a === this.counter && this.refreshPositions(!s) + }) + }, _clear: function(e, t) { + function i(e, t, i) { + return function(s) { + i._trigger(e, s, t._uiHash(t)) + } + } + this.reverting = !1; + var s, a = []; + if (!this._noFinalSort && this.currentItem.parent().length && this.placeholder.before(this.currentItem), this._noFinalSort = null, this.helper[0] === this.currentItem[0]) { + for (s in this._storedCSS) + ("auto" === this._storedCSS[s] || "static" === this._storedCSS[s]) && (this._storedCSS[s] = ""); + this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper") + } else + this.currentItem.show(); + for (this.fromOutside && !t && a.push(function(e) { + this._trigger("receive", e, this._uiHash(this.fromOutside)) + }), !this.fromOutside && this.domPosition.prev === this.currentItem.prev().not(".ui-sortable-helper")[0] && this.domPosition.parent === this.currentItem.parent()[0] || t || a.push(function(e) { + this._trigger("update", e, this._uiHash()) + }), this !== this.currentContainer && (t || (a.push(function(e) { + this._trigger("remove", e, this._uiHash()) + }), a.push(function(e) { + return function(t) { + e._trigger("receive", t, this._uiHash(this)) + } + }.call(this, this.currentContainer)), a.push(function(e) { + return function(t) { + e._trigger("update", t, this._uiHash(this)) + } + }.call(this, this.currentContainer)))), s = this.containers.length - 1; s >= 0; s--) + t || a.push(i("deactivate", this, this.containers[s])), this.containers[s].containerCache.over && (a.push(i("out", this, this.containers[s])), this.containers[s].containerCache.over = 0); + if (this.storedCursor && (this.document.find("body").css("cursor", this.storedCursor), this.storedStylesheet.remove()), this._storedOpacity && this.helper.css("opacity", this._storedOpacity), this._storedZIndex && this.helper.css("zIndex", "auto" === this._storedZIndex ? "" : this._storedZIndex), this.dragging = !1, this.cancelHelperRemoval) { + if (!t) { + for (this._trigger("beforeStop", e, this._uiHash()), s = 0; a.length > s; s++) + a[s].call(this, e); + this._trigger("stop", e, this._uiHash()) + } + return this.fromOutside = !1, !1 + } + if (t || this._trigger("beforeStop", e, this._uiHash()), this.placeholder[0].parentNode.removeChild(this.placeholder[0]), this.helper[0] !== this.currentItem[0] && this.helper.remove(), this.helper = null, !t) { + for (s = 0; a.length > s; s++) + a[s].call(this, e); + this._trigger("stop", e, this._uiHash()) + } + return this.fromOutside = !1, !0 + }, _trigger: function() { + e.Widget.prototype._trigger.apply(this, arguments) === !1 && this.cancel() + }, _uiHash: function(t) { + var i = t || this; + return{helper: i.helper, placeholder: i.placeholder || e([]), position: i.position, originalPosition: i.originalPosition, offset: i.positionAbs, item: i.currentItem, sender: t ? t.element : null} + }}) +})(jQuery); diff --git a/plugins/legacy-admin/js/legacy-login-scripts.js b/plugins/legacy-admin/js/legacy-login-scripts.js new file mode 100644 index 000000000..e31507a25 --- /dev/null +++ b/plugins/legacy-admin/js/legacy-login-scripts.js @@ -0,0 +1,41 @@ +/** + * @Package: WordPress Plugin + * @Subpackage: Legacy - White Label WordPress Admin Theme + * @Since: Legacy 1.0 + * @WordPress Version: 4.0 or above + * This file is part of Legacy - White Label WordPress Admin Theme Plugin. + */ + + +jQuery(function($) { + + 'use strict'; + + var LEGACY_LOGIN_SETTINGS = window.LEGACY_LOGIN_SETTINGS || {}; + + + LEGACY_LOGIN_SETTINGS.placeholderFields = function() { + + $('#user_login').attr('placeholder', 'Username'); + $('#user_email').attr('placeholder', 'Email'); + $('#user_pass').attr('placeholder', 'Password'); + + }; + + + + /****************************** + initialize respective scripts + *****************************/ + $(document).ready(function() { + LEGACY_LOGIN_SETTINGS.placeholderFields(); + + }); + + $(window).resize(function() { + }); + + $(window).load(function() { + }); + +}); \ No newline at end of file diff --git a/plugins/legacy-admin/js/legacy-pace-script.js b/plugins/legacy-admin/js/legacy-pace-script.js new file mode 100644 index 000000000..d31a5d840 --- /dev/null +++ b/plugins/legacy-admin/js/legacy-pace-script.js @@ -0,0 +1,21 @@ +/** + * @Package: WordPress Plugin + * @Subpackage: Legacy - White Label WordPress Admin Theme + * @Since: Legacy 1.0 + * @WordPress Version: 4.0 or above + * This file is part of Legacy - White Label WordPress Admin Theme Plugin. + */ + + +/*---------------------------------- + Page loader + -----------------------------------*/ + +(function($) { + Pace.on('start', function() { + }); + Pace.on('hide', function() { + $("#wpwrap").addClass("loaded"); + }); +})(jQuery); + diff --git a/plugins/legacy-admin/js/legacy-pace.min.js b/plugins/legacy-admin/js/legacy-pace.min.js new file mode 100644 index 000000000..1a2f0d500 --- /dev/null +++ b/plugins/legacy-admin/js/legacy-pace.min.js @@ -0,0 +1,352 @@ +/** + * @Package: WordPress Plugin + * @Subpackage: Legacy - White Label WordPress Admin Theme + * @Since: Legacy 1.0 + * @WordPress Version: 4.0 or above + * This file is part of Legacy - White Label WordPress Admin Theme Plugin. + */ +/*! pace 0.5.6 */ +(function() { + var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W = [].slice, X = {}.hasOwnProperty, Y = function(a, b) { + function c() { + this.constructor = a + } + for (var d in b) + X.call(b, d) && (a[d] = b[d]); + return c.prototype = b.prototype, a.prototype = new c, a.__super__ = b.prototype, a + }, Z = [].indexOf || function(a) { + for (var b = 0, c = this.length; c > b; b++) + if (b in this && this[b] === a) + return b; + return-1 + }; + for (t = {catchupTime:500, initialRate:.03, minTime:500, ghostTime:500, maxProgressPerFrame:10, easeFactor:1.25, startOnPageLoad:!0, restartOnPushState:!0, restartOnRequestAfter:500, target:"body", elements:{checkInterval:100, selectors:["body"]}, eventLag:{minSamples:10, sampleCount:3, lagThreshold:3}, ajax:{trackMethods:["GET"], trackWebSockets:!0, ignoreURLs:[]}}, B = function() { + var a; + return null != (a = "undefined" != typeof performance && null !== performance && "function" == typeof performance.now ? performance.now() : void 0) ? a : +new Date + }, D = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame, s = window.cancelAnimationFrame || window.mozCancelAnimationFrame, null == D && (D = function(a) { + return setTimeout(a, 50) + }, s = function(a) { + return clearTimeout(a) + }), F = function(a) { + var b, c; + return b = B(), (c = function() { + var d; + return d = B() - b, d >= 33 ? (b = B(), a(d, function() { + return D(c) + })) : setTimeout(c, 33 - d) + })() + }, E = function() { + var a, b, c; + return c = arguments[0], b = arguments[1], a = 3 <= arguments.length ? W.call(arguments, 2) : [], "function" == typeof c[b] ? c[b].apply(c, a) : c[b] + }, u = function() { + var a, b, c, d, e, f, g; + for (b = arguments[0], d = 2 <= arguments.length?W.call(arguments, 1):[], f = 0, g = d.length; g > f; f++) + if (c = d[f]) + for (a in c) + X.call(c, a) && (e = c[a], null != b[a] && "object" == typeof b[a] && null != e && "object" == typeof e ? u(b[a], e) : b[a] = e); + return b + }, p = function(a) { + var b, c, d, e, f; + for (c = b = 0, e = 0, f = a.length; f > e; e++) + d = a[e], c += Math.abs(d), b++; + return c / b + }, w = function(a, b) { + var c, d, e; + if (null == a && (a = "options"), null == b && (b = !0), e = document.querySelector("[data-pace-" + a + "]")) { + if (c = e.getAttribute("data-pace-" + a), !b) + return c; + try { + return JSON.parse(c) + } catch (f) { + return d = f, "undefined" != typeof console && null !== console ? console.error("Error parsing inline pace options", d) : void 0 + } + } + }, g = function() { + function a() { + } + return a.prototype.on = function(a, b, c, d) { + var e; + return null == d && (d = !1), null == this.bindings && (this.bindings = {}), null == (e = this.bindings)[a] && (e[a] = []), this.bindings[a].push({handler: b, ctx: c, once: d}) + }, a.prototype.once = function(a, b, c) { + return this.on(a, b, c, !0) + }, a.prototype.off = function(a, b) { + var c, d, e; + if (null != (null != (d = this.bindings) ? d[a] : void 0)) { + if (null == b) + return delete this.bindings[a]; + for (c = 0, e = []; c < this.bindings[a].length; ) + e.push(this.bindings[a][c].handler === b ? this.bindings[a].splice(c, 1) : c++); + return e + } + }, a.prototype.trigger = function() { + var a, b, c, d, e, f, g, h, i; + if (c = arguments[0], a = 2 <= arguments.length ? W.call(arguments, 1) : [], null != (g = this.bindings) ? g[c] : void 0) { + for (e = 0, i = []; e < this.bindings[c].length; ) + h = this.bindings[c][e], d = h.handler, b = h.ctx, f = h.once, d.apply(null != b ? b : this, a), i.push(f ? this.bindings[c].splice(e, 1) : e++); + return i + } + }, a + }(), null == window.Pace && (window.Pace = {}), u(Pace, g.prototype), C = Pace.options = u({}, t, window.paceOptions, w()), T = ["ajax", "document", "eventLag", "elements"], P = 0, R = T.length; R > P; P++) + J = T[P], C[J] === !0 && (C[J] = t[J]); + i = function(a) { + function b() { + return U = b.__super__.constructor.apply(this, arguments) + } + return Y(b, a), b + }(Error), b = function() { + function a() { + this.progress = 0 + } + return a.prototype.getElement = function() { + var a; + if (null == this.el) { + if (a = document.querySelector(C.target), !a) + throw new i; + this.el = document.createElement("div"), this.el.className = "pace pace-active", document.body.className = document.body.className.replace(/pace-done/g, ""), document.body.className += " pace-running", this.el.innerHTML = '
    \n
    \n
    \n
    ', null != a.firstChild ? a.insertBefore(this.el, a.firstChild) : a.appendChild(this.el) + } + return this.el + }, a.prototype.finish = function() { + var a; + return a = this.getElement(), a.className = a.className.replace("pace-active", ""), a.className += " pace-inactive", document.body.className = document.body.className.replace("pace-running", ""), document.body.className += " pace-done" + }, a.prototype.update = function(a) { + return this.progress = a, this.render() + }, a.prototype.destroy = function() { + try { + this.getElement().parentNode.removeChild(this.getElement()) + } catch (a) { + i = a + } + return this.el = void 0 + }, a.prototype.render = function() { + var a, b; + return null == document.querySelector(C.target) ? !1 : (a = this.getElement(), a.children[0].style.width = "" + this.progress + "%", (!this.lastRenderedProgress || this.lastRenderedProgress | 0 !== this.progress | 0) && (a.children[0].setAttribute("data-progress-text", "" + (0 | this.progress) + "%"), this.progress >= 100 ? b = "99" : (b = this.progress < 10 ? "0" : "", b += 0 | this.progress), a.children[0].setAttribute("data-progress", "" + b)), this.lastRenderedProgress = this.progress) + }, a.prototype.done = function() { + return this.progress >= 100 + }, a + }(), h = function() { + function a() { + this.bindings = {} + } + return a.prototype.trigger = function(a, b) { + var c, d, e, f, g; + if (null != this.bindings[a]) { + for (f = this.bindings[a], g = [], d = 0, e = f.length; e > d; d++) + c = f[d], g.push(c.call(this, b)); + return g + } + }, a.prototype.on = function(a, b) { + var c; + return null == (c = this.bindings)[a] && (c[a] = []), this.bindings[a].push(b) + }, a + }(), O = window.XMLHttpRequest, N = window.XDomainRequest, M = window.WebSocket, v = function(a, b) { + var c, d, e, f; + f = []; + for (d in b.prototype) + try { + e = b.prototype[d], f.push(null == a[d] && "function" != typeof e ? a[d] = e : void 0) + } catch (g) { + c = g + } + return f + }, z = [], Pace.ignore = function() { + var a, b, c; + return b = arguments[0], a = 2 <= arguments.length ? W.call(arguments, 1) : [], z.unshift("ignore"), c = b.apply(null, a), z.shift(), c + }, Pace.track = function() { + var a, b, c; + return b = arguments[0], a = 2 <= arguments.length ? W.call(arguments, 1) : [], z.unshift("track"), c = b.apply(null, a), z.shift(), c + }, I = function(a) { + var b; + if (null == a && (a = "GET"), "track" === z[0]) + return"force"; + if (!z.length && C.ajax) { + if ("socket" === a && C.ajax.trackWebSockets) + return!0; + if (b = a.toUpperCase(), Z.call(C.ajax.trackMethods, b) >= 0) + return!0 + } + return!1 + }, j = function(a) { + function b() { + var a, c = this; + b.__super__.constructor.apply(this, arguments), a = function(a) { + var b; + return b = a.open, a.open = function(d, e) { + return I(d) && c.trigger("request", {type: d, url: e, request: a}), b.apply(a, arguments) + } + }, window.XMLHttpRequest = function(b) { + var c; + return c = new O(b), a(c), c + }; + try { + v(window.XMLHttpRequest, O) + } catch (d) { + } + if (null != N) { + window.XDomainRequest = function() { + var b; + return b = new N, a(b), b + }; + try { + v(window.XDomainRequest, N) + } catch (d) { + } + } + if (null != M && C.ajax.trackWebSockets) { + window.WebSocket = function(a, b) { + var d; + return d = null != b ? new M(a, b) : new M(a), I("socket") && c.trigger("request", {type: "socket", url: a, protocols: b, request: d}), d + }; + try { + v(window.WebSocket, M) + } catch (d) { + } + } + } + return Y(b, a), b + }(h), Q = null, x = function() { + return null == Q && (Q = new j), Q + }, H = function(a) { + var b, c, d, e; + for (e = C.ajax.ignoreURLs, c = 0, d = e.length; d > c; c++) + if (b = e[c], "string" == typeof b) { + if (-1 !== a.indexOf(b)) + return!0 + } else if (b.test(a)) + return!0; + return!1 + }, x().on("request", function(b) { + var c, d, e, f, g; + return f = b.type, e = b.request, g = b.url, H(g) ? void 0 : Pace.running || C.restartOnRequestAfter === !1 && "force" !== I(f) ? void 0 : (d = arguments, c = C.restartOnRequestAfter || 0, "boolean" == typeof c && (c = 0), setTimeout(function() { + var b, c, g, h, i, j; + if (b = "socket" === f ? e.readyState < 2 : 0 < (h = e.readyState) && 4 > h) { + for (Pace.restart(), i = Pace.sources, j = [], c = 0, g = i.length; g > c; c++) { + if (J = i[c], J instanceof a) { + J.watch.apply(J, d); + break + } + j.push(void 0) + } + return j + } + }, c)) + }), a = function() { + function a() { + var a = this; + this.elements = [], x().on("request", function() { + return a.watch.apply(a, arguments) + }) + } + return a.prototype.watch = function(a) { + var b, c, d, e; + return d = a.type, b = a.request, e = a.url, H(e) ? void 0 : (c = "socket" === d ? new m(b) : new n(b), this.elements.push(c)) + }, a + }(), n = function() { + function a(a) { + var b, c, d, e, f, g, h = this; + if (this.progress = 0, null != window.ProgressEvent) + for (c = null, a.addEventListener("progress", function(a) { + return h.progress = a.lengthComputable ? 100 * a.loaded / a.total : h.progress + (100 - h.progress) / 2 + }), g = ["load", "abort", "timeout", "error"], d = 0, e = g.length; e > d; d++) + b = g[d], a.addEventListener(b, function() { + return h.progress = 100 + }); + else + f = a.onreadystatechange, a.onreadystatechange = function() { + var b; + return 0 === (b = a.readyState) || 4 === b ? h.progress = 100 : 3 === a.readyState && (h.progress = 50), "function" == typeof f ? f.apply(null, arguments) : void 0 + } + } + return a + }(), m = function() { + function a(a) { + var b, c, d, e, f = this; + for (this.progress = 0, e = ["error", "open"], c = 0, d = e.length; d > c; c++) + b = e[c], a.addEventListener(b, function() { + return f.progress = 100 + }) + } + return a + }(), d = function() { + function a(a) { + var b, c, d, f; + for (null == a && (a = {}), this.elements = [], null == a.selectors && (a.selectors = []), f = a.selectors, c = 0, d = f.length; d > c; c++) + b = f[c], this.elements.push(new e(b)) + } + return a + }(), e = function() { + function a(a) { + this.selector = a, this.progress = 0, this.check() + } + return a.prototype.check = function() { + var a = this; + return document.querySelector(this.selector) ? this.done() : setTimeout(function() { + return a.check() + }, C.elements.checkInterval) + }, a.prototype.done = function() { + return this.progress = 100 + }, a + }(), c = function() { + function a() { + var a, b, c = this; + this.progress = null != (b = this.states[document.readyState]) ? b : 100, a = document.onreadystatechange, document.onreadystatechange = function() { + return null != c.states[document.readyState] && (c.progress = c.states[document.readyState]), "function" == typeof a ? a.apply(null, arguments) : void 0 + } + } + return a.prototype.states = {loading: 0, interactive: 50, complete: 100}, a + }(), f = function() { + function a() { + var a, b, c, d, e, f = this; + this.progress = 0, a = 0, e = [], d = 0, c = B(), b = setInterval(function() { + var g; + return g = B() - c - 50, c = B(), e.push(g), e.length > C.eventLag.sampleCount && e.shift(), a = p(e), ++d >= C.eventLag.minSamples && a < C.eventLag.lagThreshold ? (f.progress = 100, clearInterval(b)) : f.progress = 100 * (3 / (a + 3)) + }, 50) + } + return a + }(), l = function() { + function a(a) { + this.source = a, this.last = this.sinceLastUpdate = 0, this.rate = C.initialRate, this.catchup = 0, this.progress = this.lastProgress = 0, null != this.source && (this.progress = E(this.source, "progress")) + } + return a.prototype.tick = function(a, b) { + var c; + return null == b && (b = E(this.source, "progress")), b >= 100 && (this.done = !0), b === this.last ? this.sinceLastUpdate += a : (this.sinceLastUpdate && (this.rate = (b - this.last) / this.sinceLastUpdate), this.catchup = (b - this.progress) / C.catchupTime, this.sinceLastUpdate = 0, this.last = b), b > this.progress && (this.progress += this.catchup * a), c = 1 - Math.pow(this.progress / 100, C.easeFactor), this.progress += c * this.rate * a, this.progress = Math.min(this.lastProgress + C.maxProgressPerFrame, this.progress), this.progress = Math.max(0, this.progress), this.progress = Math.min(100, this.progress), this.lastProgress = this.progress, this.progress + }, a + }(), K = null, G = null, q = null, L = null, o = null, r = null, Pace.running = !1, y = function() { + return C.restartOnPushState ? Pace.restart() : void 0 + }, null != window.history.pushState && (S = window.history.pushState, window.history.pushState = function() { + return y(), S.apply(window.history, arguments) + }), null != window.history.replaceState && (V = window.history.replaceState, window.history.replaceState = function() { + return y(), V.apply(window.history, arguments) + }), k = {ajax: a, elements: d, document: c, eventLag: f}, (A = function() { + var a, c, d, e, f, g, h, i; + for (Pace.sources = K = [], g = ["ajax", "elements", "document", "eventLag"], c = 0, e = g.length; e > c; c++) + a = g[c], C[a] !== !1 && K.push(new k[a](C[a])); + for (i = null != (h = C.extraSources)?h:[], d = 0, f = i.length; f > d; d++) + J = i[d], K.push(new J(C)); + return Pace.bar = q = new b, G = [], L = new l + })(), Pace.stop = function() { + return Pace.trigger("stop"), Pace.running = !1, q.destroy(), r = !0, null != o && ("function" == typeof s && s(o), o = null), A() + }, Pace.restart = function() { + return Pace.trigger("restart"), Pace.stop(), Pace.start() + }, Pace.go = function() { + var a; + return Pace.running = !0, q.render(), a = B(), r = !1, o = F(function(b, c) { + var d, e, f, g, h, i, j, k, m, n, o, p, s, t, u, v; + for (k = 100 - q.progress, e = o = 0, f = !0, i = p = 0, t = K.length; t > p; i = ++p) + for (J = K[i], n = null != G[i]?G[i]:G[i] = [], h = null != (v = J.elements)?v:[J], j = s = 0, u = h.length; u > s; j = ++s) + g = h[j], m = null != n[j] ? n[j] : n[j] = new l(g), f &= m.done, m.done || (e++, o += m.tick(b)); + return d = o / e, q.update(L.tick(b, d)), q.done() || f || r ? (q.update(100), Pace.trigger("done"), setTimeout(function() { + return q.finish(), Pace.running = !1, Pace.trigger("hide") + }, Math.max(C.ghostTime, Math.max(C.minTime - (B() - a), 0)))) : c() + }) + }, Pace.start = function(a) { + u(C, a), Pace.running = !0; + try { + q.render() + } catch (b) { + i = b + } + return document.querySelector(".pace") ? (Pace.trigger("start"), Pace.go()) : setTimeout(Pace.start, 50) + }, "function" == typeof define && define.amd ? define(function() { + return Pace + }) : "object" == typeof exports ? module.exports = Pace : C.startOnPageLoad && Pace.start() +}).call(this); \ No newline at end of file diff --git a/plugins/legacy-admin/js/legacy-scripts-menu-management.js b/plugins/legacy-admin/js/legacy-scripts-menu-management.js new file mode 100644 index 000000000..b059938ff --- /dev/null +++ b/plugins/legacy-admin/js/legacy-scripts-menu-management.js @@ -0,0 +1,260 @@ +/** + * @Package: WordPress Plugin + * @Subpackage: Legacy - White Label WordPress Admin Theme + * @Since: Legacy 1.0 + * @WordPress Version: 4.0 or above + * This file is part of Legacy - White Label WordPress Admin Theme Plugin. + */ + + +jQuery(function($) { + + 'use strict'; + + var LEGACY_MENUMNG_SETTINGS = window.LEGACY_MENUMNG_SETTINGS || {}; + + + + LEGACY_MENUMNG_SETTINGS.iconPanel = function(e) { + + $(document).on("click",".legacyicon",function(e) { + e.stopPropagation(); + var panel = $(this).parent().find(".legacyiconpanel"); + var iconstr = $(".legacyicons").html(); + panel.html(""); + panel.append(iconstr); + panel.show(); + }); + + + }; + + + + + LEGACY_MENUMNG_SETTINGS.menuToggle = function() { + + $(document).on("click",".legacytoggle",function(e) { + + var id = $(this).parent().attr("data-id"); + + if ($(this).hasClass("plus")) { + $(this).removeClass("plus dashicons-plus").addClass("minus dashicons-minus"); + //$(this).html("-"); + $(this).parent().parent().find(".legacymenupanel").removeClass("closed").addClass("opened"); + } else if ($(this).hasClass("minus")) { + $(this).removeClass("minus dashicons-minus").addClass("plus dashicons-plus"); + //$(this).html("+"); + $(this).parent().parent().find(".legacymenupanel").removeClass("opened").addClass("closed"); + } + + }); + + + $(document).on("click",".legacysubtoggle",function(e) { + + var id = $(this).parent().attr("data-id"); + + if ($(this).hasClass("plus")) { + $(this).removeClass("plus dashicons-plus").addClass("minus dashicons-minus"); + //$(this).html("-"); + $(this).parent().parent().find(".legacysubmenupanel").removeClass("closed").addClass("opened"); + } else if ($(this).hasClass("minus")) { + $(this).removeClass("minus dashicons-minus").addClass("plus dashicons-plus"); + //$(this).html("+"); + $(this).parent().parent().find(".legacysubmenupanel").removeClass("opened").addClass("closed"); + } + + }); + + + }; + + LEGACY_MENUMNG_SETTINGS.saveMenu = function() { + + $(document).on('click', '#legacy-savemenu', function(e){ + var neworder = ""; + var newsuborder = ""; + var menurename = ""; + var submenurename = ""; + var menudisable = ""; + var submenudisable = ""; + + $(".legacymenu").each(function() { + var id = $(this).attr("data-id"); + var menuid = $(this).attr("data-menu-id"); + neworder += menuid + "|"; + if ($(this).hasClass("disabled")) { + menudisable += menuid + "|"; + } + }); + + $(".legacysubmenu").each(function() { + var id = $(this).attr("data-id"); + var parentpage = $(this).attr("data-parent-page"); + newsuborder += parentpage + ":" + id + "|"; + if ($(this).hasClass("disabled")) { + submenudisable += parentpage + ":" + id + "|"; + } + }); + + $(".legacy-menurename").each(function() { + var id = $(this).attr("data-id"); + var sid = $(this).attr("data-menu-id"); + var val = $(this).val(); + var icon = $(this).parent().parent().find(".legacy-menuicon").attr("value"); + //console.log(icon); + menurename += id + ":" + sid + "@!@%@" + val + "[$!&!$]" + icon + "|#$%*|"; + }); + + + $(".legacy-submenurename").each(function() { + var id = $(this).attr("data-id"); + var parent = $(this).attr("data-parent-id"); + var parentpage = $(this).attr("data-parent-page"); + var val = $(this).val(); + submenurename += parentpage + "[($&)]" + parent + ":" + id + "@!@%@" + val + "|#$%*|"; + }); + + + + var action = 'legacy_savemenu'; + var data = { + neworder: neworder, + newsuborder: newsuborder, + menurename: menurename, + submenurename: submenurename, + menudisable: menudisable, + submenudisable: submenudisable, + action: action, + legacy_nonce: legacy_vars.legacy_nonce + }; + + $.post(ajaxurl, data, function(response) { + location.reload(); + //console.log(response); + }); + + return false; + + }); + + }; + + + LEGACY_MENUMNG_SETTINGS.resetMenu = function() { + + + $(document).on('click', '#legacy-resetmenu', function(e){ + + var action = 'legacy_resetmenu'; + var data = { + action: action, + legacy_nonce: legacy_vars.legacy_nonce + }; + + $.post(ajaxurl, data, function(response) { + location.reload(); + //console.log(response); + }); + + return false; + + }); + + }; + + + + + + + LEGACY_MENUMNG_SETTINGS.menuDisplay = function() { + + $(document).on('click', '.legacydisplay, .legacysubdisplay', function(e){ + + //var id = $(this).parent().attr("data-id"); + + if ($(this).hasClass("disable")) { + $(this).removeClass("disable").addClass("enable"); + //$(this).html("show"); + $(this).parent().parent().removeClass("enabled").addClass("disabled"); + } else if ($(this).hasClass("enable")) { + $(this).removeClass("enable").addClass("disable"); + //$(this).html("hide"); + $(this).parent().parent().removeClass("disabled").addClass("enabled"); + } + + }); + + }; + + + /****************************** + initialize respective scripts + *****************************/ + $(document).ready(function() { + + LEGACY_MENUMNG_SETTINGS.menuToggle(); + LEGACY_MENUMNG_SETTINGS.saveMenu(); + LEGACY_MENUMNG_SETTINGS.menuDisplay(); + LEGACY_MENUMNG_SETTINGS.iconPanel(); + LEGACY_MENUMNG_SETTINGS.resetMenu(); + }); + + $(window).resize(function() { + + }); + + $(window).load(function() { + + }); + +}); + + +jQuery(function($) { + if ($.isFunction($.fn.sortable)) { + $("#legacy-enabled, #legacy-disabled").sortable({ + connectWith: ".legacy-connectedSortable", + handle: ".legacymenu-wrap", + cancel: ".legacytoggle", + placeholder: "ui-state-highlight", + }).disableSelection(); + } +}); + + +jQuery(function($) { + if ($.isFunction($.fn.sortable)) { + $(".legacysubmenu-wrap").sortable({ + placeholder: "ui-state-highlight", + }).disableSelection(); + } +}); + + +jQuery(function($) { + $(document).ready(function() { + $(document).on('click', ".pickicon", function() { + var clss = $(this).attr("data-class"); + var prnt = $(this).parent().parent(); + //console.log(clss); + prnt.find("input").attr("value", clss); + prnt.find("input").val(clss); + var main = prnt.find(".legacymenuicon"); + main.removeClass(main.attr("data-class")).addClass(clss); + main.attr("data-class", clss); + return false; + }); + + $(document).on('click', "body", function() { + $(".legacyiconpanel").hide(); + //return false; + }); + + + + + }); +}); diff --git a/plugins/legacy-admin/js/legacy-scripts.js b/plugins/legacy-admin/js/legacy-scripts.js new file mode 100644 index 000000000..3cffd9b34 --- /dev/null +++ b/plugins/legacy-admin/js/legacy-scripts.js @@ -0,0 +1,171 @@ +/** + * @Package: WordPress Plugin + * @Subpackage: Legacy - White Label WordPress Admin Theme + * @Since: Legacy 1.0 + * @WordPress Version: 4.0 or above + * This file is part of Legacy - White Label WordPress Admin Theme Plugin. + */ + + +jQuery(function($) { + + 'use strict'; + + var LEGACY_SETTINGS = window.LEGACY_SETTINGS || {}; + + + /****************************** + Menu resizer + *****************************/ + LEGACY_SETTINGS.menuResizer = function() { + var menuWidth = $("#adminmenuwrap").width(); + if ($("#adminmenuwrap").is(":hidden")) { + $("body").addClass("menu-hidden"); + $("body").removeClass("menu-expanded"); + $("body").removeClass("menu-collapsed"); + } + else if (menuWidth > 46) { + $("body").addClass("menu-expanded"); + $("body").removeClass("menu-hidden"); + $("body").removeClass("menu-collapsed"); + } else { + $("body").addClass("menu-collapsed"); + $("body").removeClass("menu-expanded"); + $("body").removeClass("menu-hidden"); + } + + LEGACY_SETTINGS.menuConnectionLine(); + + }; + + LEGACY_SETTINGS.menuClickResize = function() { + $(document).on('click', '#collapse-menu, #wp-admin-bar-menu-toggle', function(e){ + var menuWidth = $("#adminmenuwrap").width(); + if ($("#adminmenuwrap").is(":hidden")) { + $("body").addClass("menu-hidden"); + $("body").removeClass("menu-expanded"); + $("body").removeClass("menu-collapsed"); + } + else if (menuWidth > 46) { + $("body").addClass("menu-expanded"); + $("body").removeClass("menu-hidden"); + $("body").removeClass("menu-collapsed"); + } else { + $("body").addClass("menu-collapsed"); + $("body").removeClass("menu-expanded"); + $("body").removeClass("menu-hidden"); + } + }); + }; + + LEGACY_SETTINGS.logoURL = function() { + + $("#adminmenuwrap").prepend("
    "); + + $(document).on('click', '#adminmenuwrap .logo-overlay', function(e){ + var logourl = $("#legacy-logourl").attr("data-value"); + if (logourl != "") { + window.location = logourl; + } + }); + }; + + + + LEGACY_SETTINGS.menuConnectionLinecall = function() { + + + $("#wp-admin-bar-menu-toggle").click(function(e) { + LEGACY_SETTINGS.menuConnectionLine(); + }); + + }; + + + + LEGACY_SETTINGS.menuConnectionLine = function() { + + + + var mainmenu = ($("#adminmenu").height() - $("li#collapse-menu").height()) / 2; + //$("#adminmenu:before, #adminmenu:after").css('height', +mainmenu + 'px'); + $('').appendTo('head'); + //console.log(mainmenu); + $("li.wp-has-submenu").each(function() { + var id = $(this).attr("id"); + + if ($("body").hasClass("folded") || $("body").hasClass("menu-collapsed")) { + var subheight = ($(this).find(".wp-submenu").height() - 49) / 2; + } else { + var subheight = ($(this).find(".wp-submenu").height()) / 2; + } + + var str = ""; + str += "li#" + id + " .wp-submenu:before, li#" + id + " .wp-submenu:after { height: " + subheight + "px !important;} "; + str += "li#" + id + " .wp-submenu:after { top: " + subheight + "px !important;} "; + str += ".folded li#" + id + " .wp-submenu:before, .folded li#" + id + " .wp-submenu:after { height: " + subheight + "px !important;} "; + str += ".folded li#" + id + " .wp-submenu:after { top: " + (subheight + 49) + "px !important;} "; + + $('').appendTo('head'); + }); + + }; + + + + LEGACY_SETTINGS.alternateSave = function() { + $(".legacy_save_new").on('click', function(e) { + legacy_ajaxsavestep(1); + console.log("alternate save it"); + //e.preventDefault(); + return false; + }); + + }; + + + + function legacy_ajaxsavestep(stepid) { + + var opt1 = $("#legacy_demo-dynamic-css-type .redux-image-select-selected input").val(); + var str = $("#legacy_demo-primary-color").find(".wp-color-result").attr("style") + ";" +$("#login-input-bg-opacity").val() +";"+ opt1; + + //alert(str); exit; + var action = 'legacy_alternate_save'; + var data = { + values: str, + action: action, + legacy_nonce: legacy_vars.legacy_nonce + }; + + $.post(ajaxurl, data, function(response) { + //alert(response); + $('.alternate_save_response').html(response); + + }); + + return false; + } + + /****************************** + initialize respective scripts + *****************************/ + $(document).ready(function() { + LEGACY_SETTINGS.menuResizer(); + LEGACY_SETTINGS.menuClickResize(); + LEGACY_SETTINGS.logoURL(); + LEGACY_SETTINGS.menuConnectionLinecall(); + LEGACY_SETTINGS.menuConnectionLine(); + }); + + $(window).resize(function() { + LEGACY_SETTINGS.menuResizer(); + LEGACY_SETTINGS.menuClickResize(); + }); + + $(window).load(function() { + LEGACY_SETTINGS.menuResizer(); + LEGACY_SETTINGS.menuClickResize(); + }); + +}); \ No newline at end of file diff --git a/plugins/legacy-admin/js/legacy-smoothscroll.min.js b/plugins/legacy-admin/js/legacy-smoothscroll.min.js new file mode 100644 index 000000000..12739938d --- /dev/null +++ b/plugins/legacy-admin/js/legacy-smoothscroll.min.js @@ -0,0 +1 @@ +!function(){var s,i,c,a,o={frameRate:150,animationTime:400,stepSize:100,pulseAlgorithm:!0,pulseScale:4,pulseNormalize:1,accelerationDelta:50,accelerationMax:3,keyboardSupport:!0,arrowScroll:50,fixedBackground:!0,excluded:""},p=o,u=!1,d=!1,n={x:0,y:0},f=!1,m=document.documentElement,l=[],h=/^Mac/.test(navigator.platform),w={left:37,up:38,right:39,down:40,spacebar:32,pageup:33,pagedown:34,end:35,home:36},v={37:1,38:1,39:1,40:1};function y(){if(!f&&document.body){f=!0;var e=document.body,t=document.documentElement,o=window.innerHeight,n=e.scrollHeight;if(m=0<=document.compatMode.indexOf("CSS")?t:e,s=e,p.keyboardSupport&&Y("keydown",x),top!=self)d=!0;else if(Q&&o=p.animationTime,c=i?1:l/p.animationTime;p.pulseAlgorithm&&(c=F(c));var s=a.x*c-a.lastX>>0,u=a.y*c-a.lastY>>0;o+=s,n+=u,a.lastX+=s,a.lastY+=u,i&&(b.splice(r,1),r--)}h?window.scrollBy(o,n):(o&&(d.scrollLeft+=o),n&&(d.scrollTop+=n)),f||m||(b=[]),b.length?j(w,d,1e3/p.frameRate+1):(g=!1,null!=d.$scrollBehavior&&(d.style.scrollBehavior=d.$scrollBehavior,d.$scrollBehavior=null))};j(w,d,0),g=!0}}function e(e){f||y();var t=e.target;if(e.defaultPrevented||e.ctrlKey)return!0;if(N(s,"embed")||N(t,"embed")&&/\.pdf/i.test(t.src)||N(s,"object")||t.shadowRoot)return!0;var o=-e.wheelDeltaX||e.deltaX||0,n=-e.wheelDeltaY||e.deltaY||0;h&&(e.wheelDeltaX&&K(e.wheelDeltaX,120)&&(o=e.wheelDeltaX/Math.abs(e.wheelDeltaX)*-120),e.wheelDeltaY&&K(e.wheelDeltaY,120)&&(n=e.wheelDeltaY/Math.abs(e.wheelDeltaY)*-120)),o||n||(n=-e.wheelDelta||0),1===e.deltaMode&&(o*=40,n*=40);var r=z(t);return r?!!function(e){if(!e)return;l.length||(l=[e,e,e]);e=Math.abs(e),l.push(e),l.shift(),clearTimeout(a),a=setTimeout(function(){try{localStorage.SS_deltaBuffer=l.join(",")}catch(e){}},1e3);var t=120add_item( array( + 'id' => 11272219, + 'basename' => plugin_basename( __FILE__ ) + ) ); + +} + + + +/* --------------- Registration Hook Library---------------- */ +require_once( trailingslashit(dirname(__FILE__)) . 'lib/legacy-register-hook.php' ); +register_activation_hook(__FILE__, 'legacy_admin_activation'); +register_deactivation_hook(__FILE__, 'legacy_admin_deactivation'); +?> \ No newline at end of file diff --git a/plugins/legacy-admin/lib/envato-plugin-update.php b/plugins/legacy-admin/lib/envato-plugin-update.php new file mode 100644 index 000000000..40a3e3d50 --- /dev/null +++ b/plugins/legacy-admin/lib/envato-plugin-update.php @@ -0,0 +1,203 @@ +items[] = $item; + + } + + + function admin_init() { + + if ( ! defined( 'EWPT_PLUGIN_SLUG' ) ) + return; + + // Make sure that any items have been registered + if ( empty( $this->items ) ) + return; + + $this->options = wp_parse_args( + get_option( EWPT_PLUGIN_SLUG ), + array( + 'user_name' => null, + 'api_key' => null + ) + ); + + $this->protected_api = new Envato_Protected_API( + $this->options['user_name'], + $this->options['api_key'] + ); + + add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_plugin_updates' ) ); + + add_filter( 'plugins_api', array( $this, 'plugins_api' ), 10, 3 ); + + } + + + function wp_list_plugins( $allow_cache = true, $timeout = 300 ) { + + return $this->protected_api->private_user_data( + 'wp-list-plugins', + $this->options['user_name'], + '', + $allow_cache, + $timeout + ); + + } + + + function get_items_by( $key = 'id' ) { + + $assoc = array(); + + foreach ( $this->items as $item ) + if ( isset( $item[ $key ] ) ) + $assoc[ $item[ $key ] ] = $item; + + return $assoc; + + } + + + function check_plugin_updates( $plugins ) { + + if ( ! isset( $plugins->checked ) ) + return $plugins; + + $user_plugins = $this->wp_list_plugins(); + $items = $this->get_items_by(); + + if ( empty( $user_plugins ) ) + return $plugins; + + foreach ( $user_plugins as $user_plugin ) { + + // Check if this item has been registered for automatic updates + if ( ! isset( $items[ $user_plugin->item_id ] ) ) + continue; + + $item_basename = $items[ $user_plugin->item_id ]['basename']; + + // Check if user has purchased this item + if ( array_key_exists( $user_plugin->item_id, $items ) && isset( $plugins->checked[ $item_basename ] ) ) { + + // Check if an update is available + if ( version_compare( $user_plugin->version, $plugins->checked[ $item_basename ], '>' ) ) { + + // Get the update zip file + $update_zip = $this->protected_api->wp_download( $user_plugin->item_id ); + + if ( ! $update_zip || empty( $update_zip ) ) + continue; + + $plugins->response[ $item_basename ] = (object) array( + 'id' => 'envato-' . $user_plugin->item_id, + 'slug' => 'envato-' . $user_plugin->item_id, + 'plugin' => $item_basename, + 'new_version' => $user_plugin->version, + 'upgrade_notice' => null, + 'url' => null, + 'package' => $update_zip + ); + + } + + } + + } + + return $plugins; + + } + + + function plugins_api( $res, $action, $args ) { + + $items = $this->get_items_by(); + + if ( 'plugin_information' == $action && isset( $args->slug ) && stristr( $args->slug, 'envato-' ) ) { + + // Get item ID out of "envato-NNNN" + $item_id = str_replace( 'envato-', '', $args->slug ); + + foreach ( $items as $item ) { + + if ( $item['id'] == $item_id ) { + + $item_details = $this->protected_api->item_details( $item_id ); + + if ( ! $item_details ) + return new WP_Error( + 'plugins_api_envato_failed', + __( 'Failed to retreive plugin details from the Envato API.' ) + ); + + return (object) array( + 'name' => $item_details->item, + 'sections' => array( + 'changelog' => sprintf( + '

    %s

    ', + sprintf( + __( 'New version of %s is available.' ), + esc_html( $item_details->item ) + ) + ), + ), + 'version' => null, + 'author' => $item_details->user, + 'requires' => null, + 'tested' => null, + 'homepage' => $item_details->url, + 'downloaded' => $item_details->sales, + 'slug' => 'envato-' . $item_id, + 'last_updated' => $item_details->last_update + ); + + } + } + + } + + return $res; + + } + +} + +endif; // class_exists + diff --git a/plugins/legacy-admin/lib/legacy-color-lib.php b/plugins/legacy-admin/lib/legacy-color-lib.php new file mode 100644 index 000000000..9fa9c9eea --- /dev/null +++ b/plugins/legacy-admin/lib/legacy-color-lib.php @@ -0,0 +1,197 @@ + +> 0x10); + $g = 0xFF & ($RGB >> 0x8); + $b = 0xFF & $RGB; + + $r = dechex($r); + $g = dechex($g); + $b = dechex($b); + + return "#" . str_pad($r, 2, "0", STR_PAD_LEFT) . str_pad($g, 2, "0", STR_PAD_LEFT) . str_pad($b, 2, "0", STR_PAD_LEFT); +} + +function legacy_ChangeLuminosity($RGB, $LuminosityPercent) { + $HSL = legacy_RGBToHSL($RGB); + $NewHSL = (int) (((float) $LuminosityPercent / 100) * 255) + (0xFFFF00 & $HSL); + return legacy_HSLToRGB($NewHSL); +} + +function legacy_RGBToHSL($RGB) { + $r = 0xFF & ($RGB >> 0x10); + $g = 0xFF & ($RGB >> 0x8); + $b = 0xFF & $RGB; + + $r = ((float) $r) / 255.0; + $g = ((float) $g) / 255.0; + $b = ((float) $b) / 255.0; + + $maxC = max($r, $g, $b); + $minC = min($r, $g, $b); + + $l = ($maxC + $minC) / 2.0; + + if ($maxC == $minC) { + $s = 0; + $h = 0; + } else { + if ($l < .5) { + $s = ($maxC - $minC) / ($maxC + $minC); + } else { + $s = ($maxC - $minC) / (2.0 - $maxC - $minC); + } + if ($r == $maxC) + $h = ($g - $b) / ($maxC - $minC); + if ($g == $maxC) + $h = 2.0 + ($b - $r) / ($maxC - $minC); + if ($b == $maxC) + $h = 4.0 + ($r - $g) / ($maxC - $minC); + + $h = $h / 6.0; + } + + $h = (int) round(255.0 * $h); + $s = (int) round(255.0 * $s); + $l = (int) round(255.0 * $l); + + $HSL = $l + ($s << 0x8) + ($h << 0x10); + return $HSL; +} + +function legacy_HSLToRGB($HSL) { + $h = 0xFF & ($HSL >> 0x10); + $s = 0xFF & ($HSL >> 0x8); + $l = 0xFF & $HSL; + + $h = ((float) $h) / 255.0; + $s = ((float) $s) / 255.0; + $l = ((float) $l) / 255.0; + + if ($s == 0) { + $r = $l; + $g = $l; + $b = $l; + } else { + if ($l < .5) { + $t2 = $l * (1.0 + $s); + } else { + $t2 = ($l + $s) - ($l * $s); + } + $t1 = 2.0 * $l - $t2; + + $rt3 = $h + 1.0 / 3.0; + $gt3 = $h; + $bt3 = $h - 1.0 / 3.0; + + if ($rt3 < 0) + $rt3 += 1.0; + if ($rt3 > 1) + $rt3 -= 1.0; + if ($gt3 < 0) + $gt3 += 1.0; + if ($gt3 > 1) + $gt3 -= 1.0; + if ($bt3 < 0) + $bt3 += 1.0; + if ($bt3 > 1) + $bt3 -= 1.0; + + if (6.0 * $rt3 < 1) + $r = $t1 + ($t2 - $t1) * 6.0 * $rt3; + elseif (2.0 * $rt3 < 1) + $r = $t2; + elseif (3.0 * $rt3 < 2) + $r = $t1 + ($t2 - $t1) * ((2.0 / 3.0) - $rt3) * 6.0; + else + $r = $t1; + + if (6.0 * $gt3 < 1) + $g = $t1 + ($t2 - $t1) * 6.0 * $gt3; + elseif (2.0 * $gt3 < 1) + $g = $t2; + elseif (3.0 * $gt3 < 2) + $g = $t1 + ($t2 - $t1) * ((2.0 / 3.0) - $gt3) * 6.0; + else + $g = $t1; + + if (6.0 * $bt3 < 1) + $b = $t1 + ($t2 - $t1) * 6.0 * $bt3; + elseif (2.0 * $bt3 < 1) + $b = $t2; + elseif (3.0 * $bt3 < 2) + $b = $t1 + ($t2 - $t1) * ((2.0 / 3.0) - $bt3) * 6.0; + else + $b = $t1; + } + + $r = (int) round(255.0 * $r); + $g = (int) round(255.0 * $g); + $b = (int) round(255.0 * $b); + + $RGB = $b + ($g << 0x8) + ($r << 0x10); + return $RGB; +} + +?> \ No newline at end of file diff --git a/plugins/legacy-admin/lib/legacy-css-lib.php b/plugins/legacy-admin/lib/legacy-css-lib.php new file mode 100644 index 000000000..27d1eea53 --- /dev/null +++ b/plugins/legacy-admin/lib/legacy-css-lib.php @@ -0,0 +1,464 @@ + + 0) { + $value = $legacyadmin[$id]['regular']; + } + if ($value == "") { + return; + } + } + return " " . $selector . "{color:" . legacy_hextorgba($value, $opacity) . " /*" . $value . "*/;} "; +} + +function legacy_css_shadow($selector, $id, $opacity = "", $side, $width, $string = "", $valuetype = "") { + if ($width == "") { + $width = "1px"; + } + + if ($side == "") { + $side = "bottom"; + } + + if ($side == "top") { + $side_css = "0px " . $width . " 0px 0px color inset, + 0px 0px 0px 0px color inset, + 0px 0px 0px 0px color inset, + 0px 0px 0px 0px color inset"; + } + if ($side == "right") { + $side_css = "0px 0px 0px 0px color inset, + 0px 0px 0px 0px color inset, + 0px 0px 0px 0px color inset, + -" . $width . " 0px 0px 0px color inset"; + } + if ($side == "bottom") { + $side_css = "0px 0px 0px 0px color inset, + 0px -" . $width . " 0px 0px color inset, + 0px 0px 0px 0px color inset, + 0px 0px 0px 0px color inset"; + } + if ($side == "left") { + $side_css = "0px 0px 0px 0px color inset, + 0px 0px 0px 0px color inset, + " . $width . " 0px 0px 0px color inset, + 0px 0px 0px 0px color inset"; + } + + if ($side == "left-right" || $side == "right-left") { + $side_css = "0px 0px 0px 0px color inset, + 0px 0px 0px 0px color inset, + " . $width . " 0px 0px 0px color inset, + -" . $width . " 0px 0px 0px color inset"; + } + + if ($side == "top-bottom" || $side == "bottom-top") { + $side_css = "0px " . $width . " 0px 0px color inset, + 0px -" . $width . " 0px 0px color inset, + 0px 0px 0px 0px color inset, + 0px 0px 0px 0px color inset"; + } + + if ($side == "all" || $side == "top-right-bottom-left") { + $side_css = "0px " . $width . " 0px 0px color inset, + 0px -" . $width . " 0px 0px color inset, + " . $width . " 0px 0px 0px color inset, + -" . $width . " 0px 0px 0px color inset"; + } + + + if ($side == "multiple") { + $side_css = $string; + } + + global $legacyadmin; + + if ($string == "string") { + $value = $id; + } else if ($valuetype == "string") { + $value = $id; + } else { + $value = $legacyadmin[$id]; + if (is_array($value) && sizeof($value) == 0) { + return; + } else if (is_array($value) && sizeof($value) > 0) { + $value = $legacyadmin[$id]['regular']; + } + } + + if ($value == "") { + return; + } + + + /* Relative color code */ + /* * * Darken Color - In box shadow the original color gets lighter ** */ + // echo $value; + $hex = $value; + /* + // echo "0. ".$hex . "[HEX]\n"; + $rgb = HTMLToRGB($hex); + // echo "1. ".$rgb . "[HEX to RGB]\n"; + $new_color = ChangeLuminosity($rgb, 63); + // echo "2. ".$new_color . "[Dark RGB (rgb-hsl-dark hsl-rgb)]\n"; + $new_hex = RGBToHTML($new_color); + // echo "3. ".$new_hex . "[HEX]\n"; + $value = $new_hex; + // echo "===========\n"; + */ + + +// if($side == "multiple"){ + if ($hex != "transparent") { + $color = legacy_hextorgba($hex, $opacity); + } else { + $color = "transparent"; + } // same color as separator - no darker version + $side_css = str_replace("color", $color, $side_css); + return " " . $selector . "{box-shadow: " . $side_css . " ;\n" + . "-webkit-box-shadow: " . $side_css . " ;\n" + . "-o-box-shadow: " . $side_css . " ;\n" + . "-moz-box-shadow: " . $side_css . " ;\n" + . "-ms-box-shadow: " . $side_css . " /*" . $hex . "*/;} \n"; +} + +function legacy_link_color($selector, $id, $opacity = "", $type = "", $valuetype = "") { + global $legacyadmin; + if ($valuetype == "array") { + $value = $id; + } else { + $value = $legacyadmin[$id]; + } + + if (sizeof($value) == 0) { + return; + } + + $selector_visited = $selector_hover = $selector_active = ""; + $exp = explode(",", $selector); + foreach ($exp as $single) { + $selector_visited .= trim($single) . ":visited, "; + $selector_hover .= trim($single) . ":hover, "; + $selector_active .= trim($single) . ":active, "; + } + + $selector_visited = substr($selector_visited, 0, -2); + $selector_hover = substr($selector_hover, 0, -2); + $selector_active = substr($selector_active, 0, -2); + + $regular = (isset($value['regular']) && $value['regular'] != "") ? $value['regular'] : $legacyadmin['primary-color']; + $hover = (isset($value['hover']) && $value['hover'] != "") ? $value['hover'] : $regular; + $active = (isset($value['active']) && $value['active'] != "") ? $value['active'] : $hover; + $visited = (isset($value['visited']) && $value['visited'] != "") ? $value['visited'] : $regular; + + if (isset($type) && $type == "hover") { + return $selector . "{color:" . legacy_hextorgba($value['hover'], $opacity) . " /*" . $value['hover'] . "*/;} "; + } else { + return $selector . "{color:" . legacy_hextorgba($regular, $opacity) . " /*" . $regular . "*/;} " . +// $selector_visited . " {color:" . legacy_hextorgba($visited, $opacity) . ";} " . + $selector_hover . " {color:" . legacy_hextorgba($hover, $opacity) . " /*" . $hover . "*/;} " . + $selector_active . " {color:" . legacy_hextorgba($active, $opacity) . " /*" . $active . "*/;} \n"; + } +} + +function legacy_css_bgcolor($selector, $id, $opacity = "", $valuetype = "",$important = "") { + global $legacyadmin; + + $imp = ""; + if($important == "imp"){ + $imp = "!important"; + } + + if ($valuetype == "string") { + $value = $id; + } else if ($valuetype == "luminosity") { + $value = $legacyadmin[$id]; + $hex = $value; /* HEX */ + $rgb = legacy_HTMLToRGB($hex); /* HEX to RGB */ + $new_color = legacy_ChangeLuminosity($rgb, $opacity); /* rgb-hsl-new hsl-rgb */ + $new_hex = legacy_RGBToHTML($new_color); /* HEX */ + $value = $new_hex; + } else { + $value = $legacyadmin[$id]; + if (is_array($value) && sizeof($value) == 0) { + return; + } else if (is_array($value) && sizeof($value) > 0) { + $value = $legacyadmin[$id]['regular']; + } + if ($value == "") { + return; + } + } + $color = ""; + if ($value == "transparent") { + $color = "transparent"; + } else if (strpos($value, "rgba") !== false) { + $color = $value; + } else { + $color = legacy_hextorgba($value, $opacity); + } + return " " . $selector . "{background-color:" . $color .$imp." /*" . $value . "*/;} "; +} + +function legacy_css_border_color($selector, $id, $opacity = "", $bordertype, $valuetype = "") { + global $legacyadmin; + + if ($valuetype == "string") { + $value = $id; + } else { + $value = $legacyadmin[$id]; + if (is_array($value) && sizeof($value) == 0) { + return; + } else if (is_array($value) && sizeof($value) > 0) { + if (isset($legacyadmin[$id]['regular'])) { + $value = $legacyadmin[$id]['regular']; + } + } + } + if ($value == "") { + return; + } + + + if ($bordertype == "all") { + $css_property = "border-color"; + } else if ($bordertype == "top") { + $css_property = "border-top-color"; + } else if ($bordertype == "right") { + $css_property = "border-right-color"; + } else if ($bordertype == "bottom") { + $css_property = "border-bottom-color"; + } else if ($bordertype == "left") { + $css_property = "border-left-color"; + } + + $color = ""; + if ($value != "transparent") { + $color = legacy_hextorgba($value, $opacity); + } else { + $color = "transparent"; + } + + return " " . $selector . "{" . $css_property . ":" . $color . " /*" . $value . "*/;}\n "; +} + +function legacy_css_background_gradient($selector, $id1, $id2, $direction, $percent1, $percent2, $opacity = "", $type = "") { + global $legacyadmin; + + if ($type == "string") { + $value1 = $id1; + $value2 = $id2; + } else { + + $value1 = "#aeb2b7"; + if (isset($legacyadmin[$id1]['background-color']) && trim($legacyadmin[$id1]['background-color']) != "") { + $value1 = $legacyadmin[$id1]['background-color']; + } + + $value2 = $value1; + if (isset($legacyadmin[$id2]['background-color']) && trim($legacyadmin[$id2]['background-color']) != "") { + $value2 = $legacyadmin[$id2]['background-color']; + } + } + + $color1 = legacy_colorcode($value1, $opacity, "", "1"); + $color2 = legacy_colorcode($value2, $opacity, "", "1"); + + if ($direction == "") { + $direction = "top"; + } + + if ($percent1 == "") { + $percent1 = "50%"; + } + + if ($percent2 == "") { + $percent2 = "50%"; + } + + $str = "linear-gradient(" . $direction . ", " . $color1 . " " . $percent1 . ", " . $color2 . " " . $percent2 . ");"; + + $ret = ""; + + $ret .= " " . $selector . "{"; + $ret .= "background: -moz-" . $str; + $ret .= "background: -webkit-" . $str; + $ret .= "background: -o-" . $str; + $ret .= "background: -ms-" . $str; + $ret .= "background: " . $str; + $ret .= "} "; + + return $ret; +} + +function legacy_css_background($selector, $id, $opacity = "", $type = "",$important = "") { + global $legacyadmin; + if ($type == "array") { + $value = $id; + } else { + $value = $legacyadmin[$id]; + } + + $imp = ""; + if($important == "imp"){ + $imp = "!important"; + } + + + if (!isset($value['background-image'])) { + $value['background-image'] = ""; + } + if (!isset($value['background-repeat'])) { + $value['background-repeat'] = ""; + } + if (!isset($value['background-color'])) { + $value['background-color'] = ""; + } + if (!isset($value['background-size'])) { + $value['background-size'] = ""; + } + if (!isset($value['background-attachment'])) { + $value['background-attachment'] = ""; + } + if (!isset($value['background-position'])) { + $value['background-position'] = ""; + } + + + $bg_image = ""; + $legacyadminID = $value['background-image']; + if (isset($legacyadminID) && trim($legacyadminID) != "") { + $bg_image = "background-image:url(" . $legacyadminID . ")".$imp."; "; + } + + $bg_color = ""; + $legacyadminID = $value['background-color']; + $colorcode = legacy_colorcode($legacyadminID, $opacity, $imp); + $bg_color = "background-color: " . $colorcode . ";"; + + $bg_repeat = ""; + $legacyadminID = $value['background-repeat']; + if (isset($legacyadminID) && trim($legacyadminID) != "") { + $bg_repeat = "background-repeat:" . $legacyadminID . "".$imp."; "; + } + + $bg_size = ""; + $legacyadminID = $value['background-size']; + if (isset($legacyadminID) && trim($legacyadminID) != "") { + $bg_size = "-webkit-background-size:" . $legacyadminID . "".$imp."; " + . "-moz-background-size:" . $legacyadminID . "".$imp."; " + . "-o-background-size:" . $legacyadminID . "".$imp."; " + . "background-size:" . $legacyadminID . "".$imp."; "; + } + + $bg_attach = ""; + $legacyadminID = $value['background-attachment']; + if (isset($legacyadminID) && trim($legacyadminID) != "") { + $bg_attach = "background-attachment:" . $legacyadminID . "".$imp."; "; + } + + $bg_pos = ""; + $legacyadminID = $value['background-position']; + if (isset($legacyadminID) && trim($legacyadminID) != "") { + $bg_pos = "background-position:" . $legacyadminID . "".$imp."; "; + } + + + return " " . $selector . "{" . $bg_color . $bg_image . $bg_pos . $bg_attach . $bg_size . $bg_repeat . "} "; +} + +function legacy_hextorgba($value, $opacity) { + if ($opacity == "" || !isset($opacity)) { + $opacity = 1; + } + $rgb = legacy_hex2rgb($value); + return "rgba(" . $rgb[0] . "," . $rgb[1] . "," . $rgb[2] . ",$opacity)"; +} + +function legacy_colorcode($color, $opacity = "", $addstr = "", $onlycode = "0") { + $ret = $color; + $code = ""; + if ($opacity == "") { + $opacity = "1.0"; + } + global $legacyadmin; + //$legacyadmin = legacy_color(); + + if (isset($color) && trim($color) != "" && trim($color) != "#") { + if ($color == "transparent") { + $ret = "transparent" . $addstr; + } else if ($color == "primary") { + $ret = $legacyadmin['primary-color'] . $addstr; + } else if ($color == "primary2") { + $ret = $legacyadmin['primary2-color'] . $addstr; + } else if ($color == "secondary") { + $ret = $legacyadmin['secondary-color'] . $addstr; + } else if (strpos($color, "rgb") !== false) { + $ret = $color . $addstr; + } else if (strpos($color, "/") !== false) { + $colorexp = explode("/", $color); + if (trim($colorexp[0]) == "primary") { + $code = $legacyadmin['primary-color']; + } else if (trim($colorexp[0]) == "primary2") { + $code = $legacyadmin['primary2-color']; + } else if (trim($colorexp[0]) == "secondary") { + $code = $legacyadmin['secondary-color']; + } else { + $code = trim($colorexp[0]); + } + if (trim($colorexp[1]) != "") { + $opacity = trim($colorexp[1]); + } + $ret = legacy_hextorgba($code, $opacity) . $addstr; + if ($onlycode != "1") { + $ret .= " /*" . $code . "*/"; + } + if ($onlycode != "1") { + $ret .= "; "; + } + } else { + $ret = legacy_hextorgba($color, $opacity) . $addstr; + if ($onlycode != "1") { + $ret .= " /*" . $color . "*/"; + } + if ($onlycode != "1") { + $ret .= "; "; + } +// $ret = $color ." /*".$color."*/; "; + } + } + + return $ret; +} + +?> \ No newline at end of file diff --git a/plugins/legacy-admin/lib/legacy-css-version.php b/plugins/legacy-admin/lib/legacy-css-version.php new file mode 100644 index 000000000..38a451d0e --- /dev/null +++ b/plugins/legacy-admin/lib/legacy-css-version.php @@ -0,0 +1,29 @@ + +=')) { + return 'css40'; + } else { + return ''; + } +} + +$GLOBALS['legacy_css_ver'] = legacy_css_version(); +?> \ No newline at end of file diff --git a/plugins/legacy-admin/lib/legacy-custom-colors.php b/plugins/legacy-admin/lib/legacy-custom-colors.php new file mode 100644 index 000000000..694fefc1c --- /dev/null +++ b/plugins/legacy-admin/lib/legacy-custom-colors.php @@ -0,0 +1,1081 @@ + + '#f45246', + 'page-bg' => array('background-color' => '#f0f1f2'), + 'heading-color' => '#7d8a9d', + 'body-text-color' => '#7d8a9d', + 'link-color' => array('regular' => '#2a3e4c', 'hover' => '#f45246',), + 'menu-bg' => array('background-color' => '#2a3e4c'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#f45246', + 'menu-secondary-bg' => '#141c22', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#2a3e4c'), + 'menu-active-icon-color' => '#f45246', + 'menu-active-icon-bg' => array('background-color' => '#f0f1f2'), + 'submenu-active-icon-bg' => array('background-color' => '#f45246'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#64ca92'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#f45246', + 'button-primary-hover-bg' => '#18b3dc', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#2a3e4c', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#18b3dc'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#2a3e4c', + 'topbar-submenu-hover-bg' => '#141c22', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + + +$color2 = array( + 'primary-color' => '#e96e4d', + 'page-bg' => array('background-color' => '#f3f4f8'), + 'heading-color' => '#7d8a9d', + 'body-text-color' => '#7d8a9d', + 'link-color' => array('regular' => '#32323a', 'hover' => '#e96e4d',), + 'menu-bg' => array('background-color' => '#32323a'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#e96e4d', + 'menu-secondary-bg' => '#212026', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#32323a'), + 'menu-active-icon-color' => '#e96e4d', + 'menu-active-icon-bg' => array('background-color' => '#f3f4f8'), + 'submenu-active-icon-bg' => array('background-color' => '#e96e4d'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#61cae7'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#e96e4d', + 'button-primary-hover-bg' => '#1fc7bf', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#32323a', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#27c29c'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#32323a', + 'topbar-submenu-hover-bg' => '#212026', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + + + + +$color3 = array( + 'primary-color' => '#6cbdc4', + 'page-bg' => array('background-color' => '#eef1f5'), + 'heading-color' => '#7d8a9d', + 'body-text-color' => '#7d8a9d', + 'link-color' => array('regular' => '#454c50', 'hover' => '#6cbdc4',), + 'menu-bg' => array('background-color' => '#454c50'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#6cbdc4', + 'menu-secondary-bg' => '#212026', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#454c50'), + 'menu-active-icon-color' => '#6cbdc4', + 'menu-active-icon-bg' => array('background-color' => '#eef1f5'), + 'submenu-active-icon-bg' => array('background-color' => '#6cbdc4'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#ec7963'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#6cbdc4', + 'button-primary-hover-bg' => '#188791', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#454c50', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#6cbdc4'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#454c50', + 'topbar-submenu-hover-bg' => '#212026', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + + +$color4 = array( + 'primary-color' => '#d76d93', // + 'page-bg' => array('background-color' => '#f1f2f7'), + 'heading-color' => '#5a5a67', + 'body-text-color' => '#5a5a67', + 'link-color' => array('regular' => '#32323a', 'hover' => '#d76d93',), + 'menu-bg' => array('background-color' => '#32323a'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#d76d93', + 'menu-secondary-bg' => '#212026', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#32323a'), + 'menu-active-icon-color' => '#d76d93', + 'menu-active-icon-bg' => array('background-color' => '#f1f2f7'), + 'submenu-active-icon-bg' => array('background-color' => '#d76d93'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#40bdbd'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#7d4b82', + 'button-primary-hover-bg' => '#eacc5f', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#5a5a67', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#32323a', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#7d4b82'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#32323a', + 'topbar-submenu-hover-bg' => '#212026', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + + +$color5 = array( + 'primary-color' => '#06a9d8', + 'page-bg' => array('background-color' => '#eeeff0'), + 'heading-color' => '#7d8a9d', + 'body-text-color' => '#7d8a9d', + 'link-color' => array('regular' => '#28556b', 'hover' => '#06a9d8',), + 'menu-bg' => array('background-color' => '#28556b'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#06a9d8', + 'menu-secondary-bg' => '#143444', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#28556b'), + 'menu-active-icon-color' => '#06a9d8', + 'menu-active-icon-bg' => array('background-color' => '#eeeff0'), + 'submenu-active-icon-bg' => array('background-color' => '#06a9d8'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#eab44a'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#06a9d8', + 'button-primary-hover-bg' => '#188791', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#28556b', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#06a9d8'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#28556b', + 'topbar-submenu-hover-bg' => '#143444', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + +$color6 = array( + 'primary-color' => '#f0b270', + 'page-bg' => array('background-color' => '#f3f1ec'), + 'heading-color' => '#7d8a9d', + 'body-text-color' => '#7d8a9d', + 'link-color' => array('regular' => '#392a39', 'hover' => '#f0b270',), + 'menu-bg' => array('background-color' => '#392a39'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#f0b270', + 'menu-secondary-bg' => '#6f5f5c', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#392a39'), + 'menu-active-icon-color' => '#f0b270', + 'menu-active-icon-bg' => array('background-color' => '#f3f1ec'), + 'submenu-active-icon-bg' => array('background-color' => '#f0b270'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#e38f71'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#f0b270', + 'button-primary-hover-bg' => '#825d5b', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#392a39', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#825d5b'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#392a39', + 'topbar-submenu-hover-bg' => '#6f5f5c', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + + + +$color7 = array( + 'primary-color' => '#f9d36a', + 'page-bg' => array('background-color' => '#ecedec'), + 'heading-color' => '#7d8a9d', + 'body-text-color' => '#7d8a9d', + 'link-color' => array('regular' => '#4c4c4d', 'hover' => '#f9d36a',), + 'menu-bg' => array('background-color' => '#4c4c4d'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#f9d36a', + 'menu-secondary-bg' => '#212026', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#4c4c4d'), + 'menu-active-icon-color' => '#f9d36a', + 'menu-active-icon-bg' => array('background-color' => '#ecedec'), + 'submenu-active-icon-bg' => array('background-color' => '#f9d36a'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#b088d5'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#e75b3e', + 'button-primary-hover-bg' => '#188791', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#4c4c4d', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#f9d36a'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#4c4c4d', + 'topbar-submenu-hover-bg' => '#212026', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + + +$color8 = array( + 'primary-color' => '#f49658', + 'page-bg' => array('background-color' => '#eae9e4'), + 'heading-color' => '#7d8a9d', + 'body-text-color' => '#7d8a9d', + 'link-color' => array('regular' => '#372636', 'hover' => '#f49658',), + 'menu-bg' => array('background-color' => '#372636'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#f49658', + 'menu-secondary-bg' => '#212026', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#372636'), + 'menu-active-icon-color' => '#f49658', + 'menu-active-icon-bg' => array('background-color' => '#eae9e4'), + 'submenu-active-icon-bg' => array('background-color' => '#f49658'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#e7615c'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#f4c152', + 'button-primary-hover-bg' => '#8d3356', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#372636', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#f49658'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#372636', + 'topbar-submenu-hover-bg' => '#212026', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + +$color9 = array( + 'primary-color' => '#e35b27', + 'page-bg' => array('background-color' => '#e7e7e9'), + 'heading-color' => '#404143', + 'body-text-color' => '#704143', + 'link-color' => array('regular' => '#414244', 'hover' => '#e35b27',), + 'menu-bg' => array('background-color' => '#414244'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#e35b27', + 'menu-secondary-bg' => '#5e5f61', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#414244'), + 'menu-active-icon-color' => '#e35b27', + 'menu-active-icon-bg' => array('background-color' => '#e7e7e9'), + 'submenu-active-icon-bg' => array('background-color' => '#e35b27'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#e35b27'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#e35b27', + 'button-primary-hover-bg' => '#ff743d', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#414244', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#e35b27'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#414244', + 'topbar-submenu-hover-bg' => '#5e5f61', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + +$color10 = array( + 'primary-color' => '#5bc9c5', + 'page-bg' => array('background-color' => '#ececec'), + 'heading-color' => '#404143', + 'body-text-color' => '#704143', + 'link-color' => array('regular' => '#414244', 'hover' => '#5bc9c5',), + 'menu-bg' => array('background-color' => '#414244'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#5bc9c5', + 'menu-secondary-bg' => '#5e5f61', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#414244'), + 'menu-active-icon-color' => '#5bc9c5', + 'menu-active-icon-bg' => array('background-color' => '#ececec'), + 'submenu-active-icon-bg' => array('background-color' => '#5bc9c5'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#5bc9c5'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#5bc9c5', + 'button-primary-hover-bg' => '#ff743d', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#414244', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#5bc9c5'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#414244', + 'topbar-submenu-hover-bg' => '#5e5f61', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + +$color11 = array( + 'primary-color' => '#f86759', + 'page-bg' => array('background-color' => '#ececec'), + 'heading-color' => '#404143', + 'body-text-color' => '#704143', + 'link-color' => array('regular' => '#414244', 'hover' => '#f86759',), + 'menu-bg' => array('background-color' => '#414244'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#f86759', + 'menu-secondary-bg' => '#5e5f61', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#414244'), + 'menu-active-icon-color' => '#f86759', + 'menu-active-icon-bg' => array('background-color' => '#ececec'), + 'submenu-active-icon-bg' => array('background-color' => '#f86759'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#f86759'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#f86759', + 'button-primary-hover-bg' => '#ff743d', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#414244', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#f86759'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#414244', + 'topbar-submenu-hover-bg' => '#5e5f61', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + +$color12 = array( + 'primary-color' => '#7a6a93', + 'page-bg' => array('background-color' => '#ececec'), + 'heading-color' => '#404143', + 'body-text-color' => '#704143', + 'link-color' => array('regular' => '#414244', 'hover' => '#7a6a93',), + 'menu-bg' => array('background-color' => '#414244'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#7a6a93', + 'menu-secondary-bg' => '#5e5f61', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#414244'), + 'menu-active-icon-color' => '#7a6a93', + 'menu-active-icon-bg' => array('background-color' => '#ececec'), + 'submenu-active-icon-bg' => array('background-color' => '#7a6a93'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#7a6a93'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#7a6a93', + 'button-primary-hover-bg' => '#ff743d', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#414244', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#7a6a93'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#414244', + 'topbar-submenu-hover-bg' => '#5e5f61', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + + +$color13 = array( + 'primary-color' => '#7a6a93', + 'page-bg' => array('background-color' => '#eef1f5'), + 'heading-color' => '#7d8a9d', + 'body-text-color' => '#7d8a9d', + 'link-color' => array('regular' => '#454c50', 'hover' => '#7a6a93',), + 'menu-bg' => array('background-color' => '#454c50'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#7a6a93', + 'menu-secondary-bg' => '#212026', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#454c50'), + 'menu-active-icon-color' => '#7a6a93', + 'menu-active-icon-bg' => array('background-color' => '#eef1f5'), + 'submenu-active-icon-bg' => array('background-color' => '#7a6a93'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#5bc9c5'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#7a6a93', + 'button-primary-hover-bg' => '#188791', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#454c50', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#7a6a93'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#454c50', + 'topbar-submenu-hover-bg' => '#212026', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + + + +$color14 = array( + 'primary-color' => '#705788', + 'page-bg' => array('background-color' => '#eef1f5'), + 'heading-color' => '#7d8a9d', + 'body-text-color' => '#7d8a9d', + 'link-color' => array('regular' => '#454c50', 'hover' => '#705788',), + 'menu-bg' => array('background-color' => '#454c50'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#705788', + 'menu-secondary-bg' => '#212026', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#454c50'), + 'menu-active-icon-color' => '#705788', + 'menu-active-icon-bg' => array('background-color' => '#eef1f5'), + 'submenu-active-icon-bg' => array('background-color' => '#705788'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#f8c866'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#705788', + 'button-primary-hover-bg' => '#188791', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#454c50', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#705788'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#454c50', + 'topbar-submenu-hover-bg' => '#212026', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + +$color15 = array( + 'primary-color' => '#f25145', + 'page-bg' => array('background-color' => '#eef1f5'), + 'heading-color' => '#7d8a9d', + 'body-text-color' => '#7d8a9d', + 'link-color' => array('regular' => '#454c50', 'hover' => '#f25145',), + 'menu-bg' => array('background-color' => '#454c50'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#f25145', + 'menu-secondary-bg' => '#212026', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#454c50'), + 'menu-active-icon-color' => '#f25145', + 'menu-active-icon-bg' => array('background-color' => '#eef1f5'), + 'submenu-active-icon-bg' => array('background-color' => '#f25145'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#283c4b'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#f25145', + 'button-primary-hover-bg' => '#188791', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#454c50', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#f25145'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#454c50', + 'topbar-submenu-hover-bg' => '#212026', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + + +$color16 = array( + 'primary-color' => '#3faa96', + 'page-bg' => array('background-color' => '#eef1f5'), + 'heading-color' => '#7d8a9d', + 'body-text-color' => '#7d8a9d', + 'link-color' => array('regular' => '#454c50', 'hover' => '#3faa96',), + 'menu-bg' => array('background-color' => '#454c50'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#3faa96', + 'menu-secondary-bg' => '#212026', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#454c50'), + 'menu-active-icon-color' => '#3faa96', + 'menu-active-icon-bg' => array('background-color' => '#eef1f5'), + 'submenu-active-icon-bg' => array('background-color' => '#3faa96'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#f8c866'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#3faa96', + 'button-primary-hover-bg' => '#188791', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#454c50', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#3faa96'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#454c50', + 'topbar-submenu-hover-bg' => '#212026', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + + + +$color17 = array( + 'primary-color' => '#ff8053', + 'page-bg' => array('background-color' => '#eef1f5'), + 'heading-color' => '#7d8a9d', + 'body-text-color' => '#7d8a9d', + 'link-color' => array('regular' => '#454c50', 'hover' => '#ff8053',), + 'menu-bg' => array('background-color' => '#454c50'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#ff8053', + 'menu-secondary-bg' => '#212026', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#454c50'), + 'menu-active-icon-color' => '#ff8053', + 'menu-active-icon-bg' => array('background-color' => '#eef1f5'), + 'submenu-active-icon-bg' => array('background-color' => '#ff8053'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#888bb6'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#ff8053', + 'button-primary-hover-bg' => '#188791', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#454c50', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#ff8053'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#454c50', + 'topbar-submenu-hover-bg' => '#212026', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + +$color18 = array( + 'primary-color' => '#1fb5ac', + 'page-bg' => array('background-color' => '#eef1f5'), + 'heading-color' => '#7d8a9d', + 'body-text-color' => '#7d8a9d', + 'link-color' => array('regular' => '#454c50', 'hover' => '#1fb5ac',), + 'menu-bg' => array('background-color' => '#454c50'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#1fb5ac', + 'menu-secondary-bg' => '#212026', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#454c50'), + 'menu-active-icon-color' => '#1fb5ac', + 'menu-active-icon-bg' => array('background-color' => '#eef1f5'), + 'submenu-active-icon-bg' => array('background-color' => '#1fb5ac'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#9972b5'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#1fb5ac', + 'button-primary-hover-bg' => '#188791', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#454c50', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#1fb5ac'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#454c50', + 'topbar-submenu-hover-bg' => '#212026', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + +$color19 = array( + 'primary-color' => '#e1615d', + 'page-bg' => array('background-color' => '#eef1f5'), + 'heading-color' => '#7d8a9d', + 'body-text-color' => '#7d8a9d', + 'link-color' => array('regular' => '#454c50', 'hover' => '#e1615d',), + 'menu-bg' => array('background-color' => '#454c50'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#e1615d', + 'menu-secondary-bg' => '#212026', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#454c50'), + 'menu-active-icon-color' => '#e1615d', + 'menu-active-icon-bg' => array('background-color' => '#eef1f5'), + 'submenu-active-icon-bg' => array('background-color' => '#e1615d'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#fdbd57'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#e1615d', + 'button-primary-hover-bg' => '#188791', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#454c50', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#e1615d'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#454c50', + 'topbar-submenu-hover-bg' => '#212026', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + +$color20 = array( + 'primary-color' => '#f17e56', + 'page-bg' => array('background-color' => '#eef1f5'), + 'heading-color' => '#7d8a9d', + 'body-text-color' => '#7d8a9d', + 'link-color' => array('regular' => '#454c50', 'hover' => '#f17e56',), + 'menu-bg' => array('background-color' => '#454c50'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#f17e56', + 'menu-secondary-bg' => '#212026', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#454c50'), + 'menu-active-icon-color' => '#f17e56', + 'menu-active-icon-bg' => array('background-color' => '#eef1f5'), + 'submenu-active-icon-bg' => array('background-color' => '#f17e56'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#695f56'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#f17e56', + 'button-primary-hover-bg' => '#188791', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#454c50', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#f17e56'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#454c50', + 'topbar-submenu-hover-bg' => '#212026', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + + +$color21 = array( + 'primary-color' => '#1fb5ac', + 'page-bg' => array('background-color' => '#ececec'), + 'heading-color' => '#404143', + 'body-text-color' => '#704143', + 'link-color' => array('regular' => '#414244', 'hover' => '#1fb5ac',), + 'menu-bg' => array('background-color' => '#414244'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#1fb5ac', + 'menu-secondary-bg' => '#5e5f61', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#414244'), + 'menu-active-icon-color' => '#1fb5ac', + 'menu-active-icon-bg' => array('background-color' => '#ececec'), + 'submenu-active-icon-bg' => array('background-color' => '#1fb5ac'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#1fb5ac'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#1fb5ac', + 'button-primary-hover-bg' => '#ff743d', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#414244', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#1fb5ac'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#414244', + 'topbar-submenu-hover-bg' => '#5e5f61', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + +$color22 = array( + 'primary-color' => '#7a628b', + 'page-bg' => array('background-color' => '#eef1f5'), + 'heading-color' => '#7d8a9d', + 'body-text-color' => '#7d8a9d', + 'link-color' => array('regular' => '#454c50', 'hover' => '#7a628b',), + 'menu-bg' => array('background-color' => '#454c50'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#7a628b', + 'menu-secondary-bg' => '#212026', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#454c50'), + 'menu-active-icon-color' => '#7a628b', + 'menu-active-icon-bg' => array('background-color' => '#eef1f5'), + 'submenu-active-icon-bg' => array('background-color' => '#7a628b'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#cd5d7b'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#7a628b', + 'button-primary-hover-bg' => '#188791', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#454c50', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#7a628b'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#454c50', + 'topbar-submenu-hover-bg' => '#212026', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + +$color23 = array( + 'primary-color' => '#34495e', + 'page-bg' => array('background-color' => '#eef1f5'), + 'heading-color' => '#7d8a9d', + 'body-text-color' => '#7d8a9d', + 'link-color' => array('regular' => '#454c50', 'hover' => '#34495e',), + 'menu-bg' => array('background-color' => '#454c50'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#34495e', + 'menu-secondary-bg' => '#212026', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#454c50'), + 'menu-active-icon-color' => '#34495e', + 'menu-active-icon-bg' => array('background-color' => '#eef1f5'), + 'submenu-active-icon-bg' => array('background-color' => '#34495e'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#1fdab5'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#34495e', + 'button-primary-hover-bg' => '#188791', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#454c50', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#34495e'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#454c50', + 'topbar-submenu-hover-bg' => '#212026', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + +$color24 = array( + 'primary-color' => '#568c98', + 'page-bg' => array('background-color' => '#eef1f5'), + 'heading-color' => '#7d8a9d', + 'body-text-color' => '#7d8a9d', + 'link-color' => array('regular' => '#454c50', 'hover' => '#568c98',), + 'menu-bg' => array('background-color' => '#454c50'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#568c98', + 'menu-secondary-bg' => '#212026', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#454c50'), + 'menu-active-icon-color' => '#568c98', + 'menu-active-icon-bg' => array('background-color' => '#eef1f5'), + 'submenu-active-icon-bg' => array('background-color' => '#ec8e72'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#ec8e72'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#568c98', + 'button-primary-hover-bg' => '#188791', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#454c50', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#568c98'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#454c50', + 'topbar-submenu-hover-bg' => '#212026', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + + +$color25 = array( + 'primary-color' => '#32cf78', + 'page-bg' => array('background-color' => '#eef1f5'), + 'heading-color' => '#7d8a9d', + 'body-text-color' => '#7d8a9d', + 'link-color' => array('regular' => '#454c50', 'hover' => '#32cf78',), + 'menu-bg' => array('background-color' => '#454c50'), + 'menu-color' => '#ffffff', + 'menu-hover-color' => '#ffffff', + 'submenu-color' => '#aeb2b7', + 'menu-primary-bg' => '#32cf78', + 'menu-secondary-bg' => '#212026', + 'menu-icon-line-bg' => array('background-color' => '#aeb2b7'), + 'menu-icon-color' => '#aeb2b7', + 'menu-icon-bg' => array('background-color' => '#454c50'), + 'menu-active-icon-color' => '#32cf78', + 'menu-active-icon-bg' => array('background-color' => '#eef1f5'), + 'submenu-active-icon-bg' => array('background-color' => '#32cf78'), + 'box-bg' => array('background-color' => '#ffffff'), + 'box-head-bg' => array('background-color' => '#f25858'), + 'box-head-color' => '#ffffff', + 'button-primary-bg' => '#32cf78', + 'button-primary-hover-bg' => '#188791', + 'button-secondary-bg' => '#a9a9a9', + 'button-secondary-hover-bg' => '#999999', + 'button-text-color' => '#ffffff', + 'form-bg' => '#ffffff', + 'form-text-color' => '#7d8a9d', + 'form-border-color' => '#e2e2e4', + 'logo-bg' => '#454c50', + 'topbar-menu-color' => '#ffffff', + 'topbar-menu-bg' => array('background-color' => '#32cf78'), + 'topbar-submenu-color' => '#aeb2b7', + 'topbar-submenu-bg' => '#454c50', + 'topbar-submenu-hover-bg' => '#212026', + 'logo' => array('url' => 'PLUGINURL/images/logo.png'), + 'logo_folded' => array('url' => 'PLUGINURL/images/logo-folded.png'), +); + +$GLOBALS['legacy_color']['color1'] = $color1; // dark +$GLOBALS['legacy_color']['color2'] = $color2; // modify +$GLOBALS['legacy_color']['color3'] = $color3; // dark +$GLOBALS['legacy_color']['color4'] = $color4; // light +$GLOBALS['legacy_color']['color5'] = $color5; // dark +$GLOBALS['legacy_color']['color6'] = $color6; // light +$GLOBALS['legacy_color']['color7'] = $color7; // light +$GLOBALS['legacy_color']['color8'] = $color8; // light +$GLOBALS['legacy_color']['color9'] = $color9; // dark +$GLOBALS['legacy_color']['color10'] = $color10; // dark +$GLOBALS['legacy_color']['color11'] = $color11; // dark +$GLOBALS['legacy_color']['color12'] = $color12; // dark +$GLOBALS['legacy_color']['color13'] = $color13; // dark +$GLOBALS['legacy_color']['color14'] = $color14; // dark +$GLOBALS['legacy_color']['color15'] = $color15; // dark +$GLOBALS['legacy_color']['color16'] = $color16; // dark +$GLOBALS['legacy_color']['color17'] = $color17; // light +$GLOBALS['legacy_color']['color18'] = $color18; // light +$GLOBALS['legacy_color']['color19'] = $color19; // light +$GLOBALS['legacy_color']['color20'] = $color20; // light +$GLOBALS['legacy_color']['color21'] = $color21; // light + $GLOBALS['legacy_color']['color22'] = $color22; // light + $GLOBALS['legacy_color']['color23'] = $color23; // light + $GLOBALS['legacy_color']['color24'] = $color24; // light + $GLOBALS['legacy_color']['color25'] = $color25; // light + + + +/* List Names for options panel */ +$GLOBALS['legacy_color_list']['custom'] = "Custom Theme"; +$GLOBALS['legacy_color_list']['color1'] = "Theme 1"; +$GLOBALS['legacy_color_list']['color2'] = "Theme 2"; +$GLOBALS['legacy_color_list']['color3'] = "Theme 3"; +$GLOBALS['legacy_color_list']['color4'] = "Theme 4"; +$GLOBALS['legacy_color_list']['color5'] = "Theme 5"; +$GLOBALS['legacy_color_list']['color6'] = "Theme 6"; +$GLOBALS['legacy_color_list']['color7'] = "Theme 7"; +$GLOBALS['legacy_color_list']['color8'] = "Theme 8"; +$GLOBALS['legacy_color_list']['color9'] = "Theme 9"; +$GLOBALS['legacy_color_list']['color10'] = "Theme 10"; +$GLOBALS['legacy_color_list']['color11'] = "Theme 11"; // color1 single +$GLOBALS['legacy_color_list']['color12'] = "Theme 12"; // color1 single +$GLOBALS['legacy_color_list']['color13'] = "Theme 13"; // color1 single +$GLOBALS['legacy_color_list']['color14'] = "Theme 14"; // color2 single +$GLOBALS['legacy_color_list']['color15'] = "Theme 15"; // color2 single +$GLOBALS['legacy_color_list']['color16'] = "Theme 16"; // color2 single +$GLOBALS['legacy_color_list']['color17'] = "Theme 17"; // color3 single +$GLOBALS['legacy_color_list']['color18'] = "Theme 18"; // color3 single +$GLOBALS['legacy_color_list']['color19'] = "Theme 19"; +$GLOBALS['legacy_color_list']['color20'] = "Theme 20"; +$GLOBALS['legacy_color_list']['color21'] = "Theme 21"; + $GLOBALS['legacy_color_list']['color22'] = "Theme 22"; + $GLOBALS['legacy_color_list']['color23'] = "Theme 23"; + $GLOBALS['legacy_color_list']['color24'] = "Theme 24"; + $GLOBALS['legacy_color_list']['color25'] = "Theme 25"; +?> \ No newline at end of file diff --git a/plugins/legacy-admin/lib/legacy-fonts.php b/plugins/legacy-admin/lib/legacy-fonts.php new file mode 100644 index 000000000..44a811823 --- /dev/null +++ b/plugins/legacy-admin/lib/legacy-fonts.php @@ -0,0 +1,276 @@ + + + + + + + + \ No newline at end of file diff --git a/plugins/legacy-admin/lib/legacy-functions.php b/plugins/legacy-admin/lib/legacy-functions.php new file mode 100644 index 000000000..777df7365 --- /dev/null +++ b/plugins/legacy-admin/lib/legacy-functions.php @@ -0,0 +1,1014 @@ + +console.log('Legacy WP Admin: WordPress Version Not Supported Yet!');"; + } +} + +function legacy_menumng_body_classes($classes) { + return $classes." tp-menumng"; +} + +function legacyadmin_network($default) { + + if (is_multisite() && legacy_network_active()) { + global $blog_id; + $current_blog_id = $blog_id; + switch_to_blog(1); + $site_specific_legacyadmin = get_option("legacy_demo"); + $legacyadmin = $site_specific_legacyadmin; + switch_to_blog($current_blog_id); + } else { + $legacyadmin = $default; + } + + return $legacyadmin; +} + +function legacy_dynamic_css_settings() { + + global $legacy_css_ver; + + global $legacyadmin; + $csstype = legacy_dynamic_css_type(); + + //echo "csstype: ".$csstype; + + if (isset($csstype) && $csstype != "custom") { + // enqueue default/ inbuilt CSS styles + add_action('admin_enqueue_scripts', 'legacy_default_css_colors', 99); + } else { + + // load custom CSS style generated dynamically + + $css_dir = trailingslashit(plugin_dir_path(__FILE__) . '../' . $legacy_css_ver); + + // if Not multisite + if (!is_multisite()) { + if (is_writable($css_dir)) { + //write the file if isn't there + if (!file_exists($css_dir . '/legacy-colors.css')) { + legacy_regenerate_dynamic_css_file(); + } + add_action('admin_enqueue_scripts', 'legacy_dynamic_enqueue_style', 99); + } else { + add_action('admin_head', 'legacy_wp_head_css'); + } + } else if (is_multisite() && legacy_network_active()) { + // multisite and network active + if (is_writable($css_dir)) { + + global $wpdb; + global $blog_id; + $current_blog_id = $blog_id; + + $current_site = 1; + switch_to_blog(1); + + //write the file if isn't there + if (!file_exists($css_dir . '/legacy-colors-site-' . $current_site . '.css')) { + + $site_specific_legacyadmin = get_option("legacy_demo"); + $filename = 'site-' . $current_site; + //print_r($site_specific_legacyadmin); + legacy_regenerate_dynamic_css_file($site_specific_legacyadmin, $filename); + } + add_action('admin_enqueue_scripts', 'legacy_dynamic_enqueue_style', 99); + + switch_to_blog($current_blog_id); + } else { + add_action('admin_head', 'legacy_wp_head_css'); + } + } else { + // multisite and not network active + // regenerate css file for the individual site only and enqueue it. + if (is_writable($css_dir)) { + + global $wpdb; + $current_site = $wpdb->blogid; + + //write the file if isn't there + if (!file_exists($css_dir . '/legacy-colors-site-' . $current_site . '.css')) { + + $site_specific_legacyadmin = get_option("legacy_demo"); + $filename = 'site-' . $current_site; + //print_r($site_specific_legacyadmin); + legacy_regenerate_dynamic_css_file($site_specific_legacyadmin, $filename); + } + add_action('admin_enqueue_scripts', 'legacy_dynamic_enqueue_style', 99); + } else { + add_action('admin_head', 'legacy_wp_head_css'); + } + } + } +} + +function legacy_framework_settings_saved() { + + global $legacy_css_ver; + global $legacyadmin; + + $css_dir = trailingslashit(plugin_dir_path(__FILE__) . '../' . $legacy_css_ver); + + // if Not multisite + if (!is_multisite()) { + + if (is_writable($css_dir)) { + legacy_regenerate_dynamic_css_file(); + } + } else if (is_multisite() && legacy_network_active()) { + global $wpdb; + $current_blog_id = $wpdb->blogid; + $current_site = 1; + switch_to_blog(1); + + $site_specific_legacyadmin = get_option("legacy_demo"); + $filename = 'site-' . $current_site; + //print_r($site_specific_legacyadmin); + legacy_regenerate_dynamic_css_file($site_specific_legacyadmin, $filename); + switch_to_blog($current_blog_id); + } else { + + // multisite + // regenerate css file for the individual site only + + if (is_writable($css_dir)) { + + global $wpdb; + $current_site = $wpdb->blogid; + + $site_specific_legacyadmin = get_option("legacy_demo"); + $filename = 'site-' . $current_site; + //print_r($site_specific_legacyadmin); + legacy_regenerate_dynamic_css_file($site_specific_legacyadmin, $filename); + } + } +} + +function legacy_scripts() { + global $legacyadmin; + $url = plugins_url('/', __FILE__) . '../js/legacy-scripts.js'; + wp_deregister_script('legacy-scripts-js'); + wp_register_script('legacy-scripts-js', $url); + wp_enqueue_script('legacy-scripts-js'); + + $url = plugins_url('/', __FILE__) . '../js/legacy-smoothscroll.min.js'; + wp_deregister_script('legacy-smoothscroll-js'); + wp_register_script('legacy-smoothscroll-js', $url); + wp_enqueue_script('legacy-smoothscroll-js'); + + wp_localize_script('legacy-scripts-js', 'legacy_vars', array( + 'legacy_nonce' => wp_create_nonce('legacy-nonce') + ) + ); + + + if (file_exists(plugin_dir_path(__FILE__) . '../demo-settings/legacy-settings-panel-css.css')) { + wp_deregister_style('legacy-settings-panel-css'); + wp_register_style('legacy-settings-panel-css', plugins_url('/', __FILE__) . "../demo-settings/legacy-settings-panel-css.css"); + wp_enqueue_style('legacy-settings-panel-css'); + } + + if (file_exists(plugin_dir_path(__FILE__) . '../demo-settings/legacy-settings-panel-js.js')) { + wp_deregister_script('legacy-settings-panel-js'); + wp_register_script('legacy-settings-panel-js', plugins_url('/', __FILE__) . "../demo-settings/legacy-settings-panel-js.js"); + wp_enqueue_script('legacy-settings-panel-js'); + } +} + +function legacy_admin_css() { + global $legacy_css_ver; + + $url = plugins_url('/', __FILE__) . '../' . $legacy_css_ver . '/legacy-admin.min.css'; + wp_deregister_style('legacy-admin', $url); + wp_register_style('legacy-admin', $url); + wp_enqueue_style('legacy-admin'); + + /* ame */ + $url = plugins_url('/', __FILE__) . '../css/legacy-ame.min.css'; + wp_deregister_style('legacy-ame', $url); + wp_register_style('legacy-ame', $url); + wp_enqueue_style('legacy-ame'); + + /* wordfence */ + $url = plugins_url('/', __FILE__) . '../css/legacy-wordfence.min.css'; + wp_deregister_style('legacy-wordfence', $url); + wp_register_style('legacy-wordfence', $url); + wp_enqueue_style('legacy-wordfence'); + + /* other plugins compatibility */ + $url = plugins_url('/', __FILE__) . '../css/legacy-external.min.css'; + wp_deregister_style('legacy-external', $url); + wp_register_style('legacy-external', $url); + wp_enqueue_style('legacy-external'); +} + + +function legacy_dynamic_css_type() { + + //global $wpdb; + //echo $wpdb->blogid; + + global $legacy_css_ver; + global $legacyadmin; + + + $csstype = "custom"; + + if (is_multisite()) { + + global $blog_id; + $current_blog_id = $blog_id; + $network_active = legacy_network_active(); + + //echo "

    id:".$current_blog_id; + + if ($network_active) { + //if network activate, switch to main blog + switch_to_blog(1); + } + + //echo $blog_id; + // get current site framework options and thus gets it csstype value + $current_site = get_option("legacy_demo"); + if (isset($current_site['dynamic-css-type'])) { + $csstype = $current_site['dynamic-css-type']; + } + //print_r($current_site); + //echo $csstype; + if ($network_active) { + // switch back to current blog again if network active + switch_to_blog($current_blog_id); + } + //echo $blog_id; + } else { + + + if(!isset($legacyadmin) || (isset($legacyadmin) && is_array($legacyadmin) && sizeof($legacyadmin) == 0 )){ + $legacyadmin = get_option("legacy_demo"); + } + + if (isset($legacyadmin['dynamic-css-type'])) { + $csstype = $legacyadmin['dynamic-css-type']; + } + } + + /* --------------- Legacy Settings Panel - for demo purposes ---------------- */ + if (!has_action('plugins_loaded', 'legacy_regenerate_all_dynamic_css_file') && has_action('admin_footer', 'legacy_admin_footer_function')) { + if (file_exists(plugin_dir_path(__FILE__) . '../demo-settings/legacy-settings-panel-session.php')) { + include( trailingslashit(dirname(__FILE__)) . '../demo-settings/legacy-settings-panel-session.php' ); + } + } + //echo $csstype; + return $csstype; +} + +function legacy_default_css_colors() { + global $legacy_css_ver; + global $legacyadmin; + $csstype = legacy_dynamic_css_type(); + //echo "default:".$csstype; + $css_path = trailingslashit(plugins_url('/', __FILE__) . '../' . $legacy_css_ver . '/colors'); + $css_dir = trailingslashit(plugin_dir_path(__FILE__) . '../' . $legacy_css_ver . '/colors'); + + if (isset($csstype) && $csstype != "custom" && trim($csstype) != "") { + + $style_color = trim($csstype); + + if (file_exists($css_dir . 'legacy-colors-' . $style_color . '.css')) { + wp_deregister_style('legacy-colors'); + wp_register_style('legacy-colors', $css_path . 'legacy-colors-' . $style_color . '.css'); + wp_enqueue_style('legacy-colors'); + } else { + // enqueue the default legacy-colors.css file + legacy_dynamic_enqueue_style(); + } + } +} + +function legacy_dynamic_enqueue_style() { + global $legacy_css_ver; + + if (!is_multisite()) { + $url = plugins_url('/', __FILE__) . '../' . $legacy_css_ver . '/legacy-colors.css'; + } else if (is_multisite() && legacy_network_active()) { + // IF NETWORK ACTIVE + global $wpdb; + $current_site = 1; + $url = plugins_url('/', __FILE__) . '../' . $legacy_css_ver . '/legacy-colors-site-' . $current_site . '.css'; + } else { + // IF NOT NETWORK ACTIVE - FOR INDIVIDUAL SITES ONLY + global $wpdb; + $current_site = $wpdb->blogid; + $url = plugins_url('/', __FILE__) . '../' . $legacy_css_ver . '/legacy-colors-site-' . $current_site . '.css'; + } + wp_deregister_style('legacy-colors'); + wp_register_style('legacy-colors', $url); + wp_enqueue_style('legacy-colors'); + + $style_type = 'custom'; +} + +function legacy_wp_head_css() { + + global $legacy_css_ver; + global $legacyadmin; + + global $wpdb; + $current_blog_id = $wpdb->blogid; + + if (is_multisite() && legacy_network_active()) { + switch_to_blog(1); + $site_specific_legacyadmin = get_option("legacy_demo"); + $legacyadmin = $site_specific_legacyadmin; + switch_to_blog($current_blog_id); + } + //print_r($legacyadmin); + + echo ''; + + $style_type = 'custom'; +} + +/* ------------ Generate / Update dynamic CSS file on saving / changing plugin settings ---------- */ + +function legacy_regenerate_dynamic_css_file($newlegacyadmin = array(), $filename = "", $basedir = "") { + + global $legacy_css_ver; + global $legacyadmin; + if (sizeof($legacyadmin) == 0) { + $legacyadmin = get_option("legacy_demo"); + } + if (is_array($newlegacyadmin) && sizeof($newlegacyadmin) > 0) { + $legacyadmin = $newlegacyadmin; + } + + + global $legacy_color; + + $newfilename = "legacy-colors"; + if (trim($filename) != "") { + $newfilename = "legacy-colors-" . $filename; + } + + $dynamic_css = trailingslashit(plugin_dir_path(__FILE__) . '../' . $legacy_css_ver) . 'dynamic_css.php'; + ob_start(); // Capture all output (output buffering) + require($dynamic_css); // Generate CSS + $css = ob_get_clean(); // Get generated CSS (output buffering) + $css = legacy_compress_css($css); + + //echo "
    "; echo $css; echo "
    "; + + $css_dir = trailingslashit(plugin_dir_path(__FILE__) . '../' . $legacy_css_ver); + + if (isset($basedir) && $basedir != "") { + $css_dir = $basedir; + } + + require_once(ABSPATH . 'wp-admin/includes/file.php'); + WP_Filesystem(); + global $wp_filesystem; + if (!$wp_filesystem->put_contents($css_dir . '/' . $newfilename . '.css', $css, 0644)) { + return true; + } +} + +/* * ***************** + * legacy_regenerate_all_dynamic_css_file(); + * Generate all Colors CSS files Function + * Function called in main plugin file + * ******************* */ + +function legacy_regenerate_all_dynamic_css_file() { + + global $legacy_css_ver; + global $legacyadmin; + + if (isset($legacyadmin) && is_array($legacyadmin) && sizeof($legacyadmin) == 0) { + //switch_to_blog(1); + $get_legacyadmin = get_option("legacy_demo"); + $legacyadmin = $get_legacyadmin; + } + + $legacyadmin_backup = $legacyadmin; + //echo "hi"; + //print_r($legacyadmin_backup); + //die(); + + global $legacy_color; + + $basedir = trailingslashit(plugin_dir_path(__FILE__) . '../' . $legacy_css_ver . '/colors'); + // loop through each color + foreach ($legacy_color as $filename => $dyn_data) { + $legacyadmin = legacy_newdata($dyn_data); + //echo $filename."
    "; print_r($legacyadmin); echo "
    "; + //regenerate new css file + legacy_regenerate_dynamic_css_file($legacyadmin, $filename, $basedir); + $legacyadmin = $legacyadmin_backup; + } + + // V. Imp to restore the original $data in variable back. + $legacyadmin = $legacyadmin_backup; + //die; +} + +function legacy_newdata($dyn_data) { + + global $legacy_css_ver; + global $legacyadmin; + + // loop through dynamic values + foreach ($dyn_data as $type => $val) { + // string type options + if (!is_array($val) && trim($val) != "") { + $legacyadmin[$type] = $val; + } + + // array type options + if (is_array($val) && sizeof($val) > 0) { + foreach ($val as $type2 => $val2) { + if (!is_array($val2) && trim($val2) != "") { + $legacyadmin[$type][$type2] = $val2; + } + } + } + } + + return $legacyadmin; +} + +function legacy_compress_css($css) { + + /* remove comments */ + $css = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $css); + + /* remove tabs, spaces, newlines, etc. */ + $css = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $css); + return $css; +} + +function legacyadmin_access() { + + global $legacyadmin; + $str = ""; + + $element = 'enable-allusers-legacyadmin'; + if (isset($legacyadmin[$element]) && $legacyadmin[$element] != "1" && $legacyadmin[$element] == "0" && !$legacyadmin[$element]) { + if (!is_admin()) { + $str .= ".toplevel_page__legacyoptions{display:none;}"; + $str .= "#wp-admin-bar-_legacyoptions{display:none;}"; + } + } + + echo ""; +} + +function legacy_custom_css() { + + global $legacyadmin; + $legacyadmin = legacyadmin_network($legacyadmin); + + $str = ""; + + //print_r($legacyadmin); + + $element = 'custom-css'; + if (isset($legacyadmin[$element]) && trim($legacyadmin[$element]) != "") { + $str .= $legacyadmin[$element]; + } + + echo ""; +} + + +function legacy_login_custom_css(){ + + global $legacyadmin; + $legacyadmin = legacyadmin_network($legacyadmin); + + $str = ""; + + $element = 'custom-login-css'; + if(isset($legacyadmin[$element]) && trim($legacyadmin[$element]) != ""){ + $str .= $legacyadmin[$element]; + } + + echo ""; +} +function legacy_extra_css() { + + global $legacyadmin; + + $legacyadmin = legacyadmin_network($legacyadmin); + //print_r($legacyadmin); + + $transform = "uppercase"; + $style = ""; + $upgrade = "inline"; + + + /* ----------------- */ + /* Check admin side theme permission */ + $get_admintheme_page = legacy_get_option("legacyadmin_admintheme_page", "enable"); + + $adminside = true; + if (isset($get_admintheme_page) && $get_admintheme_page == "disable") { + $adminside = false; + } + //echo $adminside; + + if ($adminside) { + $element = 'menu-transform-text'; + if (isset($legacyadmin[$element]) && trim($legacyadmin[$element]) != "") { + $transform = $legacyadmin[$element]; + } + $style .= " #adminmenu .wp-submenu-head, #adminmenu a.menu-top { text-transform:" . $transform . " !important; } "; + } + + /* ----------------- */ + + + $element = 'footer_version'; + if (isset($legacyadmin[$element]) && trim($legacyadmin[$element]) != "") { + if ($legacyadmin[$element] == "0") { + $upgrade = "none"; + } + } + $style .= " #wpfooter #footer-upgrade { display:" . $upgrade . " !important; } "; + + echo ""; +} + +function legacy_disable_menu() { + + $str = ""; + $menudisable = get_option("legacyadmin_menudisable", ""); + $exp = array_unique(array_filter(explode("|", $menudisable))); + foreach ($exp as $menuid) { + $str .= "#" . $menuid . ", "; + } + + $str = substr($str, 0, -2); + +} + +function legacyprint($name, $arr) { + + echo "
    "; + echo $name; + echo "
    ";
    +    print_r($arr);
    +    echo "
    "; +} + +//change admin footer text +function legacy_footer_admin() { + + global $legacyadmin; + + $legacyadmin = legacyadmin_network($legacyadmin); + + $str = 'Thank you for creating with
    WordPress and Legacy - White Label WordPress Admin Theme'; + //print_r($legacyadmin); + + + $element = 'footer_text'; + if (isset($legacyadmin[$element]) && trim($legacyadmin[$element]) != "") { + $str = $legacyadmin[$element]; + } + + echo $str; + + $get_menumng_page = legacy_get_option( "legacyadmin_menumng_page","enable"); + if($get_menumng_page != "disable"){ + legacy_menu_management_counts(); + } + +} + +function legacy_menu_management_counts(){ + + //echo "
    ";
    +
    +    $counts = wp_get_update_data();
    +    $str = "";
    +    //echo "
    "; + //die(); + +} + + +function legacy_multisite_allsites() { + + $arr = array(); + // get all blogs + $blogs = get_blog_list(0, 'all'); + + if (0 < count($blogs)) : + foreach ($blogs as $blog) : + switch_to_blog($blog['blog_id']); + + if (get_theme_mod('show_in_home', 'on') !== 'on') { + continue; + } + + $blog_details = get_blog_details($blog['blog_id']); + //print_r($blog_details); + //echo "
    "; print_r(get_blog_option( $blog[ 'blog_id' ], 'legacy_demo' )); echo "
    "; + + $id = $blog['blog_id']; + $name = $blog_details->blogname; + $arr[$id] = $name; + + endforeach; + endif; + + return $arr; +} + +function legacy_network_active() { + + + if (!function_exists('is_plugin_active_for_network')) { + require_once( ABSPATH . '/wp-admin/includes/plugin.php' ); + } + + // Makes sure the plugin is defined before trying to use it + if (is_plugin_active_for_network('legacy-admin/legacy-core.php')) { + return true; + } + + return false; +} + +function legacy_add_option($variable, $default) { + if (legacy_network_active()) { + add_site_option($variable, $default); + } else { + add_option($variable, $default); + } +} + +function legacy_get_option($variable, $default) { + if (legacy_network_active()) { + return get_site_option($variable, $default); + } else { + return get_option($variable, $default); + } +} + +function legacy_update_option($variable, $default) { + if (legacy_network_active()) { + update_site_option($variable, $default); + } else { + update_option($variable, $default); + } +} + +function legacy_get_user_type() { + $get_admin_menumng_page = legacy_get_option("legacyadmin_admin_menumng_page", "enable"); + + $enablemenumng = true; + if ((is_super_admin() || current_user_can('manage_options')) && $get_admin_menumng_page == "disable") { + $enablemenumng = false; + } + return $enablemenumng; +} + +function legacy_generate_inbuilt_theme_import_file() { + global $legacy_color; + foreach ($legacy_color as $key => $value) { + $str = ""; + $str .= '{"dynamic-css-type":"custom","primary-color":"' . $value['primary-color'] . '",'; + $str .= '"page-bg":{"background-color":"' . $value['page-bg']['background-color'] . '"},'; + $str .= '"heading-color":"' . $value['heading-color'] . '",'; + $str .= '"body-text-color":"' . $value['body-text-color'] . '",'; + $str .= '"link-color":{"regular":"' . $value['link-color']['regular'] . '","hover":"' . $value['link-color']['hover'] . '"},'; + $str .= '"menu-bg":{"background-color":"' . $value['menu-bg']['background-color'] . '"},'; + $str .= '"menu-color":"' . $value['menu-color'] . '",'; + $str .= '"menu-hover-color":"' . $value['menu-hover-color'] . '",'; + $str .= '"submenu-color":"' . $value['submenu-color'] . '",'; + $str .= '"menu-primary-bg":"' . $value['menu-primary-bg'] . '",'; + $str .= '"menu-secondary-bg":"' . $value['menu-secondary-bg'] . '",'; + $str .= '"menu-icon-line-bg":{"background-color":"' . $value['menu-icon-line-bg']['background-color'] . '"},'; + $str .= '"menu-icon-color":"' . $value['menu-icon-color'] . '",'; + $str .= '"menu-icon-bg":{"background-color":"' . $value['menu-icon-bg']['background-color'] . '"},'; + $str .= '"menu-active-icon-color":"' . $value['menu-active-icon-color'] . '",'; + $str .= '"menu-active-icon-bg":{"background-color":"' . $value['menu-active-icon-bg']['background-color'] . '"},'; + $str .= '"submenu-active-icon-bg":{"background-color":"' . $value['submenu-active-icon-bg']['background-color'] . '"},'; + $str .= '"logo-bg":"' . $value['logo-bg'] . '",'; + $str .= '"box-bg":{"background-color":"' . $value['box-bg']['background-color'] . '"},'; + $str .= '"box-head-bg":{"background-color":"' . $value['box-head-bg']['background-color'] . '"},'; + $str .= '"box-head-color":"' . $value['box-head-color'] . '",'; + $str .= '"button-primary-bg":"' . $value['button-primary-bg'] . '",'; + $str .= '"button-primary-hover-bg":"' . $value['button-primary-hover-bg'] . '",'; + $str .= '"button-secondary-bg":"' . $value['button-secondary-bg'] . '",'; + $str .= '"button-secondary-hover-bg":"' . $value['button-secondary-hover-bg'] . '",'; + $str .= '"button-text-color":"' . $value['button-text-color'] . '",'; + $str .= '"form-bg":"' . $value['form-bg'] . '",'; + $str .= '"form-text-color":"' . $value['form-text-color'] . '",'; + $str .= '"form-border-color":"' . $value['form-border-color'] . '",'; + $str .= '"topbar-menu-color":"' . $value['topbar-menu-color'] . '",'; + $str .= '"topbar-menu-bg":{"background-color":"' . $value['topbar-menu-bg']['background-color'] . '"},'; + $str .= '"topbar-submenu-color":"' . $value['topbar-submenu-color'] . '",'; + $str .= '"topbar-submenu-bg":"' . $value['topbar-submenu-bg'] . '",'; + $str .= '"topbar-submenu-hover-bg":"' . $value['topbar-submenu-hover-bg'] . '","redux_import_export":"","redux-backup":1}'; + + legacy_inbuilttheme_file_create($key, $str); + } +} + +function legacy_inbuilttheme_file_create($filename, $str) { + + if (trim($filename) != "" && trim($str) != "") { + $css_dir = trailingslashit(plugin_dir_path(__FILE__) . '../inbuilt_themes_import'); + + require_once(ABSPATH . 'wp-admin/includes/file.php'); + WP_Filesystem(); + global $wp_filesystem; + if (!$wp_filesystem->put_contents($css_dir . '/' . $filename . '.txt', $str, 0644)) { + return true; + } + } +} + +function legacy_admin_footer_function() { + + + /* --------------- Settings Panel ----------------- */ + if (!has_action('plugins_loaded', 'legacy_regenerate_all_dynamic_css_file')) { + if (file_exists(plugin_dir_path(__FILE__) . '../demo-settings/legacy-settings-panel.php')) { + require_once( trailingslashit(dirname(__FILE__)) . '../demo-settings/legacy-settings-panel.php' ); + } + } +} + + +//add_action('wp_ajax_legacy_alternate_save', 'legacy_alternate_save_logic'); + +function legacy_alternate_save_logic() { + + if (!isset($_POST['legacy_nonce']) || !wp_verify_nonce($_POST['legacy_nonce'], 'legacy-nonce')) { + die('Permissions check failed. Please login or refresh (if already logged in) the page, then try Again.'); + } + + //print_r($_POST); + $values = $_POST['values']; + + $values = stripslashes($_POST["values"]); + + $values=''; + + //echo $values; + + //legacy_update_option("legacy_demo", $values); + die(); +} + + + +function legacy_screen_tabs(){ + + + global $legacy_css_ver; + global $legacyadmin; + + $legacyadmin = legacyadmin_network($legacyadmin); + + /*Remove Screen Option & Help Tabs*/ + + $screenoption = true; + $element = 'screen_option_tab'; + + //echo $legacyadmin[$element]; + + if(isset($legacyadmin[$element]) && trim($legacyadmin[$element]) != ""){ + if($legacyadmin[$element] == "0"){ + $screenoption = false; + }} + + $screenhelp = true; + $element = 'screen_help_tab'; + if(isset($legacyadmin[$element]) && trim($legacyadmin[$element]) != ""){ + if($legacyadmin[$element] == "0"){ + $screenhelp = false; + }} + + if(!$screenoption){ + add_filter('screen_options_show_screen', '__return_false'); + } + + if(!$screenhelp){ + add_action('admin_head', 'legacy_remove_help_tabs'); + } + +} + +function legacy_remove_help_tabs() { + $screen = get_current_screen(); + $screen->remove_help_tabs(); +} + + + +add_filter('admin_title', 'legacy_admin_title_update', 10, 2); + +function legacy_admin_title_update($admin_title, $title) +{ + return get_bloginfo('name').' • '.$title; +} + + + +function legacy_email_settings(){ + global $legacyadmin; + $legacyadmin = legacyadmin_network($legacyadmin); + + if(isset($legacyadmin['from-mail-email']) && trim($legacyadmin['from-mail-email']) != ""){ + // wp_mail_from + add_filter('wp_mail_from', 'legacy_from_mail'); + + } + + if(isset($legacyadmin['from-mail-name']) && trim($legacyadmin['from-mail-name']) != ""){ + // wp_mail_from_name + add_filter('wp_mail_from_name', 'legacy_from_mail_name'); + } + + +} + +function legacy_from_mail($original_email_address) { + + global $legacyadmin; + $legacyadmin = legacyadmin_network($legacyadmin); + $ret = $legacyadmin['from-mail-email']; + // $ret = "info@domain.com"; + return $ret; +} + +function legacy_from_mail_name($original_email_address_name) { + global $legacyadmin; + $legacyadmin = legacyadmin_network($legacyadmin); + $ret = $legacyadmin['from-mail-name']; + // $ret = "info"; + return $ret; + } + +?> \ No newline at end of file diff --git a/plugins/legacy-admin/lib/legacy-login.php b/plugins/legacy-admin/lib/legacy-login.php new file mode 100644 index 000000000..7338dd31c --- /dev/null +++ b/plugins/legacy-admin/lib/legacy-login.php @@ -0,0 +1,172 @@ + +"; print_r($legacyadmin); echo ""; + + global $legacy_css_ver; + + $url = plugins_url('/', __FILE__) . '../' . $legacy_css_ver . '/legacy-login.min.css'; + wp_deregister_style('legacy-login'); + wp_register_style('legacy-login', $url); + wp_enqueue_style('legacy-login'); + + $url = plugins_url('/', __FILE__) . '../js/legacy-login-scripts.js'; + wp_deregister_script('legacy-login-scripts-js'); + wp_register_script('legacy-login-scripts-js', $url); + wp_enqueue_script('legacy-login-scripts-js'); + + + echo "\n\n"; + + +} + +function legacy_custom_loginlogo_url() { + + global $legacyadmin; + $legacyadmin = legacyadmin_network($legacyadmin); + + $logourl = "https://wordpress.org/"; + + if (isset($legacyadmin['logo-url']) && trim($legacyadmin['logo-url']) != "") { + $logourl = $legacyadmin['logo-url']; + } + return $logourl; +} + +function legacy_login_options() { + + global $legacyadmin; + $legacyadmin = legacyadmin_network($legacyadmin); + + // back to blog + $backtoblog = "block"; + $element = 'backtosite_login_link'; + + if (isset($legacyadmin[$element]) && trim($legacyadmin[$element]) != "") { + if ($legacyadmin[$element] == "0") { + $backtoblog = "none"; + } + } + + $style = ""; + $style .= " #backtoblog { display:" . $backtoblog . " !important; } "; + + + // forgot password + + $forgot = "block"; + $element = 'forgot_login_link'; + + if (isset($legacyadmin[$element]) && trim($legacyadmin[$element]) != "") { + if ($legacyadmin[$element] == "0") { + $forgot = "none"; + } + } + + $style .= " #nav { display:" . $forgot . " !important; } "; + + echo ""; +} + +// change title +function legacy_loginlogo_title() { + global $legacyadmin; + $legacyadmin = legacyadmin_network($legacyadmin); + + $logourl = ""; + + if (isset($legacyadmin['login-logo-title']) && trim($legacyadmin['login-logo-title']) != "") { + $logourl = $legacyadmin['login-logo-title']; + } + return $logourl; +} + +add_filter('login_headertext', 'legacy_loginlogo_title'); + + + +?> \ No newline at end of file diff --git a/plugins/legacy-admin/lib/legacy-logo.php b/plugins/legacy-admin/lib/legacy-logo.php new file mode 100644 index 000000000..450dfe59d --- /dev/null +++ b/plugins/legacy-admin/lib/legacy-logo.php @@ -0,0 +1,198 @@ + + '', + 'page-bg' => array('background-color'), + 'heading-color' => '', + 'body-text-color' => '', + 'link-color' => array('regular','hover'), + 'menu-bg' => array('background-color'), + 'menu-color' => '', + 'menu-hover-color' => '', + 'submenu-color' => '', + 'menu-primary-bg' => '', + 'menu-secondary-bg' => '', + 'box-bg' => array('background-color'), + 'box-head-bg' => array('background-color'), + 'box-head-color' => '', + 'button-primary-bg' => '', + 'button-primary-hover-bg' => '', + 'button-secondary-bg' => '', + 'button-secondary-hover-bg' => '', + 'button-text-color' => '', + 'form-bg' => '', + 'form-text-color' => '', + 'form-border-color' => '', + 'logo-bg' => '', + 'topbar-menu-color' => '', + 'topbar-menu-bg' => array('background-color'), + 'topbar-submenu-color' => '', + 'topbar-submenu-bg' => '', + 'topbar-submenu-hover-bg' => '', + ); + + + $css = ""; + echo ""; + +} + +function legacy_logo($rettype = "") { + global $legacyadmin; + + $legacyadmin = legacyadmin_network($legacyadmin); + + //print_r($legacyadmin); + + + $csstype = legacy_dynamic_css_type(); + + legacy_css_variables($legacyadmin,$csstype); + + + + $str = ""; + if (isset($legacyadmin['enable-logo']) && $legacyadmin['enable-logo'] != "1" && $legacyadmin['enable-logo'] == "0" && !$legacyadmin['enable-logo']) { + + // hide logo + if ($rettype != "1") { + $str .= ""; + } + } else { + + // show logo + $logo = $logo_folded = ""; + + + if ($logo == "") { + if (isset($legacyadmin['logo']['url'])) { + $logo = trim($legacyadmin['logo']['url']); + } + } + if ($logo_folded == "") { + if (isset($legacyadmin['logo_folded']['url'])) { + $logo_folded = trim($legacyadmin['logo_folded']['url']); + } + } + + if ($rettype != "1") { + $str .= ""; + } + } + + if ($rettype != "1") { + echo $str; + } else { + return $str; + } +} + +function legacy_favicon() { + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + #adminmenuwrap .logo-overlay { cursor:hand;cursor:pointer; }"; + } + + echo ""; +} +?> \ No newline at end of file diff --git a/plugins/legacy-admin/lib/legacy-menu-settings.php b/plugins/legacy-admin/lib/legacy-menu-settings.php new file mode 100644 index 000000000..dd791b303 --- /dev/null +++ b/plugins/legacy-admin/lib/legacy-menu-settings.php @@ -0,0 +1,955 @@ +id); + + if (isset($plug) && $plug == "legacy-admin-addon_page_legacy_menumng_settings"){ + + $url = plugins_url('/', __FILE__).'../js/legacy-scripts-menu-management.js'; + wp_deregister_script('legacy-scripts-menu-management-js'); + wp_register_script('legacy-scripts-menu-management-js', $url); + wp_enqueue_script('legacy-scripts-menu-management-js'); + + $url = plugins_url('/', __FILE__).'../css/jquery-ui/minified/jquery-ui.min.css'; + wp_deregister_style('legacy-jqueryui'); + wp_register_style('legacy-jqueryui', $url); + wp_enqueue_style('legacy-jqueryui'); + + $url = plugins_url('/', __FILE__).'../js/legacy-jquery.ui.elements.js'; + wp_deregister_script('legacy-jqueryui'); + wp_register_script('legacy-jqueryui', $url); + wp_enqueue_script('legacy-jqueryui'); + + + wp_localize_script('legacy-scripts-menu-management-js', 'legacy_vars', array( + 'legacy_nonce' => wp_create_nonce('legacy-nonce') + ) + ); + } + + global $menu; + global $submenu; + global $legacymenu; + global $legacysubmenu; + + + if (!is_array($legacymenu) || sizeof($legacymenu) == 0) { + $legacymenu = $menu; + + $renamelegacymenu = legacy_rename_menu(); + $legacymenu = $renamelegacymenu; + + $neworder = legacy_adminmenu_neworder(); + //legacyprint("neworder",$neworder); + + $legacymenu = legacy_adminmenu_newmenu($neworder,$legacymenu); + //$legacymenu = legacy_adminmenu_disable($legacymenu); + + $GLOBALS['legacymenu'] = $legacymenu; + + + } + + if (!is_array($legacysubmenu) || sizeof($legacysubmenu) == 0) { + $legacysubmenu = $submenu; + + $renamelegacysubmenu = legacy_rename_submenu(); + $legacysubmenu = $renamelegacysubmenu; + //legacyprint('submenu',$submenu); + //return $submenu; + + $newsuborder = legacy_adminmenu_neworder(); + //echo "
    "; print_r($newsuborder); echo "
    "; + //return $submenu; + + $legacysubmeu = legacy_adminmenu_newsubmenu($newsuborder,$legacysubmenu,$legacymenu); + //return $submenu; + + $GLOBALS['legacysubmenu'] = $legacysubmenu; + + } + + //legacyprint('menu',$menu); + //legacyprint('submenu',$submenu); + //legacyprint('legacymenu',$legacymenu); + //legacyprint('legacysubmenu',$legacysubmenu); + + + echo '

    Admin Menu Management

    '; + $menudisable = legacy_get_option("legacyadmin_menudisable", ""); + $menudisablearr = array_unique(array_filter(explode("|", $menudisable))); + + $submenudisable = legacy_get_option("legacyadmin_submenudisable", ""); + + $submenudisablearr = array_unique(array_filter(explode("|", $submenudisable))); + + foreach ($legacymenu as $menuid => $menuarr) { + + /* ---------------- + menu tab + ---------------- */ + //echo $menuid."
    "; + //print_r($menuarr); + //if($menuarr[4] == "wp-menu-separator"){ + if (strpos($menuarr[4], "wp-menu-separator") !== false) { + // separator + //echo "
    ".$menuarr[0]."
    "; + } else { + // menu item + + $tabid = $menuid; + if (isset($menuarr['original'])) { + $tabid = $menuarr['original']; + } + + $sid = $tabid; + if (isset($menuarr[5])) { + $sid = $menuarr[5]; + } + + $menupage = $tabid; + if (isset($menuarr[2])) { + $menupage = $menuarr[2]; + } + + //print_r($menuarr); + $expstr = explode("<", $menuarr[0]); + $menuarr[0] = $expstr[0]; + + $originalname = $menuarr[0]; + //echo $originalname; + if(isset($menuarr['originalname'])){ + $originalname = $menuarr['originalname']; + } + + $expstr = explode("<", $originalname); + $originalname = $expstr[0]; + + + + + $originalicon = ""; + if (isset($menuarr[6])) { + $originalicon = $menuarr[6]; + if (isset($menuarr['originalicon'])) { + $originalicon = $menuarr['originalicon']; + } + } + + $disabled = " enabled "; + $disablebutclass = "disable"; + $disablebuttext = "hide"; + if (isset($menuarr[5]) && in_array($menuarr[5], $menudisablearr)) { + $disabled = " disabled "; + $disablebutclass = " enable "; + $disablebuttext = "show"; + } + + + echo "
    + +
    + + " . strip_tags($menuarr[0]) . " + + + +
    +
    + + +
    + ".__( 'Original', 'legacy_framework' ).": + " . $originalname . " +
    + ".__( 'Rename to', 'legacy_framework' ).": + +
    + ".__( 'Menu Icon', 'legacy_framework' ).": + + + + + +
    +
    +
    "; + + echo "
    "; + + /* -------------------- + submenu tabs + ---------------------- */ + echo "
    "; + if (isset($legacysubmenu[$menuarr[2]])) { + + $parentpage = ""; + if (isset($menuarr[2])) { + $parentpage = $menuarr[2]; + } + + foreach ($legacysubmenu[$menuarr[2]] as $submenuid => $submenuarr) { + + //print_r($submenuarr); + + //$submenuarr[0] = legacy_reformatstring($submenuarr[0]); + + $expstr = explode("<", $submenuarr[0]); + $submenuarr[0] = $expstr[0]; + + + $subtabid = $submenuid; + if (isset($submenuarr['original'])) { + $subtabid = $submenuarr['original']; + } + + $originalsubname = $submenuarr[0]; + if (isset($submenuarr['originalsubname'])) { + $originalsubname = $submenuarr['originalsubname']; + } + + $expstr = explode("<", $originalsubname); + $originalsubname = $expstr[0]; + + $subdisabled = " enabled "; + $subdisablebutclass = "disable"; + $subdisablebuttext = "hide"; + if (in_array($menupage . ":" . $subtabid, $submenudisablearr)) { + $subdisabled = " disabled "; + $subdisablebutclass = " enable "; + $subdisablebuttext = "show"; + } + + //print_r($submenuarr); + echo "
    + +
    + " . $submenuarr[0] . " + + + +
    + +
    + + +
    + ".__( 'Original', 'legacy_framework' ).": + " . $originalsubname . " +
    + ".__( 'Rename to', 'legacy_framework' ).": + +
    +
    +
    + +
    + +
    "; + } + + //print_r($submenu[$menuarr[2]]); + } + echo "
    "; // submenu end + echo "
    "; // menu end + } + } + + //echo ""; + + echo '
    '; + + //echo '
    '; echo '
    '; + + echo "
    ".__( 'Instructions', 'legacy_framework' ).":
      "; + echo "
    • ".__( 'Drag and Drop', 'legacy_framework' )." ".__( 'menu and sub menu items to rearrange.', 'legacy_framework' )."
    • "; + echo "
    • ".__( 'Click on', 'legacy_framework' )." ".__( 'icon to show or hide the menu or submenu item.', 'legacy_framework' )."
    • "; + echo "
    • ".__( 'Click on', 'legacy_framework' )." ".__( 'icon to edit menu and submenu link text', 'legacy_framework' )."
    • "; + echo "
    • ".__( 'Click on', 'legacy_framework' )." ".__( 'icon, click on the menu icon to open the available icons panel and pick your icon.', 'legacy_framework' )."
    • "; + echo "
    • ".__( 'Click on save menu button after editing.', 'legacy_framework' )."
    "; + + echo '

    '; + + + + echo legacy_menuicons_list(); + echo "
    "; + + echo "
    "; // .wrap +} + +add_action('wp_ajax_legacy_savemenu', 'legacy_savemenu'); + +function legacy_savemenu() { + if (!isset($_POST['legacy_nonce']) || !wp_verify_nonce($_POST['legacy_nonce'], 'legacy-nonce')) { + die('Permissions check failed. Please login or refresh (if already logged in) the page, then try Again.'); + } + + $neworder = $_POST['neworder']; + $newsuborder = $_POST['newsuborder']; + $menurename = $_POST['menurename']; + $submenurename = $_POST['submenurename']; + $menudisable = $_POST['menudisable']; + $submenudisable = $_POST['submenudisable']; + + //print_r($_POST); + legacy_update_option("legacyadmin_menuorder", $neworder); + legacy_update_option("legacyadmin_submenuorder", $newsuborder); + legacy_update_option("legacyadmin_menurename", $menurename); + legacy_update_option("legacyadmin_submenurename", $submenurename); + legacy_update_option("legacyadmin_menudisable", $menudisable); + legacy_update_option("legacyadmin_submenudisable", $submenudisable); + //echo "success"; + die(); +} + +add_action('wp_ajax_legacy_resetmenu', 'legacy_resetmenu'); + +function legacy_resetmenu() { + if (!isset($_POST['legacy_nonce']) || !wp_verify_nonce($_POST['legacy_nonce'], 'legacy-nonce')) { + die('Permissions check failed. Please login or refresh (if already logged in) the page, then try Again.'); + } + + $neworder = ""; + $newsuborder = ""; + $menurename = ""; + $submenurename = ""; + $menudisable = ""; + $submenudisable = ""; + + //print_r($_POST); + legacy_update_option("legacyadmin_menuorder", $neworder); + legacy_update_option("legacyadmin_submenuorder", $newsuborder); + legacy_update_option("legacyadmin_menurename", $menurename); + legacy_update_option("legacyadmin_submenurename", $submenurename); + legacy_update_option("legacyadmin_menudisable", $menudisable); + legacy_update_option("legacyadmin_submenudisable", $submenudisable); + //echo "success"; + die(); +} + +if ($get_menumng_page != "disable" && !is_network_admin()) { + add_action('admin_menu', 'legacy_adminmenu_rearrange', 999999999); +} + +function legacy_adminmenu_rearrange() { + + + $enablemenumng = legacy_get_user_type(); + + + global $menu; + global $submenu; + + if ($enablemenumng) { + + //legacyprint("menu",$menu); + + $renamemenu = legacy_rename_menu(); + $menu = $renamemenu; + //legacyprint("menu",$menu); + //return $menu; + + $neworder = legacy_adminmenu_neworder(); + //legacyprint("neworder",$neworder); + + $ret = legacy_adminmenu_newmenu($neworder, $menu); + $menu = $ret; + + $GLOBALS['legacymenu'] = $menu; + + $menu = legacy_adminmenu_disable($menu); + } + //legacyprint("menu",$menu); + return $menu; +} + +function legacy_adminmenu_neworder() { + + $new = array(); + $subnew = array(); + $ret = array(); + + $neworder = legacy_get_option("legacyadmin_menuorder", ""); + $newsuborder = legacy_get_option("legacyadmin_submenuorder", ""); + //echo $neworder; echo "
    "; echo $newsuborder; + + $exp = explode("|", $neworder); + $subexp = explode("|", $newsuborder); + + // set menu in new array + foreach ($exp as $id) { + if (trim($id) != "") { + $new[] = $id; + } + } + + // set submenu in new array with menu id + foreach ($subexp as $id) { + if (trim($id) != "") { + $subid = explode(":", $id); + $subnew[$subid[0]][] = $subid[1]; + } + } + + //legacyprint("new",$new); + //legacyprint("subnew",$subnew); + + $ret['menu'] = $new; + $ret['submenu'] = $subnew; + + return $ret; +} + +function legacy_adminmenu_newmenu($neworder, $menu) { + //legacyprint("menu",$menu); + //legacyprint("neworder",$neworder); + + $relation = array(); + + foreach ($menu as $id => $valarr) { + if (isset($valarr[5])) { + $relation[$valarr[5]] = $id; + } + } + + //print_r($relation); + //legacyprint("relation",$relation); + + $ret = array(); + $allids = $menu; + + $k = 100000; + foreach ($neworder['menu'] as $newmenuid) { + if (isset($relation[$newmenuid])) { + $k++; + $ret[$k] = $menu[$relation[$newmenuid]]; + $ret[$k]['original'] = $relation[$newmenuid]; + unset($allids[$relation[$newmenuid]]); + } + } + + foreach ($allids as $itemid => $item) { + $k++; + $ret[$k] = $item; + $ret[$k]['original'] = $itemid; + } + + //$ret = array_merge($ret,$allids); + //legacyprint("ret",$ret); + + return $ret; +} + +function legacy_adminmenu_newsubmenu($newsuborder, $submenu, $menu) { + + + $allids = $menu; + $allsubids = $submenu; + + + $ret = array(); + foreach ($newsuborder['submenu'] as $submenuid => $arr) { + $k = 1100000; + $k = 0; + foreach ($arr as $linkid) { + $submenu[$submenuid][$linkid]['original'] = $linkid; + $ret[$submenuid][$k] = $submenu[$submenuid][$linkid]; + unset($allsubids[$submenuid][$linkid]); + //$ret[$menumap[$submenuid]][]['original'] = $linkid; + $k++; + } + } + //legacyprint("allsubids",$allsubids); + + foreach ($allsubids as $itemid => $item) { + $k = 1100000; + $k = 0; + //if(sizeof($item) > 0){ + foreach ($item as $a => $b) { + $allsubids[$itemid][$a]['original'] = $a; + $ret[$itemid][$k] = $allsubids[$itemid][$a]; + //$ret[$k] = $item; + //$ret[$k]['original'] = $itemid; + $k++; + } + //} + } + + return $ret; +} + +if ($get_menumng_page != "disable" && !is_network_admin()) { + add_filter('custom_menu_order', 'legacy_admin_submenu_rearrange', 9999999999); +} + +function legacy_admin_submenu_rearrange() { + + global $legacymenu; + global $submenu; + + + $enablemenumng = legacy_get_user_type(); + if ($enablemenumng) { + //legacyprint('menu',$menu); + //legacyprint('submenu',$submenu); + //return $submenu; + + $renamesubmenu = legacy_rename_submenu(); + $submenu = $renamesubmenu; + //legacyprint('submenu',$submenu); + + + $newsuborder = legacy_adminmenu_neworder(); + //echo "
    "; print_r($newsuborder); echo "
    "; + + + $ret = legacy_adminmenu_newsubmenu($newsuborder, $submenu, $legacymenu); + + //return $submenu; + + + $submenu = $ret; + + $GLOBALS['legacysubmenu'] = $submenu; + + $submenu = legacy_adminsubmenu_disable($submenu); + } + return $submenu; + + +} + +function legacy_rename_menu_getnewID($menuarr, $field, $value) +{ + foreach($menuarr as $key => $product) + { + if ( $product[$field] === $value ) + return $key; + } + return false; +} + +function legacy_rename_menu() { + global $menu; + + $menurename = legacy_get_option("legacyadmin_menurename", ""); + + //legacyprint("menu",$menu); + + if (trim($menurename) != "") { + + $exp = explode("|#$%*|", $menurename); + + //legacyprint("exp",$exp); + foreach ($exp as $str) { + + if (trim($str) != "") { + + $id = $val = $icon = $original = ""; + + $arr = explode("@!@%@", $str); + if (isset($arr[0])) { + $id = $arr[0]; + } + if (isset($arr[1])) { + $str = $arr[1]; + } + $expstr = explode("[$!&!$]", $str); + if (isset($expstr[0])) { + $val = $expstr[0]; + } + if (isset($expstr[1])) { + $icon = $expstr[1]; + } + + if ($id != "") { + $expid = explode(":", $id); + $id = $expid[0]; + $sid = $expid[1]; + } + + // get new id + $id = legacy_rename_menu_getnewID($menu, "5", $sid); + + if (isset($menu[$id][0]) && isset($menu[$id][5]) && $menu[$id][5] == $sid) { + //print_r($original); + $original = $menu[$id][0]; + $menu[$id][0] = $val; + $menu[$id]['originalname'] = $original; + } + + if (isset($menu[$id][6]) && isset($menu[$id][5]) && $menu[$id][5] == $sid) { + $originalicon = $menu[$id][6]; + $menu[$id][6] = $icon; + $menu[$id]['originalicon'] = $originalicon; + } + //echo $id. " : ". $val."
    "; + } + } + } + //legacyprint("menu",$menu); + + return $menu; +} + +function legacy_rename_submenu() { + + global $submenu; + $submenurename = legacy_get_option("legacyadmin_submenurename", ""); + + if (trim($submenurename) != "") { + + $exp = explode("|#$%*|", $submenurename); + foreach ($exp as $str) { + + $idstr = $page = $parentid = $id = $val = $original = ""; + + $arr = explode("@!@%@", $str); + if (isset($arr[0])) { + $idstr = $arr[0]; + } + $idexp = explode("[($&)]", $idstr); + if (isset($idexp[0])) { + $page = $idexp[0]; + } + if (isset($idexp[1])) { + $idexp2 = explode(":", $idexp[1]); + } + if (isset($idexp2[0])) { + $parentid = $idexp2[0]; + } + if (isset($idexp2[1])) { + $id = $idexp2[1]; + } + if (isset($arr[1])) { + $val = $arr[1]; + } + + //echo $page." - ". $parentid. " - ". $id." - ". $val."
    "; + + if (isset($submenu[$page][$id][0])) { + $original = $submenu[$page][$id][0]; + $submenu[$page][$id][0] = $val; + $submenu[$page][$id]['originalsubname'] = $original; + } + //echo $id. " : ". $val."
    "; + } + } + //echo "
    "; print_r($submenu); echo "
    "; + return $submenu; +} + +function legacy_adminmenu_disable($menu) { + + //echo "
    "; print_r($menu); echo "
    "; + $menudisable = legacy_get_option("legacyadmin_menudisable", ""); + $exp = array_unique(array_filter(explode("|", $menudisable))); + + foreach ($menu as $id => $arr) { + if (isset($arr[5]) && in_array($arr[5], $exp)) { + unset($menu[$id]); + } + } + + return $menu; +} + +function legacy_adminsubmenu_disable($submenu) { + //echo "
    "; print_r($submenu); echo "
    "; + //legacyprint("submenu",$submenu); + global $menu; + //legacyprint("menu",$menu); + //enabled menu items + + $enabledmenu = array(); + foreach ($menu as $key => $value) { + $enabledmenu[] = $value[2]; + } + + //legacyprint("enabledmenu",$enabledmenu); + // map array of id and .php page of menu first + $menumap = array(); + foreach ($menu as $v) { + //$menumap[$v[2]] = $v[5];//$v['original']; + } + + //legacyprint("menumap",$menumap); + $submenudisable = legacy_get_option("legacyadmin_submenudisable", ""); + + $exp = array_unique(array_filter(explode("|", $submenudisable))); + + foreach ($submenu as $key => $value) { + + // check if parent menu is enabled. if not then unset it from submenu + if (!in_array($key, $enabledmenu)) { + unset($submenu[$key]); + } else { + + $parentid = ""; + //if(isset($parentid)){$parentid = $menumap[$key];} + + foreach ($value as $k => $v) { + $subid = ""; + if (isset($v['original'])) { + $subid = $v['original']; + } + if (in_array($key . ":" . $subid, $exp)) { + unset($submenu[$key][$k]); + } + } + } + } + + //legacyprint("submenu",$submenu); + return $submenu; +} + +function legacy_menuicons_list() { + $ret = ""; + $ret .= "
    "; + + $str = legacy_dashiconscsv(); + $exp = explode(",", $str); + foreach ($exp as $key => $value) { + $valexp = explode(":", $value); + $class = trim($valexp[0]); + $code = trim($valexp[1]); + $ret .= ""; + } + + $ret .= "
    "; + return $ret; +} + +function legacy_removeslashes($string) { + $string = implode("", explode("\\", $string)); + return stripslashes(trim($string)); +} + +function legacy_reformatstring($str) { + $str = htmlspecialchars($str, ENT_QUOTES); + $str = legacy_removeslashes($str); + return $str; +} + +function legacy_dashiconscsv() { + + $str = "menu:f333, + admin-site:f319, + dashboard:f226, + admin-media:f104, + admin-page:f105, + admin-comments:f101, + admin-appearance:f100, + admin-plugins:f106, + admin-users:f110, + admin-tools:f107, + admin-settings:f108, + admin-network:f112, + admin-generic:f111, + admin-home:f102, + admin-collapse:f148, + format-links:f103, + format-standard:f109, + format-image:f128, + format-gallery:f161, + format-audio:f127, + format-video:f126, + format-chat:f125, + format-status:f130, + format-aside:f123, + format-quote:f122, + welcome-edit-page:f119, + welcome-add-page:f133, + welcome-view-site:f115, + welcome-widgets-menus:f116, + welcome-comments:f117, + welcome-learn-more:f118, + image-crop:f165, + image-rotate-left:f166, + image-rotate-right:f167, + image-flip-vertical:f168, + image-flip-horizontal:f169, + undo:f171, + redo:f172, + editor-bold:f200, + editor-italic:f201, + editor-ul:f203, + editor-ol:f204, + editor-quote:f205, + editor-alignleft:f206, + editor-aligncenter:f207, + editor-alignright:f208, + editor-insertmore:f209, + editor-spellcheck:f210, + editor-expand:f211, + editor-contract:f506, + editor-kitchensink:f212, + editor-underline:f213, + editor-justify:f214, + editor-textcolor:f215, + editor-paste-word:f216, + editor-paste-text:f217, + editor-removeformatting:f218, + editor-video:f219, + editor-customchar:f220, + editor-outdent:f221, + editor-indent:f222, + editor-help:f223, + editor-strikethrough:f224, + editor-unlink:f225, + editor-rtl:f320, + editor-break:f474, + editor-code:f475, + editor-paragraph:f476, + align-left:f135, + align-right:f136, + align-center:f134, + align-none:f138, + lock:f160, + calendar:f145, + calendar-alt:f508, + visibility:f177, + post-status:f173, + edit:f464, + trash:f182, + external:f504, + arrow-up:f142, + arrow-down:f140, + arrow-left:f141, + arrow-right:f139, + arrow-up-alt:f342, + arrow-down-alt:f346, + arrow-left-alt:f340, + arrow-right-alt:f344, + arrow-up-alt2:f343, + arrow-down-alt2:f347, + arrow-left-alt2:f341, + arrow-right-alt2:f345, + leftright:f229, + sort:f156, + randomize:f503, + list-view:f163, + exerpt-view:f164, + grid-view:f509, + hammer:f308, + art:f309, + migrate:f310, + performance:f311, + universal-access:f483, + universal-access-alt:f507, + tickets:f486, + nametag:f484, + clipboard:f481, + heart:f487, + megaphone:f488, + schedule:f489, + wordpress:f120, + wordpress-alt:f324, + pressthis:f157, + update:f463, + screenoptions:f180, + info:f348, + cart:f174, + feedback:f175, + cloud:f176, + translation:f326, + tag:f323, + category:f318, + archive:f480, + tagcloud:f479, + text:f478, + media-archive:f501, + media-audio:f500, + media-code:f499, + media-default:f498, + media-document:f497, + media-interactive:f496, + media-spreadsheet:f495, + media-text:f491, + media-video:f490, + playlist-audio:f492, + playlist-video:f493, + yes:f147, + no:f158, + no-alt:f335, + plus:f132, + plus-alt:f502, + minus:f460, + dismiss:f153, + marker:f159, + star-filled:f155, + star-half:f459, + star-empty:f154, + flag:f227, + share:f237, + share1:f237, + share-alt:f240, + share-alt2:f242, + twitter:f301, + rss:f303, + email:f465, + email-alt:f466, + facebook:f304, + facebook-alt:f305, + networking:f325, + googleplus:f462, + location:f230, + location-alt:f231, + camera:f306, + images-alt:f232, + images-alt2:f233, + video-alt:f234, + video-alt2:f235, + video-alt3:f236, + vault:f178, + shield:f332, + shield-alt:f334, + sos:f468, + search:f179, + slides:f181, + analytics:f183, + chart-pie:f184, + chart-bar:f185, + chart-line:f238, + chart-area:f239, + groups:f307, + businessman:f338, + id:f336, + id-alt:f337, + products:f312, + awards:f313, + forms:f314, + testimonial:f473, + portfolio:f322, + book:f330, + book-alt:f331, + download:f316, + upload:f317, + backup:f321, + clock:f469, + lightbulb:f339, + microphone:f482, + desktop:f472, + tablet:f471, + smartphone:f470, + smiley:f328, + index-card:f510, + carrot:f511"; + + return $str; +} + +?> \ No newline at end of file diff --git a/plugins/legacy-admin/lib/legacy-pageloader.php b/plugins/legacy-admin/lib/legacy-pageloader.php new file mode 100644 index 000000000..e30c6bbeb --- /dev/null +++ b/plugins/legacy-admin/lib/legacy-pageloader.php @@ -0,0 +1,41 @@ + + \ No newline at end of file diff --git a/plugins/legacy-admin/lib/legacy-register-hook.php b/plugins/legacy-admin/lib/legacy-register-hook.php new file mode 100644 index 000000000..c4fed0f3a --- /dev/null +++ b/plugins/legacy-admin/lib/legacy-register-hook.php @@ -0,0 +1,52 @@ + \ No newline at end of file diff --git a/plugins/legacy-admin/lib/legacy-settings.php b/plugins/legacy-admin/lib/legacy-settings.php new file mode 100644 index 000000000..32dec4f2b --- /dev/null +++ b/plugins/legacy-admin/lib/legacy-settings.php @@ -0,0 +1,378 @@ +"; print_r($legacyadmin); echo ""; + + legacy_add_option("legacyadmin_plugin_access", "manage_options"); + legacy_add_option("legacyadmin_plugin_page", "show"); + legacy_add_option("legacyadmin_plugin_userid", ""); + legacy_add_option("legacyadmin_menumng_page", "enable"); + legacy_add_option("legacyadmin_admin_menumng_page", "enable"); + legacy_add_option("legacyadmin_admintheme_page", "enable"); + legacy_add_option("legacyadmin_logintheme_page", "enable"); + legacy_add_option("legacyadmin_master_theme", "0"); + + $get_menumng_page = legacy_get_option("legacyadmin_menumng_page", "enable"); + $get_admin_menumng_page = legacy_get_option("legacyadmin_admin_menumng_page", "enable"); + $get_admintheme_page = legacy_get_option("legacyadmin_admintheme_page", "enable"); + $get_logintheme_page = legacy_get_option("legacyadmin_logintheme_page", "enable"); + $get_mastertheme_page = legacy_get_option("legacyadmin_master_theme", "0"); + + + // manageoptions and super admin + $legacyadmin_permissions = legacy_get_option("legacyadmin_plugin_access", "manage_options"); + if ($legacyadmin_permissions == "super_admin" && is_super_admin()) { + $legacyadmin_permissions = 'manage_options'; + } + + // specific user + $legacyadmin_userid = legacy_get_option("legacyadmin_plugin_userid", ""); + if ($legacyadmin_permissions == "specific_user" && $legacyadmin_userid == get_current_user_id()) { + $legacyadmin_permissions = 'read'; + } + + $showtabs = true; + if (is_multisite() && legacy_network_active()) { + if (!is_main_site()) { + $showtabs = false; + } + } + + if ($showtabs) { + add_menu_page('Legacy Admin Addon', __('Legacy Admin Addon', 'legacy_framework'), $legacyadmin_permissions, 'legacy_permission_settings', 'legacy_permission_settings_page'); + add_submenu_page('legacy_permission_settings', 'Plugin Settings', __('Plugin Settings', 'legacy_framework'), $legacyadmin_permissions, 'legacy_permission_settings', 'legacy_permission_settings_page'); + if ($get_menumng_page != "disable") { + add_submenu_page('legacy_permission_settings', 'Menu Management', __('Menu Management', 'legacy_framework'), $legacyadmin_permissions, 'legacy_menumng_settings', 'legacy_menumng_settings_page'); + } + } +} + +function legacy_permission_settings_page() { + + if (isset($_POST['action']) && $_POST['action'] == 'legacy_save_settings') { + legacy_save_permission_settings(); + } + + $currentUser = wp_get_current_user(); + $isMultisite = is_multisite(); + $isSuperAdmin = is_super_admin(); + + $get_plugin_access = legacy_get_option("legacyadmin_plugin_access", "manage_options"); + $get_plugin_page = legacy_get_option("legacyadmin_plugin_page", "show"); + + $get_menumng_page = legacy_get_option("legacyadmin_menumng_page", "enable"); + $get_admin_menumng_page = legacy_get_option("legacyadmin_admin_menumng_page", "enable"); + + $get_admintheme_page = legacy_get_option("legacyadmin_admintheme_page", "enable"); + $get_logintheme_page = legacy_get_option("legacyadmin_logintheme_page", "enable"); + $get_mastertheme_page = legacy_get_option("legacyadmin_master_theme", "0"); + + + global $legacyadmin; +//echo $legacyadmin['dynamic-css-type']; +//echo "jhi"; + global $wpdb; + global $blog_id; + ?> + +
    + +

    Legacy Admin Settings

    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +

    + +

    + +

    + +

    + +

    + +

    +
    + +

    + +

    +
    + + +

    + +

    +
    + + +

    + +

    +
    + + +

    + +

    +
    + + +

    + +

    +
    + + + +
    + + +
    + + + $blogname) { + update_blog_option($blogid, 'legacy_demo', $master_options); + } + } + } + } +} + +add_filter('all_plugins', 'legacy_filter_plugin_list'); + +function legacy_filter_plugin_list() { + + if (!function_exists('get_plugins')) { + require_once ABSPATH . 'wp-admin/includes/plugin.php'; + } + + $plugins = get_plugins(); + + //print_r($plugins); + + $currentUser = wp_get_current_user(); + $uaccess = legacy_get_option("legacyadmin_plugin_access", "manage_options"); + $upage = legacy_get_option("legacyadmin_plugin_page", "show"); + $uid = legacy_get_option("legacyadmin_plugin_userid", ""); + + if ($upage == "hide") { + + if ($uaccess == "super_admin" && !is_super_admin()) { + unset($plugins['legacy-admin/legacy-core.php']); + } + + if ($uaccess == "specific_user" && $uid != get_current_user_id()) { + unset($plugins['legacy-admin/legacy-core.php']); + } + + if ($uaccess == "manage_options" && !current_user_can('manage_options')) { + unset($plugins['legacy-admin/legacy-core.php']); + } + } + + + return $plugins; + +} +?> \ No newline at end of file diff --git a/plugins/legacy-admin/lib/legacy-topbar.php b/plugins/legacy-admin/lib/legacy-topbar.php new file mode 100644 index 000000000..21d2f144a --- /dev/null +++ b/plugins/legacy-admin/lib/legacy-topbar.php @@ -0,0 +1,216 @@ + +#wpadminbar{display: none !important;} html.wp-toolbar{padding-top:0px !important;} "; + } +} + +function legacy_wptopbar() { + global $legacyadmin; + $legacyadmin = legacyadmin_network($legacyadmin); + + if (isset($legacyadmin['enable-topbar-wp']) && $legacyadmin['enable-topbar-wp'] != "1" && $legacyadmin['enable-topbar-wp'] == "0" && !$legacyadmin['enable-topbar-wp']) { + remove_action('wp_footer', 'wp_admin_bar_render', 9); + add_filter('show_admin_bar', '__return_false'); + } +} + +function legacy_admintopbar_style() { + global $legacyadmin; + $legacyadmin = legacyadmin_network($legacyadmin); + + $logomargintop = "-40px"; + + if(isset($legacyadmin['enable-topbar']) && $legacyadmin['enable-topbar'] != "1" && $legacyadmin['enable-topbar'] == "0" && !$legacyadmin['enable-topbar']){ + $logomargintop = "0px"; + } + + + + if (isset($legacyadmin['topbar-style']) && $legacyadmin['topbar-style'] != "style1") { + return " #adminmenuback{z-index: 99998 !important;} + #adminmenuwrap{margin-top: ".$logomargintop." !important;z-index: 99999 !important;} + .folded #wpadminbar{padding-left: 46px !important;} + #wpadminbar{padding-left: 245px !important;z-index: 9999 !important;} + .menu-hidden #wpadminbar{padding-left: 0px !important;} + .menu-expanded #wpadminbar{padding-left: 245px !important;} + .menu-collapsed #wpadminbar{padding-left: 46px !important;} + + .rtl #adminmenuback{z-index: 99998 !important;} + .rtl #adminmenuwrap{margin-top: ".$logomargintop." !important;z-index: 99999 !important;} + .rtl.folded #wpadminbar{padding-right: 46px !important;padding-left: 0px!important;} + .rtl #wpadminbar{padding-right: 245px !important;padding-left: 0px !important;z-index: 9999 !important;} + .rtl.menu-hidden #wpadminbar{padding-left: 0px !important;padding-right: 0px !important;} + .rtl.menu-expanded #wpadminbar{padding-right: 245px !important;padding-left: 0px !important;} + .rtl.menu-collapsed #wpadminbar{padding-right: 46px !important;padding-left: 0px !important;} + "; + } +} + +function legacy_admintopbar_links() { + + global $legacyadmin; + + $legacyadmin = legacyadmin_network($legacyadmin); + + //print_r($legacyadmin); + + $str = ""; + + $element = 'enable-topbar-links-wp'; + if (isset($legacyadmin[$element]) && $legacyadmin[$element] != "1" && $legacyadmin[$element] == "0" && !$legacyadmin[$element]) { + $str .= "#wp-admin-bar-wp-logo{display:none;}"; + } + + $element = 'enable-topbar-links-site'; + if (isset($legacyadmin[$element]) && $legacyadmin[$element] != "1" && $legacyadmin[$element] == "0" && !$legacyadmin[$element]) { + $str .= "#wp-admin-bar-site-name{display:none;}"; + } + + $element = 'enable-topbar-links-comments'; + if (isset($legacyadmin[$element]) && $legacyadmin[$element] != "1" && $legacyadmin[$element] == "0" && !$legacyadmin[$element]) { + $str .= "#wp-admin-bar-comments{display:none;}"; + } + + $element = 'enable-topbar-links-new'; + if (isset($legacyadmin[$element]) && $legacyadmin[$element] != "1" && $legacyadmin[$element] == "0" && !$legacyadmin[$element]) { + $str .= "#wp-admin-bar-new-content{display:none;}"; + } + + $element = 'enable-topbar-links-legacyadmin'; + if (isset($legacyadmin[$element]) && $legacyadmin[$element] != "1" && $legacyadmin[$element] == "0" && !$legacyadmin[$element]) { + $str .= "#wp-admin-bar-_legacyoptions{display:none;}"; + } + + $element = 'enable-topbar-myaccount'; + if (isset($legacyadmin[$element]) && $legacyadmin[$element] != "1" && $legacyadmin[$element] == "0" && !$legacyadmin[$element]) { + $str .= "#wp-admin-bar-my-account{display:none;}"; + } + + echo ""; +} + +function legacy_topbar_logout_link() { + global $legacyadmin; + $legacyadmin = legacyadmin_network($legacyadmin); + + $element = 'enable-topbar-directlogout'; + + if (isset($legacyadmin[$element]) && trim($legacyadmin[$element]) != "") { + + if ($legacyadmin[$element] == "1") { + + global $wp_admin_bar; + $wp_admin_bar->add_menu(array( + 'id' => 'wp-custom-logout', + 'title' => 'Logout', + 'parent' => 'top-secondary', + 'href' => wp_logout_url() + )); + } + } +} + +function legacy_topbar_menuids() { + + global $wp_admin_bar; + global $legacyadmin; + $legacyadmin = legacyadmin_network($legacyadmin); + + $element = 'enable-topbar-links-wp'; + if (isset($legacyadmin[$element]) && $legacyadmin[$element] != "1" && $legacyadmin[$element] == "0" && !$legacyadmin[$element]) { + $wp_admin_bar->remove_menu('wp-logo'); + } + + $element = 'enable-topbar-links-site'; + if (isset($legacyadmin[$element]) && $legacyadmin[$element] != "1" && $legacyadmin[$element] == "0" && !$legacyadmin[$element]) { + $wp_admin_bar->remove_menu('site-name'); + } + + $element = 'enable-topbar-links-comments'; + if (isset($legacyadmin[$element]) && $legacyadmin[$element] != "1" && $legacyadmin[$element] == "0" && !$legacyadmin[$element]) { + $wp_admin_bar->remove_menu('comments'); + } + + $element = 'enable-topbar-links-new'; + if (isset($legacyadmin[$element]) && $legacyadmin[$element] != "1" && $legacyadmin[$element] == "0" && !$legacyadmin[$element]) { + $wp_admin_bar->remove_menu('new-content'); + } + + $element = 'enable-topbar-links-legacyadmin'; + if (isset($legacyadmin[$element]) && $legacyadmin[$element] != "1" && $legacyadmin[$element] == "0" && !$legacyadmin[$element]) { + $wp_admin_bar->remove_menu('_legacyoptions'); + } + + $element = 'enable-topbar-myaccount'; + if (isset($legacyadmin[$element]) && $legacyadmin[$element] != "1" && $legacyadmin[$element] == "0" && !$legacyadmin[$element]) { + $wp_admin_bar->remove_menu('my-account'); + } + + + $element = 'topbar-removeids'; + if (isset($legacyadmin[$element]) && trim($legacyadmin[$element]) != "") { + $exp = explode(",", $legacyadmin[$element]); + $exp = array_unique(array_filter($exp)); + + foreach ($exp as $nodeid) { + if (trim($nodeid) != "") { + $wp_admin_bar->remove_menu($nodeid); + } + } + } +} + +function legacy_topbar_account_menu($wp_admin_bar) { + + global $legacyadmin; + $legacyadmin = legacyadmin_network($legacyadmin); + $greet = 'Howdy'; + + $element = 'myaccount_greet'; + if (isset($legacyadmin[$element]) && trim($legacyadmin[$element]) != "Howdy") { + + $greet = $legacyadmin[$element]; + if ($greet != "") { + $greet .= ', '; + } + + $user_id = get_current_user_id(); + $current_user = wp_get_current_user(); + $profile_url = get_edit_profile_url($user_id); + + if (0 != $user_id) { + + /* Add the "My Account" menu */ + $avatar = get_avatar($user_id, 28); + $howdy = $greet . '' . sprintf(__('%1$s','legacy_framework'), $current_user->display_name); + $class = empty($avatar) ? '' : 'with-avatar'; + + $wp_admin_bar->add_menu(array( + 'id' => 'my-account', + 'parent' => 'top-secondary', + 'title' => $howdy . $avatar, + 'href' => $profile_url, + 'meta' => array( + 'class' => $class, + ), + )); + } + } +} + +?> \ No newline at end of file diff --git a/plugins/rosariosis-rest-api/Gruntfile.js b/plugins/rosariosis-rest-api/Gruntfile.js new file mode 100644 index 000000000..26bedbdef --- /dev/null +++ b/plugins/rosariosis-rest-api/Gruntfile.js @@ -0,0 +1,96 @@ +/* jshint node:true */ +module.exports = function( grunt ){ + 'use strict'; + + grunt.initConfig({ + // setting folder templates + dirs: { + css: 'assets/css', + less: 'assets/css', + js: 'assets/js' + }, + + // Compile all .less files. + less: { + compile: { + options: { + // These paths are searched for @imports + paths: ['<%= less.css %>/'] + }, + files: [{ + expand: true, + cwd: '<%= dirs.css %>/', + src: [ + '*.less', + '!mixins.less' + ], + dest: '<%= dirs.css %>/', + ext: '.css' + }] + } + }, + + // Minify all .css files. + cssmin: { + minify: { + expand: true, + cwd: '<%= dirs.css %>/', + src: ['*.css'], + dest: '<%= dirs.css %>/', + ext: '.css' + } + }, + + // Minify .js files. + uglify: { + options: { + preserveComments: 'some' + }, + jsfiles: { + files: [{ + expand: true, + cwd: '<%= dirs.js %>/', + src: [ + '*.js', + '!*.min.js', + '!Gruntfile.js', + ], + dest: '<%= dirs.js %>/', + ext: '.min.js' + }] + } + }, + + // Watch changes for assets + watch: { + less: { + files: [ + '<%= dirs.less %>/*.less', + ], + tasks: ['less', 'cssmin'], + }, + js: { + files: [ + '<%= dirs.js %>/*js', + '!<%= dirs.js %>/*.min.js' + ], + tasks: ['uglify'] + } + }, + + }); + + // Load NPM tasks to be used here + grunt.loadNpmTasks( 'grunt-contrib-less' ); + grunt.loadNpmTasks( 'grunt-contrib-cssmin' ); + grunt.loadNpmTasks( 'grunt-contrib-uglify' ); + grunt.loadNpmTasks( 'grunt-contrib-watch' ); + + // Register tasks + grunt.registerTask( 'default', [ + 'less', + 'cssmin', + 'uglify' + ]); + +}; \ No newline at end of file diff --git a/plugins/rosariosis-rest-api/LICENSE b/plugins/rosariosis-rest-api/LICENSE new file mode 100644 index 000000000..ecbc05937 --- /dev/null +++ b/plugins/rosariosis-rest-api/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. \ No newline at end of file diff --git a/plugins/rosariosis-rest-api/assets/css/admin.css b/plugins/rosariosis-rest-api/assets/css/admin.css new file mode 100644 index 000000000..e69de29bb diff --git a/plugins/rosariosis-rest-api/assets/css/admin.less b/plugins/rosariosis-rest-api/assets/css/admin.less new file mode 100644 index 000000000..e69de29bb diff --git a/plugins/rosariosis-rest-api/assets/css/frontend.css b/plugins/rosariosis-rest-api/assets/css/frontend.css new file mode 100644 index 000000000..e69de29bb diff --git a/plugins/rosariosis-rest-api/assets/css/frontend.less b/plugins/rosariosis-rest-api/assets/css/frontend.less new file mode 100644 index 000000000..e69de29bb diff --git a/plugins/rosariosis-rest-api/assets/img/icon-128x128.png b/plugins/rosariosis-rest-api/assets/img/icon-128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..96a596be00e1c2a7d337b9f0e49b461361f2b50a GIT binary patch literal 1687 zcmV;I259+-P)C0001rP)t-sC_iC- zjG#43YAr)#{r&#<`1$+%{Qv*|{{H?dL1LMtw7|yDI8ALlQE*3Fc;V#fS!;!5c8)Pe zXvE6XvAM;*FWBRAzyzw839-ikzpmq^`W^>h8|d+d@}# za)Fn5hn&2_&TD&;m7uZ7&)0>LrcYvhx4+8L*WTlPm*D^a1;|N6K~#9!?V8!TqA(1A zk*%$QAc%-N2=2cB>rGP%0!KiWJ(a!zqM<`tMs~_P*5AipC=|{-=`B)$qwV)pbza9z77#H>b+ylk_ z2hnf8w!fnPqVyPl2&uo&f0PUHSFwLjy4P#_&SLI#$b1G~ioTGYzlU!%NIQ`NIH4yMPI9BXmi99AvP!j>0 zm8E&veqZP@tr39xz=&{H_O}7>)!8f%i0uCl0C*&te2*kH{yqZ8e2@}gU$p*qfOJ+S zMg(6i@o9o~fLA1TVE;z|d{#E1RR{V%0?6W^lQhjo07yN_Qb+O`KxJ+00RXA4(=R}0 zKKK}*usZhy&=J8G0NoI{=o^BG=tv}M{VM=paN3^SzS6JH%|7*GZ={IUuYIFGT1tJ| zuWyCVgvl5BRevTtUp5Us@BGKPgN0y^+cjgX2mT{5yT}%jsG=;iD&nuM+x2_^}o5Jp2PUhF^JW2PXCjFJyL^yGh*!+QH_u8&H zwr%tL$aKeKk)|um^sjs4$zq}L^WU21ILL@!8G9qx6WVHi6+ER)=hBiN8oa!UV1(fR znT)d%znj8;U`Ob&(+ZH^I4N8FD%MmQ01z4#PI8`E0-y~^4nUr1CR(LW)Dt)_^Z+*YM|5r9I2aKW;B%g?DH90wC;z3l6N$AP}D9 zH4L$3ONC+BR9uwQwO9LnMVKnp;YF93gjf(bU5QitJ$ z;lXH#lyn##y|n5-od=8+LinMyE=DS^-5mv`*tPR~)xEkH=@%npUSjjX6}pg5L^H4| z$tR*9T~-QE!4j^5?KQ;$ok*dda39%W- zt~5~0S(4277DJw8;y}|oe_*z|Q{eM@z0U3`Wcq!yqaW~~a-(134gCNsNJ78dhK$o7 hgA6jrAcG82kbk5voLZG>E2RJc002ovPDHLkV1g94I{W|t literal 0 HcmV?d00001 diff --git a/plugins/rosariosis-rest-api/assets/img/icon-256x256.png b/plugins/rosariosis-rest-api/assets/img/icon-256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0484c0ca757a23b32043aa8931a6c40e4b4847 GIT binary patch literal 3819 zcma)<`#;kU^vB=LPGguJ|#oKwBFu{AceFt@l; zQAY}UnQM=YZYB+^{H9oXMg+dd3{S{6b_{)yTvXfAZRQ*{_X|6d%dNcQij zMZR+IZo{rGhAvC2cVNxi`}tV_v-b}v$Bwit2-B(acJ;mAe$W5NB?uOwz7q0J)oKGn zqn6b7`>8Y$fIysf7{QxU@Bq+4J#V<0cGidcY@3qM9g2eo>{{D92Di5;ux&z(qjTjl zU)txT=jcqcM&TXVuf=lLI;o#Lr(>}wm){38RAc@LEV%7D7`sX5GGg>~;R6{qr~fQdw(9X?w&sy{S`mt&DfK#!F$c7 z&A7xapQjy&YXGWp`8WrfUg_T}yADKioZlUvqqaUqF>KXggwcDw2>4NlnWcZ9-^RDZ zu>rZd0T`y3wxKX>Mi@ztD42?9-`vA*U)e>;+$Vlu;gs84W1txVjD(jfh0iOm<#4>l z8BJ4i_HWSfg5}GFtxkNBHg~-n@DAU@y58^m2J=}oNhRPpQr3&b0Kkw1>I8~i%OtTh|?1L5F*|+3N4<|e22AH3a9q=ojV#1f@ z?;|ZT6+Ij_9%OTr?l+#uyy4kV+F`j4)9>=+y1nF~C{!7A>v2Ec>*nRcTWXn{uR!u^ zy#b{bC z-<;87sN^BC&$Fn2of@Adu_T_qbYsIoOB(0G>5Z(FZR|rYawSsoPpYb&ou#FOCU}sF zi|Xz_@Usp6Qa!?N_#HRJAPbFKzs`&hQ`R^Q!S+A`K|p=c`D8xZU{ssmd z7VT_$92H9x9m^89fil|Ri=amv?kIN83)?E&lJ0vYESr}LISfFj4(@?_&n1P>O~;*| z&L--jGc>qZ*2?b>oM0`p45dC^bWQ3WT+?XRdXt!zMLG4rY(+Yad+#FQO(?1U(gmg? z4V&n+_`EajGZfyrX@lAsE@|0vIFSIcESt2)WRPA=%nb_!2kYr#MnhO@_IiGF3Ku8LJRpTgtQAoLQh)hVfRO4)EStkDKT z*9GJ#MbmYjXl0g`*S}05fb3R5M*r`wLwuEJu9}dv%g8mh%g#eKrE~+d>u7}sANvy- zY7P_##l)WH`+F0e+7*s1q^W{lXIV50GG!?4y^oNG=YB{oBXbRLT{Adf154AOT}|Qz zxs=GZ*L&g+GvSqK^=@Q{lgwl!uUQYj%)Tu%fZU^Q)j=#wEH^~i0Fg&23%4Nz>uip@ zDROb&CJg9G;NB)DSEX_Ff)n}wfFFiEmyT2R+mZ-xYwSBwnPE<>6o4>*br7^ z_%07{_&uh)H3KknrZqqTVUd&^37|w(0%Z&=n0|=Zf-i(;SI4Rd zrcDE;rl+cOn?F~@9KQJ5+Jg_c&_dH2+xp&Cgh$f?vFnWCema4*+x`>gB%ey=?Tx*z z_{4BM_2Uwi7wq_`b1RKXdQJ(|E!Vs0-t2zT6eEp^v+E~ zl8Yj7Txo|3U}j4JGe4#g%ifccn?8Qxl9B02+T_k1bUUb?e9N@>f?NoI=wh9#J&~@MpSmQw-o&I;Eq)rBxD9X_Gf4(9a+6PIxXAk0tr^;(!0u)fkw}Tb zM$K4#P)9uJ_^iO*p-`r>j(lO&ZdtrMuRB&aEeR<+EEO0N_IV!{v9CW2Ml2 z(EJj}m=@YK>HsbD69XC^yT7l)39g&IqrXwGC%Z= zYRU`SXz}&bE*qj9Bj2B|n0a)*IDSj@mRLhnxvxC4%T-PHHG9+(sRaMFPy{2$uwC#X z8LPt_yFSjw>;*HQxV|_W(e;hjQ7i)1lc}eot{DYoBB)%@WcxSSjs6*H6$xM^p^Fjm z;|%TPVQVQ9?ivZO0iz=zjxfTo*iC@Ilg=1adqtRKT(NZ1n<2h64v|5J+NA^dJ6Au7 zD_e@gQLSoC;sE72lqv(#pM*Y3QP4K3>(t%hR+n3S*9IQ@{I}6R+AJ(u@xpNVMdtws zobJ3@8BVb1AH+)lHQI!w{Y;=eW0blF25go=)=)>0LqTG{6$AugM4_tcK}E1!-Z0JnB!NW53K=@6*O2c=AaHpg3#RD-xMmr zao<*F%?7+T!y2PH)?p2Pww?Y6@w=Fi)D_wE0JoUeRd=t&<-mPfzujH=p6t1c?K?-< zb9qmJ$jl(m+|nqN=ZsJA%vs^1LlE!$&W6r^>;W+_O&b%F&;cmhrhlOkLDB^&kFhm+ zCPoLm85>q}Lg0WFe}s=-pWp7qGbeWSjSMquJg>5o?_YWiRd}w2^j(9X zCI9eGQm;THgWZ)5xEI4kvTi58=EfV2pajq{CH+nJSc83hJ>D!>?l4KTq^XRpV{Q_; z)nWZDsj&8l<-5jD6Qf?bUq9>kuF}%+Ac2J&=^HrYs&CaWT9Qe11$QgLFt^NawX+l& zDmEYeD@62D%(&uOlc>IIrKZbic5%DC+W=B~=KLPFhwN~Xw@h{}p2y=Hj;5&rEMjD= z`##>#BD7`Qdj(R2YO=o9amJ+~jc%qnM~XhdalAT`hKqnNYDJDIWg$w5Bu)_-#Pk?c zvNzNt?qu6LTabUCm#qql;_ z59Z^}k8!cSF3_!v@TCQVOYVC#`t^keSr9!-3rZfvTmuEAFP~MBZddXO2~~@JD`YQ2 zj_mrb1$uVs)4HdE_I_hhLRCb^RlKC#byHrmCA_&U^R%r|itcnT5uKhf%ajd|yHWcK z>XEM&@X6JOrJPFOmE#&@1G!XbeE0i{0Ntr!iR`YdiMN$7ko4z))$$M$f?qgWLCHF6 z*z~bKpvcqXCJIf)F)^J-`fhj$0@+Hu1YTc0H%3w)A7crThAZ$R>N3VyBgBf<3f}Pa zDcA1Sn15rvo~kA)f&UL}H_J!d-PVs#3bmO4J(o60+@3UiEIpm}wetaQqVm<`0k3+DK)~&q(y(Vznvv_b29z~dZG&;R zpIrJ{Wqr0!lhU|8l0&fS2wk{o3g*0y2;g;HY y=ubO*<`#p7$=Kl#e55JuXYP8Hp8~poT0gR4`cBQ7{)Bgeb%_*7y literal 0 HcmV?d00001 diff --git a/plugins/rosariosis-rest-api/assets/img/icon.png b/plugins/rosariosis-rest-api/assets/img/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f6663dd6d0a0ee31a8e1848d6b3f13f72515a2c3 GIT binary patch literal 4324 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 BVQl~a literal 0 HcmV?d00001 diff --git a/plugins/rosariosis-rest-api/assets/js/admin.js b/plugins/rosariosis-rest-api/assets/js/admin.js new file mode 100644 index 000000000..a4bdeddec --- /dev/null +++ b/plugins/rosariosis-rest-api/assets/js/admin.js @@ -0,0 +1,5 @@ +(function($) { + $( document ).ready( function ( e ) { + + }); +})( jQuery ); diff --git a/plugins/rosariosis-rest-api/assets/js/admin.min.js b/plugins/rosariosis-rest-api/assets/js/admin.min.js new file mode 100644 index 000000000..d3ad82523 --- /dev/null +++ b/plugins/rosariosis-rest-api/assets/js/admin.min.js @@ -0,0 +1 @@ +jQuery(document).ready(function(){}); \ No newline at end of file diff --git a/plugins/rosariosis-rest-api/assets/js/frontend.js b/plugins/rosariosis-rest-api/assets/js/frontend.js new file mode 100644 index 000000000..a4bdeddec --- /dev/null +++ b/plugins/rosariosis-rest-api/assets/js/frontend.js @@ -0,0 +1,5 @@ +(function($) { + $( document ).ready( function ( e ) { + + }); +})( jQuery ); diff --git a/plugins/rosariosis-rest-api/assets/js/frontend.min.js b/plugins/rosariosis-rest-api/assets/js/frontend.min.js new file mode 100644 index 000000000..d3ad82523 --- /dev/null +++ b/plugins/rosariosis-rest-api/assets/js/frontend.min.js @@ -0,0 +1 @@ +jQuery(document).ready(function(){}); \ No newline at end of file diff --git a/plugins/rosariosis-rest-api/assets/js/settings.js b/plugins/rosariosis-rest-api/assets/js/settings.js new file mode 100644 index 000000000..36f11146e --- /dev/null +++ b/plugins/rosariosis-rest-api/assets/js/settings.js @@ -0,0 +1,71 @@ +jQuery(document).ready(function($) { + + /***** Colour picker *****/ + + $('.colorpicker').hide(); + $('.colorpicker').each( function() { + $(this).farbtastic( $(this).closest('.color-picker').find('.color') ); + }); + + $('.color').click(function() { + $(this).closest('.color-picker').find('.colorpicker').fadeIn(); + }); + + $(document).mousedown(function() { + $('.colorpicker').each(function() { + var display = $(this).css('display'); + if ( display == 'block' ) + $(this).fadeOut(); + }); + }); + + + /***** Uploading images *****/ + + var file_frame; + + jQuery.fn.uploadMediaFile = function( button, preview_media ) { + var button_id = button.attr('id'); + var field_id = button_id.replace( '_button', '' ); + var preview_id = button_id.replace( '_button', '_preview' ); + + // If the media frame already exists, reopen it. + if ( file_frame ) { + file_frame.open(); + return; + } + + // Create the media frame. + file_frame = wp.media.frames.file_frame = wp.media({ + title: jQuery( this ).data( 'uploader_title' ), + button: { + text: jQuery( this ).data( 'uploader_button_text' ), + }, + multiple: false + }); + + // When an image is selected, run a callback. + file_frame.on( 'select', function() { + attachment = file_frame.state().get('selection').first().toJSON(); + jQuery("#"+field_id).val(attachment.id); + if( preview_media ) { + jQuery("#"+preview_id).attr('src',attachment.sizes.thumbnail.url); + } + file_frame = false; + }); + + // Finally, open the modal + file_frame.open(); + } + + jQuery('.image_upload_button').click(function() { + jQuery.fn.uploadMediaFile( jQuery(this), true ); + }); + + jQuery('.image_delete_button').click(function() { + jQuery(this).closest('td').find( '.image_data_field' ).val( '' ); + jQuery(this).closest('td').find( '.image_preview' ).remove(); + return false; + }); + +}); \ No newline at end of file diff --git a/plugins/rosariosis-rest-api/assets/js/settings.min.js b/plugins/rosariosis-rest-api/assets/js/settings.min.js new file mode 100644 index 000000000..f506a9c28 --- /dev/null +++ b/plugins/rosariosis-rest-api/assets/js/settings.min.js @@ -0,0 +1 @@ +jQuery(document).ready(function(e){e(".colorpicker").hide();e(".colorpicker").each(function(){e(this).farbtastic(e(this).closest(".color-picker").find(".color"))});e(".color").click(function(){e(this).closest(".color-picker").find(".colorpicker").fadeIn()});e(document).mousedown(function(){e(".colorpicker").each(function(){var t=e(this).css("display");t=="block"&&e(this).fadeOut()})});var t;jQuery.fn.uploadMediaFile=function(e,n){var r=e.attr("id"),i=r.replace("_button",""),s=r.replace("_button","_preview");if(t){t.open();return}t=wp.media.frames.file_frame=wp.media({title:jQuery(this).data("uploader_title"),button:{text:jQuery(this).data("uploader_button_text")},multiple:!1});t.on("select",function(){attachment=t.state().get("selection").first().toJSON();jQuery("#"+i).val(attachment.id);n&&jQuery("#"+s).attr("src",attachment.sizes.thumbnail.url);t=!1});t.open()};jQuery(".image_upload_button").click(function(){jQuery.fn.uploadMediaFile(jQuery(this),!0)});jQuery(".image_delete_button").click(function(){jQuery(this).closest("td").find(".image_data_field").val("");jQuery(this).closest("td").find(".image_preview").remove();return!1})}); \ No newline at end of file diff --git a/plugins/rosariosis-rest-api/includes/class-rosariosis-rest-api-controller.php b/plugins/rosariosis-rest-api/includes/class-rosariosis-rest-api-controller.php new file mode 100644 index 000000000..6b9c0412b --- /dev/null +++ b/plugins/rosariosis-rest-api/includes/class-rosariosis-rest-api-controller.php @@ -0,0 +1,936 @@ +disable_cache = ! empty( $_GET['disable_cache'] ); + + $this->cache = false; + + add_action( 'current_screen', array( $this, 'plugins_screen_actions' ) ); + + add_action( 'admin_notices', array( $this, 'admin_notices' ) ); + } + + + /** + * Plugin screen actions: + * Test if connectivity to API is OK on admin pages: Plugins screen. + * + * @uses $this->check_connectivity() + */ + public function plugins_screen_actions() { + + $screen = get_current_screen(); + + // Test if connectivity to API is OK on admin pages: Plugins screen. + if ( 'plugins' === $screen->id ) { + + $this->check_connectivity(); + } + } + + + /** + * Main RosarioSIS_REST_API_Controller Instance + * + * Ensures only one instance of RosarioSIS_REST_API_Controller is loaded or can be loaded. + * + * @since 1.0.0 + * @static + * @see RosarioSIS_REST_API() + * + * @param string $file File pathname. + * @param string $version Version number. + * @return RosarioSIS_REST_API_Controller instance + */ + public static function instance( $file = '', $version = '1.0.0' ) { + if ( is_null( self::$_instance ) ) { + self::$_instance = new self( $file, $version ); + } + return self::$_instance; + } + + + /** + * Check connectivity to RosarioSIS EventsManager module API + * + * @access public + * @since 1.0.0 + * + * @return bool + */ + public function check_connectivity() { + + static $connectivity_cache; + + if ( ! is_null( $connectivity_cache ) ) { + + return $connectivity_cache; + } + + if ( ! defined( 'ROSARIOSIS_REST_API_URL' ) + || ! defined( 'ROSARIOSIS_REST_API_USER_TOKEN' ) ) { + + $this->add_error( __( 'Please define the ROSARIOSIS_REST_API_URL & ROSARIOSIS_REST_API_USER_TOKEN constants in the wp-config.php file.', 'rosariosis-rest-api' ) ); + + $connectivity_cache = false; + + return false; + } + + if ( ! filter_var( ROSARIOSIS_REST_API_URL, FILTER_VALIDATE_URL ) ) { + + $this->add_error( __( 'Please enter a valid ROSARIOSIS_REST_API_URL in the wp-config.php file.', 'rosariosis-rest-api' ) ); + + $connectivity_cache = false; + + return false; + } + + $this->delete_cached_request( 'get', 'config?filter=title,eq,LOGIN' ); + $response = $this->get( 'config?filter=title,eq,LOGIN', false ); + + if ( empty( $response ) || is_wp_error( $response ) ) { + + $this->add_error( __( 'Please enter a valid ROSARIOSIS_REST_API_URL and ROSARIOSIS_REST_API_USER_TOKEN in the wp-config.php file.', 'rosariosis-rest-api' ) ); + + // Reintent live (no cache) as we just had an error! + $this->delete_cached_request( 'get', 'config?filter=title,eq,LOGIN' ); + + $connectivity_cache = false; + + return false; + } + + if ( 200 === $this->status && + empty( $response->config_value ) ) { + + if ( ! empty( $response->error ) ) { + $this->add_error( $response->error ); + } else { + $this->add_error( __( 'Please enter a valid ROSARIOSIS_REST_API_URL and ROSARIOSIS_REST_API_USER_TOKEN in the wp-config.php file.', 'rosariosis-rest-api' ) ); + } + + // Reintent live (no cache) as we just had an error! + $this->delete_cached_request( 'get', 'config?filter=title,eq,LOGIN' ); + + $connectivity_cache = false; + + return false; + } + + if ( $response->config_value ) { + + $this->add_error( __( 'Connection successful.', 'rosariosis-rest-api' ), 'success' ); + } + + $connectivity_cache = true; + + return true; + } + + + /** + * Get RosarioSIS API endpoint URL + * + * @return string + */ + public function endpoint() { + + if ( isset( $this->endpoint ) ) { + + return $this->endpoint; + } + + $this->endpoint = rtrim( ROSARIOSIS_REST_API_URL, '/' ) . '/plugins/REST_API/api.php/'; + + return $this->endpoint; + } + + + /** + * Get RosarioSIS API Authentication endpoint URL + * + * @return string + */ + public function auth_endpoint() { + + if ( isset( $this->auth_endpoint ) ) { + + return $this->auth_endpoint; + } + + $this->auth_endpoint = rtrim( ROSARIOSIS_REST_API_URL, '/' ) . '/plugins/REST_API/auth.php'; + + return $this->auth_endpoint; + } + + + /** + * Get RosarioSIS API Access token + * Note: cannot save access_token to transient, JWT error. + * + * @return string + */ + public function get_access_token() { + + if ( isset( $this->access_token ) ) { + + return $this->access_token; + } + + $response = wp_remote_post( + $this->auth_endpoint(), + array( 'body' => array( 'usertoken' => ROSARIOSIS_REST_API_USER_TOKEN ) ) + ); + + if ( empty( $response ) || is_wp_error( $response ) ) { + + return ''; + } + + $response_body = $this->handle_body( $response ); + + if ( empty( $response_body->access_token ) ) { + + return ''; + } + + $this->access_token = $response_body->access_token; + + return $this->access_token; + } + + + /** + * Get RosarioSIS API action URL + * + * @uses $this->enpoint() + * + * @param string $action + * + * @return string + */ + public function get_action_url( $action ) { + + // Can omit 'records/'. + if ( strpos( $action, 'records/' ) === false ) { + $action = 'records/' . ltrim( $action, '/' ); + } + + return $this->endpoint() . $action; + } + + + /** + * Get DOLAPIKEY HTTP header. + * + * @return string + */ + public function auth_header() { + + if ( isset( $this->auth_header ) ) { + + return $this->auth_header; + } + + $this->auth_header = array( 'X-Authorization' => 'Bearer ' . $this->get_access_token() ); + + return $this->auth_header; + } + + + /** + * Get request arguments + * + * @param array $args Args to add to the request. + * + * @return array Request arguments. + */ + public function get_request_args( $args = array() ) { + + if ( empty( $this->request_args['headers'] ) ) { + + $this->request_args['headers'] = $this->auth_header(); + } + + return array_merge_recursive( $this->request_args, $args ); + } + + + /** + * Get JSON data + * Encodes data to JSON if needed. + * + * @param array|string $data Data. + * + * @return mixed|string|void + */ + public function get_json_data( $data ) { + + return ( $this->is_json( $data ) ? $data : json_encode( $data ) ); + } + + + /** + * Decode JSON data + * Decodes JSON data if needed. + * + * @param array|string $data JSON Data. + * + * @return mixed|string|void + */ + public function decode_json_data( $data ) { + + return ( $this->is_json( $data ) ? json_decode( $data ) : $data ); + } + + + /** + * Is JSON? + * + * @param array|string $data Data. + * + * @return bool + */ + public function is_json( $data ) { + if ( is_array( $data ) ) { + + return false; + } + + @json_decode( $data ); + + return ( json_last_error() === JSON_ERROR_NONE ); + } + + + /** + * Reset object properties before new request. + */ + public function reset() { + + $this->errors = array(); + + $this->request_args = array(); + + $this->body = null; + + $this->status = null; + } + + + /** + * Remote Request + * Get response from cache if found (GET only). + * + * @uses wp_remote_get + * @uses wp_remote_post + * @uses wp_remote_request + * @uses get_cached_request + * @uses cache_request + * + * @param string $method Method: get|post|put|delete + * @param string $action API Action. + * @param array $data Data (for POST & DELETE) + * + * @return array|mixed|WP_Error + */ + function request( $method, $action, $data = array() ) { + + $this->reset(); + + $cached_request = $this->get_cached_request( $method, $action, $data ); + + if ( ! empty( $cached_request['response'] ) ) { + + $response = $cached_request['response']; + } else { + + $args = array(); + + if ( $data ) { + + $args['body'] = $data; + } + + $action_url = $this->get_action_url( $action ); + + if ( 'get' === $method ) { + + $response = wp_remote_get( $action_url, $this->get_request_args( $args ) ); + } elseif ( 'post' === $method ) { + + $response = wp_remote_post( $action_url, $this->get_request_args( $args ) ); + + } elseif ( 'put' === $method ) { + + $args['method'] = 'PUT'; + + $response = wp_remote_request( $action_url, $this->get_request_args( $args ) ); + } elseif ( 'delete' === $method ) { + + $args['method'] = 'DELETE'; + + $response = wp_remote_request( $action_url, $this->get_request_args( $args ) ); + } + } + + $this->cache_request( $method, $action, $response ); + + return $response; + } + + + /** + * POST request + * + * @example /contacts/{id} get a contact. + * + * @param string $action API action. + * + * @return WP_Error|array The response or WP_Error on failure. + */ + public function get( $action, $cache = false ) { + + if ( $cache ) { + $this->cache = $this->disable_cache; + } + + $response = $this->request( 'get', $action ); + + if ( $cache ) { + $this->cache = false; + } + + return $this->handle_response( $response ); + } + + + /** + * POST request + * + * @example /contacts to create a contact. + * + * @param string $action API action. + * @param array $data Array or JSON data. + * + * @return WP_Error|array The response or WP_Error on failure. + */ + public function post( $action, $data = array() ) { + + $response = $this->request( 'post', $action, $data ); + + return $this->handle_response( $response ); + } + + + /** + * PUT request + * + * @example /contacts/{id} to delete a contact. + * + * @param string $action API action. + * @param array $data Array or JSON data. + * + * @return WP_Error|array The response or WP_Error on failure. + */ + public function put( $action, $data = array() ) { + + $response = $this->request( 'put', $action, $data ); + + return $this->handle_response( $response ); + } + + + /** + * DELETE request + * + * @example /contacts/{id} to delete a contact. + * + * @param string $action API action. + * + * @return WP_Error|array The response or WP_Error on failure. + */ + public function delete( $action ) { + + $response = $this->request( 'delete', $action ); + + return $this->handle_response( $response ); + } + + + /** + * Handle request response (or error) + * Set $this->handle_response to false if you do not want to the response to be handled here. + * + * @uses $this->handle_error() + * + * @param WP_Error|array $response Request response or WP_Error on failure. + * + * @return WP_Error|array|bool $response Request response or WP_Error on failure, when not handled or true / false when handled. + */ + public function handle_response( $response ) { + + if ( ! $this->handle_response ) { + + return $response; + } + + if ( $this->handle_error( $response ) ) { + + return false; + } + + if ( ! $this->handle_status( $response ) ) { + + return false; + } + + // Return decoded response body. + return $this->body; + } + + + /** + * Handle response error: + * get message and add to errors. + * + * @uses $this->add_error() + * + * @param WP_Error $wp_error + * + * @return boolean + */ + public function handle_error( $wp_error ) { + + $error_message = ''; + + if ( is_wp_error( $wp_error ) ) { + $error_message = $wp_error->get_error_message(); + + } elseif ( empty( $wp_error ) ) { + + $error_message = __( 'Empty response. Unknown error.', 'rosariosis-rest-api' ); + } + + if ( ! empty( $error_message ) ) { + + $this->add_error( $error_message ); + + return true; + } + + return false; + } + + + /** + * Handle response status + * Sets $this->status + * + * @uses handle_body() + * + * @param array $response Request response. + * + * @return bool False if body has error, true if status code >= 200 or < 299, else false. + */ + public function handle_status( $response ) { + + $this->status = $response['response']['code']; + + if ( ! $this->handle_body( $response ) ) { + + return false; + } + + if ( $this->status >= 200 && + $this->status < 299 ) { + + return true; + } + + $message = $this->status . ' ' . $response['response']['message']; + + if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { + + $message .= ' — ' . $response['http_response']->get_response_object()->url; + } + + $this->add_error( $message ); + + return false; + } + + + /** + * Handle response body + * Sets $this->body with decoded JSON data. + * + * @param array $response Request response. + * + * @return bool False if body has error, else body. + */ + public function handle_body( $response ) { + + $this->body = $this->decode_json_data( $response['body'] ); + + if ( ! empty( $this->body ) ) { + + if ( ! empty( $this->body->message ) ) { + + $message = $this->body->code . ' ' . $this->body->message; + + if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { + + $message .= ' — ' . $response['http_response']->get_response_object()->url; + } + + $this->add_error( $message ); + + return false; + } + } + + if ( isset( $this->body->records ) ) { + $this->body = $this->body->records; + + if ( count( $this->body ) === 1 ) { + $this->body = $this->body[0]; + } + } + + return $this->body; + } + + + /** + * Add error message to errors + * + * @param string $error_message + * @param string $level Level: info, success, error or warning. + * + * @return string Error message with plugin name prefixed. + */ + public function add_error( $message, $level = 'error', $plugin = 'this' ) { + + if ( 'this' === $plugin ) { + + $plugin = __( 'RosarioSIS REST API', 'rosariosis-rest-api' ); + } + + if ( $plugin ) { + + $message = $plugin . ' — ' . (string) $message; + } + + $this->errors[] = array( + 'message' => $message, + 'level' => $level, + ); + + return $message; + } + + /** + * Save errors to transient + * Pass errors from the save post action to the edit post screen redirection. + * + * @link https://www.sitepoint.com/displaying-errors-from-the-save_post-hook-in-wordpress/ + * + * @param int $post_id + */ + public function save_errors_to_transient( $post_id = 0 ) { + + $post_id = $post_id ? $post_id : (int) $_GET['post']; + + $transient_name = 'rosariosis_rest_api_errors_' . $post_id; + + set_transient( $transient_name, serialize( $this->errors ), 45 ); + } + + + /** + * Get errors from transient + * Get any error saved to transient for the current post ID. + * Delete transient immediately. + * + * @param int $post_id + * + * @return array|mixed + */ + public function get_errors_from_transient( $post_id = 0 ) { + + if ( ! $post_id && empty( $_GET['post'] ) ) { + + return array(); + } + + $post_id = $post_id ? $post_id : (int) $_GET['post']; + + $transient_name = 'rosariosis_rest_api_errors_' . $post_id; + + $transient = get_transient( $transient_name ); + + // Delete transient. + delete_transient( $transient_name ); + + if ( empty( $transient ) ) { + + return array(); + } + + return unserialize( $transient ); + } + + + /** + * Get last error and remove it from the errors array. + * + * @return array Empty array if no errors, else last error. + */ + public function last_error_unset() { + + if ( empty( $this->errors ) ) { + + return array(); + } + + return array_pop( $this->errors ); + } + + + /** + * Admin notices action + * + * @access public + * @since 1.0.0 + * + * @uses notice_html() + */ + public function admin_notices() { + + $errors_from_transient = $this->get_errors_from_transient(); + + if ( empty( $this->errors ) && + empty( $errors_from_transient ) ) { + + return; + } + + foreach ( $this->errors as $error ) { + + $this->notice_html( $error['message'], $error['level'] ); + } + + foreach ( $errors_from_transient as $error ) { + + $this->notice_html( $error['message'], $error['level'] ); + } + } + + + /** + * Notice HTML output + * + * @param string $message Message. + * @param string $level Level: info, success, error or warning. + */ + public function notice_html( $message, $level = '' ) { + + $level_class = ''; + + if ( $level && 'notice' !== $level ) { + $level_class = 'notice-' . $level; + } + ?> +
    +

    +
    + disable_cache to true. + * + * @param string $method + * @param string $action + * @param array $response + * @param array $data + * + * @return bool True if cached. + */ + public function cache_request( $method, $action, $response, $data = array() ) { + + // Do not cache POST, PUT and DELETE requests... + if ( $this->cache && 'get' === $method ) { + + return false; + } + + $cache = array( + 'method' => $method, + 'action' => $action, + 'data' => $data, + 'response' => $response, + ); + + $transient_name = 'rosariosis_rest_api_cache_' . $method . '_' . $action; + + return set_transient( $transient_name, $cache, 86400 ); + } + + + /** + * Get cached Request in transient + * Bypass cache by setting $this->disable_cache to true. + * + * @param string $method + * @param string $action + * @param array $data + * + * @return array|mixed Cached request or empty array. + */ + public function get_cached_request( $method, $action, $data = array() ) { + + // Do not cache POST, PUT and DELETE requests... + if ( $this->cache && 'get' === $method ) { + + return array(); + } + + $transient_name = 'rosariosis_rest_api_cache_' . $method . '_' . $action; + + $cache = get_transient( $transient_name ); + + if ( empty( $cache ) ) { + + return array(); + } + + if ( empty( $cache['data'] ) && empty( $data ) ) { + + return $cache; + } + + if ( $cache['data'] !== $data ) { + + return array(); + } + + return $cache; + } + + + /** + * Delete cached Request in transient + * + * @param string $method + * @param string $action + * + * @return bool True if deleted. + */ + public function delete_cached_request( $method, $action ) { + + $transient_name = 'rosariosis_rest_api_cache_' . $method . '_' . $action; + + return delete_transient( $transient_name ); + } +} diff --git a/plugins/rosariosis-rest-api/includes/class-rosariosis-rest-api-settings.php b/plugins/rosariosis-rest-api/includes/class-rosariosis-rest-api-settings.php new file mode 100644 index 000000000..1332ef44c --- /dev/null +++ b/plugins/rosariosis-rest-api/includes/class-rosariosis-rest-api-settings.php @@ -0,0 +1,442 @@ +parent = $parent; + + $this->base = 'wpt_'; + + // Initialise settings. + add_action( 'init', array( $this, 'init_settings' ), 11 ); + + // Register plugin settings. + add_action( 'admin_init' , array( $this, 'register_settings' ) ); + + // Add settings page to menu. + add_action( 'admin_menu' , array( $this, 'add_menu_item' ) ); + + // Add settings link to plugins page. + add_filter( 'plugin_action_links_' . plugin_basename( $this->parent->file ) , array( $this, 'add_settings_link' ) ); + } + + /** + * Initialise settings + * + * @return void + */ + public function init_settings() { + $this->settings = $this->settings_fields(); + } + + /** + * Add settings page to admin menu + * + * @return void + */ + public function add_menu_item() { + $page = add_options_page( __( 'Plugin Settings', 'rosariosis-rest-api' ) , __( 'Plugin Settings', 'rosariosis-rest-api' ) , 'manage_options' , $this->parent->_token . '_settings' , array( $this, 'settings_page' ) ); + add_action( 'admin_print_styles-' . $page, array( $this, 'settings_assets' ) ); + } + + /** + * Load settings JS & CSS + * + * @return void + */ + public function settings_assets() { + + // We're including the farbtastic script & styles here because they're needed for the colour picker + // If you're not including a colour picker field then you can leave these calls out as well as the farbtastic dependency for the wpt-admin-js script below. + wp_enqueue_style( 'farbtastic' ); + wp_enqueue_script( 'farbtastic' ); + + // We're including the WP media scripts here because they're needed for the image upload field + // If you're not including an image upload then you can leave this function call out. + wp_enqueue_media(); + + wp_register_script( $this->parent->_token . '-settings-js', $this->parent->assets_url . 'js/settings' . $this->parent->script_suffix . '.js', array( 'farbtastic', 'jquery' ), '1.0.0' ); + wp_enqueue_script( $this->parent->_token . '-settings-js' ); + } + + /** + * Add settings link to plugin list table + * + * @param array $links Existing links. + * @return array Modified links. + */ + public function add_settings_link( $links ) { + $settings_link = '' . __( 'Settings', 'rosariosis-rest-api' ) . ''; + array_push( $links, $settings_link ); + return $links; + } + + /** + * Build settings fields + * + * @return array Fields to be displayed on settings page. + */ + private function settings_fields() { + + $settings['standard'] = array( + 'title' => __( 'Standard', 'rosariosis-rest-api' ), + 'description' => __( 'These are fairly standard form input fields.', 'rosariosis-rest-api' ), + 'fields' => array( + array( + 'id' => 'text_field', + 'label' => __( 'Some Text' , 'rosariosis-rest-api' ), + 'description' => __( 'This is a standard text field.', 'rosariosis-rest-api' ), + 'type' => 'text', + 'default' => '', + 'placeholder' => __( 'Placeholder text', 'rosariosis-rest-api' ) + ), + array( + 'id' => 'password_field', + 'label' => __( 'A Password' , 'rosariosis-rest-api' ), + 'description' => __( 'This is a standard password field.', 'rosariosis-rest-api' ), + 'type' => 'password', + 'default' => '', + 'placeholder' => __( 'Placeholder text', 'rosariosis-rest-api' ) + ), + array( + 'id' => 'secret_text_field', + 'label' => __( 'Some Secret Text' , 'rosariosis-rest-api' ), + 'description' => __( 'This is a secret text field - any data saved here will not be displayed after the page has reloaded, but it will be saved.', 'rosariosis-rest-api' ), + 'type' => 'text_secret', + 'default' => '', + 'placeholder' => __( 'Placeholder text', 'rosariosis-rest-api' ) + ), + array( + 'id' => 'text_block', + 'label' => __( 'A Text Block' , 'rosariosis-rest-api' ), + 'description' => __( 'This is a standard text area.', 'rosariosis-rest-api' ), + 'type' => 'textarea', + 'default' => '', + 'placeholder' => __( 'Placeholder text for this textarea', 'rosariosis-rest-api' ) + ), + array( + 'id' => 'single_checkbox', + 'label' => __( 'An Option', 'rosariosis-rest-api' ), + 'description' => __( 'A standard checkbox - if you save this option as checked then it will store the option as \'on\', otherwise it will be an empty string.', 'rosariosis-rest-api' ), + 'type' => 'checkbox', + 'default' => '', + ), + array( + 'id' => 'select_box', + 'label' => __( 'A Select Box', 'rosariosis-rest-api' ), + 'description' => __( 'A standard select box.', 'rosariosis-rest-api' ), + 'type' => 'select', + 'options' => array( 'drupal' => 'Drupal', 'joomla' => 'Joomla', 'wordpress' => 'WordPress' ), + 'default' => 'wordpress', + ), + array( + 'id' => 'radio_buttons', + 'label' => __( 'Some Options', 'rosariosis-rest-api' ), + 'description' => __( 'A standard set of radio buttons.', 'rosariosis-rest-api' ), + 'type' => 'radio', + 'options' => array( 'superman' => 'Superman', 'batman' => 'Batman', 'ironman' => 'Iron Man' ), + 'default' => 'batman', + ), + array( + 'id' => 'multiple_checkboxes', + 'label' => __( 'Some Items', 'rosariosis-rest-api' ), + 'description' => __( 'You can select multiple items and they will be stored as an array.', 'rosariosis-rest-api' ), + 'type' => 'checkbox_multi', + 'options' => array( + 'square' => 'Square', + 'circle' => 'Circle', + 'rectangle' => 'Rectangle', + 'triangle' => 'Triangle', + ), + 'default' => array( 'circle', 'triangle' ), + ), + ), + ); + + $settings['extra'] = array( + 'title' => __( 'Extra', 'rosariosis-rest-api' ), + 'description' => __( 'These are some extra input fields that maybe aren\'t as common as the others.', 'rosariosis-rest-api' ), + 'fields' => array( + array( + 'id' => 'number_field', + 'label' => __( 'A Number' , 'rosariosis-rest-api' ), + 'description' => __( 'This is a standard number field - if this field contains anything other than numbers then the form will not be submitted.', 'rosariosis-rest-api' ), + 'type' => 'number', + 'default' => '', + 'placeholder' => __( '42', 'rosariosis-rest-api' ) + ), + array( + 'id' => 'colour_picker', + 'label' => __( 'Pick a colour', 'rosariosis-rest-api' ), + 'description' => __( 'This uses WordPress\' built-in colour picker - the option is stored as the colour\'s hex code.', 'rosariosis-rest-api' ), + 'type' => 'color', + 'default' => '#21759B', + ), + array( + 'id' => 'an_image', + 'label' => __( 'An Image' , 'rosariosis-rest-api' ), + 'description' => __( 'This will upload an image to your media library and store the attachment ID in the option field. Once you have uploaded an imge the thumbnail will display above these buttons.', 'rosariosis-rest-api' ), + 'type' => 'image', + 'default' => '', + 'placeholder' => '', + ), + array( + 'id' => 'multi_select_box', + 'label' => __( 'A Multi-Select Box', 'rosariosis-rest-api' ), + 'description' => __( 'A standard multi-select box - the saved data is stored as an array.', 'rosariosis-rest-api' ), + 'type' => 'select_multi', + 'options' => array( + 'linux' => 'Linux', + 'mac' => 'Mac', + 'windows' => 'Windows', + ), + 'default' => array( 'linux' ), + ), + ), + ); + + $settings = apply_filters( $this->parent->_token . '_settings_fields', $settings ); + + return $settings; + } + + /** + * Register plugin settings + * + * @return void + */ + public function register_settings() { + if ( is_array( $this->settings ) ) { + + $post_tab = isset( $_POST['tab'] ) ? sanitize_key( $_POST['tab'] ) : null; + $get_tab = isset( $_GET['tab'] ) ? sanitize_key( $_GET['tab'] ) : null; + + // Check posted/selected tab. + $current_section = ''; + if ( $post_tab ) { + $current_section = $post_tab; + } else { + if ( $get_tab ) { + $current_section = $get_tab; + } + } + + foreach ( $this->settings as $section => $data ) { + + if ( $current_section + && $current_section != $section ) { + continue; + } + + // Add section to page. + add_settings_section( $section, $data['title'], array( $this, 'settings_section' ), $this->parent->_token . '_settings' ); + + foreach ( $data['fields'] as $field ) { + + // Validation callback for field. + $validation = ''; + if ( isset( $field['callback'] ) ) { + $validation = $field['callback']; + } + + // Register field. + $option_name = $this->base . $field['id']; + register_setting( $this->parent->_token . '_settings', $option_name, $validation ); + + // Add field to page. + add_settings_field( + $field['id'], + $field['label'], + array( $this->parent->admin, 'display_field' ), + $this->parent->_token . '_settings', + $section, + array( + 'field' => $field, + 'prefix' => $this->base, + ) + ); + } + + if ( ! $current_section ) { + break; + } + } + } + } + + /** + * Settings section + * + * @param array $section Section info. + * + * @return void + */ + public function settings_section( $section ) { + $html = '

    ' . $this->settings[ $section['id'] ]['description'] . '

    ' . "\n"; + echo $html; + } + + /** + * Load settings page content + * + * @return void + */ + public function settings_page() { + + // Build page HTML. + $html = '
    ' . "\n"; + $html .= '

    ' . __( 'Plugin Settings' , 'rosariosis-rest-api' ) . '

    ' . "\n"; + + $get_tab = isset( $_GET['tab'] ) ? sanitize_key( $_GET['tab'] ) : null; + + $tab = ''; + if ( $get_tab ) { + $tab .= $get_tab; + } + + // Show page tabs. + if ( is_array( $this->settings ) && 1 < count( $this->settings ) ) { + + $html .= '' . "\n"; + } + + $html .= '
    ' . "\n"; + + // Get settings fields. + ob_start(); + settings_fields( $this->parent->_token . '_settings' ); + do_settings_sections( $this->parent->_token . '_settings' ); + $html .= ob_get_clean(); + + $html .= '

    ' . "\n"; + $html .= '' . "\n"; + $html .= '' . "\n"; + $html .= '

    ' . "\n"; + $html .= '
    ' . "\n"; + $html .= '
    ' . "\n"; + + echo $html; + } + + /** + * Main RosarioSIS_REST_API_Settings Instance + * + * Ensures only one instance of RosarioSIS_REST_API_Settings is loaded or can be loaded. + * + * @since 1.0.0 + * @static + * @see RosarioSIS_REST_API() + * + * @param object $parent Parent object. + * @return Main RosarioSIS_REST_API_Settings instance + */ + public static function instance( $parent ) { + if ( is_null( self::$_instance ) ) { + self::$_instance = new self( $parent ); + } + return self::$_instance; + } // End instance() + + /** + * Cloning is forbidden. + * + * @since 1.0.0 + */ + public function __clone() { + _doing_it_wrong( __FUNCTION__, __( 'Cheatin’ huh?' ), $this->parent->_version ); + } // End __clone() + + /** + * Unserializing instances of this class is forbidden. + * + * @since 1.0.0 + */ + public function __wakeup() { + _doing_it_wrong( __FUNCTION__, __( 'Cheatin’ huh?' ), $this->parent->_version ); + } // End __wakeup() +} diff --git a/plugins/rosariosis-rest-api/includes/class-rosariosis-rest-api.php b/plugins/rosariosis-rest-api/includes/class-rosariosis-rest-api.php new file mode 100644 index 000000000..eb3409f25 --- /dev/null +++ b/plugins/rosariosis-rest-api/includes/class-rosariosis-rest-api.php @@ -0,0 +1,320 @@ +_version = $version; + $this->_token = 'rosariosis_rest_api'; + + // Load plugin environment variables. + $this->file = $file; + $this->dir = dirname( $this->file ); + $this->assets_dir = trailingslashit( $this->dir ) . 'assets'; + $this->assets_url = esc_url( trailingslashit( plugins_url( '/assets/', $this->file ) ) ); + + $this->script_suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; + + register_activation_hook( $this->file, array( $this, 'install' ) ); + + // Load frontend JS & CSS. + // add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_styles' ), 10 ); + // add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), 10 ); + + // Load admin JS & CSS. + // add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ), 10, 1 ); + // add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_styles' ), 10, 1 ); + + // Load API for generic admin functions. + /*if ( is_admin() ) { + $this->admin = new RosarioSIS_REST_API_Admin_API(); + }*/ + + // Handle localisation. + $this->load_plugin_textdomain(); + add_action( 'init', array( $this, 'load_localisation' ), 0 ); + } // End __construct () + + /** + * Wrapper function to register a new post type + * + * @param string $post_type Post type name. + * @param string $plural Post type item plural name. + * @param string $single Post type item single name. + * @param string $description Description of post type. + * @param array $options Post type options. + * @return object Post type class object. + */ + public function register_post_type( $post_type = '', $plural = '', $single = '', $description = '', $options = array() ) { + + if ( ! $post_type || + ! $plural || + ! $single ) { + return; + } + + $post_type = new RosarioSIS_REST_API_Post_Type( $post_type, $plural, $single, $description, $options ); + + return $post_type; + } + + /** + * Wrapper function to register a new taxonomy + * + * @param string $taxonomy Taxonomy name. + * @param string $plural Taxonomy single name. + * @param string $single Taxonomy plural name. + * @param array $post_types Post types to which this taxonomy applies. + * @param array $taxonomy_args Taxonomy arguments. + * @return object Taxonomy class object + */ + public function register_taxonomy( $taxonomy = '', $plural = '', $single = '', $post_types = array(), $taxonomy_args = array() ) { + + if ( ! $taxonomy || + ! $plural || + ! $single ) { + return; + } + + $taxonomy = new RosarioSIS_REST_API_Taxonomy( $taxonomy, $plural, $single, $post_types, $taxonomy_args ); + + return $taxonomy; + } + + /** + * Load frontend CSS. + * + * @access public + * @since 1.0.0 + * @return void + */ + public function enqueue_styles() { + wp_register_style( $this->_token . '-frontend', esc_url( $this->assets_url ) . 'css/frontend.css', array(), $this->_version ); + wp_enqueue_style( $this->_token . '-frontend' ); + } // End enqueue_styles () + + /** + * Load frontend Javascript. + * + * @access public + * @since 1.0.0 + * @return void + */ + public function enqueue_scripts() { + wp_register_script( $this->_token . '-frontend', esc_url( $this->assets_url ) . 'js/frontend' . $this->script_suffix . '.js', array( 'jquery' ), $this->_version ); + wp_enqueue_script( $this->_token . '-frontend' ); + } // End enqueue_scripts () + + /** + * Load admin CSS. + * + * @access public + * @since 1.0.0 + * @return void + */ + public function admin_enqueue_styles( $hook = '' ) { + wp_register_style( $this->_token . '-admin', esc_url( $this->assets_url ) . 'css/admin.css', array(), $this->_version ); + wp_enqueue_style( $this->_token . '-admin' ); + } // End admin_enqueue_styles () + + /** + * Load admin Javascript. + * + * @access public + * @since 1.0.0 + * + * @param string $hook Hook. + * @return void + */ + public function admin_enqueue_scripts( $hook = '' ) { + wp_register_script( $this->_token . '-admin', esc_url( $this->assets_url ) . 'js/admin' . $this->script_suffix . '.js', array( 'jquery' ), $this->_version ); + wp_enqueue_script( $this->_token . '-admin' ); + } // End admin_enqueue_scripts () + + /** + * Load plugin localisation + * + * @access public + * @since 1.0.0 + * @return void + */ + public function load_localisation() { + load_plugin_textdomain( 'rosariosis-rest-api', false, dirname( plugin_basename( $this->file ) ) . '/lang/' ); + } // End load_localisation () + + /** + * Load plugin textdomain + * + * @access public + * @since 1.0.0 + * @return void + */ + public function load_plugin_textdomain() { + $domain = 'rosariosis-rest-api'; + + $locale = apply_filters( 'plugin_locale', get_locale(), $domain ); + + load_textdomain( $domain, WP_LANG_DIR . '/' . $domain . '/' . $domain . '-' . $locale . '.mo' ); + load_plugin_textdomain( $domain, false, dirname( plugin_basename( $this->file ) ) . '/lang/' ); + } // End load_plugin_textdomain () + + /** + * Main RosarioSIS_REST_API Instance + * + * Ensures only one instance of RosarioSIS_REST_API is loaded or can be loaded. + * + * @since 1.0.0 + * @static + * @see RosarioSIS_REST_API() + * + * @param string $file File pathname. + * @param string $version Version number. + * @return RosarioSIS_REST_API instance + */ + public static function instance( $file = '', $version = '1.0.0' ) { + if ( is_null( self::$_instance ) ) { + self::$_instance = new self( $file, $version ); + } + return self::$_instance; + } // End instance () + + /** + * Cloning is forbidden. + * + * @since 1.0.0 + */ + public function __clone() { + _doing_it_wrong( __FUNCTION__, __( 'Cheatin’ huh?' ), $this->_version ); + } // End __clone () + + /** + * Unserializing instances of this class is forbidden. + * + * @since 1.0.0 + */ + public function __wakeup() { + _doing_it_wrong( __FUNCTION__, __( 'Cheatin’ huh?' ), $this->_version ); + } // End __wakeup () + + /** + * Installation. Runs on activation. + * + * @access public + * @since 1.0.0 + * @return void + */ + public function install() { + $this->_log_version_number(); + } // End install () + + /** + * Log the plugin version number. + * + * @access public + * @since 1.0.0 + * @return void + */ + private function _log_version_number() { + update_option( $this->_token . '_version', $this->_version ); + } // End _log_version_number () +} diff --git a/plugins/rosariosis-rest-api/includes/lib/class-rosariosis-rest-api-admin-api.php b/plugins/rosariosis-rest-api/includes/lib/class-rosariosis-rest-api-admin-api.php new file mode 100644 index 000000000..4a8dfa5c0 --- /dev/null +++ b/plugins/rosariosis-rest-api/includes/lib/class-rosariosis-rest-api-admin-api.php @@ -0,0 +1,388 @@ +ID, $field['id'], true ); + + // Get data to display in field. + if ( isset( $option ) ) { + $data = $option; + } + } else { + + // Get saved option. + $option_name .= $field['id']; + $option = get_option( $option_name ); + + // Get data to display in field. + if ( isset( $option ) ) { + $data = $option; + } + } + + // Show default data if no option saved and default is supplied. + if ( $data === false + && isset( $field['default'] ) ) { + $data = $field['default']; + } elseif ( $data === false ) { + $data = ''; + } + + $html = ''; + + switch ( $field['type'] ) { + + case 'text': + case 'url': + case 'email': + case 'date': + $html .= '' . "\n"; + break; + + case 'password': + case 'number': + case 'hidden': + $min = ''; + if ( isset( $field['min'] ) ) { + $min = ' min="' . esc_attr( $field['min'] ) . '"'; + } + + $max = ''; + if ( isset( $field['max'] ) ) { + $max = ' max="' . esc_attr( $field['max'] ) . '"'; + } + $html .= '' . "\n"; + break; + + case 'text_secret': + $html .= '' . "\n"; + break; + + case 'textarea': + $html .= '
    '. "\n"; + break; + + case 'checkbox': + $checked = ''; + if ( $data && 'on' == $data ) { + $checked = 'checked="checked"'; + } + $html .= '' . "\n"; + break; + + case 'checkbox_multi': + foreach ( $field['options'] as $k => $v ) { + $checked = false; + if ( in_array( $k, (array) $data ) ) { + $checked = true; + } + $html .= ' '; + } + break; + + case 'radio': + foreach ( $field['options'] as $k => $v ) { + $checked = false; + if ( $k == $data ) { + $checked = true; + } + $html .= ' '; + } + break; + + case 'select': + $html .= ' '; + break; + + case 'select_multi': + $html .= ' '; + break; + + case 'image': + $image_thumb = ''; + if ( $data ) { + $image_thumb = wp_get_attachment_thumb_url( $data ); + } + $html .= '
    ' . "\n"; + $html .= '' . "\n"; + $html .= '' . "\n"; + $html .= '
    ' . "\n"; + break; + + case 'color': + ?>
    + +
    +
    + ' . $field['description'] . ''; + break; + + default: + if ( ! $post ) { + $html .= '' . "\n"; + } + break; + } + + if ( ! $echo ) { + return $html; + } + + echo $html; + } + + /** + * Validate form field + * + * @param string $data Submitted value. + * @param string $type Type of field to validate. + * @return string Validated value. + */ + public function validate_field( $data = '', $type = 'text' ) { + + switch( $type ) { + case 'text': + $data = esc_attr( $data ); + break; + case 'url': + $data = esc_url( $data ); + break; + case 'email': + $data = is_email( $data ); + break; + } + + return $data; + } + + /** + * Add meta box to the dashboard + * + * @param string $id Unique ID for metabox. + * @param string $title Display title of metabox. + * @param array $post_types Post types to which this metabox applies. + * @param string $context Context in which to display this metabox ('advanced' or 'side'). + * @param string $priority Priority of this metabox ('default', 'low' or 'high'). + * @param array $callback_args Any axtra arguments that will be passed to the display function for this metabox. + * @return void + */ + public function add_meta_box( $id = '', $title = '', $post_types = array(), $context = 'advanced', $priority = 'default', $callback_args = null ) { + + // Get post type(s). + if ( ! is_array( $post_types ) ) { + $post_types = array( $post_types ); + } + + // Generate each metabox. + foreach ( $post_types as $post_type ) { + add_meta_box( $id, $title, array( $this, 'meta_box_content' ), $post_type, $context, $priority, $callback_args ); + } + } + + /** + * Display metabox content + * + * @param object $post Post object. + * @param array $args Arguments unique to this metabox. + * @return void + */ + public function meta_box_content( $post, $args ) { + + $fields = apply_filters( $post->post_type . '_custom_fields', array(), $post->post_type ); + + if ( ! is_array( $fields ) || + 0 === count( $fields ) ) { + return; + } + + echo '
    ' . "\n"; + + foreach ( $fields as $field ) { + + if ( ! isset( $field['metabox'] ) ) { + continue; + } + + if ( ! is_array( $field['metabox'] ) ) { + $field['metabox'] = array( $field['metabox'] ); + } + + if ( in_array( $args['id'], $field['metabox'] ) ) { + $this->display_meta_box_field( $field, $post ); + } + } + + echo '
    ' . "\n"; + } + + /** + * Dispay field in metabox + * + * @param array $field Field data. + * @param object $post Post object. + * @return void + */ + public function display_meta_box_field( $field = array(), $post ) { + + if ( ! is_array( $field ) || + 0 === count( $field ) ) { + return; + } + + $field = '

    ' . $this->display_field( $field, $post, false ) . '

    ' . "\n"; + + echo $field; + } + + /** + * Save metabox fields + * + * @param integer $post_id Post ID. + * @return void + */ + public function save_meta_boxes( $post_id = 0 ) { + + global $post; + + if ( ! $post_id ) { + return; + } + + if ( ! is_admin() ) { + return; + } + + if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { + return; + } + + if ( empty( $post->ID ) ) { + return; + } + + if ( ! current_user_can( 'edit_page', $post->ID ) ) { + return; + } + + $post_type = get_post_type( $post_id ); + + $fields = apply_filters( $post_type . '_custom_fields', array(), $post_type ); + + if ( ! is_array( $fields ) || + 0 === count( $fields ) ) { + return; + } + + foreach ( $fields as $field ) { + if ( isset( $_REQUEST[ $field['id'] ] ) ) { + $request_field = sanitize_meta( $field['id'], $_REQUEST[ $field['id'] ], $post_type ); + + update_post_meta( + $post_id, + $field['id'], + $this->validate_field( $request_field, $field['type'] ) + ); + } else { + update_post_meta( $post_id, $field['id'], '' ); + } + } + } +} diff --git a/plugins/rosariosis-rest-api/includes/lib/class-rosariosis-rest-api-post-type.php b/plugins/rosariosis-rest-api/includes/lib/class-rosariosis-rest-api-post-type.php new file mode 100644 index 000000000..407cad1e7 --- /dev/null +++ b/plugins/rosariosis-rest-api/includes/lib/class-rosariosis-rest-api-post-type.php @@ -0,0 +1,191 @@ +post_type = $post_type; + $this->plural = $plural; + $this->single = $single; + $this->description = $description; + $this->options = $options; + + // Regsiter post type. + add_action( 'init' , array( $this, 'register_post_type' ) ); + + // Display custom update messages for posts edits. + add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) ); + add_filter( 'bulk_post_updated_messages', array( $this, 'bulk_updated_messages' ), 10, 2 ); + } + + /** + * Register new post type + * + * @return void + */ + public function register_post_type() { + + $labels = array( + 'name' => $this->plural, + 'singular_name' => $this->single, + 'name_admin_bar' => $this->single, + 'add_new' => _x( 'Add New', $this->post_type, 'rosariosis-rest-api' ), + 'add_new_item' => sprintf( __( 'Add New %s', 'rosariosis-rest-api' ), $this->single ), + 'edit_item' => sprintf( __( 'Edit %s', 'rosariosis-rest-api' ), $this->single ), + 'new_item' => sprintf( __( 'New %s', 'rosariosis-rest-api' ), $this->single ), + 'all_items' => sprintf( __( 'All %s', 'rosariosis-rest-api' ), $this->plural ), + 'view_item' => sprintf( __( 'View %s', 'rosariosis-rest-api' ), $this->single ), + 'search_items' => sprintf( __( 'Search %s', 'rosariosis-rest-api' ), $this->plural ), + 'not_found' => sprintf( __( 'No %s Found', 'rosariosis-rest-api' ), $this->plural ), + 'not_found_in_trash' => sprintf( __( 'No %s Found In Trash', 'rosariosis-rest-api' ), $this->plural ), + 'parent_item_colon' => sprintf( __( 'Parent %s' ), $this->single ), + 'menu_name' => $this->plural, + ); + + $args = array( + 'labels' => apply_filters( $this->post_type . '_labels', $labels ), + 'description' => $this->description, + 'public' => true, + 'publicly_queryable' => true, + 'exclude_from_search' => false, + 'show_ui' => true, + 'show_in_menu' => true, + 'show_in_nav_menus' => true, + 'query_var' => true, + 'can_export' => true, + 'rewrite' => true, + 'capability_type' => 'post', + 'has_archive' => true, + 'hierarchical' => true, + 'show_in_rest' => true, + 'rest_base' => $this->post_type, + 'rest_controller_class' => 'WP_REST_Posts_Controller', + 'supports' => array( 'title', 'editor', 'excerpt', 'comments', 'thumbnail' ), + 'menu_position' => 5, + 'menu_icon' => 'dashicons-admin-post', + ); + + $args = array_merge( $args, $this->options ); + + register_post_type( $this->post_type, apply_filters( $this->post_type . '_register_args', $args, $this->post_type ) ); + } + + /** + * Set up admin messages for post type + * + * @param array $messages Default message. + * @return array Modified messages. + */ + public function updated_messages( $messages = array() ) { + global $post, + $post_ID; + + $messages[ $this->post_type ] = array( + 0 => '', + 1 => sprintf( __( '%1$s updated. %2$sView %3$s%4$s.' , 'rosariosis-rest-api' ), $this->single, '', $this->single, '' ), + 2 => __( 'Custom field updated.' , 'rosariosis-rest-api' ), + 3 => __( 'Custom field deleted.' , 'rosariosis-rest-api' ), + 4 => sprintf( __( '%1$s updated.' , 'rosariosis-rest-api' ), $this->single ), + 5 => isset( $_GET['revision'] ) ? sprintf( __( '%1$s restored to revision from %2$s.', 'rosariosis-rest-api' ), $this->single, wp_post_revision_title( (int) $_GET['revision'], false ) ) : false, + 6 => sprintf( __( '%1$s published. %2$sView %3$s%4s.' , 'rosariosis-rest-api' ), $this->single, '', $this->single, '' ), + 7 => sprintf( __( '%1$s saved.' , 'rosariosis-rest-api' ), $this->single ), + 8 => sprintf( __( '%1$s submitted. %2$sPreview post%3$s%4$s.' , 'rosariosis-rest-api' ), $this->single, '', $this->single, '' ), + 9 => sprintf( __( '%1$s scheduled for: %2$s. %3$sPreview %4$s%5$s.' , 'rosariosis-rest-api' ), $this->single, '' . date_i18n( __( 'M j, Y @ G:i' , 'rosariosis-rest-api' ), strtotime( $post->post_date ) ) . '', '', $this->single, '' ), + 10 => sprintf( __( '%1$s draft updated. %2$sPreview %3$s%4$s.' , 'rosariosis-rest-api' ), $this->single, '', $this->single, '' ), + ); + + return $messages; + } + + /** + * Set up bulk admin messages for post type + * + * @param array $bulk_messages Default bulk messages. + * @param array $bulk_counts Counts of selected posts in each status. + * @return array Modified messages. + */ + public function bulk_updated_messages( $bulk_messages = array(), $bulk_counts = array() ) { + + $bulk_messages[ $this->post_type ] = array( + 'updated' => sprintf( _n( '%1$s %2$s updated.', '%1$s %3$s updated.', $bulk_counts['updated'], 'rosariosis-rest-api' ), $bulk_counts['updated'], $this->single, $this->plural ), + 'locked' => sprintf( _n( '%1$s %2$s not updated, somebody is editing it.', '%1$s %3$s not updated, somebody is editing them.', $bulk_counts['locked'], 'rosariosis-rest-api' ), $bulk_counts['locked'], $this->single, $this->plural ), + 'deleted' => sprintf( _n( '%1$s %2$s permanently deleted.', '%1$s %3$s permanently deleted.', $bulk_counts['deleted'], 'rosariosis-rest-api' ), $bulk_counts['deleted'], $this->single, $this->plural ), + 'trashed' => sprintf( _n( '%1$s %2$s moved to the Trash.', '%1$s %3$s moved to the Trash.', $bulk_counts['trashed'], 'rosariosis-rest-api' ), $bulk_counts['trashed'], $this->single, $this->plural ), + 'untrashed' => sprintf( _n( '%1$s %2$s restored from the Trash.', '%1$s %3$s restored from the Trash.', $bulk_counts['untrashed'], 'rosariosis-rest-api' ), $bulk_counts['untrashed'], $this->single, $this->plural ), + ); + + return $bulk_messages; + } +} diff --git a/plugins/rosariosis-rest-api/includes/lib/class-rosariosis-rest-api-taxonomy.php b/plugins/rosariosis-rest-api/includes/lib/class-rosariosis-rest-api-taxonomy.php new file mode 100644 index 000000000..08a4b390c --- /dev/null +++ b/plugins/rosariosis-rest-api/includes/lib/class-rosariosis-rest-api-taxonomy.php @@ -0,0 +1,143 @@ +taxonomy = $taxonomy; + $this->plural = $plural; + $this->single = $single; + if ( ! is_array( $post_types ) ) { + $post_types = array( $post_types ); + } + $this->post_types = $post_types; + $this->taxonomy_args = $tax_args; + + // Register taxonomy. + add_action( 'init', array( $this, 'register_taxonomy' ) ); + } + + /** + * Register new taxonomy + * + * @return void + */ + public function register_taxonomy() { + + $labels = array( + 'name' => $this->plural, + 'singular_name' => $this->single, + 'menu_name' => $this->plural, + 'all_items' => sprintf( __( 'All %s' , 'rosariosis-rest-api' ), $this->plural ), + 'edit_item' => sprintf( __( 'Edit %s' , 'rosariosis-rest-api' ), $this->single ), + 'view_item' => sprintf( __( 'View %s' , 'rosariosis-rest-api' ), $this->single ), + 'update_item' => sprintf( __( 'Update %s' , 'rosariosis-rest-api' ), $this->single ), + 'add_new_item' => sprintf( __( 'Add New %s' , 'rosariosis-rest-api' ), $this->single ), + 'new_item_name' => sprintf( __( 'New %s Name' , 'rosariosis-rest-api' ), $this->single ), + 'parent_item' => sprintf( __( 'Parent %s' , 'rosariosis-rest-api' ), $this->single ), + 'parent_item_colon' => sprintf( __( 'Parent %s:' , 'rosariosis-rest-api' ), $this->single ), + 'search_items' => sprintf( __( 'Search %s' , 'rosariosis-rest-api' ), $this->plural ), + 'popular_items' => sprintf( __( 'Popular %s' , 'rosariosis-rest-api' ), $this->plural ), + 'separate_items_with_commas' => sprintf( __( 'Separate %s with commas' , 'rosariosis-rest-api' ), $this->plural ), + 'add_or_remove_items' => sprintf( __( 'Add or remove %s' , 'rosariosis-rest-api' ), $this->plural ), + 'choose_from_most_used' => sprintf( __( 'Choose from the most used %s' , 'rosariosis-rest-api' ), $this->plural ), + 'not_found' => sprintf( __( 'No %s found' , 'rosariosis-rest-api' ), $this->plural ), + ); + + $args = array( + 'label' => $this->plural, + 'labels' => apply_filters( $this->taxonomy . '_labels', $labels ), + 'hierarchical' => true, + 'public' => true, + 'show_ui' => true, + 'show_in_nav_menus' => true, + 'show_tagcloud' => true, + 'meta_box_cb' => null, + 'show_admin_column' => true, + 'show_in_quick_edit' => true, + 'update_count_callback' => '', + 'show_in_rest' => true, + 'rest_base' => $this->taxonomy, + 'rest_controller_class' => 'WP_REST_Terms_Controller', + 'query_var' => $this->taxonomy, + 'rewrite' => true, + 'sort' => '', + ); + + $args = array_merge( $args, $this->taxonomy_args ); + + register_taxonomy( $this->taxonomy, $this->post_types, apply_filters( $this->taxonomy . '_register_args', $args, $this->taxonomy, $this->post_types ) ); + } +} diff --git a/plugins/rosariosis-rest-api/index.php b/plugins/rosariosis-rest-api/index.php new file mode 100644 index 000000000..62200328f --- /dev/null +++ b/plugins/rosariosis-rest-api/index.php @@ -0,0 +1,2 @@ +{&Uef#y{TJ-)p zl}-6kuw}I7%qyeGHCe{aEt)C}woRoTN^2=irZc)X83oBf?N7+EtBrOX(!Ty$n$(m!|VpVh)M|RK*vWSbMf4=}=ZG?-E5asXJ%R)BQh5o}^;US17I+<>E884n>aXAC;vj z9Q0DIjrC&J6)G2-P2t4M#8i4;$Nm11v3ZTkyU^I8?`6?{fRRZ%A|_Q+C@p4uP*>7( zZ?ZQNTejV2qs2BxVp0!rr|IjcH-$J85rsw3}R(qWy84 zKaZ^xvy&Q2^?dC6_z|VoDJ!LQ>^JsjJ7Rbl*REv2RwOzzxza^U!-vZEJ{O;`X1iMA z#Bi=W3Ofv=2ve)Rn3~3BytUGeX(fCyyNUB#OJBwmhL_*m=aaVlZmgV-X+H0v;8s>* z$JhfGldhLtx3RWPtJjUUG~K1>?e$BIDNCD`6KIP8)Vn5<OC>A)*#5_@`|a6jc{KQ9mu;rteag>H;eTbRVt3(YymsFO?7Jq;-I-&f rp##@vrGnM}b{BNz%%48z@-l(Uf6M(Q4z9(@8r*o@f4I{7H@QCnluGVr literal 0 HcmV?d00001 diff --git a/plugins/rosariosis-rest-api/lang/rosariosis-rest-api-fr_FR.po b/plugins/rosariosis-rest-api/lang/rosariosis-rest-api-fr_FR.po new file mode 100644 index 000000000..36497f678 --- /dev/null +++ b/plugins/rosariosis-rest-api/lang/rosariosis-rest-api-fr_FR.po @@ -0,0 +1,62 @@ +# Copyright (C) 2014 RosarioSIS REST API +# This file is distributed under the same license as the RosarioSIS REST API package. +msgid "" +msgstr "" +"Project-Id-Version: RosarioSIS REST API 1.0\n" +"Report-Msgid-Bugs-To: http://wordpress.org/tag/WordPress-Plugin-Template\n" +"POT-Creation-Date: 2018-11-28 15:59+0100\n" +"PO-Revision-Date: 2018-11-28 16:00+0100\n" +"Last-Translator: \n" +"Language-Team: RosarioSIS \n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-Basepath: ..\n" +"X-Poedit-KeywordsList: __\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPathExcluded-0: includes/lib\n" +"X-Poedit-SearchPathExcluded-1: includes/class-rosariosis-rest-api-settings." +"php\n" + +#: includes/class-rosariosis-rest-api-controller.php:169 +msgid "" +"Please define the ROSARIOSIS_REST_API_URL & ROSARIOSIS_REST_API_USER_TOKEN " +"constants in the wp-config.php file." +msgstr "" +"Merci de définir les constantes ROSARIOSIS_REST_API_URL et " +"ROSARIOSIS_REST_API_USER_TOKEN dans le fichier wp-config.php." + +#: includes/class-rosariosis-rest-api-controller.php:178 +msgid "Please enter a valid ROSARIOSIS_REST_API_URL in the wp-config.php file." +msgstr "" +"Merci d'entrer une ROSARIOSIS_REST_API_URL valide dans le fichier wp-config." +"php." + +#: includes/class-rosariosis-rest-api-controller.php:189 +msgid "" +"Please enter a valid ROSARIOSIS_REST_API_URL and ROSARIOSIS_REST_API_USER_TOKEN in " +"the wp-config.php file." +msgstr "" +"Merci de définir des constantes ROSARIOSIS_REST_API_URL et " +"ROSARIOSIS_REST_API_USER_TOKEN valides dans le fichier wp-config.php." + +#: includes/class-rosariosis-rest-api-controller.php:216 +msgid "Connection successful." +msgstr "Connexion réussie." + +#: includes/class-rosariosis-rest-api-controller.php:547 +msgid "Empty response. Unknown error." +msgstr "Réponse vide. Erreur inconnue." + +#: includes/class-rosariosis-rest-api-controller.php:646 +msgid "RosarioSIS REST API" +msgstr "API REST RosarioSIS" + +#: includes/class-rosariosis-rest-api.php:287 +#: includes/class-rosariosis-rest-api.php:296 +msgid "Cheatin’ huh?" +msgstr "On triche, hein?" diff --git a/plugins/rosariosis-rest-api/lang/rosariosis-rest-api.pot b/plugins/rosariosis-rest-api/lang/rosariosis-rest-api.pot new file mode 100644 index 000000000..16b4db48c --- /dev/null +++ b/plugins/rosariosis-rest-api/lang/rosariosis-rest-api.pot @@ -0,0 +1,49 @@ +# Copyright (C) 2014 RosarioSIS REST API +# This file is distributed under the same license as the RosarioSIS REST API package. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: RosarioSIS REST API 1.0\n" +"Report-Msgid-Bugs-To: http://wordpress.org/tag/WordPress-Plugin-Template\n" +"POT-Creation-Date: 2018-10-02 11:22+0200\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2014-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: RosarioSIS \n" +"X-Generator: Poedit 1.8.11\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-Basepath: ..\n" +"X-Poedit-KeywordsList: __\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPathExcluded-0: includes/lib\n" +"X-Poedit-SearchPathExcluded-1: includes/class-rosariosis-rest-api-settings." +"php\n" + +#: includes/class-rosariosis-rest-api-controller.php:142 +msgid "" +"Please define the ROSARIOSIS_REST_API_URL & ROSARIOSIS_REST_API_USER_TOKEN " +"constants in the wp-config.php file." +msgstr "" + +#: includes/class-rosariosis-rest-api-controller.php:151 +msgid "Please enter a valid ROSARIOSIS_REST_API_URL in the wp-config.php file." +msgstr "" + +#: includes/class-rosariosis-rest-api-controller.php:169 +msgid "Connection successful." +msgstr "" + +#: includes/class-rosariosis-rest-api-controller.php:436 +msgid "Empty response. Unknown error." +msgstr "" + +#: includes/class-rosariosis-rest-api-controller.php:499 +msgid "RosarioSIS REST API" +msgstr "" + +#: includes/class-rosariosis-rest-api.php:287 +#: includes/class-rosariosis-rest-api.php:296 +msgid "Cheatin’ huh?" +msgstr "" diff --git a/plugins/rosariosis-rest-api/package.json b/plugins/rosariosis-rest-api/package.json new file mode 100644 index 000000000..a2f0e2624 --- /dev/null +++ b/plugins/rosariosis-rest-api/package.json @@ -0,0 +1,14 @@ +{ + "name": "wordpress-plugin-template", + "title": "WordPress Plugin Template", + "version": "1.0.0", + "homepage": "https://github.com/hlashbrooke/WordPress-Plugin-Template", + "main": "Gruntfile.js", + "devDependencies": { + "grunt": "~1.0.1", + "grunt-contrib-uglify": "~3.2.1", + "grunt-contrib-less": "~1.4.1", + "grunt-contrib-cssmin": "~2.2.1", + "grunt-contrib-watch": "~1.0.0" + } +} diff --git a/plugins/rosariosis-rest-api/readme.txt b/plugins/rosariosis-rest-api/readme.txt new file mode 100644 index 000000000..95b3c9d4e --- /dev/null +++ b/plugins/rosariosis-rest-api/readme.txt @@ -0,0 +1,69 @@ +=== RosarioSIS REST API === +Contributors: rosariosis +Tags: school, sis, student, connect +Requires at least: 4.0 +Tested up to: 5.3 +Stable tag: 1.0.0 +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html + +Plugin helper to connect to the RosarioSIS (free Student Information System) REST API. + +== Description == + +WordPress plugin helper to connect to the RosarioSIS REST API. Connect to RosarioSIS through the REST API to send / retrieve your students, or any data that fits in your SIS. +This plugin has got no interface. You will only get notified in case the RosarioSIS API is not correctly configured from the WordPress admin "Plugins" screen. +This plugin provides a simple tool for developers to use in their own plugin to connect to the RosarioSIS REST API. + +== Installation == + +Installing "RosarioSIS REST API" can be done either by searching for "RosarioSIS REST API" via the "Plugins > Add New" screen in your WordPress dashboard, or by using the following steps: + +1. Download the plugin via WordPress.org +2. Upload the ZIP file through the 'Plugins > Add New > Upload' screen in your WordPress dashboard +3. Activate the plugin through the 'Plugins' menu in WordPress + +RosarioSIS configuration steps: + +1. Install and activate the [REST API](https://gitlab.com/francoisjacquet/REST_API) plugin for RosarioSIS. +2. Copy the admin user API token: go to menu _School > Configuration > Plugins_. Click on the _Configuration_ link next to REST API. Copy the _User Token_ (see screenshot). + +WordPress configuration steps: +1. Add the RosarioSIS URL and your admin user API token to the `wp-config.php` file. Here is an example: +``` +define( 'ROSARIOSIS_REST_API_URL', 'https://my-rosariosis.com/' ); +define( 'ROSARIOSIS_REST_API_USER_TOKEN', 'M1e57FZ69D0ophaizqTRsNB6lQ3d0EA6' ); +``` + +== Frequently Asked Questions == + += Does this plugin depend on any others? = + +No, but it depends on a working instance of [RosarioSIS](https://www.rosariosis.org/), accessible from the network, plus its [REST API](https://gitlab.com/francoisjacquet/REST_API) plugin. + + += Does this create new database tables? = + +No. There are no new database tables with this plugin. + + += Does this load additional JS or CSS files ? = + +No. This plugin does not load additional CSS or JS files. + + += What does this plugin do? = + +This plugin is useless on its own. It should be combined with another plugin that actually interacts with the RosarioSIS REST API (agenda, contacts, third parties, expense, clients, products, etc.). + + += How can I disable the request cache? = + +GET requests can be cached if explicitely stated (see the controller PHP code). Call the page adding `&disable_cache=1` to the URL to disable cache. + + +== Changelog == + += 1.0.0 = +* 2020-02-22 +* Initial release diff --git a/plugins/rosariosis-rest-api/rosariosis-rest-api.php b/plugins/rosariosis-rest-api/rosariosis-rest-api.php new file mode 100644 index 000000000..844c2fa05 --- /dev/null +++ b/plugins/rosariosis-rest-api/rosariosis-rest-api.php @@ -0,0 +1,48 @@ +settings ) ) { + $instance->settings = RosarioSIS_REST_API_Settings::instance( $instance ); + }*/ + + return $instance; +} + +rosariosis_rest_api(); diff --git a/plugins/rosariosis-rest-api/uninstall.php b/plugins/rosariosis-rest-api/uninstall.php new file mode 100644 index 000000000..5bd7790f3 --- /dev/null +++ b/plugins/rosariosis-rest-api/uninstall.php @@ -0,0 +1,16 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + /** @var ?string */ + private $vendorDir; + + // PSR-4 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixLengthsPsr4 = array(); + /** + * @var array[] + * @psalm-var array> + */ + private $prefixDirsPsr4 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr4 = array(); + + // PSR-0 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixesPsr0 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr0 = array(); + + /** @var bool */ + private $useIncludePath = false; + + /** + * @var string[] + * @psalm-var array + */ + private $classMap = array(); + + /** @var bool */ + private $classMapAuthoritative = false; + + /** + * @var bool[] + * @psalm-var array + */ + private $missingClasses = array(); + + /** @var ?string */ + private $apcuPrefix; + + /** + * @var self[] + */ + private static $registeredLoaders = array(); + + /** + * @param ?string $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + } + + /** + * @return string[] + */ + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); + } + + return array(); + } + + /** + * @return array[] + * @psalm-return array> + */ + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + /** + * @return string[] Array of classname => path + * @psalm-return array + */ + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param string[] $classMap Class to filename map + * @psalm-param array $classMap + * + * @return void + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 base directories + * + * @return void + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + * + * @return void + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + * + * @return void + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + * + * @return void + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } + } + + /** + * Unregisters this instance as an autoloader. + * + * @return void + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return true|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + + return null; + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + /** + * Returns the currently registered loaders indexed by their corresponding vendor directories. + * + * @return self[] + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + + /** + * @param string $class + * @param string $ext + * @return string|false + */ + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + * @private + */ +function includeFile($file) +{ + include $file; +} diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php new file mode 100644 index 000000000..c6b54af7b --- /dev/null +++ b/vendor/composer/InstalledVersions.php @@ -0,0 +1,352 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer; + +use Composer\Autoload\ClassLoader; +use Composer\Semver\VersionParser; + +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require its presence, you can require `composer-runtime-api ^2.0` + * + * @final + */ +class InstalledVersions +{ + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null + */ + private static $installed; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + + return $packagesByType; + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']); + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints($constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; + if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $installed[count($installed) - 1]; + } + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = require __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + $installed[] = self::$installed; + + return $installed; + } +} diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE new file mode 100644 index 000000000..f27399a04 --- /dev/null +++ b/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php new file mode 100644 index 000000000..0fb0a2c19 --- /dev/null +++ b/vendor/composer/autoload_classmap.php @@ -0,0 +1,10 @@ + $vendorDir . '/composer/InstalledVersions.php', +); diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php new file mode 100644 index 000000000..15a2ff3ad --- /dev/null +++ b/vendor/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ +register(true); + + return $loader; + } +} diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php new file mode 100644 index 000000000..ac976d289 --- /dev/null +++ b/vendor/composer/autoload_static.php @@ -0,0 +1,20 @@ + __DIR__ . '/..' . '/composer/InstalledVersions.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->classMap = ComposerStaticInit69354004ab1f038b8591872b8c84e0ae::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json new file mode 100644 index 000000000..87fda747e --- /dev/null +++ b/vendor/composer/installed.json @@ -0,0 +1,5 @@ +{ + "packages": [], + "dev": true, + "dev-package-names": [] +} diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php new file mode 100644 index 000000000..2604285ba --- /dev/null +++ b/vendor/composer/installed.php @@ -0,0 +1,23 @@ + array( + 'name' => 'francoisjacquet/rosariosis', + 'pretty_version' => 'dev-develop', + 'version' => 'dev-develop', + 'reference' => 'b710d3d3d9f52210c577208e7a93abc4efe0b038', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev' => true, + ), + 'versions' => array( + 'francoisjacquet/rosariosis' => array( + 'pretty_version' => 'dev-develop', + 'version' => 'dev-develop', + 'reference' => 'b710d3d3d9f52210c577208e7a93abc4efe0b038', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev_requirement' => false, + ), + ), +); diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php new file mode 100644 index 000000000..d11435706 --- /dev/null +++ b/vendor/composer/platform_check.php @@ -0,0 +1,26 @@ += 50445)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 5.4.45". You are running ' . PHP_VERSION . '.'; +} + +if ($issues) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + trigger_error( + 'Composer detected issues in your platform: ' . implode(' ', $issues), + E_USER_ERROR + ); +}

    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 z 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 literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/login-logo.png b/plugins/legacy-admin/images/login-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d92517d804e0067d68f6f2dd05f6a5eac624abd8 GIT binary patch literal 1833 zcmY*ZX*d*$8Xhu|v4yc@?^v#5DicCik$uZ#m}yMO42^7ETgEaYF_utn%1%g@Yc_^t z>6{8#I$~xlBMce`l`R@3WVt%`x#v0O{qcV9^M23we&4Sz{gRu5r1&v$001EADpziPQ*Zmy_&R@;{>Bh#!Kg}QQKc@cVKa9W8L1ePl zvd_T+wOepE4?y&B|L7Nm$EPM&Y-QicEE$oJg?IfCl(u&^Mj7HxeRZ(> zDV0hF{}SebXnekac#N4Y2bEo^6~|AKk(b;1kaDyF1N3fg;1=`d^ zx<0&xwXi!j6JmKO6S<7$>x@(&`s%x#n*v7Yb2wb!h_SOmAn?a=0Kg9HanODXlACbz zVp*Q6p2^d*PBbGo#VPJ&{@sSph{NXhZ5Z^nR%aYCN}z?Ax6ZApT%0w=`VzF=qdAF=1#d(2i{ zGlJ}x4nNvsInkS=0yOjjd8K33N`qLaH4&H)#M6-4DW>3}qFQ9ciN=gP z6@(I;0id6*5V|v(|G6O%j7(L^1~?I}0YIT?+<&=-_h(?R-~|o+)GE`tglE;GSemx5 zf;|2nNQ*jL!I)Y}CB5$WIXO=zFDM|ShR+tUY#}Ka;8P^#RaQhOzNWux;7xYRU%OrB z%}+)|C#85K4|U2)p&?HY-lD}fqmy)s=VsIuD25ZYr0j;mb)o@kq$EYw{_v`Kb}@VH z%-dElWH~NH1d$C*XM7EjqGzzYqk|#>V56T>?T6QXw@=}X>o4wqsu!lSL8jVSx|oJ!zb~-^)@_C=I#yld>?I&`agD``J_??NQO#z zL5J;S<=>P|?c;7cafn_MM(+ohq*Eb}3Ut@lM_RJi|`b&AY${pyGRt}{ct zXoANqWbdreE!l0Rge05RwwNdDhi+8FyFq-JkFJcU6GVb}x?U|pY`-A)Nc@KN8J3Ii zj*n>N4GI~k{YhPit4-!|I-;7&yIW)NDm@RvtMMc-Bxje4VcRa=81GVk zjFprh)jbb4gga_lMDQ?Mt5fxACz=BD%$hykDV@QUYN*av>6To_<&?-H2j2`~`+fU8 zQl$ENaubcoI8#Z%GQorS1zS~0*=XESgA_d!dk;&@?&`IBc@KJ_>0^0DkBPs0(NB#) z<4^u;1`TDo?pA2!roqwNT+6iFG_%)WBrr>Jjjwb3d;aOf8sE5BfmCMR-yFa!{# zN^dm2*DOmf1c%_`$G_!Pb?kl^!UcJwl*@o4cNiPm6!TwS|Gedg0y^d~C6Ov%n~$fa z1-I{1&8t8PVVa9y6xt&A$cvpmS9K>5m+1 zv;ei^L5Ox!nc~K`NkgSww9=MxImjMSJo8RH7kd;Co^iPf^JN z{uus*v%^dc515zLe(|D4S;%c`{WEfv47VB{-C-8U5#7{+3;=mj27rZG*0=h&=3v@- zXsC}(X4$-0GXW_S7k4>?C!XmR-7E~1S@B)rO3y}CcLgXP9dr*Xy_Kp1CW;#j?8#9% zUCNyVRI|zsW74L{VtjhQG$t>7ed&)#ln?8~XxB4D+({oIw=Us@MOn-rU7o?DmsP3d%Cys@O|1zAl<9X$>qCySm ONCr<=KbLh*2~7Zy5W4XI literal 0 HcmV?d00001 diff --git a/plugins/legacy-admin/images/logo.png b/plugins/legacy-admin/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fbd00abc5f690e4d1abb9599e765680a7f77f8fc GIT binary patch literal 1126 zcmeAS@N?(olHy`uVBq!ia0vp^Ux7G=gBeIR)-V?Wsi**-5LY0*9tQsZ{|{jT84xy{ z0TJK0aU+lc5kyu17lAW?$|`srvVf+`lmz(&Glbsl=qNu^zG|b9;7k{7fp;Oh@20&w zlkPHGY3gpqqv8w<%=0~6978H@y}5QUuSG$m_2FiPoh)L#LM$Km{4Wj*3{snUZWHIz zI&KxC%|DI`ESwVLrMdLVm7ar|Z)bQa8E=@t`B|Xod-#`EhP^KDR$QFXp7BNHjLXI2 zjguoBGSWNGEn(=hX|VA&`4hPL>8W{YzpkV{&s?u5pPjmMQR7p& z{R==we?2b4D|LGIaaSczN9DgZlLFuEcduU`#q(tAt&kmWmKc6iPfI?KoNn^0Qt8`1 zmNbxf`S)h_ng!0G9%3Oo^`=S`MoGNdk*KmilzVCHsv~QCzi&G&xxDwZZO@a~((55_ zHt#Vi&b{0;+2G;LH1iu_^(*vV9Bp{JbE~a=G2e8DbWMp<*`-^zs9*3j5m>fwm*6@c ziPN)<_iTC9y1Z;rddjWxs~j@9tL^tZlshW%TjzMi)1%w39_l#wC+=-Q)Vrr=ZeI$u zejKoKj`{Td)&KIY*F;OVCmQHk zPi=qyr+;;RbJ4$l@t;+qXF5r!-rjBaH$%#On%o~BGwm%OPQ_o?fA|01GfV7$+vm=Z zzmYfR57+%0UmsmBS({vOr*g-)FTH!#>)lT~8$WNS{l4|D?{8-<|LJ@D@?xIKM~Wwl zrer>Qs_=1g-RdNXwnPvzbarxJ+0J-B!9mi6!Tr6U1pj2e@;)ppl;P!d?T$V95h=;49$q9;GaELP{){U&rnbN_@*yTs