From a212b194f38ff0f85458e564298111f0dedcdea6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Bedna=C5=99=C3=ADk?= <jan.bednarik@gmail.com> Date: Tue, 16 Jul 2024 19:08:01 +0200 Subject: [PATCH] Clean Redmine 5 with ruby-dev --- .gitmodules | 24 - Dockerfile | 10 +- plugins/easy_mindmup/Gemfile | 1 - plugins/easy_mindmup/README.rdoc | 3 - plugins/easy_mindmup/after_init.rb | 6 - .../controllers/easy_mindmup_controller.rb | 44 - .../app/helpers/easy_mindmup_helper.rb | 21 - .../app/views/easy_mindmup/_hotkeys.html.erb | 31 - .../app/views/easy_mindmup/_includes.html.erb | 77 - .../views/easy_mindmup/_js_prepare.html.erb | 141 - .../fonts/EasyMaterialIcons-Regular.eot | Bin 91978 -> 0 bytes .../fonts/EasyMaterialIcons-Regular.otf | Bin 239484 -> 0 bytes .../fonts/EasyMaterialIcons-Regular.svg | 2411 ------------- .../fonts/EasyMaterialIcons-Regular.ttf | Bin 139928 -> 0 bytes .../fonts/EasyMaterialIcons-Regular.woff | Bin 64752 -> 0 bytes .../fonts/EasyMaterialIcons-Regular.woff2 | Bin 80288 -> 0 bytes plugins/easy_mindmup/assets/images/person.gif | Bin 875 -> 0 bytes .../assets/javascripts/after_change.js | 70 - .../assets/javascripts/autosave.js | 81 - .../assets/javascripts/backup/last_state.js | 170 - .../assets/javascripts/content_patch.js | 35 - .../easy_mindmup/assets/javascripts/data.js | 36 - .../assets/javascripts/dom_patch.js | 197 -- .../assets/javascripts/easy_wbs.js | 1 - .../assets/javascripts/event_bus.js | 58 - .../assets/javascripts/expand_all.js | 63 - .../assets/javascripts/external.js | 1690 --------- .../easy_mindmup/assets/javascripts/filter.js | 28 - .../assets/javascripts/history.js | 174 - .../assets/javascripts/jsdocs_external.js | 27 - .../assets/javascripts/layout_patch.js | 94 - .../easy_mindmup/assets/javascripts/legend.js | 218 -- .../assets/javascripts/legend_events.js | 279 -- .../easy_mindmup/assets/javascripts/libs.js | 2 - .../assets/javascripts/link_edit_widget.js | 70 - .../easy_mindmup/assets/javascripts/links.js | 198 -- .../easy_mindmup/assets/javascripts/loader.js | 391 -- .../easy_mindmup/assets/javascripts/logger.js | 70 - .../easy_mindmup/assets/javascripts/main.js | 266 -- .../assets/javascripts/map_model_patch.js | 108 - .../assets/javascripts/mapjs_init.js | 92 - .../assets/javascripts/mindmup/clipboard.js | 18 - .../assets/javascripts/mindmup/content.js | 979 ----- .../javascripts/mindmup/dom-map-view.js | 1340 ------- .../javascripts/mindmup/dom-map-widget.js | 218 -- .../javascripts/mindmup/hammer-draggable.js | 153 - .../javascripts/mindmup/image-drop-widget.js | 109 - .../assets/javascripts/mindmup/layout.js | 349 -- .../javascripts/mindmup/link-edit-widget.js | 40 - .../assets/javascripts/mindmup/map-model.js | 1230 ------- .../javascripts/mindmup/map-toolbar-widget.js | 40 - .../assets/javascripts/mindmup/mapjs.js | 1 - .../assets/javascripts/mindmup/observable.js | 52 - .../assets/javascripts/mindmup/url-helper.js | 23 - .../assets/javascripts/mm_context_menu.js | 209 -- .../assets/javascripts/model_classes.js | 212 -- .../assets/javascripts/node_patch.js | 210 -- .../assets/javascripts/polyfill.js | 27 - .../easy_mindmup/assets/javascripts/print.js | 174 - .../assets/javascripts/redrawer.js | 60 - .../assets/javascripts/save_info.js | 56 - .../assets/javascripts/save_progress.js | 80 - .../easy_mindmup/assets/javascripts/saver.js | 610 ---- .../assets/javascripts/storage.js | 191 - .../easy_mindmup/assets/javascripts/styles.js | 236 -- .../assets/javascripts/toolbar.js | 192 - .../easy_mindmup/assets/javascripts/utils.js | 314 -- .../assets/javascripts/validator.js | 107 - .../assets/stylesheets/easy_mindmup.css | 175 - .../stylesheets/easy_mindmup_sass.scss.erb | 37 - .../stylesheets/generated/easy_mindmup.css | 3138 ----------------- .../assets/stylesheets/mindmup.css | 1434 -------- .../assets/stylesheets/sass/_mindmup.scss | 0 .../sass/_mindmup_default_variables.scss | 6 - .../stylesheets/sass/_mindmup_frame.scss | 211 -- .../stylesheets/sass/_mindmup_icons.scss | 50 - .../stylesheets/sass/_mindmup_legend.scss | 67 - .../stylesheets/sass/_mindmup_mapjs.scss | 30 - .../stylesheets/sass/_mindmup_mixins.scss | 6 - .../stylesheets/sass/_mindmup_nodes.scss | 130 - .../stylesheets/sass/_mindmup_print.scss | 32 - .../stylesheets/sass/_mindmup_progress.scss | 30 - .../stylesheets/sass/_mindmup_redmine.scss | 143 - .../stylesheets/sass/_mindmup_schemes.scss | 12 - .../stylesheets/sass/_mindmup_sidebar.scss | 219 -- .../stylesheets/sass/_mindmup_variables.scss | 44 - plugins/easy_mindmup/config/locales/cs.yml | 163 - plugins/easy_mindmup/config/locales/en.yml | 171 - plugins/easy_mindmup/config/routes.rb | 3 - plugins/easy_mindmup/init.rb | 17 - .../lib/easy_mindmup/easy_mindmup.rb | 7 - .../controllers/easy_wbs_controller_spec.rb | 19 - .../spec/features/wbs_tree_spec.rb | 74 - plugins/easy_wbs/Gemfile | 1 - plugins/easy_wbs/README.rdoc | 3 - plugins/easy_wbs/after_init.rb | 33 - .../app/controllers/easy_wbs_controller.rb | 108 - .../easy_wbs/app/helpers/easy_wbs_helper.rb | 59 - .../app/models/easy_wbs/issue_query.rb | 51 - ...asy_wbs_easy_issue_query_settings.html.erb | 5 - .../app/views/easy_wbs/_includes.html.erb | 14 - .../app/views/easy_wbs/_js_prepare.html.erb | 57 - .../views/easy_wbs/_test_includes.html.erb | 6 - .../easy_wbs/easy_queries/_show.html.erb | 19 - .../easy_wbs/app/views/easy_wbs/index.api.rsb | 91 - .../app/views/easy_wbs/index.html.erb | 157 - plugins/easy_wbs/assets/images/person.gif | Bin 875 -> 0 bytes .../easy_wbs/assets/javascripts/gateway.js | 99 - .../assets/javascripts/tests/idea_diff.js | 102 - .../assets/javascripts/tests/parse_form.js | 57 - .../assets/javascripts/tests/printing.js | 14 - .../assets/javascripts/tests/saving_test.js | 23 - .../assets/javascripts/wbs_context_menu.js | 133 - .../easy_wbs/assets/javascripts/wbs_loader.js | 47 - .../easy_wbs/assets/javascripts/wbs_main.js | 60 - .../easy_wbs/assets/javascripts/wbs_modals.js | 267 -- .../assets/javascripts/wbs_node_patch.js | 56 - .../easy_wbs/assets/javascripts/wbs_saver.js | 119 - .../easy_wbs/assets/javascripts/wbs_styles.js | 134 - .../assets/javascripts/wbs_validator.js | 30 - .../easy_wbs/assets/stylesheets/easy_wbs.css | 10 - .../assets/stylesheets/easy_wbs_old.css | 271 -- plugins/easy_wbs/config/locales/ar.yml | 2 - plugins/easy_wbs/config/locales/cs.yml | 170 - plugins/easy_wbs/config/locales/da.yml | 2 - plugins/easy_wbs/config/locales/de.yml | 181 - plugins/easy_wbs/config/locales/en-AU.yml | 2 - plugins/easy_wbs/config/locales/en-GB.yml | 2 - plugins/easy_wbs/config/locales/en-US.yml | 2 - plugins/easy_wbs/config/locales/en.yml | 169 - plugins/easy_wbs/config/locales/es.yml | 177 - plugins/easy_wbs/config/locales/fi.yml | 2 - plugins/easy_wbs/config/locales/fr.yml | 182 - plugins/easy_wbs/config/locales/he.yml | 2 - plugins/easy_wbs/config/locales/hr.yml | 2 - plugins/easy_wbs/config/locales/hu.yml | 171 - plugins/easy_wbs/config/locales/it.yml | 175 - plugins/easy_wbs/config/locales/ja.yml | 151 - plugins/easy_wbs/config/locales/ko.yml | 162 - plugins/easy_wbs/config/locales/mk.yml | 2 - plugins/easy_wbs/config/locales/nl.yml | 173 - plugins/easy_wbs/config/locales/no.yml | 2 - plugins/easy_wbs/config/locales/pl.yml | 174 - plugins/easy_wbs/config/locales/pt-BR.yml | 174 - plugins/easy_wbs/config/locales/pt.yml | 2 - plugins/easy_wbs/config/locales/ro.yml | 2 - plugins/easy_wbs/config/locales/ru.yml | 172 - plugins/easy_wbs/config/locales/sk.yml | 2 - plugins/easy_wbs/config/locales/sl.yml | 2 - plugins/easy_wbs/config/locales/sq.yml | 2 - plugins/easy_wbs/config/locales/sr-YU.yml | 2 - plugins/easy_wbs/config/locales/sr.yml | 2 - plugins/easy_wbs/config/locales/sv.yml | 2 - plugins/easy_wbs/config/locales/th.yml | 2 - plugins/easy_wbs/config/locales/tr.yml | 2 - plugins/easy_wbs/config/locales/zh-TW.yml | 2 - plugins/easy_wbs/config/locales/zh.yml | 155 - plugins/easy_wbs/config/routes.rb | 6 - plugins/easy_wbs/init.rb | 19 - plugins/easy_wbs/lib/easy_wbs/easy_wbs.rb | 7 - plugins/easy_wbs/lib/easy_wbs/hooks.rb | 9 - .../controllers/queries_controller_patch.rb | 26 - .../helpers/application_helper_patch.rb | 17 - .../redmine_patch/models/project_patch.rb | 30 - .../controllers/easy_wbs_controller_spec.rb | 19 - .../easy_wbs/spec/features/jasmine_spec.rb | 22 - .../easy_wbs/spec/features/wbs_legend_spec.rb | 59 - .../spec/features/wbs_no_sidebar_spec.rb | 22 - .../spec/features/wbs_sidebar_spec.rb | 84 - .../easy_wbs/spec/features/wbs_tree_spec.rb | 90 - plugins/redmine_agile/Gemfile | 1 - plugins/redmine_agile/README.rdoc | 19 - .../controllers/agile_boards_controller.rb | 158 - .../controllers/agile_charts_controller.rb | 140 - .../agile_charts_queries_controller.rb | 21 - .../agile_journal_details_controller.rb | 71 - .../app/helpers/agile_boards_helper.rb | 159 - .../app/helpers/agile_charts_helper.rb | 32 - .../app/helpers/agile_support_helper.rb | 70 - .../app/models/agile_charts_query.rb | 167 - .../redmine_agile/app/models/agile_data.rb | 25 - .../redmine_agile/app/models/agile_query.rb | 679 ---- .../app/models/agile_statuses_collector.rb | 104 - .../agile_boards/_add_issue_card.html.erb | 1 - .../agile_boards/_backlog_column.html.erb | 15 - .../app/views/agile_boards/_board.html.erb | 26 - .../app/views/agile_boards/_form.html.erb | 1 - .../app/views/agile_boards/_index.html.erb | 98 - .../views/agile_boards/_issue_card.html.erb | 149 - .../agile_boards/_issue_tooltip.html.erb | 1 - .../views/agile_boards/_issues_links.html.erb | 17 - .../views/agile_boards/_issues_list.html.erb | 15 - .../app/views/agile_boards/_members.html.erb | 8 - .../agile_boards/_upgrade_to_pro.html.erb | 9 - .../app/views/agile_boards/agile_data.api.rsb | 7 - .../views/agile_boards/autocomplete.js.erb | 1 - .../app/views/agile_boards/index.html.erb | 3 - .../app/views/agile_boards/index.js.erb | 3 - .../agile_boards/inline_comment.html.erb | 3 - .../app/views/agile_boards/load_more.js.erb | 1 - .../app/views/agile_boards/update.js.erb | 6 - .../views/agile_charts/_agile_charts.html.erb | 5 - .../app/views/agile_charts/_chart.html.erb | 99 - .../agile_charts/_versions_show.html.erb | 31 - .../agile_charts/select_version_chart.js.erb | 5 - .../app/views/agile_charts/show.html.erb | 67 - .../views/agile_charts_queries/_form.html.erb | 1 - .../views/agile_charts_queries/edit.html.erb | 1 - .../views/agile_charts_queries/new.html.erb | 8 - .../_status_detail.html.erb | 9 - .../agile_journal_details/assignee.html.erb | 27 - .../agile_journal_details/done_ratio.html.erb | 28 - .../views/agile_journal_details/edit.html.erb | 1 - .../views/agile_journal_details/new.html.erb | 1 - .../agile_journal_details/status.html.erb | 70 - .../views/issues/_agile_data_fields.html.erb | 9 - .../views/issues/_agile_data_labels.html.erb | 1 - .../views/issues/_issue_spint_form.html.erb | 1 - .../views/issues/_issue_story_points.html.erb | 7 - .../issues/_issue_story_points_form.html.erb | 9 - .../views/settings/agile/_general.html.erb | 54 - plugins/redmine_agile/assets/images/agile.png | Bin 857 -> 0 bytes .../assets/images/fullscreen.png | Bin 594 -> 0 bytes .../javascripts/jquery.simplecolorpicker.js | 235 -- .../javascripts/jquery.ui.touch-punch.js | 180 - .../assets/javascripts/redmine_agile.js | 787 ----- .../javascripts/redmine_agile_sprint.js | 14 - .../stylesheets/jquery.simplecolorpicker.css | 88 - .../assets/stylesheets/redmine_agile.css | 610 ---- plugins/redmine_agile/config/locales/de.yml | 233 -- plugins/redmine_agile/config/locales/en.yml | 231 -- plugins/redmine_agile/config/locales/es.yml | 221 -- plugins/redmine_agile/config/locales/fr.yml | 106 - plugins/redmine_agile/config/locales/it.yml | 221 -- plugins/redmine_agile/config/locales/ko.yml | 70 - .../redmine_agile/config/locales/pt-BR.yml | 222 -- plugins/redmine_agile/config/locales/pt.yml | 222 -- plugins/redmine_agile/config/locales/ru.yml | 220 -- .../redmine_agile/config/locales/zh-TW.yml | 92 - plugins/redmine_agile/config/locales/zh.yml | 133 - plugins/redmine_agile/config/routes.rb | 47 - .../migrate/001_create_issue_status_orders.rb | 30 - .../db/migrate/002_create_agile_colors.rb | 30 - .../migrate/003_rename_issue_status_orders.rb | 40 - .../db/migrate/004_rename_agile_ranks.rb | 40 - .../005_add_story_points_to_agile_ranks.rb | 24 - .../db/migrate/006_create_agile_sprints.rb | 33 - .../007_add_sprint_id_to_agile_data.rb | 24 - .../008_add_sharing_to_agile_sprint.rb | 24 - plugins/redmine_agile/doc/CHANGELOG | 346 -- plugins/redmine_agile/doc/COPYING | 339 -- plugins/redmine_agile/doc/LICENSE | 26 - plugins/redmine_agile/init.rb | 71 - plugins/redmine_agile/lib/redmine_agile.rb | 133 - .../lib/redmine_agile/charts/agile_chart.rb | 278 -- .../redmine_agile/charts/burndown_chart.rb | 112 - .../lib/redmine_agile/charts/charts.rb | 98 - .../charts/work_burndown_chart.rb | 69 - .../lib/redmine_agile/helpers/agile_helper.rb | 153 - .../hooks/controller_issue_hook.rb | 50 - .../redmine_agile/hooks/views_issues_hook.rb | 31 - .../redmine_agile/hooks/views_layouts_hook.rb | 28 - .../hooks/views_versions_hook.rb | 26 - .../redmine_agile/patches/issue_drop_patch.rb | 44 - .../lib/redmine_agile/patches/issue_patch.rb | 75 - .../patches/issues_controller_patch.rb | 33 - .../redmine_agile/patches/project_patch.rb | 41 - .../patches/projects_helper_patch.rb | 41 - .../patches/queries_controller_patch.rb | 44 - .../test/fixtures/agile_data.yml | 18 - .../redmine_agile/test/fixtures/queries.yml | 32 - .../agile_boards_controller_test.rb | 819 ----- .../agile_charts_controller_test.rb | 195 - .../agile_journal_details_controller_test.rb | 95 - .../test/functional/issues_controller_test.rb | 125 - .../functional/projects_controller_test.rb | 39 - .../test/functional/users_controller_test.rb | 36 - .../integration/api_test/agile_data_test.rb | 77 - .../test/integration/common_views_test.rb | 87 - plugins/redmine_agile/test/test_helper.rb | 368 -- .../test/ui/agile_board_ui_test.rb | 99 - .../test/unit/agile_charts_query_test.rb | 68 - .../test/unit/agile_data_test.rb | 67 - .../test/unit/charts/burndown_chart_test.rb | 171 - .../unit/helpers/agile_boards_helper_test.rb | 59 - plugins/redmine_checklists/Gemfile | 1 - .../app/controllers/checklists_controller.rb | 122 - .../app/helpers/checklists_helper.rb | 58 - .../app/models/checklist.rb | 79 - .../app/models/journal_checklist_history.rb | 127 - .../views/checklists/_checklist_item.html.erb | 11 - .../app/views/checklists/done.js.erb | 17 - .../app/views/checklists/index.api.rsb | 15 - .../app/views/checklists/show.api.rsb | 11 - .../app/views/issues/_checklist.html.erb | 19 - .../views/issues/_checklist_fields.html.erb | 26 - .../app/views/issues/_checklist_form.html.erb | 23 - .../settings/checklists/_checklists.html.erb | 8 - .../settings/checklists/_general.html.erb | 13 - .../assets/javascripts/checklists.js | 485 --- .../assets/stylesheets/checklists.css | 145 - .../redmine_checklists/config/locales/bg.yml | 9 - .../redmine_checklists/config/locales/de.yml | 44 - .../redmine_checklists/config/locales/en.yml | 44 - .../redmine_checklists/config/locales/es.yml | 28 - .../redmine_checklists/config/locales/fr.yml | 44 - .../redmine_checklists/config/locales/hu.yml | 47 - .../redmine_checklists/config/locales/it.yml | 45 - .../redmine_checklists/config/locales/ja.yml | 9 - .../redmine_checklists/config/locales/ko.yml | 11 - .../redmine_checklists/config/locales/nl.yml | 44 - .../redmine_checklists/config/locales/pl.yml | 28 - .../config/locales/pt-BR.yml | 44 - .../redmine_checklists/config/locales/pt.yml | 44 - .../redmine_checklists/config/locales/ru.yml | 46 - .../redmine_checklists/config/locales/sk.yml | 10 - .../redmine_checklists/config/locales/sv.yml | 11 - .../redmine_checklists/config/locales/tr.yml | 44 - .../redmine_checklists/config/locales/uk.yml | 9 - .../config/locales/zh-TW.yml | 44 - .../redmine_checklists/config/locales/zh.yml | 32 - plugins/redmine_checklists/config/routes.rb | 28 - .../db/migrate/001_create_checklists.rb | 38 - .../002_add_time_stamps_to_checklists.rb | 25 - .../003_create_checklist_template_category.rb | 32 - .../migrate/004_create_checklist_templates.rb | 36 - .../005_modify_checklist_subject_length.rb | 28 - .../006_add_fields_to_checklist_template.rb | 31 - .../007_add_is_section_to_checklists.rb | 24 - plugins/redmine_checklists/doc/CHANGELOG | 181 - plugins/redmine_checklists/doc/COPYING | 339 -- plugins/redmine_checklists/doc/LICENSE | 26 - plugins/redmine_checklists/init.rb | 52 - .../lib/redmine_checklists.rb | 46 - .../hooks/controller_issues_hook.rb | 31 - .../hooks/views_issues_hook.rb | 27 - .../hooks/views_layouts_hook.rb | 29 - .../compatibility/application_helper_patch.rb | 36 - .../compatibility/open_struct_patch.rb | 37 - .../patches/helper_for_checklists_patch.rb | 32 - .../redmine_checklists/patches/issue_patch.rb | 93 - .../patches/issue_query_patch.rb | 38 - .../patches/issues_controller_patch.rb | 87 - .../patches/issues_helper_patch.rb | 86 - .../patches/notifiable_patch.rb | 20 - .../patches/project_patch.rb | 46 - .../test/fixtures/checklists.yml | 27 - .../functional/checklists_controller_test.rb | 91 - .../test/functional/issues_controller_test.rb | 236 -- .../integration/api_test/checklists_test.rb | 166 - .../test/integration/common_issue_test.rb | 62 - .../redmine_checklists/test/test_helper.rb | 86 - .../test/unit/checklist_test.rb | 138 - .../test/unit/issue_test.rb | 85 - .../test/unit/project_test.rb | 73 - .../README.rdoc | 53 - ...nitoring_controlling_project_controller.rb | 119 - ..._human_resource_mgmt_project_controller.rb | 39 - .../mc_time_mgmt_project_controller.rb | 70 - .../_index.html.erb | 342 -- .../index.html.erb | 83 - .../_scripts.html.erb | 163 - .../index.html.erb | 20 - .../app/views/mc_menu/_contentHeader.html.erb | 11 - .../app/views/mc_menu/_mcmenu.html.erb | 11 - .../app/views/mc_menu/_progressbar.html.erb | 96 - .../mc_time_mgmt_project/_scripts.html.erb | 224 -- .../views/mc_time_mgmt_project/index.html.erb | 23 - .../assets/images/loadingAnimation.gif | Bin 5886 -> 0 bytes .../assets/javascripts/exporting.js | 23 - .../assets/javascripts/highcharts.js | 239 -- .../assets/javascripts/highstock.js | 295 -- .../assets/javascripts/jquery.min.js | 4 - .../assets/javascripts/rails.js | 377 -- .../assets/javascripts/thickbox.js | 320 -- .../stylesheets/monitoringcontrolling.css | 77 - .../assets/stylesheets/thickbox.css | 163 - .../config/locales/de.yml | 57 - .../config/locales/en.yml | 57 - .../config/locales/fr.yml | 57 - .../config/locales/pl.yml | 57 - .../config/locales/pt-BR.yml | 57 - .../config/locales/ru.yml | 57 - .../config/locales/tr.yml | 57 - .../config/locales/zh.yml | 58 - .../config/routes.rb | 11 - .../redmine_monitoring_controlling/init.rb | 25 - .../lang/en.yml | 2 - .../lib/mc_tools.rb | 60 - .../license.txt | 15 - .../redmine_monitoring_controlling/logo.png | Bin 39747 -> 0 bytes .../screenshotEn.png | Bin 161460 -> 0 bytes .../screenshotPt.png | Bin 164958 -> 0 bytes .../test/test_helper.rb | 5 - plugins/redmine_omniauth_client/Gemfile | 4 - plugins/redmine_omniauth_client/Gemfile.lock | 22 - plugins/redmine_omniauth_client/README.md | 51 - .../controllers/redmine_oauth_controller.rb | 223 -- .../app/helpers/redmine_omniauth_helper.rb | 2 - .../app/models/group_mapping.rb | 2 - .../hooks/_view_account_login_top.html.erb | 11 - .../redmine_oauth/group_mapping.html.erb | 49 - .../views/settings/_client_settings.html.erb | 81 - .../assets/images/bt_connect_portail.png | Bin 9930 -> 0 bytes .../assets/images/bt_connect_ror.png | Bin 11316 -> 0 bytes .../assets/images/keycloak_plugin.png | Bin 18377 -> 0 bytes .../assets/images/keycloak_plugin_small.png | Bin 14889 -> 0 bytes .../assets/stylesheets/buttons.css | 60 - .../config/locales/cs.yml | 37 - .../config/locales/en.yml | 41 - .../config/locales/fr.yml | 6 - .../config/locales/ru.yml | 5 - .../redmine_omniauth_client/config/routes.rb | 5 - .../db/migrate/001_create_group_mappings.rb | 8 - .../db/migrate/002_update_users_ssouid.rb | 13 - plugins/redmine_omniauth_client/init.rb | 31 - .../lib/group_patch.rb | 15 - .../lib/redmine_omniauth_client/hooks.rb | 9 - .../redmine_oauth_controller_test.rb | 116 - .../test/test_helper.rb | 2 - .../test/unit/group_mapping_test.rb | 9 - plugins/redmine_pivot_table | 1 - plugins/redmine_theme_changer | 1 - plugins/redmine_work_time | 1 - plugins/redmine_zulip | 1 - plugins/redmineup_tags/.drone.jsonnet | 27 - plugins/redmineup_tags/Gemfile | 1 - .../app/controllers/issue_tags_controller.rb | 87 - .../app/controllers/tags_controller.rb | 89 - .../app/helpers/issues_tags_helper.rb | 41 - .../redmineup_tags/app/helpers/tags_helper.rb | 129 - .../views/context_menus/_issues_tags.html.erb | 6 - .../app/views/issue_tags/_edit_modal.html.erb | 42 - .../app/views/issue_tags/edit.js.erb | 2 - .../app/views/issues/_tags.html.erb | 5 - .../app/views/issues/_tags_form.html.erb | 23 - .../app/views/issues/_tags_sidebar.html.erb | 6 - .../app/views/reports/_tags_simple.html.erb | 8 - .../views/tags/_additional_assets.html.erb | 5 - .../app/views/tags/_general.html.erb | 25 - .../app/views/tags/_manage_tags.html.erb | 46 - .../_select2_transformation_rules.html.erb | 1 - .../app/views/tags/_settings.html.erb | 8 - .../app/views/tags/context_menu.html.erb | 12 - .../app/views/tags/edit.html.erb | 14 - .../app/views/tags/merge.html.erb | 26 - .../redmineup_tags/assets/images/tag-icon.png | Bin 586 -> 0 bytes .../assets/images/tag_blue_add.png | Bin 671 -> 0 bytes .../assets/javascripts/redmine_tags.js | 19 - .../assets/stylesheets/redmine_tags.css | 44 - plugins/redmineup_tags/config/locales/bg.yml | 43 - plugins/redmineup_tags/config/locales/de.yml | 36 - plugins/redmineup_tags/config/locales/en.yml | 57 - plugins/redmineup_tags/config/locales/fr.yml | 41 - .../redmineup_tags/config/locales/pt-BR.yml | 49 - plugins/redmineup_tags/config/locales/ro.yml | 36 - plugins/redmineup_tags/config/locales/ru.yml | 31 - .../redmineup_tags/config/locales/zh-TW.yml | 47 - plugins/redmineup_tags/config/locales/zh.yml | 57 - plugins/redmineup_tags/config/routes.rb | 34 - .../db/migrate/001_add_tags_and_taggings.rb | 26 - .../db/migrate/002_create_tags.rb | 28 - plugins/redmineup_tags/doc/CHANGELOG | 97 - plugins/redmineup_tags/doc/COPYING | 339 -- plugins/redmineup_tags/doc/LICENSE | 26 - plugins/redmineup_tags/init.rb | 60 - .../redmineup_tags/lib/query_tags_column.rb | 24 - plugins/redmineup_tags/lib/redmineup_tags.rb | 49 - .../redmineup_tags/hooks/model_issue_hook.rb | 47 - .../hooks/views_context_menus_hook.rb | 26 - .../redmineup_tags/hooks/views_issues_hook.rb | 29 - .../hooks/views_layouts_hook.rb | 27 - .../hooks/views_reports_hook.rb | 26 - .../add_helpers_for_issue_tags_patch.rb | 41 - .../patches/agile_query_patch.rb | 70 - .../patches/agile_versions_query_patch.rb | 46 - .../auto_completes_controller_patch.rb | 65 - .../lib/redmineup_tags/patches/issue_patch.rb | 157 - .../patches/issue_query_patch.rb | 93 - .../patches/queries_helper_patch.rb | 53 - .../patches/reports_controller_patch.rb | 65 - .../patches/time_entry_patch.rb | 48 - .../patches/time_entry_query_patch.rb | 84 - .../patches/time_report_patch.rb | 57 - .../redmineup_tags/test/fixtures/taggings.yml | 68 - plugins/redmineup_tags/test/fixtures/tags.yml | 12 - .../agile_boards_controller_test.rb | 39 - .../agile_versions_controller_test.rb | 44 - .../auto_completes_controller_test.rb | 108 - .../functional/issue_tags_controller_test.rb | 216 -- .../test/functional/issues_controller_test.rb | 331 -- .../functional/reports_controller_test.rb | 62 - .../test/functional/tags_controller_test.rb | 102 - .../functional/timelog_controller_test.rb | 62 - plugins/redmineup_tags/test/test_helper.rb | 56 - .../redmineup_tags/test/unit/issue_test.rb | 74 - plugins/sparkline | 1 - plugins/traffic_lights | 1 - themes/PurpleMine2 | 1 - 499 files changed, 2 insertions(+), 48710 deletions(-) delete mode 100644 .gitmodules delete mode 100644 plugins/easy_mindmup/Gemfile delete mode 100644 plugins/easy_mindmup/README.rdoc delete mode 100644 plugins/easy_mindmup/after_init.rb delete mode 100644 plugins/easy_mindmup/app/controllers/easy_mindmup_controller.rb delete mode 100644 plugins/easy_mindmup/app/helpers/easy_mindmup_helper.rb delete mode 100644 plugins/easy_mindmup/app/views/easy_mindmup/_hotkeys.html.erb delete mode 100644 plugins/easy_mindmup/app/views/easy_mindmup/_includes.html.erb delete mode 100644 plugins/easy_mindmup/app/views/easy_mindmup/_js_prepare.html.erb delete mode 100644 plugins/easy_mindmup/assets/fonts/EasyMaterialIcons-Regular.eot delete mode 100644 plugins/easy_mindmup/assets/fonts/EasyMaterialIcons-Regular.otf delete mode 100644 plugins/easy_mindmup/assets/fonts/EasyMaterialIcons-Regular.svg delete mode 100644 plugins/easy_mindmup/assets/fonts/EasyMaterialIcons-Regular.ttf delete mode 100644 plugins/easy_mindmup/assets/fonts/EasyMaterialIcons-Regular.woff delete mode 100644 plugins/easy_mindmup/assets/fonts/EasyMaterialIcons-Regular.woff2 delete mode 100644 plugins/easy_mindmup/assets/images/person.gif delete mode 100644 plugins/easy_mindmup/assets/javascripts/after_change.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/autosave.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/backup/last_state.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/content_patch.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/data.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/dom_patch.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/easy_wbs.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/event_bus.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/expand_all.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/external.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/filter.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/history.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/jsdocs_external.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/layout_patch.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/legend.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/legend_events.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/libs.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/link_edit_widget.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/links.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/loader.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/logger.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/main.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/map_model_patch.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/mapjs_init.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/mindmup/clipboard.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/mindmup/content.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/mindmup/dom-map-view.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/mindmup/dom-map-widget.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/mindmup/hammer-draggable.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/mindmup/image-drop-widget.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/mindmup/layout.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/mindmup/link-edit-widget.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/mindmup/map-model.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/mindmup/map-toolbar-widget.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/mindmup/mapjs.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/mindmup/observable.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/mindmup/url-helper.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/mm_context_menu.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/model_classes.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/node_patch.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/polyfill.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/print.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/redrawer.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/save_info.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/save_progress.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/saver.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/storage.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/styles.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/toolbar.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/utils.js delete mode 100644 plugins/easy_mindmup/assets/javascripts/validator.js delete mode 100644 plugins/easy_mindmup/assets/stylesheets/easy_mindmup.css delete mode 100644 plugins/easy_mindmup/assets/stylesheets/easy_mindmup_sass.scss.erb delete mode 100644 plugins/easy_mindmup/assets/stylesheets/generated/easy_mindmup.css delete mode 100644 plugins/easy_mindmup/assets/stylesheets/mindmup.css delete mode 100644 plugins/easy_mindmup/assets/stylesheets/sass/_mindmup.scss delete mode 100644 plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_default_variables.scss delete mode 100644 plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_frame.scss delete mode 100644 plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_icons.scss delete mode 100644 plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_legend.scss delete mode 100644 plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_mapjs.scss delete mode 100644 plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_mixins.scss delete mode 100644 plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_nodes.scss delete mode 100644 plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_print.scss delete mode 100644 plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_progress.scss delete mode 100644 plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_redmine.scss delete mode 100644 plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_schemes.scss delete mode 100644 plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_sidebar.scss delete mode 100644 plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_variables.scss delete mode 100644 plugins/easy_mindmup/config/locales/cs.yml delete mode 100644 plugins/easy_mindmup/config/locales/en.yml delete mode 100644 plugins/easy_mindmup/config/routes.rb delete mode 100644 plugins/easy_mindmup/init.rb delete mode 100644 plugins/easy_mindmup/lib/easy_mindmup/easy_mindmup.rb delete mode 100644 plugins/easy_mindmup/spec/controllers/easy_wbs_controller_spec.rb delete mode 100644 plugins/easy_mindmup/spec/features/wbs_tree_spec.rb delete mode 100644 plugins/easy_wbs/Gemfile delete mode 100644 plugins/easy_wbs/README.rdoc delete mode 100644 plugins/easy_wbs/after_init.rb delete mode 100644 plugins/easy_wbs/app/controllers/easy_wbs_controller.rb delete mode 100644 plugins/easy_wbs/app/helpers/easy_wbs_helper.rb delete mode 100644 plugins/easy_wbs/app/models/easy_wbs/issue_query.rb delete mode 100644 plugins/easy_wbs/app/views/easy_query_settings/by_query/_easy_wbs_easy_issue_query_settings.html.erb delete mode 100644 plugins/easy_wbs/app/views/easy_wbs/_includes.html.erb delete mode 100644 plugins/easy_wbs/app/views/easy_wbs/_js_prepare.html.erb delete mode 100644 plugins/easy_wbs/app/views/easy_wbs/_test_includes.html.erb delete mode 100644 plugins/easy_wbs/app/views/easy_wbs/easy_queries/_show.html.erb delete mode 100644 plugins/easy_wbs/app/views/easy_wbs/index.api.rsb delete mode 100644 plugins/easy_wbs/app/views/easy_wbs/index.html.erb delete mode 100644 plugins/easy_wbs/assets/images/person.gif delete mode 100644 plugins/easy_wbs/assets/javascripts/gateway.js delete mode 100644 plugins/easy_wbs/assets/javascripts/tests/idea_diff.js delete mode 100644 plugins/easy_wbs/assets/javascripts/tests/parse_form.js delete mode 100644 plugins/easy_wbs/assets/javascripts/tests/printing.js delete mode 100644 plugins/easy_wbs/assets/javascripts/tests/saving_test.js delete mode 100644 plugins/easy_wbs/assets/javascripts/wbs_context_menu.js delete mode 100644 plugins/easy_wbs/assets/javascripts/wbs_loader.js delete mode 100644 plugins/easy_wbs/assets/javascripts/wbs_main.js delete mode 100644 plugins/easy_wbs/assets/javascripts/wbs_modals.js delete mode 100644 plugins/easy_wbs/assets/javascripts/wbs_node_patch.js delete mode 100644 plugins/easy_wbs/assets/javascripts/wbs_saver.js delete mode 100644 plugins/easy_wbs/assets/javascripts/wbs_styles.js delete mode 100644 plugins/easy_wbs/assets/javascripts/wbs_validator.js delete mode 100644 plugins/easy_wbs/assets/stylesheets/easy_wbs.css delete mode 100644 plugins/easy_wbs/assets/stylesheets/easy_wbs_old.css delete mode 100644 plugins/easy_wbs/config/locales/ar.yml delete mode 100644 plugins/easy_wbs/config/locales/cs.yml delete mode 100644 plugins/easy_wbs/config/locales/da.yml delete mode 100644 plugins/easy_wbs/config/locales/de.yml delete mode 100644 plugins/easy_wbs/config/locales/en-AU.yml delete mode 100644 plugins/easy_wbs/config/locales/en-GB.yml delete mode 100644 plugins/easy_wbs/config/locales/en-US.yml delete mode 100644 plugins/easy_wbs/config/locales/en.yml delete mode 100644 plugins/easy_wbs/config/locales/es.yml delete mode 100644 plugins/easy_wbs/config/locales/fi.yml delete mode 100644 plugins/easy_wbs/config/locales/fr.yml delete mode 100644 plugins/easy_wbs/config/locales/he.yml delete mode 100644 plugins/easy_wbs/config/locales/hr.yml delete mode 100644 plugins/easy_wbs/config/locales/hu.yml delete mode 100644 plugins/easy_wbs/config/locales/it.yml delete mode 100644 plugins/easy_wbs/config/locales/ja.yml delete mode 100644 plugins/easy_wbs/config/locales/ko.yml delete mode 100644 plugins/easy_wbs/config/locales/mk.yml delete mode 100644 plugins/easy_wbs/config/locales/nl.yml delete mode 100644 plugins/easy_wbs/config/locales/no.yml delete mode 100644 plugins/easy_wbs/config/locales/pl.yml delete mode 100644 plugins/easy_wbs/config/locales/pt-BR.yml delete mode 100644 plugins/easy_wbs/config/locales/pt.yml delete mode 100644 plugins/easy_wbs/config/locales/ro.yml delete mode 100644 plugins/easy_wbs/config/locales/ru.yml delete mode 100644 plugins/easy_wbs/config/locales/sk.yml delete mode 100644 plugins/easy_wbs/config/locales/sl.yml delete mode 100644 plugins/easy_wbs/config/locales/sq.yml delete mode 100644 plugins/easy_wbs/config/locales/sr-YU.yml delete mode 100644 plugins/easy_wbs/config/locales/sr.yml delete mode 100644 plugins/easy_wbs/config/locales/sv.yml delete mode 100644 plugins/easy_wbs/config/locales/th.yml delete mode 100644 plugins/easy_wbs/config/locales/tr.yml delete mode 100644 plugins/easy_wbs/config/locales/zh-TW.yml delete mode 100644 plugins/easy_wbs/config/locales/zh.yml delete mode 100644 plugins/easy_wbs/config/routes.rb delete mode 100644 plugins/easy_wbs/init.rb delete mode 100644 plugins/easy_wbs/lib/easy_wbs/easy_wbs.rb delete mode 100644 plugins/easy_wbs/lib/easy_wbs/hooks.rb delete mode 100644 plugins/easy_wbs/lib/easy_wbs/redmine_patch/controllers/queries_controller_patch.rb delete mode 100644 plugins/easy_wbs/lib/easy_wbs/redmine_patch/helpers/application_helper_patch.rb delete mode 100644 plugins/easy_wbs/lib/easy_wbs/redmine_patch/models/project_patch.rb delete mode 100644 plugins/easy_wbs/spec/controllers/easy_wbs_controller_spec.rb delete mode 100644 plugins/easy_wbs/spec/features/jasmine_spec.rb delete mode 100644 plugins/easy_wbs/spec/features/wbs_legend_spec.rb delete mode 100644 plugins/easy_wbs/spec/features/wbs_no_sidebar_spec.rb delete mode 100644 plugins/easy_wbs/spec/features/wbs_sidebar_spec.rb delete mode 100644 plugins/easy_wbs/spec/features/wbs_tree_spec.rb delete mode 100644 plugins/redmine_agile/Gemfile delete mode 100644 plugins/redmine_agile/README.rdoc delete mode 100644 plugins/redmine_agile/app/controllers/agile_boards_controller.rb delete mode 100644 plugins/redmine_agile/app/controllers/agile_charts_controller.rb delete mode 100644 plugins/redmine_agile/app/controllers/agile_charts_queries_controller.rb delete mode 100644 plugins/redmine_agile/app/controllers/agile_journal_details_controller.rb delete mode 100644 plugins/redmine_agile/app/helpers/agile_boards_helper.rb delete mode 100644 plugins/redmine_agile/app/helpers/agile_charts_helper.rb delete mode 100644 plugins/redmine_agile/app/helpers/agile_support_helper.rb delete mode 100644 plugins/redmine_agile/app/models/agile_charts_query.rb delete mode 100644 plugins/redmine_agile/app/models/agile_data.rb delete mode 100644 plugins/redmine_agile/app/models/agile_query.rb delete mode 100644 plugins/redmine_agile/app/models/agile_statuses_collector.rb delete mode 100644 plugins/redmine_agile/app/views/agile_boards/_add_issue_card.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_boards/_backlog_column.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_boards/_board.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_boards/_form.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_boards/_index.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_boards/_issue_card.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_boards/_issue_tooltip.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_boards/_issues_links.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_boards/_issues_list.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_boards/_members.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_boards/_upgrade_to_pro.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_boards/agile_data.api.rsb delete mode 100644 plugins/redmine_agile/app/views/agile_boards/autocomplete.js.erb delete mode 100644 plugins/redmine_agile/app/views/agile_boards/index.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_boards/index.js.erb delete mode 100644 plugins/redmine_agile/app/views/agile_boards/inline_comment.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_boards/load_more.js.erb delete mode 100644 plugins/redmine_agile/app/views/agile_boards/update.js.erb delete mode 100644 plugins/redmine_agile/app/views/agile_charts/_agile_charts.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_charts/_chart.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_charts/_versions_show.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_charts/select_version_chart.js.erb delete mode 100644 plugins/redmine_agile/app/views/agile_charts/show.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_charts_queries/_form.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_charts_queries/edit.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_charts_queries/new.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_journal_details/_status_detail.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_journal_details/assignee.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_journal_details/done_ratio.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_journal_details/edit.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_journal_details/new.html.erb delete mode 100644 plugins/redmine_agile/app/views/agile_journal_details/status.html.erb delete mode 100644 plugins/redmine_agile/app/views/issues/_agile_data_fields.html.erb delete mode 100644 plugins/redmine_agile/app/views/issues/_agile_data_labels.html.erb delete mode 100644 plugins/redmine_agile/app/views/issues/_issue_spint_form.html.erb delete mode 100644 plugins/redmine_agile/app/views/issues/_issue_story_points.html.erb delete mode 100644 plugins/redmine_agile/app/views/issues/_issue_story_points_form.html.erb delete mode 100644 plugins/redmine_agile/app/views/settings/agile/_general.html.erb delete mode 100644 plugins/redmine_agile/assets/images/agile.png delete mode 100644 plugins/redmine_agile/assets/images/fullscreen.png delete mode 100644 plugins/redmine_agile/assets/javascripts/jquery.simplecolorpicker.js delete mode 100644 plugins/redmine_agile/assets/javascripts/jquery.ui.touch-punch.js delete mode 100644 plugins/redmine_agile/assets/javascripts/redmine_agile.js delete mode 100644 plugins/redmine_agile/assets/javascripts/redmine_agile_sprint.js delete mode 100644 plugins/redmine_agile/assets/stylesheets/jquery.simplecolorpicker.css delete mode 100644 plugins/redmine_agile/assets/stylesheets/redmine_agile.css delete mode 100644 plugins/redmine_agile/config/locales/de.yml delete mode 100644 plugins/redmine_agile/config/locales/en.yml delete mode 100644 plugins/redmine_agile/config/locales/es.yml delete mode 100644 plugins/redmine_agile/config/locales/fr.yml delete mode 100644 plugins/redmine_agile/config/locales/it.yml delete mode 100644 plugins/redmine_agile/config/locales/ko.yml delete mode 100644 plugins/redmine_agile/config/locales/pt-BR.yml delete mode 100644 plugins/redmine_agile/config/locales/pt.yml delete mode 100644 plugins/redmine_agile/config/locales/ru.yml delete mode 100644 plugins/redmine_agile/config/locales/zh-TW.yml delete mode 100644 plugins/redmine_agile/config/locales/zh.yml delete mode 100644 plugins/redmine_agile/config/routes.rb delete mode 100644 plugins/redmine_agile/db/migrate/001_create_issue_status_orders.rb delete mode 100644 plugins/redmine_agile/db/migrate/002_create_agile_colors.rb delete mode 100644 plugins/redmine_agile/db/migrate/003_rename_issue_status_orders.rb delete mode 100644 plugins/redmine_agile/db/migrate/004_rename_agile_ranks.rb delete mode 100644 plugins/redmine_agile/db/migrate/005_add_story_points_to_agile_ranks.rb delete mode 100644 plugins/redmine_agile/db/migrate/006_create_agile_sprints.rb delete mode 100644 plugins/redmine_agile/db/migrate/007_add_sprint_id_to_agile_data.rb delete mode 100644 plugins/redmine_agile/db/migrate/008_add_sharing_to_agile_sprint.rb delete mode 100644 plugins/redmine_agile/doc/CHANGELOG delete mode 100644 plugins/redmine_agile/doc/COPYING delete mode 100644 plugins/redmine_agile/doc/LICENSE delete mode 100644 plugins/redmine_agile/init.rb delete mode 100644 plugins/redmine_agile/lib/redmine_agile.rb delete mode 100644 plugins/redmine_agile/lib/redmine_agile/charts/agile_chart.rb delete mode 100644 plugins/redmine_agile/lib/redmine_agile/charts/burndown_chart.rb delete mode 100644 plugins/redmine_agile/lib/redmine_agile/charts/charts.rb delete mode 100644 plugins/redmine_agile/lib/redmine_agile/charts/work_burndown_chart.rb delete mode 100644 plugins/redmine_agile/lib/redmine_agile/helpers/agile_helper.rb delete mode 100644 plugins/redmine_agile/lib/redmine_agile/hooks/controller_issue_hook.rb delete mode 100644 plugins/redmine_agile/lib/redmine_agile/hooks/views_issues_hook.rb delete mode 100644 plugins/redmine_agile/lib/redmine_agile/hooks/views_layouts_hook.rb delete mode 100644 plugins/redmine_agile/lib/redmine_agile/hooks/views_versions_hook.rb delete mode 100644 plugins/redmine_agile/lib/redmine_agile/patches/issue_drop_patch.rb delete mode 100644 plugins/redmine_agile/lib/redmine_agile/patches/issue_patch.rb delete mode 100644 plugins/redmine_agile/lib/redmine_agile/patches/issues_controller_patch.rb delete mode 100644 plugins/redmine_agile/lib/redmine_agile/patches/project_patch.rb delete mode 100644 plugins/redmine_agile/lib/redmine_agile/patches/projects_helper_patch.rb delete mode 100644 plugins/redmine_agile/lib/redmine_agile/patches/queries_controller_patch.rb delete mode 100644 plugins/redmine_agile/test/fixtures/agile_data.yml delete mode 100644 plugins/redmine_agile/test/fixtures/queries.yml delete mode 100644 plugins/redmine_agile/test/functional/agile_boards_controller_test.rb delete mode 100644 plugins/redmine_agile/test/functional/agile_charts_controller_test.rb delete mode 100644 plugins/redmine_agile/test/functional/agile_journal_details_controller_test.rb delete mode 100644 plugins/redmine_agile/test/functional/issues_controller_test.rb delete mode 100644 plugins/redmine_agile/test/functional/projects_controller_test.rb delete mode 100644 plugins/redmine_agile/test/functional/users_controller_test.rb delete mode 100644 plugins/redmine_agile/test/integration/api_test/agile_data_test.rb delete mode 100644 plugins/redmine_agile/test/integration/common_views_test.rb delete mode 100644 plugins/redmine_agile/test/test_helper.rb delete mode 100644 plugins/redmine_agile/test/ui/agile_board_ui_test.rb delete mode 100644 plugins/redmine_agile/test/unit/agile_charts_query_test.rb delete mode 100644 plugins/redmine_agile/test/unit/agile_data_test.rb delete mode 100644 plugins/redmine_agile/test/unit/charts/burndown_chart_test.rb delete mode 100644 plugins/redmine_agile/test/unit/helpers/agile_boards_helper_test.rb delete mode 100644 plugins/redmine_checklists/Gemfile delete mode 100644 plugins/redmine_checklists/app/controllers/checklists_controller.rb delete mode 100644 plugins/redmine_checklists/app/helpers/checklists_helper.rb delete mode 100644 plugins/redmine_checklists/app/models/checklist.rb delete mode 100644 plugins/redmine_checklists/app/models/journal_checklist_history.rb delete mode 100644 plugins/redmine_checklists/app/views/checklists/_checklist_item.html.erb delete mode 100644 plugins/redmine_checklists/app/views/checklists/done.js.erb delete mode 100644 plugins/redmine_checklists/app/views/checklists/index.api.rsb delete mode 100644 plugins/redmine_checklists/app/views/checklists/show.api.rsb delete mode 100644 plugins/redmine_checklists/app/views/issues/_checklist.html.erb delete mode 100644 plugins/redmine_checklists/app/views/issues/_checklist_fields.html.erb delete mode 100644 plugins/redmine_checklists/app/views/issues/_checklist_form.html.erb delete mode 100644 plugins/redmine_checklists/app/views/settings/checklists/_checklists.html.erb delete mode 100644 plugins/redmine_checklists/app/views/settings/checklists/_general.html.erb delete mode 100644 plugins/redmine_checklists/assets/javascripts/checklists.js delete mode 100644 plugins/redmine_checklists/assets/stylesheets/checklists.css delete mode 100644 plugins/redmine_checklists/config/locales/bg.yml delete mode 100644 plugins/redmine_checklists/config/locales/de.yml delete mode 100644 plugins/redmine_checklists/config/locales/en.yml delete mode 100644 plugins/redmine_checklists/config/locales/es.yml delete mode 100755 plugins/redmine_checklists/config/locales/fr.yml delete mode 100644 plugins/redmine_checklists/config/locales/hu.yml delete mode 100644 plugins/redmine_checklists/config/locales/it.yml delete mode 100644 plugins/redmine_checklists/config/locales/ja.yml delete mode 100644 plugins/redmine_checklists/config/locales/ko.yml delete mode 100644 plugins/redmine_checklists/config/locales/nl.yml delete mode 100644 plugins/redmine_checklists/config/locales/pl.yml delete mode 100644 plugins/redmine_checklists/config/locales/pt-BR.yml delete mode 100644 plugins/redmine_checklists/config/locales/pt.yml delete mode 100644 plugins/redmine_checklists/config/locales/ru.yml delete mode 100644 plugins/redmine_checklists/config/locales/sk.yml delete mode 100644 plugins/redmine_checklists/config/locales/sv.yml delete mode 100644 plugins/redmine_checklists/config/locales/tr.yml delete mode 100644 plugins/redmine_checklists/config/locales/uk.yml delete mode 100644 plugins/redmine_checklists/config/locales/zh-TW.yml delete mode 100644 plugins/redmine_checklists/config/locales/zh.yml delete mode 100644 plugins/redmine_checklists/config/routes.rb delete mode 100644 plugins/redmine_checklists/db/migrate/001_create_checklists.rb delete mode 100644 plugins/redmine_checklists/db/migrate/002_add_time_stamps_to_checklists.rb delete mode 100644 plugins/redmine_checklists/db/migrate/003_create_checklist_template_category.rb delete mode 100644 plugins/redmine_checklists/db/migrate/004_create_checklist_templates.rb delete mode 100644 plugins/redmine_checklists/db/migrate/005_modify_checklist_subject_length.rb delete mode 100644 plugins/redmine_checklists/db/migrate/006_add_fields_to_checklist_template.rb delete mode 100644 plugins/redmine_checklists/db/migrate/007_add_is_section_to_checklists.rb delete mode 100644 plugins/redmine_checklists/doc/CHANGELOG delete mode 100644 plugins/redmine_checklists/doc/COPYING delete mode 100644 plugins/redmine_checklists/doc/LICENSE delete mode 100644 plugins/redmine_checklists/init.rb delete mode 100644 plugins/redmine_checklists/lib/redmine_checklists.rb delete mode 100644 plugins/redmine_checklists/lib/redmine_checklists/hooks/controller_issues_hook.rb delete mode 100644 plugins/redmine_checklists/lib/redmine_checklists/hooks/views_issues_hook.rb delete mode 100644 plugins/redmine_checklists/lib/redmine_checklists/hooks/views_layouts_hook.rb delete mode 100644 plugins/redmine_checklists/lib/redmine_checklists/patches/compatibility/application_helper_patch.rb delete mode 100644 plugins/redmine_checklists/lib/redmine_checklists/patches/compatibility/open_struct_patch.rb delete mode 100644 plugins/redmine_checklists/lib/redmine_checklists/patches/helper_for_checklists_patch.rb delete mode 100644 plugins/redmine_checklists/lib/redmine_checklists/patches/issue_patch.rb delete mode 100644 plugins/redmine_checklists/lib/redmine_checklists/patches/issue_query_patch.rb delete mode 100644 plugins/redmine_checklists/lib/redmine_checklists/patches/issues_controller_patch.rb delete mode 100644 plugins/redmine_checklists/lib/redmine_checklists/patches/issues_helper_patch.rb delete mode 100644 plugins/redmine_checklists/lib/redmine_checklists/patches/notifiable_patch.rb delete mode 100644 plugins/redmine_checklists/lib/redmine_checklists/patches/project_patch.rb delete mode 100644 plugins/redmine_checklists/test/fixtures/checklists.yml delete mode 100644 plugins/redmine_checklists/test/functional/checklists_controller_test.rb delete mode 100644 plugins/redmine_checklists/test/functional/issues_controller_test.rb delete mode 100644 plugins/redmine_checklists/test/integration/api_test/checklists_test.rb delete mode 100644 plugins/redmine_checklists/test/integration/common_issue_test.rb delete mode 100644 plugins/redmine_checklists/test/test_helper.rb delete mode 100644 plugins/redmine_checklists/test/unit/checklist_test.rb delete mode 100644 plugins/redmine_checklists/test/unit/issue_test.rb delete mode 100644 plugins/redmine_checklists/test/unit/project_test.rb delete mode 100644 plugins/redmine_monitoring_controlling/README.rdoc delete mode 100644 plugins/redmine_monitoring_controlling/app/controllers/home_monitoring_controlling_project_controller.rb delete mode 100644 plugins/redmine_monitoring_controlling/app/controllers/mc_human_resource_mgmt_project_controller.rb delete mode 100644 plugins/redmine_monitoring_controlling/app/controllers/mc_time_mgmt_project_controller.rb delete mode 100644 plugins/redmine_monitoring_controlling/app/views/home_monitoring_controlling_project/_index.html.erb delete mode 100644 plugins/redmine_monitoring_controlling/app/views/home_monitoring_controlling_project/index.html.erb delete mode 100644 plugins/redmine_monitoring_controlling/app/views/mc_human_resource_mgmt_project/_scripts.html.erb delete mode 100644 plugins/redmine_monitoring_controlling/app/views/mc_human_resource_mgmt_project/index.html.erb delete mode 100644 plugins/redmine_monitoring_controlling/app/views/mc_menu/_contentHeader.html.erb delete mode 100644 plugins/redmine_monitoring_controlling/app/views/mc_menu/_mcmenu.html.erb delete mode 100644 plugins/redmine_monitoring_controlling/app/views/mc_menu/_progressbar.html.erb delete mode 100644 plugins/redmine_monitoring_controlling/app/views/mc_time_mgmt_project/_scripts.html.erb delete mode 100644 plugins/redmine_monitoring_controlling/app/views/mc_time_mgmt_project/index.html.erb delete mode 100644 plugins/redmine_monitoring_controlling/assets/images/loadingAnimation.gif delete mode 100644 plugins/redmine_monitoring_controlling/assets/javascripts/exporting.js delete mode 100644 plugins/redmine_monitoring_controlling/assets/javascripts/highcharts.js delete mode 100644 plugins/redmine_monitoring_controlling/assets/javascripts/highstock.js delete mode 100644 plugins/redmine_monitoring_controlling/assets/javascripts/jquery.min.js delete mode 100755 plugins/redmine_monitoring_controlling/assets/javascripts/rails.js delete mode 100644 plugins/redmine_monitoring_controlling/assets/javascripts/thickbox.js delete mode 100644 plugins/redmine_monitoring_controlling/assets/stylesheets/monitoringcontrolling.css delete mode 100644 plugins/redmine_monitoring_controlling/assets/stylesheets/thickbox.css delete mode 100644 plugins/redmine_monitoring_controlling/config/locales/de.yml delete mode 100644 plugins/redmine_monitoring_controlling/config/locales/en.yml delete mode 100644 plugins/redmine_monitoring_controlling/config/locales/fr.yml delete mode 100644 plugins/redmine_monitoring_controlling/config/locales/pl.yml delete mode 100644 plugins/redmine_monitoring_controlling/config/locales/pt-BR.yml delete mode 100644 plugins/redmine_monitoring_controlling/config/locales/ru.yml delete mode 100644 plugins/redmine_monitoring_controlling/config/locales/tr.yml delete mode 100644 plugins/redmine_monitoring_controlling/config/locales/zh.yml delete mode 100644 plugins/redmine_monitoring_controlling/config/routes.rb delete mode 100644 plugins/redmine_monitoring_controlling/init.rb delete mode 100644 plugins/redmine_monitoring_controlling/lang/en.yml delete mode 100644 plugins/redmine_monitoring_controlling/lib/mc_tools.rb delete mode 100644 plugins/redmine_monitoring_controlling/license.txt delete mode 100644 plugins/redmine_monitoring_controlling/logo.png delete mode 100644 plugins/redmine_monitoring_controlling/screenshotEn.png delete mode 100644 plugins/redmine_monitoring_controlling/screenshotPt.png delete mode 100644 plugins/redmine_monitoring_controlling/test/test_helper.rb delete mode 100644 plugins/redmine_omniauth_client/Gemfile delete mode 100644 plugins/redmine_omniauth_client/Gemfile.lock delete mode 100644 plugins/redmine_omniauth_client/README.md delete mode 100644 plugins/redmine_omniauth_client/app/controllers/redmine_oauth_controller.rb delete mode 100644 plugins/redmine_omniauth_client/app/helpers/redmine_omniauth_helper.rb delete mode 100644 plugins/redmine_omniauth_client/app/models/group_mapping.rb delete mode 100644 plugins/redmine_omniauth_client/app/views/hooks/_view_account_login_top.html.erb delete mode 100644 plugins/redmine_omniauth_client/app/views/redmine_oauth/group_mapping.html.erb delete mode 100644 plugins/redmine_omniauth_client/app/views/settings/_client_settings.html.erb delete mode 100644 plugins/redmine_omniauth_client/assets/images/bt_connect_portail.png delete mode 100644 plugins/redmine_omniauth_client/assets/images/bt_connect_ror.png delete mode 100644 plugins/redmine_omniauth_client/assets/images/keycloak_plugin.png delete mode 100644 plugins/redmine_omniauth_client/assets/images/keycloak_plugin_small.png delete mode 100644 plugins/redmine_omniauth_client/assets/stylesheets/buttons.css delete mode 100644 plugins/redmine_omniauth_client/config/locales/cs.yml delete mode 100644 plugins/redmine_omniauth_client/config/locales/en.yml delete mode 100644 plugins/redmine_omniauth_client/config/locales/fr.yml delete mode 100644 plugins/redmine_omniauth_client/config/locales/ru.yml delete mode 100644 plugins/redmine_omniauth_client/config/routes.rb delete mode 100644 plugins/redmine_omniauth_client/db/migrate/001_create_group_mappings.rb delete mode 100644 plugins/redmine_omniauth_client/db/migrate/002_update_users_ssouid.rb delete mode 100644 plugins/redmine_omniauth_client/init.rb delete mode 100644 plugins/redmine_omniauth_client/lib/group_patch.rb delete mode 100644 plugins/redmine_omniauth_client/lib/redmine_omniauth_client/hooks.rb delete mode 100644 plugins/redmine_omniauth_client/test/functional/redmine_oauth_controller_test.rb delete mode 100644 plugins/redmine_omniauth_client/test/test_helper.rb delete mode 100644 plugins/redmine_omniauth_client/test/unit/group_mapping_test.rb delete mode 160000 plugins/redmine_pivot_table delete mode 160000 plugins/redmine_theme_changer delete mode 160000 plugins/redmine_work_time delete mode 160000 plugins/redmine_zulip delete mode 100644 plugins/redmineup_tags/.drone.jsonnet delete mode 100644 plugins/redmineup_tags/Gemfile delete mode 100644 plugins/redmineup_tags/app/controllers/issue_tags_controller.rb delete mode 100644 plugins/redmineup_tags/app/controllers/tags_controller.rb delete mode 100644 plugins/redmineup_tags/app/helpers/issues_tags_helper.rb delete mode 100644 plugins/redmineup_tags/app/helpers/tags_helper.rb delete mode 100644 plugins/redmineup_tags/app/views/context_menus/_issues_tags.html.erb delete mode 100644 plugins/redmineup_tags/app/views/issue_tags/_edit_modal.html.erb delete mode 100644 plugins/redmineup_tags/app/views/issue_tags/edit.js.erb delete mode 100644 plugins/redmineup_tags/app/views/issues/_tags.html.erb delete mode 100644 plugins/redmineup_tags/app/views/issues/_tags_form.html.erb delete mode 100644 plugins/redmineup_tags/app/views/issues/_tags_sidebar.html.erb delete mode 100644 plugins/redmineup_tags/app/views/reports/_tags_simple.html.erb delete mode 100644 plugins/redmineup_tags/app/views/tags/_additional_assets.html.erb delete mode 100644 plugins/redmineup_tags/app/views/tags/_general.html.erb delete mode 100644 plugins/redmineup_tags/app/views/tags/_manage_tags.html.erb delete mode 100644 plugins/redmineup_tags/app/views/tags/_select2_transformation_rules.html.erb delete mode 100644 plugins/redmineup_tags/app/views/tags/_settings.html.erb delete mode 100644 plugins/redmineup_tags/app/views/tags/context_menu.html.erb delete mode 100644 plugins/redmineup_tags/app/views/tags/edit.html.erb delete mode 100644 plugins/redmineup_tags/app/views/tags/merge.html.erb delete mode 100644 plugins/redmineup_tags/assets/images/tag-icon.png delete mode 100644 plugins/redmineup_tags/assets/images/tag_blue_add.png delete mode 100644 plugins/redmineup_tags/assets/javascripts/redmine_tags.js delete mode 100644 plugins/redmineup_tags/assets/stylesheets/redmine_tags.css delete mode 100644 plugins/redmineup_tags/config/locales/bg.yml delete mode 100644 plugins/redmineup_tags/config/locales/de.yml delete mode 100644 plugins/redmineup_tags/config/locales/en.yml delete mode 100644 plugins/redmineup_tags/config/locales/fr.yml delete mode 100644 plugins/redmineup_tags/config/locales/pt-BR.yml delete mode 100644 plugins/redmineup_tags/config/locales/ro.yml delete mode 100644 plugins/redmineup_tags/config/locales/ru.yml delete mode 100644 plugins/redmineup_tags/config/locales/zh-TW.yml delete mode 100644 plugins/redmineup_tags/config/locales/zh.yml delete mode 100644 plugins/redmineup_tags/config/routes.rb delete mode 100644 plugins/redmineup_tags/db/migrate/001_add_tags_and_taggings.rb delete mode 100644 plugins/redmineup_tags/db/migrate/002_create_tags.rb delete mode 100755 plugins/redmineup_tags/doc/CHANGELOG delete mode 100644 plugins/redmineup_tags/doc/COPYING delete mode 100644 plugins/redmineup_tags/doc/LICENSE delete mode 100644 plugins/redmineup_tags/init.rb delete mode 100644 plugins/redmineup_tags/lib/query_tags_column.rb delete mode 100644 plugins/redmineup_tags/lib/redmineup_tags.rb delete mode 100644 plugins/redmineup_tags/lib/redmineup_tags/hooks/model_issue_hook.rb delete mode 100644 plugins/redmineup_tags/lib/redmineup_tags/hooks/views_context_menus_hook.rb delete mode 100644 plugins/redmineup_tags/lib/redmineup_tags/hooks/views_issues_hook.rb delete mode 100644 plugins/redmineup_tags/lib/redmineup_tags/hooks/views_layouts_hook.rb delete mode 100644 plugins/redmineup_tags/lib/redmineup_tags/hooks/views_reports_hook.rb delete mode 100644 plugins/redmineup_tags/lib/redmineup_tags/patches/add_helpers_for_issue_tags_patch.rb delete mode 100644 plugins/redmineup_tags/lib/redmineup_tags/patches/agile_query_patch.rb delete mode 100644 plugins/redmineup_tags/lib/redmineup_tags/patches/agile_versions_query_patch.rb delete mode 100644 plugins/redmineup_tags/lib/redmineup_tags/patches/auto_completes_controller_patch.rb delete mode 100644 plugins/redmineup_tags/lib/redmineup_tags/patches/issue_patch.rb delete mode 100644 plugins/redmineup_tags/lib/redmineup_tags/patches/issue_query_patch.rb delete mode 100644 plugins/redmineup_tags/lib/redmineup_tags/patches/queries_helper_patch.rb delete mode 100644 plugins/redmineup_tags/lib/redmineup_tags/patches/reports_controller_patch.rb delete mode 100644 plugins/redmineup_tags/lib/redmineup_tags/patches/time_entry_patch.rb delete mode 100644 plugins/redmineup_tags/lib/redmineup_tags/patches/time_entry_query_patch.rb delete mode 100644 plugins/redmineup_tags/lib/redmineup_tags/patches/time_report_patch.rb delete mode 100644 plugins/redmineup_tags/test/fixtures/taggings.yml delete mode 100644 plugins/redmineup_tags/test/fixtures/tags.yml delete mode 100644 plugins/redmineup_tags/test/functional/agile_boards_controller_test.rb delete mode 100644 plugins/redmineup_tags/test/functional/agile_versions_controller_test.rb delete mode 100644 plugins/redmineup_tags/test/functional/auto_completes_controller_test.rb delete mode 100644 plugins/redmineup_tags/test/functional/issue_tags_controller_test.rb delete mode 100644 plugins/redmineup_tags/test/functional/issues_controller_test.rb delete mode 100644 plugins/redmineup_tags/test/functional/reports_controller_test.rb delete mode 100644 plugins/redmineup_tags/test/functional/tags_controller_test.rb delete mode 100644 plugins/redmineup_tags/test/functional/timelog_controller_test.rb delete mode 100644 plugins/redmineup_tags/test/test_helper.rb delete mode 100644 plugins/redmineup_tags/test/unit/issue_test.rb delete mode 160000 plugins/sparkline delete mode 160000 plugins/traffic_lights delete mode 160000 themes/PurpleMine2 diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 45084dc..0000000 --- a/.gitmodules +++ /dev/null @@ -1,24 +0,0 @@ -[submodule "themes/PurpleMine2"] - path = themes/PurpleMine2 - url = https://github.com/mrliptontea/PurpleMine2.git -[submodule "plugins/redmine_pivot_table"] - path = plugins/redmine_pivot_table - url = https://github.com/deecay/redmine_pivot_table.git -[submodule "plugins/issue_charts"] - path = plugins/issue_charts - url = https://github.com/masweetman/issue_charts.git -[submodule "plugins/redmine_zulip"] - path = plugins/redmine_zulip - url = https://github.com/zulip/zulip-redmine-plugin.git -[submodule "plugins/redmine-signals-plugin"] - path = plugins/traffic_lights - url = https://gitlab.pirati.cz/sperling/redmine-signals-plugin.git -[submodule "plugins/redmine_theme_changer"] - path = plugins/redmine_theme_changer - url = https://github.com/haru/redmine_theme_changer.git -[submodule "plugins/redmine_work_time"] - path = plugins/redmine_work_time - url = https://github.com/tkusukawa/redmine_work_time.git -[submodule "plugins/sparkline"] - path = plugins/sparkline - url = https://gitlab.pirati.cz/sperling/redmine-sparkline-plugin.git diff --git a/Dockerfile b/Dockerfile index 1f64057..b0dc316 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,4 @@ -FROM redmine:4.2.10-passenger +FROM redmine:5.1.3 MAINTAINER Andrej Ramašeuski <andrej.ramaseuski@pirati.cz> -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - build-essential && \ - apt-get remove -y libgs9 ghostscript libgs9-common - -COPY ./themes/ /usr/src/redmine/public/themes/ -COPY ./plugins/ /usr/src/redmine/plugins/ +RUN apt update && apt install ruby-dev diff --git a/plugins/easy_mindmup/Gemfile b/plugins/easy_mindmup/Gemfile deleted file mode 100644 index 772940c..0000000 --- a/plugins/easy_mindmup/Gemfile +++ /dev/null @@ -1 +0,0 @@ -gem 'redmine_extensions' unless Dir.exist?(File.expand_path('../../easyproject', __FILE__)) diff --git a/plugins/easy_mindmup/README.rdoc b/plugins/easy_mindmup/README.rdoc deleted file mode 100644 index 5819ee8..0000000 --- a/plugins/easy_mindmup/README.rdoc +++ /dev/null @@ -1,3 +0,0 @@ -= Easy MindMup - -Mind map library compatible with EasyProject and Redmine \ No newline at end of file diff --git a/plugins/easy_mindmup/after_init.rb b/plugins/easy_mindmup/after_init.rb deleted file mode 100644 index 560a27c..0000000 --- a/plugins/easy_mindmup/after_init.rb +++ /dev/null @@ -1,6 +0,0 @@ -app_dir = File.join(File.dirname(__FILE__), 'app') -lib_dir = File.join(File.dirname(__FILE__), 'lib', 'easy_mindmup') - -RedmineExtensions::Reloader.to_prepare do - require 'easy_mindmup/easy_mindmup' -end diff --git a/plugins/easy_mindmup/app/controllers/easy_mindmup_controller.rb b/plugins/easy_mindmup/app/controllers/easy_mindmup_controller.rb deleted file mode 100644 index 64933b6..0000000 --- a/plugins/easy_mindmup/app/controllers/easy_mindmup_controller.rb +++ /dev/null @@ -1,44 +0,0 @@ -class EasyMindmupController < ApplicationController - accept_api_auth :update_layout - - before_action :find_project_by_project_id - before_action :authorize - - # Save mindmup layout - # - # PUT update_layout - # { - # easy_setting: { - # *_layout: { ... } - # } - # } - # - def update_layout - if params[:easy_setting].is_a?(Hash) - params[:easy_setting].each do |name, value| - next unless name.end_with?('_layout') - next unless value.is_a?(Hash) - - # Convert `ActionController::Parameters` to `Hash` - value = value.to_hash - - setting = EasySetting.find_or_initialize_by(name: name, project_id: @project.id) - setting.value = value - setting.save - end - end - - respond_to do |format| - format.api { render_api_ok } - end - end - - private - - def authorize - unless User.current.allowed_to?(:edit_project, @project) - return render_403 - end - end - -end diff --git a/plugins/easy_mindmup/app/helpers/easy_mindmup_helper.rb b/plugins/easy_mindmup/app/helpers/easy_mindmup_helper.rb deleted file mode 100644 index a72e35a..0000000 --- a/plugins/easy_mindmup/app/helpers/easy_mindmup_helper.rb +++ /dev/null @@ -1,21 +0,0 @@ -module EasyMindmupHelper - - # def avatar_url_from_avatar(avatar_html) - # start_index = avatar_html.index('src="') - # return '' if start_index.nil? - # start_index += 5 - # end_index = avatar_html.index('"', start_index) - # avatar_html[start_index, end_index - start_index] - # end - - def mindmup_avatar_url(user) - if defined?(avatar_url) - avatar_url(user) - elsif Setting.gravatar_enabled? - gravatar_url(user.mail.to_s.downcase, size: 64, default: Setting.gravatar_default) - else - '' - end - end - -end diff --git a/plugins/easy_mindmup/app/views/easy_mindmup/_hotkeys.html.erb b/plugins/easy_mindmup/app/views/easy_mindmup/_hotkeys.html.erb deleted file mode 100644 index 2e12624..0000000 --- a/plugins/easy_mindmup/app/views/easy_mindmup/_hotkeys.html.erb +++ /dev/null @@ -1,31 +0,0 @@ - <div class="mindmup-hotkeys-source" style="display:none"> - <h3 class="title"><%= l(:title_shortcuts, :scope => [:easy_mindmup, :hotkeys]) %></h3> - <h1><%= l(:title_key_shortcuts, :scope => [:easy_mindmup, :hotkeys]) %></h1> - <p><%= l(:info_mac_metakey, :scope => [:easy_mindmup, :hotkeys]) %></p> - <table class="table table-striped"> - <colgroup><col width="30%"></col><col width="70%"></col></colgroup> - <tbody> - <% l(:keyboard, :scope => [:easy_mindmup, :hotkeys]).each do |group| %> - <tr> - <td colspan="2"><h2><%= group[:title] %></h2></td> - </tr> - <% group[:hotkeys].each do |item| %> - <tr> - <td><%= item[:hotkey] %></td> - <td><%= item[:info] %></td> - </tr> - <% end - end %> - </tbody> - </table> - <h1><%= l(:title_mouse_shortcuts, :scope => [:easy_mindmup, :hotkeys]) %></h1> - <table class="table table-striped"> - <colgroup><col width="20%"></col><col width="80%"></col></colgroup> - <% l(:mouse, :scope => [:easy_mindmup, :hotkeys]).each do |item| %> - <tr> - <td><%= item[:action] %></td> - <td><%= item[:gesture] %></td> - </tr> - <% end %> - </table> - </div> \ No newline at end of file diff --git a/plugins/easy_mindmup/app/views/easy_mindmup/_includes.html.erb b/plugins/easy_mindmup/app/views/easy_mindmup/_includes.html.erb deleted file mode 100644 index 842e70d..0000000 --- a/plugins/easy_mindmup/app/views/easy_mindmup/_includes.html.erb +++ /dev/null @@ -1,77 +0,0 @@ -<% include_calendar_headers_tags %> -<% heads_for_wiki_formatter %> -<% if defined?(EasyExtensions) %> - <%= stylesheet_link_tag('easy_mindmup', :media => 'all') %> -<% else %> - <%= stylesheet_link_tag('generated/easy_mindmup', :plugin => 'easy_mindmup', :media => 'all') %> - <%#= stylesheet_link_tag('easy_mindmup', :plugin => 'easy_mindmup', :media => 'all') %> - <%= stylesheet_link_tag('context_menu', :media => 'all') %> -<% end %> -<%= javascript_include_tag('external', :plugin => 'easy_mindmup') %> -<% if false && defined?(EasyExtensions) %> - <%= javascript_include_tag('easy_wbs', :plugin => 'easy_mindmup') %> -<% else %> - <script type="application/javascript"> - window.easyDartLoaders = window.easyDartLoaders || []; - </script> - <%= begin javascript_include_tag( - 'mindmup/mapjs', - 'mindmup/clipboard', - 'mindmup/content', - 'mindmup/dom-map-view', - 'mindmup/dom-map-widget', - 'mindmup/hammer-draggable', - 'mindmup/image-drop-widget', - 'mindmup/layout', - #'mindmup/link-edit-widget', - 'mindmup/map-model', - 'mindmup/map-toolbar-widget', - 'mindmup/observable', - 'mindmup/url-helper', :plugin => 'easy_mindmup') - end %> - <%= begin javascript_include_tag( - :libs, - :polyfill, - :utils, - :main, - :mapjs_init, - :event_bus, - :redrawer, - :toolbar, - :history, - :data, - :links, - :loader, - # :last_state, - :saver, - :autosave, - :save_progress, - :save_info, - :filter, - :node_patch, - :dom_patch, - :map_model_patch, - :model_classes, - :after_change, - :styles, - :logger, - # :gateway, - # :modals, - :validator, - :storage, - :legend, - :legend_events, - :expand_all, - :print, - :mm_context_menu, - :layout_patch, - :content_patch, - :links, - :link_edit_widget, :plugin => 'easy_mindmup') - end %> -<% end %> - - -<% if defined?(EasyExtensions) - include_front_end_commons if respond_to? :include_front_end_commons - end %> diff --git a/plugins/easy_mindmup/app/views/easy_mindmup/_js_prepare.html.erb b/plugins/easy_mindmup/app/views/easy_mindmup/_js_prepare.html.erb deleted file mode 100644 index 14cb604..0000000 --- a/plugins/easy_mindmup/app/views/easy_mindmup/_js_prepare.html.erb +++ /dev/null @@ -1,141 +0,0 @@ -<script type="text/javascript"> - window.easyMindMupSetting = <%= { - easyRedmine: EasyMindmup.easy_extensions?, - rootID: @project.id, - apiKey: User.current.api_key, - noSave: params[:nosave].present?, - allIcons: false, - paths: { - root: home_path - }, - labels: { - free: { - headerNotAvailable: l('easy_mindmup.free.header_not_available'), - buttonUpgrade: l('easy_mindmup.free.button_upgrade') - }, - errors: { - warning_delete_node: l('easy_mindmup.warning_delete_node'), - warning_delete_nodes: l('easy_mindmup.warning_delete_nodes') - }, - types: {}, - gateway: { - multiSuccess: l('easy_mindmup.info_all_saved'), - multiFail: l('easy_mindmup.info_any_failed'), - PUTfail: l('easy_mindmup.error_update'), - POSTfail: l('easy_mindmup.error_create'), - DELETEfail: l('easy_mindmup.error_delete'), - response_403: l('easy_mindmup.info_no_permission'), - notProperlySaved: l('easy_mindmup.warning_not_saved') - }, - legend: {}, - buttons: { - close: l(:button_close), - button_yes: l(:general_text_Yes), - button_no: l(:general_text_No) - }, - context: { - expand: l('easy_mindmup.button_expand'), - collapse: l('easy_mindmup.button_collapse'), - goto: l('easy_mindmup.label_go_to'), - rename: l(:button_rename), - editData: l('easy_mindmup.button_edit_data'), - add: l(:button_add), - addChild: l('easy_mindmup.button_add_child'), - addSibling: l('easy_mindmup.button_add_sibling'), - addParent: l('easy_mindmup.button_add_parent'), - remove: l(:button_delete), - }, - links: { - }, - save_info: { - initial: l('easy_mindmup.save_info.loaded'), - saved: l('easy_mindmup.save_info.saved'), - autosaved: l('easy_mindmup.save_info.autosaved'), - at: l('easy_mindmup.save_info.at') - }, - titleNodeChanged: l('easy_mindmup.title_node_changed') - }, - templates: { - legendTemplate: %{ - {{#filter}} - <div class="mindmup-legend__filter_cont"> - <a class="easy-mindmup__icon easy-mindmup__icon--cancel_filter mindmup-legend__filter_cancel_icon"></a> - <a class="easy-mindmup__icon easy-mindmup__icon--filter mindmup-legend__filter_icon"></a> - </div> - {{/filter}} - {{#items}} - {{{.}}} - {{/items}} - <a href="javascript:void(0)" class="mindmup-legend-used mindmup-legend-used-used--{{active}}">#{l('easy_mindmup.label_show_unused')}</a> - <a href="javascript:void(0)" class="mindmup-legend-used mindmup-legend-used-all--{{active}}">#{l('easy_mindmup.label_hide_unused')}</a> - <div class="hotkey_link"><a href="javascript:void(0)">#{l('easy_mindmup.button_hotkeys')}</a></div> - }, - upgrade: %{ - <h3 class="title">#{l('easy_mindmup.free.header_not_available')}</h3> - <p> - {{#filtering}} - #{l('easy_mindmup.free.feature_filtering')} - {{/filtering}} - {{#coloring}} - #{l('easy_mindmup.free.feature_coloring')} - {{/coloring}} - {{#context_menu}} - #{l('easy_mindmup.free.feature_context_menu')} - {{/context_menu}} - {{#dnd_property}} - #{l('easy_mindmup.free.feature_dnd_property')} - {{/dnd_property}} - {{text}} - </p> - <a id="upgrade_link" style="display:none" href="{{href}}">link</a> - }, - reloadErrors: %{ - {{#.}} - <li> - {{#isProject}}#{l(:label_project)}{{/isProject}} - {{^isProject}}#{l(:label_issue)}{{/isProject}} - {{#changed}} - "{{name}}" #{l('easy_mindmup.last_state_modal.message_changed')} - {{/changed}} - {{#moved}} - "{{name}}" #{l('easy_mindmup.last_state_modal.message_moved')} - {{/moved}} - {{#present}} - "{{name}}" #{l('easy_mindmup.last_state_modal.message_present')} - {{/present}} - {{#missing}} - "{{name}}" #{l('easy_mindmup.last_state_modal.message_missing')} - {{/missing}} - </li> - {{/.}} - }, - lastStateModal: %{ - <h3 class="title">#{l('easy_mindmup.last_state_modal.title')}</h3> - <h4>#{l('easy_mindmup.last_state_modal.label_differencies')}:</h4> - <ul class="mindmup-last-modal-diffs"> - {{{differences}}} - </ul> - <p>#{l('easy_mindmup.last_state_modal.text_reload_appeal')}</p> - }, - storedModal: %{ - <h3 class="title">#{l('easy_mindmup.stored_modal.title')}</h3> - <p>#{l('easy_mindmup.stored_modal.text_load_appeal')}</p> - <button id="stored_state_modal_local">#{l('easy_mindmup.stored_modal.button_local')}</button> - <button id="stored_state_modal_server">#{l('easy_mindmup.stored_modal.button_server')}</button> - }, - saveProgressModal: %{ - <div class="mindmup-progress-modal"> - <div class="mindmup-progress-title"><h3>#{l('easy_mindmup.label_save_progress')}</h3></div> - <div class="mindmup-progress-cont"> - <div class="mindmup-progress-bar"> - </div> - </div> - </div> - } - } - }.to_json.html_safe %> - - $(document).ready(function(){ - $("p.nodata").remove() - }) -</script> diff --git a/plugins/easy_mindmup/assets/fonts/EasyMaterialIcons-Regular.eot b/plugins/easy_mindmup/assets/fonts/EasyMaterialIcons-Regular.eot deleted file mode 100644 index c1cc0f7fd9a9233ce0235a17d8761f224c1b2aea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91978 zcmeZDXJkl9V`N}rU}9ilU|?WkU}a_i14f1kj0_Ac3_byjU_OHo1BlDOzyRel++De3 zJ46bZlwt5?NMtBsNM$Hu$Ye-l$YD@m@MK74$Y;o7C}v<_;A044NM%T8C}qfDNMtBt zU|^792m`AwX2=AqQeZG-&|@%QFk~=fU|`U}Yn}pzX$%Zb!R`UbE&{Qc8UM{;cu>gj zpq$~OpUBylJtr%o(obb3R|d5=s3q^(WRh><_I-JI>k+0q(JYT<v$OIn;W!=AryG{U zxArK*CCP&i89xRcI8^cD$K+`XrYvp<onxuDb=9)Di<rJN{n#?+bk5}%)|Ej;ZpO{K z6K_5VS6sR8eCS@;HLK6Gdj~w3T)*JIililLvC^Gng&*Bh`TVZ#4*G1S<T|UnPLOx9 z*t+FQPHeb%#xr(}T~5y2T~{-#-=9Abss6w;Qhn#XHUAc^`{{R0EaJY&6$8fk0SV=Q zw;y=%rKs}hx&!{I7OgXsAG$_;u6fNlV|IqL!}Djmt=VS$;>|V6wY+=o%Fdcia(mQz zxPI(XY?OU3#m*SUS0-D*)pz#S9v{(Dhn&_eoW1nZqD_o5?l8;|%~ouC@^6jGweugE zIQTxC@OJGu$=>0!-SN@#Pz@pZy(iDSjlb4EL-pSAB_(Cc-lk5CS({c8(Rt~i$n*G$ zyT#XPdyQAOuIaiXxOMUr`^(Fl_zP2~cxx;=rQmpMzScUEF8<RU`>zJAQgKNQ4PAI> zp16>YWY+3^99tY2UOg6`RF<1!{Nvw&GW`Nx)!Pn+db9R*-!XKQGc`8RTb3rr`_ARz z^u)s0zxsD)&fH*b`1=gEchV-4B}e2HV?`F(w(BYH4#?G1Hry-mD!KC6%#uIqg&pgi zj<}i?L^K^yJZk=Xb(g2ym9PmhRrc*+3VT!gWlwAG(5u?xeSaml*xW1EEanSzOB<|D zy*0yWLREmnHKsFdt+|>RPfvaE2>h%XThj3>=lAitHwq69oZQhCu{An#&!@G*-mlh) zI~Ojl-L~;R*UPT6HhT|FSJqk5aKUF^$o|BcrSn-7lDK7z)WU*97~@thvt7*?=)Jgf z?FwbKx%~^y?A*3x-uIhgcO2_l-)uL~m>Y3f-$$rnTHcL`hSEGjmSN%r&nG(HX4%BI zvVB``X06hmy*^i3J-9jd{hMx>XSMwF+k1Z}NM6s~{P5Y_BpEgC!xppMqO;b#bNuV0 z`}wu-m1Vr=O%xKBXiVQ=Z*P)rZz8~M|Cq%^qiESetB+D*57+ivALN_cq4e&smt4oa zBewr-_a5c(m-4Q9*)0>jtgLxUKp1zz>-aEM^Ck(-d&^vMm5&%^Io)AAZ~Vfkc>nD) z*SHQz>!vKf*(KOtJonsci)V+9=6@=>anvsShI!`anO{%%)oy#lEb4dakmZC$LUk`( z6BBpxUh;i^b&GCFF9+LU%dK2fG`FkRG(4`{v#nw28-a3;FxQS<Jdurap06rwpO={W z<Lkt&MUBR4<#zH-9nMV2%T*pO*eESGQBK>{Crj?k;o}j)$6gdEHFe}9tt>U`Ds<k? zu|j$J#0kZ&d=fRxYzEGkY-}enuNT~?JoSR;iP&wy9h<-1th3{P!{w6GYE-Fsr1hKD zl>CRcCWW;KepN}=|IFU&D|O+m+JxZl)a^1H;;XM5=v~lgwsrTu%o^?=>oTM_&awzq z^Y|hl$na>N(%<DbWz(+Q-=iO(G5yww_bD>c34b&HidQbOuYKb%+08$e`Qx?8VGN8X zpPuS?BBQr4=NngplhmUBOZV;QT{`j30tx<u6XvWjN&k6&+Ody{CKZ>m9a_WY|4@nD zcf|hZlcG;IOUi<_>6~X?lm8`hE$_3#{ADM99<5v0l5=j}Es@R}#oU}>QN|m0w0&68 zoD@^WA-7{o8Qa#=SN1gOu`N(vTKh)8Ml(X6<4{)8+dZ6drxW=;y7d3p7gZtc>sV#* z+Tw6x>a{fz8irzQuPr{Pak@tSx-T+SQ)AT~amfNvrB#{*qI-8to;2x_z=SL3R?VCf zA*Zxbke9hM+{7|X;@)|#m`(dmcz8`~E3sVoX79-_Ev{M9b~GPyny$qz_-@kGE4P>( z?rRG#<n_HEtR~rWzKo?!X!6#~{x9O(l8k5Dj$X~KJnJEG!&-eif2piq_$#jb@KbzM z>U_cb4U(1L98+)UJ(+i@aP`#sJH9+7wgw*gp3+~RN$__j*KbP_un3Y%<mcA;)^b8! z!A(5inQM)Qpy+Ma=2;G&H@};$Z!<Hxu*AC7Fpf=V#;qeea!lDC_jIzhuX@;8Z(4eC z+RW6KstY3j_%J=OwvCC|64@<&Q*%L5Y1*<%)f2uAkCfizse}tJ>|6VTJI#=72ir@L z{El;z8G9Gzxj#zLGwb}iE_QK*=W_jB3k?r9s4jSNdt%Ci^xj_~LO~9Om5O)X^VPW? zcRs>CwQTb(UW1P_8Q%OU`>%OMO5~B&2`7=%$*t8~+rp<_FaFIacp^K0!Q~G(oE|3s zx?%f{`QO^E$ix4ZDz8~kd}ZnCg<8Vj7Q}s<{P#eyro4!1hpKyar1>$WuEzg|ufCHM z-oL*$j9oNMAcCQY_ZDmP*=?VHUz?h6W~-3Q-AgI8w;Nomgj1gGesO5IhM%JO8p*Vm zZK<N|OglTIAE-~$h*4j|HQld7is|I6@5_btZ+_`uJ?ojr9=54J(mTvVqF8C!VO~Em zpV`k|E}Yojnrmb=UHs}9ZiAI+6L%cB`)S(boaL?&M;SDw6%3hYojoIAWW;5VFxgwk z-~F8T+LFHkQ+w6&Q-uweNf>MIEZ808^r!7|q1UCAZ#}hAi*~F%rE-;FMWoGyey0k1 z9SxD4H&pg2zvTNguf)Z4o6KRS3Ex$Adb^#Tp?1#Y*Mu)BE$lNUeQ!!s2|m%NnJiU& z@pIcf>z97Ik6tKVo%r;JUy@|SFPZR;vSssBO+$sJbIP>2=$URzZq>2m6Pl*%vb*4| zaA!z{_l^&@xdo;!o+z@X$d&W3n#!i{&%GxUB`#sSaYi{ifz|8K=^TEws*KhD)BpT> z^6>ZUxt%8--$*;Ge3Wb68O>S-nRAgHJuI7kRR&#kJ2cbi|B`**j^<qn6-k=>^7%EH zj2Siy1B81dR`6AS5_polWXGko*H0YPDtxA{<?XmsaCs;b<24I57w&1x_nqWr<@4$P zQ!34%IOnKo@&DFUQ_WYT1oWQp(qM^d592p)YhGi^n*A^FOI?T7oSk2)l%K6lZ#(rQ z&sO!4@65}47W8YVhs7<Pz#r(g>yqSBy&HFKr5+b%ovO5Hla2PPM(@?Po9|xi`|cap z;<wc>J9yQfD;u4~*LB|Cl61-3QGaokl<?Bq760!3OzZ8?FXPT=vU=!lxL}ip*rK-+ z)BbGr4E~t%HZM|h29r`z%Uh33{@I2z+>ai!iCeA6vCS<s&Bdf9*@5}a<6_sGJz2Wx zQ-8PkedYZpuHks=?k|hHPYr$RTeDvp21|;tY|3~yQL*1UM?+TO#<m`}XZb588ipNP z$GvT0)&3cB5}ogyW+WY$khN%wVc1jV<@3}w8@nlma!Gx<skr5$kap<G&+LK^RDLc# z(YjtzBA)jI_YB#<gVE<|WfnZvKEL%!V&YTNS=EMm?b|Gxk3Mw`P5U6~t#`elg+njp z!V2BPeg^~$o}F67&f%U_kZG|vQ+T&!%n$E~)k5N3DrQ<MiahvQ(pSh-eiRBi{9B>? zX2K2&&i30YbI&e5^7`uA#J)AA?3emkYA)CQ3+cbd<+xMuR<QJ?60s}OmiQfzI5OX; z(DSk2m&Bbdr~Vu2&HtD_$>&g9iS@z*Tx(8VzPH!VBsjAon>}FO#?8gD_Uo-TiJZG4 zcqK&Hn>l}p)U)q)dy>t5u{<q!_Q12ZVez9+S7yXt-?^oKv9jUO+#mOTYZk~@TfO7u zv75ihB=-2*bA@kC1*l)yY4Eer+b#Z>gO0cS^G970lfJp8+sgjp`rmPI(#s2u%6$bk zwI+<uCAe3=QuT<fKCx?W73+`Bk0e%BaeMk{S{Y7@+SOS9X;#|4J=@RB+W+tjZwJEx z9j3XFTQqn>Kdn-}SH(Q7J#y})KT;~5Tq?eEWD4F{#AOLBQ;^Ad&^CvqqbO~r;eAJ5 zo|MRm;zcjY*=xO$b20=P+#)Rw9Qk4S^*_7N<n^U7#w+cF9bd1Kd2+~2Wv1Nm62s=W zTZ{o|bNJ`)yT0;OQ(*PazD|{gZ0-lHO4Q2-`{(`K#QpZlyAzw9G$@{VxPx!m2OZH$ zD?S+kuEihacYSvG7f`HQGWpC4ju5`ZrBdtc1-;*yGkR|jI(ll;?#IV97x22S75}<w zrlNVlbcUFm*UdKDOkYI4eHC@T?&bXFs-mW=_pz7inh1(4E?(NX>DZ4WnZFK5sdl%! zu9*_d?E2}1Le2i}zRXK}e;?@AIUi;UulX?P=tJ4dEw|=vpMRyhg?(}HbN`NytR220 zs}?dOy5HMnY^89`v%fLqURIq$=d*+Vjyao~M{#8*E9<9<r7##D3h|cw*|*A)QRRtH zm4L$OLa~#LN4InwjErqvBsE3Dbh?jdo2D<1k)*uLE~#p+Psg}ED8(f%xXvVVFS_Qc zX$6zW;%Jej)6TOOhe&X{#}t2>ZRWUrk>-TvBB{Ayr{d4D-pq76ci_e}TV{_;c1`vl zrpd?OM>=vZ7rA!tbEayyF=N3V#cKTrQ@>Y6J$o`Ww~YM*qoHi5(HRC|yV-AN@_pGX z&cOLL^48o_rj@?mzI1ioSatNNQ?APGkIs_TE^P~DDlR{3DXH;g((!q<+iVZWthQLP zq+jEs3&$geM7G&SwVB+np5Kx($MOCQ&Zz}%?<<$g+TWJ$|D^U-)PsdpQTL}O^b{*x zy~8>4-p1F<)=hPL{GogK#IBC5J^NP_+=$3@ygj$>&s%mi;jJ?Zx#YM{sfIrmefy&E zw(BaRX&2bd<yQw3F2DDF{YT?<%9mL(pW8Os+r9g7Q1DsiiLgIBiDA)aSNmLJ2>kTk z^WNGy=e9|Bvqzc=XDt?g9n4em=)&&PypH_R@*-*(@kfJNycs^f_PAcGe>L1OxW!0h zmCDKQU(3&T7VD*zg&bbnzGHH!W5xM7mF){Y%IF{Bw>jz}zCutUFz;gQMb;Z0xjNdn zLL%0d-FSDU{Oabc#S#U@o5bA9pZ3iDDlF~Qf24k%(u1d}85fVSM}P7C%9N}!=fSh- zO{q>#%Nhgx!`gQDILT*CT_rH1uGrAyS-aBqK()Y(ucvfFlLJ**o~HEsbUe)tR5<K> zV$QL!eGEV4GP&GO1^7*rj@L}q+IRhdz#V`4gtt!~GDZH_ckLYOwr#R%mNtg}qL>cN z2#{xEbYRIy57JR&;XD?yNqG7NKO;L0h6|q>vfe1z?|-@XNMzC73APz=$BIQ4UES|m zC1jK|RdCwx%PNz5JT5RSnB{Ru=@JKP@7oHAW4F@O<MJZQ`Y+Gl^Yg3~N7xKTg_lKQ z4bgHT%&VBS@5C?l32WHdKVSJ;(|y+!V(bge{4ZpQOn>XR$?}BQ0s)Ox`*+Ov5vIR9 zuSWP}WzAW=`>WPEbKUu`f1os{YoW)^Y>9=_JS%OJ)tx%lUW?{=pmu1I;h`s2P9&{( za3HIF&wHtqr7P#`h}T=P+%tfEK4*+W@RRooM2|-49C-Tg<B{$JC$Gl^Wx^{0*YNKZ zb-hsJz97izc*fRyb?!-CO)=MQz5emRsO9gxY%9qvGyfTKx455ajqUmn)TS?Nw`%Y1 zovY2fesA-t`rQ5XaFyVd1!nCW(+b^wz1R0Tbk@K==u_UsbN80p&y!tmuw><V!G5<} zvl$j~%jO<l+!t>qc;nTsZbQqP-?Pjn{}RkMd|Q~G_afb}lJR3l3fEJ$JBBP;zxqr| zgSAd)vz+caa6vQb`TLX&JeSwVzjBzUzpIL~+HcAMryl#tZL=mVs5S9u4Sq7M>Cq1x z^Y;IihFM`ItD9a0xozRPA{i=PD%$;2)LL<3VeG2f_NhG^cfR^0on1F&&VnTuzO{%- zi!<?jeN**Vp`?^&Zc1u_bE4Ik>C4VG9$+f;TqrtOqq*sbUhrd?8%J*PmrHH^yGSzL zz@7U=son;aP5+|4cE}dRg@hNVIP5mD@n6i~z|XWR*Osm34#&9-6QUvxtS;$!;G+BC z+DmIY$D|F5IBuWqK4Ij1vFEnltfS#Gn<7e;wx+aNERp4CbU!@NTXn;{zx=!lCn{+D zY|-F8`~K_+#<HqMoS7^B95Z?Dv@MW@`OZ=IUy-iIY^G&e2yus<JTImG>)p-3jag?{ zwTc%o72B|G+jFA6Y`gz{k!5ZdzMWTnaMbU%W<~4sC9j)}8{WM1OMJ7y*Wb#+%;{2j zuaS-M`UM`BXY?=lI$u+o@%6$<IV`q|+gH3>`7Tg5uH@>GQ#S<<OL0bSeIR48OeOs- zQ<OxCvQN;=z}C4%54I;W@!yvCY38f1Yq-WeufM@HhBY*q@s$T(Z|*&VPM-BWB`izA zUNar)d2{7Pad^C?*^5@`N&Pdoz5L|<Vy0kJxo23e?+N9j@+ZsG<29T+=e+IOp?-|D z@nhV>Cm+{@hn(kp7AsQ2uERd@xEb??T2_Z^+YfU4ZS=~V@VPLmxy$e3ge6}K4qC1& zI=v>6+58pPp_gBLE4HjN{TrZee^$7#VZ~$K<fAw0KOZu)IX-1A!zsS24yAFmQ5T;S zSe3r1ev#llBb6iP@~fq{<dSxBpHcW_u+-vL)i!|-&H@Kcq_YdG<xdyh@Uvd<lE$|{ zJ{|u>(<cAFS*4+AzDHi=qldYwsan9yx^Ih>r1`UCx+a{tw!l%)O!Xwoih#bD9h-Pw zsS4Jr_?gv|O|X!=w(gC``uUr*Cd~O}xHMR1N8*?8cWbq#drZ~}jdaRCIIZs>tKs?b z(|-=6sXi0sNN4xqV{yIv==hsvXY+`Ej|!Xlx5#}c6TRV6bmZz1mcsIKSFIo6X_}vT zx5{O@_DPgDbbJ%vb?a1Ex5D$%87c?$PPR9`Q&4yIbYo6^+^|D|m!;(8_2|GC3pbda zc6IruqFLE!Y^Cyv^XQ`WuQXR&jumj7^UcdHX3{5(?#;6U#b5Gz6fI~DNx6~#<eK(& zLoet5vsbWsF7iwf5)=^+-Fo}u<%DmWQpD8vx9Gcy)-UGT5)t%W=*5!MDodtU>y~>Y zo!`4Z(!#9g`lLS`JR9DhyJ>mHV0FWb`d_CLI%e#$e`^#H)T6v%g^x;q+j&;LZ)UPu zt=SV?x#OcxHi?<YiE*%e^_<r8M$q`!SsCu|v*vGqFM8P`6;ru&x3kBi4@y}ROFzWF zGp{x{x$EQfbmh-)qr%>8SbT3a-;bcI)gc$lvSmyfe9TQn&oEtkQIkAPq_sz>J$Ze2 znT&<puA_^CSCy|mabjK1x2%k5j_=w%rhZXc+;whJ@|nE7YrKw!m+{I>pYNJ0aw#L2 zS%7aZ=h6tFBR{pPq#4#(CT}|Q;NdlwmJ8`}r~H%E*5+^37H@l5zd)E<YVKo0DdF$i zgN{Y)XtRh8c(n9bo6!^{k$T@%i+<FFa$XW*I=He{^-<skQC~j47aB_}GPPS`7lqaA zFms8B&iT1s_1Li$M@mnuc;I?la!tn4r{{GGb3BvyuC>0j5|&aq%AOhPk>sNDSHFkJ zWnbRpSvf(n>JMB>tP^Xm-I7asr|@D)jAx{7dxBxh8$IhsA@@0%Jg4>f87gkwRpM@C z?RYZ!snWzclYH@K7n2Qt-tvF6>+a;{O>6Rx#}udb{?OI>9I~sdu6%mdyLFQ`o=KEE zu*FTtm+hGC=IZ&Gk*u2CENmLQ>3m}L*|(m4X|yOUSborj$NZ{5^WM_L&42&&7C&AW zxLmU0_siVrs>w^cCZ3Ee$-B&TAoR(GhQ*dQT-w+5*mniV*RNSOvon7EwtJ7bSdI6~ zh))YsnA(3k;m7n7ziV22qrCQP*Ql|3zBFdb(tEry?tUxg91-q5)I9y}wEQ`b6i>>x zCr+7OZLw?~d+3_%SoszAeUu^|^;U#-X)au_JvVydfg7yC=U8Vh_ha!E3YcTCw|d88 z*V$8&sw0@M@a<?<JF(Gdsf52%-?Gd*8`~6bm&OE66l5^hYB|Q^Yr4SWewBjonu*Er zMUp&MB9t5zPkUV6akljF_h+8X(rV(*4DZM_Pyey6`>y+%#~fJ`e@v2Y(>wHX&4%?) zx!uKnFFu@@W;<0-^7;{jAN`V?t}YR?Dp!8^*Wlu|<jh&uR^zU}uSG+e1%B1!sUCGz ztYfm2DUzRW;ws>o-B-OuN;E;p+@Y+?Jn=*J@5eJ&hKZjE+xc$e$!=|nfJ6Q>IwNFX z+qxU8H7}58x^;ijoMkqCwcnp^{5xf_V#EqRzeOJ;UtBIM7S3ZdkM1sM_fAn|n4?(q z<jVGd32XdzY!aEV?{ySsm9$8LR+3|+ZWwcV;j=pppZT0h<qWlc-#Sv6cqI2#=;4~) zn`aW+GiM0QnPZl$6X4jOYH>vCG24nuxt0vqOtQW;8O{;?lw7&%UBZr~US-cFb=pQO znVUWTUyPt_<$_ypAI(XKINA}dpulD@q0dT3WOsd9&#LqfI_6IdkJ|RTnQvvuSe|%h zt@rA`g>GLSoML^`c>3zR`@s`DC(138h^U$^x#Gatw}NVOOoIxw7rqKQndQrIh@&^$ z$AG7T!$M@zRk8Ulwp-VByjJpPo;itiUeq#P6^|WS692yS8hNK2U!wc%#}&C;uRXK3 zX;*SS>@Rk`)pS?&#XXKi-J60sQ&)cp3<{j&)?kzq<RGo_x<AVQ&i><S6@rp6^LJ>l zZ;^jtBpiIpcG~JQrd!TGb(2{a=%W9W<&LSwHSRx_1$$Y~KWkXOyj|{y>dr+s!}f^2 z=C=~|<xI;<T4??|Zj#NT@cx8jEVk40jz_GKVqSei=h*f$G2Xvs?DII7Xx{TDaOr|Q zJ=*gs_bETV>S^>@M<yYGWm8zFTE=FPHE#=3Y8-<zrb-IbZ?d`dHB?eLDa!cXcekH= z6rOKLp8e#JgJQc#uTNrU-KT?m<-4MUUzo*kY<7{X+q+1{UDfBWpkYF?&hzKzFWmgt zGuu^-GczegbxK{D#KpOs2`LXb)4HbhRGkoKpWw5WX@11*-?o2t=t|#CStp^(E`NPJ zn`!0BT5(R^-nNgA+Jf79J$^ZT{hC+r_Wc24v-0h}#OQ;Q+Rem%pM9aC#`@~t*0Q}* z`;0ghzpcF2CuPVqA>zQ<=tYm*ZKB-1_C{Im^PaYy=~8%PqL+DVuITBA%Nj?S@01=m z*k!&#+$vzxs@CgD3M`S=0@>8fx+X<3o#EYT6LTs;<H?5Qx7FvASX*rpW&eNbPT`A5 zKCgdl<@egJeDAJYt7~dA^Zn#&>mxG{U1Zs2xyRd2D>N}%Q_}6=p;g-Rw2X`Lf;eZg z2e2+%aU;59p6UWW7PUo}A8AHvHuyf}UDA0iU|Og{zRmL(ug7;R<R++Oe&5r!H*;Rb z8m^z|hFS$rmM<umxgUM=OZkmY-=3XW`QY%E#@|yDZdJ~*G&TM+=bBP|-TXDj<ydbT z=v!SVUw7on`rY#@xX!L*S}`NhX_sbtkwwn`O$JWkj`uih+jS={x@oGh=7pfCkId2A zt(M#!&(?`d;VP1pZmv4+xaUS~V$=GURR^~I@p|;$%;^!!UlFO@KN%dqoYT5H<+AED z=1G4%mrQ!8_{7LXz~SSqM<E%j8ifz??=5dh{=s}Xu5w0zr&ZtMfTdGid#~ig+ob=U z9$UIc;~ZD4LzjWZ7Ut5!N0qJ@W*PoAZRv_^+I^uoVc9At&G4$&5V^@Jrrw(m9L||% z&e6GN<^t*SF>5EQw(OsE<lU0M!_OJS`LBj^7VBP)>248giVOFXU1GkYLiCgWQn@)y z7aQ0tEGiE5$wwTt5J_k3@Bb7n#Nf?#eJSIH_9ZN)FFl;JZk#jDTNwSa?2XZe?JNET zu{&@*b$s5^_%`O1#KyLJjH@~ig<t<)oc#0J#Yr41J@eaB7U#de`tFfYt-`!#CLa@` zpYK?amZbL0$b|Xm>c&9Rv;1#Go8P5>IB@qzYMz}zzlSGdR>{lQdoMVwFK+etP?mbd zly6NKpGk4=8{K}1Lyo6BB-@^ybzgYzR>0!(uf<jwYb?I~F*wm~V#=#RZ`lVbU50nM zA52YgE&A}aX!4m(z7JOO%8qLm?(14E!C%Lc?CyE)N>Eg$vk6a7gw#@vqdArS9Q6yC z9_@Occza2!U*J(Eja$|^reEq<@BC3S{+w~BcVjS1hGJLB+bmO`<I`dT&Zxc-TzBn& z%aUu>j$Ahm9ha1l7p)ELY_6?7Xl=vrOowaB-1!L)=9+!Veq{1n(`8oVET0~|<ewrO zUmqTixzV~iMJ)gNy62A#KZh?rE!yf6yEJZ3V`B32_Jl1bW$vu;<GA|F-ta=seh%Z! zLVX{;f6%T{n)1P^bwTh8ZbsAjI;-QEy;uG$UewArcjY_*?vjl?GKc#&h(7jOuv+$s zW%0pE#@73MB321;p=Jio@^|jq7CaLc_;|TGn7PB_IoG0h(?30$#C&L;$xS!A8Sd&5 zkz8}`8=i^Rxof_LS0qBD<hEbWyt#f~Vl*l<BIhdJd$z!dVcWV3S6}@0K3%mS<Lv&z z<%&1st4|1A=9c*7w074u@6EGTm#_Mf!WJm-dNR|cXa-r9zsDzu-QqUdzTTR_pg``Y z$NaRass-FX4y@ms?qHXxb*jw!dUN6iXZu}oJC0RU-TvTUvG`g+o0s+5_%;@P2@&)1 zP;1BMn>09rXNlfs+iE=N@y3*cc{|x&F}LMD&APGbbcymll`Z<#9}{0qXqDs@aC%s> z{hh=Nf#0g;Tt{xtnzgD{c}<hd-xP82^Dny{MB`fTU7vm7;l6|07yfY$4^Xjl>%1T* z;dEb;L74G=2uHz2^=m8Q%6c|<X+A5N?q<8QFWcr@52NPC%AoJ5T{~=jR#s2o?i178 z_f!3%jFerh^@YaP<f7HbXZW<-4sls`FtmN9tNfCKC(;TTZBKGaipXyD@i^GrBJpm* zROacEn!;Qa^^`pAgFbBSTcY<sxav2XYr?e{#e4&s=CzW?*C*@N*t|KCT%p)>T4T;0 z&z=ogZI?ZS=W!T3HZ0h5R*Cg<yV|}5E7bWuh8M&gI&hpVbEWkEw(uCOo74X7O`Lkv zs^Vp{kCBI4xWSQ&%S>55L}pgKu~E%lxMP!MyI)bv<+6ES_AKjF%4=KNcwyT`E3rAz z1(&v|I-2S1kDV5??ci-rmOn3+Noopja*<s!k0r}#y|B`}kG3|2XRfYbPl(rNNIBA3 z{AG9Aic_t#*KA;ZYn2_e*Wktf?@gx)la1%z;(xG0@6O?^=AR@!oKAnT`NRAYk!R7r zSG8nR&z~_jKp;V&zTgqx<lDJ-?abyLT+yUAXU|!cl%}>mmC71P$MqAOrB1}Q-1eI# z!kjq0L(iY-_1gS3iS<o$gVru~;MwJUnbY_|xuTy)<9ojVrw6lm)q75dUDVT8Fmv=h z6U;Jgo4Cf5ScWx^Z!FZ^ktc3)gF)V}<4IxfSL@)oz-b4JrVIV9)A+I@m^oguM)S}P z$=9Yo<kN2I{GD^8mq|(F==U9K3_b<RZ(Z?P`S<<9m#idP67R|$u=spXd#YjXo3loY z%xrDK3w+CV{tTSb^G)f7&h4o$8QZ*A8}9zzF0}E5_T-4;&c~Ju?b6G67GkifZ{O<K zP1Agz<%LOgENBaJI`n^Un%4HUtxfX_`bvy$2byt+iXBMY;Lwo!eorv_o|xY||0WzM zk6w~~E-1vsVP%rWA4b7r(-qA6rp>onx<gJ&nD5BTnd*za&b*|@D3Dw*!%cRkjNrLx zCPe{8f}CMS0lX?qXRO0+va6+UDTr*%*k}CG>?-?-M`<z!wKM9uraYQfUdXU=mlxNE zc}=SiD^_|>G7F4ox^jCxtCXpk%O#;r(;eUPH`F_e$r@fXHOo4<a(mKS$&`2QldT_4 z@0STzieI_C@YAxR4-|bjw`<HPS|VyPtEfTrO_Nis*n{;)bVUt)7p4Yh9%Y(szwQX{ zsk1&CLY6VFT>YuketuK2cFqKDz0$UGZ3%XpB9FaU{i1s3$=!2R-n`ztwJ<8p>vUxw z<GJ>)m*=xfwNLk-?Hv66T=mcB(>K4r{F48-ysw%sLWOVTma<7o@eS!8mj6Diz18H| z9~RytNfVY_lv?SXcr@0-u+7m<wz~hVUCpiYrDy&xn;V|@yL@8RYv*R!`TQK0&1Jt% z;%{8zBJJn4m@mUPQ^$I#S@Eu}3G)`beplJE;toT{?J_O4RtD|j_T<n+=^&NIZzo1} zhMl>#>3OZ#ve|5UegWKPpWJull+IDUut>mpg<;ljws+0$-9INK<tWL<<+Aupd2N_F z@ow*f1+ONj`PbUrdoIk&ww7_u8H20JyeCSzOI|en)B2|zX=3{P*iC+3g{J@Z=|M}Q zD)PkbC#Nqw)^sj>%LkF><6mAKcqqDFPd9DFcN2vPE3@x^@b+}enOeWi_TMYfONXqh zjOVu=zIwRS!fv`)gjJ7B_tFn{3wjT!DC^X|tK!ROoL~0t=Esu}3Oj`VrQVm*zGL0k zDfxOo=jZjw@^7E+a7v4`eOIm_&|bgeHQRF@|9i2M-cI~?Ag9}K=WICvp;=3KOdQP> za*L-WOuzr%Lu%$(_hq{_TP-ZpQqF$ZnwqcMGUMa^dW9s5IcHgC?R#x;YWfis-v@CP zZCBjyd%qA9-~C`;oc&vu`=37Qi81fUE$zPNT$cE3g>l*&wFaw4KHHz?Fx_?ctK`mf zU^J@c=CO&^Wn#73?{g%}G3ZCm!nVK98rA2l-hXz&sq3@z*Pc%~a<${z!aItlb9voL zH4bhvTxjpr`&9P3Wx&-X=HW{$50+Q1d&BqXyoE?fvC>+@y4A(67`-1qdZlq?*FU|U zo~Od|?&!rTC9FxjlJM~kWA(oLBYu)Tb|(*qDPBGs8l&#$VJa!+;g&2s#rTN`!?iQ# zH8PmBlergV@N~({-sth;w^2#^0dA`^0`omPF60#4tv%hx{c3@k!7I;KqVuOk*b6y7 zJoIPoziZnhS_>9ixfXH$dt<h%N9o_WI5wYVJ%vk=Qx+M!ckMl4u<Mz5*__+Ef8KBi zw)vCyi|;_d)ZI}PU5^e&tGaORcgxebuO;!|@IfIJXC7;%im8wIUPMVPk(_2c(_^te zi%0x%p_FSI_1+(wWWa97BNTln#_>w%T<sQ)rJIh$Tk<pd{?YMz@kKD4A=qBPzD@n* zipuHQCXY9Wzu0;4`=;Z5Csh<9mWcMWKlyfl6YFKh%Fv!dd#CjKEb}ieJiJ0`qrzhE zz?m$6X6xu*t@H?0Xirl=dHlDR%&OU;^Hp~0<aoSMlRR;)+%EK2X7e>J*#w==d2J5) zv(1<mNgFooIHWxNuxV2g%e@~zx3k>sS)!P-Y1(AFnXD}@vmfU;9m=_J(adRm-e3P? z2Yq`Kp9zOZ?DKy3Z%=ao_v6WzUM0V(yfkB>OU_P)|DQP&G|dBB&z$1oS=rEGJ#T+; z)4J#jGLrwh!|(Q{)qjiRug>_&DWGlq@tWZ4oR}{MB^bK*wmwY#s~xmRH7Z|dP3RZa z59NNjO8?%7wJ7c1^M9RH<>g%spQX=7Zw=$^WlleAr1LU+v4Cf_REvDf&tp9D4Yx8) z4?R(GQ20~7^@HcFgW7Qm-P+Pv*njHGP*FMUe>&_{*~y+~mbPt4`672_-{<~hQM$>y z;r2`>yHb&@t=l9UTJLS+*5Fcq^r2qSa6&Zq1Nr5LnDs4^<_6bA|4y23Xd=vATlDI~ zbE~_7KC2CHJng)EUM{)W?bcMk8FR{y-E*5KS)0<}KJ)X;Gg~Lyte<l0@20@>m*m`K z<{o+Zpm*i{;GJ&+d^3+nUi_6_Wz(WMr$qIb_}$)#ExVO{OeP6iJIO5+PZ5;c9id&; z^x{c;)IXufCxW5>eVL?;QZgk<+V$Cf?AiNwnv|k?wYyN}%cAf9H_E-0o`2aR<DI_5 zv8GpMCw8@3+RQweb}Z~h=B{aLKKV5q{C)iz+t$Fwf7Og4k<)er=X|-hyEmzV+t<%) zLD~&(@tY^qvbTD8zfblGSZ39KTwr>C>6ebCUY_N#eo-C=vl`h7?n!ZcxsfDye0{3+ zOrNTN*%q^+mA*Dcmf9PAO3F{DSvn_XNtB1gv1`pU<{mQN^ThU=iF5;7?*oTMPsUR( z6!&ak+<4(0Tfu_j?Gt<)w0Qh{Uv@D5w)op^yWm4);%uLn!g_N|mZ(0L{>RTUW5+L^ zz;BbjsP@}AZ}~g@z0M~4(l=I`H?L0-XRFk6_gmiC&hdi(SJ^zT*c+*i^7cnQv);%x zN>b!lHT5L_@~7SmDf9fhmZ(qERa_7~!C=<RD1(ZSw!&BD%M46{JpJviusCdRo*8gB zt*;>4^~zng6UDOWvl@>?E$WFqn9Seq<Rhh(KB?gdqjG~vzrs_~Eps+lb1Nm8YqfK} zaP-hrKN%)^!a>J6efoywwkI8yF(giCN->Qr>B{FaO^Cgr<k)!rg4ssHMZXv>Ouwg9 zy_wC8OSXJXn`w*h|A_L8<-CcFm)3RfGvU0I82#n9+Hp^I13w>2uaY32_o6b{RVSxj z?cUa6^J&}6jPx_F6;drdCp`!a3{^^3e$^Uqlkv=J1M3%$y_LIlUVRD*k#Ua}FiFlg zl-OqRH05ozvt`7zUGa|lRK;GtHx26P$XOd5%+aW3T&9_#;psVj>r>(R?^^o5b8S?f z+8&p;b*A>K`I)WfJSDnr8ouoH+7%@DZ>Gtqr2*@6<UP8=PROq@&|Ak=xa`Lz(H9bL zI3kW01i9Pk6kB$zGVbYlr6$L?zFhs*y@{)IZFn6M=RfW87F;r?u2-JBNaWZQ=UEC- zUfUQh)~`v-6Nq=&&3-^(8@E%V?xa03%dI}Gyzy?ef#Cep)76zjuC7iFUb`=$E3@}c zx2gEjQ#Ll@ujQrk95$|LOMN2T(AY5TB;&D;Q^#-gC{BN}QOsR*UzyCU)Wq+Nm2VY` zU8*eJo^3PSd)U)jf`#|sZM_v`ePw(0KbhGOEflUYvxjl>wai}Dgym&C2UnIj{m^;O zwx*?et|oKguRzK70s+bl{T!vsBokAa9&Nq2VfMR)r=KyZGBNF1b1kzaV5*v+yb443 zN5T6to+^xwyT$((eULFedWth;=TweEK5^~0wwyEc-qE$gwP90@!-Cy~Op7Ihc@8Dn zgc)x+?eepH!@GLk(_#5tJ#W~zPSTk4J)dK-z4m3+P7x1hKk1FFN~gL0-&Ho{y8Ymn zrw8Nrimwm0PhA*fzkH#+%DrGQUrV_Trr<4Ixe+XyYg8W0Z>pJ`kP}!r{h;F8Gwc$J zEoQ2ps}ruA;TC+d-zn=yB6I(x9A&p3ub6-NeO4E2(>%h%I!o5Gt7o#AL{8xUvwz=m zr=2$PY<Q4byZ%w6-mg7E&5L!u-H0;Q@)LXiKy~>>BQ77UnTChhR5uFq>b%Tb`f`or zr?V_u-Yw8on9-D!9_xB?R_p<>xf7XA?P%-_@0`!PD9JS6`lPR_?So|}eInS44}E24 zyIHLBWpmQ3Hc9z_+s`FAe^h>mk>K_#t!xi4kkM!@(CIkvL!(;Gecwjg=$lH6r{$UL z)DQ1)5IMd=VTR}8gKOX4PKdtexM%x*g(Fq_(!6v&yjvv5RvB0G!)RjUkIybDVs*w_ zUW63>d;Cg@;rLc5oddfBHYlFp*RxsBa&bY6vRIA9LypB~<YfHjDm<Qkf!XKxju#c? zo1?0E@{YU+R-CP}C5qKZ_i)tW1xqDQy1!j5o^{A;>1%-mS&z5(Kd*d{b7p~DiL`o< z;KWO3bFNQ1AtYzYqxnRo@8rCFekM)K71tk`UXm%6TB7XEA!2;mNI<epuP1x4)C7lJ z5*IRinJfMq>$|x%L`G#?^D_-}Sjlnyo{4ml`;U;)uXX9!{R?`(T-vlEf6e4o?@lea z>!P#d;sl;_1#y*g*%DWhR~}QjmB6%AL}Rjhs>mIoNrD{nuLN;jb-T_Jw`kka=y;{; z7Pl7M(wa7B?aB<ZvwGUB(e7&(<jZ?T`#HVZ<@Z87H1tB`bM260Ug9P#SER0aEd8(c zTr=)v_#?f!+8#?Y7o5-!Wixunk+5D-d#=|6b?*NYRGljvBsiKs+fP}UqEw>l$YNW{ z;I?5ZODI2!=5banj-Xafj<zeS&+W{-v>@Cg>idI-zxdw@?LYkZdyLcRe;oXCF34@M ziw+A|FvXKG*V1X7;o=+ChN@g1`xxSy#GD$OI0XM2X#|BYUiQM}^~XEGyY~reF1)h) zwo1e)*BqhVDH~2Xm2s)9&{|ljyWq>Cy*&$95*j+$`n1#jOcXg9ESWxoX&vX8Q?egq z4eBoIbFuBcy>pkO!|8&`c+V+}n&SIH{`zdMtmhACJ9lylQ?$mb0GsTfRS~VfS1-P> z)mAx&KfI~)^Cw|V(G@pqJuSFdd;h5KyK?_i=|06L;W|P5XKZi2UTCJbr|6r^8k<Ss z71M)Gd^F29YCeAEPtfDootK{NK9$ax_{a5YVyC=$M(vvf8x`pvFZb{NDiiV3J#%t% z%J06lKlOi#mrs6a$t|9BC(*Vej;}S3`OcKRZPr`#CTITIaOFwBss~${*eh}pF9iA= z;9oxX&dg$S8T+e-zc>^4f|5DiW0Vgr;5-#qs1On<x<z2;dp^dL=`Y@vI*5xN{^9uK zk<J6A^Yd0uZ4PXFnsL$K*KyUus}{(%9SnL9xbf8wme$1n^ary~sJHoibWWZq!(mVo z;<9OR`;wRlQK708JGP2x{Q9gp&x*r?_5Ma7i73^D2|sSKKJi+YF4fATd$E5~d*X*0 z%}MJLRR6R)3ve&d&G3#|!lT^4A>b0|93|A);r>I&@rG54;;D-0M<2O+Q;r<@qQEh$ z@$o!8KUN=IqZ_9q>>n*SHa+F%8rPM(s`gku<9`#sR7;W}V#`_wmyGc1ceXM+#4w$! z*!A|vtoRL<(L1~tSj>*{pAvd6q@a7#qs7CA*`(bzp3PIln{`%Iv%=+q8wZr<Jzd`M z@g&Q3)rqX1nsUFcmVCTQOmyo?=FHtfYXg`Lc1LJ`e`lv$wfS3fS8EuTol;ev$?6}z z@rF<Qj_G{=(4SrN<^Q)`8`)f++_@?;wL##^nHfED1~(rSSubtvNIQ1v__94gVqC|J zT(Sb$ik2K&d-l_uO}eG7zQG<(V_)zH95DJNcm3u%;V*K5k<GV~3-&l#^(Pz>m6~Yn zv+4HE73c5%KIwkq;g^UmL7A@V_sw&!$Sh#I_vHGSG~WLGjeH`-aw@5YNz*2$F1zd1 z@tez8MSOch!@hSOKX|9|RQW5IcI`ZtrkuRw%Z|o|pIIuNrt9~c^d5OuE?s}NSaH^6 zgBpWhx*gp{c^i_W7V#Y2bNXk2;mOriXD&s(Yi(*TE~u~IdN3n}PjSJmZ0^HyyIl^i zx0!h`t7M}KBa;eO=Yy@!{AWH0+H6>O%usD#_RS6XJbR|~q{ZinZJBUJEA8-frp#kK z7iSCH7HBs$+WP-M+`|OD8J>J{D{f|-YMrHVTzO@dp#I|MmURzQ+4jsTxT$gOOgnqb zW#xIfleaJX$WRh7!zOq|f_BPwvDb^gCw0m)u4mn9QFONEM$OC1OzanKy6=1`#J$L> zdAgH%=l+dc!gjZ>AG|Gd{DSh0NaNOKr-gIAd{tj5Q^M4h`(<XpCx?eyGL5&&$ecU5 zYgQ41sit}Z%Zt-<9?LgBkyu*)&1{ET-^vw!8W+CA>rPwxg>8Pm@{MEV5xu4%9IF%# zJe6x{W$F`ract>z6S+puxB8pxyn4I5*J!yd2yot%C@IkqIB`bqtzR;t(<gIYiK}V} zaq3;cZd7qwaaN3hVy;tasOqX|r(L}TYE92wD3pjbv#eMeJU3SCc57?r-4`>&RwylE zRo1LKv1hJ@@~kYYTQO=E++Uh}<&e0xVSRy9K<n1~kFq2DS*E%5t<>7+pX4!>YqAb! z=MIJDTAq-lNrlENRtCItB=i|hmnGO4^*nskXE=xFYg&foiSJ8Yw{&RlR-SZ2)A1zh z+fLr~Q%{PY?R31`rSa>YXPHIiq8?p=es=Xkg?qy0G48*)<m<VTFxA^m^8O9&#nK;j zOHH0vhMN6Y9rXBPg@K*CVDqP{aPDQB-9wBjQX*B)81Bura||<eipi?Yaa$y)Toaa? zeyZ)Ue)XyH$Avl{r!eHK(-CT&)7DqxvO#ap<d6LtC9V<^U;6L9@cr6n5#7)mg>f?J zg5{su_g&bO`KjctW(H5w^siDjv#*%D|NS6dGV=lFkG;G;v-qs}vfnXRY0Z9mwf%32 z?TzHPde3^5X!b6Dja3yb55<`EMK4-T7Ib(g=)iw9E_a&9*=39>ZZ9$;n_UxpR@|4V zk$o?1ayQz{^!@ZM<0o&z>%?+GH#&2!oKcxEp;L8T-rtn-0qzYAUlwor%HPEN#*slv zznzt{eC^Y7B}H!%H->QCxA<dfuV#Gvc-@~>47&=J$gC0gBtNakd2_{rDbuFrDj(n$ z-JjF1dSbClSHA3``tywGsVf353C<MG5#*Z@8(7@9C2IM0x2s2z7U(s$30Nsw?QXo2 z$kh3odFn;iy!)I}|F2~z7ktsW@{0R~2nB}?s!Jl4{kH0{XX2K+n<n(l>s$MxT9#>2 z?9Mmzc{se5FTJtvTdAv)wd)J{!o9i0iGKx4_nR^rEm@T{=i@^OQTu?_jT0+s_Hu6a zIwNg&QoA-_p-I?}e1$bV$5%Ffyja4%W#ftN;JZ=xgZ~)p*Z8DZz3@^p??>1Fnk7%w z_0{uMPF(gaL{BJE`clT#gVvt0f2FtW`qFvzo!p``20s*J#AmI`S|jxOYRM~Mo!Z@t z@;y`J%qF-7aLa1X$evOn{zZdbB`zlQCu_^L)Jiwjjar7q*@-K;cdcKfF4u90IagjH zHAIu6d(xV^AD=!s@<g}E9Ndxg!(q+A&<iRvrS)X|o9;?%?&+Q0WW3H;ziIv9Q{|iI zedK=lIDxz6;rUxUGnGRW{_fW6{<m<BO*a4k#_02ZKlYf!vV>*$G<RmKUnXwdxXv-H zuePvj9>Xm4%5x^qjWZM5ezNZ}SZ{H>r{(@-4!ukjLGPFebH7gLpJd|eqxenX=BL}M zm<$#vvG18=x3H&O$}4WcbdPmi(;T*VZ&g|GN#mWKcmL_LPeTsQZrCaB6(=2J!ahUh zlb6z$onDXAK7ZZyzrx`{+(lh&;UwYzW-~lW)H)r@)aRv{`dQ}Z)kTP(cj5eBcsbTO zw#fRW>oWapA^WxOn~tAg5n$ZjF0`s4;Dp<f%AlMthNpCWJsvD)NLnrMzN10$Z*->W z&Ook<bJ=h9c`7k$I-7nj^H6kRl5lG3Vqi;N$kfTjX(cCd%0~5j`S06m|BE;_>v-yj ztu6aj9(2v+&Vxy<KTobpx4n~XS;6*!?OXYm9@D=Y)qlC&*K8|#aIeSHT%;_@vHY)J zsPxZCOH`dsT|fOQH@mv;(#$rF2e)phA9LgjcG&*yite$4Vxf9fyRJrZ|72#5?cVUP zz)eAZ2VckG8*cKcA70D<W_wf=(R=4%_3BR?A_DicCf9xF{4u$}FvzDUV9Koh(QFAd z|DC3F)K4<xnCbq?tXkl|lK)JBj+T&2&6(mA{Za{K_a`K)vQ+N2ITW%hP(x8QQ8Qvo zNZphApQ6Wiop=%$Y|S+P!S)AXfue^zKRutnX+qn9xF=c6{=2FsoN#;B=lpc*87<NC znLiJ!?<j3=SNVS^L)e-xBYb&y#ahdZ!yQi>AEZ5rJjc!SjFUf|M_zIfd(FMBf-^or z{EIefaHSp3tC-lC{Kd??O3Bnb;MMV(T#JQar<ZO@&6{#|6}w1dpyP|nhH3^UPkb`q z(?7trK;pnEn|Ghr9W4BRznA?>E^}RGK(S$|qLcap>3>Z7oAXZTUg{7zBRoSeWVu$W zjo}}jr6FrSw<JY8eaV)y_F_WThLsaNXU;!Tce`_*pcfBg`F4jdXLjl^Xz|?*RFZh~ zXwuSG>VJjgZk$O<c6JFo_wvYr9lSOni=6eBpYjag`7`14WAB&$PGwHxIN)!T-_-iq z)i1@FD{8{rJEaq+&71t;@)?=9^@iv6{#(Mn+S>c}pVGfgD)n{WS=BBEH3@w`mer*6 zGB--{d(+cpHp>=qYx$Kw@wjUFJMiT6guqot-(;4oJ22Z^crL?bf%E_KU8IY98=r)y z@Y}3>rkHdi?>h61ulw&z{n~y0xz4p|s@XkTudMtKuf$k$b(-R}3eNnfmG`GAc<tD$ zI{%kh0pr=AH|@;@6;}L=8+bZ4u46a)m#U}2DQ}z_R`XF+@x`rkc5~V`ROQTCR!}HY zTl69Q%DqdQRHrCzPcc*85P6~ctLvnP`y!_LZmF4|`1tCyBNh+dyo=L2&!A(WoBAN~ zkA&uqnf6Dm_(~ctTQMxiG_jbu)~Hp`M8~vkdPmFDYogabbnjF)U^vR-)S4Bcy;?c+ zplrvXmkUI*LKR(vd?b|0j=W6H`{Ly!eyE)_P)9%XsYd$7sT+mP6<?O&5%5@cS>RNO z|LWj(Z@Ug@t!B6w$!oYhK+sEQ&!I=Za~Xs71}@uhrf9CJ#G><8jE?S$xvH!AZShXM zmJM9NJ4AOCSpA>4*5mbpl-%3j_Hm{pFZI?m%{lWTc7k_RsOE&7(W|0fG0*Z|#bR^p zh>Bvru|lSP?~)ns4+#1?$Y=ALES$X0gNvt)yU3yF&=Rf6uI)?SZdDX5+0DZ$qjX{l z8_$yLIfpk*4wb0*ByvLMe|^*a9qVJ8eRd@s4?cK*?}OKkmj8k;Zeg}itBmS){GpOp zI(OcBg@rCo8Ve6Sd){XI!dS8`XU`XAUrW_Thd*jtO4UYlTwPPc5dXO*(ywvGbd@Zh zjeC~wV=Vua#iGXgCHvO}e|F^`Gctote&l?3@i2$u8GX~IDKF1R+;ceW^v3+@cQ={I zKRC9<J-RT#$f)W;qe#~b$Hr+>H(QoF%zLpQt2H`I;KVYol)_tl|5h>Bp4v90QK9>p zWWrgaoOugOXYs$Te(~gK@Px>&g|kDKCpG?^Ait`{hTTE^;7!GeCk}5|r64-tmEQx_ zNnQC(&xF0#Gzkj_Z++eL`yXTTR9ovrk(cg*UOyL3|C&;GNhtrn|MFcw8_Ku7%6KMf zxvU|gxH;Q%#h<@1>Oy;?EQ<Xm9{>H|gUro`Ol3dKi{=$i>SZek3;)y6c_luN=X}28 z<AW{H4hOaeEB#$|GUl>q*xMtA-ll|YJ`kbpW0DzprtV&;O`^p*y-zEh5>BtmuoV88 z5q#r>;F7AShkQ$GD<*E-u*YP3T%~lhTX9u|r)kgi6;4+Jcg+zjyS4fKfs9}CHl!*U zODJ_{HtUwHdd_nrT5Oj1F0Qw$OZEIJ7Q|jywuB*L7oYhB38OeR7Mm>=kzT*K7aMs7 z?92bvl$pZj+^Z#ZtJih5o3nZI?Z(M_%md5{AMf0-rf*THk)EuabN9mq=XLGor*~%6 zO8BT($*s}kZ2Y2_Yss9UwNqX*<nP5D?yM1tDW+d<O)4(ib-Lump192xtP6k7%2@JJ zJ$$QD&j%ixHHRnVTwNQ~_QXSFiy8YH=Ji##c3CAdZ&^R7#)a$t#tRiadxZ8kZ8|Ql zD3_Y{fOS*Q4o1zHmZCLtW@soVya*5a7*s8J#CYQ*p-_>g%&36U84-H&&tmvLCT#H) zFmsicYkn-Q`$>VZqx(6FO6IN4mr|`;-gsNYGiP-AGBcmq<9l|;{DZHP41Yw<V}4L; z7iA@)X`8Cn{`^?Cq3Oq|&$P291O!cQ6nwih@PYe^yf?R2Wo^AB`)Sh#E+1)Uc@3qu zMR9t|Z)dM+JXh7<mN%c_kVC~I@tf%^ywV{-hf*%_KH_sOkvTk@`JCs4%MY(t-Z<}T zICuBSzNg>M6j{vl`PA4iKASg%Ws93*myFG~32WvF9I&rhv1M<>8Y#K<uU7?LcK(>J z6t~Li^Sk$cg{Dl>>J#d{oZP<e=qTOr=#1gP#eIz85)BN}$9!yrlBaX2Fjd@1l>L~@ zyD30H^Hn<MYgQ?T9R{Y~|CC>wx$UgR?afWEt-tSH=rZ4a@u&DHS&Nd*>zpeeE&AH# zBEwk|y`Jl$lw8<1t*-T#B92r($-MDp|8|MfO&{2&6zJHTyzy_%0w+(Y$!T)}KRHcg z)NyIra>+r*W66pqDHg6vb{%|>H2LG#ijz&EGEO#&H`G5k(R1*KTAH$kp3rAAkCXk9 z+#Ng2)Bgp{mFE+;^f|Kspk|iznWLJsUKFz`%O7iXU2|Z9sj5I?y1)+|sRbri=9pYO z`A$V5_;K(mUWuPAXLNNgZtOVhb|hgrTMx%E|3p@^$GU9Q)jjUITh@p%WiUQ@y~X#a zrNz!E8X85X6wBut$Mf-?a|*a}#>BkUMBw0qlLmK0^WWIDP6(ZJLg8$hlJs-|25G_5 zd)!jC^xb^9_t%bTvqdyFT~tUj-Q{(eIkhfgb=$t*Zo7N7%-r$eOTm}SL+xe}zkDsW z2Yhv%yzJF7XW5(6TJ(#Wm`V=hy4?^m)m{3j;AO7h`y}nn)yE$Rv;R8DXz?ppEm}+J zVeeOGPM1i|T80xQmv=6<*%tTrdsxYJ+rr)Z{OTSr+88<aV#k!0s)J%)Tnof}6yC8d z%V+k}G#7f*vhEoxU);h?H4_(Jvh(Uztvb8=gl*CqSJ{1B(_GqhIxksSnsRDvJ2i`a zR*JqNpM1_g`I5gcnyhbrevm4%d~;C8*T;-AT=Y7O0%cm%Dz+{=@^Nvmw6EdZKYMO@ z+|}b<=F4Lq{rcVnn{~`<6M|<PX=2&1^`}P5lu33!KlAP2SZDI#+QoUj@zNSq1$U&P zK5kiP5Yi$t+5V&C!r2EKN<<P{OY{QgwO-?oz2?GPevnP^bi_lg$`F~fDP?uVUXRrh zZYp27z<E8CLsC!Q)5MuWt3}1d#nGH`$vjDuU8yE4(`IzpKd_G#Em|POweeo<YG-5B z88vo?T6<spiRAQ_vkvLlQ9D~MX@yeV<bQK69!M0qaWnS#503|e-<F<XJfinR?cmMX z(j04fHS(vNK4LLvuIHT3J7-MV=lgA!CDRN~SKr=%?6yAzy}SBm%E_E$nz}?G^q|e} z%uC&zcYi0?ug(_wkdW^!yz{3nUuM7bJqeYK+QE*MYr~hd{;F*>Vfi^TXzg2pnWk!U zW*w0IX6JnRoqOubg(X{FRyF4wuKIUn?e(r&-Gh7jW{1RX>`~euEZtlxx_TQsfA?lC zAI=rEb9KBVcj>)v(RB@2c9`t}%RSXFi;RVL1!g#@^|DEYYd@<AR-UzP(uCf$R@Wyx zmt1a}vfy&U*Q1XmIVIcXG*mqbT<#g$k)RtO>b>|uVZp)F;^khES<IeO+*KCt(A4^7 z5_U{n!1WPl!G=i{8;>^SONU0ioTVl9<5)odHJ_Tuf}UGvZg}3$iVFVPDz(D??h%z+ zuiqtwE!iNm>BVoZgyx9v2b?{1WaGmYT3bw7>1vxTw?&4LG2VNL>Z-ZxTqhj45a{Pq zSN5HU)rfD}(hob!H5-2VD2Dj0JmJ_>EPVC)o*XS-mXE=0k@HKg$>*Gz*Q%D>7TUH) zbIEdsO5UmijCPeVMT(M_)-sA*$u*ylB-iis;Y#|liH6=wy;b%F8u-N4whMbR?0H!* z!8o!szS-Ju?e)0qB9@{^>8Zb#JSa3aKcU#)b;9l9+N1@mu5YS&+4M8{t=pD^seDVt zRtvg5p6ha=s4K4FgLH_9`1;lt0tOHN%F2aViOhS@9?$XcmrBp<nOEMN7B)Vj>NGWC zx)i5n`U=)xbKDP#z2Fi)d4oBjq=my(?MPOR#vI)R1!rD;d8jtEYr^Lf^RzB~-}EXi zVpZJV<kBEF!Qj}_8}eFT71&PO$JJ@7K4<Hj_m&yKTSc}h`W)ZuDJ!qFW`^6M+3VOW zX8e+_ZswnUd|IEK#3}utLy9l`cg_6x+-HVt@|4^>A<?j`ol{y`+<V;>Ijs!4SgyUv z{MHe;av`6l{OamnkAG_1mAnhPVr5<!`7UwZ&oa||qHTz<-O2>ky{)HimxlDM(@&1r zEqLggsA?07!o@@9+CB=bZ9T=*qqe8a{h_aqpk~i2Ge4Duew7g^A7TWr6r73SP?`|J z=D5U!wO{yExYYIto6skdxtW^yR_01RF})+krhe1u>TCHmo;Ds)Dvl4iOu1Qas)SnD zDjYa-TUC%lB#7s&*RGBibtx_9b7z*slnRTB3nl&)lKioRXZ0(A^p2!IXRK1Scl}LR zUl+eG%;|9^<7V*%VJ}5Q=f9qGtXIAI-2#)xDvlGU|L{>R(*3sTZ`WDgWw&JovTCnQ zG*g)U;(gEcpFNY7ynN*S|Gmzsk5jo~?=0G<-G8{eS}S(<^70B^{-f&;W$~vMoUw|K zFuKX{FCfIxW8y;FnAz>u+!iqfDttb{mlWS7-@tB{+siHbypMB<$VE?qP=@f1oJW6e zEHyhH`bS%8>c!fezmJ>Os9ku@=H=OJtm>A2{vKBsOYZj%es*#TUzTLO7Wf-|DEYzl zd9D(#oO>hY%f{c-`&}^Ujplt8<zpL7gPcDF&bBMzYcu2u7rw*1c7EyA60TX7EgO#i zKd!$ods=FzgMXjHwMEV{>k<PZ+RZYHd6nI5*`wu?9vD2-So6Vh-Hp_{Yqs7Jcry88 zkiovwUn-*SR(}%{o!XYF#CWS_N7AJkC3lND7lllGDsorUe&e1Wi%Ng3o3>KcQfu1_ zoxSP#(ma=DM$VUay2#L|aAbbMOgoo{hi1)urGAP}Hh6O0kr@r5-3Juj?3f&I@$&xI zlsys#o6dSw3Qw_#Jhkyc#EH3$OyZ9>-|lXehz(XQzAh#`rSFTzg_@hnI(`=vJ$%%H zY$_wAe~LWwF0iy@x${eIm4(~7l`n3n-?_Euj)l!Fsm7Q}sT0Ohl3T@}Z2ea#<J6$k zS?U(=zk&Vu&CeY^lV3HQ<JXfl%S~E*<QrEu7q>@4b$7bKsWyusk9Ri`{sbMfR=U`E z{Kc%->u34i_GaEw!Z{;!%HCUdR!SvIH{5h@-A<!lXOCx3_AI)z{mq>Bmc3>{3mxtx zv8HwOWwC9toj33H;{2|x!@<5ab4zAS<o_hHSRk9-vg7iRb*i_Pd<-ty$*Uq~dgNx{ zhD}avpA_{koHfZ=+Oth-o1(&v?%p)s9jPkp%e0tsRGIr8`ab2jrP=n=C71Eqn<Lt{ z7#WL=-^`vM@<oiBOEx@oOT#j~uGvdD3;$QK`f3(tui2~G^!m2-;`lzBHy33t>HPkF zd?uH@yYM6<t|tc^C+JN1r69oT)byBF_~NZuhom&hryp}!IJ^6Cx4X{79Pa+UofrBa zC7*S3am-Q`v|{-1Utd=8%jX4;yoC6qPV+{*YnXri@2aKwYc{L7@=cxke4nxXgO3S( z&W7E~S+{@R_CCE<Z}#ou^PYbDQD}ef-4uqd$qnApZ<ZK!C7MqX77F_wZp=4vrW$io z!5?<HS=`^UvegWy9r(OuKEtyerPWj0{Ldfht$TI+yh!03o+P6Mc^_@$uJ`e=$S&uI zFNk@*N4m)&gYmz0d3@8_EVC%>4`0gTHb=P3D*w<f86a%*(EYpMpTtX1?k9^(x(p4S z@0tjQsp!{j*8A`zCfY&qJktUer{8L;BPaK@l=HvOf3vsmZr8cAX|?gI6bp`OJ-z!z zT|!YW>;FQ(^=F*#CKoR}%ehMN2}`2grYo+_oayVAHe9%K^0MW@5cZclinm<u6<O4M zyo@=h(Ifr{^MSe`ImL@o(=X>QmF_HRwB=;z=;)pP>bhEQK+gKDdOCdJXW3sXtk|Xf zb5Waohm^fScKk_kEtU;wuVPj89_MR(4xT2nwL^|qRr6-Uo?6+K<BP*i?3=f)#pJ`S zQzl^|dwSYrKjg>?T1XyCm}&H}y>7|B$}`Q!KYign+JD?vFkWNVw-0;T*;DuqT7J{# zR{Z|HIDUehSv}kCv^ZvyX{Wf0mp2?e@aeJJ(iVBAQe$tn3Co?W+XGym6jYfp{i%At z-lo^W_|%2hmah*_N(%b@=EVW-Sur1XpGjGDvV65slY6R$*Lx>hK32Vt1yu_e+}rv7 zJ{P-Xx6`ft&$qoNK8578pFD8Xz<64rh2pcdN@;1YH|TsU<y!Uj{^N~|C37@Gx)&W5 zQ48Ezo|xR9nZ0EGPL0ysd0P(#1S)Hr&t<pb)s>X`e7x}K$GfIqi~92zJ);Hgo_VyA zeX*$Le2W;fb2FA7-s=6wTkDYI-{bQ_*U8*_(v_Hbwt3!UO(DUSeqn#*$1AU`$SC1a zIu@C4=~a}mYL!ya9=AP}9WraDy$TR`8r6Bi=t)Q0k20MLs<uLNrzHxVbt=x&Kj++e zUgRdD<tCfmY)tzit_o$%-2BEWZ1)9QFNxGtmje$K|C|%IWAHk2ub|M@ynVrpQ-5Nn zt|)%RYksiw>*20&?a47hwk6wY9QN5h7Ju~YOY2`I_7f}}PXjbqQxkS`Kd{}~{JMp| zF=^?muN-OB8x5l~GF|T$W`Fm0-fHq~d&J~vYZo#%e!l5wY04mHZlAjMTYcrX&V@@~ z+GZ*}x#@6lLjJazZVPdCx8NX`8xGUD0{sryUVpnP%rBFP$<}jH!jjTrrHC!vYF~;f zPq5$pv_M~|b<^L=882Cv^*$><Eu=4PZnRiwa)M|F!&*!A<*{mP(<L0<MqXCs`l{lg zym;TdXUZCe8fW-iA1rxjpzu6=dCw!4Ur{@otur<rx6uA4!)way^PVpz<22i$86Cw8 zakmzwE@WFLIrmLl?mUf`{x(5dii@fr%`M)1^69ZRBL9Tua3(TX?)UQJ6taB5QCraM zy^15~<>#x91@+Io=FQU2=UKh$m8#g~!jCz76%~&r1vGuvJ*gpKAoNqlfzc*HMzEtn z){1XZ#_x932qULH!Q&;HPkpwj%ZLb?|7+dcFL!T$G|9NFYHR;>;~eKiw+FKiulccA zeEp(V&ouA4*f1=4Bgr<cmFvSsHi>;2@Au5yS@_6Q<o>p4lXx5bw?+L7b&NWf`10-% z#<atiwuP^jU&nd9n2E_geg6R#nXNUMD?a~XXPNO>AvbB;Ci}HBB~JbGZ^<$~fBwts z2hX<GUEF&4d3XAA)<%Ezyujxj=Za)y3i5Nl9XJpq{>0Q{#zvK7-g_5agTr~|SsYmx z!2jFXsp;QL|A}+TUnkawl^f1A(Xw*6@>8<m4F`ktJWI8EtGZVI>GQgMHsZV4yq{}V zoJe2%CaJTFD{A|a|9>POuJ`!IcKM61-;FoXU)VRhI;Z@rJ(~US)<cWu4<20FbZAk% zzO}=Or1YRgpY?YH{+q=X!GC4S^2)C+`kzGB&u>52Z>07{LGd#yOQwhZ=`CsNn|Iv2 zIB}l1%nbYAAKkaDmFao0rBrBgbFb2?l{!(&cFbPm`{w85%KCk)A{Z5?GL_%#)AGGM z$8x%`>`v*h-V;6tB)y;CzVrW=(kyl6O6Fe8SQ!((?#%hE7IiEB{ya7Js#nI-g}I9x zc1(L6V4XC_CY)Po(wt9DPxq@j-g^IAXU;Q`d7&-MuRc3H))0_ceEe_K;RI(v4)1rz z7)2_aI{gBb>ZFRydl&IeoVS1dt!}rU>zqHBuouW{`_49*$-_8NO7T?V6;XL<h2<?d z&n~JSeKm*U*|T0**)_*<5^U!u*cG<(?&L^%!+at)T>V$-%Hl`v+y8{Wda++_N1W3+ z&d;|BBb+%bD<({`-|s!^rjt`c#U`=HGpl(bHmN;$)|`3E;N-=c3;U%S7ArjZTJCml zLAB*$|L=Er8|@wUcy~NG)n%FUV85C~!(E$(`}h7{W0(^@D}1i~rpZ4`I5?+CSE`8= z6a_FHt8+I#Ib+2&kJW4)PdEH(GMvyLI%(IQmkSi8%N{Ygx7u*hA$RrEnq<94HaFbg z=WGs?c1WMq$^J8^BRb}B>BK2z2Q_-W)+gw^?-2FU+bQII@AYk;`gW&M!*9)T>!-Yy zbt$|tsZ=1Zwu;OBLyM>TUX_b1R}zIKw{ET15<NZrz{<Iw%rq1xiU(KNnjb50JT#5t ztX0NgbCIu+f-e^P%;2!QAk!e@6VLATSgB3-#LH4I2LCzB7H3S{G5hTOO`NMm!_GN* zIbL;-Ip$!o;g~S*;k-`fCFL8}<m~?SjbUdQ=fXLjb=yV#&Yj-1-eui|w@a;s*<Re4 zrSq`$@++CbxH3!s-eTF)rH{_Ld_216pcb3++2f{)&tHF=H&3Q?!nd0u+gM!M7C)W% zV%z53$DRG1*V?(23)(yjUD3U{;;uD&hOfo~v!=o;Cu)@5o@xGVX0E(t#iax1nK-t# zwlIq>-x%8SZML4I==W@asIWsfS8!Bs_~!Ea%Cu#3996b$=(>>g;nxGztxq29zkaO7 zVB%)W8m)z5Ra++Myq^21LDO<c+UgU&b`vCngf^VBws4wS(X^yq_f+hKnvQhI#Iizp zsVf#o3?kwqUY&U;9hk~>a%!lk>sB`NL}h2ql^Yha+Jqcf6@2^Vt@4Kfq5HIT-d5R& zy>9x<o_HsG{t4v^X6vV|P&@E6XaCyMveOQqymjQJ*uN+88PkvQu^pTH$ZgHuuh-r> z{p30GVn$o=_bFF6dW5c=y3FX=bLgnc44uON_J8i!Mg>lc=J<I^D`eXzF25r?-5*@9 z%VYjLz0%S37?aZj##!ro__r;b^Sk6pGV{}4i&)GLRsSvGd!?iGS1h>fdDBV>+hvQ@ z^d8L$U(s;UI9hH(_wPw}g7;rk)auYMUaS27-vi5QcDD?j7C*SfBH5CbZe~zu6xKKC zzn-P##~JbMUGrx~-~O*LV~L%<wt`5+O}45V65MXZJ+C}$H%-2`*H@rZYEk@=IT|%* z6MyZgXkNt|^Im33gPN+u=Snu-nET9E|IFPtp@Zkd#@q?)&Y2=Ryeb|~x}f~dh{bF| z$%12_a@T7JC2tix-DeoHlEv_LaEn1x)k=m5$`}5HR>g$z3lu+^c1%lw$;&D4*W4B! z>zoE|?MtB!8pjx_ebVnM8TG5_Zax)pdAB_CO2bo!4(Pq`ownw)fY*jfomW3D>m8l6 z@{cE@6vKgY>h*ii&iPU0oM&ZJc!1e1l3zb+)BLH2HwNzB<gdJ;uYGov^WXGs(*(`G zKRmnlN63`UJra8gKk_!|Yo9O-NGY7ozH{27!_zxoi+Eh0t-M}{*>JA=am!x{oL_Wm z>f_w&E*ubgF8L#c<!Y&T$oB=`p8s#u4G%axU+3oQU#c88pF9=!+8$Y2nmd2Wh7TuI zX5F(=7tt5s?EQLmjWKh*YLZZx+XnH3Go>$zP8{kJO}P1BtLp!LF4k(HuvarDHg0vD zEAac_qp(cfautqKm-aPE%CB0Ox^b(+3Zd%(kMk_A>wSNEJc1!Xd8M}HM73T2Di7Rq z^eNq7GmYzr8Ux!20Y4u;9md0#n-(tK%+tT@X1P-Ma)kh&a|a){hY1=oXaD;6{qfSp zNe&0*Gr6$LU36c$t^cFHpy+G%FRC`bdE-<!+*S4UcM(ilB*(KZsCs(K9<jQ4b1FpQ z=KH2yin0?3iYc14mg#h$pkmeWE$@Ql*T2l+JSr%%`Qt-PwiQLk`fVDM|7o9#W_#_S z;8eG9$NH_4n*YSUSoO7GU+FHpce7TWWNk5N6^oyH{QckLn*m&}Jw7ok@mb~cW>w;^ z>SI>(7hFxYTa|ErrpVgt$WET5cm5KyeE#pd^3;Td?Lg(Zc?^$L87y-OWmHd1ns1tZ z>*9=ag7YQz7(ANmU1WdcOUDvpt_kW#i+d(3SsYZkRTJ=D*Rq3$?fj|MgH2J~hgBX= zUiD#Necc8H>G=(HF~>427C(QmWoc+%&^DHdtNvUPu-&~u{@0fD$IEw2aq%*DkjeY? z{X&iO<c0aX#W^wMat<M1TlW-|PCIHN9e3>Fv9R-dkFI)azBTo#;ew}}MUNj!GBbwf z7|hi)WiJiuC{CQk)l_vd@*ktl`iVUgQVxH-XRuytx%vOTxvzqb?aX_&TSY~6_5T~H zl{-sIPIp>!J(#jn&taB2?}Civ(8s2$nRJaey?J$_k88!;gp-V|=OnLO+Gt}Q^X_Z7 zbm2q65{(WG<rQa6sGZ4>{MX&|xu;Yqs=y$+$zN{cTGgJ%k7^r=7z|a^i?b`F)<o=7 zJh`z=z12m*zg*JC?d7Q~Mn&r$=|dLJ{vSEMZVwx~z=W66)id{*gloMk6I&kV67b+l zVc_?dydGt0va=H$<BChJeED2^`sm}s$ETHEW%|x_#b9B!=Fb&2TXX-g25-InMWOiS z0<I&`8#Z&=emGypy~KIJrjM~R>iSsU&Ge0R$T+bfXwiwpw`zjV7AUA_pTF8(5ZANt zv4)_qNJ>ick;hk-y6tg0Ru^}oz|FVz<<X_`tSiDyx1Q*Da<g@PR%2wRoXO3Nr*a|% zTW+3^Um)=HP2;bbx2C)@SsHz})nM}L_r*6(D@tCvlD_56-idGg-S#|>50v}J6n3Lg z$R++9`-3HilVsn|QQB%2Gj)+%#ylAwW5s(72}v$1naX*;x_o>5U14iN*(~<92Q!~E zx7=~ESoZ2ir{Gq_*`Ib=ZWdR%<nC#6C_+Z>S;i*itp*3X6HQhqa@;U@wQFU^@l=~* z2cz~1O59&w<<v0oSFNJ%hx{GFtY%T_4$nE+bk@p-bl8_jOA1OgpYgd6&ZRd=!|&2( zkG2$9gNm|QOpKctZdfIFv`iD{mCxz8l-A)GHc_%zC77|zCuGBBPrk`Ny-h!5aI6+t zvcM=Tk}<)EF@A=K_t6KBqC>OWmE~5f@;vi`dBv~CW~Up{)4skfI(@Z2VRrn4)=RHe zTQYe_8uIAQ^Sbx4rh={DUvQy^gOJD}KIylL@3MCt$ywy77`^fmgNJnqKVQe!RN<f$ z$wU7|s*F-sJTERyE-uf%ym^IfQ^uiW>&=yg?nVN}ANJ|&+8|=s_maukdXv9g@T@ZN z2(hIq39I80E=|6}*n3R$Yg@X4KxpNTKL>n#e~3muXL1cSmJl#2J>@p*t#0S!{Ld+} z9P(P3;VqYK-h0KyWUUPTdV0ds#~hy*ZsKZ)xqDQ6(FyfN-n^Nc!u^^zy_@!Hv-FIH zhx$h(_uME@5#*igD7laM8kfqHNe^u!4P`E@v2v82aQ~Co&)&W2hGDY%R{cHFF+(gQ z>5<DB(<AN7-=5yRVwEjl&?b=dB{YbC?y==stCI@699OB|b!$!e7@KKtE;WmR<G_vX zExuY8Ehi|79@_czr^0WMXhvyeNhMJ&r_$X2w^Ll_=*WefY24;!yU^nVbHxE+t3}^0 zuWWg_?#qtZi!NyRAGq!Mpyie_r}Ey(KBZG;H=J<gnDm#WWI>fl#*Ge6-)R<G3g$O& zp2>UXOJ>Q01Jm^G&V9Thg!^3NV~#m8-tM^{q?&(i`2PJNvwp*jsH#(D7o^uGv$rqu z-og-K@kQ=u;O2x6lKZ%QF6Flz;H{Z;d+8#7-Dna2<n{gP>TguEXS-zVe>{!hSwhR4 zEoFc2K726g(NVdQSK<?ewm9BdJMZ+W>&quxR-AU%G{$!g>x)jNGZQYQt|-<tuu8i) zeO2nh6b~n{ls~>j3l=eOe7a?nZg_ux;<P2R^*o$Tt?Za2-)$lD>g4gim-E{X893Rj zaA;sUsJBoxUU6cD=O?!^1;-x~&YX3Y6zJE>e#m(Iu(e+H{#6eYilmixc}#TmS!c!Z zl6e#V%GnR>e{5Oc?Kefr`SZf6BvXr}GJnqaw8SgDZ1u=vJh3YEM)HlD456>mnI%<B zHiud8DfujQw&k71e@8V&bz;lSiC?@t!$b`do@cvfR2?eey4ZJNnzPdi9))!k1%DFO zi)@VFb%!<oLmr!D#$Tb5rgdiya~+$Nw9mX-QoyAs^I+~)x6NF0g?~&|vXt?0R>>AM zFja{7*O7R8N$IA94?az0$Ch`BwY>Dz@)l(&xwAr;lY?D)tC^0EWXYP6Z{9^K<`;GT zvS=~;#yqE@yKKGErf17idR^uCd>$^m_V}CDi->~`&kN*5H}06}cZZ{Q$3>3ZM3=>> zGb5z4d~fSk-Tt>a|F^aaQ~pY|)h?>b4tLdAt(y1X62sMHTOBpT73#L#TC(?3^^Qy5 z?q6^B{dX!qPUdga=KqgYecf-Xu<>Ho@<k>FCTxo(c>QPnc09*<GTnO?)4Ms7<|N0c zCKTAzt^A`iH!+{(_D<IH`uX#WB{*+sTj$Lz-R`s`^ShUP-qd$TW!?u@negaUdY-!S zD8<Qfc`sA1_VsSrn>w!w_BzY2_fNmSRY~m1l6jYW^>RK;`o3f1yoa-w$5vEFwbusy zdXnRLP5S=d#C@LAy)H3(nZ(-4wW%*$d?X^U+gD=8wU~gEf2I6Emlw{J>^tE!w^T)L zwPnS!G<n^Nj~Jt#AItvt%wO7-O=Cxy+wSvcO&2I@ebN#tl#JMsrKGd8>i;8-b50I3 zH+`F1>?z#2gXQI;ALd*yj6!;QM5Xy9L<AVu#0p=wTf~s*w&;IWDZ~Eq7}XC81sPq| z6iiz)nTsWXtx-ZbGEec4(w<(1b6l$r3i7B<`f+Em+fx}gvwb24cSWN(WMX+Lt-ARi zEc17Nz3BSKtVt|Q|5G^ij4$6V|JKQAk|J~R)#QEe7)%#`xOu!<F-msR48@lUQ<>Ek zMSb-=zRP^dsp#z@w|2i{IqkgZWSH-h?Wu`#0&SQS1+5NcFWn~izbu+Z+d^!S$83(M zL+-CTX881b=*Fo9M7{hHy4LBa3zJf;opz$H+M$Pu$=g^0Y_b`y<p){SgvabsyC*4I zZ0!)h@HjU1y|Q*o#5<v6^Jd-mm!1?IU-mkKHEwp|L;YHggnyO3C!QO>;C{*W#Yu1C zg17UmuPMZsam+W|;-0Xr<1^!<M`~+$BwCGrofC6%mc2QZuds0D_rS~op7>{6F-FrI zcHb@(cf7&PxUET9$oBq8zO6#$mrfj;;KHHSxv$~GuE!3ORJJ*vNiJEX9j?=~*2pSl z184swK7mWsD~fg+|7T8rmC$`N{C1nfiErUEPtR}WeZ2eVfe${8#@xGlITv)Ln;iNe zTUyOw`DWEtRR-BhipvkaHF@}UsnpioP#HVlJb}nF&2{UF>{nb#U80}tb#}_$fL`Vk zS3KwCGX`&TnAEszo0oy(o22?T4Y?Uddo*JEx#zCx@VsLwKJ6Uy@vr5tOuns%X^PpI zoy^qm|LL_0EaK&1M{}pFQn>y?Y+n#VSDGD1xtdB<$&JHe6S>wLKXIzfRQX_l)I+{! zPJdPebSb7ST<$0;-h8%e)6%e1jwue$m>ia>YH6J5<#YNmkIDVyuk#suX1~_h{^xid z=iKY6&i&Q;o3C=~hi&{PEdHi-`KteWoBxOH;SB9{IoQE>)j?19WIJmK0}KD9)Q2A@ zeLF70tGgw_Uh%5b$H>I9%ie9dQ!(R`?izk(;o!a1OD8cLVr8pjf5JI~U190l^2$u{ zCx(BH&M|uS+C}8^u~SuFBn%o#ud<8r?O9==FK}2pQzkkz`b@^@Rh-v0i<UZh%n_Wy z^F}l5h;Q}VDDlVgn|L;aMQXKe?~IO-yQ8z9B6t~tqf+y;GLM;O&I_zKt<CK8$YYXx zqTHpF#+|l_pYFJtw3M9;d>Q5<m3n>63%S3dB97}=<|gl!JpJp<9leXL+sZy<NLlZb zjN8b$Voy!GeITpGvd^pwxPN?`Ht}`Q*PFK@KR13qJ!`VeJ`IC6&$s^n;x(5w?_+Pj z*m{X@^<@mfclI~4WH@_jy;7QW=~9wxOKQp$l|^C=rdKZ?S+pqVUom&wDv86sqAhiP ze5zAQ7wCj$WEXGaD-d=F@l#63+t7J~hf^}SiD6kxhTj%t%e4$1I^CCd^ohi!%?$6K z_DZ4CV?y?fv!BnpF*m)kd)V-!_|}bAV)9m|oGVUuhEAN)Huvhy&Fbzq${&7fj*Dkb z7F^>c(mFL}gPu*{A<>iK$FeM03Z@=tKjWrQ#dJ?-%AzwyfBv8UWT)uoB3R<@-@;-! zMU>?o%S<&%cU6UCelOPK2ZjQzhFaSk4%98Y=QMwbPUd$t)|soP-06v8O?t3i?b7{U z`5FRzJbTx(8*KY>fc=%k|E)KCB9bk&|9#$b#Gs&|g=Z^+v}@7nKPLhT9jxS9IOV>- zw9z<GFOef>H>Zecwa2%G{TZ(RZ(X^3NM&Efy;inqOPdT%t=&~nztd)QUF&+Mz<)lI zye3SL=d@~`k)Bs-yka}2<(5f@en_n=)G+VgP`z@N^p6cUlhfk%PkQyse`3<FS+Qjs zCotN#9rQ|DcRzDpp+Jp`zFXIky`R<6b}&yA%RFOea%SlQ>CNZ16f9PHy0%dK-@0c> zn~thG8~NxdMg6#`bh6^{PX1WsbjHq%{Y#cb1qIEtdacg4KCpk8eWK^5i&h3J_`dH5 z)Dn1_@gpg>KmDo0if8ASscaSyJ`|hT{H2IT$Lsv87fV~NOnbIQY>9=8!%a(h+h0Ze z`RisM7S{Z$*SqO{(yPlp7k7VSzrVmqq-*z$Czjl;1@G-ISU#9t-rVwBnZ?&D%2LCv zX&<k%^n;MON?Q*6c+C2uE>45VCyvYSn!>ev#%J63pZ?ESE4k$F!hrcU)@L%d8+FU5 zScxs-d{FFTVXPd$a;aW#zrox`-Cma#mNpd5S|MkVl=CGqXzEF=DH(?r?&w<4$TcO{ zaa+@`%0}i)BaTByq!qK1LS7xsalR*3`y+X-ed({INxveE<JPf%e%@yv{xfq=t%EEN zH?Q=@*zW~hyqb*jblGp2N~Bs^>2Y2@Y&yM7!PAGS?P;xcr$OSAZCB@5N!m|&*|5KT zv2x-2Yma7%%`R%4^5@S^H|y^~^`}egW&Z5k_x?fbLF1*14T5^*#dsPYd7QNM{3dF< z+CndE&-Z=DL|z^|*?q`TJ6`|JYPAp{rk9};t`=TAt8J4%L-B!CWTM}a=SNmB-Qw=C zot6He(Ep~=wpz7G@4ppfNSu=OQ8}e}@e>zcPq&hSX~E8)A8)iAS!h#OAiiDYeVX{J zvU`3G)#_a$$;peG{9Vr)d8IOK5|60VDBiF2CgRXDU%#8-Mw2)0pJzHbIQ*AtLGHxE z+H(tjX-J;XIed`q{*p8Pyjm`M_ZBa+{4k$mdp4JGmcxI`Q)&k#V)ibb?t0{nj@X;$ zH$Ka9*TxqX+><IxOzofj*CK3c;>6j4GdbD}GnXChIB_X(6UVN*L9t&f94&UuZYj^_ z&5mLaGiNw@BI1Y81CF=*o*Fr(Up!c|jdO3sDn`MmryFJUebuZLQg+95YtDO9G3DN+ zqal}HOucFNvtHuNQRcpPFZnbta!5{n@uX|Nz(fQ2<oWS_jhor;<UBlm-r=)*TJa2) zq$1@w&#x?DQ>wLhPZT))dtvfV&R5LN8yRHJG@sra9^2ZfT57A=Gt+#wWW1Qn^fL}U z6TOtTzm`c}c_ist@O9pXsJxlp-(T$8Sby66F#qWW*C*+AO6o7{CErvhpFck<U(d&T z);12$V_*IT$Si#uYjr=#gv*;ZFInia&VzlX+}$lv+wa)+PwqdyuvlOxQ*_Wm`-rS2 z75OJiHM)b^xjQ2N-_UQ-j6B44?a_uW`Okd#m3UgC3mYutn#ILMub;Io782*@6!FRq zOjKdWC=iQxnIg%Y)_$X4iIM)a6sC5+XX{ThUwIIJ^Z$%nyC*!|slK^}Wtqp52@IXd zhJv3CNSujv(bZ3|6$*38(Rk$_ZY8=<B4p$1vdw#yTa1MT=80{JdtGJ58lEAhSX##Y z@xpI$YbDi|@&=i$dp@pqPnqFf!T2-8!1}=Ayd0mBn|oLmbYF9t`f~3jO9NI*%Le_o ze~y<{zlqh>czbYyLhSBlrd!9O^xtsGJ+;n!m76H`BHPX`GFkB8&t>*nyhl~~RTg(I zp7^&^tIyiS-KSM(rhNQtaZcHQpY89hbzS!E@fV%@)}E_tgV3B+tHPXhr>5?;JuO%D z$-RGu&6<KqSqpv_t8RFl<#+k=Ys-&zc17Aw+x=CJpOrCu{l0U0>Tk}ny-zL&c}%S^ zIzO9X(JoiDHEToTQXikm(>!A97~{iOB<>T+&Aa))nyW!9M|oCHEsbtz-;xr|UuS*t zbPD5vj9CS-JIgF$S-DqLHw7OnU1FH{Peo1Pc>`;x(W@EOG5KrmtP@?WD&rpb?B`=W zF}7I0RTuwlel0JTpwZ<deS6-#?1YYUd!u%*Q0Q3vIQ4_Lj0u<UmT#KP`}Q_Z_k6^_ zaB|Y&ko8K8g~g^}zhk40hu0m}SWzr7ZA!(T%{{yoWhG18Ij%{hf3ckSBJ$4G<saKb z_$LT|Zg4vBB4huixn43)mguf6^jN?*Q?Xe`F#YA%2}hdcEHBBV3N$h3+1}YM)x7Pf zxB3*#YdsA6msWguvuq2)XWg~aj@6tw;QBpUZDzaE>W<v#9j4!o^SqKve|egt!OeXq z=kis**iuE+1k?CuUe~&$ZORh<NBSWzOHcB{1qGjPOz?T=a*ki<!VJM3od<uix@D;a zO3YaD!S8mMTwK~R6R9Z-q2)K!{@Uzfzq~^1)-U^*yh6LfcXmaeZ&<R=I^Dp3TIuH< zApymzrXM`l$d_v6>~U#poz-;I=ATWNx~$)m=-a%qN*eJ`HMUGMVNrZ~*Ilaf`8TEK z4+9)F&B%K*wJ2hapVh$?-0!EgFUWXfbofKH^v=!7mknoKdvR06VqOPZ?!7Y?*B(i_ zH+gsF@}3J59$q_;$u7I<XGP+yiFX<&yGTcVcI-HlpWzcNvi;|#HaA-#r2@OpK?=JM z9NhG4iNhj8?eK>u=L^Ukn$x*iK*-hfS-bK2qe}ZGuuNt?XU!8cqhQhAmViuyS2~^l zTxEQGI#>UZ)(~tzHMJ?~RY$E*>w_|bE!|y50*`tXIZsWSsgdI4-t#od!%<9o_NSsx z?p`)G7S-6;G=093-t2fK=a<a%D^FUanWfAZCM(Sj_h`~QC#4zYY_}|o)u*{3PxPFE zfBCAIo2qBD7H$cWys_q&uzAE1KEq@FZv+p1yZXy-?u;V=8qZc*8yMPuQR_UpL}<y} zP4NbK|NYOd=q-2}GvR@o=X#-q=XI3U?Wo!juvltk`m%GY1&f?#B`gk>S!PoBIA;!@ zqsgfyUgj$~%x6rU`1zr{s9>|89{Z~Wp{m{&9R#+_P+?!ZU;~r7V}0x1e{we>_?;6t zw)Oq-yWPyrKg(`Qp~P85uBV%d8KUyS9eplVl`m$`ifPa*d*;`+cdwp+K$0n2iN|uM z|4udSToWD2FLJ!(<kqOYP^_(#;HLEWO0U)fMTIF3viT0MKG8nRsv@{fQ&G#Lj?Ggn zYMpZX%7goxXOx(SzVA}f-5s)A;&Y7r8Rs`Vep1#e1ujJu%y?otF)oSQVn(3Ns+pWi zCrkYnS*O~XTY1HMYH&@12kVh%>ss6;-oO2j<o^9d+vRh<`rb2JeLWR;c3Vtfn;o-& z@his~B}R$cTpbN@mo1q2xQZJLKKZIA%k#CV>i;OdQ+4w9m44~3Y`w9iOBnQ*Oki04 zWLE)0goO9i`Eq}Xn!*%B+C8o?Fki^H?RE8W@1c-v2NCn0UfxND-K#C4av!f|s7W+) z+I914oAN`4q&to8l>2RF%;v3qJ-I^eMcf}x`|}%x9%?)Hc9w3l+9L6|OD150|DqH| z^#?N<ybdWiF5MhurucM&gS=2WW50m)M)8f}&Zj+W?<YT0ial&QBfp_lC9W{&+;U;I zV96)KT5|=&pK{I%wzqvBuxrU4&!jNz8E*;>n6G;#{rHVcXEsv^+Xnq5j~A`_T&&BV z;vH^l8*$HJZSRjjhsIlHC#`&E$IHgtd^2tXw@Kc$)V43mqDNnZKJ;+7^Ht)LhlAC$ zb2%$4Chg`qkzC3wIVtmS+@}R6d6rDejyNQ`Aa_C@mw3I>v*~|rZrPoX=-v_=8mh9W z<*8zjT+FH?*BzG?>xbBVNQ)HOWiQ9Kq34-Vd8Eh_=B?A5{wrT?YpmQ*_2^hmeEa;% z+ztnG_-0?N674zsd)Ccc(>`$;n+q9bobX?3?;ex*PPi?yO;Rf01V4wJrspQt$c&^k z?-di~Ni3~cvF*~GiQ%98<g^|pG;E0c6Y{`ntzXi$r3c(D%uqVeuaqkM=g&bMjg`#v z*fp<qIp`i)uHe<==g_kLQIKN3vwO(ft=z9U<+$e^et+{-+9@`_dxxydK5rFE*Zq@Y z>wn$+_}LO^p2#^`Uj@xF_p3a4eT>CGPUdNFlU$d<D$l0B*W?yY(YGnm=<XAqG`CJN z=;w^J@#o7PFl;i>VN4GR|90}xl57uqpNQpcQxbKUz6ve7`~P1#bG`Phv^fn->knFo z`0=ZYnR_4NxNz>|7K^=C-Yxp)X``!@<EyFZ*~nF?s5^B@?;%UQCo#7RT(b?HS7!Bn z7F;xC+OHZ1Q=vWg%1TzsPx-jMh1<pMd5p!=T(RW`pSRvS8gXH*;F>l4c`G$`ScEQ} zF^y&U$3C6h*ZSvAtX|}M#CvU!F84;mwr$x988$avX$;~y<5j48P<A@!uhX)YuJeyD z1s;7?wENjZcOE<c85bK8CfsG;zv8o%OU&~Ax<%o>`H^<Y|M+tJ{@=Q3lXJ4+ri|GS zCzDf_b0>?pCHPNsZ7*o;uT^&{xz=JN@z0{xEXOJ(=J^NpLz7&V1W#D`OIK3Q>K=>i z6|okDH71N6M)U6e-x~W;(%!^YdH>qkk**4UFFisQzjn`6xix!Ap}oYGpn^kQS(~nW z_#b{<^5pcMSI4p+oKQYsQQM=dm3u@c#a?yi(ew#o{=16j@CtP&3mV<rXDq<+JuES} z!CS%c-xr1*sf;BPqht<+&Rz1%JbhXB(iu0VwJ_OcR5wdkMqItnUKwgRaYA9=ZsiW) zQ_e>haF#}8CQd!0&$(5`uPCld`N_t+0fMt%^E0Me=7h2zxoqPymxtk$h~%ubeb#4M z&u%Cvo?G_l&D7;=e*HYH@~<ZaYZZ8%c=BuSmgd?SED^UkFC2|*=sU`mI@dhHS+~3D zD${`lIYAfpJkV6!=Q*R~z;Tf+8za<Qvw8C-`1;;+UiHGIIBk#0Kh<M~Wjjxt@So9a zHCOq<lGrTQd3+NadHc3Ys?}Vox#1^b6E7N_r##7Hj?)2$)XcbPB4yrYiibk1=07>v zP@?*C!P%OlEvqMQxpi1(<&M-q$1>3=)<U~@RaOXzuHYyumTG(#_DH0pUnBk0&PgV3 zm+mRad(RfPrPj7}_5%0Qo%d_FOwR1e6N++vci~7!WcOs73G)J%MI4{z`NL>}_Qv@l znpVv0o0*H7rnfrX)8XHLrz&NpkmGi3)<`Mey6<wC);(s&Y9<Rud@lJGVrsKMfu(y- z{^5mB_;-}{&O9esDman%n8!j%w#G{bmtV|rxuU~AU$^|?f}hP6R#KU9vJwS5I@31) zbY;|?c&VPL_-qpo??KN@XO6a0+-kg^S>%t(bmr)OR%^Huxh&nYA&+~<7K3{;Q#Nos zOSFoypZn8X+r@Ex>sE^nlkKKn?nx(aeqMW;@$IGio+3t?e0=9FpHkVp@QUJsNxjS8 zI888Sbzl+6n32=!>RlDDd)%>kLB*}9>Q=1n7vD|$;-BidE@YwX+FkR$Hb2SGNZOL& zV3k?oV6h^%w=!M8LMv`ctD1nZCX1JDev4II*S83^bqiN9)G4`p{A==P4O}0SmzVkC zq}y7v;6gUu%+yv(qrSkX8}TPaj5%4_Ha)qi^wX5re@ZmdiK7oDS_(b6qn5crZ?eE1 z4mbHjj;TB6n4Ng&eBJ7`(U*_@#aYD<#QxV$J9cLB=_0cSyPnE6uKTEzc;e~~&S0m4 zy$nM8^SrYAbeFz663!hQb$9~*L4U19!Y5cGy{@P=1+D#{v3RNKyV7L>Csev+-pL-! zzn>aqU32ZW$C<5a98Gc#VOx)`pDFNZuaMi(rEZ^l?URI4tzCm=Da;mB2n=8IdG66* zQw@fsH!~&$tGyLkYn;wJ({@3~g`4X47jv$bN^t)sFSlDo_gGctlf_y}%w6$|Rc{#7 ziTz|`a4S5ps$K1h%W3}~D+TB7XVUw((VwSv?}OxPlT#Zb3sxME@NoEEGPjjOY-XeS zONPXz!t{=bdnTK#PO}X!QT*&OJ0NaV?(d=x2ex~QvE5&CBQ<dezxc+jjE~ET)Maaw zg(nEhcy_SM7-{JIbk3T<wno_Wxz2sv{hQwD^fa`ay-sQfonAOOkzuMx{W~M}Ngo!= z+`Bl((D~dehQN8OMGlHTcc{N)F8a^;v_Eh;XZ|0Ni#38Q&%4Zgk`8r>9E{ejeZ`!# zbl#qDo<8eYGQ3?XhdRF}^#p0$T(slFdAXIsK974sbA)EpED{(0z-1{IVeD}<bWX?R z4#5)fi%fwgNkV%9+4*IJ=NTHW<b7n!Xu$42b7I8wecWmM^Iw}b@7+-l<XL&<fT-e; z(v09!3OzSt7OhrZn8oC}*@W%y&N?yIy!CRGtsN80A8BdWxm^i8uADblS?=)fr@h%C zQO&F|U-Wk#G23h1eeV5*2cO?gR9)z}w^B!ov7$;sjxE8&sbSv4>XoeDtt8nw<f@c3 zo!!sQvw9h@BTMP0NTo{k$%yr8T1$9;oGjRGvWD;YHKU}XE{lz)9B(h*C1KH_u$v`F zh{gD(uKt=uGY&Aui7airAQ_?ZK8uyBr%$poW7qD0eXkci3QX9Q$?xCraNfn#=`$pZ zL{ddKoFZ;Ky74&9Vd9D|^QQ&Bw(v7cNxZu<V_KVYaY0H#+M73q;@3;gGk%!B!%)P* zb=&Q(C!@H})`c(B`)4N@%T@c8t$p^8gEyON)rB9M*LA*=7j@CG7q8M<`e(cRLc@p& zN)@8_H(&HxBC%40DRI{Hh=v#HVHU=0Z{L3VU8}gYHD>qs!wZ8t{hY5R%K2XByYq4; zOTJ~oMZ=>S2juK6n}SRXRL^o&#H9LLo;mvFxMlp2oQF-{tJjG;UTME8G(&4qPmMwU zl8$RJFLn#MJ3M?lJ^tg;#9#W~W;5}9m22CvQ&F{V%A1FWX6%dpsn#)>cU?l#*2_m~ z|GIRUh5q{W_@G`nlU>Ww$uoC!R4rCDlJes^+jhK>%~DW<=PuK^J_(;`ZwrK{dCg0_ z>CPK}VTI`Z3%3g|a!vBok$ZZ$-+Ue8m9Ba9HLaVIs=UL5<E<1WExT$iNXd0MSc?=S zoD!VbCU{6jlkKg%-KU%-@s{Dslx}@?+iH^+<F<AIr`j<N>D4_t>+eVhY)atv2;0H6 zX0{1mqO^a7<w}z!KXek#RFtQ`V0*&Y_G6mK%*LNPE}UXf-OnyP*-h*hw@-3PdS1$Q ziz7xy&T?g}blEV2lV^co?qntP%cVPwqhv0;-ovl6=v9fq&zCwDr?Z*(UU6Agn{K!J z5y!;v{}yX9lUK1xo}2{tI?vvm<inM07X0R(PRF0~yOfDfi(9<;@(GXph>Lu)nh$<y zQIBGrbY-hlUHp@f9}f@QPP1f9N}84`I-&pD`~~?3b+X=mWLi*SZy`0QW@k7bi{|n= z6}RV=8?H|_iM~^^Nd7-RYicLwl`z$^)IVAG4;xI_ESb1nV5gIwos@(|zj*TpCYEp9 zyq`|#URqRe?cVw%*98{re)guDTIHDh7pUw1^!mK({HlX5m;_G5r7&&u2#5_(U)wj) z_11~A%lw*lGV!g{v~H^AJhM>c{)<fyf){Q%cgm`A)|E5SGea2NlN3ZJMa;e2cX`&+ zmRqqLOfF#>ca`K~f>(TQ;B%Qb=fmrig;jDJIp_R*a_a3SowqqmJm<<?c$GZYq(t-F z(X4i3Tle<o9j=4g?0F@VMOyXda58Bsx2-u@IHR#7;A-Yp;eBtfvk56l6n<kjzoM|+ zioscFc9v-O28I8M&W+k`3zt27=3^FbIwfwqTgRf0pLag$T^sL~X`8OR#5#{fZr{!i zYo^?Ga$okVD|M<;cIVFtRlG~v7a!ZEAiwllnQM$f%A?f}SSk;C91`weUTkT$NyfZc z$-6heXp=j;Yst4)8s`*cAKqCJd*#v19Z#yneT`RMYvoYBa^}O0W3eWG6gjULMX2gN zea`Rhy>&~)l7An=J5xCt)s0p)D@#2R*1oHJwN6aeVL|Bi;A{349?Rd^i^wfq(_ge~ zV!-n-KkG^h$znV0g<cx_B80-PJGi+h3Lf!^i$26sx<}2Hb(&4iriVR|TfZIqdb8<G z#=WcvCHJ=%Zrl}WkaLPp4d-LLHQ~XQO`pX(i)OtHTq1DP)W`VU+i(emQWG~m1zWyG zeL)58-o`~j(`<7LZ7dh^7X=)D`>W{M`!`L79&6dV+^(KuDcSyQf8{i`jjIAqtz2@^ zD}>i`s<i9P8wIC*-=?245S=C>9wc}mAa&^^o;R=JRG%~-y|lJ4YVK;Y!X2t-x#oB- z*V=hgv`&@Tu%qVGl>i^^XFp_ltr#~x^mE+&#!k|3dG|~8TGxe2Sv&&FvRWI@wx#EL zD5a?9JF`16vZ^tPonAg=&TOC4V#122L_XY<;=Qw@;3oU$NBx`Say&H;3QA8kRhX+P zEmIeHm;b@hP0SaiSmcDH=be7=uy3mSpS5R_4?b<x6J%jok(177zQs&oaq+F-1N;T- zWlFJT4gD*Z?znpP=u{S8HB+M{wX=lYD+n_BEc)`fXx2=Z;{_4{2exc9oBmnp_2Cc( z6^9`ItwFCl*SFM{S00L9#(1Gi(6b_Eqtj(W6QxN%ZTUI+XB0UorM(L`X+8C}&tvtB zd1pNz+DuY=cI`-(;f@I#^f(+oUfF#k!QH1jrf^<@<iQKCE-`)n<uFOY-n##?m3BbC zUbUQv;a3Ztw$~<$0@@f{Tc_P#b*;|ev-=AM4d<eh7dAQUHcV;EFFAhU;g5}l;wuGx z6cfGYXf*N9O8qo-?g?wBgL5?(ym34;Z|b+jKQkxGKYQc7#K1^2Fi2W2C8ox#`vPCD z>J?7DcU5I4EU#TC`l+*{=-H3YohL39ILHKs=B}3R&SlAn<S8%Zo2_^t;GyQ-FIKS! zv}*HLJS$sW6)xtd?fUWUQQfyXy9Jb=>M*y@=R9)2^+duQ0sqhbt2E|JGJSS|KWAAK zpCrevn~s;S9^<Z-*ZM7c#8F&gRm@Z8LXJe&R^Iaom)0*j^Hp%o|E(*xn%A#iJ6F7S zrTzZRN9R61edGGkbz5Gn5BjXip`zcx7x8Jueb1Xej@QhTcGWLu+hca*YRRUHQ&;=S zt53M_saG(6s&S5ku4U2=<=?THnF}}79;o}U%gVB{>^^U>)6coi6-B8<qSa?hI~;YL z5AF#4vdFxxb>H&K+Mji<g^Imz%`M_F;oWWFP;XGW(ep-P$iF2m9A{hYZmen%^PRlv z8H?(kbssi53&$<Ym2Ka!)Z+UQrjFYu3i_3t`52|8-1Z;8lCyjJf`yx2y?q*ccc;On zA4}rpntIQwRFzJ6d|HP;<lMCQ8TD~zwHEIe(R{r5(9+XYQ5<587lo%({`ca0{XvHL ziqIVcM)z$`RhpY;<eZzGV{pvs<HKLse8P-7?{DS!@Pwz&jdz`JqSgdASMJDN4E%8k zNtt_Iz6e@o>%$Uo<)>D8$i{zMY!Ah*o+%KXx1o87zweTMF6rOG?bn`#7}yEzpQ7{P zi{^XJSrN954Q^dO@4b(&P+R=?h}0B@mN{zQum2EvaYcTAeTMvlZ9<nXAK2shDcCgo zYSQ1AF8oSPS63WfyS<NX`6Pui$v@;bsm$HOWa9EApTlH=aL^-$*y7ynEk+afmTO%5 zdu6IBbHG<&$B8@7?Ahb;s^JLV3Ss_*=T3I|pZB+A60BIf^k4*6)!VwY_gYxW&X`T` zRSI&sw5LyP>W5wN4FWo=n%-#`^8Vc^w)&*QQB|*}$2Oe5SLpF)r~a#7RR*!q5{xHK z`G4HQVRTdGn9l-%3nv~WFcx1m?<?IoK~jKYBE!+xjp1<*?V0nGdv9|HSI2E@?X~#n z5g4!`R!!r+ZOGxHZTcOPw(Xm>JyR|G@$ri*UtPWvU7axfM0-U>;oG*wE*Eu+C+L<0 z3jH<Rwdcus?K^XK22GA&`EX>3kI0MS*Y0Vjn{txA9LdxSn>KX?Ta#zbHLt4)2L;7; zKI)29=3*~9;q->#k<XI{%XFDfOU(Lv>7otCpZ|<McJ^NX{o!i3ip@I_>z`Whx%T%v zId7PmxAAn%A9jIt?eSMa{1;E?_Y|@3*yZ87hL!DLkHggIj}Ko@mv)+!mZEzvDM{k} z+FMS)Jf6n7l+IR)nzw3J?`}bh?|CNwEly}=Tw+!|yhcXyj%Up0?+4f1iSV?4D|7y7 z$AP*f2H)aJ1@4*}EG%79bo9T71Gn`F4xN|F^!j~IaCKLFd9Y(<nfb1zRg0Ed?QwXn zAds+}|NWZd$v@9LTj&?}Y<CIE$z7~&pC?NgT5q`M{byD~kEh<5SzDuYJ!YM;u-Vym zs%2-^zWBtehAL%j|FYV`|A+C{u1FAAvpMa<o&&dc9B%)q)EF1LROrOF+Z=B*1!I>) zd465;;q!u<3IET#{H)z^bd5!r(&b;fg+8Y5V10gnkGQ7Ff<|SpqwUdxY8~5CJ~pOp zNXpfj6n>-Y)a+2D6;u8Su6V&BfA1}KBX8%jyD!h^i60QNkF>txv}4`+z7HqLvJ0hG z8)nT3;Vbc8b77qqL&-Ewp1)ofeuh}d3$FehsPfyVa8cR8YR?7yVK3budRDl)>u@?Y z84Dc|OrG?p{(6D_zhf`mZhY*|2=uk^S`$=!rdw9B<ljoa8UI!##j;9Gvs3r!>6Kg3 zzhuMK+P6vl+qCB&T(YRO>59{}=T9a)l2o1J7G~r+M_WtP__y-v855aG8)u%#>2%Kg z?V!KYtSkBA(=x+Q)u+6^lHNiO;svG$^GpbTde>fNQEOsgtMJy=)NYxe+f3UW&o%Ti zZml_cphsn^_jksoWD%CwE$bEtPvK<R=&$$hJZE&p#5u~pThshFxc%az%n}|QjF^>> zTj?X=wcAr<`E^dlV!`A!y^CjuZr<74Yv|?eu*vn&MX7aDHrF#ZtW>{TX1;=1)iZ9c zc=w64UmOz|CHMC>{7Md-ektx_{e%~PtE>zJ7*dL~>izBo_C-6aZd|{1VcfKNo|=IQ z$BwxQUoCjU<F{6P;@zk&t^+UqCI|cS=soAOWjnR<x8=u-=E}bxTATascb>H0sl8$L z3yu{lx%YK;3C^E=XVIfwZ7pU#yp9h!7clRN=*o%XnCFnZx>D{Jzq{kh6Q)}xeQk(b zH}^H~flluD$<rtNa5@v#qdZ|E|Nlc1A7y>qsCD~G<BMyL-br0}a_~mH@q-`!&ae88 zHU-7$CUr6&Pz-(a#^x-iM~w*&1E+h_tk~7B)UK=!%U0)}AueLg(WvMzr~A8OH^a4g zsX|A%HMm>ky$)~r>Y{9TGX9lHQ;YeNrH@`J%6@yyq&iuIt>mkX#IE&y_gt7h9E>oi zc)h*%{NYr$MpxI0q(2G`fgB9WbdnnQokdkAitz5<era-HvEl+jL)$!o{@uBE)=S== zviXv`_rtGt`8B08`ZirU-nDYl{)Gz;lrt{lKKW*?!L8R@@|f7f^ox!@6RX+B^;k>J z?tQ#du3Fu$3oaY=9XZ$aNlR>6W7Lq${d%_vYwP)v=0`uye(jI4Ez0bXO4}T5sQB?z z#ky6M4(tzIq7rshHsn7rb~F%8V0jQQfvH;k+3DKn*DU@1%X@f!^Oszse1YNIHvQTo zs$RNt%+(ILG#*LOGAfS}>=Zm)cI(!HqG?SXJ@P%DIJfQ)ky$z8d28VRn;8M(8UHUH zX0hJWF<Z-h=0f#pPbE*8OxkskVRPQT;)3r|JZCNnm*{=y_#CSCFX{cUqlWW-sJmzi z+@HnC7?#h}eRk?}SB8nsf91G~gQr{nc3<4oe6e%BnWt#)x1SBXpO1EQwQ*`S1V;)_ zGgi{?-pf+4>$Srs=2c1p)#?XW4~4H;e<M&@>+JatCx1D{>x+B~e>dI0NTIb|LouoB zI2V)j6xo|Q{!LzPc)jO5x0tT1R^^5mwmp@O+#3)6oU5aG$zW^UgasOW3m$)Axf`YU z>iE`&;!3Ss8y~DawfVIbW6d3-%bb6=Y`LU$MsUqLrQ$EIuAMoXenmLv)8nmaLVvZ+ zm>$z$Tz^da5mV>Fa~+MFeB``)Z3E1Iualj*b>{5&%IUW!^4O%E*|&6Nj?wBzjmmCX z?`BO7eKXySwRUl83sa`jjRQWGqJ_dgSGIbsU8~@0aZ$F~#Gye=P(A<FbgsScb+7G~ zTP@M_zL050YhtjL$ereb7s~J6Ib5q;_if@e1qQ1~W1*#i9}5(stS)>pcR#Q9aO$SI z*I%QJ1)FjY?kEvj85rs^cb4yGqZI-d616I?a^0<Gku_PW-tmn8W?JpeeC~ZF-Us44 zr#l`0!@t{n_1v5b&UFhJ6m8N!bU83p^?hHmET`nhgSr3O_e)ImDpzMce|F7<3vqKN zzdUwm?vsjn*B+*ZNt#(5O7WO6p{h{h?~fPZHY+A8e9#kZohEQGC*b9odJ|*jW#`-r z0{^B??Mg^{{%l^-rWJ3_tx3GRS4P?4nE&sU2F^<MS9u#RTv@&T&O<3D!*}c7>+-qO zFt@QT-XOFmq#!xophHelLugZ#c+VGukIi?z`O{a48T_e|d=$U6&T(JO<Vh#*PVji$ z>w7vuyX%U(WZT2&#>nF)=Zp*9uo{-OO?Wx4<`DaqZ;@Mk-q^q5oqO~_?e8yVx7|!P zF?0xDuN3FJly`yfycGpJ?6WtpuUVk<%9%fZ;i@If0j?Zecm6X=Oi(aPi@Vx+uqa%` zBy8D#=MOro{G`M+Qdc~G?3eQ{TJu=`2gB17_rH^0`R{L(N337IkKFQy-u>nq?F)jG zZ(QOyaemt3<q{s5;=k8REBp!i7uEKVWoNDHmY1tzV|(r{(3;9{a@KjtW;JKd)pvJl zx!-2un%OY<;Ci960e1uEnrTQ+?z=tfL_q1iy<7#+k6N2wdwNQJ^cGVpabbuv67t-; z`O@6E0ZOMtwIyzgT)H8z#o5lmc9iXK661H?dAdOnn%M#kO7VgEp7lzXudluO+&cHr z`g60nznF4~3cR@$u&uLw_OZ5W>_4&|ujTz`BeV2zqgO+*P~N%itiGOcRq?v_mxW$j z`;52ic#U@clCuJ@F1~5F`D<5W+`9KKp8o04ZnA2zcXjvvlRfoV$Cu+5e6Mv)W#^3D zx7c~|0uA*R_s1(+FMTnd8**Jc^9C1pe%~BL)~1+gZ7O~&>jM+|npeEP*sSoY_h#c? z@z`RUGQmYUT!K0og)i8dg4|+fK75+7<j(b%PZxhHJCJoW@t;9`pJbtM?y9&t??XFp zgkE{uUC%mc%}U*6w>rabY_OW)@Sbf#>azxx=~}be8y>%ox2g8Oyu5h%i3X1AztRss zp5NWyIaz-7oL^2~o62?dP98N|W`AurlVR66?`W=`C%uo_%VsMt_g$bki)qFzOSN+v zZ$GiOv1T|3*4Er`oRBv`dQasvH^;d%EpMi9F0$>p_2O-?!TBPo{gyM|o>^sUxb{cx z)1QroPxW#WdboR-tq)z>&?FeX@3MB*DG#eS5%I5HJuFPBQw%Q&3C5o7jukoXAs;T> zzC6mlA$n%()0Bmuw)<4Sv8wCJke+*-f%#`u{fh(LNz7SZ51U>ema0nNx7@re^qpFv z!yBvD$E59E)>Iot_#3?c78914dHXhF>syJ?F9J35_V2IsX1Mt(eI29j!wX+NMzd7% zZ0lUJE%srLJL}dD?+RSDl_>dz{Lxk0{?mP<^qPjWPybYFSDoIcasH+?=lZ>#Ia_4H zY>)F;Z;kU?ICbTmDT~7&s9U9K%d0(KbE)y>v<rNHp4}>PkV(ik^6uTa=)JMZCV%?^ zj+qVS#eDCz+HZ>KM{-r{WC*K&Y?{9Q=5JTdM-C$C-CKF(T!l(pp9y~5I`v<}`nZg1 zbsWxp-y9ApW^x{U@+xWBb<^l4++`QySZ357Zfj=^{8%>eeU+uh<nt>ot}MUp6*+BZ z5HH`?*yViQwvArQE$<dITv?Mf<Ad0#*QTMf+SP7ftnWFrdsk$V&ReM{(E`t#QITdl zH_6Po`k(F6UZGT@wam2{A9z!4m)XxWU~OE?+OEd3{pC+T+kFYyOMbWP44M#O_}KlU z?ys0<M$Ok1m~M#NjZLgqT=;|O>k_Go^)<3L6d4M4RL#%Zc+lWLvCAu`w_2OeRo&X8 zIHAL1rH|_avuS@hI%+)KZtT8P@HcH1<KO0;f_g6J=4Y;7tj?B_zt8MUtEIGL`h$YK zIxHot?fV>(kJxP6ch>yS=|r}ywqzl03(st)fcusjT7sRY)iQrL2IoFnqjkcs<H!ny zX$r-sawf{NtV`bMc0f{0DRr7l!nZ^0?~Xk*S5KVxLr`bOCc6()+ooJlEy%U({^auM z`%k6H^_+{B{P@58<c|iU<fK*QMJ&b5iHU7Ld?SyP^%N<YvHx*#V(iH~C-9|4aY6bU ztqs1R4q=a{D$ag*>D=CLZGP#ZW>Q;>Y%HP^xIgN7JE^(FUq5i;9XHF?`Hg>sx47_& znb#fiU$&!AVB(A)F?knS_EujpVG(9?5ZV9Vd7nYc5iWn3g8tw3*7J|OZ2jF*X}nh> zh^gUa&e}v?W@Dd?hb~VPGZtEI#=hso0|TByg>5yL{1Yo1%z2)jsO`Ai)W?~1m_KRW z+C^S{kISOAocgmaeX-pC<ZdCyXA4fS@N!sx5k1}Tb;sF*%*)xBetlZPVjx|)K>F$z z`9}pADN*x+-I)~roxHzNNAWZ3ojU8DfaI?kmo@La{Iu%>`$Dedsq+^$Z+Ok5e8271 zs`)~f_pX@zaL+86w=$nwrT*u6a~39dc<HW{DKY!Zpw`%|dEjhvM*_b_HD}7I0KT&_ zI}Fm_%iJvew=1^po^u9|g<;=0^#XPIj+9HgBolY;kdIOSQ2y+_Y1^kyUw7@=tSq>< z#<5I(?uDD|*H*09u(5CJ#(yS-Ci`A=o^E}(S?ouIF7t{9uL`+M7y~8=?si=#(WrAs zan5HW&lSgJGWEO2+<P3)Wte#2-Jw*M(<+hKsf99<aeuhm7bsgOPyaEY_d}SfP)_q{ z-=EGiEEnXNupgR`bjrf+^zq~I2LygDbU34Y@BO!C|5tUPs`nose5rWAe&q*=<X}$| zmhM%e@5R<S$S8bz-)>rd^V|+bwVg%Ik2Xf1(7)*t9UwpH-N~ylb5pab?n;$KH`eHA z-fXbg!XX{z@kgTd{iK#BkqI4@dp_|@n5R`O-XU=5vGWTxOXKwyg1$}m-jH`Ey~Qw~ z;hk<C_pbEQw^zJW*mozpM<-HhkJ^!W)k<f#zp+~xz~p7;&ETu|`5B+*N;7-j@+9NA zyASaOJSvwH^x##$GQ&VHSE$orf&EOzwwc>+nx0~BXSmtn@%V|1fv}>@z0jnT8E0ZP zwp=h2Ry;HHS^AfU3|r-Vf;Y5I-BxR}r}2r``jXH5H5(Vcx_|27<IOjx+4H7nzkU|N zb-kN4{ccX`O;v_ZQWA^KE>?(}H#67c_|+GMty4eG>e_jKV|3WYcF}p0Hi)%0+Rexn z@7bAt_46{<D7PqU%^9=A*JZOD+|jz@bd=c1r605cl2`6Bl=>%Fk*pdNrD)f4>^{%8 zt*a*do#EiU`S#US<r^n%Uvne>>>IPkhgekln-?sau}$ZaVDY1<+o~)6<^1ZmV`$<o z@_KYN?RsvhhVCg<HPLhX?Tu%iJyLqtVe|9qe+uHK|8P5qKF;@y2)*if$FMD+PkrVw zKUe!Zel8c5e^_MLblAK3NVD}cpHJ`qq~2NmN#)EV<*QyUEITe3Up=T~WVJQIcCJso zXmFxL!;y~3MZ2%GByi@%OPq6i!YR%tHdDJw!{yS=dlk>jWj0@YHN7C_q>-FY;hR_7 z4`;0Da<>W=`t(KmO{L>HYn`JTJN#cW$(=M)GJf_TkuTvBpS#psE-RbYNt>_K{JH*W z@=d0A1D2obdv~uYHdj+$J>~x0wr$@<OA}WJeC(Nirls<&yp;R7pE=Cj#qD1N+2>mP zV5^%UyV(1vLHEpcdqfo3Ij0>;uDq)$fBm=i*X<3*4O)T~0#<M7<Y29Rr>L6x`MV%z z?!p|Mb?TQ`e{2vEi}DrVtz5Is>i&V>qUn=o=55wA&c4RmU1M^t<<8Pz?ZsP<)%I-A zkv_I6q}W_4RFzkKro<zU4S`;)=O$Qh|GfYBS`DG+@ok$gUb@Y!yva%T(q9MT$vdZ= zn|piW)tOpfygsLyc^l+kw`;gR>vkEZ)#^Tma<)Rvq{N-;GFl(KWqq((D?3{1r0T&$ zCuPBh%ClVO>b?-jPi^4XR;h5ZPon#HU}0Q~p<Z*{Th(m-<qWx|=Xa=nW8_=bn4pup z<I06n4z^ixJ31Hay($$g?fB^OpKq<-4BeTT{ig_c^2eLs%lv!DEcyDI&0NpBr$`;W zZMJ*2{ABZw&MC~s-)7$HW}ewo>u{iO-U>Dyu96vxr1KqAez2YNEV*W}rbeidrFr|= zDbj1Zl&*U(@$+b$9{=XY+sQZ9{bVWJ;?Tp{E*#p&@IQKyL2U|mNW=XZL9G9`vuzg^ z-g(&RjqkF{`rnqHjo`}Mcjx4$5E*X;+f|Fy7A%tY&@@wjZ@t`pjljBH>ffE(3oEwX z+ERb6H~hV!`$;v{PmT#U|CKXte{);HH~-iyola@Ji~26Bd_r2z$ee7Buu@+m!gGVs zitW?H4PEVQMt<G1EsDQy`n5>suJ^$+i*xU@KGY2O${83T+v&~Rb~VqC|MZ^&-(?(B z&t3a+cBA{kZBKt%{tO9ERLbZKvpUetY!Fr;we3dml`{;rpRaSCm*0@O@vuu#>9ghc z4`v2^yLd$J;RA)M>4*8g&Zs{5f7bHJU0Z_nzOPGWSl;`zV)f;z6M4#Fr<a{z?loa( zJQw7;wkJ?OOK6Icvqiwea|>8+&u`qjtt*aM{;!G$=Mg>rfG2uwdz2qZ=xQ*R%Iug? z_`TzI*YOPIt2RlVnp4_RPHW~muHtnRnU%e*Wt!BBt8?6Lp5aM<@ZIpf%FQ6xmg==^ zE!=Ns+|*#~_qh3N(ZSu<&dX$Yim@0dw6rVgI6e4r)n?O!$qw8%Y<_8H6unxvI76vv zi=x`URZn+(OvsC@kYfJAnd)#p$=A9wulUgm)+>Km${#&CZ0ecUtP{;{zAbILZ{xxl z`Lll|@v2_%EvOTf;QYc~(Q`q2YUSe{_rAV9SX^{sUi0QxPZGl$dvzu*4t}2Wq0q&F zc}AgmUALUv`4ggsFZFL^aP53C_gc{6H>Z!3h^A(6dG|&NcG`bC7q0rUOj(BK?CovO z6{nfzZ8*PCK>vfuyi0LMOf`z9yp7(TYWMt~(6<>)57#p!7`B}JUF}$6ZfI~fc;zlL z31#IIY8q#MdI|JJ1syr!nE3EcUBacsdy?LCd0Lt+-5xq~?)n<rH+v&)xXb9s&E*yd z`!}h5i6&=PO=#iQxfNXk%-wJJ=GufW)ZVQv@u`=iu7E*j!ylCe`*?izDG7XvOfQ^r zD~dx%&**{EhJ*8t#~GI%l03}x?KhvFgZ#B9ZJ9H{VeTuIusD4x`W$`rFu#tIi}8-d z6VGcf6lNwCTD|EL$$VxwF`2`ipTQ?_mgpX}YYg+HvlR^IF5A{qdp7dt!b>vmbl#=z z+39YxXoh3+FRK+R&bg|tFx6%{Udk)^()!io$+hw^9?TC^4lN8Zac>a}DeO-^`=RL8 za)YUpCuC}U=ME2%l&Y`%A-uX~nUn4Uf2kN}m&sm{nvYL7E(uJS`2WLM(U-9|HnpWJ z7Uo-$IMJ#t<MI-Deh0&bz3j@yN#9fz4xiPQRh_Y5qDQ={AXniY^R3%2^d-hG;|*qX z+1)mam-XoUAWK!ptLs-Ph8&w?W3|WofQgvS%&u0ai+`^ke?Ncr#%YHWjodrd?N2S) zwX<BZt)1~w@k$Mui%JaLyt^_#Pp^&Ok8@jUnsD{?|C~Ubi+|SWNmz=vHmEw@-5a`Q z3UdyB_=BY%j8-vb_G&e9aNW=5?OMd#-NquuRKfpb*=FV6&e~NzW&(QW=gd1{QGBiJ zzyqVH5<f3Wi|7?3FZ}6!;$>w<#zKeB>P$wLH!&?aWR;RSJ-&Qpm4Ze)Z{kXqU8@=Q zH47x#n9Tda^w9C3NBl!SZqB+6)<-Rginlzyei^WL{$A0&fobV#6UX@Ioc(JiPvh6^ zV>tU`=JH#U3jCCu)Et@q&b|Ci@C4t*`vM)ky0;g}n;4d-uGHOWAs#S4(f<77j6Er? z7vJ5TaYlf9Pp_u@`jm`Q$qy0~>O_n*Cg(F=TC}=Z{ESmTilnRXC5wQox{FWrzkM&` z7;F3N^q#{fcL{M?=+9nrFi6MmRVA-n^-(YBe(p$1)st_EYOMlZ9|?GKF4{h<sl7z~ ze@jJBzeGYK6La2Nu_FR37CaIwOxClkvz`&3IF0dv!(qWHeUTR}2W%!~ZZ_djd*ZB8 z#ntg-MN&>o#KTwLCr=R5E)9NGQ)d-rzsoKB;f${C{c1rq3!5HUdM>T>ogl;@dEqGY zHpX2VcTTpqWK6RZxjJjgTgw9>R}E*Cht_`6IJw$;i#*rtIUUMxHMXo!49XBFov{2! z<9XrVQE|;)V$PRcw@u&QwZe2^XWb@&PnA>apWh8H^!TnCQ@O78+jW!YcN$$ko^H-O zc5siMp>}$svHXI7t*1?zKbyDB=NFIpHs7xF`-VjMQ-5DQu*qL(v};E}V|?eDm(h2g zW)!t3dK#+FbCi5yyYeN!O=hsy(RW9iK1eQeylZ0>r<Yo&uND-xK=B3R=jSo2k0)hl zh`e=Sv)+C!uz=ICZRz8}l9|i6kIL*RnrZM?Y}y{>U8QQdGMoyIUrU#5-gU-?QD18H z40b+-sDJ||6RsBg6ABU!ytud|vEsye|G+yBl3U+%D$IWS^bSY02w#YZ)ZK!xjh`E0 z82&k#r(99kR}j>@_Hc#og7X^fTQ_+mvCYV9kr3LkQT-~L<;rF8vy1!8XRRn>%(G6= z&kr=L*>$wJT39GKaD{RC{@7_%kv_k*r#qCeyxI8m1?$vW)m?VRVwV(TSQlx%F<?;0 z{kDYrOMCa0AAcfe90~GB@HqQ!vFfk)sjuX2mPNN0#jh)OnEd6I?25!6fnRxSC%NAY zF<@ADcEhEO5`VfKI34)H_dQ=Y$9U0Nk*9Wv!oTX{D;#ee-n(<zD=|)nDb;F?x2uJN z*j}*KP7j~mI{mV%{*I$ny9Fn2T*tw%{fvX$Ydh&#wUgtxB$MKu7y~xAz3?j&F4@I# zIWTo!g`?YcxjxZ$wX-uK;+Ck_9$RIik!CdOgQ96h=ACzUv>rTHdw%vzME~3$LZM$j ze5^3dT<`xUmTS?X+8|CX-Zk9~_k13oC>7E@G(UXP&0y76uQab31#jMXsHV1gD`#S7 zvjOLa9GMRbZZn%V&R|GLxRJ$Tn7it@^3?9U%V$hW?3=h8IBMUfm3Ii0@rQ7~7p)U_ zc2Ud|tx(O`AaIl;Ik#j7`%3}4ptpx7vHeKnc5LHQi(4NqIqg&I!l0TBN86{Y;eKk- z@nOpD#wlHqO<#Y!SYLC?TJ?>GM(r7HR<{}*u_bCjT{CrE{w1Gcc2IS2le(q%^XVT4 zzw@6HbG-Ni4Y%<0A6@r|`RQ4{Mb%MR`sLh)c|1{@?ypFkXZnTBO<2<Nl=jiml&xxQ z`ZhZwlDunm#ZotHvWR}zJEiS%zTM_WPpc$Fx4gXh+ct^q)Rrix6B}3;CiI=Q)Tqcg zbtLL{=8h}p8QKo6U0If8cBMJKwkNk}iu#rtoY&s5-9O|TYp=_)FFEgL{+s9>4VfSR z32(ab^JRFw?pysUyLK6s9gtvtzD&kgeu=B*ngBO@l~y%Y8NK+Wx59fF=9*t<exCGh z_SIh!7Q3#LWSLLDe=jU5q~RXdl!xp~C;26=6`A+p0CUr=qgit#7e@Lreii<4M{Gf7 zobr}4XHHJ{t4Y^yGJ3rFYRZYQZ4D8w&rA0!#{THi6M0jgcaA$|E-OdYLiHa%(~r8w z^?P4zIdf|Hr7e-XGlT`=9e8|$|4iLl^t7P6MOm2h)h~@apYH|5jSbri4?R8?a<IeY z#@haw+jPIwtoWv>yz=1{t@po@T;8erF3jQl?_a+E?)D>BMA93-OTN3Yyi++)D6yE6 z<>bMH^9CAO<&RmG$R^g`4ykpuv%EL0gGndx*GkXxpRS#iaX4(cdG0~w;+kgV9=(n= z4^q6Z&s1-XVxO<s+|%WKI>C-lzLw$0=1Gr4rDNn>3RDcvrk*ox*fKw)DkJP<U*(VJ zhP7`eRa_5SrLbG*Z1uhOI>#lByj15(j6e0!QvJa<uRV!77e}z$CCIw3`W3ZI?5^(7 zbrzlZf=&Wu-W~<L3R^bn2HXF?EVfYSTCDzDj~ObQYdRKMI&DaF-!OUZp$6kiW^#8G zlXRZ^T=y>I2Cvb*X6^<3jec$a6t%0kzH!Al6y3PN5+-60w54CY#dt>4)3kmb!--68 z>ntpGOqX+Hc5G{oeWaXRT+*hu@qKclQdhnrhq2tOf9(4$jM-Q0{JJcrVf~>~*WWE? z6jgeic*!7T+2S8F3}-fcyA-`cI>JPgTjS#MmA4PiX`QFx-?By0uOjelLgeADMIy{5 z<^P)gF<+R^q*NQXu85^uZcoPLsZZFR)h=xOvqH@D4eO+TY=?bT-dNIoo14|-`@C+p z;)}~Z>$vQ9c_&d8_Dt*4>AujckmQatlU`p5;5Z?7A^yZ~q528xqRW5UtthqQxv>3R zXSh+Z+fL2{Jz9*Vaos15*qsu1U3FspByPvJ8$6%?GUQdnF6FcASoyduWWuakp~`3Z zxvRF+Kk-oi;NJZyj$h||rpH^(!pp7OP90*oo%br@A&WjU!yMgJcWVFD%UZ6lRy?26 zCA~5(`d{mr^TMI`mdmYN!N|IPjrIDJIfe(XZHr8a?!K!eoOPsF(bIE|m9c8)p_Di0 zGy)>;d#rJ7QJC5j$t%CNL*(fGP|lWVelyoi&zv>wv!dab9^pjuX~s3|EA_4yij=E< zH28aT?&%pTIM;nj+-f#Qt>MPD!w()9op{^ts?;OF5pmZ-;b?4Z^;<UmO9e$Dj~$r| zm-mHD_2ljPV7l`BDYu)S=Y5jmlTGY)Q~a}kPj#z!{k+H}-XB)Sq)d%?z_nvXZ;sy! zb`Ps-vMljF?0a6j_P-GPpI<39ZNV9X3v#E;m#lxl!>PRBw5Q#KV$KbY=9_jm=B;Ua zoN$4!RCbGkuxPiNl)UlMUjEOmEpsxA%<r@xR{d5#eSLw`zGYh(7(`?`5+3n2E9lNq zo60D0;{FBA<N)D^6M8o>uU*9dv~Z~bYowylg$ZKULngSr3XEa=7O~fV<1O7H^&Ot? z?{rV&=geq1lYHah>HZ9cWt~h6R!g6sTsw1i?c_T3Uqw|m3m=7tJ2HRV=yUy~)PjIb zT8Ft_pWd?c-xk3v!FdAxt_uSvT(=B7+VE#~QF{9t%L(76dKJ0K+xByu+#(UuEgyX5 z@8z{-we}GY3*YAL_|w#E;xwcE<SUl;){~Vf9t#pZrCoQ(GBEkP{~&94x`+L9h6BUx zNrx4bohSTI<gAdGF1u9Wt@eQh1}>ZbAM-Y5ik|(wvC`=>=Y|D7{zVHGxj&QOFsO=d z>UgNKOn7O3#lkrDA1sgkeKt(5|HgOZi66(jKAZUyp5$8lfBReA;WP2haxTu?$rsyX zYM=7&`?Vxb?d$`-bqbeXJ>9w?&_U|c8$13ltYPotbosob^qKDkFFHJ>MBU?X*`d7$ zjP&}K9~PBak!AL-Nhqq7VdFM0g%brXt_kH6ghEpoA0|9!w#i^gzs=SDmRnfup}>l$ z3p`yMaTC1__>6zbo_T-qp<==kpCF5cml~$+U{a5;3ucm+k^7_ZiS6_&RX?{wVZ3J+ zW(uEm+3)9@Rnl}ID!KXC;nvxce5zgdFn5_pggJG*$u_N2^nI$TA==WpptpTx!jD}> zT>gvvlB?sgrrtd^tMrHWFD^boDL!`pB_1Uy>XLmiQrgn32lFm$Fq&lH^&#>RLljHE zCBfjF)7guPm1H!hP4SD7Pk18#{N<^TKk565{JqRr!qN}8s;Ox?$LWP=H-6vNz0c56 zLi^0jV^bnp6qoJM*5|3ttl@9nC-1QO(>-gp&|apmUrsvPGMs3i+mIk#aY0CX<?QLP z-JV<-tg(v^u&~TqzV#0C?qsDKKOdyjxZKm&qLs8HU9dau?)uXyM#6Vm^=xeUqQ8X- zc<@CF?qg&LIwYd_TlNf#g`Cg!rph#@P`!>8_Q(ayIbUXOVbMF1vQI0)R8UKF)dEY` z2h#Ow&e>HHbHqE1qw5kUp5fgSc6PsyWLKT%_itf`W(!xPSu!NdQMz2^;J5P96T#-P zvVCQ&TH839zBD{xS+GFh^X<03=Xt~*FL=Vz%~T{9b#2S~Z8P{f-!fck_qB2;*z$0t zao4Ncezl2-M)#D0?@O=OO^j~Ps1>~#vdC6ZeL17TM0pKe(Hm<+jIAd4w3<%MSCVUW z)rh<7+qm^|%uRu-1?8Wu)TX$l8O0>8kYxC#w=G>W-@&^lX|;h@;8Z5-tpBMlfw%et zAFFp>wytORvdd%tfyI9^!>{`pPW#AczHhHVWPSMGBOV7XRya-)oqqr9%mcg*dS#O$ z7jJpe@aaDD!GftfqD*{@%4YoO^WLDXE_x(HCu`>qt^OrD*WU{ZJCLa><ilfX`b61w zma4bm-=J*%8I@%(Q(X*{wFO*WOy#&2V%2lLpVN%b=O#<Z4_1-bucot)7`(iyxFY{m zM~d6wBQH*@Qk>wfd{8Z>-NL;`)-dBsR4v1f69qNuSI@ECQ|-IR;W&B2roSg%UDy!o z+r<0q|B)+t9v^r*uRc~{Y;v0_o+IMw<*`t0v(UpUcm7+ycQu@^eQn#5d<Sm((^DJn zCDc!!H<NP<`{NZIW?YIM*Q=JU5}C~yE_8VTv!QLxi3Rp)ub%!^y1((O-Itk*8`zKa zCa#%#h|`n3YVW4JhnhwG=_)6RV*+$`9(MT5-FJmmwRz5*RUC^eb)V_J2>QGCaiYB9 z-6KtQPLFS0xH}>7hyi!OD(hq0>>g?O7rSYm%aY0Ku-iR5vWdgYYwm6<h6dgD9kUM_ z2uO2%wmg<mZg3@>i%Ww2Sn}IPe)dOFkHx09D@^6r()qXZ=YNkQE@rF@oL)%}Qtr=N z*p)hMuRy)+8-<AFkv<pdZBF>#>%7>!%5m!Pz~g+zDLb!4U74v->A&mDSwXA&vlNAj z<#iKtG(0=lyZS<At>TP#`q|5yCeJ=$LGXr+X%cVDPQQ?y#6O9TbE8ekL54_SPTw|` zTe~ZdX`c0u=yZ)#OX4~y`Qb<a`=qub?DFwJB3BnFF*DsyzjQP~zNhWhL_e-X;m!cT z6W3Ey?SsRgUwF)6A|S2AtN)Ds28-B<nH+EahlHGxQraSUNzO&%q3c!AK;0M9Z=4C{ zlM4GIny@}VD~gjrbzP0pf)=K#Mc<z=JlK9CePP3+*$ee~jotig8tj%N9hz-X;p{Xc zrQ`k*!5f>zj3VQg3N5x(*s$Y~o9!j9!}7+*0#>ut)v~ZQyr}Rw65o3^li@-uOSeIN zvee`Wof8k9ZnLyt`{iR;^rG#v&{1v&TZv8LkKT$4wm5W&J^ZXN!Dm%#<D0DD_&)sy z)1zW^9b|M0)(X6>SRA0(oBbn2=Y3+G)#(>~o)6Cle?4l_tSl-hbofrY>e)>mmn@6@ zHD)=BiX7a3boo9R6_5Nv-aG!`%MYA3y~A}c;JCU5Lq_G+)^D3s6FIgnT-LI+gMaf` z%Ox^BhF%*lU4C%;u3=#HhhXEKYfs5#)_=<XG~w628_PpH?_X3;{p6hZSx9Vp(9*Zl z4}A;x{P!-yflL41s!a8nmAo?8z~!L^a}dufK87D<P2%??WM4cN31t15(R7g0mE&3J z`&E4GAFNi!-11#>Wuc|u`WK~pJR%&KE(%qCU$AEN-9$AOmeX5}-;_MzQ@pG1uF_Ga zd+gHLKQ;GU6i+M4S28^1PhA+%;-mk;^G2Bvch`rCsECT&SB^y*3-DO)F}<v4b;c>_ z^O=K_<o3&acaMD0<#gu~e`l+uT65IrJm1`z5(x*-W=?QR;CaY+<~y^r+#SyIn=Co6 zuzk|G_G0NGHBB)k&JQfgjWX=N>a7>{P3WF<U{k~nr>@AwN1|;OC_JCzn4o9)>f>oP zgExi~j(4fHo!6{9ziO_DP>%op?Mku_S8UNZr(pP}OiTDgX-SS?y{tgSIlF_Z6T(75 z|Lbq5^Yr~t?7)+gcTo0Tu9M`GqU@tzr%5M<x4dvW_~b*|t1Zff{1NLq64prXtMzZn z5=ndQFrRnM*(U=36$3v1yFT6Z?Iby#j)FDZ?;rCPO>~`HB%D~k(%A9BUA{ZMJPcc8 zIZj3RUYqhHV1<Qx+adR=!=K+cKXp_57|`#NCUuLU+Bh%gT-2Gv9)52*Vi`Lg{+M^s z?B~|Hh2aNw@h@{Kij9(7_4N<SGMg8LV!pNM0q?K1&X!Ly4`^1rZ}rYT^iIXnka-Jp zqe5pa+}Iwodr7j0y6K!WGb<i_rPZq{XT>HkhVT?huu9IJXezp7dz{z(vRPpkhqrBc zuKrswP3tb-1JSD?cYf_{w*8bN%sqEv=E0ZpAMJ1Nb5icEJmA^sr=;w+QnUD&?p4`E zj&sfTuoPZ6^xy1G)5-I*)BI*KJ)hfBBX;HFoVgx#u8R&AwJh~e%%3h3DmGUwd9%+o zul=XAvcw|qGUXb7z3C<q&U5p$(8G2^m9wu-riq&0DNFi1cY^AN;JxcNJ#gYaZqYg` zu9Crbt<_uCUxtU+y0}ynbThsSJ1^!~=E45po>O6mrhVsZ0mh@tU3OU=+4woSK)GX+ zh``&0*_>hK9USLhGp4u}xNp3p`m3BfOCl<yz|bZ&pXE=|{~yoKu48O1{P9W3Kap8C z*)U`sV+PCJ>={Kb5)+hIIvV)j#G6=fY4>x~w_lyTprB7Kgz44$cMP0P3rxEs7`k3* zi+UzMv@x<<vUpP3_l=1k(|5bEh$Pe&-8FtRW&Y_ru|<dfehumWq5db;f-!or;v}nz z;|*y_Cr=k%P?hNZ>T=TKwvE-D`O{Z?<&&s7^<i5wN2TbOlwhvoJ^XFYo8)RwYlOXd z*~y*Dzq3}|J$}m!Hbrywx9TQ=Iww2TJ(E3q7aaWi?din!PeOa87A|{iqpv7Bk#E7e zfPxR}E9`j7p16okJ<-h)++lk_o_W*%dvB81yNwMVxNsKjT6y}@#=X13vV6jyZ^=4e zz&;_JA*a!O-nnhxkMdVfsynqzZ1$^YHhT{pZq_%?H}dB@xY~t1J3adeFPBor>yj_w z`IB_+_T9Gp@!rst{ot45a}-t_7SXUYHrO37dz1g+CN{x?`74Ue)T1L7%-h7{JaPBg zoy@Ct`L9^>wdbL6^cz(j-pv!2ZFj$F@8K10I`4}7%8+Z-JOXTt>|5veUI_fN`_gk3 zEeCDx%P+HKWll$#+eZCf8Sc5yJXTMFYh5=_(a&;C{tt^UUX1WA?QW0I7W-ddes*y) zo0GQ3yngndg}Q7f;+iT`b~H@$7t1qW$)PC6_H}O6Q$3bFs_pah&Spr*3jXZr$k>1V z^h$vV7jE#bKECPH8ov#5f<&9tmrq@0_rf;pvS~V-ZDGQiX}b@cJf6l;6nLT0)3aIa z9ml1RXI4L&C-sRQYRgk_bWXW>wD`iZUw?8Q`N?f?HZ@?mrF$ZIO8cWV4^ubEhuBU? zPH<5TdKqv0m0g=<_NVgLqH~j#f7u7jp3&fc<ovP!@6MmEpWx>9a>Wex1rOxEpNY5- zWE837$!A;Pe#k{@d*$v8l{Klh8>au=adrOZ%;gUooy1IEWqtQ$%k{kwP;J&Co%F!$ zk<%4<%|m=MW(COS6nlDi&k~NV2@w_YbpIU6a^-p9cY_z7pC0%SY2Wa<=*0XBk<s%E zuBrD{zGGhg{%v<cmD_fQOYgf?7Hv&XoZlnP)go+l^q~7ZuP17E56EumzsTd|;F8ko z%BScsGvvR9)N0Etl}|r;xq1X<hq>@wnO&M^J<-s={c>`Dw)oVT(?4T4+sco<%wv1J zZo(>I28p*JY#;Jk@)n<1)+xYb8Z?<RE7*#CtzpsA;MXeI6S8793dm1PVo29l<(%En zUMRcCyD|7wouI+D%jdaTzRnLkvV02*hoQ;tGOZ`x0gg$P?<JQ#Hn|*^Zm++73-2`7 zSs#jR^lqGpluA;_7hbkClX*sztC^EW-qWo~!KQc4G&Vf1dpg<ujcD$jd#2g@0{Tj1 z8l0-lWcyYh@bGvre~I9Y2QzIotNc0SPTn`qS{mwaJTYX_KT(5~cBVm-l=my?l>9$< zz9IL1nn}u!2RC*z+m$J=oBiUOWBnH1#V$^4r6~uhTKIV?(o_}%G##GDJ3rWoO+wjC zoBcw{^L=rVw*@XtpK0^Ru0mvDb<3G!Z^f$;--ap1m7Pvy5OYp_e^c~kglAI}C)Xv5 zE#jgZz1Ig`Sz>uQrX)``T2UijHuq_W;k~!UDz%xLr9{hWKLl($cl}1hWx*v(xzp{x zA833V7gG85v~wTt)`|uF$<7}0#TM+Yd*goVuBPs{0|mlU7;4!zm#op8F}W&g{)501 z8=iAC^vNWj*cLO{ddZ3x%<Pjh1f^%J+}h!;_ATR5&HvLzrv&8tzix`oJzLG&!B#!D ztZ==V*rf-KoPIt6<;;zYejgOyamFVmh~6}}%{yMq+3r%dW>3byW0m|ZTVGUuIeB5X zOMRr}o?lsw^BUW;S}acPWNgt3PFur#N%_1mgN6I6i0f-^Z(ny}$_~xlry2g3sm5{f zA9nf1>w05phPjJ@s@V1WaY+Yn3GO(2ap8r2lNr|U_m<3DZX!9cGUd3>yz`FtS`%_Z z|0!HO`>->xL`3@fG@J00&dnG2dUwB&*l4Zn(ByJp$%X@cE?sJOPi6D9G6@QEq&sVF zOK%XDy|shEX7-&KcegndtmKWbn9ULrVUpZ+X-QdH-|cj>TNA{79?~oL%jCazjr<#y zsPgX@0_75!#NQe4$FR$aIa*A6aJr$b>CUwz=Bz6dt3`^Pn_jpaSj?e#z@SrNLlbA~ zy!B0r>3Qp4tg&snA$`bX%G6a_8R1Qj)(KY}Jb9L5s>S)QMjH+kgiTJ-aDDE|S9yA# zyWgx259Cbr>~Cr-S4>Rb+-?}*dtzOsNS)a8?8Kch{EhWO?y4*==CC{y^JYo8s$j?e zz%;qhp+W!DqaV2kx9G7u)L(e`OYeNNm-wk_ms<9QdC#nr4lbQ=HraQb<naj%4&QpN zi*Gdiaj((9>Y7q6CyUc<9<ke(&Ma^&+j7_WoG^#{qMz%&T}jwx#WiiVIn(PKJ`#so zKQKRHV)OLA{N|w}lZSG(v0meec0Nn3eNr6~cMMng3&zi~l6Bp3?d~E+F;;~DmXBw6 zuKoVetX9Cq(Rq3i<HD0HOcmMuZHKC>7~9KS&EgzXTGQQmoDMZ^KlIP$-l@Zfmx@`j z-I8N*>HP6QOw8d&CyT#IV_S`)r_vf<N3DxHB0C>GkkJ3rzo7O1i`Ds;eRsc>)IPXF ze(ed44K~hqtwdHGv+Vn_Y+tB{cVp_l{ReLxNQs=dF`mUMxnL5r;f~C(GPAI-ngCXX zsmUInOdpxMc2B&N`fpd2(3%Og#fn!?p7_9hdEvB%NjHn-N*B#>kg`g+kv4Cq5J#w* zsH~fQ^SAaxis#$XjW4D$$+ljriTiQ1P0r~)^TWSApYAXG&>`2x{pRfT)y~`dRNPLy zQEjz7UCO)Q>q)_TOCNG9jcE97k=OMrmc94TIm6{wmPFT_J>_`);ok`>6P0S3*2;M` z`bBRKJi)u}!MZK84h77uc_Co_UMK9)tV|6X(W(h;Y%X_VcQ4d5U9sd>-fkzwl@%u| z;!f`{KbV*zZf$d`$a$t)$Qo7k2lnbsuYMkxGyQ-^{>+b#4)5*Olqk)7AbEj*?d;?N zS-sUC9vh}H<<)x33b5sCod4ZQa7(A5>XxdS2^tTj*cK)oI34zl!CHt<;FNuj%2_3~ zXT|K1TRb-RU0^m-&6?<R`}eP+(v@~o`3=+)xu2$Rx5qU-iVssN7l?H<{P4EGPrq<S z+semH-xo2puim#~?n2&JhnXfUlaEf^_T`NL(>qpfrhd+>6UN+46^b%a0=ft6XYp)) zWS7`5Uq0mIgKLjOS(Kh=PAOg2cfitfBFmghO|A741gE-3WglW>zGdH(6r4ZpaC`BV zDgUmdGK7g{WNMt)Y2Ki9pty$b*U~TNI#cG#Ukp&HtdvpdDC!N=I+&v(xk{zOrfzfE zk0q6@rova9o@_4ea#C>So^h$~shZ{SI>BXS7IOEuSN%=bKM=vVPxiZM;GRuyjwrEp zOJyltbqH9!@r(M&MYfZyvY#uYGKkEX_d7nrt+d$WVcS}-d#dWE+F8^KPCWT5A=T%# zqMUQf(;ZtH!luVorTMQ?I&>~R^l}Yb|0ea$KKbyI|E6zL`g|&Y;lzWsSfyAU%NDhd zpI>Ni3t7VF<-9V^_p!XA!o!oSE-p74t!A-J*sk#4$C+~rW2Vj&zPR{k+R6PUjWtUa zTioq$*yOa~O@gl3L`9!(LT-$CJauLoj!hkhl9#B~R?fOB<f-|%%+K>s?Ds@Q2?v?^ zd(++c_|+fg@qbdyif`J@lj-ndch77QJG*|Le|(d4TQ)~DpKxTJB4fCZl~ZV&t!&Tb z1F0>ly^o5H^c`F9RbmrMX4v17nPp#M6jr}GnRH>IKv1{Skzl_2Kk7nHKUvutdu7pC zJ*Bx<dp6zRdG^R!dYgHV<c*`7ZcT0H5MzG8YQcQwpz^eZYd+jAczjnlS<%3uggN6O z$9)5b>}QHT#_1EJIwHC_-@8leGjCvJpK@Y7!-;eJd{Gs`%&QfO<@QfXwaA)0?a=aK z$&xj7T(W;N4;ojbT)!}*CirjDZv7*hHK%U8?z3ULf#r5?OSbs+tRnJ3oOM?v7Yj`I zc<yY4%63(jE%_VtmYmA-h&g-u@uFGn8<-?3tv~gP?iJgzTGK7^(YpZNu6U)~yaN$z zl|_xab0(@Ckh}hDN{>sKo7k>8K~MSIn#C)=oSHqOkc06-sbEEp-8zSp*;lSizIOA@ zI-iJ=BWesD6I`daa|!=l?s@3_Wy6=pdBmK`PH@S}=*{`cwc^Hm-S-aD=2b>#cwe2w zcVHhwgh7F8d62`uz8k-q945VOJTJo0Aj~s`<AKWj2JM6LwW}Vpe9{oqoaoS_{OSHt zuho~0e|=4TkW=s}h;zB9wj#@vc@Dl8sx>~|_!*G2OCdqIP<!$+;h81n4IDotRhTCn zC}L!^S}CJ;(aG!ewn+Wg!p{OjG?d~VzmC>$&ghVf=dND$_S6$W#<{m9a=dH|D=d*~ z-n&#ZbYs)^NIQ;z_dc5^FHzf-;M<U3!#FQ=e#fy42H`^!PAFb~U(4WLTwdeHVX}ID z#XE@whtKa4W>}s3^{3AI*`2r3=iXc0<|g-I1}p#D!;DM({;Y}Lc~4LK#O33eeXSh_ z-slxFGbpgAusUy*<KME&`mzkef`?1;#83a~;{G19a*sEs<LP68ua^Hi&uz%Q!@;-p zD$^A$?a*{NXLG)dFIoNm>e)OpX8Ga}?Vlxnm%~u-z$Dw0KNoI@q)hSj$T-D+WKq>= z##`@`+!ogDQZanC!cs8l#I`k0R<IxE{oTVaf22-?k!gWOn$JG2Su!oho#X55u6e!e zlW|eHAlg5Bf^_*e!5?aJA~!By6!bW9<73rDjow#hHe6O=+#ve*)%M8!rq{y4zpakV z*8Ut-d^7$A<9<c1hBIy!-xe}`=@bm>n3edg;bZR{?l02z+fJ^qVYaPV+|+(>w!OX9 z;^X?dH*^YADi>?i+9nx?h)z6Q=(<1AGIPGoJN+GpJQusFKD)D>Vbybqv)pUM4P-w@ zW*SA5_+&Khu6+BQNlr~u{AKGWBXd2k&x}q{7YlDb6H-`tY!|P`_sW7TfBIW(*k*0D zV7a|M(I~}AA?e_XO{W&hGTbVf&^Be^io_o#W}PCzn-+bymzdI!$g;MndKHgoU~lfX zGJ_93sg;)&ZV9j1<@dnETX$xvLZno;P*SWaL(z{H?d_i1uFJjm-Z0-%C~ehiLso`) zF7*#NtbW{gzIZCSv{_YViOoijXB}o7wtwH;aS9Ijqu_gR+Sb$ejX1>%ll3MQGcbjm zKbh=%dIrOvLIbDXBZn_9vG<%~$-m@W-c|$E$;ZqCFJ7}Wu+6N#z!6mUBxCJ+<%l<@ zrZ%q=+IUstO?<x8WUg&#{u~XvF7#&1u-;(!yZgKBiA$?3<O>h@u9w}EcgNAB;?=bE zV$7yHh2{Kb95OANHK)KQC^7e&tHH}{b5E@jcQ|;~N3Hpqhx6}Dk95zsHd<a27Vy@T zl*zc+Moo{X`kZ&;(3Xob>h2zX?Zq}_>pASTWX@j7;65WCm~^P>+lDh@A+;My3_c#6 zEqatm?pp4`1q*lI-}J=Ti}hV_*FD~2+y3>QHQV=nwMi^jp6ko$Y?<6a3uiS~uX$GJ zXS~Bf>j&dU0Y4iT!R{2@H7xl~k(acYc$^;aI<|yf&6nlte9(4+Ipxs1^<_m~vkv4= z*=1NF$#(c~&CF*nXFch;wN!4e^YV_H$4a87v@X~+OSI{1&yC=PejftG6c%mF37MC^ zvQM>RMu@^yGil!CwTf@H9kzUSK71+9)@qf<rYzDr4XaH{LzI8=Bpg3}Tcy)n<%LG= zRjn7ohaLJAr4-Z~e19wO{#Ki!vDfPOs&gFLuTnRNacJfHOcyBcDV)Ae|BB@W27}c5 zjnaZfmR84WQol_TI>QuE8Zbwrr};v2&BtHwT7>u?oxK+LzA9iwt5!>fLhJ0^0WV6^ z3RV`oK52R8W5`@_t>cK)`5zwcf3MmsIelR@gI~=@$12f?Wif{e%%45@)S$~%#4PBd zbRs-{c|lU))!vp3*SBpCINiwJwT7WUVe$(eHwMOn)lVAzco=u|+)(UO{KCrRF>#L( zn~&o2&PwB!_#E{us}7ks9nSdnUUu08=2tiCRZW=~W_jPrDOf1k>3Xl}*|B$q&EkoV znYu64Ej!F$vc!H?LTpd0>WzDmIyXOjJit_Ps5T;|t8YQ90prG5_cr~V^Cl<T&pPR2 zc6wy1LHfL%-b=Xb{-16vOmdw3P+`uy!aps#uJ^X*C{O#-u$J2~%dsov^@`x>Pc)am z`SPc6v&*j#O9zX{pgjUSh5vWX-q%~EpRuy%Ut>qi$8)o$rSPPy+B}>*S>orDa6`eG zKmP((JIwcDa_f~SX=b&!>&j{8EHU%x{EeR;_;T!I3lp5qb|cR(qBfLc?ZzMRU)No* zvC(!Ew)%9m)w@CG=hTOn;x9+J*;X4hRG23I|14IQw98dSSWz{Cf79Z5--6V&THS0K zLzG@+s4*U_OkB3P{OK9_yRHgek;fhWCM^=@2^O*VHM2x^<^GdLUhkN2=+sIx`O-(K z4_<6YKGX0k%T_7qW$cMts<~#ya%X-X@9|PObYF9|*N!7RH&(1Z^j*08O9YGW7Snl3 z1yus_Y8|;proLui>ntgr{43O(w~u|_ENh>ACtk8-l}=RM=s7j$((4mb^z}6loYf0^ z*An(#hNW|{gz2sqJUu4Q?%8o&ShsvefUk>&OL2s%^gCV00~;S~tm)X`<;EmZ_V-Wc z%$@pgx~6hXY}8#V$@Hz+?a39(WqGen(khSnzCPB$;&)GEX8QEb?$x0Va~S6ttz}{~ zd@d#>U0ft0k+r6-LZXe$VB!DMQ(tgciN=I@bvs0OPm)QBVP_9slI$=^QKIiJhuFCe zwM*~j?5^Tv)A#N*WL$74eTso@k>a%Mi5mQ09(76WoYsH&=%%R16VvC+)mfueWO8Pu zob=iYnx9R1c4iv!iJN@7qqTT(!-scT)6XjjA2h1J8TKW@O>tWP84cf;NqhN4e-)-T zJNSGlnh|lr<^CVrLeAdBxB4A+a?f{(5x%aJRyzCsg+hTf76011nx0;33<yYj7uV() z%hnt@FW+hM2_3&9dfcB5RIOQR^klxEfU}(OLvLe)<2;?d-&+*d{OVck5ioH<{By?i zZS|jbv*+9tHE48P&?EI^Q>vq7>6TR+K7NU`toC&NYbVYA%XRlDR{!QiPU+Vi4|?RL zebVX?cv29^+g$Tuwza|}mlw&;^p<K^%-(eLk-@cBpC$BOI3>K0=G?*jv1j2M;gt!y zY!!ZRwYg2@RrR-0$vxNM7&>?L{s^b}3;iwcys<g1(zV|@>tejKmb7>UulVzCj7}XB zx7~QbcXZ<|CKrti^~tZ8bY#?b&V6CP#~Z2A?8)lBP9Wgtghf+j*qNWP+fD0o3uL#t zJIlhcVHE?%99AKQBo&TFmo#EcE^M0Hox@)}{lhuULmDv=J@+fK^N$qdwn?XOpRToO zIQf|WvhaLcbqN#x!1No@9*%x1&#$|<<A1*S)rITU8lH_+G7}bRQatR{HeIAcflEX< zMCjs@fDKF5?kRd%;Mf^@tIBCk_#2e~x0VnGBQLq)C=pA4l@*)+#V!gvD{`dpX~t4B z&*H$&Sr=xx8D>x47=M`2xAO18hk?C&-{olE<xp*YJ$ZLXWY0;j7^@`-bA4tWo3u_U zAk(YwwBI5nIU_%X)a$qI9yE{hmizHG_0AcO6!!-G!flsct}nXO^!VHIGnY>Yeaktj zxvPmY^sMc9!Qi_+FBAhhPIz77Kh=}6C1Ub{EBXED+X~+4XQwQvb?cs3dQ>9uuW5%e z$C_U=_b+YuyPQ8);f>xU^Gl|Ser5Z!II!(FRUKTFt{Q%m<#3Q!?1i$*#*~L;b}y#X z?O*o5Y$}g~pK8ht&a5W^PtN^sOEC~T9u=9x^+2~V;=`H}#w{wHS#tz?ER`2MQohj1 zdSq^`(aa<DTH?tpn#-hx+7j1XbD#X8V}ZdYDFe31x!pW&i|!Y^e{|YGkG0X;F}^Ei zFY{rcCckrEO5$JqZ+~pEXG6b~YE-6?WK`j`r3xIIkMRoXnK!0Q-n~f0|HhKI4)%?Y zUVJd$sP^6X^raQYJ|``{z%E%;f6!$@=o7~^uk9svTxn}eFsoAKD+->pJ^jvshw6*I z-sb6U@0xUUy4I(lEvh|z9E{f{O}?h3UZ<@gA%4eSHRQ*#qt05F3R#7GkDuA(_V=y$ ztEEvDveJigmv24&<>fNJ?XBG*txoB(P5*+mZT@oIX60b^S{cNAxG-|-y$|X=KAQI1 z@4eb0*f9Bq(i{K9nc83Cx1HsF?K7o8adXYlnRPaspLqu<UE9y3z``Y=pk6!0mHnyE zt}d2nB|-aT${AXWEH3S;g%x|xEWhA*V6jeO*VRprr!{IyW-Jy75Wn|IKqP00&Xq}X zev2%t*rBENs8K-t=%r^p^$xO%_SY2^16EGR|LMDF>Xt->ci#>#J~K75GV#GHoxq|c z*E%M6W;$g%oS0Qra>P8n=D<(g%#w`m?@?SA#m{!RI+*!P==7e<x>Y?$v%<R~z<IXX z0;@@>Je<>Prf~56>S&Jl{JZd4?YWm5ME1E$@U+P|yLLZHKDA(*`i+fiZ3-5&c5Z%X zarx5Y$4rY|`_3}Hu39CTB4Td+h(nNZ(JHgl%R5Y37rfv(v4ns16T_{?*={di^kQwu z+q9!@X&$y4ICJI%v`zfBrTS~Lp=$Cm4^BQMhZPx_XKqfva_e!}qN6jD=PVRFy>ZJ! z+vaJix9%sHgk`d~-?;kau1V;n<u92Y)EYMF9PmgLJ$uy3z1m8O^?!XGk3LUu|E*ib z?()-g&Um==d|uG<FR}FauHZ0MH-X{<9<Mp2I;1aLV4gJN^NflGMsZ7QgErK^iOFr5 zy=`)cgJam_Re7C{d}DomEsoawp6}$K?fKGwcI)(cEG!aUv(-WuFdYprosd&tbF_1N z(9VgBMbGpNj7%3CIk}hl*5;eRYkiW!3jKY)e{m7-KR*3{2a90Wvnb}i#s^Q1XU%wf zh-LLvu1yXX{R8+yG*m^+7hPP{TM($>_-XSj6UUdwcet}VXm4%y5%$;Q4EM<16v<S) zVedbYTtlY!bBs3|s5riCILOxdK9{lS%DZWYtTO~x$Tme!<}TNJcRb+yXBT&Ep@^{8 zM*P?21%*afyLx0U&2?PN?=`Di@mcb;M?86YpM)G5w(>sd<NNt1Nn~>9gIE8e%7wy$ zL{%@u=#-f3;?kJZeneRKq~tTJ-3K+*_kQI*xW*>(>Rg}3Bx}jzPpmf2oRGBOaGt}D zSyy*Y&~taUjNP~=PJ&US{zBQr3mO*|i?)AO?PHlMo50Mpwd6yg!}{K1r3nX8HO+Lg zV!7U}2)y{+F+kJedT&J6BZoWr=T3wPrf+aza(R@V^z3}<XD#P@?9;aetmhAEaI|s$ z_Frxp)3IfR!CM>E=e}4aUU}#Zw<t$@`tvW<=RWd1+M!_+B<`?PIHaxP5NGk~tfq!5 zT#nZ(+Fty;Sp3A<>QNoHuSm}}&eIt)*7rSlx~};UWAg*1Bl%8TSC;A|o^zdl{^LD$ z@#t5*KbBr+JGj$2o=tlKb8~u{ORNDOLtBCnW4ZjRkYw%bw}!8UI!&+G&ARz>QR}9h zfM;5a_r0!vNZa-NtS7Hp-Lt;#>YVlb!itWw&#@}2R<04#ZTQ3OtT%H7=VlG>Fcp@} zunv|(yrJEia#L>S&)Tsdkmb$2Z&RGS(^3tN>+E~iWixq7m{G%L^Y`z>lK-|kl*|%O zJEeZ*{X%K;8*zQ7Z@4&R+*fpH<QIG9<U7H$g|SAJiR-%`zx#^4)2{KpSX025(4uN) zw`Hd)+ewZWjOTc!>0XJgDz0Gt_;YVXQPR?9Yxn%{<c^tPV)EtJj{mn;zT5h}c<1EI zTO#lJN*=nMO?bH{M|0CLza(MTMP<h`_P^~rxX+G%mQH9NQ_>%);E0MN%gP_S9<VM8 zjar*~&6`n>+h9&mhKExzC(~w&%Ebq=gJ!<y<TqIo|6udeB|=YF#k!mAc=gj&CrZgr zRB_Fey1a9*ql_<y^0&ZCQj9m!9(|LN{9$vbrH6UV>)8?<9z4Cv4!h{pb~f-`Fl60k z+gq_<*@1J0pQ5YoX{ui=a`iFDy0+}cyr>6?7892UKjo9_>v)!-&o<lUQ{|33PE56l zF)vQ8TQ{xHydq`B^?==n9C|01bqj9%{QBZImV;i;6gHgO;BkA7r&S}{V&SP@W7;oT z@mX^I$o(q6G)~gOq0IWA>Q|AvdY%1;7O-scxY?+(>GtdHj@4Yb-Gb_?-9tBi5bOF_ zwo7w8bH323#F%Z5&hJxUe`~(|iGsz(HD?u9y*V$MSfF@tw#SrJiwrLrt41y~xwXAz z-F<7#+EWr!c6gP()#6~CRqL{qr6H-+S|`lWtZ4O~noG(`8t?lit{0Bfzf||DLF$5- z;BqH(zDYtYlb9M#KHfatGr@Y^!I)VO7pe8IWSal(aP{9Oxbj|0#@0;D_EjRQBp()T z-Wsg3$x8RU<*wVm;uP~tm+#Z!U--sfk#!c+wkUp{>BbXSSZ8o#SQPD;E$b2>y)MF+ zas9@UWwETs`*$%;;C<uydbwgQzwu7RuxoR57ry3<2)}S?$%=ylANbQAhQ_U1Y39cA z(PL+7Wy_J()lVIBw+g;$epGNU&#r|{D{Z&1>4TTdHi18C<GQ@m+2!^1_}8oV&)A(T zV0&*{r<tR|SH)E>>_-|tirsSQDO9|3pZE47=fB*qn-1(>6j)syb6jgh>C822{PILN zUfSF;suIb#<{{W*$Ul{jx42Z~{Dl)PvuuSPNvx3Ft|g|jFI(h%+R~*wuG>?UWB%9d zn5OWf@%Dqa=c_f}>aKX}E#l!nS5xndelGJKv+q1fE=D<O{x6Cq%<w3AH?{wqX_|wz z-aSL-ked>nk0W*N>Hjb(G7FoL7s4cPn1A}GW5z|vs?+$aLanZdt_Zr_bwxRe`(k6y zpXYsAX3KqFrsmhGY-36N$Gh;Tk)BL@g|X4{xrZO$3ku3QxZ%LGf(u^)S8$pZG~M}D zrj{n5>L293l`(UA@7k;TJ4EMc-gMuvB5cdn!*ThmLt;XhR=erF)!l#IXn&}RNLXu{ zio44z1(q~%^9m_Lzpt8!3ddExGV98?bDB2>b^Q>&$CB`Fwbg=}_+wd*Yqqt0OXn+( zc~QRAYi?+Aa^<9ZuU>?hZc$ns(qfk#T*CM`bLSkU37=O^X3^)45I<ty)FP=fPvfz^ zMla`1(POgOjK#uc*<TL@c=qJa<ZZoie6O2H@~ns2N3#xYFZicbx8Ul}^P&}>=cS6p z&bYPahPlDlj|K;HrYfABAQf-q(zWE%4;}TVPj3C>{QoWM?&19(o+LQSANnLcYg@0u zQG1Ddn*Tnp_xN&MqGuMnZ>yn?^5XQfW#TQOjZ3#KR_v(komsNK_KBQ>^0odHpFO7> z^twB3{)Qiz5WCBm`Ns#ZeAZ{n3lC_tK3}Gxw@STzQ(@NgKCfmzR)4)o6Ert0Q0lgs zxT&!*W?s@IvB}f+3TAOKGHXt|x_be?T%UURJNHsur%Dqye|<$?Pu8AuD=sb-w4dDM zvS4lX|66VSCj><Fzjg1fEiLfAa#p@RrL)JU+^@~?{{0Nz{cer--7<Ll-0$fB%IJv9 zxqoLq+meZb85ITX>kclRCGzXqn#PVvUuw;kXA9T0wLPBjc!AZ_jlD}6*ag2eOUiy) z^FZ$KZI8(fbq!tbUqAZk^h2ZihMaHwRo!Kq@88r(3J|z+b1U<cWtOhNpEX$<1^i^6 zEuV5-ed?rgrej{Qe@*^0TsX(y+UN9RhiBu%SsZ)b|1Uh8X=BpbwvYKzfBzDOgJL>t z6QzIe6{xU_)12XuBcjgY*7#}G0*Pn6+9ze)4Cl>BP?8ln_N{e~?it>?%Lz^=cvC0t znsV^M&jX&1-X8GGbC`4|`C?Fl@S-D}Q&_H4M>9?QW}#MOuDejtUS{+1w$)F+w|cAg ze_I^**Trjr_e1Vy|7y;(ysN4Ty?W?-e%zzL_)pCu`cL{I;yDDICA<nAX+73Z&#*pO z+#eKUJL$huB2%J^!7G=Nl#R+WoaF+vIL~FQxX9tRMf!P{!rR=9%&yS~m&6MnsA9Qx zM=or!qwLaG2h!F(tyy(IpkYe(-L_17yQ|CAi%<W^_&qW5-6Gbh?RydowT{|Wct;#; zZ}ys~sW;(W-f_0RK&J2E%geQ6)#pvj_t=uazA2N>RanJ$&nBi-NAG`$d*-o1m?P}k zA(l&_$=kCsT%rr!Ww`h*E_&rWCA#QD*upH^h!<~5gpxH5O262_J9TQG!HWI^9_<Ul zc>h~n$(38g$neTX)cEVZ=>>;#f<Ep^^7-TLS;nxfRq|wDqg(yI?GlB%n9`CaoapZ4 z_@ePAKS)q?$#dQe)BjE^lG0gEQfl}=tTDQJZNmh0j%Cpa7u9M^R<6=xJ|}y|R=`zx z#lgHCT#X$6o}XLnb;UhB!j{Q7;6jqS#raDQOISEW6PY(kDt@ZqpDgigqwIxizE29C zEnKn4@FgebmDPp9kw4!p_*1UQc`!OZ_G`{kW3TLsj~{Axzf2A@oTux2OiNC?@s0O< zAJH?_%fA(tlyvD|x%l$q(u#0lMzuRhfe}llS6$Eus}xXe`}K^2eR9+6RSw^G{|<c` z)T*@VSn=hPt0sp`*gNM<-2T43$yW_CrTG<B=FV2{RGMF8eR0;o)r;~kPR{sp>-9&A zO_x-Yzb*c$+I4O68V|O`?6=Q4WjPnUoACDB4vw7)OTOoq?<%}|A~3rD@Ukw06(=&; z7KeV@cvtA*f)$G{h&V=W&sZKA$26@@X^N+e)_GgQ6_%M?iW(g;uXGsZW^ptdUGHP* z<We`td*WVXw>5kE@`+rV{o3puCvZ&VuzNJoq5Y1G&i3bu<_p$t6lAolTwq+gxOc~5 zfgktY+PurzaeMjVn}?4qyFTY}6q{yrrf}DH^#@yjcWn+f%)RnR%ga44*F5!HnZo;N zr#1IT@>JYxy4`5oa(P1U-?b-{Q$6pWp8kdXk7Iho?e2@-l5CnLFCRQRt!;MghF7rP zqVyN*=bhHm7MAE-xjZU$2Yc$Jo24o-QxC8BsXVuN|4zMm3#T74n#{Uu#=Tsh?M%6M zW;EOEI5xwddykye^Kg~wjtw~m>0TSRUy0GOIC{^$?eW{7nk(No{rY+E$i|wNG8MA& zwl}n%dwtoVYWaL)=d(#prw{yi=HRK)&>Oxtds6X}3$@Q*@A<Zy@s#<2W*2R*kpFLw zM5R?`hHW|Q7<uSok-n(6)NXOl?!6z^)ut>K>phcvU`}@3g%-_DmB0YqvZjp(Uka`% z5i{G8rJF7~hcCFeP3NsDm+7LSjS8&2=`5eFoe5l=W%@qs@3Xxp?Y}bY$k;A^d6h=2 z@U~A6-38O{H!4InO)HK5$<JAIZPy+jpN$8$<`^=?t!hy=ytIueDMWGg2dV7>t4hQf zeRKR+KHgCjX-n;1&Qcd~y}SE?%k0>A_HYHkm|NF<g&)sZ)v@&1)*O%Z#jJsvhr*vW zzCJ1Zs4bk+YvnOk)%T%V4?c^D8r@iM{eSabTkcaE1aJAxS8Yx1_nG;X!C26!Ff!`6 zu2I!Z`7N<pxjnaX%>|!LH9VSjQ7pkCDerK>vZ-f{1mbcTE=`!xB-XUx&Z)}}PKaER zVE8?2y-LN5g(0za6J>NYGgpV{i=23L`<}H`N~mSQtNY!%(&s<eU2b>MHYr>?-*<I& z#;$p*i?sdcyx1Fk*4lFArDf-qOWn54c(;3jdzgm{>y_u{*`N1XEEhiM=H<7}@P4ep z_9Ksd*`j;HvNXH7H8pliOl9sn_Ke}Tuikcrq`4O@!dHX`O!<;`Z1*>l4O@917u@&v zi>gvLtFK=2L1fWO#xHzLySr<q`0;9mvNY8^mWz6=(84xXwR@TGf#5|Kjv1U>;5u7p z#)kByX+bM|j%za%)#>*1-nek?vi&xxG@p%sPVSv`nJ?l}%!=(#Yo_1W`0G@5XT{Y0 zMfV%)jrtj~)x$hC6+LEMSlS~l6E#)5ZCB_@@kpJ^Yn4_uO<Nl!>fAHY$Uvh*gJtQa z8Hd`E`m{W+7;E)w<*huk{9X9Az=J`omaaTUrB@opt#$4U`CR<+sVpmBNNeCREjF!% zVX5q=7I!skz16Z2DGXIvAvF8cYSSPshZPc&6y~_}OiokF^qr}pmHp84t5M6El?|Pj zC;jtTYWP&kR&C1GrB5biWlZk(sPU<ocrB{d+mqF~P*BB&qw=DVd#0!sr;G5#TQ2?% zXBMQjedG)3wdv%t%~;>UYsA-46i~Qg-SS(uIj?J;h&)i<qkd8O#l&aa%rbLb=Er>6 z+@l_4(|P!K@f?<i#cR@={VvsR{L9?Se0uJ)%8Xx%7y6Fdl$E#qDR$lX@Jf1BP2eq- zvn=^-3I;4kR(A4u8@~&Y3T#YHJz(@uY{6=wv#DyT-qRvNlJpogp6n3X>C`LqcWO>( zL!d+O%fLxZf^nYFM@vK(oL<e<pi<Mz(dg2_5~9|va7oqY($#~CMG9{^Ch=OzEYv(1 zs~|9mSwO>&QOcn8%p{iv!RARTRW(&u@}Eex>{hriWv1$;aE|7QH%~fqsw<_rdw8$u zyX3{m!qLW2pd2adEXvnVrP!!=lv(xZRgH`jD{eJ6^PZO8WMS|_d4ZcB&n`QGyD$E2 zIN_Ypc5(3z<q7?VEED9XN^#^doH$V8QtiBo*RQ9Y|3hBElO-h{mW>6+)s9Sj#TQ{D zk?lNLA|@|c{DWSWq=ZPW^Hu(E31gWHcbg}*hxc;i2p)V~eEdjFlPbs6)UIbL#zLCh z54u=?DaE)dsdwHHtQBMk4D>y*w$)EHW9dbKk4i_i1tr?@Tc$~SL|M2P)ErvRrNAM= zc}63n^g*me^uZEVfx}r$B|H^cPZUBl7=w8`Iof$0e()M_N^<IG6#PH1<-k?8buw|{ zQi2SnjV=xo51eYfCt4<@VUpP2x~!$3=??RUfCZBpgBkCz&12cb(!=pXsz4{ex>1FB z6=NM^1#d%XLkSl{663ulE=C=`6{-{11*9D68;>xr;7~AKF#UjA!!q6inF!Ml><<zh zIu<Nbn7~~7#{SpxbN9|wnEu)Hw}06$<&W(T_7~bI)PCHT(P4OUoBykt#mDrcfBFko zPd`-S`|AEayR*Oiui8leIljBj_}AeJdrL3Go9}(S{m1l^>*}xBDXml5$NZ>|tx)`E zjPLX0&URia<#Xq6%=JHYZqg6$BK0MI#P3R1OuRZTN=D3r{nS1~+5aE=d+u$Ub8hF} zb9ridOJdSq#4GbL$~2y`wf>>=HICtB?qTCjoA!5eSF=337h-nfwe^K>pSH~SlJaKT zJ{cy%CEGJ5p1vGc-ns99rtuuFDgTz;E?s=<PEV5QCBgjLu3O_e6GF7xX5IR3y!Bby z+-9E1H>WLClj`?vTl>%SkoJzG@PenBI#ZAMr!>sFcCe$*(sq{1HF-^iM&9^+ZtHJ0 zhgl`h6OJ*Nc60MA(_`*Aw@z`JZDKk*$CCANd)j%Pv-3n}+bD}w@I|y;=HzYU(Cw~1 zE%tqy-g}+cdl3`f^F-ghzWrSI_A}GBpPs(*srKn7-lrdP-za$c#zN|w^u=o47kk@2 z#)X&a7Z<NDF4Qm1(=Se5Tf8@H=e5-_uTs|)U%GBto6Tn(b-3;7hI?Cc%%?{4UJ5&$ zdv(K&t2$<i-n_v<hy6u1OmvzeSP;~t;uYY;>%}3hX<oG|Y=^0K4Aa!rl3G{2re>9T zZ8cPlnl7}~%`<Glk=6b|q3f5dj^_-UeCfp@){+FhUFJuozMkXtwQ{L&*h`nIivmr4 z^!OSq7WULQa<R+M_*Re4=f%R-9LHuqNp@UusX1UNo1z=1Q;$%qgv>1i%`FMR83)oX zHk_T@z`L~8Y-(LjZw(k#<+7%wvZkc;#-wKLICZsf>Z--sp|00fcCQT*kD9Ny)h0Hp zWY@LnQI}pv#b$f2%?w?ux$%ciU{&hm9jA5X7D%SN+;m#q>sX}a<xMBgzMbY5|7KHB zdg|m!i*@Gs-%NSvcUqk}b#lvRo;eGQj=orRnWu@X$B27<;)L*Oo~GRqDWX+}6;^(e zWVPLJLbJEc(fy4Pmr3G;fMA{`w!;eZj^1Q>t#?9QvCPr<^(M|au@iiP&NL;6r3lGw zR_OgYlO=Y|38j-^j>4TCtBQEF<|K117fM=r$YfQ4tJd64`djkDPw8Yo6)?TjdN6Q7 zOGx%vEz`+UrA~77Mjmxr^=OyS;*g2qOCxv0hR$vcjocx%=8od3vj-Qgxx=&S>^;-S z-Mdzsmx!jlIke{PMBmx#R&Fj`X_gnjwN~wn)~}pH>ua^Pepz+>&}z>Op^;{ZL6g%m zKjoaY@twKMbF#@nqgRvFVgpT1uacWt>MW$Xe3#1>PNgUoh31u2zmKkx(sjJDHxZ2L zj%H;9HA_~U;&JM7vic_^c&Q<@Qc-d9la{s<K|)doT|BaS1r?W<xU|hYFC^)pwWVUJ zw|i%ZSHV;Vb<W^R1yik-a|V|cOf_-m3{Y-aIoZN%>gR6FP>W5I4|{8THQCe??5(lI zWK-8-Z;c5in>v)eHGB*<H5qejNE>Y0uO=4$;Ls_S#MF`=oi!_4r%o~0wC<T$=#oRH zHq3|&opf4jLu6{eX`NM!sZ-5$HZ5zN7II?KsR`2}1D#H5aHdWb)Y-Jqb)pH&Cbb4J zm-9g<X5NVuwmPkp&Y9xFut}{zO!0HVM*dl>9W`e)x@Wd@)ErWAN>8oNm>T1K+?X@i zLD{>`ILSof^s$JfH{U}$f^V2jODtVza)NWo2er8YReDY3Qys0l7IfNu-l%@BOy&2v zmid(@Ccn3sRQv3c|DFY+jzTpLSms+gXf>(KHJ#u$%R}8)MR?gH&dZK0FXt4MoU^n_ zm6>bA=QopG-TSfd(u19sP8@l`aO7n|Qpp-at1yYV8a#eej32FxTo|%?!K#o&p;}s6 zQ#nPwB=qBZ#Fu<@`Z7Z!uKy_a#SaUs>_qh4n_6Go3D_&mCB8V(=}VeMTu&?a#g2tl zh9dfIOsy{t1njNTi0eMeeKBKUmAZhw%OlnoGaU8`b%-wtWcuQusL$Kseb`Cp!-<wX z28#OJ9o~lyPWrGRW$%xaJu5_`cqX?xt2|UVY2jhy$HnvKpyT`*8ded`_682=&p3Gg z9B7<BgT?qWLt9+}L;u+y?$3S+{@lk>m!Bv<`-J<mH-bNRwbbP`%FkZl{_Gs*&&^GB zIS1y?Hc)?dit}$O%fJ0B|28$$do_lLO?Avf5GG<19WzBl*j)B}pXgV?zT6`D@~py_ zXKs9XW>8fuU~6e8H>bMa&w_n91KXzswid_bXY}bsEMVNSn}K)f42E3o2Ifqc+GRCK zI(w3IcGoeMGP5rfi`@uD`yH;D@jAZQoqVl<^HL7OT=@f>7k@C!l|I19af!jhEr7|% zs76Iu{7gvf55La;oEMEBT1o#=caCp)k^EsU_del;_J>N8fB3b;abCziXvO?sE_03W z0{^BG<_~@ia-7%CH<ez0FgK?{J#ruCwfvsd><1MSeyHg1v$PgJ*4lb=D&x(m5pPbd zDN7BrGFo+4GBmGGIpoEOD^W&<Z){oe`W+=_@pBxK+v3$9rQ)`h`*B!n<7%gbs|%FF zni^N$|G4tL;L4j9clPzO&b;_wvy_eKcK4=D86QIL%5kk;d@yiJg%)2w3%h&M+>8&w zwQ^kXiw}BysnFQg&nj~9!6Hc;;rHrIwJ9I`d**RIo_x^yQ-yk%Kg*Mo4`%H!ULaw- zY#GnX#m!b33Fl_~FkU9c^D?v9D)_;<DHX;`*?3->He1<0IM)|$yg2sEi}S@+Mt9CN z#GLDyZoKI0nHM{Yt(5MZ>o7N7`1j0<(qb!_m~*Y>#tU`Nys$5}3SnCt^Yq~EIXmPF z9yY|Bba*{eL$+`~<GPgft0lFc9rOCQanjZ|DQmMOwe^m99p5-<V@}E%Z%M6x$GmoL zoV0FD%KA4ct5-{E?K|eRZsVj?Z&FruOKSBU^IEuZ(j0BJ;KGDcSvr#5vCW!^8&WmJ zc$Ta>{>oyF^s(IL>fdZ1^AqmrtdTyF+FVh#A)nKX_rbG+d$@0yH)^wezqN4hlNHI? zt0ZpRYBQ5s*!$O6>V3em-64i+ukvK`I!kp19Gi1x({fRrl}o*~LW53qU)i*%RA)u3 zx8~2FQ?*w%%{S3m|3cDVi!Jz2>zwBc(=A>^o~;rq4r`rrd11Qoi^wyl#EQPP&e^sw zT_+>*RFqgzSL>XK3!^*&*2=Pd=(%w<gn{>?qt)jHyQi`qvSVE}L2i27f_>XG^w(x_ zzqV@nb$r3TjVtumztCU9#r^72)2}@X_N~{@U){z1>QU3LEerO|pCW$wQ`4{701x%K zEKL;`Jk(Q8%sgwPY_`lLZOe(CYcmCB1uGewWZ0aL;@3Uad|GkArx_WxKQ2^yn8<ng z*rfCvK4y8wCOPNuF%ut~WSc`<l4peV2y<P`N{muIqwQkZn*Fjhqt#$7znbX6Gl#aA z%?N81=DIK~F^cbuwxecihN8h*7B$fYI)}C}%m~}ROmux`Yj&Dr)IG<jn-jt|r--h( z$(n8C7<F_)*oG9*)i+tQzBxwioe(yaadnt-K<J_ip-C4)oi2nNx)8DmjG8WlG;IiB zT48)>g}D+4nJrpjdT52|AuH1+y{scKmpgVY6D;;odN#%NtVZ`NL2=_pdTEDa&amxF zSYv<Tx{hf3E~%$g8@@Wn+-qEyec-w&gZC^A)iY5-Pk(b3?e!{OsF%Wi=19ZO8586U zgP5PmIn*5X;Gh1J@zZ|=yZ9&Ur~fqkteYTj>%l+$CgZ2C3U+Zz*iWBn_*pqYUhgCG z(@P3fyIlCgH5y+%6tIm}Vqcx&@HMAHZfzlR^A(2&TV43LLmVD#apB|Ead@!l2p_kM z!-EY+__$dd9&B*o<GSLxX|uqYH7>?lg=(kfcy3xKl=W38YUz<_D-Bgw`FLhE3q{R6 zGHrQ)>dP~nRrySDvkpvOHbM2}63(hjrns30rY{RnefL52We;anB2(N9hv`c<sJ={L z_^Q+3yrh8nN*5#7L<c@j7KR7?2lzO?Fg)lxz{l~1;X$7RAKwSQ7iSnA^c>*h*u(Ik z`v4!u8V;q-15FxpIFvdZnly4al-dq7X{2x{H6Liw(BV*Oa%j?!;ZS<d#Ie9Yp^K4; zV}XD|_dOQD$^%XM8Un8M3mipXHpuI3VfdNzfc>;TgIyGR<ENuGd|YB5EUfqNaS46m z^P4`QDBGravg7ksy?GTuvd_D0_Iz|(K2PJw=cByyDi*9hFTz~;=tEq^Zt;0~?`>k6 z&x><?KDy85W8Qk3=<M@i`#v9Cvxkq@_CZ1BdYfLu=M(4b`DCm<&&}`iiIZ}b5|7U- z?>?_AQTe3&9M5{|YZISW?b`D`Z2R0-M?UWjoL9cQ`P`SQmG`E<x4v}sc~yiB%i_-s zUIsf@7IimxN$y}-@VUWzcZ2ul{$#g@Qx_MUx?qtS$}JoBO6W*$L1&WbWIevn_)@;j zlXXNaXTNE#N}VXNEY|RihjR=^;4Z;Wy}t1Z`8v&C?A+!#YT4YKXgi~ELF$391_lO3 zX2t}DIo%u0Kh2kDOJa-j3;R&<rdhG4f=kKj;8aVOiLW{fRd`w7GKJLiO9}oiE@7Bw zZJg%5MsDx6ibX4aas3fGk+zd<*UvK-1<tHEd%Ua2#6<Y)X*P*MsgDPQIyW{PKdWit zaL7h{nWE04S0>YLta#sRo$kMm@AW75sp8=iFSJjduiWr0<P_h`+fLeig>e%&I?X=Z zww#^k#pL3AMfKapM}IPo7f!y;#$cAu9qpUv`1bArW5*MEe*-)Xi)NnS-f;3^@pJd@ z>KXI@tz}%%ZSe5n{#=gBA2_l)oCJmM^gh_xx_b9NvB1`bqzC`E$%co{VxBK?Ip3^9 zWPkYri)WQ{Rc8t7d;WMaA<1gN;h12Psf%Z?I63q4${#D9=5H{F()+S#VhWFJd&6vo z(?aH^99477-?DmKJ9<@2Z<=Alq+P8aRI~j04;<$Z<rUM2;!G@g>UqBXG#8_m@XufJ z)%6Q&6hF+_n4Iol8+Gm8kwO7=X|_(8TW9P-J7!LJ&f!wJafO+~2DQwcSB@AZX9O@M ze3o->nDNBqLQ>1KC%hi3I~X5CPvcmu7^A+5IWxHMnS)N(g+qzGiJ}?m3uY+qR!*HW zHS(*Dq2z3XzE`cxX{EbvpIUdTxUOj#w}0TgCHGsef3Ppu`FM92|C#NV53N()wb}Tg zuVmU`SKh>@A1@Rf<9#+gAY8q7iGN0X=uWQEXMWa~j(whg>k3zV>g1D~Sq?4rKJ$ic zp-PU^oSQzqvp!5anDb)e{>e9P$=sTr_cnD^qNlfPB(ILwNxR9*W8#m#vpeMNruL7m z>z!Tj4uQVtfQoHX{;t}cYs2WOxwp}W>%~9Iud|Di-0Bazze)^S#VGNr=>*4(_wOxR zn3=x@r1vq(I?T!neDNbA`XHN);zaL+2d<CqMnvxQxjU~e;Kqjjo%b?&-*@FU1bnPg zm{{<LVL`Rp(O{;xI~bOH-E{t-qQLd!MZzy0Y%x$cbSg_l@U*6Ly~Q4%(&oHnjQ^O* zmgQGuU%kO{i~EF}z5gxFHj7npC*QMK#F#F)f4b?po$BS;;xTND|JQShWZFoa2{1ZT zQ?!^t^DNh_lh#Q;KXh6-PB5?PnCu#RQs~F^vI8Ytfq`r$3y)W9*m$^NQt;nTw<fk5 z{gsrFH&n9LX|l7p*Q69~t#Z<LgWKbnk{SBBmlkNWDCGMvOiYQmtG$b7Zf>$|L0EQ< zUObDKVBzT<Vw;t;&$)5V{`mUK&qIeenRGT5Y*<|EUUIbQXXiT&Yw0%!{!|nlVdMWV zxJsy2SmMS3$IbWBN&;qHHdH>mbf@s*)+vwrl{q<#x>Yu8kY<#$^qqRm){&Df<iO9f z%Xrc(f)=rEo%#8Eg3gjZGdRpW;tsMuxZK5kvEB6HM)_U(HtL^tv4kA%U-QiD>2BVd zol&=s?C<O}+NR*D=B!xuglo#)4Vx4!Jsr=oMLu9E{?hhTefihLPAd0%8|<=NQytEx zWnVsa;be(J!IFnJW=6D}*t3*FWMX=*8oO=VL(Rq$%`<j6IIpaYlAd0~eQ%@5M!6#m z?ul!8JYxkNOLNY<JZo51IMLEMrYhlw>&gznwx1VOj1pgqO@FT-{rkN}jy=<QB{i1v zBa3#(2f5`*s%|WpA~?%o_Vo=izrw|4v?MH<>EY4id3cvbPY<Vrg^Y&Svx_cjTqou` z3UQrvn0>-v^DO3>--<PV`FuUz88KrSliVBK$$|1RSLzK<^51$du`e&d;)1(pQAVDs zp{>0Jb5NQzj~Son@*ok@srjXj`YF0Dg_(=9ra#W85-m7u@JwSJ^NXmO#~x>!XO%=X zOyS+)Ah&7KfeA;Z2JvudUN=k&kuPzzDmIV!%R6-sBj?TUQJRYdXUv_kYhT9$ci#sN zn?8qxl+8`Zx2bYu3e2?aK9#s=&8$r<EIL0A8%%C?tDICiQP+m&?w*_O#?9B#ChPZI zYY^dRi@$FvzkiFP4|kp8x>OeXVBb?=3mCnGUinEWiau}Kx|FkHndm;H_5!n_RVr(( zck?;Ns2TKB3oO-asfgbDLrzuggYv;!hyEYrnc;eieZ!e)1!9c*4)sb-jeJ;=<~ZMv zZ%fTL%O~pfB@32ZJXz+$%ewUK2_+?qDa#ceig<(xw93Xg@?@7S)vxP4d+F-!+DRqL z)Y3j$x_+?Kk$f`koF||5M=i6)jp92NJKDx=THaja6Ui&)$Hpc8bMNeybbig|Lf({6 z_f_l@y#3i`v|g@SGiPd|OZ9{MonFjs8igwx|H<sqW42q-t?80<%B;1eGcbCAly6DV zkLBB37kO@9YV)M%z|Vja6P_<gUUS<{Yw4tjLyM+mUO4Y3kmGrX-LiKdi{#t+GXp}- z32bpl$(glwA^#bU<1v*puH<M}E-H+eenz|~ZOT?H>n{gnVy1*P9$oPCN<p#Qd5!Q{ zR${46?h1?B-6ArkY_j~{5wCXGZRg7$KR<|Aim9nz>ux_W>+uiwqd%7yO-kpUDluV4 z<MRzh%F34`Os{9nc;IrsyH;{l2$M+q$_ok3w+xbc8W?;h8b`7*F-9jl&$;unQS{|J z-isx=s|uGz_3qK>3cT9KbISL|?9;a|3gybVWS9zVFl9Ns#lAv$Vy0!#)r+kAS#QR_ zUG1p#YTea|0<+&;v~pxwdC-V;=aFRbkZN|mJNz$qEH?drl6yZ((Bm7|H>`3l-f_U+ zA^G%It7#98If|)Br*C79-fL(3cShR{i>RuLH3>1S3db!E$8#y3_@s98+-LE?D@T-% zNqjSzx$?smCXIraWnDfkrkr8rpG8=LrZS&cCt9L1Ij*xNj@!y<!AXaOwki`(8YL8L zuxenuVPkdf;01eMMx_G>O#>D?mn7t+zVH6MLP+?)%HkXE9~@|uHxi5WuYLWm)_`NP z;){X}*Hnd#&U!Ial{IFZIL~n6Vv^BO@q$ULw^Ux8=@2yh*x+(5;8YP)%GP~WTt}qc zy9zU}e|*t#f^)*F^$Lj*+-9OD`Z<<vsucOd%(>Fg*tvCz!lnBQI9TT^t}GF<v+Oh~ zpD{7ZOW?Ppz2vvD=@KQzGa^Nos@$EjY(lBsyz9xfA%gNgq8*3c*)eEVC=_u&`oq;@ zEy#E*Y|b<D9U(sKJl<O}^s{W&#_Kf-SZ%m{S>^tto5f$$UcPvncq__pj{V(#=dRps zGraMkUg7*==NStkGZ)<IIHkRkp<m_Dnt9s1g^MR#-5Qp>B4yTz+l;4IatcTOta{cM z7n{<#iLLVW_KxbLXUoM)m+QUioyT}!N4{E2JhOR&0h`I>h-q_fKU$=Es(IJ7X-fC3 zw;E~~+U4w6KHa!VN^+7~U-U;$)3ok6i!TY;C2}me$-C%i&tl^#@f!EuZEo|hn*QU1 z?8;!RwS`G7xthOryqIN_J=N&$`QT)&`L`dhTs*O%OVQU;W%`;6XE#pty{-MRVdusw z&hqV@>^CZoNjo?kT*lt{X64aqnKM5GojO~)_E-1WYt#HYKDiy+-1kEJ&!tr-d9PeO z8R9(mWqMdHQ)BOhUlw-`Em?nM>9QPm3%$#RI%SJXpUc%t_tg2`Jp96U$F}HCWvjF9 z7Oq>*Wd3i%wWYmg<tBoEnAV!s9$YoK$Lz2c$CR0pQy(Rr+snLMSY2H(Vs`igFHut$ zRgL*spIBS|O0ep2_U>T0*eUy%eVtOT6WgcDW~}G31Jb>3<ZW1Xa8LYi3l=v96Lk~A zi$=4*3vjGg7Y<5hx>435`St+op35h{Uk$jl^!_n3o<_m$pME7;jTv%*Mn@-KifNzZ z<mdBe=7NSNGo~~$Y?@`1>7euI<=cQXVP})htp}L*-TA$IRz>%B%QX@Cu{*O1AMMkW zeB?iSikHt?`)x@Ach%O-*(Q{*IO@(3Kk>S^l`(oxdUq79UTJh_k<V=3NpFNbn-T>T zJzdkczOY+4!+jF-MWb66PG_AvF!ki+&04>rw&<_*p4KRtvf-Hz!^WDni1&w2PGwX% z&3JMek5HA7N>yB-qvr&xXF;jIrZ3c}2s!#o(&NRBjP2`K#SI^5zOfgS2#cDavFnq2 zl^ScO>;l8nN*9_sqzp8c{L*5Kyu92q(4-<!)3fQf%r@;wLab9dj1w9{!dS}QbNC)z zX0<v~)lyyMl=?zJa{)hl=_Ptwm#v;)%KT*6nP_pQLYaUci7%Jm5VYp~A3tNtjO*s6 zrMIT8jF)Sx;?*t;*LS+QA=}bfs951gUY255SD2u)Yai$DC2^_=hK)-)YkcR-4==m9 zJZfIV!Nxk%qIHdn4jx%kRor&()Po%}XC!vHJQn$~BG91WM7+m0ne!Hml~ZpVa*)4Z z`*%T9o512HOFC{atWSP;c?omX74{D2hPO<~)9)U9pe%Oa_^Tz-`*=6$noj#6a%aPV zgaT2^hWB^kC!}jM2_()Hlg(lf@z{`PcCO*MU*pegE}hIdj!uo%Y)0o4X6*cydFrbi zTb#$~fGwLjzBtd`y6nxj7S99k4cGkmqZFBR)F(URdq%Ry49=NXJMtd!YdA!5Y<hAu z;*0-+GqSrZCeO-9@#|OIaeRaMt(pI>DC@0@zS<tH5!<6WN9cq4#Jfp7A~Df3W!7DN zW0I+T@ykq40h6`~NeXk0wol?!(&j!VVCr3^nAhO$vt}u)Pe!k3i_E%!i*48V)Xt;} zrn0`)^E$scqfA<K(|ePc%Ne0*IU)@myUP~D?Wk`O+tMG};r7w8&g87KiJOq!xx*KB zrzfBCxDZ(R-+7s{PsYWAKa+S=`%GWGxW%xCQ~%`4$I?yG`bwr|8<<=ltPPHG;|VlV z7IVA6(RcK$fc3f8Ys;<I|7gkkynaLT>4zL~NrKlRFPt)5R@{^EEqJMngX)w+j8)S* z1-CR!QMhJ3-`-$J0e|VPGB>R)vAVU#`F4vm>Xe<6=X@>~RO#8MeMM|9)0WcR406qv zukpN^62ZQTvAnaTxN>pbPVM8RE~?CmLb7b<d&~Ac*r7W|>*<1cB|dhE%uw?;mdQ(Z zT4hP}WWAqw_pQUHR}XHw6*s#_b#Ac!B;R;4&8@b?chZMxT&{nN&pm&>y!x6D|HA_e z6+#>{cn<a3bN-zBe6i2ls`yW5Sr&b=I+@4x$;WA;!HTbeNwr;U|0)HZb?|*j+NX2R z+3fj@dd;-OMogQZPHD<^NIc@UrS$!dMVx%wCPiNHJUQXW274Ew5d9p{OSa$hHIm(K zEY?)I_)WUYYua=(&I5s}+$S6xc5v@Ld`qA_bMA^iyL?iU<)R~`8Kvj1n0__hdU5<E z#{*I9*UfHkaLZ%kXHT?r%9!<5^m0_&1~*TGrFU<AWWMKCcCbuFsz<N1z<V*{dM)PS z%8iqAwmw|FBg>h$EXVomNoCo)D}TSp<KxpiXB4~4>gAj1wQYYCA~iR<N0p^1msPuW zbnkh8Fp9g~(W1a&WyfR9j^-&xznG*iJI5zFL4<|d%yH#v0c(D?SL`CLDQiz&;$XeD z_i$5U@C&;q2d9;kzx&jp#2IpAOVS%jr5e54uZ8s%xVbH8?0Prh$(2Qi1zAMr^G&Zm z6ME6%`stRk!=6I>EWEp%`wksB{dTYI{5y*MCF?8#k43CyX1x&gu=DNP1>eQiXwDAo zmb7=`_@5KGB|I{H%D%rFyzC~=66IjM$RnI5{!HGcF<tlOdDFwzO7oX-<+sMNSe>x# zzoJ*WquX~~#r?V)d!O7Cv|`=W65=Y=BYbjUm|pWbTZ#G~+vVog*xqGHKCr!3fwyIy z$Kz-_CWei_f+BX#o5f_NzcR5Tc+2wFQ!eu#^POw_^^}@pwaV3u9TUVD`lWZ4Ea6Yz zs@k0YBry8v%r?g*u4y8U{KxaR3u~CP9Eb_s{JZ08Zm=u+-UsJmbzWLLNt>lUrB={% zxnoYa^J!au%bDACO)r)!FV`{oqj|ygv~|}v@w40g*0hK@ObtA?J!ImlMH5f69&7UO z_hFf~eY3~isB?#GUE~$Sj{4e}zX<P1k^HbGtkv1(ZZOZn&PTSLAK0ueZ(8V@H>LR6 z>skEI7z27vZ(3UZHm8uuG@#8X&zs36EheA&fwG6$8+C<-fDcS@oIB??Mn`{T)SMx3 zXI|2E=LOy|?RE#tj&LelC-D35+@83dXW>uY?p*h#?(0fn)B2BH6qr)ha$mB!;L6U2 zD-$~Iv#Y(DooE_;RYIw5%i8G~tM=Yl7ZW{EO2O??EytR}TPN&y$$q!zd)B+M`G<F@ z-JP+%@T}n@w<fdt>`%Y`Ssh$^^*Z-b>odKtYvq=GXwryV@PF5fOVN2uhK2pBYo5(h z5EPpGJgO)8O|szQsaO3CLiql?>5;xJ$rOI!m(theKe;<47Ccl6p1UJWMtZmB$D`RV z$`}}aIKK%CO+Wdhd1k`V+094mJ}|S)@#q!gPXF>H%d`I8kqz?PCePv(AGs84y{aKO z<>_93n@60oZe3nmzTEDgr+(yOnS|t;UwoxTpQc@RSahO&#vb3r%-X$MqCLNzlw0!J zMOH*qoL?;JQEY5$(~c)i;*uu|l-?!!#b495NiL0ITx)EfH$VB^E0G?*jl5c|U(fv& z<mdnC(X;u*<j^+^y|*0gVlC>VQ|EP7&HOVVku#j5U6yy=63yR=A4M78@0-jwJ7!Wv z)#3z6wI7@3PA<Iucir{=>?6B>DuytzdUK>CUK8AM(y;07WGUgorrTGp&(qjx$Q-lL z(CATsXI$GV-+7NtD&DXU5&OPih3NN&lTWm^m(}Ra|GWOD<eyGGvx6q9(in7&=QUoH zvoV_}zQJa5Lgd1btvfmlGgxnkZQ-_Hd6a(CNZV&uv4*ML!J|LtJ2<D`eL9;V?D30( z$(fV--0r?@+*aHYR2K8&Zs)W#8KzBdkMwNLm6qb}ny@)BA#$VLc88hkkDO5PoD+Kc zl)Yfep)D3ZtU=o60vW`XS2UTw(Cu6|<A+dISH|S%7wOeD+ZQaKv2wGxdkaI6(dLPI zzN!q}*^@V1Okizz^mgSVsf%h8Lz826hkG@81{sxQFZUHbE%wJ#{qnjQp%I@eQYIfM zDfm$F==BBG4O)ubv!@;|=2cEBu@~7{SY2v0gMWTPtrVM;>qVKEiRqhD&ITPYyvkym zCp}|@#3Mb<tt<~`C9XZJur&XUs<_Lhxw7~76^j3?eHe6e1|$Es5Yx*UZk7M1O`3j; zb@#R32j^Yh{je_EEPyRebaL5_-)rmA_UH)go4sL{;;rX;-m&jgLXyOnb;@@-Y8LMK zQqb4P#{DKVVb#}P&YSnU@Gaz9wBeHKl!t;Z+}8c_a8PPL?#uLd?XQ{f#|}(cIqf(1 z|0O(Ub6a~?&Pi`>;K;D`vG{aDW!2io9p~;G{HrUF<h=diCh<FGrZ4QDx}kaDFTRSZ z<tF9KeF{HVc^1rTjFu8<-*%B<$)OWUH_o)bU$;rR?#<-4hZ!;x5@LLmPPcS-G{yd( zenh`B`S#9aK2ICv8-b_4hs#9nm${(xLHi^-`}&;<6N4V=C!TGn*FN`&`TF#q_otp% zP|O=vf0Ii=RO-<~orvy@u}0pp_u5`OV0rqXcZdG3sS^!8HSOGgBv-o9`1@XgHU0;s zb2#=X`mVCE=K7O%Oey_hqpalz-+%~()8Pl0WHO5;yKyg%VdxSIcIYf{68Z4uo2#=| zRu^NOGQ(0q=j~fpSb6#+F+N-F*_D4|J^Sr%AGWwf3N=0PSSJ0uM&t*pwtmaT0K=A+ z9k1s%{J)-BxG?(T|5lw=L%p9R>z~*@IOp)L!LorN((<rwyK`RRql=kGVvn(ip12{P z=*55ZT7AXQsyCmROFl5T#jctk^t~t2_q%Y+nTu1DS9^z@yw+;&c5?Y-cH1Mb_!^p> zZZR}1Uh#D1yTrbT@&bvhiYLtq!BgAa7j*u<uNA9fXeW@I%%++Z5y@;*ab;2w!~W^s zjGLx=Fmz157_@QOq67YHhh<Bi^RAfE9l>=fN>f$!!AZY7qqli`^Oao1)$VK$j0`-X z`uVEUtpm*l^?rxgTRohX8JO;7D9cr@Kf$KQYxsNb>RTC)n=Yl6uF-8`ZeG&-EMV29 znu-`s*Q*_(JJ);XcRrjNd)=vVlDV$JZnnH885!&K$NDss585s(dZy$n94r%{_ILVQ zCcOu1|1iusYbkzko{CJ@r=uM<5|=ki$_2Q&3+6vcRN=0Setuxax3mg%@r(m$H{{&I z*}a5c1WrAzQRAv;{@{t9OCa+r-o{eK9=!+04d<&l?Y~wkw6W!_yLagmxAOOED%Y8o zwF+%LH-Y8V<>Z8f^9!ClQvF~pBUy5!=wSaP(*>O-j4uufpDy_jA*P+;S~Ba~h6%se z*!e%C+ZGy_HzZE{KaV+KW*VzPP>`&Y?}sfSK1Vwom5PsSvsv)jp*>S0uS)v!vpH1) zs%INM%RAUy$!$?R|LLmHgdCwCyM#U;SoE_qpV{Dm==;ejz3+@3@D{yybZ@jaQ)+Zp z+Qcy}PtJ((?|L7m6CwtMb^)DV<)4HI6mRGY>6%f$gSY?p#+!m-vo}`>9(UOI*XG8R z!cQXM>vhij;P_|~EAJ@A!SyWm%e!v3G;V*x`02Kn{&a<`^xpTzaP1x*CC8^+2ambD z6`0m0+WA6atM<O;g#VUo3y=6-IB@Cnj&L)dKX04*XRfm^UKbgb88B6`YtkmEryDGn z@I7C`?!3IbuvlqAinQ!ph9gx^9y|TdH#>FfssrO4rIYKvKEAj1OD>D$oYQI%MK)PK z(x+>@TBKEShBwgv<E8^s4t#&HB+g3g+Mlg=Q`NZC;-A@w%$@ScdV$XGPEoJDI!+%} zd3|SZ+K}KJ8!#!d&*5ZzeQU$Y2E#K8O5Zl99GT?vw<eXV<yyemvpqGlT=sAJXsc$w zGKA^>w|mi=`+W@^75~)FVu*Mpy1!*#ynFGSxPYKdU#~S8v0aFLuNdQDF2T!kNjSc7 zN6)+Gd&^QA>gRL33}j1sI^+6-_iGFylas!j{<3k4>lvHHl}h!z<&O`iUr-V7lKXV> z@5Xg?ty<BSrtdoZUS+z^LS?gUN7r-BaNw8PddK>TcmK+smIaUVJh?L!yu>Wnazd8A zTlTjhUA13lHACFvEe{y?C|eo-Y(B%pUv%96YV)<oo-&(n`>gGk2mgx67Q8oGWV7Rz z0H)p?2TiWN<Zz3?*)I2E`wf5eC?Cl=Cz6>tmm@E3hihBE!L4QvXV!pscDwgZkY0SG zr{j5P4@cXdPkj4t*e>iy;k*#xB+2yt8&~zx`q^?%b3HE2==o72{9UVz>)?mZZ3QlY zSKBZ2Yvqd{3b-*Pcuu`>;VlDBxqJ!vs!1wAQNDcovI@ePlFvInaNeCA@=HkhHRJzj z%e5wT7`ho>KeD>lYlp@r=WUixw!|yDIh>KR^O;Z>av*h;Y}EU^cZ&`#*dn@7_ozx` zjAT-x!?O+zekIi_w^%nP9uoR3%;uuDQNr|(+(*l-Nw0kps$1+Etdw8!AE=ef`KbK$ z$1>rAl^oXTpZ?yPZFhdkkt=d02d5by5xYEXTg2wy+LJTRU*?S$`!&rwG;e8M($<CB zBNI-|?RZxZ&~r<|>ScjWgdJllD@VY`No!Ph6-L+xD{WR)st?rB+pm^Y8k-(27xh;u zF?O1+i_g+SPxv@_S#na&i3FU;^la?&2wgvwLB{cqfaV%WmvcUIHOs;cT3YY6Ozd^p z_%9_rv!h|oo62|5(TjG8)a+MCXk!pndN6Z&%)+Dl<d)uue{bYmUEcLvbZ__X3&x)h zH@|4VH$k$gbR+-Wm5weZH&1Lj+m|*gw;?a^E}L9cS<wMULB|_xJIcP5wMaWCR9!r1 z)a<pge$By&HAP3=E4R<FG`wpWFT3Vo+>4kyQ@1~5nPMu?BB^9--m-MUH1X#<RBt;5 zeH1vj<lsLMTW&YwYm)2IvW>0!GKzhsM;m0y=k3^^pAc-jo%Jf)=AE-rb2qr#)EwD6 z^|a)JV?6s72)XQhWF4hc%CyextLN7{o9=noo_W7CX=BcE{~g<E;(nd_z4^WFm+39b z0v{iJvrOWC(Y|-S+sz_wbd(;>I-&cJS<-&b`Jamvb!SyN&o(o)my7H1xFWf$`*n}z zQ=_2REm!VKN(4-rS64H)<F<9qj68R%x?1;5dlp{4U*93A$#L@7j3-C*rbuRFrtP=p zl3vyz%dq$-|7NFJm)Fgn(@m>tm~Nh*EOG8%)Qn$Bvn|YCvx#g~w!7$5Zy@&Kwfe?` zd=h)IXE_~IS4eOEQ+Y4p^wgPB=UKFtso($lYW;^d>)e0O_WqO|yY&7IAE^^+86Bs2 z{J&hYH=1~GGQ(0IgGD)_$CZ*Enzy+on7A-<StvFH<XSw;kYUcQHLW<%op!c>fgvO( zFj*wvt#|YyHy=J_4LzSkCfk|v5nHcz{=9d_@7np&v=v1Kr!FO&S^LZ@gRk|0&Bi#P z<u^+{{V)(~^NsMxu-)`JVv|Esd+zd%j~mo}dlxaSO=(l#;8~|El~a56?v!ZhD;t*X zJYINnR_ARe^&gF*23Mby?w!DVJwg7_yZ!{p^59NK?v%veF2}6OyB9i{D5Nk-8?6Y^ zls?JzD#vAoLdB|UBGw_*?(8!&%U6rv7CQJ{*5C*$cbn$VCPt4x6D~Un?n&}g-FfDK z39qioCqJQ`uah?2lU6EYF{qzuvr=iZ`?+F<z$a~Y-Yr}h+IRH)^#jFo%^FwuOg?yX zR>9<twa4_$E0%wFcG*JeQk{s`haYO|gg@H1t_}I{L4HQH@scGvsh@UmeKOj0h(T^c z?Ti@-TvplakKS<ZF1?n#qdfBDgoC&I*NGprkQFJoq~+FY7B^9)`qAq)#cc-}V*RiB zOnSLQ=h@<3`By7b9>+&{9OQYwVb+gM`Fr`xg*_cj4=sw{QmIgDba0vcj6dR57w)N7 zzP)lQVehR&FLySaSg<4G&C&(SZWVgY6|WS_{cUe45^*<LcS`K+JCeaUZMEWx?rDn* z=B$aSZLaLO_T)2r_c^8~-zqcy-<hFRbg=PL;oKB{{|9qeq*kvLKKJjW!<yQ<sm~|# zwQX2j^iN)AWA`zhP`+o8(UDi?@FZ7nbw0=-w|S}F@nh4j-27c?ud?Ty{ie(FW;3a8 zE)Vx}3~Ha1+pzs-jIc+Zu`v710>dq9eoxX`Tyn@Yh)q0m`PmhfJPW4OFXP(Xlf9kQ zWrD=&xh@SdC#NQxo5-$Op`PDrtgzEBD$@DD_sv|1cf7OS<Oiti5a86z@cgEo^37<H zoojN@v~{j?7&4wSq_{p3>k^t(R5CC5S?*L`$0H9Jj4k#%z4^Oe=iSmxYnY7#e``d& zP<=mBFiqWL`un^4OB<Vu+V%^wPtANk|Iga1v+oE<Ioxcs(-N8C74b{U;&$tjSxOvV z-e<aGi1Bj%i#s8^`=ptCB;SSUzeFkpS4%~ms5<tLz0fV)t}0zSXY2gBUqxIiwhL}5 zl$87AH_v1Ce4XcyA8)i^d+<%?#mb2KnH!>#4K<#1E;SC$*ce&Cyl`UwGm{hNgF`Ov z>07)-{A34H_MhD;($bta+wSoHe5zBv_QAS>D<&~@Hc{p;!;bt6KUREkgU1=84qFAm zJsxJdx)&v?xnlx~87}?u4xVIWXky?dxbK)-4S#%KmEw#Qo7Wzl*{mn9?#svcJuID> z3~JjSM(>$dak0C}=KrzV@iEo<$y5G5p7CIx;?vM$iu>XotHr(YF?v`pxa{@PP1jbQ zJU>mk=wvAObB#l*#Du~=1qm@Lt>!C_obl=(@3O;(0-}=7TKFBz+G`fGDu1i8{N*%# zC!@j(`{jQYzG@VZ+R`d9g-<`Xb)({1UDtkBx9KL`A09r@Dd`kH$fcz=&2f@tL+^)g z8LXeg`<`bzZf;sRlgIJIZ`Gp~ax>%&(oXG=o}Snkci`>>gLUsRT~6Mb7APj%TVBL< z^u5pS9j+;wQ`!PcC1ZrTa#F9XI-niGW%+99tEV%}B$O|3o%zzU=mNW-+2T7b2Wq8% z{R(28BJyCNaEpS@M;kj;+xcQ%Us88B?XEIEzrUiW{IiG5N~`33V&ZF;zqk9b%J0(N zl9{QtDgy6xl<e~wE5){a+tj9IxocYS7gxXT4A14MU5$*VUdkN$W4bfO*m;59Bb5h} zGy9T`Oskm5$fIDi#Zulh*=@^>ta(~?+ov9G64epinzqPtw!??ndObfFSNo^0iuMxO z$)eW1Gwb1n!j}urgs_Fmp0_$I;m7KnCtVbf?%!p?J}>!>8KYK^i?H9i{yZ(kiG@m* z9y;xxFD$z`H|C%RZ-vsYO;aj3?kL*6XXNgx_;o1q$JFJ|8}pXvy*4!qbhl-DspNB~ zV7d2&Z%Ow*A8zE+IKq+Izkc#}(+nrKLzOO#uHlmvzNInsZ9LBKfJgqxk!2TOPMe;^ z(OP|Cdh?!(_v}+1O6h5SEPMM{TjCdIl;EV#H&mCLS?Man`u}hDjaf&#HYSHyF8=-_ z&A?^m*)<Z+7I8dz6dAp7p5?syPyJh_34St9U%5$IYKjBP_7`ivKWM)@HQCeEEBBN3 z(?EsaOkDxOucRiw3@(u5D!%(C(rix0F%CBmk%kjNigH&@9sOa@b?C`ymLG4eR|{*; z=F+#5{2BTEfr8*x|9wpy?4AzI%i1D~Ix{w1`p&OuZ!O~K`JB;l@|FK*=1seI`r!Uq z%M8}c<E}{gu>RrXEC26wZu~p>p6&ePXq(-gO8*bWRpkb7a9?hEe3pqhJh<dc%;(uB zZ6*F(k_pS3mZBBa(b*y}P5+zA6Zy2)VyxM3bAPk9-{%Psn0Qc;@j{WUhIo9#znnQo zl%C8NuoLFIkg=~rHShuZ!gt^HM!VFwxtb>*Hkm8(=v{!<j~<b>W<CFDOG~?zt){Hl zHt$5poNLMQI|SdfDo&LWdK8j<bMh2{4^0cUYsTE2am1NlOPakX=*&SE`_8lbRpvil z_roLo)<w4Gxlzl`y0a$dyy1EATlu&fUx{)`VuPSs?1IbQ%pYIm98Ph*+Hw5t@{Emq z{?<_`N6n7;^DjNF-N(OWaeLFjW93_N_F1#I+DwgDzhay3?5Wm~eslgmDfiK|6q34r ztbQ7k$DN)n;e3}jJhYOw4Rk-HcTgm{Op?3K`ksVE6H}9Jzrz*nBDT=W`ink9p8nz< zDHy=OW^yd@RPpS_!u3oGLv|l~vhB(=LEgKcnS^(?Xfe2XOXf=4Q8_yC0Dqjtf=ijq zc1jJUeXb0z@2k0JtnlyBEZ1UCT=-#v{I)O4uOF_sp!R{ILojEDY^r+ggfD$9Nf&Fb z9(tNrvF~8wS!br@uRJpN1uT6Wn^_OM`*||`?YsEj*)<9;grtkbTthc}{J2;`q^n0E z?nIbU-h%q<pr!Rj0UOFJ8QzsS`{``Y`C=><z2v7a)0?}GniUuAT*d9>e|4EFS2kCI zT!A}_ISUu3UG8_*4S9zbd`Ww}W7>{@=%;p(R|=cdJI^1Ur{!ifYp=?^X~pw7e@tU^ zpXSo_%4XN38u3MKQ&-BxtZld%72}#2lCt9mqu#HZXVWJ>)Y`LDI%Dd)k17vi8?ww? zb?)(AQ@W6~kZrNUSH_r*nJG3OBIhb7#l4=w7Uqz<_1J;Mn{xt7*;bu<qRp~$ir(~p zIhPoFS4w^MlJr`=xPmXr)XA)9R)}ryqc09yT6*;xmz;jnYN)qz&Ih6Eb6tG|8Ccab zRB{zK5+9g`=p3->+B2J7;O&J?ef%1BJ*yt<Gvq(&T9VpjvnAfn?ojBW4F|U!&p4$w z(?4e34`${V*@%PAPrV-B-#6Es(SOyVDJ=c_*2wNIl;Uz|{;T|ZQEX1)(InTx#-}@$ z`mFe(bbdWY?yq-0czGxI*&Xrlm}gVBVTrHR$x#0<{9o_f)>itxcir_Bi!^3sS{a;@ z_CL=e$aJt!JLTDJ$DhsXnQk6`b|}*Nigugc?IRo~cC2Yz=3#JDv2SOJK?qx8v6}3T z(@jTv8*-k#-0ds8d)DHB8)b6y_!eaZ1XScmSbq36YtCo(o8AT?3!jEXu5wB`Im<iU zQ}F*2zlM6z7ZMgv*V|OgIxu1NqDZrKCp0`hoe8Nwtmymr>`CkHEEm;Ju@zb`%3qs& z*{;2OjcMKGkKfkcdXu(nf?~<HzI*9Ot8N#&{@8dW*j0%2MW2yHgo53v#@smu7Q(Bp zie=1AW7_cC+uiAlLWKO(mMF#ut0h?;6SPj~Uc6qi*1f6Eu`j8fF{N{!iPiGhPsMUI zOs{z&_nuri?^LF>p7D~a)xC$<5BGC7v|QP1KK-x$guI)EOcylIFO;ijdHS14r^TTE z+`oeSitmTcomA`jdxcNQtN(ekm<QVjzRo7ylG@E}E*uprE?%+=nH>^8Nk7;uaiLt# z*~eX#H?D*xtO;DbjC<RB{x!j#OnaY3WST~bHf5b$z?5_Tkf)C48>VD+>1l2$ExpXk zBm|S*GBt8CnVmc!C>ap5IPh3O%E2Epy``N`*A%}_-|KQ{Bh&mMmZ>{$^(*aMcsDO; z)6+E}ZD&lhyrQSLUr2h*ns`)Ckl#~#QNTt87Uub`D>K|`Uk5$rY3PrcSioDv@hqNm zTYh7KYfD9G=GE-p-L{iEBG*{N=bf3vp}A{=QkCB1XU!XO4h1m8883Lx+pyJS$*(W* z=S+?SHhoGfx*+^gAY@0x1<@CR4628tm)TtTt*&#A`TbIxw2Mjtw;hhzy-PD=P^(^g zN-rd{;x3~!gO^s#WTl()%xX2=cx@Ekid=bcO}c39oBz`b%N_E}Swwb7-1fC?iMYtp zbis^2t|Rh~#$Owj>Mz^k#V2s-86V#C{X_^0pP!B3q<aZnf2O;yp21r$B)!@pG`B~1 z&co|DQLjFAsa}{=q*wlR_S{yJ2kH}3#I%co<@gPCBQiZE%~ckz_VwjE^qlFcU&PGq zPvYu$C$ozG^lhs@#d*)rXKJNYuv`yAYA5sQiT6D|Y`k#Nr7*(5A@N<(t2=IYt}p-L zm?5yzN4x!!o<>&KP2sO$44c07@0b`7_jf917mKBg@y<UbJKRe7lDTKs@2P3L)wWG& z@3JGtjb=4@S0-${#;{>GoAEmZ*(Y+0zBUhy@A)i>uevq&m7@1+4&gbCOf?x%O+U`8 zx3H4D!XP9d8fQ^05XvH=pyhYr%l`0vj$5sG6f{#z7$$Dx)BXB5PcfhW<;w>5vsxbJ z%$uB}{XBC&3QSwI=A*!u3l7)I3zmdN{ha9W+dIK8H2KL^{Y&c>Oq71geBbfXzYAJS zp11lZWNce<x~_=*Zc{>jg?StQdG7VEO7-HlO>2E}V8gGt3S%+O)yHaC5{{{9cvv44 zk}{mrIA!(J%U4+*nKsrOl$;#7N+8bS%uNHeFVkPCD9o7p)~+Oo`4ji$L?yvr2j%5m zXFZonyrX=<B;wKq7u5%wd-r8B?D~H3&w0fiV(X+64TQI>QYkIy-1MOFCiB~Aj%qt1 z-&ogV8C<ZdUEtSTafriU?F_kg0mELN2|RoGyjc@ebXyd!>Qn~YF4JQ>vMRyzSg84- zGukye=feAr2X&=-=k|Y?!P2?t5r^Yf?j*r=$_=wN#`#-3pZI>!DQQ_2$M;V+wR12Z zTC{WGiRqm^?A#15HMAeJh59i0e)+sd^J>=*rk>paK}XsgzivC6esQLb*>i{QQY*|C zZgu6GB7OF|K+lrP>0g6uTjVC4Q{3BS7d6XSTI|EGbqhAJC%qT#Vt1Q3KOml&d+V~5 z6|ITBX8SoJDrR|HVg6Isn)ypuNy0}kW!=0RVjSkXqF3FP&hM|#FHyTUC$dPVOF+2x zQp0I3LCfRm+`j5flNMhTbI4A-v~_kS*YDB~7Sq3O^>^AaW0Potuy;|D>_%zt?MK7B zFWj1Ak<uIQD5}NCu2!Vgu_80(*{L+vkhG^8d)e$y-IUL<ym6_*Zz@;yRJNrH8O0+0 zE#Y{!U)3ltq~2kwL*LYIE9xh5^M!4B>NZiJ(t>Gwp3Lf7=f1pUV{^D@x-BZz=-`E0 ztsat3#Fk9-*Gg_T;Cy%M)@09`I@b$kEO!rQuZStS^Nx$*#)ZFrXD$Ei@o%z!Q0%46 z>bRNV+TP}zTT5Ja)boB|a_WAcDao2$nJAUa)MZij^@hU#!kI+}Uv;T}yWVg1pZ!2+ zXMkz=29b_W8LhIM%C6aE?=P}AhD=U%vI(D&Cd40Q(ferDggV~WXFiGEjOd*-ljEA9 zd`<($s$;7Z(m2yqA{x~u=UlV<V<=%Q>=77#Eh)#^%xLMM3n%X`b`$CT%y4BfLrd1z zqF2*%<}q9?i%6A=J9Sa{=+Q5g70iXbGnRZTs1jTBdcF4g<M}L$-k<Fk+q8X;lZ{ZN zu@YNn`ns7DjSg;3<hmI)f$yMXh0!kS+y$qdCY`&u?aWKROBXmc_%vGh&dF(cFXSP= z)UQNrou^e+=#)D~2OdmFKjjj`Ibn-*QK!h78(;sQ33W{JYW;Fvxam5hY~-5r9w#R6 z)V`6FHuH3uUT5mfzG-s}MCQ#a+OzU|p>ol*T16-Kure+0!z~i;SwmbFy0w%n{QhcI zazmKcSxuoC)6W?Q`L63$sEk`9-F<b@^J|CJYbaZ(r}3(PP?pYPlG*qyL3-IAD@`}= zTrNJ%SWW)LS0)#&+5I#13xDw%mXdG1+viLyxx6U&%e?@b-OD@MUS~15I4_uWE%pxQ zw~x!sZcP=>I~7v7y<+V>3!Z=wf4K`1XAEVOGd{T8>|V6|vg-+_OQM`!Q!8$XC3wtl z<mG?T!MyNCseksih$&AubbYf{RoucoPkV8_0L#+rS2MN!3QwN0x+;0onsc6YvP{EN zxpa+=;=G!xuOhflH_a1uo6-7o-^J52wwyV9_kYL6hJ6xC*d<-KyPU*R=H)ji*7^Q4 zFut?@?aha_*|YY(To!%Lwtw1@J-ayME_Md@@EzbeGn4a@fR>qLv;kXtpn~hk&jOvV zrgwky{QvkCN2pk0f3^0Uzv)?rCQrM1b*9w4m2)(rtCp_}?QA*l@}--Z+e~SJP!(g3 zlf7EUG|XCNNra{79MxBQIqlf8d1Bp(4B0y0Ik`IHvLb|DM$T++$md?W@3M`q&GU8Y zPp9uY^XSp}%$ylVSA{xRrqrI8>hnb6b(rwBl10ocdHfoiUk2;^a@b}+as6VB<$oG4 zXI;7-$sNBvNz?m=tNn#5=Q}n8obS)Q%CIGD?~65-yH<sUv8mn+og%qAP3z|KK#xgP zC0!2cEh!1V_ge{d*d8`Y40Sx_JMl(Gd%;?n1IC-P&hTVTJlnO}XsYPWj^#g^+E%2e zziwGDr=>Kvec4(^yA4~PUJ<|X^f%wjtw-lNNz8aAxMIooxAuL88p~L6PTyo+w;?Rm zC2Gawd=DuLYt;u+&E)G&NB3!o{<&&D$#fwP>-hxL%2iV;7u`K|^(Dujs{tMf1%Kx{ zeb?%os`|re<K+j3vqUv)HU}E~_AgC&tdi~P6Q!z?d5$@K;)L2C%nvTCU3^2HdADDI z#-WGGb}tXP?a%N%F30XM*NTy)@s#=luJFRghm3x^|6HBU?%!ZMrTCEz=e=To#}ocP zWZH|by?Oi9apuX}#%I*F%CuZRpLgy`mYd=ZtL5k8SG?3)ywlDwp-W};veOPX6dikR z-HV;=Y0~(hd9vX<W#cp3#hAZrbLd`B>l1h=`GHkYN-X0mnR3no<-a;F#0odZbVvuD z_gq!_ccxTb#g-nywC1Sbl^3m^u3)o1tn?wJh(Cs}`#@=g@t5PGUHw)Hh3>8o+B;9p zWL*2fHuQpC;^mq$<JyZFb?FY@oj7$4ba=2`S13DIZ1X^I`9^`28w%eZOfYHSFt6Tr zKS1u)l^JG-E+lVnsXCtMx90Kcjo&uAt>fPzS8K2~|B>VI({Abc8c!EyyxXf~$Gc)} z-T!d)hO0+6$-kIc6&q*0ySkKnlFB{Z)4G2=PA$v3(bhci664HuZi1$Zc1nbM#Rn{S zS1vBGv%*Ou<a69#(YsIoz1}Lq!(v==DQ9!4&XEf%`Fr2gm>8zjIM)Ap&&~R1&-Odv z3-36#Y@2do&3DoJ@mo`8FQ}W^VZ-(!$E3EJ=^azhKDPH&x*JP$m@5SZ3l4^edf&Ja zyK&h&k<Y9h8><)?VuBU-eBub0B0E7Ys{Q)ODd*e{Dp&>=Y*O!aRtlV)7|h#v_f^WQ z+Ac-5DsB~%Y13b3eagS!*7I0c|I>rB(mk&3+X`f7eA)C>pZ{X-TVb91JnipaIbU6W z;pIaa{tYw4MUSozoUMDZ!TQUW9gQB!9p#H18(ODx>Z(Ybo#HEIzR2lLMGg0gnNMsF zEX(+GeA*1b*E42oo;tP8@T-lKD_`TP@|;!L?vaOzMfDW+TRdq^H#=rEZ^g#b&2y?k zcO3sL@o;<O@hkR%cWO4T+PZN1WA=L{JFXmjnYa0?{Wr@4yKmRLbP{N@5U#Frjl8@d zE7?RRe%9{A3fh-gwjABh9d;sbva0>7wdT1?rT!ILJBddBx+R_d`oZ6-U~ZfFWmn@K zvgR$w@t$4XvSiZ&V_Bz@H>`~`1FyHHI2PYsyEyh~k23SNSGn57nctqB)!TSV_w0=A zmOk#cjBMJ|F61<)lwLn=;V(I-y-$U$jGyu0&A!>`2WA^Rc;?7<i_0%2?@-D+4zZ}+ z9B#@1N|p=!J6B&cPpK$1Wcw1VzNlPuTh3XFpR=`j=Dm5YE>~3dT&B*~V#5s4%-NBL zQq-El8}97fdQ5wMe99kx(-+4!H%vTKtA4NY3CpgdDdj$Qo&~(VEG!r;IFIF=(&2k6 zJ!SKvo;Q_i`0*yltrGk>W1;8u?b~f`xouLr5$_j#zB?o@AXlpEe$|Oz*Iu&w%#JNO zrhTMH(L0r`dYY-KrqbcbvdcZXB6YqP+CMpywPwqKh5O{6a&?^2UU%Yg{`4a{x8|yC z4k&JWX5`sacHCK|NT+dwOVR0?2QSi;GH%CmEU;1iYVdzoqSwyr{$VRGP1Y(j5!<<4 z%Z2+9tL0OhwZg7;lMf#dwVLzMKc}Ml`qzxz(Mn1;{URGD&)$@IeR|Ba4+V?A%?#(} z-ju)O>MJY76n?|yy+>DiD|>GjE%mKiF!89=6;B_TZmU-kJ3`dCQZIg;exo9+L&84r z9OD#$u62nH>jGo$wg{D5#YTxsFFklIKx)zL)xK|qber0y3%yo})pH6gEd3+AHKTd^ z>cUGi=A78?^r2#+=!q4#ciJyIA+$~E@S#gCuIg7OK3<b4a-JzFcf;MX_T%<%HS_}} z-#Hkga!Pr_-}UXwG>%=5R9SH8PIa5)OfUNz`Ru=+o;E!ZX<7Mk$`qEHW!o9LXL(rO zZ#QaWpW$q3$iwiXV1sd4_tJ`b2aC1WPVfo`{94!l>B;+ozBONpc!L&kvh9Bw?lXDL z{uqayS=EcH+L(|1{TuoE>4t)aFpZz4Ywk#<IM2HyF>{UYmL>zfi$RX!J41^?eNL+` z&SL%l%quEf=5xi2cX1ab_KKc=du_3;hgOf^j1rrIRe~!RI>ggfEDl(a%iJHNxbT{Q zZ{Lfb9#T~;(I+oB=9Zke9@@1{U31sm8t=s8`$8A3_?TEVvx>K0<h}j1=^QVwZ#_I^ z!pU7~-}_|k7(9e;Ti(fFh&d&xe!ZvX_(eYc>q6R|IZRXQRF)WJUsQ2%-k`X#AiLyL z&=Tf3_0=to@;mqFcvNbf)JeCDVQ%?3P3}kIlrPtKShXhWZrmdMl1(c~!Nu;7LEhR8 zW$pL2t-Lzv+_{rN%`C}Plax*g&A4OpIalT0>Wgoim!w%QFW<h^;nuq43m+W_zIBPC z-E!eKhA!FXaU3%i?3T&N_<winyVWyJScUy5jT2q4lT~2$p=T@J`>@Pjyx9AyC$pz8 zYrbE)kkRFGRtv3-5qja<yqWb~mzAg&J1CrLn%>5`Ft^KFF!No=k;zOOnLba=h_@2h zSl=*dl6boGV&ORtCj`AnvEKOp;*3s#j%>rdr>`ib>@KV5){>}<ac5Onl|8X5gwgbS z*8>&4tcI4m#wWQi-SgSD{m3kjsWQoDByU9iOM5@z=<b(Yt7~^(Ir=7D@%aKrxy`3< ztFTxfnByQTtK`o8hbv6z{C394pINr?{B^mLCA4vmS<0=DmhvxK=e?<4yd>hin(o`B zCk_21P6zPsX+GiS^e*}FAFm@za)h$-95*i0k_a_@zg0nxX-Al?ChNLA78Aa`+_zP* zY;P=+*V!=NlS&3Pf1)~<r;BcMl=XY>FrVAoX6NOfaSnTQOs9Ui%GkeVr^oSCKYXX$ z%95JicGr*He8-B|u%q9s_c(tp=C<{Ga>(1^6QlX2DGr;t(k`UDnQ+7O<^A5}6YgY1 z=id2!a$DBv5SNu&%Idcs-ttv5-B(&xnV)!B)OGKT;0#^e4fk2Rw9hFkZPb0_bc{pn z!@7;45`8YB@22fs^zcsf?D?EQ5;J&btmK)~ekP<-ua8~g?DobE>pMJ3XAki7wD|@` z&A8J&$7}VXo7ZQ(KI-kzTYvp)U1Pv04kfYf0BOy#Yjq{<j&*s<FFd}-x?@7+5;mz7 z(@xd!aLf?MiuzHnSNODT&SvX&4U3egZX62tmoh3&Puixdt`f7)$D1kG_?U^?C1ox> z#l^ZDDwnKt)sn(BLxMYA>ZvZWnx7)da4s_Rm<_}7REH;v1H$KdS?RXj-LT5?&ioBa z3pX)O<_?;5$!pTft&>)MlD%Tu<;66Q@7fcl(<O#}S7h!km=eOskZ?G!f9lqmljAOA zE-u>5^<r7j=F=Cl8y>H=yywGHKF#4J>qf!FUmw`yu<{(?ni!O@nDg$Ub1yorj%;1= zEs06dL_@2APi<j^m4%Orqxn=n;g$o=8*+q|B{Tinbt_%Aw6jbOP#3#+E$<u8ZB@&C zYaTZzh@bad_DK4gv*2`|2e-JcFbA4A{&N(KF*^Fs=Y!6Yn%x2KPiYyZJ}Ix55mLZ7 zrR)6r%`06iP4l?l)y>P^QP30V$tzzOz^Wu~E8DPjX42_WxA03z3xe|Q+}XBgDg#@j zPF3f$=4W9O??km8oPFuZ7pLz*u?d%Qtc|C;WGXv<>Upre>G4(8$5$n<ALj3S7rA^p zH|sukjTFYeleiR~XUtm3p?zYRrsf%eyAJJFPHjJvw0E)DpX3*n>)$=vWL{#T_Hv8D zs?0|1Z&@cE|7@IL&~*7|?&fBXJwIhS{7xiyD#_I(25&NJzrMw3_5{PQNr$I?WnQ+C zWzj_5IX5zoi0gTN@yu#BTM~S0{jUiJ6CyWz8Va3DJ8aQubM45-guC)9^+Gknf=?;5 zBpB`%T*l9>T;RuXCF<bPMW14(pKlF+8h5Kg)>rj<7l&5#>(Y6uUc3kIIIXLH94Xm* z;4RzxJBvG){K>0%ZT2&|weZ!d&22A_?7n$pQ{#3HhO?gz?XQ^~rxzHe`#Nj^qnnlA z58rDZtu23_g_&&MbZ$l#N3GO$>l03uA&2gmeLImQeDaS=Xv`0`hfCFG9|`q1mU-&f zApsAjnc;3}GA2P8`!tn|51lPhHdZh;k2_XXr_yLEbx$IX{p%E_O()#vT~91|#4YgP z&^#MP)=ihrvT+w|_2Ftrwr&;;T{2_!iHBE|*(b!GUSQLC_@zq3E2o7_>ttls7q_vT z_&=pTa*Dwe4+%s6*I&7k)=g`)Xg2YcGIo02+S}^Hym0fRW>59~P2cCToo}8x^JWv< zbS9l$r#n2&QXCqMRrYRhH~eziq{S;#fKT5n(N=5$r@_mzZ5Ma#I+)uNa7D1rw_fK` zmsv~sBCe&M*+WmAeCO~?TfF2!N5IOe)<Wkew~q1F=`6U#KEr`uZt;Yvx9bk?IV)Dd z-)Zg9yom3BWhJxasZ~#wCv>cy#KScw<5IxI2fL>599#QHBKY9qPQk84i_UoLS?{ct zW^_W>xXMi}pf^X^Wa_DH#wO{tQ_Z$bEPI>BzdFZV>4aft&Y}-Rd^szAs>}3oY-`Mq z`Eu3L`F`Lfg@<2HYp$Il>;2QiB;v8bqd>#*Z3=qPt95T4<O-MEJ~twDNB@N%rCZ7u zMsHpG!Q*wKTd{lcw?$&Fdpfx~OI#-LsEeEX?$p=ZRd#yC!`_G-?o8=biOkj>%T}-O z@SR}AW9>9|v5lo>MC7Zrr&9eycYSEM&Ae{wlXDzDMHXEA=RWuTGvh;^tScQ>KK!v~ zCa=avBfFzXRgL`)R~{`jQOxRSH{r_QyE5_B(f5|@GRi5*&$J&iMSL_mz!UDed&`%L znrruVpHDY<S19du^v{`f?aGTHw!i4zWwR-DN$BJWw*!s^HFFyupSHiz?8mf2;f}^q z7Zrbfao8=-8kp%E;5U0-Wxd(2Ha%0;hHt5R&Gck-)tO#*q@=A_+N9*MCH=_OAFq|y z&-m)|rDOB%skb7Ngb$s1U@TfMwe;;YkFAHRR>berT(rJBI=wujN91FY=j0X4^94B1 z*SK6QexYjb=A70xQTS!%its?YDYhmDb-ro;nAG<w+EZ$k%(S;5O(iQo%`RAVZ=NZW ziE%B<yz5aM9vw%Im0Vi3J(@{DM>tAzlA6mh7RK+B_q6h*s}&twzf0z6i$VUG)sG@h zo;o{gip-}Hk$rw){FN+5cHX{%=IVT&b1t;J{Ip`;@%=&Xd>pTG?E0$rjFF{bv9Hbl z6?re`w9cGzt}d_Z@1ZW=N8Or?(lMTCjQ8h%ICeD6O<u^plY?1tj#!95Y{BQuDK#55 z?J#rj&|zswu{rvs(5)w>cN0^HimZ%BSHawAQ-3)4^*(V~Fn!Y8PYWliymX5UKCk@h z*kTTyfRzgi7RsM$F_efmQT!Mtn%XQYp2f9E@3-iow~-5uG)<Fuo0`?P!`pYBh|-da zfxgxab|-^uI3MwE3fVj17LWGfFC3N+j8@P5wZzDcf6tblr;3U$cJG@~j5f%pom`)3 zmpUh4dI=MYuR*1zggYb8w%iQP_stEhrcQGL_RSBRRgyW4!!>Y<Pf5z#BTBPw>uT-X z+|9((x9V4J`mzeU8y`Z-6IH8t9$DS)dHpogDcD-8tEtJ)qs}C)^2O?MmvGHZKkWY2 z<~p^sPYZj<?{tRmcl5%5gij0s9TpFJPhU%zxAl)N+p_6pmX7Cl^M+|oKK3=pW~c2$ z<F|RDk5)2RE^S-#@ph0_9mCwv9c@2nyh%=2w_~<7Z@@(vqXUBO^8{b+S<iFO+I;&g z=Di_W2_2V%%J=;Ysc`$%vS^RZrOEX^E}T!@dODt$AA1oKa&F!qSrMmWOWTyI&mD89 z`J^Vrn|flRMrUZL^cLGM#;4sAS{CkBy`=G=?ch3{{j+_PUW%ljxP9*2Nrvwie{9%v z+VlC9g$6T|#B+SEXf3;!l`g~*xTSyU-7A|*B)K>r8HV4Sq<XB2O+biAaYeFWZivU_ zEKALUD}!I}{wOp_Ldbjax?TDSUE3KX7A-G65!9spe<`!QwsD_({fQ@gj$cT<v*=)8 zviaVx-(Rj(l)e>nx@4!%8CTEVw=BnE4?jD_xqkyglAdYpwF91~-ybXWYwMC{<h<}b z`-1QEB_BJg6-vaXOS^pcv6#Iqjz#rF!By{0o$#U+tBhCfQMtH@^#=2Y;{jW8nl?Ro z<8)%;$^B-3`6f)AvWVx^#E%zhN_`ynmsoKvo@W|rYqc%4HB;o^;=P5tG=p?Fgd*>% z@6&toa&6n=I$@*d&wL9vet)<0K2McT@KI*g>2DV7GMi$e*ib9=J(Ab#OgGz~C~19` znJfJ6oYg)$S1pfAPJ&5rX3niHTjk)1D}H4wRpy>(?Q=PKetDPtwI|&dC!bi#t#;wS z&nZC{^`C8)?AhbVyX@V&KK5+Y+cCx`1dp(kG1^%CTpGP(*=~dN;=GgPDmdb_ri-Sn zJT<fML}6u+o~MKRZMGsqF`bnYJ8BMHT{>O-)g-M|njCX9i@2*+cRug1vc2LwVV|qY zvWT^lQYIeNa=ygQFJiXJ`;e8haT=rIRqoV<tNfCT;zCwruMt!I$DwPXefP!FQvGi^ za$Po-C(i3RB{O}R6a8fhYpV2>o36<fi!b*+$ej9{d8+ub50di@s>L-jeWsLr*}K`a zDvoDXw~+j*H|Mz04(7g$>6mc%z;_d_ZCCDhoAh2*K6|)>Q)2@|+54DFW?h|&f@V(i zJf88@E!%Kb=S~)H6)BgNxeN=MJJilAe_9%)_`3Q|_mZcKf@0HJ9_RHXoO0!!ef(?Z zBF&Vj<Xr2z!xg5NtvjAM<QzG|yQ+*?P;}m;R$En%jom*TP0aju>oC|)*kI^;=}m>5 zM{2Bblxj>tn9#Y)JG!)PHNO0_iSMpHZ$oT*@FYpEw;I>`RJ){fR?JwD&v3~v#Zbeb z`>t1VjrNj<yy_XfD?a~uk!F&+G0Jd?=Q5{*b$WMB&okQeeyg>$!kSa*o_mFq8Z!HW zALxf@=lEYPJ)>z~pBMO3OeArpj>@_t*?)FC`{I4oMJM#EMF3yKC+$0HrZ9!sv-5=A z`r)Nx_~BP%ThL7Z)=Rt}HqGo}dw6YoitEEE6ZP%tf8Q?7YLZ)^?~-;+W}TzqLE{&q ztQ<b`_8xc|Am*EPg6*2ld$lV)B_Ep<IFyWvCV2J+*)~cWx|!;#^5qqrys+ts+cdsA z(Jj-%b?Y8!?G~;0R$O~V@nZVXko}#iA|3t#SHDVLOh0l#tLN=?A)7MIVheYp_>5he zVFBybFWtn>f6{4zOv;2;L8<e0YF@p&evN0Iv|>?;<ud6K5u?L~C39?R&rWbWb<ZZk zIxLd0d}olrGo=rcw3UocGroSWy{f|f;SZZQeo5oWCWrPYH+?!B>sDXlcr*HD^YyYR z1$(!%@AG|l;nb4l+a<3HrZ1cFJoC`K6FXgaSlwN^qi$JnGd-0&WRap`@;d42J@0qV zUcXK_T5;mpnv9$0KX|n#dx|hmG&&q-^~X8Utn<9k6De7Sbhe_G6K*>m-kNr1rob$v ziSK<P7I}HHYDu`=yl7G;zDQ@TO6Q5Gn{)5wvTWuRQTTjcf0@sc>_ak}*KFCgLT0JA zsz~MAwQF~TvTsx8GT~Kh+Ana?%-Y+)t(Jpz*Y1k-ZE0up5(6Xo{U&^!xcNI*rtw+b ziWe7ePErzA`SsRw0qdp%LhaQ)T4@TAyQ6kbUMZ=r-KYIH&}){%{OwjvbG4W=a$24Q zoir2de6{b$#LF{wytt>WFa3;XzKX=jBCX{f#!H%6LpO!1US4yKandF;reoX9pIgrS zD|&m=RI9EZ3dS;pg7#NGNG~wfGn|;yGmlMn)ud<HbCu4Nx)tqcc;(UY&v(7=3de0; zk}4A0m@6G8F1IigdVbjZ!nwAW=V~|Ko!PCa!oHBRaH{qKmA5mPE{k(puG#X`!c2O0 zliS7R-s&s=Elm*<V!EE?J}qfM%-nKDnPQ$PGaS#{i!bJ~b>DETLgkrV?j_z(vGvz? zwY5bi>v=D|6S7JD&;1KZR<m<G7*cm!6IOq^BXEv{d#i@_h8NCrnvN--+j6CF0Y|WC z#B99+z0;8<j^FrS9My5?-+Jljme5NgyRBHJ-&(h+@{dk~L`$x_u#)m0x70NEd3;KZ zj@+kqiQBCIE|m6_b&J@A6E{j09$zrwRa20$wsc>S`XaZ-(;AC)S6c0CiSXPg5I4Cf z;miLgb@sKpQeOVv8M|er#lmudW!5=GQT1vb@_)I)W9@#q&-GN~Qg=RBs=R0Zy8F+! zJ9)2RJ6Sj7!tcpRiTR;dr`}$BPG50>rqp>8r)3HS!V#j=B5rcXb^D&4=Fqw2a8#<m zsU4A_xr^jPRu(L?^oV{c6C%!;c=GA~7bdMgt~c>U{4tskY8<fYf^H|*422o1E#rO% z=~r}Z;L^Aza9(>m+sfS*(q#^gPv`Ib>iDGWndY)hakd91)QXi~R%&iM60$-@c>1f^ z0(Sh1wkh)5Vb4}rlKwD#mh_g}K3^CYUP(~cyh%8u!|0;hpEH?JVfB%vTT>3ZW`!)c zuN(QMXw|;VWlh1G|C*#2&dp?B#I{%F`M(nnBIhmQp831ek^gwhG-qS03<V{vreLdF z^AC4D7}LsR99Zv#=6{;tw!C!1SBJV!;uE!|B!n9=z8BHDz|oeg_b~L5UdrLye_Iq5 z2d}ZHp6Ik7aiY11+8o1&Vy`O<**CMhDqdOkv2(Rr!|XZCj!Qhxedst*W#m{Ee&~K; z=&86_DZgSihX*WOyX3X>o82Li#kX2r(zvzn*2%atC+xhsTx;g6%Bg;9Sh$Z*UVHe$ z*)yhpn2T@i_^hnBv+en+<4)((dasyr9=C90__{M=%AMocYHt-?UzyJ@aPg6Ob)oq+ z=LEYQGd{gbPoFB1oTO~j_@Gugh%adN!?~RspS^n28F+A|!JbT)Q@+n0pOd*Odj0W> zE6<x3hXpE_J1XVWWjY#ZUI=*i@A~WdrTirmrNzEJI@wdk@NM6z%{RWNDRRE5c(FHS z@4e|N2U?QZ{j-EzuFY&ntUWHZW(8x1yZ4qgJg<r)%<2yEtGn}0TWopt=EicDVx_#) zqBQ=(2`nCe&TGj%a@gM@rR!C&MY3u}5T}=zjbrALLyK7?Ufg19HQn;}_{UdwuIQau z^vhtY7l*51@5OaZJyBnbY%VzR&oI65{a-?rMCcKvBrV-jIX7BalsSZB_pND<yl5`6 z%7EjoAa_Xp0rv-D8vkcpT)=-NI-<rWW6Sx1%I}Y#Y;j^Pe#g%i-N7O?<?2kC7YWu8 z*QMFnH`#C>k+HdI=AvuXnQiTzmv``0*R_8Fw~P)1|COrvm|Sp}=jgHzCvQn@eq31m zV9`G{!Ptp!?h5M3yk+>(x#z)*e4G2;#Q|-$DQl88eM<RvS%0RCz!kob5|x>Pc}*OQ zWycG=l^yump6~?)$IO`J>b`S{7ti)mJK12%D|T{^0uNs`_ul{F_bTm+4vYV9lC<eu z^;ytC#cGPfF{v$23)fGw-#h#ER;l9Yi;~NQ(|(k*Y<c9U`+>c1pKmJXk??l{LMAUR zo?%?Ux!Jf(<WtqL-KQeB=blz}W>8~jU-mwDVe90*^=o>37Bg<-PPUq;v~14qP>z`m z?_MdXEMZk&aF<8;w&xLl71`^#SxkkVi&nqOVsW49%h58$zU!)|3jZsSr%U{<vWFUO zn72`;QH=M3;>50|)k1I9ZhSb6J@sX9w$Ry>yI~jKhWxhgNxfDbqO+Lo>B^T!v*$iB z<+(HS_>MP64OYEM51+W@_AM)hjT=vd9&G3P(xrH1(##OU+inZ@Y&>*TURdX(QpwIM z3Qv<B=WL(YC6lz;u+<>Idf~;~%FWJGSIrR%OiFE7@W0CNQ_CNxMQYCue9>?bZDKU- z75dn^rseKc#m%8vmhUFqFjm;~`2OF=YyU{P^@bHcc>GkMVpDMUe5D}kBi}bm?RV?g z9J;R8u;NAl+Z6fNH@(=k*{ZIcD_GVsk9XmkYPU<Z+M*9$UU+Jh*(>S4G567_ojy_r z9OgE(O}~6^TfoZg=S-`Ab6UD)>{bw5m2DnyF=Wmh7XwBv<`uCMC1$=`#j-N|O=?!# zU#Tm4T}nM1Gfa1<XmHP$PiCu0lr_AjcK0~bg&Ff?TNxxSm)|<9sz0mg<b?D~$&1-` zi}El!T0GIayIHVXVZra7%Q*oK*9zp0UVoZx`!n^-?i&iGuP-k@%Mv5LLR%!~#SMj@ zwR$t$brw%~yGqwE?{KxwtzEPCr%e2{{ag{F?Xq_cPN#3qohzE-zI?*cjUJDtpSD=f zH}&`YneUIZt)7>qJ>xQ?Ht)@)%=NGQ3j|_bw4G&7uS?|&aNxb&u;bT<;GFjpp1w}p zp1@kBmfV?O>QR)KsHYPf8?xce@z9SOGPfLCf3#u85sr<Tm32{81(UK^cG!Q>Tk?kY zSW4++qn!22j@*Axvh9nOuC#EE_j;a3JY_pn8GbNsco4V#g-zfA_Ps?@t@9iO<QaKG z?k)YCcAV>)%8TD;6Fm*n^kWhVgudE}nXueHw96<WfR+2*x8-wluS8^dI|y#w7s*;s z7t1u0QN!0vbb`5$SU8XP(Z;ShjrtN*j7bw8-g^BqLG4k?Z;67n)(@A=Fx04+zPvwh zYw)}-v3t&M_uRT3TEpy7uJh`9=%Rw>>%AZSJo4eA%B3Ys<O7bTGOPV7D~tI3)!|h{ zW9(Yd9hOU^mrdLEQK}(&$99Jwyqn}E|5}nUMMpD1@&i)<r;&ijP8oCI!%MU-Tb$gg z=Ummv^Hjo$)B8&Bv+@$--Cb_4SF5ljDmn^qIq9oR6*gPH)FE-lg87RSVgn^=8QyJQ zA!y$;W0FwOk2l=?e%s}onI4&Z^qRV1w#T&T?@NF6P4Jj`@Nbv{6X(Ik%(lxZ)`3S3 zvzvN+JCN@Ebce*Och}$WOK$!#;YY5A(z*3Qj0(4Ay<TRZRKj}9XQ}eX0~h%$yOXA5 z?kwGw_^{-en`WlwLPue{&9l91uS6x?Je1Pg6VP#c(}G}mwY+1S3qqwAEDRSbXn1QZ z?(J>H&R2A5iGZf!+@9l%J!u~m6n%{4Ll}~~948eDOsEy%Q8~x@+enY$V?%g=Hgi^i z)dGW_{FecZVIR!iDsDZy;`rP^hHWPw3)qLh_+aDcc(x(XhOwA$vC!QkuaYd2DwK`} z#h+AKbwK2ef#k;bJq)M!8cFS`YmMf2d}?Cvn&zjsRCL9*<bAKawzMqyCKkqddg-xd z4r47-%}dH0HBqXD0^hh@G|q4yoo2N}?uL@oiSVl0XU0`q8s_9#oi9lgEIe?|fZ>?W zuWx7U9J02(WDR!Ee{!(rO*XsqB%>d8`PZX;Hmj5h%#oSno+{jQGq`C*?Ej{!z{>|h z5*v@1EZnTFw8|&r(UY&j5*BN|PV+M>yd1IUNYtS}*N$brvYXAz_@A?}Ax~%KX;#lK zTUV~LNq-~#cX#~uveP+JxleF4yl^|dul2KczoDXY|EekFPnFBr9|)<<ZFq7nvm!=I zS&L6tb;ezB>zb(9ZUW{)P45c~+Kcn~KU%Sxt&DEHe#CFJhwiV;vNNu(echYgJ*7g{ zXgyhR%koU}442^P;u8)ScV%>XB-~wZwcM=6>p-qy<%*=fsRC!^RwZ=xi@2?*vZ!;o z;kmYP2UlZbw&t}f^7)s$8Eg-A_RsRjx6^c=&RMe5AYt3SNM&&seFtftIqWv8xp-WI zjQX~|n(=hex%7y`lDY}H#%#r+yOh-2pK?s;4SBNJd&lGGE9;qWGPo|irchBC+^|N2 zO@jN%BiTba`wZfzJux}4TUs^a$RgK<H(ipK87|25S?D>-F27S2Qxux{;+>0toI+De z>?+m3>7I@*hi7ipdf8kOHetrXYxX^FH@=y8$EjF)iiWa};|3w2jWgZ6ADl8dX)JxD zdtFy0V{V3;jq9hjfIrEN7p@deFqNt0S=_p%@$}}+8+cd`@}9P5;*wKbnyN0K?v%BP z`FH&VB~i}h-M4zDyo__s;q2IS_1|29h*ht%6|I_%a{OpeWD&?Xd!^)r@68i3XAU;q z@enQ4cIh@3(fp<QaGKt+hKZifH>xjV5sOl47B-07lwNvWxk0%h@X3?sadtna9y-Lk z#50E{CxJESkF>U<>qGI9lhFmU9`RjDjSDW$+`@X2&v8jxnP5d+xW$@N#&U;Fzxeib zLWZLAwFBiF1#H-3m6%s4<?Q6(S*`T)fb7k;msA?Fm6#K`*cAR-sx&csI9BYM-j#D< zp6JUOJ+_G3vsA83@t&|c<{aBKrpiD=Zoi@k&i}1u@jHb=be7$Sw0g$LUJ^Lz`_e;R zoW_^4i-MZ?W=&uF?2qXkwJRLWHbPu_4k`?{8~*&sn{fW)J%Ou_9ZmcU^p_kyBGmbk zIpP1knT-EgnpW5{?EAjw$$IN=e|IYG=PQXS7j2P0!xWbErCBY7lPi7tKd1S6|KpAH zxz|0My8Ksqq??0BfV^R8kK6Yw=~EU$M>8e54qiRV#WMf!ZmR<Ec}X)Ki2w5Cf8ZhL z+S^_?#bOf2#_jpr>R1*%Ogfd^B`Lcs)4Fu8v*<GSGaLfv-i2ShG%ZMb!2{uo9COo3 zq?mV}RXDcry0LY{wIZDjyDU8Pyc^z5JE1hwQ|#Gc(~~b<@7^kHxKSXhch=57QZqYq zrS-1+Ikqb;r>ZXNd6NF1Y-?J@3TB1tX=h$;i_(c~FF6<N{`IZvFKIQ|Nt((Z6?FI? zG~Q-*Gb!a{+sG^%t$aAi@6P|w>3jm-f0pz`@L1Vd2u3P?WSTwUfu3zjv4OV3Ii|;w z{VCV>buIZ7y*O*n6VKk0c8l8{zpV`4<rSI3>HIS*<KM1^OgG!bPcnX*Gj)9_untjG z@j7D=95<iAg-d<Hg+syNPL8Ll0+(L$SexOg=K5rZXVXE3io<s6cnY`{B(F)=@ZmCC zSanZ5a5Dqb&(;gAz4>=_9ZF0*zVyUfIg6YvJm$%?DJEPkK{q+&_<6gH^Vc2TEs?>o z$|wCn%U`jRvsUb1GU40oMHl9XHC49D)jG83m_9M@p5Ex?A++!Ekv|h=UwG;K@3)BA zmrL1;4P#q%Zmo4Z)H=($H*(jE&DN8){V7_g`@&dY|KgV0@eel4=-%)mhhc(qW^e0T zrmGVc*T38>lNWs`{&E@Pizgp>lfRvNV6*hM+JfoghDYj{erP`WuzF_1C;s!zy@eOp zm+-r6|9JJDobU|IhrcY<w%(D837?br%SVOj)~C)5`8VcNan?UgIV~D-N`!G@R_T5= z>&bk5XVz?+B)fQlU942?g{AGU*8f*Ho)*N;@II8c>5ESKUJb5eT}HD{2#5d5o9TV> za6-$xscEy4_&4yK7h+ldKcV%*!9xe#)A)Aq>Ft<ewVAJo^PdUF5r&iuw=#`H-9rv1 zo6PEhD|-rS9y~tLxX;AmWOvUptrc%y*$Y~m9$9<f3iIJ<n;hhK+jJUj-Ezu$2Y(jh z_5|I3UE154UBv?`+3cTmw3tn7VlbH4`~G_NriSk8R(!<|8mwjtpX!=>#>$9W?i_=! zg=+c6J3ljhI)Yj6X(q3{yM2|s|Bvw7&fi!a*~DZ%Z$2oqqCkshr)L>Y=QTSvosI?i zlaJrOxZ&&x9gcL-U8Z-x`*fSmKcIKEi}B=Q$)2rsLQ+|)D{`IV@)_j<<|cHoCZ-oD z>Pu`>sVUf%d;a<)FYAd%(j_!vj{afbO}M$1UH`P;LQfTu4xK#*@>03@7ki0yG#s$# zKPkB=A-?YQnw@1UobDKZd;Cd(@d2k*f7!vt!XE~E+I0-x?l66R;-+BmuIld9KW{8H zTJXljsNK*u+=+K~lg!1EpqxMH`~nUe;}-5&9wg@$zviopeN{u~Cl}9<6OHd<8rK-? z?^*8^b8Ke$i>8?!t|}+EpD~s^IHzUc8smDPVdCLs8y2wCblv>CON;68;mVEA*bjIf z=PTg2*|8<y=)9AiZf-|a=B06#arg@gO;&qdx%k+;+3Ri>@!ZXfTP>zn)xv9g)ppgk z_eN|fHjN4@Oo=PbtLW7BEKOc^LAYJ*%PzH@dnTkQo;6_>iu@@U+@YhN#&F2&MgOB) z>_1)7Eh6Lj9vj_BpX#Bs|2D%`Mc%4{^VO`k|CY(iK4`nNH29?Ka}Ilp&li@+%dkD? z@KTW1)r%}Ec(ufsJ;NpXWS-U9*t{DpK^qyTigp}Nj5YNMu}Hr7qlmF!M$ekIwF%Fx z?km^{D$6l_UMv5u%J#X@0y(RX>@0!nH}3N6Zq|Kh%p@!qadUy+&IzZ^9nP4r^zb9+ zsoMim+XWn0%D#T&*rc;hxv2jBhEs8dE3f=rAa&}c?Loc&Z<A!6+v;q*D;dDf$eE?} zv+f|v$$&5W6oiwnsT*u#iT>uef5D^Algezr8O2N3uH=iTNx#-J<!0z%oh_4RpLVq< zx_YtMYt;j_1ERI;c?W6&W&~<y3Ad?P2%h?PtjA~h+0{bayJD9g3|@0gu7^)}+lSgH zp-XQY)@yZV{Op@-uf6r{1~;Si96KTcHP-AC(=c7auQTCKQ2xEy(is^hvFl~e{0chF zvuln<hC8>!^Ed|YyK^FCTLRA>da-cX+|>uUJMyM|TF%|-UwV9p$b{B_@C7zg{o(^Y z=dCPxAheCOmG5Wl7snk&yY64yE|8+XlyQsFc7`rTl_Xw;S-zc77IS?xN@mzs99p!r z<djrcN9^PS59Dgr-?s9QVRpT0<TKlm_4A3NYV&#ayGZQp+0kdrz{F)SsiE9#nq#F~ zSajNifal>2mz&CZ8dVAmCz<Zsm*W1HH_*YXMfm3Q4KMQ~CyCBcn&{M5#5^Iig5%7> z%`&=KUjlzNPVn5;F-LwX!@;eZHyM9d9nf&QFl)~IgG;vTSQpOxN0rOlWtslNJ6RWw z%vz%E)H^|=S^M{rqq5H3N6xLj>HM+p?TLpH*JnMhbUb@>SGdCIDID|LXH2>$o0aRd zX@lmYc?YImIQaE})T>+DygnRV*BkY%O;q{T8Ghycs>(0SPHr+^yLoL!MOyFcdzW*! z?qXGl2utKEu;O(sQ8IEl*KT)=C0xqzfVj29E!Op?{%lQQZIqKJHdoqmWOs^`#il8L z?`Q>N#O)WC`ln@HAjf-DPE%&5wu;CEb9OsPQ|lEzwRaPZqj=A;>da#Pc}Y3B_wbD4 zk_U|~BUF_hJ59|vA3pQNp^r;e1m8Pg6e!Mc=D%-vW1#_~&JJclHk$^QhyIRnC(9=D z7VhBxU!k&Rq1TF<Gg7~11)cAl?#QNg>G`9Ro+6I|BkVWw1T0{C(Ya84qU)U|Ly^gH z!L#xfznftBZ*$O%_^mGgSLuoVmoIfcH0kMugaqYVyKmIkKeeisOHRD<&sfN^ZN72d ziuh+N59>T<32eJCVITjUNg3BKdepQ{Y|nkFc&lfE9UDu=?8bN@!NRUvv!sI^B)AzI zCB0qi4pi4_$sEXU`WNS?@%*6DqP!nm=0~19m0aSM(7Ki7xeUkp7Yi4)d}b17w$tN1 z;^n)32g}QsLM*&a#}B$V{!m!|_)covS6AHw1%3xO-R2ngS6!O3tx2;zy7^qgt{Wnv zVQ!uLeF5iH*}ThaBmSFoXiACvo!I(gN65O0?QXlD7I8-8)*gD|l3~`;(q74}=;OpJ zwqo`4OV8fiGcnn5tae4Yjp@l}i`=<3Dhn-|GUMpn!zcV#PMg|MS$h2b4y`+O2U~Q# z16;1GzM+5pt3dr8hwQgq?kA-sHB^=+E2r&o;CUA;;I~ZoA9FLmMbWH=En2ZxS)ZI0 z4_uHtN7jqu`U{i#^hHxH7Vj2WSnTq5<GK$PQA_hPx4B*rkkaz+VNhJUS^K7_mXzM4 z84I`t*g}1hPBo>jJU-#{)7BR}8@P7MtkAumKE3KROZlzk#~2@;p1*REjsu75x`UdA z$3IN;I&3f1SH|JI<=Hj`{r($#60;-^*iBFLIUv@*V6$0{<S~a}0j}isGPzR|XL2;w z2^S}w$<ti*%d&b(r2Rsxb+*Z2T9O61>XncGr!77GD(tvzeMd@9ut~#aFC&>nVh#cx zEe^3^*E&wj`w~3e#NY07OMy1WkyVB4D|<VgTt3W<NP3=eX8Naqf@N|KR@HF)J@waR zTcmb@*EI2P(XYSQxl9k9jQG%$Fz?c?MJgLJo_^rzRKM5NbxYxbNW9M~)0J}Tm3L08 zW;A%9l&r$L#PxCK@obNcP9JVdSj!|c-B(-S!#2IZw!(U5P};_KHflbfW)>WfGkfgZ z%9oco$+e(;J%gYeqovK)nVXX<-8Xr}JgHmWduEGH_Vc2gm?j;bZ}O*w1TI`rX+F|- zEoJ7Ft*%QBE@n9M)NyHH9`m|Oc?Y75-tO$$<nXq3VXc^I+2gef8K$24x>C#Odzrz} zg{23Lm~6bb^yWU9td?bRg{4(QP4lqAQwNTZ>?T4x1^2VmJPP#qe@J$f9!GCdxW?V+ zj~CSrzL?>sQZYARQL%!d<x4KtKQ_tiO}X<ub{r_*%98ida=KGa>K3!YcX3C#C-)~@ z*lR16cQ9V<?7Nf&H!rY#G~zk@pEYLYg99>4=ke!nyr*v{ttZi%)Sh+hNBTSO8NW&y z|7xGlKYVp#@tZyU$F_D_dvWOmW!NMOs%GlRX=iZjJ$H7z*JQa(z5c?BO|vGYaql+k z*cGC@<l%A86Q;%-uh-7M;=a7!!p7_7zAF{q75(Qjw$J`0)FOGa-T8#QrcPNv!NZ&F zMutxsW>hTqP+6LF$w6IZ&4mD#Z%mzYJDQg`*ywMLJjbz4bk(UJhqTzTPR|NjrP+A& zfBOYj&dZG=#wVgZ-@O-n8!7cN?egNFmB9yhX*LV|O}z2Idns3j<h_$i%6~WQaxeDa z)8a`r_clnpC{Z7i)smW5d;coW`xPzrj(2x_G@Qt{uj{E#1;e>l5A%=8r<_UcdG%h& zCDkMIb?_qT6;_=!XYT4hxo62a<)p-;&}A#HO%>lOxv{?6)#|aTle)(v6_H!<pNxGv zo+@eABncckxuJe%gXf%tzxCn=1leU%`BpTxsGhDh?Qc>!+BBi~lZZ=Z%`cWTuge>@ zYIRL%>|tW||8gLJf0y#am%^8oDig0{3pfa7>pC#}vj3tQHfd=b-zru&CD*Q-^9@6p zPd1+4y>Z6>15Cz2g7yU+ewz+G6~6UqOLz2yvQxU9yS<Hnt*Dy$hSfIbg7f0dsaf_9 zgf4JdaL-TXap-dI6)8V*B%ww+CxA_`Gx3Lv82<(i<`p%G)249n^J||LVcmM8|H02p zw*_T40}coOa%A(rT$2!%uq4)4Ln=8|qwoC72@4sW0~@70w2aKA9<N~gn3Uk(H~IJz zQvu!IQGU*nvSJFMb6U3teN`(_4(M4WQs#gC`UanumO2l45*+k2EUy~0&Uopu;GKh? z-0Wj|O%WmgJ}LUj?VZ5GuG1#8LA?92*jYFJ=-$u5KRFN9pPqkwSB~<RfM1O}`BsH6 zG+tfx`khvEt`~D`g{m!^V;aNdc#(f|ud}W@aPw8t%n&{e*ML^d93Qz>(RtjW+)meD zq%QWl_@ZDz>@J56^HkOiQ5W_wPoJox9aDZp{{Gb0ODfY3&Pz(k4p{tqjnj<@!dYLZ zbt_FUo?PH|MP$KIjqmHECSI?S+$?Zvg8kzBYxb?zH{J8ma5hTtN@0lG`0Uq-W<gO| zl@FKRS32aSRkkhM^K_#>gN|du)gQmUE|f}c^5!(sOV@~aIETk7Uf|~u*(ZVA=RV&` z?`+=n^1peahl2vwBO8h6|ChVo8Lp056daxRuk_ButrM<qmS_s_eyvfrBc~<%_1QhU z?HRqD(j{3<bzG!{CAbzpiC*{BS@eOneLUN?!Ux<6$99#~H;Bz)UgmGOQz-pp!{WQ= z+AGu|r#nwPa8GOw(}WkU;$|*q)GQP&6ds(N?QnW~)=UpJgXPLMmeo`)nziey+a%Ak zTNkp4cdt6D=;78q>-UA)>P0&OkDg9nth?u_pY@#i@lQB*O1Aea+g!~)$+B%8muga| zy;je*SH*D+`(h4B_&w8|>Hq(d|E3fEYmYqT<Y)^0-D=*l-n#u?@p6_Fy%j8bjqWK$ z2P^-%&iH^sTf5}MVm_0wkT8u2vU&NXZhtNdzuC8a->eA||Gl04joov0-K|w!A@}1| zWK9<LMeFH;Yu8ykJu1t&`D8MGW&>y8;ahqZcU>oasneXbcvEn8pw~YY*E16nI<~M0 z&vM@}$+1woD6`AK_~`R4-kDD(AInyIt@6N8W98}1rBf2@E<6?&VYucQfB0DZ=eK;* zw~HKpIL|FRt7ZGN+!+x@7ye7!zP?zxA%cg~{<!e9q@X)a_OlnbZqJuL^8ZwWZqfcD zl}9-Gu84-opNRg+Gj*eP6kq(&kTdxWTVG}=%$5AfygFR?@(k^ZX$O8>3i%YKb4jmg zM&_J<yP{tGw4R`)P~#hQ={8sR!c$k$mgwCm6OqZR_g<j(s{To6p)upJoR&2+7hm~( z=cJO@m6VKK4M#;7BEQUiuwH0g5{Fu+rthAI8jf-Yw{Usev6jv*NSoysvCy1_)7-D3 z%!RAMHT&V8#M?^+q`zk~`(E-pb@9O-=G<vZPJi8^|F)5l=j$tTx6X%4q|CRPJ#&=x zIV#-uNKm)JA@<AflUqC)F4Y)a=9sC}7xu#G$ytrn`Fk$#{*7-4-`uz8%0q7-^Iekc z&gUZPAF!}<ODxq=;<lUPx9&?|hQu9{mZ>L}<rXBqIrid#wBqZ3_ZKY+jt*LT+I-FB z1eV&T7yRBZ*h_L=c0b@C@V)PGV<IbWlF|X;-bXDm6@TU%%=M_+dTa~x{W@K~q(4su zYFrnwsOWwA_4#Aq3af=0_nsI<C@yk3Rd&6B`T2K^s6ys|FZZ|~bok_cUB#1kVo#{` zlF#{{^s84dny7GWN9mo+P<c1T$ho^2a=t6HS<i|}5<0k<calz|sdsgi<D`Itt9Z6G z-rf9A)$@cF&!y?Sy$hJ`v{yYo@U&!B;WAyWB^P*atbcx6ZV`Kl=e+3sa<&?))hGHE zlyVuTPI4%8&3*Vhg1>N1Lxsc)*;2pruP^%TZfoGRPw#0okUPphJtCWN@)`@aSFiIU zH_JVlU8AEQnZEYW?weawe_lNGq-b_Q%Nkoz<3$<;DLZ2}ly-aGx0`*r$Ae95caJ%b zAZNnIA1u?;Z5QxuZWP(Gp=5;sgTdU379461_XMS;DRN|gjAVJNt>F_8YN1kAFx_%P zQKkJX9`l>qJtXDX55^vx6Uxbb#(SRRjI7+hGOnMrN&?RX?Fi&zy5v4*v9<K~%{-gG z?+SR#Ji+F>=x5azU-+*uvWT(d2*fu9ekj=Twkg0Mf_X;Q!@~3Pi>GEyJE0@ps3d-J z@7o#s-*1@Sap#!kwjFVQg|rvlujgq~JmI|Oyx8T3O>0;B+jxcxrmfIq-@2!!Z)fbp zw@LNKEpM>8tJpWZ3sC*taqq|@?b$C5OFZ~^;!jhyXlh_@Ld@!$N{6;IcP?DQBNP{5 z>AU&&u_CP_r(B{fo!x$iy=!Dpe_`c%i2sOLv_P$R1dGXpX_Ipn&z^W<a!TKfXtx#B z%Gp-`zpi<*T4-6ROoJ-RBw_x^Zt+no4dU(#hjBDY?0MA}Vg6Q5_V))y_Y=FyZY7I7 z-Ju)kJu}=mt+ZzQ>ZuLq7xEexFf=+n7IRBy7czOkVs!oP>p9ofC0Tucac-CS0;9W& zf5$4XC~~ogIC1n_(i-3OQHL!peW&*?Hdw)Ufmx>LOVyHl^F-aY^<6b#{CTD=?KRKx z?X%q`TGuVtynb}u-%YUz>vgn5j!t_yc}3XE%`uS%-LGqmIyNQTHMsoMtK9Ik(@(?l zX_h~WA8xmEGG6hv)QssycB>OVdwlh_{8Cw_^FJo)bew%FDD$7MfYD*slWv*n-G2<9 zZz{|G^~Z*#R5Z0kxp8wH@2y+>_q`rW%heP=eZi{a#^o*NjKjk1r(BY8Jn9ki{g#T% z>H`9L=W|?GUe#+&@L0!Mx6x4Dao@R!m~E^-Vg#40x1Y)&qR7qQ-ePRAa3_oQVXY&- z1ZFonTI|i2USXd3_tmV(&eDVKwmnRdGTt4N)8pU2ag9>A$+$eT=GX$6&l1JqCwO$F zOlHkmvh2l|pIz5#KV6=Ye5+vQjK2GgrIWr2oISv<e%#0@_q&Cci`@)^x@+@NpZ@*N zQ+RZy@TsM$u77(1!W-sxAJ*Ptup&s{yhYN3L!n}>+=t%WF-a~uGIPCFNrd0DB4NJZ zw<?<wLd(4udwl%I+u?Hb_zmM{?j<qb4j(VtZ6vn;(yt$X|N9^AJK^8QwX&jXw)QP8 zOQm*ZM^$B)inP>!lRrdrS8U`u^m<Xq>bbhz4HuY~o{2uw6RNIcIU{LJ7t^Fk3%HVJ z^;o96TF+r?W;r))<<=)%LCh0B?GV|p%eg6P>cKnaCwJU<qpFu)cId<O=EFLd_6g0p zsr*}2N%Bfl;`Ax|-%0iL{yNFOlkrt=msrQz#C-AmtiNBk{9>Q<K-~Q4e0}qVXYC^K z*E)qy2OILA_PGAvJO0apxBa&z{y9Ehb!D#3&ku9|y}s(S+1hJaM85lhhJAMhO07CJ zNZ3Ygm35KZKk3|Mt~*g-NlUnQ&Z}*#-zKo{Iln!N*uK?A*`A4un!USKx!a<=-1qFU z%EcTmi+`OtSiSGT(Oa35O%BwYb*Y(<`t6(9T`TE-E8DehHM6v&rF3(5dVbhE*Q}gL z{L|a{6V+PRdUOZATrltGjw9FS<>n;v=U25G%s!#ER!8`W?b`_PO2-5>`yWCs+rJ#U z9(!R;1Jh@NC%dm0T<3Zou;XWm+Ab-pmmYgQUrSGz;J>hJX2W64sJV-p3|($1X`j9z zdTVxKc*jc_hEwY2&a|>Fkc$4#q;)vUNagOt*<Y2My+XIxRcib1dK%!7sKA<hc=x15 zPIEqq_xL7WYJZlm$dYg%&h7A%h=853s@Lsa^nS6E_|GrX<{QPv#uvq{IjgSY`pXG( z7PL<C5z1v&c3pCywj*nSP@1;qTn8=XKjD0yA);H&R9cM{Ols8~+$YWtd^PLfNp`tJ zp2S~0t^2qb&$h9D{W+)j)WtRIvp@ggj1v=m5*XRoc<Eop(dYaM2ii8Z96rM$;2rT@ z<4t!BOZ2Q8zK^03FP}(Su%fF`PFPZ|==?{yua@~)d8;0TZ_nB;6gT^lr}U0Do`=o{ z&AP1cg6AIZfv_@Z#j@#}B^<N%aZgdcs&ed_jzD?R{I!?u&xbCYbIrPT=CjGwS7LHj zG%b59e|0URnkUOIJ~?g6|Go*E=5l`CTesrlinq#9lO{Zo<Kl=|U}h6|C|dBodtwK3 zqS!m9m)Wx2ou4+(V%d2h?9!jJ>@yUuaY-zRXUTF4eLt&3swyW@J*EDz;+~75EX{lp zr5t>9_GiQM^ltBn+kd58s$3{5we_g?2_YxxXDhVrvUdd6Sv?hAWNInHCY8y@#QfM_ z#LH{W#ti|n3CC}}HF0YZ`Qc%}5cKu>PuJ@K3e#5nI?&uZyW^a}+mmevr{_hOdmlSo z?Yx8izAwjr`-cLy=?SveH>_WA`tX|XH@!oW>`Oxun5urIGI6g`b<)qx2)ut-LNliE z{HsQ-gSt*Gq5mV<4zX-lBV8+`FSA7c)wvT3`V8tGPyAeDdqcVO(aVgv%zs4w1}81* zTEV$;L83sQ@ed89Lk-tTEt}rTZ9NsFHr;O9C!T|13SR0h<!lcpGWBpWeMow9DC$?D z_Dbg7AL2`*<`|f&`mRXYVE^MXgY1r_@0~6mzT=SS=(f!G3d4i$l!cwoCd#ETruONq zv<%O-dG!00rB}dNEk*Tv9@G2-U)u;dPuaVs)G_Mu(<KWGs*+!?=;1KaU$C92qm_~K zq07PoNsf;}(|_@QP)I+`&YGa!yp&Za%gwUu{kdJ24y*aht80jvnw_xo(h<+pmYOYL zC$*Edm`#aO+Gr4_!*jdy)v<W)AH2#}+{+k(*9%`s+jY=lp2CEKJg=jYI)k4`EePcJ zvv70Zu@V+BgG+ONSRc*R@SJ^NDZ`bI2PBSdDdFT*a#(ygy~3m+;NXHSs)owH)~>vC z^}am!M&131z3Zet1+;5sN<R5@$U<z@l||*O|L;2X*SnVfKX1ET@5HO{#w^pxVUf=~ z-wOEbJK0ru@%_s69l6aHzHZuhq$$yO(IMV0?l49{2gRw}9}etOmA9R%c=SeNg0jK< zSe^xHS6yyRbJ*nSDsK5y^_zkA&;AX6Zm-c>p)BWhytnJm1r3p;hy@$t`cz|>P6;09 z{-$9ezMDh+osLUt;bs2V%SMrLt7p7SS<3Bdv?(tq)z#14x0uW8ua4S<1t}AbZMqTW zZ7VgE_r*@W1LtlWK3Q==B%IAKverG@=p|QP%Z;Xo%a}f~YOm3XNt~h26Mo%;M_uHK zqnm7x%0W9$9<AVzrtbnxZ#+NVI;Jf1WTlb$88sc3yS)`%+z!GWPAv(Fs}G3rrzBY4 zF!5mCxPDJfcDC&rO)f3v$(mcYE)pmbY*5~5J^gjl!El*9j4vX7+P`&n-R~v5WsCHO z9eR<+%-vXBS{A>4{LcDl1H+o7`^=kl+CBy_H6F>^<H<Xv>$i<<!<6R{9qDf}?miWm z&=&d9TXTLw+l{VCop;PLecc0iX6{`jD3$g>!c8sT`@P=IC-S#4bdT}W&Y2zXY-3nL z#Km6;_P_hP8c)w}ST6YM$<OBX@uxml?dIE%UtrVipRM+wdE<mMj^oF*!!lUruqotq zNd^>V`SU5t95(LX`|_AZ+P4BP_FX?aWu5PZPuv*Uz_o~R`$;3=qcWHOivRw$rRiJ2 zud?|33n|Q|35`rS7k+bFvR6!9UgE<)xnTdJU^c1ioj#N2a0$GBl&!+sQoh3bh~WMo zH^cuNjcc9~R(bFUTho&0C40UquKK|9+2?@%-JZ1~#|nh*H|2EjoVMK-EbjeqLSx3F z39q&XJc#Hn-MT}vytJnDBHzO0ma)S6P8==!_jvtf?-aaZ{X;Ed_ex&g^O85Re|V&~ zYh73-;dirEn`@&tbI%{iJChskNJc%1I{(A(&4IMpcm6Hebn?z?jpjpF-bvftW%%39 z8O4=t)UkD|kovob49jXR4R>Y_<<p_3xfZw|j$GeZ$i(xxWfhaTTsNz8-{cN8rX1gG ztwO5j+ddf2lv0shI_cEcoadX=#TXeRd{;8@DI678Gc|aY(8-_~O&=<lyZhDhR@L%1 z?)GSrmM%CHb7X-qbHu_)m(|YlG5kI25u40^GIfW@QN3opPdAMdjp|CX+>4IvW34>8 zNi#kC(SvW^lj|32UwPpyu3P=dq<;H?o}QZW;HuLcKXchTmb3k9Wqs{B)$Z~|jTtAb zO&uA8rux>!eqMK_`s9iT7mWayQ}cgxZp&U{AoTg~+_|AeR_)&o&UIQA?zeQiRqu@V zNqo<b|KmB@eZIEkjN`u5RjFAl<p~^T-|%=``POrBSL1S~Hj5cN&;Au1JGs)pto_go zE`y!r5&@58H@HQ=>2P#BzdI?#QJTNNT5k2XdFNv)zE`{mTzhN6d))^Q6B1)NI;1qZ ziweptKC?|)G`0NJ<5fa`os-;sRex15t@P|?=jzj(_Axd*BT@J(-#U}E5)<aiFjl<% z@8i?yk<pcG(Dow9VBLjU!;X&2T59{xK6Qwik~E1eY1-n1oq~+PD*P3S&sXVe{Ab<! zDe&asTf6*TE|prKqg)WHwZO&r?QDVgmHE@2m`q8H)oZ-$wCUNeC7uuUB~waY&E`>< z()s4V6NT$jy>CpdSgO_+r|BhHbUk4L7h`f$Mqm5YzyFL3*BCmOo$Y_UJAeK8h|9*4 zw!WEG8mKdCTJmjwsijjGYdocdT>>}A6?rKaUaV))=a0?Yxp1cai_Q%GJC+4}>GNIW zd02}d9@+d@pv277;K0}KTo<12s=ctF`y|_oFGraV&ODNqSaMzPkwV*A$%Ew!B1?k) zb8}?Hz7|r;y!q`Z-~N`u6@`a{pDC3vF8<GunxG&gU9f9?mR#Mrc|N5^3c86c443Qw zc1{vhdNNz8Pp9NXw^i9|#fuHISX%;Gd!qI#zuM7KxPV{QjP=6A0@qNDzc;$dcU#`b zJoZLw&YjB4hP76a1{=*U@bvsR;CkT&r`4{{#YT(##cm!9jYv&p*&}b$tn-3ZONYy> zb<=_~QpZbKZrOwjOSjk7{Qll?M}2KmMbzi#%Fg@^4*xH&*4)JL*z@$Ay<dVA_{v(| z6eidNu<~2WGgi%P53nkoxO(G9JH=TU2@G4VX!5E`z0|t@P@wwi)Xo)gy<aADzDdii ztkC?q>`at^hTEi8cU_g58%H*VvDD`L-O?eza%k!{@3Rd#m$n|-!}v18<dONE)4K)3 zrZ6g)t}=1iHvhD0c3SO3E8n`TyOIKpOD1k?IvdFyv({(1k5?AU`(Mvnu1c8SUaixA z@r9Ru)R~st7hR@Z{HtcK-aJ!5wTmxkD&y&deWr8%ge55dv<c6taQrc&TJ=%cbdfra z#<{cZzA91QI5UbzuJW-u%eAH@_9D+F&iQbLzqTiy;o_d$%tebM|5$VUituTR=<|sb z*z~8t`s9?T`v#j1OLm6Yc1unRKHGEu$C;SBg3Hf6vwjwOwrbDhr%zY6{Swtw@XDFy zRdb=Mz+QAtN~TiXl^;AQqHi{cm`R*m`{abn&K@U*L&DkxZc#_ivN(D+Obyd(QcB(R zisPX7OSkj~cCStSIiz1PGeoG`*-C6$xia<to8*NWoQEDK&9`n+@;Re+?Lo_)s%9yJ zm;~L>hu){9_UNk}NJwb$y=a$Ew8%2KLf10)Bj+c<pcCt7%u}?u!NA~odO`TagB|aU zN^Lu3rdlRFc&=;WWOU)4qL{7Oo!+piz5c>d))ky4cba=0PBIoR@p{@~^l|sL6WJV6 zQRyCYCZtytwZ#OxA1ve0KjAuI)oJFFZWr8K))`I}+Ofm=_B-y^r*AK-T5-kYjxk4u z`3pf0LyeHgr3p6`Qm?Kt&uu%-5trSbwPE)@v-pf-C-@DF+gRU;rrV0fw3`{E{@nXu zTgrk4pBq_Q6hbA=6fbm&|G7)}r%<z!ZNcvQG7)<xE))8?sOs|K>c0Dvquw9NYHTQr z)(BsxRDGv)df)7e4x%q)7rNP}eD~@3QM$L-JL>4MIyUiuir9+|VqaM*e$+l^`O={i z<6^$vlWqUn={Hus3pEto{rkqo$Qdi&wKmS3;QBpc-;J5?&)6OBldC@diY;i;@0Hb` zMBX>A7iP^%Y}m=YZ?dcGW~F-3YOz1D&Ixy#8>&w6I+kBvpfSfm)F82`Ia6HHNLuIm ze!t7Q`b~T?9qa;S+nKLjo3KUE`lVyyOZIO$Gb>7#2s|@iV373tb6E7wki4&dO8(bh zwlgq1-^lWMIYW<ud)&jz&8wXa6)!85*jRD~dCl@PVvy6md1O}E#cd}z4|II7^D=6^ z>J(DC>{;XWzUe$3TK*nolQgUsFZva-LH}RZ0<-r#{Kr%Jre66bv1eb=@!j1|=XT#b z_JRM#G|lgFSH3D*-C5`qc&Om%j)oN9l=uDOKg_wU^C$Kk*4yo~@k5T4`J&Uuq&7}} zb?{90or>&+lC<U$1<scBQmh+aSUa-1G*04{{$m?$7=A>;W@Gn;Mq!&7Hw^w-Jf64c z+UA1_ZEEoy;uB0(FnVb)xwn2hyyk@3rbtnCr7L%mN_aRjesBNg@wsnJ`^GTt)yL*8 z+CBBZn4jac$dag+8cXBvrMzcnKA3WqZ@LO!9*@WEb4;2&4!<+_CrrBVZnAFEnJp4` zdl$1xioST_a$M)q^J&MmoxaR%<L8*agNNO7Lbb|Db%ukFe5z9n5}BHWE>C<UUNqTZ z!}gm^oPRPl9NMAHTJE4z#PaRu$K4#tmp8D9{u4{jd3~x_Q>sm!(Q`)Yt|Q6n8Uh~- zr%Oxn?$>sn|5!~w*D>h)FXyB4%}*N{9ACE7H)zH3)p7?;eO;xd<50!vdi!qV(Z@e_ ze((rTJJ`k{8`=1*WwraPEj7v}$6V!<*8j;oFKZL`{l@E?|0iF6%}`a5FJ5%$-eG~O z>V~K5bqp$IWLbq)G)}B;X8n5RS=uhSGsh=C64-M(era!1`@6kWqQ*ih(>12nr9Az1 zXq)?DhPr<CnPCB+<LAF*JMnmj*~}Rqd|vF1@s>%rXtT#Scu~d=u4Owbzr-%lxlz`y z?OD{ACFvNFrYXC(Ij`!^;d>lvAq+gTCVvlcHGi+irLDgxmgVS1Z=K2*g&oJ5-DjFh z?BCc_XtKQP#KXQ*(ri`QQ_`7K|39&tP}0~uSw#Dd%uanxy@RKYH-3N3aXVx&|HKy) zr_F2r?lYyMS}Hu}V8`N(!ttC&=`42l*&K_ntrlOfo9ie`OU+X@%gREl^*cCj@_+0( zYg8Vnul%!KT4&<g4J{XHjwzjCO-QW2Yr*Y2$)b~Il2)p)l+p+DiaoDypT2#I-)Pkv zzfkw$U%v!vcoO47gbP#8l_|5iaJc&_G2ZKlh@azg+eDgSe#5NgA9kr8w&L2W(#Fm# z9<xHrU6)alYk}K=S^l}nb!W_S{u%ZaX&l|DYuWIqYbCee|5^Kl7vJZ+ZN4e*avht6 zMS*15`i8hTH`fxTZ4<*3do8;*Ddq{!nqXjm{l!@oT|r^3_54egxZm(N)G%+wr$P_s zHHw8ni@PoK{^S|Ayip9{+)^>OzeHA@&+pRe6`bNXZF*Su7pu$`)E1uAvSfwFq8T<t zVNn~hx!LCZEMEJf+>D1+urlL#g6fJI-P3!L&-a|UcY<+;ex~Jv7i-R*&b-gH)m`wK z*Nz+Wb8hRG>I!;j%!_)Ru=m)(fYQ*fy~kAav!wFQyldVfpL4Qk@hWYJC0X$b0^&2- zIl3bHGP#RNL*7sObJbLbaaH+&xFfF1nu}7|4mNJDd*$>=yZfcVTh5J>)EC~iyZig! zT{Hb9qUJ6Yy)VR9v$8y`=3C+^#LxL)$GZHdzIlsoZFv-N>3Vns=hU47TTYnosjTJW zys?|1NO)?vkZ7r$$TeL{>Ca1yB33hfTxcd$D_!t+(%Z%j-@|{#L_8LaSyFL|f8vSj z%nv8&3(Q!V-!S2gUg9EOwq51xCxsbhA1I%`=;0R02A`_UBBy#n7N5#qk#fdi9q$tM zj<PdMih&n?emHO{+^~|<Y_)HLqvqE2w#Q!fXq0DNy8CYB+iVtx^TMB58&WQ{Hr<cE zJxODKm2s8L|305xjM|D4o2TDcBPDkA?&hqWbD2xIWA~i(csJqx)TLLrUnDy1^tWAf zdP4yR>p|Y<_EoN8o{RqQ1Z9b6^E~)6f%|yDJfS;IB`<ils=fPUXP=d}c<<TG{JtIu z;@TRI`*u!z)*Z@Zp?pVF{8C8tMd$q3sjVqftF2{q)|say9WY?}tz%>U{>swx?#t66 z&b*y)I#By4tE2kUEpIDaI;8d<ymW|h@u{uTBN#ePOep&7w~*swa&XVKjdKdmbmV54 zI|zLe@-1gQ*}EqG636!o2l7?bUU`bNFs}LV+Iqk9LB5cuTH9{02P?gb(EpOzuAQ33 z_f<T=r>lR8<IOH1p`OwUt{WxQn3!%}+sLu^k&>v7R>gId0+BME#q2ljecp6u2<L`1 zUO&RPFi^2dOXT1})<`zLeq9cRH6lkg6iWwpZZ_xKbvtGMBag!1ZRW3-F88-T+2K@} z@*-rVXvKUFN4EgO-7c<+O7|Rceta%`t0+r^rQ`oyk_%W$Po7w|Y=-YKK9>L$9UG3@ znRT5GOXbUdEmPSf=v?OZo}ul!kJ9>AwLLZu=69L~PCbwzTgkpxbm<zO?pssuC>W$K z;GXXw^!|Wz_ciAWlS6ktDZ8`e#pB$r@BY*4UbfyBDbP;uX5ZQQ{6*KsU-@@CY<aq3 z*=9YMd0<8(r+Ll24{pEeB;y>ns3|&|&i`5Fuux#9^1UgNrIPC#a%X?fTPiEa^li)K z?gq}JV}^D-eu{=R2lwb*iai=#6T>h=%OpW6KK(B9F%#8&R*Tr}&Sdx;-E`8#g(Lmp zdP{|<*4d?dBNm*U#j{9!<E_Hjm*ux(eIn2HxxHH2u;NdKjNl<9v#ga2#p^CVZJe}n z|7q!{XaBiwuP$eMc2~z=q>D2<?~R@RLms6McK@tCG*qtmW;LC!w=6;N%7&vNF(p<x z`5lY*$)48Q@G90-&C@7h;oO*9;oW*$tCdswIhQ!Moln{Ad*OdW$HTcN9+$2XXwRKm z!*(StepUW9$$xvoLvO#!<5AOOIk2EtK{)!WhS4jF+%;A+o(JB&^?Anz?uLoek4@OU z?#IJI&EwJ%J=tGRyQ%k2;Hp}zWwAYQ<Bg40+O?uDk|usmI`a8h`rTJ1X2Nd53r=OP z;`H{~;xd2fjh^IRA1n5+e}3r0$DHPt&J~(hxdk|tY+QI>^Uh%rziqQ?{rg37kMv|; zxMeHobt)bD(Q4JYNjF38E-M2I!|m${3{8S=(hH2bvliFLwcq$K_u)+emYW|~Us_3U zZavtouE{8Q{;=nVCgTUf*{5%P;W+vJfH_;CUHi=6_r!N!C_l-xM~89#++93Msj>%j z1i08gwlZogns-{VQttQ+Y5AAA^DfIRIAZ=YVVdy%eOJyji<D=YZB>2zY3UoAe`Xh+ zef5k!@FX@Ue3hZ9;e!?i#}#*$=<!rqZ(w@3Cd%&0p^lph)*DVO*ZRy>Z|;03<oNk; z-)EKw8Bgx=@|S10lQ6r6ce~l|6*>kRuI+fVVajr4*$Zi>w=3!!EGWEwVP-<ENB<Eo z#xoCAFaLA%!IA<7Cm!|_XV*0<PdlclbkQJ}>-|4#`^j_Urhe1yXqQWTx4_||HRJY< z>k7Lw0?szoZi?3U@}^i<@i{AlahEiYW5rv)xLF>@_M3{`p5E=IxAJ?9i;cRu^Rzcg zF1AT3@)tuSeHX0Cxb*2!vWS|Fl_KA^=T@Gl?@W<+>Yb3f)^SFXz+In(Coa3(i;5KF z<46s-HL>8{^Es1cSFbF7rt-r(<I=hXd%4^>m$PQZSZrysbp2;!E_DA$_uOv(%5WWJ zR*@HC%N+mq1Z7C=mU`APZ??&c-b%0MNoQ^v>A6m9+46e&hbqUi7p8kFRvni5Eqis@ zqR0#721m7h{$7dn)G~Gvm=bAs=>OXH7w)|I=q9Gp;_0pOIH}|2-(Py}ha4p)qzPE< zw%V3qw*7>Kh1DJVM>A5{A5YtL!GuR<qO<scg5*r6(05rPRS$Lbil27#X#bFMoiz8y zbcLf=a+a`tf3<Q#|E|#PZF$!o>Xli}3sV*>u4TMBLGdli*+V?l9Cnlc>c_A)l%H(v z5RT#xH9LMjQEHEmFyFcd-bD`In2w3HU+juk>DIZ#aOv$5iR}Bgr+Y*%{jzF4NA5Nu z;q1!5_E+9Ys{*)R$xlc-mdAU1hisry@J<IG<r#)+o-Dq-CF5`TLT&Yr6%#k~<~SCA zbnw0IUZipB#<yGV|DEdbZhv*+kYMtr^Eo+JDg)nMsK``Ow=i6Fc>j$H#y2kP&TwG> E0CVqyKmY&$ diff --git a/plugins/easy_mindmup/assets/fonts/EasyMaterialIcons-Regular.otf b/plugins/easy_mindmup/assets/fonts/EasyMaterialIcons-Regular.otf deleted file mode 100644 index f8500754524df47597aace5f694a24f3125e129b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239484 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	hhK5FW{|DdmRSjv7fX|Bo^<lxj<oIsF_I=tz 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 U=onO%qKkpL(I9gf7_=D}02=%c&j0`b diff --git a/plugins/easy_mindmup/assets/fonts/EasyMaterialIcons-Regular.svg b/plugins/easy_mindmup/assets/fonts/EasyMaterialIcons-Regular.svg deleted file mode 100644 index b46f165..0000000 --- a/plugins/easy_mindmup/assets/fonts/EasyMaterialIcons-Regular.svg +++ /dev/null @@ -1,2411 +0,0 @@ -<?xml version="1.0" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"> -<metadata> -Created by FontForge 20161004 at Mon Feb 06 14:01:27 2017 - By milos -Copyright 2015 Google, Inc. All Rights Reserved. -</metadata> -<defs> -<font id="MaterialIcons-Regular" horiz-adv-x="512" > - <font-face - font-family="Material Icons" - font-weight="400" - font-stretch="normal" - units-per-em="512" - panose-1="2 0 5 3 0 0 0 0 0 0" - ascent="512" - descent="0" - bbox="0 0 512 512.5" - underline-thickness="50" - underline-position="-200" - unicode-range="U+0030-10FFFD" - /> -<missing-glyph -d="M17 0v341h136v-341h-136zM34 17h102v307h-102v-307z" /> - <glyph glyph-name="uniE000" unicode="error" -d="M277 235v128h-42v-128h42zM277 149v43h-42v-43h42zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE001" unicode="error_outline" -d="M256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM235 363h42v-128h-42v128z -M235 192h42v-43h-42v43z" /> - <glyph glyph-name="uniE002" unicode="warning" -d="M277 213v86h-42v-86h42zM277 128v43h-42v-43h42zM21 64l235 405l235 -405h-470z" /> - <glyph glyph-name="uniE003" unicode="add_alert" -d="M341 234v43h-64v64h-42v-64h-64v-43h64v-64h42v64h64zM403 153l45 -45v-23h-384v23l45 45v124q0 51 32 91.5t81 51.5v15q0 14 10 24t24 10t24 -10t10 -24v-15q49 -11 81 -51.5t32 -91.5v-124zM214 64h84q0 -17 -12.5 -30t-29.5 -13t-29.5 13t-12.5 30z" /> - <glyph glyph-name="uniE019" unicode="album" -d="M256 277q9 0 15 -6t6 -15t-6 -15t-15 -6t-15 6t-6 15t6 15t15 6zM256 160q40 0 68 28t28 68t-28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE01B" unicode="av_timer" -d="M128 256q0 9 6 15t15 6t15.5 -6t6.5 -15t-6.5 -15t-15.5 -6t-15 6t-6 15zM384 256q0 -9 -6 -15t-15 -6t-15.5 6t-6.5 15t6.5 15t15.5 6t15 -6t6 -15zM235 448h21q80 0 136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136q0 96 77 153v1l145 -145l-30 -30l-116 115 -q-33 -41 -33 -94q0 -62 43.5 -105.5t105.5 -43.5t105.5 43.5t43.5 105.5q0 56 -37 98t-91 50v-41h-42v85zM235 149q0 9 6 15.5t15 6.5t15 -6.5t6 -15.5t-6 -15t-15 -6t-15 6t-6 15z" /> - <glyph glyph-name="uniE01C" unicode="closed_caption" -d="M384 277v22q0 9 -6 15t-15 6h-64q-9 0 -15.5 -6t-6.5 -15v-86q0 -9 6.5 -15t15.5 -6h64q9 0 15 6t6 15v22h-32v-11h-43v64h43v-11h32zM235 277v22q0 9 -6.5 15t-15.5 6h-64q-9 0 -15 -6t-6 -15v-86q0 -9 6 -15t15 -6h64q9 0 15.5 6t6.5 15v22h-32v-11h-43v64h43v-11h32z -M405 427q17 0 30 -13t13 -30v-256q0 -17 -13 -30t-30 -13h-298q-18 0 -30.5 13t-12.5 30v256q0 17 12.5 30t30.5 13h298z" /> - <glyph glyph-name="uniE01D" unicode="equalizer" -d="M341 320h86v-235h-86v235zM85 85v171h86v-171h-86zM213 85v342h86v-342h-86z" /> - <glyph glyph-name="uniE01E" unicode="explicit" -d="M320 320v43h-128v-214h128v43h-85v43h85v42h-85v43h85zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298z" /> - <glyph glyph-name="uniE01F" unicode="fast_forward" -d="M277 384l182 -128l-182 -128v256zM85 128v256l182 -128z" /> - <glyph glyph-name="uniE020" unicode="fast_rewind" -d="M245 256l182 128v-256zM235 128l-182 128l182 128v-256z" /> - <glyph glyph-name="uniE021" unicode="games" -d="M352 320h117v-128h-117l-64 64zM192 160l64 64l64 -64v-117h-128v117zM160 320l64 -64l-64 -64h-117v128h117zM320 352l-64 -64l-64 64v117h128v-117z" /> - <glyph glyph-name="uniE023" unicode="hearing" -d="M245 320q0 22 16 37.5t38 15.5t37.5 -15.5t15.5 -37.5t-15.5 -37.5t-37.5 -15.5t-38 15.5t-16 37.5zM163 456q-56 -56 -56 -136t56 -136l-30 -30q-69 69 -69 166t69 166zM363 85q17 0 29.5 13t12.5 30h43q0 -35 -25 -60t-60 -25q-20 0 -35 7q-41 21 -59 76q-7 22 -36 44 -q-41 30 -61 67q-23 41 -23 83q0 63 43.5 106t106.5 43t106 -43t43 -106h-43q0 45 -30.5 76t-75.5 31t-76 -31t-31 -76q0 -32 17 -63q14 -27 50 -54q40 -30 51 -64q13 -38 36 -50q8 -4 17 -4z" /> - <glyph glyph-name="uniE024" unicode="high_quality" -d="M309 224v64h43v-64h-43zM384 213v86q0 9 -6 15t-15 6h-64q-9 0 -15.5 -6t-6.5 -15v-86q0 -9 6.5 -15t15.5 -6h16v-32h32v32h16q9 0 15 6t6 15zM235 192v128h-32v-53h-43v53h-32v-128h32v43h43v-43h32zM405 427q17 0 30 -13t13 -30v-256q0 -17 -13 -30t-30 -13h-298 -q-18 0 -30.5 13t-12.5 30v256q0 17 12.5 30t30.5 13h298z" /> - <glyph glyph-name="uniE028" unicode="loop" -d="M256 128v64l85 -85l-85 -86v64q-70 0 -120.5 50.5t-50.5 120.5q0 50 27 91l31 -31q-15 -27 -15 -60q0 -53 37.5 -90.5t90.5 -37.5zM256 427q70 0 120.5 -50.5t50.5 -120.5q0 -50 -27 -91l-31 31q15 27 15 60q0 53 -37.5 90.5t-90.5 37.5v-64l-85 85l85 86v-64z" /> - <glyph glyph-name="uniE029" unicode="mic" -d="M369 277h36q0 -54 -37.5 -94.5t-90.5 -48.5v-70h-42v70q-53 8 -90.5 48.5t-37.5 94.5h36q0 -47 33.5 -77.5t79.5 -30.5t79.5 30.5t33.5 77.5zM256 213q-26 0 -45 19t-19 45v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -26 -19 -45t-45 -19z" /> - <glyph glyph-name="uniE02A" unicode="mic_none" -d="M369 277h36q0 -54 -37.5 -94.5t-90.5 -48.5v-70h-42v70q-53 8 -90.5 48.5t-37.5 94.5h36q0 -47 33.5 -77.5t79.5 -30.5t79.5 30.5t33.5 77.5zM230 407v-132q0 -10 7.5 -17.5t18.5 -7.5q10 0 17.5 7t7.5 18l1 132q0 11 -8 18.5t-18 7.5t-18 -7.5t-8 -18.5zM256 213 -q-26 0 -45 19t-19 45v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -26 -19 -45t-45 -19z" /> - <glyph glyph-name="uniE02B" unicode="mic_off" -d="M91 448l357 -357l-27 -27l-89 89q-22 -14 -55 -19v-70h-42v70q-53 8 -90.5 48.5t-37.5 94.5h36q0 -47 33.5 -77.5t79.5 -30.5q25 0 49 11l-35 35q-8 -2 -14 -2q-26 0 -45 19t-19 45v16l-128 128zM320 274l-128 127v4q0 26 19 45t45 19t45 -19t19 -45v-131zM405 277 -q0 -37 -19 -70l-26 27q9 20 9 43h36z" /> - <glyph glyph-name="uniE02C" unicode="movie" -d="M384 427h85v-299q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h22l42 -86h64l-42 86h42l43 -86h64l-43 86h43l43 -86h64z" /> - <glyph glyph-name="uniE02E" unicode="library_add" -d="M405 277v43h-85v85h-43v-85h-85v-43h85v-85h43v85h85zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-256q-17 0 -30 13t-13 30v256q0 17 13 29.5t30 12.5h256zM85 384v-299h299v-42h-299q-17 0 -29.5 12.5t-12.5 29.5v299h42z" /> - <glyph glyph-name="uniE02F" unicode="library_books" -d="M405 363v42h-213v-42h213zM320 192v43h-128v-43h128zM405 277v43h-213v-43h213zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-256q-17 0 -30 13t-13 30v256q0 17 13 29.5t30 12.5h256zM85 384v-299h299v-42h-299q-17 0 -29.5 12.5t-12.5 29.5 -v299h42z" /> - <glyph glyph-name="uniE030" unicode="library_music" -d="M85 384v-299h299v-42h-299q-17 0 -29.5 12.5t-12.5 29.5v299h42zM384 363v42h-85v-117q-14 11 -32 11q-22 0 -38 -16t-16 -38t16 -37.5t38 -15.5t37.5 15.5t15.5 37.5v118h64zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-256q-17 0 -30 13 -t-13 30v256q0 17 13 29.5t30 12.5h256z" /> - <glyph glyph-name="uniE031" unicode="new_releases" -d="M277 235v128h-42v-128h42zM277 149v43h-42v-43h42zM491 256l-52 -59l7 -79l-77 -17l-40 -68l-73 31l-73 -31l-40 67l-77 18l7 79l-52 59l52 60l-7 78l77 17l40 68l73 -31l73 31l40 -68l77 -17l-7 -79z" /> - <glyph glyph-name="uniE033" unicode="not_interested" -d="M391 151q36 45 36 105q0 70 -50.5 120.5t-120.5 50.5q-60 0 -105 -36zM256 85q60 0 105 36l-240 240q-36 -45 -36 -105q0 -70 50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5 -z" /> - <glyph glyph-name="uniE034" unicode="pause" -d="M299 405h85v-298h-85v298zM128 107v298h85v-298h-85z" /> - <glyph glyph-name="uniE035" unicode="pause_circle_filled" -d="M320 171v170h-43v-170h43zM235 171v170h-43v-170h43zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE036" unicode="pause_circle_outline" -d="M277 171v170h43v-170h-43zM256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z -M192 171v170h43v-170h-43z" /> - <glyph glyph-name="uniE037" unicode="play_arrow" -d="M171 405l234 -149l-234 -149v298z" /> - <glyph glyph-name="uniE038" unicode="play_circle_filled" -d="M213 160l128 96l-128 96v-192zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE039" unicode="play_circle_outline" -d="M256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM213 160v192l128 -96z" /> - <glyph glyph-name="uniE03B" unicode="playlist_add" -d="M43 171v42h170v-42h-170zM384 213h85v-42h-85v-86h-43v86h-85v42h85v86h43v-86zM299 384v-43h-256v43h256zM299 299v-43h-256v43h256z" /> - <glyph glyph-name="uniE03C" unicode="queue" -d="M405 277v43h-85v85h-43v-85h-85v-43h85v-85h43v85h85zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-256q-17 0 -30 13t-13 30v256q0 17 13 29.5t30 12.5h256zM85 384v-299h299v-42h-299q-17 0 -29.5 12.5t-12.5 29.5v299h42z" /> - <glyph glyph-name="uniE03D" unicode="queue_music" -d="M363 384h106v-43h-64v-192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19q8 0 22 -4v175zM64 171v42h171v-42h-171zM320 299v-43h-256v43h256zM320 384v-43h-256v43h256z" /> - <glyph glyph-name="uniE03E" unicode="radio" -d="M427 256v85h-342v-85h256v43h43v-43h43zM149 85q26 0 45 19t19 45t-19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19zM69 381l270 110l14 -36l-176 -71h250q18 0 30 -12.5t12 -30.5v-256q0 -17 -12 -29.5t-30 -12.5h-342q-18 0 -30 12.5t-12 29.5v256q0 30 26 40z" /> - <glyph glyph-name="uniE03F" unicode="recent_actors" -d="M267 149v16q0 22 -33 35t-63 13t-63 -13t-33 -35v-16h192zM171 347q-19 0 -33.5 -14.5t-14.5 -33.5t14.5 -33.5t33.5 -14.5t33.5 14.5t14.5 33.5t-14.5 33.5t-33.5 14.5zM299 405q9 0 15 -6t6 -15v-256q0 -9 -6 -15t-15 -6h-256q-9 0 -15.5 6t-6.5 15v256q0 9 6.5 15 -t15.5 6h256zM363 107v298h42v-298h-42zM448 405h43v-298h-43v298z" /> - <glyph glyph-name="uniE040" unicode="repeat" -d="M363 149v86h42v-128h-256v-64l-85 85l85 85v-64h214zM149 363v-86h-42v128h256v64l85 -85l-85 -85v64h-214z" /> - <glyph glyph-name="uniE041" unicode="repeat_one" -d="M277 192h-32v85h-32v22l43 21h21v-128zM363 149v86h42v-128h-256v-64l-85 85l85 85v-64h214zM149 363v-86h-42v128h256v64l85 -85l-85 -85v64h-214z" /> - <glyph glyph-name="uniE042" unicode="replay" -d="M256 405q71 0 121 -50t50 -120q0 -71 -50.5 -121t-120.5 -50t-120.5 50t-50.5 121h43q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5v-86l-107 107l107 107v-86z" /> - <glyph glyph-name="uniE043" unicode="shuffle" -d="M316 226l67 -67l44 44v-118h-118l44 44l-67 67zM309 427h118v-118l-44 44l-268 -268l-30 30l268 268zM226 316l-30 -30l-111 111l30 30z" /> - <glyph glyph-name="uniE044" unicode="skip_next" -d="M341 384h43v-256h-43v256zM128 128v256l181 -128z" /> - <glyph glyph-name="uniE045" unicode="skip_previous" -d="M203 256l181 128v-256zM128 384h43v-256h-43v256z" /> - <glyph glyph-name="uniE046" unicode="snooze" -d="M192 277v43h128v-38l-77 -90h77v-43h-128v39l77 89h-77zM256 85q62 0 105.5 44t43.5 106t-43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5t43.5 -106t105.5 -44zM256 427q80 0 136 -56.5t56 -135.5t-56 -135.5t-136 -56.5t-136 56.5t-56 135.5t56 135.5t136 56.5z -M469 390l-27 -33l-98 83l27 32zM168 440l-98 -82l-27 32l98 82z" /> - <glyph glyph-name="uniE047" unicode="stop" -d="M128 384h256v-256h-256v256z" /> - <glyph glyph-name="uniE048" unicode="subtitles" -d="M427 213v43h-214v-43h214zM427 128v43h-86v-43h86zM299 128v43h-214v-43h214zM85 256v-43h86v43h-86zM427 427q17 0 29.5 -13t12.5 -30v-256q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h342z" /> - <glyph glyph-name="uniE049" unicode="surround_sound" -d="M256 299q17 0 30 -13t13 -30t-13 -30t-30 -13t-30 13t-13 30t13 30t30 13zM377 135q50 50 50 121t-50 121l-31 -31q38 -38 38 -90q0 -54 -37 -91zM256 171q35 0 60 25t25 60t-25 60t-60 25t-60 -25t-25 -60t25 -60t60 -25zM166 166q-38 38 -38 90q0 54 37 91l-30 30 -q-50 -50 -50 -121t50 -121zM427 427q17 0 29.5 -13t12.5 -30v-256q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h342z" /> - <glyph glyph-name="uniE04A" unicode="video_collection" -d="M256 203l128 96l-128 96v-192zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-256q-17 0 -30 13t-13 30v256q0 17 13 29.5t30 12.5h256zM85 384v-299h299v-42h-299q-17 0 -29.5 12.5t-12.5 29.5v299h42z" /> - <glyph glyph-name="uniE04B" unicode="videocam" -d="M363 288l85 85v-234l-85 85v-75q0 -9 -6.5 -15t-15.5 -6h-256q-9 0 -15 6t-6 15v214q0 9 6 15t15 6h256q9 0 15.5 -6t6.5 -15v-75z" /> - <glyph glyph-name="uniE04C" unicode="videocam_off" -d="M70 469l378 -378l-27 -27l-68 68q-6 -4 -12 -4h-256q-9 0 -15 6t-6 15v214q0 9 6 15t15 6h16l-58 58zM448 373v-228l-239 239h132q9 0 15.5 -6t6.5 -15v-75z" /> - <glyph glyph-name="uniE04D" unicode="volume_down" -d="M107 320h85l107 107v-342l-107 107h-85v128zM395 256q0 -59 -54 -86v172q54 -27 54 -86z" /> - <glyph glyph-name="uniE04E" unicode="volume_mute" -d="M149 320h86l106 107v-342l-106 107h-86v128z" /> - <glyph glyph-name="uniE04F" unicode="volume_off" -d="M256 427v-90l-45 45zM91 448l357 -357l-27 -27l-44 44q-37 -29 -78 -39v44q25 7 48 25l-91 91v-144l-107 107h-85v128h101l-101 101zM405 256q0 51 -29.5 90t-76.5 53v44q65 -14 107 -66.5t42 -120.5q0 -48 -22 -89l-32 33q11 27 11 56zM352 256q0 -9 -1 -13l-52 52v47 -q53 -26 53 -86z" /> - <glyph glyph-name="uniE050" unicode="volume_up" -d="M299 443q65 -14 107 -66.5t42 -120.5t-42 -120.5t-107 -66.5v44q47 14 76.5 53t29.5 90t-29.5 90t-76.5 53v44zM352 256q0 -60 -53 -86v172q53 -26 53 -86zM64 320h85l107 107v-342l-107 107h-85v128z" /> - <glyph glyph-name="uniE051" unicode="web" -d="M427 128v192h-86v-192h86zM320 235v85h-235v-85h235zM320 128v85h-235v-85h235zM427 427q17 0 29.5 -13t12.5 -30v-256q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h342z" /> - <glyph glyph-name="uniE052" unicode="hd" -d="M309 224v64h43v-64h-43zM277 320v-128h86q9 0 15 6t6 15v86q0 9 -6 15t-15 6h-86zM235 192v128h-32v-53h-43v53h-32v-128h32v43h43v-43h32zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-18 0 -30.5 13t-12.5 30v298q0 17 12.5 30t30.5 13h298z" /> - <glyph glyph-name="uniE053" unicode="sort_by_alpha" -d="M336 168h130v-34h-182v27l126 183h-125v34h177v-27zM106 221h83l-42 111zM130 378h35l96 -244h-39l-20 52h-109l-20 -52h-39zM219 99h99l-50 -50zM319 413h-101l50 50z" /> - <glyph glyph-name="uniE055" unicode="airplay" -d="M448 448q17 0 30 -13t13 -30v-256q0 -17 -13 -29.5t-30 -12.5h-85v42h85v256h-384v-256h85v-42h-85q-17 0 -30 12.5t-13 29.5v256q0 17 13 30t30 13h384zM128 43l128 128l128 -128h-256z" /> - <glyph glyph-name="uniE056" unicode="forward_10" -d="M282 188q0 -7 10 -7q5 0 7 2l4 5q2 4 2 6v43q-2 4 -2 6t-4.5 4.5t-6.5 2.5q-3 0 -6 -3l-4 -4q-3 -4 -3 -6v-43q3 -4 3 -6zM322 209q0 -13 -2 -17l-6 -13q-7 -6 -11 -6q-2 0 -6.5 -1t-6.5 -1q-9 0 -13 2q-2 1 -5 3t-5 3q-9 5 -9 30v15q0 13 2 17l7 13q6 6 10 6q2 0 6.5 1 -t6.5 1q9 0 13 -2q2 -1 5.5 -3t5.5 -3t6 -13q2 -6 2 -17v-15zM233 171h-20v70l-21 -6v15l38 12h3v-91zM85 235q0 70 50 120t121 50v86l107 -107l-107 -107v86q-52 0 -90 -37.5t-38 -90.5t38 -90.5t90 -37.5t90 37.5t38 90.5h43q0 -71 -50.5 -121t-120.5 -50t-120.5 50 -t-50.5 121z" /> - <glyph glyph-name="uniE057" unicode="forward_30" -d="M85 235q0 70 50 120t121 50v86l107 -107l-107 -107v86q-52 0 -90 -37.5t-38 -90.5t38 -90.5t90 -37.5t90 37.5t38 90.5h43q0 -71 -50.5 -121t-120.5 -50t-120.5 50t-50.5 121zM284 188q0 -7 10 -7q5 0 7 2l4 5q2 4 2 6v43q-2 4 -2 6t-4.5 4.5t-6.5 2.5q-3 0 -6 -3l-4 -4 -q-2 -4 -2 -6v-43q2 -4 2 -6zM326 209q0 -13 -2 -17l-6 -13q-7 -6 -11 -6q-2 0 -6.5 -1t-6.5 -1q-7 0 -23 8q-2 1 -6 13q-3 9 -3 17v15q0 11 3 17l6 13q7 6 11 6q2 0 6 1t6 1q9 0 13 -2q2 -1 5.5 -3t5.5 -3t6 -13q2 -6 2 -17v-15zM213 224q15 0 15 13v4q-2 2 -2 4t-4 2h-11 -q-2 -2 -4 -2t-2 -4v-4h-22q0 8 5.5 15.5t12.5 7.5q1 0 5 1t5 1q12 0 24 -6q8 -4 8 -19v-7q-2 -4 -2 -6q0 -4 -4 -4q-2 0 -7 -5q9 -5 11 -8q4 -8 4 -13q0 -9 -2 -11q-1 -1 -3 -4t-3 -4q-4 -4 -11 -4q-2 0 -6.5 -1t-6.5 -1q-8 0 -10 2q-1 1 -5 2t-6 2q-9 5 -9 21h18v-4 -q2 -2 2 -4t4 -2h11q2 2 4 2t2 4v11q-2 2 -2 4t-4 2h-13v15h8z" /> - <glyph glyph-name="uniE058" unicode="forward_5" -d="M250 222q-7 -3 -7 -4l-2 -3h-13l5 47h51v-15h-37l-2 -19q2 0 2 2q0 1 1.5 1.5t1.5 1.5h4h4q8 0 11 -3q1 -1 4 -3t4 -3q9 -9 9 -23q0 -9 -2 -11q-1 -1 -3 -5t-4 -6q-8 -8 -23 -8q-9 0 -11 2q-1 1 -4.5 2t-5.5 2q-9 5 -9 19h17q0 -10 13 -10q4 0 6 2l5 4q2 4 2 6v13l-2 4 -l-5 5q-4 2 -6 2h-4zM85 235q0 70 50 120t121 50v86l107 -107l-107 -107v86q-52 0 -90 -37.5t-38 -90.5t38 -90.5t90 -37.5t90 37.5t38 90.5h43q0 -71 -50.5 -121t-120.5 -50t-120.5 50t-50.5 121z" /> - <glyph glyph-name="uniE059" unicode="replay_10" -d="M282 188q0 -7 10 -7q5 0 7 2l4 5q2 4 2 6v43q-2 4 -2 6t-4.5 4.5t-6.5 2.5q-3 0 -6 -3l-4 -4q-3 -4 -3 -6v-43q3 -4 3 -6zM324 209q0 -13 -2 -17l-6 -13q-7 -6 -11 -6q-2 0 -6.5 -1t-6.5 -1q-9 0 -13 2q-2 1 -5 3t-5 3q-9 5 -9 30v15q0 13 2 17l7 13q6 6 10 6q2 0 6.5 1 -t6.5 1q9 0 13 -2q2 -1 5.5 -3t5.5 -3t6 -13q2 -6 2 -17v-15zM233 171h-20v70l-21 -6v15l38 12h3v-91zM256 405q71 0 121 -50t50 -120q0 -71 -50.5 -121t-120.5 -50t-120.5 50t-50.5 121h43q0 -53 38 -90.5t90 -37.5t90 37.5t38 90.5t-38 90.5t-90 37.5v-86l-107 107l107 107 -v-86z" /> - <glyph glyph-name="uniE05A" unicode="replay_30" -d="M286 188q0 -7 11 -7q4 0 6 2l4 5q2 4 2 6v43q0 1 -1 3t-1 3q0 2 -4 4.5t-6 2.5q-4 0 -7 -3l-4 -4q-2 -4 -2 -6v-43q2 -4 2 -6zM326 209q0 -13 -2 -17l-6 -13q-7 -6 -11 -6q-2 0 -6.5 -1t-6.5 -1q-7 0 -23 8q-2 1 -6 13q-3 9 -3 17v15q0 11 3 17l6 13q7 6 11 6q2 0 6 1 -t6 1q9 0 13 -2q2 -1 5.5 -3t5.5 -3t6 -13q2 -6 2 -17v-15zM213 224q15 0 15 13v4q-2 2 -2 4t-4 2h-11q-2 -2 -4 -2t-2 -4v-4h-22q0 8 5.5 15.5t12.5 7.5q1 0 5 1t5 1q12 0 24 -6q8 -4 8 -19v-7q-2 -4 -2 -6q0 -4 -4 -4q-2 0 -7 -5q9 -5 11 -8q4 -8 4 -13q0 -9 -2 -11 -q-1 -1 -3 -4t-3 -4q-4 -4 -11 -4q-2 0 -6.5 -1t-6.5 -1q-8 0 -10 2q-1 1 -5 2t-6 2q-9 5 -9 21h18v-4q2 -2 2 -4t4 -2h11q2 2 4 2t2 4v11q-2 2 -2 4t-4 2h-13v15h8zM256 405q71 0 121 -50t50 -120q0 -71 -50.5 -121t-120.5 -50t-120.5 50t-50.5 121h43q0 -53 38 -90.5 -t90 -37.5t90 37.5t38 90.5t-38 90.5t-90 37.5v-86l-107 107l107 107v-86z" /> - <glyph glyph-name="uniE05B" unicode="replay_5" -d="M252 222q-7 -3 -7 -4l-2 -3h-15l5 47h51v-15h-37l-2 -19q2 0 2 2q0 1 1.5 1.5t1.5 1.5h4h4q8 0 11 -3q1 -1 4 -3t4 -3q9 -9 9 -23q0 -9 -2 -11q-1 -1 -3 -5t-4 -6t-4.5 -3.5t-3.5 -2.5q-2 -2 -13 -2q-9 0 -11 2q-1 1 -4.5 2t-5.5 2q-9 5 -9 19h17q0 -10 13 -10q4 0 6 2 -l5 4q2 4 2 6v13l-2 4l-5 5q-4 2 -6 2h-4zM256 405q71 0 121 -50t50 -120q0 -71 -50.5 -121t-120.5 -50t-120.5 50t-50.5 121h43q0 -53 38 -90.5t90 -37.5t90 37.5t38 90.5t-38 90.5t-90 37.5v-86l-107 107l107 107v-86z" /> - <glyph glyph-name="uniE05C" unicode="add_to_queue" -d="M341 299v-43h-64v-64h-42v64h-64v43h64v64h42v-64h64zM448 149v256h-384v-256h384zM448 448q17 0 30 -12.5t13 -30.5l-1 -256q0 -17 -12.5 -29.5t-29.5 -12.5h-107v-43h-170v43h-107q-18 0 -30.5 12.5t-12.5 29.5v256q0 18 12.5 30.5t30.5 12.5h384z" /> - <glyph glyph-name="uniE05D" unicode="fiber_dvr" -d="M448 267v21q0 14 -9 23t-23 9h-75v-128h32v43h25l18 -43h32l-19 45q19 9 19 30zM269 192l38 128h-32l-22 -73l-21 73h-32l37 -128h32zM171 224v64q0 14 -9.5 23t-22.5 9h-75v-128h75q13 0 22.5 9t9.5 23zM448 448q18 0 30.5 -12.5t12.5 -30.5v-298q0 -17 -12.5 -30 -t-30.5 -13h-384q-18 0 -30.5 13t-12.5 30v298q0 18 12.5 30.5t30.5 12.5h384zM96 288h43v-64h-43v64zM373 288h43v-21h-43v21z" /> - <glyph glyph-name="uniE05E" unicode="fiber_new" -d="M437 213v107h-26v-96h-24v75h-27v-75h-24v96h-27v-107q0 -9 6.5 -15t15.5 -6h85q9 0 15 6t6 15zM288 293v27h-85v-128h85v27h-53v23h53v27h-53v24h53zM181 192v128h-26v-75l-54 75h-26v-128h26v75l55 -75h25zM427 427q18 0 30 -12.5t12 -30.5v-256q0 -18 -12 -30.5 -t-30 -12.5h-342q-18 0 -30 12.5t-12 30.5v256q0 18 12 30.5t30 12.5h342z" /> - <glyph glyph-name="uniE05F" unicode="playlist_play" -d="M363 235l106 -64l-106 -64v128zM43 192v43h277v-43h-277zM405 405v-42h-362v42h362zM405 320v-43h-362v43h362z" /> - <glyph glyph-name="uniE060" unicode="art_track" -d="M224 192l-48 64l-37 -48l-27 32l-37 -48h149zM256 320v-128q0 -17 -13 -30t-30 -13h-128q-17 0 -29.5 13t-12.5 30v128q0 17 12.5 30t29.5 13h128q17 0 30 -13t13 -30zM299 149v43h170v-43h-170zM469 363v-43h-170v43h170zM469 235h-170v42h170v-42z" /> - <glyph glyph-name="uniE061" unicode="fiber_manual_record" -d="M85 256q0 70 50.5 120.5t120.5 50.5t120.5 -50.5t50.5 -120.5t-50.5 -120.5t-120.5 -50.5t-120.5 50.5t-50.5 120.5z" /> - <glyph glyph-name="uniE062" unicode="fiber_smart_record" -d="M363 421q56 -14 92 -60t36 -105t-36 -105t-92 -60v44q38 13 61.5 46t23.5 75t-23.5 75t-61.5 46v44zM21 256q0 70 50.5 120.5t120.5 50.5t120.5 -50.5t50.5 -120.5t-50.5 -120.5t-120.5 -50.5t-120.5 50.5t-50.5 120.5z" /> - <glyph glyph-name="uniE063" unicode="music_video" -d="M171 192q0 26 19 45t45 19q7 0 21 -4v132h107v-43h-64v-150q0 -26 -19 -44.5t-45 -18.5t-45 19t-19 45zM448 107v298h-384v-298h384zM448 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-384q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h384z" /> - <glyph glyph-name="uniE064" unicode="subscriptions" -d="M341 171l-128 69v-139zM469 256v-171q0 -17 -12.5 -29.5t-29.5 -12.5h-342q-17 0 -29.5 12.5t-12.5 29.5v171q0 17 12.5 30t29.5 13h342q17 0 29.5 -13t12.5 -30zM384 469v-42h-256v42h256zM427 341h-342v43h342v-43z" /> - <glyph glyph-name="uniE065" unicode="playlist_add_check" -d="M459 267l32 -32l-149 -150l-97 96l32 32l65 -64zM43 171v42h170v-42h-170zM299 384v-43h-256v43h256zM299 299v-43h-256v43h256z" /> - <glyph glyph-name="uniE066" unicode="queue_play_next" -d="M512 128l-96 -96l-32 32l64 64l-64 64l32 32zM277 299h64v-43h-64v-64h-42v64h-64v43h64v64h42v-64zM448 448q17 0 30 -12.5t13 -30.5v-170h-43v170h-384v-256h320v-42h-43v-43h-170v43h-107q-18 0 -30.5 12.5t-12.5 29.5v256q0 18 12.5 30.5t30.5 12.5h384z" /> - <glyph glyph-name="uniE067" unicode="remove_from_queue" -d="M341 299v-43h-170v43h170zM448 149v256h-384v-256h384zM448 448q17 0 30 -12.5t13 -30.5l-1 -256q0 -17 -12.5 -29.5t-29.5 -12.5h-107v-43h-170v43h-107q-18 0 -30.5 12.5t-12.5 29.5v256q0 18 12.5 30.5t30.5 12.5h384z" /> - <glyph glyph-name="uniE068" unicode="slow_motion_video" -d="M469 256q0 -82 -55 -143t-136 -69v43q63 8 106 56.5t43 112.5t-43 112.5t-106 56.5v43q81 -8 136 -69t55 -143zM121 91l30 30q37 -28 84 -34v-43q-63 6 -114 47zM87 235q6 -47 34 -83l-30 -31q-41 51 -47 114h43zM121 361q-28 -37 -34 -84h-43q6 63 47 114zM235 425 -q-47 -6 -84 -34l-30 30q51 41 114 47v-43zM278 303l63 -47q-63 -47 -128 -96z" /> - <glyph glyph-name="uniE069" unicode="web_asset" -d="M405 128v213h-298v-213h298zM405 427q18 0 30.5 -13t12.5 -30v-256q0 -17 -13 -30t-30 -13h-298q-18 0 -30.5 13t-12.5 30v256q0 17 12.5 30t30.5 13h298z" /> - <glyph glyph-name="uniE06A" unicode="fiber_pin" -d="M427 192v128h-27v-75l-53 75h-27v-128h27v75l54 -75h26zM267 192v128h-32v-128h32zM192 267v21q0 14 -9 23t-23 9h-75v-128h32v43h43q14 0 23 9.5t9 22.5zM427 427q18 0 30 -12.5t12 -30.5v-256q0 -18 -12 -30.5t-30 -12.5h-342q-18 0 -30 12.5t-12 30.5v256 -q0 18 12 30.5t30 12.5h342zM117 288h43v-21h-43v21z" /> - <glyph glyph-name="uniE06B" unicode="branding_watermark" -d="M448 107v128h-192v-128h192zM448 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-384q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h384z" /> - <glyph glyph-name="uniE06C" unicode="call_to_action" -d="M448 107v64h-384v-64h384zM448 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-384q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h384z" /> - <glyph glyph-name="uniE06D" unicode="featured_play_list" -d="M256 363v42h-192v-42h192zM256 277v43h-192v-43h192zM448 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-384q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h384z" /> - <glyph glyph-name="uniE06E" unicode="featured_video" -d="M256 256v149h-192v-149h192zM448 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-384q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h384z" /> - <glyph glyph-name="uniE06F" unicode="note" -d="M320 395v-118h117zM469 299v-171q0 -17 -12.5 -29.5t-29.5 -12.5l-342 -1q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h256z" /> - <glyph glyph-name="uniE070" unicode="video_call" -d="M299 235v42h-64v64h-43v-64h-64v-42h64v-64h43v64h64zM363 288l85 85v-234l-85 85v-75q0 -9 -6.5 -15t-15.5 -6h-256q-9 0 -15 6t-6 15v214q0 9 6 15t15 6h256q9 0 15.5 -6t6.5 -15v-75z" /> - <glyph glyph-name="uniE071" unicode="video_label" -d="M448 171v234h-384v-234h384zM448 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-384q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h384z" /> - <glyph glyph-name="uniE0AF" unicode="business" -d="M384 192v-43h-43v43h43zM384 277v-42h-43v42h43zM427 107v213h-171v-43h43v-42h-43v-43h43v-43h-43v-42h171zM213 363v42h-42v-42h42zM213 277v43h-42v-43h42zM213 192v43h-42v-43h42zM213 107v42h-42v-42h42zM128 363v42h-43v-42h43zM128 277v43h-43v-43h43zM128 192v43 -h-43v-43h43zM128 107v42h-43v-42h43zM256 363h213v-299h-426v384h213v-85z" /> - <glyph glyph-name="uniE0B0" unicode="call" -d="M141 282q48 -93 141 -141l47 47q6.66667 6.66667 14.2222 6.66667q3.77778 0 7.77778 -1.66667q36 -12 76 -12q9 0 15 -6t6 -15v-75q0 -9 -6 -15t-15 -6q-150 0 -256.5 106.5t-106.5 256.5q0 9 6 15t15 6h75q9 0 15 -6t6 -15q0 -40 12 -76q1.23077 -4 1.23077 -7.6213 -q0 -8.14793 -6.23077 -14.3787z" /> - <glyph glyph-name="uniE0B1" unicode="call_end" -d="M256 320q-52 0 -98 -15v-66q0 -15 -12 -20q-32 -15 -57 -39q-6 -6 -15 -6t-15 6l-53 53q-6 6 -6 15t6 15q105 100 250 100t250 -100q6 -6 6 -15t-6 -15l-53 -53q-6 -6 -15 -6t-15 6q-25 24 -57 39q-12 5 -12 19v66q-50 16 -98 16z" /> - <glyph glyph-name="uniE0B2" unicode="call_made" -d="M192 405h213v-213h-42v141l-248 -248l-30 30l248 248h-141v42z" /> - <glyph glyph-name="uniE0B3" unicode="call_merge" -d="M160 341l96 96l96 -96h-75v-136l-128 -128l-30 30l116 115v119h-75zM363 77l-73 72l30 30l73 -72z" /> - <glyph glyph-name="uniE0B4" unicode="call_missed" -d="M418 363l30 -30l-192 -192l-149 149v-98h-43v171h171v-43h-98l119 -119z" /> - <glyph glyph-name="uniE0B5" unicode="call_received" -d="M427 397l-248 -248h141v-42h-213v213h42v-141l248 248z" /> - <glyph glyph-name="uniE0B6" unicode="call_split" -d="M213 427l-49 -49l113 -113v-180h-42v162l-101 101l-49 -49v128h128zM299 427h128v-128l-49 49l-62 -62l-30 30l62 62z" /> - <glyph glyph-name="uniE0B7" unicode="chat" -d="M384 341v43h-256v-43h256zM299 213v43h-171v-43h171zM128 320v-43h256v43h-256zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-299l-85 -85v384q0 17 12.5 29.5t29.5 12.5h342z" /> - <glyph glyph-name="uniE0B8" unicode="clear_all" -d="M149 363h299v-43h-299v43zM64 149v43h299v-43h-299zM107 235v42h298v-42h-298z" /> - <glyph glyph-name="uniE0B9" unicode="comment" -d="M384 341v43h-256v-43h256zM384 277v43h-256v-43h256zM384 213v43h-256v-43h256zM469 427v-384l-85 85h-299q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 29.5t29.5 12.5h342q17 0 29.5 -12.5t12.5 -29.5z" /> - <glyph glyph-name="uniE0BA" unicode="contacts" -d="M363 149v32q0 24 -36.5 39t-70.5 15t-70.5 -15t-36.5 -39v-32h214zM256 368q-20 0 -34 -14t-14 -34t14 -34t34 -14t34 14t14 34t-14 34t-34 14zM427 427q17 0 29.5 -13t12.5 -30v-256q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13 -h342zM85 0v43h342v-43h-342zM427 512v-43h-342v43h342z" /> - <glyph glyph-name="uniE0BB" unicode="dialer_sip" -d="M427 181q9 0 15 -6t6 -15v-75q0 -9 -6 -15t-15 -6q-150 0 -256.5 106.5t-106.5 256.5q0 9 6 15t15 6h75q9 0 15 -6t6 -15q0 -40 12 -76q4 -13 -5 -22l-47 -47q47 -92 141 -141l47 47q9 9 22 5q36 -12 76 -12zM427 405v22h-22v-22h22zM384 448h64v-64h-43v-43h-21v107z -M320 405v-64h-64v22h43v21h-43v64h64v-21h-43v-22h43zM363 448v-107h-22v107h22z" /> - <glyph glyph-name="uniE0BC" unicode="dialpad" -d="M256 491q17 0 30 -13t13 -30t-13 -30t-30 -13t-30 13t-13 30t13 30t30 13zM256 363q17 0 30 -13t13 -30t-13 -30t-30 -13t-30 13t-13 30t13 30t30 13zM384 363q17 0 30 -13t13 -30t-13 -30t-30 -13t-30 13t-13 30t13 30t30 13zM384 235q17 0 30 -13t13 -30t-13 -30 -t-30 -13t-30 13t-13 30t13 30t30 13zM256 235q17 0 30 -13t13 -30t-13 -30t-30 -13t-30 13t-13 30t13 30t30 13zM384 405q-17 0 -30 13t-13 30t13 30t30 13t30 -13t13 -30t-13 -30t-30 -13zM128 235q17 0 30 -13t13 -30t-13 -30t-30 -13t-30 13t-13 30t13 30t30 13zM128 363 -q17 0 30 -13t13 -30t-13 -30t-30 -13t-30 13t-13 30t13 30t30 13zM128 491q17 0 30 -13t13 -30t-13 -30t-30 -13t-30 13t-13 30t13 30t30 13zM256 107q17 0 30 -13t13 -30t-13 -30t-30 -13t-30 13t-13 30t13 30t30 13z" /> - <glyph glyph-name="uniE0BE" unicode="email" -d="M427 341v43l-171 -107l-171 107v-43l171 -106zM427 427q17 0 29.5 -13t12.5 -30v-256q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h342z" /> - <glyph glyph-name="uniE0BF" unicode="forum" -d="M363 256q0 -9 -6.5 -15t-15.5 -6h-213l-85 -86v299q0 9 6 15t15 6h277q9 0 15.5 -6t6.5 -15v-192zM448 384q9 0 15 -6t6 -15v-320l-85 85h-235q-9 0 -15 6t-6 15v43h277v192h43z" /> - <glyph glyph-name="uniE0C3" unicode="import_export" -d="M341 149h64l-85 -85l-85 85h64v150h42v-150zM192 448l85 -85h-64v-150h-42v150h-64z" /> - <glyph glyph-name="uniE0C4" unicode="invert_colors_off" -d="M256 403l-49 -48l-30 30l79 79l121 -121q38 -38 47 -91.5t-13 -100.5l-155 154v98zM256 94v103l-102 102q-26 -34 -26 -77q0 -52 38 -90t90 -38zM441 67l7 -8l-27 -27l-58 58q-47 -38 -107 -38q-71 0 -121 50q-46 47 -49.5 112.5t37.5 115.5l-59 59l27 27 -q299 -299 350 -349z" /> - <glyph glyph-name="uniE0C6" unicode="live_help" -d="M321 293q20 20 20 48q0 35 -25 60.5t-60 25.5t-60 -25.5t-25 -60.5h42q0 17 13 30t30 13t30 -13t13 -30t-13 -30l-26 -27q-25 -27 -25 -60v-11h42q0 34 25 61zM277 128v43h-42v-43h42zM405 469q17 0 30 -12.5t13 -29.5v-299q0 -17 -13 -30t-30 -13h-85l-64 -64l-64 64 -h-85q-18 0 -30.5 13t-12.5 30v299q0 17 12.5 29.5t30.5 12.5h298z" /> - <glyph glyph-name="uniE0C7" unicode="location_off" -d="M250 267q109 -108 177 -176l-27 -27l-72 71q-16 -24 -34 -47t-28 -34l-10 -11q-6 7 -16 18.5t-36 46t-45.5 67t-35.5 73.5t-16 72q0 11 4 33l-68 68l27 27l178 -178zM256 373q-23 0 -39 -18l-69 68q44 46 108 46q62 0 105.5 -43.5t43.5 -105.5q0 -48 -36 -117l-77 78 -q17 15 17 39q0 22 -15.5 37.5t-37.5 15.5z" /> - <glyph glyph-name="uniE0C8" unicode="location_on" -d="M256 267q22 0 37.5 15.5t15.5 37.5t-15.5 37.5t-37.5 15.5t-37.5 -15.5t-15.5 -37.5t15.5 -37.5t37.5 -15.5zM256 469q62 0 105.5 -43.5t43.5 -105.5q0 -31 -15.5 -71t-37.5 -75t-43.5 -65.5t-36.5 -48.5l-16 -17q-6 7 -16 18.5t-36 46t-45.5 67t-35.5 73.5t-16 72 -q0 62 43.5 105.5t105.5 43.5z" /> - <glyph glyph-name="uniE0C9" unicode="message" -d="M384 341v43h-256v-43h256zM384 277v43h-256v-43h256zM384 213v43h-256v-43h256zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-299l-85 -85v384q0 17 12.5 29.5t29.5 12.5h342z" /> - <glyph glyph-name="uniE0CA" unicode="chat_bubble" -d="M427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-299l-85 -85v384q0 17 12.5 29.5t29.5 12.5h342z" /> - <glyph glyph-name="uniE0CB" unicode="chat_bubble_outline" -d="M427 171v256h-342v-299l43 43h299zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-299l-85 -85v384q0 17 12.5 29.5t29.5 12.5h342z" /> - <glyph glyph-name="uniE0CC" unicode="no_sim" -d="M78 429l373 -372l-28 -28l-40 41q-12 -6 -20 -6h-214q-17 0 -29.5 13t-12.5 30v239l-56 56zM405 405v-249l-242 242l50 50h150q17 0 29.5 -13t12.5 -30z" /> - <glyph glyph-name="uniE0CD" unicode="phone" -d="M141 282q48 -93 141 -141l47 47q10 10 22 5q36 -12 76 -12q9 0 15 -6t6 -15v-75q0 -9 -6 -15t-15 -6q-150 0 -256.5 106.5t-106.5 256.5q0 9 6 15t15 6h75q9 0 15 -6t6 -15q0 -40 12 -76q4 -13 -5 -22z" /> - <glyph glyph-name="uniE0CE" unicode="portable_wifi_off" -d="M70 459l21 -22l357 -357l-27 -27l-160 161h-1l-4 -1q-17 0 -30 13t-13 30l1 4l-34 34q-9 -18 -9 -38q0 -49 42 -74l-21 -37q-29 17 -46.5 46.5t-17.5 64.5q0 38 20 69l-30 31q-33 -46 -33 -100q0 -46 23 -85.5t62 -62.5l-21 -37q-49 28 -77.5 77.5t-28.5 107.5 -q0 74 44 131l-44 45zM256 427q-43 0 -80 -20l-31 31q50 31 111 31q88 0 150.5 -62.5t62.5 -150.5q0 -61 -31 -111l-32 31q21 39 21 80q0 70 -50.5 120.5t-120.5 50.5zM375 208l-35 35q1 4 1 13q0 35 -25 60t-60 25q-9 0 -13 -1l-35 35q22 9 48 9q53 0 90.5 -37.5t37.5 -90.5 -q0 -26 -9 -48z" /> - <glyph glyph-name="uniE0CF" unicode="contact_phone" -d="M381 213q-8 21 -8 43t8 43h35l32 42l-42 43q-44 -33 -59 -85q-6 -21 -6 -43t6 -43q15 -52 59 -85l42 43l-32 42h-35zM299 128v21q0 29 -44 47.5t-84 18.5t-84 -18.5t-44 -47.5v-21h256zM171 384q-26 0 -45 -19t-19 -45t19 -45t45 -19t45 19t19 45t-19 45t-45 19zM469 448 -q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-426q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h426z" /> - <glyph glyph-name="uniE0D0" unicode="contact_mail" -d="M469 256v128h-170v-128h170zM299 128v21q0 29 -44 47.5t-84 18.5t-84 -18.5t-44 -47.5v-21h256zM171 384q-26 0 -45 -19t-19 -45t19 -45t45 -19t45 19t19 45t-19 45t-45 19zM469 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-426q-17 0 -30 13t-13 30v298 -q0 17 13 30t30 13h426zM448 341l-64 -42l-64 42v22l64 -43l64 43v-22z" /> - <glyph glyph-name="uniE0D1" unicode="ring_volume" -d="M137 303q-74 74 -76 75l30 31l76 -76zM277 469v-106h-42v106h42zM451 378l-76 -75l-30 30l76 76zM506 156q6 -6 6 -15t-6 -15l-53 -53q-6 -6 -15 -6t-15 6q-28 26 -57 40q-12 5 -12 19v66q-46 15 -98 15t-98 -15v-66q0 -15 -12 -20q-32 -15 -57 -39q-6 -6 -15 -6t-15 6 -l-53 53q-6 6 -6 15t6 15q105 100 250 100t250 -100z" /> - <glyph glyph-name="uniE0D2" unicode="speaker_phone" -d="M320 85v171h-128v-171h128zM317 298q10 0 17 -7t7 -17v-207q0 -10 -7 -17t-17 -7h-122q-10 0 -17 7t-7 17v207q0 10 7 17.5t17 7.5zM256 491q96 0 165 -69l-30 -30q-56 56 -135 56t-135 -56l-30 30q69 69 165 69zM149 361q44 44 107 44t107 -44l-31 -30q-31 31 -76 31 -t-76 -31z" /> - <glyph glyph-name="uniE0D3" unicode="stay_current_landscape" -d="M405 363h-298v-214h298v214zM22 363q0 17 12.5 29.5t29.5 12.5h384q17 0 30 -12.5t13 -29.5v-214q0 -17 -13 -29.5t-30 -12.5h-384q-17 0 -30 12.5t-13 29.5z" /> - <glyph glyph-name="uniE0D4" unicode="stay_current_portrait" -d="M363 107v298h-214v-298h214zM363 490q17 0 29.5 -12.5t12.5 -29.5v-384q0 -17 -12.5 -30t-29.5 -13h-214q-17 0 -29.5 13t-12.5 30v384q0 17 12.5 30t29.5 13z" /> - <glyph glyph-name="uniE0D5" unicode="stay_primary_landscape" -d="M405 363h-298v-214h298v214zM22 363q0 17 12.5 29.5t29.5 12.5h384q17 0 30 -12.5t13 -29.5v-214q0 -17 -13 -29.5t-30 -12.5h-384q-17 0 -30 12.5t-13 29.5z" /> - <glyph glyph-name="uniE0D6" unicode="stay_primary_portrait" -d="M363 107v298h-214v-298h214zM363 490q17 0 29.5 -12.5t12.5 -29.5v-384q0 -17 -12.5 -30t-29.5 -13h-214q-17 0 -29.5 13t-12.5 30v384q0 17 12.5 30t29.5 13z" /> - <glyph glyph-name="uniE0D7" unicode="swap_calls" -d="M384 427l85 -86h-64v-149q0 -35 -25 -60t-60 -25t-60 25t-25 60v149q0 17 -13 30t-30 13t-30 -13t-13 -30v-149h64l-85 -85l-85 85h64v149q0 35 25 60.5t60 25.5t60 -25.5t25 -60.5v-149q0 -17 13 -30t30 -13t30 13t13 30v149h-64z" /> - <glyph glyph-name="uniE0D8" unicode="textsms" -d="M363 277v43h-43v-43h43zM277 277v43h-42v-43h42zM192 277v43h-43v-43h43zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-299l-85 -85v384q0 17 12.5 29.5t29.5 12.5h342z" /> - <glyph glyph-name="uniE0D9" unicode="voicemail" -d="M395 192q31 0 52.5 22t21.5 53t-21.5 52.5t-52.5 21.5t-53 -21.5t-22 -52.5t22 -53t53 -22zM117 192q31 0 53 22t22 53t-22 52.5t-53 21.5t-52.5 -21.5t-21.5 -52.5t21.5 -53t52.5 -22zM395 384q49 0 83 -34t34 -83t-34 -83.5t-83 -34.5h-278q-49 0 -83 34.5t-34 83.5 -t34 83t83 34t83.5 -34t34.5 -83q0 -43 -27 -75h96q-27 32 -27 75q0 49 34.5 83t83.5 34z" /> - <glyph glyph-name="uniE0DA" unicode="vpn_key" -d="M149 213q17 0 30 13t13 30t-13 30t-30 13t-29.5 -13t-12.5 -30t12.5 -30t29.5 -13zM270 299h221v-86h-43v-85h-85v85h-93q-13 -38 -46 -61.5t-75 -23.5q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q42 0 75 -23.5t46 -61.5z" /> - <glyph glyph-name="uniE0DB" unicode="phonelink_erase" -d="M405 491q17 0 30 -13t13 -30v-384q0 -17 -13 -30t-30 -13h-213q-17 0 -30 13t-13 30v64h43v-43h213v342h-213v-43h-43v64q0 17 13 30t30 13h213zM277 337l-85 -85l85 -86l-21 -21l-85 85l-86 -85l-21 21l85 86l-85 85l21 21l86 -85l85 85z" /> - <glyph glyph-name="uniE0DC" unicode="phonelink_lock" -d="M203 277v32q0 12 -9.5 20t-22.5 8t-22.5 -8t-9.5 -20v-32h64zM230 277q10 0 18 -8t8 -19v-75q0 -10 -8.5 -18t-19.5 -8h-117q-10 0 -18 8.5t-8 19.5v75q0 10 8 17.5t18 7.5v32q0 22 18.5 38t41.5 16t41 -16t18 -38v-32zM405 491q17 0 30 -13t13 -30v-384q0 -17 -13 -30 -t-30 -13h-213q-17 0 -30 13t-13 30v64h43v-43h213v342h-213v-43h-43v64q0 17 13 30t30 13h213z" /> - <glyph glyph-name="uniE0DD" unicode="phonelink_ring" -d="M299 85v342h-214v-342h214zM299 491q17 0 29.5 -13t12.5 -30v-384q0 -17 -12.5 -30t-29.5 -13h-214q-17 0 -29.5 13t-12.5 30v384q0 17 12.5 30t29.5 13h214zM384 303q20 -21 20 -47t-20 -45l-21 22q18 25 0 49zM429 348q40 -38 40 -91.5t-40 -90.5l-22 22q29 31 29 70.5 -t-29 67.5z" /> - <glyph glyph-name="uniE0DE" unicode="phonelink_setup" -d="M405 491q17 0 30 -13t13 -30v-384q0 -17 -13 -30t-30 -13h-213q-17 0 -30 13t-13 30v64h43v-43h213v342h-213v-43h-43v64q0 17 13 30t30 13h213zM171 213q17 0 29.5 13t12.5 30t-12.5 30t-29.5 13t-30 -13t-13 -30t13 -30t30 -13zM252 245l23 -19q4 -4 2 -6l-21 -37 -q-2 -2 -6 -2l-28 11q-14 -9 -19 -11l-5 -27q-5 -5 -6 -5h-43q-2 0 -3.5 2t-0.5 3l-4 27q-5 2 -19 11l-30 -9q-2 -2 -7 3l-21 36q0 4 2 8l24 17v22l-24 17q-4 4 -2 6l21 37q2 2 7 2l27 -11q13 9 20 11l4 27q5 5 6 5h43q6 0 6 -5l5 -27q5 -2 19 -11l28 9q2 1 6 -3l21 -36 -q0 -4 -2 -6l-23 -17v-22z" /> - <glyph glyph-name="uniE0DF" unicode="present_to_all" -d="M213 256h-42l85 85l85 -85h-42v-85h-86v85zM448 106v300h-384v-300h384zM448 448q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-384q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h384z" /> - <glyph glyph-name="uniE0E0" unicode="import_contacts" -d="M448 117v246q-33 10 -75 10q-65 0 -117 -32v-245q52 32 117 32q39 0 75 -11zM373 416q76 0 118 -32v-311q0 -4 -3.5 -7.5t-7.5 -3.5q-3 0 -5 1q-41 22 -102 22q-65 0 -117 -32q-43 32 -117 32q-54 0 -102 -23q-1 0 -2.5 -0.5t-2.5 -0.5q-4 0 -7.5 3t-3.5 7v313 -q43 32 118 32q74 0 117 -32q43 32 117 32z" /> - <glyph glyph-name="uniE0E1" unicode="mail_outline" -d="M256 277l171 107h-342zM427 128v213l-171 -106l-171 106v-213h342zM427 427q17 0 29.5 -13t12.5 -30v-256q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h342z" /> - <glyph glyph-name="uniE0E2" unicode="screen_share" -d="M277 203l86 80l-86 80v-46q-105 -15 -128 -125q43 58 128 58v-47zM427 128h85v-43h-512v43h85q-18 0 -30 12.5t-12 30.5v213q0 18 12 30.5t30 12.5h342q17 0 29.5 -12.5t12.5 -30.5v-213q0 -17 -12.5 -30t-29.5 -13z" /> - <glyph glyph-name="uniE0E3" unicode="stop_screen_share" -d="M149 192q29 40 78 52l-34 34q-32 -31 -44 -86zM51 475l421 -421l-27 -27l-58 58h-387v43h85q-18 0 -30 12.5t-12 29.5v214q0 19 14 31l-33 33zM469 170q0 -25 -22 -37l-118 118l34 32l-86 79v-45q-2 -1 -5.5 -1t-5.5 -1l-112 111h273q17 0 29.5 -12t12.5 -30v-214z -M453 128h59v-43h-17z" /> - <glyph glyph-name="uniE0E4" unicode="call_missed_outgoing" -d="M64 333l30 30l162 -162l119 119h-98v43h171v-171h-43v98l-149 -149z" /> - <glyph glyph-name="uniE0E5" unicode="rss_feed" -d="M85 297q88 0 150 -62t62 -150h-61q0 62 -44.5 106.5t-106.5 44.5v61zM85 417q137 0 234.5 -97.5t97.5 -234.5h-60q0 113 -79.5 192.5t-192.5 79.5v60zM85 132q0 19 13.5 32.5t33.5 13.5t33 -13t13 -33t-13.5 -33.5t-32.5 -13.5q-20 0 -33.5 13.5t-13.5 33.5z" /> - <glyph glyph-name="uniE145" unicode="add" -d="M405 235h-128v-128h-42v128h-128v42h128v128h42v-128h128v-42z" /> - <glyph glyph-name="uniE146" unicode="add_box" -d="M363 235v42h-86v86h-42v-86h-86v-42h86v-86h42v86h86zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-18 0 -30.5 13t-12.5 30v298q0 17 12.5 30t30.5 13h298z" /> - <glyph glyph-name="uniE147" unicode="add_circle" -d="M363 235v42h-86v86h-42v-86h-86v-42h86v-86h42v86h86zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE148" unicode="add_circle_outline" -d="M256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM277 363v-86h86v-42h-86v-86h-42 -v86h-86v42h86v86h42z" /> - <glyph glyph-name="uniE149" unicode="archive" -d="M109 405h294l-20 22h-256zM256 139l117 117h-74v43h-86v-43h-74zM438 400q10 -12 10 -27v-266q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v266q0 15 10 27l29 36q10 12 25 12h256q15 0 25 -12z" /> - <glyph glyph-name="uniE14A" unicode="backspace" -d="M405 179l-76 77l76 77l-30 30l-76 -77l-77 77l-30 -30l77 -77l-77 -77l30 -30l77 77l76 -77zM469 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-320q-20 0 -34 19l-115 173l115 173q14 19 34 19h320z" /> - <glyph glyph-name="uniE14B" unicode="block" -d="M256 85q70 0 120.5 50.5t50.5 120.5q0 60 -36 105l-240 -240q45 -36 105 -36zM85 256q0 -60 36 -105l240 240q-45 36 -105 36q-70 0 -120.5 -50.5t-50.5 -120.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5 -t150.5 62.5z" /> - <glyph glyph-name="uniE14C" unicode="clear" -d="M405 375l-119 -119l119 -119l-30 -30l-119 119l-119 -119l-30 30l119 119l-119 119l30 30l119 -119l119 119z" /> - <glyph glyph-name="uniE14D" unicode="content_copy" -d="M405 64v299h-234v-299h234zM405 405q17 0 30 -12.5t13 -29.5v-299q0 -17 -13 -30t-30 -13h-234q-17 0 -30 13t-13 30v299q0 17 13 29.5t30 12.5h234zM341 491v-43h-256v-299h-42v299q0 17 12.5 30t29.5 13h256z" /> - <glyph glyph-name="uniE14E" unicode="content_cut" -d="M405 448h64v-21l-149 -150l-43 43zM256 245q11 0 11 11t-11 11t-11 -11t11 -11zM128 85q17 0 30 12.5t13 30.5t-13 30.5t-30 12.5t-30 -12.5t-13 -30.5t13 -30.5t30 -12.5zM128 341q17 0 30 12.5t13 30.5t-13 30.5t-30 12.5t-30 -12.5t-13 -30.5t13 -30.5t30 -12.5z -M206 349l263 -264v-21h-64l-149 149l-50 -50q7 -15 7 -35q0 -35 -25 -60t-60 -25t-60 25t-25 60t25 60t60 25q20 0 35 -7l50 50l-50 50q-15 -7 -35 -7q-35 0 -60 25t-25 60t25 60t60 25t60 -25t25 -60q0 -20 -7 -35z" /> - <glyph glyph-name="uniE14F" unicode="content_paste" -d="M405 85v342h-42v-64h-214v64h-42v-342h298zM256 469q-9 0 -15 -6t-6 -15t6 -15t15 -6t15 6t6 15t-6 15t-15 6zM405 469q17 0 30 -12.5t13 -29.5v-342q0 -17 -13 -29.5t-30 -12.5h-298q-17 0 -30 12.5t-13 29.5v342q0 17 13 29.5t30 12.5h89q7 19 23 31t37 12t37 -12 -t23 -31h89z" /> - <glyph glyph-name="uniE150" unicode="create" -d="M442 362l-39 -39l-80 80l39 39q6 6 15 6t15 -6l50 -50q6 -6 6 -15t-6 -15zM64 144l236 236l80 -80l-236 -236h-80v80z" /> - <glyph glyph-name="uniE151" unicode="drafts" -d="M256 235l176 110l-176 103l-176 -103zM469 341v-213q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v213q0 25 20 37l193 113l193 -113q20 -12 20 -37z" /> - <glyph glyph-name="uniE152" unicode="filter_list" -d="M128 235v42h256v-42h-256zM64 384h384v-43h-384v43zM213 128v43h86v-43h-86z" /> - <glyph glyph-name="uniE153" unicode="flag" -d="M307 384h120v-213h-150l-8 42h-120v-149h-42v363h192z" /> - <glyph glyph-name="uniE154" unicode="forward" -d="M256 341v86l171 -171l-171 -171v86h-171v170h171z" /> - <glyph glyph-name="uniE155" unicode="gesture" -d="M296 116q14 0 28 18.5t18 56.5q-30 -8 -46 -27t-16 -32q0 -7 5 -11.5t11 -4.5zM98 365l-37 36q10 12 18 20q27 27 58 27q19 0 36.5 -15t17.5 -46q0 -30 -28 -70q-28 -39 -39 -75q-6 -17 -3.5 -29t10.5 -12q9 0 24 18q22 22 49 58q48 60 105 60q42 0 62.5 -27.5 -t23.5 -61.5h53v-53h-52q-6 -69 -37 -100t-64 -31q-28 0 -48 19.5t-20 46.5q0 33 30 69t85 46q-1 8 -1.5 11t-3 9.5t-6 9.5t-10.5 5.5t-17 2.5q-28 0 -87 -73q-17 -21 -23.5 -28.5t-18.5 -17.5t-23 -13q-35 -11 -60 13t-25 60q0 15 5.5 33t14.5 35t17 30.5t15.5 24.5t8.5 12 -q17 28 6 32q-7 3 -36 -26z" /> - <glyph glyph-name="uniE156" unicode="inbox" -d="M405 192v213h-299v-213h86q0 -26 19 -45t45 -19t45 19t19 45h85zM405 448q17 0 30 -12.5t13 -30.5v-298q0 -17 -13 -30t-30 -13h-299q-18 0 -30 12.5t-12 30.5v298q0 18 12 30.5t30 12.5h299z" /> - <glyph glyph-name="uniE157" unicode="link" -d="M363 363q44 0 75 -31.5t31 -75.5t-31 -75.5t-75 -31.5h-86v41h86q27 0 46.5 19.5t19.5 46.5t-19.5 46.5t-46.5 19.5h-86v41h86zM171 235v42h170v-42h-170zM83 256q0 -27 19.5 -46.5t46.5 -19.5h86v-41h-86q-44 0 -75 31.5t-31 75.5t31 75.5t75 31.5h86v-41h-86 -q-27 0 -46.5 -19.5t-19.5 -46.5z" /> - <glyph glyph-name="uniE158" unicode="mail" -d="M427 341v43l-171 -107l-171 107v-43l171 -106zM427 427q17 0 29.5 -13t12.5 -30v-256q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h342z" /> - <glyph glyph-name="uniE159" unicode="markunread" -d="M427 341v43l-171 -107l-171 107v-43l171 -106zM427 427q17 0 29.5 -13t12.5 -30v-256q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h342z" /> - <glyph glyph-name="uniE15A" unicode="redo" -d="M393 286l76 77v-192h-192l78 77q-48 40 -110 40q-56 0 -100.5 -32.5t-61.5 -84.5l-50 16q22 68 80.5 111t131.5 43q85 0 148 -55z" /> - <glyph glyph-name="uniE15B" unicode="remove" -d="M405 235h-298v42h298v-42z" /> - <glyph glyph-name="uniE15C" unicode="remove_circle" -d="M363 235v42h-214v-42h214zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE15D" unicode="remove_circle_outline" -d="M256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM149 277h214v-42h-214v42z" /> - <glyph glyph-name="uniE15E" unicode="reply" -d="M213 320q104 -15 160.5 -79.5t74.5 -155.5q-77 109 -235 109v-87l-149 149l149 149v-85z" /> - <glyph glyph-name="uniE15F" unicode="reply_all" -d="M277 320q104 -15 160.5 -79.5t74.5 -155.5q-77 109 -235 109v-87l-149 149l149 149v-85zM149 341l-85 -85l85 -85v-64l-149 149l149 149v-64z" /> - <glyph glyph-name="uniE160" unicode="report" -d="M277 235v128h-42v-128h42zM256 143q11 0 19.5 8.5t8.5 19.5t-8.5 19t-19.5 8t-19.5 -8t-8.5 -19t8.5 -19.5t19.5 -8.5zM336 448l112 -112v-160l-112 -112h-160l-112 112v160l112 112h160z" /> - <glyph glyph-name="uniE161" unicode="save" -d="M320 320v85h-213v-85h213zM256 107q26 0 45 19t19 45t-19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19zM363 448l85 -85v-256q0 -17 -13 -30t-30 -13h-298q-18 0 -30.5 13t-12.5 30v298q0 17 12.5 30t30.5 13h256z" /> - <glyph glyph-name="uniE162" unicode="select_all" -d="M192 320v-128h128v128h-128zM149 149v214h214v-214h-214zM320 405v43h43v-43h-43zM320 64v43h43v-43h-43zM405 149v43h43v-43h-43zM405 320v43h43v-43h-43zM405 64v43h43q0 -17 -13 -30t-30 -13zM405 235v42h43v-42h-43zM235 64v43h42v-43h-42zM192 448v-43h-43v43h43z -M64 149v43h43v-43h-43zM107 64q-17 0 -30 13t-13 30h43v-43zM405 448q17 0 30 -13t13 -30h-43v43zM277 448v-43h-42v43h42zM64 320v43h43v-43h-43zM149 64v43h43v-43h-43zM64 235v42h43v-42h-43zM64 405q0 17 13 30t30 13v-43h-43z" /> - <glyph glyph-name="uniE163" unicode="send" -d="M43 64v149l320 43l-320 43v149l448 -192z" /> - <glyph glyph-name="uniE164" unicode="sort" -d="M64 235v42h256v-42h-256zM64 384h384v-43h-384v43zM64 128v43h128v-43h-128z" /> - <glyph glyph-name="uniE165" unicode="text_format" -d="M256 384l-40 -107h80zM203 239l-20 -47h-44l101 235h32l101 -235h-44l-20 47h-106zM107 149h298v-42h-298v42z" /> - <glyph glyph-name="uniE166" unicode="undo" -d="M267 341q73 0 131 -43t81 -111l-50 -16q-17 52 -61.5 84.5t-100.5 32.5q-62 0 -110 -40l78 -77h-192v192l76 -77q63 55 148 55z" /> - <glyph glyph-name="uniE167" unicode="font_download" -d="M340 117h45l-109 278h-40l-109 -278h45l24 64h120zM427 469q17 0 29.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-29.5 -12.5h-342q-17 0 -29.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t29.5 12.5h342zM212 224l44 118l44 -118h-88z" /> - <glyph glyph-name="uniE168" unicode="move_to_inbox" -d="M341 299l-85 -86l-85 86h42v64h86v-64h42zM405 192v213h-299v-213h86q0 -26 19 -45t45 -19t45 19t19 45h85zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-299q-18 0 -30 12.5t-12 30.5v298q0 18 12 30.5t30 12.5h299z" /> - <glyph glyph-name="uniE169" unicode="unarchive" -d="M109 405h294l-20 22h-256zM256 309l-117 -117h74v-43h86v43h74zM438 401q10 -12 10 -28v-266q0 -17 -13 -30t-30 -13h-298q-18 0 -30.5 13t-12.5 30v266q0 16 10 28l29 35q10 12 25 12h256q15 0 25 -12z" /> - <glyph glyph-name="uniE16A" unicode="next_week" -d="M235 117l85 86l-85 85l-22 -21l64 -64l-64 -64zM213 405v-42h86v42h-86zM299 448q17 0 29.5 -12.5t12.5 -30.5v-42h86q17 0 29.5 -13t12.5 -30v-235q0 -17 -12.5 -29.5t-29.5 -12.5h-342q-17 0 -29.5 12.5t-12.5 29.5v235q0 17 12.5 30t29.5 13h86v42q0 17 12.5 30 -t29.5 13h86z" /> - <glyph glyph-name="uniE16B" unicode="weekend" -d="M384 405q17 0 30 -12.5t13 -29.5v-46q-19 -7 -31 -23t-12 -37v-44h-256v44q0 21 -12 37t-31 23v46q0 17 13 29.5t30 12.5h256zM448 299q17 0 30 -13t13 -30v-107q0 -17 -13 -29.5t-30 -12.5h-384q-17 0 -30 12.5t-13 29.5v107q0 17 13 30t30 13t30 -13t13 -30v-64h298v64 -q0 17 13 30t30 13z" /> - <glyph glyph-name="uniE16C" unicode="delete_sweep" -d="M299 405v-42h-256v42h64l21 22h85l22 -22h64zM64 128v213h213v-213q0 -17 -12.5 -30t-29.5 -13h-128q-17 0 -30 13t-13 30zM320 256h128v-43h-128v43zM320 341h149v-42h-149v42zM320 171h85v-43h-85v43z" /> - <glyph glyph-name="uniE16D" unicode="low_priority" -d="M43 267q0 57 40.5 97.5t97.5 40.5h75v-42h-75q-40 0 -68 -28t-28 -68t28 -68t68 -28h11v42l64 -64l-64 -64v43h-11q-57 0 -97.5 41t-40.5 98zM299 171h170v-43h-170v43zM299 288h170v-43h-170v43zM299 405h170v-42h-170v42z" /> - <glyph glyph-name="uniE190" unicode="access_alarm" -d="M256 85q62 0 105.5 44t43.5 106t-43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5t43.5 -106t105.5 -44zM256 427q80 0 136 -56.5t56 -135.5t-56 -135.5t-136 -56.5t-136 56.5t-56 135.5t56 135.5t136 56.5zM267 341v-112l85 -50l-16 -26l-101 60v128h32zM168 440 -l-98 -82l-27 32l98 82zM469 390l-27 -33l-98 83l27 32z" /> - <glyph glyph-name="uniE191" unicode="access_alarms" -d="M256 85q62 0 105.5 44t43.5 106t-43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5t43.5 -106t105.5 -44zM256 427q80 0 136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136t56 136t136 56zM267 341v-113l85 -51l-17 -26l-100 62v128h32zM169 439l-99 -81l-27 32 -l98 81zM469 390l-27 -32l-99 84l28 32z" /> - <glyph glyph-name="uniE192" unicode="access_time" -d="M267 363v-112l96 -57l-16 -27l-112 68v128h32zM256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5 -t150.5 62.5z" /> - <glyph glyph-name="uniE193" unicode="add_alarm" -d="M277 320v-64h64v-43h-64v-64h-42v64h-64v43h64v64h42zM256 85q62 0 105.5 44t43.5 106t-43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5t43.5 -106t105.5 -44zM256 427q80 0 136 -56.5t56 -135.5t-56 -135.5t-136 -56.5t-136 56.5t-56 135.5t56 135.5t136 56.5z -M469 390l-27 -33l-98 83l27 32zM168 440l-98 -82l-27 32l98 82z" /> - <glyph glyph-name="uniE194" unicode="airplanemode_inactive" -d="M64 400l27 27l336 -336l-27 -27l-123 122v-79l43 -32v-32l-75 21l-74 -21v32l42 32v117l-170 -53v42l127 80zM277 320l171 -107v-42l-68 21l-167 167v78q0 13 9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5v-117z" /> - <glyph glyph-name="uniE195" unicode="airplanemode_active" -d="M217 320zM448 171l-171 53v-117l43 -32v-32l-75 21l-74 -21v32l42 32v117l-170 -53v42l170 107v117q0 13 9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5v-117l171 -107v-42z" /> - <glyph glyph-name="uniE19C" unicode="battery_alert" -d="M277 213v107h-42v-107h42zM277 128v43h-42v-43h42zM334 427q12 0 20.5 -8.5t8.5 -20.5v-327q0 -12 -8.5 -20t-20.5 -8h-156q-12 0 -20.5 8t-8.5 20v327q0 12 8.5 20.5t20.5 8.5h35v42h86v-42h35z" /> - <glyph glyph-name="uniE1A3" unicode="battery_charging_full" -d="M235 85l85 160h-43v118l-85 -160h43v-118zM334 427q12 0 20.5 -8.5t8.5 -20.5v-327q0 -12 -8.5 -20t-20.5 -8h-156q-12 0 -20.5 8t-8.5 20v327q0 12 8.5 20.5t20.5 8.5h35v42h86v-42h35z" /> - <glyph glyph-name="uniE1A4" unicode="battery_full" -d="M334 427q12 0 20.5 -8.5t8.5 -20.5v-327q0 -12 -8.5 -20t-20.5 -8h-156q-12 0 -20.5 8t-8.5 20v327q0 12 8.5 20.5t20.5 8.5h35v42h86v-42h35z" /> - <glyph glyph-name="uniE1A5" unicode="battery_std" -d="M334 427q12 0 20.5 -8.5t8.5 -20.5v-327q0 -12 -8.5 -20t-20.5 -8h-156q-12 0 -20.5 8t-8.5 20v327q0 12 8.5 20.5t20.5 8.5h35v42h86v-42h35z" /> - <glyph glyph-name="uniE1A6" unicode="battery_unknown" -d="M305 241q15 15 15 36q0 26 -19 45t-45 19t-45 -19t-19 -45h32q0 13 9 22.5t23 9.5t23 -9.5t9 -22.5t-9 -22l-20 -20q-20 -20 -20 -43h34q0 16 18 34zM276 129v41h-40v-41h40zM334 427q12 0 20.5 -8.5t8.5 -20.5v-327q0 -12 -8.5 -20t-20.5 -8h-156q-12 0 -20.5 8t-8.5 20 -v327q0 12 8.5 20.5t20.5 8.5h35v42h86v-42h35z" /> - <glyph glyph-name="uniE1A7" unicode="bluetooth" -d="M317 164l-40 41v-81zM277 388v-81l40 41zM378 348l-92 -92l92 -92l-122 -121h-21v162l-98 -98l-30 30l119 119l-119 119l30 30l98 -98v162h21z" /> - <glyph glyph-name="uniE1A8" unicode="bluetooth_connected" -d="M405 299l43 -43l-43 -43l-42 43zM317 164l-40 41v-81zM277 388v-81l40 41zM378 348l-92 -92l92 -92l-122 -121h-21v162l-98 -98l-30 30l119 119l-119 119l30 30l98 -98v162h21zM149 256l-42 -43l-43 43l43 43z" /> - <glyph glyph-name="uniE1A9" unicode="bluetooth_disabled" -d="M277 124l40 40l-40 41v-81zM115 427l312 -312l-30 -30l-49 49l-92 -91h-21v162l-98 -98l-30 30l119 119l-141 141zM277 388v-69l-42 43v107h21l122 -121l-65 -65l-30 30l34 35z" /> - <glyph glyph-name="uniE1AA" unicode="bluetooth_searching" -d="M275 164l-40 41v-81zM235 388v-81l40 41zM335 348l-92 -92l92 -92l-122 -121h-21v162l-98 -98l-30 30l119 119l-119 119l30 30l98 -98v162h21zM417 369q31 -50 31 -111t-33 -113l-25 25q21 42 21 86t-21 86zM304 256l49 49q10 -25 10 -49q0 -25 -10 -50z" /> - <glyph glyph-name="uniE1AB" unicode="brightness_auto" -d="M305 171h41l-69 192h-42l-69 -192h41l15 42h68zM427 327l70 -71l-70 -71v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100v-100zM231 242l25 78l25 -78h-50z" /> - <glyph glyph-name="uniE1AC" unicode="brightness_high" -d="M256 341q35 0 60 -25t25 -60t-25 -60t-60 -25t-60 25t-25 60t25 60t60 25zM256 128q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5zM427 327l70 -71l-70 -71v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100 -l71 70l71 -70h100v-100z" /> - <glyph glyph-name="uniE1AD" unicode="brightness_low" -d="M256 128q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5zM427 185v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100v-100l70 -71z" /> - <glyph glyph-name="uniE1AE" unicode="brightness_medium" -d="M256 128q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5v-256zM427 185v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100v-100l70 -71z" /> - <glyph glyph-name="uniE1AF" unicode="data_usage" -d="M256 107q72 0 116 56l56 -33q-64 -87 -172 -87q-88 0 -150.5 62.5t-62.5 150.5q0 83 55.5 143.5t136.5 68.5v-64q-54 -8 -91 -50t-37 -98q0 -62 43.5 -105.5t105.5 -43.5zM277 468q81 -8 136.5 -68.5t55.5 -143.5q0 -48 -18 -87l-56 33q10 28 10 54q0 56 -37 98t-91 50 -v64z" /> - <glyph glyph-name="uniE1B0" unicode="developer_mode" -d="M363 107v42h42v-85q0 -17 -12.5 -30t-29.5 -13h-214q-17 0 -29.5 13t-12.5 30v85h42v-42h214zM213 188l-30 -30l-98 98l98 98l30 -30l-67 -68zM329 158l-30 30l67 68l-67 68l30 30l98 -98zM149 405v-42h-42v85q0 17 12.5 30t29.5 13l214 -1q17 0 29.5 -12.5t12.5 -29.5 -v-85h-42v42h-214z" /> - <glyph glyph-name="uniE1B1" unicode="devices" -d="M469 149v150h-85v-150h85zM491 341q9 0 15 -6t6 -15v-213q0 -9 -6 -15.5t-15 -6.5h-128q-9 0 -15.5 6.5t-6.5 15.5v213q0 9 6.5 15t15.5 6h128zM85 384v-235h214v-64h-299v64h43v235q0 17 12.5 30t29.5 13h384v-43h-384z" /> - <glyph glyph-name="uniE1B2" unicode="dvr" -d="M149 256v-43h-42v43h42zM149 341v-42h-42v42h42zM405 256v-43h-234v43h234zM405 341v-42h-234v42h234zM448 149v256h-384v-256h384zM448 448q17 0 30 -13t13 -30l-1 -256q0 -17 -12.5 -29.5t-29.5 -12.5h-107v-43h-170v43h-107q-17 0 -30 12.5t-13 29.5v256q0 17 13 30 -t30 13h384z" /> - <glyph glyph-name="uniE1B3" unicode="gps_fixed" -d="M256 107q62 0 105.5 43.5t43.5 105.5t-43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5t43.5 -105.5t105.5 -43.5zM447 277h44v-42h-44q-7 -67 -55 -115t-115 -55v-44h-42v44q-67 7 -115 55t-55 115h-44v42h44q7 67 55 115t115 55v44h42v-44q67 -7 115 -55t55 -115z -M256 341q35 0 60 -25t25 -60t-25 -60t-60 -25t-60 25t-25 60t25 60t60 25z" /> - <glyph glyph-name="uniE1B4" unicode="gps_not_fixed" -d="M256 107q62 0 105.5 43.5t43.5 105.5t-43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5t43.5 -105.5t105.5 -43.5zM447 277h44v-42h-44q-7 -67 -55 -115t-115 -55v-44h-42v44q-67 7 -115 55t-55 115h-44v42h44q7 67 55 115t115 55v44h42v-44q67 -7 115 -55t55 -115z -" /> - <glyph glyph-name="uniE1B5" unicode="gps_off" -d="M347 138l-209 209q-31 -41 -31 -91q0 -62 43.5 -105.5t105.5 -43.5q50 0 91 31zM64 421l27 27l357 -357l-27 -27l-44 44q-45 -37 -100 -43v-44h-42v44q-67 7 -115 55t-55 115h-44v42h44q6 55 43 100zM447 277h44v-42h-44q-5 -39 -21 -68l-32 32q11 27 11 57 -q0 62 -43.5 105.5t-105.5 43.5q-30 0 -57 -11l-32 32q31 16 68 21v44h42v-44q67 -7 115 -55t55 -115z" /> - <glyph glyph-name="uniE1B6" unicode="location_disabled" -d="M347 138l-209 209q-31 -41 -31 -91q0 -62 43.5 -105.5t105.5 -43.5q50 0 91 31zM64 421l27 27l357 -357l-27 -27l-44 44q-45 -37 -100 -43v-44h-42v44q-67 7 -115 55t-55 115h-44v42h44q6 55 43 100zM447 277h44v-42h-44q-5 -39 -21 -68l-32 32q11 27 11 57 -q0 62 -43.5 105.5t-105.5 43.5q-30 0 -57 -11l-32 32q31 16 68 21v44h42v-44q67 -7 115 -55t55 -115z" /> - <glyph glyph-name="uniE1B7" unicode="location_searching" -d="M256 107q62 0 105.5 43.5t43.5 105.5t-43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5t43.5 -105.5t105.5 -43.5zM447 277h44v-42h-44q-7 -67 -55 -115t-115 -55v-44h-42v44q-67 7 -115 55t-55 115h-44v42h44q7 67 55 115t115 55v44h42v-44q67 -7 115 -55t55 -115z -" /> - <glyph glyph-name="uniE1B8" unicode="graphic_eq" -d="M405 299h43v-86h-43v86zM320 128v256h43v-256h-43zM64 213v86h43v-86h-43zM235 43v426h42v-426h-42zM149 128v256h43v-256h-43z" /> - <glyph glyph-name="uniE1B9" unicode="network_cell" -d="M469 43h-426l426 426v-426z" /> - <glyph glyph-name="uniE1BA" unicode="network_wifi" -d="M436 279l1 -1l-181 -224l-181 224l1 1l-68 84q121 85 248 85t248 -85z" /> - <glyph glyph-name="uniE1BB" unicode="nfc" -d="M384 384v-256h-256v256h85v-43h-42v-170h170v170h-64v-48q22 -12 22 -37q0 -17 -13 -30t-30 -13t-30 13t-13 30q0 25 22 37v48q0 17 12.5 30t29.5 13h107zM427 85v342h-342v-342h342zM427 469q17 0 29.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-29.5 -12.5h-342 -q-17 0 -29.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t29.5 12.5h342z" /> - <glyph glyph-name="uniE1BC" unicode="now_wallpaper" -d="M85 235v-150h150v-42h-150q-17 0 -29.5 12.5t-12.5 29.5v150h42zM427 85v150h42v-150q0 -17 -12.5 -29.5t-29.5 -12.5h-150v42h150zM427 469q17 0 29.5 -12.5t12.5 -29.5v-150h-42v150h-150v42h150zM363 331q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5t9.5 22.5 -t22.5 9.5t22.5 -9.5t9.5 -22.5zM213 235l64 -79l43 57l64 -85h-256zM85 427v-150h-42v150q0 17 12.5 29.5t29.5 12.5h150v-42h-150z" /> - <glyph glyph-name="uniE1BD" unicode="now_widgets" -d="M355 476l121 -121l-121 -120h93v-171h-171v171h78l-120 120v-78h-171v171h171v-93zM64 64v171h171v-171h-171z" /> - <glyph glyph-name="uniE1BE" unicode="screen_lock_landscape" -d="M230 299v-22h52v22q0 10 -7.5 17.5t-18.5 7.5t-18.5 -7.5t-7.5 -17.5zM213 171q-9 0 -15 6t-6 15v64q0 9 6 15t15 6v22q0 17 12.5 29.5t30.5 12.5t30.5 -12t12.5 -30v-22q9 0 15 -6t6 -15v-64q0 -9 -6 -15t-15 -6h-86zM405 149v214h-298v-214h298zM448 405q17 0 30 -12.5 -t13 -29.5v-214q0 -17 -13 -29.5t-30 -12.5h-384q-17 0 -30 12.5t-13 29.5v214q0 17 13 29.5t30 12.5h384z" /> - <glyph glyph-name="uniE1BF" unicode="screen_lock_portrait" -d="M363 107v298h-214v-298h214zM363 491q17 0 29.5 -13t12.5 -30v-384q0 -17 -12.5 -30t-29.5 -13h-214q-17 0 -29.5 13t-12.5 30v384q0 17 12.5 30t29.5 13h214zM230 299v-22h52v22q0 10 -7.5 17.5t-18.5 7.5t-18.5 -7.5t-7.5 -17.5zM213 171q-9 0 -15 6t-6 15v64q0 9 6 15 -t15 6v22q0 17 12.5 29.5t30.5 12.5t30.5 -12t12.5 -30v-22q9 0 15 -6t6 -15v-64q0 -9 -6 -15t-15 -6h-86z" /> - <glyph glyph-name="uniE1C0" unicode="screen_lock_rotation" -d="M358 459v-11h73v11q0 15 -10.5 25.5t-25.5 10.5t-26 -10.5t-11 -25.5zM341 320q-9 0 -15 6t-6 15v86q0 9 6 15t15 6v11q0 22 16 37.5t38 15.5t37.5 -15.5t15.5 -37.5v-11q9 0 15 -6t6 -15v-86q0 -9 -6 -15t-15 -6h-107zM181 75l28 28l81 -81l-14 -1q-100 0 -173.5 68 -t-81.5 167h32q6 -59 40.5 -107.5t87.5 -73.5zM496 240q10 -9 10 -22.5t-10 -23.5l-136 -135q-9 -10 -22 -10t-23 10l-256 256q-10 9 -10 22t10 23l135 136q9 10 22.5 10t23.5 -10l52 -52l-30 -30l-45 44l-121 -120l242 -242l120 121l-47 47l30 30z" /> - <glyph glyph-name="uniE1C1" unicode="screen_rotation" -d="M160 54l29 28l81 -81l-14 -1q-100 0 -173.5 68t-81.5 167h32q6 -60 40 -108t87 -73zM316 60l136 136l-256 256l-136 -136zM218 475l257 -257q10 -9 10 -22t-10 -23l-136 -136q-9 -10 -22 -10t-23 10l-257 257q-10 9 -10 22t10 23l136 136q9 10 22 10t23 -10zM352 458 -l-29 -28l-81 81l14 1q100 0 173.5 -68t81.5 -167h-32q-6 60 -40 108t-87 73z" /> - <glyph glyph-name="uniE1C2" unicode="sd_storage" -d="M384 341v86h-43v-86h43zM320 341v86h-43v-86h43zM256 341v86h-43v-86h43zM384 469q17 0 30 -12.5t13 -29.5v-342q0 -17 -13 -29.5t-30 -12.5h-256q-17 0 -30 12.5t-13 29.5l1 256l127 128h171z" /> - <glyph glyph-name="uniE1C3" unicode="settings_system_daydream" -d="M448 106v300h-384v-300h384zM448 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-384q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h384zM192 171q-26 0 -45 19t-19 45q0 25 16.5 43t40.5 20h4q21 43 67 43q28 0 49 -18.5t25 -45.5h1q22 0 37.5 -15.5t15.5 -37.5 -t-15.5 -37.5t-37.5 -15.5h-139z" /> - <glyph glyph-name="uniE1C8" unicode="signal_cellular_4_bar" -d="M43 43l426 426v-426h-426z" /> - <glyph glyph-name="uniE1CD" unicode="signal_cellular_connected_no_internet_4_bar" -d="M43 43l426 426v-128h-85v-298h-341zM427 43v42h42v-42h-42zM427 128v171h42v-171h-42z" /> - <glyph glyph-name="uniE1CE" unicode="signal_cellular_no_sim" -d="M78 429l373 -372l-28 -28l-40 41q-12 -6 -20 -6h-214q-17 0 -29.5 13t-12.5 30v239l-56 56zM405 405v-249l-242 242l50 50h150q17 0 29.5 -13t12.5 -30z" /> - <glyph glyph-name="uniE1CF" unicode="signal_cellular_null" -d="M469 469v-426h-426zM427 366l-281 -281h281v281z" /> - <glyph glyph-name="uniE1D0" unicode="signal_cellular_off" -d="M102 416l367 -368l-27 -27l-42 43h-379l189 189l-135 136zM448 491v-367l-183 183z" /> - <glyph glyph-name="uniE1D8" unicode="signal_wifi_4_bar" -d="M256 54l-248 309q121 85 248 85t248 -85z" /> - <glyph glyph-name="uniE1D9" unicode="signal_wifi_4_bar_lock" -d="M331 203v-56l-75 -94l-247 310l6 5q6 4 12.5 8.5t17.5 11.5t23.5 13t28.5 13.5t34 13t37.5 10.5t42 7.5t45.5 2.5t45.5 -2.5t42 -7.5t37.5 -10.5t34 -13t28.5 -13.5t23.5 -13t17.5 -11.5t12.5 -8.5l6 -5l-44 -56q-6 2 -22 2q-45 0 -75.5 -30.5t-30.5 -75.5zM469 171v32 -q0 13 -9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5v-32h64zM491 171q8 0 14.5 -7t6.5 -15v-85q0 -8 -6.5 -14.5t-14.5 -6.5h-107q-8 0 -14.5 6.5t-6.5 14.5v85q0 8 6.5 15t14.5 7v32q0 23 15 38t38 15t38.5 -15.5t15.5 -37.5v-32z" /> - <glyph glyph-name="uniE1DA" unicode="signal_wifi_off" -d="M70 481q12 -12 153.5 -153t213.5 -215l-27 -27l-71 71l-83 -103l-248 309q33 27 78 47l-43 44zM504 363l-116 -145l-221 220q45 10 89 10q127 0 248 -85z" /> - <glyph glyph-name="uniE1DB" unicode="storage" -d="M85 277v-42h43v42h-43zM43 213v86h426v-86h-426zM128 363v42h-43v-42h43zM43 427h426v-86h-426v86zM85 149v-42h43v42h-43zM43 85v86h426v-86h-426z" /> - <glyph glyph-name="uniE1E0" unicode="usb" -d="M320 363h85v-86h-21v-42q0 -18 -12.5 -30.5t-30.5 -12.5h-64v-65q26 -14 26 -42q0 -19 -13.5 -33t-33.5 -14t-33.5 14t-13.5 33q0 28 26 42v65h-64q-18 0 -30.5 12.5t-12.5 30.5v44q-26 14 -26 41q0 20 14 33.5t33 13.5t33 -13.5t14 -33.5q0 -28 -25 -41v-44h64v170h-43 -l64 86l64 -86h-43v-170h64v42h-21v86z" /> - <glyph glyph-name="uniE1E1" unicode="wifi_lock" -d="M469 171v32q0 13 -9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5v-32h64zM491 171q9 0 15 -6.5t6 -15.5v-85q0 -9 -6 -15t-15 -6h-107q-9 0 -15 6t-6 15v85q0 9 6 15.5t15 6.5v32q0 22 15.5 37.5t37.5 15.5t38 -15.5t16 -37.5v-32zM437 309q-44 0 -75 -31t-31 -75v-61 -l-75 -99l-256 341q112 85 256 85t256 -85l-57 -76q-6 1 -18 1z" /> - <glyph glyph-name="uniE1E2" unicode="wifi_tethering" -d="M256 448q88 0 150.5 -62t62.5 -151q0 -58 -28.5 -107.5t-77.5 -77.5l-22 37q39 23 62.5 62.5t23.5 85.5q0 70 -50 120t-121 50t-121 -50t-50 -120q0 -47 23 -86t62 -62l-21 -37q-49 28 -77.5 77.5t-28.5 107.5q0 89 62.5 151t150.5 62zM384 235q0 -35 -17.5 -64.5 -t-46.5 -46.5l-21 37q42 25 42 74q0 35 -25 60t-60 25t-60 -25t-25 -60q0 -49 42 -74l-21 -37q-29 17 -46.5 46.5t-17.5 64.5q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM256 277q17 0 30 -12.5t13 -29.5t-13 -30t-30 -13t-30 13t-13 30t13 29.5t30 12.5z" /> - <glyph glyph-name="uniE226" unicode="attach_file" -d="M352 384h32v-245q0 -49 -34 -83.5t-83 -34.5t-83.5 34.5t-34.5 83.5v266q0 35 25.5 60.5t60.5 25.5t60 -25.5t25 -60.5v-224q0 -22 -15.5 -37.5t-37.5 -15.5t-38 15.5t-16 37.5v203h32v-203q0 -9 6.5 -15t15.5 -6t15 6t6 15v224q0 22 -15.5 38t-37.5 16t-38 -16t-16 -38 -v-266q0 -35 25.5 -60.5t60.5 -25.5t60 25.5t25 60.5v245z" /> - <glyph glyph-name="uniE227" unicode="attach_money" -d="M252 279q22 -6 36.5 -12t30.5 -16.5t24.5 -26.5t8.5 -38q0 -31 -20.5 -50.5t-54.5 -25.5v-46h-64v46q-33 7 -54.5 28t-23.5 54h47q4 -45 63 -45q31 0 44.5 11.5t13.5 26.5q0 36 -64 52q-100 23 -100 88q0 29 21 49.5t53 27.5v46h64v-47q33 -8 50.5 -30t18.5 -51h-47 -q-2 45 -54 45q-26 0 -41.5 -11t-15.5 -29q0 -29 64 -46z" /> - <glyph glyph-name="uniE228" unicode="border_all" -d="M405 277v128h-128v-128h128zM405 107v128h-128v-128h128zM235 277v128h-128v-128h128zM235 107v128h-128v-128h128zM64 448h384v-384h-384v384z" /> - <glyph glyph-name="uniE229" unicode="border_bottom" -d="M107 192v-43h-43v43h43zM64 64v43h384v-43h-384zM107 277v-42h-43v42h43zM405 320v43h43v-43h-43zM405 448h43v-43h-43v43zM107 363v-43h-43v43h43zM405 149v43h43v-43h-43zM405 235v42h43v-42h-43zM363 448v-43h-43v43h43zM277 448v-43h-42v43h42zM363 277v-42h-43v42 -h43zM277 363v-43h-42v43h42zM107 448v-43h-43v43h43zM277 277v-42h-42v42h42zM192 448v-43h-43v43h43zM277 192v-43h-42v43h42zM192 277v-42h-43v42h43z" /> - <glyph glyph-name="uniE22A" unicode="border_clear" -d="M320 405v43h43v-43h-43zM320 235v42h43v-42h-43zM320 64v43h43v-43h-43zM235 405v43h42v-43h-42zM405 448h43v-43h-43v43zM235 320v43h42v-43h-42zM405 320v43h43v-43h-43zM405 64v43h43v-43h-43zM405 235v42h43v-42h-43zM405 149v43h43v-43h-43zM235 235v42h42v-42h-42z -M64 405v43h43v-43h-43zM64 320v43h43v-43h-43zM64 235v42h43v-42h-43zM64 149v43h43v-43h-43zM64 64v43h43v-43h-43zM235 64v43h42v-43h-42zM235 149v43h42v-43h-42zM149 64v43h43v-43h-43zM149 235v42h43v-42h-43zM149 405v43h43v-43h-43z" /> - <glyph glyph-name="uniE22B" unicode="border_color" -d="M0 85h512v-85h-512v85zM442 426l-42 -42l-80 80l42 42q6 6 15 6t15 -6l50 -50q6 -6 6 -15t-6 -15zM379 363l-214 -214h-80v80l214 214z" /> - <glyph glyph-name="uniE22C" unicode="border_horizontal" -d="M405 64v43h43v-43h-43zM320 64v43h43v-43h-43zM235 149v43h42v-43h-42zM405 320v43h43v-43h-43zM405 448h43v-43h-43v43zM64 235v42h384v-42h-384zM235 64v43h42v-43h-42zM405 149v43h43v-43h-43zM277 448v-43h-42v43h42zM277 363v-43h-42v43h42zM363 448v-43h-43v43h43z -M192 448v-43h-43v43h43zM107 448v-43h-43v43h43zM149 64v43h43v-43h-43zM64 149v43h43v-43h-43zM107 363v-43h-43v43h43zM64 64v43h43v-43h-43z" /> - <glyph glyph-name="uniE22D" unicode="border_inner" -d="M405 149v43h43v-43h-43zM405 64v43h43v-43h-43zM277 448v-171h171v-42h-171v-171h-42v171h-171v42h171v171h42zM320 64v43h43v-43h-43zM405 448h43v-43h-43v43zM405 320v43h43v-43h-43zM363 448v-43h-43v43h43zM107 448v-43h-43v43h43zM192 448v-43h-43v43h43zM64 149v43 -h43v-43h-43zM107 363v-43h-43v43h43zM149 64v43h43v-43h-43zM64 64v43h43v-43h-43z" /> - <glyph glyph-name="uniE22E" unicode="border_left" -d="M320 405v43h43v-43h-43zM320 235v42h43v-42h-43zM405 64v43h43v-43h-43zM405 235v42h43v-42h-43zM405 448h43v-43h-43v43zM405 149v43h43v-43h-43zM320 64v43h43v-43h-43zM405 320v43h43v-43h-43zM64 64v384h43v-384h-43zM149 235v42h43v-42h-43zM149 405v43h43v-43h-43z -M149 64v43h43v-43h-43zM235 235v42h42v-42h-42zM235 320v43h42v-43h-42zM235 405v43h42v-43h-42zM235 149v43h42v-43h-42zM235 64v43h42v-43h-42z" /> - <glyph glyph-name="uniE22F" unicode="border_outer" -d="M192 277v-42h-43v42h43zM277 192v-43h-42v43h42zM405 107v298h-298v-298h298zM64 448h384v-384h-384v384zM363 277v-42h-43v42h43zM277 277v-42h-42v42h42zM277 363v-43h-42v43h42z" /> - <glyph glyph-name="uniE230" unicode="border_right" -d="M235 320v43h42v-43h-42zM235 405v43h42v-43h-42zM235 235v42h42v-42h-42zM320 405v43h43v-43h-43zM320 64v43h43v-43h-43zM405 448h43v-384h-43v384zM320 235v42h43v-42h-43zM235 149v43h42v-43h-42zM64 320v43h43v-43h-43zM64 149v43h43v-43h-43zM64 235v42h43v-42h-43z -M235 64v43h42v-43h-42zM64 64v43h43v-43h-43zM149 235v42h43v-42h-43zM149 405v43h43v-43h-43zM64 405v43h43v-43h-43zM149 64v43h43v-43h-43z" /> - <glyph glyph-name="uniE231" unicode="border_style" -d="M405 320v43h43v-43h-43zM64 448h384v-43h-341v-341h-43v384zM405 235v42h43v-42h-43zM405 149v43h43v-43h-43zM235 64v43h42v-43h-42zM149 64v43h43v-43h-43zM405 64v43h43v-43h-43zM320 64v43h43v-43h-43z" /> - <glyph glyph-name="uniE232" unicode="border_top" -d="M320 235v42h43v-42h-43zM405 64v43h43v-43h-43zM235 320v43h42v-43h-42zM320 64v43h43v-43h-43zM405 149v43h43v-43h-43zM64 448h384v-43h-384v43zM405 235v42h43v-42h-43zM405 320v43h43v-43h-43zM235 149v43h42v-43h-42zM64 320v43h43v-43h-43zM64 235v42h43v-42h-43z -M64 64v43h43v-43h-43zM64 149v43h43v-43h-43zM235 64v43h42v-43h-42zM235 235v42h42v-42h-42zM149 235v42h43v-42h-43zM149 64v43h43v-43h-43z" /> - <glyph glyph-name="uniE233" unicode="border_vertical" -d="M320 235v42h43v-42h-43zM320 64v43h43v-43h-43zM320 405v43h43v-43h-43zM405 320v43h43v-43h-43zM405 448h43v-43h-43v43zM405 235v42h43v-42h-43zM405 64v43h43v-43h-43zM235 64v384h42v-384h-42zM405 149v43h43v-43h-43zM149 405v43h43v-43h-43zM64 149v43h43v-43h-43z -M64 64v43h43v-43h-43zM64 235v42h43v-42h-43zM149 235v42h43v-42h-43zM149 64v43h43v-43h-43zM64 405v43h43v-43h-43zM64 320v43h43v-43h-43z" /> - <glyph glyph-name="uniE234" unicode="format_align_center" -d="M64 448h384v-43h-384v43zM149 363h214v-43h-214v43zM64 235v42h384v-42h-384zM64 64v43h384v-43h-384zM149 192h214v-43h-214v43z" /> - <glyph glyph-name="uniE235" unicode="format_align_justify" -d="M64 448h384v-43h-384v43zM64 320v43h384v-43h-384zM64 235v42h384v-42h-384zM64 149v43h384v-43h-384zM64 64v43h384v-43h-384z" /> - <glyph glyph-name="uniE236" unicode="format_align_left" -d="M64 448h384v-43h-384v43zM64 64v43h384v-43h-384zM64 235v42h384v-42h-384zM320 363v-43h-256v43h256zM320 192v-43h-256v43h256z" /> - <glyph glyph-name="uniE237" unicode="format_align_right" -d="M64 448h384v-43h-384v43zM192 320v43h256v-43h-256zM64 235v42h384v-42h-384zM192 149v43h256v-43h-256zM64 64v43h384v-43h-384z" /> - <glyph glyph-name="uniE238" unicode="format_bold" -d="M288 181q14 0 23 9.5t9 22.5t-9 22.5t-23 9.5h-75v-64h75zM213 373v-64h64q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5h-64zM333 282q46 -21 46 -73q0 -34 -22.5 -57.5t-56.5 -23.5h-151v299h134q36 0 60.5 -25t24.5 -61t-35 -59z" /> - <glyph glyph-name="uniE239" unicode="format_clear" -d="M128 405h299v-64h-124l-34 -80l-45 44l15 36h-51l-60 60v4zM70 405l6 -5l308 -309l-27 -27l-121 121l-33 -78h-64l52 123l-148 148z" /> - <glyph glyph-name="uniE23A" unicode="format_color_fill" -d="M0 85h512v-85h-512v85zM405 267q43 -47 43 -75q0 -17 -13 -30t-30 -13t-29.5 13t-12.5 30q0 12 10.5 31t20.5 31zM111 299h205l-103 102zM353 321q10 -10 10 -23t-10 -22l-117 -117q-10 -10 -23 -10q-12 0 -22 10l-118 117q-10 9 -10 22t10 23l110 110l-51 51l31 30z" /> - <glyph glyph-name="uniE23B" unicode="format_color_reset" -d="M112 400l312 -312l-27 -27l-57 56q-37 -32 -84 -32q-53 0 -90.5 37.5t-37.5 90.5q0 34 28 88l-71 71zM384 213q0 -15 -3 -28l-183 184l58 75q14 -16 35.5 -43t57 -88.5t35.5 -99.5z" /> - <glyph glyph-name="uniE23C" unicode="format_color_text" -d="M205 256h102l-51 135zM235 448h42l117 -299h-48l-23 64h-134l-24 -64h-48zM0 85h512v-85h-512v85z" /> - <glyph glyph-name="uniE23D" unicode="format_indent_decrease" -d="M235 235v42h213v-42h-213zM235 320v43h213v-43h-213zM64 448h384v-43h-384v43zM64 64v43h384v-43h-384zM64 256l85 85v-170zM235 149v43h213v-43h-213z" /> - <glyph glyph-name="uniE23E" unicode="format_indent_increase" -d="M235 235v42h213v-42h-213zM235 320v43h213v-43h-213zM64 448h384v-43h-384v43zM235 149v43h213v-43h-213zM64 341l85 -85l-85 -85v170zM64 64v43h384v-43h-384z" /> - <glyph glyph-name="uniE23F" unicode="format_italic" -d="M213 427h171v-64h-60l-72 -171h47v-64h-171v64h60l72 171h-47v64z" /> - <glyph glyph-name="uniE240" unicode="format_line_spacing" -d="M213 235v42h256v-42h-256zM213 107v42h256v-42h-256zM213 405h256v-42h-256v42zM128 363v-214h53l-74 -74l-75 74h53v214h-53l75 74l74 -74h-53z" /> - <glyph glyph-name="uniE241" unicode="format_list_bulleted" -d="M149 405h299v-42h-299v42zM149 235v42h299v-42h-299zM149 107v42h299v-42h-299zM85 160q13 0 22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5zM85 416q13 0 22.5 -9t9.5 -23t-9.5 -23t-22.5 -9t-22.5 9t-9.5 23t9.5 23t22.5 9z -M85 288q13 0 22.5 -9t9.5 -23t-9.5 -23t-22.5 -9t-22.5 9t-9.5 23t9.5 23t22.5 9z" /> - <glyph glyph-name="uniE242" unicode="format_list_numbered" -d="M149 235v42h299v-42h-299zM149 107v42h299v-42h-299zM149 405h299v-42h-299v42zM43 277v22h64v-20l-39 -44h39v-22h-64v20l38 44h-38zM64 341v64h-21v22h42v-86h-21zM43 149v22h64v-86h-64v22h42v10h-21v22h21v10h-42z" /> - <glyph glyph-name="uniE243" unicode="format_paint" -d="M384 427h64v-171h-171v-192q0 -9 -6 -15t-15 -6h-43q-9 0 -15 6t-6 15v235h213v85h-21v-21q0 -9 -6 -15.5t-15 -6.5h-256q-9 0 -15.5 6.5t-6.5 15.5v85q0 9 6.5 15t15.5 6h256q9 0 15 -6t6 -15v-21z" /> - <glyph glyph-name="uniE244" unicode="format_quote" -d="M299 149l42 86h-64v128h128v-128l-42 -86h-64zM128 149l43 86h-64v128h128v-128l-43 -86h-64z" /> - <glyph glyph-name="uniE245" unicode="format_size" -d="M64 256v64h192v-64h-64v-149h-64v149h-64zM192 427h277v-64h-106v-256h-64v256h-107v64z" /> - <glyph glyph-name="uniE246" unicode="format_strikethrough" -d="M64 213v43h384v-43h-384zM107 427h298v-64h-106v-64h-86v64h-106v64zM213 107v64h86v-64h-86z" /> - <glyph glyph-name="uniE247" unicode="format_textdirection_l_to_r" -d="M448 128l-85 -85v64h-256v42h256v64zM192 299q-35 0 -60 25t-25 60t25 60t60 25h171v-42h-43v-235h-43v235h-42v-235h-43v107z" /> - <glyph glyph-name="uniE248" unicode="format_textdirection_r_to_l" -d="M171 149h256v-42h-256v-64l-86 85l86 85v-64zM213 299q-35 0 -60 25t-25 60t25 60t60 25h171v-42h-43v-235h-42v235h-43v-235h-43v107z" /> - <glyph glyph-name="uniE249" unicode="format_underlined" -d="M107 107h298v-43h-298v43zM256 149q-53 0 -90.5 37.5t-37.5 90.5v171h53v-171q0 -31 22 -52.5t53 -21.5t53 21.5t22 52.5v171h53v-171q0 -53 -37.5 -90.5t-90.5 -37.5z" /> - <glyph glyph-name="uniE24A" unicode="functions" -d="M384 427v-64h-149l106 -107l-106 -107h149v-64h-256v43l139 128l-139 128v43h256z" /> - <glyph glyph-name="uniE24B" unicode="insert_chart" -d="M363 149v86h-43v-86h43zM277 149v214h-42v-214h42zM192 149v150h-43v-150h43zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298z" /> - <glyph glyph-name="uniE24C" unicode="insert_comment" -d="M384 341v43h-256v-43h256zM384 277v43h-256v-43h256zM384 213v43h-256v-43h256zM427 469q17 0 29.5 -12.5t12.5 -29.5v-384l-85 85h-299q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 29.5t29.5 12.5h342z" /> - <glyph glyph-name="uniE24D" unicode="insert_drive_file" -d="M277 320h118l-118 117v-117zM128 469h171l128 -128v-256q0 -17 -13 -29.5t-30 -12.5h-256q-17 0 -30 12.5t-13 29.5l1 342q0 17 12.5 29.5t29.5 12.5z" /> - <glyph glyph-name="uniE24E" unicode="insert_emoticon" -d="M256 139q-37 0 -66.5 20.5t-42.5 53.5h218q-13 -33 -42.5 -53.5t-66.5 -20.5zM181 277q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5zM331 277q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5t-9.5 -22.5 -t-22.5 -9.5zM256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE24F" unicode="insert_invitation" -d="M405 107v234h-298v-234h298zM341 491h43v-43h21q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-18 0 -30.5 13t-12.5 30v298q0 17 12.5 30t30.5 13h21v43h43v-43h170v43zM363 256v-107h-107v107h107z" /> - <glyph glyph-name="uniE250" unicode="insert_link" -d="M363 363q44 0 75 -31.5t31 -75.5t-31 -75.5t-75 -31.5h-86v41h86q27 0 46.5 19.5t19.5 46.5t-19.5 46.5t-46.5 19.5h-86v41h86zM171 235v42h170v-42h-170zM83 256q0 -27 19.5 -46.5t46.5 -19.5h86v-41h-86q-44 0 -75 31.5t-31 75.5t31 75.5t75 31.5h86v-41h-86 -q-27 0 -46.5 -19.5t-19.5 -46.5z" /> - <glyph glyph-name="uniE251" unicode="insert_photo" -d="M181 224l-74 -96h298l-96 128l-74 -96zM448 107q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298q17 0 30 -13t13 -30v-298z" /> - <glyph glyph-name="uniE252" unicode="merge_type" -d="M160 341l96 96l96 -96h-75v-136l-128 -128l-30 30l116 115v119h-75zM363 77l-73 72l30 30l73 -72z" /> - <glyph glyph-name="uniE253" unicode="mode_comment" -d="M469 427v-384l-85 85h-299q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 29.5t29.5 12.5h342q17 0 29.5 -12.5t12.5 -29.5z" /> - <glyph glyph-name="uniE254" unicode="mode_edit" -d="M442 362l-39 -39l-80 80l39 39q6 6 15 6t15 -6l50 -50q6 -6 6 -15t-6 -15zM64 144l236 236l80 -80l-236 -236h-80v80z" /> - <glyph glyph-name="uniE255" unicode="publish" -d="M107 213l149 150l149 -150h-85v-128h-128v128h-85zM107 427h298v-43h-298v43z" /> - <glyph glyph-name="uniE256" unicode="space_bar" -d="M384 320h43v-128h-342v128h43v-85h256v85z" /> - <glyph glyph-name="uniE257" unicode="strikethrough_s" -d="M200 232q0 -54 62 -54q49 0 49 36q0 16 -6.5 23t-23.5 15q-1 0 -3.5 1t-4.5 2t-4 1h-205v43h384v-43h-83q0 -1 1.5 -3.5t2.5 -3.5q7 -17 7 -35q0 -61 -67 -80q-21 -6 -46 -6q-16 0 -31 3q-36 7 -56 22q-39 29 -39 79h63zM311 352q0 45 -51 45q-36 0 -47 -22q-3 -6 -3 -14 -q0 -15 16 -26q16 -10 30 -15h-98q0 1 -2 2.5t-2 2.5q-8 13 -8 36q0 37 32 63q34 24 83 24q53 0 83 -27q31 -28 31 -69h-64z" /> - <glyph glyph-name="uniE258" unicode="vertical_align_bottom" -d="M85 107h342v-43h-342v43zM341 235l-85 -86l-85 86h64v213h42v-213h64z" /> - <glyph glyph-name="uniE259" unicode="vertical_align_center" -d="M85 277h342v-42h-342v42zM341 405l-85 -85l-85 85h64v86h42v-86h64zM171 107l85 85l85 -85h-64v-86h-42v86h-64z" /> - <glyph glyph-name="uniE25A" unicode="vertical_align_top" -d="M85 448h342v-43h-342v43zM171 277l85 86l85 -86h-64v-213h-42v213h-64z" /> - <glyph glyph-name="uniE25B" unicode="wrap_text" -d="M363 277q35 0 60 -25t25 -60t-25 -60t-60 -25h-43v-43l-64 64l64 64v-43h48q17 0 30 13t13 30t-13 30t-30 13h-283v42h278zM427 405v-42h-342v42h342zM85 107v42h128v-42h-128z" /> - <glyph glyph-name="uniE25C" unicode="money_off" -d="M114 425l311 -312l-27 -27l-47 48q-19 -17 -52 -24v-46h-64v46q-33 7 -55 28t-24 54h47q4 -45 64 -45q37 0 51 20l-75 74q-83 25 -83 84l-73 73zM267 365q-19 0 -33 -6l-31 31q14 7 32 12v46h64v-47q32 -8 49.5 -30t18.5 -51h-47q-2 45 -53 45z" /> - <glyph glyph-name="uniE25D" unicode="drag_handle" -d="M85 192v43h342v-43h-342zM427 320v-43h-342v43h342z" /> - <glyph glyph-name="uniE25E" unicode="format_shapes" -d="M228 240h56l-28 82zM293 213h-75l-15 -42h-35l73 192h30l72 -192h-34zM405 405h43v43h-43v-43zM448 64v43h-43v-43h43zM363 107v42h42v214h-42v42h-214v-42h-42v-214h42v-42h214zM107 64v43h-43v-43h43zM64 448v-43h43v43h-43zM491 363h-43v-214h43v-128h-128v43h-214 -v-43h-128v128h43v214h-43v128h128v-43h214v43h128v-128z" /> - <glyph glyph-name="uniE25F" unicode="highlight" -d="M362 372l45 45l30 -30l-45 -46zM75 387l30 30l45 -45l-30 -31zM235 469h42v-64h-42v64zM128 213v107h256v-107l-64 -64v-106h-128v106z" /> - <glyph glyph-name="uniE260" unicode="linear_scale" -d="M416 309q22 0 37.5 -15.5t15.5 -37.5t-15.5 -37.5t-37.5 -15.5q-36 0 -49 32h-62q-13 -32 -49 -32t-49 32h-62q-13 -32 -49 -32q-22 0 -37.5 15.5t-15.5 37.5t15.5 37.5t37.5 15.5q36 0 49 -32h62q13 32 49 32t49 -32h62q13 32 49 32z" /> - <glyph glyph-name="uniE261" unicode="short_text" -d="M85 235h214v-43h-214v43zM85 320h342v-43h-342v43z" /> - <glyph glyph-name="uniE262" unicode="text_fields" -d="M459 320v-64h-64v-149h-64v149h-64v64h192zM53 427h278v-64h-107v-256h-64v256h-107v64z" /> - <glyph glyph-name="uniE263" unicode="monetization_on" -d="M286 126q67 13 67 67q0 61 -90 84q-56 14 -56 41q0 15 13.5 25t37.5 10q45 0 47 -40h42q-2 57 -61 72v42h-57v-42q-29 -6 -47.5 -23.5t-18.5 -44.5q0 -56 89 -78q57 -13 57 -46q0 -13 -11.5 -23.5t-39.5 -10.5q-53 0 -57 40h-42q3 -57 70 -72v-42h57v41zM256 469 -q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE264" unicode="title" -d="M107 427h298v-64h-117v-256h-64v256h-117v64z" /> - <glyph glyph-name="uniE2BC" unicode="attachment" -d="M43 245q0 49 34 83.5t83 34.5h224q35 0 60 -25.5t25 -60.5t-25 -60t-60 -25h-181q-22 0 -38 15.5t-16 37.5t16 38t38 16h160v-43h-162q-9 0 -9 -10.5t9 -10.5h183q17 0 30 12.5t13 29.5t-13 30t-30 13h-224q-31 0 -53 -22t-22 -53t22 -52.5t53 -21.5h203v-43h-203 -q-49 0 -83 34t-34 83z" /> - <glyph glyph-name="uniE2BD" unicode="cloud" -d="M413 298q41 -3 70 -33.5t29 -72.5q0 -44 -31.5 -75.5t-75.5 -31.5h-277q-53 0 -90.5 37.5t-37.5 90.5q0 49 33 85.5t81 41.5q21 39 59 63t83 24q58 0 102 -36.5t55 -92.5z" /> - <glyph glyph-name="uniE2BE" unicode="cloud_circle" -d="M352 171q22 0 37.5 15.5t15.5 37.5t-15.5 37.5t-37.5 15.5h-11q0 35 -25 60.5t-60 25.5q-30 0 -52.5 -18.5t-29.5 -46.5l-3 1q-26 0 -45 -19t-19 -45t19 -45t45 -19h181zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5 -t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE2BF" unicode="cloud_done" -d="M213 149l141 141l-30 30l-111 -110l-44 44l-30 -30zM413 298q41 -3 70 -33.5t29 -72.5q0 -44 -31.5 -75.5t-75.5 -31.5h-277q-53 0 -90.5 37.5t-37.5 90.5q0 49 33 85.5t81 41.5q21 39 59 63t83 24q58 0 102 -36.5t55 -92.5z" /> - <glyph glyph-name="uniE2C0" unicode="cloud_download" -d="M363 235h-64v85h-86v-85h-64l107 -107zM413 298q41 -3 70 -33.5t29 -72.5q0 -44 -31.5 -75.5t-75.5 -31.5h-277q-53 0 -90.5 37.5t-37.5 90.5q0 49 33 85.5t81 41.5q21 39 59 63t83 24q58 0 102 -36.5t55 -92.5z" /> - <glyph glyph-name="uniE2C1" unicode="cloud_off" -d="M165 299h-37q-35 0 -60 -25.5t-25 -60.5t25 -60t60 -25h208zM64 400l27 27l357 -357l-27 -27l-43 42h-250q-53 0 -90.5 37.5t-37.5 90.5q0 52 36 89t87 39zM413 298q41 -3 70 -33.5t29 -72.5q0 -55 -45 -87l-31 31q33 18 33 56q0 26 -19 45t-45 19h-32v11q0 49 -34 83 -t-83 34q-31 0 -54 -13l-32 31q39 25 86 25q58 0 102 -36.5t55 -92.5z" /> - <glyph glyph-name="uniE2C2" unicode="cloud_queue" -d="M405 128q26 0 45 19t19 45t-19 45t-45 19h-32v11q0 49 -34 83t-83 34q-40 0 -71 -24t-42 -61h-15q-35 0 -60 -25.5t-25 -60.5t25 -60t60 -25h277zM413 298q41 -3 70 -33.5t29 -72.5q0 -44 -31.5 -75.5t-75.5 -31.5h-277q-53 0 -90.5 37.5t-37.5 90.5q0 49 33 85.5 -t81 41.5q21 39 59 63t83 24q58 0 102 -36.5t55 -92.5z" /> - <glyph glyph-name="uniE2C3" unicode="cloud_upload" -d="M299 235h64l-107 106l-107 -106h64v-86h86v86zM413 298q41 -3 70 -33.5t29 -72.5q0 -44 -31.5 -75.5t-75.5 -31.5h-277q-53 0 -90.5 37.5t-37.5 90.5q0 49 33 85.5t81 41.5q21 39 59 63t83 24q58 0 102 -36.5t55 -92.5z" /> - <glyph glyph-name="uniE2C4" unicode="file_download" -d="M107 128h298v-43h-298v43zM405 320l-149 -149l-149 149h85v128h128v-128h85z" /> - <glyph glyph-name="uniE2C6" unicode="file_upload" -d="M107 128h298v-43h-298v43zM192 171v128h-85l149 149l149 -149h-85v-128h-128z" /> - <glyph glyph-name="uniE2C7" unicode="folder" -d="M213 427l43 -43h171q17 0 29.5 -13t12.5 -30v-213q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h128z" /> - <glyph glyph-name="uniE2C8" unicode="folder_open" -d="M427 128v213h-342v-213h342zM427 384q17 0 29.5 -13t12.5 -30v-213q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h128l43 -43h171z" /> - <glyph glyph-name="uniE2C9" unicode="folder_shared" -d="M405 149v22q0 19 -29.5 30.5t-55.5 11.5t-55.5 -11.5t-29.5 -30.5v-22h170zM320 320q-17 0 -30 -13t-13 -30t13 -29.5t30 -12.5t30 12.5t13 29.5t-13 30t-30 13zM427 384q17 0 29.5 -13t12.5 -30v-213q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256 -q0 17 12.5 30t29.5 13h128l43 -43h171z" /> - <glyph glyph-name="uniE2CC" unicode="create_new_folder" -d="M405 213v43h-64v64h-42v-64h-64v-43h64v-64h42v64h64zM427 384q18 0 30 -12.5t12 -30.5v-213q0 -18 -12 -30.5t-30 -12.5h-342q-18 0 -30 12.5t-12 30.5v256q0 18 12 30.5t30 12.5h128l43 -43h171z" /> - <glyph glyph-name="uniE307" unicode="cast" -d="M21 299q97 0 166 -69t69 -166h-43q0 80 -56.5 136t-135.5 56v43zM21 213q62 0 106 -43.5t44 -105.5h-43q0 44 -31.5 75.5t-75.5 31.5v42zM21 128q26 0 45 -19t19 -45h-64v64zM448 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-149v43h149v298h-384v-64h-43v64 -q0 17 13 30t30 13h384z" /> - <glyph glyph-name="uniE308" unicode="cast_connected" -d="M448 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-149v43h149v298h-384v-64h-43v64q0 17 13 30t30 13h384zM21 299q97 0 166 -69t69 -166h-43q0 80 -56.5 136t-135.5 56v43zM405 363v-214h-120q-20 63 -67.5 111t-110.5 68v35h298zM21 213q62 0 106 -43.5 -t44 -105.5h-43q0 44 -31.5 75.5t-75.5 31.5v42zM21 128q26 0 45 -19t19 -45h-64v64z" /> - <glyph glyph-name="uniE30A" unicode="computer" -d="M85 384v-213h342v213h-342zM427 128h85v-43h-512v43h85q-17 0 -29.5 13t-12.5 30v213q0 17 12.5 30t29.5 13h342q17 0 29.5 -13t12.5 -30v-213q0 -17 -12.5 -30t-29.5 -13z" /> - <glyph glyph-name="uniE30B" unicode="desktop_mac" -d="M448 213v214h-384v-214h384zM448 469q17 0 30 -12.5t13 -29.5v-256q0 -17 -13 -30t-30 -13h-149l42 -64v-21h-170v21l42 64h-149q-17 0 -30 13t-13 30v256q0 17 13 29.5t30 12.5h384z" /> - <glyph glyph-name="uniE30C" unicode="desktop_windows" -d="M448 171v256h-384v-256h384zM448 469q17 0 30 -12.5t13 -29.5v-256q0 -17 -13 -30t-30 -13h-149v-43h42v-42h-170v42h42v43h-149q-17 0 -30 13t-13 30v256q0 17 13 29.5t30 12.5h384z" /> - <glyph glyph-name="uniE30D" unicode="developer_board" -d="M256 277h85v-128h-85v128zM128 363h107v-107h-107v107zM256 363h85v-64h-85v64zM128 235h107v-86h-107v86zM384 107v298h-299v-298h299zM469 320h-42v-43h42v-42h-42v-43h42v-43h-42v-42q0 -17 -13 -30t-30 -13h-299q-17 0 -29.5 13t-12.5 30v298q0 17 12.5 30t29.5 13 -h299q17 0 30 -13t13 -30v-42h42v-43z" /> - <glyph glyph-name="uniE30E" unicode="dock" -d="M341 192v213h-170v-213h170zM341 490q17 0 30 -12.5t13 -29.5v-299q0 -17 -13 -29.5t-30 -12.5h-170q-17 0 -30 12.5t-13 29.5v299q0 17 13 30t30 13zM171 21v43h170v-43h-170z" /> - <glyph glyph-name="uniE30F" unicode="gamepad" -d="M352 320h117v-128h-117l-64 64zM192 160l64 64l64 -64v-117h-128v117zM160 320l64 -64l-64 -64h-117v128h117zM320 352l-64 -64l-64 64v117h128v-117z" /> - <glyph glyph-name="uniE310" unicode="headset" -d="M256 491q80 0 136 -56.5t56 -135.5v-150q0 -26 -19 -45t-45 -19h-64v171h85v43q0 62 -43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5v-43h85v-171h-64q-26 0 -45 19t-19 45v150q0 79 56 135.5t136 56.5z" /> - <glyph glyph-name="uniE311" unicode="headset_mic" -d="M256 491q80 0 136 -56.5t56 -135.5v-214q0 -26 -19 -45t-45 -19h-128v43h149v21h-85v171h85v43q0 62 -43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5v-43h85v-171h-64q-26 0 -45 19t-19 45v150q0 79 56 135.5t136 56.5z" /> - <glyph glyph-name="uniE312" unicode="keyboard" -d="M405 299v42h-42v-42h42zM405 235v42h-42v-42h42zM341 299v42h-42v-42h42zM341 235v42h-42v-42h42zM341 149v43h-170v-43h170zM149 299v42h-42v-42h42zM149 235v42h-42v-42h42zM171 277v-42h42v42h-42zM171 341v-42h42v42h-42zM235 277v-42h42v42h-42zM235 341v-42h42v42 -h-42zM427 405q17 0 29.5 -12.5t12.5 -29.5v-214q0 -17 -12.5 -29.5t-29.5 -12.5h-342q-17 0 -29.5 12.5t-12.5 29.5v214q0 17 12.5 29.5t29.5 12.5h342z" /> - <glyph glyph-name="uniE313" unicode="keyboard_arrow_down" -d="M158 345l98 -98l98 98l30 -30l-128 -128l-128 128z" /> - <glyph glyph-name="uniE314" unicode="keyboard_arrow_left" -d="M329 169l-30 -30l-128 128l128 128l30 -30l-98 -98z" /> - <glyph glyph-name="uniE315" unicode="keyboard_arrow_right" -d="M183 163l98 98l-98 98l30 30l128 -128l-128 -128z" /> - <glyph glyph-name="uniE316" unicode="keyboard_arrow_up" -d="M158 183l-30 30l128 128l128 -128l-30 -30l-98 98z" /> - <glyph glyph-name="uniE317" unicode="keyboard_backspace" -d="M448 277v-42h-302l76 -77l-30 -30l-128 128l128 128l30 -30l-76 -77h302z" /> - <glyph glyph-name="uniE318" unicode="keyboard_capslock" -d="M128 128v43h256v-43h-256zM256 333l-98 -98l-30 30l128 128l128 -128l-30 -30z" /> - <glyph glyph-name="uniE31A" unicode="keyboard_hide" -d="M256 21l-85 86h170zM405 341v43h-42v-43h42zM405 277v43h-42v-43h42zM341 341v43h-42v-43h42zM341 277v43h-42v-43h42zM341 192v43h-170v-43h170zM149 341v43h-42v-43h42zM149 277v43h-42v-43h42zM171 320v-43h42v43h-42zM171 384v-43h42v43h-42zM235 320v-43h42v43h-42z -M235 384v-43h42v43h-42zM427 448q17 0 29.5 -13t12.5 -30v-213q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v213q0 17 12.5 30t29.5 13h342z" /> - <glyph glyph-name="uniE31B" unicode="keyboard_return" -d="M405 363h43v-128h-324l77 -77l-30 -30l-128 128l128 128l30 -30l-77 -77h281v86z" /> - <glyph glyph-name="uniE31C" unicode="keyboard_tab" -d="M427 384h42v-256h-42v256zM247 354l30 30l128 -128l-128 -128l-30 30l77 77h-303v42h303z" /> - <glyph glyph-name="uniE31D" unicode="keyboard_voice" -d="M369 256h36q0 -54 -37.5 -94.5t-90.5 -48.5v-70h-42v70q-53 8 -90.5 48.5t-37.5 94.5h36q0 -47 33.5 -78t79.5 -31t79.5 31t33.5 78zM256 192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -26 -19 -45t-45 -19z" /> - <glyph glyph-name="uniE31E" unicode="laptop" -d="M85 384v-213h342v213h-342zM427 128h85v-43h-512v43h85q-17 0 -29.5 13t-12.5 30v213q0 17 12.5 30t29.5 13h342q17 0 29.5 -13t12.5 -30v-213q0 -17 -12.5 -30t-29.5 -13z" /> - <glyph glyph-name="uniE31F" unicode="laptop_chromebook" -d="M427 192v213h-342v-213h342zM299 128v21h-86v-21h86zM469 128h43v-43h-512v43h43v320h426v-320z" /> - <glyph glyph-name="uniE320" unicode="laptop_mac" -d="M256 107q9 0 15 6t6 15t-6 15t-15 6t-15 -6t-6 -15t6 -15t15 -6zM85 405v-234h342v234h-342zM427 128h85q0 -17 -13 -30t-30 -13h-426q-17 0 -30 13t-13 30h85q-17 0 -29.5 13t-12.5 30v234q0 17 12.5 30t29.5 13h342q17 0 29.5 -13t12.5 -30v-234q0 -17 -12.5 -30 -t-29.5 -13z" /> - <glyph glyph-name="uniE321" unicode="laptop_windows" -d="M85 405v-213h342v213h-342zM427 128h85v-43h-512v43h85v21q-17 0 -29.5 13t-12.5 30v213q0 17 12.5 30t29.5 13h342q17 0 29.5 -13t12.5 -30v-213q0 -17 -12.5 -30t-29.5 -13v-21z" /> - <glyph glyph-name="uniE322" unicode="memory" -d="M363 149v214h-214v-214h214zM448 277h-43v-42h43v-43h-43v-43q0 -17 -12.5 -29.5t-29.5 -12.5h-43v-43h-43v43h-42v-43h-43v43h-43q-17 0 -29.5 12.5t-12.5 29.5v43h-43v43h43v42h-43v43h43v43q0 17 12.5 29.5t29.5 12.5h43v43h43v-43h42v43h43v-43h43q17 0 29.5 -12.5 -t12.5 -29.5v-43h43v-43zM277 235v42h-42v-42h42zM320 320v-128h-128v128h128z" /> - <glyph glyph-name="uniE323" unicode="mouse" -d="M235 489v-169h-150q0 65 43.5 113t106.5 56zM85 192v85h342v-85q0 -70 -50.5 -120.5t-120.5 -50.5t-120.5 50.5t-50.5 120.5zM277 489q63 -8 106.5 -56t43.5 -113h-150v169z" /> - <glyph glyph-name="uniE324" unicode="phone_android" -d="M368 128v299h-224v-299h224zM299 64v21h-86v-21h86zM341 491q26 0 45 -19t19 -45v-342q0 -26 -19 -45t-45 -19h-170q-26 0 -45 19t-19 45v342q0 26 19 45t45 19h170z" /> - <glyph glyph-name="uniE325" unicode="phone_iphone" -d="M341 128v299h-192v-299h192zM245 43q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5t9.5 -22.5t22.5 -9.5zM331 491q22 0 37.5 -16t15.5 -38v-362q0 -22 -15.5 -38t-37.5 -16h-171q-22 0 -37.5 16t-15.5 38v362q0 22 15.5 38t37.5 16h171z" /> - <glyph glyph-name="uniE326" unicode="phonelink" -d="M469 149v150h-85v-150h85zM491 341q9 0 15 -6t6 -15v-213q0 -9 -6 -15.5t-15 -6.5h-128q-9 0 -15.5 6.5t-6.5 15.5v213q0 9 6.5 15t15.5 6h128zM85 384v-235h214v-64h-299v64h43v235q0 17 12.5 30t29.5 13h384v-43h-384z" /> - <glyph glyph-name="uniE327" unicode="phonelink_off" -d="M491 341q9 0 15 -6t6 -15v-213q0 -9 -6 -15.5t-15 -6.5h-4l-64 64h46v150h-85v-111l-43 43v89q0 9 6.5 15t15.5 6h128zM85 378v-229h229zM41 477q81 -81 230.5 -231t183.5 -184l-27 -27l-50 50h-378v64h43v235q0 15 10 27l-39 39zM469 384h-281l-43 43h324v-43z" /> - <glyph glyph-name="uniE328" unicode="router" -d="M320 128v43h-43v-43h43zM245 128v43h-42v-43h42zM171 128v43h-43v-43h43zM405 235q17 0 30 -13t13 -30v-85q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v85q0 17 13 30t30 13h213v85h43v-85h42zM412 369l-17 -17q-21 21 -54 21q-32 0 -53 -21l-17 17q30 30 70 30 -q41 0 71 -30zM431 386q-41 36 -90 36q-48 0 -89 -36l-17 17q45 45 106 45q62 0 107 -45z" /> - <glyph glyph-name="uniE329" unicode="scanner" -d="M405 149v43h-213v-43h213zM149 149v43h-42v-43h42zM422 284q11 -3 18.5 -14.5t7.5 -24.5v-117q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v85q0 17 13 30t30 13h268l-300 109l15 40z" /> - <glyph glyph-name="uniE32A" unicode="security" -d="M256 491l192 -86v-128q0 -89 -55 -162.5t-137 -93.5q-82 20 -137 93.5t-55 162.5v128zM256 256v-191q59 19 100 71.5t49 119.5h-149zM256 256v188l-149 -66v-122h149z" /> - <glyph glyph-name="uniE32B" unicode="sim_card" -d="M363 192v85h-43v-85h43zM277 235v42h-42v-42h42zM277 107v85h-42v-85h42zM192 192v85h-43v-85h43zM363 107v42h-43v-42h43zM192 107v42h-43v-42h43zM426 427l1 -342q0 -17 -13 -29.5t-30 -12.5h-256q-17 0 -30 12.5t-13 29.5v256l128 128h171q17 0 29.5 -12.5t12.5 -29.5 -z" /> - <glyph glyph-name="uniE32C" unicode="smartphone" -d="M363 107v298h-214v-298h214zM363 490q17 0 29.5 -12.5t12.5 -29.5v-384q0 -17 -12.5 -30t-29.5 -13h-214q-17 0 -29.5 13t-12.5 30v384q0 17 12.5 30t29.5 13z" /> - <glyph glyph-name="uniE32D" unicode="speaker" -d="M256 256q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM256 85q44 0 75.5 31.5t31.5 75.5t-31.5 75.5t-75.5 31.5t-75.5 -31.5t-31.5 -75.5t31.5 -75.5t75.5 -31.5zM256 427q-18 0 -30.5 -13t-12.5 -30t12.5 -30t30.5 -13q17 0 30 13t13 30t-13 30 -t-30 13zM363 469q17 0 29.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-29.5 -12.5h-214q-17 0 -29.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t29.5 12.5h214z" /> - <glyph glyph-name="uniE32E" unicode="speaker_group" -d="M128 405v-341h213v-43h-213q-18 0 -30.5 13t-12.5 30v341h43zM245 245q0 22 16 38t38 16t37.5 -16t15.5 -38t-15.5 -37.5t-37.5 -15.5t-38 15.5t-16 37.5zM299 160q35 0 60 25t25 60t-25 60.5t-60 25.5t-60.5 -25.5t-25.5 -60.5t25.5 -60t60.5 -25zM299 448 -q-17 0 -30 -12.5t-13 -30.5t12.5 -30t30.5 -12q17 0 29.5 12t12.5 30t-12.5 30.5t-29.5 12.5zM388 491q16 0 27.5 -11.5t11.5 -27.5v-307q0 -16 -11.5 -27t-27.5 -11h-179q-16 0 -27 11t-11 27v307q0 16 11 27.5t27 11.5h179z" /> - <glyph glyph-name="uniE32F" unicode="tablet" -d="M405 128v256h-298v-256h298zM448 427q17 0 30 -13t13 -30l-1 -256q0 -17 -12.5 -30t-29.5 -13h-384q-17 0 -30 13t-13 30v256q0 17 13 30t30 13h384z" /> - <glyph glyph-name="uniE330" unicode="tablet_android" -d="M411 107v341h-310v-341h310zM299 43v21h-86v-21h86zM384 512q26 0 45 -19t19 -45v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h256z" /> - <glyph glyph-name="uniE331" unicode="tablet_mac" -d="M405 107v341h-320v-341h320zM245 21q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5t9.5 -22.5t22.5 -9.5zM395 512q22 0 37.5 -15.5t15.5 -37.5v-406q0 -22 -15.5 -37.5t-37.5 -15.5h-299q-22 0 -37.5 15.5t-15.5 37.5v406q0 22 15.5 37.5 -t37.5 15.5h299z" /> - <glyph glyph-name="uniE332" unicode="toys" -d="M256 256q0 -48 -34.5 -82.5t-82.5 -34.5t-83 34.5t-35 82.5h235zM256 256q-48 0 -82.5 34.5t-34.5 82.5t34.5 83t82.5 35v-235zM256 256q48 0 82.5 -34.5t34.5 -82.5t-34.5 -83t-82.5 -35v235zM256 256q0 48 34.5 82.5t82.5 34.5t83 -34.5t35 -82.5h-235z" /> - <glyph glyph-name="uniE333" unicode="tv" -d="M448 149v256h-384v-256h384zM448 448q17 0 30 -13t13 -30l-1 -256q0 -17 -12.5 -29.5t-29.5 -12.5h-107v-43h-170v43h-107q-17 0 -30 12.5t-13 29.5v256q0 17 13 30t30 13h384z" /> - <glyph glyph-name="uniE334" unicode="watch" -d="M128 256q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5zM427 256q0 -82 -65 -134l-21 -122h-170l-21 122q-65 50 -65 134t65 134l21 122h170l21 -122q65 -52 65 -134z" /> - <glyph glyph-name="uniE335" unicode="device_hub" -d="M363 171h85v-107h-107v65l-85 90l-85 -90v-65h-107v107h85l86 85v68q-19 7 -31 23t-12 37q0 26 19 45t45 19t45 -19t19 -45q0 -21 -12 -37t-31 -23v-68z" /> - <glyph glyph-name="uniE336" unicode="power_input" -d="M341 192v43h107v-43h-107zM192 192v43h107v-43h-107zM43 192v43h106v-43h-106zM43 320h405v-43h-405v43z" /> - <glyph glyph-name="uniE337" unicode="devices_other" -d="M448 128v171h-85v-171h85zM469 341q8 0 15 -6.5t7 -14.5v-213q0 -8 -7 -15t-15 -7h-128q-8 0 -14.5 7t-6.5 15v213q0 8 6.5 14.5t14.5 6.5h128zM235 139q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5t9.5 -22.5t22.5 -9.5zM277 256v-38 -q22 -20 22 -47q0 -28 -22 -48v-38h-85v38q-21 19 -21 48q0 28 21 47v38h85zM64 384v-256h85v-43h-85q-17 0 -30 13t-13 30v256q0 17 13 30t30 13h384v-43h-384z" /> - <glyph glyph-name="uniE338" unicode="videogame_asset" -d="M416 256q14 0 23 9t9 23t-9 23t-23 9t-23 -9t-9 -23t9 -23t23 -9zM331 192q13 0 22.5 9t9.5 23t-9.5 23t-22.5 9t-22.5 -9t-9.5 -23t9.5 -23t22.5 -9zM235 235v42h-64v64h-43v-64h-64v-42h64v-64h43v64h64zM448 384q17 0 30 -13t13 -30v-170q0 -17 -13 -30t-30 -13h-384 -q-17 0 -30 13t-13 30v170q0 17 13 30t30 13h384z" /> - <glyph glyph-name="uniE39D" unicode="add_to_photos" -d="M405 277v43h-85v85h-43v-85h-85v-43h85v-85h43v85h85zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-256q-17 0 -30 13t-13 30v256q0 17 13 29.5t30 12.5h256zM85 384v-299h299v-42h-299q-17 0 -29.5 12.5t-12.5 29.5v299h42z" /> - <glyph glyph-name="uniE39E" unicode="adjust" -d="M320 256q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5 -t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE39F" unicode="assistant" -d="M296 237l88 40l-88 40l-40 88l-40 -88l-88 -40l88 -40l40 -88zM405 469q17 0 30 -12.5t13 -29.5v-299q0 -17 -13 -30t-30 -13h-85l-64 -64l-64 64h-85q-17 0 -30 13t-13 30v299q0 17 13 29.5t30 12.5h298z" /> - <glyph glyph-name="uniE3A0" unicode="assistant_photo" -d="M307 384h120v-213h-150l-8 42h-120v-149h-42v363h192z" /> - <glyph glyph-name="uniE3A1" unicode="audiotrack" -d="M256 448h149v-64h-85v-235h-1q-4 -36 -31 -60.5t-64 -24.5q-40 0 -68 28t-28 68t28 68t68 28q17 0 32 -6v198z" /> - <glyph glyph-name="uniE3A2" unicode="blur_circular" -d="M299 235q9 0 15 -6.5t6 -15.5t-6 -15t-15 -6t-15.5 6t-6.5 15t6.5 15.5t15.5 6.5zM299 160q10 0 10 -11q0 -10 -10 -10q-11 0 -11 10q0 11 11 11zM256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5z -M256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM363 309q10 0 10 -10q0 -11 -10 -11q-11 0 -11 11q0 10 11 10zM363 224q10 0 10 -11q0 -10 -10 -10q-11 0 -11 10q0 11 11 11zM299 352q-11 0 -11 11 -q0 10 11 10q10 0 10 -10q0 -11 -10 -11zM299 320q9 0 15 -6t6 -15t-6 -15.5t-15 -6.5t-15.5 6.5t-6.5 15.5t6.5 15t15.5 6zM213 352q-10 0 -10 11q0 10 10 10q11 0 11 -10q0 -11 -11 -11zM149 224q11 0 11 -11q0 -10 -11 -10q-10 0 -10 10q0 11 10 11zM213 160q11 0 11 -11 -q0 -10 -11 -10q-10 0 -10 10q0 11 10 11zM149 309q11 0 11 -10q0 -11 -11 -11q-10 0 -10 11q0 10 10 10zM213 235q9 0 15.5 -6.5t6.5 -15.5t-6.5 -15t-15.5 -6t-15 6t-6 15t6 15.5t15 6.5zM213 320q9 0 15.5 -6t6.5 -15t-6.5 -15.5t-15.5 -6.5t-15 6.5t-6 15.5t6 15t15 6z -" /> - <glyph glyph-name="uniE3A3" unicode="blur_linear" -d="M277 149q-9 0 -15 6.5t-6 15.5t6 15t15 6t15.5 -6t6.5 -15t-6.5 -15.5t-15.5 -6.5zM277 235q-9 0 -15 6t-6 15t6 15t15 6t15.5 -6t6.5 -15t-6.5 -15t-15.5 -6zM277 320q-9 0 -15 6t-6 15t6 15.5t15 6.5t15.5 -6.5t6.5 -15.5t-6.5 -15t-15.5 -6zM363 245q-11 0 -11 11 -t11 11q10 0 10 -11t-10 -11zM363 331q-11 0 -11 10q0 11 11 11q10 0 10 -11q0 -10 -10 -10zM64 448h384v-43h-384v43zM363 160q-11 0 -11 11q0 10 11 10q10 0 10 -10q0 -11 -10 -11zM192 149q-9 0 -15 6.5t-6 15.5t6 15t15 6t15 -6t6 -15t-6 -15.5t-15 -6.5zM107 224 -q-13 0 -22.5 9t-9.5 23t9.5 23t22.5 9t22.5 -9t9.5 -23t-9.5 -23t-22.5 -9zM107 309q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5zM64 64v43h384v-43h-384zM192 320q-9 0 -15 6t-6 15t6 15.5t15 6.5t15 -6.5t6 -15.5t-6 -15 -t-15 -6zM192 235q-9 0 -15 6t-6 15t6 15t15 6t15 -6t6 -15t-6 -15t-15 -6zM107 139q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5z" /> - <glyph glyph-name="uniE3A4" unicode="blur_off" -d="M64 224q11 0 11 -11q0 -10 -11 -10t-11 10q0 11 11 11zM128 149q9 0 15 -6t6 -15t-6 -15t-15 -6t-15 6t-6 15t6 15t15 6zM213 75q11 0 11 -11t-11 -11q-10 0 -10 11t10 11zM64 309q11 0 11 -10q0 -11 -11 -11t-11 11q0 10 11 10zM128 235q9 0 15 -6.5t6 -15.5t-6 -15 -t-15 -6t-15 6t-6 15t6 15.5t15 6.5zM448 224q11 0 11 -11q0 -10 -11 -10t-11 10q0 11 11 11zM213 149q9 0 15.5 -6t6.5 -15t-6.5 -15t-15.5 -6t-15 6t-6 15t6 15t15 6zM53 400l27 27l347 -347l-28 -27l-80 81q1 -2 1 -6q0 -9 -6 -15t-15 -6t-15.5 6t-6.5 15t6.5 15t15.5 6 -q4 0 6 -1l-60 60q-2 -11 -11 -19t-21 -8q-13 0 -22.5 9.5t-9.5 22.5q0 12 8 21t19 11l-60 60q1 -2 1 -6q0 -9 -6 -15.5t-15 -6.5t-15 6.5t-6 15.5t6 15t15 6l6 -1zM299 75q10 0 10 -11t-10 -11q-11 0 -11 11t11 11zM384 363q-9 0 -15 6t-6 15t6 15t15 6t15 -6t6 -15t-6 -15 -t-15 -6zM384 277q-9 0 -15 6.5t-6 15.5t6 15t15 6t15 -6t6 -15t-6 -15.5t-15 -6.5zM384 192q-9 0 -15 6t-6 15t6 15.5t15 6.5t15 -6.5t6 -15.5t-6 -15t-15 -6zM213 363q-9 0 -15 6t-6 15t6 15t15 6t15.5 -6t6.5 -15t-6.5 -15t-15.5 -6zM448 288q-11 0 -11 11q0 10 11 10 -t11 -10q0 -11 -11 -11zM213 437q-10 0 -10 11t10 11q11 0 11 -11t-11 -11zM299 437q-11 0 -11 11t11 11q10 0 10 -11t-10 -11zM294 267q-10 1 -18 9t-9 18v5q0 13 9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5h-5zM299 363q-9 0 -15.5 6t-6.5 15t6.5 15 -t15.5 6t15 -6t6 -15t-6 -15t-15 -6z" /> - <glyph glyph-name="uniE3A5" unicode="blur_on" -d="M299 331q13 0 22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5zM299 245q13 0 22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5zM213 149q9 0 15.5 -6t6.5 -15t-6.5 -15t-15.5 -6t-15 6t-6 15t6 15 -t15 6zM213 331q13 0 22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5zM299 75q10 0 10 -11t-10 -11q-11 0 -11 11t11 11zM299 149q9 0 15 -6t6 -15t-6 -15t-15 -6t-15.5 6t-6.5 15t6.5 15t15.5 6zM448 224q11 0 11 -11q0 -10 -11 -10 -t-11 10q0 11 11 11zM384 405q9 0 15 -6t6 -15t-6 -15t-15 -6t-15 6t-6 15t6 15t15 6zM384 320q9 0 15 -6t6 -15t-6 -15.5t-15 -6.5t-15 6.5t-6 15.5t6 15t15 6zM384 149q9 0 15 -6t6 -15t-6 -15t-15 -6t-15 6t-6 15t6 15t15 6zM384 235q9 0 15 -6.5t6 -15.5t-6 -15t-15 -6 -t-15 6t-6 15t6 15.5t15 6.5zM213 245q13 0 22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5zM213 363q-9 0 -15 6t-6 15t6 15t15 6t15.5 -6t6.5 -15t-6.5 -15t-15.5 -6zM213 437q-10 0 -10 11t10 11q11 0 11 -11t-11 -11zM213 75 -q11 0 11 -11t-11 -11q-10 0 -10 11t10 11zM64 224q11 0 11 -11q0 -10 -11 -10t-11 10q0 11 11 11zM299 437q-11 0 -11 11t11 11q10 0 10 -11t-10 -11zM299 363q-9 0 -15.5 6t-6.5 15t6.5 15t15.5 6t15 -6t6 -15t-6 -15t-15 -6zM448 288q-11 0 -11 11q0 10 11 10t11 -10 -q0 -11 -11 -11zM128 405q9 0 15 -6t6 -15t-6 -15t-15 -6t-15 6t-6 15t6 15t15 6zM64 309q11 0 11 -10q0 -11 -11 -11t-11 11q0 10 11 10zM128 320q9 0 15 -6t6 -15t-6 -15.5t-15 -6.5t-15 6.5t-6 15.5t6 15t15 6zM128 149q9 0 15 -6t6 -15t-6 -15t-15 -6t-15 6t-6 15t6 15 -t15 6zM128 235q9 0 15 -6.5t6 -15.5t-6 -15t-15 -6t-15 6t-6 15t6 15.5t15 6.5z" /> - <glyph glyph-name="uniE3A6" unicode="brightness_1" -d="M43 256q0 88 62.5 150.5t150.5 62.5t150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5z" /> - <glyph glyph-name="uniE3A7" unicode="brightness_2" -d="M213 469q89 0 151.5 -62.5t62.5 -150.5t-62.5 -150.5t-151.5 -62.5q-58 0 -106 28q49 28 77.5 77.5t28.5 107.5t-28.5 107.5t-77.5 77.5q48 28 106 28z" /> - <glyph glyph-name="uniE3A8" unicode="brightness_3" -d="M192 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5q-34 0 -64 9q66 20 107.5 76.5t41.5 127.5t-41.5 127.5t-107.5 76.5q30 9 64 9z" /> - <glyph glyph-name="uniE3A9" unicode="brightness_4" -d="M256 128q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5q-26 0 -53 -12q33 -15 53.5 -46.5t20.5 -69.5t-20.5 -69.5t-53.5 -46.5q27 -12 53 -12zM427 327l70 -71l-70 -71v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100v-100z" /> - <glyph glyph-name="uniE3AA" unicode="brightness_5" -d="M256 128q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5zM427 185v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100v-100l70 -71z" /> - <glyph glyph-name="uniE3AB" unicode="brightness_6" -d="M256 128q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5v-256zM427 185v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100v-100l70 -71z" /> - <glyph glyph-name="uniE3AC" unicode="brightness_7" -d="M256 341q35 0 60 -25t25 -60t-25 -60t-60 -25t-60 25t-25 60t25 60t60 25zM256 128q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5zM427 327l70 -71l-70 -71v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100 -l71 70l71 -70h100v-100z" /> - <glyph glyph-name="uniE3AD" unicode="broken_image" -d="M384 268l64 -64v-97q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v140l64 -64l85 86l86 -86zM448 405v-140l-64 64l-85 -86l-86 86l-85 -86l-64 65v97q0 17 13 30t30 13h298q17 0 30 -13t13 -30z" /> - <glyph glyph-name="uniE3AE" unicode="brush" -d="M442 413q6 -6 6 -15t-6 -15l-191 -191l-59 59l191 191q6 6 15 6t15 -6zM149 213q26 0 45 -19t19 -45q0 -35 -25 -60t-60 -25q-52 0 -85 43q15 0 28.5 11.5t13.5 30.5q0 26 19 45t45 19z" /> - <glyph glyph-name="uniE3AF" unicode="camera" -d="M210 48q4 7 43 75t60 103l78 -135q-59 -48 -135 -48q-21 0 -46 5zM52 192h207l-79 -135q-46 17 -79.5 52.5t-48.5 82.5zM99 400l108 -187h-160q-4 19 -4 43q0 83 56 144zM465 299q4 -19 4 -43q0 -83 -56 -144l-102 176l-6 11h160zM460 320h-207l79 135q46 -17 79.5 -52.5 -t48.5 -82.5zM201 288l-2 -2l-78 135q59 48 135 48q21 0 46 -5z" /> - <glyph glyph-name="uniE3B0" unicode="camera_alt" -d="M256 149q44 0 75.5 31.5t31.5 75.5t-31.5 75.5t-75.5 31.5t-75.5 -31.5t-31.5 -75.5t31.5 -75.5t75.5 -31.5zM192 469h128l39 -42h68q17 0 29.5 -13t12.5 -30v-256q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h68zM188 256 -q0 28 20 48t48 20t48 -20t20 -48t-20 -48t-48 -20t-48 20t-20 48z" /> - <glyph glyph-name="uniE3B1" unicode="camera_front" -d="M149 469v-224q0 24 36.5 39t70.5 15t70.5 -15t36.5 -39v224h-214zM363 512q17 0 29.5 -13t12.5 -30v-298q0 -17 -12.5 -30t-29.5 -13h-150l64 -64l-64 -64v43h-106v42h106v43h-64q-17 0 -29.5 13t-12.5 30v298q0 17 12.5 30t29.5 13h214zM256 341q-17 0 -29.5 13 -t-12.5 30t12.5 30t29.5 13t30 -13t13 -30t-13 -30t-30 -13zM299 85h106v-42h-106v42z" /> - <glyph glyph-name="uniE3B2" unicode="camera_rear" -d="M256 384q17 0 29.5 13t12.5 30t-12.5 29.5t-29.5 12.5t-30 -12.5t-13 -29.5t12.5 -30t30.5 -13zM363 512q17 0 29.5 -13t12.5 -30v-298q0 -17 -12.5 -30t-29.5 -13h-150l64 -64l-64 -64v43h-106v42h106v43h-64q-17 0 -29.5 13t-12.5 30v298q0 17 12.5 30t29.5 13h214z -M299 85h106v-42h-106v42z" /> - <glyph glyph-name="uniE3B3" unicode="camera_roll" -d="M427 320v43h-43v-43h43zM427 128v43h-43v-43h43zM341 320v43h-42v-43h42zM341 128v43h-42v-43h42zM256 320v43h-43v-43h43zM256 128v43h-43v-43h43zM299 405h170v-320h-170q0 -17 -13 -29.5t-30 -12.5h-171q-17 0 -29.5 12.5t-12.5 29.5v320q0 17 12.5 30t29.5 13h22v21 -q0 9 6 15.5t15 6.5h85q9 0 15.5 -6.5t6.5 -15.5v-21h21q17 0 30 -13t13 -30z" /> - <glyph glyph-name="uniE3B4" unicode="center_focus_strong" -d="M405 107v85h43v-85q0 -17 -13 -30t-30 -13h-85v43h85zM405 448q17 0 30 -13t13 -30v-85h-43v85h-85v43h85zM107 405v-85h-43v85q0 17 13 30t30 13h85v-43h-85zM107 192v-85h85v-43h-85q-17 0 -30 13t-13 30v85h43zM256 341q35 0 60 -25t25 -60t-25 -60t-60 -25t-60 25 -t-25 60t25 60t60 25z" /> - <glyph glyph-name="uniE3B5" unicode="center_focus_weak" -d="M256 213q17 0 30 13t13 30t-13 30t-30 13t-30 -13t-13 -30t13 -30t30 -13zM256 341q35 0 60 -25t25 -60t-25 -60t-60 -25t-60 25t-25 60t25 60t60 25zM405 107v85h43v-85q0 -17 -13 -30t-30 -13h-85v43h85zM405 448q17 0 30 -13t13 -30v-85h-43v85h-85v43h85zM107 405 -v-85h-43v85q0 17 13 30t30 13h85v-43h-85zM107 192v-85h85v-43h-85q-17 0 -30 13t-13 30v85h43z" /> - <glyph glyph-name="uniE3B6" unicode="collections" -d="M43 384h42v-299h299v-42h-299q-17 0 -29.5 12.5t-12.5 29.5v299zM235 256l-64 -85h256l-86 106l-63 -79zM469 171q0 -17 -12.5 -30t-29.5 -13h-256q-17 0 -30 13t-13 30v256q0 17 13 29.5t30 12.5h256q17 0 29.5 -12.5t12.5 -29.5v-256z" /> - <glyph glyph-name="uniE3B7" unicode="color_lens" -d="M373 256q13 0 22.5 9t9.5 23t-9.5 23t-22.5 9t-22.5 -9t-9.5 -23t9.5 -23t22.5 -9zM309 341q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5t9.5 -22.5t22.5 -9.5zM203 341q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5 -t9.5 -22.5t22.5 -9.5zM139 256q13 0 22.5 9t9.5 23t-9.5 23t-22.5 9t-22.5 -9t-9.5 -23t9.5 -23t22.5 -9zM256 448q79 0 135.5 -50t56.5 -121q0 -44 -31.5 -75t-75.5 -31h-37q-14 0 -23 -9.5t-9 -22.5q0 -11 8 -21t8 -22q0 -14 -9 -23t-23 -9q-80 0 -136 56t-56 136t56 136 -t136 56z" /> - <glyph glyph-name="uniE3B8" unicode="colorize" -d="M148 107l172 172l-41 41l-172 -172zM442 392q15 -15 0 -30l-67 -67l41 -41l-30 -30l-30 30l-191 -190h-101v101l190 191l-30 30l30 30l41 -41l67 67q6 6 15 6t15 -6z" /> - <glyph glyph-name="uniE3B9" unicode="compare" -d="M405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-106v192l106 -128v277h-106v43h106zM213 128v128l-106 -128h106zM213 448v43h43v-470h-43v43h-106q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h106z" /> - <glyph glyph-name="uniE3BA" unicode="control_point" -d="M256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM277 363v-86h86v-42h-86v-86h-42 -v86h-86v42h86v86h42z" /> - <glyph glyph-name="uniE3BB" unicode="control_point_duplicate" -d="M320 107q62 0 105.5 43.5t43.5 105.5t-43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5t43.5 -105.5t105.5 -43.5zM320 448q80 0 136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136t56 136t136 56zM43 256q0 -44 23 -80.5t62 -54.5v-46q-56 20 -92 70t-36 111 -t36 111t92 70v-46q-39 -18 -62 -54.5t-23 -80.5zM341 341v-64h64v-42h-64v-64h-42v64h-64v42h64v64h42z" /> - <glyph glyph-name="uniE3BC" unicode="crop_16_9" -d="M405 171v170h-298v-170h298zM405 384q17 0 30 -13t13 -30v-170q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v170q0 17 13 30t30 13h298z" /> - <glyph glyph-name="uniE3BD" unicode="crop_3_2" -d="M405 128v256h-298v-256h298zM405 427q17 0 30 -13t13 -30v-256q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v256q0 17 13 30t30 13h298z" /> - <glyph glyph-name="uniE3BE" unicode="crop" -d="M149 149h342v-42h-86v-86h-42v86h-214q-17 0 -29.5 12.5t-12.5 29.5v214h-86v42h86v86h42v-342zM363 192v171h-171v42h171q17 0 29.5 -12.5t12.5 -29.5v-171h-42z" /> - <glyph glyph-name="uniE3BF" unicode="crop_5_4" -d="M405 149v214h-298v-214h298zM405 405q17 0 30 -12.5t13 -29.5v-214q0 -17 -13 -29.5t-30 -12.5h-298q-17 0 -30 12.5t-13 29.5v214q0 17 13 29.5t30 12.5h298z" /> - <glyph glyph-name="uniE3C0" unicode="crop_7_5" -d="M405 192v128h-298v-128h298zM405 363q17 0 30 -13t13 -30v-128q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v128q0 17 13 30t30 13h298z" /> - <glyph glyph-name="uniE3C1" unicode="crop_din" -d="M405 107v298h-298v-298h298zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298z" /> - <glyph glyph-name="uniE3C2" unicode="crop_free" -d="M405 448q17 0 30 -13t13 -30v-85h-43v85h-85v43h85zM405 107v85h43v-85q0 -17 -13 -30t-30 -13h-85v43h85zM107 192v-85h85v-43h-85q-17 0 -30 13t-13 30v85h43zM64 405q0 17 13 30t30 13h85v-43h-85v-85h-43v85z" /> - <glyph glyph-name="uniE3C3" unicode="crop_landscape" -d="M405 149v214h-298v-214h298zM405 405q17 0 30 -12.5t13 -29.5v-214q0 -17 -13 -29.5t-30 -12.5h-298q-17 0 -30 12.5t-13 29.5v214q0 17 13 29.5t30 12.5h298z" /> - <glyph glyph-name="uniE3C4" unicode="crop_original" -d="M298 250l75 -101h-234l58 76l42 -51zM405 107v298h-298v-298h298zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298z" /> - <glyph glyph-name="uniE3C5" unicode="crop_portrait" -d="M363 107v298h-214v-298h214zM363 448q17 0 29.5 -13t12.5 -30v-298q0 -17 -12.5 -30t-29.5 -13h-214q-17 0 -29.5 13t-12.5 30v298q0 17 12.5 30t29.5 13h214z" /> - <glyph glyph-name="uniE3C6" unicode="crop_square" -d="M384 128v256h-256v-256h256zM384 427q17 0 30 -13t13 -30v-256q0 -17 -13 -30t-30 -13h-256q-17 0 -30 13t-13 30v256q0 17 13 30t30 13h256z" /> - <glyph glyph-name="uniE3C7" unicode="dehaze" -d="M43 395h426v-43h-426v43zM43 288h426v-43h-426v43zM43 181h426v-42h-426v42z" /> - <glyph glyph-name="uniE3C8" unicode="details" -d="M136 384l120 -213l120 213h-240zM64 427h384l-192 -342z" /> - <glyph glyph-name="uniE3C9" unicode="edit" -d="M442 362l-39 -39l-80 80l39 39q6 6 15 6t15 -6l50 -50q6 -6 6 -15t-6 -15zM64 144l236 236l80 -80l-236 -236h-80v80z" /> - <glyph glyph-name="uniE3CA" unicode="exposure" -d="M427 85v342l-342 -342h342zM107 405v-42h128v42h-128zM427 469q17 0 29.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-29.5 -12.5h-342q-17 0 -29.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t29.5 12.5h342zM320 149h-43v43h43v43h43v-43h42v-43h-42v-42h-43v42z" /> - <glyph glyph-name="uniE3CB" unicode="exposure_minus_1" -d="M405 128h-42v227l-64 -22v36l100 36h6v-277zM85 277h171v-42h-171v42z" /> - <glyph glyph-name="uniE3CC" unicode="exposure_minus_2" -d="M43 277h170v-42h-170v42zM351 405q86 0 86 -75q0 -14 -4 -25q-7 -19 -11 -25q-17 -27 -40 -50l-61 -66h127v-36h-184v32l89 97q18 18 31 40q7 12 7 28q0 13 -2 18q-10 26 -38 26q-46 0 -46 -49h-46q0 36 24 60q25 25 68 25z" /> - <glyph glyph-name="uniE3CD" unicode="exposure_plus_1" -d="M427 128h-43v227l-64 -22v36l100 36h7v-277zM213 363v-86h86v-42h-86v-86h-42v86h-86v42h86v86h42z" /> - <glyph glyph-name="uniE3CE" unicode="exposure_plus_2" -d="M171 363v-86h85v-42h-85v-86h-43v86h-85v42h85v86h43zM342 164h127v-36h-184v32l89 97q18 18 31 40q8 13 8 28q0 16 -11 31q-10 13 -30 13q-21 0 -35 -14q-11 -11 -11 -35h-46q0 36 24 60q14 14 29 19q18 6 40 6q18 0 36 -5q20 -8 27 -15q23 -20 23 -55q0 -24 -16 -50 -q-12 -20 -17 -25q-14 -16 -23 -25z" /> - <glyph glyph-name="uniE3CF" unicode="exposure_zero" -d="M299 296q0 40 -11 57q-4 6 -14 12q-7 4 -18 4t-18 -4q-10 -6 -14 -12q-11 -17 -11 -57v-57q0 -56 25 -71q7 -4 18 -4q21 0 32 17q12 18 12 58v57h-1zM168 289q0 116 88 116q65 0 82 -62q7 -26 7 -54v-44h-1q0 -59 -24 -90q-14 -16 -28 -21q-16 -6 -36 -6t-36 6 -q-14 5 -28 21q-24 27 -24 90v44z" /> - <glyph glyph-name="uniE3D0" unicode="filter_1" -d="M448 149v299h-299v-299h299zM448 491q17 0 30 -13t13 -30v-299q0 -17 -13 -29.5t-30 -12.5h-299q-17 0 -29.5 12.5t-12.5 29.5v299q0 17 12.5 30t29.5 13h299zM299 192v171h-43v42h85v-213h-42zM64 405v-341h341v-43h-341q-17 0 -30 13t-13 30v341h43z" /> - <glyph glyph-name="uniE3D1" unicode="filter_2" -d="M363 235v-43h-128v85q0 18 12.5 30.5t29.5 12.5h43v43h-85v42h85q18 0 30.5 -12t12.5 -30v-43q0 -18 -13 -30.5t-30 -12.5h-43v-42h86zM448 149v299h-299v-299h299zM448 491q17 0 30 -13t13 -30v-299q0 -17 -13 -29.5t-30 -12.5h-299q-17 0 -29.5 12.5t-12.5 29.5v299 -q0 17 12.5 30t29.5 13h299zM64 405v-341h341v-43h-341q-17 0 -30 13t-13 30v341h43z" /> - <glyph glyph-name="uniE3D2" unicode="filter_3" -d="M363 235q0 -18 -13 -30.5t-30 -12.5h-85v43h85v42h-43v43h43v43h-85v42h85q18 0 30.5 -12t12.5 -30v-32q0 -13 -9.5 -22.5t-22.5 -9.5q13 0 22.5 -9.5t9.5 -22.5v-32zM64 405v-341h341v-43h-341q-17 0 -30 13t-13 30v341h43zM448 149v299h-299v-299h299zM448 491 -q17 0 30 -13t13 -30v-299q0 -17 -13 -29.5t-30 -12.5h-299q-17 0 -29.5 12.5t-12.5 29.5v299q0 17 12.5 30t29.5 13h299z" /> - <glyph glyph-name="uniE3D3" unicode="filter" -d="M448 149v299h-299v-299h299zM448 491q17 0 30 -13t13 -30v-299q0 -17 -13 -29.5t-30 -12.5h-299q-17 0 -29.5 12.5t-12.5 29.5v299q0 17 12.5 30t29.5 13h299zM64 405v-341h341v-43h-341q-17 0 -30 13t-13 30v341h43zM340 292l76 -100h-235l59 75l42 -50z" /> - <glyph glyph-name="uniE3D4" unicode="filter_4" -d="M448 149v299h-299v-299h299zM448 491q17 0 30 -13t13 -30v-299q0 -17 -13 -29.5t-30 -12.5h-299q-17 0 -29.5 12.5t-12.5 29.5v299q0 17 12.5 30t29.5 13h299zM320 192v85h-85v128h42v-85h43v85h43v-213h-43zM64 405v-341h341v-43h-341q-17 0 -30 13t-13 30v341h43z" /> - <glyph glyph-name="uniE3D5" unicode="filter_5" -d="M363 235q0 -18 -13 -30.5t-30 -12.5h-85v43h85v42h-85v128h128v-42h-86v-43h43q17 0 30 -12.5t13 -30.5v-42zM64 405v-341h341v-43h-341q-17 0 -30 13t-13 30v341h43zM448 149v299h-299v-299h299zM448 491q17 0 30 -13t13 -30v-299q0 -17 -13 -29.5t-30 -12.5h-299 -q-17 0 -29.5 12.5t-12.5 29.5v299q0 17 12.5 30t29.5 13h299z" /> - <glyph glyph-name="uniE3D6" unicode="filter_6" -d="M277 277v-42h43v42h-43zM277 192q-17 0 -29.5 12.5t-12.5 30.5v128q0 18 12.5 30t29.5 12h86v-42h-86v-43h43q17 0 30 -12.5t13 -30.5v-42q0 -18 -13 -30.5t-30 -12.5h-43zM448 149v299h-299v-299h299zM448 491q17 0 30 -13t13 -30v-299q0 -17 -13 -29.5t-30 -12.5h-299 -q-17 0 -29.5 12.5t-12.5 29.5v299q0 17 12.5 30t29.5 13h299zM64 405v-341h341v-43h-341q-17 0 -30 13t-13 30v341h43z" /> - <glyph glyph-name="uniE3D7" unicode="filter_7" -d="M277 192h-42l85 171h-85v42h128v-42zM448 149v299h-299v-299h299zM448 491q17 0 30 -13t13 -30v-299q0 -17 -13 -29.5t-30 -12.5h-299q-17 0 -29.5 12.5t-12.5 29.5v299q0 17 12.5 30t29.5 13h299zM64 405v-341h341v-43h-341q-17 0 -30 13t-13 30v341h43z" /> - <glyph glyph-name="uniE3D8" unicode="filter_8" -d="M277 277v-42h43v42h-43zM277 363v-43h43v43h-43zM277 192q-17 0 -29.5 12.5t-12.5 30.5v32q0 13 9.5 22.5t22.5 9.5q-13 0 -22.5 9.5t-9.5 22.5v32q0 18 12.5 30t29.5 12h43q18 0 30.5 -12t12.5 -30v-32q0 -13 -9.5 -22.5t-22.5 -9.5q13 0 22.5 -9.5t9.5 -22.5v-32 -q0 -18 -13 -30.5t-30 -12.5h-43zM448 149v299h-299v-299h299zM448 491q17 0 30 -13t13 -30v-299q0 -17 -13 -29.5t-30 -12.5h-299q-17 0 -29.5 12.5t-12.5 29.5v299q0 17 12.5 30t29.5 13h299zM64 405v-341h341v-43h-341q-17 0 -30 13t-13 30v341h43z" /> - <glyph glyph-name="uniE3D9" unicode="filter_9" -d="M320 320v43h-43v-43h43zM320 405q18 0 30.5 -12t12.5 -30v-128q0 -18 -13 -30.5t-30 -12.5h-85v43h85v42h-43q-17 0 -29.5 12.5t-12.5 30.5v43q0 18 12.5 30t29.5 12h43zM448 149v299h-299v-299h299zM448 491q17 0 30 -13t13 -30v-299q0 -17 -13 -29.5t-30 -12.5h-299 -q-17 0 -29.5 12.5t-12.5 29.5v299q0 17 12.5 30t29.5 13h299zM64 405v-341h341v-43h-341q-17 0 -30 13t-13 30v341h43z" /> - <glyph glyph-name="uniE3DA" unicode="filter_9_plus" -d="M448 320v128h-299v-299h299v128h-43v-42h-42v42h-43v43h43v43h42v-43h43zM448 491q17 0 30 -13t13 -30v-299q0 -17 -13 -29.5t-30 -12.5h-299q-17 0 -29.5 12.5t-12.5 29.5v299q0 17 12.5 30t29.5 13h299zM235 320h21v21h-21v-21zM299 256q0 -18 -13 -30.5t-30 -12.5h-64 -v43h64v21h-21q-17 0 -30 12.5t-13 30.5v21q0 18 13 30.5t30 12.5h21q17 0 30 -12.5t13 -30.5v-85zM64 405v-341h341v-43h-341q-17 0 -30 13t-13 30v341h43z" /> - <glyph glyph-name="uniE3DB" unicode="filter_b_and_w" -d="M405 107v298h-149v-128zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298zM256 277l-149 -170h149v170z" /> - <glyph glyph-name="uniE3DC" unicode="filter_center_focus" -d="M256 320q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM405 107v85h43v-85q0 -17 -13 -30t-30 -13h-85v43h85zM405 448q17 0 30 -13t13 -30v-85h-43v85h-85v43h85zM107 405v-85h-43v85q0 17 13 30t30 13h85v-43h-85zM107 192v-85h85v-43h-85 -q-17 0 -30 13t-13 30v85h43z" /> - <glyph glyph-name="uniE3DD" unicode="filter_drama" -d="M405 128q26 0 45 19t19 45t-19 45t-45 19h-32v11q0 49 -34 83t-83 34q-58 0 -94 -47q41 -11 67.5 -45.5t26.5 -78.5h-43q0 35 -25 60.5t-60 25.5t-60 -25.5t-25 -60.5t25 -60t60 -25h277zM413 298q41 -3 70 -33.5t29 -72.5q0 -44 -31.5 -75.5t-75.5 -31.5h-277 -q-53 0 -90.5 37.5t-37.5 90.5q0 49 33 85.5t81 41.5q21 39 59 63t83 24q58 0 102 -36.5t55 -92.5z" /> - <glyph glyph-name="uniE3DE" unicode="filter_frames" -d="M384 341h-256v-213h256v213zM427 85v299h-96l-74 75l-75 -75h-97v-299h342zM427 427q17 0 29.5 -13t12.5 -30v-299q0 -17 -12.5 -29.5t-29.5 -12.5h-342q-17 0 -29.5 12.5t-12.5 29.5v299q0 17 12.5 30t29.5 13h86l85 85l85 -85h86z" /> - <glyph glyph-name="uniE3DF" unicode="filter_hdr" -d="M299 384l192 -256h-470l128 171l96 -128l34 25l-60 81z" /> - <glyph glyph-name="uniE3E0" unicode="filter_none" -d="M448 149v299h-299v-299h299zM448 491q17 0 30 -13t13 -30v-299q0 -17 -13 -29.5t-30 -12.5h-299q-17 0 -29.5 12.5t-12.5 29.5v299q0 17 12.5 30t29.5 13h299zM64 405v-341h341v-43h-341q-17 0 -30 13t-13 30v341h43z" /> - <glyph glyph-name="uniE3E2" unicode="filter_tilt_shift" -d="M121 91l30 30q37 -28 84 -34v-43q-63 6 -114 47zM277 87q47 6 83 34l31 -30q-51 -41 -114 -47v43zM391 151q28 38 34 83h43q-6 -62 -47 -113zM320 256q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM87 235q6 -47 34 -83l-30 -31q-41 51 -47 114h43z -M121 361q-28 -37 -34 -84h-43q6 63 47 114zM425 277q-6 47 -34 84l30 30q41 -51 47 -114h-43zM391 421l-30 -30q-37 28 -84 34v43q63 -6 114 -47zM235 425q-47 -6 -84 -34l-30 30q51 41 114 47v-43z" /> - <glyph glyph-name="uniE3E3" unicode="filter_vintage" -d="M256 171q35 0 60 25t25 60t-25 60t-60 25t-60 -25t-25 -60t25 -60t60 -25zM49 137q0 38 22.5 72.5t59.5 46.5l-18 9q-30 18 -47 47.5t-17 62.5q64 37 128 0q9 -4 17 -11q-2 14 -2 20q0 35 17.5 64.5t46.5 46.5q29 -17 46.5 -46.5t17.5 -64.5q0 -6 -2 -20q8 7 17 11 -q64 37 128 0q0 -33 -17 -62.5t-47 -47.5q-2 -1 -5.5 -3t-6.5 -3.5t-6 -2.5q3 -1 6 -2.5t6.5 -3.5t5.5 -3q30 -18 47 -47.5t17 -62.5q-64 -37 -128 0q-9 4 -17 11q2 -14 2 -20q0 -35 -17.5 -64.5t-46.5 -46.5q-29 17 -46.5 46.5t-17.5 64.5q0 6 2 20q-8 -7 -17 -11 -q-64 -37 -128 0z" /> - <glyph glyph-name="uniE3E4" unicode="flare" -d="M235 21v128h42v-128h-42zM120 150l46 46l30 -30l-46 -46zM316 166l30 30l46 -46l-30 -30zM256 320q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM363 277h128v-42h-128v42zM392 362l-46 -46l-30 30l46 46zM277 491v-128h-42v128h42zM196 346l-30 -30 -l-46 46l30 30zM149 277v-42h-128v42h128z" /> - <glyph glyph-name="uniE3E5" unicode="flash_auto" -d="M359 349h50l-25 78zM405 469l69 -192h-41l-15 43h-68l-15 -43h-41l69 192h42zM64 469h213l-85 -192h85l-149 -256v192h-64v256z" /> - <glyph glyph-name="uniE3E6" unicode="flash_off" -d="M363 299l-33 -57l-181 181v46h214l-86 -170h86zM70 448l335 -336l-27 -27l-88 89l-77 -131v192h-64v79l-106 107z" /> - <glyph glyph-name="uniE3E7" unicode="flash_on" -d="M149 469h214l-86 -170h86l-150 -256v192h-64v234z" /> - <glyph glyph-name="uniE3E8" unicode="flip" -d="M405 64v43h43q0 -17 -13 -30t-30 -13zM405 235v42h43v-42h-43zM320 405v43h43v-43h-43zM405 149v43h43v-43h-43zM235 21v470h42v-470h-42zM405 448q17 0 30 -13t13 -30h-43v43zM64 405q0 17 13 30t30 13h85v-43h-85v-298h85v-43h-85q-17 0 -30 13t-13 30v298zM405 320v43 -h43v-43h-43zM320 64v43h43v-43h-43z" /> - <glyph glyph-name="uniE3E9" unicode="gradient" -d="M405 277v128h-298v-128h42v-42h43v-43h43v43h42v-43h43v43h43v42h42zM363 128v43h-43v-43h43zM277 128v43h-42v-43h42zM192 128v43h-43v-43h43zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298zM149 320h43 -v-43h-43v43zM320 320h43v-43h-43v43zM235 320h42v-43h43v-42h-43v42h-42v-42h-43v42h43v43zM363 235v-43h42v43h-42zM149 235h-42v-43h42v43z" /> - <glyph glyph-name="uniE3EA" unicode="grain" -d="M213 427q17 0 30 -13t13 -30t-13 -30t-30 -13t-29.5 13t-12.5 30t12.5 30t29.5 13zM299 341q17 0 29.5 -12.5t12.5 -29.5t-12.5 -30t-29.5 -13t-30 13t-13 30t13 29.5t30 12.5zM384 256q17 0 30 -13t13 -30t-13 -29.5t-30 -12.5t-30 12.5t-13 29.5t13 30t30 13zM299 171 -q17 0 29.5 -13t12.5 -30t-12.5 -30t-29.5 -13t-30 13t-13 30t13 30t30 13zM384 341q-17 0 -30 13t-13 30t13 30t30 13t30 -13t13 -30t-13 -30t-30 -13zM128 171q17 0 30 -13t13 -30t-13 -30t-30 -13t-30 13t-13 30t13 30t30 13zM128 341q17 0 30 -12.5t13 -29.5t-13 -30 -t-30 -13t-30 13t-13 30t13 29.5t30 12.5zM213 256q17 0 30 -13t13 -30t-13 -29.5t-30 -12.5t-29.5 12.5t-12.5 29.5t12.5 30t29.5 13z" /> - <glyph glyph-name="uniE3EB" unicode="grid_off" -d="M341 85h31l-31 31v-31zM299 85v74l-12 12h-74v-86h86zM171 213v74l-12 12h-74v-86h86zM171 85v86h-86v-86h86zM85 372v-31h31zM213 244v-31h31zM27 485l458 -458l-27 -27l-43 43h-330q-17 0 -29.5 12.5t-12.5 29.5v330l-43 43zM341 427v-86h86v86h-86zM171 427h-31 -l-43 42h330q17 0 29.5 -12.5t12.5 -29.5v-330l-42 43v31h-31l-43 42h74v86h-86v-74l-42 43v31h-31l-43 42h74v86h-86v-74l-42 43v31z" /> - <glyph glyph-name="uniE3EC" unicode="grid_on" -d="M427 341v86h-86v-86h86zM427 213v86h-86v-86h86zM427 85v86h-86v-86h86zM299 341v86h-86v-86h86zM299 213v86h-86v-86h86zM299 85v86h-86v-86h86zM171 341v86h-86v-86h86zM171 213v86h-86v-86h86zM171 85v86h-86v-86h86zM427 469q17 0 29.5 -12.5t12.5 -29.5v-342 -q0 -17 -12.5 -29.5t-29.5 -12.5h-342q-17 0 -29.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t29.5 12.5h342z" /> - <glyph glyph-name="uniE3ED" unicode="hdr_off" -d="M53 459q98 -99 408 -406l-24 -23l-162 162h-72v73l-32 32v-105h-32v53h-43v-53h-32v128h32v-43h43v43h8l-117 117zM277 288h-8l-32 32h40q13 0 22.5 -9.5t9.5 -22.5v-41l-32 32v9zM373 288v-21h43v21h-43zM373 192h-8l-24 23v105h75q13 0 22.5 -9.5t9.5 -22.5v-21 -q0 -23 -19 -30l19 -45h-32l-19 43h-24v-43z" /> - <glyph glyph-name="uniE3EE" unicode="hdr_on" -d="M277 224v64h-42v-64h42zM277 320q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-74v128h74zM139 277v43h32v-128h-32v53h-43v-53h-32v128h32v-43h43zM416 267v21h-43v-21h43zM448 267q0 -20 -19 -30l19 -45h-32l-19 43h-24v-43h-32v128h75q13 0 22.5 -9.5 -t9.5 -22.5v-21z" /> - <glyph glyph-name="uniE3F1" unicode="hdr_strong" -d="M107 213q17 0 29.5 13t12.5 30t-12.5 30t-29.5 13t-30 -13t-13 -30t13 -30t30 -13zM107 341q35 0 60 -25t25 -60t-25 -60t-60 -25t-60.5 25t-25.5 60t25.5 60t60.5 25zM363 384q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5 -t90.5 37.5z" /> - <glyph glyph-name="uniE3F2" unicode="hdr_weak" -d="M363 171q35 0 60 25t25 60t-25 60t-60 25t-60.5 -25t-25.5 -60t25.5 -60t60.5 -25zM363 384q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5zM107 341q35 0 60 -25t25 -60t-25 -60t-60 -25t-60.5 25t-25.5 60t25.5 60 -t60.5 25z" /> - <glyph glyph-name="uniE3F3" unicode="healing" -d="M355 78l78 78l-78 77l-77 -78zM299 277q-9 0 -15.5 -6t-6.5 -15t6.5 -15t15.5 -6t15 6t6 15t-6 15t-15 6zM256 192q9 0 15 6t6 15t-6 15.5t-15 6.5t-15 -6.5t-6 -15.5t6 -15t15 -6zM213 235q9 0 15.5 6t6.5 15t-6.5 15t-15.5 6t-15 -6t-6 -15t6 -15t15 -6zM156 278l77 78 -l-77 77l-78 -78zM256 320q-9 0 -15 -6t-6 -15t6 -15.5t15 -6.5t15 6.5t6 15.5t-6 15t-15 6zM378 256l85 -85q6 -6 6 -15t-6 -15l-92 -93q-6 -6 -15 -6q-10 0 -16 6l-84 85l-85 -85q-6 -6 -15 -6t-15 6l-93 93q-6 6 -6 15t6 15l85 85l-85 84q-6 6 -6 15.5t6 15.5l93 92 -q6 6 15 6t15 -6l85 -85l84 85q6 6 15.5 6t15.5 -6l92 -92q6 -6 6 -15.5t-6 -15.5z" /> - <glyph glyph-name="uniE3F4" unicode="image" -d="M181 224l-74 -96h298l-96 128l-74 -96zM448 107q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298q17 0 30 -13t13 -30v-298z" /> - <glyph glyph-name="uniE3F5" unicode="image_aspect_ratio" -d="M427 128v256h-342v-256h342zM427 427q17 0 29.5 -13t12.5 -30v-256q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h342zM256 299v-43h-43v43h43zM171 299v-43h-43v43h43zM341 213v-42h-42v42h42zM341 299v-43h-42v43h42z" /> - <glyph glyph-name="uniE3F6" unicode="iso" -d="M363 149h-107v32h107v-32zM405 107v298l-298 -298h298zM117 352v-32h43v-43h32v43h43v32h-43v43h-32v-43h-43zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298z" /> - <glyph glyph-name="uniE3F7" unicode="landscape" -d="M299 384l192 -256h-470l128 171l96 -128l34 25l-60 81z" /> - <glyph glyph-name="uniE3F8" unicode="leak_add" -d="M299 64q0 62 43.5 105.5t105.5 43.5v-42q-44 0 -75.5 -31.5t-31.5 -75.5h-42zM384 64q0 26 19 45t45 19v-64h-64zM213 64q0 97 69 166t166 69v-43q-80 0 -136 -56t-56 -136h-43zM213 448q0 -62 -43.5 -105.5t-105.5 -43.5v42q44 0 75.5 31.5t31.5 75.5h42zM299 448 -q0 -97 -69 -166t-166 -69v43q80 0 136 56t56 136h43zM128 448q0 -26 -19 -45t-45 -19v64h64z" /> - <glyph glyph-name="uniE3F9" unicode="leak_remove" -d="M328 265q57 34 120 34v-43q-47 0 -89 -22zM425 168l-34 34q27 11 57 11v-42q-12 0 -23 -3zM299 448q0 -63 -34 -120l-31 31q22 42 22 89h43zM64 421l27 27l357 -357l-27 -27l-61 61q-19 -27 -19 -61h-42q0 50 31 91l-31 30q-43 -53 -43 -121h-43q0 86 56 152l-53 53 -q-66 -56 -152 -56v43q69 0 122 43l-31 31q-41 -31 -91 -31v42q34 0 61 19zM213 448q0 -30 -11 -57l-34 34q3 11 3 23h42z" /> - <glyph glyph-name="uniE3FA" unicode="lens" -d="M256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE3FB" unicode="looks_3" -d="M320 288v32q0 18 -12.5 30.5t-29.5 12.5h-86v-43h86v-43h-43v-42h43v-43h-86v-43h86q17 0 29.5 12.5t12.5 30.5v32q0 14 -9 23t-23 9q14 0 23 9t9 23zM406 448q17 0 29.5 -13t12.5 -30v-298q0 -17 -12.5 -30t-29.5 -13h-299q-17 0 -30 13t-13 30v298q0 17 13 30t30 13 -h299z" /> - <glyph glyph-name="uniE3FC" unicode="looks" -d="M256 384q97 0 166 -69t69 -166h-43q0 79 -56 135.5t-136 56.5t-136 -56.5t-56 -135.5h-43q0 97 69 166t166 69zM256 299q61 0 105 -44t44 -106h-42q0 44 -31.5 75.5t-75.5 31.5t-75.5 -31.5t-31.5 -75.5h-42q0 62 44 106t105 44z" /> - <glyph glyph-name="uniE3FD" unicode="looks_4" -d="M320 149v214h-43v-86h-42v86h-43v-128h85v-86h43zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298z" /> - <glyph glyph-name="uniE3FE" unicode="looks_5" -d="M320 320v43h-128v-128h85v-43h-85v-43h85q17 0 30 12.5t13 30.5v43q0 18 -12.5 30t-30.5 12h-42v43h85zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298z" /> - <glyph glyph-name="uniE3FF" unicode="looks_6" -d="M320 320v43h-85q-17 0 -30 -12.5t-13 -30.5v-128q0 -18 13 -30.5t30 -12.5h42q17 0 30 12.5t13 30.5v43q0 18 -12.5 30t-30.5 12h-42v43h85zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298zM235 192v43h42 -v-43h-42z" /> - <glyph glyph-name="uniE400" unicode="looks_one" -d="M299 149v214h-86v-43h43v-171h43zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298z" /> - <glyph glyph-name="uniE401" unicode="looks_two" -d="M320 277v43q0 18 -13 30.5t-30 12.5h-85v-43h85v-43h-42q-18 0 -30.5 -12t-12.5 -30v-86h128v43h-85v43h42q18 0 30.5 12t12.5 30zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298z" /> - <glyph glyph-name="uniE402" unicode="loupe" -d="M256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5v-171q0 -17 -12.5 -29.5t-29.5 -12.5h-171q-88 0 -150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM277 363v-86 -h86v-42h-86v-86h-42v86h-86v42h86v86h42z" /> - <glyph glyph-name="uniE403" unicode="monochrome_photos" -d="M427 107v256h-171v-22q45 0 76 -30.5t31 -75.5t-31 -76t-76 -31v38q-28 0 -48 20t-20 49t20 48.5t48 19.5v-137q28 0 48 20t20 49t-20 48.5t-48 19.5v38q-45 0 -76 -30.5t-31 -75.5t31 -76t76 -31v-21h171zM427 405q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30 -t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 29.5t29.5 12.5h69l38 43h128l38 -43h69z" /> - <glyph glyph-name="uniE404" unicode="movie_creation" -d="M384 427h85v-299q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h22l42 -86h64l-42 86h42l43 -86h64l-43 86h43l43 -86h64z" /> - <glyph glyph-name="uniE405" unicode="music_note" -d="M256 448h128v-85h-85v-214q0 -35 -25.5 -60t-60.5 -25t-60 25t-25 60t25 60.5t60 25.5q21 0 43 -12v225z" /> - <glyph glyph-name="uniE406" unicode="nature" -d="M277 168v-83h128v-42h-298v42h128v84q-54 9 -89.5 50.5t-35.5 96.5q0 62 44 106t106 44t105.5 -44t43.5 -106q0 -57 -38 -99t-94 -49z" /> - <glyph glyph-name="uniE407" unicode="nature_people" -d="M96 277q-14 0 -23 9.5t-9 22.5t9 22.5t23 9.5t23 -9.5t9 -22.5t-9 -22.5t-23 -9.5zM473 316q0 -57 -38 -99t-94 -49v-83h64v-42h-341v106h-21v86q0 9 6 15t15 6h64q9 0 15 -6t6 -15v-86h-21v-64h171v84q-54 9 -89.5 50.5t-35.5 96.5q0 62 44 106t106 44t105.5 -44 -t43.5 -106z" /> - <glyph glyph-name="uniE408" unicode="navigate_before" -d="M329 354l-98 -98l98 -98l-30 -30l-128 128l128 128z" /> - <glyph glyph-name="uniE409" unicode="navigate_next" -d="M213 384l128 -128l-128 -128l-30 30l98 98l-98 98z" /> - <glyph glyph-name="uniE40A" unicode="palette" -d="M373 256q13 0 22.5 9t9.5 23t-9.5 23t-22.5 9t-22.5 -9t-9.5 -23t9.5 -23t22.5 -9zM309 341q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5t9.5 -22.5t22.5 -9.5zM203 341q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5 -t9.5 -22.5t22.5 -9.5zM139 256q13 0 22.5 9t9.5 23t-9.5 23t-22.5 9t-22.5 -9t-9.5 -23t9.5 -23t22.5 -9zM256 448q79 0 135.5 -50t56.5 -121q0 -44 -31.5 -75t-75.5 -31h-37q-14 0 -23 -9.5t-9 -22.5q0 -11 8 -21t8 -22q0 -14 -9 -23t-23 -9q-80 0 -136 56t-56 136t56 136 -t136 56z" /> - <glyph glyph-name="uniE40B" unicode="panorama" -d="M181 245l-74 -96h298l-96 128l-74 -96zM491 128q0 -17 -13 -30t-30 -13h-384q-17 0 -30 13t-13 30v256q0 17 13 30t30 13h384q17 0 30 -13t13 -30v-256z" /> - <glyph glyph-name="uniE40C" unicode="panorama_fish_eye" -d="M256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE40D" unicode="panorama_horizontal" -d="M457 427q12 0 12 -14v-314q0 -14 -12 -14q-2 0 -6 2q-96 35 -195 35t-195 -35q-4 -2 -6 -2q-12 0 -12 14v314q0 14 12 14q2 0 6 -2q96 -35 195 -35t195 35q4 2 6 2zM427 372q-78 -24 -171 -24q-88 0 -171 24v-232q82 24 171 24q88 0 171 -24v232z" /> - <glyph glyph-name="uniE40E" unicode="panorama_vertical" -d="M140 85h232q-24 83 -24 171t24 171h-232q24 -82 24 -171q0 -88 -24 -171zM425 61q2 -4 2 -6q0 -12 -14 -12h-314q-14 0 -14 12q0 2 2 6q35 96 35 195t-35 195q-2 4 -2 6q0 12 14 12h314q14 0 14 -12q0 -2 -2 -6q-35 -96 -35 -195t35 -195z" /> - <glyph glyph-name="uniE40F" unicode="panorama_wide_angle" -d="M256 427q77 0 170 -16l19 -3l6 -19q18 -66 18 -133t-18 -133l-6 -19l-19 -3q-93 -16 -170 -16t-170 16l-19 3l-6 19q-18 66 -18 133t18 133l6 19l19 3q93 16 170 16zM256 384q-70 0 -156 -14q-15 -57 -15 -114t15 -114q86 -14 156 -14t156 14q15 57 15 114t-15 114 -q-86 14 -156 14z" /> - <glyph glyph-name="uniE410" unicode="photo" -d="M181 224l-74 -96h298l-96 128l-74 -96zM448 107q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298q17 0 30 -13t13 -30v-298z" /> - <glyph glyph-name="uniE411" unicode="photo_album" -d="M128 107h256l-82 109l-64 -82l-46 55zM128 427v-171l53 32l54 -32v171h-107zM384 469q17 0 30 -12.5t13 -29.5v-342q0 -17 -13 -29.5t-30 -12.5h-256q-17 0 -30 12.5t-13 29.5v342q0 17 13 29.5t30 12.5h256z" /> - <glyph glyph-name="uniE412" unicode="photo_camera" -d="M256 149q44 0 75.5 31.5t31.5 75.5t-31.5 75.5t-75.5 31.5t-75.5 -31.5t-31.5 -75.5t31.5 -75.5t75.5 -31.5zM192 469h128l39 -42h68q17 0 29.5 -13t12.5 -30v-256q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h68zM188 256 -q0 28 20 48t48 20t48 -20t20 -48t-20 -48t-48 -20t-48 20t-20 48z" /> - <glyph glyph-name="uniE413" unicode="photo_library" -d="M43 384h42v-299h299v-42h-299q-17 0 -29.5 12.5t-12.5 29.5v299zM235 256l-64 -85h256l-86 106l-63 -79zM469 171q0 -17 -12.5 -30t-29.5 -13h-256q-17 0 -30 13t-13 30v256q0 17 13 29.5t30 12.5h256q17 0 29.5 -12.5t12.5 -29.5v-256z" /> - <glyph glyph-name="uniE415" unicode="picture_as_pdf" -d="M299 267v64h21v-64h-21zM85 384v-299h299v-42h-299q-17 0 -29.5 12.5t-12.5 29.5v299h42zM192 309v22h21v-22h-21zM437 331v32h-64v-128h32v42h32v32h-32v22h32zM352 267v64q0 13 -9 22.5t-23 9.5h-53v-128h53q14 0 23 9.5t9 22.5zM245 309v22q0 13 -9.5 22.5t-22.5 9.5 -h-53v-128h32v42h21q13 0 22.5 9.5t9.5 22.5zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-256q-17 0 -30 13t-13 30v256q0 17 13 29.5t30 12.5h256z" /> - <glyph glyph-name="uniE416" unicode="portrait" -d="M405 107v298h-298v-298h298zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298zM352 165v-16h-192v16q0 22 33 35t63 13t63 -13t33 -35zM256 251q-20 0 -34 14.5t-14 33.5t14 33.5t34 14.5t34 -14.5t14 -33.5 -t-14 -33.5t-34 -14.5z" /> - <glyph glyph-name="uniE417" unicode="remove_red_eye" -d="M256 320q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM256 149q44 0 75.5 31.5t31.5 75.5t-31.5 75.5t-75.5 31.5t-75.5 -31.5t-31.5 -75.5t31.5 -75.5t75.5 -31.5zM256 416q79 0 143 -44t92 -116q-28 -72 -92 -116t-143 -44t-143 44t-92 116 -q28 72 92 116t143 44z" /> - <glyph glyph-name="uniE418" unicode="rotate_90_degrees_ccw" -d="M413 370q56 -56 56 -135.5t-56 -135.5q-55 -56 -136 -56q-49 0 -92 24l32 31q27 -13 60 -13q62 0 106 44q43 43 43 105t-43 106q-44 44 -106 44v-69l-90 90l90 91v-69q81 0 136 -57zM79 237l78 -78l78 78l-78 78zM157 375l138 -138l-138 -138l-139 138z" /> - <glyph glyph-name="uniE419" unicode="rotate_left" -d="M277 425q63 -8 106.5 -56t43.5 -113t-43.5 -113t-106.5 -56v43q46 8 76.5 43.5t30.5 82.5t-30.5 82.5t-76.5 43.5v-83l-97 95l97 97v-66zM151 121l31 31q23 -17 53 -22v-43q-48 6 -84 34zM130 235q5 -29 21 -53l-30 -30q-28 37 -34 83h43zM152 330q-18 -26 -22 -53h-43 -q6 45 35 83z" /> - <glyph glyph-name="uniE41A" unicode="rotate_right" -d="M360 182q17 23 22 53h43q-6 -46 -34 -83zM277 130q30 5 53 22l31 -31q-36 -28 -84 -34v43zM425 277h-43q-5 30 -22 53l31 30q28 -37 34 -83zM332 394l-97 -95v83q-46 -8 -76.5 -43.5t-30.5 -82.5t30.5 -82.5t76.5 -43.5v-43q-63 8 -106.5 56t-43.5 113t43.5 113t106.5 56 -v66z" /> - <glyph glyph-name="uniE41B" unicode="slideshow" -d="M405 107v298h-298v-298h298zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298zM213 341l107 -85l-107 -85v170z" /> - <glyph glyph-name="uniE41C" unicode="straighten" -d="M448 171v170h-43v-85h-42v85h-43v-85h-43v85h-42v-85h-43v85h-43v-85h-42v85h-43v-170h384zM448 384q17 0 30 -13t13 -30v-170q0 -17 -13 -30t-30 -13h-384q-17 0 -30 13t-13 30v170q0 17 13 30t30 13h384z" /> - <glyph glyph-name="uniE41D" unicode="style" -d="M125 91v135l74 -178h-31q-17 0 -30 13t-13 30zM168 325q9 0 15 6.5t6 15.5t-6 15t-15 6t-15 -6t-6 -15t6 -15.5t15 -6.5zM470 172q7 -16 0 -32.5t-23 -23.5l-157 -65q-8 -3 -17 -3q-28 0 -39 26l-106 256q-3 9 -3 17q0 27 26 38l158 65q9 3 17 3q27 0 38 -26zM54 93 -q-16 7 -23 23t0 32l52 125v-192z" /> - <glyph glyph-name="uniE41E" unicode="switch_camera" -d="M320 181l75 75l-75 75v-54h-128v54l-75 -75l75 -75v54h128v-54zM427 427q17 0 29.5 -13t12.5 -30v-256q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h68l39 42h128l39 -42h68z" /> - <glyph glyph-name="uniE41F" unicode="switch_video" -d="M277 181l75 75l-75 75v-54h-128v54l-74 -75l74 -75v54h128v-54zM384 309l85 86v-278l-85 86v-75q0 -9 -6 -15t-15 -6h-299q-9 0 -15 6t-6 15v256q0 9 6 15t15 6h299q9 0 15 -6t6 -15v-75z" /> - <glyph glyph-name="uniE420" unicode="tag_faces" -d="M256 139q-37 0 -66.5 20.5t-42.5 53.5h218q-13 -33 -42.5 -53.5t-66.5 -20.5zM181 277q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5zM331 277q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5t-9.5 -22.5 -t-22.5 -9.5zM256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE421" unicode="texture" -d="M198 64l250 250v-61l-189 -189h-61zM448 107q0 -17 -13 -30t-30 -13h-42l85 85v-42zM107 448h42l-85 -85v42q0 17 13 30t30 13zM253 448h61l-250 -250v61zM416 446q25 -7 31 -30l-351 -350q-23 7 -30 30z" /> - <glyph glyph-name="uniE422" unicode="timelapse" -d="M256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM346 346q38 -38 38 -90t-37 -90 -t-90 -38t-91 38l90 90v128q52 0 90 -38z" /> - <glyph glyph-name="uniE423" unicode="timer_10" -d="M275 230v54q0 36 -10 53q-7 15 -30 15q-10 0 -18 -3q-23 -14 -23 -66v-53q0 -24 2 -33q1 -5 9 -21t30 -16t30 16q6 12 8 21t2 33zM152 277q0 109 83 109q41 0 60 -24q22 -28 22 -85v-41q0 -110 -82 -110q-83 0 -83 110v41zM436 289q-30 0 -30 -23q0 -3 0.5 -5.5t1.5 -4 -l2 -3t3 -2.5l3 -1.5t4.5 -2t4.5 -1.5q9 -4 19 -5q9 -2 28 -8q8 -3 22 -12q8 -5 13 -16q5 -10 5 -21q0 -37 -44 -52q-12 -4 -30 -4q-57 0 -74 39q-5 12 -5 22h41q0 -30 38 -30q33 0 33 23q0 6 -3 10.5t-6 6t-10 4.5t-24.5 7.5t-23.5 6.5q-8 3 -20 11q-19 13 -19 36 -q0 38 42 52q12 4 29 4q33 0 54 -15t21 -44h-42q0 21 -18 25q-12 3 -15 3zM0 347l101 37h6v-256h-43v205l-64 -22v36z" /> - <glyph glyph-name="uniE424" unicode="timer_3" -d="M374 289q-31 0 -31 -23q0 -3 0.5 -5t1 -3.5t2 -3t2.5 -2t3 -2t3 -1.5t4 -1.5t4 -1.5q9 -4 18 -5q11 -2 29 -8q8 -3 22 -12q7 -5 13 -16q5 -10 5 -21q0 -37 -44 -52q-12 -4 -31 -4q-56 0 -73 39q-5 12 -5 22h40q0 -15 11 -22.5t28 -7.5q33 0 33 23q0 6 -3 10.5t-6 6 -t-10 4.5q-5 2 -21 6q-28 6 -48 19q-18 12 -18 36q0 38 42 52q12 4 29 4q33 0 54 -15t21 -44h-42q0 20 -19 25q-12 3 -14 3zM215 259q42 -16 42 -58q0 -37 -24 -55q-23 -20 -60 -20t-60.5 19t-23.5 53h43q0 -20 11 -28q13 -10 30 -10q42 0 42 41t-46 41h-26v33h25q32 0 41 23 -q2 5 2 16q0 38 -38 38q-26 0 -36 -20q-3 -6 -3 -15h-42q0 45 48 64q17 5 33 5q38 0 59 -18t21 -54t-38 -55z" /> - <glyph glyph-name="uniE425" unicode="timer" -d="M256 85q62 0 105.5 44t43.5 106t-43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5t43.5 -106t105.5 -44zM406 354q42 -53 42 -119q0 -79 -56 -135.5t-136 -56.5t-136 56.5t-56 135.5t56 135.5t136 56.5q65 0 120 -43l30 31q16 -13 30 -30zM235 213v128h42v-128h-42z -M320 491v-43h-128v43h128z" /> - <glyph glyph-name="uniE426" unicode="timer_off" -d="M256 85q39 0 75 21l-204 204q-20 -34 -20 -75q0 -62 43.5 -106t105.5 -44zM64 427l379 -379l-27 -27l-54 54q-50 -32 -106 -32q-80 0 -136 56.5t-56 135.5q0 58 32 106l-59 59zM235 311v30h42v-73zM320 491v-43h-128v43h128zM406 415l30 -30l-30 -31q42 -53 42 -119 -q0 -58 -32 -106l-31 31q20 34 20 75q0 62 -43.5 105.5t-105.5 43.5q-40 0 -74 -20l-32 31q48 32 106 32q67 0 120 -42z" /> - <glyph glyph-name="uniE427" unicode="tonality" -d="M421 213q2 6 4 22h-148v-22h144zM389 149q12 17 15 22h-127v-22h112zM277 87q32 4 62 20h-62v-20zM277 299v-22h148q-2 16 -4 22h-144zM277 363v-22h127q-3 5 -15 22h-112zM277 425v-20h62q-30 16 -62 20zM235 87v338q-63 -8 -106.5 -56t-43.5 -113t43.5 -113t106.5 -56z -M256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE428" unicode="transform" -d="M213 341v43h128q17 0 30 -13t13 -30v-128h-43v128h-128zM469 128h-85v-43h43l-64 -64l-64 64h42v43h-170q-17 0 -30 13t-13 30v170h-85v43h85v43h-43l64 64l64 -64h-42v-256h298v-43z" /> - <glyph glyph-name="uniE429" unicode="tune" -d="M320 320v128h43v-43h85v-42h-85v-43h-43zM448 235h-213v42h213v-42zM149 320h43v-128h-43v43h-85v42h85v43zM277 64h-42v128h42v-43h171v-42h-171v-43zM64 405h213v-42h-213v42zM64 149h128v-42h-128v42z" /> - <glyph glyph-name="uniE42A" unicode="view_comfortable" -d="M384 405h85v-85h-85v85zM384 107v85h85v-85h-85zM277 107v85h86v-85h-86zM171 107v85h85v-85h-85zM64 107v85h85v-85h-85zM384 213v86h85v-86h-85zM277 405h86v-85h-86v85zM171 320v85h85v-85h-85zM277 213v86h86v-86h-86zM171 213v86h85v-86h-85zM64 213v86h85v-86h-85z -M64 320v85h85v-85h-85z" /> - <glyph glyph-name="uniE42B" unicode="view_compact" -d="M64 405h405v-128h-405v128zM213 107v149h256v-149h-256zM64 107v149h128v-149h-128z" /> - <glyph glyph-name="uniE42C" unicode="wb_auto" -d="M220 171h40l-68 192h-43l-68 -192h41l15 42h68zM469 363h39l-44 -192h-37l-32 130l-32 -130h-38l-2 9q-21 -43 -62 -69t-90 -26q-71 0 -121 50.5t-50 120.5t50 120.5t121 50.5q82 0 133 -64h16l26 -135l32 135h34l32 -135zM146 242l25 78l24 -78h-49z" /> - <glyph glyph-name="uniE42D" unicode="wb_cloudy" -d="M413 298q41 -3 70 -33.5t29 -72.5q0 -44 -31.5 -75.5t-75.5 -31.5h-277q-53 0 -90.5 37.5t-37.5 90.5q0 49 33 85.5t81 41.5q21 39 59 63t83 24q58 0 102 -36.5t55 -92.5z" /> - <glyph glyph-name="uniE42E" unicode="wb_incandescent" -d="M368 125l30 29l38 -38l-30 -30zM427 288h64v-43h-64v43zM320 377q29 -17 46.5 -46t17.5 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5q0 35 17.5 64t46.5 46v103h128v-103zM85 288v-43h-64v43h64zM235 33v63h42v-63h-42zM76 116l38 39l30 -30l-38 -39z" /> - <glyph glyph-name="uniE430" unicode="wb_sunny" -d="M76 116l38 39l30 -30l-38 -39zM235 33v63h42v-63h-42zM256 395q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5zM427 288h64v-43h-64v43zM368 125l30 29l38 -38l-30 -30zM436 417l-38 -38l-30 30l38 38zM277 500v-63 -h-42v63h42zM85 288v-43h-64v43h64zM144 409l-30 -30l-38 38l30 30z" /> - <glyph glyph-name="uniE431" unicode="collections_bookmark" -d="M427 256v171h-107v-171l53 32zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-256q-17 0 -30 13t-13 30v256q0 17 13 29.5t30 12.5h256zM85 384v-299h299v-42h-299q-17 0 -29.5 12.5t-12.5 29.5v299h42z" /> - <glyph glyph-name="uniE432" unicode="photo_size_select_actual" -d="M107 149h298l-96 128l-74 -96l-54 64zM448 448q16 0 29.5 -13.5t13.5 -29.5v-298q0 -16 -13.5 -29.5t-29.5 -13.5h-384q-17 0 -30 13t-13 30v298q0 16 13.5 29.5t29.5 13.5h384z" /> - <glyph glyph-name="uniE433" unicode="photo_size_select_large" -d="M64 107h213l-68 91l-53 -69l-39 46zM21 277h299v-213h-256q-17 0 -30 13t-13 30v170zM107 448h42v-43h-42v43zM192 448h43v-43h-43v43zM64 448v-43h-43q0 16 13.5 29.5t29.5 13.5zM363 107h42v-43h-42v43zM363 448h42v-43h-42v43zM21 363h43v-43h-43v43zM448 448 -q16 0 29.5 -13.5t13.5 -29.5h-43v43zM448 363h43v-43h-43v43zM277 448h43v-43h-43v43zM491 107q0 -16 -13.5 -29.5t-29.5 -13.5v43h43zM448 277h43v-42h-43v42zM448 192h43v-43h-43v43z" /> - <glyph glyph-name="uniE434" unicode="photo_size_select_small" -d="M149 448v-43h-42v43h42zM235 448v-43h-43v43h43zM64 277v-42h-43v42h43zM64 448v-43h-43q0 16 13.5 29.5t29.5 13.5zM405 107v-43h-42v43h42zM405 448v-43h-42v43h42zM320 107v-43h-43v43h43zM64 363v-43h-43v43h43zM64 64q-17 0 -30 13t-13 30v85h214v-128h-171z -M448 448q16 0 29.5 -13.5t13.5 -29.5h-43v43zM491 363v-43h-43v43h43zM320 448v-43h-43v43h43zM491 107q0 -16 -13.5 -29.5t-29.5 -13.5v43h43zM491 277v-42h-43v42h43zM491 192v-43h-43v43h43z" /> - <glyph glyph-name="uniE435" unicode="vignette" -d="M256 128q71 0 121 37.5t50 90.5t-50 90.5t-121 37.5t-121 -37.5t-50 -90.5t50 -90.5t121 -37.5zM448 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-384q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h384z" /> - <glyph glyph-name="uniE436" unicode="wb_iridescent" -d="M106 86l-30 31l38 38l30 -30zM76 417l30 30l38 -38l-30 -30zM436 116l-30 -30l-38 39l30 30zM277 33h-42v63h42v-63zM406 447l30 -30l-38 -38l-30 30zM235 500h42v-63h-42v63zM107 203v128h298v-128h-298z" /> - <glyph glyph-name="uniE437" unicode="crop_rotate" -d="M171 171h256v-43h-43v-43h-43v43h-170q-18 0 -30.5 13t-12.5 30v170h-43v43h43v43h43v-256zM341 213v128h-128v43h128q17 0 30 -12.5t13 -30.5v-128h-43zM257 512q100 0 173.5 -68t81.5 -167h-32q-6 60 -40 108t-87 73l-29 -28l-81 81q3 0 7 0.5t7 0.5zM159 54l29 28 -l81 -81q-3 0 -7 -0.5t-7 -0.5q-100 0 -173.5 68t-81.5 167h32q6 -60 40 -108t87 -73z" /> - <glyph glyph-name="uniE438" unicode="linked_camera" -d="M341 384q18 0 30.5 -12.5t12.5 -30.5h28q0 29 -21 50t-50 21v-28v0zM256 107q44 0 75.5 31t31.5 75t-31.5 75.5t-75.5 31.5t-75.5 -31.5t-31.5 -75.5t31.5 -75t75.5 -31zM363 320h106v-235q0 -17 -12.5 -29.5t-29.5 -12.5h-342q-17 0 -29.5 12.5t-12.5 29.5v256 -q0 17 12.5 30t29.5 13h68l39 43h128v-64q18 0 30.5 -12.5t12.5 -30.5zM341 441v28q53 0 90.5 -37.5t37.5 -90.5h-28q0 41 -29.5 70.5t-70.5 29.5zM188 213q0 29 20 49t48 20t48 -20t20 -49t-20 -48.5t-48 -19.5t-48 19.5t-20 48.5z" /> - <glyph glyph-name="uniE439" unicode="add_a_photo" -d="M209 213q0 29 20 49t48 20q29 0 49 -20t20 -49q0 -28 -20 -48t-49 -20t-48.5 19.5t-19.5 48.5zM277 107q44 0 75.5 31t31.5 75t-31.5 75.5t-75.5 31.5t-75 -31.5t-31 -75.5t31 -75t75 -31zM128 299v64h64v64h149l39 -43h68q17 0 30 -13t13 -30v-256q0 -17 -13 -29.5 -t-30 -12.5h-341q-17 0 -30 12.5t-13 29.5v214h64zM64 427v64h43v-64h64v-43h-64v-64h-43v64h-64v43h64z" /> - <glyph glyph-name="uniE43A" unicode="movie_filter" -d="M361 257l44 20l-44 20l-20 44l-20 -44l-44 -20l44 -20l20 -44zM240 187l59 26l-59 27l-27 59l-26 -59l-59 -27l59 -26l26 -59zM384 427h85v-299q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h22l42 -64h64l-42 64h42l43 -64h64 -l-43 64h43l43 -64h64z" /> - <glyph glyph-name="uniE43B" unicode="photo_filter" -d="M283 283l58 -27l-58 -27l-27 -58l-27 58l-58 27l58 27l27 58zM363 299l-20 44l-44 20l44 20l20 44l20 -44l44 -20l-44 -20zM406 299h42v-192q0 -17 -12.5 -30t-29.5 -13h-299q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h192v-43h-192v-298h299v192z" /> - <glyph glyph-name="uniE43C" unicode="burst_mode" -d="M235 149h213l-68 90l-54 -68l-38 46zM469 405q9 0 15.5 -6t6.5 -15v-256q0 -9 -6.5 -15t-15.5 -6h-256q-9 0 -15 6t-6 15v256q0 9 6 15t15 6h256zM107 405h42v-298h-42v298zM21 405h43v-298h-43v298z" /> - <glyph glyph-name="uniE52D" unicode="beenhere" -d="M213 171l192 192l-30 30l-162 -162l-76 76l-30 -30zM405 491q17 0 30 -13t13 -30v-276q0 -21 -19 -35l-173 -116l-173 116q-19 14 -19 35v276q0 17 13 30t30 13h298z" /> - <glyph glyph-name="uniE52E" unicode="directions" -d="M299 203l74 74l-74 75v-53h-107q-9 0 -15 -6.5t-6 -15.5v-85h42v64h86v-53zM463 271q14 -16 0 -30l-192 -192q-6 -6 -15 -6t-15 6l-192 192q-6 6 -6 15t6 15l192 192q6 6 15 6t15 -6z" /> - <glyph glyph-name="uniE52F" unicode="directions_bike" -d="M405 75q31 0 53 21.5t22 52.5t-22 53t-53 22t-52.5 -22t-21.5 -53t21.5 -52.5t52.5 -21.5zM405 256q45 0 76 -31t31 -76t-31 -75.5t-76 -30.5t-75.5 30.5t-30.5 75.5t30.5 76t75.5 31zM230 288l47 -49v-132h-42v106l-69 60q-12 8 -12 30q0 18 12 30l60 60q8 12 30 12 -q19 0 34 -12l41 -41q32 -32 76 -32v-43q-63 0 -108 45l-17 17zM107 75q31 0 52.5 21.5t21.5 52.5t-21.5 53t-52.5 22t-53 -22t-22 -53t22 -52.5t53 -21.5zM107 256q45 0 75.5 -31t30.5 -76t-30.5 -75.5t-75.5 -30.5t-76 30.5t-31 75.5t31 76t76 31zM331 395q-17 0 -30 12.5 -t-13 29.5t13 30t30 13t29.5 -13t12.5 -30t-12.5 -29.5t-29.5 -12.5z" /> - <glyph glyph-name="uniE530" unicode="directions_bus" -d="M384 277v107h-256v-107h256zM352 149q14 0 23 9.5t9 22.5t-9 22.5t-23 9.5t-23 -9.5t-9 -22.5t9 -22.5t23 -9.5zM160 149q14 0 23 9.5t9 22.5t-9 22.5t-23 9.5t-23 -9.5t-9 -22.5t9 -22.5t23 -9.5zM85 171v213q0 51 44 68t127 17t127 -17t44 -68v-213q0 -28 -22 -48v-38 -q0 -9 -6 -15t-15 -6h-21q-9 0 -15.5 6t-6.5 15v22h-170v-22q0 -9 -6.5 -15t-15.5 -6h-21q-9 0 -15 6t-6 15v38q-22 20 -22 48z" /> - <glyph glyph-name="uniE531" unicode="directions_car" -d="M107 277h298l-32 96h-234zM373 171q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5t9.5 -22.5t22.5 -9.5zM139 171q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5t9.5 -22.5t22.5 -9.5zM404 384l44 -128v-171q0 -9 -6 -15 -t-15 -6h-22q-9 0 -15 6t-6 15v22h-256v-22q0 -9 -6 -15t-15 -6h-22q-9 0 -15 6t-6 15v171l44 128q6 21 31 21h234q25 0 31 -21z" /> - <glyph glyph-name="uniE532" unicode="directions_ferry" -d="M128 384v-85l128 42l128 -42v85h-256zM84 107l-40 142q-7 20 14 27l27 9v99q0 17 13 30t30 13h64v64h128v-64h64q17 0 30 -13t13 -30v-99l27 -9q21 -7 14 -27l-40 -142h-1q-49 0 -86 42q-37 -42 -85 -42t-85 42q-37 -42 -86 -42h-1zM427 64h42v-43h-42q-45 0 -86 21 -q-85 -44 -170 0q-41 -21 -86 -21h-42v43h42q46 0 86 28q39 -27 85 -27t85 27q40 -28 86 -28z" /> - <glyph glyph-name="uniE533" unicode="directions_subway" -d="M384 277v107h-107v-107h107zM352 149q14 0 23 9.5t9 22.5t-9 22.5t-23 9.5t-23 -9.5t-9 -22.5t9 -22.5t23 -9.5zM235 277v107h-107v-107h107zM160 149q14 0 23 9.5t9 22.5t-9 22.5t-23 9.5t-23 -9.5t-9 -22.5t9 -22.5t23 -9.5zM256 469q83 0 127 -17t44 -68v-203 -q0 -31 -22 -52.5t-53 -21.5l32 -32v-11h-256v11l32 32q-31 0 -53 21.5t-22 52.5v203q0 51 44 68t127 17z" /> - <glyph glyph-name="uniE534" unicode="directions_railway" -d="M384 299v106h-256v-106h256zM256 149q17 0 30 13t13 30t-13 30t-30 13t-30 -13t-13 -30t13 -30t30 -13zM85 181v224q0 51 44 68.5t127 17.5t127 -17.5t44 -68.5v-224q0 -31 -22 -52.5t-53 -21.5l32 -32v-11h-256v11l32 32q-31 0 -53 21.5t-22 52.5z" /> - <glyph glyph-name="uniE535" unicode="directions_transit" -d="M384 277v107h-107v-107h107zM352 149q14 0 23 9.5t9 22.5t-9 22.5t-23 9.5t-23 -9.5t-9 -22.5t9 -22.5t23 -9.5zM235 277v107h-107v-107h107zM160 149q14 0 23 9.5t9 22.5t-9 22.5t-23 9.5t-23 -9.5t-9 -22.5t9 -22.5t23 -9.5zM256 469q83 0 127 -17t44 -68v-203 -q0 -31 -22 -52.5t-53 -21.5l32 -32v-11h-256v11l32 32q-31 0 -53 21.5t-22 52.5v203q0 51 44 68t127 17z" /> - <glyph glyph-name="uniE536" unicode="directions_walk" -d="M209 322l-60 -301h45l39 171l44 -43v-128h43v160l-45 43l13 64q46 -53 117 -53v42q-62 0 -91 52l-22 34q-15 21 -36 21q-3 0 -8.5 -1t-8.5 -1l-111 -47v-100h43v72l38 15v0zM288 395q-17 0 -30 12.5t-13 29.5t13 30t30 13t30 -13t13 -30t-13 -29.5t-30 -12.5z" /> - <glyph glyph-name="uniE539" unicode="flight" -d="M217 320zM448 171l-171 53v-117l43 -32v-32l-75 21l-74 -21v32l42 32v117l-170 -53v42l170 107v117q0 13 9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5v-117l171 -107v-42z" /> - <glyph glyph-name="uniE53A" unicode="hotel" -d="M405 363q35 0 60.5 -25.5t25.5 -60.5v-192h-43v64h-384v-64h-43v320h43v-192h171v150h170zM149 235q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19z" /> - <glyph glyph-name="uniE53B" unicode="layers" -d="M256 171q-9 7 -81.5 63.5t-110.5 85.5l192 149l192 -149q-38 -29 -110 -85t-82 -64zM256 116l157 123l35 -27l-192 -149l-192 149l35 27z" /> - <glyph glyph-name="uniE53C" unicode="layers_clear" -d="M70 491l399 -400l-27 -27l-80 81l-106 -82l-192 149l35 27l157 -123l75 59l-30 30l-45 -34q-9 7 -81.5 63.5t-110.5 85.5l69 54l-90 90zM448 320q-27 -21 -86 -67l-168 168l62 48zM423 192l-31 31l25 19l31 -30z" /> - <glyph glyph-name="uniE53D" unicode="local_airport" -d="M448 171l-171 53v-117l43 -32v-32l-75 21l-74 -21v32l42 32v117l-170 -53v42l170 107v117q0 13 9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5v-117l171 -107v-42z" /> - <glyph glyph-name="uniE53E" unicode="local_atm" -d="M427 128v256h-342v-256h342zM427 427q18 0 30 -12.5t12 -30.5v-256q0 -18 -12 -30.5t-30 -12.5h-342q-18 0 -30 12.5t-12 30.5v256q0 18 12 30.5t30 12.5h342zM235 149v22h-43v42h85v22h-64q-9 0 -15 6t-6 15v64q0 9 6 15t15 6h22v22h42v-22h43v-42h-85v-22h64q9 0 15 -6 -t6 -15v-64q0 -9 -6 -15t-15 -6h-22v-22h-42z" /> - <glyph glyph-name="uniE53F" unicode="local_attraction" -d="M332 154l-23 87l70 58l-90 5l-33 84l-33 -84l-91 -5l71 -58l-23 -87l76 49zM427 256q0 -17 12.5 -30t29.5 -13v-85q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v85q18 0 30 12.5t12 30.5q0 17 -12.5 30t-29.5 13v85q0 17 12.5 30t29.5 13h342q17 0 29.5 -13 -t12.5 -30v-85q-17 0 -29.5 -13t-12.5 -30z" /> - <glyph glyph-name="uniE540" unicode="local_bar" -d="M159 363h194l38 42h-270zM448 405l-171 -192v-106h107v-43h-256v43h107v106l-171 192v43h384v-43z" /> - <glyph glyph-name="uniE541" unicode="local_cafe" -d="M43 64v43h384v-43h-384zM427 341v64h-43v-64h43zM427 448q18 0 30 -12.5t12 -30.5v-64q0 -18 -12 -30t-30 -12h-43v-64q0 -35 -25 -60.5t-60 -25.5h-128q-35 0 -60.5 25.5t-25.5 60.5v213h342z" /> - <glyph glyph-name="uniE542" unicode="local_car_wash" -d="M107 235h298l-32 96h-234zM373 128q13 0 22.5 9t9.5 23t-9.5 23t-22.5 9t-22.5 -9t-9.5 -23t9.5 -23t22.5 -9zM139 128q13 0 22.5 9t9.5 23t-9.5 23t-22.5 9t-22.5 -9t-9.5 -23t9.5 -23t22.5 -9zM404 341l44 -128v-170q0 -9 -6 -15.5t-15 -6.5h-22q-9 0 -15 6.5t-6 15.5 -v21h-256v-21q0 -9 -6 -15.5t-15 -6.5h-22q-9 0 -15 6.5t-6 15.5v170l44 128q7 22 31 22h234q24 0 31 -22zM149 405q-13 0 -22.5 9.5t-9.5 22.5q0 9 8 23.5t16 24.5l8 10q32 -37 32 -58q0 -13 -9.5 -22.5t-22.5 -9.5zM256 405q-14 0 -23 9.5t-9 22.5q0 9 8 23.5t16 24.5l8 10 -q32 -37 32 -58q0 -13 -9 -22.5t-23 -9.5zM363 405q-13 0 -22.5 9.5t-9.5 22.5q0 9 8 23.5t16 24.5l8 10q32 -37 32 -58q0 -13 -9.5 -22.5t-22.5 -9.5z" /> - <glyph glyph-name="uniE543" unicode="local_convenience_store" -d="M341 256v107h-21v-43h-21v43h-22v-64h43v-43h21zM235 299v64h-64v-22h42v-21h-42v-64h64v21h-43v22h43zM405 363h64v-278h-170v86h-86v-86h-170v278h64v64h298v-64z" /> - <glyph glyph-name="uniE544" unicode="local_drink" -d="M391 341l9 86h-288l9 -86h270zM256 107q26 0 45 19t19 45q0 19 -16 48t-32 48l-16 19q-64 -72 -64 -115q0 -26 19 -45t45 -19zM64 469h384l-43 -389q-2 -16 -14 -26.5t-28 -10.5h-214q-16 0 -28 10.5t-14 26.5z" /> - <glyph glyph-name="uniE545" unicode="local_florist" -d="M256 395q-22 0 -37.5 -16t-15.5 -38t15.5 -37.5t37.5 -15.5t37.5 15.5t15.5 37.5t-15.5 38t-37.5 16zM119 293q0 33 31 48q-31 15 -31 48q0 22 16 38t38 16q15 0 30 -10v4q0 22 15.5 38t37.5 16t37.5 -16t15.5 -38v-4q15 10 30 10q22 0 38 -16t16 -38q0 -33 -31 -48 -q31 -15 31 -48q0 -22 -16 -37.5t-38 -15.5q-17 0 -30 9v-4q0 -22 -15.5 -37.5t-37.5 -15.5t-37.5 15.5t-15.5 37.5v4q-13 -9 -30 -9q-22 0 -38 15.5t-16 37.5zM256 43q-80 0 -136 56.5t-56 135.5q80 0 136 -56.5t56 -135.5zM256 43q0 79 56 135.5t136 56.5q0 -79 -56 -135.5 -t-136 -56.5z" /> - <glyph glyph-name="uniE546" unicode="local_gas_station" -d="M384 299q9 0 15 6t6 15t-6 15t-15 6t-15 -6t-6 -15t6 -15t15 -6zM256 299v106h-128v-106h128zM422 358q15 -15 15 -38v-203q0 -22 -15.5 -37.5t-37.5 -15.5t-37.5 15.5t-15.5 37.5v107h-32v-160h-214v341q0 17 13 30t30 13h128q17 0 30 -13t13 -30v-149h21q17 0 30 -13 -t13 -30v-96q0 -9 6 -15t15 -6t15 6t6 15v154q-9 -4 -21 -4q-22 0 -37.5 15.5t-15.5 37.5q0 36 34 50l-45 45l23 22z" /> - <glyph glyph-name="uniE547" unicode="local_grocery_store" -d="M363 128q17 0 29.5 -13t12.5 -30t-12.5 -29.5t-29.5 -12.5t-30 12.5t-13 29.5t13 30t30 13zM21 469h70l20 -42h316q9 0 15 -6.5t6 -15.5q0 -5 -3 -10l-76 -138q-12 -22 -37 -22h-159l-19 -35l-1 -3q0 -5 5 -5h247v-43h-256q-17 0 -29.5 13t-12.5 30q0 10 5 20l29 53 -l-77 162h-43v42zM149 128q17 0 30 -13t13 -30t-13 -29.5t-30 -12.5t-29.5 12.5t-12.5 29.5t12.5 30t29.5 13z" /> - <glyph glyph-name="uniE548" unicode="local_hospital" -d="M384 213v86h-85v85h-86v-85h-85v-86h85v-85h86v85h85zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298z" /> - <glyph glyph-name="uniE549" unicode="local_hotel" -d="M405 363q35 0 60.5 -25.5t25.5 -60.5v-192h-43v64h-384v-64h-43v320h43v-192h171v150h170zM149 235q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19z" /> - <glyph glyph-name="uniE54A" unicode="local_laundry_service" -d="M256 85q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5zM149 427q-9 0 -15 -6.5t-6 -15.5t6 -15t15 -6t15.5 6t6.5 15t-6.5 15.5t-15.5 6.5zM213 427q-9 0 -15 -6.5t-6 -15.5t6 -15t15 -6t15.5 6t6.5 15t-6.5 15.5 -t-15.5 6.5zM384 469q18 0 30.5 -12t12.5 -30v-342q0 -18 -12.5 -30t-30.5 -12h-256q-18 0 -30.5 12t-12.5 30v342q0 18 12.5 30t30.5 12h256zM196 153l120 121q25 -25 25 -60.5t-25 -60.5t-60 -25t-60 25z" /> - <glyph glyph-name="uniE54B" unicode="local_library" -d="M256 341q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM256 266q80 75 192 75v-234q-111 0 -192 -76q-81 76 -192 76v234q112 0 192 -75z" /> - <glyph glyph-name="uniE54C" unicode="local_mall" -d="M256 235q44 0 75.5 31t31.5 75h-43q0 -26 -19 -45t-45 -19t-45 19t-19 45h-43q0 -44 31.5 -75t75.5 -31zM256 448q-26 0 -45 -19t-19 -45h128q0 26 -19 45t-45 19zM405 384q17 0 30 -13t13 -30v-256q0 -17 -13 -29.5t-30 -12.5h-298q-17 0 -30 12.5t-13 29.5v256 -q0 17 13 30t30 13h42q0 44 31.5 75.5t75.5 31.5t75.5 -31.5t31.5 -75.5h42z" /> - <glyph glyph-name="uniE54D" unicode="local_movies" -d="M384 320v43h-43v-43h43zM384 235v42h-43v-42h43zM384 149v43h-43v-43h43zM171 320v43h-43v-43h43zM171 235v42h-43v-42h43zM171 149v43h-43v-43h43zM384 448h43v-384h-43v43h-43v-43h-170v43h-43v-43h-43v384h43v-43h43v43h170v-43h43v43z" /> - <glyph glyph-name="uniE54E" unicode="local_offer" -d="M117 363q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5t9.5 -22.5t22.5 -9.5zM457 265q12 -12 12 -30t-12 -30l-150 -150q-12 -12 -30 -12t-30 12l-192 192q-12 12 -12 30v150q0 17 12.5 29.5t29.5 12.5h150q18 0 30 -12z" /> - <glyph glyph-name="uniE54F" unicode="local_parking" -d="M282 277q17 0 29.5 13t12.5 30t-12.5 30t-29.5 13h-69v-86h69zM277 448q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5h-64v-128h-85v384h149z" /> - <glyph glyph-name="uniE550" unicode="local_pharmacy" -d="M341 213v43h-64v64h-42v-64h-64v-43h64v-64h42v64h64zM448 405v-42l-43 -128l43 -128v-43h-384v43l43 128l-43 128v42h271l31 86l50 -19l-24 -67h56z" /> - <glyph glyph-name="uniE551" unicode="local_phone" -d="M141 282q48 -93 141 -141l47 47q10 10 22 5q36 -12 76 -12q9 0 15 -6t6 -15v-75q0 -9 -6 -15t-15 -6q-150 0 -256.5 106.5t-106.5 256.5q0 9 6 15t15 6h75q9 0 15 -6t6 -15q0 -40 12 -76q4 -13 -5 -22z" /> - <glyph glyph-name="uniE552" unicode="local_pizza" -d="M256 192q17 0 30 13t13 30t-13 29.5t-30 12.5t-30 -12.5t-13 -29.5t13 -30t30 -13zM149 363q0 -17 13 -30t30 -13t30 13t13 30t-13 29.5t-30 12.5t-30 -12.5t-13 -29.5zM256 469q115 0 192 -85l-192 -341l-192 341q77 85 192 85z" /> - <glyph glyph-name="uniE553" unicode="local_play" -d="M332 154l-23 87l70 58l-90 5l-33 84l-33 -84l-91 -5l71 -58l-23 -87l76 49zM427 256q0 -17 12.5 -30t29.5 -13v-85q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v85q18 0 30 12.5t12 30.5q0 17 -12.5 30t-29.5 13v85q0 17 12.5 30t29.5 13h342q17 0 29.5 -13 -t12.5 -30v-85q-17 0 -29.5 -13t-12.5 -30z" /> - <glyph glyph-name="uniE554" unicode="local_post_office" -d="M427 341v43l-171 -107l-171 107v-43l171 -106zM427 427q17 0 29.5 -13t12.5 -30v-256q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h342z" /> - <glyph glyph-name="uniE555" unicode="local_print_shop" -d="M384 448v-85h-256v85h256zM405 256q9 0 15.5 6t6.5 15t-6.5 15.5t-15.5 6.5t-15 -6.5t-6 -15.5t6 -15t15 -6zM341 107v106h-170v-106h170zM405 341q26 0 45 -19t19 -45v-128h-85v-85h-256v85h-85v128q0 26 19 45t45 19h298z" /> - <glyph glyph-name="uniE556" unicode="local_restaurant" -d="M317 266l-31 -31l147 -147l-30 -30l-147 147l-147 -147l-30 30l208 208q-12 24 -3.5 56t33.5 57q31 31 69 35.5t61 -18.5t18.5 -61.5t-35.5 -69.5q-25 -25 -57 -33t-56 4zM173 227l-90 90q-25 25 -25 60t25 60l150 -149z" /> - <glyph glyph-name="uniE557" unicode="local_see" -d="M256 149q44 0 75.5 31.5t31.5 75.5t-31.5 75.5t-75.5 31.5t-75.5 -31.5t-31.5 -75.5t31.5 -75.5t75.5 -31.5zM192 469h128l39 -42h68q17 0 29.5 -13t12.5 -30v-256q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h68zM188 256 -q0 28 20 48t48 20t48 -20t20 -48t-20 -48t-48 -20t-48 20t-20 48z" /> - <glyph glyph-name="uniE558" unicode="local_shipping" -d="M384 117q14 0 23 9.5t9 22.5t-9 22.5t-23 9.5t-23 -9.5t-9 -22.5t9 -22.5t23 -9.5zM416 309h-53v-53h95zM128 117q14 0 23 9.5t9 22.5t-9 22.5t-23 9.5t-23 -9.5t-9 -22.5t9 -22.5t23 -9.5zM427 341l64 -85v-107h-43q0 -26 -19 -45t-45 -19t-45 19t-19 45h-128 -q0 -26 -19 -45t-45 -19t-45 19t-19 45h-43v235q0 17 13 30t30 13h299v-86h64z" /> - <glyph glyph-name="uniE559" unicode="local_taxi" -d="M107 277h298l-32 96h-234zM373 171q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5t9.5 -22.5t22.5 -9.5zM139 171q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5t9.5 -22.5t22.5 -9.5zM404 384l44 -128v-171q0 -9 -6 -15 -t-15 -6h-22q-9 0 -15 6t-6 15v22h-256v-22q0 -9 -6 -15t-15 -6h-22q-9 0 -15 6t-6 15v171l44 128q6 21 31 21h53v43h128v-43h53q25 0 31 -21z" /> - <glyph glyph-name="uniE55A" unicode="location_history" -d="M384 171v19q0 29 -44 47.5t-84 18.5t-84 -18.5t-44 -47.5v-19h256zM256 399q-24 0 -41 -17t-17 -41t17 -40.5t41 -16.5t41 16.5t17 40.5t-17 41t-41 17zM405 469q17 0 30 -12.5t13 -29.5v-299q0 -17 -13 -30t-30 -13h-85l-64 -64l-64 64h-85q-18 0 -30.5 13t-12.5 30v299 -q0 17 12.5 29.5t30.5 12.5h298z" /> - <glyph glyph-name="uniE55B" unicode="map" -d="M320 107v253l-128 45v-253zM437 448q11 0 11 -11v-322q0 -8 -8 -10l-120 -41l-128 45l-114 -44l-3 -1q-11 0 -11 11v322q0 8 8 10l120 41l128 -45l114 44z" /> - <glyph glyph-name="uniE55C" unicode="my_location" -d="M256 107q62 0 105.5 43.5t43.5 105.5t-43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5t43.5 -105.5t105.5 -43.5zM447 277h44v-42h-44q-7 -67 -55 -115t-115 -55v-44h-42v44q-67 7 -115 55t-55 115h-44v42h44q7 67 55 115t115 55v44h42v-44q67 -7 115 -55t55 -115z -M256 341q35 0 60 -25t25 -60t-25 -60t-60 -25t-60 25t-25 60t25 60t60 25z" /> - <glyph glyph-name="uniE55D" unicode="navigation" -d="M256 469l160 -390l-15 -15l-145 64l-145 -64l-15 15z" /> - <glyph glyph-name="uniE55E" unicode="pin_drop" -d="M107 85h298v-42h-298v42zM213 341q0 -17 13 -29.5t30 -12.5q18 0 30.5 12.5t12.5 29.5t-13 30t-30 13t-30 -13t-13 -30zM384 341q0 -43 -32 -101.5t-64 -95.5l-32 -37q-14 15 -35.5 41t-57 88t-35.5 105q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5z" /> - <glyph glyph-name="uniE55F" unicode="place" -d="M256 267q22 0 37.5 15.5t15.5 37.5t-15.5 37.5t-37.5 15.5t-37.5 -15.5t-15.5 -37.5t15.5 -37.5t37.5 -15.5zM256 469q62 0 105.5 -43.5t43.5 -105.5q0 -31 -15.5 -71t-37.5 -75t-43.5 -65.5t-36.5 -48.5l-16 -17q-6 7 -16 18.5t-36 46t-45.5 67t-35.5 73.5t-16 72 -q0 62 43.5 105.5t105.5 43.5z" /> - <glyph glyph-name="uniE560" unicode="rate_review" -d="M384 213v43h-117l-43 -43h160zM128 213h53l147 147q8 8 0 15l-38 38q-8 7 -15 0l-147 -147v-53zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-299l-85 -85v384q0 17 12.5 29.5t29.5 12.5h342z" /> - <glyph glyph-name="uniE561" unicode="restaurant_menu" -d="M317 266l-31 -31l147 -147l-30 -30l-147 147l-147 -147l-30 30l208 208q-12 24 -3.5 56t33.5 57q31 31 69 35.5t61 -18.5t18.5 -61.5t-35.5 -69.5q-25 -25 -57 -33t-56 4zM173 227l-90 90q-25 25 -25 60t25 60l150 -149z" /> - <glyph glyph-name="uniE562" unicode="satellite" -d="M107 128h298l-96 128l-74 -96l-54 64zM107 256q62 0 105.5 44t43.5 106h-43q0 -44 -31 -75.5t-75 -31.5v-43zM107 406v-65q26 0 45 19.5t19 45.5h-64zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298z" /> - <glyph glyph-name="uniE563" unicode="store_mall_directory" -d="M256 128v85h-128v-85h128zM448 213h-21v-128h-43v128h-85v-128h-214v128h-21v43l21 107h342l21 -107v-43zM427 427v-43h-342v43h342z" /> - <glyph glyph-name="uniE564" unicode="terrain" -d="M299 384l192 -256h-470l128 171l96 -128l34 25l-60 81z" /> - <glyph glyph-name="uniE565" unicode="traffic" -d="M256 320q18 0 30.5 13t12.5 30q0 18 -12.5 30t-30.5 12t-30.5 -12t-12.5 -30q0 -17 12.5 -30t30.5 -13zM256 213q18 0 30.5 13t12.5 30t-13 30t-30 13q-18 0 -30.5 -13t-12.5 -30t12.5 -30t30.5 -13zM256 107q18 0 30.5 12.5t12.5 29.5t-13 30t-30 13q-18 0 -30.5 -13 -t-12.5 -30t12.5 -29.5t30.5 -12.5zM427 299q0 -30 -18 -52.5t-46 -30.5v-24h64q0 -30 -18 -52t-46 -30v-25q0 -9 -6.5 -15t-15.5 -6h-170q-9 0 -15.5 6t-6.5 15v25q-28 8 -46 30t-18 52h64v24q-28 8 -46 30.5t-18 52.5h64v24q-28 8 -46 30t-18 52h64v22q0 9 6.5 15t15.5 6 -h170q9 0 15.5 -6t6.5 -15v-22h64q0 -30 -18 -52t-46 -30v-24h64z" /> - <glyph glyph-name="uniE566" unicode="directions_run" -d="M211 99l-149 29l8 43l105 -21l34 173l-39 -15v-73h-42v100l111 47q3 0 8.5 1t8.5 1q21 0 36 -21l21 -34q29 -51 92 -51v-43q-71 0 -117 53l-13 -64l45 -42v-160h-43v128l-45 42zM288 395q-17 0 -30 13t-13 30t13 29.5t30 12.5t29.5 -12.5t12.5 -29.5t-12.5 -30t-29.5 -13 -z" /> - <glyph glyph-name="uniE567" unicode="add_location" -d="M341 299v42h-64v64h-42v-64h-64v-42h64v-64h42v64h64zM256 469q62 0 105.5 -43.5t43.5 -105.5q0 -31 -15.5 -71t-37.5 -75t-43.5 -65.5t-36.5 -48.5l-16 -17q-6 7 -16 18.5t-36 46t-45.5 67t-35.5 73.5t-16 72q0 62 43.5 105.5t105.5 43.5z" /> - <glyph glyph-name="uniE568" unicode="edit_location" -d="M318 351q6 5 0 11l-20 20q-6 6 -11 0l-15 -15l31 -31zM223 256l71 71l-31 31l-71 -71v-31h31zM256 469q62 0 105.5 -43.5t43.5 -105.5q0 -31 -15.5 -71t-37.5 -75t-43.5 -65.5t-36.5 -48.5l-16 -17q-6 7 -16 18.5t-36 46t-45.5 67t-35.5 73.5t-16 72q0 62 43.5 105.5 -t105.5 43.5z" /> - <glyph glyph-name="uniE569" unicode="near_me" -d="M448 448l-161 -384h-21l-56 146l-146 56v21z" /> - <glyph glyph-name="uniE56A" unicode="person_pin_circle" -d="M256 213q55 0 85 46q0 19 -29.5 31.5t-55.5 12.5t-55.5 -12.5t-29.5 -31.5q30 -46 85 -46zM256 427q-17 0 -30 -13t-13 -30q0 -18 13 -30.5t30 -12.5t30 12.5t13 30.5q0 17 -13 30t-30 13zM256 469q62 0 105.5 -43.5t43.5 -105.5q0 -31 -15.5 -71t-37.5 -75t-43.5 -65.5 -t-36.5 -48.5l-16 -17q-6 7 -16 18.5t-36 46t-45.5 67t-35.5 73.5t-16 72q0 62 43.5 105.5t105.5 43.5z" /> - <glyph glyph-name="uniE56B" unicode="zoom_out_map" -d="M448 192v-128h-128l49 49l-62 61l31 31l61 -62zM192 64h-128v128l49 -49l61 62l31 -31l-62 -61zM64 320v128h128l-49 -49l62 -61l-31 -31l-61 62zM320 448h128v-128l-49 49l-61 -62l-31 31l62 61z" /> - <glyph glyph-name="uniE56C" unicode="restaurant" -d="M341 384q0 30 32.5 57.5t74.5 27.5v-426h-53v170h-54v171zM235 320v149h42v-149q0 -34 -23 -58.5t-57 -26.5v-192h-53v192q-34 2 -57 26.5t-23 58.5v149h43v-149h42v149h43v-149h43z" /> - <glyph glyph-name="uniE56D" unicode="ev_station" -d="M171 128l85 149h-43v107l-85 -160h43v-96zM384 299q9 0 15 6t6 15t-6 15t-15 6t-15 -6t-6 -15t6 -15t15 -6zM422 358q15 -15 15 -38v-203q0 -22 -15.5 -37.5t-37.5 -15.5t-37.5 15.5t-15.5 37.5v107h-32v-160h-214v341q0 17 13 30t30 13h128q17 0 30 -13t13 -30v-149h21 -q17 0 30 -13t13 -30v-96q0 -9 6 -15t15 -6t15 6t6 15v154q-9 -4 -21 -4q-22 0 -37.5 15.5t-15.5 37.5q0 36 34 50l-45 45l23 22z" /> - <glyph glyph-name="uniE56E" unicode="streetview" -d="M245 384q0 -57 41 -98l-209 -209q-13 13 -13 30v298q0 17 13 30t30 13h154q-16 -30 -16 -64zM277 384q0 44 31.5 75.5t75.5 31.5t75.5 -31.5t31.5 -75.5t-31.5 -75.5t-75.5 -31.5t-75.5 31.5t-31.5 75.5zM268 206q52 39 116 39q33 0 64 -11v-127q0 -17 -13 -30t-30 -13 -h-149v117q0 15 12 25z" /> - <glyph glyph-name="uniE56F" unicode="subway" -d="M384 173v147q0 38 -33 51t-95 13q-59 0 -93.5 -13t-34.5 -51v-147q0 -23 16.5 -39.5t39.5 -16.5l-24 -24v-8h36l32 32h60l32 -32h32v8l-24 24q23 0 39.5 16.5t16.5 39.5zM380 452q43 -16 66 -50t23 -79v-280h-426v280q0 45 23 79t66 50q43 17 124 17t124 -17zM150 320 -h213v-107h-213v107zM160 171q0 9 6 15t15 6t15.5 -6t6.5 -15t-6.5 -15.5t-15.5 -6.5t-15 6.5t-6 15.5zM309 171q0 9 6.5 15t15.5 6t15 -6t6 -15t-6 -15.5t-15 -6.5t-15.5 6.5t-6.5 15.5z" /> - <glyph glyph-name="uniE570" unicode="train" -d="M352 149q14 0 23 9.5t9 22.5t-9 22.5t-23 9.5t-23 -9.5t-9 -22.5t9 -22.5t23 -9.5zM277 299h107v85h-107v-85zM235 299v85h-107v-85h107zM160 149q14 0 23 9.5t9 22.5t-9 22.5t-23 9.5t-23 -9.5t-9 -22.5t9 -22.5t23 -9.5zM256 469q83 0 127 -17t44 -68v-203 -q0 -31 -22 -52.5t-53 -21.5l32 -32v-11h-43l-42 43h-81l-42 -43h-48v11l32 32q-31 0 -53 21.5t-22 52.5v203q0 27 14 45t40.5 26t53 11t63.5 3z" /> - <glyph glyph-name="uniE571" unicode="tram" -d="M363 213v107h-214v-107h214zM256 117q14 0 23 9.5t9 22.5t-9 22.5t-23 9.5t-23 -9.5t-9 -22.5t9 -22.5t23 -9.5zM405 151q0 -28 -14.5 -47t-40.5 -19h2l32 -32v-10h-43l-42 42h-81l-42 -42h-48v10l34 34q-23 5 -39 23t-16 41v180q0 41 34 56.5t93 17.5l17 32h-102v32h214 -v-32h-70l-16 -32q63 -2 95.5 -17t32.5 -57v-180z" /> - <glyph glyph-name="uniE572" unicode="transfer_within_a_station" -d="M123 322l-59 -301h45l37 171l46 -43v-128h43v161l-44 44l13 64q45 -55 116 -55v42q-29 0 -53.5 14.5t-39.5 38.5l-20 34q-11 20 -36 20q-9 0 -16 -3l-112 -46v-100h42v71l38 16v0zM203 395q-17 0 -30 12.5t-13 29.5t13 30t30 13t29.5 -13t12.5 -30t-12.5 -29.5 -t-29.5 -12.5zM416 91v37l53 -53l-53 -54v38h-117v32h117zM352 181h117v-32h-117v-37l-53 53l53 54v-38z" /> - <glyph glyph-name="uniE5C3" unicode="apps" -d="M341 85v86h86v-86h-86zM341 213v86h86v-86h-86zM213 341v86h86v-86h-86zM341 427h86v-86h-86v86zM213 213v86h86v-86h-86zM85 213v86h86v-86h-86zM85 85v86h86v-86h-86zM213 85v86h86v-86h-86zM85 341v86h86v-86h-86z" /> - <glyph glyph-name="uniE5C4" unicode="arrow_back" -d="M427 277v-42h-260l119 -120l-30 -30l-171 171l171 171l30 -30l-119 -120h260z" /> - <glyph glyph-name="uniE5C5" unicode="arrow_drop_down" -d="M149 299h214l-107 -107z" /> - <glyph glyph-name="uniE5C6" unicode="arrow_drop_down_circle" -d="M256 213l85 86h-170zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE5C7" unicode="arrow_drop_up" -d="M149 213l107 107l107 -107h-214z" /> - <glyph glyph-name="uniE5C8" unicode="arrow_forward" -d="M256 427l171 -171l-171 -171l-30 30l119 120h-260v42h260l-119 120z" /> - <glyph glyph-name="uniE5C9" unicode="cancel" -d="M363 179l-77 77l77 77l-30 30l-77 -77l-77 77l-30 -30l77 -77l-77 -77l30 -30l77 77l77 -77zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE5CA" unicode="check" -d="M192 167l226 226l30 -30l-256 -256l-119 119l30 30z" /> - <glyph glyph-name="uniE5CB" unicode="chevron_left" -d="M329 354l-98 -98l98 -98l-30 -30l-128 128l128 128z" /> - <glyph glyph-name="uniE5CC" unicode="chevron_right" -d="M213 384l128 -128l-128 -128l-30 30l98 98l-98 98z" /> - <glyph glyph-name="uniE5CD" unicode="close" -d="M405 375l-119 -119l119 -119l-30 -30l-119 119l-119 -119l-30 30l119 119l-119 119l30 30l119 -119l119 119z" /> - <glyph glyph-name="uniE5CE" unicode="expand_less" -d="M256 341l128 -128l-30 -30l-98 98l-98 -98l-30 30z" /> - <glyph glyph-name="uniE5CF" unicode="expand_more" -d="M354 329l30 -30l-128 -128l-128 128l30 30l98 -98z" /> - <glyph glyph-name="uniE5D0" unicode="fullscreen" -d="M299 405h106v-106h-42v64h-64v42zM363 149v64h42v-106h-106v42h64zM107 299v106h106v-42h-64v-64h-42zM149 213v-64h64v-42h-106v106h42z" /> - <glyph glyph-name="uniE5D1" unicode="fullscreen_exit" -d="M341 341h64v-42h-106v106h42v-64zM299 107v106h106v-42h-64v-64h-42zM171 341v64h42v-106h-106v42h64zM107 171v42h106v-106h-42v64h-64z" /> - <glyph glyph-name="uniE5D2" unicode="menu" -d="M64 384h384v-43h-384v43zM64 235v42h384v-42h-384zM64 128v43h384v-43h-384z" /> - <glyph glyph-name="uniE5D3" unicode="keyboard_control" -d="M256 299q17 0 30 -13t13 -30t-13 -30t-30 -13t-30 13t-13 30t13 30t30 13zM384 299q17 0 30 -13t13 -30t-13 -30t-30 -13t-30 13t-13 30t13 30t30 13zM128 299q17 0 30 -13t13 -30t-13 -30t-30 -13t-30 13t-13 30t13 30t30 13z" /> - <glyph glyph-name="uniE5D4" unicode="more_vert" -d="M256 171q17 0 30 -13t13 -30t-13 -30t-30 -13t-30 13t-13 30t13 30t30 13zM256 299q17 0 30 -13t13 -30t-13 -30t-30 -13t-30 13t-13 30t13 30t30 13zM256 341q-17 0 -30 13t-13 30t13 30t30 13t30 -13t13 -30t-13 -30t-30 -13z" /> - <glyph glyph-name="uniE5D5" unicode="refresh" -d="M377 377l50 50v-150h-150l69 69q-38 38 -90 38q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5q42 0 75 23.5t46 61.5h44q-14 -56 -60 -92t-105 -36q-70 0 -120 50t-50 121t50 121t120 50q71 0 121 -50z" /> - <glyph glyph-name="uniE5D6" unicode="unfold_less" -d="M354 397l-98 -98l-98 98l30 30l68 -68l68 68zM158 115l98 98l98 -98l-30 -30l-68 68l-68 -68z" /> - <glyph glyph-name="uniE5D7" unicode="unfold_more" -d="M256 124l68 68l30 -30l-98 -98l-98 98l30 30zM256 388l-68 -68l-30 30l98 98l98 -98l-30 -30z" /> - <glyph glyph-name="uniE5D8" unicode="arrow_upward" -d="M85 256l171 171l171 -171l-31 -30l-119 119v-260h-42v260l-120 -119z" /> - <glyph glyph-name="uniE5D9" unicode="subdirectory_arrow_left" -d="M235 320l30 -30l-77 -77h196v214h43v-256h-239l77 -77l-30 -30l-128 128z" /> - <glyph glyph-name="uniE5DA" unicode="subdirectory_arrow_right" -d="M405 192l-128 -128l-30 30l77 77h-239v256h43v-214h196l-77 77l30 30z" /> - <glyph glyph-name="uniE5DB" unicode="arrow_downward" -d="M427 256l-171 -171l-171 171l31 30l119 -119v260h42v-260l120 119z" /> - <glyph glyph-name="uniE5DC" unicode="first_page" -d="M128 384h43v-256h-43v256zM393 158l-30 -30l-128 128l128 128l30 -30l-98 -98z" /> - <glyph glyph-name="uniE5DD" unicode="last_page" -d="M341 384h43v-256h-43v256zM119 354l30 30l128 -128l-128 -128l-30 30l98 98z" /> - <glyph glyph-name="uniE60E" unicode="adb" -d="M320 320q9 0 15 6t6 15t-6 15.5t-15 6.5t-15 -6.5t-6 -15.5t6 -15t15 -6zM192 320q9 0 15 6t6 15t-6 15.5t-15 6.5t-15 -6.5t-6 -15.5t6 -15t15 -6zM344 419q61 -45 61 -120v-22h-298v22q0 75 61 120l-45 45l18 17l49 -49q32 16 66 16t66 -16l49 49l18 -17zM107 171v85 -h298v-85q0 -62 -43.5 -106t-105.5 -44t-105.5 44t-43.5 106z" /> - <glyph glyph-name="uniE60F" unicode="bluetooth_audio" -d="M275 164l-40 41v-81zM235 388v-81l40 41zM335 348l-92 -92l92 -92l-122 -121h-21v162l-98 -98l-30 30l119 119l-119 119l30 30l98 -98v162h21zM417 369q31 -50 31 -111t-33 -113l-25 25q21 42 21 86t-21 86zM304 256l49 49q10 -25 10 -49q0 -25 -10 -50z" /> - <glyph glyph-name="uniE610" unicode="disc_full" -d="M213 213q17 0 30 13t13 30t-13 30t-30 13t-29.5 -13t-12.5 -30t12.5 -30t29.5 -13zM213 427q71 0 121 -50.5t50 -120.5t-50 -120.5t-121 -50.5q-70 0 -120 50t-50 121t50 121t120 50zM427 363h42v-107h-42v107zM427 171v42h42v-42h-42z" /> - <glyph glyph-name="uniE611" unicode="do_not_disturb_alt" -d="M256 85q70 0 120.5 50.5t50.5 120.5q0 57 -37 105l-239 -239q48 -37 105 -37zM85 256q0 -57 37 -105l239 239q-48 37 -105 37q-70 0 -120.5 -50.5t-50.5 -120.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5 -t150.5 62.5z" /> - <glyph glyph-name="uniE612" unicode="do_not_disturb" -d="M391 151q36 45 36 105q0 70 -50.5 120.5t-120.5 50.5q-60 0 -105 -36zM256 85q60 0 105 36l-240 240q-36 -45 -36 -105q0 -70 50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5 -z" /> - <glyph glyph-name="uniE613" unicode="drive_eta" -d="M107 299h298l-32 96h-234zM373 192q13 0 22.5 9t9.5 23t-9.5 23t-22.5 9t-22.5 -9t-9.5 -23t9.5 -23t22.5 -9zM139 192q13 0 22.5 9t9.5 23t-9.5 23t-22.5 9t-22.5 -9t-9.5 -23t9.5 -23t22.5 -9zM404 405l44 -128v-170q0 -9 -6 -15.5t-15 -6.5h-22q-9 0 -15 6.5t-6 15.5 -v21h-256v-21q0 -9 -6 -15.5t-15 -6.5h-22q-9 0 -15 6.5t-6 15.5v170l44 128q7 22 31 22h234q24 0 31 -22z" /> - <glyph glyph-name="uniE614" unicode="event_available" -d="M405 107v234h-298v-234h298zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-18 0 -30.5 13t-12.5 30v298q0 17 12.5 30t30.5 13h21v43h43v-43h170v43h43v-43h21zM353 276l-127 -127l-68 68l23 23l45 -45l104 104z" /> - <glyph glyph-name="uniE615" unicode="event_busy" -d="M405 107v234h-298v-234h298zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-18 0 -30.5 13t-12.5 30v298q0 17 12.5 30t30.5 13h21v43h43v-43h170v43h43v-43h21zM199 149l-23 23l52 52l-52 52l23 23l52 -52l52 52l22 -23l-52 -52l52 -52l-22 -23l-52 52z -" /> - <glyph glyph-name="uniE616" unicode="event_note" -d="M299 213v-42h-150v42h150zM405 107v234h-298v-234h298zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-18 0 -30.5 13t-12.5 30v298q0 17 12.5 30t30.5 13h21v43h43v-43h170v43h43v-43h21zM363 299v-43h-214v43h214z" /> - <glyph glyph-name="uniE617" unicode="folder_special" -d="M383 149l-17 71l55 48l-72 6l-29 67l-29 -67l-72 -6l55 -48l-17 -71l63 37zM427 384q17 0 29.5 -13t12.5 -30v-213q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h128l43 -43h171z" /> - <glyph glyph-name="uniE618" unicode="mms" -d="M107 213h298l-96 128l-74 -96l-54 64zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-299l-85 -85v384q0 17 12.5 29.5t29.5 12.5h342z" /> - <glyph glyph-name="uniE619" unicode="more" -d="M405 224q13 0 22.5 9t9.5 23t-9.5 23t-22.5 9t-22.5 -9t-9.5 -23t9.5 -23t22.5 -9zM299 224q13 0 22.5 9t9.5 23t-9.5 23t-22.5 9t-22.5 -9t-9.5 -23t9.5 -23t22.5 -9zM192 224q14 0 23 9t9 23t-9 23t-23 9t-23 -9t-9 -23t9 -23t23 -9zM469 448q17 0 30 -13t13 -30v-298 -q0 -17 -13 -30t-30 -13h-318q-22 0 -36 19l-115 173l115 173q14 19 34 19h320z" /> - <glyph glyph-name="uniE61A" unicode="network_locked" -d="M448 171v32q0 13 -9 22.5t-23 9.5t-23 -9.5t-9 -22.5v-32h64zM469 171q9 0 15.5 -6.5t6.5 -15.5v-85q0 -9 -6.5 -15t-15.5 -6h-106q-9 0 -15.5 6t-6.5 15v85q0 9 6.5 15.5t15.5 6.5v32q0 22 15.5 37.5t37.5 15.5t37.5 -15.5t15.5 -37.5v-32zM416 299q-40 0 -68 -28 -t-28 -68v-6q-21 -19 -21 -48v-64h-278l406 406v-193q-2 0 -5.5 0.5t-5.5 0.5z" /> - <glyph glyph-name="uniE61B" unicode="phone_bluetooth_speaker" -d="M427 181q9 0 15 -6t6 -15v-75q0 -9 -6 -15t-15 -6q-150 0 -256.5 106.5t-106.5 256.5q0 9 6 15t15 6h75q9 0 15 -6t6 -15q0 -40 12 -76q4 -13 -5 -22l-47 -47q47 -92 141 -141l47 47q9 9 22 5q36 -12 76 -12zM384 358v-40l20 20zM384 450v-40l20 20zM314 309l-15 15 -l59 60l-59 60l15 15l49 -49v81h10l61 -61l-46 -46l46 -46l-61 -61h-10v81z" /> - <glyph glyph-name="uniE61C" unicode="phone_forwarded" -d="M427 181q9 0 15 -6t6 -15v-75q0 -9 -6 -15t-15 -6q-150 0 -256.5 106.5t-106.5 256.5q0 9 6 15t15 6h75q9 0 15 -6t6 -15q0 -40 12 -76q4 -13 -5 -22l-47 -47q47 -92 141 -141l47 47q9 9 22 5q36 -12 76 -12zM384 277v64h-85v86h85v64l107 -107z" /> - <glyph glyph-name="uniE61D" unicode="phone_in_talk" -d="M320 256q0 26 -19 45t-45 19v43q44 0 75.5 -31.5t31.5 -75.5h-43zM405 256q0 62 -43.5 105.5t-105.5 43.5v43q80 0 136 -56t56 -136h-43zM427 181q9 0 15 -6t6 -15v-75q0 -9 -6 -15t-15 -6q-150 0 -256.5 106.5t-106.5 256.5q0 9 6 15t15 6h75q9 0 15 -6t6 -15 -q0 -40 12 -76q4 -13 -5 -22l-47 -47q47 -92 141 -141l47 47q9 9 22 5q36 -12 76 -12z" /> - <glyph glyph-name="uniE61E" unicode="phone_locked" -d="M410 427v10q0 15 -11 26t-26 11t-25.5 -11t-10.5 -26v-10h73zM427 427q9 0 15 -6.5t6 -15.5v-85q0 -9 -6 -15t-15 -6h-107q-9 0 -15 6t-6 15v85q0 9 6 15.5t15 6.5v10q0 22 15.5 38t37.5 16t38 -16t16 -38v-10zM427 181q9 0 15 -6t6 -15v-75q0 -9 -6 -15t-15 -6 -q-150 0 -256.5 106.5t-106.5 256.5q0 9 6 15t15 6h75q9 0 15 -6t6 -15q0 -40 12 -76q4 -13 -5 -22l-47 -47q47 -92 141 -141l47 47q9 9 22 5q36 -12 76 -12z" /> - <glyph glyph-name="uniE61F" unicode="phone_missed" -d="M506 156q6 -6 6 -15t-6 -15l-53 -53q-6 -6 -15 -6t-15 6q-28 26 -57 40q-12 5 -12 19v66q-46 15 -98 15t-98 -15v-66q0 -15 -12 -20q-32 -15 -57 -39q-6 -6 -15 -6t-15 6l-53 53q-6 6 -6 15t6 15q105 100 250 100t250 -100zM139 395v-75h-32v128h128v-32h-75l96 -96 -l128 128l21 -21l-149 -150z" /> - <glyph glyph-name="uniE620" unicode="phone_paused" -d="M405 448h43v-149h-43v149zM427 181q9 0 15 -6t6 -15v-75q0 -9 -6 -15t-15 -6q-150 0 -256.5 106.5t-106.5 256.5q0 9 6 15t15 6h75q9 0 15 -6t6 -15q0 -40 12 -76q4 -13 -5 -22l-47 -47q47 -92 141 -141l47 47q9 9 22 5q36 -12 76 -12zM363 448v-149h-43v149h43z" /> - <glyph glyph-name="uniE623" unicode="sd_card" -d="M384 341v86h-43v-86h43zM320 341v86h-43v-86h43zM256 341v86h-43v-86h43zM384 469q17 0 30 -12.5t13 -29.5v-342q0 -17 -13 -29.5t-30 -12.5h-256q-17 0 -30 12.5t-13 29.5l1 256l127 128h171z" /> - <glyph glyph-name="uniE624" unicode="sim_card_alert" -d="M277 235v106h-42v-106h42zM277 149v43h-42v-43h42zM384 469q17 0 30 -12.5t13 -29.5v-342q0 -17 -13 -29.5t-30 -12.5h-256q-17 0 -30 12.5t-13 29.5l1 256l127 128h171z" /> - <glyph glyph-name="uniE625" unicode="sms" -d="M363 277v43h-43v-43h43zM277 277v43h-42v-43h42zM192 277v43h-43v-43h43zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-299l-85 -85v384q0 17 12.5 29.5t29.5 12.5h342z" /> - <glyph glyph-name="uniE626" unicode="sms_failed" -d="M277 299v85h-42v-85h42zM277 213v43h-42v-43h42zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-299l-85 -85v384q0 17 12.5 29.5t29.5 12.5h342z" /> - <glyph glyph-name="uniE627" unicode="sync" -d="M256 128v64l85 -85l-85 -86v64q-70 0 -120.5 50.5t-50.5 120.5q0 50 27 91l31 -31q-15 -27 -15 -60q0 -53 37.5 -90.5t90.5 -37.5zM256 427q70 0 120.5 -50.5t50.5 -120.5q0 -50 -27 -91l-31 31q15 27 15 60q0 53 -37.5 90.5t-90.5 37.5v-64l-85 85l85 86v-64z" /> - <glyph glyph-name="uniE628" unicode="sync_disabled" -d="M427 427l-51 -51q51 -51 51 -120q0 -48 -26 -90l-32 31q15 30 15 59q0 52 -38 90l-47 -47v128h128zM61 397l27 27l335 -336l-27 -27l-50 50q-24 -14 -48 -20v44q8 3 17 8l-172 172q-15 -30 -15 -59q0 -52 38 -90l47 47v-128h-128l51 51q-51 51 -51 120q0 48 26 90z -M213 377q-6 -2 -16 -8l-31 32q25 15 47 20v-44z" /> - <glyph glyph-name="uniE629" unicode="sync_problem" -d="M235 235v128h42v-128h-42zM448 427l-50 -51q50 -50 50 -120q0 -59 -36 -105t-92 -60v44q38 13 61.5 46t23.5 75q0 53 -37 90l-48 -47v128h128zM235 149v43h42v-43h-42zM64 256q0 59 36 105t92 60v-44q-38 -13 -61.5 -46t-23.5 -75q0 -53 37 -90l48 47v-128h-128l50 51 -q-50 50 -50 120z" /> - <glyph glyph-name="uniE62A" unicode="system_update" -d="M341 235l-85 -86l-85 86h64v106h42v-106h64zM363 107v298h-214v-298h214zM363 490q17 0 29.5 -12.5t12.5 -29.5v-384q0 -17 -12.5 -30t-29.5 -13h-214q-17 0 -29.5 13t-12.5 30v384q0 17 12.5 30t29.5 13z" /> - <glyph glyph-name="uniE62B" unicode="tap_and_play" -d="M363 490q17 0 29.5 -12.5t12.5 -29.5v-363q0 -17 -12.5 -29.5t-29.5 -12.5h-45q-3 43 -20 85h65v277h-214v-128q-25 11 -42 14v157q0 17 12.5 30t29.5 13zM43 256q97 0 165.5 -68.5t68.5 -166.5h-42q0 79 -56.5 135.5t-135.5 56.5v43zM43 85q26 0 45 -19t19 -45h-64v64z -M43 171q62 0 105.5 -44t43.5 -106h-43q0 44 -31 75.5t-75 31.5v43z" /> - <glyph glyph-name="uniE62C" unicode="time_to_leave" -d="M107 299h298l-32 96h-234zM373 192q13 0 22.5 9t9.5 23t-9.5 23t-22.5 9t-22.5 -9t-9.5 -23t9.5 -23t22.5 -9zM139 192q13 0 22.5 9t9.5 23t-9.5 23t-22.5 9t-22.5 -9t-9.5 -23t9.5 -23t22.5 -9zM404 405l44 -128v-170q0 -9 -6 -15.5t-15 -6.5h-22q-9 0 -15 6.5t-6 15.5 -v21h-256v-21q0 -9 -6 -15.5t-15 -6.5h-22q-9 0 -15 6.5t-6 15.5v170l44 128q7 22 31 22h234q24 0 31 -22z" /> - <glyph glyph-name="uniE62D" unicode="vibration" -d="M341 107v298h-170v-298h170zM352 448q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192zM405 149v214h43v-214h-43zM469 320h43v-128h-43v128zM64 149v214h43v-214h-43zM0 192v128h43v-128h-43z" /> - <glyph glyph-name="uniE62E" unicode="voice_chat" -d="M384 213v171l-85 -68v68h-171v-171h171v69zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-299l-85 -85v384q0 17 12.5 29.5t29.5 12.5h342z" /> - <glyph glyph-name="uniE62F" unicode="vpn_lock" -d="M213 65v42q-17 0 -29.5 12.5t-12.5 29.5v22l-103 102q-4 -16 -4 -38q0 -65 43 -113.5t106 -56.5zM404 256h43q1 -7 1 -21q0 -89 -62.5 -151.5t-150.5 -62.5q-89 0 -151.5 62.5t-62.5 151.5q0 88 62.5 150.5t151.5 62.5q31 0 64 -10v-54q0 -17 -13 -30t-30 -13h-43v-42 -q0 -9 -6 -15.5t-15 -6.5h-43v-42h128q9 0 15.5 -6.5t6.5 -15.5v-64h21q31 0 41 -29q44 47 44 115q0 14 -1 21zM452 427v10q0 15 -10.5 26t-25.5 11t-25.5 -11t-10.5 -26v-10h72zM469 427q9 0 15.5 -6.5t6.5 -15.5v-85q0 -9 -6.5 -15t-15.5 -6h-106q-9 0 -15.5 6t-6.5 15v85 -q0 9 6.5 15.5t15.5 6.5v10q0 22 15.5 38t37.5 16t37.5 -16t15.5 -38v-10z" /> - <glyph glyph-name="uniE630" unicode="airline_seat_flat" -d="M152 254q-19 -19 -45 -19.5t-45 18.5t-19.5 45t18.5 45t45 19.5t45 -18.5t19.5 -45t-18.5 -45zM43 213h426v-42h-128v-43h-170v43h-128v42zM469 277v-42h-277v128h192q35 0 60 -25.5t25 -60.5z" /> - <glyph glyph-name="uniE631" unicode="airline_seat_flat_angled" -d="M156 294q-24 -11 -49.5 -2.5t-36.5 32.5t-2.5 49.5t32.5 36.5t49.5 2.5t36.5 -32.5t2.5 -49.5t-32.5 -36.5zM32 253l15 40l405 -146l-14 -40l-97 34v-34h-170v96zM475 207l-15 -40l-264 95l45 121l182 -66q34 -12 49 -44t3 -66z" /> - <glyph glyph-name="uniE632" unicode="airline_seat_individual_suite" -d="M405 363q35 0 60.5 -25.5t25.5 -60.5v-128h-470v214h43v-150h171v150h170zM149 235q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19z" /> - <glyph glyph-name="uniE633" unicode="airline_seat_legroom_extra" -d="M487 144q7 -12 2 -25t-17 -19l-79 -36l-73 149h-149q-26 0 -45 19t-19 45v171h128v-128h75q27 0 38 -24l72 -149l24 11q12 5 24.5 1t18.5 -15zM85 256q0 -26 19 -45t45 -19h128v-43h-128q-44 0 -75 31.5t-31 75.5v192h42v-192z" /> - <glyph glyph-name="uniE634" unicode="airline_seat_legroom_normal" -d="M437 128q13 0 22.5 -9t9.5 -23t-9.5 -23t-22.5 -9h-96v149h-149q-26 0 -45 19t-19 45v171h128v-128h107q17 0 29.5 -13t12.5 -30v-149h32zM107 256q0 -26 19 -45t45 -19h128v-43h-128q-44 0 -75.5 31.5t-31.5 75.5v192h43v-192z" /> - <glyph glyph-name="uniE635" unicode="airline_seat_legroom_reduced" -d="M107 256q0 -26 19 -45t45 -19h85v-43h-85q-44 0 -75.5 31.5t-31.5 75.5v192h43v-192zM426 102q3 -15 -6.5 -26.5t-24.5 -11.5h-96v64l21 85h-128q-26 0 -45 19t-19 45v171h128v-128h107q17 0 29.5 -13t12.5 -30l-42 -149h30q12 0 21.5 -7.5t11.5 -18.5z" /> - <glyph glyph-name="uniE636" unicode="airline_seat_recline_extra" -d="M346 192l123 -96l-32 -32l-81 64h-146q-23 0 -40.5 14.5t-22.5 37.5l-29 126q-3 20 8.5 36t30.5 20h1q22 3 37 -9l35 -27q48 -37 100 -27v-46q-48 -8 -110 26l22 -87h104zM341 107v-43h-150q-40 0 -70 25.5t-36 64.5l-42 209h42l42 -202q4 -23 22 -38.5t42 -15.5h150z -M114 392q-14 10 -17 27.5t7 31.5t27.5 17.5t31.5 -6.5q14 -11 17.5 -28.5t-6.5 -31.5t-28 -17t-32 7z" /> - <glyph glyph-name="uniE637" unicode="airline_seat_recline_normal" -d="M427 84l-31 -31l-75 75h-108q-26 0 -45 19t-19 45v123q0 19 14.5 33.5t33.5 14.5h1q19 0 35 -16l30 -33q17 -19 45.5 -31t54.5 -12v-47q-62 0 -118 47v-79h74zM128 171q0 -26 19 -45t45 -19h128v-43h-128q-44 0 -75.5 31.5t-31.5 75.5v192h43v-192zM162 397 -q-13 13 -13 30t13 30t30 13t30 -13t13 -30t-13 -30t-30 -13t-30 13z" /> - <glyph glyph-name="uniE638" unicode="confirmation_number" -d="M277 331v42h-42v-42h42zM277 235v42h-42v-42h42zM277 139v42h-42v-42h42zM469 299q-17 0 -29.5 -13t-12.5 -30t12.5 -30t29.5 -13v-85q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v85q18 0 30 12.5t12 30.5q0 17 -12.5 30t-29.5 13v85q0 18 12.5 30.5 -t29.5 12.5h342q17 0 29.5 -12.5t12.5 -30.5v-85z" /> - <glyph glyph-name="uniE639" unicode="live_tv" -d="M192 299l149 -86l-149 -85v171zM448 85v256h-384v-256h384zM448 384q17 0 30 -12.5t13 -30.5v-256q0 -17 -13 -29.5t-30 -12.5h-384q-17 0 -30 12.5t-13 29.5v256q0 18 13 30.5t30 12.5h162l-70 70l15 15l85 -85l85 85l15 -15l-70 -70h162z" /> - <glyph glyph-name="uniE63A" unicode="ondemand_video" -d="M341 277l-149 -85v171zM448 149v256h-384v-256h384zM448 448q17 0 30 -12.5t13 -30.5l-1 -256q0 -17 -12.5 -29.5t-29.5 -12.5h-107v-43h-170v43h-107q-18 0 -30.5 12.5t-12.5 29.5v256q0 18 12.5 30.5t30.5 12.5h384z" /> - <glyph glyph-name="uniE63B" unicode="personal_video" -d="M448 149v256h-384v-256h384zM448 448q17 0 30 -12.5t13 -30.5l-1 -256q0 -17 -12.5 -29.5t-29.5 -12.5h-107v-43h-170v43h-107q-18 0 -30.5 12.5t-12.5 29.5v256q0 18 12.5 30.5t30.5 12.5h384z" /> - <glyph glyph-name="uniE63C" unicode="power" -d="M342 363q16 0 29 -13.5t13 -29.5v-117l-75 -75v-64h-106v64l-75 75v117q0 16 13 29.5t29 13.5h1v85h42v-85h86v85h42z" /> - <glyph glyph-name="uniE63D" unicode="wc" -d="M352 384q-18 0 -30.5 12.5t-12.5 30.5t12.5 30t30.5 12t30.5 -12t12.5 -30t-12.5 -30.5t-30.5 -12.5zM160 384q-18 0 -30.5 12.5t-12.5 30.5t12.5 30t30.5 12t30.5 -12t12.5 -30t-12.5 -30.5t-30.5 -12.5zM384 43h-64v128h-64l54 162q11 30 41 30h2q30 0 41 -30l54 -162 -h-64v-128zM117 43v160h-32v117q0 17 13 30t30 13h64q17 0 30 -13t13 -30v-117h-32v-160h-86z" /> - <glyph glyph-name="uniE63E" unicode="wifi" -d="M107 235q62 61 149.5 61t148.5 -61l-42 -43q-44 44 -107 44t-107 -44zM192 149q26 26 64 26t64 -26l-64 -64zM21 320q98 97 235.5 97t234.5 -97l-43 -43q-80 79 -192 79t-192 -79z" /> - <glyph glyph-name="uniE63F" unicode="enhanced_encryption" -d="M341 171v42h-64v64h-42v-64h-64v-42h64v-64h42v64h64zM190 384v-43h132v43q0 27 -19.5 46.5t-46.5 19.5t-46.5 -19.5t-19.5 -46.5zM384 341q17 0 30 -12.5t13 -29.5v-214q0 -17 -13 -29.5t-30 -12.5h-256q-17 0 -30 12.5t-13 29.5v214q0 17 13 29.5t30 12.5h21v43 -q0 44 31.5 75.5t75.5 31.5t75.5 -31.5t31.5 -75.5v-43h21z" /> - <glyph glyph-name="uniE640" unicode="network_check" -d="M107 235q64 64 156 61l-28 -61q-49 -6 -86 -43zM363 192q-11 11 -26 21l12 62q32 -16 56 -40zM448 277q-39 39 -88 59l11 60q69 -25 120 -76zM21 320q59 59 136.5 82.5t156.5 9.5l-25 -57q-61 8 -120.5 -12.5t-104.5 -65.5zM339 405q11 0 11 -10l-52 -275v-1 -q-3 -14 -15 -24t-27 -10q-18 0 -30.5 12.5t-12.5 30.5q0 11 5 21l111 248q3 8 10 8z" /> - <glyph glyph-name="uniE641" unicode="no_encryption" -d="M190 384v-26l-39 39q5 40 34.5 67t70.5 27q44 0 75.5 -31.5t31.5 -75.5v-43h21q17 0 30 -12.5t13 -29.5v-178l-221 220h116v43q0 27 -19.5 46.5t-46.5 19.5t-46.5 -19.5t-19.5 -46.5zM448 47l-26 -26l-24 24q-8 -2 -14 -2h-256q-17 0 -30 12.5t-13 29.5v214q0 25 23 37 -l-44 43l26 26z" /> - <glyph glyph-name="uniE642" unicode="rv_hookup" -d="M363 469l64 -64l-64 -64v43h-171v43h171v42zM384 213v64h-85v-64h85zM235 85q9 0 15 6.5t6 15.5t-6 15t-15 6t-15.5 -6t-6.5 -15t6.5 -15.5t15.5 -6.5zM427 149h42v-42h-170q0 -26 -19 -45t-45 -19t-45 19t-19 45h-43q-17 0 -30 12.5t-13 29.5v64h150v64h-86v-42l-64 64 -l64 64v-43h235q17 0 30 -13t13 -30v-128z" /> - <glyph glyph-name="uniE643" unicode="do_not_disturb_off" -d="M149 235h74l-43 42h-31v-42zM48 464l416 -416l-28 -27l-59 60q-54 -38 -121 -38q-88 0 -150.5 62.5t-62.5 150.5q0 67 38 121l-60 59zM363 277h-74l-154 154q54 38 121 38q88 0 150.5 -62.5t62.5 -150.5q0 -67 -38 -121l-99 100h31v42z" /> - <glyph glyph-name="uniE644" unicode="do_not_disturb_on" -d="M363 235v42h-214v-42h214zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE645" unicode="priority_high" -d="M213 448h86v-256h-86v256zM213 107q0 18 12.5 30t30.5 12t30.5 -12t12.5 -30t-12.5 -30.5t-30.5 -12.5t-30.5 12.5t-12.5 30.5z" /> - <glyph glyph-name="uniE6C4" unicode="pie_chart" -d="M278 234h191q-7 -76 -61 -130t-130 -61v191zM278 469q76 -7 130 -61t61 -130h-191v191zM235 469v-426q-81 8 -136.5 69t-55.5 144t55.5 144t136.5 69z" /> - <glyph glyph-name="uniE6C5" unicode="pie_chart_outlined" -d="M277 87q58 7 99.5 48.5t48.5 99.5h-148v-148zM85 256q0 -65 43 -113t107 -56v338q-63 -8 -106.5 -56t-43.5 -113zM277 425v-148h148q-7 58 -48.5 99.5t-99.5 48.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5 -t150.5 62.5z" /> - <glyph glyph-name="uniE6DD" unicode="bubble_chart" -d="M222 324q0 43 29.5 73t72.5 30t73 -30t30 -73t-30 -72.5t-73 -29.5t-72.5 29.5t-29.5 72.5zM273 128q0 18 12.5 30.5t30.5 12.5t30 -12.5t12 -30.5t-12 -30.5t-30 -12.5t-30.5 12.5t-12.5 30.5zM85 205q0 28 20 48t49 20q28 0 48 -19.5t20 -48.5t-20 -48.5t-48 -19.5 -q-29 0 -49 20t-20 48z" /> - <glyph glyph-name="uniE6DF" unicode="multiline_chart" -d="M469 364l-65 -73q37 -59 44 -131h-43q-6 51 -31 97l-86 -97l-85 86l-128 -128l-32 32l160 160l85 -86l61 70q-59 69 -144 69q-73 0 -132 -52l-30 30q72 64 162 64q102 0 173 -79l61 68z" /> - <glyph glyph-name="uniE6E1" unicode="show_chart" -d="M75 118l-32 32l160 160l85 -86l151 170l30 -30l-181 -204l-85 86z" /> - <glyph glyph-name="uniE7E9" unicode="cake" -d="M384 320q26 0 45 -19t19 -45v-33q0 -17 -12.5 -29.5t-29.5 -12.5t-29 12l-46 46l-46 -46q-12 -12 -29.5 -12t-29.5 12l-45 46l-46 -46q-12 -12 -29 -12t-29.5 12.5t-12.5 29.5v33q0 26 19 45t45 19h107v43h42v-43h107zM354 171q22 -22 52 -22q22 0 42 13v-98q0 -9 -6 -15 -t-15 -6h-342q-9 0 -15 6t-6 15v98q19 -13 42 -13q30 0 52 22l23 23l23 -23q21 -21 52 -21t52 21l23 23zM256 384q-17 0 -30 13t-13 30q0 11 7 22l36 63l36 -63q7 -11 7 -22q0 -17 -12.5 -30t-30.5 -13z" /> - <glyph glyph-name="uniE7EE" unicode="domain" -d="M384 192v-43h-43v43h43zM384 277v-42h-43v42h43zM427 107v213h-171v-43h43v-42h-43v-43h43v-43h-43v-42h171zM213 363v42h-42v-42h42zM213 277v43h-42v-43h42zM213 192v43h-42v-43h42zM213 107v42h-42v-42h42zM128 363v42h-43v-42h43zM128 277v43h-43v-43h43zM128 192v43 -h-43v-43h43zM128 107v42h-43v-42h43zM256 363h213v-299h-426v384h213v-85z" /> - <glyph glyph-name="uniE7EF" unicode="group" -d="M341 235q28 0 61 -8t61 -26t28 -41v-53h-128v53q0 44 -42 74q7 1 20 1zM171 235q28 0 61 -8t60.5 -26t27.5 -41v-53h-299v53q0 23 28 41t61 26t61 8zM171 277q-26 0 -45 19t-19 45t19 45t45 19t44.5 -19t18.5 -45t-18.5 -45t-44.5 -19zM341 277q-26 0 -45 19t-19 45 -t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19z" /> - <glyph glyph-name="uniE7F0" unicode="group_add" -d="M277 235q40 0 84 -17.5t44 -46.5v-43h-256v43q0 29 44 46.5t84 17.5zM419 231q37 -6 65 -21.5t28 -38.5v-43h-64v43q0 34 -29 60zM277 277q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM384 277q-10 0 -19 3q19 27 19 61t-19 61q9 3 19 3 -q26 0 45 -19t19 -45t-19 -45t-45 -19zM171 299v-43h-64v-64h-43v64h-64v43h64v64h43v-64h64z" /> - <glyph glyph-name="uniE7F1" unicode="location_city" -d="M405 192v43h-42v-43h42zM405 107v42h-42v-42h42zM277 363v42h-42v-42h42zM277 277v43h-42v-43h42zM277 192v43h-42v-43h42zM277 107v42h-42v-42h42zM149 277v43h-42v-43h42zM149 192v43h-42v-43h42zM149 107v42h-42v-42h42zM320 277h128v-213h-384v299h128v42l64 64 -l64 -64v-128z" /> - <glyph glyph-name="uniE7F2" unicode="mood" -d="M256 139q-37 0 -66.5 20.5t-42.5 53.5h218q-13 -33 -42.5 -53.5t-66.5 -20.5zM181 277q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5zM331 277q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5t-9.5 -22.5 -t-22.5 -9.5zM256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE7F3" unicode="mood_bad" -d="M256 213q37 0 66.5 -20.5t42.5 -53.5h-218q13 33 42.5 53.5t66.5 20.5zM181 277q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5zM331 277q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5t-9.5 -22.5 -t-22.5 -9.5zM256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE7F4" unicode="notifications" -d="M384 171l43 -43v-21h-342v21l43 43v106q0 50 25.5 87t70.5 48v15q0 13 9 22.5t23 9.5t23 -9.5t9 -22.5v-15q45 -11 70.5 -48t25.5 -87v-106zM256 43q-18 0 -30.5 12.5t-12.5 29.5h86q0 -17 -13 -29.5t-30 -12.5z" /> - <glyph glyph-name="uniE7F5" unicode="notifications_none" -d="M341 149v128q0 41 -23 68.5t-62 27.5t-62 -27.5t-23 -68.5v-128h170zM384 171l43 -43v-21h-342v21l43 43v106q0 50 25.5 87t70.5 48v15q0 13 9 22.5t23 9.5t23 -9.5t9 -22.5v-15q45 -11 70.5 -48t25.5 -87v-106zM256 43q-17 0 -30 12.5t-13 29.5h86q0 -17 -13 -29.5 -t-30 -12.5z" /> - <glyph glyph-name="uniE7F6" unicode="notifications_off" -d="M384 199l-191 201q3 1 8 3.5l7 3.5h1l6 3q1 0 4 1t5 1v15q0 13 9 22.5t23 9.5t23 -9.5t9 -22.5v-15q45 -11 70.5 -48t25.5 -87v-78zM256 43q-18 0 -30.5 12t-12.5 30h86q0 -18 -12.5 -30t-30.5 -12zM167 381q24 -25 125.5 -129t155.5 -161l-27 -27l-43 43h-293v21l43 43 -v107q0 41 17 73l-60 59l27 28z" /> - <glyph glyph-name="uniE7F7" unicode="notifications_active" -d="M256 43q-18 0 -30.5 12.5t-12.5 29.5h85q0 -18 -12 -30t-30 -12zM384 277v-106l43 -43v-21h-342v21l43 43v106q0 50 25.5 87t70.5 48v15q0 13 9 22.5t23 9.5t23 -9.5t9 -22.5v-15q45 -11 70.5 -48t25.5 -87zM426 288q-5 86 -75 137l30 30q83 -64 88 -167h-43zM162 425 -q-71 -50 -76 -137h-43q5 103 88 167z" /> - <glyph glyph-name="uniE7F8" unicode="notifications_paused" -d="M309 303v38h-106v-38h59l-59 -73v-38h106v38h-59zM384 171l43 -43v-21h-342v21l43 43v106q0 50 25.5 87t70.5 48v15q0 13 9 22.5t23 9.5t23 -9.5t9 -22.5v-15q45 -11 70.5 -48t25.5 -87v-106zM256 43q-18 0 -30.5 12.5t-12.5 29.5h86q0 -17 -13 -29.5t-30 -12.5z" /> - <glyph glyph-name="uniE7F9" unicode="pages" -d="M405 448q17 0 30 -13t13 -30v-128h-107l22 86l-86 -22v107h128zM363 149l-22 86h107v-128q0 -17 -13 -30t-30 -13h-128v107zM171 235l-22 -86l86 22v-107h-128q-17 0 -30 13t-13 30v128h107zM64 405q0 17 13 30t30 13h128v-107l-86 22l22 -86h-107v128z" /> - <glyph glyph-name="uniE7FA" unicode="party_mode" -d="M256 149q44 0 75.5 31.5t31.5 75.5q0 7 -2 21h-45q4 -14 4 -21q0 -26 -19 -45t-45 -19h-85q33 -43 85 -43zM256 363q-44 0 -75.5 -31.5t-31.5 -75.5q0 -7 2 -21h45q-4 14 -4 21q0 26 19 45t45 19h85q-33 43 -85 43zM427 427q17 0 29.5 -13t12.5 -30v-256q0 -17 -12.5 -30 -t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h68l39 42h128l39 -42h68z" /> - <glyph glyph-name="uniE7FB" unicode="people" -d="M341 235q28 0 61 -8t61 -26t28 -41v-53h-128v53q0 44 -42 74q7 1 20 1zM171 235q28 0 61 -8t60.5 -26t27.5 -41v-53h-299v53q0 23 28 41t61 26t61 8zM171 277q-26 0 -45 19t-19 45t19 45t45 19t44.5 -19t18.5 -45t-18.5 -45t-44.5 -19zM341 277q-26 0 -45 19t-19 45 -t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19z" /> - <glyph glyph-name="uniE7FC" unicode="people_outline" -d="M352 373q-17 0 -30 -12.5t-13 -29.5t13 -30t30 -13t30 13t13 30t-13 29.5t-30 12.5zM352 256q-31 0 -53 22t-22 53t22 52.5t53 21.5t53 -21.5t22 -52.5t-22 -53t-53 -22zM160 373q-17 0 -30 -12.5t-13 -29.5t13 -30t30 -13t30 13t13 30t-13 29.5t-30 12.5zM160 256 -q-31 0 -53 22t-22 53t22 52.5t53 21.5t53 -21.5t22 -52.5t-22 -53t-53 -22zM459 139v26q0 10 -35.5 24t-71.5 14q-26 0 -64 -12q11 -13 11 -26v-26h160zM267 139v26q0 10 -35.5 24t-71.5 14t-71.5 -14t-35.5 -24v-26h214zM352 235q43 0 91 -19.5t48 -50.5v-58h-470v58 -q0 31 48 50.5t91 19.5q47 0 96 -22q49 22 96 22z" /> - <glyph glyph-name="uniE7FD" unicode="person" -d="M256 213q54 0 112.5 -23.5t58.5 -61.5v-43h-342v43q0 38 58.5 61.5t112.5 23.5zM256 256q-35 0 -60 25t-25 60t25 60.5t60 25.5t60 -25.5t25 -60.5t-25 -60t-60 -25z" /> - <glyph glyph-name="uniE7FE" unicode="person_add" -d="M320 213q54 0 112.5 -23.5t58.5 -61.5v-43h-342v43q0 38 58.5 61.5t112.5 23.5zM128 299h64v-43h-64v-64h-43v64h-64v43h64v64h43v-64zM320 256q-35 0 -60 25t-25 60t25 60.5t60 25.5t60 -25.5t25 -60.5t-25 -60t-60 -25z" /> - <glyph glyph-name="uniE7FF" unicode="person_outline" -d="M256 235q32 0 70 -9t69.5 -30t31.5 -47v-64h-342v64q0 26 31.5 47t69.5 30t70 9zM256 427q35 0 60 -25.5t25 -60.5t-25 -60t-60 -25t-60 25t-25 60t25 60.5t60 25.5zM256 194q-44 0 -87 -16.5t-43 -28.5v-23h260v23q0 12 -43 28.5t-87 16.5zM256 386q-19 0 -32 -13 -t-13 -32t13 -31.5t32 -12.5t32 12.5t13 31.5t-13 32t-32 13z" /> - <glyph glyph-name="uniE800" unicode="plus_one" -d="M309 382l96 23v-277h-42v226l-54 -11v39zM213 341v-85h86v-43h-86v-85h-42v85h-86v43h86v85h42z" /> - <glyph glyph-name="uniE801" unicode="poll" -d="M363 149v86h-43v-86h43zM277 149v214h-42v-214h42zM192 149v150h-43v-150h43zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298z" /> - <glyph glyph-name="uniE80B" unicode="public" -d="M382 141q45 48 45 115q0 53 -29.5 96t-77.5 62v-9q0 -17 -13 -29.5t-30 -12.5h-42v-43q0 -9 -6.5 -15t-15.5 -6h-42v-43h128q9 0 15 -6t6 -15v-64h21q30 0 41 -30zM235 87v41q-17 0 -30 13t-13 30v21l-102 102q-5 -20 -5 -38q0 -65 43.5 -113t106.5 -56zM256 469 -q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE80C" unicode="school" -d="M256 448l235 -128v-171h-43v148l-192 -105l-235 128zM107 231l149 -82l149 82v-86l-149 -81l-149 81v86z" /> - <glyph glyph-name="uniE80D" unicode="share" -d="M384 169q26 0 44 -18.5t18 -43.5q0 -26 -18.5 -44.5t-43.5 -18.5t-43.5 18.5t-18.5 44.5q0 10 1 14l-151 88q-19 -17 -44 -17q-26 0 -45 19t-19 45t19 45t45 19q25 0 44 -17l150 87q-2 10 -2 15q0 26 19 45t45 19t45 -19t19 -45t-19 -45t-45 -19q-24 0 -44 18l-150 -88 -q2 -10 2 -15t-2 -15l152 -88q18 16 42 16z" /> - <glyph glyph-name="uniE80E" unicode="whatshot" -d="M250 107q43 0 72.5 29.5t29.5 72.5q0 44 -12 86q-31 -41 -99 -55q-60 -13 -60 -66q0 -28 20 -47.5t49 -19.5zM288 498q64 -52 101.5 -126.5t37.5 -158.5q0 -70 -50 -120t-121 -50t-121 50t-50 120q0 108 69 190v-8q0 -33 22 -56t55 -23q32 0 52.5 22.5t20.5 56.5 -q0 20 -4 46t-8 41z" /> - <glyph glyph-name="uniE811" unicode="sentiment_dissatisfied" -d="M256 213q37 0 66.5 -20.5t42.5 -53.5h-35q-25 42 -74 42t-74 -42h-35q13 33 42.5 53.5t66.5 20.5zM256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5 -t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM149 309q0 13 9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5zM299 309q0 13 9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5z" /> - <glyph glyph-name="uniE812" unicode="sentiment_neutral" -d="M256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM149 309q0 13 9.5 22.5t22.5 9.5 -t22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5zM299 309q0 13 9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5zM192 213h128v-32h-128v32z" /> - <glyph glyph-name="uniE813" unicode="sentiment_satisfied" -d="M256 171q49 0 74 42h35q-13 -33 -42.5 -53.5t-66.5 -20.5t-66.5 20.5t-42.5 53.5h35q25 -42 74 -42zM256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5 -t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM149 309q0 13 9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5zM299 309q0 13 9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5t-22.5 9.5 -t-9.5 22.5z" /> - <glyph glyph-name="uniE814" unicode="sentiment_very_dissatisfied" -d="M256 213q37 0 66.5 -20.5t42.5 -53.5h-218q13 33 42.5 53.5t66.5 20.5zM167 256l-23 23l23 22l-23 23l23 22l22 -22l23 22l23 -22l-23 -23l23 -22l-23 -23l-23 23zM345 346l23 -22l-23 -23l23 -22l-23 -23l-22 23l-23 -23l-23 23l23 22l-23 23l23 22l23 -22zM256 85 -q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE815" unicode="sentiment_very_satisfied" -d="M256 139q-37 0 -66.5 20.5t-42.5 53.5h218q-13 -33 -42.5 -53.5t-66.5 -20.5zM189 300l-22 -23l-23 23l45 45l46 -45l-23 -23zM277 300l46 45l45 -45l-23 -23l-22 23l-23 -23zM256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5 -t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE834" unicode="check_box" -d="M213 149l192 192l-30 31l-162 -162l-76 76l-30 -30zM405 448q18 0 30.5 -13t12.5 -30v-298q0 -17 -12.5 -30t-30.5 -13h-298q-18 0 -30.5 13t-12.5 30v298q0 17 12.5 30t30.5 13h298z" /> - <glyph glyph-name="uniE835" unicode="check_box_outline_blank" -d="M405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298zM405 405h-298v-298h298v298z" /> - <glyph glyph-name="uniE836" unicode="radio_button_unchecked" -d="M256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE837" unicode="radio_button_checked" -d="M256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM256 363q44 0 75.5 -31.5 -t31.5 -75.5t-31.5 -75.5t-75.5 -31.5t-75.5 31.5t-31.5 75.5t31.5 75.5t75.5 31.5z" /> - <glyph glyph-name="uniE838" unicode="star" -d="M256 144l-132 -80l35 150l-116 101l153 13l60 141l60 -141l153 -13l-116 -101l35 -150z" /> - <glyph glyph-name="uniE839" unicode="star_half" -d="M256 183l80 -48l-21 91l71 62l-94 8l-36 86v-199zM469 315l-116 -101l35 -150l-132 80l-132 -80l35 150l-116 101l153 13l60 141l60 -141z" /> - <glyph glyph-name="uniE83A" unicode="star_outline" -d="M256 183l80 -48l-21 91l71 62l-94 8l-36 86l-36 -86l-94 -8l71 -62l-21 -91zM469 315l-116 -101l35 -150l-132 80l-132 -80l35 150l-116 101l153 13l60 141l60 -141z" /> - <glyph glyph-name="uniE84D" unicode="3d_rotation" -d="M256 512q100 0 173.5 -67.5t81.5 -166.5h-32q-5 59 -39.5 107t-87.5 73l-29 -28l-81 81zM353 260q0 57 -47 57h-20v-123h19q36 0 46 34q2 7 2 24v8zM306 341q53 0 72 -47q5 -12 5 -34v-8q0 -38 -21 -59q-22 -22 -57 -22h-49v170h50zM207 258q28 -11 28 -39q0 -10 -5 -20 -q-6 -12 -11 -16q-15 -12 -40 -12q-24 0 -39 12t-15 35h27q0 -11 7.5 -18t19.5 -7q28 0 28 27t-31 27h-16v22h16q29 0 29 25t-26 25q-25 0 -25 -23h-28q0 17 15 32q16 13 38 13q35 0 49 -27q4 -8 4 -20q0 -23 -25 -36zM160 54l29 28l81 -81l-14 -1q-100 0 -173.5 68 -t-81.5 167h32q6 -60 40 -108t87 -73z" /> - <glyph glyph-name="uniE84E" unicode="accessibility" -d="M448 320h-128v-277h-43v128h-42v-128h-43v277h-128v43h384v-43zM256 469q17 0 30 -12.5t13 -29.5t-13 -30t-30 -13t-30 13t-13 30t13 29.5t30 12.5z" /> - <glyph glyph-name="uniE84F" unicode="account_balance" -d="M245 491l203 -107v-43h-405v43zM341 299h64v-150h-64v150zM43 43v64h405v-64h-405zM213 299h64v-150h-64v150zM85 299h64v-150h-64v150z" /> - <glyph glyph-name="uniE850" unicode="account_balance_wallet" -d="M341 224q13 0 22.5 9t9.5 23t-9.5 23t-22.5 9t-22.5 -9t-9.5 -23t9.5 -23t22.5 -9zM256 171v170h213v-170h-213zM448 128v-21q0 -17 -13 -30t-30 -13h-298q-18 0 -30.5 13t-12.5 30v298q0 17 12.5 30t30.5 13h298q17 0 30 -13t13 -30v-21h-192q-18 0 -30.5 -13t-12.5 -30 -v-170q0 -17 12.5 -30t30.5 -13h192z" /> - <glyph glyph-name="uniE851" unicode="account_box" -d="M128 149v-21h256v21q0 29 -44 47.5t-84 18.5t-84 -18.5t-44 -47.5zM320 320q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM64 405q0 17 12.5 30t30.5 13h298q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-18 0 -30.5 13t-12.5 30v298z" /> - <glyph glyph-name="uniE853" unicode="account_circle" -d="M256 102q81 0 128 69q-1 28 -45 47t-83 19t-83 -18.5t-45 -47.5q47 -69 128 -69zM256 405q-26 0 -45 -19t-19 -45t19 -45t45 -19t45 19t19 45t-19 45t-45 19zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5 -t150.5 62.5z" /> - <glyph glyph-name="uniE854" unicode="add_shopping_cart" -d="M153 197q0 -5 5 -5h247v-43h-256q-17 0 -29.5 13t-12.5 30q0 10 5 20l29 53l-77 162h-43v42h70q20 -42 40 -85q5 -9 23 -47.5t28 -59.5h150q75 136 82 150l37 -21l-82 -149q-12 -22 -37 -22h-159l-19 -35zM363 128q17 0 29.5 -13t12.5 -30t-12.5 -29.5t-29.5 -12.5 -t-30 12.5t-13 29.5t13 30t30 13zM149 128q17 0 30 -13t13 -30t-13 -29.5t-30 -12.5t-29.5 12.5t-12.5 29.5t12.5 30t29.5 13zM235 320v64h-64v43h64v64h42v-64h64v-43h-64v-64h-42z" /> - <glyph glyph-name="uniE855" unicode="alarm" -d="M256 85q62 0 105.5 44t43.5 106t-43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5t43.5 -106t105.5 -44zM256 427q80 0 136 -56.5t56 -135.5t-56 -135.5t-136 -56.5t-136 56.5t-56 135.5t56 135.5t136 56.5zM267 341v-112l85 -50l-16 -26l-101 60v128h32zM168 440 -l-98 -82l-27 32l98 82zM469 390l-27 -33l-98 83l27 32z" /> - <glyph glyph-name="uniE856" unicode="alarm_add" -d="M277 320v-64h64v-43h-64v-64h-42v64h-64v43h64v64h42zM256 85q62 0 105.5 44t43.5 106t-43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5t43.5 -106t105.5 -44zM256 427q80 0 136 -56.5t56 -135.5t-56 -135.5t-136 -56.5t-136 56.5t-56 135.5t56 135.5t136 56.5z -M469 390l-27 -33l-98 83l27 32zM168 440l-98 -82l-27 32l98 82z" /> - <glyph glyph-name="uniE857" unicode="alarm_off" -d="M171 442l-18 -15l-31 30l19 15zM351 120l-210 210q-34 -42 -34 -95q0 -62 43.5 -106t105.5 -44q52 0 95 35zM62 463q76 -76 216.5 -216t177.5 -177l-27 -27l-47 47q-55 -47 -126 -47q-80 0 -136 56.5t-56 135.5q0 70 47 125l-17 17l-24 -20l-30 31l24 19l-29 29zM469 390 -l-27 -33l-98 83l27 32zM256 384q-27 0 -51 -9l-33 32q42 20 84 20q80 0 136 -56.5t56 -135.5q0 -44 -19 -84l-33 32q9 24 9 52q0 62 -43.5 105.5t-105.5 43.5z" /> - <glyph glyph-name="uniE858" unicode="alarm_on" -d="M225 202l105 106l23 -23l-128 -128l-68 68l22 22zM256 85q62 0 105.5 44t43.5 106t-43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5t43.5 -106t105.5 -44zM256 427q80 0 136 -56.5t56 -135.5t-56 -135.5t-136 -56.5t-136 56.5t-56 135.5t56 135.5t136 56.5zM168 440 -l-98 -82l-27 32l98 82zM469 390l-27 -33l-98 83l27 32z" /> - <glyph glyph-name="uniE859" unicode="android" -d="M320 405v22h-21v-22h21zM213 405v22h-21v-22h21zM331 466q53 -38 53 -103h-256q0 66 52 103l-28 28q-8 8 0 15t15 0l32 -32q26 14 57 14q30 0 56 -14l32 32q8 7 15 0t0 -15zM437 341q13 0 22.5 -9.5t9.5 -22.5v-149q0 -14 -9.5 -23t-22.5 -9t-22.5 9t-9.5 23v149 -q0 13 9.5 22.5t22.5 9.5zM75 341q13 0 22.5 -9.5t9.5 -22.5v-149q0 -14 -9.5 -23t-22.5 -9t-22.5 9t-9.5 23v149q0 13 9.5 22.5t22.5 9.5zM128 128v213h256v-213q0 -9 -6 -15t-15 -6h-22v-75q0 -14 -9.5 -23t-22.5 -9t-22.5 9t-9.5 23v75h-42v-75q0 -14 -9.5 -23t-22.5 -9 -t-22.5 9t-9.5 23v75h-22q-9 0 -15 6t-6 15z" /> - <glyph glyph-name="uniE85A" unicode="announcement" -d="M277 192v43h-42v-43h42zM277 277v128h-42v-128h42zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-299l-85 -85v384q0 17 12.5 29.5t29.5 12.5h342z" /> - <glyph glyph-name="uniE85B" unicode="aspect_ratio" -d="M448 106v300h-384v-300h384zM448 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-384q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h384zM149 320v-64h-42v107h106v-43h-64zM405 256v-107h-106v43h64v64h42z" /> - <glyph glyph-name="uniE85C" unicode="assessment" -d="M363 149v86h-43v-86h43zM277 149v214h-42v-214h42zM192 149v150h-43v-150h43zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298z" /> - <glyph glyph-name="uniE85D" unicode="assignment" -d="M363 320v43h-214v-43h214zM363 235v42h-214v-42h214zM299 149v43h-150v-43h150zM256 448q-9 0 -15 -6t-6 -15t6 -15.5t15 -6.5t15 6.5t6 15.5t-6 15t-15 6zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h89 -q7 19 23 31t37 12t37 -12t23 -31h89z" /> - <glyph glyph-name="uniE85E" unicode="assignment_ind" -d="M384 107v30q0 29 -44 47.5t-84 18.5t-84 -18.5t-44 -47.5v-30h256zM256 363q-26 0 -45 -19t-19 -45t19 -45t45 -19t45 19t19 45t-19 45t-45 19zM256 448q-9 0 -15 -6t-6 -15t6 -15.5t15 -6.5t15 6.5t6 15.5t-6 15t-15 6zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30 -t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h89q7 19 23 31t37 12t37 -12t23 -31h89z" /> - <glyph glyph-name="uniE85F" unicode="assignment_late" -d="M256 405q9 0 15 6.5t6 15.5t-6 15t-15 6t-15 -6t-6 -15t6 -15.5t15 -6.5zM277 213v128h-42v-128h42zM277 128v43h-42v-43h42zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h89q7 19 23 31t37 12t37 -12t23 -31 -h89z" /> - <glyph glyph-name="uniE860" unicode="assignment_return" -d="M341 192v85h-85v64l-107 -106l107 -107v64h85zM256 448q-9 0 -15 -6t-6 -15t6 -15.5t15 -6.5t15 6.5t6 15.5t-6 15t-15 6zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h89q7 19 23 31t37 12t37 -12t23 -31h89 -z" /> - <glyph glyph-name="uniE861" unicode="assignment_returned" -d="M256 128l107 107h-64v85h-86v-85h-64zM256 448q-9 0 -15 -6t-6 -15t6 -15.5t15 -6.5t15 6.5t6 15.5t-6 15t-15 6zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h89q7 19 23 31t37 12t37 -12t23 -31h89z" /> - <glyph glyph-name="uniE862" unicode="assignment_turned_in" -d="M213 149l171 171l-30 30l-141 -140l-55 55l-30 -30zM256 448q-9 0 -15 -6t-6 -15t6 -15.5t15 -6.5t15 6.5t6 15.5t-6 15t-15 6zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h89q7 19 23 31t37 12t37 -12 -t23 -31h89z" /> - <glyph glyph-name="uniE863" unicode="autorenew" -d="M400 347q27 -41 27 -91q0 -70 -50.5 -120.5t-120.5 -50.5v-64l-85 86l85 85v-64q53 0 90.5 37.5t37.5 90.5q0 30 -15 60zM256 384q-53 0 -90.5 -37.5t-37.5 -90.5q0 -33 15 -60l-31 -31q-27 41 -27 91q0 70 50.5 120.5t120.5 50.5v64l85 -86l-85 -85v64z" /> - <glyph glyph-name="uniE864" unicode="backup" -d="M299 235h64l-107 106l-107 -106h64v-86h86v86zM413 298q41 -3 70 -33.5t29 -72.5q0 -44 -31.5 -75.5t-75.5 -31.5h-277q-53 0 -90.5 37.5t-37.5 90.5q0 49 33 85.5t81 41.5q21 39 59 63t83 24q58 0 102 -36.5t55 -92.5z" /> - <glyph glyph-name="uniE865" unicode="book" -d="M128 427v-171l53 32l54 -32v171h-107zM384 469q17 0 30 -12.5t13 -29.5v-342q0 -17 -13 -29.5t-30 -12.5h-256q-17 0 -30 12.5t-13 29.5v342q0 17 13 29.5t30 12.5h256z" /> - <glyph glyph-name="uniE866" unicode="bookmark" -d="M363 448q17 0 29.5 -13t12.5 -30v-341l-149 64l-149 -64v341q0 17 12.5 30t29.5 13h214z" /> - <glyph glyph-name="uniE867" unicode="bookmark_outline" -d="M363 128v277h-214v-277l107 47zM363 448q17 0 29.5 -13t12.5 -30v-341l-149 64l-149 -64v341q0 17 12.5 30t29.5 13h214z" /> - <glyph glyph-name="uniE868" unicode="bug_report" -d="M299 256v43h-86v-43h86zM299 171v42h-86v-42h86zM427 341v-42h-45q2 -14 2 -22v-21h43v-43h-43v-21q0 -7 -2 -21h45v-43h-60q-17 -29 -46.5 -46.5t-64.5 -17.5t-64.5 17.5t-46.5 46.5h-60v43h45q-2 14 -2 21v21h-43v43h43v21q0 8 2 22h-45v42h60q15 25 39 42l-35 35 -l30 30l47 -46q15 3 30 3t30 -3l47 46l30 -30l-35 -35q24 -17 39 -42h60z" /> - <glyph glyph-name="uniE869" unicode="build" -d="M484 107q7 -4 6.5 -13.5t-8.5 -16.5l-49 -49q-15 -15 -30 0l-194 194q-36 -15 -76.5 -6.5t-70.5 38.5q-32 32 -40 76t12 82l94 -92l64 64l-92 92q38 18 82 11t76 -39q30 -30 38.5 -70.5t-6.5 -76.5z" /> - <glyph glyph-name="uniE86A" unicode="cached" -d="M128 256h64l-85 -85l-86 85h64q0 70 50.5 120.5t120.5 50.5q50 0 91 -27l-31 -31q-27 15 -60 15q-53 0 -90.5 -37.5t-37.5 -90.5zM405 341l86 -85h-64q0 -70 -50.5 -120.5t-120.5 -50.5q-50 0 -91 27l31 31q27 -15 60 -15q53 0 90.5 37.5t37.5 90.5h-64z" /> - <glyph glyph-name="uniE86B" unicode="change_history" -d="M256 427l213 -342h-426zM256 346l-136 -218h272z" /> - <glyph glyph-name="uniE86C" unicode="check_circle" -d="M213 149l192 192l-30 31l-162 -162l-76 76l-30 -30zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE86D" unicode="chrome_reader_mode" -d="M448 107v277h-192v-277h192zM448 427q17 0 30 -13t13 -30v-277q0 -17 -13 -30t-30 -13h-384q-17 0 -30 13t-13 30v277q0 17 13 30t30 13h384zM277 203h150v-32h-150v32zM277 309h150v-32h-150v32zM277 256h150v-32h-150v32z" /> - <glyph glyph-name="uniE86E" unicode="class" -d="M128 427v-171l53 32l54 -32v171h-107zM384 469q17 0 30 -12.5t13 -29.5v-342q0 -17 -13 -29.5t-30 -12.5h-256q-17 0 -30 12.5t-13 29.5v342q0 17 13 29.5t30 12.5h256z" /> - <glyph glyph-name="uniE86F" unicode="code" -d="M311 158l99 98l-99 98l30 30l128 -128l-128 -128zM201 158l-30 -30l-128 128l128 128l30 -30l-99 -98z" /> - <glyph glyph-name="uniE870" unicode="credit_card" -d="M427 341v43h-342v-43h342zM427 128v128h-342v-128h342zM427 427q18 0 30 -12.5t12 -30.5v-256q0 -18 -12 -30.5t-30 -12.5h-342q-18 0 -30 12.5t-12 30.5v256q0 18 12 30.5t30 12.5h342z" /> - <glyph glyph-name="uniE871" unicode="dashboard" -d="M277 448h171v-128h-171v128zM277 64v213h171v-213h-171zM64 64v128h171v-128h-171zM64 235v213h171v-213h-171z" /> - <glyph glyph-name="uniE872" unicode="delete" -d="M405 427v-43h-298v43h74l22 21h106l22 -21h74zM128 107v256h256v-256q0 -17 -13 -30t-30 -13h-170q-17 0 -30 13t-13 30z" /> - <glyph glyph-name="uniE873" unicode="description" -d="M277 320h118l-118 117v-117zM341 213v43h-170v-43h170zM341 128v43h-170v-43h170zM299 469l128 -128v-256q0 -17 -13 -29.5t-30 -12.5h-256q-17 0 -30 12.5t-13 29.5l1 342q0 17 12.5 29.5t29.5 12.5h171z" /> - <glyph glyph-name="uniE875" unicode="dns" -d="M149 320q17 0 30 13t13 30t-13 29.5t-30 12.5t-29.5 -12.5t-12.5 -29.5t12.5 -30t29.5 -13zM427 448q9 0 15 -6t6 -15v-128q0 -9 -6 -15.5t-15 -6.5h-342q-9 0 -15 6.5t-6 15.5v128q0 9 6 15t15 6h342zM149 107q17 0 30 12.5t13 29.5t-13 30t-30 13t-29.5 -13t-12.5 -30 -t12.5 -29.5t29.5 -12.5zM427 235q9 0 15 -6.5t6 -15.5v-128q0 -9 -6 -15t-15 -6h-342q-9 0 -15 6t-6 15v128q0 9 6 15.5t15 6.5h342z" /> - <glyph glyph-name="uniE876" unicode="done" -d="M192 166l226 227l30 -30l-256 -256l-119 119l29 30z" /> - <glyph glyph-name="uniE877" unicode="done_all" -d="M9 226l30 30l119 -119l-30 -30zM474 393l31 -30l-256 -256l-120 119l31 30l89 -89zM384 363l-135 -136l-30 30l135 136z" /> - <glyph glyph-name="uniE878" unicode="event" -d="M405 107v234h-298v-234h298zM341 491h43v-43h21q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-18 0 -30.5 13t-12.5 30v298q0 17 12.5 30t30.5 13h21v43h43v-43h170v43zM363 256v-107h-107v107h107z" /> - <glyph glyph-name="uniE879" unicode="exit_to_app" -d="M405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-18 0 -30.5 13t-12.5 30v85h43v-85h298v298h-298v-85h-43v85q0 17 12.5 30t30.5 13h298zM215 179l55 56h-206v42h206l-55 56l30 30l107 -107l-107 -107z" /> - <glyph glyph-name="uniE87A" unicode="explore" -d="M303 209l81 175l-175 -81l-81 -175zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM256 279q10 0 16.5 -6.5t6.5 -16.5t-6.5 -16.5t-16.5 -6.5t-16.5 6.5t-6.5 16.5t6.5 16.5t16.5 6.5z" /> - <glyph glyph-name="uniE87B" unicode="extension" -d="M437 277q22 0 38 -15.5t16 -37.5t-16 -37.5t-38 -15.5h-32v-86q0 -17 -12.5 -29.5t-29.5 -12.5h-81v32q0 24 -17 40.5t-41 16.5t-41 -16.5t-17 -40.5v-32h-81q-17 0 -29.5 12.5t-12.5 29.5v81h32q24 0 40.5 17t16.5 41t-16.5 41t-40.5 17h-32v81q0 17 12.5 29.5 -t29.5 12.5h86v32q0 22 15.5 38t37.5 16t37.5 -16t15.5 -38v-32h86q17 0 29.5 -12.5t12.5 -29.5v-86h32z" /> - <glyph glyph-name="uniE87C" unicode="face" -d="M256 85q70 0 120.5 50.5t50.5 120.5q0 22 -7 48q-19 -5 -48 -5q-110 0 -174 90q-33 -80 -112 -115q-1 -6 -1 -18q0 -70 50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z -M320 261q11 0 19 -7.5t8 -18.5t-8 -19t-19 -8t-19 8t-8 19t8 18.5t19 7.5zM192 261q11 0 19 -7.5t8 -18.5t-8 -19t-19 -8t-19 8t-8 19t8 18.5t19 7.5z" /> - <glyph glyph-name="uniE87D" unicode="favorite" -d="M256 57l-31 28q-53 48 -77 71t-53.5 57t-40.5 61.5t-11 56.5q0 49 33.5 83t83.5 34q58 0 96 -45q38 45 96 45q50 0 83.5 -34t33.5 -83q0 -39 -26 -81t-56.5 -73t-99.5 -93z" /> - <glyph glyph-name="uniE87E" unicode="favorite_outline" -d="M258 116q48 43 71 65t50 52t37.5 53t10.5 45q0 32 -21.5 53t-53.5 21q-25 0 -46.5 -14t-29.5 -36h-40q-8 22 -29.5 36t-46.5 14q-32 0 -53.5 -21t-21.5 -53q0 -22 10.5 -45t37.5 -53t50 -52t71 -65l2 -2zM352 448q50 0 83.5 -34t33.5 -83q0 -29 -11 -56.5t-40.5 -61.5 -t-53.5 -57t-77 -71l-31 -28l-31 27q-69 62 -99.5 93t-56.5 73t-26 81q0 49 33.5 83t83.5 34q58 0 96 -45q38 45 96 45z" /> - <glyph glyph-name="uniE87F" unicode="feedback" -d="M277 299v85h-42v-85h42zM277 213v43h-42v-43h42zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-299l-85 -85v384q0 17 12.5 29.5t29.5 12.5h342z" /> - <glyph glyph-name="uniE880" unicode="find_in_page" -d="M192 235q0 26 19 45t45 19t45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45zM427 94l-82 82q18 28 18 59q0 44 -31.5 75t-75.5 31t-75.5 -31t-31.5 -75t31.5 -75.5t75.5 -31.5q31 0 59 18l94 -95q-11 -8 -25 -8h-256q-17 0 -30 12.5t-13 29.5l1 342q0 17 12.5 29.5 -t29.5 12.5h171l128 -128v-247z" /> - <glyph glyph-name="uniE881" unicode="find_replace" -d="M355 189l103 -104l-31 -31l-104 103q-40 -29 -88 -29q-62 0 -106 44l-44 -44v128h128l-54 -54q31 -31 76 -31q39 0 67.5 24t36.5 61h43q-4 -36 -27 -67zM235 384q-39 0 -68 -24t-37 -61h-43q8 54 50 91t98 37q61 0 105 -44l44 44v-128h-128l54 54q-31 31 -75 31z" /> - <glyph glyph-name="uniE882" unicode="flip_to_back" -d="M320 149v43h43v-43h-43zM320 405v43h43v-43h-43zM107 363v-256h256v-43h-256q-18 0 -30.5 13t-12.5 30v256h43zM405 149v43h43q0 -17 -13 -30t-30 -13zM405 320v43h43v-43h-43zM405 235v42h43v-42h-43zM192 149q-18 0 -30.5 13t-12.5 30h43v-43zM277 448v-43h-42v43h42z -M405 448q17 0 30 -13t13 -30h-43v43zM277 192v-43h-42v43h42zM192 448v-43h-43q0 17 12.5 30t30.5 13zM192 277v-42h-43v42h43zM192 363v-43h-43v43h43z" /> - <glyph glyph-name="uniE883" unicode="flip_to_front" -d="M149 64v43h43v-43h-43zM235 64v43h42v-43h-42zM405 192v213h-213v-213h213zM405 448q17 0 30 -13t13 -30v-213q0 -17 -13 -30t-30 -13h-213q-18 0 -30.5 13t-12.5 30v213q0 17 12.5 30t30.5 13h213zM320 64v43h43v-43h-43zM64 320v43h43v-43h-43zM107 64q-18 0 -30.5 13 -t-12.5 30h43v-43zM64 149v43h43v-43h-43zM64 235v42h43v-42h-43z" /> - <glyph glyph-name="uniE884" unicode="get_app" -d="M107 128h298v-43h-298v43zM405 320l-149 -149l-149 149h85v128h128v-128h85z" /> - <glyph glyph-name="uniE885" unicode="grade" -d="M256 144l-132 -80l35 150l-116 101l153 13l60 141l60 -141l153 -13l-116 -101l35 -150z" /> - <glyph glyph-name="uniE886" unicode="group_work" -d="M341 139q22 0 38 15.5t16 37.5t-16 37.5t-38 15.5t-37.5 -15.5t-15.5 -37.5t15.5 -37.5t37.5 -15.5zM203 341q0 -22 15.5 -37.5t37.5 -15.5t37.5 15.5t15.5 37.5t-15.5 38t-37.5 16t-37.5 -16t-15.5 -38zM171 139q22 0 37.5 15.5t15.5 37.5t-15.5 37.5t-37.5 15.5 -t-38 -15.5t-16 -37.5t16 -37.5t38 -15.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE887" unicode="help" -d="M321 272q20 20 20 48q0 35 -25 60t-60 25t-60 -25t-25 -60h42q0 17 13 30t30 13t30 -13t13 -30t-13 -30l-26 -27q-25 -27 -25 -60v-11h42q0 33 25 60zM277 107v42h-42v-42h42zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5 -t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE888" unicode="highlight_remove" -d="M256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM311 341l30 -30l-55 -55l55 -55 -l-30 -30l-55 55l-55 -55l-30 30l55 55l-55 55l30 30l55 -55z" /> - <glyph glyph-name="uniE889" unicode="history" -d="M256 341h32v-90l75 -45l-16 -26l-91 55v106zM277 448q79 0 135.5 -56t56.5 -136t-56.5 -136t-135.5 -56t-135 56l30 31q44 -44 105 -44q62 0 106 43.5t44 105.5t-44 105.5t-106 43.5t-105.5 -43.5t-43.5 -105.5h64l-86 -86l-2 3l-83 83h64q0 80 56.5 136t135.5 56z" /> - <glyph glyph-name="uniE88A" unicode="home" -d="M213 85h-106v171h-64l213 192l213 -192h-64v-171h-106v128h-86v-128z" /> - <glyph glyph-name="uniE88B" unicode="hourglass_empty" -d="M256 267l85 85v75h-170v-75zM341 160l-85 85l-85 -85v-75h170v75zM128 469h256v-128l-85 -85l85 -85v-128h-256v128l85 85l-85 85v128z" /> - <glyph glyph-name="uniE88C" unicode="hourglass_full" -d="M128 469h256v-128l-85 -85l85 -85v-128h-256v128l85 85l-85 85v128z" /> - <glyph glyph-name="uniE88D" unicode="https" -d="M322 341v43q0 27 -19.5 46.5t-46.5 19.5t-46.5 -19.5t-19.5 -46.5v-43h132zM256 149q17 0 30 13t13 30t-13 30t-30 13t-30 -13t-13 -30t13 -30t30 -13zM384 341q17 0 30 -12.5t13 -29.5v-214q0 -17 -13 -29.5t-30 -12.5h-256q-17 0 -30 12.5t-13 29.5v214q0 17 13 29.5 -t30 12.5h21v43q0 44 31.5 75.5t75.5 31.5t75.5 -31.5t31.5 -75.5v-43h21z" /> - <glyph glyph-name="uniE88E" unicode="info" -d="M277 320v43h-42v-43h42zM277 149v128h-42v-128h42zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE88F" unicode="info_outline" -d="M235 320v43h42v-43h-42zM256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM235 149 -v128h42v-128h-42z" /> - <glyph glyph-name="uniE890" unicode="input" -d="M235 171v64h-214v42h214v64l85 -85zM448 448q17 0 30 -12.5t13 -30.5v-299q0 -17 -13 -29.5t-30 -12.5h-384q-17 0 -30 12.5t-13 29.5v86h43v-86h384v300h-384v-86h-43v85q0 17 13 30t30 13h384z" /> - <glyph glyph-name="uniE891" unicode="invert_colors_on" -d="M256 94v309l-90 -90q-38 -38 -38 -91q0 -52 38 -90t90 -38zM377 343q50 -50 50 -120.5t-50 -120.5t-121 -50t-121 50t-50 120.5t50 120.5l121 121z" /> - <glyph glyph-name="uniE892" unicode="label" -d="M376 387l93 -131l-93 -131q-13 -18 -35 -18h-234q-17 0 -30 12.5t-13 29.5v214q0 17 13 29.5t30 12.5h234q22 0 35 -18z" /> - <glyph glyph-name="uniE893" unicode="label_outline" -d="M341 149l76 107l-76 107h-234v-214h234zM376 387l93 -131l-93 -131q-13 -18 -35 -18h-234q-17 0 -30 12.5t-13 29.5v214q0 17 13 29.5t30 12.5h234q22 0 35 -18z" /> - <glyph glyph-name="uniE894" unicode="language" -d="M349 213h72q6 28 6 43t-6 43h-72q3 -21 3 -43t-3 -43zM311 95q61 20 93 76h-63q-10 -40 -30 -76zM306 213q3 21 3 43t-3 43h-100q-3 -21 -3 -43t3 -43h100zM256 86q28 41 41 85h-82q13 -44 41 -85zM171 341q10 40 30 76q-61 -20 -93 -76h63zM108 171q32 -56 93 -76 -q-20 36 -30 76h-63zM91 213h72q-3 21 -3 43t3 43h-72q-6 -28 -6 -43t6 -43zM256 426q-28 -41 -41 -85h82q-13 44 -41 85zM404 341q-32 56 -93 76q20 -36 30 -76h63zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5 -t150.5 62.5z" /> - <glyph glyph-name="uniE895" unicode="launch" -d="M299 448h149v-149h-43v76l-209 -209l-30 30l209 209h-76v43zM405 107v149h43v-149q0 -17 -13 -30t-30 -13h-298q-18 0 -30.5 13t-12.5 30v298q0 17 12.5 30t30.5 13h149v-43h-149v-298h298z" /> - <glyph glyph-name="uniE896" unicode="list" -d="M149 363h299v-43h-299v43zM149 149v43h299v-43h-299zM149 235v42h299v-42h-299zM64 320v43h43v-43h-43zM64 149v43h43v-43h-43zM64 235v42h43v-42h-43z" /> - <glyph glyph-name="uniE897" unicode="lock" -d="M322 341v43q0 27 -19.5 46.5t-46.5 19.5t-46.5 -19.5t-19.5 -46.5v-43h132zM256 149q17 0 30 13t13 30t-13 30t-30 13t-30 -13t-13 -30t13 -30t30 -13zM384 341q17 0 30 -12.5t13 -29.5v-214q0 -17 -13 -29.5t-30 -12.5h-256q-17 0 -30 12.5t-13 29.5v214q0 17 13 29.5 -t30 12.5h21v43q0 44 31.5 75.5t75.5 31.5t75.5 -31.5t31.5 -75.5v-43h21z" /> - <glyph glyph-name="uniE898" unicode="lock_open" -d="M384 85v214h-256v-214h256zM384 341q17 0 30 -12.5t13 -29.5v-214q0 -17 -13 -29.5t-30 -12.5h-256q-17 0 -30 12.5t-13 29.5v214q0 17 13 29.5t30 12.5h194v43q0 27 -19.5 46.5t-46.5 19.5t-46.5 -19.5t-19.5 -46.5h-41q0 44 31.5 75.5t75.5 31.5t75.5 -31.5t31.5 -75.5 -v-43h21zM256 149q-17 0 -30 13t-13 30t13 30t30 13t30 -13t13 -30t-13 -30t-30 -13z" /> - <glyph glyph-name="uniE899" unicode="lock_outline" -d="M384 85v214h-256v-214h256zM190 384v-43h132v43q0 27 -19.5 46.5t-46.5 19.5t-46.5 -19.5t-19.5 -46.5zM384 341q17 0 30 -12.5t13 -29.5v-214q0 -17 -13 -29.5t-30 -12.5h-256q-17 0 -30 12.5t-13 29.5v214q0 17 13 29.5t30 12.5h21v43q0 44 31.5 75.5t75.5 31.5 -t75.5 -31.5t31.5 -75.5v-43h21zM256 149q-17 0 -30 13t-13 30t13 30t30 13t30 -13t13 -30t-13 -30t-30 -13z" /> - <glyph glyph-name="uniE89A" unicode="loyalty" -d="M368 186q16 16 16 38t-15.5 37.5t-37.5 15.5q-23 0 -38 -15l-16 -16l-15 16q-15 15 -38 15q-22 0 -37.5 -15.5t-15.5 -37.5q0 -23 15 -38l91 -91zM117 363q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5t9.5 -22.5t22.5 -9.5zM457 265 -q12 -12 12 -30t-12 -30l-150 -150q-12 -12 -30 -12t-30 12l-192 192q-12 12 -12 30v150q0 17 12.5 29.5t29.5 12.5h150q18 0 30 -12z" /> - <glyph glyph-name="uniE89B" unicode="markunread_mailbox" -d="M427 384q17 0 29.5 -13t12.5 -30v-256q0 -17 -12.5 -29.5t-29.5 -12.5h-342q-17 0 -29.5 12.5t-12.5 29.5v256q0 17 12.5 30t29.5 13h43v128h171v-85h-128v-171h42v128h214z" /> - <glyph glyph-name="uniE89C" unicode="note_add" -d="M277 320h118l-118 117v-117zM341 171v42h-64v64h-42v-64h-64v-42h64v-64h42v64h64zM299 469l128 -128v-256q0 -17 -13 -29.5t-30 -12.5h-256q-17 0 -30 12.5t-13 29.5l1 342q0 17 12.5 29.5t29.5 12.5h171z" /> - <glyph glyph-name="uniE89D" unicode="open_in_browser" -d="M256 299l85 -86h-64v-128h-42v128h-64zM405 427q18 0 30.5 -13t12.5 -30v-256q0 -17 -13 -30t-30 -13h-85v43h85v213h-298v-213h85v-43h-85q-18 0 -30.5 13t-12.5 30v256q0 17 12.5 30t30.5 13h298z" /> - <glyph glyph-name="uniE89E" unicode="open_in_new" -d="M299 448h149v-149h-43v76l-209 -209l-30 30l209 209h-76v43zM405 107v149h43v-149q0 -17 -13 -30t-30 -13h-298q-18 0 -30.5 13t-12.5 30v298q0 17 12.5 30t30.5 13h149v-43h-149v-298h298z" /> - <glyph glyph-name="uniE89F" unicode="open_with" -d="M299 192v-64h64l-107 -107l-107 107h64v64h86zM491 256l-107 -107v64h-64v86h64v64zM192 299v-86h-64v-64l-107 107l107 107v-64h64zM213 320v64h-64l107 107l107 -107h-64v-64h-86z" /> - <glyph glyph-name="uniE8A0" unicode="pageview" -d="M358 124l30 30l-62 62q15 25 15 51q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28q26 0 51 15zM427 427q17 0 29.5 -13t12.5 -30v-256q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 30t29.5 13h342zM245 320q22 0 38 -15.5t16 -37.5 -t-16 -38t-38 -16t-37.5 16t-15.5 38t15.5 37.5t37.5 15.5z" /> - <glyph glyph-name="uniE8A1" unicode="payment" -d="M427 341v43h-342v-43h342zM427 128v128h-342v-128h342zM427 427q18 0 30 -12.5t12 -30.5v-256q0 -18 -12 -30.5t-30 -12.5h-342q-18 0 -30 12.5t-12 30.5v256q0 18 12 30.5t30 12.5h342z" /> - <glyph glyph-name="uniE8A2" unicode="perm_camera_mic" -d="M299 235v85q0 17 -13 30t-30 13t-30 -13t-13 -30v-85q0 -17 13 -30t30 -13t30 13t13 30zM427 405q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-150v45q45 8 76 43.5t31 82.5h-43q0 -35 -25 -60.5t-60 -25.5t-60 25.5t-25 60.5h-43q0 -47 31 -82.5 -t76 -43.5v-45h-150q-17 0 -29.5 13t-12.5 30v256q0 17 12.5 29.5t29.5 12.5h68l39 43h128l39 -43h68z" /> - <glyph glyph-name="uniE8A3" unicode="perm_contact_calendar" -d="M384 128v21q0 29 -44 47.5t-84 18.5t-84 -18.5t-44 -47.5v-21h256zM256 384q-26 0 -45 -19t-19 -45t19 -45t45 -19t45 19t19 45t-19 45t-45 19zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-18 0 -30.5 13t-12.5 30v298q0 17 12.5 30t30.5 13h21v43h43 -v-43h170v43h43v-43h21z" /> - <glyph glyph-name="uniE8A4" unicode="perm_data_setting" -d="M405 75q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5t9.5 -22.5t22.5 -9.5zM484 96l23 -17q3 -3 1 -7l-21 -37q-3 -5 -7 -3l-26 11q-3 -3 -18 -10l-4 -29q0 -4 -6 -4h-42q-6 0 -6 4l-4 29q-8 4 -18 10l-26 -11q-5 -2 -7 3l-21 37q-2 4 1 7l23 17 -q0 1 -0.5 5t-0.5 6t0.5 5.5t0.5 4.5l-23 18q-3 3 -1 7l21 37q2 4 7 2l26 -11q12 8 18 11l4 28q0 4 6 4h42q6 0 6 -4l4 -28q4 -2 18 -11l26 11q5 2 7 -2l21 -37q2 -4 -1 -7l-23 -18q1 -3 1 -10q0 -2 -0.5 -6t-0.5 -5zM405 267q-66 0 -113 -47t-47 -113q0 -8 2 -22h-247 -l427 427l-1 -247q-14 2 -21 2z" /> - <glyph glyph-name="uniE8A5" unicode="perm_device_information" -d="M363 107v298h-214v-298h214zM363 490q17 0 29.5 -12.5t12.5 -29.5v-384q0 -17 -12.5 -30t-29.5 -13h-214q-17 0 -29.5 13t-12.5 30v384q0 17 12.5 30t29.5 13zM277 277v-128h-42v128h42zM277 363v-43h-42v43h42z" /> - <glyph glyph-name="uniE8A6" unicode="perm_identity" -d="M256 235q32 0 70 -9t69.5 -30t31.5 -47v-64h-342v64q0 26 31.5 47t69.5 30t70 9zM256 427q35 0 60 -25.5t25 -60.5t-25 -60t-60 -25t-60 25t-25 60t25 60.5t60 25.5zM256 194q-44 0 -87 -16.5t-43 -28.5v-23h260v23q0 12 -43 28.5t-87 16.5zM256 386q-19 0 -32 -13 -t-13 -32t13 -31.5t32 -12.5t32 12.5t13 31.5t-13 32t-32 13z" /> - <glyph glyph-name="uniE8A7" unicode="perm_media" -d="M149 192h299l-75 96l-53 -64l-75 96zM469 427q17 0 30 -13t13 -30v-213q0 -17 -13 -30t-30 -13h-341q-17 0 -30 13t-13 30l1 256q0 17 12.5 29.5t29.5 12.5h128l43 -42h170zM43 384v-299h384v-42h-384q-17 0 -30 12.5t-13 29.5v299h43z" /> - <glyph glyph-name="uniE8A8" unicode="perm_phone_msg" -d="M256 448h192v-149h-128l-64 -64v213zM427 181q9 0 15 -6t6 -15v-75q0 -9 -6 -15t-15 -6q-150 0 -256.5 106.5t-106.5 256.5q0 9 6 15t15 6h75q9 0 15 -6t6 -15q0 -40 12 -76q4 -13 -5 -22l-47 -47q48 -93 141 -141l47 47q9 9 22 5q36 -12 76 -12z" /> - <glyph glyph-name="uniE8A9" unicode="perm_scan_wifi" -d="M235 341h42v43h-42v-43zM277 171v128h-42v-128h42zM256 448q136 0 256 -91l-256 -314l-256 315q118 90 256 90z" /> - <glyph glyph-name="uniE8AA" unicode="picture_in_picture" -d="M448 106v300h-384v-300h384zM448 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-384q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h384zM405 363v-128h-170v128h170z" /> - <glyph glyph-name="uniE8AB" unicode="polymer" -d="M405 427l96 -171l-96 -171h-85l96 171l-56 99l-168 -270h-85l-96 171l96 171h85l-96 -171l56 -99l168 270h85z" /> - <glyph glyph-name="uniE8AC" unicode="power_settings_new" -d="M380 402q68 -58 68 -146q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 88 68 146l30 -30q-55 -45 -55 -116q0 -62 43.5 -105.5t105.5 -43.5t105.5 43.5t43.5 105.5q0 71 -55 115zM277 448v-213h-42v213h42z" /> - <glyph glyph-name="uniE8AD" unicode="print" -d="M384 448v-85h-256v85h256zM405 256q9 0 15.5 6t6.5 15t-6.5 15.5t-15.5 6.5t-15 -6.5t-6 -15.5t6 -15t15 -6zM341 107v106h-170v-106h170zM405 341q26 0 45 -19t19 -45v-128h-85v-85h-256v85h-85v128q0 26 19 45t45 19h298z" /> - <glyph glyph-name="uniE8AE" unicode="query_builder" -d="M267 363v-112l96 -57l-16 -27l-112 68v128h32zM256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5 -t150.5 62.5z" /> - <glyph glyph-name="uniE8AF" unicode="question_answer" -d="M363 256q0 -9 -6.5 -15t-15.5 -6h-213l-85 -86v299q0 9 6 15t15 6h277q9 0 15.5 -6t6.5 -15v-192zM448 384q9 0 15 -6t6 -15v-320l-85 85h-235q-9 0 -15 6t-6 15v43h277v192h43z" /> - <glyph glyph-name="uniE8B0" unicode="receipt" -d="M64 43v426l32 -32l32 32l32 -32l32 32l32 -32l32 32l32 -32l32 32l32 -32l32 32l32 -32l32 32v-426l-32 32l-32 -32l-32 32l-32 -32l-32 32l-32 -32l-32 32l-32 -32l-32 32l-32 -32l-32 32zM384 320v43h-256v-43h256zM384 235v42h-256v-42h256zM384 149v43h-256v-43h256z -" /> - <glyph glyph-name="uniE8B1" unicode="redeem" -d="M427 213v128h-109l45 -60l-35 -25q-64 87 -72 98q-8 -11 -72 -98l-35 25l45 60h-109v-128h342zM427 107v42h-342v-42h342zM192 427q-9 0 -15 -6.5t-6 -15.5t6 -15t15 -6t15 6t6 15t-6 15.5t-15 6.5zM320 427q-9 0 -15 -6.5t-6 -15.5t6 -15t15 -6t15 6t6 15t-6 15.5 -t-15 6.5zM427 384q18 0 30 -12.5t12 -30.5v-234q0 -18 -12 -30.5t-30 -12.5h-342q-18 0 -30 12.5t-12 30.5v234q0 18 12 30.5t30 12.5h47q-4 14 -4 21q0 26 19 45t45 19q33 0 53 -28l11 -15l11 15q20 28 53 28q26 0 45 -19t19 -45q0 -7 -4 -21h47z" /> - <glyph glyph-name="uniE8B2" unicode="report_problem" -d="M277 213v86h-42v-86h42zM277 128v43h-42v-43h42zM21 64l235 405l235 -405h-470z" /> - <glyph glyph-name="uniE8B3" unicode="restore" -d="M256 341h32v-90l75 -45l-16 -26l-91 55v106zM277 448q79 0 135.5 -56t56.5 -136t-56.5 -136t-135.5 -56t-135 56l30 31q44 -44 105 -44q62 0 106 43.5t44 105.5t-44 105.5t-106 43.5t-105.5 -43.5t-43.5 -105.5h64l-86 -86l-2 3l-83 83h64q0 80 56.5 136t135.5 56z" /> - <glyph glyph-name="uniE8B4" unicode="room" -d="M256 267q22 0 37.5 15.5t15.5 37.5t-15.5 37.5t-37.5 15.5t-37.5 -15.5t-15.5 -37.5t15.5 -37.5t37.5 -15.5zM256 469q62 0 105.5 -43.5t43.5 -105.5q0 -31 -15.5 -71t-37.5 -75t-43.5 -65.5t-36.5 -48.5l-16 -17q-6 7 -16 18.5t-36 46t-45.5 67t-35.5 73.5t-16 72 -q0 62 43.5 105.5t105.5 43.5z" /> - <glyph glyph-name="uniE8B5" unicode="schedule" -d="M267 363v-112l96 -57l-16 -27l-112 68v128h32zM256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5 -t150.5 62.5z" /> - <glyph glyph-name="uniE8B6" unicode="search" -d="M203 213q40 0 68 28t28 68t-28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28zM331 213l106 -106l-32 -32l-106 106v17l-6 6q-38 -33 -90 -33q-58 0 -98.5 40t-40.5 98t40.5 98.5t98.5 40.5t98 -40.5t40 -98.5q0 -52 -33 -90l6 -6h17z" /> - <glyph glyph-name="uniE8B8" unicode="settings" -d="M256 181q31 0 53 22t22 53t-22 53t-53 22t-53 -22t-22 -53t22 -53t53 -22zM415 235l45 -35q7 -5 2 -14l-43 -74q-4 -7 -13 -4l-53 21q-21 -15 -36 -21l-8 -56q-2 -9 -10 -9h-86q-8 0 -10 9l-8 56q-19 8 -36 21l-53 -21q-9 -3 -13 4l-43 74q-5 9 2 14l45 35q-1 7 -1 21 -t1 21l-45 35q-7 5 -2 14l43 74q4 7 13 4l53 -21q21 15 36 21l8 56q2 9 10 9h86q8 0 10 -9l8 -56q19 -8 36 -21l53 21q9 3 13 -4l43 -74q5 -9 -2 -14l-45 -35q1 -7 1 -21t-1 -21z" /> - <glyph glyph-name="uniE8B9" unicode="settings_applications" -d="M368 256q0 10 -1 15l32 24q5 4 1 10l-30 52q-3 5 -9 3l-37 -15q-13 10 -25 15l-6 39q-2 6 -7 6h-60q-6 0 -7 -6l-6 -40q-16 -7 -25 -14l-37 15q-5 2 -9 -4l-30 -51q-4 -6 1 -10l32 -24q-1 -5 -1 -15t1 -15l-32 -24q-5 -4 -1 -10l30 -52q3 -5 9 -3l37 15q13 -10 25 -15 -l6 -39q2 -6 7 -6h60q6 0 7 6l6 40q16 7 25 14l37 -15q5 -2 9 4l30 51q4 6 -1 10l-32 24q1 5 1 15zM405 448q18 0 30.5 -13t12.5 -30v-298q0 -17 -12.5 -30t-30.5 -13h-298q-18 0 -30.5 13t-12.5 30v298q0 17 12.5 30t30.5 13h298zM256 299q17 0 30 -13t13 -30t-13 -30 -t-30 -13t-30 13t-13 30t13 30t30 13z" /> - <glyph glyph-name="uniE8BA" unicode="settings_backup_restore" -d="M256 448q80 0 136 -56t56 -136t-56 -136t-136 -56q-66 0 -117 40l30 30q40 -27 87 -27q62 0 105.5 43.5t43.5 105.5t-43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5h64l-86 -85l-85 85h64q0 80 56 136t136 56zM299 256q0 -17 -13 -30t-30 -13t-30 13t-13 30t13 30 -t30 13t30 -13t13 -30z" /> - <glyph glyph-name="uniE8BB" unicode="settings_bluetooth" -d="M317 207l-40 40v-80zM277 430v-80l40 40zM378 390l-92 -91l92 -92l-122 -122h-21v162l-98 -98l-30 30l119 120l-119 119l30 30l98 -98v162h21zM320 0v43h43v-43h-43zM149 0v43h43v-43h-43zM235 0v43h42v-43h-42z" /> - <glyph glyph-name="uniE8BC" unicode="settings_cell" -d="M341 171v256h-170v-256h170zM341 512q17 0 30 -13t13 -30v-341q0 -17 -13 -30t-30 -13h-170q-17 0 -30 13t-13 30v341q0 17 13 30t30 13h170zM320 0v43h43v-43h-43zM235 0v43h42v-43h-42zM149 0v43h43v-43h-43z" /> - <glyph glyph-name="uniE8BD" unicode="settings_brightness" -d="M256 320v-128q26 0 45 19t19 45t-19 45t-45 19zM171 171v53l-32 32l32 32v53h53l32 32l32 -32h53v-53l32 -32l-32 -32v-53h-53l-32 -32l-32 32h-53zM448 106v300h-384v-300h384zM448 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-384q-17 0 -30 13t-13 30v298 -q0 17 13 30t30 13h384z" /> - <glyph glyph-name="uniE8BE" unicode="settings_ethernet" -d="M379 395l116 -139l-116 -139l-33 27l93 112l-93 112zM235 235v42h42v-42h-42zM363 277v-42h-43v42h43zM149 235v42h43v-42h-43zM166 368l-93 -112l93 -112l-33 -27l-116 139l116 139z" /> - <glyph glyph-name="uniE8BF" unicode="settings_input_antenna" -d="M256 491q97 0 166 -69t69 -166h-43q0 80 -56 136t-136 56t-136 -56t-56 -136h-43q0 97 69 166t166 69zM277 207v-70l73 -73l-30 -30l-64 64l-64 -64l-30 30l73 73v70q-32 13 -32 49q0 22 15.5 37.5t37.5 15.5t37.5 -15.5t15.5 -37.5q0 -36 -32 -49zM256 405 -q62 0 105.5 -43.5t43.5 -105.5h-42q0 44 -31.5 75.5t-75.5 31.5t-75.5 -31.5t-31.5 -75.5h-42q0 62 43.5 105.5t105.5 43.5z" /> - <glyph glyph-name="uniE8C0" unicode="settings_input_component" -d="M363 171v42h128v-42q0 -21 -12 -37t-31 -23v-90h-43v90q-42 15 -42 60zM277 469v-85h43v-128h-128v128h43v85q0 9 6 15.5t15 6.5t15 -6.5t6 -15.5zM448 384h43v-128h-128v128h42v85q0 9 6.5 15.5t15.5 6.5t15 -6.5t6 -15.5v-85zM21 171v42h128v-42q0 -45 -42 -60v-90h-43 -v90q-19 7 -31 23t-12 37zM192 171v42h128v-42q0 -21 -12 -37t-31 -23v-90h-42v90q-19 7 -31 23t-12 37zM107 469v-85h42v-128h-128v128h43v85q0 9 6 15.5t15 6.5t15.5 -6.5t6.5 -15.5z" /> - <glyph glyph-name="uniE8C1" unicode="settings_input_composite" -d="M363 171v42h128v-42q0 -21 -12 -37t-31 -23v-90h-43v90q-42 15 -42 60zM277 469v-85h43v-128h-128v128h43v85q0 9 6 15.5t15 6.5t15 -6.5t6 -15.5zM448 384h43v-128h-128v128h42v85q0 9 6.5 15.5t15.5 6.5t15 -6.5t6 -15.5v-85zM21 171v42h128v-42q0 -45 -42 -60v-90h-43 -v90q-19 7 -31 23t-12 37zM192 171v42h128v-42q0 -21 -12 -37t-31 -23v-90h-42v90q-19 7 -31 23t-12 37zM107 469v-85h42v-128h-128v128h43v85q0 9 6 15.5t15 6.5t15.5 -6.5t6.5 -15.5z" /> - <glyph glyph-name="uniE8C2" unicode="settings_input_hdmi" -d="M171 427v-64h42v42h22v-42h42v42h22v-42h42v64h-170zM384 363h21v-128l-64 -128v-64h-170v64l-64 128v128h21v64q0 17 13 29.5t30 12.5h170q17 0 30 -12.5t13 -29.5v-64z" /> - <glyph glyph-name="uniE8C3" unicode="settings_input_svideo" -d="M331 192q13 0 22.5 -9t9.5 -23t-9.5 -23t-22.5 -9t-22.5 9t-9.5 23t9.5 23t22.5 9zM373 299q13 0 22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5zM256 64q80 0 136 56t56 136t-56 136t-136 56t-136 -56t-56 -136t56 -136t136 -56z -M256 491q97 0 166 -69t69 -166t-69 -166t-166 -69t-166 69t-69 166t69 166t166 69zM181 192q13 0 22.5 -9t9.5 -23t-9.5 -23t-22.5 -9t-22.5 9t-9.5 23t9.5 23t22.5 9zM320 373q0 -13 -9 -22.5t-23 -9.5h-64q-14 0 -23 9.5t-9 22.5t9 22.5t23 9.5h64q14 0 23 -9.5t9 -22.5z -M171 267q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5z" /> - <glyph glyph-name="uniE8C4" unicode="settings_overscan" -d="M448 106v300h-384v-300h384zM448 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-384q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h384zM299 171l-43 -54l-43 54h86zM128 299v-86l-53 43zM384 299l53 -43l-53 -43v86zM256 395l43 -54h-86z" /> - <glyph glyph-name="uniE8C5" unicode="settings_phone" -d="M405 320h43v-43h-43v43zM427 181q9 0 15 -6t6 -15v-75q0 -9 -6 -15t-15 -6q-150 0 -256.5 106.5t-106.5 256.5q0 9 6 15t15 6h75q9 0 15 -6t6 -15q0 -40 12 -76q4 -13 -5 -22l-47 -47q48 -93 141 -141l47 47q9 9 22 5q36 -12 76 -12zM363 320v-43h-43v43h43zM277 320v-43 -h-42v43h42z" /> - <glyph glyph-name="uniE8C6" unicode="settings_power" -d="M320 0v43h43v-43h-43zM353 417q74 -52 74 -140q0 -70 -50 -120t-121 -50t-121 50t-50 120q0 88 74 140l30 -30q-61 -38 -61 -110q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5q0 72 -62 109zM277 469v-213h-42v213h42zM235 0v43h42v-43h-42zM149 0v43h43v-43h-43z -" /> - <glyph glyph-name="uniE8C7" unicode="settings_remote" -d="M256 512q99 0 166 -69l-30 -30q-56 56 -136 56t-136 -56l-30 30q69 69 166 69zM150 383q44 44 106 44t106 -44l-30 -30q-31 31 -76 31t-76 -31zM256 192q17 0 30 13t13 30t-13 29.5t-30 12.5t-30 -12.5t-13 -29.5t13 -30t30 -13zM320 320q9 0 15 -6t6 -15v-256 -q0 -9 -6 -15.5t-15 -6.5h-128q-9 0 -15 6.5t-6 15.5v256q0 9 6 15t15 6h128z" /> - <glyph glyph-name="uniE8C8" unicode="settings_voice" -d="M405 299q0 -54 -37.5 -95t-90.5 -49v-70h-42v70q-53 8 -90.5 49t-37.5 95h36q0 -47 33.5 -78t79.5 -31t79.5 31t33.5 78h36zM320 0v43h43v-43h-43zM235 0v43h42v-43h-42zM256 235q-26 0 -45 19t-19 45v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -26 -19 -45t-45 -19z -M149 0v43h43v-43h-43z" /> - <glyph glyph-name="uniE8C9" unicode="shop" -d="M192 128l160 107l-160 85v-192zM213 427v-43h86v43h-86zM341 384h128v-277q0 -18 -12 -30.5t-30 -12.5h-342q-18 0 -30 12.5t-12 30.5v277h128v43q0 18 12 30t30 12h86q18 0 30 -12t12 -30v-43z" /> - <glyph glyph-name="uniE8CA" unicode="shop_two" -d="M256 192l117 85l-117 64v-149zM256 448v-43h85v43h-85zM384 405h107v-234q0 -18 -12.5 -30.5t-30.5 -12.5h-299q-18 0 -30 12.5t-12 30.5v234h106v43q0 18 12.5 30.5t30.5 12.5h85q18 0 30.5 -12.5t12.5 -30.5v-43zM64 320v-235h341q0 -18 -12 -30t-30 -12h-299 -q-18 0 -30.5 12t-12.5 30v235h43z" /> - <glyph glyph-name="uniE8CB" unicode="shopping_basket" -d="M256 149q17 0 30 13t13 30t-13 30t-30 13t-30 -13t-13 -30t13 -30t30 -13zM192 320h128l-64 94zM367 320h102q9 0 15.5 -6t6.5 -15q-10 -40 -30 -112.5t-25 -91.5q-9 -31 -41 -31h-278q-32 0 -41 31l-54 198q-1 2 -1 6q0 9 6.5 15t15.5 6h102l93 140q6 9 18 9t18 -9z" /> - <glyph glyph-name="uniE8CC" unicode="shopping_cart" -d="M363 128q17 0 29.5 -13t12.5 -30t-12.5 -29.5t-29.5 -12.5t-30 12.5t-13 29.5t13 30t30 13zM21 469h70l20 -42h316q9 0 15 -6.5t6 -15.5q0 -5 -3 -10l-76 -138q-12 -22 -37 -22h-159l-19 -35l-1 -3q0 -5 5 -5h247v-43h-256q-17 0 -29.5 13t-12.5 30q0 10 5 20l29 53 -l-77 162h-43v42zM149 128q17 0 30 -13t13 -30t-13 -29.5t-30 -12.5t-29.5 12.5t-12.5 29.5t12.5 30t29.5 13z" /> - <glyph glyph-name="uniE8CD" unicode="speaker_notes" -d="M384 341v43h-171v-43h171zM384 277v43h-171v-43h171zM320 213v43h-107v-43h107zM171 341v43h-43v-43h43zM171 277v43h-43v-43h43zM171 213v43h-43v-43h43zM427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-299l-85 -85v384q0 17 12.5 29.5 -t29.5 12.5h342z" /> - <glyph glyph-name="uniE8CE" unicode="spellcheck" -d="M461 265l30 -30l-203 -203l-108 109l30 30l78 -79zM137 277h88l-44 118zM266 171l-25 64h-120l-24 -64h-45l109 277h40l109 -277h-44z" /> - <glyph glyph-name="uniE8D0" unicode="stars" -d="M346 128l-24 103l80 69l-105 9l-41 96l-41 -97l-105 -8l80 -69l-24 -103l90 54zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE8D1" unicode="store" -d="M256 128v85h-128v-85h128zM448 213h-21v-128h-43v128h-85v-128h-214v128h-21v43l21 107h342l21 -107v-43zM427 427v-43h-342v43h342z" /> - <glyph glyph-name="uniE8D2" unicode="subject" -d="M85 405h342v-42h-342v42zM85 192v43h342v-43h-342zM427 320v-43h-342v43h342zM299 149v-42h-214v42h214z" /> - <glyph glyph-name="uniE8D3" unicode="supervisor_account" -d="M192 235q22 0 51 -6q-51 -28 -51 -74v-48h-149v53q0 23 27.5 41t60.5 26t61 8zM352 213q37 0 77 -16t40 -42v-48h-234v48q0 26 40 42t77 16zM192 277q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM352 256q-22 0 -37.5 15.5t-15.5 37.5t15.5 38 -t37.5 16t37.5 -16t15.5 -38t-15.5 -37.5t-37.5 -15.5z" /> - <glyph glyph-name="uniE8D4" unicode="swap_horiz" -d="M448 320l-85 -85v64h-150v42h150v64zM149 277v-64h150v-42h-150v-64l-85 85z" /> - <glyph glyph-name="uniE8D5" unicode="swap_vert" -d="M192 448l85 -85h-64v-150h-42v150h-64zM341 149h64l-85 -85l-85 85h64v150h42v-150z" /> - <glyph glyph-name="uniE8D6" unicode="swap_vertical_circle" -d="M373 192h-53v85h-43v-85h-53l75 -75zM139 320h53v-85h43v85h53l-75 75zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE8D7" unicode="system_update_alt" -d="M448 437q17 0 30 -12.5t13 -29.5v-299q0 -17 -13 -30t-30 -13h-384q-17 0 -30 13t-13 30v299q0 17 13 29.5t30 12.5h128v-42h-128v-299h384v299h-128v42h128zM256 160l-85 85h64v192h42v-192h64z" /> - <glyph glyph-name="uniE8D8" unicode="tab" -d="M448 107v213h-171v85h-213v-298h384zM448 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-384q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h384z" /> - <glyph glyph-name="uniE8D9" unicode="tab_unselected" -d="M363 64v43h42v-43h-42zM277 64v43h43v-43h-43zM448 235v42h43v-42h-43zM448 64v43h43q0 -17 -13 -30t-30 -13zM107 405v43h42v-43h-42zM107 64v43h42v-43h-42zM192 405v43h43v-43h-43zM448 149v43h43v-43h-43zM448 448q17 0 30 -13t13 -30v-85h-214v128h171zM64 64 -q-17 0 -30 13t-13 30h43v-43zM21 149v43h43v-43h-43zM192 64v43h43v-43h-43zM21 405q0 17 13 30t30 13v-43h-43zM21 235v42h43v-42h-43zM21 320v43h43v-43h-43z" /> - <glyph glyph-name="uniE8DA" unicode="theaters" -d="M384 320v43h-43v-43h43zM384 235v42h-43v-42h43zM384 149v43h-43v-43h43zM171 320v43h-43v-43h43zM171 235v42h-43v-42h43zM171 149v43h-43v-43h43zM384 448h43v-384h-43v43h-43v-43h-170v43h-43v-43h-43v384h43v-43h43v43h170v-43h43v43z" /> - <glyph glyph-name="uniE8DB" unicode="thumb_down" -d="M405 448h86v-256h-86v256zM320 448q17 0 30 -13t13 -30v-213q0 -17 -13 -30l-140 -141l-23 23q-9 9 -9 22v7l21 98h-135q-17 0 -30 12.5t-13 29.5l1 2h-1v41q0 8 3 16l65 150q10 26 39 26h192z" /> - <glyph glyph-name="uniE8DC" unicode="thumb_up" -d="M491 299l-1 -2h1v-41q0 -8 -3 -16l-65 -150q-10 -26 -39 -26h-192q-17 0 -30 13t-13 30v213q0 17 13 30l140 141l23 -23q9 -9 9 -22v-7l-21 -98h135q17 0 30 -12.5t13 -29.5zM21 64v256h86v-256h-86z" /> - <glyph glyph-name="uniE8DD" unicode="thumbs_up_down" -d="M480 299q14 0 23 -9.5t9 -22.5v-139q0 -14 -9 -23l-106 -105l-17 17q-7 7 -7 17q3 14 8.5 40t6.5 33h-111q-9 0 -15 6t-6 15v27q0 3 2 11l49 113q9 20 29 20h144zM256 384v-27q0 -3 -2 -11l-49 -113q-9 -20 -29 -20h-144q-14 0 -23 9.5t-9 22.5v139q0 14 9 23l106 105 -l17 -17q7 -7 7 -17q-3 -14 -8.5 -40t-6.5 -33h111q9 0 15 -6t6 -15z" /> - <glyph glyph-name="uniE8DE" unicode="toc" -d="M405 235v42h43v-42h-43zM405 363h43v-43h-43v43zM405 149v43h43v-43h-43zM64 149v43h299v-43h-299zM64 235v42h299v-42h-299zM64 320v43h299v-43h-299z" /> - <glyph glyph-name="uniE8DF" unicode="today" -d="M149 299h107v-107h-107v107zM405 107v234h-298v-234h298zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-18 0 -30.5 13t-12.5 30v298q0 17 12.5 30t30.5 13h21v43h43v-43h170v43h43v-43h21z" /> - <glyph glyph-name="uniE8E0" unicode="toll" -d="M64 256q0 -42 23.5 -75t61.5 -46v-44q-56 14 -92 60t-36 105t36 105t92 60v-44q-38 -13 -61.5 -46t-23.5 -75zM320 128q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5zM320 427q70 0 120.5 -50.5t50.5 -120.5 -t-50.5 -120.5t-120.5 -50.5t-120.5 50.5t-50.5 120.5t50.5 120.5t120.5 50.5z" /> - <glyph glyph-name="uniE8E1" unicode="track_changes" -d="M407 407q62 -62 62 -151q0 -88 -62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5h21v-176q22 -12 22 -37q0 -17 -13 -30t-30 -13t-30 13t-13 30q0 25 22 37v45q-28 -8 -46 -30t-18 -52q0 -35 25 -60t60 -25t60 25t25 60q0 33 -25 60l30 30 -q38 -38 38 -90q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5q0 47 30.5 82.5t76.5 43.5v43q-63 -8 -106.5 -56t-43.5 -113q0 -70 50.5 -120.5t120.5 -50.5t120.5 50.5t50.5 120.5q0 71 -50 121z" /> - <glyph glyph-name="uniE8E2" unicode="translate" -d="M339 149h69l-35 93zM395 299l96 -256h-43l-24 64h-101l-24 -64h-43l96 256h43zM275 191l-17 -44l-66 66l-107 -106l-30 30l109 107q-40 44 -64 97h43q21 -40 49 -71q46 51 68 114h-239v43h150v42h42v-42h150v-43h-63q-26 -80 -79 -139l-1 -1z" /> - <glyph glyph-name="uniE8E3" unicode="trending_down" -d="M341 128l49 49l-104 104l-85 -85l-158 158l30 30l128 -128l85 85l134 -134l49 49v-128h-128z" /> - <glyph glyph-name="uniE8E4" unicode="trending_neutral" -d="M469 256l-85 -85v64h-320v42h320v64z" /> - <glyph glyph-name="uniE8E5" unicode="trending_up" -d="M341 384h128v-128l-49 49l-134 -134l-85 85l-128 -128l-30 30l158 158l85 -85l104 104z" /> - <glyph glyph-name="uniE8E6" unicode="turned_in" -d="M363 448q17 0 29.5 -13t12.5 -30v-341l-149 64l-149 -64v341q0 17 12.5 30t29.5 13h214z" /> - <glyph glyph-name="uniE8E7" unicode="turned_in_not" -d="M363 128v277h-214v-277l107 47zM363 448q17 0 29.5 -13t12.5 -30v-341l-149 64l-149 -64v341q0 17 12.5 30t29.5 13h214z" /> - <glyph glyph-name="uniE8E8" unicode="verified_user" -d="M213 149l171 171l-30 30l-141 -140l-55 55l-30 -30zM256 491l192 -86v-128q0 -89 -55 -162.5t-137 -93.5q-82 20 -137 93.5t-55 162.5v128z" /> - <glyph glyph-name="uniE8E9" unicode="view_agenda" -d="M427 448q9 0 15 -6t6 -15v-128q0 -9 -6 -15.5t-15 -6.5h-363q-9 0 -15 6.5t-6 15.5v128q0 9 6 15t15 6h363zM427 235q9 0 15 -6.5t6 -15.5v-128q0 -9 -6 -15t-15 -6h-363q-9 0 -15 6t-6 15v128q0 9 6 15.5t15 6.5h363z" /> - <glyph glyph-name="uniE8EA" unicode="view_array" -d="M171 128v277h192v-277h-192zM384 405h64v-277h-64v277zM85 128v277h64v-277h-64z" /> - <glyph glyph-name="uniE8EB" unicode="view_carousel" -d="M384 384h85v-235h-85v235zM43 149v235h85v-235h-85zM149 107v320h214v-320h-214z" /> - <glyph glyph-name="uniE8EC" unicode="view_column" -d="M341 405h107v-277h-107v277zM85 128v277h107v-277h-107zM213 128v277h107v-277h-107z" /> - <glyph glyph-name="uniE8ED" unicode="view_day" -d="M43 448h405v-64h-405v64zM427 341q9 0 15 -6t6 -15v-128q0 -9 -6 -15t-15 -6h-363q-9 0 -15 6t-6 15v128q0 9 6 15t15 6h363zM43 64v64h405v-64h-405z" /> - <glyph glyph-name="uniE8EE" unicode="view_headline" -d="M85 405h342v-42h-342v42zM85 277v43h342v-43h-342zM85 107v42h342v-42h-342zM85 192v43h342v-43h-342z" /> - <glyph glyph-name="uniE8EF" unicode="view_list" -d="M192 405h256v-85h-256v85zM192 107v85h256v-85h-256zM192 213v86h256v-86h-256zM85 320v85h86v-85h-86zM85 107v85h86v-85h-86zM85 213v86h86v-86h-86z" /> - <glyph glyph-name="uniE8F0" unicode="view_module" -d="M341 405h107v-128h-107v128zM213 277v128h107v-128h-107zM341 128v128h107v-128h-107zM213 128v128h107v-128h-107zM85 128v128h107v-128h-107zM85 277v128h107v-128h-107z" /> - <glyph glyph-name="uniE8F1" unicode="view_quilt" -d="M213 405h235v-128h-235v128zM341 128v128h107v-128h-107zM85 128v277h107v-277h-107zM213 128v128h107v-128h-107z" /> - <glyph glyph-name="uniE8F2" unicode="view_stream" -d="M85 405h363v-128h-363v128zM85 128v128h363v-128h-363z" /> - <glyph glyph-name="uniE8F3" unicode="view_week" -d="M277 405q9 0 15.5 -6t6.5 -15v-256q0 -9 -6.5 -15t-15.5 -6h-64q-9 0 -15 6t-6 15v256q0 9 6 15t15 6h64zM427 405q9 0 15 -6t6 -15v-256q0 -9 -6 -15t-15 -6h-64q-9 0 -15.5 6t-6.5 15v256q0 9 6.5 15t15.5 6h64zM128 405q9 0 15 -6t6 -15v-256q0 -9 -6 -15t-15 -6h-64 -q-9 0 -15 6t-6 15v256q0 9 6 15t15 6h64z" /> - <glyph glyph-name="uniE8F4" unicode="visibility" -d="M256 320q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM256 149q44 0 75.5 31.5t31.5 75.5t-31.5 75.5t-75.5 31.5t-75.5 -31.5t-31.5 -75.5t31.5 -75.5t75.5 -31.5zM256 416q79 0 143 -44t92 -116q-28 -72 -92 -116t-143 -44t-143 44t-92 116 -q28 72 92 116t143 44z" /> - <glyph glyph-name="uniE8F5" unicode="visibility_off" -d="M253 320h3q26 0 45 -19t19 -45v-4zM161 303q-12 -24 -12 -47q0 -44 31.5 -75.5t75.5 -31.5q23 0 47 12l-33 33q-8 -2 -14 -2q-26 0 -45 19t-19 45q0 6 2 14zM43 421l27 27l378 -378l-27 -27q-5 5 -31.5 31t-40.5 40q-43 -18 -93 -18q-79 0 -143 44t-92 116q25 62 80 106 -q-12 12 -33.5 34t-24.5 25zM256 363q-20 0 -39 -8l-46 46q39 15 85 15q79 0 142.5 -44t91.5 -116q-24 -59 -73 -101l-62 62q8 19 8 39q0 44 -31.5 75.5t-75.5 31.5z" /> - <glyph glyph-name="uniE8F6" unicode="card_giftcard" -d="M427 213v128h-109l45 -60l-35 -25q-64 87 -72 98q-8 -11 -72 -98l-35 25l45 60h-109v-128h342zM427 107v42h-342v-42h342zM192 427q-9 0 -15 -6.5t-6 -15.5t6 -15t15 -6t15 6t6 15t-6 15.5t-15 6.5zM320 427q-9 0 -15 -6.5t-6 -15.5t6 -15t15 -6t15 6t6 15t-6 15.5 -t-15 6.5zM427 384q18 0 30 -12.5t12 -30.5v-234q0 -18 -12 -30.5t-30 -12.5h-342q-18 0 -30 12.5t-12 30.5v234q0 18 12 30.5t30 12.5h47q-4 14 -4 21q0 26 19 45t45 19q33 0 53 -28l11 -15l11 15q20 28 53 28q26 0 45 -19t19 -45q0 -7 -4 -21h47z" /> - <glyph glyph-name="uniE8F7" unicode="card_membership" -d="M427 299v128h-342v-128h342zM427 192v43h-342v-43h342zM427 469q18 0 30 -12t12 -30v-235q0 -18 -12 -30.5t-30 -12.5h-86v-106l-85 42l-85 -42v106h-86q-18 0 -30 12.5t-12 30.5v235q0 18 12 30t30 12h342z" /> - <glyph glyph-name="uniE8F8" unicode="card_travel" -d="M427 213v128h-64v-42h-43v42h-128v-42h-43v42h-64v-128h342zM427 107v42h-342v-42h342zM192 427v-43h128v43h-128zM427 384q18 0 30 -12.5t12 -30.5v-234q0 -18 -12 -30.5t-30 -12.5h-342q-18 0 -30 12.5t-12 30.5v234q0 18 12 30.5t30 12.5h64v43q0 18 12.5 30t30.5 12 -h128q18 0 30.5 -12t12.5 -30v-43h64z" /> - <glyph glyph-name="uniE8F9" unicode="work" -d="M299 384v43h-86v-43h86zM427 384q18 0 30 -12.5t12 -30.5v-234q0 -18 -12 -30.5t-30 -12.5h-342q-18 0 -30 12.5t-12 30.5v234q0 18 12 30.5t30 12.5h86v43q0 18 12 30t30 12h86q18 0 30 -12t12 -30v-43h86z" /> - <glyph glyph-name="uniE8FA" unicode="youtube_searched_for" -d="M363 213l106 -106l-31 -32l-107 107v16l-6 6q-38 -33 -90 -33q-38 0 -71 19l32 31q19 -8 39 -8q40 0 68 28t28 68t-28 68t-68 28t-68 -28t-28 -68h74l-88 -85l-82 85h53q0 57 41 98t98 41q58 0 98.5 -40.5t40.5 -98.5q0 -51 -34 -90l6 -6h17z" /> - <glyph glyph-name="uniE8FB" unicode="eject" -d="M256 405l142 -213h-284zM107 149h298v-42h-298v42z" /> - <glyph glyph-name="uniE8FC" unicode="camera_enhance" -d="M256 149l-27 59l-58 27l58 26l27 59l27 -59l58 -26l-58 -27zM256 128q44 0 75.5 31.5t31.5 75.5t-31.5 75t-75.5 31t-75.5 -31t-31.5 -75t31.5 -75.5t75.5 -31.5zM192 448h128l39 -43h68q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12.5 -30t-29.5 -13h-342q-17 0 -29.5 13 -t-12.5 30v256q0 17 12.5 29.5t29.5 12.5h68z" /> - <glyph glyph-name="uniE8FD" unicode="help_outline" -d="M256 384q35 0 60 -25t25 -60q0 -27 -32 -55.5t-32 -51.5h-42q0 23 10 39.5t22 24t22 18.5t10 25q0 17 -13 29.5t-30 12.5t-30 -12.5t-13 -29.5h-42q0 35 25 60t60 25zM256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5 -t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM235 128v43h42v-43h-42z" /> - <glyph glyph-name="uniE8FE" unicode="reorder" -d="M64 405h384v-42h-384v42zM64 277v43h384v-43h-384zM64 107v42h384v-42h-384zM64 192v43h384v-43h-384z" /> - <glyph glyph-name="uniE8FF" unicode="zoom_in" -d="M256 299h-43v-43h-21v43h-43v21h43v43h21v-43h43v-21zM203 213q40 0 68 28t28 68t-28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28zM331 213l106 -106l-32 -32l-106 106v17l-6 6q-38 -33 -90 -33q-58 0 -98.5 40t-40.5 98t40.5 98.5t98.5 40.5t98 -40.5t40 -98.5 -q0 -52 -33 -90l6 -6h17z" /> - <glyph glyph-name="uniE900" unicode="zoom_out" -d="M149 320h107v-21h-107v21zM203 213q40 0 68 28t28 68t-28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28zM331 213l106 -106l-32 -32l-106 106v17l-6 6q-38 -33 -90 -33q-58 0 -98.5 40t-40.5 98t40.5 98.5t98.5 40.5t98 -40.5t40 -98.5q0 -52 -33 -90l6 -6h17z" /> - <glyph glyph-name="uniE902" unicode="http" -d="M459 267v21h-43v-21h43zM459 320q13 0 22.5 -9.5t9.5 -22.5v-21q0 -13 -9.5 -22.5t-22.5 -9.5h-43v-43h-32v128h75zM267 288v32h96v-32h-32v-96h-32v96h-32zM149 288v32h96v-32h-32v-96h-32v96h-32zM96 277v43h32v-128h-32v53h-43v-53h-32v128h32v-43h43z" /> - <glyph glyph-name="uniE903" unicode="event_seat" -d="M363 235h-214v170q0 17 13 30t30 13h128q17 0 30 -13t13 -30v-170zM43 299h64v-64h-64v64zM405 299h64v-64h-64v64zM85 64v128h342v-128h-64v64h-214v-64h-64z" /> - <glyph glyph-name="uniE904" unicode="flight_land" -d="M299 204q-82 23 -206 55l-34 10v110l31 -8l20 -50l106 -28v176l41 -11l59 -192l113 -30q13 -4 19.5 -15.5t3.5 -24.5q-4 -13 -15 -19t-24 -3zM53 107h406v-43h-406v43z" /> - <glyph glyph-name="uniE905" unicode="flight_takeoff" -d="M471 306q3 -13 -3.5 -24t-19.5 -15q-124 -33 -206 -55l-113 -30l-34 -10l-56 96l31 8l42 -32l106 28l-88 153l41 11l147 -137l114 30q13 4 24.5 -3t14.5 -20zM53 107h406v-43h-406v43z" /> - <glyph glyph-name="uniE906" unicode="play_for_work" -d="M128 213h43q0 -35 25 -60t60 -25t60 25t25 60h43q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5zM235 405h42v-119h75l-96 -96l-96 96h75v119z" /> - <glyph glyph-name="uniE908" unicode="gif" -d="M405 288h-64v-21h43v-32h-43v-43h-32v128h96v-32zM192 320q9 0 15 -6t6 -15v-11h-74v-64h42v32h32v-43q0 -9 -6 -15t-15 -6h-64q-9 0 -15 6t-6 15v86q0 9 6 15t15 6h64zM245 320h32v-128h-32v128z" /> - <glyph glyph-name="uniE909" unicode="indeterminate_check_box" -d="M363 235v42h-214v-42h214zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298z" /> - <glyph glyph-name="uniE90A" unicode="offline_pin" -d="M220 213l143 143l-30 30l-113 -113l-41 41l-30 -30zM363 128v43h-214v-43h214zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE90B" unicode="all_out" -d="M343 170q34 34 34 82.5t-34 82.5t-82.5 34t-82.5 -34t-34 -82.5t34 -82.5t82.5 -34t82.5 34zM366 358q44 -44 44 -106t-44 -105t-106 -43t-105 43t-43 105t43 106t105 44t106 -44zM90 338v85h85zM175 82h-85v85zM431 167v-85h-85zM346 423h85v-85z" /> - <glyph glyph-name="uniE90C" unicode="copyright" -d="M256 85q70 0 120.5 50.5t50.5 120.5t-50.5 120.5t-120.5 50.5t-120.5 -50.5t-50.5 -120.5t50.5 -120.5t120.5 -50.5zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM253 317q-40 0 -40 -58v-6 -q0 -58 40 -58q15 0 25 8.5t10 21.5h38q0 -25 -22 -44q-21 -18 -51 -18q-40 0 -61 24t-21 66v6q0 41 20 64q24 27 62 27q33 0 52 -19q21 -21 21 -49h-38q0 7 -3 13q-5 10 -7 12q-10 10 -25 10z" /> - <glyph glyph-name="uniE90D" unicode="fingerprint" -d="M318 43h-3q-46 12 -79 45q-46 46 -46 111q0 26 19 44.5t46 18.5t46.5 -18.5t19.5 -44.5q0 -17 12.5 -29t31.5 -12t32 12t13 29q0 60 -45.5 103t-109.5 43q-46 0 -84 -23.5t-57 -62.5q-12 -25 -12 -60q0 -40 14 -77q3 -10 -7 -13t-13 6q-16 45 -16 84t15 69q21 45 64.5 72 -t95.5 27q73 0 124.5 -49.5t51.5 -118.5q0 -26 -19.5 -44t-46.5 -18t-46 18t-19 44q0 17 -13 29.5t-32 12.5t-31.5 -12.5t-12.5 -29.5q0 -56 40 -96q28 -28 70 -39q9 -1 7 -13q-2 -8 -10 -8zM265 199q0 -37 27.5 -64t68.5 -27q2 0 9 1t11.5 1t9 -1.5t5.5 -6.5q2 -11 -9 -13 -q-12 -2 -26 -2q-40 0 -66 19q-51 35 -51 93q0 11 11 11q10 0 10 -11zM208 47q-4 0 -7 3q-27 27 -43 57q-23 40 -23 92q0 47 35.5 81t85.5 34t85.5 -34t35.5 -81q0 -10 -11 -10t-11 10q0 39 -29 66.5t-70 27.5t-70 -27.5t-29 -66.5q0 -48 19 -82q13 -23 40 -52q8 -7 0 -15 -q-3 -3 -8 -3zM75 305q-7 0 -10 5t1 11q32 46 80 70q50 26 110 26t110 -26q49 -24 80 -69q6 -10 -3 -15q-10 -6 -15 3q-27 39 -72 62q-46 23 -100 23.5t-100 -23.5q-45 -23 -73 -63q-3 -4 -8 -4zM380 417q-4 0 -5 1q-59 30 -119 30q-65 0 -119 -30q-6 -3 -10.5 0.5t-4.5 9 -t5 9.5q58 32 129 32q65 0 129 -32q7 -4 5 -12t-10 -8z" /> - <glyph glyph-name="uniE90E" unicode="gavel" -d="M82 310l120 -121l-60 -60l-121 120zM263 491l120 -121l-60 -60l-121 120zM112 340l60 60l302 -302l-60 -60zM21 64h256v-43h-256v43z" /> - <glyph glyph-name="uniE90F" unicode="lightbulb_outline" -d="M317 233q46 32 46 87q0 44 -31.5 75.5t-75.5 31.5t-75.5 -31.5t-31.5 -75.5q0 -55 46 -87l18 -13v-49h86v49zM256 469q62 0 105.5 -43.5t43.5 -105.5q0 -78 -64 -122v-49q0 -9 -6 -15t-15 -6h-128q-9 0 -15 6t-6 15v49q-64 44 -64 122q0 62 43.5 105.5t105.5 43.5z -M192 64v21h128v-21q0 -9 -6 -15t-15 -6h-86q-9 0 -15 6t-6 15z" /> - <glyph glyph-name="uniE911" unicode="picture_in_picture_alt" -d="M448 106v300h-384v-300h384zM491 107q0 -17 -13 -30t-30 -13h-384q-17 0 -30 13t-13 30v299q0 17 13 29.5t30 12.5h384q17 0 30 -12.5t13 -29.5v-299zM405 277v-128h-170v128h170z" /> - <glyph glyph-name="uniE912" unicode="important_devices" -d="M255 320h65l-53 -38l20 -62l-52 39l-53 -39l20 62l-53 38h65l21 64zM427 469q17 0 29.5 -12t12.5 -30v-107h-42v107h-384v-256h277v-43h-43v-43h43v-42h-171v42h43v43h-149q-18 0 -30.5 13t-12.5 30v256q0 18 12.5 30t30.5 12h384zM491 85v150h-107v-150h107zM491 277 -q9 0 15 -6t6 -15v-192q0 -9 -6 -15t-15 -6h-107q-9 0 -15 6t-6 15v192q0 9 6 15t15 6h107z" /> - <glyph glyph-name="uniE913" unicode="touch_app" -d="M402 173q19 -9 19 -29v-4l-16 -113q-1 -12 -10 -19.5t-21 -7.5h-145q-13 0 -22 9l-106 106l17 17q7 7 17 7q1 0 2.5 -0.5t2.5 -0.5l73 -15v229q0 14 9.5 23t22.5 9t22.5 -9t9.5 -23v-128h17q3 0 11 -2zM192 272q-43 28 -43 80q0 40 28 68t68 28t68 -28t28 -68 -q0 -53 -42 -80v80q0 22 -16 37.5t-38 15.5t-37.5 -15.5t-15.5 -37.5v-80z" /> - <glyph glyph-name="uniE914" unicode="accessible" -d="M274 128h44q-8 -37 -37 -61t-68 -24q-44 0 -75 31t-31 75q0 39 24 68t61 37v-44q-19 -7 -31 -23.5t-12 -37.5q0 -26 19 -45t45 -19q21 0 37.5 12t23.5 31zM213 318q0 24 21 38t43 1h1v-1q7 -3 13 -9l28 -31q36 -39 86 -39v-42q-56 0 -106 41v-73h64q17 0 29.5 -13 -t12.5 -30v-117h-42v106h-107q-17 0 -30 13t-13 30v126zM213 427q0 18 12.5 30t30.5 12t30.5 -12t12.5 -30t-12.5 -30.5t-30.5 -12.5t-30.5 12.5t-12.5 30.5z" /> - <glyph glyph-name="uniE915" unicode="compare_arrows" -d="M320 235l-85 85l85 85v-64h149v-42h-149v-64zM192 213v64l85 -85l-85 -85v64h-149v42h149z" /> - <glyph glyph-name="uniE916" unicode="date_range" -d="M405 85v235h-298v-235h298zM405 427q17 0 30 -13t13 -30v-299q0 -17 -13 -29.5t-30 -12.5h-298q-18 0 -30.5 12.5t-12.5 29.5v299q0 17 12.5 30t30.5 13h21v42h43v-42h170v42h43v-42h21zM363 277v-42h-43v42h43zM277 277v-42h-42v42h42zM192 277v-42h-43v42h43z" /> - <glyph glyph-name="uniE917" unicode="donut_large" -d="M277 108q48 7 84.5 43t43.5 84h64q-8 -80 -60 -132.5t-132 -59.5v65zM405 277q-7 48 -43.5 84t-84.5 43v65q80 -8 132 -60t60 -132h-64zM235 404q-50 -8 -89 -51t-39 -97t39 -97t89 -51v-65q-81 8 -136.5 69t-55.5 144t55.5 144t136.5 69v-65z" /> - <glyph glyph-name="uniE918" unicode="donut_small" -d="M277 195q27 8 40 40h152q-8 -77 -60.5 -131t-131.5 -61v152zM317 277q-12 32 -40 40v152q79 -7 131.5 -61t60.5 -131h-152zM235 317q-17 -7 -30 -24t-13 -37t13 -37t30 -24v-152q-81 8 -136.5 69t-55.5 144t55.5 144t136.5 69v-152z" /> - <glyph glyph-name="uniE919" unicode="line_style" -d="M64 427h384v-86h-384v86zM277 256v43h171v-43h-171zM64 256v43h171v-43h-171zM405 85v43h43v-43h-43zM320 85v43h43v-43h-43zM235 85v43h42v-43h-42zM149 85v43h43v-43h-43zM64 85v43h43v-43h-43zM341 171v42h107v-42h-107zM203 171v42h106v-42h-106zM64 171v42h107v-42 -h-107z" /> - <glyph glyph-name="uniE91A" unicode="line_weight" -d="M64 427h384v-86h-384v86zM64 235v64h384v-64h-384zM64 85v22h384v-22h-384zM64 149v43h384v-43h-384z" /> - <glyph glyph-name="uniE91B" unicode="motorcycle" -d="M405 149q26 0 45 19t19 45t-19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19zM167 192h-60v43h60q-7 19 -23.5 30.5t-36.5 11.5q-26 0 -45 -19t-19 -45t19 -45t45 -19q20 0 36.5 12t23.5 31zM415 319q41 -3 69 -33t28 -73q0 -45 -31 -75.5t-76 -30.5t-75.5 30.5t-30.5 75.5 -q0 20 6 38l-59 -59h-35q-8 -37 -36.5 -61t-67.5 -24q-45 0 -76 30.5t-31 75.5t31 76t76 31h247l-43 43h-76v42h94z" /> - <glyph glyph-name="uniE91C" unicode="opacity" -d="M128 213h256q0 55 -38 93l-90 94l-90 -93q-38 -38 -38 -94zM377 341q50 -50 50 -120q0 -71 -50 -121t-121 -50t-121 50t-50 121q0 70 50 120l121 121z" /> - <glyph glyph-name="uniE91D" unicode="pets" -d="M370 195l8.5 -8.5l8.5 -8.5t8.5 -9t8 -9.5t7.5 -9.5t6.5 -10t5 -11t3 -11.5t1 -12t-0.5 -12.5q-11 -42 -50 -50q-7 -1 -48.5 4t-69.5 5h-4q-28 0 -69.5 -5t-48.5 -4q-39 8 -50 50q-3 20 7 41t18.5 30t30.5 31q10 11 26.5 31t26.5 31q18 22 37 28q4 2 7 2q6 1 17 1 -q12 0 17 -1q3 0 7 -2q19 -6 37 -28q9 -11 26 -31t27 -31zM363 309q0 22 15.5 38t37.5 16t37.5 -16t15.5 -38t-15.5 -37.5t-37.5 -15.5t-37.5 15.5t-15.5 37.5zM267 395q0 22 15.5 37.5t37.5 15.5t37.5 -15.5t15.5 -37.5t-15.5 -38t-37.5 -16t-37.5 16t-15.5 38zM139 395 -q0 22 15.5 37.5t37.5 15.5t37.5 -15.5t15.5 -37.5t-15.5 -38t-37.5 -16t-37.5 16t-15.5 38zM43 309q0 22 15.5 38t37.5 16t37.5 -16t15.5 -38t-15.5 -37.5t-37.5 -15.5t-37.5 15.5t-15.5 37.5z" /> - <glyph glyph-name="uniE91E" unicode="pregnant_woman" -d="M341 235v-86h-64v-106h-64v106h-42v150q0 26 19 45t45 19t45 -19t19 -45q42 -17 42 -64zM192 427q0 18 12.5 30t30.5 12t30 -12t12 -30t-12 -30.5t-30 -12.5t-30.5 12.5t-12.5 30.5z" /> - <glyph glyph-name="uniE91F" unicode="record_voice_over" -d="M428 469q62 -65 62 -150.5t-62 -147.5l-35 34q44 51 44 116.5t-44 113.5zM358 398q32 -35 32 -79t-32 -76l-36 36q14 19 14 41.5t-14 41.5zM192 192q54 0 112.5 -23.5t58.5 -61.5v-43h-342v43q0 38 58.5 61.5t112.5 23.5zM107 320q0 35 25 60t60 25t60 -25t25 -60 -t-25 -60t-60 -25t-60 25t-25 60z" /> - <glyph glyph-name="uniE920" unicode="rounded_corner" -d="M448 341v-106h-43v106q0 26 -19 45t-45 19h-106v43h106q44 0 75.5 -31.5t31.5 -75.5zM64 64v43h43v-43h-43zM149 64v43h43v-43h-43zM235 64v43h42v-43h-42zM149 405v43h43v-43h-43zM64 405v43h43v-43h-43zM64 320v43h43v-43h-43zM64 149v43h43v-43h-43zM64 235v42h43v-42 -h-43zM405 149v43h43v-43h-43zM405 107h43v-43h-43v43z" /> - <glyph glyph-name="uniE921" unicode="rowing" -d="M448 64l-64 -64l-64 64v32l-151 151q-7 -1 -20 -1v46q26 -1 54 11.5t46 31.5l30 33q16 16 35 16h1q19 0 33.5 -14t14.5 -34v-123q0 -26 -20 -46l-76 76v49q-20 -17 -49 -30l134 -134h32zM320 491q17 0 30 -13t13 -30t-13 -30t-30 -13t-30 13t-13 30t13 30t30 13zM181 203 -l54 -54h-43l-75 -74l-32 32z" /> - <glyph glyph-name="uniE922" unicode="timeline" -d="M491 341q0 -17 -13 -29.5t-30 -12.5q-8 0 -11 1l-76 -76q2 -6 2 -11q0 -17 -13 -29.5t-30 -12.5t-30 12.5t-13 29.5q0 5 2 11l-55 55q-6 -2 -11 -2t-11 2l-97 -97q2 -6 2 -11q0 -17 -13 -30t-30 -13t-30 13t-13 30t13 29.5t30 12.5q8 0 11 -1l97 97q-1 3 -1 11 -q0 17 12.5 30t29.5 13t30 -13t13 -30q0 -8 -1 -11l54 -54q3 1 11 1t11 -1l76 75q-2 6 -2 11q0 17 13 30t30 13t30 -13t13 -30z" /> - <glyph glyph-name="uniE923" unicode="update" -d="M267 341v-90l74 -45l-15 -26l-91 55v106h32zM448 296h-145l59 60q-44 44 -105.5 44.5t-105.5 -42.5q-43 -44 -43 -104t43 -104t105 -44t106 44q43 43 43 104h43q0 -79 -56 -134q-56 -56 -136 -56t-136 56q-56 55 -56 133.5t56 134.5t135 56t135 -56l58 60v-152z" /> - <glyph glyph-name="uniE924" unicode="watch_later" -d="M346 166l17 28l-96 58v111h-32v-128zM256 469q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" /> - <glyph glyph-name="uniE925" unicode="pan_tool" -d="M491 395v-310q0 -35 -25.5 -60t-60.5 -25h-155q-36 0 -61 25l-168 171q27 26 28 26q7 6 17 6q7 0 13 -3l92 -52v254q0 13 9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5v-150h21v203q0 14 9 23t23 9t23 -9t9 -23v-203h21v182q0 13 9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5v-182 -h22v118q0 13 9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5z" /> - <glyph glyph-name="uniE926" unicode="euro_symbol" -d="M320 117q51 0 90 34l38 -38q-54 -49 -128 -49q-62 0 -111.5 36t-69.5 92h-75v43h65q-1 7 -1 21t1 21h-65v43h75q20 56 69.5 92t111.5 36q74 0 128 -49l-38 -38q-39 34 -90 34q-39 0 -72 -20.5t-51 -54.5h123v-43h-137q-2 -14 -2 -21t2 -21h137v-43h-123 -q18 -34 50.5 -54.5t72.5 -20.5z" /> - <glyph glyph-name="uniE927" unicode="g_translate" -d="M448 85v278q0 9 -6 15t-15 6h-188l25 -86h41v22h23v-22h77v-22h-27q-10 -39 -41 -75l58 -57l-15 -16l-58 57l-19 -19l17 -59l-43 -43h150q9 0 15 6t6 15zM298 253q9 -19 24 -36q12 14 20 28.5t10 22.5l3 8h-85l7 -23h21zM282 237l13 -47l12 11q-14 15 -25 36zM237 286 -q0 11 -2 15h-84v-33h47q-3 -12 -14 -22t-31 -10q-21 0 -36 15.5t-15 36.5t15 36.5t36 15.5q19 0 32 -13l2 -1l26 25l-2 1q-25 23 -58 23q-36 0 -61.5 -25.5t-25.5 -61.5t25.5 -61.5t61.5 -25.5q37 0 60.5 24t23.5 61zM427 405q17 0 29.5 -12.5t12.5 -29.5v-278 -q0 -17 -12.5 -29.5t-29.5 -12.5h-171l-21 64h-150q-17 0 -29.5 12.5t-12.5 29.5v278q0 17 12.5 29.5t29.5 12.5h128l19 -64h195z" /> - <glyph glyph-name="uniE928" unicode="remove_shopping_cart" -d="M149 128q17 0 30 -13t13 -30t-13 -29.5t-30 -12.5t-29.5 12.5t-12.5 29.5t12.5 30t29.5 13zM332 235l-192 192h287q9 0 15 -6.5t6 -15.5q0 -5 -3 -10l-76 -138q-12 -22 -37 -22zM158 192h108l-43 43h-50l-19 -35l-1 -3q0 -5 5 -5zM485 27l-27 -27l-61 61q-13 -18 -34 -18 -q-17 0 -30 12.5t-13 29.5q0 22 18 35l-30 29h-159q-17 0 -29.5 13t-12.5 30q0 10 5 20l29 53l-47 99l-94 94l27 27z" /> - <glyph glyph-name="uniE929" unicode="restore_page" -d="M256 128q44 0 75.5 31.5t31.5 75.5t-31.5 75t-75.5 31q-58 0 -90 -49l-27 28v-85h85l-34 34q20 40 66 40q31 0 53 -21.5t22 -52.5t-22 -53t-53 -22q-39 0 -61 32h-37q12 -29 38.5 -46.5t59.5 -17.5zM299 469l128 -128v-256q0 -17 -13 -29.5t-30 -12.5h-256 -q-17 0 -30 12.5t-13 29.5l1 342q0 17 12.5 29.5t29.5 12.5h171z" /> - <glyph glyph-name="uniE92A" unicode="speaker_notes_off" -d="M427 469q17 0 29.5 -12.5t12.5 -29.5v-256q0 -17 -12 -29.5t-29 -13.5l-149 149h105v43h-148l-21 21h169v43h-171v-41l-126 126h340zM128 277h43l-43 43v-43zM171 213v43h-43v-43h43zM27 475l442 -442l-27 -27l-122 122h-192l-85 -85v362l-43 43z" /> - <glyph glyph-name="uniE92B" unicode="delete_forever" -d="M331 427h74v-43h-298v43h74l22 21h106zM180 259l46 -46l-45 -45l30 -30l45 45l45 -45l30 30l-45 45l45 46l-30 30l-45 -46l-45 46zM128 107v256h256v-256q0 -17 -13 -30t-30 -13h-170q-17 0 -30 13t-13 30z" /> - <glyph glyph-name="uniEB3B" unicode="ac_unit" -d="M469 277v-42h-89l69 -69l-30 -31l-99 100h-43v-43l100 -99l-31 -30l-69 69v-89h-42v89l-69 -69l-31 30l100 99v43h-43l-99 -100l-30 31l69 69h-89v42h89l-69 69l30 31l99 -100h43v43l-100 99l31 30l69 -69v89h42v-89l69 69l31 -30l-100 -99v-43h43l99 100l30 -31l-69 -69 -h89z" /> - <glyph glyph-name="uniEB3C" unicode="airport_shuttle" -d="M320 277h107l-86 86h-21v-86zM373 139q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5t9.5 -22.5t22.5 -9.5zM277 277v86h-85v-86h85zM128 139q14 0 23 9.5t9 22.5t-9 22.5t-23 9.5t-23 -9.5t-9 -22.5t9 -22.5t23 -9.5zM64 277h85v86h-85v-86z -M363 405l128 -128v-106h-54q0 -26 -19 -45t-45 -19t-45 19t-19 45h-117q0 -26 -19 -45t-45 -19t-45 19t-19 45h-43v192q0 18 12.5 30t30.5 12h299z" /> - <glyph glyph-name="uniEB3D" unicode="all_inclusive" -d="M397 371q48 0 81.5 -34t33.5 -81t-33.5 -81t-81.5 -34t-82 34l-27 24l32 28l25 -21q22 -22 52 -22t51 21t21 51t-21 51t-51 21t-51 -21q-71 -62 -90 -80l-60 -53q-33 -33 -81 -33t-81.5 34t-33.5 81t33.5 81t81.5 34t82 -34l27 -24l-33 -28l-24 21q-22 22 -52 22t-51 -21 -t-21 -51t21 -51t51 -21t51 21q71 62 90 80l60 53q33 33 81 33z" /> - <glyph glyph-name="uniEB3E" unicode="beach_access" -d="M371 324q-50 50 -115.5 66t-127.5 -5q48 6 105.5 -18.5t106.5 -73.5l-122 -122q-49 49 -73.5 106.5t-18.5 105.5q-21 -62 -5 -127.5t66 -115.5l-61 -61q-63 63 -63 152.5t63 152.5q0 1 1 1q70 70 168 62q81 -6 137 -62zM279 201l31 31l137 -138l-31 -30z" /> - <glyph glyph-name="uniEB3F" unicode="business_center" -d="M299 363v42h-86v-42h86zM427 363q17 0 29.5 -13t12.5 -30v-64q0 -17 -12.5 -30t-29.5 -13h-128v43h-86v-43h-128q-18 0 -30 12.5t-12 30.5v64q0 17 12.5 30t29.5 13h85v42l43 43h85l43 -43v-42h86zM213 171h86v21h149v-85q0 -18 -12.5 -30.5t-30.5 -12.5h-298 -q-18 0 -30.5 12.5t-12.5 30.5v85h149v-21z" /> - <glyph glyph-name="uniEB40" unicode="casino" -d="M352 320q14 0 23 9t9 23t-9 23t-23 9t-23 -9t-9 -23t9 -23t23 -9zM352 128q14 0 23 9t9 23t-9 23t-23 9t-23 -9t-9 -23t9 -23t23 -9zM256 224q14 0 23 9t9 23t-9 23t-23 9t-23 -9t-9 -23t9 -23t23 -9zM160 320q14 0 23 9t9 23t-9 23t-23 9t-23 -9t-9 -23t9 -23t23 -9z -M160 128q14 0 23 9t9 23t-9 23t-23 9t-23 -9t-9 -23t9 -23t23 -9zM405 448q17 0 30 -13t13 -30v-298q0 -17 -13 -30t-30 -13h-298q-17 0 -30 13t-13 30v298q0 17 13 30t30 13h298z" /> - <glyph glyph-name="uniEB41" unicode="child_care" -d="M160 213h192q-12 -29 -38 -46.5t-58 -17.5t-58 17.5t-38 46.5zM256 107q51 0 90.5 30t52.5 77q1 0 3 -0.5t3 -0.5q17 0 30 13t13 30t-13 30t-30 13q-1 0 -3 -0.5t-3 -0.5q-13 47 -52.5 77t-90.5 30t-90.5 -30t-52.5 -77q-1 0 -3 0.5t-3 0.5q-17 0 -30 -13t-13 -30t13 -30 -t30 -13q1 0 3 0.5t3 0.5q13 -47 52.5 -77t90.5 -30zM489 242q-4 -24 -20 -42.5t-39 -25.5q-22 -47 -69.5 -78.5t-104.5 -31.5t-104 31.5t-69 78.5q-23 7 -39.5 25.5t-20.5 42.5q-2 8 -2 14t2 14q4 24 20.5 42.5t39.5 25.5q17 38 46 62q54 48 127 48q58 0 104.5 -31t68.5 -79 -q23 -7 39.5 -25.5t20.5 -42.5q2 -8 2 -14t-2 -14zM176 288q0 11 8 19t19 8t18.5 -8t7.5 -19t-7.5 -19t-18.5 -8t-19 8t-8 19zM283 288q0 11 7.5 19t18.5 8t19 -8t8 -19t-8 -19t-19 -8t-18.5 8t-7.5 19z" /> - <glyph glyph-name="uniEB42" unicode="child_friendly" -d="M363 85q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5t9.5 -22.5t22.5 -9.5zM171 85q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5t9.5 -22.5t22.5 -9.5zM412 173q25 -23 25 -56q0 -31 -21.5 -52.5t-52.5 -21.5 -q-28 0 -49 18.5t-25 45.5h-45q-4 -27 -24.5 -45.5t-48.5 -18.5q-31 0 -53 21.5t-22 52.5q0 44 39 66l-45 94h-47v43h74l20 -43h311q0 -57 -36 -104zM277 469q71 0 121 -50t50 -120h-171v170z" /> - <glyph glyph-name="uniEB43" unicode="fitness_center" -d="M439 195l30 -31l-45 -45l30 -31l-30 -30l-31 30l-45 -45l-31 30l-30 -30l-31 30l76 76l-183 183l-76 -76l-30 31l30 30l-30 31l45 45l-30 31l30 30l31 -30l45 45l31 -30l30 30l31 -30l-76 -76l183 -183l76 76l30 -31z" /> - <glyph glyph-name="uniEB44" unicode="free_breakfast" -d="M85 107h342v-43h-342v43zM427 341v64h-43v-64h43zM427 448q18 0 30 -12.5t12 -30.5v-64q0 -17 -12 -29.5t-30 -12.5h-43v-64q0 -35 -25 -60.5t-60 -25.5h-128q-35 0 -60.5 25.5t-25.5 60.5v213h342z" /> - <glyph glyph-name="uniEB45" unicode="golf_course" -d="M363 386l-128 -66v-193q46 -2 76 -14t30 -28q0 -17 -37.5 -29.5t-90.5 -12.5t-90.5 12.5t-37.5 29.5q0 25 64 37v-37h43v384zM384 96q0 14 9 23t23 9t23 -9t9 -23t-9 -23t-23 -9t-23 9t-9 23z" /> - <glyph glyph-name="uniEB46" unicode="hot_tub" -d="M313 387q33 -32 27 -79l-1 -9h-41l3 12q5 27 -16 48q-34 34 -28 80l1 9h41l-2 -13q-5 -27 14 -47zM398 387q34 -33 28 -79l-2 -9h-40l2 12q5 27 -14 47l-2 1q-34 34 -28 80l2 9h40l-2 -13q-5 -27 14 -47zM405 85v128h-42v-128h42zM320 85v128h-43v-128h43zM235 85v128 -h-43v-128h43zM149 85v128h-42v-128h42zM238 256h231v-171q0 -17 -12.5 -29.5t-29.5 -12.5h-342q-17 0 -29.5 12.5t-12.5 29.5v171h64v16q0 20 14.5 34t33.5 14q20 0 36 -16l29 -33q4 -5 18 -15zM107 384q0 18 12 30.5t30 12.5t30.5 -12.5t12.5 -30.5t-12.5 -30.5 -t-30.5 -12.5t-30 12.5t-12 30.5z" /> - <glyph glyph-name="uniEB47" unicode="kitchen" -d="M171 256h42v-107h-42v107zM171 405h42v-64h-42v64zM384 320v107h-256v-107h256zM384 85v193h-256v-193h256zM384 469q18 0 30.5 -12t12.5 -30v-342q0 -17 -13 -29.5t-30 -12.5h-256q-17 0 -30 12.5t-13 29.5v342q0 18 12.5 30t30.5 12h256z" /> - <glyph glyph-name="uniEB48" unicode="pool" -d="M299 395q0 22 15.5 37.5t37.5 15.5t37.5 -15.5t15.5 -37.5t-15.5 -38t-37.5 -16t-37.5 16t-15.5 38zM185 256q-12 0 -25 8q-4 3 -16 8l69 69l-21 22q-32 32 -85 32v53q41 0 67 -9.5t50 -33.5l137 -136q-6 -4 -9 -5q-13 -8 -25 -8q-11 0 -24 8q-22 13 -47 13t-47 -13 -q-13 -8 -24 -8zM469 160q-23 0 -46 14q-11 7 -25 7q-13 0 -24 -7q-23 -14 -47 -14q-23 0 -46 14q-11 7 -25 7q-13 0 -24 -7q-23 -14 -47 -14q-23 0 -46 14q-11 7 -25 7q-13 0 -24 -7q-23 -14 -47 -14v43q13 0 24 7q23 14 47 14q23 0 46 -14q11 -7 25 -7q13 0 24 7 -q23 14 47 14q23 0 46 -14q11 -7 25 -7q13 0 24 7q23 14 47 14q23 0 46 -14q11 -7 25 -7v-43zM469 64q-23 0 -46 14q-11 7 -25 7q-13 0 -24 -7q-23 -14 -47 -14q-23 0 -46 14q-11 7 -25 7q-13 0 -24 -7q-23 -14 -47 -14t-47 14q-11 7 -24 7q-14 0 -25 -7q-23 -14 -46 -14v43 -q13 0 24 7q23 14 47 14q23 0 46 -14q11 -7 25 -7q13 0 24 7q23 14 47 14t47 -14q11 -7 24 -7q14 0 25 7q23 14 46 14q24 0 47 -14q11 -7 24 -7v-43z" /> - <glyph glyph-name="uniEB49" unicode="room_service" -d="M295 346q63 -13 106 -61.5t47 -113.5h-384q4 65 47 113.5t106 61.5q-4 10 -4 17q0 17 13 29.5t30 12.5t30 -12.5t13 -29.5q0 -7 -4 -17zM43 149h426v-42h-426v42z" /> - <glyph glyph-name="uniEB4A" unicode="smoke_free" -d="M363 172l-63 63h63v-63zM309 326q-29 0 -50 21.5t-21 50.5t21 50t50 21v-32q-17 0 -28 -10.5t-11 -26.5q0 -17 11.5 -30t27.5 -13h33q30 0 52 -19.5t22 -47.5v-34h-32v27q0 20 -12.5 31.5t-29.5 11.5h-33zM402 408q30 -14 48.5 -43t18.5 -65v-44h-32v44q0 36 -24.5 61.5 -t-60.5 25.5v32q16 0 27.5 11.5t11.5 28.5h32q0 -30 -21 -51zM384 235h32v-64h-32v64zM437 235h32v-64h-32v64zM43 384l26 27l363 -363l-27 -27l-149 150h-213v64h149z" /> - <glyph glyph-name="uniEB4B" unicode="smoking_rooms" -d="M342 294q31 0 52.5 -19t21.5 -48v-35h-32v28q0 20 -12.5 31.5t-29.5 11.5h-33q-29 0 -50 21.5t-21 50.5t21 50t50 21v-32q-17 0 -28 -10.5t-11 -26.5q0 -17 11.5 -30t27.5 -13h33zM402 347q30 -14 48.5 -43t18.5 -64v-48h-32v48q0 36 -24.5 61t-60.5 25v32 -q16 0 27.5 11.5t11.5 28.5q0 16 -11.5 27.5t-27.5 11.5v32q29 0 50 -21t21 -50q0 -30 -21 -51zM384 171h32v-64h-32v64zM437 171h32v-64h-32v64zM43 171h320v-64h-320v64z" /> - <glyph glyph-name="uniEB4C" unicode="spa" -d="M330 307q-42 -23 -74 -57q-32 34 -74 57q8 95 75 162q67 -67 73 -162zM43 299q68 0 124 -33t89 -84q33 51 89 84t124 33q0 -84 -47.5 -151t-123.5 -94q-17 -6 -42 -11q-21 3 -42 11q-76 27 -123.5 94t-47.5 151z" /> - <glyph glyph-name="u10FFFD" unicode="goat" -d="M511 318q1 -1 1 -2.5t-1 -2.5l-25 -32q-2 -2 -4 -2l-15 3l-7 -22q-2 -4 -6.5 -4t-6.5 4l-14 30l-23 5l-47 -112l17 -136q0 -4 -4 -4h-20q-2 0 -4 3l-20 81l-10 17l-25 -98q0 -3 -4 -3h-21q-4 0 -4 4l23 135h-135l-35 -66l8 -68q2 -5 -4 -5h-20q-3 0 -4 2l-28 102l-34 -39 -l6 -60q2 -5 -4 -5h-22q-4 0 -4 2l-13 56l21 82v144q-23 9 -23 30h274q48 -1 95 33q-8 22 6 36q28 -20 36 -25q7 -4 11.5 1.5t2.5 12.5q-9 28 -45 42q-1 0 -3 1q-12 3 -10 8q0 3 4 3q29 -4 49.5 -22.5t27.5 -35.5l4 -3q3 -4 6.5 -8t6 -11.5t1.5 -15.5q0 -5 2 -7z" /> - <glyph glyph-name=".notdef" -d="M17 0v341h136v-341h-136zM34 17h102v307h-102v-307z" /> - <glyph glyph-name="glyph1" horiz-adv-x="0" - /> - <glyph glyph-name="glyph2" - /> - <glyph glyph-name="zero" unicode="0" -d="M0 0z" /> - <glyph glyph-name="one" unicode="1" -d="M0 0z" /> - <glyph glyph-name="two" unicode="2" -d="M0 0z" /> - <glyph glyph-name="three" unicode="3" -d="M0 0z" /> - <glyph glyph-name="four" unicode="4" -d="M0 0z" /> - <glyph glyph-name="five" unicode="5" -d="M0 0z" /> - <glyph glyph-name="six" unicode="6" -d="M0 0z" /> - <glyph glyph-name="seven" unicode="7" -d="M0 0z" /> - <glyph glyph-name="eight" unicode="8" -d="M0 0z" /> - <glyph glyph-name="nine" unicode="9" -d="M0 0z" /> - <glyph glyph-name="underscore" unicode="_" -d="M0 0z" /> - <glyph glyph-name="a" unicode="a" -d="M0 0z" /> - <glyph glyph-name="b" unicode="b" -d="M0 0z" /> - <glyph glyph-name="c" unicode="c" -d="M0 0z" /> - <glyph glyph-name="d" unicode="d" -d="M0 0z" /> - <glyph glyph-name="e" unicode="e" -d="M0 0z" /> - <glyph glyph-name="f" unicode="f" -d="M0 0z" /> - <glyph glyph-name="g" unicode="g" -d="M0 0z" /> - <glyph glyph-name="h" unicode="h" -d="M0 0z" /> - <glyph glyph-name="i" unicode="i" -d="M0 0z" /> - <glyph glyph-name="j" unicode="j" -d="M0 0z" /> - <glyph glyph-name="k" unicode="k" -d="M0 0z" /> - <glyph glyph-name="l" unicode="l" -d="M0 0z" /> - <glyph glyph-name="m" unicode="m" -d="M0 0z" /> - <glyph glyph-name="n" unicode="n" -d="M0 0z" /> - <glyph glyph-name="o" unicode="o" -d="M0 0z" /> - <glyph glyph-name="p" unicode="p" -d="M0 0z" /> - <glyph glyph-name="q" unicode="q" -d="M0 0z" /> - <glyph glyph-name="r" unicode="r" -d="M0 0z" /> - <glyph glyph-name="s" unicode="s" -d="M0 0z" /> - <glyph glyph-name="t" unicode="t" -d="M0 0z" /> - <glyph glyph-name="u" unicode="u" -d="M0 0z" /> - <glyph glyph-name="v" unicode="v" -d="M0 0z" /> - <glyph glyph-name="w" unicode="w" -d="M0 0z" /> - <glyph glyph-name="x" unicode="x" -d="M0 0z" /> - <glyph glyph-name="y" unicode="y" -d="M0 0z" /> - <glyph glyph-name="z" unicode="z" -d="M0 0z" /> - <glyph glyph-name="uniEC2E" unicode="" -d="M142 313zM323 220q41 -17 68.5 -53t33.5 -82h-41q-8 47 -44 78t-84 31t-84.5 -31t-43.5 -78h-42q6 45 33.5 81.5t68.5 54.5q-21 16 -33.5 40t-12.5 52q0 47 33 80t80.5 33t80.5 -33t33 -81q0 -27 -12.5 -51.5t-33.5 -40.5zM183 313q0 -30 21.5 -51.5t51.5 -21.5 -t51.5 21.5t21.5 51.5t-21.5 51.5t-51.5 21.5t-51.5 -21.5t-21.5 -51.5v0z" /> - <glyph glyph-name="uniEDDE" unicode="" -d="M405 427h-53q-31.999 -1.00098 -53 -22q-21 -21 -22 -53v-53h-42v-64h42v-150h64v150h64v64h-64v42q1.00098 9 7 15q6 6 15 7h42v64zM427 469q18 0 30 -12t12 -30v-342q0 -18 -12 -30t-30 -12h-342q-18 0 -30 12t-12 30v342q0 18 12 30t30 12h342z" /> - <glyph glyph-name="uniEDDF" unicode="" -d="M405 107v121q0 31.999 -21.5 53q-21.499 21 -52.5 22q-15 0 -30 -8q-15 -7.99902 -24 -22v26h-64v-192h64v113q1.00098 13.001 10 22q9 9 22.5 9t22.5 -9t9 -22v-113h64zM139 335q16.001 0 27 11q10.999 10.999 11 27.5q0 16.5 -11 27.5q-10.999 10.999 -27.5 11 -q-16.5 0 -27.5 -11q-10.999 -10.999 -11 -27.5q0 -16.5 11 -27.5q10.999 -10.999 28 -11zM171 107v192h-64v-192h64zM427 469q18 0 30 -12t12 -30v-342q0 -18 -12 -30t-30 -12h-342q-18 0 -30 12t-12 30v342q0 18 12 30t30 12h342z" /> - <glyph glyph-name="uniEDE0" unicode="" -d="M427 469q18 0 30 -12t12 -30v-342q0 -18 -12 -30t-30 -12h-342q-18 0 -30 12t-12 30v342q0 18 12 30t30 12h342zM427 256h-43v43h-21v-43h-43v-21h43v-43h21v43h43v21zM192 271v-36h61q-1.99902 -13.001 -15.5 -29q-13.5 -16.001 -45.5 -17q-28.001 1.00098 -46.5 20 -q-18.499 19.001 -18.5 47q0 28.001 18.5 47q18.499 19.001 46.5 20q16.001 0 26.5 -5.5q10.501 -5.50098 16.5 -11.5l29 28q-28.001 28.001 -72 29q-46.001 -1.00098 -76 -31q-30 -30 -30 -76q0 -46.001 30 -76q30 -30 76 -30q46.001 0 74 28q28.001 28.001 28 75 -q1.00098 10.001 -2 18h-100z" /> - <glyph glyph-name="uniEDE1" unicode="" -d="M378 309q7.99902 6 15.5 14q7.49805 7.99707 11.5 16q-13.001 -7.00098 -30 -9q16.001 10.999 24 32q-16.001 -10.001 -37 -14q-28.999 28.999 -66.5 11.5q-37.5 -17.501 -31.5 -63.5q-40.999 3 -69 19.5t-49 39.5q-10.999 -21 -4.5 -44q6.49902 -22.999 21.5 -32 -q-13.999 1.00098 -24 7q1.00098 -24 13 -37.5q12 -13.5 31 -19.5q-12 -3 -24 -1q10.999 -34.999 52 -40q-15 -13.001 -38 -19.5q-22.999 -6.49902 -45 -3.5q18 -12 40 -19.5q22.001 -7.5 51 -6.5q72 4 114.5 49.5q42.499 45.499 44.5 120.5zM427 465q18 0 30 -12t12 -30 -v-342q0 -18 -12 -30t-30 -12h-342q-18 0 -30 12t-12 30v342q0 18 12 30t30 12h342z" /> - <glyph glyph-name="uniEDE0" unicode="" -d="M427 469q18 0 30 -12t12 -30v-342q0 -18 -12 -30t-30 -12h-342q-18 0 -30 12t-12 30v342q0 18 12 30t30 12h342zM427 256h-43v43h-21v-43h-43v-21h43v-43h21v43h43v21zM192 271v-36h61q-2 -13 -15 -29q-14 -16 -46 -17q-1.13636 -0.0454545 -2.26446 -0.0454545 -q-23.6901 0 -43.7355 20.0455q-19 19 -19 47t18 47q18 18 47 20q2.14286 0.142857 4.20408 0.142857q12.3673 0 21.7959 -5.14286q11 -6 17 -12l29 28q-28 28 -72 29q-1.33333 0.030303 -2.65565 0.030303q-42.314 0 -73.3444 -31.0303q-30 -30 -30 -76t30 -76t76 -30t74 28 -t28 75q0 13 -2 18h-100z" /> - </font> -</defs></svg> diff --git a/plugins/easy_mindmup/assets/fonts/EasyMaterialIcons-Regular.ttf b/plugins/easy_mindmup/assets/fonts/EasyMaterialIcons-Regular.ttf deleted file mode 100644 index 567bc7822e146735ca48da310f6839b1f39ce3ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139928 zcmZQzWME(rU}RumVPJ4`3-PVqCU3~Vq*TMez#!x9;_Aj<&BMvSxMK?g1B0D=fPe4< ziT86Dn3P-?7#PglgF~Gzo!lMIz_{ZJ14Cwjf3Uuh|MjAi3=E7N3=9kj$+?LI55L^s z!@$5fgMoofE4i#hfkBYbg@J+p2m=EHOL}5)!T<jZ%nXb>)-W(IaHQu{racn!I>f*r zUckUunUj&4n8I;^`v3z2BM->FjEvMo7Dgsk1_qEB3@RD9B^3oc>AnmMj4v1%*w^Lc zCnuV{oBWD_f&T;p1N(~H#EJqIU51AY42&5J3=9f+iMgpek1vg3V4QG=fq`jmL4I+G zw|wUd2FA%X3=FDz;ILq1y0Boo-m-Xpo39M=Obj4!>E7Z~Ao|Ka6?F!N|Nod6m{>sW zWq?RCfb>C_a1s=%AT2P=0#d_#nPCHi1Xu{9kP#%t;J}~<7GYsxV4T1J@|zE18Uq7^ zJ0pbt${@+m!oa}9z{(6(2O=1SK*0xMF)%O$q`9UrG%y(a{|_=0q!KKF>;eS_Z6*c= zL6A5|4G4qSRKeN|+6<x$4h-514h#+qp<rwZ=VdcwgXKV~K<cy^8W=$A)nF3D0_g<l z2k8xEXaLJY)PPLXX2@ok3N{(UQ(_Qh2t|UT45CnTLK$Fe5Um5Y6T|{xkWP>~2L=X) zP=;~_2Zn5hP_PRj_Ji0UdqD07(I8Q624k=pkRXa?5M{^)V~`vJ*uNlMc2HYEszC0C z`4wan%p{1Z5Ib$bW`fL6WXJ})9HbJY0u%}$H6S?<9}-p|9s*BgfI*NwppfQgfIw}A zPzI2zK)!`wka-+X8z63HWB`Q`$TVYcjBzk<GJsTo(wa8IREBnNC?nhhas?`$%AgGn zK?bnO1_lKNP&|i%V;JOi5UT;~Lr~a&T;RY^4i0Bfc!R<R5_jQXmv}RPTn#b-6cP+z zvq9kq!k|<Gaw!Od`~&eDB<+CQ1Y)gb*v<g54U$$segx?RVUSHA6CiAmdXURNZUCh- zP{@K(5y*WYvq5%%Tn{qGfx#5)r)-7>Xvp$|{R2`1G7*%LK>9#tf@nxcfJ}vmfJl%% zFm<4C0O1wjbON#s6@%1+d=3)TVK4-zD^Og3#6dBt%^=6%0M@Gob_a+Jk^`BKY%9op zpfCZ2Bq&@!>Of*3yFsA=Vng%@F@QoJBrgF@9UxIqtVS|8FsOn>K<0x|0W8cxZUbQ- z29QfZ7^EBGdr%rwh2}?4_<`I6u?u1@NEOIDP|5@80;z|%2NZK48Hj2taEb)+L8=lM zAYp9<PG_LFvIC2NVhN-MWC|$lfP4!|QJ{1=6`Z3z89=@V#a;tcM<~NphA@VC4D%R3 zX#k|UfuS6nVj(tz%mZN%59DJI8-zhI3sMad4`l%5Taay_Z~>(sEd~W}$pcaeatTNb z6h;l;lnwDMh}34d3Jz0HJU~K3lmTQi#8im+5Z{1wgLHtzK%oW-Nr*0xT996lD1@!e zzz9tZATdzMrp=%Xwg==6ked(~l!`z;2c=3ru$w_@ASQ#t6J)z511C77VWxv<h&w<k zKs*oz*#jz_A$mcv0<s0-GLUMBILJIu9D;O!<QTwZEy&NH(B%fZ8zcvDIVjhHROvE+ zLKYNnq6~uI^bV2%g$XFNM1jjn5D(-A6L5(FvJK)oh&U+hAYlu!9i$Ru2Ph?hXpnjc zhPV~P2I&O31%g5G3vvs{S0LS{4C)M^R0Pr;#h}dqD(gXY00ToR*gYU|h<Z@1qRp@x zoO?m;0Lg&j50tM!;SVwy<TiV-%Ry#?(hSH2APlixn;{GugCJcX%m8W&Fo5cO9R>yl zE(QiB9dLVrfmH?6Vq#!m&|zSPinD-g^cn^S237_e21|x`hN=h54<sKbK2Uj}^T6<d z<%8e{g%9>T*#F?jgQpL3A5MKZ=i%XpCmvpSc>Cd_M=6hvJUaR4%wvwn5|1q&KY0A^ ziSQG>CpJ&bo)$g5`%K}P>$9WJ?moN!?BVm5FBo6&y%2q2^&;>^@r!LQ&b?%K$@Y@} zrS@x|H+pX${{PRwz+k`-&ye_l;eq4>=?BUWG#=<ZFn(bDAoRid2m2lzesJue>%$2T z=R92e@WjKj4{tnt@JQ{^o=3+Xoq5dunCr3B<GGI?J^uJa^ohY!-KUmM4?p93ru^&( z%=YK+UU0t<d|~p!_eJoF(ib~kTzJX!lH;Y|YwI_9Z}0v8|Nrv;b^q5YXebCP2q_3E z@G0;r@F;LAaLJ#QKO=uq{)Bv{yt}-kytTZ!ys^BFyoTIUxjwmGxo){Yxd1tT+1IkK zWM9ZWmwhJlP3DWt5}6X2BIz&Ecct%0-<G-}bwTR5)KRJBQd6a-NKKZSBsEcLf>gg$ zpG3X*Jkj@%m;qHd1A;-VV+N)lP`mBGvB1D!$-n?kKk*C<3?R(Qz`&5mz`#(&z`(%A z!0>>9f#CrteQ7W-JdlK71|0^52ht1-4-^>~7<3sJ9w;*~JWyd^U@&1|cmPrdN{eO; z3=i}e7#<ihFfdp%Fg!43V0Zws%btPZ0f-;Wz`)?f!0;fHf#E?R#O?>{85kbyVPIgW zVPJT$kAdOAeg+1HE(V4NhZz_ifcgSG3=9vBF)%!M%D}+T$H4H=m4V@5E&~I@ItGS^ z6BrmCPGw+VxX!@va1I1B++|>RxR`<A;b8^_hI<SQ4^Kca!+!>bhi4fW9$o-9${8Ns zU|@K7n}LCmg@NJW0|thNj~EyjIT#oosWC7-N?~AN<Yr)aw1<J=(Gdm)MlS}2N5>c# z9)bEV!3+$K&Ok6@I0M6Db_RyW91IMM5ey8ExfmE8OE54nMlmovmSSLdY{9_5n90EK zcrF9O;|Gww&*Mi743FP2Ffg8BV0iqIf#HcT0|Vnt28Ji13=B{77#JA;FfcqZU|@J+ z!@$5K#=!7Ymx1A_83O~8G6Ta?O9qCgMGOo~AhE*?3{USeFfgSvFg)X9V0fm$z`)eR z!0=3&f#I1e0|V1k28L%x7#N-%Wnf_1!NBnBE(9~}Vqkc7AA*^7GcY`R2*FHy7#N<v zgkYw<3=GfTF)+MfWME+0$H4G{n}Oj49|Hr^B?g8Uf(#5VL>U;Et}!sYFkxVLVa33} zben<Ug)alci$Dejrbi46FM=5uUKBGhFg<5rcu~s0@M0SS12YE$!;2jZ3@^?xFfe;D zFub_H!0-~33=<g`UNSK-ykuiwV4lRl@REap;Uzx<1M_qShL?g23@^1A7?|fXFub;A zV0i7rz`(qVf#HoF1T&vuV0e3vf#K~#1_tJ{3<CfEf-wX0MFs{&Hb^{!Qa&T75CmZm z2ZoV*K~OPf7FITP4o)s^aIS$0;-+{R`1l0`g@i>!#l$5frKDwK<>VC<m6TOf)zoq8 zqOT0NPtBkOhDHol3{DJQ3_%Q03`q=G3`Go83{4DO43ijUF)U(O#juHC7sDZjQw*0F zZZSM!c*XFE;TIzlBNw9(qZFeOqZXqPqZOkQqZeZkV*%p~#tn=wm;{)jnAR~JWBS0% z#4N&W#oWVuiG_(pk0py`1<M6i4pt}DI@S%Ww^-k?@vxb&Ij}{rRk1B#yTQ)FZpB{3 zK7;)L`y&nx4k->jjx>%Ej%6HQIF&eEICD6gI45yl;QYa*#+Af1fol)94)+5dC!S5b z8N6rsnD|2Y7VsV5`^3+}ufZR~-^IU<|Al~<K%796z!8CGf?R?|f+2z>f{O%?3CRfg z2-OKq5?Uv8MCgXlH(@1V8{sVB6~f;{azrMH>=U^m$|o8i+9kS4^nvIvF*z|Ou{^O0 z;!@%<;)}#@iT{&OkZ_Smlb9xPK;nm_f@Fl`0?AuaAyQ3Jd!$}Si%5q^XGu?zUM77( z`h$#=jGs)M%nF%9GM{8!Wb0(-$sUlsCHqc}K`uqEPwtT13wb_yEqM$10Qn;MHu)v; zC*;2<WGGZAOj6jOa7N*mqMl-c;uOVmivN^!loFJtDD6@DrmUjurCg>wPkEp6Jry|> zCzUdlMJjhxxm4{`(^R`ucd7nR(@@J$TcUPNT|qrdeUADe^$Y6HG_*8|G$v@=&{WWD z&^)I3K}%1|Mk`FKN~=$6h1L#j4s9LnFzrd&7jzVKB6KF{?9i3dou#`^Pf4#r?}5IM zeue%z12KadgGB}>4Bi=v89EuJ87?q9X86R2&&a~aćlhHe48Dlf!Amak#Nyb}@ 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 diff --git a/plugins/easy_mindmup/assets/fonts/EasyMaterialIcons-Regular.woff b/plugins/easy_mindmup/assets/fonts/EasyMaterialIcons-Regular.woff deleted file mode 100644 index ceb41a11158b2497932b035bc1c46258beaa8130..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64752 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%0Aud;qlTX|+$)sw}UZ`S|6^h3<*)QbDM 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 diff --git a/plugins/easy_mindmup/assets/fonts/EasyMaterialIcons-Regular.woff2 b/plugins/easy_mindmup/assets/fonts/EasyMaterialIcons-Regular.woff2 deleted file mode 100644 index 6fbc47406ef0bcbe8b57b6da13670dcb60fd0f2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80288 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⃥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¬GYHk9ukJV{fSIovio1m3}*y2hYqsY4~}H`EIjc%Bl|@YcNVDe|wX;`O#@< z!%vx!+v|+nqCRTWZ>-CI^Mb=;#*0loDPHWk4!2yUSNHh6vsf5!7!q*gd}iasmWi(y zD4Uf341c{o!%y>e!10N16T{~{>i?_obL#Zc-pPikI($D|+*+D_{xAkq=x1HJ5#AP} zxua4`?Gw*p4%d9QlXV|OMB8Fxmc%=$uqFT06Z|ycwy3|}a%*#yo~q`F?LT6+@2$Q+ zcNPEdFOJSX_SfsrsHi@g>g(k-`+~mzmJc&#H1ochy!j=|7p;1~PIh1JzYD@$^y}vE ze(!fZHTjXkpEIfJ=h`pj`t!ri@v$+>3Aw=E`h~eEzQ4VbDyC_zVcuSR#PH_VZjm)2 zE=w#ePfBf=^y2ofyS4weeGI7k^X=!CA3q-nZz<f_P!by7UYdH`T6XT52&<#+8)XuH zcHa9Dw?3WS?v7H$bk}Ozl)%$$vi9pYzgncB{Z`E(VZq@Om2Pamnd*)*@H}7r{$Sge z>mdps>eYhU?9+r7?>SJS!R`8lJDFo~blj#X<`1-Gr};>6wO>4^H}$Der-j$H;MEq) zlW$$I>r?SfI4qc9<jgoDyiC|M@^s>+fZxy0Ifs6I$l4Qdbr<iHIhGQ0olRAC%-`Cw z>tj<%MAX?u!YUV|_Q|N1$NF<IFD>OTE;Q6wfA`MHb3Fm#Zw$;#B>Ps(>t(yHV}EUd z#($l=iObf%<7F?uu4cGVcX`9r$EovzA9Ob)PZWKzOhkr5^vUgOhd8%q%w&@4dbQBD z@RhGa<)$5~#~qWd&pl}WRQpEsSI0TmikEKrU6A^*E^fKgmC|o^Q|?WVDNmfRAk@F0 z(3$Vu^^ygzCOPN4E;Rf&r|Uz&v`BCDvLmkpDqD|*Pkfi7a_izvR~~N7X5}y;?P#|v zCWSSx-Csv_MfRmEI%HrIx7;Z6cDq#2KA|g7XHwH|iflIUOph?CXj=Lr;2cNtg)6&n z7*0~3&my^bRUD72p#4deo4cd=Y(pj*n;ewm*P5f$vN!TgiN=qI$7X5z@NG9b`RvZW z+@3}2PMot+<yQ?4vJH73x9~S>py39k`~I?7sfo88g}Zt-IXLf~pwZzfos^fY$-JDO z)5lA(`GnK!Y3<%ERW<wc(!-ck_OWSLODKE3dwON<onuRMchBn)`?A!lEqNN#&QgiT zuimjL3pr=Xc<p_5(zUhI`RLlPe)joC4t%TXys;*Web4z>UP~21AM(F@oygxcWr@&{ zwZE8e_C5^ymAq!jw^Q@<I_6HFA69xJUwd<JV4j7m`rnrM-}XM=G~=v(*q6Ic6K*Aa zl8%^ixzXeH{Xd+_KFT|;+y0*Ope9f-^pt^4Wz@<;X%z=U<+vZlRbCD~JaJ+TOV5$Z zon{ZNzNq|I^xTloN#o&Vo8|KN_px%f88W{+Wc#eF=CIN)$M}-Y#GRpij9qiXymu=o zT|I9<r|HDv8J$Zwr_C+y-7NLt>Xe7vJXJeSv`g|-7`ciUd|7NJ<QzP6N^Q@A=dV;> ztqhgyQRUH>{XEN;&rpBT^sSs$LglY#IQgz_)UcM0Q~h8ty?L2>^7112$60zmQa<z) zOtX)ZlFa;UC2KO3E#+4Kultksu1FAiCh|A-y~6R#Nh!;AT3*{I`{5_wiHk4tkGHAC z1(nN`vc6;JoLDx+zkt=0&B^mgz7hNRi^gj=iiOWfKRT6nMn?OKI-j-I1G}EB{ZO9B z?z`LORDa>sp2ruA&RmnRu(z$>*<Dm>|KwBlecvk?E6sHdX1saObi4mq>#QF?!_UoF zz?SexBSe%{u9~ysS~Ht!;S>djM;zOJ{h3!2(094~zd#(TqKB=xLP&ghX(`7cGnYob zFa`EwDc5#b@J|eTY%<kXZgEb(eQ4i<AltHdqlh_2OTKAEELgQz;gtAuZH11jSHJ2= zOjvBqy4RgI?a{@sGUh*B(uejG-;G?fXM0)N%!Y!TO+V}F>-UAMyL#Cu`0m%s7Q8kK zJ+zYDzx}c<=2|dWeU{PcbL+Q%yIfYDx~cCd>+09HPtGr^S`l=Y`^co`lJfT=KD_EK z`+H3{seN7?eD9nOcgO0OT^ovjUzE((h-BL#dS2B>x+nE8N7=a>e}f;e9oSygy75k$ z`L-Xen^+l+8AMz8MtQz|ceGGRt-Wp&*IBQ1CSQdYJX<z%`iXRb4E`tV(q2~X<)sF5 ze1yLw%4|@ZE_ZU1hiU4z#3jXFTzf+NUY5pe5c9lVB0e)(`rtj6XXVK!Tp1Jg_`ZI4 zIK$O=x}mC;ho-lZ)8Z$#*A0AhtqzJr9lsc|VkQ3+*~AB)$5`gc*D2olBFJdld(VRL zxa16(7ok~#_x`b;a^1);(J#Th*HJrd;TuB-N9l_Gx7U<!wy!djJN!>VbWhXe9YqQM z<peYYJg%7X=12rAl5>21@k=4^O<$228c~8rn>crzOW9#Q-9_H(M5R$c$g{Pp*k0|q zwPp5=ujPlPZ@HQLxMJl;$vqd}H0SZ0aWDV>dydcvhS@jyFMT=VY99Ch*wc@$Ni%Cs zSx#MgFfvzTr{fQyZw_tex?d-~e;84dymxNpF~KW)_Fg#jc;8C_ov(gO8@8pI9Y`s2 zvicWb9;eg3_~o0$w=#BRSDk)vVot#WrW^j&b`dM<%I4d$vsfe-POnHxTE=Cx;Dnak z%T~L3$DZ0>Y-zV=IDUB?yJflCwcX!TdtYf^;ybnT@nbd{kNBU_zwR6~U(g`V@p{fH zcGu+63P$Uj!hg*_^8KAD_%Qu?>x>Vd*zF&ruvz_YEBVWI#r$>F2mk8pm1hjDZaTVF z(%ZH;qcr_t`p+Nr{0X8W0#`R*dc8nK$|~qVRm6et>Hm+;VVNg9#Ubuu#9#icMiL3( zIuFA5d!!Q--gP=e?fnqF!fEFvgL^qw4bSD({&|^vzO>~1>-+QTH=MPTJl=nJ-=X}o z|D@GVo}PCuiR<`QxhEydu1l=qYTn5#X1yyTBwb2NX7RaOX*I{(gO(M)DAAdD>RHnn zF{L-xBG+dc8Mkkrv)4ynSCN_ZX}fE3{Pz3%UdJW!tN5oaKhtUZe8a<=%p2x!+o?P8 zPu-ud(r^Bp+VM!d{O?-XubYzlBV)MyUz`oO=eI7iqco&xGkeZV1@>=pzm|$#>5BBd zq_KAAbJg9Ma&NSm8g)cI{#==$^0fZ2#FkU<EXvtUSF6e^cfR%v*uB)fw}0=$6RAsL zT6C@)n=y6DuG$0Jqc2(BFD+;}x^zkJZ1-jNFW-`H3S;*ZO1QuBvyziUr8~3S?EVfF z=5;aEarznNFGFU&ZZ%#rqqOMQA78Uodo)kozA7lWcgEYvg`V9P?rxm0@W%s7ChyXs zouQGZ6tZ6itoyv6f2yV&L;F4H)fOS?k5(x!QJU7D8M@j()${nx%+lpjKDVy<$Sb*6 z9chrsl3ba)OnvI*b!Sc<(QCNPC$79MHq$+Gg~PO-X@6{2HEM5~YdFuIb#}=Ez1;^| zKJL2Yvrw!#a9vhhs;}GOV|J{`7WF1+XWAZiO6>mpeQWno<9CZrFFp5R%8eGwg{RZE zW={U<c{6fJ@}jx6t4}+|d#!o(dDEizI=ZjYeuhkYa=zzQfOS+(E=$U`0O{)0OZNCY zxmc1Z+pyd~_>r5$;Y{<m8QdFgmfk!rH@#-YvQysk>u(<Tba>hP)fU|I9~pl9$?5&g zkNZyP_Mml-I7B%P&S2g7$KnG+gI^Sr$dhTiJHoQK&OVR$mfK@=^6&)@X${*)!Bew7 z9$2^L^%s{bddkKJ1Fv3ojoZB>X6l|<v%<uc*1wLP;-&I*PGZaZ-cDvlDPIL9>AjOA z8+P8Ec{W?S=H2XVQJpoRS7vUEPugV~<I5#}EhSqcUUuz^C(CvIe02XB|K1{T@{Z4H z3+2~u(s^{UbmpyQ@!n<Zw^L<>=LYpB>xw_##_QN}x%>dHNm|LBg}d8#EfR~^)^nm; zLuFQ_rNejMFF#C}AI9&!wT3nRK$3uhH*e=LX2U4S1yT9MkM*p@E+3G{C{HU)N;r0J z^^~x$DgOEom1+VS;ydyt?62Wf+qI*7VFqhLPjDw+{Aaz@@hqJYD;NLTl{}Yw#hd<; zH4;nxc$Za5x-(p@4LR!*WEA-D`X#}Wg07c63{8`!dc4&5u}ISFr$x?{B^OoBI_|pP z&UGwqp>KA~Lf0^xhn|8jeturm>2mAyk*qfjGkUc*yizJ(n)Nfs)B0M_<T)u1J2%~u zx@@APQ#Wx-&F-^rM9+Rxdi?vizH9Tzhs^WB6S^zTcWo4njExK0S2A(k!HO`K%u>U9 z=Wh1|{&umPo2%)y=|$#Dja?7Y_ZH2%n#XGVaLqgOrJ;hg^E+QX|C-MfUdS1BWzv?X zh2@tQT`YT_C0l(bWaSqX_hn&QcOE`)(*9a<S-SmO^Qy3wd7sV{Tw4Bf{<do|8*FbF z@30i@x@Vxh`d#Eyt@V!K+Pm(|y4|+H>b7`x^XtT;dr$s}`d-v?@WQ^$(FX!$|3oT& zJ(c6r<@3OdcUAnie7WT1$)%qKdwgGeHI+|W?O%4Iy(TQokJ)yHr@+Ay9sTN^r;fea z^YC)tuL}veY{}wp_{ugK%e-vL_D!24R{Xx^*3p|6Ra4jK^Qq+4&bl+XWTShA`!41^ zLcjLzK9I9TeCFZe_tLdNcH#cgk$j&s_wSJC-s-om=2`V#JBtr}eum#(ncVpPW9^y? z=jHeP(C;edv8xYtnR~nQ;QRbf+S~8M+1dtlU!JbFGm7<qZ2o&bW)`!lYj5VR+N9@g zw=F&I)<bXOcMBJ5*W1jL|NY^wi09rpA%%|Dp7*)VuXQkVz5L;p;0Mmvr&ngZ4+wv_ z`n6Yn-YUV0Hf`tR{aMPdRhGTl81ZGrjSHJ4P9J*J`CQvpu<5kpoR>NJ5$(ZTg{Qt9 zn-#aK?U(hl>tP%s^;(A%KU*?}S)W$jtouAdTdvnzwsPYkw+Y^Ld$qc9)a(T}T!>LA z<=r;v-ldZ%S05|#T@!uDb}Q$p(Wy5c{oOt#+bt?)?B1ySaoJjf@Cp^vb47Q4u8hpt z_GY5YQyabS)5E{7v{}AEHtO#~%h%?sS66G)&w9P+N7?Tmd~f;}ER}q(ulk0C`;JFX z--QUn>=yzt71tjWRQ&nz^7TfSvopS|c@@^LzjQlaSO|AveR9etg+LxJb%B>Q{uRk- z(<XT?HoW_G?c~;PyA<;DY?rkZ$oNQ`IiBL1rcyppV%m)fqT7B?x~I3TJybvN<FBj# z!b&>&PV9|5*>!(?hSW!euU7HD<@MAz{rM^+_HI?+?e_jh9VOXU=e|3;PH)w3^RBDB z<-ev~TwEJd;~gqJ^U2-J&WWwj&KK`2U4F3m>BRj@CVAggE(=ZH^zf_G0p^+&F%N~p z4qMlr-~Hl!uFvFqpB_tmtX;wTYv!lLR~5w5&23L5AK2p|#(BJ?S!1rz>0qtr(sN3C zgIO=?RSS5Q7Jg27*L^ecZfM&2ZjpHp<9;V(Kdacys9f_sx|yYI?!92Aj;za!X1AxC zu6-5W+xp|zX1TsqXT`&9YL8jWOFhjazGRAtNUi-AzdP5KDSe$gYuk-oCvG`h4fy`^ zq1VY;w*?-v_AdEix~1;!=U25y9~`c}=V8BqZH0I1?n7%L-Gcegd^~H@m-gb}1eF87 z6ur-{t$8OAy18EOQ0a}e%T_(SEM-(|wLf-c)Xi^ZD*N*bvK6MDO531PdrI|LnOI)E z-`j;TqLy24@=9}91YO+r^IK`cZP$+csTEyCFP&G1`FU3E&6v6LBm?6ipN2C#Gud7w zl%#JdDR6C9zbjBCa#fIZUy{`0ZKqXRR<!k1Kl`9+<oLn%dBf>1t62GCq*rZR@@bW1 zim`b4pRY+*xkFmcetM_%V~fw74Q~ZcY~3DwRCT#MgFokvpveK=y2ULyOFnOIx|R{S z*Y9TcGZ#H8d8gUFf-{w5C6W%@>;KDGtaGbfxw7J=sbd4PeQ$TrQ;wXI6B~EAH{Ed; zshd$0)V*WFPu2z{({IylF3*yTZo9F*Z@pxI@UmQ<_zBBgMSSL*^j6wn(DrwWp;$#5 z|Nn*B*&i-<9`9bi|IeOT`^)@mZBIpP-}}A)=jXVq{PLHk?X9!6;s5<^M*9!`uEd+2 zp^=N7XXxcuSMS@E;}@>&E-J0*$=O%p>1SsC|CPndYF?(dVjdw1%zm~D6>l-R+|V-B zT$K9t(B_`m$BNe<j?R8wx%t#I)hL<X&c4#`f7evVq^y6GAa}C<?h3u)wux0i2VC{D zw%xAS$97p*VOH`Nca;tOE8e>7Hg4{&uQR?CIU#Gd<&^6jhlQ3!-KwqAzAP84Cd#@| z<q5Cox(^Auja`*@R~Z*>d+X$sCY@SWXXo^B`JBSYoh6UAcQn4fZ;*D-|7wzKr8Q4t zQ=&5azT*1qxwSG=zIs)@S$(Qtkpk<|tegq4U$V<0wrxt&D4x{9&)})0zO=*Nr|);* zheC}Q_3hUed~G=Tj=}HO!@XrPv-nduHLDU5x=c1HO#h|7bMumW^9!=x^M!4b4c}j# zH0MON(3<>5Z0BD26*a|HsN^itn!WJ4`c#u;Otbg5T;CQo!NgVg?o5xiaIvi&3v6F< zOYCDRPTh1m^a$r?F2lqe-k|C0H{8y&zj|_Z-Tcbn(~<nuM;EPAx}tq}vGJh^DOI{s z&zDuGxT}V3JuhaJps=umb6L&pzs?@<Q+8G?e6uUAX61s^!t8|wug-E_INg1tKFavW zQ(5uw#VcH;Orj=5E||}}YR4>2_ury9o6NI&B?VtBd)e-s5ydR1GF>OrS5N&|FO#fD z<Z;b=d8X32C-N&kCZwO8U3j7Iug_KMFs^CM(Q+?L)0U=tIf<Grljc`@FLvRfTH3Lm zIEj4^UB#yTRDHO`OLcO4sTEuCbi3C*$5ocHx23K3_Sm;eIA?eKGq$TQz8{=b)Dyn> z&uW*IngTP{B&Z!a<0~R~^ZKJ%Q$9Y>bZxrn5ng*mdgF|C?zNV|2MaUz-ul5b<=N2} zuBW=@w8}q_zG}R2Z)PvkhkZAVeq4|;V>-WcSIeB!MaP!PA6(sa{Yu)c>`A+JoOU!@ zx^vepH{Nz*+xuN7n4K>FxZ<m?uXXi#i@24<_kFq(Z@6%NPp`_9Z|dk-e{PR9&jQQm z$24Bm3BKPEJv&8ZecU45_1w!N`bD0-?Cj=Rvd-<Tq1`(5;{vXQ{+}=GzF~Uj*`3a3 zZ+-VB9JQ^P88qX=#&*xrpHaHn?3Qo!tP)$7xou=ywenihP2KRx_3t_pubTfCUKLU^ zDcI(wm)rb*iqF<`Xm$S)om%U3@0@Jx;XA%(!~H*G`&7u=PEozx`ia{zMxoOoMk~OV z{b0q*$D)59Y;Nj$AKiHN-im<Ey(!f;ze;6|r%jmiw}(5-sk7O7=Zdvb>D!C%ZF#j% z(X%kn-{R?l-awYZ+G&gn+*+1T-efhCbFayCm6w+UWsaTOCd|Q^z1lW5W6?a>i;vz| zoTz%ODDwA4pz6Xy4OP>#K8r2+_SSpRjVT$MWHyxMbQ*OuTlmbc^1PqAvD8gdGAU9d zWpcQopv*DX<kd|1f>RbhHR=*iY}U!P%&xk(#CFx|m$!fAoZh=Uz0hi&H2b^S3(P;2 z4qoUxcl9mznmK0${vXi0>&P+n<B4z?KffjMDcaM#gG-GUB<P-3i#X}(CBn1i&*CGA zx8>h8|1Un<yyu%J(=*X@?at1OoHHMuTsm^|uGO@%_D_0Oul{}R%H4fxvthLN)a6;* zKj*76TVA@VYI^(6YK>X5GcQjUj=wQoeCAKpE44G{eh+V5Ci&{1OOW$JEtcf$sgt*) zmcNf?VYv2dw)FH`lYg91pZ-T5TlO?Gbnb$c^M1VhJuj>H-2Xq@CqIohbARz~yZBk| zf~?0y*S{W&Sn!ua?HB*1XKU9=R_WH1Xs(-GYx{9(ZSCD7@yceGq7FW{{~f_sc{uBj zO!dVwt3&7bJ=A{Gz52ELj6%(-f2Y@Tbj;o>-6iD{EV6EPt+mt{lfe7ejf%1jw{P0Y z|6k3fD9e2AuCL!#{kgt>LEf=@d;b0lKfQQg*0qV@5hWol6GNh0*L?rNwI(NX)}ol7 zI^n)v$3JhrUOHFnN#1+S`Wj{j)oD>vrZ1GtVeN@8bg1%M_wnM2Kl?ZjeA>KSMD=Em z3m1dO^O#NX$$z94<n58`db_7PcIHXn&ugB4t=K(n%e=)EB{An$N3&h|V56^Re><SN z`LwYvcftOxd+O5C<}?SmZ+`oA?a8|KQ<1-$6P+i;2(vKO1#No~?p0{Sp1rs}g=znb zK2b3l!AHv{e@xo^YU=!#N}Wpry>9b<c)lZdl|)UC#@iK_-I()5v+CC@Y0$daDv&c* zvCGv<l99dDb)EgvqCfXOKVxrW4cg4FSi<vA<%VdmSg-KE^aVAYU*!tJ^bWS2Wpo#x zFj;D1PsH!HTrJuOJQFqv3O&(vX?>l=(%qusx1S|2^RKyEnYoM7ysZMtX2C+OZ*5Lx z)^1Ly)7mK-7sa-^$ZfV;)|q2XPm_O4=u%58+-8~dXOEWm(nX(A@3J0E*%-_;EAXk@ z37<PLjC<2=zn)_5P+P*VP`>r9=fQKUvkoNBTzzl(l)EKG><@e<_{Iv_7fDIp5S!7l z(JGj!FHbGqK|rAV@BhaYXa0YGx%|KPZ@&Du$0sVtPkv|r;qm|fZ+@<Jm(HoEw7J+{ zQ`57`-mIp^uj0c(g}XJT>puSW-6KBj2k*PvJ-=goG&kMty8A#wv7PJ5u9>r)**k6= zauihRjoJU`X|uJ<`jj@Gc7euse<k@(d}90<aJcqU@`3Eakcy37eL)L4Ocrh0!eG2g zBE-}w@n%{3`3twM$<2~|+vddexA=e&XKU4zvOlc;B`Y*?>K4Z^7F>`Mf9%m)YIh`L zZ@2%+ME9<*&p)P^#mB7KY-+NFU$Fnv(nI{mLv4eqVjo$|^Le?<sQlFV27%&*KZQPB zcb;F=6|mhogg<5d@;;{~#j@Rc!rhnLECb^67p6?#cj;olmG`HFPV)Z#b4tvwBsA~Y ztb#NS4x6uRK{s<Yi7n4)`N8|*&e_!xOMW@&-+R7f;v~ahla|$UqGiQ2Ua{?2B`$G( znpMY)TOCL0LYBm(9k2E)ecG)dDzWEG^y#961Jk9g*p7#;Z&6?IJ6wHd@XE&P7x%^# z8<$S*F0z$=99Pv-v2mI9dYAr?LaY0lULmH=l6v3n?dsLrFaO?>^Z3rWVyP86zfEob zR;>7CCbPx;wz+!Wp4-2V$A>Mx&(+O-+O>FN-J4IZW>r>1DHS&6Pj+LurE+{p$V@g- z;oVuwr|!KRKKbjXYgsSu1or2<I(8iVQnuLbhaby96Gg4XjK?EQ_DX*}nRe~AkXZ0R zuCTU+x6HjZ*JLdH<`T?Sct6p$FyPpYgy8qL7kbG2^9oq{q<Z^=1#SoT-9L1FZp1^G zt@bO+%M4Gr{8`X{gjMw9nga<l^7U8bw@L5Lu6{b9=C<Jl^*)>M1rpUKukGD(Q!I&F zU9Tk2!A_hrW8R;}c~x^GKU8((@*QAwH+txyxa@Vt?#bJtFZ_Ejb;S!=o)SOa8y)*k zF7&+>Is5m_x5=%aeuqAL`f*`KZ+lH-^qsQl8LuW>3a?a2bJE%-6Y%x(SG9R+Ve$`e ze_mDIeYL0BTxQ)7pS9o4D6ZQ(e~Dns(Yohc=V#TQdikLwRp{l%yhlFL%xgZ~HIw!i zXV`01J>k^L$;$&H^&j4R>|6BK<45<Ngr_0N`6ABJA-fGPU7H?Z`d`b-Q(cf_bw#kk zZ0Ctd=8Z?Jrz*@_rM1d=E!$pCxA#+6mMr{!<F$Iyx}&dxzZ{9(K4DAuq7CM?r(O9S zI`&HCr7oHK)kr#$d+XlsoJ%IEZ+v>?{OeTq`!erS`0c;?zB1ZhU-944#`@8T7PC)R zkDk?Se9X+?BOZFDOC$3BZPle$mnp1xo;ATT=(386lGoDDjI*QMrfu17sDJ(8$5T^d z*w)?bUHjffO5*q*cIBAK^U|89AAen0x>`*m{lMi_nx!+c_3QV?Z*Sv!zURT;49_pu zB$r9)hFnv9`BFW!O14(TXO-{$1#hHyIUPj<lB-<bYfL&Zfr0aqZR*Yr_Q;OAS&5|! zrfq)0HvMO2b#1a^+%hk{PLq=RK^N>r+#bzqnjoC`bKd9Q(eAIEy<YfwOo%#`SG6SJ z)9uZnvcI|aYAm0AT|-$?)X2H%x3%;B*qFHc=2>61`ML+j6}9H4K1n)duxOd!(-4ie zb@l;bkJ%nuvD^)PcEaGO?jDn)B1;4AI6W>AT_(cTq#sbWvqr>o`^_eWzc;R}%GSF2 zbAIrxy(>I2mQRk3`dh1ScD|eWzng}|Y_{xx#-|o-u@9PT8f4DJzcEaoYJO(n?{EM6 z8>*LN+kLLDFD>*w&|mSwS^odMNbP7d)z?$6pYbuQ+HM*YJb#Do1A+Fuu*Y{loPGE7 zUVhxZ<E7D#M>x(FTypuo-|-GxF!SQ#%;rjwTe?}w>Kq#$mg%NUn9TB;XVnM&Tk|e# zUZy`O;rH$zB5Bu;7cTXQyxe8HBjroL;~jhMZIxH|TAY1-pOId{N|m5n-)F{r-hC+6 z#dLAQDm{&}S2W9%79G!e&GW-4+#^Txh@ukn*%`&2JEpfd9Xhm_C#*MSp0QHzk!hEg ztJrq96qZe52v(f2v3sTH9QB<W)|BOB{mH!YCh(Twj~=VzZub3CZycHWWb?Pp_qT+s zwr*VWvRyW;(6LeE#(KRR^OAY-Hj8xs>PEV_I@;Y65IwS8I`rz4rN^U+c1sxFo6%dT zbNJ$)b1hD{-)!<qe!Avh?^c&BRXs7&J8jI=_N<f^JH7q8hDQI5SFf{f=xHZu=+DnG zvXh;Y@biH5d)+s)4&1CzyU^h~TQzzYS9bYMv4nj~1e?6M1&aS9E#9niYsN!c-UA*P zi!VKU{iBHeehyR2%iOA}`5m^Kcifz!;dR$+_p|NiZ`<kcUqAIueTRI$@kd2vxzN)~ zGnu$VKdMR@T|SzBp<OO<iju*O8J=t3Nc>7k*(u0nv8q(;VCZ*l-#t|!O-&cpOwV?k za%NAa*)i@c@gvhSE580=)|qenWG_QR$keG1GEYbNhaFpcux6Xq3B~<8N{zPq3ST_N zUC1vpg`3Z<ZqAbnM>5ak_3M{}vx$Tsdm6pVLgQy)(>jfugx4L%uf2G>$5>|Sl}Q@K z(&v<1HDv?qnz?R0_|lqkTPe&c@~vKF)1{384?Dz?o(Q~Hv2y91S&kmNN;M=VFW7i_ z!jt`G1qSOT8!Dvsb%-T#u-RIquGk%_In}Bsw?p#N@r&+mAx~^7Vi)Gtt>|9vG*d&! zdH1ElV-hi6K5FXzUz&4h>8C#{tGHIam1oehSlQfu=4p#`MwK-0`RLz|pZO^$x1YVg zT}^4u{~fpfDkW}THTnIcs4GH@84rzCX0N|<c5`L-y4NYjkGD;J7S_X|lH5@vCd_z) zJ<j-I50kWol}|;&Q*pC9PN8z%5lziT$!5zuE=|cbOp}{+<4&kaX^}=o`<eUYY>%dW zmg+FEU(1;L|L!_}rGCCcx^;=gVwqDLSG09a6I%Lxwc_Su29~{XFFqZOxSh0g#(tyC z5ewKnU(Z-}AkbbsILY95Xn|tfVw>08I~B@RQ~lNIy23g<ubMCUoWQ?ds=Cs;I=oCf zPL110>HC$Hf9ITib@NvO&pOLj^Jcj%Ip_LYn`PDf3MV%uJO0mFC;V2qo{oF4eAVME zUCMo1<_TCI&Gs(!_}s*mJvs9&^W2xyf9I7YRT!M{;)$+VxZE#kT^OsLsNbA*zLKuF zDH^*|rYe8z=405WI{V1fjm{lfvO2!?F~2`fn_s3d<7}E}MiFQ8v9JF3mObIy7@X{V zwq1NycuwC}-@~tUH3dYYsyNQy4Q*Haey4he)#|7$qdy5bj;=9=zP81$FK;w=D?8a7 z#JTVMdKIy(NCj1|meby9r>C5;O0^F3a^?H*DfC<A*=d>XT9de^b$KgaGCKb2<)s6^ zr$|@`S~s76)^R>0x_q72>79oR4yuWCmg-AuFUx<kdHGh|$M>EGZvVNY=J(U@%@?W< zoGQur{r7s``zD<Pj?%rp@^5x6^7E`ewd%c&@BY)JhP8Po{_XJfwPL&+eeiGO^EZD# z3Eb-szu;!)`E=*$Crg|5Jr&aX|895TtH0Ylk91q@un*D9a9;E&%`-UTvQ>**uIjuz z509(K3-roTe>XqfYWddW`9FL11N$fZjSxJ#e`m}0j}y!H?#!&wZ+7C#3ubPX`ZHBT zZp*V5o=do<%O|XV>R|b}$Y!E%u6f7>_p84ig#@;2OuE{c=Qc@nU6a{ygXxzdTHlq= zSnGQ<rz`0}mj1-80&;w-Qs!zbxw47#+{e<=$49zvIyBGpyjzfRwTq!Ad6WL3hcl&0 z7**!nJ#QNS<#EU{UM{Vybd?Dw6Rd9>@4k56t7yB&l-V^3zdZFHXDH6Mk>-DM^iKJ@ z{KYT)1>0vje3`!dw27Zr#v|6x?I{|YyLb5-r@t(j%zkyrqGSE<uQfRRo91({s^aUM z3FjBg`JG*8nzeuD{VTu4S2C!)UUk!{k5{iNT;zF&g_?1~?3gtMUfUZp0#e^ixwCbT z=+@1_t|1XN-(n(bW|ni_a!i$<@F_<7`HC5fBl-CY{tL`2(Kvc(YTfFP1hs=p-?Cf3 z`txf=y4~?xNqckbGnIv&wcRL4U8c6;(r4So=4BJpZ^pS?+PlE;?3Y@0NB6V`;oF+L zreAT|6=fO~*2g|`_3o!DdcKIIuRQO0n`8eR`R!aH@e6K0>0jftMP|k8$&<WK-1d7@ zck@2`#fK6Z%p14uYW~RjZo8=H;u)RqW-PrU!h7)fUiMpo3f;HuFZ^tG@;a|jmG<2J z`TzgQ;V*TMP4>Iqr}J)^<%HP>*PCy7`Y^@r@UJgHA5@!tFTZZHQmTvN-?nc>@ce15 zD^Hm!b<OTtReD=!$2Ys|yz<>wJFdq$@ZV<I^1N94iCbIK1Fsh%oktUcZM6)}zF+e% z<+E1h0-K+|`noIxb49nyq_EzbUunfWr@Vj4etn@vpBmMv99OsbzWGxp!j_zHh&}l@ zhaf-SjF_U%C)X8a=1&QotKlyae_gRD<FnPt>hCLlZF^tuSXR3BthL~s_knpe4G!~u z+)iA#P=1lr!QGA3_jNCN_yvlcI(~~^#Oi5A{_APqJK0wXC{ADXKYhlF19$dc%lu*O zap0`TpZmAm53`!{Jv8cK>Jpk)rndZW;FBr8TkaIzalZ6F=Eyz;Rm)!w?*DXaUtF^$ zGHz|EZ-!Y}7H@-I>5N4g>?ds<WrT}Xz75{8d1B4cW$DVtKCg=C67<ubQDbys{<0k* zMI4K=I6j7{Z<6in%o1gJS7(;Y;Z*-*_e}db5kHADH$>ko2yPL5x8uK}$dnXI=C0jk z@0ktXZ>?Edt)KYsq|hO)8*L(GY3_S0POV%So)YmdqA+u3SHSwzZLvJl-#weAyCmSw z*XCNLochE38$-^1{`-FOqgoe<`+D-PgcnqQ&MyADb7Dk!K$c%sdd0;JCtmM5$p5+L z+oizf%8BMep?iy_WNYi+)BNo4!Pxh_(=z?jE{>*64%Y)?wrObfZ|oKq_$%r!Y9Hg0 zdP4qi=fq1lgO1G+)6RHnGHvpOJ9>F(X%pWpjR`*LQZ)IVNT0Wv!cLjZrK#U?9^^dQ zZuq9IuW<6-@NMsWGc7BB?L8T5e&u@T(y~;w%b(^-6{_zDe=YI*f4GN*>4ICzA7=7) zE`QxscHz;NYj=4(KmI70FQ*W*X?=L$>{`L;i+@Ib37sSM`}Fr~M-H8tCl<}7ZYOP# z|9+?Hk|UeFP9}Yyxvuy1V&TvKEHay<^M4AimYNrpvEMk<{HuUgdS&RITTGer&KkRv zUhcNM`11GpjzVkBijXA%=IWal-c#RXAUx~ap=n;N`fEEDpZ=v~DRBB=!Q=hb|LRmy zrzEA=$sdzkuebc?#AUU6&cFKVQZn2A&6P*9K3Zh{ESMU4+qG-zR;E~Pr;S0zww>jT z@8+&@J6$CG=!);uL+y@!4?VudUkp7MG^JVQ`8C5O>LN-0l|rdqu4VzzetTSNbQj%G zu6a}}H`A?a@4*zScx|npZWs22GF>>aWJ0gZ*BMfC%L@7%-r8N_c37+HDs`CQY0<&c zJ3N#BdB1CvyR$0j5U14@iT@@$R1SCFioB-b_hk9xIc-;SZ&&{Lb~pW5ThW=9rB&%C zdt0;w&M==jdn{?$^@NqP<`|x~%{ceqaFJyM|AYVGWwX<BXJ1yk)Sl2K^E#8g&}yfN zPt8%ksmamm9cy;R6`gaepFeYH_XO|Qvp@BmQ{((!O_<&@?{w3x6}`Q>R;Eq)w)}T) z`-j`!5S`Fip77y$=lSf%#?!WkpDXy1e(&)0a^DZ)``7&qv}%^x@<(=e=i{CC>%Quj zKa&1#{%+;xRUPUH8_TCzx7}ELVo}%pDa)7NFV9)^{QkAPgYUC#XD60&d$lO6of+L_ zvv&6U%?Up7;?H`srxdCPlxrEROI`Hk?VUd5uBDUzaQfP8$-d*b?y*t8^G(xBLSm~r z<sbD<V$9+H|KEjWhKJ_v?aNLj-uw9H_Wp=__d|;R{dEm!n0afVrzHQ%7j|F6-g?Y9 z>MMGTAt~-%=#K7;1s4=Fsu}|Jwr`35J^#?;+xAx42A4u^>D4W6R1Q{=TyoAZ<@t_B z-V4q>yExM?Sy}aaYr=f1Z;zkF`B}`$+&jY~=}$JJ@b{l<t+afZFDG}g`DT2xdd2XQ zAz|}#ySzUQ2bWKZ`ckws>)M~r@9EE6_b>XrG~i3&iZz#KaxQb%zqUPX;vWAvcSf;A z&!haCS7@<YTq_bzI~lsxujiTB&zwyjr}WAXx)ck34AoX={9X5QhV;vMSGP=D>9olz z``?)pcWh+TuiPoB)|4|klUrbQ)5IWP>&cS)0W&t&?Ynl@<5?fqUb*9U4TTjS=1%^# z<&@$k?cOI>&a4W^?zkGX!t0xgwzm`Cr>a8?f|_yxY!Vv3sy}P;``0+k*f{y(yByx5 zvkfm@+ry+kKQB17`^);giTak=>wf$GvV6Q|SB-<(&c~6@*_qCoSX}<|;evL0hs3du zB?WgAxQYd}+_g7u5<M3b@A~KSPcf_8W$JrwcD!fmT9`U@bEslE?+PxlYF3`!*Rfyt z4>n2ZX3Vx)Uo~05-s<$P$+}<8Bzvdn)Y*IwJ#6&BFZbAfnUwt#_8xw+Yi7=j>+Q#- z%%(S9>H54=Y=N@$$4x6D&rCj=d_}+5Z9{47^CKHLZG=Axlotu^yMK6wj*hax<Pv?A zt6Yt<Qgw@iKW#a`h$}X{M)T3<ecPV8dG@s*bN{+unah@i^Gd&L>eUDPq+Dv>se}|Z z%ZV47E-49qdgn@y@4>n^zfOrSG-QpMYk7fjSDr@4&SgJ@g6a=kFDP2Mzu`dR#Muo$ zQZ5J|Zr-AIXy(IM_4(<x`d3ezK5bgZ@<gf5?%=Nvt=AKFG3Z=Ri_!ZyS+T};!Pcs4 zos*tAAJQoaj_s>uP`-RXrMdlIc-;4!&cdSaS6!OuBl1LP^245{juROtoUY#eFSz8= z!SBnLpHDob+9<Z)c42B)uzbdXS5uTkW#4ghob8*e>AH>WuK1TdTViiTSgAHS8qT=T zE>$PoYTwdgC(#!iB;tO%kLQ-V$9th>i!zPJQ@c7Q_<6l~_it|VwTCaiU3gN;P<iUp zg-N|XIkr#q^V<IN@q!uMynah_whNt@C$#iNZMpB>Wd8omoDvT{ifmpz<-wwo#Tw5- z_GPcI@o=2^Pxk1Z=u2m|*$U1wJG1!8`Gjdn+fyrddi?H{<F{Fvl_#GvD?62??hN;A zX@SL}!Y5sJ9iF_V;?DGcGar9l^6!INjdo_mcj>u`1`}TJoo5kpEs5FU`q^DBJo7=p z!=z2MI)@9p7{jmDt3Iibe{)|)O>It)MSRh-2p``W0!!W-e+(~~Qpyo_yJ6c7%@zKM zae0>hs##u*rMYa{wkmHOA6<?8b>y<s$^Ea&c;05*ZJF4;EV!}IaE(dT1hZa!rRQOp z>RpoMTT84Os%Kh1FD<xw%;iP8(^M7Z_0P5jN_ZUmo3`CY^zt$Nm_+%#QEBqN>z$<3 zwv?O+6WFxJecxf*I*&I|Z$x+;eRr0bee`I(<)7hoB}4T6RExjo4z*5^bZh>uaii-& zG0#<n{x<Pz9szmx(tB%upILMK+<xi#X{%4?=qj~O%wHb%_T!aruWs;feK3JR`+{s< zt3|kb$SJ)G7rm#*+P&h@-)8Z!kk!+3{|C9<GdJwX`RtR}?2|6}lv`frz>!~*cm($E zR;qk&q51Nw`(yEtH5)va20ULRA+O|{aKEa0M^%nq=@<F`N0u-9J}2eyxvIy$q5k)p zCtB^?QmC277k8<)>FyjQ`#)bf<4^OKaB<yRUCA;#M#3t6iQ}v+fs}<wN#{Q^IO$4D zC$tLOl3jiI#eu~4y;C!y(oG&NU%{on>SBZ5mT$-WCO>0#`8Dy(`z_s?-cP40yfZks zY^KaAl~0~*YQ~OJ^&d%SbV$xDO<G_Wv%=g_Ho!QF<=&dIod=fgz8b?G;OE{uHFQSu zE+d0Y*J7XXuVi{H#y+(-+rCNl$-7DES5yBknzMbjrIsw8i}&}aDd!DdDmXto85oec za>lka>qSrQZFPCte(RUw_wz~B#z!~gIP@Be`#9}2jav0qGk=?Pl-lA&xBc&KyjxPa z%yn<U9$!n2r|HJoS0-0~XSTom+`6AJ_~Gl-w>@vZ{M^Krk#XV9+x5zOpEMnOb#C@X z7uL9^1t&g-*)9HIcIV-_;+g0EukcmcrKT+E`Q23H|8r?4T@@pdynj!=#eOiH?Dutj z_piSjg5s}!zNxNKG25=y-7Wo!tp1;#e4bm2I*(lX*_*q;j-_wqjJ7M&^qcey>ipk) zJ9gRLY0`hTqHLqpM{Cx<eEn^XW|)YIRX>B7)!Gx<n?9N@efl!>PNsX$4e@8rGyd-Q z$FX$ZvBVV*dv1z<3D;SBarIMAOFq|Qj}B?@zrFT#TKF>YZJ!R$Y%{5U^DuV*_HzPv zBP5ot+SV@h>~%fImZv{ot!fwN@XoiN{WAPtz_XW+yJTyMExw=NjY;0HKmVYOH(Tw| zn9p%{|4uh{4O;oBCep6wXY;IZ5v!eMFW2{p%>3iA?+}OM;y~v@|Id#iHWV68OyX}Z z&P`k&y~aJU(#yNy%YMrh){P$XjvK~Jd+BNUq;bBS*Q**=sX0?8-ME>0JvLs;WNAL5 z;{KC+GhdskF6TEfU2t1>PtDSL)8%5164qxO37Yir0KbF5q7(CcI$q9936zl4zoeQN z|G*^t(b9S4xBUGc2q+uP=4&)PzArXs{tc7dy<*v~LoGLLdAiWIXmjcp$(svHvTnW1 znK(agR$17@`O9YnAIyK=nI!yGL(VZG{HI){&)L_SD&Lo!F}V^tan+Wf%%_Kc)$S8x z`gq(wY2lGT&MDG5Zz9}RI=<6>l(u(G&yBNJb!SPQyUX3z*!o9kPsTpY{x|6&?B8PZ zGdI>Qm}61Yt{i+(%tr5;<gNdv7d%xB=iXUc#h$&~IV6y8uSb;lqf5WrpE^Bl`aNyy zTxX%W6Scd0r+#vh-?-0R=4Ry8sSEi(<lN(zF9`bhNM5zN&LwC0iC0&?bW6<nzV~a6 zvS^LirQZR^9?vVfvMT<bU43GnfT-N8nm@N!9(=KW|9?T1JB|A)R>U+XE<AL{BT#G6 zsWbVTbriXEt~o1CI8~LHy0PYrO@wlPA>S3rlM{R9U%!8Q>4yA}64CB1lcX)|+@B4S z@1}KgOk!vh*Ud`U6=t|w|8&G1-}-Ng5{osb6`353c9{L-QG<l$1-6qrx_#}G5)N7S zn%A1{?u+w_Y+qk_Blmjcr5#@xmwq~TSyXfCw9j88qhGUZlbC!-W&f!=_kPa$>utfp z_GB){)5FP&Tf-A9Pqa+4+kNWfy{T_g4S%1|Prdh;?Z0<no#lpF+kdfZvOmn4JiW`& z;AAk<)i*a<Rp#zzwVjrpe08dHgYS-B{}Ms}japqx^Nz<@>rIxc5w*4J>uOVY=OA*Q zXY+?CpTAwuaZq=@us_Xc(Kbcvz0S_U=NATw8~D0Uwp#Q`Z9)CdwdXY-3bB83T|8A) z;&r^t;^nWl2T1zPj2Ap;t0GyH=PS<pPwa<_SW#`6>V>^=*7;_>v*+`kt$ccQPqaRt z)qR`94>F=3%O11NlUX0V^YZ7HIR(pRZTp{FbVWA6bV*MD50^;>*SCVI7}*1<ul<>0 z=UsCTu-ko1^wn4U4+|SA-H)zjK6I|}(9{`5QyJuz*zm`jEeJak^(!P+nOAyl+iG(e zGrqSs8}Iv?ds=5MJbBs8vZRFh6c1-(LGknMCCgTSs`QcR+}XCE?c}E5s9Vc9BR9Os zNR`(!UMJ$N>TImK`1QX(JqrrO=1TJ}O~0_QUOp|uV@_G^g1DO(PrhIMSX{UJ{N|%; z;%6QEYx*R3N6V!C-8vSzllS_|T+w{^D{c1A$hGgBg+2MZ=UiTQt-#vAgmpK&?BbhC zbf>sYkgd0y<-zx=qyO#9XzK=z6<6oou9Uc%8aZq3tNA_WHg8mWa&D7Px}mVUGdJ5Z zvnGdMT;0Ju0aCYQ4|e|!{hWQiWbN&TGhHleX4ol|ZS`BiCZNRp<kHN?KRV=2$V|~V zd7&@La8qkKzu~lJHhIhs<xG4(?^gR8EZEcK__(cu>&9oZGY-5Tc6zszC2~bh$`gP2 z_`sT7-#++%e7@hmarvC$OY%`(SLO#q#e85p)mU&rOUodH+t6{x!bgiUUG<D6E}nVJ zQ0LO~*6=L0>nf#hQl9E4z4Z`MZf^)S|6G=K&8Ii({QKu@6Y{UjzUp~7Yv#><hws96 zjoT)e+~(V&F{5co+^O{{YfM($QM_iC_|vU1Vy8umQ~Ii>qOC_S2wYUPimm0)nERXk zMCHL-y%VlJ-IcrTN3n^8!9CsRh+R>8Sv>mK?Jd;=O(&SG|HybZagD_fRnBIiu<Non zzP`O|cX4@t^t>6rip@Q>XP5N*3Tjk1)P+eU{j{33<&VwVov9ir+1hf4T<ROmi-P{t z_xA2CaOw*=Df73u;QFOScTWli&r`UcbEELo^PNV#y_2?WSurU$sIXN=kJsTzXXXCr z%)^zpYNt=WEFJmkN^o=c`2#1CmACu|s$1q-qPc5c?Wry6+qpEW<R55T1?=`yX-jmn zzsly~=B|2W701lRW)qo4RXHR7(6G0bXWW9WEaCp6mLlky^|7r(`_AM^3G1rnzxP<W zF|K8+{kba}BO8-bPJ{`utLErzmppEhsu-|S-mv5B;vPK@tFV+@gO7JR!xH8>eT%f_ zo*7o;X7gcvsGOh5t3bVqmtGd(m68=1tJHo!nef@$<NlQ-%g_t!wUYSWNKSpLASx*0 zaXr#;-kJvv!N&^k%Y8etIw&O0JLCCo_2xMnpRz?ilgu>RvBpx)w|sY@oZ#a63Oo4? z56bS(uKX-{>T>KG)=#T`-B{7PDq!9$=a_}F=6CH=T4?4u{l}f_3}uz(TUK+=U;m{z zeac#~fS7&SE}Z^F`xqZzoqd-}*E;&$k-O<vH?MlVVBL&~3HB`^6I$agEK2mTFAj?J zy;^Za|M$Gww1>O8dOc*Tv~B%%tbMDuCV!^ipYq;E?~b_defXwaKkxnN)&5VsD+KE+ z_Wyj~c4y)#!H@n~ouwawcHB6*`-aDcs%f(>GK*i{ni!^YPjhx5Yxk>+8?VlX?ygf& z-@%!>_K(%kzUHUP&K>$TBR(sHZ`GEKuUFa&dz{yZY<Z!meYs_u-LbghwIR=$q)e}b zEIG`fv`qWeyF1cr4>tDR<#^T`mVcdpHN(05*5^B2j?CHEby}<Sz!LM|lL?l>)+f~F zHI|qK+}C;eX1crg7Y*kOMVH6jvdtYcy6*j0ySr8R_U_o1|HKS)4_EDr75f=>W$Pnb zspD5y8%Q)xuH0z;;%ID3`=VIy7-yGTWla)(X4+~;TnaN3+Mih2q<_>{GIvr8r}nC6 zt{nS53hve`KD?wa<&AFm#`@5;YOi)|+Il@*;dzBtS;nWSrEBgviLG>ar<LsLx^l-= zjyI?0DlL<H%-th!aQC+d5iB~}R~b$T`c{8JU+jp@)wO;n1U*EhKe^vLlf?1;U`><E z33qX`RolyK*6z|((@m3RJ)yLud-B!;U!I=-&porT_sb)pzlkB)>vf`EwQ=u1nzd+a zcg~^qUwc<%?VlOCSld}Rm%qOG&B6-N#cRYTL~CAm$cqeQxcFr1_1Q~a<f<@)uVJ1q zZzlTQf4A(fW#`%2ugyDl!|$_+<n)}%x2)5Dcc^gcpQw1Ua-yHigr2){Cl_z|x5rIu zzEJ7Z86}gOr+75nt9>I=msNGqH_lb%TTrL>jpu8O;>53gIQ8#J`zOxt+j|T?zqk9I zzT(d_*Uws}Iae4`|E%;0I^%B9vF!Vt=K1oeUw;2yf1fw*PxveIbAKl|+1)=sF>Uoa zxk9e{o+qvbFnw$Kv?57XW47<J)eJKX=d{G8=Vd5=op*=Z`Mu0;d2ZH?RS686G}ul* zUvy-i+qw+B7DIN?X)1Pi4`1>;_x}3a8P6N0d0#Ac@wB@Yc*8^b-rFVHvn$q|*q5=T zY@wKCM&!Hwmvyv{POIL2bnm&Vq56}f_VrGlv-8^{Lp2raeQOWiS$vL(T}9?bT=Du9 z{EbH$Zn&-DyT4LY*7cjYmxhA(!W$_wF0|S#<(*h-x%=+1?oV~flUv-+-*%fLdiV3$ z1!}e5Ouirc;M=#GiTMH3<a6fVujuN^K2iV3Vr{qgwC$eGZ-2Y@r55cEZg^N$o?Z|s z8hG3PL#kt%e5K&wWM}8QKiMQ}w%(}u-q!K@$2?~h{e9O}Zt>0at6j;;GCSV%LQouo z)?<a=)~i2pnmsYNJ|mV_z2fqG?zqgjGl#nCK5lMaVjB|les}5R+VlKhCRxP)to^%G z??UMc<LZsu*Y8V9d#k)<wvcT=*@B<5)Arr7T`;YzzU?>v>F1B4w^SJTotkj?{(<?y z{l~(8#og5S_ma!2$V$6)|L=s_a*J2n%fmkh|Mhuv{PFH@;kT|#`+4SevG|q@s|N}H zeCz!B)46|qzVmFiyorrniB0{VHxUXC|8jL*6Pb8f<9<eW%#6&+d7PJe87KKlYE5`` zd%~wxDGF+h+Kx?;JEp3AGUhbbNGez5cynpOo~zyOTHPkR)Bff<Lv!-|3Z*+UpG7xi z>a5c}8Fc)>uCK3-NHyF!!le6nnS>>8=>bDYt>W<2^Cq@wyt7%Dp}F~V-Byc_ng=WM zmfEi4ExJ{F$YQ&Qxn$1L1J^?QkE*|Zw9aIEI&-S8U#IV<U1iz5TCTsNuC4j@`Nf_a zA}&IYGxM4&Z2##=#`)>a*|jTSUDvhlFz=_nd_J#tv6r2dt0_EQWSMwNdQs)wPX8IX zky{sjQmcP+BXY-DE1yGFm1lB}>t6|Kl)Se!<1&}a<JRB53;sNMdiD7IWfqeDGYZf7 z>c+Q6@2_*a6gV-mSU!73LCmC<_(?tAotC?H27Hk}GkeeVFVf!XRwi3!dp!7(5!b6- zyZ>L!rfA{#W9<i&YxmB&e?-_Oao&V=yoHk{ozTxNU0?HV%H7*JZyf_&rn72roKta} zW;y$XcI--Rt<Q_tC;qA6%Pr%bVsavK)gC6rmxkOX67Ii0+UDr)t_gY~pc^00w=Y9h zF5&w>@q4OvW|c-kPmS)a>TIl?b0YBBmFUM$BTeR5#^iM_vPk96zxXS}MV5Kj|Eku^ zG`-vtUeTZa9Nyg@u=(Ti^IPPD)*Y_iwm7@@Uvz~W>j(AP&|}|<ZC-wDPhOy)cXsyq zZ~m)Rxj(&gGJWHjru<#0ho$z`RvoNe;lJlpSdw^8{;@^#BBg}H*+Z^uI&?cjQQ0@J zInw4t<(-dF-M`<Yb+G+bf8{qRc>j8z5VOxEIifo6E6?A{-mz+SrPaO67S4Zh($No( z^yXh&Vq&)D<Vk1ePbr>~9nQ@1Pud<^3WVi63oU9abu(M+e9HOXZodOc*RCh%pDDDN ze!bK|d!~Z5x82mv3(m9BPwKi?+<B{C`FPD;8<k6uY|0yL1846#r>e?!^>#&?p62{z zPm2m)*$CdBFL&d`qqQ^jdEMMt&m?nQ;&cl+Hu?F)u4!kN9lpeUxg>g{q>-KYw@DV^ znrGHcTC(Jd)`zYgPB}VzTC$^T-br3!jM*Q2_IU2L2(@(zOnK7^8&axvFPkOP#P+(( z^X43f=Mlm)f-O=f9Wqv{Et}+;vEYemkX*A&L%=(QO}6{v0(Rw@{0(7T;<Qy%LnAvZ zN2#J<DqpTs4A<=mEv-t8spXgE%=x!IxrJr-Y&Ai)t4@<R3xl$5t!**bB9{DG`TW=K zJsfL{uCEVXED&R=bn~2IS9TxI$B+#RXPv6{EBpL2+DUA_>O<|$H``)!vv;RU6frR- zzblm9xvh3$utOJHmgD`_HJR&9$t`N=e<=2{P*C;v>n3x_f;q}wF7sB(SjfrkSL01M zT+?j%ZmUpf)yGeZ+CM%1>3m^{Y?n{f>hzlxuMQN3eQj*~%zMt#QL5qX>PcC}|8Gbh zeWky4`^y?9w#44>$GU$+0)E^K*uk6OyRvI%%OvBcj~2YS6Z`G2c#r{m$n_&hJC}FL zzhJzOlr8RFz3an^3q0<p{O-nDyvg>LJ5#;0u5C|5=%!7pV{X=0>|Sg2{I<D?gf{=v zyY8WUpXP2UPS`wsgCy&;LP2kqKL&Hc)?SEzvUN(;*?GDePbB~3-Fvi8Rcoz0`^VHr z+l@XS?)9J9C0@5=hRnMy#{A5ump1NjaFp*!TsW^~T}J}D#81il4mTP$uURGddK=FJ zqx5anT-V(ie57pOT#VSf$Lh(}yEC2S_c5>+^fj(kSIyECJNAY3D)XGYd460wC9)#J zrk~l|#J^{zmQj$!wVAbNS!-D>Vm^1aFXm?YA{%{p&vMU}eGSQhdt^%aURzrzS=d}X zbt=?hZ+CS1CieeFKm7jZvSa5lr8nC96}bNC6?&J?n)%LkPLX@ooj=Lvx-WPeYOZ$_ zj9*zUepE3xyL@G(QZ^gYr*mey=6;ruTdNml9#($5;cm%<jMYNxyAJ*>3s|*Z&E;xf z3xEIg%8d^#<E7NLY*@GNVMdAn>hH-KUh;d^Ca#<scyzMTG`$V~HmA>9zkU0eihC2P zf25Rdm}Ga9tzjvnO4W2$NwXs}x>6TiSK!o{#q#T1O0dJO?K?Ng#4{v4ygntT`0(XE z-ovb0ruDAbKP@1^XUVCq_7iEpyn7$IaJ7}_=I&Y%-mfO3AG7#<TgmE#7pGRQTT@-A zf3Z{A{RPv@p9_wCxjN|=tJ~$fhuV7Hc{QoN6<BD+%Cj!zsg!f^#?|LixmWuBc^tg3 zXm7;x#S2bJ$WOm!c{1F5V)2>v4Q;<|oUhEE#9(yzm(9h_dsp2p&Xs9B&pYXEY92E6 z<Bk+bo!Otw-lYkw`?XY9aW)GtPseUEHIdm(QLa`(HH~kL4E0aT-u)$K9ikOrFk#+q zxtlWIO+`D4Ly9U_ubMuU@zYF6Wy^2Oaa>-vyH;J#)mhk^6LtBcrm*LP;^xhznM(f4 zD~`O7kMKTv@XML<Pu=BQJ09CM38uz;J8S8q?i4uZd7SpoKi{U$`EXfxwZZ?oeEF=! z%6*jv@6un$NL@dvsCTgN;;r3N?z}tTsJuXtK{fM*o(j*x_DgB2*q3KYEn5Dwc(2mq z)E#$@IR*SO(kNeHV4$h$v#aQ&!UK`|%a%=hUOHv*Xiil)k#=c@-r~maQlq&?dH-7S z$M5o;@uivR-7kxRg_|E`=HLIdfAv3c!wc`%|F_Ng@A%8&QLuHzf#_AQ@A@RYPSASv z-{6|^G3(jMYAd#F{Pt+^v-(t@tyd*~ti7}1Ve%E5567R_Co<pYShF~leeL6z`SX>F z)aFcHI_Z8xe(sZJ>Q!?~S3a0<-%5I>;ZBjBB?YGOnamfLPd<GpWSx}#IoG!zx*lxH zReGYzU&nK}>C#Ilh0sacllDh!s7Mmw)G;he<6V0G#^IX@%}t7dB?^VRj$B!q^~Ce% zv!=UKZyjyil%&M3ejsz<2|u+OafaQu)8}mTT&rYi`nh(F(%M<M8do1JH1GBbj`Ol> zn&A59n!r=LQ*LdC&(1u%{LZ8fJ^wQ=)OM9f?5kKa-E*?p<ctlHHTrcQr@a$Dp5GR2 zakQ^x*<YDWXTN@G<o;pBV7_4Et&2O46|Z^rTk7d!moF(34tofQ%+at|oXmE;!Fje@ zU^>fL-CbW6?v|Xqz-5`7_8pU-a=dpY?wEDh-TvgMGzW<l7EEj7!se`gbVN|HSM1sB z;>SnwHYBjWQ+u>JFZafYdgha7ez|fQPg}70P{EP5<(E~;gO<En@<VstgE*I|b1x^~ zQi-uDmWkWFa6_-m-}C?4f1ddEdD-i`Z`!KYKEI=AuyWqIh&wN<=G;5@-KcTPq=H}0 zh0RGe7anNvy_qb&ZQHFY?iV~=Egq>os<R1x(<^&lEbQUA$EVG9UYb1ndYZ1veVK*p zFGv|o^t9GhVdF5}c$4Rm(`3JCjSY5trUeu`UgTBkce}{pqop^+g=I>}xdp$^TxmP; z@&vn%%hj}9Rmz`4YSgReOiGMg7sr(4zjxV@fRHBF^FQmYV~RUo9$Qu?IQLlROXiH- zzYMv)m%Tg3wrh=mtD4oO*HZJo^oQ&`A=$cW)w9wqNogkE(>|;Te`SB2jYlwUO`ZYk z{XEy_HPV|?9tJ%~Jo+j_&g?G_f3{CW*DFS0?PK>}#jkH&^Yz-Fm#>mGJTc!Ew=;Sj z-|uN6%Uq5LR2Qmg&n`Q4;#jke+~h#Tyqj<4>#i=WSiM?F_(jH+kaaeG(}Si>*zzs) z|2o6R4-bfJ->~pjZ`Qkc7G|GciLoAv_vCJTK4&NQo8(#i)!XVX=J|JiOqnBkoNbP7 z#;WSl4GH`mpUVq&KXFny#rW7a$c0Vw>s!gw&-b1bj5$87VM~Ac%jp-3ETe;p7}Rgd ztywkYaN>^8oo!rUkN>u=eKMWLJZ9PFyFst!oD%zOs?jxl+lD1M%8ydnqgJ1-nc6nx z(tQ(`gw~_4Juc4XUi#$F)5Uj7F5KGq;pE!2DW@AV^^Qv4lRlv}Ifun-vf<JgcJ=by zkl--u?pLKEUw2PqV`@5?%y3EMu~-n3X;<{UV;?$KF4{JiYxlkKr0=;2N6a$r9rjcA z$<DSk|E;Yj=Ws3}GS#spx0GQ6OM>O8SxN7DlzUjt=Wp0NCCf2#@&~v0t3HR-nGeJ> zT&p+9x?8=!;^D%Il|kmJ=5LO3*Zte2Z||*osl4vz*8N5PcjrFlK2XWQ^L)Qk+&=%F z!oXiMq`2(Qg>7EHzs?|jO6KZ0KUda&z5Q4If6dxIZ~yg8zP<h23;z9!L;SDrny+s6 zmr06a%H>^NAB)RuIBfInTg;etxkz<|A4$)XeA4Ck>VpsKKf!YkBYm|w4+bec=L)@? zx#akcO;eAxtGu7C^*t`0@qF6j8*83$zRFV;)b18z@h&vFFy(U5kw<}IIc9nHH!VHD zy!t|pG+W5>DM^>_rA8Mz|6Uv{rM5xS>I`q*oE<{Xm*2YeaFtu_iR~5d7O`bm$~f{D z$4a_<^%7mv+|+YozwgYh>g5mT@ujI|dY#lwPM&!^U4iLCt?>N1NAFa_89ikKRen^> zcvqs?bJk`z%ildO*?4pPtL<`b<^8FdZ=7;HAZd{T_km-lWA5F{SsCcP<=J%c_8B*0 zXZ*gs*M4Rezr=-{;_Vv3>z*p<M)4aMUgF@+lGT1YQLn@*u8`w)9LLR=jOV?+=4J=@ z^et~rvNEtZ=Cac|@7A?B=^OaBpKVaQe`@Bn<3HXwPcz!NS}0_G<zl5jo^fjegU+#~ zMi@lRdmrJ^7}@^x$u*x((HkYLtjf03@2M=BEoqs%ykSSImgZ{<ANln5*)3BY@+@6W z{?<PiDaF$1T>Ry{@O&omUDDexC)}QOuB%@=@I#rv`TVo#KQ`UiTAN;e`1qds*qzn2 z+YN8*|B(H4V&AV90q;Z2qVxFAY&~{{)5R-v+5Z5U%BZI^tE6Mfie5g^dUASI$HR;B z6~C|AT<gXpY`uHSca1ELt2`6;h<>bE>T+hEl<~cE_r!Fuw<{V2wLU%eipuC*Fo9>% z661+;wOFU`(kx_u-t5)&$jXRAEv@kK^zE~nn;!6pycG~_4mj?*=aj~x8JkaV?vlQB zb5?otZAViLuVC#XZLe4TUiwyB`N_SqnvNxlp4UB}dgX|9_!rx@uFah+r$wY!9hD8a zxZ&Qi!lpYf`G1_x?^JTwa(zm>AAiE*Wks{h%59pZWj2;<ljRf_EZ?HAPFnBh$Gs`G zwvSEjS?}Wu+8DH7#N5+;ag<ipo+R7E>D6(!HhaF~@=utuEp6B8l-z>`R|6*cTI4V% zTdBv1pIup%B~-joy-uM>H${6{TJXBHw<iS7UaD|x+QyVEF+myI*dO`|+Ul#l-zqk5 zYVo%GiCh`6nz4_P+%70HDqKiqv1s2M7G0mTv~}OD&1<bED2a6YKYu=VO1}?R@=8g+ zHtiPfc;1Rlmz;~=6lXscoY{9Q?ON)S&pLB-gN(lX+_b%7$E`^!zQLW2J3p$r_*bm& zSy8c5m4D`~4|mTpe{x>OncKXs#3t=n=_kW2oDZ)=U%z&nWA?3^(>zZ$$M#NdGZXGA z_m<Uiy54S@rL%UbZSLPAUw2RWQGBBD{*U<h!ijNzZib2J#pyjg#dx~-&t3f)U$%J` z{(my>*T<aYWrfzy^i!Uur=8vNe^=A~TRz(L%j=fq??3W8%rEHXy<b1R3ViUt|24ue z@;Ohb?Q*OAv%l_tx&P8$Uv~XB|K?USeYB5rWBH@-!$(%GnC}o%Vv_y?%e~B(Pk(fN zwte>7eN$y$E$|ULt-j22a?hi%PHDeqU)?uvcohAMooV}uc+dDBKMTGntMqqw3Qb^& zFq88yS;e!g<Hlyg&Ihe~rkrxIy>Qr!xnQNN^~x=VpCas^GPz|%xq79}n09#nHTzYn zpZDJpo6S^kwaI?28T0BJk;iLSBstujee(6EY_X5q%(wIWTaYLG<VMkTqfV9fo2I|M zCp3PaZYq${ebKh0;L)bNNmX?#-3=WZpRFl15M*|eO^JxLw2sM^`Lc~U&s!w^%<@@5 z`yMnbaopsyUMRHUDsyGu(VW!gf9Lqj)i0aLwTbyAZun;!{)9`9xAo#vua#>GR_(Gb z`^x@)Q`XGb=#7`e|7kzZ-p#f6{Y=B#@$I21vH@!z8ARDWR?<DgQQgxpOEHw&Zl&Tz zCcRp_HAg$!mmLZ6<IR>_eyew9#mjwHizm&=UvjGB{UZZuR^xrbJ44l1R=8K}=2~51 zJ#FE-55hmyd{=+U;d?X5;AUF*n(gKO<;!^eH8Nd3J-aoL(>8ehD~9*J!CPD11bzm( zcXwr_WyB?=JM9p-k^KK;#X{z*v)`=eF^F*v{?{3$(^0a&$@)X7WB+Z>>DS-wS~@@P zvzV#Z$&asCx~sIO8~<MN&SKH&*OT+#{5lpePo#C%)+N_v^Em>3nJ{mjA!fEFXRoYq z!l4@hYkck8QbqZNo}bJ4U6pA&+2iBJi|6h*ltiY@%ltU$)xu*T?qOf1&3tTntkCj9 zqJt>={N?&ir+-%MKG)!!8_TGgeD-e0hC8~?i`JcN@NH09eJf36g`I|J^D4Ri10|le zDF=Uw-rlr+qW{L;6%0o|dOY9tR!3TCDc3~X-_HW3<ZQgSM`>oP(>A}vM-?SJYPNz7 zmpc^sr!d=Iub)u=qIki+BJ;Ku(QqB#XrI|%Qx;A6<xoHC(;c>F<^6K|r<%s<-+vUe z_V<A&X9P<gS@wEI-YMQ=6f|+4P5inUc|xa;u9{s_@BFGjH0a!lqnEWL@BEXi(_J-x zYe-RL@5gB|3rm9RG^6i!mcPhsm~?R092=F+4BHdxzoc{B8F%eb@?GSYAiB*_WsUjy zsH6kuOaeZAVw|*drQNSdb0#<I>OS7)*|g)7TA@@+&#?gEWtK~mj3e4)N@o7M>KdW{ z!7K9RhnmB8>w{PG|DSyNzYRP4u}XgFtvOS#HYL1xvOFU1-1`Y?(O=UV%5PZqe-BBl zKU%VLcl1ghBOQSW9bdJVy;>c+C+Ycf_T7m~C!LL&#;>y_>T_+2W^c!rTgNZ?x2gO5 zE9Eo|RIZR(6Y$yn=luw!Sz8<@yQ$rtdP>~X^RjH#!*|DasHc|wIBDGXTI0^Qt0miO z<daU89XV^^;P3SK`mNf|MJED<k_vS<ZSD0cl$frmIrrD?gB{a__0y9&3VD`KU3q6k z+#<{HCeNKyBVOF>Ii;JitY2_vzta@6)VhsIs*9#Rd$Dvz&8yD4JB-A3IpjV3n;7x9 zbyZEH&MUdMP51Zl{@d9RyRlT_yy|Uzt><>z-YhdO@_81fdDwgF4FOmAbk*rMx}%(B zt2%c~G)%aodH2MluMRiv{%^kfZHnf^w?Tf9Jqkg$YEqS^Yzh~aKk1hJ^w#cOJ<@lS zb_Mz`{cP^6cyg=HwMBhKe<z=^^Wu16xBU9IIaOufCIwb1y$D>nHX}LzAj{>eX557` zlb<ZP+n?4urNF&;d&(~BTuFlrLx&mjzlumz*>=VB@T*!+dltj<sppjR!W(P0v+T`_ ze&B9%D~0vx)8s;ns_orp3)g<WvR^Oc*s(8dw-;AD7yWnnx|Ei##*-P^4pSL7X^6T{ zx#)PkR`9>{6Tis!wHx!(UQhS#tZ_VlQuplXsz?`Jfx5*$m;U^z+4<DEq}w$v#Py0{ z2}9%B)ys<nG$VfJ>Ig4BC$?OIr#4HNGk9@j%y}j+%Y#cUWiNc@J~d}bTi%b@xr?^O zt)7)~WNJ8Tjm43|eKL8<o+2l=vPn4bZrEi~RJ40uLx}FlA1=!)%I>sj*hn&Mk~=#! z#^$<Q-Ybd77p7O<X%yYoma|zA_jxmuv$B@dnJIR!*0wvn*q0mfMd)JLTzm82{GFv% z*|&@Bj_qWAbgL^>slfQ=)QIUSsto*x?DL%*6#N}r?^c`+-_Ph8Q2VYf_Q3j>bakgc z7k+2z#;g}A4PL`8nQZz+BI%pjTAAC?kx%@;Ut{~7k>8x>`aU-$;b-;y%PaToJuiLl z(mnAlU90cvzuWQIY)|~lYr6xjH&!T0e)xHLcZLer_JB&m>$k<f#k}KMq-UX}edb?m zs`RW|3Uc#5scgRdGH=I`iT4y6S$(c?$83DT!1raJ&kaQpt_xe#PgcLuY&y{X{rx1} z^n(`*l^Wy@Uz&YTeYQk!E|({7Vvl3sGM1-4?|GW59IChLz523`g)eYYuan@W*Bo^* zJt~tf?$C7IXA`r*tH5~=^9;jTebZfRX79Uld-APN)pu7Nf;!U|@O=0perwMDSC?2e z@<nc+a(Q}q*!63xjW#LI=615#S1;i-F+yqTNl~w<QH!s><aL|8b4~n@$oJRVzZTX; z&DZCZ4asIn<k`PP@ZbF$k+U0Q^g9^5HZ4-}HTOAP7IU8ekcQtS9sN_Q@@}n@KbFbn zz~L6aqwdj_7SSi};u#i#U0K|<T>Epc>ulol8Cnupjutd6$!L38;W#D5^=irCEjh=( z{!!?8q;mGtqBXCUz5SIq=UM9AZ;$u9d;YhMf#V=Y*FzT1i#(@4HffyfTJ^Fm^Jd@c zpN<koJ!d_2jlAl6`|Dwgv!{2xJzjbD{O-$-qM0O@9nIQoJx6c*@z;krCoPhk_Lx=B z!80sm33jav3LHF*haPaKaP=O1^npdG(`VtO7d&d+XCHq0!L-mrXX2?RTuZ&yUVQb1 zZSl#Rjkn(LEkFJC;mfDI3{3|FG<f<P7G03g;qzCRbV5X{_guoJ8!~$R`T|`?gjV{j z3s`kUYOP<s!K^c4tIxhG*mXy4{ds-{mPW+@37JNhg@zF_^BhzrYKBP7J(#l5GDa?5 zL8MbPXlBg9kd>xUbL%9QS4M9CYq9=!<^I?w%1)-Ubl2v-m7N=V*LH8Mg=3J(;i5eX zOd2P<x=ijG=-w{0wdYuD;kkK_#_C;}yXz#DOEM@*I2z7T(43WM87H6`8EA@C8PtxC zHG3Hangm5)VHP+^H1sm><xR5JKQ|k6O*T2*y=m3#ZLix4XH74?-T!&l{O`XR6<Cxt z+JseHjdhN5FH+H7wM=?hs`a|(?1>`knbX8mL(Oxq^FKDxf4xoqd8vIqw}hA(gOfqi zqX&-?Kj^3I_<y<)s#mFD(wY?>IBa_^t{=a*?(?_1O%4z*du>{jwJR}d+vBP_0k^_Q zX_bLtrI*Y88u)$Ql=r(Z?)&4PRpztoWmwuA5(`*_T8||ZRxnL;Sr(94!Z!Knvx3T+ z#sHOR9;rpGK})Y?lvXugOxYHZTh@O0=|6VvLi?;~z26qGTxzTPovL%M(n*HJ>uH$& zZ~KEg>)PwW<~^7F9dmxd+WOni3j)@C>+$tFXDQDg;P&&!;R(D9%+1XXD`VbDZrUj3 z)X~YXv}kMkiDN>7g&d1IKp?2B-6r4uu|j}Wc=a*2^cY640=4fi4ky}Jae+kJa@MTf zdhJ>rGlcW^=c?`#jDd<R0!|!?0)k-hyw0Mh+2eL5JB!!TtoJ8fxBdHb#RUxbHf=OJ zHsjBeJhywxbbGnNuiyS{ncp3)9JKS6amwra|11?_XRKQFYVG!lwwyJL3=jY|8cYZX z8peBuhKBBy<?wpCPggH~(U$K^CakSL*M8W7V~SUGTaJ!oa*yG$h&nH@)(1tZW;?fD zi^^VG`mYLR97Dr1?Yfx(Q%+r-rzoAR1O?XF1p*pVSKB&o{cYa^4x*VW_W%1`E6)cB zjJBLBg)-@W4PcihpOi>WRyZXAvg=lB@j1)qbBg2qw$;y6@!YgkDZc0&BLjoNaTyiQ zNl<iB`|#qBb>DbyMtE!X8Xf~{galUL%X{1R>@2sFIp(+^WZgHP0vWSs4bT{R^fS}? z`JCCsPv;b$vt(yrn9-Q_`6oy8PP^HQ|F7Hff8D45_wT>|Uo64i2zFKdzqsp}?ddDZ z<{!2Q$vM8cGic{k=EUGd0>XS85Z`(q`SW!q6x?0v?c$}mbV`ud(kZi;n3mS?1)l$t z#LK|Ipa2b$MXOe=iVX}64L$$a=KSYNSFN7UDbCBA0oH#rJ9Kee?(J>4x6K$B7y_pK zJ96pLrJ&c(=WsG)#Bw+=gMz;y-~OKQ{$J+}+g7cT+xJgqQALjKzU0*heK+i>>6cAm zn6zTI?w6?y3$N7w{;#}aLEdyx#%oLe-_QRiVYH&m+xZONfA4PF&mpxH(#od(RtZ0z L?Fx7j`H%wurg=M9 diff --git a/plugins/easy_mindmup/assets/images/person.gif b/plugins/easy_mindmup/assets/images/person.gif deleted file mode 100644 index a0e72aff4e540308d048fd10a07f48a64d32b654..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 zcmZ?wbhEHb6l4%#c+LO<jEsy-Oiawo%q%P{tgNhTY;5f8>>L~%oSd9oTwL7T+&nxy zyu7@8e0==;`~m_3f`WoVLPEmA!XhFfqN1W=Vq)Ur;t~=Pl9G~AQc}{=(lRnKva+&r za&q$W@(KzHii(O#N=nMg$|@=<s;a7LYHI50>KYmvnwpwgT3XuL+B!Nqy1Kf0dV2c$ z`UVCDhK7blMn=ZQ#wI2vrlzK5W@hH*<`xzfmX?-QR#w*5);2aawzjr*c6Rpm_6`mX zj*gB_PEO9w&Mq!4uCA_bZf@@G?j9Z<o}QjwUS8hb-abA)zP`SGet!P`{s932fq{WR zK|#U6!66|bp`oE+VPWCn;SmuLk&%&6QBl#+(J?VGv9YmnadGkS@d*hDiHV6xNlD4c z$tfu*si~=HX=&-{=@}UrnVFecSy|cH**Q5mxw*M{d3pKy`2__9g@uJhMMcHM#U&*r zrKP21Wo6~%<rNhbm6erMRaMp1)ipIWwY9Z%b#?Xi^$iUTjg5^>O-;?s%`Gi0t*xzX zZEfxC?HwH*ot>RsU0vPX-90@$y}iACeSQ7?{Szikm^g9bq)C$|Po6ww%9N>7r%szT zZTj@-GiJ<~IdkT$S+i!(o;_#IoVj!7&YL%H{`~n17A#n}aN(jwixw|lykyCerAwDC zTefWZ^5rX5tXR2n<*HSyR<B;YX3d(lYuBz@w{HFV^&2*9*tl`yrcIkRZ{ECR%a*NM zw{F|EZTt4^J9g~YxpU{PUAuPg-o0nfp1phb?%TI-|Ni|44jedm@Zh0ChYlY;eB{WH zqeqV(J9g~&@#7~>oH%*%<f&7qPM<z~=FFM1XV0EHckcZ8^A|2$xOnm6rAwDCU%q_h z%9X2EuU@-$?fUiWH*VaxdGqG2TeoiCzJ2G;ox6AM-n)12{{8z89z1yX@ZqCJj~+jM z{N%}#r%#_gd-m-4^XD&Kym<NY<*Qe(UcY|*=FOY8Z{NOq_wN1s_a8od`1tYTr%#_g zfByXC%a^ZTzkd7n?fdudKYsl9`Sa(mU%!6;{{83ApTB?q{`>du|NsArKUo;L82&Tp zfN}yTPcU$JF#P9~`LVv+v5A9SDyG6<p;H^LtW(O14G)fVaOfwUvDmoiK)0NH8K-B^ lBabF&U8xi!1J0xU0<L;3lEO=l&9*3hb?4+}^>Ymj)&PIyq38er diff --git a/plugins/easy_mindmup/assets/javascripts/after_change.js b/plugins/easy_mindmup/assets/javascripts/after_change.js deleted file mode 100644 index 8a653fa..0000000 --- a/plugins/easy_mindmup/assets/javascripts/after_change.js +++ /dev/null @@ -1,70 +0,0 @@ -(function () { - /** - * Class responsible for all callbacks after any change in model - * @param {MindMup} ysy - * @constructor - */ - function AfterChange(ysy) { - this.ysy = ysy; - this.init(); - } - - AfterChange.prototype.init = function () { - var self = this; - var executeByEvent = function (method, args) { - if (!self[method]) return; - return self[method].apply(self, args); - }; - this.ysy.eventBus.register("TreeLoaded", /** @param {RootIdea} idea*/function (idea) { - idea.addEventListener('changed', function (method, args) { - if (method === "batch") { - if (args && args.length) { - for (var i = 0; i < args.length; i++) { - var arg = args[i]; - if (arg && arg.length) { - executeByEvent(arg[0], arg.slice(1)); - } - } - } - } else { - executeByEvent(method, args); - } - }, 5); - }); - }; - AfterChange.prototype.removeSubIdea = function (id) { - var node = this.ysy.getLayoutNode(id); - if (!node) return; - var saver = this.ysy.saver; - if (saver.deleteStack) { - saver.deleteStack.push(new window.easyMindMupClasses.ModelEntity().extend(node)); - } - }; - AfterChange.prototype.paste = function (parentIdeaId, jsonToPaste, newIdeaId) { - this._upgradeToModelEntity(newIdeaId); - }; - AfterChange.prototype.insertIntermediate = function (inFrontOfIdeaId, title, newIdeaId) { - var idea = this._upgradeToModelEntity(newIdeaId); - idea.attr.isFresh = true; - }; - AfterChange.prototype.addSubIdea = function (parentId, ideaTitle, ideaId) { - var idea = this._upgradeToModelEntity(ideaId); - idea.attr.isFresh = true; - }; - /** - * Function, which converts Object generated by MindMup component into ModelEntity - * @param {number} ideaId - * @private - */ - AfterChange.prototype._upgradeToModelEntity = function (ideaId) { - /** @type {MindMup} */ - var ysy = this.ysy; - // var rootIdea = ysy.idea; - var idea = ysy.util.findWhere(ysy.idea, function (/** @type {ModelEntity} */ node) { - return node.id === ideaId; - }); - return ysy.upgradeToModelEntity(idea); - }; - - window.easyMindMupClasses.AfterChange = AfterChange; -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/autosave.js b/plugins/easy_mindmup/assets/javascripts/autosave.js deleted file mode 100644 index 30771e1..0000000 --- a/plugins/easy_mindmup/assets/javascripts/autosave.js +++ /dev/null @@ -1,81 +0,0 @@ -(function () { - /** - * Autosave feature - there are three phases - long, render and short - * 'hidden' period is there for off-screen detection to prevent saving in background - * In 'short' period, any user action triggers Save. - * - * @param {MindMup} ysy - * @constructor - */ - function Autosave(ysy) { - this.phase = null; - this.ysy = ysy; - this.shortTimeout = 0; - this.longTimeout = 0; - this.init(); - } - - Autosave.prototype.longPeriod = 10 * 60 * 1000; - Autosave.prototype.shortPeriod = 2 * 60 * 1000; - // Autosave.prototype.longPeriod = 3 * 1000; - // Autosave.prototype.shortPeriod = 2 * 1000; - - Autosave.prototype.init = function () { - var self = this; - var ysy = this.ysy; - var testing = false; - /** called when change in mindMap is detected and at the end of short period */ - var changeWatcher = function () { - if (self.phase !== 'short') return; - // probably unnecessary, but can prevent multiple firing - ysy.idea.removeEventListener('changed', self.changeWatcher); - if (testing) { - ysy.log.debug(new Date().toISOString() + " saving", "autosave"); - startLongPhase(); // "TreeLoaded" event already calls startLongPhase() - } else { - ysy.saver.save(true); - } - }; - self.changeWatcher = changeWatcher; - - var startShortPhase = function () { - if (self.phase === 'short') return; - if (self.longTimeout) { - window.clearTimeout(self.longTimeout); - self.longTimeout = 0; - } - self.phase = 'short'; - ysy.log.debug("short period", "autosave"); - ysy.idea.removeEventListener('changed', changeWatcher); - ysy.idea.addEventListener('changed', changeWatcher); - self.shortTimeout = setTimeout(changeWatcher, self.shortPeriod); - }; - var userReturned = function () { - document.removeEventListener("visibilitychange", userReturned); - startShortPhase(); - }; - var startHiddenPhase = function () { - if (document.hidden !== true) return startShortPhase(); - self.phase = 'hidden'; - ysy.log.debug("hidden period", "autosave"); - document.addEventListener("visibilitychange", userReturned); - }; - var startLongPhase = function () { - if (self.shortTimeout) { - window.clearTimeout(self.shortTimeout); - self.shortTimeout = 0; - } - if (self.longTimeout) { - window.clearTimeout(self.longTimeout); - } - self.phase = 'long'; - ysy.log.debug("long period", "autosave"); - self.longTimeout = setTimeout(startHiddenPhase, self.longPeriod); - }; - - ysy.eventBus.register("IdeaConstructed", function () { - startLongPhase(); - }); - }; - window.easyMindMupClasses.Autosave = Autosave; -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/backup/last_state.js b/plugins/easy_mindmup/assets/javascripts/backup/last_state.js deleted file mode 100644 index 4fb3686..0000000 --- a/plugins/easy_mindmup/assets/javascripts/backup/last_state.js +++ /dev/null @@ -1,170 +0,0 @@ -/** - * Created by hosekp on 11/8/16. - */ - -(function () { - /** - * - * @param {MindMup} ysy - * @constructor - */ - function LastStateChecker(ysy) { - this.ysy = ysy; - } - - /** @type {Array.<String>} */ - LastStateChecker.prototype.lastStateKeys = null; - LastStateChecker.prototype.getDiffMessages = function (diff, idea, isOld, constructs) { - if (diff && diff.attr && diff.attr.data) { - var dataDiff = diff.attr.data; - var dataKeys = _.intersection(_.keys(dataDiff), this.lastStateKeys); - if (dataKeys.length) { - var changedKeys = []; - var changedValues = {}; - for (var i = 0; i < dataKeys.length; i++) { - var key = dataKeys[i]; - changedKeys.push(key); - changedValues[key] = dataDiff[key]; - // subMessages.push(key + ": " + oldDataDiff[key] + " => " + newDataDiff[key]); - } - var id = idea.attr.data.id; - if (!constructs[id]) { - constructs[id] = { - isProject: idea.attr.isProject, - name: idea.title, - changed: true - } - } - if (constructs[id].changedKeys) { - constructs[id].changedKeys = _.uniq(constructs[id].changedKeys.concat(changedKeys)); - } else { - constructs[id].changedKeys = changedKeys; - } - if (isOld) { - constructs[id].oldValues = changedValues; - } else { - constructs[id].newValues = changedValues; - } - } - } - if (diff.ideas) { - var ideasDiff = diff.ideas; - dataKeys = _.keys(ideasDiff); - for (i = 0; i < dataKeys.length; i++) { - var rank = dataKeys[i]; - var child = ideasDiff[rank]; - if (child.id) { - id = this.ysy.getData(child).id; - if (!constructs[id]) { - constructs[id] = { - entityType: child.attr.entityType, - name: child.title - } - } - if (isOld) { - constructs[id].fromId = idea.attr.data.id; - constructs[id].from = idea.title; - } else { - constructs[id].toId = idea.attr.data.id; - constructs[id].to = idea.title; - } - } else { - this.getDiffMessages(ideasDiff[rank], idea.ideas[rank], isOld, constructs); - } - } - } - }; - LastStateChecker.prototype.processLastStateMessages = function (constructs) { - var ids = _.keys(constructs); - var messages = []; - for (var i = 0; i < ids.length; i++) { - var id = ids[i]; - var construct = constructs[id]; - var message; - if (construct.changedKeys) { - if (construct.from || construct.to) { - message = _.extend({}, construct); - } else { - message = construct; - } - if (!construct.oldValues) construct.oldValues = {}; - if (!construct.newValues) construct.newValues = {}; - var changes = []; - for (var j = 0; j < construct.changedKeys.length; j++) { - var key = construct.changedKeys[j]; - changes.push(key + ": " + construct.oldValues[key] + " => " + construct.newValues[key]); - } - message.changes = changes; - messages.push(message); - } - if (construct.from || construct.to) { - construct.missing = construct.from && !construct.to; - construct.present = !construct.from && construct.to; - construct.moved = construct.from && construct.to; - messages.push(construct); - } - } - return messages; - }; - LastStateChecker.prototype.prepareLastStateMessages = function (diff, last, initedData) { - if (this.lastStateKeys == null)throw "lastStateKeys is not defined"; - if (!diff) return false; - if (!last) return false; - var constructs = {}; - this.getDiffMessages(diff.oldDiff, last, true, constructs); - this.getDiffMessages(diff.newDiff, initedData, false, constructs); - var messagePacks = this.processLastStateMessages(constructs); - if (messagePacks.length === 0) return false; - var template = this.ysy.settings.templates.reloadErrors; - var errorsHtml = Mustache.render(template, messagePacks); - this.ysy.util.showMessage(errorsHtml, "warning"); - // this.openLastStateModal(errorsHtml, initedData); - return true; - }; - /** - * - * @param {RootIdea} last - * @param {RootIdea} serverState - */ - LastStateChecker.prototype.openStoredModal = function (last, serverState) { - var $target = this.ysy.util.getModal("form-modal", "50%"); - //var template = ysy.settings.templates.lastStateModal; - var self = this; - var template = self.ysy.settings.templates.storedModal; - //var obj = $.extend({}, ysy.view.getLabel("reloadModal"),{errors:errors}); - //var rendered = Mustache.render(template, {}); - $target.html(template); - var labels = {}; - $target.find("button").each(function(){ - labels[this.id]=$(this).text(); - }).remove(); - var loadServerIdea = function () { - self.ysy.setIdea(serverState); - $target.dialog("close"); - }; - showModal("form-modal"); - $target.dialog({ - buttons: [ - { - id: "last_state_modal_local", - text: labels["last_state_modal_local"], - class: "wbs-last-modal-button button-1", - click: function () { - $target.dialog("close"); - self.ysy.setIdea(MAPJS.content(last)); - } - }, - { - id: "last_state_modal_server", - text: labels["last_state_modal_server"], - class: "wbs-last-modal-button button-2", - click: loadServerIdea - } - ] - }) - .on('dialogclose', loadServerIdea); - $("#last_state_modal_yes").focus(); - }; - - window.easyMindMupClasses.LastStateChecker = LastStateChecker; -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/content_patch.js b/plugins/easy_mindmup/assets/javascripts/content_patch.js deleted file mode 100644 index 373c849..0000000 --- a/plugins/easy_mindmup/assets/javascripts/content_patch.js +++ /dev/null @@ -1,35 +0,0 @@ -(function () { - /** - * - * @param {MindMup} ysy - * @constructor - */ - function ContentPatch(ysy) { - this.patch(ysy); - } - - /** - * - * @param {MindMup} ysy - */ - ContentPatch.prototype.patch = function (ysy) { - ysy.eventBus.register("TreeLoaded", /** @param {RootIdea} contentAggregate*/ function (contentAggregate) { - var commandProcessors = contentAggregate.getCommandProcessors(); - contentAggregate.clone = function (subIdeaId) { - var toClone = (subIdeaId && subIdeaId != contentAggregate.id && contentAggregate.findSubIdeaById(subIdeaId)) || contentAggregate; - var cloned = JSON.parse(JSON.stringify(toClone)); - ysy.util.traverse(cloned, function (node) { - ysy.getData(node).id = null; - }); - return cloned; - }; - commandProcessors.setData = function (originId, idea, obj) { - ysy.setData(idea, obj); - }; - commandProcessors.setCustomData = function (originId, idea, obj) { - ysy.setCustomData(idea, obj); - }; - }); - }; - window.easyMindMupClasses.ContentPatch = ContentPatch; -})(); \ No newline at end of file diff --git a/plugins/easy_mindmup/assets/javascripts/data.js b/plugins/easy_mindmup/assets/javascripts/data.js deleted file mode 100644 index ebaa060..0000000 --- a/plugins/easy_mindmup/assets/javascripts/data.js +++ /dev/null @@ -1,36 +0,0 @@ -(function () { - /** - * - * @param {MindMup} ysy - * @constructor - */ - function DataStorage(ysy) { - /** - * - * @type {MindMup} - */ - this.ysy = ysy; - this.dataArrays = {}; - } - - /** - * - * @param {String} key - * @param {Array} array - */ - DataStorage.prototype.save = function (key, array) { - array = array || []; - this.dataArrays[key] = array; - this.ysy.eventBus.fireEvent("dataFilled", key, array); - }; - /** - * - * @param {String} key - * @return {Array} - */ - DataStorage.prototype.get = function (key) { - return this.dataArrays[key]; - }; - - window.easyMindMupClasses.DataStorage = DataStorage; -})(); \ No newline at end of file diff --git a/plugins/easy_mindmup/assets/javascripts/dom_patch.js b/plugins/easy_mindmup/assets/javascripts/dom_patch.js deleted file mode 100644 index e61fafa..0000000 --- a/plugins/easy_mindmup/assets/javascripts/dom_patch.js +++ /dev/null @@ -1,197 +0,0 @@ -/** - * Created by hosekp on 11/8/16. - */ - -/** - * Hammer-drag Event - * @typedef {Object} HammerEvent - * @property {{left:number,top:number}} finalPosition - * @property {{deltaX:number,deltaY:number,center:{}}} gesture - * @property {boolean} fakedEvent - */ - -(function () { - /** - * Patch class for mindmup/dom-map-view.js - * @param {MindMup} ysy - * @constructor - */ - function DomPatch(ysy) { - this.ysy = ysy; - this.patch(ysy); - this.deltaX = 0; - this.deltaY = 0; - this.init(ysy); - } - - /** - * - * @param {MindMup} ysy - */ - DomPatch.prototype.patch = function (ysy) { - jQuery.fn.scrollWhenDragging = function (scrollPredicate) { - 'use strict'; - return this.each(function () { - var element = $(this), - dragOrigin, - lastGesture, - isOut; - var dragStartFunc = function (withNode, event) { - if (scrollPredicate()) { - withNode = withNode === true; - $("body").addClass("mindmup-noselect"); - dragOrigin = { - top: $(window).scrollTop(), - left: element.scrollLeft(), - withNode: withNode - }; - if (event) { - dragOrigin.top += event.gesture.deltaY; - dragOrigin.left += event.gesture.deltaX; - } - isOut = false; - element.on('mouseleave.bg_drag', function () { - isOut = true; - // console.log("OUT"); - }).on('mouseenter.bg_drag', function () { - isOut = false; - // console.log("IN"); - dragOrigin = { - top: $(window).scrollTop() + lastGesture.deltaY, - left: element.scrollLeft() + lastGesture.deltaX, - withNode: withNode - }; - }); - } - }; - var dragFunc = function (e) { - if (e.gesture && e.gesture.srcEvent) { - if (isOut) { - lastGesture = e.gesture; - return; - } - if (dragOrigin && dragOrigin.withNode && !e.gesture.srcEvent.ctrlKey) { - return dragEndFunc(); - } - if (!dragOrigin && e.gesture.srcEvent.ctrlKey) { - dragStartFunc(true, e); - } - if (dragOrigin) { - $("html, body").scrollTop(dragOrigin.top - e.gesture.deltaY); - element.scrollLeft(dragOrigin.left - e.gesture.deltaX); - } - } - }; - var dragEndFunc = function () { - isOut = false; - $("body").removeClass("mindmup-noselect"); - element.off('mouseleave.bg_drag').off("mouseenter.bg_drag"); - dragOrigin = undefined; - }; - element - .on("dragstart", dragStartFunc) - .on('drag', dragFunc) - .on('dragend', dragEndFunc); - }); - }; - jQuery.fn.updateStage = function () { - 'use strict'; - var data = this.data(), - size = { - 'min-width': Math.floor(data.width - data.offsetX), - 'min-height': Math.floor(data.height - data.offsetY), - 'width': Math.floor(data.width - data.offsetX), - 'height': Math.floor(data.height - data.offsetY), - 'transform-origin': 'top left', - 'transform': 'translate3d(' + Math.floor(data.offsetX) + 'px, ' + Math.floor(data.offsetY) + 'px, 0)' - }; - if (data.scale && data.scale !== 1) { - size.transform = 'scale(' + data.scale + ') translate(' + Math.floor(data.offsetX) + 'px, ' + Math.floor(data.offsetY) + 'px)'; - } - this.css(size); - var viewHeight = Math.floor(data.height) * data.scale; - ysy.$container.height(viewHeight); - return this; - }; - }; - - /** @param {MindMup} ysy */ - DomPatch.prototype.init = function (ysy) { - var self = this; - ysy.eventBus.register("MapInited", function (mapModel) { - mapModel.addEventListener('nodeCreated', function (node) { - var $element = ysy.getNodeElement(node); - if (node.level !== 1) return; - $element.on('mm:stop-dragging', function (/** @type {HammerEvent} */evt) { - if (!evt.fakedEvent && evt.gesture && !evt.isPropagationStopped()) { - self.deltaX -= evt.gesture.deltaX; - self.deltaY -= evt.gesture.deltaY; - ysy.storage.extra.save(ysy.idea); - } - }); - }, -1); - }); - ysy.eventBus.register("TreeLoaded", function () { - if (self.deltaX !== 0 || self.deltaY !== 0) { - self.focusOnCenter(); - } - }); - }; - /** - * - * @param {{deltaX:number,deltaY:number}} data - */ - DomPatch.prototype.loadRootPosition = function (data) { - if (!data) return; - if (data.deltaX) this.deltaX = parseFloat(data.deltaX); - if (data.deltaY) this.deltaY = parseFloat(data.deltaY); - }; - DomPatch.prototype.resetRootPosition = function () { - this.deltaX = 0; - this.deltaY = 0; - this.ysy.storage.extra.save(this.ysy.idea); - }; - DomPatch.prototype.focusOnCenter = function () { - var $stage = this.ysy.$container.find('[data-mapjs-role="stage"]'); - var $central = $stage.find("#node_central"); - if ($central.length === 0) { - $central = $('<div id="node_central"></div>').appendTo($stage); - } - $central.css({left: this.deltaX, top: this.deltaY}); - $central.data({x: this.deltaX, y: this.deltaY, height: 40, width: 100}); - this.ysy.mapModel.dispatchEvent('nodeFocusRequested', ["central"]); - }; - - DomPatch.prototype.curvedPath = function (parent, child) { - 'use strict'; - var calculateConnector = function (parent, child) { - var childHorizontalOffset = parent.left < child.left ? 0 : 1; - return { - from: { - x: parent.left + 0.5 * parent.width, - y: parent.top + 0.5 * parent.height - }, - to: { - x: child.left + childHorizontalOffset * child.width, - y: child.top + 0.5 * child.height - } - }; - }, - position = { - left: Math.min(parent.left, child.left), - top: Math.min(parent.top, child.top) - }, - calculatedConnector; - position.width = Math.max(parent.left + parent.width, child.left + child.width, position.left + 1) - position.left; - position.height = Math.max(parent.top + parent.height, child.top + child.height, position.top + 1) - position.top; - - calculatedConnector = calculateConnector(parent, child); - return { - 'd': 'M' + Math.round(calculatedConnector.from.x - position.left) + ',' + Math.round(calculatedConnector.from.y - position.top) + - 'Q' + Math.round(calculatedConnector.from.x - position.left) + ',' + Math.round(calculatedConnector.to.y - position.top) + ' ' + Math.round(calculatedConnector.to.x - position.left) + ',' + Math.round(calculatedConnector.to.y - position.top), - // 'conn': calculatedConnector, - 'position': position - }; - }; - window.easyMindMupClasses.DomPatch = DomPatch; -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/easy_wbs.js b/plugins/easy_mindmup/assets/javascripts/easy_wbs.js deleted file mode 100644 index 2c03f2d..0000000 --- a/plugins/easy_mindmup/assets/javascripts/easy_wbs.js +++ /dev/null @@ -1 +0,0 @@ -//= require_tree . diff --git a/plugins/easy_mindmup/assets/javascripts/event_bus.js b/plugins/easy_mindmup/assets/javascripts/event_bus.js deleted file mode 100644 index b27d0f3..0000000 --- a/plugins/easy_mindmup/assets/javascripts/event_bus.js +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Created by hosekp on 11/10/16. - */ -(function () { - /** - * @param {MindMup} ysy - * @constructor - */ - function EventBus(ysy) { - this.ysy = ysy; - this.registeredMap = {}; - } - - /** - * send event to all of the listeners of specified event - * @param {String} event - * @param {...any} - */ - EventBus.prototype.fireEvent = function (event) { - var proFunctions = this.registeredMap[event]; - if (!proFunctions) return; - var slicedArgs = Array.prototype.slice.call(arguments, 1); - for (var i = 0; i < proFunctions.length; i++) { - proFunctions[i].apply(this, slicedArgs); - } - }; - /** - * Register listener of specified event - * @param {String} event - * @param {Function} func - */ - EventBus.prototype.register = function (event, func) { - var eventList = this.registeredMap[event]; - if (!eventList) this.registeredMap[event] = eventList = []; - for (var i = 0; i < eventList.length; i++) { - if (eventList[i] === func) { - return; - } - } - eventList.push(func); - }; - /** - * - * @param {String} event - * @param {Function} func - */ - EventBus.prototype.unregister = function (event, func) { - var eventList = this.registeredMap[event]; - if (!eventList) return; - for (var i = 0; i < eventList.length; i++) { - if (eventList[i] === func) { - eventList.splice(i, 1); - return; - } - } - }; - window.easyMindMupClasses.EventBus = EventBus; -})(); \ No newline at end of file diff --git a/plugins/easy_mindmup/assets/javascripts/expand_all.js b/plugins/easy_mindmup/assets/javascripts/expand_all.js deleted file mode 100644 index ee8d25f..0000000 --- a/plugins/easy_mindmup/assets/javascripts/expand_all.js +++ /dev/null @@ -1,63 +0,0 @@ -(function () { - /** - * - * @param {MindMup} ysy - * @param {jQuery} $parent - * @constructor - */ - function ExpandAllButton(ysy,$parent) { - /** - * - * @type {boolean} - */ - this.expanded=false; - this.ysy = ysy; - this.init(ysy,$parent); - } - - ExpandAllButton.prototype.id = "expandAllButton"; - - /** - * - * @param {MindMup} ysy - * @param {jQuery} $parent - * @return {ExpandAllButton} - */ - ExpandAllButton.prototype.init= function (ysy,$parent) { - var self = this; - ysy.repainter.redrawMe(this); - this.$element = $parent.find(".mindmup-expand-all"); - this.$element.click(function () { - self.expanded = !self.expanded; - if(self.expanded){ - self.collapseAll(); - }else{ - self.expandAll(); - } - // self.toggle(self.expanded); - ysy.repainter.redrawMe(self); - }); - return this; - }; - ExpandAllButton.prototype.expandAll= function () { - this.ysy.util.traverse(this.ysy.idea, function (node) { - if(_.isEmpty(node.ideas)) return; - node.attr.collapsed = false; - }); - this.ysy.idea.dispatchEvent("changed"); - }; - ExpandAllButton.prototype.collapseAll= function () { - var rootIdea = this.ysy.idea; - this.ysy.util.traverse(rootIdea, function (node) { - if(_.isEmpty(node.ideas)) return; - node.attr.collapsed = true; - }); - rootIdea.attr.collapsed = false; - rootIdea.dispatchEvent("changed"); - }; - ExpandAllButton.prototype._render= function () { - this.$element.find(".mindmup-button-expand-all").toggle(this.expanded); - this.$element.find(".mindmup-button-collapse-all").toggle(!this.expanded); - }; - window.easyMindMupClasses.ExpandAllButton = ExpandAllButton; -})(); \ No newline at end of file diff --git a/plugins/easy_mindmup/assets/javascripts/external.js b/plugins/easy_mindmup/assets/javascripts/external.js deleted file mode 100644 index 00f9b85..0000000 --- a/plugins/easy_mindmup/assets/javascripts/external.js +++ /dev/null @@ -1,1690 +0,0 @@ -(function(e,t){function i(t,n){var r,i,o,u=t.nodeName.toLowerCase();return"area"===u?(r=t.parentNode,i=r.name,!t.href||!i||r.nodeName.toLowerCase()!=="map"?!1:(o=e("img[usemap=#"+i+"]")[0],!!o&&s(o))):(/input|select|textarea|button|object/.test(u)?!t.disabled:"a"===u?t.href||n:n)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return e.css(this,"visibility")==="hidden"}).length}var n=0,r=/^ui-id-\d+$/;e.ui=e.ui||{};if(e.ui.version)return;e.extend(e.ui,{version:"1.10.0",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:e.fn.focus,focus:function(t,n){return typeof t=="number"?this.each(function(){var r=this;setTimeout(function(){e(r).focus(),n&&n.call(r)},t)}):this._focus.apply(this,arguments)},scrollParent:function(){var t;return e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?t=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):t=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(n){if(n!==t)return this.css("zIndex",n);if(this.length){var r=e(this[0]),i,s;while(r.length&&r[0]!==document){i=r.css("position");if(i==="absolute"||i==="relative"||i==="fixed"){s=parseInt(r.css("zIndex"),10);if(!isNaN(s)&&s!==0)return s}r=r.parent()}}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++n)})},removeUniqueId:function(){return this.each(function(){r.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(n){return!!e.data(n,t)}}):function(t,n,r){return!!e.data(t,r[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var n=e.attr(t,"tabindex"),r=isNaN(n);return(r||n>=0)&&i(t,!r)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(n,r){function u(t,n,r,s){return e.each(i,function(){n-=parseFloat(e.css(t,"padding"+this))||0,r&&(n-=parseFloat(e.css(t,"border"+this+"Width"))||0),s&&(n-=parseFloat(e.css(t,"margin"+this))||0)}),n}var i=r==="Width"?["Left","Right"]:["Top","Bottom"],s=r.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+r]=function(n){return n===t?o["inner"+r].call(this):this.each(function(){e(this).css(s,u(this,n)+"px")})},e.fn["outer"+r]=function(t,n){return typeof t!="number"?o["outer"+r].call(this,t):this.each(function(){e(this).css(s,u(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(n){return arguments.length?t.call(this,e.camelCase(n)):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,n,r){var i,s=e.ui[t].prototype;for(i in r)s.plugins[i]=s.plugins[i]||[],s.plugins[i].push([n,r[i]])},call:function(e,t,n){var r,i=e.plugins[t];if(!i||!e.element[0].parentNode||e.element[0].parentNode.nodeType===11)return;for(r=0;r<i.length;r++)e.options[i[r][0]]&&i[r][1].apply(e.element,n)}},hasScroll:function(t,n){if(e(t).css("overflow")==="hidden")return!1;var r=n&&n==="left"?"scrollLeft":"scrollTop",i=!1;return t[r]>0?!0:(t[r]=1,i=t[r]>0,t[r]=0,i)}})})(jQuery);(function(e,t){var n=0,r=Array.prototype.slice,i=e.cleanData;e.cleanData=function(t){for(var n=0,r;(r=t[n])!=null;n++)try{e(r).triggerHandler("remove")}catch(s){}i(t)},e.widget=function(t,n,r){var i,s,o,u,a={},f=t.split(".")[0];t=t.split(".")[1],i=f+"-"+t,r||(r=n,n=e.Widget),e.expr[":"][i.toLowerCase()]=function(t){return!!e.data(t,i)},e[f]=e[f]||{},s=e[f][t],o=e[f][t]=function(e,t){if(!this._createWidget)return new o(e,t);arguments.length&&this._createWidget(e,t)},e.extend(o,s,{version:r.version,_proto:e.extend({},r),_childConstructors:[]}),u=new n,u.options=e.widget.extend({},u.options),e.each(r,function(t,r){if(!e.isFunction(r)){a[t]=r;return}a[t]=function(){var e=function(){return n.prototype[t].apply(this,arguments)},i=function(e){return n.prototype[t].apply(this,e)};return function(){var t=this._super,n=this._superApply,s;return this._super=e,this._superApply=i,s=r.apply(this,arguments),this._super=t,this._superApply=n,s}}()}),o.prototype=e.widget.extend(u,{widgetEventPrefix:s?u.widgetEventPrefix:t},a,{constructor:o,namespace:f,widgetName:t,widgetFullName:i}),s?(e.each(s._childConstructors,function(t,n){var r=n.prototype;e.widget(r.namespace+"."+r.widgetName,o,n._proto)}),delete s._childConstructors):n._childConstructors.push(o),e.widget.bridge(t,o)},e.widget.extend=function(n){var i=r.call(arguments,1),s=0,o=i.length,u,a;for(;s<o;s++)for(u in i[s])a=i[s][u],i[s].hasOwnProperty(u)&&a!==t&&(e.isPlainObject(a)?n[u]=e.isPlainObject(n[u])?e.widget.extend({},n[u],a):e.widget.extend({},a):n[u]=a);return n},e.widget.bridge=function(n,i){var s=i.prototype.widgetFullName||n;e.fn[n]=function(o){var u=typeof o=="string",a=r.call(arguments,1),f=this;return o=!u&&a.length?e.widget.extend.apply(null,[o].concat(a)):o,u?this.each(function(){var r,i=e.data(this,s);if(!i)return e.error("cannot call methods on "+n+" prior to initialization; "+"attempted to call method '"+o+"'");if(!e.isFunction(i[o])||o.charAt(0)==="_")return e.error("no such method '"+o+"' for "+n+" widget instance");r=i[o].apply(i,a);if(r!==i&&r!==t)return f=r&&r.jquery?f.pushStack(r.get()):r,!1}):this.each(function(){var t=e.data(this,s);t?t.option(o||{})._init():e.data(this,s,new i(o,this))}),f}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,r){r=e(r||this.defaultElement||this)[0],this.element=e(r),this.uuid=n++,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(),r!==this&&(e.data(r,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===r&&this.destroy()}}),this.document=e(r.style?r.ownerDocument:r.document||r),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(n,r){var i=n,s,o,u;if(arguments.length===0)return e.widget.extend({},this.options);if(typeof n=="string"){i={},s=n.split("."),n=s.shift();if(s.length){o=i[n]=e.widget.extend({},this.options[n]);for(u=0;u<s.length-1;u++)o[s[u]]=o[s[u]]||{},o=o[s[u]];n=s.pop();if(r===t)return o[n]===t?null:o[n];o[n]=r}else{if(r===t)return this.options[n]===t?null:this.options[n];i[n]=r}}return this._setOptions(i),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,e==="disabled"&&(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(t,n,r){var i,s=this;typeof t!="boolean"&&(r=n,n=t,t=!1),r?(n=i=e(n),this.bindings=this.bindings.add(n)):(r=n,n=this.element,i=this.widget()),e.each(r,function(r,o){function u(){if(!t&&(s.options.disabled===!0||e(this).hasClass("ui-state-disabled")))return;return(typeof o=="string"?s[o]:o).apply(s,arguments)}typeof o!="string"&&(u.guid=o.guid=o.guid||u.guid||e.guid++);var a=r.match(/^(\w+)\s*(.*)$/),f=a[1]+s.eventNamespace,l=a[2];l?i.delegate(l,f,u):n.bind(f,u)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function n(){return(typeof e=="string"?r[e]:e).apply(r,arguments)}var r=this;return setTimeout(n,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,n,r){var i,s,o=this.options[t];r=r||{},n=e.Event(n),n.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),n.target=this.element[0],s=n.originalEvent;if(s)for(i in s)i in n||(n[i]=s[i]);return this.element.trigger(n,r),!(e.isFunction(o)&&o.apply(this.element[0],[n].concat(r))===!1||n.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,n){e.Widget.prototype["_"+t]=function(r,i,s){typeof i=="string"&&(i={effect:i});var o,u=i?i===!0||typeof i=="number"?n:i.effect||n:t;i=i||{},typeof i=="number"&&(i={duration:i}),o=!e.isEmptyObject(i),i.complete=s,i.delay&&r.delay(i.delay),o&&e.effects&&e.effects.effect[u]?r[t](i):u!==t&&r[u]?r[u](i.duration,i.easing,s):r.queue(function(n){e(this)[t](),s&&s.call(r[0]),n()})}})})(jQuery);(function(e,t){var n=!1;e(document).mouseup(function(){n=!1}),e.widget("ui.mouse",{version:"1.10.0",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(n){if(!0===e.data(n.target,t.widgetName+".preventClickEvent"))return e.removeData(n.target,t.widgetName+".preventClickEvent"),n.stopImmediatePropagation(),!1}),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(t){if(n)return;this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var r=this,i=t.which===1,s=typeof this.options.cancel=="string"&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;if(!i||s||!this._mouseCapture(t))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){r.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)){this._mouseStarted=this._mouseStart(t)!==!1;if(!this._mouseStarted)return t.preventDefault(),!0}return!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return r._mouseMove(e)},this._mouseUpDelegate=function(e){return r._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),n=!0,!0},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||document.documentMode<9)&&!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);(function(e,t){function h(e,t,n){return[parseInt(e[0],10)*(l.test(e[0])?t/100:1),parseInt(e[1],10)*(l.test(e[1])?n/100:1)]}function p(t,n){return parseInt(e.css(t,n),10)||0}function d(t){var n=t[0];return n.nodeType===9?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(n)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:n.preventDefault?{width:0,height:0,offset:{top:n.pageY,left:n.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,r=Math.max,i=Math.abs,s=Math.round,o=/left|center|right/,u=/top|center|bottom/,a=/[\+\-]\d+%?/,f=/^\w+/,l=/%$/,c=e.fn.position;e.position={scrollbarWidth:function(){if(n!==t)return n;var r,i,s=e("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return e("body").append(s),r=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,r===i&&(i=s[0].clientWidth),s.remove(),n=r-i},getScrollInfo:function(t){var n=t.isWindow?"":t.element.css("overflow-x"),r=t.isWindow?"":t.element.css("overflow-y"),i=n==="scroll"||n==="auto"&&t.width<t.element[0].scrollWidth,s=r==="scroll"||r==="auto"&&t.height<t.element[0].scrollHeight;return{width:i?e.position.scrollbarWidth():0,height:s?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var n=e(t||window),r=e.isWindow(n[0]);return{element:n,isWindow:r,offset:n.offset()||{left:0,top:0},scrollLeft:n.scrollLeft(),scrollTop:n.scrollTop(),width:r?n.width():n.outerWidth(),height:r?n.height():n.outerHeight()}}},e.fn.position=function(t){if(!t||!t.of)return c.apply(this,arguments);t=e.extend({},t);var n,l,v,m,g,y,b=e(t.of),w=e.position.getWithinInfo(t.within),E=e.position.getScrollInfo(w),S=(t.collision||"flip").split(" "),x={};return y=d(b),b[0].preventDefault&&(t.at="left top"),l=y.width,v=y.height,m=y.offset,g=e.extend({},m),e.each(["my","at"],function(){var e=(t[this]||"").split(" "),n,r;e.length===1&&(e=o.test(e[0])?e.concat(["center"]):u.test(e[0])?["center"].concat(e):["center","center"]),e[0]=o.test(e[0])?e[0]:"center",e[1]=u.test(e[1])?e[1]:"center",n=a.exec(e[0]),r=a.exec(e[1]),x[this]=[n?n[0]:0,r?r[0]:0],t[this]=[f.exec(e[0])[0],f.exec(e[1])[0]]}),S.length===1&&(S[1]=S[0]),t.at[0]==="right"?g.left+=l:t.at[0]==="center"&&(g.left+=l/2),t.at[1]==="bottom"?g.top+=v:t.at[1]==="center"&&(g.top+=v/2),n=h(x.at,l,v),g.left+=n[0],g.top+=n[1],this.each(function(){var o,u,a=e(this),f=a.outerWidth(),c=a.outerHeight(),d=p(this,"marginLeft"),y=p(this,"marginTop"),T=f+d+p(this,"marginRight")+E.width,N=c+y+p(this,"marginBottom")+E.height,C=e.extend({},g),k=h(x.my,a.outerWidth(),a.outerHeight());t.my[0]==="right"?C.left-=f:t.my[0]==="center"&&(C.left-=f/2),t.my[1]==="bottom"?C.top-=c:t.my[1]==="center"&&(C.top-=c/2),C.left+=k[0],C.top+=k[1],e.support.offsetFractions||(C.left=s(C.left),C.top=s(C.top)),o={marginLeft:d,marginTop:y},e.each(["left","top"],function(r,i){e.ui.position[S[r]]&&e.ui.position[S[r]][i](C,{targetWidth:l,targetHeight:v,elemWidth:f,elemHeight:c,collisionPosition:o,collisionWidth:T,collisionHeight:N,offset:[n[0]+k[0],n[1]+k[1]],my:t.my,at:t.at,within:w,elem:a})}),t.using&&(u=function(e){var n=m.left-C.left,s=n+l-f,o=m.top-C.top,u=o+v-c,h={target:{element:b,left:m.left,top:m.top,width:l,height:v},element:{element:a,left:C.left,top:C.top,width:f,height:c},horizontal:s<0?"left":n>0?"right":"center",vertical:u<0?"top":o>0?"bottom":"middle"};l<f&&i(n+s)<l&&(h.horizontal="center"),v<c&&i(o+u)<v&&(h.vertical="middle"),r(i(n),i(s))>r(i(o),i(u))?h.important="horizontal":h.important="vertical",t.using.call(this,e,h)}),a.offset(e.extend(C,{using:u}))})},e.ui.position={fit:{left:function(e,t){var n=t.within,i=n.isWindow?n.scrollLeft:n.offset.left,s=n.width,o=e.left-t.collisionPosition.marginLeft,u=i-o,a=o+t.collisionWidth-s-i,f;t.collisionWidth>s?u>0&&a<=0?(f=e.left+u+t.collisionWidth-s-i,e.left+=u-f):a>0&&u<=0?e.left=i:u>a?e.left=i+s-t.collisionWidth:e.left=i:u>0?e.left+=u:a>0?e.left-=a:e.left=r(e.left-o,e.left)},top:function(e,t){var n=t.within,i=n.isWindow?n.scrollTop:n.offset.top,s=t.within.height,o=e.top-t.collisionPosition.marginTop,u=i-o,a=o+t.collisionHeight-s-i,f;t.collisionHeight>s?u>0&&a<=0?(f=e.top+u+t.collisionHeight-s-i,e.top+=u-f):a>0&&u<=0?e.top=i:u>a?e.top=i+s-t.collisionHeight:e.top=i:u>0?e.top+=u:a>0?e.top-=a:e.top=r(e.top-o,e.top)}},flip:{left:function(e,t){var n=t.within,r=n.offset.left+n.scrollLeft,s=n.width,o=n.isWindow?n.scrollLeft:n.offset.left,u=e.left-t.collisionPosition.marginLeft,a=u-o,f=u+t.collisionWidth-s-o,l=t.my[0]==="left"?-t.elemWidth:t.my[0]==="right"?t.elemWidth:0,c=t.at[0]==="left"?t.targetWidth:t.at[0]==="right"?-t.targetWidth:0,h=-2*t.offset[0],p,d;if(a<0){p=e.left+l+c+h+t.collisionWidth-s-r;if(p<0||p<i(a))e.left+=l+c+h}else if(f>0){d=e.left-t.collisionPosition.marginLeft+l+c+h-o;if(d>0||i(d)<f)e.left+=l+c+h}},top:function(e,t){var n=t.within,r=n.offset.top+n.scrollTop,s=n.height,o=n.isWindow?n.scrollTop:n.offset.top,u=e.top-t.collisionPosition.marginTop,a=u-o,f=u+t.collisionHeight-s-o,l=t.my[1]==="top",c=l?-t.elemHeight:t.my[1]==="bottom"?t.elemHeight:0,h=t.at[1]==="top"?t.targetHeight:t.at[1]==="bottom"?-t.targetHeight:0,p=-2*t.offset[1],d,v;a<0?(v=e.top+c+h+p+t.collisionHeight-s-r,e.top+c+h+p>a&&(v<0||v<i(a))&&(e.top+=c+h+p)):f>0&&(d=e.top-t.collisionPosition.marginTop+c+h+p-o,e.top+c+h+p>f&&(d>0||i(d)<f)&&(e.top+=c+h+p))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,n,r,i,s,o=document.getElementsByTagName("body")[0],u=document.createElement("div");t=document.createElement(o?"div":"body"),r={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},o&&e.extend(r,{position:"absolute",left:"-1000px",top:"-1000px"});for(s in r)t.style[s]=r[s];t.appendChild(u),n=o||document.documentElement,n.insertBefore(t,n.firstChild),u.style.cssText="position: absolute; left: 10.7432222px;",i=e(u).offset().left,e.support.offsetFractions=i>10&&i<11,t.innerHTML="",n.removeChild(t)}()})(jQuery);(function(e,t){e.widget("ui.draggable",e.ui.mouse,{version:"1.10.0",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){this.options.helper==="original"&&!/^(?:r|a|f)/.test(this.element.css("position"))&&(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},_destroy:function(){this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy()},_mouseCapture:function(t){var n=this.options;return this.helper||n.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(e(n.iframeFix===!0?"iframe":n.iframeFix).each(function(){e("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var n=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offset=this.positionAbs=this.element.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.originalPosition=this.position=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,n.cursorAt&&this._adjustOffsetFromHelper(n.cursorAt),n.containment&&this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,n){this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute");if(!n){var r=this._uiHash();if(this._trigger("drag",t,r)===!1)return this._mouseUp({}),!1;this.position=r.position}if(!this.options.axis||this.options.axis!=="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!=="x")this.helper[0].style.top=this.position.top+"px";return e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var n,r=this,i=!1,s=!1;e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),n=this.element[0];while(n&&(n=n.parentNode))n===document&&(i=!0);return!i&&this.options.helper==="original"?!1:(this.options.revert==="invalid"&&!s||this.options.revert==="valid"&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){r._trigger("stop",t)!==!1&&r._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1)},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){var n=!this.options.handle||!e(this.options.handle,this.element).length?!0:!1;return e(this.options.handle,this.element).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n},_createHelper:function(t){var n=this.options,r=e.isFunction(n.helper)?e(n.helper.apply(this.element[0],[t])):n.helper==="clone"?this.element.clone().removeAttr("id"):this.element;return r.parents("body").length||r.appendTo(n.appendTo==="parent"?this.element[0].parentNode:n.appendTo),r[0]!==this.element[0]&&!/(fixed|absolute)/.test(r.css("position"))&&r.css("position","absolute"),r},_adjustOffsetFromHelper:function(t){typeof t=="string"&&(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();this.cssPosition==="absolute"&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()==="html"&&e.ui.ie)t={top:0,left:0};return{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition==="relative"){var e=this.element.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.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,n,r,i=this.options;i.containment==="parent"&&(i.containment=this.helper[0].parentNode);if(i.containment==="document"||i.containment==="window")this.containment=[i.containment==="document"?0:e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,i.containment==="document"?0:e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,(i.containment==="document"?0:e(window).scrollLeft())+e(i.containment==="document"?document:window).width()-this.helperProportions.width-this.margins.left,(i.containment==="document"?0:e(window).scrollTop())+(e(i.containment==="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(i.containment)&&i.containment.constructor!==Array){n=e(i.containment),r=n[0];if(!r)return;t=e(r).css("overflow")!=="hidden",this.containment=[(parseInt(e(r).css("borderLeftWidth"),10)||0)+(parseInt(e(r).css("paddingLeft"),10)||0),(parseInt(e(r).css("borderTopWidth"),10)||0)+(parseInt(e(r).css("paddingTop"),10)||0),(t?Math.max(r.scrollWidth,r.offsetWidth):r.offsetWidth)-(parseInt(e(r).css("borderLeftWidth"),10)||0)-(parseInt(e(r).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(r.scrollHeight,r.offsetHeight):r.offsetHeight)-(parseInt(e(r).css("borderTopWidth"),10)||0)-(parseInt(e(r).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=n}else i.containment.constructor===Array&&(this.containment=i.containment)},_convertPositionTo:function(t,n){n||(n=this.position);var r=t==="absolute"?1:-1,i=this.cssPosition!=="absolute"||this.scrollParent[0]!==document&&!!e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,s=/(html|body)/i.test(i[0].tagName);return{top:n.top+this.offset.relative.top*r+this.offset.parent.top*r-(this.cssPosition==="fixed"?-this.scrollParent.scrollTop():s?0:i.scrollTop())*r,left:n.left+this.offset.relative.left*r+this.offset.parent.left*r-(this.cssPosition==="fixed"?-this.scrollParent.scrollLeft():s?0:i.scrollLeft())*r}},_generatePosition:function(t){var n,r,i,s,o=this.options,u=this.cssPosition!=="absolute"||this.scrollParent[0]!==document&&!!e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(u[0].tagName),f=t.pageX,l=t.pageY;return this.originalPosition&&(this.containment&&(this.relative_container?(r=this.relative_container.offset(),n=[this.containment[0]+r.left,this.containment[1]+r.top,this.containment[2]+r.left,this.containment[3]+r.top]):n=this.containment,t.pageX-this.offset.click.left<n[0]&&(f=n[0]+this.offset.click.left),t.pageY-this.offset.click.top<n[1]&&(l=n[1]+this.offset.click.top),t.pageX-this.offset.click.left>n[2]&&(f=n[2]+this.offset.click.left),t.pageY-this.offset.click.top>n[3]&&(l=n[3]+this.offset.click.top)),o.grid&&(i=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=n?i-this.offset.click.top>=n[1]||i-this.offset.click.top>n[3]?i:i-this.offset.click.top>=n[1]?i-o.grid[1]:i+o.grid[1]:i,s=o.grid[0]?this.originalPageX+Math.round((f-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,f=n?s-this.offset.click.left>=n[0]||s-this.offset.click.left>n[2]?s:s-this.offset.click.left>=n[0]?s-o.grid[0]:s+o.grid[0]:s)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(this.cssPosition==="fixed"?-this.scrollParent.scrollTop():a?0:u.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(this.cssPosition==="fixed"?-this.scrollParent.scrollLeft():a?0:u.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]!==this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(t,n,r){return r=r||this._uiHash(),e.ui.plugin.call(this,t,[n,r]),t==="drag"&&(this.positionAbs=this._convertPositionTo("absolute")),e.Widget.prototype._trigger.call(this,t,n,r)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,n){var r=e(this).data("ui-draggable"),i=r.options,s=e.extend({},n,{item:r.element});r.sortables=[],e(i.connectToSortable).each(function(){var n=e.data(this,"ui-sortable");n&&!n.options.disabled&&(r.sortables.push({instance:n,shouldRevert:n.options.revert}),n.refreshPositions(),n._trigger("activate",t,s))})},stop:function(t,n){var r=e(this).data("ui-draggable"),i=e.extend({},n,{item:r.element});e.each(r.sortables,function(){this.instance.isOver?(this.instance.isOver=0,r.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=!0),this.instance._mouseStop(t),this.instance.options.helper=this.instance.options._helper,r.options.helper==="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",t,i))})},drag:function(t,n){var r=e(this).data("ui-draggable"),i=this;e.each(r.sortables,function(){var s=!1,o=this;this.instance.positionAbs=r.positionAbs,this.instance.helperProportions=r.helperProportions,this.instance.offset.click=r.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(s=!0,e.each(r.sortables,function(){return this.instance.positionAbs=r.positionAbs,this.instance.helperProportions=r.helperProportions,this.instance.offset.click=r.offset.click,this!==o&&this.instance._intersectsWith(this.instance.containerCache)&&e.ui.contains(o.instance.element[0],this.instance.element[0])&&(s=!1),s})),s?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=e(i).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return n.helper[0]},t.target=this.instance.currentItem[0],this.instance._mouseCapture(t,!0),this.instance._mouseStart(t,!0,!0),this.instance.offset.click.top=r.offset.click.top,this.instance.offset.click.left=r.offset.click.left,this.instance.offset.parent.left-=r.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=r.offset.parent.top-this.instance.offset.parent.top,r._trigger("toSortable",t),r.dropped=this.instance.element,r.currentItem=r.element,this.instance.fromOutside=r),this.instance.currentItem&&this.instance._mouseDrag(t)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",t,this.instance._uiHash(this.instance)),this.instance._mouseStop(t,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),r._trigger("fromSortable",t),r.dropped=!1)})}}),e.ui.plugin.add("draggable","cursor",{start:function(){var t=e("body"),n=e(this).data("ui-draggable").options;t.css("cursor")&&(n._cursor=t.css("cursor")),t.css("cursor",n.cursor)},stop:function(){var t=e(this).data("ui-draggable").options;t._cursor&&e("body").css("cursor",t._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,n){var r=e(n.helper),i=e(this).data("ui-draggable").options;r.css("opacity")&&(i._opacity=r.css("opacity")),r.css("opacity",i.opacity)},stop:function(t,n){var r=e(this).data("ui-draggable").options;r._opacity&&e(n.helper).css("opacity",r._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(){var t=e(this).data("ui-draggable");t.scrollParent[0]!==document&&t.scrollParent[0].tagName!=="HTML"&&(t.overflowOffset=t.scrollParent.offset())},drag:function(t){var n=e(this).data("ui-draggable"),r=n.options,i=!1;if(n.scrollParent[0]!==document&&n.scrollParent[0].tagName!=="HTML"){if(!r.axis||r.axis!=="x")n.overflowOffset.top+n.scrollParent[0].offsetHeight-t.pageY<r.scrollSensitivity?n.scrollParent[0].scrollTop=i=n.scrollParent[0].scrollTop+r.scrollSpeed:t.pageY-n.overflowOffset.top<r.scrollSensitivity&&(n.scrollParent[0].scrollTop=i=n.scrollParent[0].scrollTop-r.scrollSpeed);if(!r.axis||r.axis!=="y")n.overflowOffset.left+n.scrollParent[0].offsetWidth-t.pageX<r.scrollSensitivity?n.scrollParent[0].scrollLeft=i=n.scrollParent[0].scrollLeft+r.scrollSpeed:t.pageX-n.overflowOffset.left<r.scrollSensitivity&&(n.scrollParent[0].scrollLeft=i=n.scrollParent[0].scrollLeft-r.scrollSpeed)}else{if(!r.axis||r.axis!=="x")t.pageY-e(document).scrollTop()<r.scrollSensitivity?i=e(document).scrollTop(e(document).scrollTop()-r.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<r.scrollSensitivity&&(i=e(document).scrollTop(e(document).scrollTop()+r.scrollSpeed));if(!r.axis||r.axis!=="y")t.pageX-e(document).scrollLeft()<r.scrollSensitivity?i=e(document).scrollLeft(e(document).scrollLeft()-r.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<r.scrollSensitivity&&(i=e(document).scrollLeft(e(document).scrollLeft()+r.scrollSpeed))}i!==!1&&e.ui.ddmanager&&!r.dropBehaviour&&e.ui.ddmanager.prepareOffsets(n,t)}}),e.ui.plugin.add("draggable","snap",{start:function(){var t=e(this).data("ui-draggable"),n=t.options;t.snapElements=[],e(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var n=e(this),r=n.offset();this!==t.element[0]&&t.snapElements.push({item:this,width:n.outerWidth(),height:n.outerHeight(),top:r.top,left:r.left})})},drag:function(t,n){var r,i,s,o,u,a,f,l,c,h,p=e(this).data("ui-draggable"),d=p.options,v=d.snapTolerance,m=n.offset.left,g=m+p.helperProportions.width,y=n.offset.top,b=y+p.helperProportions.height;for(c=p.snapElements.length-1;c>=0;c--){u=p.snapElements[c].left,a=u+p.snapElements[c].width,f=p.snapElements[c].top,l=f+p.snapElements[c].height;if(!(u-v<m&&m<a+v&&f-v<y&&y<l+v||u-v<m&&m<a+v&&f-v<b&&b<l+v||u-v<g&&g<a+v&&f-v<y&&y<l+v||u-v<g&&g<a+v&&f-v<b&&b<l+v)){p.snapElements[c].snapping&&p.options.snap.release&&p.options.snap.release.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=!1;continue}d.snapMode!=="inner"&&(r=Math.abs(f-b)<=v,i=Math.abs(l-y)<=v,s=Math.abs(u-g)<=v,o=Math.abs(a-m)<=v,r&&(n.position.top=p._convertPositionTo("relative",{top:f-p.helperProportions.height,left:0}).top-p.margins.top),i&&(n.position.top=p._convertPositionTo("relative",{top:l,left:0}).top-p.margins.top),s&&(n.position.left=p._convertPositionTo("relative",{top:0,left:u-p.helperProportions.width}).left-p.margins.left),o&&(n.position.left=p._convertPositionTo("relative",{top:0,left:a}).left-p.margins.left)),h=r||i||s||o,d.snapMode!=="outer"&&(r=Math.abs(f-y)<=v,i=Math.abs(l-b)<=v,s=Math.abs(u-m)<=v,o=Math.abs(a-g)<=v,r&&(n.position.top=p._convertPositionTo("relative",{top:f,left:0}).top-p.margins.top),i&&(n.position.top=p._convertPositionTo("relative",{top:l-p.helperProportions.height,left:0}).top-p.margins.top),s&&(n.position.left=p._convertPositionTo("relative",{top:0,left:u}).left-p.margins.left),o&&(n.position.left=p._convertPositionTo("relative",{top:0,left:a-p.helperProportions.width}).left-p.margins.left)),!p.snapElements[c].snapping&&(r||i||s||o||h)&&p.options.snap.snap&&p.options.snap.snap.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=r||i||s||o||h}}}),e.ui.plugin.add("draggable","stack",{start:function(){var t,n=e(this).data("ui-draggable").options,r=e.makeArray(e(n.stack)).sort(function(t,n){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(n).css("zIndex"),10)||0)});if(!r.length)return;t=parseInt(r[0].style.zIndex,10)||0,e(r).each(function(e){this.style.zIndex=t+e}),this[0].style.zIndex=t+r.length}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,n){var r=e(n.helper),i=e(this).data("ui-draggable").options;r.css("zIndex")&&(i._zIndex=r.css("zIndex")),r.css("zIndex",i.zIndex)},stop:function(t,n){var r=e(this).data("ui-draggable").options;r._zIndex&&e(n.helper).css("zIndex",r._zIndex)}})})(jQuery);jQuery.effects||function(e,t){var n="ui-effects-";e.effects={effect:{}},function(e,t){function h(e,t,n){var r=u[t.type]||{};return e==null?n||!t.def?null:t.def:(e=r.floor?~~e:parseFloat(e),isNaN(e)?t.def:r.mod?(e+r.mod)%r.mod:0>e?0:r.max<e?r.max:e)}function p(t){var n=s(),r=n._rgba=[];return t=t.toLowerCase(),c(i,function(e,i){var s,u=i.re.exec(t),a=u&&i.parse(u),f=i.space||"rgba";if(a)return s=n[f](a),n[o[f].cache]=s[o[f].cache],r=n._rgba=s._rgba,!1}),r.length?(r.join()==="0,0,0,0"&&e.extend(r,l.transparent),n):l[t]}function d(e,t,n){return n=(n+1)%1,n*6<1?e+(t-e)*n*6:n*2<1?t:n*3<2?e+(t-e)*(2/3-n)*6:e}var n="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,i=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1]*2.55,e[2]*2.55,e[3]*2.55,e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],s=e.Color=function(t,n,r,i){return new e.Color.fn.parse(t,n,r,i)},o={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},a=s.support={},f=e("<p>")[0],l,c=e.each;f.style.cssText="background-color:rgba(1,1,1,.5)",a.rgba=f.style.backgroundColor.indexOf("rgba")>-1,c(o,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),s.fn=e.extend(s.prototype,{parse:function(n,r,i,u){if(n===t)return this._rgba=[null,null,null,null],this;if(n.jquery||n.nodeType)n=e(n).css(r),r=t;var a=this,f=e.type(n),d=this._rgba=[];r!==t&&(n=[n,r,i,u],f="array");if(f==="string")return this.parse(p(n)||l._default);if(f==="array")return c(o.rgba.props,function(e,t){d[t.idx]=h(n[t.idx],t)}),this;if(f==="object")return n instanceof s?c(o,function(e,t){n[t.cache]&&(a[t.cache]=n[t.cache].slice())}):c(o,function(t,r){var i=r.cache;c(r.props,function(e,t){if(!a[i]&&r.to){if(e==="alpha"||n[e]==null)return;a[i]=r.to(a._rgba)}a[i][t.idx]=h(n[e],t,!0)}),a[i]&&e.inArray(null,a[i].slice(0,3))<0&&(a[i][3]=1,r.from&&(a._rgba=r.from(a[i])))}),this},is:function(e){var t=s(e),n=!0,r=this;return c(o,function(e,i){var s,o=t[i.cache];return o&&(s=r[i.cache]||i.to&&i.to(r._rgba)||[],c(i.props,function(e,t){if(o[t.idx]!=null)return n=o[t.idx]===s[t.idx],n})),n}),n},_space:function(){var e=[],t=this;return c(o,function(n,r){t[r.cache]&&e.push(n)}),e.pop()},transition:function(e,t){var n=s(e),r=n._space(),i=o[r],a=this.alpha()===0?s("transparent"):this,f=a[i.cache]||i.to(a._rgba),l=f.slice();return n=n[i.cache],c(i.props,function(e,r){var i=r.idx,s=f[i],o=n[i],a=u[r.type]||{};if(o===null)return;s===null?l[i]=o:(a.mod&&(o-s>a.mod/2?s+=a.mod:s-o>a.mod/2&&(s-=a.mod)),l[i]=h((o-s)*t+s,r))}),this[r](l)},blend:function(t){if(this._rgba[3]===1)return this;var n=this._rgba.slice(),r=n.pop(),i=s(t)._rgba;return s(e.map(n,function(e,t){return(1-r)*i[t]+r*e}))},toRgbaString:function(){var t="rgba(",n=e.map(this._rgba,function(e,t){return e==null?t>2?1:0:e});return n[3]===1&&(n.pop(),t="rgb("),t+n.join()+")"},toHslaString:function(){var t="hsla(",n=e.map(this.hsla(),function(e,t){return e==null&&(e=t>2?1:0),t&&t<3&&(e=Math.round(e*100)+"%"),e});return n[3]===1&&(n.pop(),t="hsl("),t+n.join()+")"},toHexString:function(t){var n=this._rgba.slice(),r=n.pop();return t&&n.push(~~(r*255)),"#"+e.map(n,function(e){return e=(e||0).toString(16),e.length===1?"0"+e:e}).join("")},toString:function(){return this._rgba[3]===0?"transparent":this.toRgbaString()}}),s.fn.parse.prototype=s.fn,o.hsla.to=function(e){if(e[0]==null||e[1]==null||e[2]==null)return[null,null,null,e[3]];var t=e[0]/255,n=e[1]/255,r=e[2]/255,i=e[3],s=Math.max(t,n,r),o=Math.min(t,n,r),u=s-o,a=s+o,f=a*.5,l,c;return o===s?l=0:t===s?l=60*(n-r)/u+360:n===s?l=60*(r-t)/u+120:l=60*(t-n)/u+240,u===0?c=0:f<=.5?c=u/a:c=u/(2-a),[Math.round(l)%360,c,f,i==null?1:i]},o.hsla.from=function(e){if(e[0]==null||e[1]==null||e[2]==null)return[null,null,null,e[3]];var t=e[0]/360,n=e[1],r=e[2],i=e[3],s=r<=.5?r*(1+n):r+n-r*n,o=2*r-s;return[Math.round(d(o,s,t+1/3)*255),Math.round(d(o,s,t)*255),Math.round(d(o,s,t-1/3)*255),i]},c(o,function(n,i){var o=i.props,u=i.cache,a=i.to,f=i.from;s.fn[n]=function(n){a&&!this[u]&&(this[u]=a(this._rgba));if(n===t)return this[u].slice();var r,i=e.type(n),l=i==="array"||i==="object"?n:arguments,p=this[u].slice();return c(o,function(e,t){var n=l[i==="object"?e:t.idx];n==null&&(n=p[t.idx]),p[t.idx]=h(n,t)}),f?(r=s(f(p)),r[u]=p,r):s(p)},c(o,function(t,i){if(s.fn[t])return;s.fn[t]=function(s){var o=e.type(s),u=t==="alpha"?this._hsla?"hsla":"rgba":n,a=this[u](),f=a[i.idx],l;return o==="undefined"?f:(o==="function"&&(s=s.call(this,f),o=e.type(s)),s==null&&i.empty?this:(o==="string"&&(l=r.exec(s),l&&(s=f+parseFloat(l[2])*(l[1]==="+"?1:-1))),a[i.idx]=s,this[u](a)))}})}),s.hook=function(t){var n=t.split(" ");c(n,function(t,n){e.cssHooks[n]={set:function(t,r){var i,o,u="";if(r!=="transparent"&&(e.type(r)!=="string"||(i=p(r)))){r=s(i||r);if(!a.rgba&&r._rgba[3]!==1){o=n==="backgroundColor"?t.parentNode:t;while((u===""||u==="transparent")&&o&&o.style)try{u=e.css(o,"backgroundColor"),o=o.parentNode}catch(f){}r=r.blend(u&&u!=="transparent"?u:"_default")}r=r.toRgbaString()}try{t.style[n]=r}catch(f){}}},e.fx.step[n]=function(t){t.colorInit||(t.start=s(t.elem,n),t.end=s(t.end),t.colorInit=!0),e.cssHooks[n].set(t.elem,t.start.transition(t.end,t.pos))}})},s.hook(n),e.cssHooks.borderColor={expand:function(e){var t={};return c(["Top","Right","Bottom","Left"],function(n,r){t["border"+r+"Color"]=e}),t}},l=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function i(t){var n,r,i=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,s={};if(i&&i.length&&i[0]&&i[i[0]]){r=i.length;while(r--)n=i[r],typeof i[n]=="string"&&(s[e.camelCase(n)]=i[n])}else for(n in i)typeof i[n]=="string"&&(s[n]=i[n]);return s}function s(t,n){var i={},s,o;for(s in n)o=n[s],t[s]!==o&&!r[s]&&(e.fx.step[s]||!isNaN(parseFloat(o)))&&(i[s]=o);return i}var n=["add","remove","toggle"],r={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,n){e.fx.step[n]=function(e){if(e.end!=="none"&&!e.setAttr||e.pos===1&&!e.setAttr)jQuery.style(e.elem,n,e.end),e.setAttr=!0}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(t,r,o,u){var a=e.speed(r,o,u);return this.queue(function(){var r=e(this),o=r.attr("class")||"",u,f=a.children?r.find("*").addBack():r;f=f.map(function(){var t=e(this);return{el:t,start:i(this)}}),u=function(){e.each(n,function(e,n){t[n]&&r[n+"Class"](t[n])})},u(),f=f.map(function(){return this.end=i(this.el[0]),this.diff=s(this.start,this.end),this}),r.attr("class",o),f=f.map(function(){var t=this,n=e.Deferred(),r=e.extend({},a,{queue:!1,complete:function(){n.resolve(t)}});return this.el.animate(this.diff,r),n.promise()}),e.when.apply(e,f.get()).done(function(){u(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),a.complete.call(r[0])})})},e.fn.extend({_addClass:e.fn.addClass,addClass:function(t,n,r,i){return n?e.effects.animateClass.call(this,{add:t},n,r,i):this._addClass(t)},_removeClass:e.fn.removeClass,removeClass:function(t,n,r,i){return n?e.effects.animateClass.call(this,{remove:t},n,r,i):this._removeClass(t)},_toggleClass:e.fn.toggleClass,toggleClass:function(n,r,i,s,o){return typeof r=="boolean"||r===t?i?e.effects.animateClass.call(this,r?{add:n}:{remove:n},i,s,o):this._toggleClass(n,r):e.effects.animateClass.call(this,{toggle:n},r,i,s)},switchClass:function(t,n,r,i,s){return e.effects.animateClass.call(this,{add:n,remove:t},r,i,s)}})}(),function(){function r(t,n,r,i){e.isPlainObject(t)&&(n=t,t=t.effect),t={effect:t},n==null&&(n={}),e.isFunction(n)&&(i=n,r=null,n={});if(typeof n=="number"||e.fx.speeds[n])i=r,r=n,n={};return e.isFunction(r)&&(i=r,r=null),n&&e.extend(t,n),r=r||n.duration,t.duration=e.fx.off?0:typeof r=="number"?r:r in e.fx.speeds?e.fx.speeds[r]:e.fx.speeds._default,t.complete=i||n.complete,t}function i(t){return!t||typeof t=="number"||e.fx.speeds[t]?!0:typeof t=="string"&&!e.effects.effect[t]}e.extend(e.effects,{version:"1.10.0",save:function(e,t){for(var r=0;r<t.length;r++)t[r]!==null&&e.data(n+t[r],e[0].style[t[r]])},restore:function(e,r){var i,s;for(s=0;s<r.length;s++)r[s]!==null&&(i=e.data(n+r[s]),i===t&&(i=""),e.css(r[s],i))},setMode:function(e,t){return t==="toggle"&&(t=e.is(":hidden")?"show":"hide"),t},getBaseline:function(e,t){var n,r;switch(e[0]){case"top":n=0;break;case"middle":n=.5;break;case"bottom":n=1;break;default:n=e[0]/t.height}switch(e[1]){case"left":r=0;break;case"center":r=.5;break;case"right":r=1;break;default:r=e[1]/t.width}return{x:r,y:n}},createWrapper:function(t){if(t.parent().is(".ui-effects-wrapper"))return t.parent();var n={width:t.outerWidth(!0),height:t.outerHeight(!0),"float":t.css("float")},r=e("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),i={width:t.width(),height:t.height()},s=document.activeElement;try{s.id}catch(o){s=document.body}return t.wrap(r),(t[0]===s||e.contains(t[0],s))&&e(s).focus(),r=t.parent(),t.css("position")==="static"?(r.css({position:"relative"}),t.css({position:"relative"})):(e.extend(n,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,r){n[r]=t.css(r),isNaN(parseInt(n[r],10))&&(n[r]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(i),r.css(n).show()},removeWrapper:function(t){var n=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===n||e.contains(t[0],n))&&e(n).focus()),t},setTransition:function(t,n,r,i){return i=i||{},e.each(n,function(e,n){var s=t.cssUnit(n);s[0]>0&&(i[n]=s[0]*r+s[1])}),i}}),e.fn.extend({effect:function(){function o(n){function u(){e.isFunction(i)&&i.call(r[0]),e.isFunction(n)&&n()}var r=e(this),i=t.complete,o=t.mode;(r.is(":hidden")?o==="hide":o==="show")?u():s.call(r[0],t,u)}var t=r.apply(this,arguments),n=t.mode,i=t.queue,s=e.effects.effect[t.effect];return e.fx.off||!s?n?this[n](t.duration,t.complete):this.each(function(){t.complete&&t.complete.call(this)}):i===!1?this.each(o):this.queue(i||"fx",o)},_show:e.fn.show,show:function(e){if(i(e))return this._show.apply(this,arguments);var t=r.apply(this,arguments);return t.mode="show",this.effect.call(this,t)},_hide:e.fn.hide,hide:function(e){if(i(e))return this._hide.apply(this,arguments);var t=r.apply(this,arguments);return t.mode="hide",this.effect.call(this,t)},__toggle:e.fn.toggle,toggle:function(t){if(i(t)||typeof t=="boolean"||e.isFunction(t))return this.__toggle.apply(this,arguments);var n=r.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)},cssUnit:function(t){var n=this.css(t),r=[];return e.each(["em","px","%","pt"],function(e,t){n.indexOf(t)>0&&(r=[parseFloat(n),t])}),r}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,n){t[n]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return e===0||e===1?e:-Math.pow(2,8*(e-1))*Math.sin(((e-1)*80-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){var t,n=4;while(e<((t=Math.pow(2,--n))-1)/11);return 1/Math.pow(4,3-n)-7.5625*Math.pow((t*3-2)/22-e,2)}}),e.each(t,function(t,n){e.easing["easeIn"+t]=n,e.easing["easeOut"+t]=function(e){return 1-n(1-e)},e.easing["easeInOut"+t]=function(e){return e<.5?n(e*2)/2:1-n(e*-2+2)/2}})}()}(jQuery);(function(e,t){var n=/up|down|vertical/,r=/up|left|vertical|horizontal/;e.effects.effect.blind=function(t,i){var s=e(this),o=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(s,t.mode||"hide"),a=t.direction||"up",f=n.test(a),l=f?"height":"width",c=f?"top":"left",h=r.test(a),p={},d=u==="show",v,m,g;s.parent().is(".ui-effects-wrapper")?e.effects.save(s.parent(),o):e.effects.save(s,o),s.show(),v=e.effects.createWrapper(s).css({overflow:"hidden"}),m=v[l](),g=parseFloat(v.css(c))||0,p[l]=d?m:0,h||(s.css(f?"bottom":"right",0).css(f?"top":"left","auto").css({position:"absolute"}),p[c]=d?g:m+g),d&&(v.css(l,0),h||v.css(c,g+m)),v.animate(p,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){u==="hide"&&s.hide(),e.effects.restore(s,o),e.effects.removeWrapper(s),i()}})}})(jQuery);(function(e,t){e.effects.effect.bounce=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"effect"),o=s==="hide",u=s==="show",a=t.direction||"up",f=t.distance,l=t.times||5,c=l*2+(u||o?1:0),h=t.duration/c,p=t.easing,d=a==="up"||a==="down"?"top":"left",v=a==="up"||a==="left",m,g,y,b=r.queue(),w=b.length;(u||o)&&i.push("opacity"),e.effects.save(r,i),r.show(),e.effects.createWrapper(r),f||(f=r[d==="top"?"outerHeight":"outerWidth"]()/3),u&&(y={opacity:1},y[d]=0,r.css("opacity",0).css(d,v?-f*2:f*2).animate(y,h,p)),o&&(f/=Math.pow(2,l-1)),y={},y[d]=0;for(m=0;m<l;m++)g={},g[d]=(v?"-=":"+=")+f,r.animate(g,h,p).animate(y,h,p),f=o?f*2:f/2;o&&(g={opacity:0},g[d]=(v?"-=":"+=")+f,r.animate(g,h,p)),r.queue(function(){o&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}),w>1&&b.splice.apply(b,[1,0].concat(b.splice(w,c+1))),r.dequeue()}})(jQuery);(function(e,t){e.effects.effect.clip=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"hide"),o=s==="show",u=t.direction||"vertical",a=u==="vertical",f=a?"height":"width",l=a?"top":"left",c={},h,p,d;e.effects.save(r,i),r.show(),h=e.effects.createWrapper(r).css({overflow:"hidden"}),p=r[0].tagName==="IMG"?h:r,d=p[f](),o&&(p.css(f,0),p.css(l,d/2)),c[f]=o?d:0,c[l]=o?0:d/2,p.animate(c,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){o||r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}})}})(jQuery);(function(e,t){e.effects.effect.drop=function(t,n){var r=e(this),i=["position","top","bottom","left","right","opacity","height","width"],s=e.effects.setMode(r,t.mode||"hide"),o=s==="show",u=t.direction||"left",a=u==="up"||u==="down"?"top":"left",f=u==="up"||u==="left"?"pos":"neg",l={opacity:o?1:0},c;e.effects.save(r,i),r.show(),e.effects.createWrapper(r),c=t.distance||r[a==="top"?"outerHeight":"outerWidth"](!0)/2,o&&r.css("opacity",0).css(a,f==="pos"?-c:c),l[a]=(o?f==="pos"?"+=":"-=":f==="pos"?"-=":"+=")+c,r.animate(l,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){s==="hide"&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}})}})(jQuery);(function(e,t){e.effects.effect.explode=function(t,n){function y(){c.push(this),c.length===r*i&&b()}function b(){s.css({visibility:"visible"}),e(c).remove(),u||s.hide(),n()}var r=t.pieces?Math.round(Math.sqrt(t.pieces)):3,i=r,s=e(this),o=e.effects.setMode(s,t.mode||"hide"),u=o==="show",a=s.show().css("visibility","hidden").offset(),f=Math.ceil(s.outerWidth()/i),l=Math.ceil(s.outerHeight()/r),c=[],h,p,d,v,m,g;for(h=0;h<r;h++){v=a.top+h*l,g=h-(r-1)/2;for(p=0;p<i;p++)d=a.left+p*f,m=p-(i-1)/2,s.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-p*f,top:-h*l}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:f,height:l,left:d+(u?m*f:0),top:v+(u?g*l:0),opacity:u?0:1}).animate({left:d+(u?0:m*f),top:v+(u?0:g*l),opacity:u?1:0},t.duration||500,t.easing,y)}}})(jQuery);(function(e,t){e.effects.effect.fade=function(t,n){var r=e(this),i=e.effects.setMode(r,t.mode||"toggle");r.animate({opacity:i},{queue:!1,duration:t.duration,easing:t.easing,complete:n})}})(jQuery);(function(e,t){e.effects.effect.fold=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"hide"),o=s==="show",u=s==="hide",a=t.size||15,f=/([0-9]+)%/.exec(a),l=!!t.horizFirst,c=o!==l,h=c?["width","height"]:["height","width"],p=t.duration/2,d,v,m={},g={};e.effects.save(r,i),r.show(),d=e.effects.createWrapper(r).css({overflow:"hidden"}),v=c?[d.width(),d.height()]:[d.height(),d.width()],f&&(a=parseInt(f[1],10)/100*v[u?0:1]),o&&d.css(l?{height:0,width:a}:{height:a,width:0}),m[h[0]]=o?v[0]:a,g[h[1]]=o?v[1]:0,d.animate(m,p,t.easing).animate(g,p,t.easing,function(){u&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()})}})(jQuery);(function(e,t){e.effects.effect.highlight=function(t,n){var r=e(this),i=["backgroundImage","backgroundColor","opacity"],s=e.effects.setMode(r,t.mode||"show"),o={backgroundColor:r.css("backgroundColor")};s==="hide"&&(o.opacity=0),e.effects.save(r,i),r.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){s==="hide"&&r.hide(),e.effects.restore(r,i),n()}})}})(jQuery);(function(e,t){e.effects.effect.pulsate=function(t,n){var r=e(this),i=e.effects.setMode(r,t.mode||"show"),s=i==="show",o=i==="hide",u=s||i==="hide",a=(t.times||5)*2+(u?1:0),f=t.duration/a,l=0,c=r.queue(),h=c.length,p;if(s||!r.is(":visible"))r.css("opacity",0).show(),l=1;for(p=1;p<a;p++)r.animate({opacity:l},f,t.easing),l=1-l;r.animate({opacity:l},f,t.easing),r.queue(function(){o&&r.hide(),n()}),h>1&&c.splice.apply(c,[1,0].concat(c.splice(h,a+1))),r.dequeue()}})(jQuery);(function(e,t){e.effects.effect.puff=function(t,n){var r=e(this),i=e.effects.setMode(r,t.mode||"hide"),s=i==="hide",o=parseInt(t.percent,10)||150,u=o/100,a={height:r.height(),width:r.width(),outerHeight:r.outerHeight(),outerWidth:r.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:i,complete:n,percent:s?o:100,from:s?a:{height:a.height*u,width:a.width*u,outerHeight:a.outerHeight*u,outerWidth:a.outerWidth*u}}),r.effect(t)},e.effects.effect.scale=function(t,n){var r=e(this),i=e.extend(!0,{},t),s=e.effects.setMode(r,t.mode||"effect"),o=parseInt(t.percent,10)||(parseInt(t.percent,10)===0?0:s==="hide"?0:100),u=t.direction||"both",a=t.origin,f={height:r.height(),width:r.width(),outerHeight:r.outerHeight(),outerWidth:r.outerWidth()},l={y:u!=="horizontal"?o/100:1,x:u!=="vertical"?o/100:1};i.effect="size",i.queue=!1,i.complete=n,s!=="effect"&&(i.origin=a||["middle","center"],i.restore=!0),i.from=t.from||(s==="show"?{height:0,width:0,outerHeight:0,outerWidth:0}:f),i.to={height:f.height*l.y,width:f.width*l.x,outerHeight:f.outerHeight*l.y,outerWidth:f.outerWidth*l.x},i.fade&&(s==="show"&&(i.from.opacity=0,i.to.opacity=1),s==="hide"&&(i.from.opacity=1,i.to.opacity=0)),r.effect(i)},e.effects.effect.size=function(t,n){var r,i,s,o=e(this),u=["position","top","bottom","left","right","width","height","overflow","opacity"],a=["position","top","bottom","left","right","overflow","opacity"],f=["width","height","overflow"],l=["fontSize"],c=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],h=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),d=t.restore||p!=="effect",v=t.scale||"both",m=t.origin||["middle","center"],g=o.css("position"),y=d?u:a,b={height:0,width:0,outerHeight:0,outerWidth:0};p==="show"&&o.show(),r={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},t.mode==="toggle"&&p==="show"?(o.from=t.to||b,o.to=t.from||r):(o.from=t.from||(p==="show"?b:r),o.to=t.to||(p==="hide"?b:r)),s={from:{y:o.from.height/r.height,x:o.from.width/r.width},to:{y:o.to.height/r.height,x:o.to.width/r.width}};if(v==="box"||v==="both")s.from.y!==s.to.y&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,s.from.y,o.from),o.to=e.effects.setTransition(o,c,s.to.y,o.to)),s.from.x!==s.to.x&&(y=y.concat(h),o.from=e.effects.setTransition(o,h,s.from.x,o.from),o.to=e.effects.setTransition(o,h,s.to.x,o.to));(v==="content"||v==="both")&&s.from.y!==s.to.y&&(y=y.concat(l).concat(f),o.from=e.effects.setTransition(o,l,s.from.y,o.from),o.to=e.effects.setTransition(o,l,s.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),m&&(i=e.effects.getBaseline(m,r),o.from.top=(r.outerHeight-o.outerHeight())*i.y,o.from.left=(r.outerWidth-o.outerWidth())*i.x,o.to.top=(r.outerHeight-o.to.outerHeight)*i.y,o.to.left=(r.outerWidth-o.to.outerWidth)*i.x),o.css(o.from);if(v==="content"||v==="both")c=c.concat(["marginTop","marginBottom"]).concat(l),h=h.concat(["marginLeft","marginRight"]),f=u.concat(c).concat(h),o.find("*[width]").each(function(){var n=e(this),r={height:n.height(),width:n.width(),outerHeight:n.outerHeight(),outerWidth:n.outerWidth()};d&&e.effects.save(n,f),n.from={height:r.height*s.from.y,width:r.width*s.from.x,outerHeight:r.outerHeight*s.from.y,outerWidth:r.outerWidth*s.from.x},n.to={height:r.height*s.to.y,width:r.width*s.to.x,outerHeight:r.height*s.to.y,outerWidth:r.width*s.to.x},s.from.y!==s.to.y&&(n.from=e.effects.setTransition(n,c,s.from.y,n.from),n.to=e.effects.setTransition(n,c,s.to.y,n.to)),s.from.x!==s.to.x&&(n.from=e.effects.setTransition(n,h,s.from.x,n.from),n.to=e.effects.setTransition(n,h,s.to.x,n.to)),n.css(n.from),n.animate(n.to,t.duration,t.easing,function(){d&&e.effects.restore(n,f)})});o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){o.to.opacity===0&&o.css("opacity",o.from.opacity),p==="hide"&&o.hide(),e.effects.restore(o,y),d||(g==="static"?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,n){var r=parseInt(n,10),i=e?o.to.left:o.to.top;return n==="auto"?i+"px":r+i+"px"})})),e.effects.removeWrapper(o),n()}})}})(jQuery);(function(e,t){e.effects.effect.shake=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"effect"),o=t.direction||"left",u=t.distance||20,a=t.times||3,f=a*2+1,l=Math.round(t.duration/f),c=o==="up"||o==="down"?"top":"left",h=o==="up"||o==="left",p={},d={},v={},m,g=r.queue(),y=g.length;e.effects.save(r,i),r.show(),e.effects.createWrapper(r),p[c]=(h?"-=":"+=")+u,d[c]=(h?"+=":"-=")+u*2,v[c]=(h?"-=":"+=")+u*2,r.animate(p,l,t.easing);for(m=1;m<a;m++)r.animate(d,l,t.easing).animate(v,l,t.easing);r.animate(d,l,t.easing).animate(p,l/2,t.easing).queue(function(){s==="hide"&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}),y>1&&g.splice.apply(g,[1,0].concat(g.splice(y,f+1))),r.dequeue()}})(jQuery);(function(e,t){e.effects.effect.slide=function(t,n){var r=e(this),i=["position","top","bottom","left","right","width","height"],s=e.effects.setMode(r,t.mode||"show"),o=s==="show",u=t.direction||"left",a=u==="up"||u==="down"?"top":"left",f=u==="up"||u==="left",l,c={};e.effects.save(r,i),r.show(),l=t.distance||r[a==="top"?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(r).css({overflow:"hidden"}),o&&r.css(a,f?isNaN(l)?"-"+l:-l:l),c[a]=(o?f?"+=":"-=":f?"-=":"+=")+l,r.animate(c,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){s==="hide"&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}})}})(jQuery);(function(e,t){e.effects.effect.transfer=function(t,n){var r=e(this),i=e(t.to),s=i.css("position")==="fixed",o=e("body"),u=s?o.scrollTop():0,a=s?o.scrollLeft():0,f=i.offset(),l={top:f.top-u,left:f.left-a,height:i.innerHeight(),width:i.innerWidth()},c=r.offset(),h=e("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(t.className).css({top:c.top-u,left:c.left-a,height:r.innerHeight(),width:r.innerWidth(),position:s?"fixed":"absolute"}).animate(l,t.duration,t.easing,function(){h.remove(),n()})}})(jQuery);(function(){function b(){return b}function c(b,d){var e=c.resolve(b),f=c.modules[e];if(!f)throw new Error('failed to require "'+b+'" from '+d);return f.exports||(f.exports={},f.call(f.exports,f,f.exports,c.relative(e),a)),f.exports}var a=this;c.modules={},c.resolve=function(a){var b=a,d=a+".js",e=a+"/index.js";return c.modules[d]&&d||c.modules[e]&&e||b},c.register=function(a,b){c.modules[a]=b},c.relative=function(a){return function(d){if("debug"==d)return b;if("."!=d.charAt(0))return c(d);var e=a.split("/"),f=d.split("/");e.pop();for(var g=0;g<f.length;g++){var h=f[g];".."==h?e.pop():"."!=h&&e.push(h)}return c(e.join("/"),a)}},c.register("color.js",function(a,b,c,d){var e=c("color-convert"),f=c("color-string");a.exports=function(a){return new g(a)};var g=function(a){this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],cmyk:[0,0,0,0],alpha:1};if(typeof a=="string"){var b=f.getRgba(a);b?this.setValues("rgb",b):(b=f.getHsla(a))&&this.setValues("hsl",b)}else if(typeof a=="object"){var b=a;b.r!==undefined||b.red!==undefined?this.setValues("rgb",b):b.l!==undefined||b.lightness!==undefined?this.setValues("hsl",b):b.v!==undefined||b.value!==undefined?this.setValues("hsv",b):(b.c!==undefined||b.cyan!==undefined)&&this.setValues("cmyk",b)}};g.prototype={rgb:function(a){return this.setSpace("rgb",arguments)},hsl:function(a){return this.setSpace("hsl",arguments)},hsv:function(a){return this.setSpace("hsv",arguments)},cmyk:function(a){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var a=this.values.rgb;return a.push(this.values.alpha),a},hslaArray:function(){var a=this.values.hsl;return a.push(this.values.alpha),a},alpha:function(a){return a===undefined?this.values.alpha:(this.setValues("alpha",a),this)},red:function(a){return this.setChannel("rgb",0,a)},green:function(a){return this.setChannel("rgb",1,a)},blue:function(a){return this.setChannel("rgb",2,a)},hue:function(a){return this.setChannel("hsl",0,a)},saturation:function(a){return this.setChannel("hsl",1,a)},lightness:function(a){return this.setChannel("hsl",2,a)},saturationv:function(a){return this.setChannel("hsv",1,a)},value:function(a){return this.setChannel("hsv",2,a)},cyan:function(a){return this.setChannel("cmyk",0,a)},magenta:function(a){return this.setChannel("cmyk",1,a)},yellow:function(a){return this.setChannel("cmyk",2,a)},black:function(a){return this.setChannel("cmyk",3,a)},hexString:function(){return f.hexString(this.values.rgb)},rgbString:function(){return f.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return f.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return f.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return f.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return f.hslaString(this.values.hsl,this.values.alpha)},keyword:function(){return f.keyword(this.values.rgb,this.values.alpha)},luminosity:function(){var a=this.values.rgb;for(var b=0;b<a.length;b++){var c=a[b]/255;a[b]=c<=.03928?c/12.92:Math.pow((c+.055)/1.055,2.4)}return.2126*a[0]+.7152*a[1]+.0722*a[2]},contrast:function(a){var b=this.luminosity(),c=a.luminosity();return b>c?(b+.05)/(c+.05):(c+.05)/(b+.05)},dark:function(){var a=this.values.rgb,b=(a[0]*299+a[1]*587+a[2]*114)/1e3;return b<128},light:function(){return!this.dark()},negate:function(){var a=[];for(var b=0;b<3;b++)a[b]=255-this.values.rgb[b];return this.setValues("rgb",a),this},lighten:function(a){return this.values.hsl[2]+=this.values.hsl[2]*a,this.setValues("hsl",this.values.hsl),this},darken:function(a){return this.values.hsl[2]-=this.values.hsl[2]*a,this.setValues("hsl",this.values.hsl),this},saturate:function(a){return this.values.hsl[1]+=this.values.hsl[1]*a,this.setValues("hsl",this.values.hsl),this},desaturate:function(a){return this.values.hsl[1]-=this.values.hsl[1]*a,this.setValues("hsl",this.values.hsl),this},greyscale:function(){var a=this.values.rgb,b=a[0]*.3+a[1]*.59+a[2]*.11;return this.setValues("rgb",[b,b,b]),this},clearer:function(a){return this.setValues("alpha",this.values.alpha-this.values.alpha*a),this},opaquer:function(a){return this.setValues("alpha",this.values.alpha+this.values.alpha*a),this},rotate:function(a){var b=this.values.hsl[0];return b=(b+a)%360,b=b<0?360+b:b,this.values.hsl[0]=b,this.setValues("hsl",this.values.hsl),this},mix:function(a,b){b=1-(b||.5);var c=b*2-1,d=this.alpha()-a.alpha(),e=((c*d==-1?c:(c+d)/(1+c*d))+1)/2,f=1-e,g=this.rgbArray(),h=a.rgbArray();for(var i=0;i<g.length;i++)g[i]=g[i]*e+h[i]*f;this.setValues("rgb",g);var j=this.alpha()*b+a.alpha()*(1-b);return this.setValues("alpha",j),this},toJSON:function(){return this.rgb()}},g.prototype.getValues=function(a){var b={};for(var c=0;c<a.length;c++)b[a[c]]=this.values[a][c];return this.values.alpha!=1&&(b.a=this.values.alpha),b},g.prototype.setValues=function(a,b){var c={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],cmyk:["cyan","magenta","yellow","black"]},d={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],cmyk:[100,100,100,100]},f=1;if(a=="alpha")f=b;else if(b.length)this.values[a]=b.slice(0,a.length),f=b[a.length];else if(b[a[0]]!==undefined){for(var g=0;g<a.length;g++)this.values[a][g]=b[a[g]];f=b.a}else if(b[c[a][0]]!==undefined){var h=c[a];for(var g=0;g<a.length;g++)this.values[a][g]=b[h[g]];f=b.alpha}this.values.alpha=Math.max(0,Math.min(1,f||this.values.alpha));if(a=="alpha")return;for(var i in c){i!=a&&(this.values[i]=e[a][i](this.values[a]));for(var g=0;g<i.length;g++){var j=Math.max(0,Math.min(d[i][g],this.values[i][g]));this.values[i][g]=Math.round(j)}}return!0},g.prototype.setSpace=function(a,b){var c=b[0];return c===undefined?this.getValues(a):(typeof c=="number"&&(c=Array.prototype.slice.call(b)),this.setValues(a,c),this)},g.prototype.setChannel=function(a,b,c){return c===undefined?this.values[a][b]:(this.values[a][b]=c,this.setValues(a,this.values[a]),this)}}),c.register("color-string",function(a,b,c,d){function f(a){if(!a)return;var b=/^#([a-fA-F0-9]{3})$/,c=/^#([a-fA-F0-9]{6})$/,d=/^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d\.]+)\s*)?\)$/,f=/^rgba?\(\s*([\d\.]+)\%\s*,\s*([\d\.]+)\%\s*,\s*([\d\.]+)\%\s*(?:,\s*([\d\.]+)\s*)?\)$/,g=/(\D+)/,h=[0,0,0],i=1,j=a.match(b);if(j){j=j[1];for(var k=0;k<h.length;k++)h[k]=parseInt(j[k]+j[k],16)}else if(j=a.match(c)){j=j[1];for(var k=0;k<h.length;k++)h[k]=parseInt(j.slice(k*2,k*2+2),16)}else if(j=a.match(d)){for(var k=0;k<h.length;k++)h[k]=parseInt(j[k+1]);i=parseFloat(j[4])}else if(j=a.match(f)){for(var k=0;k<h.length;k++)h[k]=Math.round(parseFloat(j[k+1])*2.55);i=parseFloat(j[4])}else if(j=a.match(g)){if(j[1]=="transparent")return[0,0,0,0];h=e.keyword2rgb(j[1]);if(!h)return}for(var k=0;k<h.length;k++)h[k]=s(h[k],0,255);return i?i=s(i,0,1):i=1,h.push(i),h}function g(a){if(!a)return;var b=/^hsla?\(\s*(\d+)\s*,\s*([\d\.]+)%\s*,\s*([\d\.]+)%\s*(?:,\s*([\d\.]+)\s*)?\)/,c=a.match(b);if(c){var d=s(parseInt(c[1]),0,360),e=s(parseFloat(c[2]),0,100),f=s(parseFloat(c[3]),0,100),g=s(parseFloat(c[4])||1,0,1);return[d,e,f,g]}}function h(a){var b=f(a);return b&&b.slice(0,3)}function i(a){var b=g(a);return b&&b.slice(0,3)}function j(a){var b=f(a);if(b)return b[3];if(b=g(a))return b[3]}function k(a){return"#"+t(a[0])+t(a[1])+t(a[2])}function l(a,b){return b<1||a[3]&&a[3]<1?m(a,b):"rgb("+a[0]+", "+a[1]+", "+a[2]+")"}function m(a,b){return"rgba("+a[0]+", "+a[1]+", "+a[2]+", "+(b||a[3]||1)+")"}function n(a,b){if(b<1||a[3]&&a[3]<1)return o(a,b);var c=Math.round(a[0]/255*100),d=Math.round(a[1]/255*100),e=Math.round(a[2]/255*100);return"rgb("+c+"%, "+d+"%, "+e+"%)"}function o(a,b){var c=Math.round(a[0]/255*100),d=Math.round(a[1]/255*100),e=Math.round(a[2]/255*100);return"rgba("+c+"%, "+d+"%, "+e+"%, "+(b||a[3]||1)+")"}function p(a,b){return b<1||a[3]&&a[3]<1?q(a,b):"hsl("+a[0]+", "+a[1]+"%, "+a[2]+"%)"}function q(a,b){return"hsla("+a[0]+", "+a[1]+"%, "+a[2]+"%, "+(b||a[3]||1)+")"}function r(a){return e.rgb2keyword(a.slice(0,3))}function s(a,b,c){return Math.min(Math.max(b,a),c)}function t(a){var b=a.toString(16).toUpperCase();return b.length<2?"0"+b:b}var e=c("color-convert");a.exports={getRgba:f,getHsla:g,getRgb:h,getHsl:i,getAlpha:j,hexString:k,rgbString:l,rgbaString:m,percentString:n,percentaString:o,hslString:p,hslaString:q,keyword:r}}),c.register("color-convert",function(a,b,c,d){function l(a){for(var b=0;b<a.length;b++)a[b]=Math.round(a[b])}var e=c("conversions"),f=function(){return new k};for(var g in e){f[g+"Raw"]=function(a){return function(b){return typeof b=="number"&&(b=Array.prototype.slice.call(arguments)),e[a](b)}}(g);var h=/(\w+)2(\w+)/.exec(g),i=h[1],j=h[2];f[i]=f[i]||{},f[i][j]=f[g]=function(a){return function(b){typeof b=="number"&&(b=Array.prototype.slice.call(arguments));var c=e[a](b);return typeof c=="string"||c===undefined?c:(l(c),c)}}(g)}var k=function(){this.space="rgb",this.convs={rgb:[0,0,0]}};k.prototype.routeSpace=function(a,b){var c=b[0];return c===undefined?this.getValues(a):(typeof c=="number"&&(c=Array.prototype.slice.call(b)),this.setValues(a,c))},k.prototype.setValues=function(a,b){return this.space=a,this.convs={},this.convs[a]=b,this},k.prototype.getValues=function(a){var b=this.convs[a];if(!b){var c=this.space,d=this.convs[c];b=f[c][a](d),this.convs[a]=b}else l(b);return b},["rgb","hsl","hsv","cmyk","keyword"].forEach(function(a){k.prototype[a]=function(b){return this.routeSpace(a,arguments)}}),a.exports=f}),c.register("conversions",function(a,b,c,d){function e(a){var b=a[0]/255,c=a[1]/255,d=a[2]/255,e=Math.min(b,c,d),f=Math.max(b,c,d),g=f-e,h,i,j;return f==e?h=0:b==f?h=(c-d)/g:c==f?h=2+(d-b)/g:d==f&&(h=4+(b-c)/g),h=Math.min(h*60,360),h<0&&(h+=360),j=(e+f)/2,f==e?i=0:j<=.5?i=g/(f+e):i=g/(2-f-e),[h,i*100,j*100]}function f(a){var b=a[0],c=a[1],d=a[2],e=Math.min(b,c,d),f=Math.max(b,c,d),g=f-e,h,i,j;return f==0?i=0:i=g/f*1e3/10,f==e?h=0:b==f?h=(c-d)/g:c==f?h=2+(d-b)/g:d==f&&(h=4+(b-c)/g),h=Math.min(h*60,360),h<0&&(h+=360),j=f/255*1e3/10,[h,i,j]}function g(a){var b=a[0]/255,c=a[1]/255,d=a[2]/255,e,f,g,h;return h=Math.min(1-b,1-c,1-d),e=(1-b-h)/(1-h),f=(1-c-h)/(1-h),g=(1-d-h)/(1-h),[e*100,f*100,g*100,h*100]}function h(a){return G[JSON.stringify(a)]}function i(a){var b=a[0]/255,c=a[1]/255,d=a[2]/255;b=b>.04045?Math.pow((b+.055)/1.055,2.4):b/12.92,c=c>.04045?Math.pow((c+.055)/1.055,2.4):c/12.92,d=d>.04045?Math.pow((d+.055)/1.055,2.4):d/12.92;var e=b*.4124+c*.3576+d*.1805,f=b*.2126+c*.7152+d*.0722,g=b*.0193+c*.1192+d*.9505;return[e*100,f*100,g*100]}function j(a){var b=i(a),c=b[0],d=b[1],e=b[2],f,g,h;return c/=95.047,d/=100,e/=108.883,c=c>.008856?Math.pow(c,1/3):7.787*c+16/116,d=d>.008856?Math.pow(d,1/3):7.787*d+16/116,e=e>.008856?Math.pow(e,1/3):7.787*e+16/116,f=116*d-16,g=500*(c-d),h=200*(d-e),[f,g,h]}function k(a){var b=a[0]/360,c=a[1]/100,d=a[2]/100,e,f,g,h,i;if(c==0)return i=d*255,[i,i,i];d<.5?f=d*(1+c):f=d+c-d*c,e=2*d-f,h=[0,0,0];for(var j=0;j<3;j++)g=b+1/3*-(j-1),g<0&&g++,g>1&&g--,6*g<1?i=e+(f-e)*6*g:2*g<1?i=f:3*g<2?i=e+(f-e)*(2/3-g)*6:i=e,h[j]=i*255;return h}function l(a){var b=a[0],c=a[1]/100,d=a[2]/100,e,f;return d*=2,c*=d<=1?d:2-d,f=(d+c)/2,e=2*c/(d+c),[b,e*100,f*100]}function m(a){return g(k(a))}function n(a){return h(k(a))}function o(a){var b=a[0]/60,c=a[1]/100,d=a[2]/100,e=Math.floor(b)%6,f=b-Math.floor(b),g=255*d*(1-c),h=255*d*(1-c*f),i=255*d*(1-c*(1-f)),d=255*d;switch(e){case 0:return[d,i,g];case 1:return[h,d,g];case 2:return[g,d,i];case 3:return[g,h,d];case 4:return[i,g,d];case 5:return[d,g,h]}}function p(a){var b=a[0],c=a[1]/100,d=a[2]/100,e,f;return f=(2-c)*d,e=c*d,e/=f<=1?f:2-f,f/=2,[b,e*100,f*100]}function q(a){return g(o(a))}function r(a){return h(o(a))}function s(a){var b=a[0]/100,c=a[1]/100,d=a[2]/100,e=a[3]/100,f,g,h;return f=1-Math.min(1,b*(1-e)+e),g=1-Math.min(1,c*(1-e)+e),h=1-Math.min(1,d*(1-e)+e),[f*255,g*255,h*255]}function t(a){return e(s(a))}function u(a){return f(s(a))}function v(a){return h(s(a))}function w(a){var b=a[0]/100,c=a[1]/100,d=a[2]/100,e,f,g;return e=b*3.2406+c*-1.5372+d*-0.4986,f=b*-0.9689+c*1.8758+d*.0415,g=b*.0557+c*-0.204+d*1.057,e=e>.0031308?1.055*Math.pow(e,1/2.4)-.055:e*=12.92,f=f>.0031308?1.055*Math.pow(f,1/2.4)-.055:f*=12.92,g=g>.0031308?1.055*Math.pow(g,1/2.4)-.055:g*=12.92,e=e<0?0:e,f=f<0?0:f,g=g<0?0:g,[e*255,f*255,g*255]}function x(a){var b=a[0],c=a[1],d=a[2],e,f,g;return b/=95.047,c/=100,d/=108.883,b=b>.008856?Math.pow(b,1/3):7.787*b+16/116,c=c>.008856?Math.pow(c,1/3):7.787*c+16/116,d=d>.008856?Math.pow(d,1/3):7.787*d+16/116,e=116*c-16,f=500*(b-c),g=200*(c-d),[e,f,g]}function y(a){var b=a[0],c=a[1],d=a[2],e,f,g,h;return b<=8?(f=b*100/903.3,h=7.787*(f/100)+16/116):(f=100*Math.pow((b+16)/116,3),h=Math.pow(f/100,1/3)),e=e/95.047<=.008856?e=95.047*(c/500+h-16/116)/7.787:95.047*Math.pow(c/500+h,3),g=g/108.883<=.008859?g=108.883*(h-d/200-16/116)/7.787:108.883*Math.pow(h-d/200,3),[e,f,g]}function z(a){return F[a]}function A(a){return e(z(a))}function B(a){return f(z(a))}function C(a){return g(z(a))}function D(a){return j(z(a))}function E(a){return i(z(a))}a.exports={rgb2hsl:e,rgb2hsv:f,rgb2cmyk:g,rgb2keyword:h,rgb2xyz:i,rgb2lab:j,hsl2rgb:k,hsl2hsv:l,hsl2cmyk:m,hsl2keyword:n,hsv2rgb:o,hsv2hsl:p,hsv2cmyk:q,hsv2keyword:r,cmyk2rgb:s,cmyk2hsl:t,cmyk2hsv:u,cmyk2keyword:v,keyword2rgb:z,keyword2hsl:A,keyword2hsv:B,keyword2cmyk:C,keyword2lab:D,keyword2xyz:E,xyz2rgb:w,xyz2lab:x,lab2xyz:y};var F={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},G={};for(var H in F)G[JSON.stringify(F[H])]=H}),Color=c("color.js")})();/** - * Really Simple Color Picker in jQuery - * - * Licensed under the MIT (MIT-LICENSE.txt) licenses. - * - * Copyright (c) 2008-2012 - * Lakshan Perera (www.laktek.com) & Daniel Lacy (daniellacy.com) - * - * 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. - */(function(a){var b,c,d=0,e={control:a('<div class="colorPicker-picker"> </div>'),palette:a('<div id="colorPicker_palette" class="colorPicker-palette" />'),swatch:a('<div class="colorPicker-swatch"> </div>'),hexLabel:a('<label for="colorPicker_hex">Hex</label>'),hexField:a('<input type="text" id="colorPicker_hex" />')},f="transparent",g;a.fn.colorPicker=function(b){return this.each(function(){var c=a(this),g=a.extend({},a.fn.colorPicker.defaults,b),h=a.fn.colorPicker.toHex(c.val().length>0?c.val():g.pickerDefault),i=e.control.clone(),j=e.palette.clone().attr("id","colorPicker_palette-"+d),k=e.hexLabel.clone(),l=e.hexField.clone(),m=j[0].id,n;a.each(g.colors,function(b){n=e.swatch.clone(),g.colors[b]===f?(n.addClass(f).text("X"),a.fn.colorPicker.bindPalette(l,n,f)):(n.css("background-color","#"+this),a.fn.colorPicker.bindPalette(l,n)),n.appendTo(j)}),k.attr("for","colorPicker_hex-"+d),l.attr({id:"colorPicker_hex-"+d,value:h}),l.bind("keydown",function(b){if(b.keyCode===13){var d=a.fn.colorPicker.toHex(a(this).val());a.fn.colorPicker.changeColor(d?d:c.val())}b.keyCode===27&&a.fn.colorPicker.hidePalette()}),l.bind("keyup",function(b){var d=a.fn.colorPicker.toHex(a(b.target).val());a.fn.colorPicker.previewColor(d?d:c.val())}),a('<div class="colorPicker_hexWrap" />').append(k).appendTo(j),j.find(".colorPicker_hexWrap").append(l),a("body").append(j),j.hide(),i.css("background-color",h),i.bind("click",function(){c.is(":not(:disabled)")&&a.fn.colorPicker.togglePalette(a("#"+m),a(this))}),b&&b.onColorChange?i.data("onColorChange",b.onColorChange):i.data("onColorChange",function(){}),c.after(i),c.bind("change",function(){c.next(".colorPicker-picker").css("background-color",a.fn.colorPicker.toHex(a(this).val()))}),c.val(h).hide(),d++})},a.extend(!0,a.fn.colorPicker,{toHex:function(a){if(a.match(/[0-9A-F]{6}|[0-9A-F]{3}$/i))return a.charAt(0)==="#"?a:"#"+a;if(!a.match(/^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/))return!1;var b=[parseInt(RegExp.$1,10),parseInt(RegExp.$2,10),parseInt(RegExp.$3,10)],c=function(a){if(a.length<2)for(var b=0,c=2-a.length;b<c;b++)a="0"+a;return a};if(b.length===3){var d=c(b[0].toString(16)),e=c(b[1].toString(16)),f=c(b[2].toString(16));return"#"+d+e+f}},checkMouse:function(d,e){var f=c,g=a(d.target).parents("#"+f.attr("id")).length;if(d.target===a(f)[0]||d.target===b[0]||g>0)return;a.fn.colorPicker.hidePalette()},hidePalette:function(){a(document).unbind("mousedown",a.fn.colorPicker.checkMouse),a(".colorPicker-palette").hide()},showPalette:function(c){var d=b.prev("input").val();c.css({top:b.offset().top+b.outerHeight(),left:b.offset().left}),a("#color_value").val(d),c.show(),a(document).bind("mousedown",a.fn.colorPicker.checkMouse)},togglePalette:function(d,e){e&&(b=e),c=d,c.is(":visible")?a.fn.colorPicker.hidePalette():a.fn.colorPicker.showPalette(d)},changeColor:function(c){b.css("background-color",c),b.prev("input").val(c).change(),a.fn.colorPicker.hidePalette(),b.data("onColorChange").call(b,a(b).prev("input").attr("id"),c)},previewColor:function(a){b.css("background-color",a)},bindPalette:function(c,d,e){e=e?e:a.fn.colorPicker.toHex(d.css("background-color")),d.bind({click:function(b){g=e,a.fn.colorPicker.changeColor(e)},mouseover:function(b){g=c.val(),a(this).css("border-color","#598FEF"),c.val(e),a.fn.colorPicker.previewColor(e)},mouseout:function(d){a(this).css("border-color","#000"),c.val(b.css("background-color")),c.val(g),a.fn.colorPicker.previewColor(g)}})}}),a.fn.colorPicker.defaults={pickerDefault:"FFFFFF",colors:["000000","993300","333300","000080","333399","333333","800000","FF6600","808000","008000","008080","0000FF","666699","808080","FF0000","FF9900","99CC00","339966","33CCCC","3366FF","800080","999999","FF00FF","FFCC00","FFFF00","00FF00","00FFFF","00CCFF","993366","C0C0C0","FF99CC","FFCC99","FFFF99","CCFFFF","99CCFF","FFFFFF"],addColors:[]}})(jQuery);/*! Hammer.JS - v1.1.3 - 2014-05-20 - * http://eightmedia.github.io/hammer.js - * - * Copyright (c) 2014 Jorik Tangelder <j.tangelder@gmail.com>; - * Licensed under the MIT license */ - - -!function(a,b){"use strict";function c(){d.READY||(s.determineEventTypes(),r.each(d.gestures,function(a){u.register(a)}),s.onTouch(d.DOCUMENT,n,u.detect),s.onTouch(d.DOCUMENT,o,u.detect),d.READY=!0)}var d=function v(a,b){return new v.Instance(a,b||{})};d.VERSION="1.1.3",d.defaults={behavior:{userSelect:"none",touchAction:"pan-y",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},d.DOCUMENT=document,d.HAS_POINTEREVENTS=navigator.pointerEnabled||navigator.msPointerEnabled,d.HAS_TOUCHEVENTS="ontouchstart"in a,d.IS_MOBILE=/mobile|tablet|ip(ad|hone|od)|android|silk/i.test(navigator.userAgent),d.NO_MOUSEEVENTS=d.HAS_TOUCHEVENTS&&d.IS_MOBILE||d.HAS_POINTEREVENTS,d.CALCULATE_INTERVAL=25;var e={},f=d.DIRECTION_DOWN="down",g=d.DIRECTION_LEFT="left",h=d.DIRECTION_UP="up",i=d.DIRECTION_RIGHT="right",j=d.POINTER_MOUSE="mouse",k=d.POINTER_TOUCH="touch",l=d.POINTER_PEN="pen",m=d.EVENT_START="start",n=d.EVENT_MOVE="move",o=d.EVENT_END="end",p=d.EVENT_RELEASE="release",q=d.EVENT_TOUCH="touch";d.READY=!1,d.plugins=d.plugins||{},d.gestures=d.gestures||{};var r=d.utils={extend:function(a,c,d){for(var e in c)!c.hasOwnProperty(e)||a[e]!==b&&d||(a[e]=c[e]);return a},on:function(a,b,c){a.addEventListener(b,c,!1)},off:function(a,b,c){a.removeEventListener(b,c,!1)},each:function(a,c,d){var e,f;if("forEach"in a)a.forEach(c,d);else if(a.length!==b){for(e=0,f=a.length;f>e;e++)if(c.call(d,a[e],e,a)===!1)return}else for(e in a)if(a.hasOwnProperty(e)&&c.call(d,a[e],e,a)===!1)return},inStr:function(a,b){return a.indexOf(b)>-1},inArray:function(a,b){if(a.indexOf){var c=a.indexOf(b);return-1===c?!1:c}for(var d=0,e=a.length;e>d;d++)if(a[d]===b)return d;return!1},toArray:function(a){return Array.prototype.slice.call(a,0)},hasParent:function(a,b){for(;a;){if(a==b)return!0;a=a.parentNode}return!1},getCenter:function(a){var b=[],c=[],d=[],e=[],f=Math.min,g=Math.max;return 1===a.length?{pageX:a[0].pageX,pageY:a[0].pageY,clientX:a[0].clientX,clientY:a[0].clientY}:(r.each(a,function(a){b.push(a.pageX),c.push(a.pageY),d.push(a.clientX),e.push(a.clientY)}),{pageX:(f.apply(Math,b)+g.apply(Math,b))/2,pageY:(f.apply(Math,c)+g.apply(Math,c))/2,clientX:(f.apply(Math,d)+g.apply(Math,d))/2,clientY:(f.apply(Math,e)+g.apply(Math,e))/2})},getVelocity:function(a,b,c){return{x:Math.abs(b/a)||0,y:Math.abs(c/a)||0}},getAngle:function(a,b){var c=b.clientX-a.clientX,d=b.clientY-a.clientY;return 180*Math.atan2(d,c)/Math.PI},getDirection:function(a,b){var c=Math.abs(a.clientX-b.clientX),d=Math.abs(a.clientY-b.clientY);return c>=d?a.clientX-b.clientX>0?g:i:a.clientY-b.clientY>0?h:f},getDistance:function(a,b){var c=b.clientX-a.clientX,d=b.clientY-a.clientY;return Math.sqrt(c*c+d*d)},getScale:function(a,b){return a.length>=2&&b.length>=2?this.getDistance(b[0],b[1])/this.getDistance(a[0],a[1]):1},getRotation:function(a,b){return a.length>=2&&b.length>=2?this.getAngle(b[1],b[0])-this.getAngle(a[1],a[0]):0},isVertical:function(a){return a==h||a==f},setPrefixedCss:function(a,b,c,d){var e=["","Webkit","Moz","O","ms"];b=r.toCamelCase(b);for(var f=0;f<e.length;f++){var g=b;if(e[f]&&(g=e[f]+g.slice(0,1).toUpperCase()+g.slice(1)),g in a.style){a.style[g]=(null==d||d)&&c||"";break}}},toggleBehavior:function(a,b,c){if(b&&a&&a.style){r.each(b,function(b,d){r.setPrefixedCss(a,d,b,c)});var d=c&&function(){return!1};"none"==b.userSelect&&(a.onselectstart=d),"none"==b.userDrag&&(a.ondragstart=d)}},toCamelCase:function(a){return a.replace(/[_-]([a-z])/g,function(a){return a[1].toUpperCase()})}},s=d.event={preventMouseEvents:!1,started:!1,shouldDetect:!1,on:function(a,b,c,d){var e=b.split(" ");r.each(e,function(b){r.on(a,b,c),d&&d(b)})},off:function(a,b,c,d){var e=b.split(" ");r.each(e,function(b){r.off(a,b,c),d&&d(b)})},onTouch:function(a,b,c){var f=this,g=function(e){var g,h=e.type.toLowerCase(),i=d.HAS_POINTEREVENTS,j=r.inStr(h,"mouse");j&&f.preventMouseEvents||(j&&b==m&&0===e.button?(f.preventMouseEvents=!1,f.shouldDetect=!0):i&&b==m?f.shouldDetect=1===e.buttons||t.matchType(k,e):j||b!=m||(f.preventMouseEvents=!0,f.shouldDetect=!0),i&&b!=o&&t.updatePointer(b,e),f.shouldDetect&&(g=f.doDetect.call(f,e,b,a,c)),g==o&&(f.preventMouseEvents=!1,f.shouldDetect=!1,t.reset()),i&&b==o&&t.updatePointer(b,e))};return this.on(a,e[b],g),g},doDetect:function(a,b,c,d){var e=this.getTouchList(a,b),f=e.length,g=b,h=e.trigger,i=f;b==m?h=q:b==o&&(h=p,i=e.length-(a.changedTouches?a.changedTouches.length:1)),i>0&&this.started&&(g=n),this.started=!0;var j=this.collectEventData(c,g,e,a);return b!=o&&d.call(u,j),h&&(j.changedLength=i,j.eventType=h,d.call(u,j),j.eventType=g,delete j.changedLength),g==o&&(d.call(u,j),this.started=!1),g},determineEventTypes:function(){var b;return b=d.HAS_POINTEREVENTS?a.PointerEvent?["pointerdown","pointermove","pointerup pointercancel lostpointercapture"]:["MSPointerDown","MSPointerMove","MSPointerUp MSPointerCancel MSLostPointerCapture"]:d.NO_MOUSEEVENTS?["touchstart","touchmove","touchend touchcancel"]:["touchstart mousedown","touchmove mousemove","touchend touchcancel mouseup"],e[m]=b[0],e[n]=b[1],e[o]=b[2],e},getTouchList:function(a,b){if(d.HAS_POINTEREVENTS)return t.getTouchList();if(a.touches){if(b==n)return a.touches;var c=[],e=[].concat(r.toArray(a.touches),r.toArray(a.changedTouches)),f=[];return r.each(e,function(a){r.inArray(c,a.identifier)===!1&&f.push(a),c.push(a.identifier)}),f}return a.identifier=1,[a]},collectEventData:function(a,b,c,d){var e=k;return r.inStr(d.type,"mouse")||t.matchType(j,d)?e=j:t.matchType(l,d)&&(e=l),{center:r.getCenter(c),timeStamp:Date.now(),target:d.target,touches:c,eventType:b,pointerType:e,srcEvent:d,preventDefault:function(){var a=this.srcEvent;a.preventManipulation&&a.preventManipulation(),a.preventDefault&&a.preventDefault()},stopPropagation:function(){this.srcEvent.stopPropagation()},stopDetect:function(){return u.stopDetect()}}}},t=d.PointerEvent={pointers:{},getTouchList:function(){var a=[];return r.each(this.pointers,function(b){a.push(b)}),a},updatePointer:function(a,b){a==o||a!=o&&1!==b.buttons?delete this.pointers[b.pointerId]:(b.identifier=b.pointerId,this.pointers[b.pointerId]=b)},matchType:function(a,b){if(!b.pointerType)return!1;var c=b.pointerType,d={};return d[j]=c===(b.MSPOINTER_TYPE_MOUSE||j),d[k]=c===(b.MSPOINTER_TYPE_TOUCH||k),d[l]=c===(b.MSPOINTER_TYPE_PEN||l),d[a]},reset:function(){this.pointers={}}},u=d.detection={gestures:[],current:null,previous:null,stopped:!1,startDetect:function(a,b){this.current||(this.stopped=!1,this.current={inst:a,startEvent:r.extend({},b),lastEvent:!1,lastCalcEvent:!1,futureCalcEvent:!1,lastCalcData:{},name:""},this.detect(b))},detect:function(a){if(this.current&&!this.stopped){a=this.extendEventData(a);var b=this.current.inst,c=b.options;return r.each(this.gestures,function(d){!this.stopped&&b.enabled&&c[d.name]&&d.handler.call(d,a,b)},this),this.current&&(this.current.lastEvent=a),a.eventType==o&&this.stopDetect(),a}},stopDetect:function(){this.previous=r.extend({},this.current),this.current=null,this.stopped=!0},getCalculatedData:function(a,b,c,e,f){var g=this.current,h=!1,i=g.lastCalcEvent,j=g.lastCalcData;i&&a.timeStamp-i.timeStamp>d.CALCULATE_INTERVAL&&(b=i.center,c=a.timeStamp-i.timeStamp,e=a.center.clientX-i.center.clientX,f=a.center.clientY-i.center.clientY,h=!0),(a.eventType==q||a.eventType==p)&&(g.futureCalcEvent=a),(!g.lastCalcEvent||h)&&(j.velocity=r.getVelocity(c,e,f),j.angle=r.getAngle(b,a.center),j.direction=r.getDirection(b,a.center),g.lastCalcEvent=g.futureCalcEvent||a,g.futureCalcEvent=a),a.velocityX=j.velocity.x,a.velocityY=j.velocity.y,a.interimAngle=j.angle,a.interimDirection=j.direction},extendEventData:function(a){var b=this.current,c=b.startEvent,d=b.lastEvent||c;(a.eventType==q||a.eventType==p)&&(c.touches=[],r.each(a.touches,function(a){c.touches.push({clientX:a.clientX,clientY:a.clientY})}));var e=a.timeStamp-c.timeStamp,f=a.center.clientX-c.center.clientX,g=a.center.clientY-c.center.clientY;return this.getCalculatedData(a,d.center,e,f,g),r.extend(a,{startEvent:c,deltaTime:e,deltaX:f,deltaY:g,distance:r.getDistance(c.center,a.center),angle:r.getAngle(c.center,a.center),direction:r.getDirection(c.center,a.center),scale:r.getScale(c.touches,a.touches),rotation:r.getRotation(c.touches,a.touches)}),a},register:function(a){var c=a.defaults||{};return c[a.name]===b&&(c[a.name]=!0),r.extend(d.defaults,c,!0),a.index=a.index||1e3,this.gestures.push(a),this.gestures.sort(function(a,b){return a.index<b.index?-1:a.index>b.index?1:0}),this.gestures}};d.Instance=function(a,b){var e=this;c(),this.element=a,this.enabled=!0,r.each(b,function(a,c){delete b[c],b[r.toCamelCase(c)]=a}),this.options=r.extend(r.extend({},d.defaults),b||{}),this.options.behavior&&r.toggleBehavior(this.element,this.options.behavior,!0),this.eventStartHandler=s.onTouch(a,m,function(a){e.enabled&&a.eventType==m?u.startDetect(e,a):a.eventType==q&&u.detect(a)}),this.eventHandlers=[]},d.Instance.prototype={on:function(a,b){var c=this;return s.on(c.element,a,b,function(a){c.eventHandlers.push({gesture:a,handler:b})}),c},off:function(a,b){var c=this;return s.off(c.element,a,b,function(a){var d=r.inArray({gesture:a,handler:b});d!==!1&&c.eventHandlers.splice(d,1)}),c},trigger:function(a,b){b||(b={});var c=d.DOCUMENT.createEvent("Event");c.initEvent(a,!0,!0),c.gesture=b;var e=this.element;return r.hasParent(b.target,e)&&(e=b.target),e.dispatchEvent(c),this},enable:function(a){return this.enabled=a,this},dispose:function(){var a,b;for(r.toggleBehavior(this.element,this.options.behavior,!1),a=-1;b=this.eventHandlers[++a];)r.off(this.element,b.gesture,b.handler);return this.eventHandlers=[],s.off(this.element,e[m],this.eventStartHandler),null}},function(a){function b(b,d){var e=u.current;if(!(d.options.dragMaxTouches>0&&b.touches.length>d.options.dragMaxTouches))switch(b.eventType){case m:c=!1;break;case n:if(b.distance<d.options.dragMinDistance&&e.name!=a)return;var j=e.startEvent.center;if(e.name!=a&&(e.name=a,d.options.dragDistanceCorrection&&b.distance>0)){var k=Math.abs(d.options.dragMinDistance/b.distance);j.pageX+=b.deltaX*k,j.pageY+=b.deltaY*k,j.clientX+=b.deltaX*k,j.clientY+=b.deltaY*k,b=u.extendEventData(b)}(e.lastEvent.dragLockToAxis||d.options.dragLockToAxis&&d.options.dragLockMinDistance<=b.distance)&&(b.dragLockToAxis=!0);var l=e.lastEvent.direction;b.dragLockToAxis&&l!==b.direction&&(b.direction=r.isVertical(l)?b.deltaY<0?h:f:b.deltaX<0?g:i),c||(d.trigger(a+"start",b),c=!0),d.trigger(a,b),d.trigger(a+b.direction,b);var q=r.isVertical(b.direction);(d.options.dragBlockVertical&&q||d.options.dragBlockHorizontal&&!q)&&b.preventDefault();break;case p:c&&b.changedLength<=d.options.dragMaxTouches&&(d.trigger(a+"end",b),c=!1);break;case o:c=!1}}var c=!1;d.gestures.Drag={name:a,index:50,handler:b,defaults:{dragMinDistance:10,dragDistanceCorrection:!0,dragMaxTouches:1,dragBlockHorizontal:!1,dragBlockVertical:!1,dragLockToAxis:!1,dragLockMinDistance:25}}}("drag"),d.gestures.Gesture={name:"gesture",index:1337,handler:function(a,b){b.trigger(this.name,a)}},function(a){function b(b,d){var e=d.options,f=u.current;switch(b.eventType){case m:clearTimeout(c),f.name=a,c=setTimeout(function(){f&&f.name==a&&d.trigger(a,b)},e.holdTimeout);break;case n:b.distance>e.holdThreshold&&clearTimeout(c);break;case p:clearTimeout(c)}}var c;d.gestures.Hold={name:a,index:10,defaults:{holdTimeout:500,holdThreshold:2},handler:b}}("hold"),d.gestures.Release={name:"release",index:1/0,handler:function(a,b){a.eventType==p&&b.trigger(this.name,a)}},d.gestures.Swipe={name:"swipe",index:40,defaults:{swipeMinTouches:1,swipeMaxTouches:1,swipeVelocityX:.6,swipeVelocityY:.6},handler:function(a,b){if(a.eventType==p){var c=a.touches.length,d=b.options;if(c<d.swipeMinTouches||c>d.swipeMaxTouches)return;(a.velocityX>d.swipeVelocityX||a.velocityY>d.swipeVelocityY)&&(b.trigger(this.name,a),b.trigger(this.name+a.direction,a))}}},function(a){function b(b,d){var e,f,g=d.options,h=u.current,i=u.previous;switch(b.eventType){case m:c=!1;break;case n:c=c||b.distance>g.tapMaxDistance;break;case o:!r.inStr(b.srcEvent.type,"cancel")&&b.deltaTime<g.tapMaxTime&&!c&&(e=i&&i.lastEvent&&b.timeStamp-i.lastEvent.timeStamp,f=!1,i&&i.name==a&&e&&e<g.doubleTapInterval&&b.distance<g.doubleTapDistance&&(d.trigger("doubletap",b),f=!0),(!f||g.tapAlways)&&(h.name=a,d.trigger(h.name,b)))}}var c=!1;d.gestures.Tap={name:a,index:100,handler:b,defaults:{tapMaxTime:250,tapMaxDistance:10,tapAlways:!0,doubleTapDistance:20,doubleTapInterval:300}}}("tap"),d.gestures.Touch={name:"touch",index:-1/0,defaults:{preventDefault:!1,preventMouse:!1},handler:function(a,b){return b.options.preventMouse&&a.pointerType==j?void a.stopDetect():(b.options.preventDefault&&a.preventDefault(),void(a.eventType==q&&b.trigger("touch",a)))}},function(a){function b(b,d){switch(b.eventType){case m:c=!1;break;case n:if(b.touches.length<2)return;var e=Math.abs(1-b.scale),f=Math.abs(b.rotation);if(e<d.options.transformMinScale&&f<d.options.transformMinRotation)return;u.current.name=a,c||(d.trigger(a+"start",b),c=!0),d.trigger(a,b),f>d.options.transformMinRotation&&d.trigger("rotate",b),e>d.options.transformMinScale&&(d.trigger("pinch",b),d.trigger("pinch"+(b.scale<1?"in":"out"),b));break;case p:c&&b.changedLength<2&&(d.trigger(a+"end",b),c=!1)}}var c=!1;d.gestures.Transform={name:a,index:45,defaults:{transformMinScale:.01,transformMinRotation:1},handler:b}}("transform"),"function"==typeof define&&define.amd?define(function(){return d}):"undefined"!=typeof module&&module.exports?module.exports=d:a.Hammer=d}(window); -/*! jQuery plugin for Hammer.JS - v1.1.3 - 2014-05-20 - * http://eightmedia.github.com/hammer.js - * - * Copyright (c) 2014 Jorik Tangelder <j.tangelder@gmail.com>; - * Licensed under the MIT license */ - -!function(a,b){"use strict";function c(a,c){Date.now||(Date.now=function(){return(new Date).getTime()}),a.utils.each(["on","off"],function(d){a.utils[d]=function(a,e,f){c(a)[d](e,function(a){var d=c.extend({},a.originalEvent,a);d.button===b&&(d.button=a.which-1),f.call(this,d)})}}),a.Instance.prototype.trigger=function(a,b){var d=c(this.element);return d.has(b.target).length&&(d=c(b.target)),d.trigger({type:a,gesture:b})},c.fn.hammer=function(b){return this.each(function(){var d=c(this),e=d.data("hammer");e?e&&b&&a.utils.extend(e.options,b):d.data("hammer",new a(this,b||{}))})}}"function"==typeof define&&define.amd?define(["hammerjs","jquery"],c):c(a.Hammer,a.jQuery||a.Zepto)}(window); -/* - * jQuery Hotkeys Plugin - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * - * Based upon the plugin by Tzury Bar Yochay: - * http://github.com/tzuryby/hotkeys - * - * Original idea by: - * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/ - */ - -(function(jQuery){ - - jQuery.hotkeys = { - version: "0.8", - - specialKeys: { - 8: "backspace", 9: "tab", 13: "return", 16: "shift", 17: "ctrl", 18: "alt", 19: "pause", - 20: "capslock", 27: "esc", 32: "space", 33: "pageup", 34: "pagedown", 35: "end", 36: "home", - 37: "left", 38: "up", 39: "right", 40: "down", 45: "insert", 46: "del", - 96: "0", 97: "1", 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7", - 104: "8", 105: "9", 106: "*", 107: "+", 109: "-", 110: ".", 111 : "/", - 112: "f1", 113: "f2", 114: "f3", 115: "f4", 116: "f5", 117: "f6", 118: "f7", 119: "f8", - 120: "f9", 121: "f10", 122: "f11", 123: "f12", 144: "numlock", 145: "scroll", 191: "/", 224: "meta" - }, - - shiftNums: { - "`": "~", "1": "!", "2": "@", "3": "#", "4": "$", "5": "%", "6": "^", "7": "&", - "8": "*", "9": "(", "0": ")", "-": "_", "=": "+", ";": ": ", "'": "\"", ",": "<", - ".": ">", "/": "?", "\\": "|" - } - }; - - function keyHandler( handleObj ) { - // Only care when a possible input has been specified - if ( typeof handleObj.data !== "string" ) { - return; - } - - var origHandler = handleObj.handler, - keys = handleObj.data.toLowerCase().split(" "), - textAcceptingInputTypes = ["text", "password", "number", "email", "url", "range", "date", "month", "week", "time", "datetime", "datetime-local", "search", "color"]; - - handleObj.handler = function( event ) { - // Don't fire in text-accepting inputs that we didn't directly bind to - if ( this !== event.target && (/textarea|select/i.test( event.target.nodeName ) || - jQuery.inArray(event.target.type, textAcceptingInputTypes) > -1 ) ) { - return; - } - - // Keypress represents characters, not special keys - var special = event.type !== "keypress" && jQuery.hotkeys.specialKeys[ event.which ], - character = String.fromCharCode( event.which ).toLowerCase(), - key, modif = "", possible = {}; - - // check combinations (alt|ctrl|shift+anything) - if ( event.altKey && special !== "alt" ) { - modif += "alt+"; - } - - if ( event.ctrlKey && special !== "ctrl" ) { - modif += "ctrl+"; - } - - // TODO: Need to make sure this works consistently across platforms - if ( event.metaKey && !event.ctrlKey && special !== "meta" ) { - modif += "meta+"; - } - - if ( event.shiftKey && special !== "shift" ) { - modif += "shift+"; - } - - if ( special ) { - possible[ modif + special ] = true; - - } else { - possible[ modif + character ] = true; - possible[ modif + jQuery.hotkeys.shiftNums[ character ] ] = true; - - // "$" can be triggered as "Shift+4" or "Shift+$" or just "$" - if ( modif === "shift+" ) { - possible[ jQuery.hotkeys.shiftNums[ character ] ] = true; - } - } - - for ( var i = 0, l = keys.length; i < l; i++ ) { - if ( possible[ keys[i] ] ) { - return origHandler.apply( this, arguments ); - } - } - }; - } - - jQuery.each([ "keydown", "keyup", "keypress" ], function() { - jQuery.event.special[ this ] = { add: keyHandler }; - }); - -})( jQuery );//https://github.com/googledrive/cors-upload-sample/commits/master/upload.js - - -// Underscore.js 1.8.3 -// http://underscorejs.org -// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. - -(function() { - - // Baseline setup - // -------------- - - // Establish the root object, `window` in the browser, or `exports` on the server. - var root = this; - - // Save the previous value of the `_` variable. - var previousUnderscore = root._; - - // Save bytes in the minified (but not gzipped) version: - var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; - - // Create quick reference variables for speed access to core prototypes. - var - push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; - - // All **ECMAScript 5** native function implementations that we hope to use - // are declared here. - var - nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeBind = FuncProto.bind, - nativeCreate = Object.create; - - // Naked function reference for surrogate-prototype-swapping. - var Ctor = function(){}; - - // Create a safe reference to the Underscore object for use below. - var _ = function(obj) { - if (obj instanceof _) return obj; - if (!(this instanceof _)) return new _(obj); - this._wrapped = obj; - }; - - // Export the Underscore object for **Node.js**, with - // backwards-compatibility for the old `require()` API. If we're in - // the browser, add `_` as a global object. - if (typeof exports !== 'undefined') { - if (typeof module !== 'undefined' && module.exports) { - exports = module.exports = _; - } - exports._ = _; - } else { - root._ = _; - } - - // Current version. - _.VERSION = '1.8.3'; - - // Internal function that returns an efficient (for current engines) version - // of the passed-in callback, to be repeatedly applied in other Underscore - // functions. - var optimizeCb = function(func, context, argCount) { - if (context === void 0) return func; - switch (argCount == null ? 3 : argCount) { - case 1: return function(value) { - return func.call(context, value); - }; - case 2: return function(value, other) { - return func.call(context, value, other); - }; - case 3: return function(value, index, collection) { - return func.call(context, value, index, collection); - }; - case 4: return function(accumulator, value, index, collection) { - return func.call(context, accumulator, value, index, collection); - }; - } - return function() { - return func.apply(context, arguments); - }; - }; - - // A mostly-internal function to generate callbacks that can be applied - // to each element in a collection, returning the desired result — either - // identity, an arbitrary callback, a property matcher, or a property accessor. - var cb = function(value, context, argCount) { - if (value == null) return _.identity; - if (_.isFunction(value)) return optimizeCb(value, context, argCount); - if (_.isObject(value)) return _.matcher(value); - return _.property(value); - }; - _.iteratee = function(value, context) { - return cb(value, context, Infinity); - }; - - // An internal function for creating assigner functions. - var createAssigner = function(keysFunc, undefinedOnly) { - return function(obj) { - var length = arguments.length; - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; - }; - - // An internal function for creating a new object that inherits from another. - var baseCreate = function(prototype) { - if (!_.isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; - }; - - var property = function(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; - }; - - // Helper for collection methods to determine whether a collection - // should be iterated as an array or as an object - // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength - // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 - var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; - var getLength = property('length'); - var isArrayLike = function(collection) { - var length = getLength(collection); - return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; - }; - - // Collection Functions - // -------------------- - - // The cornerstone, an `each` implementation, aka `forEach`. - // Handles raw objects in addition to array-likes. Treats all - // sparse array-likes as if they were dense. - _.each = _.forEach = function(obj, iteratee, context) { - iteratee = optimizeCb(iteratee, context); - var i, length; - if (isArrayLike(obj)) { - for (i = 0, length = obj.length; i < length; i++) { - iteratee(obj[i], i, obj); - } - } else { - var keys = _.keys(obj); - for (i = 0, length = keys.length; i < length; i++) { - iteratee(obj[keys[i]], keys[i], obj); - } - } - return obj; - }; - - // Return the results of applying the iteratee to each element. - _.map = _.collect = function(obj, iteratee, context) { - iteratee = cb(iteratee, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length, - results = Array(length); - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - results[index] = iteratee(obj[currentKey], currentKey, obj); - } - return results; - }; - - // Create a reducing function iterating left or right. - function createReduce(dir) { - // Optimized iterator function as using arguments.length - // in the main function will deoptimize the, see #1991. - function iterator(obj, iteratee, memo, keys, index, length) { - for (; index >= 0 && index < length; index += dir) { - var currentKey = keys ? keys[index] : index; - memo = iteratee(memo, obj[currentKey], currentKey, obj); - } - return memo; - } - - return function(obj, iteratee, memo, context) { - iteratee = optimizeCb(iteratee, context, 4); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length, - index = dir > 0 ? 0 : length - 1; - // Determine the initial value if none is provided. - if (arguments.length < 3) { - memo = obj[keys ? keys[index] : index]; - index += dir; - } - return iterator(obj, iteratee, memo, keys, index, length); - }; - } - - // **Reduce** builds up a single result from a list of values, aka `inject`, - // or `foldl`. - _.reduce = _.foldl = _.inject = createReduce(1); - - // The right-associative version of reduce, also known as `foldr`. - _.reduceRight = _.foldr = createReduce(-1); - - // Return the first value which passes a truth test. Aliased as `detect`. - _.find = _.detect = function(obj, predicate, context) { - var key; - if (isArrayLike(obj)) { - key = _.findIndex(obj, predicate, context); - } else { - key = _.findKey(obj, predicate, context); - } - if (key !== void 0 && key !== -1) return obj[key]; - }; - - // Return all the elements that pass a truth test. - // Aliased as `select`. - _.filter = _.select = function(obj, predicate, context) { - var results = []; - predicate = cb(predicate, context); - _.each(obj, function(value, index, list) { - if (predicate(value, index, list)) results.push(value); - }); - return results; - }; - - // Return all the elements for which a truth test fails. - _.reject = function(obj, predicate, context) { - return _.filter(obj, _.negate(cb(predicate)), context); - }; - - // Determine whether all of the elements match a truth test. - // Aliased as `all`. - _.every = _.all = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length; - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - if (!predicate(obj[currentKey], currentKey, obj)) return false; - } - return true; - }; - - // Determine if at least one element in the object matches a truth test. - // Aliased as `any`. - _.some = _.any = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length; - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - if (predicate(obj[currentKey], currentKey, obj)) return true; - } - return false; - }; - - // Determine if the array or object contains a given item (using `===`). - // Aliased as `includes` and `include`. - _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = _.values(obj); - if (typeof fromIndex != 'number' || guard) fromIndex = 0; - return _.indexOf(obj, item, fromIndex) >= 0; - }; - - // Invoke a method (with arguments) on every item in a collection. - _.invoke = function(obj, method) { - var args = slice.call(arguments, 2); - var isFunc = _.isFunction(method); - return _.map(obj, function(value) { - var func = isFunc ? method : value[method]; - return func == null ? func : func.apply(value, args); - }); - }; - - // Convenience version of a common use case of `map`: fetching a property. - _.pluck = function(obj, key) { - return _.map(obj, _.property(key)); - }; - - // Convenience version of a common use case of `filter`: selecting only objects - // containing specific `key:value` pairs. - _.where = function(obj, attrs) { - return _.filter(obj, _.matcher(attrs)); - }; - - // Convenience version of a common use case of `find`: getting the first object - // containing specific `key:value` pairs. - _.findWhere = function(obj, attrs) { - return _.find(obj, _.matcher(attrs)); - }; - - // Return the maximum element (or element-based computation). - _.max = function(obj, iteratee, context) { - var result = -Infinity, lastComputed = -Infinity, - value, computed; - if (iteratee == null && obj != null) { - obj = isArrayLike(obj) ? obj : _.values(obj); - for (var i = 0, length = obj.length; i < length; i++) { - value = obj[i]; - if (value > result) { - result = value; - } - } - } else { - iteratee = cb(iteratee, context); - _.each(obj, function(value, index, list) { - computed = iteratee(value, index, list); - if (computed > lastComputed || computed === -Infinity && result === -Infinity) { - result = value; - lastComputed = computed; - } - }); - } - return result; - }; - - // Return the minimum element (or element-based computation). - _.min = function(obj, iteratee, context) { - var result = Infinity, lastComputed = Infinity, - value, computed; - if (iteratee == null && obj != null) { - obj = isArrayLike(obj) ? obj : _.values(obj); - for (var i = 0, length = obj.length; i < length; i++) { - value = obj[i]; - if (value < result) { - result = value; - } - } - } else { - iteratee = cb(iteratee, context); - _.each(obj, function(value, index, list) { - computed = iteratee(value, index, list); - if (computed < lastComputed || computed === Infinity && result === Infinity) { - result = value; - lastComputed = computed; - } - }); - } - return result; - }; - - // Shuffle a collection, using the modern version of the - // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). - _.shuffle = function(obj) { - var set = isArrayLike(obj) ? obj : _.values(obj); - var length = set.length; - var shuffled = Array(length); - for (var index = 0, rand; index < length; index++) { - rand = _.random(0, index); - if (rand !== index) shuffled[index] = shuffled[rand]; - shuffled[rand] = set[index]; - } - return shuffled; - }; - - // Sample **n** random values from a collection. - // If **n** is not specified, returns a single random element. - // The internal `guard` argument allows it to work with `map`. - _.sample = function(obj, n, guard) { - if (n == null || guard) { - if (!isArrayLike(obj)) obj = _.values(obj); - return obj[_.random(obj.length - 1)]; - } - return _.shuffle(obj).slice(0, Math.max(0, n)); - }; - - // Sort the object's values by a criterion produced by an iteratee. - _.sortBy = function(obj, iteratee, context) { - iteratee = cb(iteratee, context); - return _.pluck(_.map(obj, function(value, index, list) { - return { - value: value, - index: index, - criteria: iteratee(value, index, list) - }; - }).sort(function(left, right) { - var a = left.criteria; - var b = right.criteria; - if (a !== b) { - if (a > b || a === void 0) return 1; - if (a < b || b === void 0) return -1; - } - return left.index - right.index; - }), 'value'); - }; - - // An internal function used for aggregate "group by" operations. - var group = function(behavior) { - return function(obj, iteratee, context) { - var result = {}; - iteratee = cb(iteratee, context); - _.each(obj, function(value, index) { - var key = iteratee(value, index, obj); - behavior(result, value, key); - }); - return result; - }; - }; - - // Groups the object's values by a criterion. Pass either a string attribute - // to group by, or a function that returns the criterion. - _.groupBy = group(function(result, value, key) { - if (_.has(result, key)) result[key].push(value); else result[key] = [value]; - }); - - // Indexes the object's values by a criterion, similar to `groupBy`, but for - // when you know that your index values will be unique. - _.indexBy = group(function(result, value, key) { - result[key] = value; - }); - - // Counts instances of an object that group by a certain criterion. Pass - // either a string attribute to count by, or a function that returns the - // criterion. - _.countBy = group(function(result, value, key) { - if (_.has(result, key)) result[key]++; else result[key] = 1; - }); - - // Safely create a real, live array from anything iterable. - _.toArray = function(obj) { - if (!obj) return []; - if (_.isArray(obj)) return slice.call(obj); - if (isArrayLike(obj)) return _.map(obj, _.identity); - return _.values(obj); - }; - - // Return the number of elements in an object. - _.size = function(obj) { - if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : _.keys(obj).length; - }; - - // Split a collection into two arrays: one whose elements all satisfy the given - // predicate, and one whose elements all do not satisfy the predicate. - _.partition = function(obj, predicate, context) { - predicate = cb(predicate, context); - var pass = [], fail = []; - _.each(obj, function(value, key, obj) { - (predicate(value, key, obj) ? pass : fail).push(value); - }); - return [pass, fail]; - }; - - // Array Functions - // --------------- - - // Get the first element of an array. Passing **n** will return the first N - // values in the array. Aliased as `head` and `take`. The **guard** check - // allows it to work with `_.map`. - _.first = _.head = _.take = function(array, n, guard) { - if (array == null) return void 0; - if (n == null || guard) return array[0]; - return _.initial(array, array.length - n); - }; - - // Returns everything but the last entry of the array. Especially useful on - // the arguments object. Passing **n** will return all the values in - // the array, excluding the last N. - _.initial = function(array, n, guard) { - return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); - }; - - // Get the last element of an array. Passing **n** will return the last N - // values in the array. - _.last = function(array, n, guard) { - if (array == null) return void 0; - if (n == null || guard) return array[array.length - 1]; - return _.rest(array, Math.max(0, array.length - n)); - }; - - // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. - // Especially useful on the arguments object. Passing an **n** will return - // the rest N values in the array. - _.rest = _.tail = _.drop = function(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); - }; - - // Trim out all falsy values from an array. - _.compact = function(array) { - return _.filter(array, _.identity); - }; - - // Internal implementation of a recursive `flatten` function. - var flatten = function(input, shallow, strict, startIndex) { - var output = [], idx = 0; - for (var i = startIndex || 0, length = getLength(input); i < length; i++) { - var value = input[i]; - if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { - //flatten current level of array or arguments object - if (!shallow) value = flatten(value, shallow, strict); - var j = 0, len = value.length; - output.length += len; - while (j < len) { - output[idx++] = value[j++]; - } - } else if (!strict) { - output[idx++] = value; - } - } - return output; - }; - - // Flatten out an array, either recursively (by default), or just one level. - _.flatten = function(array, shallow) { - return flatten(array, shallow, false); - }; - - // Return a version of the array that does not contain the specified value(s). - _.without = function(array) { - return _.difference(array, slice.call(arguments, 1)); - }; - - // Produce a duplicate-free version of the array. If the array has already - // been sorted, you have the option of using a faster algorithm. - // Aliased as `unique`. - _.uniq = _.unique = function(array, isSorted, iteratee, context) { - if (!_.isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!_.contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!_.contains(result, value)) { - result.push(value); - } - } - return result; - }; - - // Produce an array that contains the union: each distinct element from all of - // the passed-in arrays. - _.union = function() { - return _.uniq(flatten(arguments, true, true)); - }; - - // Produce an array that contains every item shared between all the - // passed-in arrays. - _.intersection = function(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (_.contains(result, item)) continue; - for (var j = 1; j < argsLength; j++) { - if (!_.contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; - }; - - // Take the difference between one array and a number of other arrays. - // Only the elements present in just the first array will remain. - _.difference = function(array) { - var rest = flatten(arguments, true, true, 1); - return _.filter(array, function(value){ - return !_.contains(rest, value); - }); - }; - - // Zip together multiple lists into a single array -- elements that share - // an index go together. - _.zip = function() { - return _.unzip(arguments); - }; - - // Complement of _.zip. Unzip accepts an array of arrays and groups - // each array's elements on shared indices - _.unzip = function(array) { - var length = array && _.max(array, getLength).length || 0; - var result = Array(length); - - for (var index = 0; index < length; index++) { - result[index] = _.pluck(array, index); - } - return result; - }; - - // Converts lists into objects. Pass either a single array of `[key, value]` - // pairs, or two parallel arrays of the same length -- one of keys, and one of - // the corresponding values. - _.object = function(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; - } - } - return result; - }; - - // Generator function to create the findIndex and findLastIndex functions - function createPredicateIndexFinder(dir) { - return function(array, predicate, context) { - predicate = cb(predicate, context); - var length = getLength(array); - var index = dir > 0 ? 0 : length - 1; - for (; index >= 0 && index < length; index += dir) { - if (predicate(array[index], index, array)) return index; - } - return -1; - }; - } - - // Returns the first index on an array-like that passes a predicate test - _.findIndex = createPredicateIndexFinder(1); - _.findLastIndex = createPredicateIndexFinder(-1); - - // Use a comparator function to figure out the smallest index at which - // an object should be inserted so as to maintain order. Uses binary search. - _.sortedIndex = function(array, obj, iteratee, context) { - iteratee = cb(iteratee, context, 1); - var value = iteratee(obj); - var low = 0, high = getLength(array); - while (low < high) { - var mid = Math.floor((low + high) / 2); - if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; - } - return low; - }; - - // Generator function to create the indexOf and lastIndexOf functions - function createIndexFinder(dir, predicateFind, sortedIndex) { - return function(array, item, idx) { - var i = 0, length = getLength(array); - if (typeof idx == 'number') { - if (dir > 0) { - i = idx >= 0 ? idx : Math.max(idx + length, i); - } else { - length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; - } - } else if (sortedIndex && idx && length) { - idx = sortedIndex(array, item); - return array[idx] === item ? idx : -1; - } - if (item !== item) { - idx = predicateFind(slice.call(array, i, length), _.isNaN); - return idx >= 0 ? idx + i : -1; - } - for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { - if (array[idx] === item) return idx; - } - return -1; - }; - } - - // Return the position of the first occurrence of an item in an array, - // or -1 if the item is not included in the array. - // If the array is large and already in sort order, pass `true` - // for **isSorted** to use binary search. - _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); - _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); - - // Generate an integer Array containing an arithmetic progression. A port of - // the native Python `range()` function. See - // [the Python documentation](http://docs.python.org/library/functions.html#range). - _.range = function(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - step = step || 1; - - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; - } - - return range; - }; - - // Function (ahem) Functions - // ------------------ - - // Determines whether to execute a function as a constructor - // or a normal function with the provided arguments - var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { - if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); - var self = baseCreate(sourceFunc.prototype); - var result = sourceFunc.apply(self, args); - if (_.isObject(result)) return result; - return self; - }; - - // Create a function bound to a given object (assigning `this`, and arguments, - // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if - // available. - _.bind = function(func, context) { - if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); - if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); - var args = slice.call(arguments, 2); - var bound = function() { - return executeBound(func, bound, context, this, args.concat(slice.call(arguments))); - }; - return bound; - }; - - // Partially apply a function by creating a version that has had some of its - // arguments pre-filled, without changing its dynamic `this` context. _ acts - // as a placeholder, allowing any combination of arguments to be pre-filled. - _.partial = function(func) { - var boundArgs = slice.call(arguments, 1); - var bound = function() { - var position = 0, length = boundArgs.length; - var args = Array(length); - for (var i = 0; i < length; i++) { - args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i]; - } - while (position < arguments.length) args.push(arguments[position++]); - return executeBound(func, bound, this, this, args); - }; - return bound; - }; - - // Bind a number of an object's methods to that object. Remaining arguments - // are the method names to be bound. Useful for ensuring that all callbacks - // defined on an object belong to it. - _.bindAll = function(obj) { - var i, length = arguments.length, key; - if (length <= 1) throw new Error('bindAll must be passed function names'); - for (i = 1; i < length; i++) { - key = arguments[i]; - obj[key] = _.bind(obj[key], obj); - } - return obj; - }; - - // Memoize an expensive function by storing its results. - _.memoize = function(func, hasher) { - var memoize = function(key) { - var cache = memoize.cache; - var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!_.has(cache, address)) cache[address] = func.apply(this, arguments); - return cache[address]; - }; - memoize.cache = {}; - return memoize; - }; - - // Delays a function for the given number of milliseconds, and then calls - // it with the arguments supplied. - _.delay = function(func, wait) { - var args = slice.call(arguments, 2); - return setTimeout(function(){ - return func.apply(null, args); - }, wait); - }; - - // Defers a function, scheduling it to run after the current call stack has - // cleared. - _.defer = _.partial(_.delay, _, 1); - - // Returns a function, that, when invoked, will only be triggered at most once - // during a given window of time. Normally, the throttled function will run - // as much as it can, without ever going more than once per `wait` duration; - // but if you'd like to disable the execution on the leading edge, pass - // `{leading: false}`. To disable execution on the trailing edge, ditto. - _.throttle = function(func, wait, options) { - var context, args, result; - var timeout = null; - var previous = 0; - if (!options) options = {}; - var later = function() { - previous = options.leading === false ? 0 : _.now(); - timeout = null; - result = func.apply(context, args); - if (!timeout) context = args = null; - }; - return function() { - var now = _.now(); - if (!previous && options.leading === false) previous = now; - var remaining = wait - (now - previous); - context = this; - args = arguments; - if (remaining <= 0 || remaining > wait) { - if (timeout) { - clearTimeout(timeout); - timeout = null; - } - previous = now; - result = func.apply(context, args); - if (!timeout) context = args = null; - } else if (!timeout && options.trailing !== false) { - timeout = setTimeout(later, remaining); - } - return result; - }; - }; - - // Returns a function, that, as long as it continues to be invoked, will not - // be triggered. The function will be called after it stops being called for - // N milliseconds. If `immediate` is passed, trigger the function on the - // leading edge, instead of the trailing. - _.debounce = function(func, wait, immediate) { - var timeout, args, context, timestamp, result; - - var later = function() { - var last = _.now() - timestamp; - - if (last < wait && last >= 0) { - timeout = setTimeout(later, wait - last); - } else { - timeout = null; - if (!immediate) { - result = func.apply(context, args); - if (!timeout) context = args = null; - } - } - }; - - return function() { - context = this; - args = arguments; - timestamp = _.now(); - var callNow = immediate && !timeout; - if (!timeout) timeout = setTimeout(later, wait); - if (callNow) { - result = func.apply(context, args); - context = args = null; - } - - return result; - }; - }; - - // Returns the first function passed as an argument to the second, - // allowing you to adjust arguments, run code before and after, and - // conditionally execute the original function. - _.wrap = function(func, wrapper) { - return _.partial(wrapper, func); - }; - - // Returns a negated version of the passed-in predicate. - _.negate = function(predicate) { - return function() { - return !predicate.apply(this, arguments); - }; - }; - - // Returns a function that is the composition of a list of functions, each - // consuming the return value of the function that follows. - _.compose = function() { - var args = arguments; - var start = args.length - 1; - return function() { - var i = start; - var result = args[start].apply(this, arguments); - while (i--) result = args[i].call(this, result); - return result; - }; - }; - - // Returns a function that will only be executed on and after the Nth call. - _.after = function(times, func) { - return function() { - if (--times < 1) { - return func.apply(this, arguments); - } - }; - }; - - // Returns a function that will only be executed up to (but not including) the Nth call. - _.before = function(times, func) { - var memo; - return function() { - if (--times > 0) { - memo = func.apply(this, arguments); - } - if (times <= 1) func = null; - return memo; - }; - }; - - // Returns a function that will be executed at most one time, no matter how - // often you call it. Useful for lazy initialization. - _.once = _.partial(_.before, 2); - - // Object Functions - // ---------------- - - // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. - var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); - var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; - - function collectNonEnumProps(obj, keys) { - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto; - - // Constructor is a special case. - var prop = 'constructor'; - if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop); - - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) { - keys.push(prop); - } - } - } - - // Retrieve the names of an object's own properties. - // Delegates to **ECMAScript 5**'s native `Object.keys` - _.keys = function(obj) { - if (!_.isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (_.has(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; - }; - - // Retrieve all the property names of an object. - _.allKeys = function(obj) { - if (!_.isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; - }; - - // Retrieve the values of an object's properties. - _.values = function(obj) { - var keys = _.keys(obj); - var length = keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[keys[i]]; - } - return values; - }; - - // Returns the results of applying the iteratee to each element of the object - // In contrast to _.map it returns an object - _.mapObject = function(obj, iteratee, context) { - iteratee = cb(iteratee, context); - var keys = _.keys(obj), - length = keys.length, - results = {}, - currentKey; - for (var index = 0; index < length; index++) { - currentKey = keys[index]; - results[currentKey] = iteratee(obj[currentKey], currentKey, obj); - } - return results; - }; - - // Convert an object into a list of `[key, value]` pairs. - _.pairs = function(obj) { - var keys = _.keys(obj); - var length = keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [keys[i], obj[keys[i]]]; - } - return pairs; - }; - - // Invert the keys and values of an object. The values must be serializable. - _.invert = function(obj) { - var result = {}; - var keys = _.keys(obj); - for (var i = 0, length = keys.length; i < length; i++) { - result[obj[keys[i]]] = keys[i]; - } - return result; - }; - - // Return a sorted list of the function names available on the object. - // Aliased as `methods` - _.functions = _.methods = function(obj) { - var names = []; - for (var key in obj) { - if (_.isFunction(obj[key])) names.push(key); - } - return names.sort(); - }; - - // Extend a given object with all the properties in passed-in object(s). - _.extend = createAssigner(_.allKeys); - - // Assigns a given object with all the own properties in the passed-in object(s) - // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) - _.extendOwn = _.assign = createAssigner(_.keys); - - // Returns the first key on an object that passes a predicate test - _.findKey = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = _.keys(obj), key; - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; - if (predicate(obj[key], key, obj)) return key; - } - }; - - // Return a copy of the object only containing the whitelisted properties. - _.pick = function(object, oiteratee, context) { - var result = {}, obj = object, iteratee, keys; - if (obj == null) return result; - if (_.isFunction(oiteratee)) { - keys = _.allKeys(obj); - iteratee = optimizeCb(oiteratee, context); - } else { - keys = flatten(arguments, false, false, 1); - iteratee = function(value, key, obj) { return key in obj; }; - obj = Object(obj); - } - for (var i = 0, length = keys.length; i < length; i++) { - var key = keys[i]; - var value = obj[key]; - if (iteratee(value, key, obj)) result[key] = value; - } - return result; - }; - - // Return a copy of the object without the blacklisted properties. - _.omit = function(obj, iteratee, context) { - if (_.isFunction(iteratee)) { - iteratee = _.negate(iteratee); - } else { - var keys = _.map(flatten(arguments, false, false, 1), String); - iteratee = function(value, key) { - return !_.contains(keys, key); - }; - } - return _.pick(obj, iteratee, context); - }; - - // Fill in a given object with default properties. - _.defaults = createAssigner(_.allKeys, true); - - // Creates an object that inherits from the given prototype object. - // If additional properties are provided then they will be added to the - // created object. - _.create = function(prototype, props) { - var result = baseCreate(prototype); - if (props) _.extendOwn(result, props); - return result; - }; - - // Create a (shallow-cloned) duplicate of an object. - _.clone = function(obj) { - if (!_.isObject(obj)) return obj; - return _.isArray(obj) ? obj.slice() : _.extend({}, obj); - }; - - // Invokes interceptor with the obj, and then returns obj. - // The primary purpose of this method is to "tap into" a method chain, in - // order to perform operations on intermediate results within the chain. - _.tap = function(obj, interceptor) { - interceptor(obj); - return obj; - }; - - // Returns whether an object has a given set of `key:value` pairs. - _.isMatch = function(object, attrs) { - var keys = _.keys(attrs), length = keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; - }; - - - // Internal recursive comparison function for `isEqual`. - var eq = function(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // A strict comparison is necessary because `null == undefined`. - if (a == null || b == null) return a === b; - // Unwrap any wrapped objects. - if (a instanceof _) a = a._wrapped; - if (b instanceof _) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - switch (className) { - // Strings, numbers, regular expressions, dates, and booleans are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - } - - var areArrays = className === '[object Array]'; - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && - _.isFunction(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var keys = _.keys(a), key; - length = keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (_.keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = keys[length]; - if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; - }; - - // Perform a deep comparison to check if two objects are equal. - _.isEqual = function(a, b) { - return eq(a, b); - }; - - // Is a given array, string, or object empty? - // An "empty" object has no enumerable own-properties. - _.isEmpty = function(obj) { - if (obj == null) return true; - if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0; - return _.keys(obj).length === 0; - }; - - // Is a given value a DOM element? - _.isElement = function(obj) { - return !!(obj && obj.nodeType === 1); - }; - - // Is a given value an array? - // Delegates to ECMA5's native Array.isArray - _.isArray = nativeIsArray || function(obj) { - return toString.call(obj) === '[object Array]'; - }; - - // Is a given variable an object? - _.isObject = function(obj) { - var type = typeof obj; - return type === 'function' || type === 'object' && !!obj; - }; - - // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError. - _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) { - _['is' + name] = function(obj) { - return toString.call(obj) === '[object ' + name + ']'; - }; - }); - - // Define a fallback version of the method in browsers (ahem, IE < 9), where - // there isn't any inspectable "Arguments" type. - if (!_.isArguments(arguments)) { - _.isArguments = function(obj) { - return _.has(obj, 'callee'); - }; - } - - // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, - // IE 11 (#1621), and in Safari 8 (#1929). - if (typeof /./ != 'function' && typeof Int8Array != 'object') { - _.isFunction = function(obj) { - return typeof obj == 'function' || false; - }; - } - - // Is a given object a finite number? - _.isFinite = function(obj) { - return isFinite(obj) && !isNaN(parseFloat(obj)); - }; - - // Is the given value `NaN`? (NaN is the only number which does not equal itself). - _.isNaN = function(obj) { - return _.isNumber(obj) && obj !== +obj; - }; - - // Is a given value a boolean? - _.isBoolean = function(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; - }; - - // Is a given value equal to null? - _.isNull = function(obj) { - return obj === null; - }; - - // Is a given variable undefined? - _.isUndefined = function(obj) { - return obj === void 0; - }; - - // Shortcut function for checking if an object has a given property directly - // on itself (in other words, not on a prototype). - _.has = function(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); - }; - - // Utility Functions - // ----------------- - - // Run Underscore.js in *noConflict* mode, returning the `_` variable to its - // previous owner. Returns a reference to the Underscore object. - _.noConflict = function() { - root._ = previousUnderscore; - return this; - }; - - // Keep the identity function around for default iteratees. - _.identity = function(value) { - return value; - }; - - // Predicate-generating functions. Often useful outside of Underscore. - _.constant = function(value) { - return function() { - return value; - }; - }; - - _.noop = function(){}; - - _.property = property; - - // Generates a function for a given object that returns a given property. - _.propertyOf = function(obj) { - return obj == null ? function(){} : function(key) { - return obj[key]; - }; - }; - - // Returns a predicate for checking whether an object has a given set of - // `key:value` pairs. - _.matcher = _.matches = function(attrs) { - attrs = _.extendOwn({}, attrs); - return function(obj) { - return _.isMatch(obj, attrs); - }; - }; - - // Run a function **n** times. - _.times = function(n, iteratee, context) { - var accum = Array(Math.max(0, n)); - iteratee = optimizeCb(iteratee, context, 1); - for (var i = 0; i < n; i++) accum[i] = iteratee(i); - return accum; - }; - - // Return a random integer between min and max (inclusive). - _.random = function(min, max) { - if (max == null) { - max = min; - min = 0; - } - return min + Math.floor(Math.random() * (max - min + 1)); - }; - - // A (possibly faster) way to get the current timestamp as an integer. - _.now = Date.now || function() { - return new Date().getTime(); - }; - - // List of HTML entities for escaping. - var escapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' - }; - var unescapeMap = _.invert(escapeMap); - - // Functions for escaping and unescaping strings to/from HTML interpolation. - var createEscaper = function(map) { - var escaper = function(match) { - return map[match]; - }; - // Regexes for identifying a key that needs to be escaped - var source = '(?:' + _.keys(map).join('|') + ')'; - var testRegexp = RegExp(source); - var replaceRegexp = RegExp(source, 'g'); - return function(string) { - string = string == null ? '' : '' + string; - return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; - }; - }; - _.escape = createEscaper(escapeMap); - _.unescape = createEscaper(unescapeMap); - - // If the value of the named `property` is a function then invoke it with the - // `object` as context; otherwise, return it. - _.result = function(object, property, fallback) { - var value = object == null ? void 0 : object[property]; - if (value === void 0) { - value = fallback; - } - return _.isFunction(value) ? value.call(object) : value; - }; - - // Generate a unique integer id (unique within the entire client session). - // Useful for temporary DOM ids. - var idCounter = 0; - _.uniqueId = function(prefix) { - var id = ++idCounter + ''; - return prefix ? prefix + id : id; - }; - - // By default, Underscore uses ERB-style template delimiters, change the - // following template settings to use alternative delimiters. - _.templateSettings = { - evaluate : /<%([\s\S]+?)%>/g, - interpolate : /<%=([\s\S]+?)%>/g, - escape : /<%-([\s\S]+?)%>/g - }; - - // When customizing `templateSettings`, if you don't want to define an - // interpolation, evaluation or escaping regex, we need one that is - // guaranteed not to match. - var noMatch = /(.)^/; - - // Certain characters need to be escaped so that they can be put into a - // string literal. - var escapes = { - "'": "'", - '\\': '\\', - '\r': 'r', - '\n': 'n', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - var escaper = /\\|'|\r|\n|\u2028|\u2029/g; - - var escapeChar = function(match) { - return '\\' + escapes[match]; - }; - - // JavaScript micro-templating, similar to John Resig's implementation. - // Underscore templating handles arbitrary delimiters, preserves whitespace, - // and correctly escapes quotes within interpolated code. - // NB: `oldSettings` only exists for backwards compatibility. - _.template = function(text, settings, oldSettings) { - if (!settings && oldSettings) settings = oldSettings; - settings = _.defaults({}, settings, _.templateSettings); - - // Combine delimiters into one regular expression via alternation. - var matcher = RegExp([ - (settings.escape || noMatch).source, - (settings.interpolate || noMatch).source, - (settings.evaluate || noMatch).source - ].join('|') + '|$', 'g'); - - // Compile the template source, escaping string literals appropriately. - var index = 0; - var source = "__p+='"; - text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { - source += text.slice(index, offset).replace(escaper, escapeChar); - index = offset + match.length; - - if (escape) { - source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; - } else if (interpolate) { - source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; - } else if (evaluate) { - source += "';\n" + evaluate + "\n__p+='"; - } - - // Adobe VMs need the match returned to produce the correct offest. - return match; - }); - source += "';\n"; - - // If a variable is not specified, place data values in local scope. - if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; - - source = "var __t,__p='',__j=Array.prototype.join," + - "print=function(){__p+=__j.call(arguments,'');};\n" + - source + 'return __p;\n'; - - try { - var render = new Function(settings.variable || 'obj', '_', source); - } catch (e) { - e.source = source; - throw e; - } - - var template = function(data) { - return render.call(this, data, _); - }; - - // Provide the compiled source as a convenience for precompilation. - var argument = settings.variable || 'obj'; - template.source = 'function(' + argument + '){\n' + source + '}'; - - return template; - }; - - // Add a "chain" function. Start chaining a wrapped Underscore object. - _.chain = function(obj) { - var instance = _(obj); - instance._chain = true; - return instance; - }; - - // OOP - // --------------- - // If Underscore is called as a function, it returns a wrapped object that - // can be used OO-style. This wrapper holds altered versions of all the - // underscore functions. Wrapped objects may be chained. - - // Helper function to continue chaining intermediate results. - var result = function(instance, obj) { - return instance._chain ? _(obj).chain() : obj; - }; - - // Add your own custom functions to the Underscore object. - _.mixin = function(obj) { - _.each(_.functions(obj), function(name) { - var func = _[name] = obj[name]; - _.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return result(this, func.apply(_, args)); - }; - }); - }; - - // Add all of the Underscore functions to the wrapper object. - _.mixin(_); - - // Add all mutator Array functions to the wrapper. - _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _.prototype[name] = function() { - var obj = this._wrapped; - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; - return result(this, obj); - }; - }); - - // Add all accessor Array functions to the wrapper. - _.each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _.prototype[name] = function() { - return result(this, method.apply(this._wrapped, arguments)); - }; - }); - - // Extracts the result from a wrapped and chained object. - _.prototype.value = function() { - return this._wrapped; - }; - - // Provide unwrapping proxy for some methods used in engine operations - // such as arithmetic and JSON stringification. - _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; - - _.prototype.toString = function() { - return '' + this._wrapped; - }; - - // AMD registration happens at the end for compatibility with AMD loaders - // that may not enforce next-turn semantics on modules. Even though general - // practice for AMD registration is to be anonymous, underscore registers - // as a named module because, like jQuery, it is a base library that is - // popular enough to be bundled in a third party lib, but not be part of - // an AMD load request. Those cases could generate an error when an - // anonymous define() is called outside of a loader request. - if (typeof define === 'function' && define.amd) { - define('underscore', [], function() { - return _; - }); - } -}.call(this)); \ No newline at end of file diff --git a/plugins/easy_mindmup/assets/javascripts/filter.js b/plugins/easy_mindmup/assets/javascripts/filter.js deleted file mode 100644 index b4c7206..0000000 --- a/plugins/easy_mindmup/assets/javascripts/filter.js +++ /dev/null @@ -1,28 +0,0 @@ -(function () { - /** - * Class responsible for filtering nodes from tree and options from legend - * @param {MindMup} ysy - * @constructor - */ - function Filter(ysy) { - this.ysy = ysy; - } - - Filter.prototype.isOn = function(){ - return false; - }; - Filter.prototype.cssByBannedValue = function (value) { - return ""; - }; - Filter.prototype.reset = function () { - }; - /** - * - * @param {ModelEntity} idea - * @return {boolean} - */ - Filter.prototype.isBanned = function (idea) { - return false; - }; - window.easyMindMupClasses.Filter = Filter; -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/history.js b/plugins/easy_mindmup/assets/javascripts/history.js deleted file mode 100644 index b6a7489..0000000 --- a/plugins/easy_mindmup/assets/javascripts/history.js +++ /dev/null @@ -1,174 +0,0 @@ -/** - * Created by merta on 27.4.17. - */ -(function () { - /** - * @param {MindMup} ysy - * @property {boolean} historyIsPushed - * @property {boolean} redoIsPushed - * @property {SaveButton} saveButton - * @property {UndoButton} undoButton - * @property {RedoButton} redoButton - * @constructor - */ - function History(ysy) { - this.ysy = ysy; - this.init(); - this.buttonsInited = false; - this.saveButton = null; - this.undoButton = null; - this.redoButton = null; - this.historyIsPushed = true; - this.redoIsPushed = true; - } - - History.prototype.init = function () { - var self = this; - this.ysy.eventBus.register("TreeLoaded", /** @param {RootIdea} idea*/function (idea) { - idea.addEventListener('changed', $.proxy(self.historyChanged, self)); - self.historyChanged(); - }); - this.ysy.eventBus.register("BeforeServerClassInit", function () { - self.saveButton = self.ysy.toolbar.children["save"]; - self.undoButton = self.ysy.toolbar.children["undo"]; - self.redoButton = self.ysy.toolbar.children["redo"]; - self.buttonsInited = true; - }); - }; - History.prototype.historyChanged = function () { - var idea = this.ysy.idea; - if (idea.canUndo()) { - this.historyPushed(); - } else { - this.historyEmpty(); - } - if (idea.canRedo()) { - this.redoPushed(); - } else { - this.redoEmpty(); - } - }; - History.prototype.historyEmpty = function () { - if (!this.historyIsPushed) return; - this.historyIsPushed = false; - $(window).unbind('beforeunload'); - $(window).unbind('unload'); - if (this.buttonsInited) { - this.saveButton.setDisabled(true); - this.undoButton.setDisabled(true); - } - this.ysy.log.debug("History Empty", "history"); - }; - History.prototype.historyPushed = function () { - if (this.historyIsPushed) return; - this.historyIsPushed = true; - $(window).bind('beforeunload', function (e) { - var message = "Some changes are not saved!"; - e.returnValue = message; - return message; - }); - // .unbind('unload').bind('unload', function () { - // storage.lastState.remove(); - // }); - if (this.buttonsInited) { - this.saveButton.setDisabled(false); - this.undoButton.setDisabled(false); - } - this.ysy.log.debug("History Pushed", "history"); - }; - History.prototype.redoEmpty = function () { - if (!this.redoIsPushed) return; - this.redoIsPushed = false; - if (this.buttonsInited) { - this.redoButton.setDisabled(true); - } - this.ysy.log.debug("Redo Empty", "history"); - }; - History.prototype.redoPushed = function () { - if (this.redoIsPushed) return; - this.redoIsPushed = true; - if (this.buttonsInited) { - this.redoButton.setDisabled(false); - } - this.ysy.log.debug("Redo Pushed", "history"); - }; - - - window.easyMindMupClasses.History = History; - //#################################################################################################################### - /** - * - * @param {MindMup} ysy - * @param {jQuery} $parent - * @constructor - */ - function HistoryButton(ysy, $parent) { - this.ysy = ysy; - this.isDisabled = false; - this.$element = $parent.find(this.elementClass); - } - - HistoryButton.prototype.elementClass = ""; - /** - * Set disable state of button - * @param {boolean} isDisabled - */ - HistoryButton.prototype.setDisabled = function (isDisabled) { - this.isDisabled = isDisabled; - this.ysy.repainter.redrawMe(this); - }; - HistoryButton.prototype._render = function () { - this.$element.toggleClass("mindmup__button--disabled", this.isDisabled); - }; - - var classes = window.easyMindMupClasses; - - /** - * @extends {HistoryButton} - * @param {MindMup} ysy - * @param {jQuery} $parent - * @constructor - */ - function SaveButton(ysy, $parent) { - HistoryButton.call(this, ysy, $parent); - } - - classes.extendClass(SaveButton, HistoryButton); - SaveButton.prototype.elementClass = ".mindmup__menu-save"; - SaveButton.prototype.id = "save"; - - window.easyMindMupClasses.SaveButton = SaveButton; - - /** - * @extends {HistoryButton} - * @param {MindMup} ysy - * @param {jQuery} $parent - * @constructor - */ - function UndoButton(ysy, $parent) { - HistoryButton.call(this, ysy, $parent); - } - - classes.extendClass(UndoButton, HistoryButton); - UndoButton.prototype.id = "undo"; - UndoButton.prototype.elementClass = ".mindmup-button-undo"; - - window.easyMindMupClasses.UndoButton = UndoButton; - - /** - * @extends {HistoryButton} - * @param {MindMup} ysy - * @param {jQuery} $parent - * @constructor - */ - function RedoButton(ysy, $parent) { - HistoryButton.call(this, ysy, $parent); - } - - classes.extendClass(RedoButton, HistoryButton); - RedoButton.prototype.id = "redo"; - RedoButton.prototype.elementClass = ".mindmup-button-redo"; - - window.easyMindMupClasses.RedoButton = RedoButton; - -})(); \ No newline at end of file diff --git a/plugins/easy_mindmup/assets/javascripts/jsdocs_external.js b/plugins/easy_mindmup/assets/javascripts/jsdocs_external.js deleted file mode 100644 index 53b2235..0000000 --- a/plugins/easy_mindmup/assets/javascripts/jsdocs_external.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Created by hosekp on 11/14/16. - */ -(function () { - /** - * Do not include this file - it is just for suppressing JSDocs warnings - */ - window.showModal =function(){}; - jQuery.fn.dialog=function(){}; - /** - * - * @param {String} type - * @param {String} message - * @param {number} delay - */ - window.showFlashMessage=function(type, message, delay){}; - /** - * - * @param {String} htmlId - */ - window.fillFormTextAreaFromCKEditor = function(htmlId){}; - - jQuery.Deferred.prototype.done = function (func) { - - }; - window._ = window._ || {}; -}); diff --git a/plugins/easy_mindmup/assets/javascripts/layout_patch.js b/plugins/easy_mindmup/assets/javascripts/layout_patch.js deleted file mode 100644 index 305a038..0000000 --- a/plugins/easy_mindmup/assets/javascripts/layout_patch.js +++ /dev/null @@ -1,94 +0,0 @@ -(function () { - /** - * - * @param {MindMup} ysy - * @constructor - */ - function LayoutPatch(ysy) { - this.nodeCacheMarks = {}; - this.ysy = ysy; - this.patch(ysy); - } - - LayoutPatch.prototype.patch = function (ysy) { - var self = this; - self.layoutCalculator = /** @param {RootIdea} contentAggregate */function (contentAggregate) { - self.preComputeDimensions(contentAggregate, self, ysy); - return MAPJS.calculateLayout(contentAggregate, function (idea) { - return self.nodeCacheMarks[idea.id] - }, undefined, self.layoutPredicate); - }; - jQuery.fn.queueFadeOut = function (options) { - var element = this; - return element.animate({opacity: 0}, _.extend({ - complete: function () { - element.remove(); - } - }, options)); - } - }; - /** - * function which separate nodes into two categories: - * LeftTree => positive = false - * RightTree => positive = true; - * @param {RootIdea} idea - * @param {boolean} positive - * @return {Function} - */ - LayoutPatch.prototype.layoutPredicate = function (idea, positive) { - if (idea.oneSideOn) { - return function () { - return positive; - } - } - return function (rank, parent) { - if (parent === idea) { - if (rank < 0 === positive) return false; - } - return true; - }; - }; - /** - * - * @param {RootIdea} superIdea - * @param {LayoutPatch} self - * @param {MindMup} ysy - */ - LayoutPatch.prototype.preComputeDimensions = function (superIdea, self, ysy) { - var nodeCacheMarks = self.nodeCacheMarks; - var nodes = []; - ysy.util.traverse(superIdea, function (idea) { - if (!idea.attr || !idea.attr.entityType) { - ysy.upgradeToModelEntity(idea); - } - if (nodeCacheMarks[idea.id]) { - if (nodeCacheMarks[idea.id].title === idea.title && nodeCacheMarks[idea.id].collapsed === idea.attr.collapsed) return; - } - nodes.push(idea); - }); - var translateToPixel = function () { - return MAPJS.DOMRender.svgPixel; - }; - var bigHtml = '<div id="dimension_compute_cont">'; - for (var i = 0; i < nodes.length; i++) { - var idea = nodes[i]; - bigHtml += '<div id="compute_node_' + idea.id + '" class="mapjs-node" style="visibility: hidden;position: absolute"><span>' + ysy.nodePatch.getNodeText(idea) + '</span></div>' - } - bigHtml += '</div>'; - $(bigHtml).appendTo('body'); - - for (i = 0; i < nodes.length; i++) { - idea = nodes[i]; - var textBox = $("#compute_node_" + idea.id); - nodeCacheMarks[idea.id] = { - title: idea.title, - collapsed: idea.attr.collapsed, - width: textBox.outerWidth(true), - height: textBox.outerHeight(true) - }; - // textBox.detach(); - } - $("#dimension_compute_cont").remove(); - }; - window.easyMindMupClasses.LayoutPatch = LayoutPatch; -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/legend.js b/plugins/easy_mindmup/assets/javascripts/legend.js deleted file mode 100644 index 0fa54ab..0000000 --- a/plugins/easy_mindmup/assets/javascripts/legend.js +++ /dev/null @@ -1,218 +0,0 @@ -(function () { - /** - * - * @property {jQuery} $element - * @property {jQuery} $titleElement - * @property {Array.<String>} otherBuilders - * @property {MindMup} ysy - * @property {LegendBuilders} itemBuilders - * @param {MindMup} ysy - * @constructor - */ - function Legend(ysy) { - this.opened = true; - this.headerHidden = false; - this.lastHeaderHidden = true; - this.otherBuilders = [ - "project" - ]; - this.usedActive = false; - this.ysy = ysy; - this.itemBuilders = new LegendBuilders(ysy); - this.init(ysy); - } - - /** - * @param {MindMup} ysy - */ - Legend.prototype.init = function (ysy) { - var self = this; - var $menu = ysy.$menu; - ysy.eventBus.register("TreeLoaded", function (idea) { - idea.addEventListener('changed', function () { - self.draw(); - }); - self.draw(); - }); - ysy.eventBus.register("nodeStyleChanged", $.proxy(this.draw, this)); - this.$container = $menu.find(".mindmup__legend-container"); - this.$element = $menu.find(".mindmup-legend"); - this.$header = $menu.find(".mindmup__legend-header"); - this.$usedToggle = this.$header.find(".mindmup__legend-used-toggle"); - this.$openToggle = this.$header.find(".mindmup__legend-toggler"); - this.opened = !ysy.storage.settings.loadLegendHidden(); - this.$headerToggle = $menu.find(".mindmup__legend-cont-toggler"); - this.opened = !ysy.storage.settings.loadLegendHidden(); - this.headerHidden = ysy.storage.settings.loadLegendHeaderHidden(); - this.lastHeaderHidden = !this.headerHidden; - }; - Legend.prototype.headerToggle = function () { - this.headerHidden = !this.headerHidden; - this.ysy.repainter.redrawMe(this); - this.ysy.eventBus.fireEvent("legendHeaderToggled", this.headerHidden); - }; - Legend.prototype.toggle = function () { - this.opened = !this.opened; - this.ysy.repainter.redrawMe(this); - this.ysy.eventBus.fireEvent("legendToggled", this.opened); - }; - /** @param {Style} style */ - Legend.prototype.getItemBuilder = function (style) { - return this.itemBuilders[style.builderType]; - }; - Legend.prototype.hotkeysBuilder = function ($element) { - var ysy = this.ysy; - $element.find(".hotkey_link").click(function () { - var modal = ysy.util.getModal("info-modal", "90%"); - modal.html(ysy.$container.find(".mindmup-hotkeys-source").html()); - showModal("info-modal"); - modal.dialog({ - buttons: [ - { - class: "button-2 button", - text: ysy.settings.labels.buttons.close, - click: function () { - modal.dialog("close") - } - } - ] - }); - }); - }; - Legend.prototype.draw = function () { - this.ysy.repainter.redrawMe(this); - }; - Legend.prototype._render = function () { - var ysy = this.ysy; - var self = this; - if (this.headerHidden) { - if (!this.lastHeaderHidden) { - this.$container.addClass("mindmup__legend-container--hidden"); - this.$headerToggle - .toggleClass("active", false) - .find("a").toggleClass("active", false); - this.lastHeaderHidden = true; - } - return; - } else { - if (this.lastHeaderHidden) { - this.$container.removeClass("mindmup__legend-container--hidden"); - this.$headerToggle - .find("a").toggleClass("active", true); - this.lastHeaderHidden = false; - } - } - this.$openToggle.toggleClass("active", this.opened); - if (!this.opened) { - this.$element.hide(); - return; - } - this.resize(); - this.$openToggle.toggleClass("active", this.opened); - var $element = this.$element.show(); - var setting = ysy.styles.setting; - var store = ysy.styles.getCurrentStyle(); - var itemElement; - var array = store.options(this.usedActive); - var itemBuilder = this.getItemBuilder(store) || _.noop; - var obj = { - active: this.usedActive ? "used" : "all", - filter: ysy.filter.isOn() - }; - var items = []; - for (var i = 0; i < this.otherBuilders.length; i++) { - var builder = this.itemBuilders[this.otherBuilders[i]]; - if (!builder) continue; - itemElement = builder.call(this.itemBuilders); - if (itemElement) items.push(itemElement); - } - obj.items = items; - for (i = 0; i < array.length; i++) { - itemElement = itemBuilder.call(this.itemBuilders, array[i], setting); - items.push(itemElement); - } - $element.html(Mustache.render(ysy.settings.templates.legendTemplate, obj)); - $element.find(".mindmup-legend__filter_cont").click(function () { - ysy.filter.reset(); - self.draw(); - }); - this.hotkeysBuilder($element); - }; - Legend.prototype.resize = function () { - if (!this.opened) return; - var height = window.innerHeight - || document.documentElement.clientHeight - || document.body.clientHeight; - var offset = this.$element.offset().top; - var scroll = $(document).scrollTop(); - this.$element.css("max-height", (height + scroll - offset - 25) + "px"); - }; - window.easyMindMupClasses.Legend = Legend; - //#################################################################################################################### - /** - * - * @param {MindMup} ysy - * @property {MindMup} ysy - * @property {Filter} filter - * @property {Object.<String,Style>} styles - * @property {String} projectLabel - * @constructor - */ - function LegendBuilders(ysy) { - this.ysy = ysy; - this.filter = ysy.filter; - this.styles = ysy.styles.styles; - this.projectLabel = ysy.settings.labels.types.project; - } - - LegendBuilders.prototype.assigneeTemplate = '\ - <div data-item_id="{{item.id}}" class="mindmup-legend-item-cont">\ - <div class="mindmup-legend-color-box{{banned}}{{scheme}}"></div>\ - {{#avatar}}\ - <img width="64" height="64" alt="{{item.name}}" class="gravatar" src="{{{avatarUrl}}}">\ - {{/avatar}}\ - {{item.name}}\ - </div>'; - LegendBuilders.prototype.percentTemplate = '<div data-item_id="{{percent}}" class="mindmup-legend-item-cont">\ - <div class="mindmup-legend-color-box{{banned}}{{scheme}}"></div>\ - {{percent}} %\ - </div>'; - LegendBuilders.prototype.dataBasedTemplate = '<div data-item_id="{{item.id}}" class="mindmup-legend-item-cont">\ - <div class="mindmup-legend-color-box{{banned}}{{scheme}}"></div>\ - {{item.name}}\ - </div>'; - LegendBuilders.prototype.projectTemplate = '<div data-item_id="project" class="mindmup-legend-item-cont">\ - <div class="mindmup-legend-color-box mindmup-scheme-project{{banned}}"></div>\ - {{label}}\ - </div>'; - - LegendBuilders.prototype.assignee = function assigneeBuilder(item, type) { - return Mustache.render(this.assigneeTemplate, { - item: item, - banned: this.filter.cssByBannedValue(item.id), - scheme: this.styles[type].addSchemeClass(item.id), - avatar: item.id !== 0, - avatarUrl: item.avatar_url ? item.avatar_url : "/plugin_assets/easy_extensions/images/avatar.jpg" - }); - }; - LegendBuilders.prototype.percent = function percentBuilder(item, type) { - return Mustache.render(this.percentTemplate, { - percent: item, - banned: this.filter.cssByBannedValue(item), - scheme: this.styles[type].addSchemeClass(item) - }); - }; - LegendBuilders.prototype.dataBased = function dataBasedBuilder(item, type) { - return Mustache.render(this.dataBasedTemplate, { - item: item, - banned: this.filter.cssByBannedValue(item.id), - scheme: this.styles[type].addSchemeClass(item.id) - }); - }; - LegendBuilders.prototype.project = function projectBuilder() { - return Mustache.render(this.projectTemplate, { - label: this.projectLabel, - banned: this.filter.cssByBannedValue("project") - }); - }; -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/legend_events.js b/plugins/easy_mindmup/assets/javascripts/legend_events.js deleted file mode 100644 index dcb9a4e..0000000 --- a/plugins/easy_mindmup/assets/javascripts/legend_events.js +++ /dev/null @@ -1,279 +0,0 @@ -/** - * Created by hosekp on 12/1/16. - */ -(function () { - /** - * - * @param {MindMup} ysy - * @property {MindMup} ysy - * @property {jQuery} $element - * @property {Legend} legend - * @constructor - */ - function LegendEvents(ysy) { - this.legend = ysy.legends; - this.$element = this.legend.$element; - this.ysy = ysy; - this.init(ysy); - this.possibleTargets = []; - } - - LegendEvents.prototype.maxDistanceToClick = 30; - LegendEvents.prototype.domain = "easy-mindmup-legend"; - LegendEvents.prototype.draggedSelector = ".mindmup-legend-item-cont:not([data-item_id='project'])"; - LegendEvents.prototype.filterSelector = ".mindmup-legend-item-cont[data-item_id='project']"; - LegendEvents.prototype.usedToggleSelector = ".mindmup-legend-used"; - LegendEvents.prototype.legendHeaderTogglerSelector = ".mindmup__legend-cont-toggler"; - LegendEvents.prototype.hoverClass = "mindmup-legend-drag-hover droppable"; - - /** - * @param {MindMup} ysy - */ - LegendEvents.prototype.init = function (ysy) { - var _self = this; - var legend = this.legend; - ysy.$menu.find(".mindmup__legend-trigger").on("click", function (e) { - legend.toggle(); - }); - ysy.$menu.find(this.legendHeaderTogglerSelector).on("click",function () { - legend.headerToggle(); - }); - this.$element - .off("click.legend-used") - .on("click.legend-used", this.usedToggleSelector, function () { - legend.usedActive = !legend.usedActive; - ysy.repainter.redrawMe(legend); - }) - .off("mousedown." + this.domain) - .on("mousedown." + this.domain, this.draggedSelector, function (e) { - _self.shiftKey = e.shiftKey; - if (e.target.parentElement.tagName === "A") { - _self.aTouched = true; - } - e.preventDefault(); - if (e.which === 3) { - return false; - // _self.actualX = e.pageX - window.scrollX; - // _self.actualY = e.pageY - window.scrollY; - // _self._contextMenu(); - } else { - _self.actualX = e.pageX - window.scrollX; - _self.actualY = e.pageY - window.scrollY; - _self.down($(this), e.pageX, e.pageY); - } - return false; - }) - .off("touchstart." + this.domain) - .on("touchstart." + this.domain, this.draggedSelector, function (e) { - e.preventDefault(); - var touch = e.originalEvent.touches[0]; - if (!touch) return false; - _self.actualX = touch.pageX - window.scrollX; - _self.actualY = touch.pageY - window.scrollY; - _self.down($(this), touch.pageX, touch.pageY); - return false; - }) - .off("touchend." + this.domain) - .on("touchend." + this.domain, function (e) { - e.preventDefault(); - _self.up(); - return false; - - }) - .off("touchmove." + this.domain) - .on("touchmove." + this.domain, this.draggedSelector, function (e) { - e.preventDefault(); - var touch = e.originalEvent.touches[0]; - if (!touch) return false; - _self.move(touch.pageX, touch.pageY); - return false; - }) - .off("click." + this.domain) - .on("click." + this.domain, this.filterSelector, function () { - ysy.util.showUpgradeModal("filtering"); - }); - ysy.eventBus.register('resize', $.proxy(legend.resize, legend)); - }; - /** - * main mouseDown function (handles also click events) - * @param {jQuery} $sourceElement - * @param {number} x - * @param {number} y - */ - LegendEvents.prototype.down = function ($sourceElement, x, y) { - this.maxDistance = 0; - this.stageOffset = this.ysy.$container.children("[data-mapjs-role=\"stage\"]").offset(); - this.startX = x - window.scrollX; - this.startY = y - window.scrollY; - // this.startTime = Date.now(); - this.actionActive = true; - var _self = this; - this.$sourceElement = $sourceElement; // window.easyView.root.dragStartOnDomain(this.domain, $draggedElement); - - // create overlay div - this.$overlay = $('<div class="mindmup-legend-drag-overlay">').css({ - width: window.innerWidth, - height: window.innerHeight - }); - var colorClass = this.$element[0].className.replace("mindmup-legend ", ""); - this.$overlay.addClass(colorClass); - $(document.body).append(this.$overlay); - - - this.$overlay.on("mouseup." + this.domain, function (e) { - e.preventDefault(); - _self.up(); - - }); - this.$overlay.on("mousemove." + this.domain, function (e) { - e.preventDefault(); - _self.move(e.pageX, e.pageY); - }); - }; - /** - * main mouseMove function - * @param {number} x - * @param {number} y - */ - LegendEvents.prototype.move = function (x, y) { - if (!this.actionActive) return; - - // if ((y - window.scrollY) < 80) { - // this.doScrollUp = true; - // this.doScroll(); - // } else { - // this.doScrollUp = false; - // } - // - // if ((window.innerHeight - y + window.scrollY) < 80) { - // this.doScrollDown = true; - // this.doScroll(); - // } else { - // this.doScrollDown = false; - // } - - this.actualX = x - window.scrollX; - this.actualY = y - window.scrollY; - if (this.moveDistance() > this.maxDistanceToClick && !this.avatar) { - this.avatar = new DragAvatar(this.ysy, this.$sourceElement); - this.changeObject = this.avatar.getChangeObject(); - if (!this.changeObject) return this.up(); - this.possibleTargets = this.findPossibleTargets(); - this.$overlay.append(this.avatar.$cont); - } - if (this.avatar) { - this.avatar.moveAvatar(this.actualX, this.actualY); - if (this.currentDropTarget) { - this.currentDropTarget.removeClass(this.hoverClass); - } - this.currentDropTarget = this.getCurrentTarget(x, y); - if (this.currentDropTarget) { - this.currentDropTarget.addClass(this.hoverClass); - } - } - }; - /** - * main mouseUp function - */ - LegendEvents.prototype.up = function () { - // this.doScrollDown = false; - // this.doScrollUp = false; - this.possibleTargets = null; - this.actionActive = false; - - if (this.moveDistance() < this.maxDistanceToClick) { - this.ysy.util.showUpgradeModal("filtering"); - } else { - this.ysy.util.showUpgradeModal("dnd_property"); - } - if (this.$overlay) { - if (this.avatar) { - this.avatar.destroy(); - } - this.avatar = null; - this.$overlay.remove(); - } - if (this.currentDropTarget) { - this.currentDropTarget.removeClass(this.hoverClass); - } - this.currentDropTarget = null; - }; - /** - * - * @return {Array.<jQuery>} - */ - LegendEvents.prototype.findPossibleTargets = function () { - var possibles = this.ysy.$container.find(".mapjs-node"); - var $possibles = []; - for (var i = 0; i < possibles.length; i++) { - $possibles.push($(possibles[i])); - } - return $possibles; - }; - /** - * - * @param {number} x - * @param {number} y - * @return {jQuery} - */ - LegendEvents.prototype.getCurrentTarget = function (x, y) { - var $possibles = this.possibleTargets; - for (var i = 0; i < $possibles.length; i++) { - var $possible = $possibles[i]; - var data = $possible.data(); - var transformedX = x - this.stageOffset.left; - if (transformedX < data.x) continue; - if (transformedX > data.x + data.width) continue; - var transformedY = y - this.stageOffset.top; - if (transformedY < data.y) continue; - if (transformedY > data.y + data.height) continue; - return $possible; - } - return null; - }; - LegendEvents.prototype.moveDistance = function () { - if (this.actualX == null) { - return 0; - } - var distance = Math.sqrt(Math.pow(this.actualX - this.startX, 2) + Math.pow(this.actualY - this.startY, 2)); - if (distance > this.maxDistance) { - this.maxDistance = distance; - } - return distance; - }; - - window.easyMindMupClasses.LegendEvents = LegendEvents; - //#################################################################################################################### - /** - * - * @param {MindMup} ysy - * @param {jQuery} $source - element with class ".mindmup-legend-item-cont", where dragging started - * @constructor - */ - function DragAvatar(ysy, $source) { - this.ysy = ysy; - this.init($source); - this.legendItemId = $source.data("item_id"); - } - - DragAvatar.prototype.init = function ($source) { - var $boxElement = $source.children(".mindmup-legend-color-box"); - var colorClass = $boxElement[0].className;//.replace("mindmup-legend-color-box ",""); - this.$cont = $('<div class="mindmup-legend-drag-avatar ' + colorClass + '"></div>'); - }; - /** - * moves avatar to chosen coordinates - * @param {number} x - * @param {number} y - */ - DragAvatar.prototype.moveAvatar = function (x, y) { - this.$cont.css({left: x, top: y}); - }; - DragAvatar.prototype.destroy = function () { - this.$cont.remove(); - }; - DragAvatar.prototype.getChangeObject = function () { - var store = this.ysy.styles.getCurrentStyle(); - return store.changeObject(this.legendItemId); - }; -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/libs.js b/plugins/easy_mindmup/assets/javascripts/libs.js deleted file mode 100644 index 52e166e..0000000 --- a/plugins/easy_mindmup/assets/javascripts/libs.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Mustache.js */ -(function defineMustache(global,factory){if(typeof exports==="object"&&exports&&typeof exports.nodeName!=="string"){factory(exports)}else if(typeof define==="function"&&define.amd){define(["exports"],factory)}else{global.Mustache={};factory(global.Mustache)}})(this,function mustacheFactory(mustache){var objectToString=Object.prototype.toString;var isArray=Array.isArray||function isArrayPolyfill(object){return objectToString.call(object)==="[object Array]"};function isFunction(object){return typeof object==="function"}function typeStr(obj){return isArray(obj)?"array":typeof obj}function escapeRegExp(string){return string.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function hasProperty(obj,propName){return obj!=null&&typeof obj==="object"&&propName in obj}var regExpTest=RegExp.prototype.test;function testRegExp(re,string){return regExpTest.call(re,string)}var nonSpaceRe=/\S/;function isWhitespace(string){return!testRegExp(nonSpaceRe,string)}var entityMap={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};function escapeHtml(string){return String(string).replace(/[&<>"'`=\/]/g,function fromEntityMap(s){return entityMap[s]})}var whiteRe=/\s*/;var spaceRe=/\s+/;var equalsRe=/\s*=/;var curlyRe=/\s*\}/;var tagRe=/#|\^|\/|>|\{|&|=|!/;function parseTemplate(template,tags){if(!template)return[];var sections=[];var tokens=[];var spaces=[];var hasTag=false;var nonSpace=false;function stripSpace(){if(hasTag&&!nonSpace){while(spaces.length)delete tokens[spaces.pop()]}else{spaces=[]}hasTag=false;nonSpace=false}var openingTagRe,closingTagRe,closingCurlyRe;function compileTags(tagsToCompile){if(typeof tagsToCompile==="string")tagsToCompile=tagsToCompile.split(spaceRe,2);if(!isArray(tagsToCompile)||tagsToCompile.length!==2)throw new Error("Invalid tags: "+tagsToCompile);openingTagRe=new RegExp(escapeRegExp(tagsToCompile[0])+"\\s*");closingTagRe=new RegExp("\\s*"+escapeRegExp(tagsToCompile[1]));closingCurlyRe=new RegExp("\\s*"+escapeRegExp("}"+tagsToCompile[1]))}compileTags(tags||mustache.tags);var scanner=new Scanner(template);var start,type,value,chr,token,openSection;while(!scanner.eos()){start=scanner.pos;value=scanner.scanUntil(openingTagRe);if(value){for(var i=0,valueLength=value.length;i<valueLength;++i){chr=value.charAt(i);if(isWhitespace(chr)){spaces.push(tokens.length)}else{nonSpace=true}tokens.push(["text",chr,start,start+1]);start+=1;if(chr==="\n")stripSpace()}}if(!scanner.scan(openingTagRe))break;hasTag=true;type=scanner.scan(tagRe)||"name";scanner.scan(whiteRe);if(type==="="){value=scanner.scanUntil(equalsRe);scanner.scan(equalsRe);scanner.scanUntil(closingTagRe)}else if(type==="{"){value=scanner.scanUntil(closingCurlyRe);scanner.scan(curlyRe);scanner.scanUntil(closingTagRe);type="&"}else{value=scanner.scanUntil(closingTagRe)}if(!scanner.scan(closingTagRe))throw new Error("Unclosed tag at "+scanner.pos);token=[type,value,start,scanner.pos];tokens.push(token);if(type==="#"||type==="^"){sections.push(token)}else if(type==="/"){openSection=sections.pop();if(!openSection)throw new Error('Unopened section "'+value+'" at '+start);if(openSection[1]!==value)throw new Error('Unclosed section "'+openSection[1]+'" at '+start)}else if(type==="name"||type==="{"||type==="&"){nonSpace=true}else if(type==="="){compileTags(value)}}openSection=sections.pop();if(openSection)throw new Error('Unclosed section "'+openSection[1]+'" at '+scanner.pos);return nestTokens(squashTokens(tokens))}function squashTokens(tokens){var squashedTokens=[];var token,lastToken;for(var i=0,numTokens=tokens.length;i<numTokens;++i){token=tokens[i];if(token){if(token[0]==="text"&&lastToken&&lastToken[0]==="text"){lastToken[1]+=token[1];lastToken[3]=token[3]}else{squashedTokens.push(token);lastToken=token}}}return squashedTokens}function nestTokens(tokens){var nestedTokens=[];var collector=nestedTokens;var sections=[];var token,section;for(var i=0,numTokens=tokens.length;i<numTokens;++i){token=tokens[i];switch(token[0]){case"#":case"^":collector.push(token);sections.push(token);collector=token[4]=[];break;case"/":section=sections.pop();section[5]=token[2];collector=sections.length>0?sections[sections.length-1][4]:nestedTokens;break;default:collector.push(token)}}return nestedTokens}function Scanner(string){this.string=string;this.tail=string;this.pos=0}Scanner.prototype.eos=function eos(){return this.tail===""};Scanner.prototype.scan=function scan(re){var match=this.tail.match(re);if(!match||match.index!==0)return"";var string=match[0];this.tail=this.tail.substring(string.length);this.pos+=string.length;return string};Scanner.prototype.scanUntil=function scanUntil(re){var index=this.tail.search(re),match;switch(index){case-1:match=this.tail;this.tail="";break;case 0:match="";break;default:match=this.tail.substring(0,index);this.tail=this.tail.substring(index)}this.pos+=match.length;return match};function Context(view,parentContext){this.view=view;this.cache={".":this.view};this.parent=parentContext}Context.prototype.push=function push(view){return new Context(view,this)};Context.prototype.lookup=function lookup(name){var cache=this.cache;var value;if(cache.hasOwnProperty(name)){value=cache[name]}else{var context=this,names,index,lookupHit=false;while(context){if(name.indexOf(".")>0){value=context.view;names=name.split(".");index=0;while(value!=null&&index<names.length){if(index===names.length-1)lookupHit=hasProperty(value,names[index]);value=value[names[index++]]}}else{value=context.view[name];lookupHit=hasProperty(context.view,name)}if(lookupHit)break;context=context.parent}cache[name]=value}if(isFunction(value))value=value.call(this.view);return value};function Writer(){this.cache={}}Writer.prototype.clearCache=function clearCache(){this.cache={}};Writer.prototype.parse=function parse(template,tags){var cache=this.cache;var tokens=cache[template];if(tokens==null)tokens=cache[template]=parseTemplate(template,tags);return tokens};Writer.prototype.render=function render(template,view,partials){var tokens=this.parse(template);var context=view instanceof Context?view:new Context(view);return this.renderTokens(tokens,context,partials,template)};Writer.prototype.renderTokens=function renderTokens(tokens,context,partials,originalTemplate){var buffer="";var token,symbol,value;for(var i=0,numTokens=tokens.length;i<numTokens;++i){value=undefined;token=tokens[i];symbol=token[0];if(symbol==="#")value=this.renderSection(token,context,partials,originalTemplate);else if(symbol==="^")value=this.renderInverted(token,context,partials,originalTemplate);else if(symbol===">")value=this.renderPartial(token,context,partials,originalTemplate);else if(symbol==="&")value=this.unescapedValue(token,context);else if(symbol==="name")value=this.escapedValue(token,context);else if(symbol==="text")value=this.rawValue(token);if(value!==undefined)buffer+=value}return buffer};Writer.prototype.renderSection=function renderSection(token,context,partials,originalTemplate){var self=this;var buffer="";var value=context.lookup(token[1]);function subRender(template){return self.render(template,context,partials)}if(!value)return;if(isArray(value)){for(var j=0,valueLength=value.length;j<valueLength;++j){buffer+=this.renderTokens(token[4],context.push(value[j]),partials,originalTemplate)}}else if(typeof value==="object"||typeof value==="string"||typeof value==="number"){buffer+=this.renderTokens(token[4],context.push(value),partials,originalTemplate)}else if(isFunction(value)){if(typeof originalTemplate!=="string")throw new Error("Cannot use higher-order sections without the original template");value=value.call(context.view,originalTemplate.slice(token[3],token[5]),subRender);if(value!=null)buffer+=value}else{buffer+=this.renderTokens(token[4],context,partials,originalTemplate)}return buffer};Writer.prototype.renderInverted=function renderInverted(token,context,partials,originalTemplate){var value=context.lookup(token[1]);if(!value||isArray(value)&&value.length===0)return this.renderTokens(token[4],context,partials,originalTemplate)};Writer.prototype.renderPartial=function renderPartial(token,context,partials){if(!partials)return;var value=isFunction(partials)?partials(token[1]):partials[token[1]];if(value!=null)return this.renderTokens(this.parse(value),context,partials,value)};Writer.prototype.unescapedValue=function unescapedValue(token,context){var value=context.lookup(token[1]);if(value!=null)return value};Writer.prototype.escapedValue=function escapedValue(token,context){var value=context.lookup(token[1]);if(value!=null)return mustache.escape(value)};Writer.prototype.rawValue=function rawValue(token){return token[1]};mustache.name="mustache.js";mustache.version="2.2.1";mustache.tags=["{{","}}"];var defaultWriter=new Writer;mustache.clearCache=function clearCache(){return defaultWriter.clearCache()};mustache.parse=function parse(template,tags){return defaultWriter.parse(template,tags)};mustache.render=function render(template,view,partials){if(typeof template!=="string"){throw new TypeError('Invalid template! Template should be a "string" '+'but "'+typeStr(template)+'" was given as the first '+"argument for mustache#render(template, view, partials)")}return defaultWriter.render(template,view,partials)};mustache.to_html=function to_html(template,view,partials,send){var result=mustache.render(template,view,partials);if(isFunction(send)){send(result)}else{return result}};mustache.escape=escapeHtml;mustache.Scanner=Scanner;mustache.Context=Context;mustache.Writer=Writer}); \ No newline at end of file diff --git a/plugins/easy_mindmup/assets/javascripts/link_edit_widget.js b/plugins/easy_mindmup/assets/javascripts/link_edit_widget.js deleted file mode 100644 index 75fea73..0000000 --- a/plugins/easy_mindmup/assets/javascripts/link_edit_widget.js +++ /dev/null @@ -1,70 +0,0 @@ -(function () { - /** - * Class for handle of link edit modal - * @param {MindMup} ysy - * @constructor - */ - function LinkEdit(ysy) { - this.ysy = ysy; - this.init(ysy); - } - - /** - * - * @param {MindMup} ysy - */ - LinkEdit.prototype.init = function (ysy) { - var self = this; - ysy.eventBus.register("MapInited", function (mapModel) { - self._prepareWidget(mapModel); - }); - }; - /** @private */ - LinkEdit.prototype._prepareWidget = function (mapModel) { - /** @type {MindMup} */ - var ysy = this.ysy; - /** @type {jQuery} */ - var element = ysy.$container.find('.link-edit-widget');//.linkEditWidget(mapModel); - element.hide(); - var currentLink, width, height;//, colorElement, lineStyleElement, arrowElement; - var typeElement; - // colorElement = element.find('.color'); - // lineStyleElement = element.find('.lineStyle'); - // arrowElement = element.find('.arrow'); - typeElement = element.find('.link-edit-type-actual'); - mapModel.addEventListener('linkSelected', function (link, selectionPoint) { - currentLink = link; - typeElement.text(ysy.settings.labels.links[link.attr.data.type]); - element.show(); - var cont_off = ysy.$container.offset(); - width = width || element.width(); - height = height || element.height(); - element.css({ - top: (selectionPoint.y - cont_off.top - 5) + 'px', - left: (selectionPoint.x - cont_off.left - 5) + 'px' - }); - // colorElement.val(linkStyle.color).change(); - // lineStyleElement.val(linkStyle.lineStyle); - // arrowElement[linkStyle.arrow ? 'addClass' : 'removeClass']('active'); - }); - mapModel.addEventListener('mapMoveRequested', function () { - element.hide(); - }); - element.find('.delete').click(function () { - mapModel.removeLink('mouse', currentLink.ideaIdFrom, currentLink.ideaIdTo); - element.hide(); - }); - // colorElement.change(function () { - // mapModel.updateLinkStyle('mouse', currentLink.ideaIdFrom, currentLink.ideaIdTo, 'color', jQuery(this).val()); - // }); - // lineStyleElement.find('a').click(function () { - // mapModel.updateLinkStyle('mouse', currentLink.ideaIdFrom, currentLink.ideaIdTo, 'lineStyle', jQuery(this).text()); - // }); - // arrowElement.click(function () { - // mapModel.updateLinkStyle('mouse', currentLink.ideaIdFrom, currentLink.ideaIdTo, 'arrow', !arrowElement.hasClass('active')); - // }); - element.mouseleave(element.hide.bind(element)); - }; - - window.easyMindMupClasses.LinkEdit = LinkEdit; -})(); \ No newline at end of file diff --git a/plugins/easy_mindmup/assets/javascripts/links.js b/plugins/easy_mindmup/assets/javascripts/links.js deleted file mode 100644 index 953c7ff..0000000 --- a/plugins/easy_mindmup/assets/javascripts/links.js +++ /dev/null @@ -1,198 +0,0 @@ -(function () { - /** - * - * @param {MindMup} ysy - * @constructor - */ - function Links(ysy) { - this.ysy = ysy; - this.linkArray=[]; - this.disabled = false; - this.showLinks = false; - } - - Links.prototype.commonLinkStyle = { - "color": "#0000FF", - "lineStyle": "dashed", - "arrow": false - }; - Links.prototype.precedesLinkStyle = { - "color": "#00FF00", - "lineStyle": "solid", - "arrow": true - }; - /** - * - * @param data - * @param {Array} convertedEntities - * @return {Array} - */ - Links.prototype.convertRelations = function (data, convertedEntities) { - if (!data.relations){ - this.disabled=true; - return null; - } - var relations = data.relations; - var issueMap = {}; - for (var i = 1; i < convertedEntities.length; i++) { - var entity = convertedEntities[i]; - if (entity.attr.entityType!=="issue") continue; - issueMap[entity.attr.data.id] = entity; - } - var links = []; - for (i = 0; i < relations.length; i++) { - var relation = relations[i]; - var source = issueMap[relation.source_id]; - var target = issueMap[relation.target_id]; - if (!source || !target) continue; - var style = this.getLinkStyleFromType(relation.type); - var link = { - "ideaIdFrom": source.id, - "ideaIdTo": target.id, - "attr": { - "style": style, - "data": relation - } - }; - links.push(link); - } - return links; - }; - Links.prototype.getLinkStyleFromType = function (type) { - var style = this.commonLinkStyle; - if (type === "precedes" || type === "start_to_start" || type === "finish_to_finish" || type === "start_to_finish") { - style = this.precedesLinkStyle; - } - return $.extend({}, style); - }; - /** - * - * @param {RootIdea} idea - * @param {Array} links - */ - Links.prototype.attachLinks = function (idea, links) { - if(this.disabled) return; - this.linkArray = links; - idea.links = null; - if (this.showLinks) - idea.links = links; - }; - - - Links.prototype.outerPath = function (parent, child) { - 'use strict'; - var xControl = 125; - var leftRightXControl = 250; - var yControl = 75; - var parentIsLeft = parent.left < 0; - var childIsLeft = child.left < 0; - - var position = { - left: Math.min(parent.left, child.left), - top: Math.min(parent.top, child.top) - }; - position.width = Math.max(parent.left + parent.width, child.left + child.width, position.left + 1) - position.left; - position.height = Math.max(parent.top + parent.height, child.top + child.height, position.top + 1) - position.top; - - var parentMount = { - x: parent.left - position.left + (parentIsLeft ? 0 : parent.width), - y: parent.top - position.top + 0.5 * parent.height - }; - var childMount = { - x: child.left - position.left + (childIsLeft ? 0 : child.width), - y: child.top - position.top + 0.5 * child.height - }; - - if (parentIsLeft === childIsLeft && Math.abs(parentMount.y - childMount.y) > 50) { - // simpler quadratic bezier - var commonControl = { - y: (parentMount.y + childMount.y) / 2, - x: (Math.max(Math.abs(parentMount.x), Math.abs(childMount.x)) + xControl) * (parentIsLeft ? -1 : 1) - }; - return { - 'd': 'M' + Math.round(parentMount.x) + ',' + Math.round(parentMount.y) - + 'Q' + Math.round(commonControl.x) + ',' + Math.round(commonControl.y) + ',' + Math.round(childMount.x) + ',' + Math.round(childMount.y), - 'conn': { - from: {x: commonControl.x + position.left, y: commonControl.y + position.top}, - to: {x: childMount.x + position.left, y: childMount.y + position.top} - }, - 'position': position - } - } - if (parentIsLeft !== childIsLeft) { - xControl = leftRightXControl; - } - - var parentControl = { - x: parentMount.x + xControl * (parentIsLeft ? -1 : 1) - }; - var childControl = { - x: childMount.x + xControl * (childIsLeft ? -1 : 1) - }; - if (Math.abs(parentMount.y - childMount.y) < 50) { - parentControl.y = parentMount.y + yControl * (parentMount.y > -position.top ? 1 : -1); - childControl.y = childMount.y + yControl * (childMount.y > -position.top ? 1 : -1); - } else { - var diffY = childMount.y - parentMount.y; - parentControl.y = parentMount.y + diffY / 4; - childControl.y = childMount.y - diffY / 4; - } - return { - 'd': 'M' + Math.round(parentMount.x) + ',' + Math.round(parentMount.y) - + 'C' + Math.round(parentControl.x) + ',' + Math.round(parentControl.y) + ',' + Math.round(childControl.x) + ',' + Math.round(childControl.y) + ',' + Math.round(childMount.x) + ',' + Math.round(childMount.y), - 'conn': { - from: {x: childControl.x + position.left, y: childControl.y + position.top}, - to: {x: childMount.x + position.left, y: childMount.y + position.top} - }, - 'position': position - } - }; - window.easyMindMupClasses.Links = Links; - //#################################################################################################################### - /** - * - * @param {MindMup} ysy - * @param {jQuery} $parent - * @constructor - */ - function ShowLinksButton(ysy, $parent) { - this.ysy = ysy; - this.init(ysy, $parent); - } - - ShowLinksButton.prototype.id = "ShowLinksButton"; - - /** - * - * @param {MindMup} ysy - * @param {jQuery} $parent - * @return {ShowLinksButton} - */ - ShowLinksButton.prototype.init = function (ysy, $parent) { - this.$element = $parent.find(".show-links-toggler"); - /** @type {Links} */ - var linkClass = this.ysy.links; - this.$element.click($.proxy(function () { - linkClass.showLinks = !linkClass.showLinks; - if (linkClass.showLinks) { - ysy.idea.links = ysy.links.linkArray; - } else { - delete ysy.idea.links; - } - ysy.idea.dispatchEvent('changed'); - ysy.repainter.redrawMe(this); - }, this)); - return this; - }; - ShowLinksButton.prototype._render = function () { - /** @type {Links} */ - var linkClass = this.ysy.links; - if(linkClass.disabled){ - this.$element.hide(); - } - var isActive = linkClass.showLinks || false; - this.$element.find("a").toggleClass("active", isActive); - }; - - window.easyMindMupClasses.ShowLinksButton = ShowLinksButton; -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/loader.js b/plugins/easy_mindmup/assets/javascripts/loader.js deleted file mode 100644 index 58c9578..0000000 --- a/plugins/easy_mindmup/assets/javascripts/loader.js +++ /dev/null @@ -1,391 +0,0 @@ -(function () { - /** - * Class responsible for loading data from database and generating tree - * @param {MindMup} ysy - * @constructor - */ - function Loader(ysy) { - this.ysy = ysy; - // this.lastStateChecker = this.lastStateChecker || new window.easyMindMupClasses.LastStateChecker(ysy); - /** - * mindMup ID of rootNode - usually 1 - * @type {number} - * @private - */ - this._rootId = 1; - } - - /** - * main load function - * beware - it is not sync or callback capable. Use "AfterLoad" event - * @return {Loader} - */ - Loader.prototype.load = function () { - // var self = this; - // var last = this.ysy.storage.lastState.getSavedIdea(); - // if (last) { - // var storedDeferred = this.openStoredModal(last); - // } - $.getJSON(this.ysy.settings.paths.data, $.proxy(this._handleData, this)); - // $.getJSON(this.ysy.settings.paths.data, function (rawData) { - // if (storedDeferred) { - // storedDeferred.done(function (type) { - // if (type === "server") { - // self._handleData(rawData); - // } else { - // self.ysy.storage.clear(); - // var data = self.extractData(rawData); - // self.loadSideData(data); - // var idea = MAPJS.content(last); - // self.ysy.storage.extra.save(idea); - // self.setIdea(idea); - // } - // }); - // return; - // } - // self._handleData(rawData); - // }); - return this; - }; - /** - * main data processor - * @param {Object} rawData - * @return {*} - */ - Loader.prototype._handleData = function (rawData) { - var data = this.extractData(rawData); - // this.sourceData = data; - this.loadSideData(data); - if (this.ysy.idea) { - return this._updateIdeaByData(this.ysy.idea, data); - } - this.ysy.storage.extra.positionExtract = data["layout"]; // position of all nodes - var convertedData = this.convertData(data); - var enhancedData = this.ysy.storage.extra.enhanceData(convertedData, convertedData[this._rootId]); - var links = this.ysy.links.convertRelations(data, enhancedData); - var rearranged = this.rearrangeData(enhancedData); - this.ysy.links.attachLinks(rearranged, links); - /** @type {RootIdea} */ - var initedData = MAPJS.content(rearranged); - // var diff = ysy.storage.lastState.compareIdea(initedData, 'server'); - // this.prepareLastStateMessages(diff, last, initedData); - this.ysy.storage.settings.load(initedData); - this.ysy.eventBus.fireEvent("IdeaConstructed", initedData); - this.setIdea(initedData); - }; - /** - * update data processor - * @param {RootIdea} idea - * @param {Object} data - * @return {*} - */ - Loader.prototype._updateIdeaByData = function (idea, data) { - var convertedData = this.convertData(data); - var enhancedData = this.ysy.storage.extra.enhanceData(convertedData, convertedData[this._rootId]); - var links = this.ysy.links.convertRelations(data, enhancedData); - var rearranged = this.rearrangeData(enhancedData, idea); - var initedData = MAPJS.content(rearranged); - idea.ideas = initedData.ideas; - idea.resetHistory(); - this.ysy.links.attachLinks(idea, links); - this.ysy.eventBus.fireEvent("IdeaConstructed", idea); - this.ysy.eventBus.fireEvent("TreeUpdated", idea); - this.ysy.fireChangedEvent("TreeUpdated", ""); - }; - /** - * extract Object containing actual data from container coming from server - * @abstract - * @param {Object} rawData - * @return {Object} data - * @example return rawData["easy_wbs_data"]; - */ - Loader.prototype.extractData = function (rawData) { - rawData.cosi = true; - throw "extractData is not defined"; - }; - /** - * load additional data from JSON such as arrays containing trackers, users, etc. - * @abstract - * @param {Object} data - */ - Loader.prototype.loadSideData = function (data) { - data.dom = true; - throw "loadSideData is not defined"; - // if (!data) return; - // ysy.data.trackers = data.trackers; - // ysy.proManager.fireEvent("dataFilled", "trackers", ysy.data.trackers); - }; - Loader.prototype.convertData = function (data) { - var projectsSource = data["projects"]; - var issuesSource = data["issues"]; - var convertedEntities = [{}]; - var groupedConverted = {root: null, project: {}, issue: {}}; - var i; - var projectGenerator = this.nodeGenerator("project", groupedConverted, convertedEntities); - for (i = 0; i < projectsSource.length; i++) { - var projectSource = projectsSource[i]; - if (projectSource.id === this.ysy.settings.rootID) { - this._rootId = convertedEntities.length; - } - projectSource.isProject = true; - projectGenerator(projectSource, projectSource.name, false); - } - var issueGenerator = this.nodeGenerator("issue", groupedConverted, convertedEntities); - for (i = 0; i < issuesSource.length; i++) { - var issueSource = issuesSource[i]; - issueGenerator(issueSource, issueSource.subject, !issueSource.filtered_out); - } - var root = new easyMindMupClasses.RootIdea(this.ysy).upgrade(convertedEntities[this._rootId]); - groupedConverted.root = root; - convertedEntities[this._rootId] = root; - groupedConverted[root.attr.entityType][this.ysy.settings.rootID] = root; - this.assignParents(convertedEntities, groupedConverted); - return convertedEntities; - }; - /** - * Prepare generator function for creating specific entity - * @param {String} entityType - * @param {Object} groupedConverted - * @param {Array} convertedList - * @return {Function} - */ - Loader.prototype.nodeGenerator = function (entityType, groupedConverted, convertedList) { - return function (source, name, editable) { - var entity = new window.easyMindMupClasses.ModelEntity().fromServer(convertedList.length, name, entityType, editable, source); - groupedConverted[entityType][source.id] = entity; - convertedList.push(entity); - }; - }; - /** - * @abstract - * @param {ModelEntity} entity - * @param {boolean} next - * @return {ParentPack} - */ - Loader.prototype.getParentFromSource = function (entity, next) { - // Override this - extract direct parent from entity - entity.title = next.toString(); - throw "getParentFromSource is not defined"; - // if (!next) { - // if (entityData.parent_issue_id) return new ParentPack("issue", entityData.parent_issue_id); - // if (entityData.parent_id) return new ParentPack("project", entityData.parent_id); - // if (entityData.project_id) return new ParentPack("project", entityData.project_id); - // } else { - // if (entityData.parent_issue_id) return new ParentPack("project", entityData.project_id); - // } - // return null; - }; - /** - * - * @param {Array.<ModelEntity>} convertedEntities - * @param {Object} grouped - */ - Loader.prototype.assignParents = function (convertedEntities, grouped) { - for (var id = 1; id < convertedEntities.length; id++) { - if (id === this._rootId) continue; - var entity = convertedEntities[id]; - var parentGroup = this.getParentFromSource(entity, false); - if (parentGroup !== null) { - var parent = grouped[parentGroup.type][parentGroup.id]; - if (!parent) { - parentGroup = this.getParentFromSource(entity, true); - if (parentGroup !== null) { - parent = grouped[parentGroup.type][parentGroup.id]; - } - } - } - if (parent) { - entity.parent = parent; - } else { - entity.parent = grouped.root; - } - } - }; - /** - * - * @param {Array.<ModelEntity>} convertedEntities - * @param {RootIdea} [oldIdea] - * @return {RootIdea} - */ - Loader.prototype.rearrangeData = function (convertedEntities, oldIdea) { - var detachedIssues = []; - var index = 0; - /** @type {ModelEntity} entity */ - var entity; - /** @type {ModelEntity} */ - var parent; - var entitiesToProcess; - if (oldIdea) { - var idLookup = {}; - for (var id = 1; id < convertedEntities.length; id++) { - if (id === this._rootId) continue; - entity = convertedEntities[id]; - idLookup[entity.attr.data.id] = entity; - } - this.rearrangeByIdea(oldIdea, convertedEntities[this._rootId], idLookup); - entitiesToProcess = Object.getOwnPropertyNames(idLookup).map(function (serverId) { - return idLookup[serverId]; - }); - } else { - entitiesToProcess = convertedEntities.slice(1); - } - - for (var i = 0; i < entitiesToProcess.length; i++) { - entity = entitiesToProcess[i]; - parent = entity.parent; - if (!parent) continue; - var parentIdeas = parent.ideas; - parent.nChild++; - if (entity.rank) { - if (parentIdeas[entity.rank]) { - detachedIssues.push(parentIdeas[entity.rank]) - } - parentIdeas[entity.rank] = entity; - delete entity.rank; - } else { - if (parent.id === this._rootId) { - index = parent.nChild % 2 === 0 ? -parent.nChild / 2 : parent.nChild / 2 + 0.5; - //console.log("index "+index + " nChild "+parent.nChild); - if (parentIdeas[index]) { - detachedIssues.push(entity); - } else { - parentIdeas[index] = entity; - } - } else { - if (parentIdeas[parent.nChild]) { - detachedIssues.push(entity); - } else { - parentIdeas[parent.nChild] = entity; - } - } - } - if (parent.id === this._rootId) { - var counter = 0; - index = 0; - while (detachedIssues.length > 0) { - counter++; - index = index > 0 ? index - counter : index + counter; - if (parentIdeas[index]) continue; - parentIdeas[index] = detachedIssues.shift(); - } - } else { - index = 0; - while (detachedIssues.length > 0) { - index++; - if (parentIdeas[index]) continue; - parentIdeas[index] = detachedIssues.shift(); - } - } - } - for (id = 1; id < convertedEntities.length; id++) { - entity = convertedEntities[id]; - delete entity.parent; - if (entity.attr.collapsed === undefined) { - if (id === this._rootId) continue; - if (entity.nChild) { - entity.attr.collapsed = true; - } - delete entity.nChild; - } - } - return /** @type {RootIdea}*/ convertedEntities[this._rootId]; - }; - /** - * - * @param {ModelEntity} oldIdea - * @param {ModelEntity} newIdea - * @param {Object.<string,ModelEntity>} idLookup - */ - Loader.prototype.rearrangeByIdea = function (oldIdea, newIdea, idLookup) { - if (!_.isEmpty(oldIdea.ideas)) { - var ranks = Object.getOwnPropertyNames(oldIdea.ideas); - var oldParentId = this.ysy.getData(oldIdea).id; - for (var i = 0; i < ranks.length; i++) { - var rank = ranks[i]; - var oldChild = oldIdea.ideas[rank]; - var oldChildId = this.ysy.getData(oldChild).id; - if (!oldChildId) continue; - var newChild = idLookup[oldChildId]; - if (!newChild) continue; - var newParentId = this.ysy.getData(newChild.parent).id; - if(oldParentId !== newParentId) continue; - if (!newIdea.ideas) { - newIdea.ideas = {}; - } - newIdea.ideas[rank] = newChild; - newIdea.nChild++; - this.rearrangeByIdea(oldChild, newChild, idLookup); - } - } - delete idLookup[newIdea.attr.data.id]; - }; - /** - * push generated idea into MindMup component - * @param {RootIdea} idea - */ - Loader.prototype.setIdea = function (idea) { - this.ysy.idea = idea; - this.ysy.mapModel.setIdea(idea); - this.ysy.eventBus.fireEvent("TreeLoaded", idea); - }; - // /** - // * - // * @param last - // // * @param {jQuery.Deferred} serverDeferred - // */ - // Loader.prototype.openStoredModal = function (last) { - // var $target = this.ysy.util.getModal("form-modal", "50%"); - // var self = this; - // var deferred = $.Deferred(); - // var template = self.ysy.settings.templates.storedModal; - // //var obj = $.extend({}, ysy.view.getLabel("reloadModal"),{errors:errors}); - // //var rendered = Mustache.render(template, {}); - // $target.html(template); - // var labels = {}; - // $target.find("button").each(function () { - // labels[this.id] = $(this).text(); - // }).remove(); - // showModal("form-modal"); - // $target.dialog({ - // buttons: [ - // { - // id: "stored_state_modal_local", - // text: labels["stored_state_modal_local"], - // class: "mindmup-stored-modal-button button-1", - // click: function () { - // deferred.resolve("local"); - // $target.dialog("close"); - // } - // }, - // { - // id: "stored_state_modal_server", - // text: labels["stored_state_modal_server"], - // class: "mindmup-stored-modal-button button-2", - // click: function () { - // $target.dialog("close"); - // } - // } - // ] - // }) - // .on('dialogclose', function () { - // deferred.resolve("server"); - // }); - // $("#last_state_modal_yes").focus(); - // return deferred; - // }; - - window.easyMindMupClasses.Loader = Loader; - //#################################################################################################################### - /** - * - * @param {String} entityType - * @param {number} id - * @constructor - */ - function ParentPack(entityType, id) { - this.type = entityType; - this.id = id; - } - - window.easyMindMupClasses.ParentPack = ParentPack; -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/logger.js b/plugins/easy_mindmup/assets/javascripts/logger.js deleted file mode 100644 index eebb98f..0000000 --- a/plugins/easy_mindmup/assets/javascripts/logger.js +++ /dev/null @@ -1,70 +0,0 @@ -(function () { - function Logger(ysy) { - this.logLevel = 2; - this.mainDebug = ""; - this.debugTypes = [ - // "keys", - // "diff", - // "send", - // "storage", - // "events", - // "changedEvent", - // "redraw", - // "history", - // "validator", - // "multisave", - // "autosave", - // "mm:drag", - "nothing" - ]; - } - - Logger.prototype.log = function (text) { - if (this.logLevel >= 4) { - this.print(text); - } - }; - Logger.prototype.message = function (text) { - if (this.logLevel >= 3) { - this.print(text); - } - }; - Logger.prototype.debug = function (text, type) { - if (type) { - if (this.mainDebug === type) { - this.print(text, "debug"); - return; - } - for (var i = 0; i < this.debugTypes.length; i++) { - if (this.debugTypes[i] === type) { - this.print(text, type === this.mainDebug ? "debug" : null); - return; - } - } - } else { - this.print(text, "debug"); - } - }; - Logger.prototype.warning = function (text) { - if (this.logLevel >= 2) { - this.print(text, "warning"); - } - }; - Logger.prototype.error = function (text) { - if (this.logLevel >= 1) { - this.print(text, "error"); - } - }; - Logger.prototype.print = function (text, type) { - if (type === "error") { - console.error(text); - } else if (type === "warning") { - console.warn(text); - } else if (type === "debug") { - console.debug(text); - } else { - console.log(text); - } - }; - easyMindMupClasses.Logger = Logger; -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/main.js b/plugins/easy_mindmup/assets/javascripts/main.js deleted file mode 100644 index db481e1..0000000 --- a/plugins/easy_mindmup/assets/javascripts/main.js +++ /dev/null @@ -1,266 +0,0 @@ -(function () { - function MindMup(settings) { - this.settings = settings; - this.id = settings.mindMupId || "mindMup"; - this.containerDiv = settings.containerDiv || "#container"; - this.menuDiv = settings.menuDiv || "#mindmup_menu"; - this.$container = $(this.containerDiv); - this.$menu = $(this.menuDiv); - MindMup.allMindMups[this.id] = this; - /** @type {boolean} */ - this.helperInited = false; - // this.init(); - } - - MindMup.allMindMups = {}; - MindMup.prototype.helperInit = function () { - this.helperInited = true; - var settings = this.settings; - if (settings.easyRedmine && $("#content").children(".easy-content-page").length === 0) { - $("#easy_wbs").addClass("easy-content-page"); - } - // $(this.containerDiv + " p.nodata").remove(); - - /** HelperClassInit PHASE */ - /** @type {Util} */ - this.util = new easyMindMupClasses.Util(this); - /** @type {EventBus} */ - this.eventBus = new easyMindMupClasses.EventBus(this); - /** @type {Logger} */ - this.log = new easyMindMupClasses.Logger(this); - /** @type {Repainter} */ - this.repainter = new easyMindMupClasses.Repainter(this); - }; - MindMup.prototype.init = function () { - if (!this.helperInited) { - this.helperInit(); - } - - /** PatchClassInit PHASE */ - this.eventBus.fireEvent("BeforePatchClassInit"); - /** @type {LayoutPatch} */ - this.layoutPatch = this.layoutPatch || new easyMindMupClasses.LayoutPatch(this); - /** @type {ContentPatch} */ - this.contentPatch = this.contentPatch || new easyMindMupClasses.ContentPatch(this); - /** @type {NodePatch} */ - this.nodePatch = this.nodePatch || new easyMindMupClasses.NodePatch(this); - /** @type {MapModelPatch} */ - this.mapModelPatch = this.mapModelPatch || new easyMindMupClasses.MapModelPatch(this); - - /** DataClassInit PHASE */ - this.eventBus.fireEvent("BeforeDataClassInit"); - /** @type {DomPatch} */ - this.domPatch = this.domPatch || new easyMindMupClasses.DomPatch(this); - /** @type {AfterChange} */ - this.afterChange = this.afterChange || new easyMindMupClasses.AfterChange(this); - /** @type {Storage} */ - this.storage = this.storage || new easyMindMupClasses.Storage(this); - /** @type {History} */ - this.history = this.history || new easyMindMupClasses.History(this); - /** @type {Validator} */ - this.validator = this.validator || new easyMindMupClasses.Validator(this); - /** @type {Links} */ - this.links = this.links || new easyMindMupClasses.Links(this); - /** @type {DataStorage} */ - this.dataStorage = this.dataStorage || new easyMindMupClasses.DataStorage(this); - - /** ViewClassInit PHASE */ - this.eventBus.fireEvent("BeforeViewClassInit"); - /** @type {MMInitiator} */ - this.mmInitiator = this.mmInitiator || new easyMindMupClasses.MMInitiator(this); - /** @type {Filter} */ - this.filter = this.filter || new easyMindMupClasses.Filter(this); - /** @type {Styles} */ - this.styles = this.styles || new easyMindMupClasses.Styles(this); - /** @type {Legend} */ - this.legends = this.legends || new easyMindMupClasses.Legend(this); - /** @type {Toolbar} */ - this.toolbar = this.toolbar || new easyMindMupClasses.Toolbar(this); - /** @type {LinkEdit} */ - this.linksEdit = this.linksEdit || new easyMindMupClasses.LinkEdit(this); - /** @type {Print} */ - this.print = this.print || new easyMindMupClasses.Print(this); - /** @type {ContextMenu} */ - this.contextMenu = this.contextMenu || new easyMindMupClasses.ContextMenu(this); - /** @type {LegendEvents} */ - this.legendEvents = this.legendEvents || new easyMindMupClasses.LegendEvents(this); - - /** ServerClassInit PHASE */ - this.eventBus.fireEvent("BeforeServerClassInit"); - /** @type {Loader} */ - this.loader = this.loader || new easyMindMupClasses.Loader(this); - /** @type {Saver} */ - this.saver = this.saver || new easyMindMupClasses.Saver(this); - /** @type {Autosave} */ - this.autosave = this.autosave || new easyMindMupClasses.Autosave(this); - /** @type {SaveProgress} */ - this.saveProgress = this.saveProgress || new easyMindMupClasses.SaveProgress(this); - /** @type {SaveInfo} */ - this.saveInfo = this.saveInfo || new easyMindMupClasses.SaveInfo(this); - - /** BeforeMapInit PHASE */ - this.eventBus.fireEvent("beforeMapInit"); - this.mmInitiator.init(this); // initialize MindMup component - - /** MapInited PHASE */ - this.eventBus.fireEvent("MapInited", this.mapModel); - this.repainter.start(); - this.loader.load(); - /** TreeLoaded PHASE (after load) */ - }; - MindMup.prototype.idea = null; - MindMup.prototype.mapModel = null; - /** - * entityType of primary entity to create by Add functions - * @type {String} - */ - MindMup.prototype.creatingEntity = null; - /** - * Get Node from Layout. Node is view counterpart of an idea - * @param {number} nodeId - * @return {ModelEntity} - very similar to ModelEntity, mainly [attr] property - */ - MindMup.prototype.getLayoutNode = function (nodeId) { - if (!this.mapModel) return null; - var layout = this.mapModel.getCurrentLayout(); - if (!layout) return null; - return layout.nodes[nodeId]; - }; - /** - * - * @param {ModelEntity} idea - * @return {ModelEntityData} - */ - MindMup.prototype.getData = function (idea) { - if (!idea) return null; - if (!idea.attr.data) idea.attr.data = new window.easyMindMupClasses.ModelEntityData; - return idea.attr.data; - }; - /** - * - * @param {ModelEntity} idea - * @param {Object|String} obj - * @param {boolean} [silent] - * @return {boolean} - */ - MindMup.prototype.setData = function (idea, obj, silent) { - if (!idea) return false; - if (!idea.attr.data) idea.attr.data = new window.easyMindMupClasses.ModelEntityData; - var data = idea.attr.data; - if (typeof(obj) === 'string') { - obj = JSON.parse(obj); - } - var props = Object.getOwnPropertyNames(obj); - var changed = false; - var rev = {}; - for (var i = 0; i < props.length; i++) { - var key = props[i]; - if (obj[key] !== data[key]) { - if (!data[key] && !obj[key]) continue; - if (!data._old) data._old = {}; - data._old[key] = data[key]; - rev[key] = data[key]; - data[key] = obj[key]; - if (this.afterChange[key + 'Func']) { - this.afterChange[key + 'Func'](idea, obj[key], data._old[key]); - } - changed = true; - } - } - if (changed && !silent) { - var self = this; - this.idea.logChange("setData", [idea, obj], function () { - self.setData(idea, rev, true); - }); - } - return changed; - }; - /** - * - * @param {ModelEntity} idea - * @param {Object|String} obj - should be with index of customField as key - * @param {boolean} [silent] - * @return {boolean} - */ - MindMup.prototype.setCustomData = function (idea, obj, silent) { - if (!idea) return false; - if (!idea.attr.data) idea.attr.data = new window.easyMindMupClasses.ModelEntityData; - var data = idea.attr.data; - var customFields = data.custom_fields; - if (typeof(obj) === 'string') { - obj = JSON.parse(obj); - } - var props = Object.getOwnPropertyNames(obj); - if (!customFields) { - data.custom_fields = customFields = []; - for (var k = 0; k < props.length; k++) { - customFields.push({"id": props[k], "value": obj[props[k]]}); - } - if (!silent) { - this.idea.logChange("initCustomData", [idea, obj], function () { - delete idea.attr.data.custom_fields; - }); - } - return true; - } - var changed = false; - var rev = {}; - for (var i = 0; i < props.length; i++) { - var stringId = props[i]; - var id = parseInt(stringId); - for (var j = 0; j < customFields.length; j++) { - var customField = customFields[j]; - if (customField.id !== id) continue; - if (obj[stringId] !== customField.value) { - if (!data._old) data._old = {}; - if (!data._old.custom_fields) data._old.custom_fields = {}; - data._old.custom_fields[j] = {value: customField.value}; - rev[stringId] = customField.value; - customField.value = obj[stringId]; - // if (this.afterChange['customFieldFunc']) { - // this.afterChange['customFieldFunc'](idea, obj[index], data._old.custom_fields[index]); - // } - changed = true; - } - break; - } - } - if (changed && !silent) { - var self = this; - this.idea.logChange("setCustomData", [idea, obj], function () { - self.setCustomData(idea, rev, true); - }) - } - return changed; - }; - /** - * @param {String} eventSubName - * @param {String} json - */ - MindMup.prototype.fireChangedEvent = function (eventSubName, json) { - if (!this.mapModel.getInputEnabled()) return; - this.idea.dispatchEvent('changed', eventSubName, json); - }; - /** - * @param {ModelEntity} idea - * @return {jQuery} - */ - MindMup.prototype.getNodeElement = function (idea) { - return this.$container.find("#node_" + idea.id); - }; - /** - * - * @param {*} idea - * @return {ModelEntity} - */ - MindMup.prototype.upgradeToModelEntity = function (idea) { - idea.__proto__ = window.easyMindMupClasses.ModelEntity.prototype; - idea.attr = new window.easyMindMupClasses.ModelEntityAttr().fromJson(idea.attr); - idea.attr.entityType = this.creatingEntity; - return idea; - }; - - window.easyMindMupClasses = window.easyMindMupClasses || {}; - window.easyMindMupClasses.MindMup = MindMup; -})(); - diff --git a/plugins/easy_mindmup/assets/javascripts/map_model_patch.js b/plugins/easy_mindmup/assets/javascripts/map_model_patch.js deleted file mode 100644 index 8f7a497..0000000 --- a/plugins/easy_mindmup/assets/javascripts/map_model_patch.js +++ /dev/null @@ -1,108 +0,0 @@ -/** - * Created by hosekp on 11/14/16. - */ -(function () { - /** - * Class responsible for modification of mapModel code - * @param {MindMup} ysy - */ - function MapModelPatch(ysy) { - this.ysy = ysy; - this.init(ysy); - this.selectPersist = new SelectionPersist(ysy); - } - - /** - * @param {MindMup} ysy - */ - MapModelPatch.prototype.init = function (ysy) { - var self = this; - ysy.eventBus.register("MapInited", function (mapModel) { - self.selectPersist.init(mapModel); - mapModel.getYsy = function () { - return ysy; - }; - mapModel.save = function (origin) { - ysy.saver.save(); - }; - /** - * Open new page with entity detail. - * Expect pathUrl with key [entityPage] and value [.../:entityID/...] - * @param {number|string} id - * @return {boolean} - */ - mapModel.followURL = function (id) { - if (id === 'toolbar') { - id = mapModel.getCurrentlySelectedIdeaId(); - } - /** @type {ModelEntity} */ - var idea = ysy.mapModel.findIdeaById(id); - var data = ysy.getData(idea); - if (!data.id) return false; - if(data.default_url){ - window.open(data.default_url); - } else{ - var templateUrl = ysy.settings.paths[idea.attr.entityType + "Page"]; - if (templateUrl === undefined) throw "entityPage URL is not defined"; - window.open(templateUrl.replace(":" + idea.attr.entityType + "ID", data.id)); - } - return true; - }; - mapModel.editNodeData = function (source) { - if (!mapModel.getEditingEnabled() || !mapModel.getInputEnabled()) { - return false; - } - ysy.eventBus.fireEvent('nodeEditDataRequested', mapModel.getCurrentlySelectedIdeaId()); - }; - mapModel.toggleOneSide = function (source) { - var idea = ysy.idea; - idea.oneSideOn = !idea.oneSideOn; - //idea.toggleOneSide(); - idea.dispatchEvent("changed"); - mapModel.dispatchEvent("saveSettings", idea); - }; - /** prevent scroll jumping after deselecting node while editing */ - mapModel.addEventListener('inputEnabledChanged', function (canInput, holdFocus) { - if (canInput && !holdFocus) { - // console.log("inputEnabledChanged without focus"); - mapModel.dispatchEvent('inputEnabledChanged', true, true); - return false; - } - }, 5); - - var oldResetView = mapModel.resetView; - mapModel.resetView = function (source) { - ysy.domPatch.resetRootPosition(); - oldResetView(source); - }; - }); - }; - window.easyMindMupClasses.MapModelPatch = MapModelPatch; - //#################################################################################################################### - /** - * - * @param {MindMup} ysy - * @constructor - */ - function SelectionPersist(ysy) { - this.ysy = ysy; - this.preLastSelectedNode = null; - this.lastSelectedNode = null; - } - - SelectionPersist.prototype.init = function (mapModel) { - var self = this; - var selectHandler = function (id, added) { - if (!added) return; - self.preLastSelectedNode = self.lastSelectedNode; - self.lastSelectedNode = id; - }; - var resetViewHandler = function () { - self.preLastSelectedNode = self.preLastSelectedNode || self.ysy.idea.id; - self.lastSelectedNode = self.preLastSelectedNode; - mapModel.selectNode(self.preLastSelectedNode); - }; - mapModel.addEventListener('nodeSelectionChanged', selectHandler); - mapModel.addEventListener('mapViewResetRequested', resetViewHandler, 5); - } -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/mapjs_init.js b/plugins/easy_mindmup/assets/javascripts/mapjs_init.js deleted file mode 100644 index e95a24f..0000000 --- a/plugins/easy_mindmup/assets/javascripts/mapjs_init.js +++ /dev/null @@ -1,92 +0,0 @@ -(function () { - /** - * Class responsible for initiation of MindMup mind map component - * @param {MindMup} ysy - * @constructor - */ - function MMInitiator(ysy) { - this.ysy = ysy; - } - - /** - * - * @param {MindMup} ysy - */ - MMInitiator.prototype.init = function (ysy) { - var imageInsertController = new MAPJS.ImageInsertController("http://localhost:4999?u="); - var mapModel = new MAPJS.MapModel(ysy.layoutPatch.layoutCalculator, []); - jQuery(ysy.$container).domMapWidget(console, mapModel, false, imageInsertController, undefined, ysy); - jQuery(ysy.$menu).mapToolbarWidget(mapModel, ysy); - MAPJS.DOMRender.stageMargin = {top: 50, left: 50, bottom: 50, right: 50}; - MAPJS.DOMRender.linkConnectorPath = ysy.links.outerPath; - MAPJS.DOMRender.nodeConnectorPath = ysy.domPatch.curvedPath; - ysy.mapModel = mapModel; - $(window).resize(function (event) { - ysy.eventBus.fireEvent("resize", event) - }); - // imageInsertController.addEventListener('imageInsertError', function (reason) { - // ysy.log.error('image insert error', reason); - // }); - }; - - window.easyMindMupClasses.MMInitiator = MMInitiator; -})(); - - -MAPJS.initAll = function (container) { - //jQuery.fn.attachmentEditorWidget = function (mapModel) { - // 'use strict'; - // return this.each(function () { - // var element = jQuery(this); - // mapModel.addEventListener('attachmentOpened', function (nodeId, attachment) { - // mapModel.setAttachment( - // 'attachmentEditorWidget', - // nodeId, { - // contentType: 'text/html', - // content: prompt('attachment', attachment && attachment.content) - // } - // ); - // }); - // }); - //}; - - - window.onerror = ysy.log.error; - // var container = jQuery('#container'), - //idea = MAPJS.content(test_tree()), - var imageInsertController = new MAPJS.ImageInsertController("http://localhost:4999?u="), - mapModel = new MAPJS.MapModel(MAPJS.DOMRender.layoutCalculator, []); - jQuery(container).domMapWidget(console, mapModel, false, imageInsertController, undefined, ysy); - jQuery('#wbs_menu').mapToolbarWidget(mapModel); - //jQuery('body').attachmentEditorWidget(mapModel); - //$("[data-mm-action='export-image']").click(function () { - // MAPJS.pngExport(idea).then(function (url) { - // window.open(url, '_blank'); - // }); - //}); - //mapModel.setIdea(idea); // < HOSEK - MAPJS.DOMRender.stageMargin = {top: 50, left: 50, bottom: 50, right: 50}; - MAPJS.DOMRender.linkConnectorPath = MAPJS.DOMRender.outerPath; - ysy.mapjs.mapModel = mapModel; - //jQuery('.arrow').click(function () { - // jQuery(this).toggleClass('active'); - //}); - imageInsertController.addEventListener('imageInsertError', function (reason) { - ysy.log.error('image insert error', reason); - }); - //container.on('drop', function (e) { - // var dataTransfer = e.originalEvent.dataTransfer; - // e.stopPropagation(); - // e.preventDefault(); - // if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) { - // var fileInfo = dataTransfer.files[0]; - // if (/\.mup$/.test(fileInfo.name)) { - // var oFReader = new FileReader(); - // oFReader.onload = function (oFREvent) { - // mapModel.setIdea(MAPJS.content(JSON.parse(oFREvent.target.result))); - // }; - // oFReader.readAsText(fileInfo, 'UTF-8'); - // } - // } - //}); -}; diff --git a/plugins/easy_mindmup/assets/javascripts/mindmup/clipboard.js b/plugins/easy_mindmup/assets/javascripts/mindmup/clipboard.js deleted file mode 100644 index 19f5a3b..0000000 --- a/plugins/easy_mindmup/assets/javascripts/mindmup/clipboard.js +++ /dev/null @@ -1,18 +0,0 @@ -/*global MAPJS*/ -MAPJS.MemoryClipboard = function () { - 'use strict'; - var self = this, - clone = function (something) { - if (!something) { - return undefined; - } - return JSON.parse(JSON.stringify(something)); - }, - contents; - self.get = function () { - return clone(contents); - }; - self.put = function (c) { - contents = clone(c); - }; -}; diff --git a/plugins/easy_mindmup/assets/javascripts/mindmup/content.js b/plugins/easy_mindmup/assets/javascripts/mindmup/content.js deleted file mode 100644 index d2eb7d1..0000000 --- a/plugins/easy_mindmup/assets/javascripts/mindmup/content.js +++ /dev/null @@ -1,979 +0,0 @@ -/*jslint eqeq: true, forin: true, nomen: true*/ -/*jshint unused:false, loopfunc:true */ -/*global _, MAPJS, observable*/ -MAPJS.content = function (contentAggregate, sessionKey) { - 'use strict'; - var cachedId, - invalidateIdCache = function () { - cachedId = undefined; - }, - maxId = function maxId(idea) { - idea = idea || contentAggregate; - if (!idea.ideas) { - return parseInt(idea.id, 10) || 0; - } - return _.reduce( - idea.ideas, - function (result, subidea) { - return Math.max(result, maxId(subidea)); - }, - parseInt(idea.id, 10) || 0 - ); - }, - nextId = function nextId(originSession) { - originSession = originSession || sessionKey; - if (!cachedId) { - cachedId = maxId(); - } - cachedId += 1; - if (originSession) { - return cachedId + '.' + originSession; - } - return cachedId; - }, - init = function (contentIdea, originSession) { - if (!contentIdea.id) { - contentIdea.id = nextId(originSession); - } else { - invalidateIdCache(); - } - if (contentIdea.ideas) { - _.each(contentIdea.ideas, function (value, key) { - contentIdea.ideas[parseFloat(key)] = init(value, originSession); - }); - } - if (!contentIdea.title) { - contentIdea.title = ''; - } - contentIdea.containsDirectChild = contentIdea.findChildRankById = function (childIdeaId) { - return parseFloat( - _.reduce( - contentIdea.ideas, - function (res, value, key) { - return value.id == childIdeaId ? key : res; - }, - undefined - ) - ); - }; - contentIdea.findSubIdeaById = function (childIdeaId) { - var myChild = _.find(contentIdea.ideas, function (idea) { - return idea.id == childIdeaId; - }); - return myChild || _.reduce(contentIdea.ideas, function (result, idea) { - return result || idea.findSubIdeaById(childIdeaId); - }, undefined); - }; - contentIdea.find = function (predicate) { - var current = predicate(contentIdea) ? [_.pick(contentIdea, 'id', 'title')] : []; - if (_.size(contentIdea.ideas) === 0) { - return current; - } - return _.reduce(contentIdea.ideas, function (result, idea) { - return _.union(result, idea.find(predicate)); - }, current); - }; - contentIdea.getAttr = function (name) { - if (contentIdea.attr && contentIdea.attr[name]) { - return _.clone(contentIdea.attr[name]); - } - return false; - }; - contentIdea.sortedSubIdeas = function () { - if (!contentIdea.ideas) { - return []; - } - var result = [], - childKeys = _.groupBy(_.map(_.keys(contentIdea.ideas), parseFloat), function (key) { - return key > 0; - }), - sortedChildKeys = _.sortBy(childKeys[true], Math.abs).concat(_.sortBy(childKeys[false], Math.abs)); - _.each(sortedChildKeys, function (key) { - result.push(contentIdea.ideas[key]); - }); - return result; - }; - contentIdea.traverse = function (iterator, postOrder) { - if (!postOrder) { - iterator(contentIdea); - } - _.each(contentIdea.sortedSubIdeas(), function (subIdea) { - subIdea.traverse(iterator, postOrder); - }); - if (postOrder) { - iterator(contentIdea); - } - }; - return contentIdea; - }, - maxKey = function (kvMap, sign) { - sign = sign || 1; - if (_.size(kvMap) === 0) { - return 0; - } - var currentKeys = _.keys(kvMap); - currentKeys.push(0); - /* ensure at least 0 is there for negative ranks */ - return _.max(_.map(currentKeys, parseFloat), function (x) { - return x * sign; - }); - }, - nextChildRank = function (parentIdea) { - var newRank, counts, childRankSign = 1; - if (parentIdea.id == contentAggregate.id) { - counts = _.countBy(parentIdea.ideas, function (v, k) { - return k < 0; - }); - if ((counts['true'] || 0) < counts['false']) { - childRankSign = -1; - } - } - newRank = maxKey(parentIdea.ideas, childRankSign) + childRankSign; - return newRank; - }, - appendSubIdea = function (parentIdea, subIdea) { - var rank; - parentIdea.ideas = parentIdea.ideas || {}; - rank = nextChildRank(parentIdea); - parentIdea.ideas[rank] = subIdea; - return rank; - }, - findIdeaById = function (ideaId) { - return contentAggregate.id == ideaId ? contentAggregate : contentAggregate.findSubIdeaById(ideaId); - }, - sameSideSiblingRanks = function (parentIdea, ideaRank) { - return _(_.map(_.keys(parentIdea.ideas), parseFloat)).reject(function (k) { - return k * ideaRank < 0; - }); - }, - sign = function (number) { - /* intentionally not returning 0 case, to help with split sorting into 2 groups */ - return number < 0 ? -1 : 1; - }, - eventStacks = {}, - redoStacks = {}, - isRedoInProgress = false, - batches = {}, - notifyChange = function (method, args, originSession) { - if (originSession) { - contentAggregate.dispatchEvent('changed', method, args, originSession); - } else { - contentAggregate.dispatchEvent('changed', method, args); - } - }, - appendChange = function (method, args, undofunc, originSession) { - var prev; - if (method === 'batch' || batches[originSession] || !eventStacks || !eventStacks[originSession] || eventStacks[originSession].length === 0) { - logChange(method, args, undofunc, originSession); - return; - } else { - prev = eventStacks[originSession].pop(); - if (prev.eventMethod === 'batch') { - eventStacks[originSession].push({ - eventMethod: 'batch', - eventArgs: prev.eventArgs.concat([[method].concat(args)]), - undoFunction: function () { - undofunc(); - prev.undoFunction(); - } - }); - } else { - eventStacks[originSession].push({ - eventMethod: 'batch', - eventArgs: [[prev.eventMethod].concat(prev.eventArgs)].concat([[method].concat(args)]), - undoFunction: function () { - undofunc(); - prev.undoFunction(); - } - }); - } - } - if (isRedoInProgress) { - contentAggregate.dispatchEvent('changed', 'redo', undefined, originSession); - } else { - notifyChange(method, args, originSession); - redoStacks[originSession] = []; - } - }, - logChange = function (method, args, undofunc, originSession) { - var event = {eventMethod: method, eventArgs: args, undoFunction: undofunc}; - if (batches[originSession]) { - batches[originSession].push(event); - return; - } - if (!eventStacks[originSession]) { - eventStacks[originSession] = []; - } - eventStacks[originSession].push(event); - - if (isRedoInProgress) { - contentAggregate.dispatchEvent('changed', 'redo', undefined, originSession); - } else { - notifyChange(method, args, originSession); - redoStacks[originSession] = []; - } - }, - reorderChild = function (parentIdea, newRank, oldRank) { - parentIdea.ideas[newRank] = parentIdea.ideas[oldRank]; - delete parentIdea.ideas[oldRank]; - }, - upgrade = function (idea) { - if (idea.style) { - idea.attr = {}; - var collapsed = idea.style.collapsed; - delete idea.style.collapsed; - idea.attr.style = idea.style; - if (collapsed) { - idea.attr.collapsed = collapsed; - } - delete idea.style; - } - if (idea.ideas) { - _.each(idea.ideas, upgrade); - } - }, - sessionFromId = function (id) { - var dotIndex = String(id).indexOf('.'); - return dotIndex > 0 && id.substr(dotIndex + 1); - }, - commandProcessors = {}, - configuration = {}, - uniqueResourcePostfix = '/xxxxxxxx-yxxx-yxxx-yxxx-xxxxxxxxxxxx/'.replace(/[xy]/g, function (c) { - /*jshint bitwise: false*/ - // jscs:disable - var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8); - // jscs:enable - return v.toString(16); - }) + (sessionKey || ''), - updateAttr = function (object, attrName, attrValue) { - var oldAttr; - if (!object) { - return false; - } - oldAttr = _.extend({}, object.attr); - object.attr = _.extend({}, object.attr); - if (!attrValue || attrValue === 'false' || (_.isObject(attrValue) && _.isEmpty(attrValue))) { - if (!object.attr[attrName]) { - return false; - } - delete object.attr[attrName]; - } else { - if (_.isEqual(object.attr[attrName], attrValue)) { - return false; - } - object.attr[attrName] = JSON.parse(JSON.stringify(attrValue)); - } - if (_.size(object.attr) === 0) { - delete object.attr; - } - return function () { - object.attr = oldAttr; - }; - }; - - contentAggregate.logChange = logChange; - contentAggregate.setConfiguration = function (config) { - configuration = config || {}; - }; - contentAggregate.getSessionKey = function () { - return sessionKey; - }; - contentAggregate.nextSiblingId = function (subIdeaId) { - var parentIdea = contentAggregate.findParent(subIdeaId), - currentRank, - candidateSiblingRanks, - siblingsAfter; - if (!parentIdea) { - return false; - } - currentRank = parentIdea.findChildRankById(subIdeaId); - candidateSiblingRanks = sameSideSiblingRanks(parentIdea, currentRank); - siblingsAfter = _.reject(candidateSiblingRanks, function (k) { - return Math.abs(k) <= Math.abs(currentRank); - }); - if (siblingsAfter.length === 0) { - return false; - } - return parentIdea.ideas[_.min(siblingsAfter, Math.abs)].id; - }; - contentAggregate.sameSideSiblingIds = function (subIdeaId) { - var parentIdea = contentAggregate.findParent(subIdeaId), - currentRank = parentIdea.findChildRankById(subIdeaId); - return _.without(_.map(_.pick(parentIdea.ideas, sameSideSiblingRanks(parentIdea, currentRank)), function (i) { - return i.id; - }), subIdeaId); - }; - contentAggregate.getAttrById = function (ideaId, attrName) { - var idea = findIdeaById(ideaId); - return idea && idea.getAttr(attrName); - }; - contentAggregate.previousSiblingId = function (subIdeaId) { - var parentIdea = contentAggregate.findParent(subIdeaId), - currentRank, - candidateSiblingRanks, - siblingsBefore; - if (!parentIdea) { - return false; - } - currentRank = parentIdea.findChildRankById(subIdeaId); - candidateSiblingRanks = sameSideSiblingRanks(parentIdea, currentRank); - siblingsBefore = _.reject(candidateSiblingRanks, function (k) { - return Math.abs(k) >= Math.abs(currentRank); - }); - if (siblingsBefore.length === 0) { - return false; - } - return parentIdea.ideas[_.max(siblingsBefore, Math.abs)].id; - }; - contentAggregate.clone = function (subIdeaId) { - var toClone = (subIdeaId && subIdeaId != contentAggregate.id && contentAggregate.findSubIdeaById(subIdeaId)) || contentAggregate; - return JSON.parse(JSON.stringify(toClone)); - }; - contentAggregate.cloneMultiple = function (subIdeaIdArray) { - return _.map(subIdeaIdArray, contentAggregate.clone); - }; - contentAggregate.calculatePath = function (ideaId, currentPath, potentialParent) { - if (contentAggregate.id == ideaId) { - return []; - } - currentPath = currentPath || [contentAggregate]; - potentialParent = potentialParent || contentAggregate; - if (potentialParent.containsDirectChild(ideaId)) { - return currentPath; - } - return _.reduce( - potentialParent.ideas, - function (result, child) { - return result || contentAggregate.calculatePath(ideaId, [child].concat(currentPath), child); - }, - false - ); - }; - contentAggregate.getSubTreeIds = function (rootIdeaId) { - var result = [], - collectIds = function (idea) { - if (_.isEmpty(idea.ideas)) { - return []; - } - _.each(idea.sortedSubIdeas(), function (child) { - collectIds(child); - result.push(child.id); - }); - }; - collectIds(contentAggregate.findSubIdeaById(rootIdeaId) || contentAggregate); - return result; - }; - contentAggregate.findParent = function (subIdeaId, parentIdea) { - parentIdea = parentIdea || contentAggregate; - if (parentIdea.containsDirectChild(subIdeaId)) { - return parentIdea; - } - return _.reduce( - parentIdea.ideas, - function (result, child) { - return result || contentAggregate.findParent(subIdeaId, child); - }, - false - ); - }; - - /**** aggregate command processing methods ****/ - contentAggregate.getCommandProcessors = function () { - return commandProcessors; - }; - contentAggregate.startBatch = function (originSession) { - var activeSession = originSession || sessionKey; - contentAggregate.endBatch(originSession); - batches[activeSession] = []; - }; - contentAggregate.endBatch = function (originSession) { - var activeSession = originSession || sessionKey, - inBatch = batches[activeSession], - batchArgs, - batchUndoFunctions, - undo; - batches[activeSession] = undefined; - if (_.isEmpty(inBatch)) { - return; - } - if (_.size(inBatch) === 1) { - logChange(inBatch[0].eventMethod, inBatch[0].eventArgs, inBatch[0].undoFunction, activeSession); - } else { - batchArgs = _.map(inBatch, function (event) { - return [event.eventMethod].concat(event.eventArgs); - }); - batchUndoFunctions = _.sortBy( - _.map(inBatch, function (event) { - return event.undoFunction; - }), - function (f, idx) { - return -1 * idx; - } - ); - undo = function () { - _.each(batchUndoFunctions, function (eventUndo) { - eventUndo(); - }); - }; - logChange('batch', batchArgs, undo, activeSession); - } - }; - contentAggregate.execCommand = function (cmd, args, originSession) { - if (!commandProcessors[cmd]) { - return false; - } - return commandProcessors[cmd].apply(contentAggregate, [originSession || sessionKey].concat(_.toArray(args))); - }; - - contentAggregate.batch = function (batchOp) { - contentAggregate.startBatch(); - try { - batchOp(); - } - finally { - contentAggregate.endBatch(); - } - }; - - commandProcessors.batch = function (originSession) { - contentAggregate.startBatch(originSession); - try { - _.each(_.toArray(arguments).slice(1), function (event) { - contentAggregate.execCommand(event[0], event.slice(1), originSession); - }); - } - finally { - contentAggregate.endBatch(originSession); - } - }; - contentAggregate.pasteMultiple = function (parentIdeaId, jsonArrayToPaste) { - contentAggregate.startBatch(); - var results = _.map(jsonArrayToPaste, function (json) { - return contentAggregate.paste(parentIdeaId, json); - }); - contentAggregate.endBatch(); - return results; - }; - - contentAggregate.paste = function (parentIdeaId, jsonToPaste, initialId) { - return contentAggregate.execCommand('paste', arguments); - }; - commandProcessors.paste = function (originSession, parentIdeaId, jsonToPaste, initialId) { - var pasteParent = (parentIdeaId == contentAggregate.id) ? contentAggregate : contentAggregate.findSubIdeaById(parentIdeaId), - cleanUp = function (json) { - var result = _.omit(json, 'ideas', 'id', 'attr'), index = 1, childKeys, sortedChildKeys; - result.attr = _.omit(json.attr, configuration.nonClonedAttributes); - if (_.isEmpty(result.attr)) { - delete result.attr; - } - if (json.ideas) { - childKeys = _.groupBy(_.map(_.keys(json.ideas), parseFloat), function (key) { - return key > 0; - }); - sortedChildKeys = _.sortBy(childKeys[true], Math.abs).concat(_.sortBy(childKeys[false], Math.abs)); - result.ideas = {}; - _.each(sortedChildKeys, function (key) { - result.ideas[index++] = cleanUp(json.ideas[key]); - }); - } - return result; - }, - newIdea, - newRank, - oldPosition; - if (initialId) { - cachedId = parseInt(initialId, 10) - 1; - } - newIdea = jsonToPaste && (jsonToPaste.title || jsonToPaste.attr) && init(cleanUp(jsonToPaste), sessionFromId(initialId)); - if (!pasteParent || !newIdea) { - return false; - } - if (!contentAggregate.getYsy().validator.validate("paste", pasteParent, newIdea)) return false; - newRank = appendSubIdea(pasteParent, newIdea); - if (initialId) { - invalidateIdCache(); - } - updateAttr(newIdea, 'position'); - logChange('paste', [parentIdeaId, jsonToPaste, newIdea.id], function () { - delete pasteParent.ideas[newRank]; - }, originSession); - return newIdea.id; - }; - contentAggregate.flip = function (ideaId) { - return contentAggregate.execCommand('flip', arguments); - }; - commandProcessors.flip = function (originSession, ideaId) { - var newRank, maxRank, currentRank = contentAggregate.findChildRankById(ideaId); - if (!currentRank) { - return false; - } - maxRank = maxKey(contentAggregate.ideas, -1 * sign(currentRank)); - newRank = maxRank - 10 * sign(currentRank); - reorderChild(contentAggregate, newRank, currentRank); - logChange('flip', [ideaId], function () { - reorderChild(contentAggregate, currentRank, newRank); - }, originSession); - return true; - }; - contentAggregate.initialiseTitle = function (ideaId, title) { - return contentAggregate.execCommand('initialiseTitle', arguments); - }; - commandProcessors.initialiseTitle = function (originSession, ideaId, title) { - var idea = findIdeaById(ideaId), originalTitle; - if (!idea) { - return false; - } - originalTitle = idea.title; - if (originalTitle == title) { - return false; - } - idea.title = title; - appendChange('initialiseTitle', [ideaId, title], function () { - idea.title = originalTitle; - }, originSession); - return true; - }; - contentAggregate.updateTitle = function (ideaId, title) { - return contentAggregate.execCommand('updateTitle', arguments); - }; - commandProcessors.updateTitle = function (originSession, ideaId, title) { - var idea = findIdeaById(ideaId), originalTitle; - if (!idea) { - return false; - } - originalTitle = idea.title; - if (originalTitle == title) { - return false; - } - idea.title = title; - logChange('updateTitle', [ideaId, title], function () { - idea.title = originalTitle; - }, originSession); - return true; - }; - contentAggregate.addSubIdea = function (parentId, ideaTitle, optionalNewId) { - return contentAggregate.execCommand('addSubIdea', arguments); - }; - commandProcessors.addSubIdea = function (originSession, parentId, ideaTitle, optionalNewId) { - var idea, parent = findIdeaById(parentId), newRank; - if (!parent) { - return false; - } - if (optionalNewId && findIdeaById(optionalNewId)) { - return false; - } - idea = init({ - title: ideaTitle, - id: optionalNewId - }); - if (!contentAggregate.getYsy().validator.validate("addSubIdea", parent, idea)) return false; - newRank = appendSubIdea(parent, idea); - logChange('addSubIdea', [parentId, ideaTitle, idea.id], function () { - delete parent.ideas[newRank]; - }, originSession); - return idea.id; - }; - contentAggregate.removeMultiple = function (subIdeaIdArray) { - contentAggregate.startBatch(); - var results = _.map(subIdeaIdArray, contentAggregate.removeSubIdea); - contentAggregate.endBatch(); - return results; - }; - contentAggregate.removeSubIdea = function (subIdeaId) { - return contentAggregate.execCommand('removeSubIdea', arguments); - }; - commandProcessors.removeSubIdea = function (originSession, subIdeaId) { - if (!contentAggregate.getYsy().validator.validate("removeSubIdea", subIdeaId, originSession)) return false; - var parent = contentAggregate.findParent(subIdeaId), oldRank, oldIdea, oldLinks; - if (parent) { - oldRank = parent.findChildRankById(subIdeaId); - oldIdea = parent.ideas[oldRank]; - delete parent.ideas[oldRank]; - oldLinks = contentAggregate.links; - contentAggregate.links = _.reject(contentAggregate.links, function (link) { - return link.ideaIdFrom == subIdeaId || link.ideaIdTo == subIdeaId; - }); - logChange('removeSubIdea', [subIdeaId], function () { - parent.ideas[oldRank] = oldIdea; - contentAggregate.links = oldLinks; - }, originSession); - return true; - } - return false; - }; - contentAggregate.insertIntermediateMultiple = function (idArray) { - contentAggregate.startBatch(); - var newId = contentAggregate.insertIntermediate(idArray[0]); - _.each(idArray.slice(1), function (id) { - contentAggregate.changeParent(id, newId); - }); - contentAggregate.endBatch(); - return newId; - }; - contentAggregate.insertIntermediate = function (inFrontOfIdeaId, title, optionalNewId) { - return contentAggregate.execCommand('insertIntermediate', arguments); - }; - commandProcessors.insertIntermediate = function (originSession, inFrontOfIdeaId, title, optionalNewId) { - if (contentAggregate.id == inFrontOfIdeaId) { - return false; - } - var childRank, oldIdea, newIdea, parentIdea = contentAggregate.findParent(inFrontOfIdeaId); - if (!parentIdea) { - return false; - } - if (optionalNewId && findIdeaById(optionalNewId)) { - return false; - } - childRank = parentIdea.findChildRankById(inFrontOfIdeaId); - if (!childRank) { - return false; - } - oldIdea = parentIdea.ideas[childRank]; - newIdea = init({ - title: title, - id: optionalNewId - }); - if (!contentAggregate.getYsy().validator.validate("insertIntermediate", parentIdea, oldIdea, newIdea)) return false; - parentIdea.ideas[childRank] = newIdea; - newIdea.ideas = { - 1: oldIdea - }; - logChange('insertIntermediate', [inFrontOfIdeaId, title, newIdea.id], function () { - parentIdea.ideas[childRank] = oldIdea; - }, originSession); - return newIdea.id; - }; - contentAggregate.changeParent = function (ideaId, newParentId) { - return contentAggregate.execCommand('changeParent', arguments); - }; - commandProcessors.changeParent = function (originSession, ideaId, newParentId) { - var oldParent, oldRank, newRank, idea, parent = findIdeaById(newParentId), oldPosition; - if (ideaId == newParentId) { - return false; - } - if (!parent) { - return false; - } - idea = contentAggregate.findSubIdeaById(ideaId); - if (!idea) { - return false; - } - if (idea.findSubIdeaById(newParentId)) { - return false; - } - if (parent.containsDirectChild(ideaId)) { - return false; - } - if (!contentAggregate.getYsy().validator.changeParent(idea, parent)) return false; - oldParent = contentAggregate.findParent(ideaId); - if (!oldParent) { - return false; - } - oldRank = oldParent.findChildRankById(ideaId); - newRank = appendSubIdea(parent, idea); - oldPosition = idea.getAttr('position'); - updateAttr(idea, 'position'); - delete oldParent.ideas[oldRank]; - logChange('changeParent', [ideaId, newParentId, oldParent.id], function () { - updateAttr(idea, 'position', oldPosition); - oldParent.ideas[oldRank] = idea; - delete parent.ideas[newRank]; - }, originSession); - return true; - }; - contentAggregate.mergeAttrProperty = function (ideaId, attrName, attrPropertyName, attrPropertyValue) { - var val = contentAggregate.getAttrById(ideaId, attrName) || {}; - if (attrPropertyValue) { - val[attrPropertyName] = attrPropertyValue; - } else { - delete val[attrPropertyName]; - } - if (_.isEmpty(val)) { - val = false; - } - return contentAggregate.updateAttr(ideaId, attrName, val); - }; - contentAggregate.updateAttr = function (ideaId, attrName, attrValue) { - return contentAggregate.execCommand('updateAttr', arguments); - }; - commandProcessors.updateAttr = function (originSession, ideaId, attrName, attrValue) { - var idea = findIdeaById(ideaId), undoAction; - undoAction = updateAttr(idea, attrName, attrValue); - if (undoAction) { - logChange('updateAttr', [ideaId, attrName, attrValue], undoAction, originSession); - } - return !!undoAction; - }; - contentAggregate.moveRelative = function (ideaId, relativeMovement) { - var parentIdea = contentAggregate.findParent(ideaId), - currentRank = parentIdea && parentIdea.findChildRankById(ideaId), - siblingRanks = currentRank && _.sortBy(sameSideSiblingRanks(parentIdea, currentRank), Math.abs), - currentIndex = siblingRanks && siblingRanks.indexOf(currentRank), - /* we call positionBefore, so movement down is actually 2 spaces, not 1 */ - newIndex = currentIndex + (relativeMovement > 0 ? relativeMovement + 1 : relativeMovement), - beforeSibling = (newIndex >= 0) && parentIdea && siblingRanks && parentIdea.ideas[siblingRanks[newIndex]]; - if (newIndex < 0 || !parentIdea) { - return false; - } - return contentAggregate.positionBefore(ideaId, beforeSibling && beforeSibling.id, parentIdea); - }; - contentAggregate.positionBefore = function (ideaId, positionBeforeIdeaId, parentIdea) { - return contentAggregate.execCommand('positionBefore', arguments); - }; - commandProcessors.positionBefore = function (originSession, ideaId, positionBeforeIdeaId, parentIdea) { - parentIdea = parentIdea || contentAggregate; - var newRank, afterRank, siblingRanks, candidateSiblings, beforeRank, maxRank, currentRank; - currentRank = parentIdea.findChildRankById(ideaId); - if (!currentRank) { - return _.reduce( - parentIdea.ideas, - function (result, idea) { - return result || commandProcessors.positionBefore(originSession, ideaId, positionBeforeIdeaId, idea); - }, - false - ); - } - if (ideaId == positionBeforeIdeaId) { - return false; - } - newRank = 0; - if (positionBeforeIdeaId) { - afterRank = parentIdea.findChildRankById(positionBeforeIdeaId); - if (!afterRank) { - return false; - } - siblingRanks = sameSideSiblingRanks(parentIdea, currentRank); - candidateSiblings = _.reject(_.sortBy(siblingRanks, Math.abs), function (k) { - return Math.abs(k) >= Math.abs(afterRank); - }); - beforeRank = candidateSiblings.length > 0 ? _.max(candidateSiblings, Math.abs) : 0; - if (beforeRank == currentRank) { - return false; - } - newRank = beforeRank + (afterRank - beforeRank) / 2; - } else { - maxRank = maxKey(parentIdea.ideas, currentRank < 0 ? -1 : 1); - if (maxRank == currentRank) { - return false; - } - newRank = maxRank + 10 * (currentRank < 0 ? -1 : 1); - } - if (newRank == currentRank) { - return false; - } - reorderChild(parentIdea, newRank, currentRank); - logChange('positionBefore', [ideaId, positionBeforeIdeaId], function () { - reorderChild(parentIdea, currentRank, newRank); - }, originSession); - return true; - }; - observable(contentAggregate); - (function () { - var isLinkValid = function (ideaIdFrom, ideaIdTo) { - var isParentChild, ideaFrom, ideaTo; - if (ideaIdFrom === ideaIdTo) { - return false; - } - ideaFrom = findIdeaById(ideaIdFrom); - if (!ideaFrom) { - return false; - } - ideaTo = findIdeaById(ideaIdTo); - if (!ideaTo) { - return false; - } - isParentChild = _.find( - ideaFrom.ideas, - function (node) { - return node.id === ideaIdTo; - } - ) || _.find( - ideaTo.ideas, - function (node) { - return node.id === ideaIdFrom; - } - ); - if (isParentChild) { - return false; - } - return true; - }; - contentAggregate.addLink = function (ideaIdFrom, ideaIdTo) { - return contentAggregate.execCommand('addLink', arguments); - }; - commandProcessors.addLink = function (originSession, ideaIdFrom, ideaIdTo) { - var alreadyExists, link; - if (!isLinkValid(ideaIdFrom, ideaIdTo)) { - return false; - } - alreadyExists = _.find( - contentAggregate.links, - function (link) { - return (link.ideaIdFrom === ideaIdFrom && link.ideaIdTo === ideaIdTo) || (link.ideaIdFrom === ideaIdTo && link.ideaIdTo === ideaIdFrom); - } - ); - if (alreadyExists) { - return false; - } - contentAggregate.links = contentAggregate.links || []; - link = { - ideaIdFrom: ideaIdFrom, - ideaIdTo: ideaIdTo, - attr: { - style: { - color: '#FF0000', - lineStyle: 'dashed' - } - } - }; - contentAggregate.links.push(link); - logChange('addLink', [ideaIdFrom, ideaIdTo], function () { - contentAggregate.links.pop(); - }, originSession); - return true; - }; - contentAggregate.removeLink = function (ideaIdOne, ideaIdTwo) { - return contentAggregate.execCommand('removeLink', arguments); - }; - commandProcessors.removeLink = function (originSession, ideaIdOne, ideaIdTwo) { - var i = 0, link; - - while (contentAggregate.links && i < contentAggregate.links.length) { - link = contentAggregate.links[i]; - if (String(link.ideaIdFrom) === String(ideaIdOne) && String(link.ideaIdTo) === String(ideaIdTwo)) { - contentAggregate.links.splice(i, 1); - logChange('removeLink', [ideaIdOne, ideaIdTwo], function () { - contentAggregate.links.push(_.clone(link)); - }, originSession); - return true; - } - i += 1; - } - return false; - }; - contentAggregate.getLinkAttr = function (ideaIdFrom, ideaIdTo, name) { - var link = _.find( - contentAggregate.links, - function (link) { - return link.ideaIdFrom == ideaIdFrom && link.ideaIdTo == ideaIdTo; - } - ); - if (link && link.attr && link.attr[name]) { - return link.attr[name]; - } - return false; - }; - contentAggregate.updateLinkAttr = function (ideaIdFrom, ideaIdTo, attrName, attrValue) { - return contentAggregate.execCommand('updateLinkAttr', arguments); - }; - commandProcessors.updateLinkAttr = function (originSession, ideaIdFrom, ideaIdTo, attrName, attrValue) { - var link = _.find( - contentAggregate.links, - function (link) { - return link.ideaIdFrom == ideaIdFrom && link.ideaIdTo == ideaIdTo; - } - ), undoAction; - undoAction = updateAttr(link, attrName, attrValue); - if (undoAction) { - logChange('updateLinkAttr', [ideaIdFrom, ideaIdTo, attrName, attrValue], undoAction, originSession); - } - return !!undoAction; - }; - }()); - /* undo/redo */ - contentAggregate.resetHistory = function () { - eventStacks = {}; - redoStacks = {}; - }; - contentAggregate.canUndo = function () { - return !!(eventStacks[sessionKey] && eventStacks[sessionKey].length > 0); - }; - contentAggregate.canRedo = function () { - return !!(redoStacks[sessionKey] && redoStacks[sessionKey].length > 0); - }; - contentAggregate.undo = function () { - return contentAggregate.execCommand('undo', arguments); - }; - commandProcessors.undo = function (originSession) { - contentAggregate.endBatch(); - var topEvent; - topEvent = eventStacks[originSession] && eventStacks[originSession].pop(); - if (topEvent && topEvent.undoFunction) { - topEvent.undoFunction(); - if (!redoStacks[originSession]) { - redoStacks[originSession] = []; - } - redoStacks[originSession].push(topEvent); - contentAggregate.dispatchEvent('changed', 'undo', [], originSession); - return true; - } - return false; - }; - contentAggregate.redo = function () { - return contentAggregate.execCommand('redo', arguments); - }; - commandProcessors.redo = function (originSession) { - contentAggregate.endBatch(); - var topEvent; - topEvent = redoStacks[originSession] && redoStacks[originSession].pop(); - if (topEvent) { - isRedoInProgress = true; - contentAggregate.execCommand(topEvent.eventMethod, topEvent.eventArgs, originSession); - isRedoInProgress = false; - return true; - } - return false; - }; - contentAggregate.storeResource = function (/*resourceBody, optionalKey*/) { - return contentAggregate.execCommand('storeResource', arguments); - }; - commandProcessors.storeResource = function (originSession, resourceBody, optionalKey) { - var existingId, id, - maxIdForSession = function () { - if (_.isEmpty(contentAggregate.resources)) { - return 0; - } - var toInt = function (string) { - return parseInt(string, 10); - }, - keys = _.keys(contentAggregate.resources), - filteredKeys = sessionKey ? _.filter(keys, RegExp.prototype.test.bind(new RegExp('\\/' + sessionKey + '$'))) : keys, - intKeys = _.map(filteredKeys, toInt); - return _.isEmpty(intKeys) ? 0 : _.max(intKeys); - }, - nextResourceId = function () { - var intId = maxIdForSession() + 1; - return intId + uniqueResourcePostfix; - }; - - if (!optionalKey && contentAggregate.resources) { - existingId = _.find(_.keys(contentAggregate.resources), function (key) { - return contentAggregate.resources[key] === resourceBody; - }); - if (existingId) { - return existingId; - } - } - id = optionalKey || nextResourceId(); - contentAggregate.resources = contentAggregate.resources || {}; - contentAggregate.resources[id] = resourceBody; - contentAggregate.dispatchEvent('resourceStored', resourceBody, id, originSession); - return id; - }; - contentAggregate.getResource = function (id) { - return contentAggregate.resources && contentAggregate.resources[id]; - }; - contentAggregate.hasSiblings = function (id) { - if (id === contentAggregate.id) { - return false; - } - var parent = contentAggregate.findParent(id); - return parent && _.size(parent.ideas) > 1; - }; - if (contentAggregate.formatVersion != 2) { - upgrade(contentAggregate); - contentAggregate.formatVersion = 2; - } - init(contentAggregate); - return contentAggregate; -}; diff --git a/plugins/easy_mindmup/assets/javascripts/mindmup/dom-map-view.js b/plugins/easy_mindmup/assets/javascripts/mindmup/dom-map-view.js deleted file mode 100644 index c5d8b0c..0000000 --- a/plugins/easy_mindmup/assets/javascripts/mindmup/dom-map-view.js +++ /dev/null @@ -1,1340 +0,0 @@ -/*global jQuery, Color, _, MAPJS, document, window*/ -MAPJS.DOMRender = { - svgPixel: 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="1" height="1"></svg>', - nodeCacheMark: function (idea, levelOverride) { - 'use strict'; - return { - title: idea.title, - icon: idea.attr && idea.attr.icon && _.pick(idea.attr.icon, 'width', 'height', 'position'), - collapsed: idea.attr && idea.attr.collapsed, - level: idea.level || levelOverride - }; - }, - dummyTextBox: jQuery('<div>').addClass('mapjs-node').css({position: 'absolute', visibility: 'hidden'}), - dimensionProvider: function (idea, level) { - 'use strict'; - /* support multiple stages? */ - var textBox = jQuery(document).nodeWithId(idea.id), - translateToPixel = function () { - return MAPJS.DOMRender.svgPixel; - }, - result; - if (textBox && textBox.length > 0) { - if (_.isEqual(textBox.data('nodeCacheMark'), MAPJS.DOMRender.nodeCacheMark(idea, level))) { - return _.pick(textBox.data(), 'width', 'height'); - } - } - textBox = MAPJS.DOMRender.dummyTextBox; - textBox.attr('mapjs-level', level).appendTo('body').updateNodeContent(idea, translateToPixel); - result = { - width: textBox.outerWidth(true), - height: textBox.outerHeight(true) - }; - textBox.detach(); - return result; - }, - layoutCalculator: function (contentAggregate) { - 'use strict'; - return MAPJS.calculateLayout(contentAggregate, MAPJS.DOMRender.dimensionProvider); - }, - fixedLayout: false -}; -MAPJS.createSVG = function (tag) { - 'use strict'; - return jQuery(document.createElementNS('http://www.w3.org/2000/svg', tag || 'svg')); -}; -jQuery.fn.getBox = function () { - 'use strict'; - var domShape = this && this[0]; - if (!domShape) { - return false; - } - return { - top: domShape.offsetTop, - left: domShape.offsetLeft, - width: domShape.offsetWidth, - height: domShape.offsetHeight - }; -}; -jQuery.fn.getDataBox = function () { - 'use strict'; - var domShapeData = this.data(); - if (domShapeData && domShapeData.width && domShapeData.height) { - return { - top: domShapeData.y, - left: domShapeData.x, - width: domShapeData.width, - height: domShapeData.height - }; - } - return this.getBox(); -}; - - -jQuery.fn.animateConnectorToPosition = function (animationOptions, tolerance) { - 'use strict'; - var element = jQuery(this), - shapeFrom = element.data('nodeFrom'), - shapeTo = element.data('nodeTo'), - fromBox = shapeFrom && shapeFrom.getDataBox(), - toBox = shapeTo && shapeTo.getDataBox(), - oldBox = { - from: shapeFrom && shapeFrom.getBox(), - to: shapeTo && shapeTo.getBox() - }; - tolerance = tolerance || 1; - if (fromBox && toBox && oldBox && oldBox.from.width === fromBox.width && - oldBox.to.width === toBox.width && - oldBox.from.height === fromBox.height && - oldBox.to.height === toBox.height && - Math.abs(oldBox.from.top - oldBox.to.top - (fromBox.top - toBox.top)) < tolerance && - Math.abs(oldBox.from.left - oldBox.to.left - (fromBox.left - toBox.left)) < tolerance) { - - element.animate({ - left: Math.round(Math.min(fromBox.left, toBox.left)), - top: Math.round(Math.min(fromBox.top, toBox.top)) - }, animationOptions); - return true; - } - return false; -}; -jQuery.fn.queueFadeOut = function (options) { - 'use strict'; - var element = this; - return element.fadeOut(_.extend({ - complete: function () { - if (element.is(':focus')) { - element.parents('[tabindex]').focus(); - } - element.remove(); - } - }, options)); -}; -jQuery.fn.queueFadeIn = function (options) { - 'use strict'; - var element = this; - return element - .css('opacity', 0) - .animate( - {'opacity': 1}, - _.extend({ - complete: function () { - element.css('opacity', ''); - } - }, options) - ); -}; - -jQuery.fn.updateStage = function () { - 'use strict'; - var data = this.data(), - size = { - 'min-width': Math.round(data.width - data.offsetX), - 'min-height': Math.round(data.height - data.offsetY), - 'width': Math.round(data.width - data.offsetX), - 'height': Math.round(data.height - data.offsetY), - 'transform-origin': 'top left', - 'transform': 'translate3d(' + Math.round(data.offsetX) + 'px, ' + Math.round(data.offsetY) + 'px, 0)' - }; - if (data.scale && data.scale !== 1) { - size.transform = 'scale(' + data.scale + ') translate(' + Math.round(data.offsetX) + 'px, ' + Math.round(data.offsetY) + 'px)'; - } - this.css(size); - return this; -}; - -MAPJS.DOMRender.curvedPath = function (parent, child) { - 'use strict'; - var horizontalConnector = function (parentX, parentY, parentWidth, parentHeight, childX, childY, childWidth, childHeight) { - var childHorizontalOffset = parentX < childX ? 0.1 : 0.9, - parentHorizontalOffset = 1 - childHorizontalOffset; - return { - from: { - x: parentX + parentHorizontalOffset * parentWidth, - y: parentY + 0.5 * parentHeight - }, - to: { - x: childX + childHorizontalOffset * childWidth, - y: childY + 0.5 * childHeight - }, - controlPointOffset: 0 - }; - }, - calculateConnector = function (parent, child) { - var tolerance = 10, - childHorizontalOffset, - childMid = child.top + child.height * 0.5, - parentMid = parent.top + parent.height * 0.5; - if (Math.abs(parentMid - childMid) + tolerance < Math.max(child.height, parent.height * 0.75)) { - return horizontalConnector(parent.left, parent.top, parent.width, parent.height, child.left, child.top, child.width, child.height); - } - childHorizontalOffset = parent.left < child.left ? 0 : 1; - return { - from: { - x: parent.left + 0.5 * parent.width, - y: parent.top + 0.5 * parent.height - }, - to: { - x: child.left + childHorizontalOffset * child.width, - y: child.top + 0.5 * child.height - }, - controlPointOffset: 0.75 - }; - }, - position = { - left: Math.min(parent.left, child.left), - top: Math.min(parent.top, child.top) - }, - calculatedConnector, offset, maxOffset; - position.width = Math.max(parent.left + parent.width, child.left + child.width, position.left + 1) - position.left; - position.height = Math.max(parent.top + parent.height, child.top + child.height, position.top + 1) - position.top; - - calculatedConnector = calculateConnector(parent, child); - offset = calculatedConnector.controlPointOffset * (calculatedConnector.from.y - calculatedConnector.to.y); - maxOffset = Math.min(child.height, parent.height) * 1.5; - offset = Math.max(-maxOffset, Math.min(maxOffset, offset)); - return { - 'd': 'M' + Math.round(calculatedConnector.from.x - position.left) + ',' + Math.round(calculatedConnector.from.y - position.top) + - 'Q' + Math.round(calculatedConnector.from.x - position.left) + ',' + Math.round(calculatedConnector.to.y - offset - position.top) + ' ' + Math.round(calculatedConnector.to.x - position.left) + ',' + Math.round(calculatedConnector.to.y - position.top), - // 'conn': calculatedConnector, - 'position': position - }; -}; -MAPJS.DOMRender.straightPath = function (parent, child) { - 'use strict'; - var calculateConnector = function (parent, child) { - var parentPoints = [ - { - x: parent.left + 0.5 * parent.width, - y: parent.top - }, - { - x: parent.left + parent.width, - y: parent.top + 0.5 * parent.height - }, - { - x: parent.left + 0.5 * parent.width, - y: parent.top + parent.height - }, - { - x: parent.left, - y: parent.top + 0.5 * parent.height - } - ], childPoints = [ - { - x: child.left + 0.5 * child.width, - y: child.top - }, - { - x: child.left + child.width, - y: child.top + 0.5 * child.height - }, - { - x: child.left + 0.5 * child.width, - y: child.top + child.height - }, - { - x: child.left, - y: child.top + 0.5 * child.height - } - ], i, j, min = Infinity, bestParent, bestChild, dx, dy, current; - for (i = 0; i < parentPoints.length; i += 1) { - for (j = 0; j < childPoints.length; j += 1) { - dx = parentPoints[i].x - childPoints[j].x; - dy = parentPoints[i].y - childPoints[j].y; - current = dx * dx + dy * dy; - if (current < min) { - bestParent = i; - bestChild = j; - min = current; - } - } - } - return { - from: parentPoints[bestParent], - to: childPoints[bestChild] - }; - }, - position = { - left: Math.min(parent.left, child.left), - top: Math.min(parent.top, child.top) - }, - conn = calculateConnector(parent, child); - position.width = Math.max(parent.left + parent.width, child.left + child.width, position.left + 1) - position.left; - position.height = Math.max(parent.top + parent.height, child.top + child.height, position.top + 1) - position.top; - - return { - 'd': 'M' + Math.round(conn.from.x - position.left) + ',' + Math.round(conn.from.y - position.top) + 'L' + Math.round(conn.to.x - position.left) + ',' + Math.round(conn.to.y - position.top), - 'conn': conn, - 'position': position - }; -}; - -MAPJS.DOMRender.nodeConnectorPath = MAPJS.DOMRender.curvedPath; -MAPJS.DOMRender.linkConnectorPath = MAPJS.DOMRender.straightPath; - -jQuery.fn.updateConnector = function (canUseData) { - 'use strict'; - return jQuery.each(this, function () { - var element = jQuery(this), - shapeFrom = element.data('nodeFrom'), - shapeTo = element.data('nodeTo'), - connection, pathElement, fromBox, toBox, changeCheck; - if (!shapeFrom || !shapeTo || shapeFrom.length === 0 || shapeTo.length === 0) { - element.hide(); - return; - } - if (canUseData) { - fromBox = shapeFrom.getDataBox(); - toBox = shapeTo.getDataBox(); - } else { - fromBox = shapeFrom.getBox(); - toBox = shapeTo.getBox(); - } - changeCheck = {from: fromBox, to: toBox}; - if (_.isEqual(changeCheck, element.data('changeCheck'))) { - return; - } - - element.data('changeCheck', changeCheck); - connection = MAPJS.DOMRender.nodeConnectorPath(fromBox, toBox); - pathElement = element.find('path'); - element.css(connection.position); - if (pathElement.length === 0) { - pathElement = MAPJS.createSVG('path').attr('class', 'mapjs-connector').appendTo(element); - } - // if only the relative position changed, do not re-update the curve!!!! - pathElement.attr('d', - connection.d - ); - }); -}; - -jQuery.fn.updateLink = function () { - 'use strict'; - return jQuery.each(this, function () { - var element = jQuery(this), - shapeFrom = element.data('nodeFrom'), - shapeTo = element.data('nodeTo'), - connection, - pathElement = element.find('path.mapjs-link'), - hitElement = element.find('path.mapjs-link-hit'), - arrowElement = element.find('path.mapjs-arrow'), - n = Math.tan(Math.PI / 9), - dashes = { - dashed: '8, 8', - solid: '' - }, - attrs = _.pick(element.data(), 'lineStyle', 'arrow', 'color'), - fromBox, toBox, changeCheck, - a1x, a1y, a2x, a2y, len, iy, m, dx, dy; - if (!shapeFrom || !shapeTo || shapeFrom.length === 0 || shapeTo.length === 0) { - element.hide(); - return; - } - fromBox = shapeFrom.getBox(); - toBox = shapeTo.getBox(); - - changeCheck = {from: fromBox, to: toBox, attrs: attrs}; - if (_.isEqual(changeCheck, element.data('changeCheck'))) { - return; - } - - element.data('changeCheck', changeCheck); - - connection = MAPJS.DOMRender.linkConnectorPath(fromBox, toBox); - element.css(connection.position); - - if (pathElement.length === 0) { - pathElement = MAPJS.createSVG('path').attr('class', 'mapjs-link').appendTo(element); - } - pathElement.attr({ - 'd': connection.d, - 'stroke-dasharray': dashes[attrs.lineStyle] - }).css('stroke', attrs.color); - - if (hitElement.length === 0) { - hitElement = MAPJS.createSVG('path').attr('class', 'mapjs-link-hit').appendTo(element); - } - hitElement.attr({ - 'd': connection.d - }); - - if (attrs.arrow) { - if (arrowElement.length === 0) { - arrowElement = MAPJS.createSVG('path').attr('class', 'mapjs-arrow').appendTo(element); - } - len = 14; - dx = connection.conn.to.x - connection.conn.from.x; - dy = connection.conn.to.y - connection.conn.from.y; - if (dx === 0) { - iy = dy < 0 ? -1 : 1; - a1x = connection.conn.to.x + len * Math.sin(n) * iy; - a2x = connection.conn.to.x - len * Math.sin(n) * iy; - a1y = connection.conn.to.y - len * Math.cos(n) * iy; - a2y = connection.conn.to.y - len * Math.cos(n) * iy; - } else { - m = dy / dx; - if (connection.conn.from.x < connection.conn.to.x) { - len = -len; - } - a1x = connection.conn.to.x + (1 - m * n) * len / Math.sqrt((1 + m * m) * (1 + n * n)); - a1y = connection.conn.to.y + (m + n) * len / Math.sqrt((1 + m * m) * (1 + n * n)); - a2x = connection.conn.to.x + (1 + m * n) * len / Math.sqrt((1 + m * m) * (1 + n * n)); - a2y = connection.conn.to.y + (m - n) * len / Math.sqrt((1 + m * m) * (1 + n * n)); - } - arrowElement.attr('d', - 'M' + Math.round(a1x - connection.position.left) + ',' + Math.round(a1y - connection.position.top) + - 'L' + Math.round(connection.conn.to.x - connection.position.left) + ',' + Math.round(connection.conn.to.y - connection.position.top) + - 'L' + Math.round(a2x - connection.position.left) + ',' + Math.round(a2y - connection.position.top) + - 'Z') - .css('fill', attrs.color) - .show(); - } else { - arrowElement.hide(); - } - - }); -}; - -jQuery.fn.addNodeCacheMark = function (idea) { - 'use strict'; - this.data('nodeCacheMark', MAPJS.DOMRender.nodeCacheMark(idea)); -}; - -jQuery.fn.updateNodeContent = function (nodeContent, resourceTranslator) { - 'use strict'; - var MAX_URL_LENGTH = 25, - self = jQuery(this), - textSpan = function () { - var span = self.find('[data-mapjs-role=title]'); - if (span.length === 0) { - span = jQuery('<span>').attr('data-mapjs-role', 'title').appendTo(self); - } - return span; - }, - applyLinkUrl = function (title) { - var url = MAPJS.URLHelper.getLink(title), - element = self.find('a.mapjs-hyperlink'); - if (!url) { - element.hide(); - return; - } - if (element.length === 0) { - element = jQuery('<a target="_blank" class="mapjs-hyperlink"></a>').appendTo(self); - } - element.attr('href', url).show(); - }, - applyLabel = function (label) { - var element = self.find('.mapjs-label'); - if (!label && label !== 0) { - element.hide(); - return; - } - if (element.length === 0) { - element = jQuery('<span class="mapjs-label"></span>').appendTo(self); - } - element.text(label).show(); - }, - applyAttachment = function () { - var attachment = nodeContent.attr && nodeContent.attr.attachment, - element = self.find('a.mapjs-attachment'); - if (!attachment) { - element.hide(); - return; - } - if (element.length === 0) { - element = jQuery('<a href="#" class="mapjs-attachment"></a>').appendTo(self).click(function () { - self.trigger('attachment-click'); - }); - } - element.show(); - }, - updateText = function (title) { - var text = MAPJS.URLHelper.stripLink(title) || - (title.length < MAX_URL_LENGTH ? title : (title.substring(0, MAX_URL_LENGTH) + '...')), - nodeTextPadding = MAPJS.DOMRender.nodeTextPadding || 11, - element = textSpan(), - domElement = element[0], - height; - - element.text(text.trim()); - self.data('title', title); - element.css({'max-width': '', 'min-width': ''}); - if ((domElement.scrollWidth - nodeTextPadding) > domElement.offsetWidth) { - element.css('max-width', domElement.scrollWidth + 'px'); - } else { - height = domElement.offsetHeight; - element.css('min-width', element.css('max-width')); - if (domElement.offsetHeight === height) { - element.css('min-width', ''); - } - } - }, - setCollapseClass = function () { - if (nodeContent.attr && nodeContent.attr.collapsed) { - self.addClass('collapsed'); - } else { - self.removeClass('collapsed'); - } - }, - foregroundClass = function (backgroundColor) { - /*jslint newcap:true*/ - var luminosity = Color(backgroundColor).mix(Color('#EEEEEE')).luminosity(); - if (luminosity < 0.5) { - return 'mapjs-node-dark'; - } else if (luminosity < 0.9) { - return 'mapjs-node-light'; - } - return 'mapjs-node-white'; - }, - setColors = function () { - var fromStyle = nodeContent.attr && nodeContent.attr.style && nodeContent.attr.style.background; - if (fromStyle === 'false' || fromStyle === 'transparent') { - fromStyle = false; - } - self.removeClass('mapjs-node-dark mapjs-node-white mapjs-node-light'); - if (fromStyle) { - self.css('background-color', fromStyle); - self.addClass(foregroundClass(fromStyle)); - } else { - self.css('background-color', ''); - } - }, - setIcon = function (icon) { - var textBox = textSpan(), - textHeight, - textWidth, - maxTextWidth, - padding, - selfProps = { - 'min-height': '', - 'min-width': '', - 'background-image': '', - 'background-repeat': '', - 'background-size': '', - 'background-position': '' - }, - textProps = { - 'margin-top': '', - 'margin-left': '' - }; - self.css({padding: ''}); - if (icon) { - padding = parseInt(self.css('padding-left'), 10); - textHeight = textBox.outerHeight(); - textWidth = textBox.outerWidth(); - maxTextWidth = parseInt(textBox.css('max-width'), 10); - _.extend(selfProps, { - 'background-image': 'url("' + (resourceTranslator ? resourceTranslator(icon.url) : icon.url) + '")', - 'background-repeat': 'no-repeat', - 'background-size': icon.width + 'px ' + icon.height + 'px', - 'background-position': 'center center' - }); - if (icon.position === 'top' || icon.position === 'bottom') { - if (icon.position === 'top') { - selfProps['background-position'] = 'center ' + padding + 'px'; - } else if (MAPJS.DOMRender.fixedLayout) { - selfProps['background-position'] = 'center ' + (padding + textHeight) + 'px'; - } else { - selfProps['background-position'] = 'center ' + icon.position + ' ' + padding + 'px'; - } - - selfProps['padding-' + icon.position] = icon.height + (padding * 2); - selfProps['min-width'] = icon.width; - if (icon.width > maxTextWidth) { - textProps['margin-left'] = (icon.width - maxTextWidth) / 2; - } - } else if (icon.position === 'left' || icon.position === 'right') { - if (icon.position === 'left') { - selfProps['background-position'] = padding + 'px center'; - } else if (MAPJS.DOMRender.fixedLayout) { - selfProps['background-position'] = (textWidth + (2 * padding)) + 'px center '; - } else { - selfProps['background-position'] = icon.position + ' ' + padding + 'px center'; - } - - selfProps['padding-' + icon.position] = icon.width + (padding * 2); - if (icon.height > textHeight) { - textProps['margin-top'] = (icon.height - textHeight) / 2; - selfProps['min-height'] = icon.height; - } - } else { - if (icon.height > textHeight) { - textProps['margin-top'] = (icon.height - textHeight) / 2; - selfProps['min-height'] = icon.height; - } - selfProps['min-width'] = icon.width; - if (icon.width > maxTextWidth) { - textProps['margin-left'] = (icon.width - maxTextWidth) / 2; - } - } - } - self.css(selfProps); - textBox.css(textProps); - }; - self.attr('mapjs-level', nodeContent.level); - updateText(nodeContent.title); - applyLinkUrl(nodeContent.title); - applyLabel(nodeContent.label); - applyAttachment(); - self.data({ - 'x': Math.round(nodeContent.x), - 'y': Math.round(nodeContent.y), - 'width': Math.round(nodeContent.width), - 'height': Math.round(nodeContent.height), - 'nodeId': nodeContent.id - }) - .addNodeCacheMark(nodeContent); - setColors(); - setIcon(nodeContent.attr && nodeContent.attr.icon); - setCollapseClass(); - return self; -}; -jQuery.fn.placeCaretAtEnd = function () { - 'use strict'; - var el = this[0], - range, sel, textRange; - if (window.getSelection && document.createRange) { - range = document.createRange(); - range.selectNodeContents(el); - range.collapse(false); - sel = window.getSelection(); - sel.removeAllRanges(); - sel.addRange(range); - } else if (document.body.createTextRange) { - textRange = document.body.createTextRange(); - textRange.moveToElementText(el); - textRange.collapse(false); - textRange.select(); - } -}; -jQuery.fn.selectAll = function () { - 'use strict'; - var el = this[0], - range, sel, textRange; - if (window.getSelection && document.createRange) { - range = document.createRange(); - range.selectNodeContents(el); - sel = window.getSelection(); - sel.removeAllRanges(); - sel.addRange(range); - } else if (document.body.createTextRange) { - textRange = document.body.createTextRange(); - textRange.moveToElementText(el); - textRange.select(); - } -}; -jQuery.fn.innerText = function () { - 'use strict'; - var htmlContent = this.html(), - containsBr = /<br\/?>/.test(htmlContent), - containsDiv = /<div>/.test(htmlContent); - if (containsDiv && this[0].innerText) { /* broken safari jquery text */ - return this[0].innerText.trim(); - } else if (containsBr) { /*broken firefox innerText */ - return htmlContent.replace(/<br\/?>/gi, '\n').replace(/(<([^>]+)>)/gi, ''); - } - return this.text(); -}; -jQuery.fn.editNode = function (shouldSelectAll) { - 'use strict'; - var node = this, - textBox = this.find('[data-mapjs-role=title]'), - unformattedText = this.data('title'), - originalText = textBox.text(), - result = jQuery.Deferred(), - clear = function () { - detachListeners(); - textBox.css('word-break', ''); - textBox.removeAttr('contenteditable'); - node.shadowDraggable(); - }, - finishEditing = function () { - var content = textBox.innerText(); - if (content === unformattedText) { - return cancelEditing(); - } - clear(); - result.resolve(content); - }, - cancelEditing = function () { - clear(); - textBox.text(originalText); - result.reject(); - }, - keyboardEvents = function (e) { - var ENTER_KEY_CODE = 13, - ESC_KEY_CODE = 27, - TAB_KEY_CODE = 9, - S_KEY_CODE = 83, - Z_KEY_CODE = 90; - if (e.shiftKey && e.which === ENTER_KEY_CODE) { - return; // allow shift+enter to break lines - } else if (e.which === ENTER_KEY_CODE) { - finishEditing(); - e.stopPropagation(); - } else if (e.which === ESC_KEY_CODE) { - cancelEditing(); - e.stopPropagation(); - } else if (e.which === TAB_KEY_CODE || (e.which === S_KEY_CODE && (e.metaKey || e.ctrlKey) && !e.altKey)) { - finishEditing(); - e.preventDefault(); - /* stop focus on another object */ - } else if (!e.shiftKey && e.which === Z_KEY_CODE && (e.metaKey || e.ctrlKey) && !e.altKey) { /* undo node edit on ctrl+z if text was not changed */ - if (textBox.text() === unformattedText) { - cancelEditing(); - } - e.stopPropagation(); - } - }, - attachListeners = function () { - textBox.on('blur', finishEditing).on('keydown', keyboardEvents); - }, - detachListeners = function () { - textBox.off('blur', finishEditing).off('keydown', keyboardEvents); - }; - attachListeners(); - if (unformattedText !== originalText) { /* links or some other potential formatting issues */ - textBox.css('word-break', 'break-all'); - } - textBox.text(unformattedText).attr('contenteditable', true).focus(); - if (shouldSelectAll) { - textBox.selectAll(); - } else if (unformattedText) { - textBox.placeCaretAtEnd(); - } - node.shadowDraggable({disable: true}); - return result.promise(); -}; -jQuery.fn.updateReorderBounds = function (border, box) { - 'use strict'; - var element = this; - if (!border) { - element.hide(); - return; - } - element.show(); - element.attr('mapjs-edge', border.edge); - element.css({ - top: box.y + box.height / 2 - element.height() / 2, - left: border.x - (border.edge === 'left' ? element.width() : 0) - }); - -}; - -(function () { - 'use strict'; - var cleanDOMId = function (s) { - return s.replace(/[^A-Za-z0-9_-]/g, '_'); - }, - connectorKey = function (connectorObj) { - return cleanDOMId('connector_' + connectorObj.from + '_' + connectorObj.to); - }, - linkKey = function (linkObj) { - return cleanDOMId('link_' + linkObj.ideaIdFrom + '_' + linkObj.ideaIdTo); - }, - nodeKey = function (id) { - return cleanDOMId('node_' + id); - }; - - jQuery.fn.createNode = function (node) { - return jQuery('<div>') - .attr({'id': nodeKey(node.id), 'tabindex': 0, 'data-mapjs-role': 'node'}) - .css({display: 'block', position: 'absolute'}) - .addClass('mapjs-node') - .appendTo(this); - }; - jQuery.fn.createConnector = function (connector) { - return MAPJS.createSVG() - .attr({'id': connectorKey(connector), 'data-mapjs-role': 'connector', 'class': 'mapjs-draw-container'}) - .data({'nodeFrom': this.nodeWithId(connector.from), 'nodeTo': this.nodeWithId(connector.to)}) - .appendTo(this); - }; - jQuery.fn.createLink = function (l) { - var defaults = _.extend({color: 'red', lineStyle: 'dashed'}, l.attr && l.attr.style); - return MAPJS.createSVG() - .attr({ - 'id': linkKey(l), - 'data-mapjs-role': 'link', - 'class': 'mapjs-draw-container' - }) - .data({'nodeFrom': this.nodeWithId(l.ideaIdFrom), 'nodeTo': this.nodeWithId(l.ideaIdTo)}) - .data(defaults) - .appendTo(this); - }; - jQuery.fn.nodeWithId = function (id) { - return this.find('#' + nodeKey(id)); - }; - jQuery.fn.findConnector = function (connectorObj) { - return this.find('#' + connectorKey(connectorObj)); - }; - jQuery.fn.findLink = function (linkObj) { - return this.find('#' + linkKey(linkObj)); - }; - jQuery.fn.createReorderBounds = function () { - var result = jQuery('<div>').attr({ - 'data-mapjs-role': 'reorder-bounds', - 'class': 'mapjs-reorder-bounds' - }).hide().css('position', 'absolute').appendTo(this); - return result; - }; -})(); - -MAPJS.DOMRender.viewController = function (mapModel, stageElement, touchEnabled, imageInsertController, resourceTranslator, options) { - 'use strict'; - var viewPort = stageElement.parent(), - connectorsForAnimation = [], - linksForAnimation = [], - nodeAnimOptions = {duration: 400, queue: 'nodeQueue', easing: 'linear'}, - reorderBounds = mapModel.isEditingEnabled() ? stageElement.createReorderBounds() : jQuery('<div>'), - toolbarHeight = resourceTranslator.$menu.outerHeight(), - getViewPortDimensions = function () { - if (viewPortDimensions) { - return viewPortDimensions; - } - viewPortDimensions = { - left: viewPort.scrollLeft(), - top: viewPort.scrollTop(), - innerWidth: viewPort.innerWidth(), - innerHeight: viewPort.innerHeight() - }; - return viewPortDimensions; - }, - stageToViewCoordinates = function (x, y) { - var stage = stageElement.data(), - scrollPosition = getViewPortDimensions(); - return { - x: stage.scale * (x + stage.offsetX) - scrollPosition.left, - y: stage.scale * (y + stage.offsetY) - scrollPosition.top - }; - }, - stageToWindowTop = function (y) { - var stage = stageElement.data(); - return stage.scale * (y + stage.offsetY) - $(document).scrollTop() + viewPort.offset().top; - }, - viewToStageCoordinates = function (x, y) { - var stage = stageElement.data(), - scrollPosition = getViewPortDimensions(); - return { - x: (scrollPosition.left + x) / stage.scale - stage.offsetX, - y: (scrollPosition.top + y) / stage.scale - stage.offsetY - }; - }, - dirtyNodesToUpdate=[], - updateScreenCoordinates = function () { - var element = jQuery(this); - if(stageElement.data('dirty')){ - dirtyNodesToUpdate.push(element); - return; - } - element.css({ - 'left': element.data('x'), - 'top': element.data('y') - }).trigger('mapjs:move'); - }, - updateDirtyStage = function(){ - if(stageElement.data('dirty')){ - stageElement.updateStage(); - stageElement.data('dirty',false); - } - _.each(dirtyNodesToUpdate,function(element){ - element.css({ - 'left': element.data('x'), - 'top': element.data('y') - }).trigger('mapjs:move'); - }); - dirtyNodesToUpdate=[]; - }, - animateToPositionCoordinates = function () { - var element = jQuery(this); - element.clearQueue(nodeAnimOptions.queue).animate({ - 'left': element.data('x'), - 'top': element.data('y'), - 'opacity': 1 /* previous animation can be cancelled with clearqueue, so ensure it gets visible */ - }, _.extend({ - complete: function () { - element.css('opacity', ''); - element.each(updateScreenCoordinates); - } - }, nodeAnimOptions)).trigger('mapjs:animatemove'); - }, - ensureSpaceForPoint = function (x, y) {/* in stage coordinates */ - var stage = stageElement.data(); - if (x < -1 * stage.offsetX) { - stage.width = stage.width - stage.offsetX - x; - stage.offsetX = -1 * x; - stage.dirty = true; - } - if (y < -1 * stage.offsetY) { - stage.height = stage.height - stage.offsetY - y; - stage.offsetY = -1 * y; - stage.dirty = true; - } - if (x > stage.width - stage.offsetX) { - stage.width = stage.offsetX + x; - stage.dirty = true; - } - if (y > stage.height - stage.offsetY) { - stage.height = stage.offsetY + y; - stage.dirty = true; - } - }, - ensureSpaceForNode = function () { - return jQuery(this).each(function () { - var node = jQuery(this).data(), - margin = MAPJS.DOMRender.stageMargin || {top: 0, left: 0, bottom: 0, right: 0}; - /* sequence of calculations is important because maxX and maxY take into consideration the new offsetX snd offsetY */ - ensureSpaceForPoint(node.x - margin.left, node.y - margin.top); - ensureSpaceForPoint(node.x + node.width + margin.right, node.y + node.height + margin.bottom); - }); - }, - centerViewOn = function (x, y, animate) { /*in the stage coordinate system*/ - var stage = stageElement.data(), - windowHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0), - viewPortCenter = { - x: viewPort.innerWidth() / 2, - y: windowHeight / 2 - viewPort.offset().top - }, - newLeftScroll, newTopScroll, - margin = MAPJS.DOMRender.stageVisibilityMargin || {top: 0, left: 0, bottom: 0, right: 0}; - ensureSpaceForPoint(x - viewPortCenter.x / stage.scale, y - viewPortCenter.y / stage.scale); - ensureSpaceForPoint(x + viewPortCenter.x / stage.scale - margin.left, y + viewPortCenter.y / stage.scale - margin.top); - updateDirtyStage(); - newLeftScroll = stage.scale * (x + stage.offsetX) - viewPortCenter.x; - newTopScroll = stage.scale * (y + stage.offsetY) - viewPortCenter.y; - viewPort.finish(); - if (animate) { - viewPort.animate({ - scrollLeft: newLeftScroll - }, { - duration: 400 - }); - $("html, body").animate({ - scrollTop: newTopScroll - }, { - duration: 400 - }); - } else { - viewPort.scrollLeft(newLeftScroll); - $(document).scrollTop(newTopScroll); - } - }, - stagePointAtViewportCenter = function () { - return viewToStageCoordinates(viewPort.innerWidth() / 2, viewPort.innerHeight() / 2); - }, - ensureNodeVisible = function (domElement) { - if (!domElement || domElement.length === 0) { - return; - } - viewPort.finish(); - var node = domElement.data(), - nodeTopLeft = stageToViewCoordinates(node.x, node.y), - nodeBottomRight = stageToViewCoordinates(node.x + node.width, node.y + node.height), - windowHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0), - scrollLeft = null, - scrollTop = null, - margin = MAPJS.DOMRender.stageVisibilityMargin || {top: 10, left: 10, bottom: 10, right: 10}; - nodeTopLeft.y = stageToWindowTop(node.y); - nodeBottomRight.y = stageToWindowTop(node.y + node.height); - if ((nodeTopLeft.x - margin.left) < 0) { - scrollLeft = viewPort.scrollLeft() + nodeTopLeft.x - margin.left; - } else if ((nodeBottomRight.x + margin.right) > viewPort.innerWidth()) { - scrollLeft = viewPort.scrollLeft() + nodeBottomRight.x - viewPort.innerWidth() + margin.right; - } - if ((nodeTopLeft.y - margin.top) < toolbarHeight) { - scrollTop = $(document).scrollTop() + nodeTopLeft.y - margin.top - toolbarHeight; - } else if ((nodeBottomRight.y + margin.bottom) > windowHeight) { - scrollTop = $(document).scrollTop() + nodeBottomRight.y - windowHeight + margin.bottom; - } - if (scrollLeft !== null) { - viewPort[0].scrollLeft = scrollLeft; - //viewPort.animate({scrollLeft: scrollLeft}, {duration: 100}); - } - if (scrollTop !== null) { - $("html, body").scrollTop(scrollTop); - // $("html, body").animate({scrollTop: scrollTop}, {duration: 100}); - - } - }, - viewportCoordinatesForPointEvent = function (evt) { - var dropPosition = (evt && evt.gesture && evt.gesture.center) || evt, - vpOffset = viewPort.offset(), - result; - if (dropPosition) { - result = { - x: dropPosition.pageX - vpOffset.left, - y: dropPosition.pageY - vpOffset.top - }; - if (result.x >= 0 && result.x <= viewPort.innerWidth() && result.y >= 0 && result.y <= viewPort.innerHeight()) { - return result; - } - } - }, - stagePositionForPointEvent = function (evt) { - var viewportDropCoordinates = viewportCoordinatesForPointEvent(evt); - if (viewportDropCoordinates) { - return viewToStageCoordinates(viewportDropCoordinates.x, viewportDropCoordinates.y); - } - }, - clearCurrentDroppable = function () { - if (currentDroppable || currentDroppable === false) { - jQuery('.mapjs-node').removeClass('droppable'); - currentDroppable = undefined; - } - }, - showDroppable = function (nodeId) { - stageElement.nodeWithId(nodeId).addClass('droppable'); - currentDroppable = nodeId; - }, - currentDroppable = false, - viewPortDimensions, - withinReorderBoundary = function (boundaries, box) { - if (_.isEmpty(boundaries)) { - return false; - } - if (!box) { - return false; - } - var closeTo = function (reorderBoundary) { - var nodeX = box.x; - if (reorderBoundary.edge === 'right') { - nodeX += box.width; - } - return Math.abs(nodeX - reorderBoundary.x) < reorderBoundary.margin * 2 && - box.y < reorderBoundary.maxY && - box.y > reorderBoundary.minY; - }; - return _.find(boundaries, closeTo); - }; - - - viewPort.on('scroll', function () { - viewPortDimensions = undefined; - }); - if (imageInsertController) { - imageInsertController.addEventListener('imageInserted', function (dataUrl, imgWidth, imgHeight, evt) { - var point = stagePositionForPointEvent(evt); - mapModel.dropImage(dataUrl, imgWidth, imgHeight, point && point.x, point && point.y); - }); - } - mapModel.addEventListener('nodeCreated', function (node) { - var currentReorderBoundary, - element = stageElement.createNode(node) - .queueFadeIn(nodeAnimOptions) - .updateNodeContent(node, resourceTranslator) - .on('tap', function (evt) { - - var realEvent = (evt.gesture && evt.gesture.srcEvent) || evt; - if (realEvent.button && realEvent.button !== -1) { - return; - } - mapModel.clickNode(node.id, realEvent); - if (evt) { - evt.stopPropagation(); - } - if (evt && evt.gesture) { - evt.gesture.stopPropagation(); - } - - }) - .on('doubletap', function (event) { - if (event) { - event.stopPropagation(); - if (event.gesture) { - event.gesture.stopPropagation(); - } - } - if (!mapModel.isEditingEnabled()) { - mapModel.toggleCollapse('mouse'); - return; - } - mapModel.editNode('mouse'); - }) - .on('attachment-click', function () { - mapModel.openAttachment('mouse', node.id); - }) - .each(ensureSpaceForNode) - .each(updateScreenCoordinates) - .on('mm:start-dragging mm:start-dragging-shadow', function () { - mapModel.selectNode(node.id); - currentReorderBoundary = mapModel.getReorderBoundary(node.id); - element.addClass('dragging'); - }) - .on('mm:drag', function (evt) { - var dropCoords = stagePositionForPointEvent(evt), - currentPosition = evt.currentPosition && stagePositionForPointEvent({ - pageX: evt.currentPosition.left, - pageY: evt.currentPosition.top - }), - nodeId, - hasShift = evt && evt.gesture && evt.gesture.srcEvent && evt.gesture.srcEvent.shiftKey, - border; - if (!dropCoords) { - clearCurrentDroppable(); - return; - } - //ysy.log.debug("Diff={x:"+(currentPosition.x-dropCoords.x)+",y:"+(currentPosition.y-dropCoords.y)+"} \ - //evtCurr="+JSON.stringify(evt.currentPosition)+"\ - //curr="+JSON.stringify(currentPosition)+"\ - //drop="+JSON.stringify(dropCoords),"mm:drag"); - nodeId = mapModel.getNodeIdAtPosition(dropCoords.x, dropCoords.y); - if (!hasShift && !nodeId && currentPosition) { - currentPosition.width = element.outerWidth(); - currentPosition.height = element.outerHeight(); - border = withinReorderBoundary(currentReorderBoundary, currentPosition); - reorderBounds.updateReorderBounds(border, currentPosition); - } else { - reorderBounds.hide(); - } - if (!nodeId || nodeId === node.id) { - clearCurrentDroppable(); - } else if (nodeId !== currentDroppable) { - clearCurrentDroppable(); - if (nodeId) { - showDroppable(nodeId); - } - } - }) - .on('contextmenu', function (event) { - mapModel.selectNode(node.id, false, event.shiftKey || event.ctrlKey); - if (mapModel.requestContextMenu(event.pageX, event.pageY)) { - event.preventDefault(); - return false; - } - }) - .on('mm:stop-dragging', function (evt) { - element.removeClass('dragging'); - reorderBounds.hide(); - var isShift = evt && evt.gesture && evt.gesture.srcEvent && evt.gesture.srcEvent.shiftKey, - stageDropCoordinates = stagePositionForPointEvent(evt), - nodeAtDrop, finalPosition, dropResult, manualPosition, vpCenter; - clearCurrentDroppable(); - if (!stageDropCoordinates) { - return; - } - nodeAtDrop = mapModel.getNodeIdAtPosition(stageDropCoordinates.x, stageDropCoordinates.y); - finalPosition = stagePositionForPointEvent({pageX: evt.finalPosition.left, pageY: evt.finalPosition.top}); - if (!finalPosition) return false; - if (nodeAtDrop && nodeAtDrop !== node.id) { - dropResult = mapModel.dropNode(node.id, nodeAtDrop, !!isShift); - } else if (node.level > 1) { - finalPosition.width = element.outerWidth(); - finalPosition.height = element.outerHeight(); - manualPosition = (!!isShift) || !withinReorderBoundary(currentReorderBoundary, finalPosition); - dropResult = mapModel.positionNodeAt(node.id, finalPosition.x, finalPosition.y, manualPosition); - } else if (node.level === 1 && evt.gesture) { - vpCenter = stagePointAtViewportCenter(); - vpCenter.x -= evt.gesture.deltaX || 0; - vpCenter.y -= evt.gesture.deltaY || 0; - centerViewOn(vpCenter.x, vpCenter.y, true); - dropResult = true; - } else { - dropResult = false; - } - return dropResult; - }) - .on('mm:cancel-dragging', function () { - clearCurrentDroppable(); - element.removeClass('dragging'); - reorderBounds.hide(); - }); - if (touchEnabled) { - element.on('hold', function (evt) { - var realEvent = (evt.gesture && evt.gesture.srcEvent) || evt; - mapModel.clickNode(node.id, realEvent); - if (mapModel.requestContextMenu(evt.gesture.center.pageX, evt.gesture.center.pageY)) { - evt.preventDefault(); - if (evt.gesture) { - evt.gesture.preventDefault(); - evt.gesture.stopPropagation(); - } - return false; - } - }); - } - // element.css('min-width', element.css('width')); - if (mapModel.isEditingEnabled()) { - element.shadowDraggable(); - } - }); - mapModel.addEventListener('nodeSelectionChanged', function (ideaId, isSelected) { - var node = stageElement.nodeWithId(ideaId); - if (isSelected) { - node.addClass('selected'); - ensureNodeVisible(node); - } else { - node.removeClass('selected'); - } - }); - mapModel.addEventListener('nodeRemoved', function (node) { - stageElement.nodeWithId(node.id).queueFadeOut(nodeAnimOptions); - }); - mapModel.addEventListener('nodeMoved', function (node /*, reason*/) { - var currentViewPortDimensions = getViewPortDimensions(), - //nodeDomData = {x:stageElement.nodeWithId(node.id).data('x'),y:stageElement.nodeWithId(node.id).data('y')}, - nodeDom = stageElement.nodeWithId(node.id).data({ - 'x': Math.round(node.x), - 'y': Math.round(node.y) - }).each(ensureSpaceForNode), - screenTopLeft = stageToViewCoordinates(Math.round(node.x), Math.round(node.y)), - screenBottomRight = stageToViewCoordinates(Math.round(node.x + node.width), Math.round(node.y + node.height)); - //ysy.log.debug("VIEW: "+node.title+" old=["+nodeDomData.x+","+nodeDomData.y+"] new=["+nodeDom.data('x')+","+nodeDom.data('y')+"]"); - if (screenBottomRight.x < 0 || screenBottomRight.y < 0 || screenTopLeft.x > currentViewPortDimensions.innerWidth || screenTopLeft.y > currentViewPortDimensions.innerHeight) { - nodeDom.each(updateScreenCoordinates); - } else { - nodeDom.each(animateToPositionCoordinates); - } - }); - mapModel.addEventListener('nodeTitleChanged nodeAttrChanged nodeLabelChanged', function (n) { - stageElement.nodeWithId(n.id).updateNodeContent(n, resourceTranslator); - }); - mapModel.addEventListener('connectorCreated', function (connector) { - var element = stageElement.createConnector(connector).queueFadeIn(nodeAnimOptions).updateConnector(true); - stageElement.nodeWithId(connector.from).add(stageElement.nodeWithId(connector.to)) - .on('mapjs:move', function () { - element.updateConnector(true); - }) - .on('mm:drag', function () { - element.updateConnector(); - }) - .on('mapjs:animatemove', function () { - connectorsForAnimation.push(element); - }); - }); - mapModel.addEventListener('connectorRemoved', function (connector) { - stageElement.findConnector(connector).queueFadeOut(nodeAnimOptions); - }); - mapModel.addEventListener('linkCreated', function (l) { - var link = stageElement.createLink(l).queueFadeIn(nodeAnimOptions).updateLink(); - link.find('.mapjs-link-hit').on('tap', function (event) { - mapModel.selectLink('mouse', l, {x: event.gesture.center.pageX, y: event.gesture.center.pageY}); - event.stopPropagation(); - event.gesture.stopPropagation(); - }); - stageElement.nodeWithId(l.ideaIdFrom).add(stageElement.nodeWithId(l.ideaIdTo)) - .on('mapjs:move mm:drag', function () { - link.updateLink(); - }) - .on('mapjs:animatemove', function () { - linksForAnimation.push(link); - }); - - }); - mapModel.addEventListener('linkRemoved', function (l) { - stageElement.findLink(l).queueFadeOut(nodeAnimOptions); - }); - mapModel.addEventListener('mapScaleChanged', function (scaleMultiplier /*, zoomPoint */) { - var currentScale = stageElement.data('scale'), - targetScale = Math.max(Math.min(currentScale * scaleMultiplier, 5), 0.2), - currentCenter = stagePointAtViewportCenter(); - if (currentScale === targetScale) { - return; - } - stageElement.data('scale', targetScale).updateStage(); - centerViewOn(currentCenter.x, currentCenter.y); - }); - mapModel.addEventListener('nodeVisibilityRequested', function (ideaId) { - var id = ideaId || mapModel.getCurrentlySelectedIdeaId(), - node = stageElement.nodeWithId(id); - if (node) { - ensureNodeVisible(node); - viewPort.finish(); - } - - }); - mapModel.addEventListener('nodeFocusRequested', function (ideaId) { - var node = stageElement.nodeWithId(ideaId).data(), - nodeCenterX = node.x + node.width / 2, - nodeCenterY = node.y + node.height / 2; - if (stageElement.data('scale') !== 1) { - stageElement.data('scale', 1).updateStage(); - } - centerViewOn(nodeCenterX, nodeCenterY, true); - }); - mapModel.addEventListener('mapViewResetRequested', function () { - stageElement.data({'scale': 1, 'height': 0, 'width': 0, 'offsetX': 0, 'offsetY': 0}).updateStage(); - stageElement.children().andSelf().finish(nodeAnimOptions.queue); - jQuery(stageElement).find('.mapjs-node').each(ensureSpaceForNode); - updateDirtyStage(); - jQuery(stageElement).find('[data-mapjs-role=connector]').updateConnector(true); - jQuery(stageElement).find('[data-mapjs-role=link]').updateLink(); - centerViewOn(0, 0); - viewPort.focus(); - }); - mapModel.addEventListener('layoutChangeStarting', function () { - viewPortDimensions = undefined; - stageElement.children().finish(nodeAnimOptions.queue); - stageElement.finish(nodeAnimOptions.queue); - }); - mapModel.addEventListener('layoutChangeComplete', function () { - var connectorGroupClone = [], linkGroupClone = []; - - _.each(connectorsForAnimation,function (connector) { - if (!jQuery(connector).animateConnectorToPosition(nodeAnimOptions, 2)) { - connectorGroupClone.push(connector); - } - }); - _.each(linksForAnimation, function (link) { - if (!jQuery(link).animateConnectorToPosition(nodeAnimOptions, 2)) { - linkGroupClone.push(link); - } - }); - connectorsForAnimation = []; - linksForAnimation = []; - stageElement.animate({'opacity': 1}, _.extend({ - progress: function () { - $(connectorGroupClone).updateConnector(); - $(linkGroupClone).updateLink(); - } - }, nodeAnimOptions)); - ensureNodeVisible(stageElement.nodeWithId(mapModel.getCurrentlySelectedIdeaId())); - updateDirtyStage(); - stageElement.children().dequeue(nodeAnimOptions.queue); - stageElement.dequeue(nodeAnimOptions.queue); - }); - - /* editing */ - if (!options || !options.inlineEditingDisabled) { - mapModel.addEventListener('nodeEditRequested', function (nodeId, shouldSelectAll, editingNew) { - var editingElement = stageElement.nodeWithId(nodeId); - mapModel.setInputEnabled(false); - viewPort.finish(); - /* close any pending animations */ - editingElement.editNode(shouldSelectAll).done( - function (newText) { - mapModel.setInputEnabled(true); - mapModel.updateTitle(nodeId, newText, editingNew); - editingElement.focus(); - - }).fail(function () { - mapModel.setInputEnabled(true); - if (editingNew) { - mapModel.undo('internal'); - } - editingElement.focus(); - }); - }); - } - mapModel.addEventListener('addLinkModeToggled', function (isOn) { - if (isOn) { - stageElement.addClass('mapjs-add-link'); - } else { - stageElement.removeClass('mapjs-add-link'); - } - }); - mapModel.addEventListener('linkAttrChanged', function (l) { - var attr = _.extend({arrow: false}, l.attr && l.attr.style); - stageElement.findLink(l).data(attr).updateLink(); - }); - - mapModel.addEventListener('activatedNodesChanged', function (activatedNodes, deactivatedNodes) { - _.each(activatedNodes, function (nodeId) { - stageElement.nodeWithId(nodeId).addClass('activated'); - }); - _.each(deactivatedNodes, function (nodeId) { - stageElement.nodeWithId(nodeId).removeClass('activated'); - }); - }); -}; - diff --git a/plugins/easy_mindmup/assets/javascripts/mindmup/dom-map-widget.js b/plugins/easy_mindmup/assets/javascripts/mindmup/dom-map-widget.js deleted file mode 100644 index be6b7dd..0000000 --- a/plugins/easy_mindmup/assets/javascripts/mindmup/dom-map-widget.js +++ /dev/null @@ -1,218 +0,0 @@ -/*jslint nomen: true, newcap: true, browser: true*/ -/*global MAPJS, $, _, jQuery*/ - -jQuery.fn.scrollWhenDragging = function (scrollPredicate) { - /*jslint newcap:true*/ - 'use strict'; - return this.each(function () { - var element = $(this), - dragOrigin; - element.on('dragstart', function () { - if (scrollPredicate()) { - dragOrigin = { - top: element.scrollTop(), - left: element.scrollLeft() - }; - } - }).on('drag', function (e) { - if (e.gesture && dragOrigin) { - element.scrollTop(dragOrigin.top - e.gesture.deltaY); - element.scrollLeft(dragOrigin.left - e.gesture.deltaX); - } - }).on('dragend', function () { - dragOrigin = undefined; - }); - }); -}; -$.fn.domMapWidget = function (activityLog, mapModel, touchEnabled, imageInsertController, dragContainer, resourceTranslator, centerSelectedNodeOnOrientationChange, options) { - 'use strict'; - var hotkeyEventHandlers = { - 'return': 'addSiblingIdea', - 'shift+return': 'addSiblingIdeaBefore', - 'del backspace': 'removeSubIdea', - 'tab insert': 'addSubIdea', - 'left': 'selectNodeLeft', - 'up': 'selectNodeUp', - 'right': 'selectNodeRight', - 'shift+right': 'activateNodeRight', - 'shift+left': 'activateNodeLeft', - 'meta+right ctrl+right meta+left ctrl+left': 'flip', - 'shift+up': 'activateNodeUp', - 'shift+down': 'activateNodeDown', - 'down': 'selectNodeDown', - 'space f2': 'editNode', - 'shift+space': 'editNodeData', - 'f': 'toggleCollapse', - 'c meta+x ctrl+x': 'cut', - 'p meta+v ctrl+v': 'paste', - 'y meta+c ctrl+c': 'copy', - 'u meta+z ctrl+z': 'undo', - 'shift+tab': 'insertIntermediate', - 'Esc 0 meta+0 ctrl+0': 'resetView', - 'r meta+shift+z ctrl+shift+z meta+y ctrl+y': 'redo', - 'meta++ ctrl++ z': 'scaleUp', - 'meta+- ctrl+- shift+z': 'scaleDown', - 'meta+up ctrl+up': 'moveUp', - 'meta+down ctrl+down': 'moveDown', - //'ctrl+shift+v meta+shift+v': 'pasteStyle', - 'Esc': 'cancelCurrentAction', - 'ctrl+s meta+s': 'save', - 'k': 'requestContextMenu' - }, - charEventHandlers = { - '[': 'activateChildren', - '{': 'activateNodeAndChildren', - '=': 'activateSiblingNodes', - '.': 'activateSelectedNode', - '/': 'toggleCollapse' - //'a': 'openAttachment', - //'i': 'editIcon' - }, - actOnKeys = true, - self = this; - mapModel.addEventListener('inputEnabledChanged', function (canInput, holdFocus) { - actOnKeys = canInput; - if (canInput && !holdFocus) { - self.focus(); - } - }); - - return this.each(function () { - var element = $(this), - stage = $('<div>').css({ - position: 'relative' - }).attr('data-mapjs-role', 'stage').appendTo(element).data({ - 'offsetX': element.innerWidth() / 2, - 'offsetY': element.innerHeight() / 2, - 'width': element.innerWidth() - 20, - 'height': element.innerHeight() - 20, - 'scale': 1 - }).updateStage(), - previousPinchScale = false; - element.css('overflow', 'auto').attr('tabindex', 1); - if (mapModel.isEditingEnabled()) { - (dragContainer || element).simpleDraggableContainer(); - } - - if (!touchEnabled) { - element.scrollWhenDragging(mapModel.getInputEnabled); //no need to do this for touch, this is native - element.on('mousedown', function (e) { - if (e.target !== element[0]) { - element.css('overflow', 'hidden'); - } - }); - jQuery(document).on('mouseup', function () { - if (element.css('overflow') !== 'auto') { - element.css('overflow', 'auto'); - } - }); - element.imageDropWidget(imageInsertController); - } else { - element.on('doubletap', function (event) { - if (mapModel.requestContextMenu(event.gesture.center.pageX, event.gesture.center.pageY)) { - event.preventDefault(); - event.gesture.preventDefault(); - return false; - } - }).on('pinch', function (event) { - if (!event || !event.gesture || !event.gesture.scale) { - return; - } - event.preventDefault(); - event.gesture.preventDefault(); - - var scale = event.gesture.scale; - if (previousPinchScale) { - scale = scale / previousPinchScale; - } - if (Math.abs(scale - 1) < 0.05) { - return; - } - previousPinchScale = event.gesture.scale; - - mapModel.scale('touch', scale, { - x: event.gesture.center.pageX - stage.data('offsetX'), - y: event.gesture.center.pageY - stage.data('offsetY') - }); - }).on('gestureend', function () { - previousPinchScale = false; - }); - - } - MAPJS.DOMRender.viewController(mapModel, stage, touchEnabled, imageInsertController, resourceTranslator, options); - _.each(hotkeyEventHandlers, function (mappedFunction, keysPressed) { - element.keydown(keysPressed, function (event) { - mapModel.getYsy().log.debug("keydown " + keysPressed + " => " + mappedFunction, "keys"); - if (actOnKeys) { - event.stopImmediatePropagation(); - event.preventDefault(); - mapModel[mappedFunction]('keyboard'); - } - }); - }); - if (!touchEnabled) { - jQuery(window).on('resize', function () { - mapModel.resetView(); - }); - } - - jQuery(window).on('orientationchange', function () { - if (centerSelectedNodeOnOrientationChange) { - mapModel.centerOnNode(mapModel.getSelectedNodeId()); - } else { - mapModel.resetView(); - } - - }); - jQuery("#container").on('keydown', function (e) { - var functions = { - 'U+003D': 'scaleUp', - 'U+002D': 'scaleDown', - 61: 'scaleUp', - 173: 'scaleDown' - }, mappedFunction; - if (e && !e.altKey && (e.ctrlKey || e.metaKey)) { - if (e.originalEvent && e.originalEvent.keyIdentifier) { /* webkit */ - mappedFunction = functions[e.originalEvent.keyIdentifier]; - } else if (e.key === 'MozPrintableKey') { - mappedFunction = functions[e.which]; - } - if (mappedFunction) { - mapModel.getYsy().log.debug("keydown => " + mappedFunction, "keys"); - if (actOnKeys) { - e.preventDefault(); - mapModel[mappedFunction]('keyboard'); - } - } - } - }).on('wheel mousewheel', function (e) { - var scroll = e.originalEvent.deltaX || (-1 * e.originalEvent.wheelDeltaX); - if (scroll < 0 && element.scrollLeft() === 0) { - e.preventDefault(); - } - if (scroll > 0 && (element[0].scrollWidth - element.width() - element.scrollLeft() === 0)) { - e.preventDefault(); - } - }); - - element.on('keypress', function (evt) { - if (!actOnKeys) { - return; - } - if (/INPUT|TEXTAREA/.test(evt && evt.target && evt.target.tagName)) { - return; - } - var unicode = evt.charCode || evt.keyCode, - actualkey = String.fromCharCode(unicode), - mappedFunction = charEventHandlers[actualkey]; - mapModel.getYsy().log.debug("keydown " + actualkey + " => " + mappedFunction, "keys"); - if (mappedFunction) { - evt.preventDefault(); - mapModel[mappedFunction]('keyboard'); - } else if (Number(actualkey) <= 9 && Number(actualkey) >= 1) { - evt.preventDefault(); - mapModel.activateLevel('keyboard', Number(actualkey) + 1); - } - }); - }); -}; diff --git a/plugins/easy_mindmup/assets/javascripts/mindmup/hammer-draggable.js b/plugins/easy_mindmup/assets/javascripts/mindmup/hammer-draggable.js deleted file mode 100644 index 9a3678f..0000000 --- a/plugins/easy_mindmup/assets/javascripts/mindmup/hammer-draggable.js +++ /dev/null @@ -1,153 +0,0 @@ -/*global $, Hammer*/ -/*jslint newcap:true*/ -(function () { - 'use strict'; - $.fn.simpleDraggableContainer = function () { - var currentDragObject, - originalDragObjectPosition, - originalScroll, - container = this, - drag = function (event) { - - if (currentDragObject && event.gesture) { - var currentScroll = $(document).scrollTop(); - var newpos = { - top: Math.round(originalDragObjectPosition.top + event.gesture.deltaY - originalScroll + currentScroll), - left: Math.round(originalDragObjectPosition.left + event.gesture.deltaX) - }; - currentDragObject.offset(newpos).trigger($.Event('mm:drag', { - currentPosition: newpos, - gesture: event.gesture - })); - if (event.gesture) { - event.gesture.preventDefault(); - } - return false; - } - }, - rollback = function (e) { - var target = currentDragObject; // allow it to be cleared while animating - if (target.attr('mapjs-drag-role') !== 'shadow') { - target.animate(originalDragObjectPosition, { - complete: function () { - target.trigger($.Event('mm:cancel-dragging', {gesture: e.gesture})); - }, - progress: function () { - target.trigger('mm:drag'); - } - }); - } else { - target.trigger($.Event('mm:cancel-dragging', {gesture: e.gesture})); - } - }; - Hammer(this, {'drag_min_distance': 2}); - return this.on('mm:start-dragging', function (event) { - if (!currentDragObject) { - currentDragObject = $(event.relatedTarget); - //originalDragObjectPosition = { - // top: currentDragObject.css('top'), - // left: currentDragObject.css('left') - //}; - originalScroll = $(document).scrollTop(); - originalDragObjectPosition = currentDragObject.offset(); - $(this).on('drag', drag); - } - }).on('mm:start-dragging-shadow', function (event) { - var target = $(event.relatedTarget), - clone = function () { - var result = target.clone().addClass('drag-shadow').appendTo(container).offset(target.offset()).data(target.data()).attr('mapjs-drag-role', 'shadow'), - scale = target.parent().data('scale') || 1; - if (scale !== 0) { - result.css({ - 'transform': 'scale(' + scale + ')', - 'transform-origin': 'top left' - }); - } - return result; - }; - if (!currentDragObject) { - currentDragObject = clone(); - //originalDragObjectPosition = { - // top: currentDragObject.css('top'), - // left: currentDragObject.css('left') - //}; - originalScroll = $(document).scrollTop(); - originalDragObjectPosition = currentDragObject.offset(); - currentDragObject.on('mm:stop-dragging mm:cancel-dragging', function (e) { - $(this).remove(); - e.stopPropagation(); - e.stopImmediatePropagation(); - var evt = $.Event(e.type, { - gesture: e.gesture, - finalPosition: e.finalPosition - }); - target.trigger(evt); - }).on('mm:drag', function (e) { - target.trigger(e); - }); - $(this).on('drag', drag); - } - }).on('dragend', function (e) { - $(this).off('drag', drag); - if (currentDragObject) { - var evt = $.Event('mm:stop-dragging', { - gesture: e.gesture, - finalPosition: currentDragObject.offset() - }); - currentDragObject.trigger(evt); - if (evt.result === false) { - rollback(e); - } - currentDragObject = undefined; - } - }).on('mouseleave', function (e) { - if (currentDragObject) { - $(this).off('drag', drag); - rollback(e); - currentDragObject = undefined; - } - }).attr('data-drag-role', 'container'); - }; - - var onDrag = function (e) { - $(this).trigger( - $.Event('mm:start-dragging', { - relatedTarget: this, - gesture: e.gesture - }) - ); - e.stopPropagation(); - e.preventDefault(); - if (e.gesture) { - e.gesture.stopPropagation(); - e.gesture.preventDefault(); - } - }, onShadowDrag = function (e) { - $(this).trigger( - $.Event('mm:start-dragging-shadow', { - relatedTarget: this, - gesture: e.gesture - }) - ); - e.stopPropagation(); - e.preventDefault(); - if (e.gesture) { - e.gesture.stopPropagation(); - e.gesture.preventDefault(); - } - }; - $.fn.simpleDraggable = function (options) { - if (!options || !options.disable) { - return $(this).on('dragstart', onDrag); - } else { - return $(this).off('dragstart', onDrag); - } - }; - $.fn.shadowDraggable = function (options) { - if (!options || !options.disable) { - return $(this).on('dragstart', onShadowDrag); - } else { - return $(this).off('dragstart', onShadowDrag); - } - }; -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/mindmup/image-drop-widget.js b/plugins/easy_mindmup/assets/javascripts/mindmup/image-drop-widget.js deleted file mode 100644 index 4d139e7..0000000 --- a/plugins/easy_mindmup/assets/javascripts/mindmup/image-drop-widget.js +++ /dev/null @@ -1,109 +0,0 @@ -/*global observable, jQuery, FileReader, Image, MAPJS, document, _ */ -MAPJS.getDataURIAndDimensions = function (src, corsProxyUrl) { - 'use strict'; - var isDataUri = function (string) { - return (/^data:image/).test(string); - }, - convertSrcToDataUri = function (img) { - if (isDataUri(img.src)) { - return img.src; - } - var canvas = document.createElement('canvas'), - ctx; - canvas.width = img.width; - canvas.height = img.height; - ctx = canvas.getContext('2d'); - ctx.drawImage(img, 0, 0); - return canvas.toDataURL('image/png'); - }, - deferred = jQuery.Deferred(), - domImg = new Image(); - - domImg.onload = function () { - try { - deferred.resolve({dataUri: convertSrcToDataUri(domImg), width: domImg.width, height: domImg.height}); - } catch (e) { - deferred.reject(); - } - }; - domImg.onerror = function () { - deferred.reject(); - }; - if (!isDataUri(src)) { - if (corsProxyUrl) { - domImg.crossOrigin = 'Anonymous'; - src = corsProxyUrl + encodeURIComponent(src); - } else { - deferred.reject('no-cors'); - } - } - domImg.src = src; - return deferred.promise(); -}; -MAPJS.ImageInsertController = function (corsProxyUrl, resourceConverter) { - 'use strict'; - var self = observable(this), - readFileIntoDataUrl = function (fileInfo) { - var loader = jQuery.Deferred(), - fReader = new FileReader(); - fReader.onload = function (e) { - loader.resolve(e.target.result); - }; - fReader.onerror = loader.reject; - fReader.onprogress = loader.notify; - fReader.readAsDataURL(fileInfo); - return loader.promise(); - }; - self.insertDataUrl = function (dataUrl, evt) { - self.dispatchEvent('imageLoadStarted'); - MAPJS.getDataURIAndDimensions(dataUrl, corsProxyUrl).then( - function (result) { - var storeUrl = result.dataUri; - if (resourceConverter) { - storeUrl = resourceConverter(storeUrl); - } - self.dispatchEvent('imageInserted', storeUrl, result.width, result.height, evt); - }, - function (reason) { - self.dispatchEvent('imageInsertError', reason); - } - ); - }; - self.insertFiles = function (files, evt) { - jQuery.each(files, function (idx, fileInfo) { - if (/^image\//.test(fileInfo.type)) { - jQuery.when(readFileIntoDataUrl(fileInfo)).done(function (dataUrl) { - self.insertDataUrl(dataUrl, evt); - }); - } - }); - }; - self.insertHtmlContent = function (htmlContent, evt) { - var images = htmlContent.match(/img[^>]*src="([^"]*)"/); - if (images && images.length > 0) { - _.each(images.slice(1), function (dataUrl) { - self.insertDataUrl(dataUrl, evt); - }); - } - }; -}; -jQuery.fn.imageDropWidget = function (imageInsertController) { - 'use strict'; - this.on('dragenter dragover', function (e) { - if (e.originalEvent.dataTransfer) { - return false; - } - }).on('drop', function (e) { - var dataTransfer = e.originalEvent.dataTransfer, - htmlContent; - e.stopPropagation(); - e.preventDefault(); - if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) { - imageInsertController.insertFiles(dataTransfer.files, e.originalEvent); - } else if (dataTransfer) { - htmlContent = dataTransfer.getData('text/html'); - imageInsertController.insertHtmlContent(htmlContent, e.originalEvent); - } - }); - return this; -}; diff --git a/plugins/easy_mindmup/assets/javascripts/mindmup/layout.js b/plugins/easy_mindmup/assets/javascripts/mindmup/layout.js deleted file mode 100644 index 080f4f9..0000000 --- a/plugins/easy_mindmup/assets/javascripts/mindmup/layout.js +++ /dev/null @@ -1,349 +0,0 @@ -/*jslint nomen: true*/ -/*global _, Color, MAPJS*/ -MAPJS.defaultStyles = {}; -MAPJS.layoutLinks = function (idea, visibleNodes) { - 'use strict'; - var result = {}; - _.each(idea.links, function (link) { - if (visibleNodes[link.ideaIdFrom] && visibleNodes[link.ideaIdTo]) { - result[link.ideaIdFrom + '_' + link.ideaIdTo] = { - ideaIdFrom: link.ideaIdFrom, - ideaIdTo: link.ideaIdTo, - attr: _.clone(link.attr) - }; - //todo - clone - } - }); - return result; -}; -MAPJS.calculateFrame = function (nodes, margin) { - 'use strict'; - margin = margin || 0; - var result = { - top: _.min(nodes, function (node) { - return node.y; - }).y - margin, - left: _.min(nodes, function (node) { - return node.x; - }).x - margin - }; - result.width = margin + _.max(_.map(nodes, function (node) { - return node.x + node.width; - })) - result.left; - result.height = margin + _.max(_.map(nodes, function (node) { - return node.y + node.height; - })) - result.top; - return result; -}; -MAPJS.contrastForeground = function (background) { - 'use strict'; - /*jslint newcap:true*/ - var luminosity = Color(background).luminosity(); - if (luminosity < 0.5) { - return '#EEEEEE'; - } - if (luminosity < 0.9) { - return '#4F4F4F'; - } - return '#000000'; -}; -MAPJS.Outline = function (topBorder, bottomBorder) { - 'use strict'; - var shiftBorder = function (border, deltaH) { - return _.map(border, function (segment) { - return { - l: segment.l, - h: segment.h + deltaH - }; - }); - }; - this.initialHeight = function () { - return this.bottom[0].h - this.top[0].h; - }; - this.borders = function () { - return _.pick(this, 'top', 'bottom'); - }; - this.spacingAbove = function (outline) { - var i = 0, j = 0, result = 0, li = 0, lj = 0; - while (i < this.bottom.length && j < outline.top.length) { - result = Math.max(result, this.bottom[i].h - outline.top[j].h); - if (li + this.bottom[i].l < lj + outline.top[j].l) { - li += this.bottom[i].l; - i += 1; - } else if (li + this.bottom[i].l === lj + outline.top[j].l) { - li += this.bottom[i].l; - i += 1; - lj += outline.top[j].l; - j += 1; - } else { - lj += outline.top[j].l; - j += 1; - } - } - return result; - }; - this.indent = function (horizontalIndent, margin) { - if (!horizontalIndent) { - return this; - } - var top = this.top.slice(), - bottom = this.bottom.slice(), - vertCenter = (bottom[0].h + top[0].h) / 2; - top.unshift({h: vertCenter - margin / 2, l: horizontalIndent}); - bottom.unshift({h: vertCenter + margin / 2, l: horizontalIndent}); - return new MAPJS.Outline(top, bottom); - }; - this.stackBelow = function (outline, margin) { - var spacing = outline.spacingAbove(this), - top = MAPJS.Outline.extendBorder(outline.top, shiftBorder(this.top, spacing + margin)), - bottom = MAPJS.Outline.extendBorder(shiftBorder(this.bottom, spacing + margin), outline.bottom); - return new MAPJS.Outline( - top, - bottom - ); - }; - this.expand = function (initialTopHeight, initialBottomHeight) { - var topAlignment = initialTopHeight - this.top[0].h, - bottomAlignment = initialBottomHeight - this.bottom[0].h, - top = shiftBorder(this.top, topAlignment), - bottom = shiftBorder(this.bottom, bottomAlignment); - return new MAPJS.Outline( - top, - bottom - ); - }; - this.insertAtStart = function (dimensions, margin) { - var alignment = 0, //-1 * this.top[0].h - suboutlineHeight * 0.5, - topBorder = shiftBorder(this.top, alignment), - bottomBorder = shiftBorder(this.bottom, alignment), - easeIn = function (border) { - border[0].l *= 0.5; - border[1].l += border[0].l; - }; - topBorder[0].l += margin; - bottomBorder[0].l += margin; - topBorder.unshift({h: -0.5 * dimensions.height, l: dimensions.width}); - bottomBorder.unshift({h: 0.5 * dimensions.height, l: dimensions.width}); - if (topBorder[0].h > topBorder[1].h) { - easeIn(topBorder); - } - if (bottomBorder[0].h < bottomBorder[1].h) { - easeIn(bottomBorder); - } - return new MAPJS.Outline(topBorder, bottomBorder); - }; - this.top = topBorder.slice(); - this.bottom = bottomBorder.slice(); -}; -MAPJS.Outline.borderLength = function (border) { - 'use strict'; - return _.reduce(border, function (seed, el) { - return seed + el.l; - }, 0); -}; -MAPJS.Outline.borderSegmentIndexAt = function (border, length) { - 'use strict'; - var l = 0, i = -1; - while (l <= length) { - i += 1; - if (i >= border.length) { - return -1; - } - l += border[i].l; - } - return i; -}; -MAPJS.Outline.extendBorder = function (originalBorder, extension) { - 'use strict'; - var result = originalBorder.slice(), - origLength = MAPJS.Outline.borderLength(originalBorder), - i = MAPJS.Outline.borderSegmentIndexAt(extension, origLength), - lengthToCut; - if (i >= 0) { - lengthToCut = MAPJS.Outline.borderLength(extension.slice(0, i + 1)); - result.push({h: extension[i].h, l: lengthToCut - origLength}); - result = result.concat(extension.slice(i + 1)); - } - return result; -}; -MAPJS.Tree = function (options) { - 'use strict'; - _.extend(this, options); - this.toLayout = function (x, y, parentId) { - x = x || 0; - y = y || 0; - var result = { - nodes: {}, - connectors: {} - }, self; - self = _.pick(this, 'id', 'title', 'attr', 'width', 'height', 'level'); - self.attr.data = _.extend({}, self.attr.data); - if (self.level === 1) { - self.x = -0.5 * this.width; - self.y = -0.5 * this.height; - } else { - self.x = x + this.deltaX || 0; - self.y = y + this.deltaY || 0; - } - if (!self.attr.style) { - self.attr.style = {}; - } - result.nodes[this.id] = self; - if (parentId !== undefined) { - result.connectors[self.id] = { - from: parentId, - to: self.id - }; - } - if (this.subtrees) { - this.subtrees.forEach(function (t) { - var subLayout = t.toLayout(self.x, self.y, self.id); - _.extend(result.nodes, subLayout.nodes); - _.extend(result.connectors, subLayout.connectors); - }); - } - return result; - }; -}; -MAPJS.Outline.fromDimensions = function (dimensions) { - 'use strict'; - return new MAPJS.Outline([{ - h: -0.5 * dimensions.height, - l: dimensions.width - }], [{ - h: 0.5 * dimensions.height, - l: dimensions.width - }]); -}; -MAPJS.calculateTree = function (content, dimensionProvider, margin, rankAndParentPredicate, level) { - 'use strict'; - var options = { - id: content.id, - title: content.title, - attr: $.extend({}, content.attr, {hasChildren: !_.isEmpty(content.ideas)}), - deltaY: 0, - deltaX: 0, - level: level || 1 - }, - setVerticalSpacing = function (treeArray, dy) { - var i, - tree, - oldSpacing, - newSpacing, - oldPositions = _.map(treeArray, function (t) { - return _.pick(t, 'deltaX', 'deltaY'); - }), - referenceTree, - alignment; - for (i = 0; i < treeArray.length; i += 1) { - tree = treeArray[i]; - if (tree.attr && tree.attr.position) { - tree.deltaY = tree.attr.position[1]; - if (referenceTree === undefined || tree.attr.position[2] > treeArray[referenceTree].attr.position[2]) { - referenceTree = i; - } - } else { - tree.deltaY += dy; - } - if (i > 0) { - oldSpacing = oldPositions[i].deltaY - oldPositions[i - 1].deltaY; - newSpacing = treeArray[i].deltaY - treeArray[i - 1].deltaY; - if (newSpacing < oldSpacing) { - tree.deltaY += oldSpacing - newSpacing; - } - } - } - alignment = referenceTree && (treeArray[referenceTree].attr.position[1] - treeArray[referenceTree].deltaY); - if (alignment) { - for (i = 0; i < treeArray.length; i += 1) { - treeArray[i].deltaY += alignment; - } - } - }, - shouldIncludeSubIdeas = function () { - return !(_.isEmpty(content.ideas) || (content.attr && content.attr.collapsed)); - }, - includedSubIdeaKeys = function () { - var allRanks = _.map(_.keys(content.ideas), parseFloat), - includedRanks = rankAndParentPredicate ? _.filter(allRanks, function (rank) { - return rankAndParentPredicate(rank, content); - }) : allRanks; - return _.sortBy(includedRanks, Math.abs); - }, - includedSubIdeas = function () { - var result = []; - _.each(includedSubIdeaKeys(), function (key) { - result.push(content.ideas[key]); - }); - return result; - }, - nodeDimensions = dimensionProvider(content, options.level), - appendSubtrees = function (subtrees) { - var suboutline, deltaHeight, subtreePosition, horizontal, treeOutline; - _.each(subtrees, function (subtree) { - subtree.deltaX = nodeDimensions.width + margin; - subtreePosition = subtree.attr && subtree.attr.position && subtree.attr.position[0]; - if (subtreePosition && subtreePosition > subtree.deltaX) { - horizontal = subtreePosition - subtree.deltaX; - subtree.deltaX = subtreePosition; - } else { - horizontal = 0; - } - if (!suboutline) { - suboutline = subtree.outline.indent(horizontal, margin); - } else { - treeOutline = subtree.outline.indent(horizontal, margin); - deltaHeight = treeOutline.initialHeight(); - suboutline = treeOutline.stackBelow(suboutline, margin); - subtree.deltaY = suboutline.initialHeight() - deltaHeight / 2 - subtree.height / 2; - } - }); - if (subtrees && subtrees.length) { - setVerticalSpacing(subtrees, 0.5 * (nodeDimensions.height - suboutline.initialHeight())); - suboutline = suboutline.expand( - subtrees[0].deltaY - nodeDimensions.height * 0.5, - subtrees[subtrees.length - 1].deltaY + subtrees[subtrees.length - 1].height - nodeDimensions.height * 0.5 - ); - } - options.outline = suboutline.insertAtStart(nodeDimensions, margin); - }; - _.extend(options, nodeDimensions); - options.outline = new MAPJS.Outline.fromDimensions(nodeDimensions); - if (shouldIncludeSubIdeas()) { - options.subtrees = _.map(includedSubIdeas(), function (i) { - return MAPJS.calculateTree(i, dimensionProvider, margin, rankAndParentPredicate, options.level + 1); - }); - if (!_.isEmpty(options.subtrees)) { - appendSubtrees(options.subtrees); - } - } - return new MAPJS.Tree(options); -}; - -MAPJS.calculateLayout = function (idea, dimensionProvider, margin,layoutPredicate) { - 'use strict'; - var positiveTree, negativeTree, layout, negativeLayout, positive, negative, - setDefaultStyles = function (nodes) { - _.each(nodes, function (node) { - node.attr = node.attr || {}; - node.attr.style = _.extend({}, MAPJS.defaultStyles[(node.level === 1) ? 'root' : 'nonRoot'], node.attr.style); - }); - }; - positive = layoutPredicate(idea, true); - negative = layoutPredicate(idea, false); - margin = margin || 20; - positiveTree = MAPJS.calculateTree(idea, dimensionProvider, margin, positive); - negativeTree = MAPJS.calculateTree(idea, dimensionProvider, margin, negative); - layout = positiveTree.toLayout(); - negativeLayout = negativeTree.toLayout(); - _.each(negativeLayout.nodes, function (n) { - n.x = -1 * n.x - n.width; - }); - _.extend(negativeLayout.nodes, layout.nodes); - _.extend(negativeLayout.connectors, layout.connectors); - setDefaultStyles(negativeLayout.nodes); - negativeLayout.links = MAPJS.layoutLinks(idea, negativeLayout.nodes); - negativeLayout.rootNodeId = idea.id; - return negativeLayout; -}; - diff --git a/plugins/easy_mindmup/assets/javascripts/mindmup/link-edit-widget.js b/plugins/easy_mindmup/assets/javascripts/mindmup/link-edit-widget.js deleted file mode 100644 index d705765..0000000 --- a/plugins/easy_mindmup/assets/javascripts/mindmup/link-edit-widget.js +++ /dev/null @@ -1,40 +0,0 @@ -/*global jQuery*/ -jQuery.fn.linkEditWidget = function (mapModel) { - 'use strict'; - return this.each(function () { - var element = jQuery(this), currentLink, width, height, colorElement, lineStyleElement, arrowElement; - colorElement = element.find('.color'); - lineStyleElement = element.find('.lineStyle'); - arrowElement = element.find('.arrow'); - mapModel.addEventListener('linkSelected', function (link, selectionPoint, linkStyle) { - currentLink = link; - element.show(); - width = width || element.width(); - height = height || element.height(); - element.css({ - top: (selectionPoint.y - 0.5 * height - 15) + 'px', - left: (selectionPoint.x - 0.5 * width - 15) + 'px' - }); - colorElement.val(linkStyle.color).change(); - lineStyleElement.val(linkStyle.lineStyle); - arrowElement[linkStyle.arrow ? 'addClass' : 'removeClass']('active'); - }); - mapModel.addEventListener('mapMoveRequested', function () { - element.hide(); - }); - element.find('.delete').click(function () { - mapModel.removeLink('mouse', currentLink.ideaIdFrom, currentLink.ideaIdTo); - element.hide(); - }); - colorElement.change(function () { - mapModel.updateLinkStyle('mouse', currentLink.ideaIdFrom, currentLink.ideaIdTo, 'color', jQuery(this).val()); - }); - lineStyleElement.find('a').click(function () { - mapModel.updateLinkStyle('mouse', currentLink.ideaIdFrom, currentLink.ideaIdTo, 'lineStyle', jQuery(this).text()); - }); - arrowElement.click(function () { - mapModel.updateLinkStyle('mouse', currentLink.ideaIdFrom, currentLink.ideaIdTo, 'arrow', !arrowElement.hasClass('active')); - }); - element.mouseleave(element.hide.bind(element)); - }); -}; diff --git a/plugins/easy_mindmup/assets/javascripts/mindmup/map-model.js b/plugins/easy_mindmup/assets/javascripts/mindmup/map-model.js deleted file mode 100644 index 2e41758..0000000 --- a/plugins/easy_mindmup/assets/javascripts/mindmup/map-model.js +++ /dev/null @@ -1,1230 +0,0 @@ -/*jslint forin: true, nomen: true*/ -/*global _, MAPJS, observable*/ -MAPJS.MapModel = function (layoutCalculatorArg, selectAllTitles, clipboardProvider, defaultReorderMargin) { - 'use strict'; - var self = this, - layoutCalculator = layoutCalculatorArg, - reorderMargin = defaultReorderMargin || 20, - clipboard = clipboardProvider || new MAPJS.MemoryClipboard(), - analytic, - currentLayout = { - nodes: {}, - connectors: {} - }, - idea, - currentLabelGenerator, - isInputEnabled = true, - isEditingEnabled = true, - currentlySelectedIdeaId, - activatedNodes = [], - setActiveNodes = function (activated) { - var wasActivated = _.clone(activatedNodes); - if (activated.length === 0) { - activatedNodes = [currentlySelectedIdeaId]; - } else { - activatedNodes = activated; - } - self.dispatchEvent('activatedNodesChanged', _.difference(activatedNodes, wasActivated), _.difference(wasActivated, activatedNodes)); - }, - horizontalSelectionThreshold = 300, - isAddLinkMode, - applyLabels = function (newLayout) { - var labelMap; - if (!currentLabelGenerator) { - return; - } - labelMap = currentLabelGenerator(idea); - _.each(newLayout.nodes, function (node, id) { - if (labelMap[id] || labelMap[id] === 0) { - node.label = labelMap[id]; - } - }); - }, - updateCurrentLayout = function (newLayout, sessionId) { - self.getYsy().log.debug("updateCurrentLayout", "redraw"); - self.dispatchEvent('layoutChangeStarting', _.size(newLayout.nodes) - _.size(currentLayout.nodes)); - applyLabels(newLayout); - - _.each(currentLayout.connectors, function (oldConnector, connectorId) { - var newConnector = newLayout.connectors[connectorId]; - if (!newConnector || newConnector.from !== oldConnector.from || newConnector.to !== oldConnector.to) { - self.dispatchEvent('connectorRemoved', oldConnector); - } - }); - _.each(currentLayout.links, function (oldLink, linkId) { - var newLink = newLayout.links && newLayout.links[linkId]; - if (!newLink) { - self.dispatchEvent('linkRemoved', oldLink); - } - }); - _.each(currentLayout.nodes, function (oldNode, nodeId) { - var newNode = newLayout.nodes[nodeId], - newActive; - if (!newNode) { - /*jslint eqeq: true*/ - if (nodeId == currentlySelectedIdeaId) { - self.selectNode(idea.id); - } - newActive = _.reject(activatedNodes, function (e) { - return e == nodeId; - }); - if (newActive.length !== activatedNodes.length) { - setActiveNodes(newActive); - } - self.dispatchEvent('nodeRemoved', oldNode, nodeId, sessionId); - } - }); - - _.each(newLayout.nodes, function (newNode, nodeId) { - var oldNode = currentLayout.nodes[nodeId]; - if (!oldNode) { - self.dispatchEvent('nodeCreated', newNode, sessionId); - } else { - if (newNode.x !== oldNode.x || newNode.y !== oldNode.y) { - //ysy.log.debug("CONTENT: "+newNode.title+" old=["+oldNode.x+","+oldNode.y+"] new=["+newNode.x+","+newNode.y+"]"); - self.dispatchEvent('nodeMoved', newNode, sessionId); - } - if (newNode.title !== oldNode.title) { - self.dispatchEvent('nodeTitleChanged', newNode, sessionId); - } - if (!_.isEqual(newNode.attr || {}, oldNode.attr || {})) { - self.dispatchEvent('nodeAttrChanged', newNode, sessionId); - } - if (newNode.label !== oldNode.label) { - self.dispatchEvent('nodeLabelChanged', newNode, sessionId); - } - } - }); - _.each(newLayout.connectors, function (newConnector, connectorId) { - var oldConnector = currentLayout.connectors[connectorId]; - if (!oldConnector || newConnector.from !== oldConnector.from || newConnector.to !== oldConnector.to) { - self.dispatchEvent('connectorCreated', newConnector, sessionId); - } - }); - _.each(newLayout.links, function (newLink, linkId) { - var oldLink = currentLayout.links && currentLayout.links[linkId]; - if (oldLink) { - if (!_.isEqual(newLink.attr || {}, (oldLink && oldLink.attr) || {})) { - self.dispatchEvent('linkAttrChanged', newLink, sessionId); - } - } else { - self.dispatchEvent('linkCreated', newLink, sessionId); - } - }); - currentLayout = newLayout; - if (!self.isInCollapse) { - self.dispatchEvent('layoutChangeComplete'); - } - }, - revertSelectionForUndo, - revertActivatedForUndo, - selectNewIdea = function (newIdeaId) { - revertSelectionForUndo = currentlySelectedIdeaId; - revertActivatedForUndo = activatedNodes.slice(0); - self.selectNode(newIdeaId); - }, - editNewIdea = function (newIdeaId) { - selectNewIdea(newIdeaId); - self.editNode(false, true, true); - }, - getCurrentlySelectedIdeaId = function () { - return currentlySelectedIdeaId || idea.id; - }, - paused = false, - onIdeaChanged = function (action, args, sessionId) { - if (paused) { - return; - } - revertSelectionForUndo = false; - revertActivatedForUndo = false; - self.rebuildRequired(sessionId); - }, - currentlySelectedIdea = function () { - return (idea.findSubIdeaById(currentlySelectedIdeaId) || idea); - }, - ensureNodeIsExpanded = function (source, nodeId) { - var node = idea.findSubIdeaById(nodeId) || idea; - if (node.getAttr('collapsed')) { - idea.updateAttr(nodeId, 'collapsed', false); - } - }; - observable(this); - analytic = self.dispatchEvent.bind(self, 'analytic', 'mapModel'); - self.pause = function () { - paused = true; - }; - self.resume = function () { - paused = false; - self.rebuildRequired(); - }; - self.getIdea = function () { - return idea; - }; - self.isEditingEnabled = function () { - return isEditingEnabled; - }; - self.getCurrentLayout = function () { - return currentLayout; - }; - self.analytic = analytic; - self.getCurrentlySelectedIdeaId = getCurrentlySelectedIdeaId; - self.rebuildRequired = function (sessionId) { - if (!idea) { - return; - } - updateCurrentLayout(self.reactivate(layoutCalculator(idea)), sessionId); - }; - this.setIdea = function (anIdea) { - if (idea) { - idea.removeEventListener('changed', onIdeaChanged); - paused = false; - setActiveNodes([]); - self.dispatchEvent('nodeSelectionChanged', currentlySelectedIdeaId, false); - currentlySelectedIdeaId = undefined; - } - idea = anIdea; - idea.addEventListener('changed', onIdeaChanged); - onIdeaChanged(); - self.selectNode(idea.id, true); - self.dispatchEvent('mapViewResetRequested'); - }; - this.setEditingEnabled = function (value) { - isEditingEnabled = value; - }; - this.getEditingEnabled = function () { - return isEditingEnabled; - }; - this.setInputEnabled = function (value, holdFocus) { - if (isInputEnabled !== value) { - isInputEnabled = value; - self.dispatchEvent('inputEnabledChanged', value, !!holdFocus); - } - }; - this.getInputEnabled = function () { - return isInputEnabled; - }; - this.selectNode = function (id, force, appendToActive) { - if (force || (isInputEnabled && (id !== currentlySelectedIdeaId || !self.isActivated(id)))) { - if (currentlySelectedIdeaId) { - self.dispatchEvent('nodeSelectionChanged', currentlySelectedIdeaId, false); - } - currentlySelectedIdeaId = id; - if (appendToActive) { - self.activateNode('internal', id); - } else { - setActiveNodes([id]); - } - - self.dispatchEvent('nodeSelectionChanged', id, true); - } - }; - this.clickNode = function (id, event) { - var button = event && event.button && event.button !== -1; - if (event && event.altKey) { - self.followURL(id); - //self.toggleLink('mouse', id); // HOSEK - } else if (event && (event.shiftKey || event.ctrlKey)) { - /*don't stop propagation, this is needed for drop targets*/ - self.toggleActivationOnNode('mouse', id); - } else if (isAddLinkMode && !button) { - this.toggleLink('mouse', id); - this.toggleAddLinkMode(); - } else { - this.selectNode(id); - if (button && button !== -1 && isInputEnabled) { - self.dispatchEvent('contextMenuRequested', id, event.layerX, event.layerY); - } - } - }; - this.findIdeaById = function (id) { - /*jslint eqeq:true */ - if (idea.id == id) { - return idea; - } - return idea.findSubIdeaById(id); - }; - this.getSelectedStyle = function (prop) { - return this.getStyleForId(currentlySelectedIdeaId, prop); - }; - this.getStyleForId = function (id, prop) { - var node = currentLayout.nodes && currentLayout.nodes[id]; - return node && node.attr && node.attr.style && node.attr.style[prop]; - }; - this.toggleCollapse = function (source) { - var selectedIdea = currentlySelectedIdea(), - isCollapsed; - if (self.isActivated(selectedIdea.id) && _.size(selectedIdea.ideas) > 0) { - isCollapsed = selectedIdea.getAttr('collapsed'); - } else { - isCollapsed = self.everyActivatedIs(function (id) { - var node = self.findIdeaById(id); - if (node && _.size(node.ideas) > 0) { - return node.getAttr('collapsed'); - } - return true; - }); - } - this.collapse(source, !isCollapsed); - }; - this.collapse = function (source, doCollapse) { - - var contextNodeId = getCurrentlySelectedIdeaId(), - contextNode = function () { - return contextNodeId && currentLayout && currentLayout.nodes && currentLayout.nodes[contextNodeId]; - }, - moveNodes = function (nodes, deltaX, deltaY) { - if (deltaX || deltaY) { - _.each(nodes, function (node) { - node.x += deltaX; - node.y += deltaY; - self.dispatchEvent('nodeMoved', node, 'scroll'); - }); - } - }, - oldContext, - newContext; - analytic('collapse:' + doCollapse, source); - self.isInCollapse = true; - oldContext = contextNode(); - if (isInputEnabled) { - self.applyToActivated(function (id) { - var node = self.findIdeaById(id); - if (node && (!doCollapse || (node.ideas && _.size(node.ideas) > 0))) { - idea.updateAttr(id, 'collapsed', doCollapse); - } - }); - } - newContext = contextNode(); - if (oldContext && newContext) { - moveNodes( - currentLayout.nodes, - oldContext.x - newContext.x, - oldContext.y - newContext.y - ); - } - self.isInCollapse = false; - self.dispatchEvent('layoutChangeComplete'); - }; - this.updateStyle = function (source, prop, value) { - /*jslint eqeq:true */ - if (!isEditingEnabled) { - return false; - } - if (isInputEnabled) { - analytic('updateStyle:' + prop, source); - self.applyToActivated(function (id) { - if (self.getStyleForId(id, prop) != value) { - idea.mergeAttrProperty(id, 'style', prop, value); - } - }); - } - }; - this.updateLinkStyle = function (source, ideaIdFrom, ideaIdTo, prop, value) { - var merged = _.extend({}, idea.getLinkAttr(ideaIdFrom, ideaIdTo, 'style')); - if (!isEditingEnabled) { - return false; - } - if (isInputEnabled) { - analytic('updateLinkStyle:' + prop, source); - merged[prop] = value; - idea.updateLinkAttr(ideaIdFrom, ideaIdTo, 'style', merged); - } - }; - this.addSubIdea = function (source, parentId, initialTitle) { - var target = parentId || currentlySelectedIdeaId, newId; - if (!isEditingEnabled) { - return false; - } - analytic('addSubIdea', source); - if (isInputEnabled) { - idea.batch(function () { - ensureNodeIsExpanded(source, target); - if (initialTitle) { - newId = idea.addSubIdea(target, initialTitle); - } else { - newId = idea.addSubIdea(target); - } - }); - if (newId) { - if (initialTitle) { - selectNewIdea(newId); - } else { - editNewIdea(newId); - } - } - } - - }; - this.insertIntermediate = function (source) { - var activeNodes = [], newId; - if (!isEditingEnabled) { - return false; - } - if (!isInputEnabled || currentlySelectedIdeaId === idea.id) { - return false; - } - analytic('insertIntermediate', source); - self.applyToActivated(function (i) { - activeNodes.push(i); - }); - newId = idea.insertIntermediateMultiple(activeNodes); - if (newId) { - editNewIdea(newId); - } - }; - this.flip = function (source) { - var node = currentLayout && currentLayout.nodes && currentLayout.nodes[currentlySelectedIdeaId]; - - if (!isEditingEnabled) { - return false; - } - analytic('flip', source); - if (!isInputEnabled || currentlySelectedIdeaId === idea.id) { - return false; - } - if (!node || node.level !== 2) { - return false; - } - - return idea.flip(currentlySelectedIdeaId); - }; - this.addSiblingIdeaBefore = function (source) { - var newId, parent, contextRank, newRank; - if (!isEditingEnabled) { - return false; - } - analytic('addSiblingIdeaBefore', source); - if (!isInputEnabled) { - return false; - } - parent = idea.findParent(currentlySelectedIdeaId) || idea; - idea.batch(function () { - ensureNodeIsExpanded(source, parent.id); - newId = idea.addSubIdea(parent.id); - if (newId && currentlySelectedIdeaId !== idea.id) { - contextRank = parent.findChildRankById(currentlySelectedIdeaId); - newRank = parent.findChildRankById(newId); - if (contextRank * newRank < 0) { - idea.flip(newId); - } - idea.positionBefore(newId, currentlySelectedIdeaId); - } - }); - if (newId) { - editNewIdea(newId); - } - }; - this.addSiblingIdea = function (source, optionalNodeId, optionalInitialText) { - var newId, nextId, parent, contextRank, newRank, currentId; - currentId = optionalNodeId || currentlySelectedIdeaId; - if (!isEditingEnabled) { - return false; - } - analytic('addSiblingIdea', source); - if (isInputEnabled) { - parent = idea.findParent(currentId) || idea; - idea.batch(function () { - ensureNodeIsExpanded(source, parent.id); - if (optionalInitialText) { - newId = idea.addSubIdea(parent.id, optionalInitialText); - } else { - newId = idea.addSubIdea(parent.id); - } - if (newId && currentId !== idea.id) { - nextId = idea.nextSiblingId(currentId); - contextRank = parent.findChildRankById(currentId); - newRank = parent.findChildRankById(newId); - if (contextRank * newRank < 0) { - idea.flip(newId); - } - if (nextId) { - idea.positionBefore(newId, nextId); - } - } - }); - if (newId) { - if (optionalInitialText) { - selectNewIdea(newId); - } else { - editNewIdea(newId); - } - } - } - }; - this.removeSubIdea = function (source) { - var removed; - if (!isEditingEnabled) { - return false; - } - analytic('removeSubIdea', source); - if (isInputEnabled) { - self.applyToActivated(function (id) { - /*jslint eqeq:true */ - var parent; - if (currentlySelectedIdeaId == id) { - parent = idea.findParent(currentlySelectedIdeaId); - if (parent) { - self.selectNode(parent.id); - } - } - removed = idea.removeSubIdea(id); - }); - } - return removed; - }; - this.updateTitle = function (ideaId, title, isNew) { - if (isNew) { - idea.initialiseTitle(ideaId, title); - } else { - idea.updateTitle(ideaId, title); - } - }; - this.editNode = function (source, shouldSelectAll, editingNew) { - var title; - if (!isEditingEnabled) { - return false; - } - if (source) { - analytic('editNode', source); - } - if (!isInputEnabled) { - return false; - } - var idea = currentlySelectedIdea(); - if (!self.getYsy().validator.validate("nodeRename", idea)) return false; - - title = idea.title; - if (_.include(selectAllTitles, title)) { // === 'Press Space or double-click to edit') { - shouldSelectAll = true; - } - self.dispatchEvent('nodeEditRequested', currentlySelectedIdeaId, shouldSelectAll, !!editingNew); - }; - this.editIcon = function (source) { - if (!isEditingEnabled) { - return false; - } - if (source) { - analytic('editIcon', source); - } - if (!isInputEnabled) { - return false; - } - self.dispatchEvent('nodeIconEditRequested', currentlySelectedIdeaId); - }; - this.scaleUp = function (source) { - self.scale(source, 1.25); - }; - this.scaleDown = function (source) { - self.scale(source, 0.8); - }; - this.scale = function (source, scaleMultiplier, zoomPoint) { - if (isInputEnabled) { - self.dispatchEvent('mapScaleChanged', scaleMultiplier, zoomPoint); - analytic(scaleMultiplier < 1 ? 'scaleDown' : 'scaleUp', source); - } - }; - this.move = function (source, deltaX, deltaY) { - if (isInputEnabled) { - self.dispatchEvent('mapMoveRequested', deltaX, deltaY); - analytic('move', source); - } - }; - this.resetView = function (source) { - if (isInputEnabled && idea) { - self.selectNode(idea.id); - self.dispatchEvent('mapViewResetRequested'); - analytic('resetView', source); - } - - }; - this.openAttachment = function (source, nodeId) { - var node, attachment; - analytic('openAttachment', source); - nodeId = nodeId || currentlySelectedIdeaId; - node = currentLayout && currentLayout.nodes && currentLayout.nodes[nodeId]; - attachment = node && node.attr && node.attr.attachment; - if (node) { - self.dispatchEvent('attachmentOpened', nodeId, attachment); - } - }; - this.setAttachment = function (source, nodeId, attachment) { - var hasAttachment = !!(attachment && attachment.content); - if (!isEditingEnabled) { - return false; - } - analytic('setAttachment', source); - idea.updateAttr(nodeId, 'attachment', hasAttachment && attachment); - }; - this.toggleLink = function (source, nodeIdTo) { - var exists = _.find(idea.links, function (link) { - return (String(link.ideaIdFrom) === String(nodeIdTo) && String(link.ideaIdTo) === String(currentlySelectedIdeaId)) || (String(link.ideaIdTo) === String(nodeIdTo) && String(link.ideaIdFrom) === String(currentlySelectedIdeaId)); - }); - if (exists) { - self.removeLink(source, exists.ideaIdFrom, exists.ideaIdTo); - } else { - self.addLink(source, nodeIdTo); - } - }; - this.addLink = function (source, nodeIdTo) { - if (!isEditingEnabled) { - return false; - } - analytic('addLink', source); - idea.addLink(currentlySelectedIdeaId, nodeIdTo); - }; - this.selectLink = function (source, link, selectionPoint) { - if (!isEditingEnabled) { - return false; - } - analytic('selectLink', source); - if (!link) { - return false; - } - self.dispatchEvent('linkSelected', link, selectionPoint, idea.getLinkAttr(link.ideaIdFrom, link.ideaIdTo, 'style')); - }; - this.removeLink = function (source, nodeIdFrom, nodeIdTo) { - if (!isEditingEnabled) { - return false; - } - analytic('removeLink', source); - idea.removeLink(nodeIdFrom, nodeIdTo); - }; - - this.toggleAddLinkMode = function (source) { - if (!isEditingEnabled) { - return false; - } - if (!isInputEnabled) { - return false; - } - analytic('toggleAddLinkMode', source); - isAddLinkMode = !isAddLinkMode; - self.dispatchEvent('addLinkModeToggled', isAddLinkMode); - }; - this.cancelCurrentAction = function (source) { - if (!isInputEnabled) { - return false; - } - if (!isEditingEnabled) { - return false; - } - if (isAddLinkMode) { - this.toggleAddLinkMode(source); - } - }; - self.undo = function (source) { - var undoSelectionClone = revertSelectionForUndo, - undoActivationClone = revertActivatedForUndo; - if (!isEditingEnabled) { - return false; - } - analytic('undo', source); - if (isInputEnabled) { - idea.undo(); - if (undoSelectionClone) { - self.selectNode(undoSelectionClone); - } - if (undoActivationClone) { - setActiveNodes(undoActivationClone); - } - - } - }; - self.redo = function (source) { - if (!isEditingEnabled) { - return false; - } - - analytic('redo', source); - if (isInputEnabled) { - idea.redo(); - } - }; - self.moveRelative = function (source, relativeMovement) { - if (!isEditingEnabled) { - return false; - } - analytic('moveRelative', source); - if (isInputEnabled) { - idea.moveRelative(currentlySelectedIdeaId, relativeMovement); - } - }; - self.cut = function (source) { - var activeNodeIds = [], parents = [], firstLiveParent; - if (!isEditingEnabled) { - return false; - } - analytic('cut', source); - if (isInputEnabled) { - self.applyToActivated(function (nodeId) { - activeNodeIds.push(nodeId); - parents.push(idea.findParent(nodeId).id); - }); - clipboard.put(idea.cloneMultiple(activeNodeIds)); - idea.removeMultiple(activeNodeIds); - firstLiveParent = _.find(parents, idea.findSubIdeaById); - self.selectNode(firstLiveParent || idea.id); - } - }; - self.contextForNode = function (nodeId) { - var node = self.findIdeaById(nodeId), - hasChildren = node && node.ideas && _.size(node.ideas) > 0, - hasSiblings = idea.hasSiblings(nodeId), - isCollapsed = node && node.getAttr('collapsed'), - canPaste = node && isEditingEnabled && clipboard && clipboard.get(); - if (node) { - return { - hasChildren: !!hasChildren, - hasSiblings: !!hasSiblings, - canPaste: !!canPaste, - notRoot: idea.id != nodeId, - canUndo: idea.canUndo(), - canRedo: idea.canRedo(), - canCollapse: hasChildren && !isCollapsed, - canExpand: hasChildren && isCollapsed - }; - } - - }; - self.copy = function (source) { - var activeNodeIds = []; - if (!isEditingEnabled) { - return false; - } - analytic('copy', source); - if (isInputEnabled) { - self.applyToActivated(function (node) { - activeNodeIds.push(node); - }); - clipboard.put(idea.cloneMultiple(activeNodeIds)); - } - }; - self.paste = function (source) { - var result; - if (!isEditingEnabled) { - return false; - } - analytic('paste', source); - if (isInputEnabled) { - result = idea.pasteMultiple(currentlySelectedIdeaId, clipboard.get()); - if (result && result[0]) { - self.selectNode(result[0]); - } - } - }; - self.pasteStyle = function (source) { - var clipContents = clipboard.get(), - pastingStyle; - if (!isEditingEnabled) { - return false; - } - analytic('pasteStyle', source); - if (isInputEnabled && clipContents && clipContents[0]) { - pastingStyle = clipContents[0].attr && clipContents[0].attr.style; - self.applyToActivated(function (id) { - idea.updateAttr(id, 'style', pastingStyle); - }); - } - }; - self.getIcon = function (nodeId) { - var node = currentLayout.nodes[nodeId || currentlySelectedIdeaId]; - if (!node) { - return false; - } - return node.attr && node.attr.icon; - }; - self.setIcon = function (source, url, imgWidth, imgHeight, position, nodeId, metaData) { - var nodeIdea, iconObject; - if (!isEditingEnabled) { - return false; - } - analytic('setIcon', source); - nodeId = nodeId || currentlySelectedIdeaId; - nodeIdea = self.findIdeaById(nodeId); - if (!nodeIdea) { - return false; - } - if (url) { - iconObject = { - url: url, - width: imgWidth, - height: imgHeight, - position: position - }; - if (metaData) { - iconObject.metaData = metaData; - } - idea.updateAttr(nodeId, 'icon', iconObject); - } else if (nodeIdea.title || nodeId === idea.id) { - idea.updateAttr(nodeId, 'icon', false); - } else { - idea.removeSubIdea(nodeId); - } - }; - self.moveUp = function (source) { - self.moveRelative(source, -1); - }; - self.moveDown = function (source) { - self.moveRelative(source, 1); - }; - self.getSelectedNodeId = function () { - return getCurrentlySelectedIdeaId(); - }; - self.centerOnNode = function (nodeId) { - if (!currentLayout.nodes[nodeId]) { - idea.startBatch(); - _.each(idea.calculatePath(nodeId), function (parent) { - idea.updateAttr(parent.id, 'collapsed', false); - }); - idea.endBatch(); - } - self.dispatchEvent('nodeFocusRequested', nodeId); - self.selectNode(nodeId); - }; - self.search = function (query) { - var result = []; - query = query.toLocaleLowerCase(); - idea.traverse(function (contentIdea) { - if (contentIdea.title && contentIdea.title.toLocaleLowerCase().indexOf(query) >= 0) { - result.push({id: contentIdea.id, title: contentIdea.title}); - } - }); - return result; - }; - //node activation and selection - (function () { - var isRootOrRightHalf = function (id) { - return currentLayout.nodes[id].x >= currentLayout.nodes[idea.id].x; - }, - isRootOrLeftHalf = function (id) { - return currentLayout.nodes[id].x <= currentLayout.nodes[idea.id].x; - }, - nodesWithIDs = function () { - return _.map(currentLayout.nodes, - function (n, nodeId) { - return _.extend({id: parseInt(nodeId, 10)}, n); - }); - }, - applyToNodeLeft = function (source, analyticTag, method) { - var node, - rank, - isRoot = currentlySelectedIdeaId === idea.id, - targetRank = isRoot ? -Infinity : Infinity; - if (!isInputEnabled) { - return; - } - analytic(analyticTag, source); - if (isRootOrLeftHalf(currentlySelectedIdeaId)) { - node = idea.id === currentlySelectedIdeaId ? idea : idea.findSubIdeaById(currentlySelectedIdeaId); - ensureNodeIsExpanded(source, node.id); - for (rank in node.ideas) { - rank = parseFloat(rank); - if ((isRoot && rank < 0 && rank > targetRank) || (!isRoot && rank > 0 && rank < targetRank)) { - targetRank = rank; - } - } - if (targetRank !== Infinity && targetRank !== -Infinity) { - method.apply(self, [node.ideas[targetRank].id]); - } - } else { - method.apply(self, [idea.findParent(currentlySelectedIdeaId).id]); - } - }, - applyToNodeRight = function (source, analyticTag, method) { - var node, rank, minimumPositiveRank = Infinity; - if (!isInputEnabled) { - return; - } - analytic(analyticTag, source); - if (isRootOrRightHalf(currentlySelectedIdeaId)) { - node = idea.id === currentlySelectedIdeaId ? idea : idea.findSubIdeaById(currentlySelectedIdeaId); - ensureNodeIsExpanded(source, node.id); - for (rank in node.ideas) { - rank = parseFloat(rank); - if (rank > 0 && rank < minimumPositiveRank) { - minimumPositiveRank = rank; - } - } - if (minimumPositiveRank !== Infinity) { - method.apply(self, [node.ideas[minimumPositiveRank].id]); - } - } else { - method.apply(self, [idea.findParent(currentlySelectedIdeaId).id]); - } - }, - applyToNodeUp = function (source, analyticTag, method) { - var previousSibling = idea.previousSiblingId(currentlySelectedIdeaId), - nodesAbove, - closestNode, - currentNode = currentLayout.nodes[currentlySelectedIdeaId]; - if (!isInputEnabled) { - return; - } - analytic(analyticTag, source); - if (previousSibling) { - method.apply(self, [previousSibling]); - } else { - if (!currentNode) { - return; - } - nodesAbove = _.reject(nodesWithIDs(), function (node) { - return node.y >= currentNode.y || Math.abs(node.x - currentNode.x) > horizontalSelectionThreshold; - }); - if (_.size(nodesAbove) === 0) { - return; - } - closestNode = _.min(nodesAbove, function (node) { - return Math.pow(node.x - currentNode.x, 2) + Math.pow(node.y - currentNode.y, 2); - }); - method.apply(self, [closestNode.id]); - } - }, - applyToNodeDown = function (source, analyticTag, method) { - var nextSibling = idea.nextSiblingId(currentlySelectedIdeaId), - nodesBelow, - closestNode, - currentNode = currentLayout.nodes[currentlySelectedIdeaId]; - if (!isInputEnabled) { - return; - } - analytic(analyticTag, source); - if (nextSibling) { - method.apply(self, [nextSibling]); - } else { - if (!currentNode) { - return; - } - nodesBelow = _.reject(nodesWithIDs(), function (node) { - return node.y <= currentNode.y || Math.abs(node.x - currentNode.x) > horizontalSelectionThreshold; - }); - if (_.size(nodesBelow) === 0) { - return; - } - closestNode = _.min(nodesBelow, function (node) { - return Math.pow(node.x - currentNode.x, 2) + Math.pow(node.y - currentNode.y, 2); - }); - method.apply(self, [closestNode.id]); - } - }, - applyFuncs = {'Left': applyToNodeLeft, 'Up': applyToNodeUp, 'Down': applyToNodeDown, 'Right': applyToNodeRight}; - self.getActivatedNodeIds = function () { - return activatedNodes.slice(0); - }; - self.activateSiblingNodes = function (source) { - var parent = idea.findParent(currentlySelectedIdeaId), - siblingIds; - analytic('activateSiblingNodes', source); - if (!parent || !parent.ideas) { - return; - } - siblingIds = _.map(parent.ideas, function (child) { - return child.id; - }); - setActiveNodes(siblingIds); - }; - self.activateNodeAndChildren = function (source) { - var contextId = getCurrentlySelectedIdeaId(), - subtree = idea.getSubTreeIds(contextId); - analytic('activateNodeAndChildren', source); - subtree.push(contextId); - setActiveNodes(subtree); - }; - _.each(['Left', 'Right', 'Up', 'Down'], function (position) { - self['activateNode' + position] = function (source) { - applyFuncs[position](source, 'activateNode' + position, function (nodeId) { - self.selectNode(nodeId, false, true); - }); - }; - self['selectNode' + position] = function (source) { - applyFuncs[position](source, 'selectNode' + position, self.selectNode); - }; - }); - self.toggleActivationOnNode = function (source, nodeId) { - analytic('toggleActivated', source); - if (!self.isActivated(nodeId)) { - setActiveNodes([nodeId].concat(activatedNodes)); - } else { - setActiveNodes(_.without(activatedNodes, nodeId)); - } - }; - self.activateNode = function (source, nodeId) { - analytic('activateNode', source); - if (!self.isActivated(nodeId)) { - activatedNodes.push(nodeId); - self.dispatchEvent('activatedNodesChanged', [nodeId], []); - } - }; - self.activateChildren = function (source) { - var context = currentlySelectedIdea(); - analytic('activateChildren', source); - if (!context || _.isEmpty(context.ideas) || context.getAttr('collapsed')) { - return; - } - setActiveNodes(idea.getSubTreeIds(context.id)); - }; - self.activateSelectedNode = function (source) { - analytic('activateSelectedNode', source); - setActiveNodes([getCurrentlySelectedIdeaId()]); - }; - self.isActivated = function (id) { - /*jslint eqeq:true*/ - return _.find(activatedNodes, function (activeId) { - return id == activeId; - }); - }; - self.applyToActivated = function (toApply) { - idea.batch(function () { - _.each(activatedNodes, toApply); - }); - }; - self.everyActivatedIs = function (predicate) { - return _.every(activatedNodes, predicate); - }; - self.activateLevel = function (source, level) { - var toActivate = _.map( - _.filter( - currentLayout.nodes, - function (node) { - /*jslint eqeq:true*/ - return node.level == level; - } - ), - function (node) { - return node.id; - } - ); - analytic('activateLevel', source); - if (!_.isEmpty(toActivate)) { - setActiveNodes(toActivate); - } - }; - self.reactivate = function (layout) { - _.each(layout.nodes, function (node) { - if (_.contains(activatedNodes, node.id)) { - node.activated = true; - } - }); - return layout; - }; - }()); - - self.getNodeIdAtPosition = function (x, y) { - var isPointOverNode = function (node) { //move to mapModel candidate - /*jslint eqeq: true*/ - return x >= node.x && - y >= node.y && - x <= node.x + node.width && - y <= node.y + node.height; - }, - node = _.find(currentLayout.nodes, isPointOverNode); - return node && node.id; - }; - self.autoPosition = function (nodeId) { - return idea.updateAttr(nodeId, 'position', false); - }; - self.positionNodeAt = function (nodeId, x, y, manualPosition) { - var rootNode = currentLayout.nodes[idea.id], - verticallyClosestNode = { - id: null, - y: Infinity - }, - parentIdea = idea.findParent(nodeId), - parentNode = currentLayout.nodes[parentIdea.id], - nodeBeingDragged = currentLayout.nodes[nodeId], - tryFlip = function (rootNode, nodeBeingDragged, nodeDragEndX) { - var flipRightToLeft = rootNode.x < nodeBeingDragged.x && nodeDragEndX < rootNode.x, - flipLeftToRight = rootNode.x > nodeBeingDragged.x && rootNode.x < nodeDragEndX; - if (flipRightToLeft || flipLeftToRight) { - return idea.flip(nodeId); - } - return false; - }, - maxSequence = 1, - validReposition = function () { - return nodeBeingDragged.level === 2 || - ((nodeBeingDragged.x - parentNode.x) * (x - parentNode.x) > 0); - }, - result = false, - xOffset; - idea.startBatch(); - if (currentLayout.nodes[nodeId].level === 2) { - result = tryFlip(rootNode, nodeBeingDragged, x); - } - _.each(idea.sameSideSiblingIds(nodeId), function (id) { - var node = currentLayout.nodes[id]; - if (y < node.y && node.y < verticallyClosestNode.y) { - verticallyClosestNode = node; - } - }); - if (!manualPosition && validReposition()) { - self.autoPosition(nodeId); - } - result = idea.positionBefore(nodeId, verticallyClosestNode.id) || result; - if (manualPosition && validReposition()) { - if (x < parentNode.x) { - xOffset = parentNode.x - x - nodeBeingDragged.width + parentNode.width; - /* negative nodes will get flipped so distance is not correct out of the box */ - } else { - xOffset = x - parentNode.x; - } - analytic('nodeManuallyPositioned'); - maxSequence = _.max(_.map(parentIdea.ideas, function (i) { - return (i.id !== nodeId && i.attr && i.attr.position && i.attr.position[2]) || 0; - })); - result = idea.updateAttr( - nodeId, - 'position', - [xOffset, y - parentNode.y, maxSequence + 1] - ) || result; - } - idea.endBatch(); - return result; - }; - self.dropNode = function (nodeId, dropTargetId, shiftKey) { - var clone, - parentIdea = idea.findParent(nodeId); - if (dropTargetId === nodeId) { - return false; - } - if (shiftKey) { - clone = idea.clone(nodeId); - if (clone) { - idea.paste(dropTargetId, clone); - } - return false; - } - if (dropTargetId === parentIdea.id) { - return self.autoPosition(nodeId); - } else { - ensureNodeIsExpanded(nodeId, dropTargetId); - return idea.changeParent(nodeId, dropTargetId); - } - }; - self.setLayoutCalculator = function (newCalculator) { - layoutCalculator = newCalculator; - }; - self.dropImage = function (dataUrl, imgWidth, imgHeight, x, y, metaData) { - var nodeId, - dropOn = function (ideaId, position) { - var scaleX = Math.min(imgWidth, 300) / imgWidth, - scaleY = Math.min(imgHeight, 300) / imgHeight, - scale = Math.min(scaleX, scaleY), - existing = idea.getAttrById(ideaId, 'icon'); - self.setIcon('drag and drop', dataUrl, Math.round(imgWidth * scale), Math.round(imgHeight * scale), (existing && existing.position) || position, ideaId, metaData); - }, - addNew = function () { - var newId; - idea.startBatch(); - newId = idea.addSubIdea(currentlySelectedIdeaId); - dropOn(newId, 'center'); - idea.endBatch(); - self.selectNode(newId); - }; - nodeId = self.getNodeIdAtPosition(x, y); - if (nodeId) { - return dropOn(nodeId, 'left'); - } - addNew(); - }; - self.setLabelGenerator = function (labelGenerator) { - currentLabelGenerator = labelGenerator; - self.rebuildRequired(); - }; - self.getReorderBoundary = function (nodeId) { - var isRoot = function () { - /*jslint eqeq: true*/ - return nodeId == idea.id; - }, - isFirstLevel = function () { - return parentIdea.id === idea.id; - }, - isRightHalf = function (nodeId) { - return currentLayout.nodes[nodeId].x >= currentLayout.nodes[idea.id].x; - }, - siblingBoundary = function (siblings, side) { - var tops = _.map(siblings, function (node) { - return node.y; - }), - bottoms = _.map(siblings, function (node) { - return node.y + node.height; - }), - result = { - 'minY': _.min(tops) - reorderMargin - currentLayout.nodes[nodeId].height, - 'maxY': _.max(bottoms) + reorderMargin, - 'margin': reorderMargin - }; - result.edge = side; - if (side === 'left') { - result.x = parentNode.x + parentNode.width + reorderMargin; - } else { - result.x = parentNode.x - reorderMargin; - } - return result; - }, - parentBoundary = function (side) { - var result = { - 'minY': parentNode.y - reorderMargin - currentLayout.nodes[nodeId].height, - 'maxY': parentNode.y + parentNode.height + reorderMargin, - 'margin': reorderMargin - }; - result.edge = side; - if (side === 'left') { - result.x = parentNode.x + parentNode.width + reorderMargin; - } else { - result.x = parentNode.x - reorderMargin; - } - - return result; - }, - otherSideSiblings = function () { - var otherSide = _.map(parentIdea.ideas, function (subIdea) { - return currentLayout.nodes[subIdea.id]; - }); - otherSide = _.without(otherSide, currentLayout.nodes[nodeId]); - if (!_.isEmpty(sameSide)) { - otherSide = _.difference(otherSide, sameSide); - } - return otherSide; - }, - parentIdea, - parentNode, - boundaries = [], - sameSide, - opposite, - primaryEdge, - secondaryEdge; - if (isRoot(nodeId)) { - return false; - } - parentIdea = idea.findParent(nodeId); - parentNode = currentLayout.nodes[parentIdea.id]; - primaryEdge = isRightHalf(nodeId) ? 'left' : 'right'; - secondaryEdge = isRightHalf(nodeId) ? 'right' : 'left'; - sameSide = _.map(idea.sameSideSiblingIds(nodeId), function (id) { - return currentLayout.nodes[id]; - }); - if (!_.isEmpty(sameSide)) { - boundaries.push(siblingBoundary(sameSide, primaryEdge)); - } - boundaries.push(parentBoundary(primaryEdge)); - if (isFirstLevel()) { - opposite = otherSideSiblings(); - if (!_.isEmpty(opposite)) { - boundaries.push(siblingBoundary(opposite, secondaryEdge)); - } - boundaries.push(parentBoundary(secondaryEdge)); - } - return boundaries; - }; - self.focusAndSelect = function (nodeId) { - self.selectNode(nodeId); - self.dispatchEvent('nodeFocusRequested', nodeId); - }; - self.requestContextMenu = function (eventPointX, eventPointY) { - if (isInputEnabled && isEditingEnabled) { - self.dispatchEvent('contextMenuRequested', currentlySelectedIdeaId, eventPointX, eventPointY); - return true; - } - return false; - }; -}; diff --git a/plugins/easy_mindmup/assets/javascripts/mindmup/map-toolbar-widget.js b/plugins/easy_mindmup/assets/javascripts/mindmup/map-toolbar-widget.js deleted file mode 100644 index 30ab46d..0000000 --- a/plugins/easy_mindmup/assets/javascripts/mindmup/map-toolbar-widget.js +++ /dev/null @@ -1,40 +0,0 @@ -/*global jQuery*/ -jQuery.fn.mapToolbarWidget = function (mapModel, ysy) { - 'use strict'; - var clickMethodNames = ['insertIntermediate', 'scaleUp', 'scaleDown', 'addSubIdea', 'followURL', 'editNode', 'editNodeData', 'removeSubIdea', 'toggleCollapse', 'addSiblingIdea', 'undo', 'redo', - 'copy', 'cut', 'paste', 'resetView', 'openAttachment', 'toggleAddLinkMode', 'activateChildren', 'activateNodeAndChildren', 'activateSiblingNodes', 'editIcon', 'toggleOneSide', 'save'], - changeMethodNames = ['updateStyle']; - return this.each(function () { - var element = jQuery(this), preventRoundtrip = false; - //mapModel.addEventListener('nodeSelectionChanged', function () { - // preventRoundtrip = true; - // element.find('.updateStyle[data-mm-target-property]').val(function () { - // return mapModel.getSelectedStyle(jQuery(this).data('mm-target-property')); - // }).change(); - // preventRoundtrip = false; - //}); - //mapModel.addEventListener('addLinkModeToggled', function () { - // element.find('.toggleAddLinkMode').toggleClass('active'); - //}); - clickMethodNames.forEach(function (methodName) { - element.find('.' + methodName).click(function () { - if ($(this).hasClass("mindmup__button--disabled")) return; - if (mapModel[methodName]) { - mapModel[methodName]('toolbar'); - } - ysy.toolbar.redraw(methodName); - }); - }); - changeMethodNames.forEach(function (methodName) { - element.find('.' + methodName).change(function () { - if (preventRoundtrip) { - return; - } - var tool = jQuery(this); - if (tool.data('mm-target-property')) { - mapModel[methodName]('toolbar', tool.data('mm-target-property'), tool.val()); - } - }); - }); - }); -}; diff --git a/plugins/easy_mindmup/assets/javascripts/mindmup/mapjs.js b/plugins/easy_mindmup/assets/javascripts/mindmup/mapjs.js deleted file mode 100644 index 1ee4e0b..0000000 --- a/plugins/easy_mindmup/assets/javascripts/mindmup/mapjs.js +++ /dev/null @@ -1 +0,0 @@ -var MAPJS = MAPJS || {}; diff --git a/plugins/easy_mindmup/assets/javascripts/mindmup/observable.js b/plugins/easy_mindmup/assets/javascripts/mindmup/observable.js deleted file mode 100644 index 21d8fbd..0000000 --- a/plugins/easy_mindmup/assets/javascripts/mindmup/observable.js +++ /dev/null @@ -1,52 +0,0 @@ -/*global console*/ -/*jshint unused:false */ -var observable = function (base) { - 'use strict'; - var listeners = [], x; - base.addEventListener = function (types, listener, priority) { - types.split(' ').forEach(function (type) { - if (type) { - listeners.push({ - type: type, - listener: listener, - priority: priority || 0 - }); - } - }); - }; - base.listeners = function (type) { - return listeners.filter(function (listenerDetails) { - return listenerDetails.type === type; - }).map(function (listenerDetails) { - return listenerDetails.listener; - }); - }; - base.removeEventListener = function (type, listener) { - listeners = listeners.filter(function (details) { - return details.listener !== listener; - }); - }; - base.dispatchEvent = function (type) { - var args = Array.prototype.slice.call(arguments, 1); - base.getYsy().log.debug("Event " + type + " " + JSON.stringify(args), "events"); - if (type === 'changed') { - base.getYsy().log.debug("Event " + type + " " + JSON.stringify(args), "changedEvent"); - } - listeners - .filter(function (listenerDetails) { - return listenerDetails.type === type; - }) - .sort(function (firstListenerDetails, secondListenerDetails) { - return secondListenerDetails.priority - firstListenerDetails.priority; - }) - .some(function (listenerDetails) { - //try { - return listenerDetails.listener.apply(undefined, args) === false; - //} catch (e) { - // console.log('dispatchEvent failed', e, listenerDetails); - //} - - }); - }; - return base; -}; diff --git a/plugins/easy_mindmup/assets/javascripts/mindmup/url-helper.js b/plugins/easy_mindmup/assets/javascripts/mindmup/url-helper.js deleted file mode 100644 index 4733c30..0000000 --- a/plugins/easy_mindmup/assets/javascripts/mindmup/url-helper.js +++ /dev/null @@ -1,23 +0,0 @@ -/*global MAPJS */ -MAPJS.URLHelper = { - urlPattern: /(https?:\/\/|www\.)[\w-]+(\.[\w-]+)+([\w.,!@?^=%&:\/~+#-]*[\w!@?^=%&\/~+#-])?/i, - containsLink: function (text) { - 'use strict'; - return MAPJS.URLHelper.urlPattern.test(text); - }, - getLink: function (text) { - 'use strict'; - var url = text.match(MAPJS.URLHelper.urlPattern); - if (url && url[0]) { - url = url[0]; - if (!/https?:\/\//i.test(url)) { - url = 'http://' + url; - } - } - return url; - }, - stripLink: function (text) { - 'use strict'; - return text.replace(MAPJS.URLHelper.urlPattern, ''); - } -}; diff --git a/plugins/easy_mindmup/assets/javascripts/mm_context_menu.js b/plugins/easy_mindmup/assets/javascripts/mm_context_menu.js deleted file mode 100644 index 5b0c73d..0000000 --- a/plugins/easy_mindmup/assets/javascripts/mm_context_menu.js +++ /dev/null @@ -1,209 +0,0 @@ -(function () { - /** - * - * @param {MindMup} ysy - * @property {MindMup} ysy - * @property {boolean} hidden - * @property {jQuery} $element - * @constructor - */ - function ContextMenu(ysy) { - this.ysy = ysy; - this.$element = null; - this.hidden = true; - this.init(ysy); - } - - /** - * - * @param {MindMup} ysy - */ - ContextMenu.prototype.init = function (ysy) { - ysy.eventBus.register("MapInited", $.proxy(this.prepare, this)); - }; - ContextMenu.prototype.prepare = function (mapModel) { - var $element = $("#context-menu"); - if ($element.length === 0) { - $element = - $('<div id="context-menu" class="mindmup__context_menu ' + (this.ysy.settings.easyRedmine ? "easy" : "redmine") + '"></div>') - .appendTo('body').hide(); - } - this.$element = $element; - var self = this; - mapModel.addEventListener('mapMoveRequested mapScaleChanged nodeSelectionChanged nodeEditRequested mapViewResetRequested', function () { - self.innerHide() - }); - mapModel.addEventListener('contextMenuRequested', function (id, x, y) { - self.innerShow(id, x, y); - }); - $element.on('contextmenu', function (e) { - e.preventDefault(); - e.stopPropagation(); - return false; - }); - }; - /** - * Hide context menu (but have to have correct [this]) - */ - ContextMenu.prototype.innerHide = function () { - if (this.hidden) return; - this.hidden = true; - $("body").off("click.context_out"); - this.$element.hide(); - }; - /** - * - * @param {number} nodeId - * @param {number} x - * @param {number} y - */ - ContextMenu.prototype.innerShow = function (nodeId, x, y) { - this.hidden = false; - var self = this; - var ysy = this.ysy; - var hide = function () { - self.innerHide(); - }; - var $element = this.$element; - if (nodeId === 1) { - var idea = ysy.idea; - } else { - idea = ysy.idea.findSubIdeaById(nodeId); - } - var rendered = Mustache.render(this.template, this.getStructure(idea)); - $element.html(rendered); - if (x === undefined) { - var offset = ysy.$container.find("#node_" + nodeId).position(); - x = offset.left + 30; - y = offset.top + 20; - } - var maxLeft = x + 2 * $element.width(); - var maxTop = y + $element.height(); - var ws = this.window_size(); - if (maxLeft > ws.width) { - x -= $element.width(); - $element.addClass('reverse-x'); - } else { - $element.removeClass('reverse-x'); - } - if (maxTop > ws.height + $(window).scrollTop()) { - y -= $element.height(); - $element.addClass('reverse-y'); - } else { - $element.removeClass('reverse-y'); - } - if (x <= 0) x = 1; - if (y <= 0) y = 1; - this.bindEvents(idea, $element); - $element.css({left: x + 'px', top: y + 'px'}); - $element.show().focus(); - $("body").off("click.context_out").on("click.context_out", hide); - // $element.off("mouseleave").on('mouseleave', hide); - $element.off('tap click', hide).on('tap click', hide); - }; - /** - * - * @param {ModelEntity} primaryNode - * @param {jQuery} $element - */ - ContextMenu.prototype.bindEvents = function (primaryNode, $element) { - var ysy = this.ysy; - var mapModel = ysy.mapModel; - $element.mapToolbarWidget(mapModel, ysy); - $element.find(".mindmup-data-value-changer:not(.disabled)").on('tap click', function () { - ysy.util.showUpgradeModal("context_menu"); - }); - $element.find(".mindmup-data-value-input-link:not(.disabled)").on('tap click', function () { - ysy.util.showUpgradeModal("context_menu"); - return false; - }); - }; - ContextMenu.prototype.window_size = function () { - var w; - var h; - if (window.innerWidth) { - w = window.innerWidth; - h = window.innerHeight; - } else if (document.documentElement) { - w = document.documentElement.clientWidth; - h = document.documentElement.clientHeight; - } else { - w = document.body.clientWidth; - h = document.body.clientHeight; - } - return {width: w, height: h}; - }; - ContextMenu.prototype.template = '\ - <ul>\ - {{#.}}\ - {{^skip}}\ - <li class="{{folderClass}}{{className}}">\ - <a href="javascript:void(0)" class="{{submenuClass}}{{aClassName}}">{{name}}</a>\ - {{{subMenu}}}\ - {{{changer}}}\ - {{{input}}}\ - </li>\ - {{/skip}}\ - {{/.}}\ - </ul>'; - ContextMenu.prototype.subMenuTemplate = '\ - <ul>\ - {{#subMenu}}\ - <li><a href="javascript:void(0)" class="{{className}} mindmup-context-submenu-item" >{{name}}</a></li>\ - {{/subMenu}}\ - </ul>\ - '; - ContextMenu.prototype.changerTemplate = '\ - <ul>\ - {{#changer}}\ - <li><a href="javascript:void(0)" class="mindmup-data-value-changer {{className}} mindmup-context-submenu-item {{#previous}}icon-checked easy-mindmup__icon--checked disabled{{/previous}}" data-key="{{key}}" data-value="{{value}}">{{name}}</a></li>\ - {{/changer}}\ - </ul>\ - '; - ContextMenu.prototype.inputTemplate = '\ - <input type="{{input.inputType}}" class="mindmup-data-value-input {{input.className}}" data-key="{{key}}" value="{{input.value}}" style="display: none">\ - '; - /** - * @type {ModelEntity} node - */ - ContextMenu.prototype.getStructure = function (node) { - node.attr.force = true; - // Override this - structure is inserted into Mustache template - throw "getStructure is not defined!"; - }; - var skipOption = {skip: true}; - /** - * Executes [func] if [skip]==false - * Otherwise it returns null to be filtered later - * @param {Function} func - * @param {boolean} skip - */ - ContextMenu.prototype.prepareOption = function (func, skip) { - if (skip) return skipOption; - var result = func.call(this); - if (result.subMenu) { - result.subMenu = Mustache.render(this.subMenuTemplate, result); - } - if (result.changer) { - result.changer = Mustache.render(this.changerTemplate, result); - } - if (result.input) { - result.input = Mustache.render(this.inputTemplate, result); - } - if (result.subMenu || result.changer) { - result.submenuClass = "submenu "; - result.folderClass = "folder "; - } - return result; - }; - - // /** - // * Filter out results - // * @param {Array.<{skip:boolean}>} array - // */ - // ContextMenu.prototype.filterSkipped = function (array) { - // - // }; - - window.easyMindMupClasses.ContextMenu = ContextMenu; -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/model_classes.js b/plugins/easy_mindmup/assets/javascripts/model_classes.js deleted file mode 100644 index 6f6f86a..0000000 --- a/plugins/easy_mindmup/assets/javascripts/model_classes.js +++ /dev/null @@ -1,212 +0,0 @@ -/** - * Created by hosekp on 11/14/16. - */ -(function () { - /** - * Inner part of ModelEntity - contains data from server - * @property {number|null} id - server ID - * @property {Object} _old - * @property {boolean} filtered_out - entity do not satisfy query filter - * @property {Array} custom_fields - * @property {Object} custom_field_values - * @constructor - */ - function ModelEntityData() { - this.id = null; - this._old = null; - this.filtered_out = false; - } - - /** - * - * @param {Object} source - * @return {ModelEntityData} - */ - ModelEntityData.prototype.fromServer = function (source) { - $.extend(this, source); - return this; - }; - /** - * Accepts JSON and do deep cleaning and extending - * @param {String} json - * @param {boolean} doNotOverwrite - */ - ModelEntityData.prototype.fromJsonString = function (json, doNotOverwrite) { - var copied = JSON.parse(json); - if (doNotOverwrite) { - _.defaults(this, copied); - } else { - this.extend(copied); - } - }; - /** - * - * @param {Object} source - * @return {ModelEntityData} - */ - ModelEntityData.prototype.extend = function (source) { - $.extend(this, source); - return this; - }; - window.easyMindMupClasses.ModelEntityData = ModelEntityData; - //#################################################################################################################### - /** - * specially selected Attributes - it is accessible from [Idea] and from [Node] - * @property {boolean} nonEditable - * @property {String} entityType - * @property {ModelEntityData} data - * @property {boolean} isFromServer - * @constructor - */ - function ModelEntityAttr() { - this.nonEditable = false; - this.entityType = ""; - this.data = new ModelEntityData(); - this.isFromServer = false; - this.isFresh = false; - } - - /** - * - * @param {String} entityType - * @param {boolean} editable - * @param {Object} source - * @return {ModelEntityAttr} - */ - ModelEntityAttr.prototype.fromServer = function (entityType, editable, source) { - this.entityType = entityType; - this.isFromServer = true; - this.nonEditable = !editable; - this.data.fromServer(source); - return this; - }; - /** - * - * @param {Object} json - * @return {ModelEntityAttr} - */ - ModelEntityAttr.prototype.fromJson = function (json) { - if (!json) return this; - $.extend(this, _.omit(json, ["data"])); - this.data.extend(json.data); - return this; - }; - window.easyMindMupClasses.ModelEntityAttr = ModelEntityAttr; - //#################################################################################################################### - /** - * Universal entity from which model tree is generated - * @property {number} id - * @property {String} title - * @property {number} nChild - * @property {Object.<String, ModelEntity>} ideas - * @property {ModelEntityAttr} attr - * @property {ModelEntity} parent - temporary = used only for generating of model tree and saving - * @property {number} rank - relative position of node among its siblings - * temporary = it is used as key in [ideas] of parent ModelEntity - * @constructor - */ - function ModelEntity() { - this.id = 0; - this.title = "No title"; - this.nChild = 0; - this.ideas = {}; - this.attr = new ModelEntityAttr(); - this.parent = null; - this.rank = 0; - } - - /** - * "constructor" of ModelEntity with data from server - * @param {number} id - * @param {String} name - * @param {String} entityType - * @param {boolean} editable - * @param {object} source - */ - ModelEntity.prototype.fromServer = function (id, name, entityType, editable, source) { - this.id = id; - this.title = name; - this.attr.fromServer(entityType, editable, source); - return this; - }; - /** - * simple extending of the ModelEntity - do not use this pls - * @param {Object} obj - * @return {ModelEntity} - */ - ModelEntity.prototype.extend = function (obj) { - $.extend(true, this, obj); - return this; - }; - /** - * Create whole ModelEntity tree from JSON - * @param {object} json - * @return {ModelEntity} - */ - ModelEntity.prototype.fromJson = function (json) { - $.extend(this, _.omit(json, ["ideas", "attr"])); - this.attr.fromJson(json.attr); - for (var rank in json.ideas) { - if (!json.ideas.hasOwnProperty(rank)) continue; - this.ideas[rank] = new ModelEntity().fromJson(json.ideas[rank]); - } - return this; - }; - - window.easyMindMupClasses.ModelEntity = ModelEntity; -//#################################################################################################################### - /** - * Root idea (=ModelEntity) is enhanced by MAPJS.Content mixin (which I cannot modify), - * so several functions from Content I have to declare here. - * @extends ModelEntity - * @param {MindMup} ysy - * @constructor - */ - function RootIdea(ysy) { - ModelEntity.prototype.constructor.call(this, ysy); - /** @return {MindMup} */ - this.getYsy = function () { - return ysy; - }; - } - - window.easyMindMupClasses.extendClass(RootIdea, ModelEntity); - /** - * Create RootIdea instance with same attributes as source ModelEntity, so it can replace it. - * @param {ModelEntity} idea - * @return {RootIdea} - */ - RootIdea.prototype.upgrade = function (idea) { - $.extend(this, idea); - return this; - }; - - /** @type {Function} */ - RootIdea.prototype.removeEventListener = null; - /** @type {Function} */ - RootIdea.prototype.addEventListener = null; - /** @type {Function} */ - RootIdea.prototype.dispatchEvent = null; - /** @type {Function} */ - RootIdea.prototype.findSubIdeaById = null; - /** @type {Function} */ - RootIdea.prototype.findParent = null; - /** @type {Array} */ - RootIdea.prototype.links = null; - /** @type {boolean} */ - RootIdea.prototype.oneSideOn = false; - /** - * - * @param {String} method - * @param {Array} args - * @param {Function} undofunc - * @param {String} [originSession] - */ - RootIdea.prototype.logChange = function (method, args, undofunc, originSession) { - }; - RootIdea.prototype.resetHistory = function () { - }; - - - window.easyMindMupClasses.RootIdea = RootIdea; -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/node_patch.js b/plugins/easy_mindmup/assets/javascripts/node_patch.js deleted file mode 100644 index eb5fcb0..0000000 --- a/plugins/easy_mindmup/assets/javascripts/node_patch.js +++ /dev/null @@ -1,210 +0,0 @@ -(function () { - /** - * @param {MindMup} ysy - * @constructor - */ - function NodePatch(ysy) { - this.ysy = ysy; - this.patch(); - this.initCoreIcons(); - } - - /** - * Choose icons from [icons] attribute and use it to render. - * It use the order specified in Array - * @type {Object.<String,Array.<String>>} - */ - NodePatch.prototype.iconsForEntity = { - // issue:["avatar"] - }; - /** - * @callback IconBuilder - * @param {ModelEntity} nodeContent - it is different from ModelEntity, but it share [attr] reference - */ - /** - * Object filled with IconBuilders - * @type {Object.<String,IconBuilder>} - */ - NodePatch.prototype._icons = {}; - - /** - * @param {String} key - * @param {IconBuilder} builder - */ - NodePatch.prototype.addIconBuilder = function (key, builder) { - this._icons[key] = builder; - }; - - NodePatch.prototype.initCoreIcons = function () { - /** @type {WbsMain} */ - var ysy = this.ysy; - this.addIconBuilder("avatar", function (nodeContent) { - var users = ysy.dataStorage.get("users"); - var assigneeIndex = _.findIndex(users, { - id: ysy.getData(nodeContent).assigned_to_id - }); - if (assigneeIndex > -1) { - var user = users[assigneeIndex]; - var avatarUrl = user.avatar_url ? user.avatar_url : "/plugin_assets/easy_extensions/images/avatar.jpg"; - return '<img width="64" height="64" alt="' + user.name + '" class="gravatar" src="' + avatarUrl + '">'; - } - }); - }; - - /** - * Add extra CSS classes to node element - * @param {ModelEntity} nodeContent - * @example return nodeContent.attr.isProject ? " wbs-project" : " wbs-issue"; - * @return {String} - */ - NodePatch.prototype.nodeBonusCss = function (nodeContent) { - nodeContent.title = "true"; - // Override this for adding special data-specific classes to node - throw "nodeBonusCss is not defined!"; - }; - /** - * extract and transform name property from node - * @param {ModelEntity} nodeContent - * @return {string} - */ - var getNodeText = function (nodeContent) { - var MAX_URL_LENGTH = 25; - var title = nodeContent.title; - var text = MAPJS.URLHelper.stripLink(title) || - (title.length < MAX_URL_LENGTH ? title : (title.substring(0, MAX_URL_LENGTH) + '...')); - return text.trim(); - }; - NodePatch.prototype.getNodeText = getNodeText; - NodePatch.prototype.patch = function () { - jQuery.fn.updateNodeContent = function (nodeContent, ysy) { - 'use strict'; - // var MAX_URL_LENGTH = 25, - var self = jQuery(this), - title = getNodeText(nodeContent), - updateText = function (title) { - // var text = MAPJS.URLHelper.stripLink(title) || - // (title.length < MAX_URL_LENGTH ? title : (title.substring(0, MAX_URL_LENGTH) + '...')), - var span = self.find('[data-mapjs-role=title]'); - if (span.length === 0) { - span = jQuery('<span>').attr('data-mapjs-role', 'title').appendTo(self); - } - span.text(title); - }, - setStyles = function () { - var element = self.find('.mapjs-collapsor'); - var oldClassName = self[0].className; - self[0].className = "mapjs-node" - + (oldClassName.indexOf("activated") > -1 ? " activated" : "") - + (oldClassName.indexOf("selected") > -1 ? " selected" : "") - + ysy.styles.cssClasses(nodeContent) - + (nodeContent.x && nodeContent.x + nodeContent.width < 0 ? ' mindmup-node-left' : '') - + (nodeContent.attr.collapsed && nodeContent.attr.hasChildren ? ' collapsed' : '') - + ysy.nodePatch.nodeBonusCss(nodeContent) - + (nodeContent.attr.data.filtered_out ? " mindmup__node--filtered_out" : "") - + (ysy.filter.isBanned(nodeContent) ? " " + ysy.filter.className : ""); - if (nodeContent.attr.hasChildren) { - if (element.length === 0) { - jQuery('<div class="mapjs-collapsor"></div>').on("tap", function () { - var model = ysy.mapModel; - model.selectNode(nodeContent.id); - model.toggleCollapse(); - return false; - }).appendTo(self); - } - } else if (element.length > 0) { - element.remove(); - } - }, - // needChangeIcon = function () { - // return !!ysy.getData(nodeContent)._old; - // }, - // setChangeIcon = function ($iconsCont) { - // var isEdited = !!ysy.getData(nodeContent)._old; - // if (isEdited) { - // var $icon = $iconsCont.find(".mindmup-node-icon-is_edited"); - // if ($icon.length === 0) { - // $iconsCont.prepend('<div class="mindmup-node-icon-is_edited" title="' + ysy.settings.labels.titleNodeChanged + '"></div>'); - // } - // } else { - // $iconsCont.find(".mindmup-node-icon-is_edited").remove(); - // } - // }, - needIcons = function () { - return ysy.settings.allIcons; - }, - setIcons = function ($iconsCont) { - var creatorName, creator, icon; - var iconCreators = ysy.nodePatch.iconsForEntity[nodeContent.attr.entityType]; - if (!iconCreators) return; - var nodePatch = ysy.nodePatch; - if (!ysy.settings.allIcons) return; - var $icons = $iconsCont.find(".mindmup-node-icons-all"); - if ($icons.length === 0) { - $icons = $('<div class="mindmup-node-icons-all"></div>'); - $iconsCont.append($icons); - } - var lastIconCreatorName = null; - for (var i = 0; i < iconCreators.length; i++) { - creatorName = iconCreators[i]; - creator = nodePatch._icons[creatorName]; - if (!creator) continue; - var newIconContent = creator(nodeContent); - icon = $icons.find(".mindmup-node-icon-" + creatorName); - if (newIconContent) { - if (!icon.length) { - icon = $('<div class="mindmup-node-icon mindmup-node-icon-' + creatorName + '"></div>'); - if (!lastIconCreatorName) { - $icons.prepend(icon); - } else { - $icons.find(".mindmup-node-icon-" + lastIconCreatorName).after(icon); - } - } - if (typeof newIconContent === "string") { - icon.html(newIconContent); - } else { - icon.clear().append(newIconContent); - } - lastIconCreatorName = creatorName; - } else { - icon.remove(); - } - } - }; - if (!self.is(":focus")) { - var parent = self.parent(); - self.detach(); - var detached = true; - } - updateText(title); - self.data({ - 'x': Math.round(nodeContent.x), - 'y': Math.round(nodeContent.y), - 'width': Math.round(nodeContent.width), - 'height': Math.round(nodeContent.height), - 'nodeId': nodeContent.id, - 'title': title - }); - setStyles(); - var $element = self.find('.mindmup-node-icons'); - if (needIcons()) { - if ($element.length === 0) { - $element = $('<div class="mindmup-node-icons"></div>'); - var haveToBeAppended = true; - } - //setChangeIcon($element); - setIcons($element); - if (haveToBeAppended) { - $element.appendTo(self); - } - } else if ($element.length > 0) { - $element.remove(); - } - if (nodeContent.attr.force) delete nodeContent.attr.force; // remove force flag if present - if (detached) { - parent.append(self); - } - return self; - }; - }; - window.easyMindMupClasses.NodePatch = NodePatch; -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/polyfill.js b/plugins/easy_mindmup/assets/javascripts/polyfill.js deleted file mode 100644 index af247c7..0000000 --- a/plugins/easy_mindmup/assets/javascripts/polyfill.js +++ /dev/null @@ -1,27 +0,0 @@ -if (!Function.prototype.bind) { - Function.prototype.bind = function(oThis) { - if (typeof this !== 'function') { - // closest thing possible to the ECMAScript 5 - // internal IsCallable function - throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable'); - } - - var aArgs = Array.prototype.slice.call(arguments, 1), - fToBind = this, - fNOP = function() {}, - fBound = function() { - return fToBind.apply(this instanceof fNOP - ? this - : oThis, - aArgs.concat(Array.prototype.slice.call(arguments))); - }; - - if (this.prototype) { - // Function.prototype doesn't have a prototype property - fNOP.prototype = this.prototype; - } - fBound.prototype = new fNOP(); - - return fBound; - }; -} \ No newline at end of file diff --git a/plugins/easy_mindmup/assets/javascripts/print.js b/plugins/easy_mindmup/assets/javascripts/print.js deleted file mode 100644 index 54127c0..0000000 --- a/plugins/easy_mindmup/assets/javascripts/print.js +++ /dev/null @@ -1,174 +0,0 @@ -(function () { - function Print(ysy) { - this.printReady = false; - this.$area = null; - this.ysy = ysy; - this.patch(ysy); - } - - Print.prototype.margins = { - left: 10, - right: 10, - top: 20, - bottom: 10 - }; - Print.prototype.patch = function (ysy) { - var self = this; - var mediaQueryList = window.matchMedia('print'); - mediaQueryList.addListener(function (mql) { - if (mql.matches) { - self.beforePrint(); - } else { - self.afterPrint(); - } - }); - window.onbeforeprint = $.proxy(this.beforePrint, this); - window.onafterprint = $.proxy(this.afterPrint, this); - }; - Print.prototype.directPrint = function () { - this.beforePrint(); - window.print(); - this.afterPrint(); - }; - Print.prototype.beforePrint = function (isCompact) { - if (this.printReady) return; - this.ysy.mapModel.resetView(); - this.$area = isCompact? this.createCompactArea():this.createPrintArea(); - $("body").append(this.$area); - $("#wrapper").hide(); - this.printReady = true; - }; - Print.prototype.afterPrint = function () { - if (!this.printReady) return; - this.$area.remove(); - $("#wrapper").show(); - this.ysy.mapModel.resetView(); - this.printReady = false; - }; - Print.prototype.createPrintArea = function () { - var $stage = this.ysy.$container.children(); - // var width = $stage.width(); - // var height = $stage.height(); - var stripWidth = 330; - var children = $stage.children(":not(:hidden)"); - var dims = this.getStageDims(children); - var $area = $('<div class="mindmup-print-area scheme-by-' + this.ysy.styles.setting + '" \ - style="height:' + (dims.bottom - dims.top + this.margins.top + this.margins.bottom) + 'px"></div>'); - for (var p = dims.left - this.margins.left; p < dims.right + this.margins.right; p += stripWidth) { - $area.append(this.createStrip(children, dims, p, p + stripWidth)); - //p -= 2; - } - return $area; - }; - Print.prototype.createStrip = function (children, dims, start, end) { - /* start can be negative*/ - if (end <= start) return null; - // var stageOffset = $stage.height(); - var $strip = $('<div class="mindmup-print-strip" style="height:' + (dims.bottom - dims.top + this.margins.top + this.margins.bottom) + 'px;width:' + (end - start) + 'px"></div>'); - // var children = $stage.children(":not(:hidden)"); - var added = 0; - for (var i = 0; i < children.length; i++) { - var child = children[i]; - var left = parseInt(child.style.left); - var width = child.offsetWidth; - var top = parseInt(child.style.top) - dims.top + this.margins.top; - var height = child.offsetHeight; - if (left > end) continue; - if (left + width < start) continue; - added++; - var $child = $(child); - var transform = $child.css("transform"); - if (transform === "none") transform = ""; - transform = "translate(" + (left - start) + "px," + top + "px) " + transform; - $strip.append( - $child - .clone() - .css({left: 0, top: 0, transform: transform}) - ); - } - if (!added) return null; - return $strip; - }; - Print.prototype.getStageDims = function (children) { - var dims = { - left: Infinity, - top: Infinity, - right: -Infinity, - bottom: -Infinity - }; - for (var i = 0; i < children.length; i++) { - var child = children[i]; - var left = parseInt(child.style.left); - var top = parseInt(child.style.top); - var width = child.offsetWidth; - var height = child.offsetHeight; - if (left < dims.left) dims.left = left; - if (top < dims.top) dims.top = top; - if (left + width > dims.right) dims.right = left + width; - if (top + height > dims.bottom) dims.bottom = top + height; - } - return dims; - }; - Print.prototype.createCompactArea = function () { - var $stage = this.ysy.$container.children(); - var children = $stage.children(":not(:hidden)"); - var dims = this.getStageDims(children); - var leftEdge = dims.left - this.margins.left; - var $area = $('<div class="mindmup-pdf-print-area scheme-by-' + this.ysy.styles.setting + '" style="' - + 'height:' + (dims.bottom - dims.top + this.margins.top + this.margins.bottom) + 'px;' - + 'width:' + (dims.right - leftEdge + this.margins.right) + 'px"></div>'); - for (var i = 0; i < children.length; i++) { - var child = children[i]; - var left = parseInt(child.style.left); - var width = child.offsetWidth; - var top = parseInt(child.style.top) - dims.top + this.margins.top; - var height = child.offsetHeight; - var $child = $(child); - var transform = $child.css("transform"); - if (transform === "none") transform = ""; - transform = "translate(" + (left - leftEdge) + "px," + top + "px) " + transform; - $area.append( - $child - .clone() - .css({left: 0, top: 0, transform: transform}) - ); - } - return $area; - }; - - window.easyMindMupClasses.Print = Print; - //#################################################################################################################### - /** - * Button, which prepare Mind Map into printable version - * @param {MindMup} ysy - * @param {jQuery} $parent - * @constructor - */ - function PrintButton(ysy, $parent) { - this.$element = null; - this.ysy = ysy; - this.init(ysy, $parent); - } - - PrintButton.prototype.id = "PrintButton"; - - /** - * - * @param {MindMup} ysy - * @param {jQuery} $parent - * @return {PrintButton} - */ - PrintButton.prototype.init = function (ysy, $parent) { - this.$element = $parent.find(".mindmup-button-print"); - var self = this; - this.$element.click(function () { - self.ysy.print.directPrint(); - }); - return this; - }; - PrintButton.prototype._render = function () { - }; - - window.easyMindMupClasses.PrintButton = PrintButton; - -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/redrawer.js b/plugins/easy_mindmup/assets/javascripts/redrawer.js deleted file mode 100644 index b9b4919..0000000 --- a/plugins/easy_mindmup/assets/javascripts/redrawer.js +++ /dev/null @@ -1,60 +0,0 @@ -(function () { - /** - * Asynchronic redrawer - * @param {MindMup} ysy - * @constructor - */ - function Repainter(ysy) { - this.ysy = ysy; - this.onRepaint = []; - var self = this; - var requestAnimationFrame = (function () { - return window.requestAnimationFrame || - window.webkitRequestAnimationFrame || - window.mozRequestAnimationFrame || - function (callback) { - window.setTimeout(callback, 1000 / 60); - }; - })(); - var animationLoop = function () { - var queue = self.onRepaint; - if (queue.length > 0) { - self.onRepaint = []; - for (var i = 0; i < queue.length; i++) { - var widget = queue[i]; - widget._redrawRequested = false; - widget._render(); - } - } - requestAnimationFrame(animationLoop); - }; - this.animationLoop = animationLoop; - } - - Repainter.prototype.start = function () { - this.animationLoop(); - }; - /** - * Main function - insert widget into repaint queue (if not present there) - * @param {Object} widget - */ - Repainter.prototype.redrawMe = function (widget) { - if (widget._redrawRequested) return; - widget._redrawRequested = true; - this.onRepaint.push(widget); - }; - /** - * Whole node tree will be repainted. Repaint can be delayed to next change by [noRender] parameter - * @param {boolean} [noRender] - */ - Repainter.prototype.forceRedraw = function (noRender) { - var idea = this.ysy.idea; - this.ysy.util.traverse(idea, function (node) { - node.attr.force = true; - }); - if (!noRender) { - idea.dispatchEvent('changed'); - } - }; - window.easyMindMupClasses.Repainter = Repainter; -})(); \ No newline at end of file diff --git a/plugins/easy_mindmup/assets/javascripts/save_info.js b/plugins/easy_mindmup/assets/javascripts/save_info.js deleted file mode 100644 index e9cfcad..0000000 --- a/plugins/easy_mindmup/assets/javascripts/save_info.js +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Created by hosekp on 1/23/17. - */ -(function () { - /** - * - * @param {MindMup} ysy - * @property {MindMup} ysy - * @property {jQuery} $parent - * @property {jQuery} $element - * @property {Date} lastTime - * @property {string} state - * @constructor - */ - function SaveInfo(ysy) { - this.ysy = ysy; - this.init(ysy); - this.state = 'initial'; - this.lastTime = new Date(); - } - - /** @param {MindMup} ysy */ - SaveInfo.prototype.init = function (ysy) { - this.$parent = ysy.toolbar.$menu; - ysy.toolbar.addChild(this); - this.$element = this.$parent.find(".mindmup__menu-save"); - if (window.moment) { - var self = this; - this.interval = window.setInterval(function () { - ysy.repainter.redrawMe(self); - }, 60 * 1000); - } - }; - - SaveInfo.prototype.isSaved = function (isAutosave) { - if (!this.$element.length) return; - this.lastTime = new Date(); - this.state = isAutosave ? "autosaved" : "saved"; - this.ysy.repainter.redrawMe(this); - }; - - SaveInfo.prototype._render = function () { - if (!this.$element.length) return; - var rendered; - var labels = this.ysy.settings.labels.save_info; - if (window.moment) { - rendered = labels[this.state] + " " + moment(this.lastTime).fromNow(); - } else { - rendered = labels[this.state] + " " + labels["at"] + " " + this.lastTime.toTimeString().split(" ")[0]; - } - this.$element.attr("title", rendered); - }; - - window.easyMindMupClasses.SaveInfo = SaveInfo; - //#################################################################################################################### -})(); \ No newline at end of file diff --git a/plugins/easy_mindmup/assets/javascripts/save_progress.js b/plugins/easy_mindmup/assets/javascripts/save_progress.js deleted file mode 100644 index ab6ac50..0000000 --- a/plugins/easy_mindmup/assets/javascripts/save_progress.js +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Created by hosekp on 11/15/16. - */ -(function () { - /** - * - * @param {MindMup} ysy - * @constructor - */ - function SaveProgress(ysy) { - this.ysy = ysy; - this.currentScore = 0; - this.fullScore = 0; - this.$element = $(ysy.settings.templates.saveProgressModal); - this.$element.hide(); - this.$element.appendTo("body"); - this.$progressBar = this.$element.find(".mindmup-progress-bar"); - this.hidden = true; - - } - - SaveProgress.prototype.scoreForSequential = 1; - SaveProgress.prototype.scoreForParallel = 1 / 4.0; - SaveProgress.prototype.scoreForLayout = 1 / 4.0; - /** - * - * @param {Array.<SendPack>} list - * return {number} - */ - SaveProgress.prototype.estimateProgress = function (list) { - var short = 0; - for (var i = 0; i < list.length; i++) { - if (list[i].isSafe) short++; - } - return list.length - short * (this.scoreForSequential - this.scoreForParallel);//+this.scoreForLayout; - // return {short:short,long:list.length-short,average:list.length-short*5/6}; - }; - /** - * Entry function - it shows progress bar and estimate its score (difficulty to fill) - * @param {Array.<SendPack>} list - */ - SaveProgress.prototype.startProgress = function (list) { - this.fullScore = this.estimateProgress(list); - if (this.fullScore <= 1) return; - this.currentScore = 0; - this.hidden = false; - this.$element.show(); - this.ysy.repainter.redrawMe(this); - }; - /** - * - * @param {SendPack} sendPack - */ - SaveProgress.prototype.requestFinished = function (sendPack) { - if (this.hidden) return; - if (!sendPack) { - this.hide(); - return; - } - if (sendPack.isSafe) { - this.currentScore += this.scoreForParallel; - } else { - this.currentScore += this.scoreForSequential; - } - if (this.currentScore >= this.fullScore) { - this.hide(); - } else { - this.ysy.repainter.redrawMe(this); - } - }; - SaveProgress.prototype._render = function () { - this.$progressBar.width((100 * this.currentScore / (this.fullScore + 0.0001)) + "%"); - }; - SaveProgress.prototype.hide = function () { - this.$element.hide(); - }; - - - window.easyMindMupClasses.SaveProgress = SaveProgress; -})(); \ No newline at end of file diff --git a/plugins/easy_mindmup/assets/javascripts/saver.js b/plugins/easy_mindmup/assets/javascripts/saver.js deleted file mode 100644 index 4309313..0000000 --- a/plugins/easy_mindmup/assets/javascripts/saver.js +++ /dev/null @@ -1,610 +0,0 @@ -(function () { - /** - * - * @param {MindMup} ysy - * @property {{ - * fails: Array, - * layoutSend: boolean, - * onWay: number, - * unsafeOnWay: boolean, - * updatesDone: boolean, - * deletesDone: boolean, - * deletesStarted: boolean, - * sendPacks: Array.<SendPack>, - * doneCounter: number, - * pointer: number - * }|null} temp - * @property {boolean} isAutosave - * @property {Array} deleteStack - * @constructor - */ - function Saver(ysy) { - /** @type {MindMup} */ - this.ysy = ysy; - this.temp = null; - /** @type {Array.<ModelEntity>} */ - this.deleteStack = []; - this.delaying = 500; - this.isAutosave = false; - } - - /** - * @example "easy_wbs_layout"; - * @type {String} - */ - Saver.prototype.layoutKey = null; - - Saver.prototype.save = function (isAutosave) { - var idea = this.ysy.idea; - this.isAutosave = !!isAutosave; - /**@type{Array.<SendPack>} */ - var list = []; - this.linearizeTree(idea, null, null, list, false); - this.temp = { - fails: [], - layoutSend: false, - onWay: 0, - unsafeOnWay: false, - updatesDone: false, - deletesDone: false, - deletesStarted: false, - sendPacks: list, - doneCounter: 0, - pointer: 0 - }; - this.ysy.saveProgress.startProgress(list); - this.saveLayout(); - this.sendNextNode(); - }; - /** - * - * @param {ModelEntity} node - * @param {ModelEntity} parent - * @param {ModelEntity} project - * @param {Array.<SendPack>} list - * @param {boolean} unsafe - */ - Saver.prototype.linearizeTree = function (node, parent, project, list, unsafe) { - if (!node) return; - if (!node.attr.nonEditable) { - var pack = this.createSendPack(node, parent, project); - if (!unsafe) { - pack.evaluate(this.ysy); - if (!pack.isSame) { - list.push(pack); - if (!pack.isSafe) { - unsafe = true; - } - } - - } else { - list.push(pack); - } - } - if (!node.ideas) return; - if (node && node.attr.entityType === "project") { - project = node; - } - var ideas = _.values(node.ideas); - for (var i = 0; i < ideas.length; i++) { - this.linearizeTree(ideas[i], node, project, list, unsafe); - } - }; - - Saver.prototype.sendNextNode = function (async) { - var temp = this.temp; - var index = temp.pointer; - if (async && index % 10 === 9) { - setTimeout($.proxy(this.sendNextNode, this), 0); - return; - } - var list = this.temp.sendPacks; - // while(temp.laggingPointer<index){ - // if(list[temp.laggingPointer].response){ - // temp.laggingPointer++; - // }else{ - // break; - // } - // } - if (temp.doneCounter === list.length) { - this.temp.updatesDone = true; - this.finishCheck(); - return; - } - var pack = list[index]; - if (!pack) { - return; - } - pack.evaluate(this.ysy); - // if(!pack.isSame) this.ysy.log.debug("__ " + pack.print() + " __"); - if (pack.isSame) { - temp.pointer++; - temp.doneCounter++; - this.sendNextNode(true); - } else if (pack.isSafe) { - pack.sendRequest(); - temp.pointer++; - this.sendNextNode(true); - } else if (!pack.needInclusion) { - if (temp.unsafeOnWay) return; - temp.pointer++; - pack.sendRequest(); - } else { - if (temp.unsafeOnWay) return; - pack.sendInclusion(); - temp.doneCounter--; - } - }; - - Saver.prototype.sendDeletes = function () { - var ysy = this.ysy; - ysy.log.debug("sendDeletes", "send"); - var temp = this.temp; - temp.deletesStarted = true; - temp.pointer = 0; - temp.doneCounter = 0; - temp.sendPacks = []; - for (var i = 0; i < this.deleteStack.length; i++) { - /** @type {ModelEntity} */ - var deletedEntity = this.deleteStack[i]; - if (!deletedEntity.attr.isFromServer) continue; - var id = ysy.getData(deletedEntity).id; - if (!id) continue; - var nodeInTree = ysy.util.findWhere(ysy.idea, function (node) { - //noinspection JSReferencingMutableVariableFromClosure - return ysy.getData(node).id === id; - }); - if (nodeInTree) continue; - var sendPack = this.createSendPack(deletedEntity); - sendPack.makeDelete(this.ysy); - temp.sendPacks.push(sendPack); - } - this.ysy.saveProgress.startProgress(temp.sendPacks); - this.sendNextNode(); - this.deleteStack = []; - }; - /** - * - * @param {SendPack} sendPack - */ - Saver.prototype.requestFinished = function (sendPack) { - this.temp.doneCounter++; - this.ysy.saveProgress.requestFinished(sendPack); - this.sendNextNode(); - }; - - Saver.prototype.finishCheck = function () { - if (this.temp.unsafeOnWay) return; - // if (this.temp.onWay) return; - if (this.temp.sendPacks.length !== this.temp.doneCounter) return; - if (!this.temp.layoutSend) return; - if (!this.temp.updatesDone) return; - if (!this.temp.deletesStarted) { - this.sendDeletes(); - return; - } - this.ysy.saveProgress.requestFinished(null); - this.afterSave(); - }; - Saver.prototype.afterSave = function () { - this.ysy.log.debug("afterSave", "send"); - /** @type {MindMup} */ - var ysy = this.ysy; - var fails = this.temp.fails; - var self = this; - - this.ysy.saveInfo.isSaved(this.isAutosave); - if (fails.length > 0) { - var errors = _.map(fails, function (fail) { - return self.createErrorNotice(fail) - }); - ysy.util.showMessage(ysy.settings.labels.gateway.multiFail + "<br>" + errors.join("<br>"), "error", 5000); - } else { - ysy.util.showMessage(ysy.settings.labels.gateway.multiSuccess, "notice", 1000); - } - ysy.storage.clear(); - ysy.loader.load(); - - }; - /** - * - * @param {SendPack} sendPack - * @return {string} - */ - Saver.prototype.createErrorNotice = function (sendPack) { - var method = sendPack.method; - var name = sendPack.node.title; - var reason = null; - var status = sendPack.response.status; - if (status === 403) { - reason = this.ysy.settings.labels.gateway.response_403; - } else { - try { - var responseJson = JSON.parse(sendPack.response.responseText); - if (responseJson.errors) { - reason = responseJson.errors.join(", "); - } - } catch (e) { - } - } - //if(method === "DELETE") { - // - //}else{ - //} - var labels = this.ysy.settings.labels; - return labels.types[sendPack.node.attr.entityType] + " " + name + " " + labels.gateway[method + "fail"] + ": " + (reason || sendPack.response.statusText); - }; - - Saver.prototype.saveLayout = function () { - if (!this.layoutKey) throw "Missing layoutKey"; - var self = this; - var layout = this.ysy.storage.extra.positionExtract; - var requestData = {easy_setting: {}}; - requestData.easy_setting[this.layoutKey] = layout; - var xhr = $.ajax({ - method: "PUT", - url: this.ysy.settings.paths.updateLayout, - // type: request.type, - dataType: "json", - data: requestData - }); - xhr.complete(function () { - self.temp.layoutSend = true; - self.finishCheck(); - }); - }; - - window.easyMindMupClasses.Saver = Saver; - //#################################################################################################################### - /** - * Contains all information needed for sending of proper request. - * It also contains [node], which is ModelEntity so its children are accessible to be send next - * @constructor - * @param {ModelEntity} node - * @param {ModelEntity} [parent] - * @param {ModelEntity} [project] - * @property {String} method - * @property {String} url - * @property {ModelEntity} node - * @property {ModelEntity} parent - * @property {ModelEntityData} nodeData - * @property {String} response - * @property {Saver} saver - * @property {boolean} isSame - * @property {boolean} isSafe - * @property {boolean} needInclusion - * @property {boolean} evaluated - */ - function SendPack(node, parent,project) { - this.method = null; - this.url = ""; - this.node = node; - this.parent = parent; - this.project = project; - this.nodeData = null; - /** generated data for request - it is filled just before actual send */ - this.data = {}; - this.response = null; - this.saver = null; - - this.isSame = false; - this.isSafe = false; - this.needInclusion = false; - this.evaluated = false; - } - - /** - * Simple way how to create SendPack for deleting entities without complicated [evaluate] - * @param {MindMup} ysy - */ - SendPack.prototype.makeDelete = function (ysy) { - this.ysy = ysy; - this.method = "DELETE"; - this.nodeData = this.node.attr.data; - this.evaluated = true; - }; - - /** - * Check ModelEntity and decide: - * - if it is same as entity on server - in that case the entity can be skipped - * - if changed attributes are safe - can be send on server in parallel with other safe requests - * - if changed attribute is not safe - have to be send in alone (or with safe requests) - * - if inclusion is needed - some unsafe attribute changed in such way that two requests are needed, - * first to clear old value and the second to set a new value of the attribute - * @param {MindMup} ysy - */ - SendPack.prototype.evaluate = function (ysy) { - if (this.evaluated) return; - this.evaluated = true; - this.ysy = ysy; - var node = this.node; - this.updateNodeData(); - this.nodeData = this.node.attr.data; - if (node.attr.nonEditable) { - this.isSame = true; - return; - } - if (node.attr.isFromServer && this.nodeData.id) { - if (!this.nodeData._old) { - this.isSame = true; - return; - } - this.method = "PUT"; - if (this.isSafeCheck()) { - this.isSafe = true; - return; - } - if (this.needInclusionCheck()) { - this.needInclusion = true; - // return; - } - } else { - this.method = "POST"; - // this.isSafe = false; - } - }; - SendPack.prototype.generateUrl = function () { - var type = this.node.attr.entityType; - var url = this.ysy.settings.paths[type + this.method]; - if (!url) url = ""; - this.url = url.replace(new RegExp("(:|%3A)" + type + "ID", ""), this.nodeData.id); - }; - SendPack.prototype.needInclusionCheck = function () { - throw "needInclusionCheck not implemented"; - // var entityData = this.nodeData; - // return entityData._old.parent_issue_id !== entityData.parent_issue_id - // && entityData.parent_issue_id - // && entityData._old.parent_issue_id - }; - SendPack.prototype.isSafeCheck = function () { - throw "isSafeCheck not implemented"; - // var data = this.nodeData; - // if (this.node.attr.entityType === "project") { - // return !data._old.hasOwnProperty("parent_id") || data._old.parent_id === data.parent_id; - // } - // if (data._old.hasOwnProperty("project_id") && data._old.project_id !== data.project_id) return false; - // return !data._old.hasOwnProperty("parent_issue_id") || data._old.parent_issue_id === data.parent_issue_id; - }; - SendPack.prototype.updateNodeData = function () { - if (0 == "0") throw "updateNodeData not implemented"; - var idea = this.node; - var parent = this.parent; - var updateObj; - if (idea.attr.entityType === "project") { - if (parent) { - var parentData = this.ysy.getData(parent); - updateObj = {parent_id: parentData.id, name: idea.title}; - } else { - updateObj = {name: idea.title}; - } - } else { - if (parent) { - parentData = this.ysy.getData(parent); - if (parent.attr.entityType === "project") { - updateObj = { - project_id: parentData.id, - parent_issue_id: null, - subject: idea.title - } - } else { - updateObj = { - parent_issue_id: parentData.id, - subject: idea.title, - project_id: this.ysy.util.getEntityProjectId(parent) - }; - } - } - } - this.ysy.setData(idea, updateObj); - }; - /** - * Create String representation of this. Only for debugging purposes - * @return {String} - */ - SendPack.prototype.print = function () { - return '{"node":' + this.node.title + ',"flags":"' + (this.isSame ? "isSame" : "") + (this.isSafe ? "isSafe" : "") + (this.needInclusion ? "Inclusion" : "") + '"}'; - }; - SendPack.prototype.sendRequest = function () { - var temp = this.saver.temp; - this.generateUrl(); - this.ysy.log.debug("send for " + (this.nodeData.subject || this.nodeData.name), "send"); - if (this.method === "POST") { - // delete this.nodeData._old; - // delete this.nodeData.id; - this.data[this.node.attr.entityType] = this.filterPostData(this.nodeData); - // this.data[this.node.attr.entityType] = this.nodeData; - } else if (this.method === "PUT") { - this.data[this.node.attr.entityType] = this.filterPutData(this.nodeData, this.nodeData._old); - } - var self = this; - if (!this.isSafe) { - temp.unsafeOnWay = true; - } - if (this.ysy.settings.noSave) { - self.saver.delaying += 150; - self.ysy.log.debug(self.method + " " + self.url + " " + JSON.stringify(self.data)); - setTimeout(function () { - if (!self.isSafe) { - temp.unsafeOnWay = false; - } - self.response = '{"' + self.node.attr.entityType + '":{"id":' + self.node.id + '}}'; - if (self.method === "POST") { - self.updateByPOST(); - } - self.ysy.log.debug("DONE " + self.method + " " + self.url + " " + JSON.stringify(self.data)); - self.saver.requestFinished(self); - }, self.saver.delaying); - return; - } - var xhr = $.ajax({ - method: this.method, - url: this.url, - dataType: "text", - data: this.data - }); - xhr.done(function (response) { - self.response = response; - if (self.method === "POST") { - self.updateByPOST(); - } - }); - xhr.fail(function (response) { - self.response = response; - temp.fails.push(self); - }); - xhr.complete(function () { - if (!self.isSafe) { - temp.unsafeOnWay = false; - } - self.saver.requestFinished(self); - }); - }; - /** - * Update ID of entity from the response, so its children can use obtained ID for their requests - * @protected - */ - SendPack.prototype.updateByPOST = function () { - var source = JSON.parse(this.response)[this.node.attr.entityType]; - if (!source) return; - //UPDATE ID - this.nodeData.id = source.id; - this.updateByPOSTAdditional(source); - }; - /** - * Enables to update more attributes from POST - just override this function - * @param {Object} source - */ - SendPack.prototype.updateByPOSTAdditional = function (source) { - if (0 == "0") throw "updateByPOSTAdditional not implemented"; - var keysToTransform = ["tracker", "status", "priority"]; - var wantedKeys = ["tracker_id", "status_id", "priority_id", "done_ratio"]; - for (var i = 0; i < keysToTransform.length; i++) { - var key = keysToTransform[i]; - if (_.isObject(source[key])) { - source[key + "_id"] = source[key].id; - delete source[key]; - } - } - $.extend(this.nodeData, _.pick(source, wantedKeys)); - }; - /** - * @protected - */ - SendPack.prototype.sendInclusion = function () { - var node = this.node; - /** @type {ModelEntity} */ - var inclusion = new window.easyMindMupClasses.ModelEntity() - .fromServer(node.id, node.title + " inclusion", node.attr.entityType, true, this.getInclusionData()); - inclusion.ideas = {1: node}; - /** @type {SendPack} */ - var pack = this.saver.createSendPack(inclusion); - pack.ysy = this.ysy; - pack.nodeData = pack.node.attr.data; - pack.method = "PUT"; - this.needInclusion = false; - pack.sendRequest(); - }; - SendPack.prototype.getInclusionData = function () { - // the code may be marked as error by IDE, dead code is left for overrides - if (0 == "0") throw "getInclusionData"; - if (this.node.attr.entityType === "issue") { - return {id: this.nodeData.id, _old: {parent_issue_id: 5}, parent_issue_id: null}; - } - }; - /** - * Returns only changed values from nodeData - * @param {ModelEntityData} nodeData - * @param {Object} oldNodeData - * @return {Object} - */ - SendPack.prototype.filterPutData = function (nodeData, oldNodeData) { - var filtered = {}; - var keys = Object.getOwnPropertyNames(oldNodeData); - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - if (key.substring(0, 1) === "_") continue; - // if (nodeData[key] === oldNodeData[key]) continue; - if (key === "custom_fields") { - filtered.custom_field_values = this.transformCustomValues(nodeData.custom_fields, oldNodeData.custom_fields); - continue; - } - filtered[key] = nodeData[key]; - } - return filtered; - }; - /** - * Returns only attributes which are safe to send to server - * @param {ModelEntityData} nodeData - * @return {Object} - */ - SendPack.prototype.filterPostData = function (nodeData) { - var filtered = {}; - var util = this.ysy.util; - var keys = Object.getOwnPropertyNames(nodeData); - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - if (key === "id") continue; - if (util.startsWith(key, "_")) continue; - if (typeof(nodeData[key]) === "function") continue; - if (key === "custom_fields") { - filtered.custom_field_values = this.transformCustomValues(nodeData.custom_fields, null); - continue; - } - filtered[key] = nodeData[key]; - } - return filtered; - }; - /** - * - * @param {Array.<{id:String,value:*}>} customFields - * @param {Array.<{id:String,value:*}>} oldCustomFields - * @return {Object.<int,*>} - */ - SendPack.prototype.transformCustomValues = function (customFields, oldCustomFields) { - var customValues = {}; - if (oldCustomFields) { - var customIndices = Object.getOwnPropertyNames(oldCustomFields); - for (var j = 0; j < customIndices.length; j++) { - if (customIndices[j].startsWith("_"))continue; - var customIndex = parseInt(customIndices[j]); - var customField = customFields[customIndex]; - if (customField.field_format === "easy_lookup" && typeof customField.value.length !== "undefined") { - var out = []; - for (var k = 0; k < customField.value.length - 2; k = k + 3) { - out.push(customField.value[k]); - } - if (customField.multiple) { - customValues[customField.id] = out; - } else { - if (out.length === 0) { - customValues[customField.id] = null; - } else { - customValues[customField.id] = out[0]; - } - } - } else { - customValues[customField.id] = customField.value; - } - } - } else { - for (j = 0; j < customFields.length; j++) { - customField = customFields[j]; - customValues[customField.id] = customField.value; - } - } - return customValues; - }; - window.easyMindMupClasses.SendPack = SendPack; - /** - * @param {ModelEntity} node - * @param {ModelEntity} [parent] - * @param {ModelEntity} [project] - * @return {SendPack} - */ - Saver.prototype.createSendPack = function (node, parent, project) { - var pack = new SendPack(node, parent, project); - pack.saver = this; - return pack; - }; - //#################################################################################################### -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/storage.js b/plugins/easy_mindmup/assets/javascripts/storage.js deleted file mode 100644 index cf859b9..0000000 --- a/plugins/easy_mindmup/assets/javascripts/storage.js +++ /dev/null @@ -1,191 +0,0 @@ -(function () { - 'use strict'; - /** - * - * @param {MindMup} ysy - * @property {StorageExtra} extra - * @property {StorageSettings} settings - * @constructor - */ - function Storage(ysy) { - this._scope = ysy.id + "-"; - this.ysy = ysy; - this.extra = new StorageExtra(this); - this.settings = new StorageSettings(this); - var self = this; - //if (this._scope == null) throw "_scope is not defined! Scope is used for separation of xBS products in localStorage"; - - ysy.eventBus.register("TreeLoaded", function (idea) { - idea.addEventListener('changed', function () { - self.save(idea); - }); - }); - - } - - Storage.prototype.getPersistentData = function (key) { - return window.localStorage.getItem(this._scope + key); - }; - Storage.prototype.savePersistentData = function (key, value) { - window.localStorage.setItem(this._scope + key, value); - }; - Storage.prototype.resetPersistentData = function (key) { - window.localStorage.removeItem(this._scope + key); - }; - Storage.prototype.save = function (idea) { - this.extra.save(idea); - }; - Storage.prototype.clear = function () { - this.extra.positionExtract = null; - }; - window.easyMindMupClasses = window.easyMindMupClasses || {}; - window.easyMindMupClasses.Storage = Storage; - -//################################################################################################### - /** - * - * @param {Storage} storage - * @constructor - */ - function StorageExtra(storage) { - this.positionExtract = null; - this.collapseExtract = null; - this.storage = storage; - /** @type {MindMup} ysy */ - this.ysy = storage.ysy; - /** @param {ModelEntity} idea */ - this._getIdOfIdea = function (idea) { - // Override this for proper entity type prefixing - // (to prevent having same id for different entities) - return this.ysy.getData(idea).id; - }; - } - - StorageExtra.prototype._key = "extra-"; - /** - * - * @param {RootIdea} idea - */ - StorageExtra.prototype.save = function (idea) { - var extract = this._extractFromNode(idea); - this.positionExtract = extract.positions; - this.collapseExtract = extract.collapses; - var toSave = { - collapses: this.collapseExtract, - rootPos: { - deltaX: this.ysy.domPatch.deltaX, - deltaY: this.ysy.domPatch.deltaY - } - }; - - this.storage.savePersistentData(this._key + this._getIdOfIdea(idea), JSON.stringify(toSave)); - }; - /** - * @param {RootIdea} idea - * return {{collapses:Object, rootPos: Object}} - */ - StorageExtra.prototype.getLocalProjectData = function (idea) { - var json = this.storage.getPersistentData(this._key + this._getIdOfIdea(idea)); - if (json === null || json === "") return {}; - var result = JSON.parse(json) || {}; - if (!result.collapses) return {collapses: result}; - return result; - }; - /** - * - * @param {Array.<ModelEntity>} data - * @param {RootIdea} root - * @return {Array.<ModelEntity>} - */ - StorageExtra.prototype.enhanceData = function (data, root) { - /** @type {Object.<string,{position:Object,rank:number}>} */ - var positions = this.positionExtract; - var projectData = this.getLocalProjectData(root); - var collapses = projectData.collapses; - this.ysy.domPatch.loadRootPosition(projectData.rootPos); - if (positions) { - for (var i = 1; i < data.length; i++) { - var nodeExtract = positions[this._getIdOfIdea(data[i])]; - if (!nodeExtract) continue; - if (nodeExtract.position) { - var position = []; - for (var j = 0; j < nodeExtract.position.length; j++) { - position.push(parseFloat(nodeExtract.position[j])); - } - data[i].attr.position = position; - } - data[i].rank = nodeExtract.rank; - // data[i]._parentTitle = nodeExtract.parentTitle; - } - } - if (collapses) { - for (i = 1; i < data.length; i++) { - data[i].attr.collapsed = !!collapses[this._getIdOfIdea(data[i])]; - } - } - return data; - }; - /** - * - * @param {ModelEntity} node - * @param {string|number} [rank] - * @param {{positions:Object.<string,{position:Object,rank:number}>,collapses:Object.<string,boolean>}} [extract] - * @return {{positions:Object.<string,{position:Object,rank:number}>,collapses:Object.<string,boolean>}} - * @private - */ - StorageExtra.prototype._extractFromNode = function (node, rank, extract) { - if (extract === undefined) extract = {positions: {}, collapses: {}}; - var positionExtract = {}; - positionExtract.rank = rank; - // positionExtract.parentTitle = parentTitle; - // var data = this.ysy.getData(node); - // if (!data.id) { - // positionExtract.title = node.title; - // } - if (node.attr.position) { - positionExtract.position = node.attr.position; - } - if (node.attr.collapsed && !_.isEmpty(node.ideas)) { - extract.collapses[this._getIdOfIdea(node)] = true; - } - if (node.ideas) { - var sortedKeys = this.ysy.util.getSortedRanks(node.ideas); - var correctedRanks = this.ysy.util.correctRanks(sortedKeys); - for (var i = 0; i < correctedRanks.length; i++) { - this._extractFromNode(node.ideas[sortedKeys[i]], correctedRanks[i], extract); - } - } - extract.positions[this._getIdOfIdea(node)] = positionExtract; - return extract; - }; -//####################################################################################### - /** - * - * @param {Storage} storage - * @property {MindMup} ysy - * @constructor - */ - function StorageSettings(storage) { - } - /** - * @param {RootIdea} idea - */ - StorageSettings.prototype.load = function (idea) { - }; - StorageSettings.prototype.loadStyle = function () { - return undefined; - }; - StorageSettings.prototype.loadLegendHidden = function () { - return undefined - }; - StorageSettings.prototype.loadLegendHeaderHidden = function () { - return undefined - }; - /** - * @param {RootIdea} idea - */ - StorageSettings.prototype.saveOneSide = function (idea) { - }; - StorageSettings.prototype.saveStyle = function () { - }; -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/styles.js b/plugins/easy_mindmup/assets/javascripts/styles.js deleted file mode 100644 index 40b5a7a..0000000 --- a/plugins/easy_mindmup/assets/javascripts/styles.js +++ /dev/null @@ -1,236 +0,0 @@ -(function () { - /** - * - * @param {MindMup} ysy - * @constructor - */ - function Styles(ysy) { - this.ysy = ysy; - /** - * - * @type {String} - */ - this.setting = null; - /** @type Object.<String,Style> */ - this.styles = {}; - this.init(); - } - - /** - * - * @type {String} - */ - Styles.prototype.defaultStyle = null; - /** - *@param {String} key - * @param {Style} style - */ - Styles.prototype.addStyle = function (key, style) { - style.key = key; - style.init(); - this.styles[key] = style; - }; - Styles.prototype.init = function () { - if (!this.defaultStyle) throw "default style is not defined"; - var self = this; - var $select = this.ysy.$menu.find(".mindmup-color-select"); - this.ysy.eventBus.register("BeforeServerClassInit", function () { - var defaultStyle = self.ysy.storage.settings.loadStyle(); - if (!defaultStyle) defaultStyle = self.defaultStyle; - $select.val(defaultStyle); - self.setColor(defaultStyle); - }); - - $select - .attr("title", this.ysy.settings.labels.free.headerNotAvailable) - .on("change", function () { - self.ysy.util.showUpgradeModal("coloring"); - $(this).val(self.defaultStyle); - }); - }; - /** - * - * @param {String} setting - */ - Styles.prototype.setColor = function (setting) { - var cssPrefix = "scheme-by-"; - $(this.ysy.containerDiv + "," + this.ysy.menuDiv + " .mindmup-legend").removeClass(cssPrefix + this.setting).addClass(cssPrefix + setting); - this.setting = setting; - this.ysy.eventBus.fireEvent("nodeStyleChanged", setting); - }; - /** - * - * @returns {Style} - */ - Styles.prototype.getCurrentStyle = function () { - return this.styles[this.setting]; - }; - /** - * @param {ModelEntity} node - * @return {String} - */ - Styles.prototype.cssClasses = function (node) { - node.title = ""; - // Override this for proper coloring of nodes and legend items - throw "cssClasses is not defined"; - // var data = ysy.mapModel.getData(node); - // if (node.attr && node.attr.isProject) return " wbs-scheme-project"; - // return "" - // + this.styles["tracker"].addSchemeClassFromData(data) - // + this.styles["assignee"].addSchemeClassFromData(data) - // + this.styles["assignee"].addSchemeClassFromData(data) - // + this.styles["progress"].addSchemeClassFromData(data) - // + this.styles["milestone"].addSchemeClassFromData(data) - // + this.styles["priority"].addSchemeClassFromData(data); - }; - /** - * Create [Style] instances from source Objects and put then into [styles] attribute in [Styles] - * @param {object.<String, {dataArray:String,value:Function,options:Function}>} styleSources - */ - Styles.prototype.createStyles = function (styleSources) { - for (var key in styleSources) { - if (!styleSources.hasOwnProperty(key)) continue; - var style = new Style(this.ysy).fromSource(styleSources[key]); - this.addStyle(key, style); - } - }; - window.easyMindMupClasses.Styles = Styles; - //#################################################################################################################### - var nope = function () { - }; - - /** - * @param {MindMup} ysy - * @constructor - */ - function Style(ysy) { - this.ysy = ysy; - this.key = null; - var self = this; - ysy.eventBus.register("dataFilled", function (name, array) { - if (self.dataArray === name) { - self.initAttribute(array); - } - }); - } - - /** - * Fill Style attributes from Style source Object - * @param {{dataArray:String,value:Function,options:Function}} source - * @return {Style} - */ - Style.prototype.fromSource = function (source) { - $.extend(this, source); - // if (source.init) this.init = source.init; - // if (source.dataArray) this.dataArray = source.dataArray; - // this.value = source.value; - // if (source.options) this.options = source.options; - return this; - }; - - Style.prototype.init = nope; - Style.prototype.dataArray = ""; - Style.prototype.value = nope; - Style.prototype.changeObject = function (value) { - var result = {}; - result[this.key + "_id"] = value; - return result; - }; - Style.prototype.builderType = "dataBased"; - - - /** - * create function, which creates oneKeyObjects - * @static - * @param {String} key - * @return {Function} - */ - Style.oneKeyObjectConstructorBuilder = function (key) { - return function (value) { - var result = {}; - result[key] = value; - return result; - }; - }; - /** - * simple constructor for generating Object with one key:value pair - * @static - * @param {String} key - * @param {*} value - * @return {Object.<String,*>} - */ - Style.oneKeyObjectConstructor = function (key, value) { - var result = {}; - result[key] = value; - return result; - }; - /** - * returns Array with items for Legend - * @param onlyUsed - * @return {Array} - */ - Style.prototype.options = function (onlyUsed) { - if (!this.data) return []; - if (onlyUsed) return this.findUsed(); - if (!this.nullAllowed) return this.data; - return [{id: 0, name: "---"}].concat(this.data); - }; - /** - * prepare Style after data (trackers, categories, ...) are loaded - * @param {Array} list - */ - Style.prototype.initAttribute = function (list) { - this.count = 1; - this.colors = {}; - for (var i = 0; i < list.length; i++) { - this.colors[list[i].id] = this.count++; - if (this.count > 12) this.count = 1; - } - this.data = list; - }; - /** - * Generate CSS class from data of node - * @param {ModelEntityData} data - * @return {String} - */ - Style.prototype.addSchemeClassFromData = function (data) { - var value = this.value(data); - return this.addSchemeClass(value); - }; - /** - * create CSS class from value generated by [value] function - * @param value - * @return {String} - */ - Style.prototype.addSchemeClass = function (value) { - if (!this.colors || this.colors[value] === undefined) return ""; - return " scheme-" + this.key + "-" + this.colors[value]; - }; - Style.prototype.findUsed = function () { - if (!this.ysy.idea) return []; - var values = {}; - this.recursiveUsed(this.ysy.idea, values); - var filtered = []; - if (values[0]) { - filtered.push({id: 0, name: "---"}); - } - var array = this.data; - for (var i = 0; i < array.length; i++) { - if (values[array[i].id]) { - filtered.push(array[i]); - } - } - return filtered; - }; - Style.prototype.recursiveUsed = function (idea, values) { - var value = this.value(this.ysy.getData(idea)); - values[value] = true; - var ideaIdeas = idea.ideas; - for (var rank in ideaIdeas) { - if (!ideaIdeas.hasOwnProperty(rank)) continue; - var child = ideaIdeas[rank]; - this.recursiveUsed(child, values); - } - }; - window.easyMindMupClasses.Style = Style; -})(); \ No newline at end of file diff --git a/plugins/easy_mindmup/assets/javascripts/toolbar.js b/plugins/easy_mindmup/assets/javascripts/toolbar.js deleted file mode 100644 index 6d0e414..0000000 --- a/plugins/easy_mindmup/assets/javascripts/toolbar.js +++ /dev/null @@ -1,192 +0,0 @@ -(function () { - /** - * This Widget contains many buttons and other widgets located in top mindMup menu - * @param {MindMup} ysy - * @constructor - */ - function Toolbar(ysy) { - this.$menu = ysy.$menu; - this.ysy = ysy; - this.children = {}; - this.init(ysy); - } - - /** - * - * @param {MindMup} ysy - */ - Toolbar.prototype.init = function (ysy) { - ysy.eventBus.register("TreeLoaded", $.proxy(this.redraw, this)); - // this.initChildren(ysy); - // for (var id in this.subClasses) { - // if (!this.subClasses.hasOwnProperty(id)) continue; - // var child = new this.subClasses[id](ysy, this.$menu); - // this.children[child.triggerName || id] = child; - // } - this.initChildren(ysy); - // _.each(ysy.view.toolbarChildren, function (child, id) { - // child.init(this.$menu); - // this.children[child.triggerName || id] = child; - // }, this); - - }; - Toolbar.prototype.initChildren = function (ysy) { - this.addChild(new OneSideButton(ysy, this.$menu)); - this.addChild(new AllIconButton(ysy, this.$menu)); - this.addChild(new StickyMenu(ysy, this.$menu)); - this.addChild(new window.easyMindMupClasses.ExpandAllButton(ysy, this.$menu)); - this.addChild(new window.easyMindMupClasses.ShowLinksButton(ysy, this.$menu)); - this.addChild(new window.easyMindMupClasses.PrintButton(ysy, this.$menu)); - this.addChild(new window.easyMindMupClasses.SaveButton(ysy, this.$menu)); - this.addChild(new window.easyMindMupClasses.UndoButton(ysy, this.$menu)); - this.addChild(new window.easyMindMupClasses.RedoButton(ysy, this.$menu)) - }; - Toolbar.prototype.addChild = function (button) { - /** @type {String} */ - var id = button.triggerName || button.id; - this.children[id] = button; - this.redraw(id); - }; - Toolbar.prototype._render = function () { - for (var key in this.children) { - if (!this.children.hasOwnProperty(key)) continue; - this.children[key]._render(); - } - }; - /** - * - * @param {String} [itemName] - */ - Toolbar.prototype.redraw = function (itemName) { - if (!itemName) { - return this.ysy.repainter.redrawMe(this); - } - if (this.children[itemName]) { - var child = this.children[itemName]; - this.ysy.repainter.redrawMe(child); - } - }; - window.easyMindMupClasses.Toolbar = Toolbar; - - //#################################################################################################################### - /** - * - * @param {MindMup} ysy - * @param {jQuery} $parent - * @constructor - */ - function OneSideButton(ysy, $parent) { - this.ysy = ysy; - this.$element = $parent.find(".toggleOneSide"); - } - - OneSideButton.prototype.triggerName = "toggleOneSide"; - OneSideButton.prototype._render = function () { - var isActive = this.ysy.idea && this.ysy.idea.oneSideOn; - if (!isActive) isActive = false; - this.$element.find("a").toggleClass("active", isActive); - }; - //#################################################################################################################### - /** - * Button, which shows and hides icons onto nodes - * @param {MindMup} ysy - * @param {jQuery} $parent - * @constructor - */ - function AllIconButton(ysy, $parent) { - this.$element = null; - this.ysy = ysy; - this.init(ysy, $parent); - } - - AllIconButton.prototype.id = "allIconButton"; - - /** - * - * @param {MindMup} ysy - * @param {jQuery} $parent - * @return {AllIconButton} - */ - AllIconButton.prototype.init = function (ysy, $parent) { - this.$element = $parent.find(".all-icon-toggler"); - var self = this; - this.$element.click(function () { - ysy.settings.allIcons = !ysy.settings.allIcons; - if (ysy.settings.allIcons) { - ysy.$container.addClass("mindmup-node-icons--with_icons"); - ysy.repainter.forceRedraw(); - } else { - ysy.$container.find(".mindmup-node-icons-all").remove(); - ysy.$container.removeClass("mindmup-node-icons--with_icons"); - } - ysy.repainter.redrawMe(self); - }); - return this; - }; - AllIconButton.prototype._render = function () { - var isActive = this.ysy.settings.allIcons; - this.$element.find("a").toggleClass("active", isActive); - }; - //#################################################################################################################### - /** - * Makes top menu sticky - * @param {MindMup} ysy - * @param {jQuery} $parent - * @constructor - */ - function StickyMenu(ysy, $parent) { - this.$element = null; - this.ysy = ysy; - this.isFixed = false; - this.init(ysy, $parent); - } - - StickyMenu.prototype.id = "StickyMenu"; - - /** - * - * @param {MindMup} ysy - * @param {jQuery} $element - * @return {StickyMenu} - */ - StickyMenu.prototype.init = function (ysy, $element) { - this.$element = $element; - this.$cont = $element.parent(); - this.$placeholder = $("<div id='mindmup_menu_placeholder' style='height:0'></div>"); - this.$cont.prepend(this.$placeholder); - this.$document = $(document); - this.offset = 0; - if (ysy.settings.easyRedmine) { - this.offset += $("#top-menu").outerHeight(); - } - var self = this; - $(document).on("scroll", function () { - ysy.repainter.redrawMe(self); - }); - ysy.eventBus.register("resize", function () { - ysy.repainter.redrawMe(self); - }); - ysy.repainter.redrawMe(self); - return this; - }; - StickyMenu.prototype._render = function () { - //ysy.log.debug("stickyMenu rendered"); - var top = this.$document.scrollTop() + this.offset - this.$cont.offset().top; - if (top > 0) { - this.$element.css("width", this.$cont.width()); - if (!this.isFixed) { - this.$element.css({position: "fixed", top: this.offset + "px"}); - this.$placeholder.height(this.$element.outerHeight()); - this.isFixed = true; - } - } else { - if (this.isFixed) { - this.$element.css({position: "relative", top: "0", width: ""}); - this.$placeholder.height(0); - this.isFixed = false; - } - } - //var top = Math.max(this.$document.scrollTop() + this.offset - this.$cont.offset().top, 0); - //this.$element.css({transform: "translate(0," + Math.round(top) + "px)"}); - }; -})(); diff --git a/plugins/easy_mindmup/assets/javascripts/utils.js b/plugins/easy_mindmup/assets/javascripts/utils.js deleted file mode 100644 index e525b95..0000000 --- a/plugins/easy_mindmup/assets/javascripts/utils.js +++ /dev/null @@ -1,314 +0,0 @@ -(function () { - window.easyMindMupClasses = window.easyMindMupClasses || {}; - /** - * Makes [Child] class ascendant of the [Parent] class - * @type {Function} - * @param {Object} Child - * @param {Object} Parent - * @return {Object} - */ - window.easyMindMupClasses.extendClass = function (Child, Parent) { - var F = new Function(); - F.prototype = Parent.prototype; - Child.prototype = new F(); - Child.prototype.constructor = Child; - Child.superclass = Parent.prototype; - return Child; - }; - /** - * - * @param {MindMup} ysy - * @constructor - */ - function Util(ysy) { - this.ysy = ysy; - this._messages = []; - this._messageType = "notice"; - this._lastMessageTime = 0; - } - - /** - * - * @param {String} message - * @param {String} type - ["error","warning","notice"] - * @param {number} [delay] - in milliseconds - time to disappear - */ - Util.prototype.showMessage = function (message, type, delay) { - var flash = $("#content").children(".flash"); - var now = new Date().valueOf(); - if (!flash.length || this._lastMessageTime + 60 * 1000 < now || this._messageType === "notice") { - window.showFlashMessage(type, message, delay); - this._lastMessageTime = now; - this._messages = [message]; - this._messageType = type; - return; - } - if (type === "notice") return; - this._lastMessageTime = now; - this._messages.push(message); - if (type === "error" && this._messageType === "warning") { - window.showFlashMessage(type, this._messages.join("<br>"), delay); - this._messageType = type; - } else { - flash.find("span").html(this._messages.join("<br>")); - } - }; - /** - * - * @param {String} id - HTML id of newly created modal - * @param {String} width - in percent "%" or in pixels "px" - * @return {jQuery} - */ - Util.prototype.getModal = function (id, width) { - var $target = $("#" + id); - if ($target.length === 0) { - $target = $("<div id=" + id + ">"); - $target.dialog({ - width: width, - appendTo: document.body, - modal: true, - resizable: false, - dialogClass: 'modal' - }); - $target.dialog("close"); - } - return $target; - }; - /** - * show modal with feature specific text and upgrade button - * @param {string} feature - */ - Util.prototype.showUpgradeModal= function (feature) { - var ysy = this.ysy; - var $target = ysy.util.getModal("upgrade-modal", "auto"); - var template = ysy.settings.templates.upgrade; - var freeLabels = ysy.settings.labels.free; - var obj = { - text: freeLabels.textNotAvailable, - href: freeLabels.buttonUpgradeHref - }; - obj[feature] = true; - var rendered = Mustache.render(template, obj); - $target.html(rendered); - showModal("upgrade-modal"); - $target.dialog({ - buttons: [ - { - id: "upgrade_button", - class: "button-1 button-positive", - text: freeLabels.buttonUpgrade, - click: function () { - var $link = $target.find("#upgrade_link"); - //$link.show().click(); - window.open($link.attr("href"), '_blank'); - $target.dialog("close"); - } - }, - { - id: "close_button", - class: "button-2 button", - text: ysy.settings.labels.buttons.close, - click: function () { - $target.dialog("close"); - } - } - ] - }); - $target.parent().find("#upgrade_button").focus(); - }; - /** - * - * @param {String} text - * @param {String} char - * @return {boolean} - */ - Util.prototype.startsWith = function (text, char) { - if (text.startsWith) { - return text.startsWith(char); - } - return text.charAt(0) === char; - }; - /** - * Convert CamelCase to snake_case - * @param {String} text - * @return {string} - */ - Util.prototype.toUnderscore = function (text) { - return text.replace(/([A-Z])/g, function ($1) { - return "_" + $1.toLowerCase(); - }); - }; - Util.prototype.isEquivalent = function (a, b) { - var aProps = Object.getOwnPropertyNames(a); - var bProps = Object.getOwnPropertyNames(b); - if (aProps.length != bProps.length) { - return false; - } - for (var i = 0; i < aProps.length; i++) { - var propName = aProps[i]; - if (a[propName] !== b[propName]) { - return false; - } - } - return true; - }; - /** - * @callback TraverseCallback - * @param {ModelEntity} node - * @param {ModelEntity} [parent] - */ - /** - * Execute [func] for every node in tree - * @param {ModelEntity} node - * @param {TraverseCallback} func - * @param {ModelEntity} [parent] - */ - Util.prototype.traverse = function (node, func, parent) { - if (!node) return; - func(node, parent); - if (!node.ideas) return; - var ideas = _.values(node.ideas); - for (var i = 0; i < ideas.length; i++) { - this.traverse(ideas[i], func, node); - } - }; - /** - * Similar to [traverse] but [func] is executed for children and then for the parent - * @param {ModelEntity} node - * @param {TraverseCallback} func - */ - Util.prototype.backTraverse = function (node, func) { - if (!node) return; - if (node.ideas) { - var ideas = _.values(node.ideas); - for (var i = 0; i < ideas.length; i++) { - this.backTraverse(ideas[i], func); - } - } - func(node); - }; - /** - * - * @param {ModelEntity} parent - regularly RootIdea - * @param {ModelEntity} target - node which parents have to be transformed by [func] - * @param {Function} func - * @return {boolean} - */ - Util.prototype.forAllParents = function (parent, target, func) { - if (parent === target) return true; - if (!parent.ideas) return false; - var ideas = _.values(parent.ideas); - for (var i = 0; i < ideas.length; i++) { - var found = this.forAllParents(ideas[i], target, func); - if (found) { - func(parent); - return true; - } - } - }; - /** - * Finds one node which satisfy [func], so func(node)===true - * @param {ModelEntity} node - usually RootIdea, but it can be called in subtrees - * @param {Function} func - * @return {ModelEntity} - */ - Util.prototype.findWhere = function (node, func) { - if (func(node)) { - return node; - } - if (!node.ideas) return null; - var ideas = _.values(node.ideas); - for (var i = 0; i < ideas.length; i++) { - var result = this.findWhere(ideas[i], func); - if (result) return result; - } - return null; - }; - /** - * - * @param {Object.<String, ModelEntity>} ideas - * @return {Array.<number>} - */ - Util.prototype.getSortedRanks = function (ideas) { - var keys = _.chain(ideas).keys().map(parseFloat).value(); - keys.sort(function (a, b) { - return a - b; - }); - return keys; - }; - /** - * Transforms the ranks by removing decimal ones and closes gaps between ranks. Order is not corrupted. - * @param {Array.<number>} ranks - * @return {Array.<number>} - */ - Util.prototype.correctRanks = function (ranks) { - var firstPositive = _.findIndex(ranks, function (key) { - return key > 0; - }); - var correctedRanks = []; - if (firstPositive < 0) firstPositive = 0; - // NEGATIVE - for (var i = 0; i < firstPositive; i++) { - correctedRanks.push(i - firstPositive); - } - // POSITIVE - for (i = firstPositive; i < ranks.length; i++) { - correctedRanks.push(i - firstPositive + 1); - } - return correctedRanks; - }; - /** - * - * @param {Array.<{name:String,value:String}>} formData - * @return {Object} - */ - Util.prototype.formToJson = function (formData) { - var result = {}; - var prolong = function (result, split, value) { - var key = split.shift(); - if (key === "") { - result.push(value); - } else { - if (split.length > 0) { - var next = split[0]; - if (!result[key]) { - if (next === "") { - result[key] = []; - } else { - result[key] = {}; - } - } - prolong(result[key], split, value); - } else { - result[key] = value; - } - } - }; - for (var i = 0; i < formData.length; i++) { - var split = formData[i].name.split(/]\[|\[|]/); - if (split.length > 1) { - split.pop(); - } - prolong(result, split, formData[i].value); - } - return result; - }; - /** - * return project_id of entity - * @param {ModelEntity} parent - * @param {int} [ideaId] - */ - Util.prototype.getEntityProjectId = function (parent, ideaId) { - if(!parent){ - parent = this.ysy.idea.findParent(ideaId); - } - while (parent && parent.attr.entityType !== "project") { - parent = this.ysy.idea.findParent(parent.id); - } - if (parent) { - return this.ysy.getData(parent).id; - } - return null; - }; - window.easyMindMupClasses.Util = Util; -})(); \ No newline at end of file diff --git a/plugins/easy_mindmup/assets/javascripts/validator.js b/plugins/easy_mindmup/assets/javascripts/validator.js deleted file mode 100644 index 8563b8e..0000000 --- a/plugins/easy_mindmup/assets/javascripts/validator.js +++ /dev/null @@ -1,107 +0,0 @@ -(function () { - /** - * contains methods, which is called by the code from mindmup/content.js and could prevent completion of this code - * by not returning true - * @param {MindMup} ysy - * @property {MindMup} ysy - * @constructor - */ - function Validator(ysy) { - this.ysy = ysy; - this._removeConfirm = new RemoveConfirm(ysy); - } - - Validator.prototype.changeParent = function (child, newParent) { - return !child.attr.nonEditable; - }; - Validator.prototype.removeSubIdea = function (ideaId, eventOrigin, idea) { - if (!idea) { - var mainIdea = this.ysy.idea; - if (!mainIdea) return false; - idea = mainIdea.findSubIdeaById(ideaId); - } - if (!idea) return false; - if (idea.attr.nonEditable) return false; - return this._removeConfirm.removeIdea(idea); - }; - Validator.prototype.paste = function (parent, newIdea) { - return !newIdea.attr.nonEditable; - }; - Validator.prototype.nodeRename = function (idea) { - return !idea.attr.nonEditable; - }; - Validator.prototype.validate = function (name /*, arg1, arg2, ... */) { - if (!this[name]) return true; - return this[name].apply(this, Array.prototype.slice.call(arguments, 1)); - }; - window.easyMindMupClasses.Validator = Validator; - - //#################################################################################################################### - /** - * @param {MindMup} ysy - * @property {MindMup} ysy - * @property {Array.<ModelEntity>} _removeStack - * @property {number} _timeout - * @property {boolean} _leaking - removes are not prevented (for short moment after passed confirm) - * @constructor - */ - function RemoveConfirm(ysy) { - this.ysy = ysy; - this._removeStack = []; - this._timeout = 0; - this._leaking = false; - } - - /** - * - * @param {ModelEntity} idea - * @return {boolean} - return boolean to know if removing idea should proceed or not - */ - RemoveConfirm.prototype.removeIdea = function (idea) { - if (this._leaking) return true; - this._removeStack.push(idea); - var self = this; - if (!this._timeout) { - this._timeout = window.setTimeout(function () { - if (self._showConfirm()) { - self._deleteStacked(); - } else { - self._removeStack = []; - } - self._timeout = 0; - }, 0); - } - return false; - }; - /** - * Confirm is passed so now all stacked ideas has to be deleted - * @private - */ - RemoveConfirm.prototype._deleteStacked = function () { - this._leaking = true; - var rootIdea = this.ysy.idea; - _.each(this._removeStack, /** @param {ModelEntity} idea*/ function (idea) { - rootIdea.removeSubIdea(idea.id); - }); - this._leaking = false; - this._removeStack = []; - }; - /** - * @return {boolean} - * @private - */ - RemoveConfirm.prototype._showConfirm = function () { - if (this._removeStack.length === 0) return true; - if (this._removeStack.length === 1) { - var idea = this._removeStack[0]; - return window.confirm(this.ysy.settings.labels.errors.warning_delete_node.replace("{{name}}", '"' + idea.title + '"')); - } else { - var list = "\n"; - for (var i = 0; i < this._removeStack.length; i++) { - idea = this._removeStack[i]; - list += "\u2022 " + idea.title + "\n"; - } - return window.confirm(this.ysy.settings.labels.errors.warning_delete_nodes + list); - } - } -})(); diff --git a/plugins/easy_mindmup/assets/stylesheets/easy_mindmup.css b/plugins/easy_mindmup/assets/stylesheets/easy_mindmup.css deleted file mode 100644 index 4bb9515..0000000 --- a/plugins/easy_mindmup/assets/stylesheets/easy_mindmup.css +++ /dev/null @@ -1,175 +0,0 @@ -/* -* = require mindmup -* = require_self -* = require easy_mindmup_sass.scss -*/ - -.mindmup_context_menu_item { - cursor: pointer; -} - -.mindmup-reload-modal-errors li { - color: #cd0a0a; -} - -.mindmup-last-modal-diffs li { - color: #bf993f; -} - -.mindmup-node-icons { - position: absolute; - left: 0; - top: -10px; - white-space: nowrap; -} - -.mindmup-node-icons--with_icons .mindmup-node-icons { - top: -18px; -} - -.mindmup-node-icon { - height: 20px; - display: inline-block; - margin-right: 3px; - vertical-align: middle; -} - -.mindmup-node-icon-avatar, .mindmup-legend-item-cont .gravatar { - height: 24px; - width: 24px; -} - -.mindmup-node-icon-avatar .gravatar { - vertical-align: sub; -} - -.mindmup-node-icon-avatar .gravatar, -.mindmup-legend-item-cont .gravatar { - padding: 1px; - border: 1px solid #777; -} - -.mindmup-legend-item-cont .gravatar { - margin-top: -7px; -} - -.mindmup-node-icon-avatar .gravatar:hover, -.mindmup-legend-item-cont .gravatar:hover { - transform: scale(2); - position: relative; - z-index: 5; -} - -.mindmup-node-icon-milestone-diamond { - border-width: 4px; - border-style: solid; -} - -#context-menu li:not(.folder) > ul { - display: none; -} - -.controller-easy_wbs .easy-content-page { - transform: none !important; -} - -.link-edit-widget { - display: none; - z-index: 999; - position: absolute; - padding: 10px; - background-color: white; - border: 1px solid #dd3e3a; - cursor: default; -} - -.mindmup-legend-used { - margin-top: 10px; - display: inline-block; - color: rgba(66, 50, 26, 0.5); -} - -.mindmup-legend-used-used--all, .mindmup-legend-used-all--used { - display: none; -} - -.mindmup-legend-drag-overlay { - position: fixed; - top: 0; - left: 0; - z-index: 10000; - cursor: move; -} - -.mindmup-legend-drag-avatar { - position: absolute; - z-index: 5; - height: 20px; - width: 20px; - margin-left: -12px; - margin-top: -12px; - border: 1px solid; -} - -/*.mindmup__menu-save--tooltip {*/ - /*display: inline-block;*/ - /*color: green;*/ - /*padding: 0 5px;*/ -/*}*/ - -.mindmup__legend-container { - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.14), 0 2px 2px rgba(0, 0, 0, 0.05); -} - -.mindmup__menu { - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.14), 0 2px 2px rgba(0, 0, 0, 0.05); -} - -.mindmup-node-icon-is_edited { - margin-right: 1px; - margin-left: -10px; - vertical-align: middle; - border-radius: 5000px; - width: 20px; - height: 20px; - color: #ffffff; - background-color: #e50026; - line-height: 1.2; - font-size: 18px; - text-align: center; - display: inline-block; -} - -.mindmup-node-icon-is_edited::before { - content: "!"; - font-family: inherit; -} - -.mindmup-node-icons-all { - display: inline-block; -} - -.mindmup__node--filtered_out { - opacity: 0.2; -} - -mindmup-sidebar { - position: absolute; - display: block; - top: 0; - right: 0; -} - -.date-picker__date-wrap .input-append { - width: auto; - float: right; -} - -.date-picker__date-wrap { - margin-bottom: 5px; - overflow: hidden; -} - -easy-lookup .easy-lookup-values-wrapper { - height: auto; -} diff --git a/plugins/easy_mindmup/assets/stylesheets/easy_mindmup_sass.scss.erb b/plugins/easy_mindmup/assets/stylesheets/easy_mindmup_sass.scss.erb deleted file mode 100644 index 366ff0d..0000000 --- a/plugins/easy_mindmup/assets/stylesheets/easy_mindmup_sass.scss.erb +++ /dev/null @@ -1,37 +0,0 @@ -<% redmine_sass = false - ep_com = Redmine::Plugin.installed?(:easy_project_com) - %> -<% if ep_com %> -@import "../../../easyproject/easy_plugins/easy_project_com/assets/stylesheets/scss/common_assets"; -<% else %> -@import "../../../easyproject/easy_plugins/easy_extensions/assets/stylesheets/scss/common_assets"; -<% end %> -@import "sass/mindmup_default_variables"; -@import "sass/mindmup_variables"; -@import "sass/mindmup_mixins"; -@import "sass/mindmup_frame"; -@import "sass/mindmup_icons"; -<% if redmine_sass %> -@import "sass/mindmup_redmine"; -<% end %> -@import "sass/mindmup_progress"; -@import "sass/mindmup_legend"; -@import "sass/mindmup_mapjs"; -@import "sass/mindmup_nodes"; -@import "sass/mindmup_schemes"; -@import "sass/mindmup_print"; -@import "sass/mindmup"; - -.mindmup { - @import "sass/mindmup_sidebar"; -} - -<%if redmine_sass %> -@include loadFontFace--non-rails('Material Icons', '../../fonts/EasyMaterialIcons-Regular', 'Material Icons', 'MaterialIcons-Regular', normal, normal); -<% else %> -<% if ep_com %> -@include loadFontFace('Material Icons', '../plugin_assets/easy_mindmup/fonts/EasyMaterialIcons-Regular', 'Material Icons', 'MaterialIcons-Regular', normal, normal); -<% else %> -@include loadFontFace--non-rails('Material Icons', '../plugin_assets/easy_mindmup/fonts/EasyMaterialIcons-Regular', 'Material Icons', 'MaterialIcons-Regular', normal, normal); -<% end %> -<% end %> diff --git a/plugins/easy_mindmup/assets/stylesheets/generated/easy_mindmup.css b/plugins/easy_mindmup/assets/stylesheets/generated/easy_mindmup.css deleted file mode 100644 index e4b475f..0000000 --- a/plugins/easy_mindmup/assets/stylesheets/generated/easy_mindmup.css +++ /dev/null @@ -1,3138 +0,0 @@ -body, html { - height: 100%; - /*overflow: hidden*/ -} - -#container, #floating-toolbar, #topbar, .dropdown-menu, .floating { - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none -} - -#toolbarSocial { - margin-right: 20px -} - -.logo { - background-image: url(//d1g6a398qq2djm.cloudfront.net/img/logo_32.png); - background-position: left center; - background-repeat: no-repeat; - width: 0; - height: 40px; - padding-left: 40px; - padding-top: 5px; - padding-bottom: 5px -} - -#logo-img { - background-image: url(//d1g6a398qq2djm.cloudfront.net/img/logo_32.png); - background-position: left center; - background-repeat: no-repeat; - width: 40px; - height: 40px; - padding: 0; - margin-left: 50px -} - -@media (max-width: 979px) { - .navbar-fixed-bottom, .navbar-fixed-top { - position: fixed; - margin-bottom: 0 - } -} - -@media (max-width: 767px) { - .navbar { - padding-left: 20px; - padding-right: 20px - } - - body { - padding: 0 - } -} - -.span-toolbar { - width: 120px; - cursor: move -} - -@media (max-width: 1024px) { - .hidden-tablet-landscape { - display: none !important - } -} - -@media (max-width: 768px) { - .hidden-tablet-portrait { - display: none !important - } -} - -@media (max-width: 320px) { - .hidden-phone-portrait { - display: none !important - } -} - -@media (max-height: 320px) { - .form-horizontal .control-group { - margin-bottom: 5px - } - - .hidden-phone-landscape { - display: none - } -} - -@media (max-width: 400px) { - .map-changed .changed-phone-hidden { - display: none !important - } -} - -@media (max-width: 1024px) { - .map-changed .changed-tablet-hidden { - display: none !important - } -} - -@media screen { - #topbar .nav > li > a { - font-weight: 700 - } -} - -#floating-toolbar { - position: absolute; - top: 100px; - right: 10px; - z-index: 999; - border: 1px solid #08c; - border-radius: 9px -} - -.android .visible-touch, .ios .visible-touch { - display: block !important -} - -.android .hidden-touch, .ios .hidden-touch { - display: none !important -} - -div.topbar-color-picker { - width: 127px -} - -.topbar-color-picker .colorPicker-swatch { - width: 15px; - height: 15px -} - -.android .colorPicker-swatch, .ios .colorPicker-swatch { - width: 30px; - height: 30px -} - -.android .colorPicker-palette, .ios .colorPicker-palette { - width: 217px; - top: 55px; - left: 5px -} - -.map-changed .hidden-map-changed, .map-unchanged .visible-map-changed { - display: none !important -} - -#toolbarEdit .btn-group { - margin-left: 0 -} - -#toolbarEdit button { - margin-top: 5px; - width: 40px; - height: 32px -} - -#toolbarEdit button.two { - width: 80px -} - -#toolbarEdit button.three { - width: 120px -} - -.ideaInput { - position: absolute; - z-index: 999; - background-color: #5FBF5F; - color: #FFF; - font-family: Helvetica, "Arial Unicode MS", sans-serif; - font-weight: 700; - font-size: 13px; - line-height: 13px; - text-align: center; - padding: 0 -} - -.center { - text-align: center -} - -.ideaInput:focus { - outline: 0 -} - -.menulink { - margin-right: 20px; - margin-top: 10px -} - -#gplus-share { - border: 0; - height: 16px; - background-image: url(//ssl.gstatic.com/images/icons/gplus-16.png); - background-position: left center; - background-repeat: no-repeat; - margin-left: 6px; - margin-right: 20px; - margin-top: 2px; - padding-right: 0 -} - -#modalDownload .modal-body { - text-align: center -} - -#modalDownload .modal-body p { - text-align: left -} - -#modalDownload img { - max-height: 300px; - max-width: 450px -} - -.share { - width: 32px; - height: 32px; - display: inline-block; - margin: 5px; - cursor: pointer -} - -.btn-inline { - border: 0; - background: 0 0; - margin-left: 5px; - margin-right: 5px -} - -.colorPicker_hexWrap { - display: none -} - -div.colorPicker-picker { - display: inline; - float: left; - background: 0 0 -} - -#modalImport input[type=file] { - opacity: 0; - position: absolute; - width: 0; - height: 0 -} - -.repo { - background-repeat: no-repeat; - background-position: left center; - background-image: url(//d1g6a398qq2djm.cloudfront.net/img/logo_16.png) -} - -.repo-a { - background-image: url(//d1g6a398qq2djm.cloudfront.net/img/logo_16.png) -} - -.repo-b { - background-image: url(//d1g6a398qq2djm.cloudfront.net/img/logo_gold_16.png) -} - -.repo-p { - background-image: url(//d1g6a398qq2djm.cloudfront.net/img/logo_gold_private_16.png) -} - -.repo-g { - background-image: url(//d1g6a398qq2djm.cloudfront.net/img/google_drive.png) -} - -.repo-menuitem { - background-position: 14px center; - padding-left: 35px !important -} - -a.repo { - margin-left: 5px -} - -span.repo-a, span.repo-b, span.repo-g, span.repo-p { - padding-left: 16px -} - -.dropdown-menu li a { - cursor: pointer -} - -.visible-collapsed-toolbar { - display: none -} - -.collapsed-toolbar .visible-collapsed-toolbar { - display: block !important -} - -.collapsed-toolbar span.visible-collapsed-toolbar { - display: inline !important -} - -.collapsed-toolbar .hidden-collapsed-toolbar { - display: none !important -} - -.visible-row-split { - display: none -} - -.row-split .visible-row-split { - display: block !important -} - -.row-split span.visible-row-split { - display: inline !important -} - -.row-split .hidden-row-split { - display: none !important -} - -.visible-column-split { - display: none -} - -.column-split .visible-column-split { - display: block !important -} - -.column-split span.visible-column-split { - display: inline !important -} - -.column-split .hidden-column-split { - display: none !important -} - -#listBookmarks a .btn-inline { - margin-left: 15px -} - -.gecko #listBookmarks a .btn-inline { - position: relative; - top: -17px; - left: 15px -} - -.hidden-topbar #topbar .navbar-inner { - visibility: hidden -} - -.column-split.hidden-topbar #topbar .navbar-inner, .hidden-topbar #topbar:hover .navbar-inner { - visibility: visible -} - -.topbar-autohide { - display: inline -} - -.hidden-topbar .topbar-autohide, span.topbar-fixed { - display: none -} - -.hidden-topbar span.topbar-fixed { - display: inline -} - -body.ipad { - margin: 1px -} - -body.ios-wkwebview { - margin: 0; - padding: 0; - width: 100% -} - -.image-render-visible { - display: none -} - -.image-render .image-render-visible { - display: block -} - -.image-render .image-render-hidden, .offline-disabled-hidden { - display: none -} - -body.offline-enabled .offline-disabled-hidden { - display: block -} - -#attachEditArea { - overflow: scroll; - outline: 0; - border: 1px solid #ccc; - padding: 4px; - margin: 10px; - box-sizing: content-box; - -webkit-box-shadow: rgba(0, 0, 0, .0745098) 0 1px 1px 0 inset; - box-shadow: rgba(0, 0, 0, .0745098) 0 1px 1px 0 inset; - border-radius: 3px; - background-color: #fff; - display: block; - clear: both -} - -#modalAttachmentEditor .editor-topbar { - padding-right: 10px; - padding-left: 10px; - display: none -} - -#modalAttachmentEditor.mm-editable .editor-topbar { - display: block -} - -#modalAttachmentEditor .viewer-topbar { - margin-top: 5px; - margin-bottom: 5px; - padding-right: 10px; - padding-left: 10px; - height: 30px -} - -#modalAttachmentEditor.mm-editable .viewer-topbar { - display: none -} - -#modalAttachmentEditor button.close { - margin-left: 5px -} - -#modalAttachmentEditor .editor-topbar > .btn-toolbar { - display: inline-block; - background-color: #eee; - width: 100% -} - -#modalAttachmentEditor { - position: absolute; - height: 80%; - width: 80%; - left: 10%; - top: 10%; - padding: 5px; - z-index: 9999; - background-color: #eee; - -moz-border-radius: 6px; - border-radius: 6px; - margin: 0 -} - -@media (max-width: 1200px) { - #modalAttachmentEditor { - width: 90%; - left: 5%; - top: 5% - } -} - -#modalAttachmentEditor .dropdown-menu .btn-toolbar { - display: block -} - -#modalAttachmentEditor .dropdown-menu .btn-toolbar .btn-group { - margin-top: 5px; - margin-left: 5px; - margin-right: 5px -} - -.android #modalAttachmentEditor .btn-toolbar, .ios #modalAttachmentEditor .btn-toolbar { - margin-top: 5px; - margin-bottom: 5px; - padding-bottom: 10px -} - -.android #modalAttachmentEditor, .ios #modalAttachmentEditor { - top: 0; - height: 60% -} - -@media (max-height: 768px) { - .android #modalAttachmentEditor, .ios #modalAttachmentEditor { - height: 37% - } -} - -.non-group .btn { - margin-left: 5px -} - -#linkEditWidget { - display: none; - z-index: 999; - position: absolute; - padding: 10px -} - -.alert a { - text-decoration: underline; - cursor: pointer -} - -.alert a.btn { - text-decoration: none -} - -input.noglow { - outline: 0; - border: none !important; - box-shadow: none !important; - cursor: pointer -} - -.visible-map-source-a, .visible-map-source-b, .visible-map-source-g, .visible-map-source-n, .visible-map-source-p { - display: none -} - -.map-source-a .visible-map-source-a, .map-source-b .visible-map-source-b, .map-source-g .visible-map-source-g, .map-source-n .visible-map-source-n, .map-source-p .visible-map-source-p { - display: inherit -} - -@media (max-width: 1200px) { - .hidden-narrow-screen { - display: none - } -} - -@media (max-width: 1600px) { - #optionalPane .hidden-narrow-screen { - display: none - } -} - -.btn-xlarge { - padding: 18px 28px; - font-size: 40px; - line-height: normal; - -webkit-border-radius: 8px; - -moz-border-radius: 8px; - border-radius: 8px; - width: 250px; - height: 180px; - margin-left: 10px; - margin-bottom: 10px -} - -@media (max-height: 320px) { - .btn-xlarge { - padding: 9px 14px; - font-size: 20px; - line-height: normal; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - width: 230px; - height: 70px; - margin-left: 5px; - margin-bottom: 5px - } -} - -@media (max-width: 320px) { - .btn-xlarge { - padding: 9px 14px; - font-size: 20px; - line-height: normal; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - width: 230px; - height: 70px; - margin-left: 5px; - margin-bottom: 5px - } - - #mainMenu > li > a { - padding-left: 0; - padding-right: 15px - } - - #logo-img { - margin: 0; - padding-left: 5px; - padding-right: 0 - } -} - -@media (min-height: 640px) { - #modalKeyActions .modal-body { - min-height: 400px - } -} - -#modalKeyActions .item a span { - padding-right: 10px -} - -#modalKeyActions a { - cursor: pointer; - color: #000 -} - -#modalKeyActions div.item > a { - text-decoration: underline -} - -.social { - display: inline-block !important; - padding-left: 2px !important; - padding-right: 2px !important; - margin-right: 2px !important; - cursor: pointer -} - -#modalGoldLicense textarea { - width: 95%; - height: 200px -} - -#modalIconEdit .file-drop-zone { - width: 150px; - height: 150px; - border: 1px dashed #000; - color: gray; - font-size: 7px; - text-align: center -} - -#modalIconEdit .file-drop-zone img { - max-width: 150px; - max-height: 150px -} - -#modalIconEdit { - z-index: 9999 -} - -.btn .export { - max-width: 24px -} - -.btn .landscape { - transform: rotate(90deg); - -moz-transform: rotate(90deg); - -webkit-transform: rotate(90deg) -} - -#modalPDFExport form { - margin-top: 20px -} - -.alert-error input { - background: 0 0; - margin: 0 0 2px; - color: #b94a48; - border: none !important; - outline: 0; - box-shadow: none !important; - width: 100%; - cursor: pointer -} - -body .modal.huge { - width: 90%; - height: 80%; - left: 5%; - margin-left: auto; - margin-right: auto -} - -#measuresSheet table { - background-color: #fff; - border: 1px solid #d4d4d4 -} - -#measuresSheet td { - text-align: right; - width: 20% -} - -#measuresSheet th + th { - text-align: right -} - -#measuresSheet table thead tr th { - border-bottom: 3px gray solid !important -} - -#measuresSheet table tfoot tr th { - border-top: 3px gray solid !important -} - -#measuresSheet table tbody th { - width: 30% -} - -#measuresSheet form { - margin: 0 !important -} - -#measuresSheet td:focus { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #7ab5d3; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #7ab5d3; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #7ab5d3; - outline: #5b9dd9 auto -} - -.measures-editor.error { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px red !important; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px red !important; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px red !important; - outline: red auto thin !important -} - -#measuresSheet .modal-footer a { - margin-right: 20px; - margin-left: 20px; - line-height: 30px -} - -#optionalPane .input-append.navbar-form button { - margin-top: 5px !important -} - -#measuresSheet { - margin: 5px; - border-left: 1px; - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none -} - -.table-container { - margin-right: 5px -} - -.column-split .table-container { - margin-bottom: 45px -} - -.show-active { - display: none -} - -.mm-active .show-active { - display: initial -} - -.black { - color: #000 !important -} - -.activated-scene { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #7ab5d3; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #7ab5d3; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #7ab5d3; - outline: #5b9dd9 auto -} - -#storyboard { - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none -} - -.storyboard-container { - padding-left: 10px; - padding-right: 10px -} - -.storyboard-scene { - display: inline-block; - max-height: 120px; - max-width: 160px; - min-height: 120px; - min-width: 160px; - overflow: hidden; - background-color: #fff; - border: 1px solid silver; - border-radius: 4px; - color: #000; - margin: 10px; - text-align: center; - cursor: move -} - -.storyboard-scene-title { - display: table-cell; - vertical-align: middle; - white-space: pre-wrap; - font-weight: 700 -} - -.drag-shadow { - opacity: .5; - box-shadow: none; - outline: 0; - cursor: move; - z-index: 10; - position: relative -} - -.potential-drop-left { - margin-left: 0; - margin-right: 20px -} - -.potential-drop-right { - margin-left: 20px; - margin-right: 0 -} - -#splittable { - width: 100%; - height: calc(100% - 41px); - margin-top: 41px; - -webkit-tap-highlight-color: transparent -} - -.hidden-topbar:not(.column-split) > #splittable { - height: 100%; - margin-top: 0 -} - -.ios-wkwebview > #splittable { - width: 100%; - height: calc(100%); - margin-top: 0 -} - -.ios-wkwebview { - -webkit-tap-highlight-color: transparent -} - -.splittable-optional .navbar { - width: 100%; - margin-bottom: 0 -} - -.splittable-optional .content { - overflow: scroll; - height: calc(100% - 41px) -} - -.ios-wkwebview .splittable-optional .content { - overflow: scroll; - height: 100% -} - -.splittable-primary { - outline: #d4d4d4 solid 1px -} - -.splittable-optional { - display: none; - outline: #d4d4d4 solid 1px -} - -.column-split .splittable-primary { - float: left; - height: 100%; - overflow: scroll; - width: 50% -} - -.column-split .splittable-optional { - float: right; - height: 100%; - width: 50%; - display: block -} - -.splittable-primary { - height: 100%; - width: 100% -} - -.row-split .splittable-primary { - height: 50%; - overflow: scroll; - width: 100% -} - -.row-split .splittable-optional { - height: 50%; - width: 100%; - display: block -} - -#optionalPane { - background-color: #f5f5f5; - -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, .1); - -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, .1); - box-shadow: 0 1px 10px rgba(0, 0, 0, .1) -} - -.splittable-optional .content-container { - height: 100% -} - -.pull-middle { - display: table; - height: 100% -} - -.pull-middle > div { - display: table-cell; - vertical-align: middle; - padding-left: 20%; - padding-right: 20% -} - -.ios-menu-toggle-container { - position: absolute; - height: 90px; - width: 75px; - top: calc(100% - 90px); - left: 0; - overflow: hidden; - z-index: 999 -} - -.ios-corner-icon-container { - position: absolute; - height: 100px; - width: 75px; - top: 5; - left: -11px; - border: 1px solid #22AAE0; - background-color: #FFF; - border-radius: 5px; - box-shadow: 2px 2px 1px rgba(104, 104, 104, .8) -} - -.ios-menu-toggle { - position: absolute; - top: 5; - left: 12; - height: 73px; - width: 65px -} - -.ios-toolbar { - position: absolute; - box-shadow: 0 -1px 0 #22AAE0; - background-color: rgba(255, 255, 255, .85); - top: calc(100% - 80px); - left: 65px; - width: calc(100% - 65px); - height: 80px; - z-index: 998; - overflow: scroll -} - -.ios-icon-label { - position: absolute; - font-family: Helvetica, "Arial Unicode MS", sans-serif; - font-size: 8pt; - color: #22AAE0; - font-weight: 400; - text-align: center; - line-height: 1.2; - top: calc(100% - 22px); - width: 50px; - left: 5px; - height: 22px -} - -.ios-toolbar-item { - display: inline-block; - position: relative; - top: 0; - height: 75px; - width: 60px -} - -.ios-toolbar-icon { - position: absolute; - left: 10px; - top: 8px; - height: 40px; - width: 40px -} - -.ios-modal { - z-index: 1090; - position: absolute; - overflow: hidden; - left: 0; - top: 0; - height: 100%; - width: 100%; - background-color: rgba(255, 255, 255, .85) -} - -.ios-modal-close { - position: absolute; - top: 20; - left: calc(100% - 45px); - height: 40px; - width: 40px -} - -.ios-modal-title { - position: absolute; - left: 45px; - top: 30px; - height: 40px; - width: calc(100% - 90px); - text-align: center; - font-family: Helvetica, "Arial Unicode MS", sans-serif; - font-size: 12pt; - color: #22AAE0; - font-weight: 700; - line-height: 1.2 -} - -.ios-modal-content { - z-index: 1095; - position: absolute; - top: 80px; - height: calc(100% - 75px); - overflow-x: hidden; - overflow-y: auto; - background-color: #FFF; - border: 1px solid #22AAE0; - border-radius: 5px; - box-shadow: 2px 2px 1px rgba(104, 104, 104, .8) -} - -.ios-color-selector { - display: inline-block; - box-shadow: 1px 1px 3px rgba(104, 104, 104, .7) -} - -.ios-color-palette { - display: block; - text-align: center -} - -@media (min-width: 601px) { - .ios-modal-content { - left: calc(50% - 300px); - width: 600px - } - - .ios-color-palette { - margin: 20px 50px - } - - .ios-color-selector { - margin: 20px; - height: 80px; - width: 80px; - border-radius: 40px - } -} - -@media (max-width: 600px) { - .ios-modal-content { - left: calc(50% - 150px); - width: 300px - } - - .ios-color-palette { - margin: 10px 20px - } - - .ios-color-selector { - margin: 10px; - height: 40px; - width: 40px; - border-radius: 20px - } -} - -.collaborator-list-container { - max-height: 200px; - overflow-y: scroll; - padding-top: 10px -} - -.collaborator-list-container td { - cursor: pointer -} - -.collaborator-list-container table { - margin-bottom: 0 -} - -.mm-collaborator { - position: absolute; - width: 32px; - height: 32px; - border: 3px solid transparent; - border-radius: 20px; - transform: translate(5px, 5px); - min-width: 30px -} - -.collab-name { - overflow-x: hidden; - max-width: 50px; - white-space: nowrap -} - -.collab-name a { - line-height: 30px -} - -.collab-photo { - width: 30px -} - -.collab-photo img { - width: 30px; - height: 30px; - float: left; - margin-right: 10px; - border: 2px solid transparent; - border-radius: 20px -} - -#floating-collaborators { - position: absolute; - top: 100px; - left: 10px; - z-index: 999; - border: 1px solid #08c; - border-radius: 9px -} - -.visible-collaboration-toolbar { - display: none -} - -.map-source-c.collaboration-toolbar .visible-collaboration-toolbar { - display: initial !important -} - -.collaboration-toolbar .hidden-collaboration-toolbar { - display: none !important -} - -.mm-has-collaborators .hidden-has-collaborators, .visible-has-collaborators { - display: none -} - -.mm-has-collaborators .visible-has-collaborators { - display: block -} - -.visible-collaboration-mute-speech { - display: none -} - -.collaboration-mute-speech .visible-collaboration-mute-speech { - display: initial !important -} - -.collaboration-mute-speech .hidden-collaboration-mute-speech { - display: none !important -} - -.btn-share { - margin-left: 10px; - margin-right: 10px -} - -.mm-icon-gmail { - background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDU1NTUgMzMwOTciPg0KIDxnPg0KICA8cGF0aCBmaWxsPSIjRTc1QTREIiBkPSJNNDE2MDggMjUwYzIwMzAsMCAzNjkxLDE2NjEgMzY5MSwzNjkxbDAgMTA3MCAtNTEyOCAzNjYzIC0xNzQ1OCAxMjAyNiAtMTc0NTggLTEyMTQ4IDAgMjQyOTUgLTEzMTQgMGMtMjAzMCwwIC0zNjkxLC0xNjYxIC0zNjkxLC0zNjkxbDAgLTI1MjE0YzAsLTIwMzAgMTY2MSwtMzY5MSAzNjkxLC0zNjkxbDE4NzcyIDEzOTE4IDE4ODk0IC0xMzkxOHoiLz4NCiAgPHBvbHlnb24gZmlsbD0iI0U3RTRENyIgcG9pbnRzPSI1MjU1LDg1NTIgNTI1NSwzMjg0NyA0MDE3MiwzMjg0NyA0MDE3Miw4Njc0IDIyNzEzLDIwNzAwICIvPg0KICA8cG9seWdvbiBmaWxsPSIjQjhCN0FFIiBwb2ludHM9IjUyNTUsMzI4NDcgMjI3MTMsMjA3MDAgMjI2MzQsMjA2NDQgNTI1NSwzMjU4MCAiLz4NCiAgPHBvbHlnb24gZmlsbD0iI0I3QjZBRCIgcG9pbnRzPSI0MDE3Miw4Njc0IDQwMTgyLDMyODQ3IDIyNzEzLDIwNzAwICIvPg0KICA8cGF0aCBmaWxsPSIjQjIzOTJGIiBkPSJNNDUyOTkgNTAxMWw2IDI0MTQ4Yy04OCwyNjg0IC0xMjUxLDM2NDIgLTUxMjMsMzY4N2wtMTAgLTI0MTczIDUxMjggLTM2NjN6Ii8+DQogIDxwb2x5Z29uIGZpbGw9IiNGN0Y1RUQiIHBvaW50cz0iMzk0MSwyNTAgMjI3MTMsMTQxNjggNDE2MDgsMjUwICIvPg0KIDwvZz4NCjwvc3ZnPg0K); - padding: 15px 9px; - background-position: center center; - background-repeat: no-repeat -} - -.mm-icon-gdrive { - background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWw6c3BhY2U9InByZXNlcnZlIiB3aWR0aD0iNTA5LjA4bW0iIGhlaWdodD0iNDQwLjk3bW0iIHZlcnNpb249IjEuMSIgc3R5bGU9InNoYXBlLXJlbmRlcmluZzpnZW9tZXRyaWNQcmVjaXNpb247IHRleHQtcmVuZGVyaW5nOmdlb21ldHJpY1ByZWNpc2lvbjsgaW1hZ2UtcmVuZGVyaW5nOm9wdGltaXplUXVhbGl0eTsgZmlsbC1ydWxlOmV2ZW5vZGQ7IGNsaXAtcnVsZTpldmVub2RkIg0Kdmlld0JveD0iMCAwIDEzMzE1NiAxMTUzNDEiDQogeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPg0KIDxkZWZzPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgPCFbQ0RBVEFbDQogICAgLmZpbDIge2ZpbGw6IzExQTg2MX0NCiAgICAuZmlsMCB7ZmlsbDojMzc3N0UzfQ0KICAgIC5maWwxIHtmaWxsOiNGRkNGNjN9DQogICBdXT4NCiAgPC9zdHlsZT4NCiA8L2RlZnM+DQogPGcgaWQ9IkxpdmVsbG9feDAwMjBfMSI+DQogIDxtZXRhZGF0YSBpZD0iQ29yZWxDb3JwSURfMENvcmVsLUxheWVyIi8+DQogIDxwb2x5Z29uIGNsYXNzPSJmaWwwIiBwb2ludHM9IjIyMTk0LDExNTM0MSA0NDM4NSw3Njg5NCAxMzMxNTYsNzY4OTQgMTEwOTYzLDExNTM0MSAiLz4NCiAgPHBvbHlnb24gY2xhc3M9ImZpbDEiIHBvaW50cz0iODg3NzIsNzY4OTQgMTMzMTU2LDc2ODk0IDg4NzcyLDAgNDQzODUsMCAiLz4NCiAgPHBvbHlnb24gY2xhc3M9ImZpbDIiIHBvaW50cz0iMCw3Njg5NCAyMjE5NCwxMTUzNDEgNjY1NzgsMzg0NDcgNDQzODUsMCAiLz4NCiA8L2c+DQo8L3N2Zz4=); - padding: 15px 9px; - background-position: center center; - background-repeat: no-repeat; - background-size: 100% 100% -} - -#collaboratorSpeechBubble { - position: absolute; - z-index: 2; - top: 100px; - left: 20px -} - -#collaboratorSpeechBubble img { - width: 60px; - height: 60px; - border-radius: 60px; - border: 2px solid transparent; - box-shadow: 0 5px 10px rgba(0, 0, 0, .2); - cursor: pointer -} - -#collaboratorSpeechBubble img:hover { - box-shadow: 0 5px 10px rgba(0, 0, 0, .5) -} - -.speech-bubble-inner { - max-width: 300px; - max-height: 100px; - min-width: 150px; - overflow: hidden -} - -.speech-bubble-title { - max-width: 300px; - white-space: nowrap; - overflow: hidden -} - -.icon-volume-off { - margin-left: 3px; - margin-right: 5px -} - -.hidden-topbar #mainMenu .dropdown-menu { - margin-top: 0 -} - -.mapjs-node { - margin: 0; - padding: 7px; - border-radius: 10px; - border: 1px solid #777; - /*box-shadow: 5px 5px 5px rgba(204, 204, 204, .8);*/ - z-index: 3; - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - background-color: #E0E0E0; - color: #4F4F4F; - cursor: pointer; - font-family: Helvetica, "Arial Unicode MS", sans-serif; - font-weight: 700; - font-size: 12px -} - -.mapjs-add-link { - cursor: crosshair -} - -.mapjs-add-link .mapjs-node { - cursor: alias -} - -.mapjs-node span { - white-space: pre-wrap; - text-align: center; - line-height: 150%; - display: block; - max-width: 146px; - min-height: 1.5em; - min-width: 1em; - outline: 0; - cursor: pointer -} - -.mapjs-node span[contenteditable=true] { - user-select: text; - -moz-user-select: text; - -webkit-user-select: text; - -ms-user-select: text; - cursor: auto -} - -.mapjs-node.activated { - outline: 0; - border: 3px dotted #2E9AFE; - margin: -2px -} - -.mapjs-node:focus { - outline: 0 -} - -.mapjs-node.selected { - outline: 0; - /*box-shadow: 5px 5px 5px #000;*/ - z-index: 4 -} - -.mapjs-node.dragging { - opacity: .4; - z-index: 5 -} - -/*.mapjs-node.collapsed {*/ -/*box-shadow: 3px 3px 0 #A0A0A0, 4px 4px 0 #333, 6px 6px 0 #707070, 7px 7px 0 #222*/ -/*}*/ - -/*.mapjs-node.collapsed.selected {*/ -/*box-shadow: 4px 4px 0 #A0A0A0, 5px 5px 0 #333, 8px 8px 0 #707070, 9px 9px 0 #222, 12px 12px 5px #000*/ -/*}*/ - -/*.mapjs-node[mapjs-level="1"] {*/ -/*background-color: #22AAE0*/ -/*}*/ - -/*.mapjs-node[mapjs-level="1"].activated {*/ -/*border: 3px dotted #E0E0E0*/ -/*}*/ - -.mapjs-node.droppable { - outline: 0; - border: 3px dashed #EF6F6F; - margin: -2px -} - -.mapjs-node-light { - color: #4F4F4F -} - -.mapjs-node-dark { - color: #EEE -} - -.mapjs-node-white { - color: #000 -} - -.mapjs-label { - left: -.75em; - position: absolute; - bottom: -1em; - opacity: .8; - background-color: #f13333; - padding: 1px 2px; - border: 1px solid #fff; - -webkit-border-radius: 9px; - -moz-border-radius: 9px; - border-radius: 9px; - display: inline-block; - font-size: 10px; - font-weight: 700; - line-height: 14px; - color: #fff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); - white-space: nowrap; - vertical-align: baseline -} - -.mapjs-hyperlink { - right: -.75em; - position: absolute; - bottom: -.75em; - background-image: url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiDQoNCgkgd2lkdGg9IjUxMnB4IiBoZWlnaHQ9IjUxMnB4IiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQoNCjxwYXRoIHN0eWxlPSJmaWxsOmJsYWNrIiBkPSJNMTU2LjIyNiwxOTkuNjc5YzcuNTQxLTcuNTQsMTUuOTAyLTEzLjc1NywyNC43OTQtMTguNjU5YzQ5LjU1Ni0yNy4zMTgsMTEzLjExNy0xMi43ODgsMTQ0Ljk3LDM1LjUxOA0KDQoJbC0zOC41NDcsMzguNTQ3Yy0xMS4wNTktMjUuMjI3LTM4LjUtMzkuNTY1LTY1LjgxMy0zMy40NTZjLTEwLjI4MiwyLjMtMjAuMDU0LDcuNDI3LTI4LjAzOSwxNS40MTNsLTczLjg5OCw3My44OTYNCg0KCWMtMjIuNDMzLDIyLjQzMy0yMi40MzIsNTguOTM2LDAuMDAyLDgxLjM2OWMyMi40MzMsMjIuNDMzLDU4LjkzNSwyMi40MzMsODEuMzY4LDBsMjIuNzgtMjIuNzc5DQoNCgljMjAuNzEsOC4yMTcsNDIuOTM4LDExLjUwOCw2NC44NjIsOS44NjNsLTUwLjI3OCw1MC4yNzhjLTQzLjEwNSw0My4xMDUtMTEyLjk5MSw0My4xMDUtMTU2LjA5NiwwDQoNCgljLTQzLjEwNS00My4xMDQtNDMuMTA2LTExMi45OTEtMC4wMDEtMTU2LjA5NkwxNTYuMjI2LDE5OS42Nzl6IE0yNzMuNTc0LDgyLjMzbC01MC4yNzgsNTAuMjc4DQoNCgljMjEuOTI4LTEuNjQzLDQ0LjE1MiwxLjY0OCw2NC44NjMsOS44NjVsMjIuNzc5LTIyLjc4YzIyLjQzNC0yMi40MzQsNTguOTM2LTIyLjQzNCw4MS4zNywwYzIyLjQzNCwyMi40MzQsMjIuNDM0LDU4LjkzNiwwLDgxLjM3DQoNCglsLTczLjg5Nyw3My44OTVjLTIyLjUwMSwyMi41MDEtNTkuMDYxLDIyLjMxMS04MS4zNjgsMGMtNS4yMDItNS4yMDEtOS42OTQtMTEuNjc4LTEyLjQ4NC0xOC4wNGwtMzguNTQ2LDM4LjU0Ng0KDQoJYzQuMDQ5LDYuMTQyLDguMjYxLDExLjQ1MywxMy42NjYsMTYuODU4YzEzLjk0OSwxMy45NSwzMS42OTgsMjQuMzM5LDUyLjExNywyOS4yNTFjMjYuNDY2LDYuMzcsNTQuODIzLDIuODM5LDc5LjE4NS0xMC41OTINCg0KCWM4Ljg5Mi00LjkwMywxNy4yNTQtMTEuMTE5LDI0Ljc5NC0xOC42NTlsNzMuODk2LTczLjg5NWM0My4xMDUtNDMuMTA1LDQzLjEwNS0xMTIuOTkxLDAuMDAxLTE1Ni4wOTcNCg0KCUMzODYuNTY2LDM5LjIyNSwzMTYuNjgsMzkuMjI1LDI3My41NzQsODIuMzN6Ii8+DQo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjAsLTIwKSIgc3R5bGU9ImZpbGw6IzAwOUFDRCI+DQo8cGF0aCAgZD0iTTE1Ni4yMjYsMTk5LjY3OWM3LjU0MS03LjU0LDE1LjkwMi0xMy43NTcsMjQuNzk0LTE4LjY1OWM0OS41NTYtMjcuMzE4LDExMy4xMTctMTIuNzg4LDE0NC45NywzNS41MTgNCg0KCWwtMzguNTQ3LDM4LjU0N2MtMTEuMDU5LTI1LjIyNy0zOC41LTM5LjU2NS02NS44MTMtMzMuNDU2Yy0xMC4yODIsMi4zLTIwLjA1NCw3LjQyNy0yOC4wMzksMTUuNDEzbC03My44OTgsNzMuODk2DQoNCgljLTIyLjQzMywyMi40MzMtMjIuNDMyLDU4LjkzNiwwLjAwMiw4MS4zNjljMjIuNDMzLDIyLjQzMyw1OC45MzUsMjIuNDMzLDgxLjM2OCwwbDIyLjc4LTIyLjc3OQ0KDQoJYzIwLjcxLDguMjE3LDQyLjkzOCwxMS41MDgsNjQuODYyLDkuODYzbC01MC4yNzgsNTAuMjc4Yy00My4xMDUsNDMuMTA1LTExMi45OTEsNDMuMTA1LTE1Ni4wOTYsMA0KDQoJYy00My4xMDUtNDMuMTA0LTQzLjEwNi0xMTIuOTkxLTAuMDAxLTE1Ni4wOTZMMTU2LjIyNiwxOTkuNjc5eiBNMjczLjU3NCw4Mi4zM2wtNTAuMjc4LDUwLjI3OA0KDQoJYzIxLjkyOC0xLjY0Myw0NC4xNTIsMS42NDgsNjQuODYzLDkuODY1bDIyLjc3OS0yMi43OGMyMi40MzQtMjIuNDM0LDU4LjkzNi0yMi40MzQsODEuMzcsMGMyMi40MzQsMjIuNDM0LDIyLjQzNCw1OC45MzYsMCw4MS4zNw0KDQoJbC03My44OTcsNzMuODk1Yy0yMi41MDEsMjIuNTAxLTU5LjA2MSwyMi4zMTEtODEuMzY4LDBjLTUuMjAyLTUuMjAxLTkuNjk0LTExLjY3OC0xMi40ODQtMTguMDRsLTM4LjU0NiwzOC41NDYNCg0KCWM0LjA0OSw2LjE0Miw4LjI2MSwxMS40NTMsMTMuNjY2LDE2Ljg1OGMxMy45NDksMTMuOTUsMzEuNjk4LDI0LjMzOSw1Mi4xMTcsMjkuMjUxYzI2LjQ2Niw2LjM3LDU0LjgyMywyLjgzOSw3OS4xODUtMTAuNTkyDQoNCgljOC44OTItNC45MDMsMTcuMjU0LTExLjExOSwyNC43OTQtMTguNjU5bDczLjg5Ni03My44OTVjNDMuMTA1LTQzLjEwNSw0My4xMDUtMTEyLjk5MSwwLjAwMS0xNTYuMDk3DQoNCglDMzg2LjU2NiwzOS4yMjUsMzE2LjY4LDM5LjIyNSwyNzMuNTc0LDgyLjMzeiIvPg0KPC9nPg0KDQo8L3N2Zz4NCg0K); - width: 2em; - height: 2em; - background-size: 2em; - background-repeat: no-repeat no-repeat -} - -.mapjs-hyperlink:hover { - background-image: url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiDQoNCgkgd2lkdGg9IjUxMnB4IiBoZWlnaHQ9IjUxMnB4IiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQoNCjxwYXRoIHN0eWxlPSJmaWxsOmJsYWNrIiBkPSJNMTU2LjIyNiwxOTkuNjc5YzcuNTQxLTcuNTQsMTUuOTAyLTEzLjc1NywyNC43OTQtMTguNjU5YzQ5LjU1Ni0yNy4zMTgsMTEzLjExNy0xMi43ODgsMTQ0Ljk3LDM1LjUxOA0KDQoJbC0zOC41NDcsMzguNTQ3Yy0xMS4wNTktMjUuMjI3LTM4LjUtMzkuNTY1LTY1LjgxMy0zMy40NTZjLTEwLjI4MiwyLjMtMjAuMDU0LDcuNDI3LTI4LjAzOSwxNS40MTNsLTczLjg5OCw3My44OTYNCg0KCWMtMjIuNDMzLDIyLjQzMy0yMi40MzIsNTguOTM2LDAuMDAyLDgxLjM2OWMyMi40MzMsMjIuNDMzLDU4LjkzNSwyMi40MzMsODEuMzY4LDBsMjIuNzgtMjIuNzc5DQoNCgljMjAuNzEsOC4yMTcsNDIuOTM4LDExLjUwOCw2NC44NjIsOS44NjNsLTUwLjI3OCw1MC4yNzhjLTQzLjEwNSw0My4xMDUtMTEyLjk5MSw0My4xMDUtMTU2LjA5NiwwDQoNCgljLTQzLjEwNS00My4xMDQtNDMuMTA2LTExMi45OTEtMC4wMDEtMTU2LjA5NkwxNTYuMjI2LDE5OS42Nzl6IE0yNzMuNTc0LDgyLjMzbC01MC4yNzgsNTAuMjc4DQoNCgljMjEuOTI4LTEuNjQzLDQ0LjE1MiwxLjY0OCw2NC44NjMsOS44NjVsMjIuNzc5LTIyLjc4YzIyLjQzNC0yMi40MzQsNTguOTM2LTIyLjQzNCw4MS4zNywwYzIyLjQzNCwyMi40MzQsMjIuNDM0LDU4LjkzNiwwLDgxLjM3DQoNCglsLTczLjg5Nyw3My44OTVjLTIyLjUwMSwyMi41MDEtNTkuMDYxLDIyLjMxMS04MS4zNjgsMGMtNS4yMDItNS4yMDEtOS42OTQtMTEuNjc4LTEyLjQ4NC0xOC4wNGwtMzguNTQ2LDM4LjU0Ng0KDQoJYzQuMDQ5LDYuMTQyLDguMjYxLDExLjQ1MywxMy42NjYsMTYuODU4YzEzLjk0OSwxMy45NSwzMS42OTgsMjQuMzM5LDUyLjExNywyOS4yNTFjMjYuNDY2LDYuMzcsNTQuODIzLDIuODM5LDc5LjE4NS0xMC41OTINCg0KCWM4Ljg5Mi00LjkwMywxNy4yNTQtMTEuMTE5LDI0Ljc5NC0xOC42NTlsNzMuODk2LTczLjg5NWM0My4xMDUtNDMuMTA1LDQzLjEwNS0xMTIuOTkxLDAuMDAxLTE1Ni4wOTcNCg0KCUMzODYuNTY2LDM5LjIyNSwzMTYuNjgsMzkuMjI1LDI3My41NzQsODIuMzN6Ii8+DQo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjAsLTIwKSIgc3R5bGU9ImZpbGw6IzAwQkZGRiI+DQo8cGF0aCAgZD0iTTE1Ni4yMjYsMTk5LjY3OWM3LjU0MS03LjU0LDE1LjkwMi0xMy43NTcsMjQuNzk0LTE4LjY1OWM0OS41NTYtMjcuMzE4LDExMy4xMTctMTIuNzg4LDE0NC45NywzNS41MTgNCg0KCWwtMzguNTQ3LDM4LjU0N2MtMTEuMDU5LTI1LjIyNy0zOC41LTM5LjU2NS02NS44MTMtMzMuNDU2Yy0xMC4yODIsMi4zLTIwLjA1NCw3LjQyNy0yOC4wMzksMTUuNDEzbC03My44OTgsNzMuODk2DQoNCgljLTIyLjQzMywyMi40MzMtMjIuNDMyLDU4LjkzNiwwLjAwMiw4MS4zNjljMjIuNDMzLDIyLjQzMyw1OC45MzUsMjIuNDMzLDgxLjM2OCwwbDIyLjc4LTIyLjc3OQ0KDQoJYzIwLjcxLDguMjE3LDQyLjkzOCwxMS41MDgsNjQuODYyLDkuODYzbC01MC4yNzgsNTAuMjc4Yy00My4xMDUsNDMuMTA1LTExMi45OTEsNDMuMTA1LTE1Ni4wOTYsMA0KDQoJYy00My4xMDUtNDMuMTA0LTQzLjEwNi0xMTIuOTkxLTAuMDAxLTE1Ni4wOTZMMTU2LjIyNiwxOTkuNjc5eiBNMjczLjU3NCw4Mi4zM2wtNTAuMjc4LDUwLjI3OA0KDQoJYzIxLjkyOC0xLjY0Myw0NC4xNTIsMS42NDgsNjQuODYzLDkuODY1bDIyLjc3OS0yMi43OGMyMi40MzQtMjIuNDM0LDU4LjkzNi0yMi40MzQsODEuMzcsMGMyMi40MzQsMjIuNDM0LDIyLjQzNCw1OC45MzYsMCw4MS4zNw0KDQoJbC03My44OTcsNzMuODk1Yy0yMi41MDEsMjIuNTAxLTU5LjA2MSwyMi4zMTEtODEuMzY4LDBjLTUuMjAyLTUuMjAxLTkuNjk0LTExLjY3OC0xMi40ODQtMTguMDRsLTM4LjU0NiwzOC41NDYNCg0KCWM0LjA0OSw2LjE0Miw4LjI2MSwxMS40NTMsMTMuNjY2LDE2Ljg1OGMxMy45NDksMTMuOTUsMzEuNjk4LDI0LjMzOSw1Mi4xMTcsMjkuMjUxYzI2LjQ2Niw2LjM3LDU0LjgyMywyLjgzOSw3OS4xODUtMTAuNTkyDQoNCgljOC44OTItNC45MDMsMTcuMjU0LTExLjExOSwyNC43OTQtMTguNjU5bDczLjg5Ni03My44OTVjNDMuMTA1LTQzLjEwNSw0My4xMDUtMTEyLjk5MSwwLjAwMS0xNTYuMDk3DQoNCglDMzg2LjU2NiwzOS4yMjUsMzE2LjY4LDM5LjIyNSwyNzMuNTc0LDgyLjMzeiIvPg0KPC9nPg0KDQo8L3N2Zz4NCg==) -} - -.mapjs-attachment { - right: -5px; - position: absolute; - top: -15px; - background-image: url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiDQoJIHdpZHRoPSIxNnB4IiBoZWlnaHQ9IjMycHgiIHhtbDpzcGFjZT0icHJlc2VydmUiIHN0eWxlPSJ0cmFuc2Zvcm06cm90YXRlKDEwKSI+DQogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiwtMikgcm90YXRlKDEwKSIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MiI+DQogICA8cGF0aCBkPSJNNCwxNiBMNCwxMSBDNCwxIDE1LDEgMTUsMTEgTDE1LDI2IEMxNSwzMSA4LDMxIDgsMjUgTDgsMTAiDQogICAgIHN0eWxlPSJzdHJva2U6YmxhY2siLz4NCiAgIDxwYXRoIGQ9Ik0zLDE2IEwzLDEwIEMzLDAgMTQsMCAxNCwxMCBMMTQsMjUgQzE0LDMwIDcsMzAgNywyNSBMNywxMCINCiAgICAgc3R5bGU9InN0cm9rZTojMDA5QUNEIi8+DQogIDwvZz4NCjwvc3ZnPg0K); - width: 16px; - height: 32px; - background-size: 16px 32px; - background-repeat: no-repeat no-repeat -} - -.mapjs-attachment:hover { - background-image: url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiDQoJIHdpZHRoPSIxNnB4IiBoZWlnaHQ9IjMycHgiIHhtbDpzcGFjZT0icHJlc2VydmUiIHN0eWxlPSJ0cmFuc2Zvcm06cm90YXRlKDEwKSI+DQogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiwtMikgcm90YXRlKDEwKSIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MiI+DQogICA8cGF0aCBkPSJNNCwxNiBMNCwxMSBDNCwxIDE1LDEgMTUsMTEgTDE1LDI2IEMxNSwzMSA4LDMxIDgsMjUgTDgsMTAiDQogICAgIHN0eWxlPSJzdHJva2U6YmxhY2siLz4NCiAgIDxwYXRoIGQ9Ik0zLDE2IEwzLDEwIEMzLDAgMTQsMCAxNCwxMCBMMTQsMjUgQzE0LDMwIDcsMzAgNywyNSBMNywxMCINCiAgICAgc3R5bGU9InN0cm9rZTojMDBCRkZGIi8+DQogIDwvZz4NCjwvc3ZnPg0K) -} - -.mapjs-draw-container { - position: absolute; - margin: 0; - padding: 0 -} - -.mapjs-draw-container[data-mapjs-role=connector] { - z-index: 1 -} - -.mapjs-draw-container[data-mapjs-role=link] { - z-index: 2 -} - -.mapjs-connector { - stroke-width: 1px; - fill: none; - stroke: #888 -} - -.mapjs-link { - stroke-width: 1.5px; - fill: none -} - -.mapjs-link-hit { - stroke: transparent; - stroke-width: 15; - cursor: crosshair -} - -#container { - background-color: #FFF; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - margin: 0; - padding: 0 -} - -.mapjs-reorder-bounds { - background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjExcHgiIGhlaWdodD0iMjAuNjM0cHgiPg0KPHBhdGggZD0iTTAuMTk5LDEwLjc5bDkuNjQ2LDkuNjQ2YzAuMTMsMC4xMzMsMC4zMDIsMC4xOTcsMC40NzEsMC4xOTdjMC4xNzMsMCwwLjM0NC0wLjA2NCwwLjQ3My0wLjE5N2wwLjAxMy0wLjAxMQ0KCUMxMC45MjksMjAuMzA1LDExLDIwLjEzMiwxMSwxOS45NTJ2LTQuNjhjMC0wLjE4Mi0wLjA3LTAuMzQ3LTAuMTk4LTAuNDc1TDYuMzIzLDEwLjMybDQuNDc5LTQuNDgzQzEwLjkyOSw1LjcxNCwxMSw1LjU0MywxMSw1LjM2NA0KCVYwLjY4MmMwLTAuMTc2LTAuMDctMC4zNDUtMC4xOTgtMC40NzRsLTAuMDEzLTAuMDEyQzEwLjY2NywwLjA3MSwxMC40OTcsMCwxMC4zMTYsMEMxMC4xNDMsMCw5Ljk3LDAuMDcxLDkuODQ1LDAuMTk2TDAuMTk5LDkuODQ1DQoJQy0wLjA2NiwxMC4xMDQtMC4wNjYsMTAuNTMyLDAuMTk5LDEwLjc5eiIvPg0KPC9zdmc+); - background-height: 100%; - background-width: 100%; - height: 20px; - width: 11px; - z-index: 999; - background-repeat: no-repeat -} - -.mapjs-reorder-bounds[mapjs-edge=left] { - background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjExcHgiIGhlaWdodD0iMjAuNjM0cHgiPg0KICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTEsIDApIHNjYWxlKC0xLCAxKSI+DQo8cGF0aCBkPSJNMC4xOTksMTAuNzlsOS42NDYsOS42NDZjMC4xMywwLjEzMywwLjMwMiwwLjE5NywwLjQ3MSwwLjE5N2MwLjE3MywwLDAuMzQ0LTAuMDY0LDAuNDczLTAuMTk3bDAuMDEzLTAuMDExDQoJQzEwLjkyOSwyMC4zMDUsMTEsMjAuMTMyLDExLDE5Ljk1MnYtNC42OGMwLTAuMTgyLTAuMDctMC4zNDctMC4xOTgtMC40NzVMNi4zMjMsMTAuMzJsNC40NzktNC40ODNDMTAuOTI5LDUuNzE0LDExLDUuNTQzLDExLDUuMzY0DQoJVjAuNjgyYzAtMC4xNzYtMC4wNy0wLjM0NS0wLjE5OC0wLjQ3NGwtMC4wMTMtMC4wMTJDMTAuNjY3LDAuMDcxLDEwLjQ5NywwLDEwLjMxNiwwQzEwLjE0MywwLDkuOTcsMC4wNzEsOS44NDUsMC4xOTZMMC4xOTksOS44NDUNCglDLTAuMDY2LDEwLjEwNC0wLjA2NiwxMC41MzIsMC4xOTksMTAuNzl6Ii8+DQogIDwvZz4NCjwvc3ZnPg==) -} -/* - - - -*/ - - -.mindmup_context_menu_item { - cursor: pointer; -} - -.mindmup-reload-modal-errors li { - color: #cd0a0a; -} - -.mindmup-last-modal-diffs li { - color: #bf993f; -} - -.mindmup-node-icons { - position: absolute; - left: 0; - top: -10px; - white-space: nowrap; -} - -.mindmup-node-icons--with_icons .mindmup-node-icons { - top: -18px; -} - -.mindmup-node-icon { - height: 20px; - display: inline-block; - margin-right: 3px; - vertical-align: middle; -} - -.mindmup-node-icon-avatar, .mindmup-legend-item-cont .gravatar { - height: 24px; - width: 24px; -} - -.mindmup-node-icon-avatar .gravatar { - vertical-align: sub; -} - -.mindmup-node-icon-avatar .gravatar, -.mindmup-legend-item-cont .gravatar { - padding: 1px; - border: 1px solid #777; -} - -.mindmup-legend-item-cont .gravatar { - margin-top: -7px; -} - -.mindmup-node-icon-avatar .gravatar:hover, -.mindmup-legend-item-cont .gravatar:hover { - transform: scale(2); - position: relative; - z-index: 5; -} - -.mindmup-node-icon-milestone-diamond { - border-width: 4px; - border-style: solid; -} - -#context-menu li:not(.folder) > ul { - display: none; -} - -.controller-easy_wbs .easy-content-page { - transform: none !important; -} - -.link-edit-widget { - display: none; - z-index: 999; - position: absolute; - padding: 10px; - background-color: white; - border: 1px solid #dd3e3a; - cursor: default; -} - -.mindmup-legend-used { - margin-top: 10px; - display: inline-block; - color: rgba(66, 50, 26, 0.5); -} - -.mindmup-legend-used-used--all, .mindmup-legend-used-all--used { - display: none; -} - -.mindmup-legend-drag-overlay { - position: fixed; - top: 0; - left: 0; - z-index: 10000; - cursor: move; -} - -.mindmup-legend-drag-avatar { - position: absolute; - z-index: 5; - height: 20px; - width: 20px; - margin-left: -12px; - margin-top: -12px; - border: 1px solid; -} - -/*.mindmup__menu-save--tooltip {*/ -/*display: inline-block;*/ -/*color: green;*/ -/*padding: 0 5px;*/ -/*}*/ - -.mindmup__legend-container { - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.14), 0 2px 2px rgba(0, 0, 0, 0.05); -} - -.mindmup__menu { - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.14), 0 2px 2px rgba(0, 0, 0, 0.05); -} - -.mindmup-node-icon-is_edited { - margin-right: 1px; - margin-left: -10px; - vertical-align: middle; - border-radius: 5000px; - width: 20px; - height: 20px; - color: #ffffff; - background-color: #e50026; - line-height: 1.2; - font-size: 18px; - text-align: center; - display: inline-block; -} - -.mindmup-node-icon-is_edited::before { - content: "!"; - font-family: inherit; -} - -.mindmup-node-icons-all { - display: inline-block; -} - -.mindmup__node--filtered_out { - opacity: 0.2; -} - -mindmup-sidebar { - position: absolute; - display: block; - top: 0; - right: 0; -} - -.date-picker__date-wrap .input-append { - width: auto; - float: right; -} - -.date-picker__date-wrap { - margin-bottom: 5px; - overflow: hidden; -} - -easy-lookup .easy-lookup-values-wrapper { - height: auto; -} -@charset "UTF-8"; -/*----------------------------------------*/ -/* Vendors */ -/*----------------------------------------*/ -/*----------------------------------------*/ -/* Overides */ -/*----------------------------------------*/ -/*----------------------------------------*/ -/* Mixins & Placeholders */ -/*----------------------------------------*/ -.mindmup_hover_menu { - -webkit-border-radius: 3.6px; - -moz-border-radius: 3.6px; - border-radius: 3.6px; } - -.mindmup-legend-color-box, .mapjs-collapsor { - -webkit-border-radius: 5000px !important; - -moz-border-radius: 5000px !important; - border-radius: 5000px !important; } - -.easy .mindmup__menu-group--tooltiped li > .menu-children, .easy .mindmup__menu-group--tooltiped ul, .mapjs-node { - -webkit-border-radius: 1.8px; - -moz-border-radius: 1.8px; - border-radius: 1.8px; } - -.mindmup__menu { - -webkit-box-shadow: none !important; - -moz-box-shadow: none !important; - box-shadow: none !important; } - -.mindmup-node-icon-milestone-shell { - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); } - -.mindmup-node-icon-progress { - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -ms-transform: rotate(90deg); - -o-transform: rotate(90deg); - transform: rotate(90deg); } - -.mindmup_hover_menu, .mindmup-legend { - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; } - -.mindmup__menu { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - -.mindmup__legend-header, .mindmup__menu { - display: -webkit-box; - display: -moz-box; - display: box; - display: -webkit-flex; - display: -moz-flex; - display: -ms-flexbox; - display: flex; } - -.mindmup__menu { - -webkit-justify-content: space-between; - -ms-justify-content: space-between; - justify-content: space-between; } - -.mindmup__legend-header > label, .mindmup__menu-group--sizing { - -webkit-flex-grow: 1; - -ms-flex-grow: 1; - flex-grow: 1; } - -.mindmup-container, .mindmup-noselect { - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; } - -.easy .mindmup__menu-group--tooltiped li { - font-family: "Ubuntu", "Open Sans", sans-serif; - font-size: 13px; - line-height: 1.5; - font-weight: normal; - color: #324164; } -@media only screen and (min-resolution: 100dpi) { - .easy .mindmup__menu-group--tooltiped li { - font-size: 14px; } } -@media only screen and (max-width: 960px) { - .easy .mindmup__menu-group--tooltiped li { - font-size: 11px; } } -@media only screen and (max-width: 960px) and (min-resolution: 100dpi) { - .easy .mindmup__menu-group--tooltiped li { - font-size: 13px; } } - -@media only screen and (min-width: 1401px) { - .easy .mindmup__menu-group--tooltiped li { - font-size: 14px; } } -@media only screen and (min-width: 1401px) and (min-resolution: 100dpi) { - .easy .mindmup__menu-group--tooltiped li { - font-size: 16px; } } - -@media only screen and (min-width: 1901px) { - .easy .mindmup__menu-group--tooltiped li { - font-size: 15px; } } -@media only screen and (min-width: 1901px) and (min-resolution: 100dpi) { - .easy .mindmup__menu-group--tooltiped li { - font-size: 17px; } } - -.easy .mindmup__menu-group--tooltiped li a { - -ms-word-break: break-all; - word-break: break-word; - -webkit-hyphens: auto; - -moz-hyphens: auto; - -ms-hyphens: auto; - hyphens: auto; } - -@-webkit-keyframes icon-blink { - from { - opacity: 0.25; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - to { - opacity: 1; - -webkit-transform: scale(1.25); - -moz-transform: scale(1.25); - -ms-transform: scale(1.25); - -o-transform: scale(1.25); - transform: scale(1.25); } } -@-moz-keyframes icon-blink { - from { - opacity: 0.25; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - to { - opacity: 1; - -webkit-transform: scale(1.25); - -moz-transform: scale(1.25); - -ms-transform: scale(1.25); - -o-transform: scale(1.25); - transform: scale(1.25); } } -@-ms-keyframes icon-blink { - from { - opacity: 0.25; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - to { - opacity: 1; - -webkit-transform: scale(1.25); - -moz-transform: scale(1.25); - -ms-transform: scale(1.25); - -o-transform: scale(1.25); - transform: scale(1.25); } } -@keyframes icon-blink { - from { - opacity: 0.25; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - to { - opacity: 1; - -webkit-transform: scale(1.25); - -moz-transform: scale(1.25); - -ms-transform: scale(1.25); - -o-transform: scale(1.25); - transform: scale(1.25); } } -@-webkit-keyframes spin { - from { - transform: rotate(0deg); } - to { - transform: rotate(360deg); } } -@-moz-keyframes spin { - from { - transform: rotate(0deg); } - to { - transform: rotate(360deg); } } -@-ms-keyframes spin { - from { - transform: rotate(0deg); } - to { - transform: rotate(360deg); } } -@keyframes spin { - from { - transform: rotate(0deg); } - to { - transform: rotate(360deg); } } -@-webkit-keyframes spin-inverse { - from { - transform: rotate(0deg); } - to { - transform: rotate(-360deg); } } -@-moz-keyframes spin-inverse { - from { - transform: rotate(0deg); } - to { - transform: rotate(-360deg); } } -@-ms-keyframes spin-inverse { - from { - transform: rotate(0deg); } - to { - transform: rotate(-360deg); } } -@keyframes spin-inverse { - from { - transform: rotate(0deg); } - to { - transform: rotate(-360deg); } } -@-webkit-keyframes translate-x { - 100% { - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); } } -@-moz-keyframes translate-x { - 100% { - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); } } -@-ms-keyframes translate-x { - 100% { - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); } } -@keyframes translate-x { - 100% { - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); } } -@-webkit-keyframes translate-y { - 100% { - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); } } -@-moz-keyframes translate-y { - 100% { - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); } } -@-ms-keyframes translate-y { - 100% { - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); } } -@keyframes translate-y { - 100% { - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); } } -@-webkit-keyframes translate-menu { - 100% { - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); } } -@-moz-keyframes translate-menu { - 100% { - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); } } -@-ms-keyframes translate-menu { - 100% { - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); } } -@keyframes translate-menu { - 100% { - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); } } -@-webkit-keyframes load7 { - 0%, - 80%, - 100% { - box-shadow: 0 2.5em 0 -1.3em; } - 40% { - box-shadow: 0 2.5em 0 0; } } -@-moz-keyframes load7 { - 0%, - 80%, - 100% { - box-shadow: 0 2.5em 0 -1.3em; } - 40% { - box-shadow: 0 2.5em 0 0; } } -@-ms-keyframes load7 { - 0%, - 80%, - 100% { - box-shadow: 0 2.5em 0 -1.3em; } - 40% { - box-shadow: 0 2.5em 0 0; } } -@keyframes load7 { - 0%, - 80%, - 100% { - box-shadow: 0 2.5em 0 -1.3em; } - 40% { - box-shadow: 0 2.5em 0 0; } } -@-webkit-keyframes ripple { - 0% { - -webkit-transform: scale(0); - -moz-transform: scale(0); - -ms-transform: scale(0); - -o-transform: scale(0); - transform: scale(0); - opacity: .2; } - 100% { - -webkit-transform: scale(3); - -moz-transform: scale(3); - -ms-transform: scale(3); - -o-transform: scale(3); - transform: scale(3); - opacity: 0; } } -@-moz-keyframes ripple { - 0% { - -webkit-transform: scale(0); - -moz-transform: scale(0); - -ms-transform: scale(0); - -o-transform: scale(0); - transform: scale(0); - opacity: .2; } - 100% { - -webkit-transform: scale(3); - -moz-transform: scale(3); - -ms-transform: scale(3); - -o-transform: scale(3); - transform: scale(3); - opacity: 0; } } -@-ms-keyframes ripple { - 0% { - -webkit-transform: scale(0); - -moz-transform: scale(0); - -ms-transform: scale(0); - -o-transform: scale(0); - transform: scale(0); - opacity: .2; } - 100% { - -webkit-transform: scale(3); - -moz-transform: scale(3); - -ms-transform: scale(3); - -o-transform: scale(3); - transform: scale(3); - opacity: 0; } } -@keyframes ripple { - 0% { - -webkit-transform: scale(0); - -moz-transform: scale(0); - -ms-transform: scale(0); - -o-transform: scale(0); - transform: scale(0); - opacity: .2; } - 100% { - -webkit-transform: scale(3); - -moz-transform: scale(3); - -ms-transform: scale(3); - -o-transform: scale(3); - transform: scale(3); - opacity: 0; } } -.easy .mindmup__menu-group--tooltiped li a.submenu:after, .mindmup__legend-toggler.active a:before, .easy-mindmup__icon:before, .mapjs-collapsor { - speak: none; - font-weight: normal; - font-style: normal; - display: inline-block; - width: auto; - height: auto; - background-position: 0% 0%; - background-repeat: repeat; - background-image: none; - vertical-align: baseline; - text-decoration: none !important; - text-transform: none; - letter-spacing: normal; - word-wrap: normal; - white-space: nowrap; - direction: ltr; - /* Support for all WebKit browsers. */ - -webkit-font-smoothing: antialiased; - /* Support for Safari and Chrome. */ - text-rendering: optimizeLegibility; - /* Support for Firefox. */ - -moz-osx-font-smoothing: grayscale; - /* Support for IE. */ - font-feature-settings: 'liga'; } - -.easy .mindmup__menu-group--tooltiped li a.submenu:after, .mindmup__legend-toggler.active a:before, .easy-mindmup__icon:before, .mapjs-collapsor { - font-family: 'Material Icons','EasyIcons'; } - -.mindmup__legend-toggler.active a, .easy-mindmup__icon { - position: relative; - background-repeat: no-repeat; - background-image: none !important; } - -.mindmup-container { - background-image: linear-gradient(rgba(217, 217, 217, 0.2) 1px, transparent 1px), linear-gradient(90deg, rgba(217, 217, 217, 0.2) 1px, transparent 1px); - background-size: 12px 12px, 12px 12px; - background-position: -1px -1px, -1px -1px; } - -.easy .mindmup__menu-group--tooltiped li > .menu-children, .easy .mindmup__menu-group--tooltiped ul, .mindmup__legend-container { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(0, 0, 0, 0.1); } - -.easy .mindmup__menu-group--tooltiped ul, .mapjs-node.activated, .mapjs-node.selected, .mapjs-node.droppable { - -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1); - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1); } - -@-webkit-keyframes sidebar-buttons-slide-left { - from { - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); } - to { - -webkit-transform: translate(-184px, 0); - -moz-transform: translate(-184px, 0); - -ms-transform: translate(-184px, 0); - -o-transform: translate(-184px, 0); - transform: translate(-184px, 0); } } -@-moz-keyframes sidebar-buttons-slide-left { - from { - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); } - to { - -webkit-transform: translate(-184px, 0); - -moz-transform: translate(-184px, 0); - -ms-transform: translate(-184px, 0); - -o-transform: translate(-184px, 0); - transform: translate(-184px, 0); } } -@-ms-keyframes sidebar-buttons-slide-left { - from { - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); } - to { - -webkit-transform: translate(-184px, 0); - -moz-transform: translate(-184px, 0); - -ms-transform: translate(-184px, 0); - -o-transform: translate(-184px, 0); - transform: translate(-184px, 0); } } -@keyframes sidebar-buttons-slide-left { - from { - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); } - to { - -webkit-transform: translate(-184px, 0); - -moz-transform: translate(-184px, 0); - -ms-transform: translate(-184px, 0); - -o-transform: translate(-184px, 0); - transform: translate(-184px, 0); } } -.easy-mindmup__icon.button:before { - position: absolute; - left: 0; - width: 36px; - text-align: center; - font-size: 1.2em; - line-height: 1; - color: inherit; - top: 50%; - margin-top: -0.5em; } - -.easy .mindmup__menu-group--tooltiped li a.submenu:after { - position: absolute; - right: 1px; - top: 1px; - bottom: 1px; - font-size: 1em; - line-height: 2.25; - margin: 0; - padding: 0; - display: block; - background: none; - border: none; - min-width: 24px; - text-align: center; } -.easy .mindmup__menu-group--tooltiped li a.submenu:after { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; } -.easy .mindmup__menu-group--tooltiped li a.submenu:after span { - display: none; } - -.easy .mindmup__menu-group--tooltiped li > .menu-children, .easy .mindmup__menu-group--tooltiped ul { - position: absolute; - background-color: #ffffff; - color: #324164; - padding: 0.5em; - font-size: 11.57px; - line-height: 1; - margin-top: -0.25em; - white-space: pre; } -.easy .mindmup__menu-group--tooltiped li > .menu-children a, .easy .mindmup__menu-group--tooltiped ul a { - color: #324164; - text-decoration: underline; } -.input-append .easy .mindmup__menu-group--tooltiped li > .menu-children, .easy .mindmup__menu-group--tooltiped .input-append li > .menu-children, .input-append .easy .mindmup__menu-group--tooltiped ul, .easy .mindmup__menu-group--tooltiped .input-append ul { - font-weight: normal; - margin-top: 1px; } - -.easy .mindmup__menu-group--tooltiped li { - padding: 0; - padding-left: 36px; - border: 1px solid transparent; - border-left: none; - border-right: none; - position: relative; - line-height: 1.25; } -.easy .mindmup__menu-group--tooltiped li:hover { - border-color: #d9d9d9 !important; - background: #d9d9d9 !important; - z-index: 1; } -.easy .mindmup__menu-group--tooltiped li a { - padding: 6px 12px; - padding-left: 48px; - margin-left: -36px; - display: block; - text-decoration: none; } -.easy .mindmup__menu-group--tooltiped li a:before { - position: absolute; - left: 0; - width: 36px; - text-align: center; - padding-top: 1px; - color: #324164; } -.easy .mindmup__menu-group--tooltiped li a.submenu { - padding-right: 0 !important; - background: none !important; - position: relative; } -.easy .mindmup__menu-group--tooltiped li a.submenu:after { - content: "\005d" !important; - left: auto; - font-size: 10px; - text-align: left; - line-height: 1.9; } -.easy .mindmup__menu-group--tooltiped li a ~ span { - font-size: 0.89em; } - -.easy .mindmup__menu-group--tooltiped { - position: relative; - z-index: 700; } -.easy .mindmup__menu-group--tooltiped ul { - margin: 0; - list-style: none; - font-size: 1.125em; - min-width: 200px; - padding: 6px 0; - white-space: normal; } -.easy .mindmup__menu-group--tooltiped ul:after { - content: ''; - position: absolute; - top: 0; - bottom: 0; - right: auto; - left: 36px; - border-left: 1px solid #e5e5e5; - z-index: 0; } -.easy .mindmup__menu-group--tooltiped li > .menu-children { - display: none; - white-space: normal; - top: 6px; - left: 99%; - width: 150px; } -.easy .mindmup__menu-group--tooltiped li > .menu-children > li + li { - border-top: 1px dashed #e5e5e5; } -.easy .mindmup__menu-group--tooltiped li > .menu-children > li a { - text-decoration: none; - display: block; - padding: 0.5em; } -.easy .mindmup__menu-group--tooltiped li > .menu-children > li a:hover { - text-decoration: underline; } -.easy .mindmup__menu-group--tooltiped li > .menu-children > li a:before { - color: #01c8a9; - text-decoration: none; - margin-right: 6px; } -.easy .mindmup__menu-group--tooltiped li:hover > .menu-children { - display: inline-block; } - -@font-face { - font-family: "Material Icons"; - src: local("Material Icons"), local("MaterialIcons-Regular"), url("../../fonts/EasyMaterialIcons-Regular.eot"); - src: local("Material Icons"), local("MaterialIcons-Regular"), url("../../fonts/EasyMaterialIcons-Regular.eot?#iefix") format("embedded-opentype"), url("../../fonts/EasyMaterialIcons-Regular.woff") format("woff"), url("../../fonts/EasyMaterialIcons-Regular.woff2") format("woff2"), url("../../fonts/EasyMaterialIcons-Regular.ttf") format("truetype"), url("../../fonts/EasyMaterialIcons-Regular.svg") format("svg"); - font-weight: normal; - font-style: normal; } -.mindmup-cont { - margin: 0 -18px 6px; - width: auto; - overflow: hidden; } -@media only screen and (max-width: 480px) { - .mindmup-cont { - margin-top: -24px; } } -.mindmup-container { - position: relative; - cursor: all-scroll; - border-top: none; - box-sizing: border-box; - background-color: #f9f9f9; - margin: 0; - padding: 0; - outline: none; - overflow-y: hidden !important; } -.mindmup__legend-container { - background-color: #ffffff; - position: absolute; - left: 12px; - top: 12px; - width: 260px; } -@media only screen and (max-width: 480px) { - .mindmup__legend-container { - top: 110%; } } -.mindmup__legend-container--hidden { - display: none; } -.mindmup__legend-header { - background: #f9f9f9; - padding: 12px; } -.mindmup__legend-toggler a { - color: rgba(50, 65, 100, 0.5); - font-size: 1.5em; - line-height: 36px; } -.mindmup__legend-toggler .tip { - display: none; } -.mindmup__legend-toggler.active a:before { - content: "\e5ce" !important; } -.mindmup__menu { - user-select: none; - position: relative; - z-index: 1; - background-color: #ffffff; - border-bottom: 1px solid #e5e5e5; - padding: 24px; } -.mindmup__menu-item { - display: inline-block; - text-align: left; } -.mindmup__menu-item a.active { - color: #d94838 !important; } -.mindmup__menu-item a.active:before { - color: #d94838 !important; } -@media only screen and (max-width: 960px) { - .mindmup__menu-item > a { - padding-right: 0; } - .mindmup__menu-item > a > span { - display: none; } } -@media only screen and (max-width: 1400px) { - .mindmup__menu-item > a.icon-settings, .mindmup__menu-item > a.icon-watch { - padding-right: 0; } - .mindmup__menu-item > a.icon-settings > span, .mindmup__menu-item > a.icon-watch > span { - display: none; } } -.mindmup__menu .right-menu { - float: right; } -.mindmup__menu-group ul { - margin: 0; } -.mindmup__menu-group--tooltiped > ul { - display: none; } -.mindmup__menu-group--tooltiped:hover > ul { - display: block; } -.mindmup__menu-group--sizing { - text-align: center; - font-size: 1.5em; - position: absolute; - bottom: -48px; - right: 24px; - line-height: 24px; } -@media only screen and (max-width: 480px) { - .mindmup__menu-group--sizing { - display: none; } } -.mindmup__menu-group--sizing a { - color: rgba(50, 65, 100, 0.5); - text-decoration: none; } -.mindmup__menu-group--sizing li { - list-style: none; - display: inline-block; } -@media only screen and (min-width: 481px) { - .mindmup__menu-group-display { - margin-left: 272px; } } -.mindmup__legend-container--hidden + .mindmup__menu-group-display { - margin-left: 0; } -.mindmup_hover_menu { - display: block; - position: absolute; - z-index: 99; - background-color: white; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); } -.mindmup-reload-modal-errors li { - color: #fe7d99; } -.mindmup-last-modal-diffs li { - color: #fb5619; } -.mindmup__button--disabled { - opacity: 0.4; } -.mindmup_modal__flash_close { - position: absolute; - right: 12px; - font-size: 24px; - line-height: 24px; } - -.easy-mindmup__icon--add:before { - content: "\e3ba"; } -.easy-mindmup__icon--add_sibling:before { - content: "\e3ba"; } -.easy-mindmup__icon--insert_between:before { - content: "\e3bb"; } -.easy-mindmup__icon--remove:before { - content: "\e92b"; } -.easy-mindmup__icon--rename:before { - content: "\e22b"; } -.easy-mindmup__icon--edit_data:before { - content: "\e880"; } -.easy-mindmup__icon--follow_url:before { - content: "\e0e2"; } -.easy-mindmup__icon--zoom_in:before { - content: "\e8ff"; } -.easy-mindmup__icon--zoom_out:before { - content: "\e900"; } -.easy-mindmup__icon--refresh_view:before { - content: "\e881"; } -.easy-mindmup__icon--filter:before { - content: "\e152"; } -.easy-mindmup__icon--cancel:before { - content: "\e5c9"; } -.easy-mindmup__icon--cancel_filter:before { - content: "\e5c9"; } -.easy-mindmup__icon--close:before { - content: "\e5cd"; } -.easy-mindmup__icon--display:before { - content: "\e417"; } -.easy-mindmup__icon--links:before { - content: "\e157"; } -.easy-mindmup__icon--icons:before { - content: "\e24e"; } -.easy-mindmup__icon--collapse:before { - content: "\e909"; } -.easy-mindmup__icon--expand:before { - content: "\e146"; } -.easy-mindmup__icon--one_side:before { - content: "\e86d"; } -.easy-mindmup__icon--settings:before { - content: "\e8b8"; } -.easy-mindmup__icon--undo:before { - content: "\e166"; } -.easy-mindmup__icon--redo:before { - content: "\e15a"; } -.easy-mindmup__icon--print:before { - content: "\e16b"; } -.easy-mindmup__icon--cut:before { - content: "\e14e"; } -.easy-mindmup__icon--copy:before { - content: "\e14d"; } -.easy-mindmup__icon--paste:before { - content: "\e14f"; } -.easy-mindmup__icon--save:before { - content: "\e161"; } -.easy-mindmup__icon--legend:before { - content: "\e5d2"; } -.easy-mindmup__icon--legend_hide:before { - content: "\e06d"; } -.easy-mindmup__icon.button { - padding-left: 36px; } - -.redmine.mindmup__context_menu .easy-mindmup__icon:before, .redmine .button.easy-mindmup__icon:before { - position: absolute; - left: 0; - text-align: center; - font-size: 1.2em; - line-height: 1; - color: inherit; - top: 50%; - margin-top: -0.5em; } - -.redmine .mindmup-cont { - margin: 0 -10px -10px -10px; } -.redmine .mindmup-menu { - padding: 5px 1px 0 1px; } -.redmine .mindmup-menu .menu-item { - padding: 8px 10px 8px 10px; } -.redmine .mindmup__menu { - padding: 14px; } -.redmine .mindmup__menu-group--tooltiped > a { - padding-top: 10px; - padding-bottom: 10px; } -.redmine .mindmup__menu-group--tooltiped > ul { - position: absolute; - background-color: #ffffff; - border: 1px solid #dfccaf; - color: #42321a; - padding: 5px 5px 5px 0; - margin-top: 10px; - margin-left: -10px; - min-width: 150px; } -.redmine .mindmup__menu-group--tooltiped > ul li { - display: block; - padding: 3px; } -.redmine .mindmup__menu-group--tooltiped > ul li a { - display: block; - padding-left: 20px; } -.redmine .mindmup__menu-group--tooltiped > ul li a:before { - position: absolute; - left: 0; - width: 20px; } -.redmine .mindmup__menu-group--tooltiped:after { - display: none; } -.redmine .mindmup__menu-group--tooltiped .icon { - background-image: none; } -.redmine .mindmup__menu-group--sizing a { - padding: 0; } -.redmine .mindmup__menu-item { - padding-left: 15px; - padding-right: 15px; } -.redmine .mindmup__menu-save a { - padding-left: 30px !important; } -.redmine .mindmup__menu-save a:before { - text-align: center; - width: 36px; - position: absolute; } -.redmine .mindmup-legend { - margin-top: 1px; } -.redmine .mindmup-legend__filter_cancel_icon { - position: absolute; } -.redmine .mindmup__legend-container { - top: 0; } -.redmine .mindmup__legend-toggler { - height: 25px; } -.redmine .mindmup__legend-toggler a { - line-height: 1.5em; } -.redmine .mindmup__legend-header { - padding: 8px; } -.redmine a.button-positive { - background-color: #4ebf67; - border-radius: 2px; - border: 1.3px solid #338d47; - color: #ffffff; - padding: 8px 16px; } -.redmine .menu-item.active { - background-color: #9DB9D5; } -.redmine .menu-item.active a.button { - color: #fff; } -.redmine .gravatar { - max-width: 100%; - height: auto; - border-radius: 5000px; - overflow: hidden; - box-sizing: border-box; } -.redmine .button-2.active { - background-color: transparent !important; } -.redmine .mindmup_modal__flash_close { - color: #880000; - right: 15px; - line-height: 18px; } - -.mindmup-progress-modal { - position: fixed; - z-index: 10000; - width: 40%; - height: 150px; - top: 150px; - left: 30%; - right: 30%; - padding-top: 30px; - background-color: #ffffff; - border: 1px solid #d9d9d9; - box-shadow: 6px 6px 42px 7px rgba(217, 217, 217, 0.65); } -.mindmup-progress-modal h3 { - text-align: center; } -.mindmup-progress-cont { - height: 8px; - width: 80%; - margin-left: 10%; - margin-right: 10%; - border: 1px solid #d9d9d9; } -.mindmup-progress-bar { - width: 50%; - height: 100%; - background-color: green; } - -.mindmup-legend { - overflow-y: auto; - padding: 12px 24px; - overflow-x: hidden; } -.mindmup-legend-color-box { - background-color: #E0E0E0; - border-color: #E0E0E0; - width: 24px; - height: 24px; - display: inline-block; - border-width: 1px; - border-style: solid; - vertical-align: middle; - margin-right: 5px; } -.mindmup-legend-used-toggle { - float: right; - margin: 5px 0; } -.mindmup-legend-item-cont { - cursor: pointer; - margin-top: 6px; } -.mindmup-legend .hotkey_link { - margin: 12px -12px 0; - padding-top: 12px; - border-top: 1px solid #e5e5e5; } -.easy .mindmup-legend .hotkey_link a { - color: rgba(50, 65, 100, 0.5); } -.mindmup-legend__filter_cont { - position: absolute; - right: 12px; } -.mindmup-legend__filter_icon { - color: rgba(50, 65, 100, 0.4); - font-size: 2em; - padding: 5px; } -.mindmup-legend__filter_cancel_icon { - position: absolute; - display: none; - color: #feb0c1; - font-size: 2em; - padding: 0 5px 5px; } -.mindmup-legend__filter_cont:hover .mindmup-legend__filter_cancel_icon { - display: inline; } - -.mapjs-connector { - stroke: #cccccc; } -.mapjs-draw-container { - pointer-events: none; - overflow: visible; } -.mapjs-link-hit { - pointer-events: all; - fill: none; } -.mapjs-exclamation { - right: -.9em; - position: absolute; - top: -.9em; - background-image: url(data:image/png;base64,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); - width: 2em; - height: 2em; - background-size: 2em; - background-repeat: no-repeat no-repeat; } - -.mapjs-node { - border: 1px solid transparent; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - background-color: #e5e5e5; - color: #324164; - padding: 9px 18px; - margin: 0; } -.mapjs-node.activated { - background-color: #cccccc; } -.mapjs-node.activated, .mapjs-node.selected, .mapjs-node.droppable { - -webkit-box-shadow: 5px 5px 5px 0 gray; - -moz-box-shadow: 5px 5px 5px 0 gray; - box-shadow: 5px 5px 5px 0 gray; - margin-left: -2px; } -.mapjs-node.activated { - border: 1px solid transparent; } -.mapjs-node.droppable { - border-color: #fb5619; } -.mapjs-node span { - word-wrap: break-word; } -.mapjs-collapsor { - position: absolute; - left: auto; - top: 50%; - right: -14px; - margin-top: -12px; - background-color: #ffffff; - color: #fe7d99; - line-height: 1; - font-size: 24px; } -.mapjs-collapsor:before { - content: ""; } -.collapsed .mapjs-collapsor { - color: #01c8a9; } -.collapsed .mapjs-collapsor:before { - content: ""; } -.mindmup-node-left .mapjs-collapsor { - right: auto; - left: -14px; } -.mapjs-node:hover .mapjs-collapsor { - font-size: 30px; - margin-top: -14px; - right: -17px; } -.mindmup-node-left:hover .mapjs-collapsor { - left: -17px; - right: auto; } - -.mindmup-node-filtered { - opacity: 0.2; } -.mindmup-node-icon { - height: 20px; - display: inline-block; - margin-right: 3px; - vertical-align: middle; } -.mindmup-node-icon-progress { - width: 4px; - background-color: #d9d9d9; - margin: 0 12px; } -.mindmup-node-icon-progress-bar { - background-color: #01c8a9; - position: relative; } -.mindmup-node-icon-milestone-shell { - border: 1px solid #d9d9d9; - vertical-align: middle; - display: inline-block; - margin: 1px; } -.mindmup-node-icon-status { - font-weight: normal; - opacity: .5; - font-size: 0.89em; } -.mindmup-node-icons { - position: absolute; - left: 0; - top: -10px; - white-space: nowrap; } -.mindmup-node-icons--with_icons .mindmup-node-icons { - top: -18px; } -.mindmup-node-filtered { - opacity: 0.2; } -.mindmup-node-avatar { - position: absolute; - top: 50%; - margin-top: -11px; } -.mindmup-node-left .mindmup-node-avatar { - left: auto; - right: -31px; } - -.mindmup-scheme-project { - background-color: #0080e6; - color: #ffffff; } -.mindmup-scheme-project.activated { - background-color: #0064b3; } - -.scheme-by-priority .scheme-priority-1 { - background-color: #fad1da; } -.scheme-by-priority .scheme-priority-1.activated { - background-color: #f5a3b5; } -.scheme-by-priority .scheme-priority-2 { - background-color: #f5a3b5; } -.scheme-by-priority .scheme-priority-2.activated { - background-color: #f07590; } -.scheme-by-priority .scheme-priority-3 { - background-color: #d1faf4; } -.scheme-by-priority .scheme-priority-3.activated { - background-color: #a3f5e8; } -.scheme-by-priority .scheme-priority-4 { - background-color: #a3f5e8; } -.scheme-by-priority .scheme-priority-4.activated { - background-color: #75f0dd; } -.scheme-by-priority .scheme-priority-5 { - background-color: #d1e8fa; } -.scheme-by-priority .scheme-priority-5.activated { - background-color: #a3d1f5; } -.scheme-by-priority .scheme-priority-6 { - background-color: #a3d1f5; } -.scheme-by-priority .scheme-priority-6.activated { - background-color: #75b9f0; } -.scheme-by-priority .scheme-priority-7 { - background-color: #fadcd1; } -.scheme-by-priority .scheme-priority-7.activated { - background-color: #f5b9a3; } -.scheme-by-priority .scheme-priority-8 { - background-color: #f5b9a3; } -.scheme-by-priority .scheme-priority-8.activated { - background-color: #f09675; } -.scheme-by-priority .scheme-priority-9 { - background-color: #add7f3; } -.scheme-by-priority .scheme-priority-9.activated { - background-color: #81c1ec; } -.scheme-by-priority .scheme-priority-10 { - background-color: #e5e5e5; } -.scheme-by-priority .scheme-priority-10.activated { - background-color: #cccccc; } -.scheme-by-priority .scheme-priority-11 { - background-color: #fcc; } -.scheme-by-priority .scheme-priority-11.activated { - background-color: #ff9999; } -.scheme-by-priority .scheme-priority-12 { - background-color: #ffb4b4; } -.scheme-by-priority .scheme-priority-12.activated { - background-color: #ff8181; } -.scheme-by-status .scheme-status-1 { - background-color: #f9f6a8; } -.scheme-by-status .scheme-status-1.activated { - background-color: #f6f178; } -.scheme-by-status .scheme-status-2 { - background-color: #fbe3bd; } -.scheme-by-status .scheme-status-2.activated { - background-color: #f8cf8d; } -.scheme-by-status .scheme-status-3 { - background-color: #f3cccf; } -.scheme-by-status .scheme-status-3.activated { - background-color: #e9a3a8; } -.scheme-by-status .scheme-status-4 { - background-color: #eabdec; } -.scheme-by-status .scheme-status-4.activated { - background-color: #dd95e1; } -.scheme-by-status .scheme-status-5 { - background-color: #d0b8ec; } -.scheme-by-status .scheme-status-5.activated { - background-color: #b590e1; } -.scheme-by-status .scheme-status-6 { - background-color: #c9c9f9; } -.scheme-by-status .scheme-status-6.activated { - background-color: #9b9bf4; } -.scheme-by-status .scheme-status-7 { - background-color: #c9dcff; } -.scheme-by-status .scheme-status-7.activated { - background-color: #96bbff; } -.scheme-by-status .scheme-status-8 { - background-color: #d2f4f0; } -.scheme-by-status .scheme-status-8.activated { - background-color: #a9eae2; } -.scheme-by-status .scheme-status-9 { - background-color: #d2ecc9; } -.scheme-by-status .scheme-status-9.activated { - background-color: #b3dfa3; } -.scheme-by-status .scheme-status-10 { - background-color: #e1ee9e; } -.scheme-by-status .scheme-status-10.activated { - background-color: #d4e673; } -.scheme-by-status .scheme-status-11 { - background-color: #dadace; } -.scheme-by-status .scheme-status-11.activated { - background-color: #c4c4b1; } -.scheme-by-status .scheme-status-12 { - background-color: #dbd1c7; } -.scheme-by-status .scheme-status-12.activated { - background-color: #c7b8a8; } -.scheme-by-tracker .scheme-tracker-1 { - background-color: #f9f6a8; } -.scheme-by-tracker .scheme-tracker-1.activated { - background-color: #f6f178; } -.scheme-by-tracker .scheme-tracker-2 { - background-color: #fbe3bd; } -.scheme-by-tracker .scheme-tracker-2.activated { - background-color: #f8cf8d; } -.scheme-by-tracker .scheme-tracker-3 { - background-color: #f3cccf; } -.scheme-by-tracker .scheme-tracker-3.activated { - background-color: #e9a3a8; } -.scheme-by-tracker .scheme-tracker-4 { - background-color: #eabdec; } -.scheme-by-tracker .scheme-tracker-4.activated { - background-color: #dd95e1; } -.scheme-by-tracker .scheme-tracker-5 { - background-color: #d0b8ec; } -.scheme-by-tracker .scheme-tracker-5.activated { - background-color: #b590e1; } -.scheme-by-tracker .scheme-tracker-6 { - background-color: #c9c9f9; } -.scheme-by-tracker .scheme-tracker-6.activated { - background-color: #9b9bf4; } -.scheme-by-tracker .scheme-tracker-7 { - background-color: #c9dcff; } -.scheme-by-tracker .scheme-tracker-7.activated { - background-color: #96bbff; } -.scheme-by-tracker .scheme-tracker-8 { - background-color: #d2f4f0; } -.scheme-by-tracker .scheme-tracker-8.activated { - background-color: #a9eae2; } -.scheme-by-tracker .scheme-tracker-9 { - background-color: #d2ecc9; } -.scheme-by-tracker .scheme-tracker-9.activated { - background-color: #b3dfa3; } -.scheme-by-tracker .scheme-tracker-10 { - background-color: #e1ee9e; } -.scheme-by-tracker .scheme-tracker-10.activated { - background-color: #d4e673; } -.scheme-by-tracker .scheme-tracker-11 { - background-color: #dadace; } -.scheme-by-tracker .scheme-tracker-11.activated { - background-color: #c4c4b1; } -.scheme-by-tracker .scheme-tracker-12 { - background-color: #dbd1c7; } -.scheme-by-tracker .scheme-tracker-12.activated { - background-color: #c7b8a8; } -.scheme-by-assignee .scheme-assignee-1 { - background-color: #f9f6a8; } -.scheme-by-assignee .scheme-assignee-1.activated { - background-color: #f6f178; } -.scheme-by-assignee .scheme-assignee-2 { - background-color: #fbe3bd; } -.scheme-by-assignee .scheme-assignee-2.activated { - background-color: #f8cf8d; } -.scheme-by-assignee .scheme-assignee-3 { - background-color: #f3cccf; } -.scheme-by-assignee .scheme-assignee-3.activated { - background-color: #e9a3a8; } -.scheme-by-assignee .scheme-assignee-4 { - background-color: #eabdec; } -.scheme-by-assignee .scheme-assignee-4.activated { - background-color: #dd95e1; } -.scheme-by-assignee .scheme-assignee-5 { - background-color: #d0b8ec; } -.scheme-by-assignee .scheme-assignee-5.activated { - background-color: #b590e1; } -.scheme-by-assignee .scheme-assignee-6 { - background-color: #c9c9f9; } -.scheme-by-assignee .scheme-assignee-6.activated { - background-color: #9b9bf4; } -.scheme-by-assignee .scheme-assignee-7 { - background-color: #c9dcff; } -.scheme-by-assignee .scheme-assignee-7.activated { - background-color: #96bbff; } -.scheme-by-assignee .scheme-assignee-8 { - background-color: #d2f4f0; } -.scheme-by-assignee .scheme-assignee-8.activated { - background-color: #a9eae2; } -.scheme-by-assignee .scheme-assignee-9 { - background-color: #d2ecc9; } -.scheme-by-assignee .scheme-assignee-9.activated { - background-color: #b3dfa3; } -.scheme-by-assignee .scheme-assignee-10 { - background-color: #e1ee9e; } -.scheme-by-assignee .scheme-assignee-10.activated { - background-color: #d4e673; } -.scheme-by-assignee .scheme-assignee-11 { - background-color: #dadace; } -.scheme-by-assignee .scheme-assignee-11.activated { - background-color: #c4c4b1; } -.scheme-by-assignee .scheme-assignee-12 { - background-color: #dbd1c7; } -.scheme-by-assignee .scheme-assignee-12.activated { - background-color: #c7b8a8; } -.scheme-by-milestone .scheme-milestone-1 { - background-color: #f9f6a8; } -.scheme-by-milestone .scheme-milestone-1.activated { - background-color: #f6f178; } -.scheme-by-milestone .scheme-milestone-2 { - background-color: #fbe3bd; } -.scheme-by-milestone .scheme-milestone-2.activated { - background-color: #f8cf8d; } -.scheme-by-milestone .scheme-milestone-3 { - background-color: #f3cccf; } -.scheme-by-milestone .scheme-milestone-3.activated { - background-color: #e9a3a8; } -.scheme-by-milestone .scheme-milestone-4 { - background-color: #eabdec; } -.scheme-by-milestone .scheme-milestone-4.activated { - background-color: #dd95e1; } -.scheme-by-milestone .scheme-milestone-5 { - background-color: #d0b8ec; } -.scheme-by-milestone .scheme-milestone-5.activated { - background-color: #b590e1; } -.scheme-by-milestone .scheme-milestone-6 { - background-color: #c9c9f9; } -.scheme-by-milestone .scheme-milestone-6.activated { - background-color: #9b9bf4; } -.scheme-by-milestone .scheme-milestone-7 { - background-color: #c9dcff; } -.scheme-by-milestone .scheme-milestone-7.activated { - background-color: #96bbff; } -.scheme-by-milestone .scheme-milestone-8 { - background-color: #d2f4f0; } -.scheme-by-milestone .scheme-milestone-8.activated { - background-color: #a9eae2; } -.scheme-by-milestone .scheme-milestone-9 { - background-color: #d2ecc9; } -.scheme-by-milestone .scheme-milestone-9.activated { - background-color: #b3dfa3; } -.scheme-by-milestone .scheme-milestone-10 { - background-color: #e1ee9e; } -.scheme-by-milestone .scheme-milestone-10.activated { - background-color: #d4e673; } -.scheme-by-milestone .scheme-milestone-11 { - background-color: #dadace; } -.scheme-by-milestone .scheme-milestone-11.activated { - background-color: #c4c4b1; } -.scheme-by-milestone .scheme-milestone-12 { - background-color: #dbd1c7; } -.scheme-by-milestone .scheme-milestone-12.activated { - background-color: #c7b8a8; } -.scheme-by-progress .scheme-progress-1 { - background-color: #e5e5e5; } -.scheme-by-progress .scheme-progress-1.activated { - background-color: #cccccc; } -.scheme-by-progress .scheme-progress-2 { - background-color: #e6faf6; } -.scheme-by-progress .scheme-progress-2.activated { - background-color: #bcf2e7; } -.scheme-by-progress .scheme-progress-3 { - background-color: #c0f1ea; } -.scheme-by-progress .scheme-progress-3.activated { - background-color: #96e8dc; } -.scheme-by-progress .scheme-progress-4 { - background-color: #8de6d8; } -.scheme-by-progress .scheme-progress-4.activated { - background-color: #63ddca; } -.scheme-by-progress .scheme-progress-5 { - background-color: #4dd9c3; } -.scheme-by-progress .scheme-progress-5.activated { - background-color: #2bc8b0; } -.scheme-by-progress .scheme-progress-6 { - background-color: #01c8a9; } -.scheme-by-progress .scheme-progress-6.activated { - background-color: #01957e; } - -@media print { - .gravatar { - max-width: 100%; - height: auto; - -webkit-border-radius: 5000px; - -moz-border-radius: 5000px; - border-radius: 5000px; } } -.mindmup-print-area .mapjs-collapsor { - display: none; } -.mindmup-print-area .mindmup-node-add-button { - display: none; } -.mindmup-print-strip { - position: relative; - /*border: 1px solid red;*/ - border: 1px solid #cecece; - overflow: hidden; - white-space: nowrap; - break-inside: avoid; - margin: 10px 0; - margin-left: -1px; - display: inline-block; - background-color: #ffffff; - border-left: 0; } - -.mindmup-sidebar { - display: block; } -.mindmup-sidebar .mindmup-sidebar__empty-title, .mindmup-sidebar .mindmup-sidebar__coworkers--no_id { - background-color: #ffffaa; - border: 1px solid #bfb23f; - padding: 5px; - text-align: center; } -.mindmup-sidebar__empty-title { - display: block; - margin-top: 10px; - box-sizing: border-box; } -.mindmup-sidebar__resize { - position: fixed; - width: 10px; - text-align: center; - cursor: col-resize; - display: block; - z-index: 101; - background-color: silver; - box-sizing: border-box; - padding-top: 8px; - font-size: 20px; - border-radius: 5px; } -.mindmup-sidebar__root { - position: absolute; - right: 0; - bottom: 0; - z-index: 5; } -.mindmup-sidebar__toggler { - position: absolute; - top: 1px; - right: 1px; - padding: 0; - z-index: 1; } -.mindmup-sidebar__toggler.active { - background: #d94838; - color: #fff; } -.mindmup-sidebar__container { - border-left: 1px solid #dfccaf; - background: #f9f9f9; - padding-left: 8px; - overflow-y: scroll; } -.mindmup-sidebar__long-text { - position: relative; - max-height: 100px; - overflow: hidden; - min-height: 30px; - border: 1px solid #dfccaf; } -.mindmup-sidebar__long-text__curtain { - height: 100%; - position: absolute; - width: 100%; - top: 0; - left: 1px; - border-bottom: 1px solid #dfccaf; - background: -moz-linear-gradient(top, rgba(255, 255, 255, 0.01) 0%, rgba(255, 255, 255, 0.01) 65%, white 100%); - background: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.01) 0%, rgba(255, 255, 255, 0.01) 65%, white 100%); - background: linear-gradient(to bottom, rgba(255, 255, 255, 0.01) 0%, rgba(255, 255, 255, 0.01) 65%, white 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#03ffffff', endColorstr='#ffffff', GradientType=0); } -.mindmup-sidebar__long-text__content { - padding: 3px; - min-height: 25px; - width: 100%; - box-sizing: border-box; - max-height: 100px; } -.mindmup-sidebar__attribute { - display: block; - overflow: hidden; - margin-top: 3px; - position: relative; } -.mindmup-sidebar__attribute .invalid { - border: 1px solid red; - color: red; } -.mindmup-sidebar__attribute-form-field { - max-width: 200px !important; - padding: 1px 1px 1px 5px !important; - line-height: normal; - float: right; - overflow-x: hidden !important; } -.mindmup-sidebar__attribute-value { - max-width: 197px !important; - width: 100%; - padding: 1px 1px 1px 5px !important; - line-height: normal; - float: right; - margin-top: 6px; } -.mindmup-sidebar__attribute-label-disabled { - color: rgba(0, 0, 0, 0.38); } -.mindmup-sidebar__attribute-label { - display: inline-block; - width: 90px; - margin-top: 5px; } -.mindmup-sidebar__attribute .spaceholder { - display: none; } -.mindmup-sidebar__attribute .top-section { - margin-bottom: 0; } -.mindmup-sidebar__attribute-full-screen-icon { - display: block; - float: right; - cursor: pointer; - margin-top: 6px; - position: absolute; - top: 0; - right: 0; } -.mindmup-sidebar__attribute .icon-edit { - position: absolute; - top: 0; - right: 0; - cursor: pointer; } -.mindmup-sidebar__add-comment-button { - margin: 3px 0 12px 0; } -.mindmup-sidebar__add-comment-button a { - width: 100%; - box-sizing: border-box; } -.mindmup-sidebar__journal-avatar-container { - margin-top: 6px; } -.mindmup-sidebar__journal-header { - margin-top: -6px; } -.mindmup-sidebar__journal-notes { - margin-top: 0; - background: #ffffff; - border: 1px solid #dfccaf; - margin-bottom: 0 !important; - box-sizing: border-box; - padding: 3px; } -.mindmup-sidebar__journal-notes p:last-child { - margin-bottom: 0; } -.mindmup-sidebar__journal-full-screen-icon { - display: block; - float: right; - cursor: pointer; - margin-top: 25px; - position: absolute; - top: 0; - right: 20px; } -.mindmup-sidebar__journal-timestamp { - font-weight: bold; - font-size: smaller; } -.mindmup-sidebar__tab { - margin: 6px 6px; } -.mindmup-sidebar__tab header { - min-height: 36px !important; - padding: 0 12px 8px !important; } -.mindmup-sidebar__tab header.open { - min-height: 44px; } -.mindmup-sidebar__tab header:not(:hover) { - color: inherit !important; - background-color: unset !important; } -.mindmup-sidebar__input__name { - color: black; - font-family: "Open Sans", sans-serif; - width: 100% !important; } -.mindmup-sidebar__input__name .input { - max-width: none; - text-align: center; - font-weight: bold; - opacity: 1; - color: black !important; } -.mindmup-sidebar__input__name .bottom-section { - display: none; } -.mindmup-sidebar .gravatar { - max-height: 32px; - max-width: 32px; } -.mindmup-sidebar .content-wrapper { - margin: 0 12px 8px !important; } -.mindmup-sidebar .material-tab { - padding: 0 !important; } diff --git a/plugins/easy_mindmup/assets/stylesheets/mindmup.css b/plugins/easy_mindmup/assets/stylesheets/mindmup.css deleted file mode 100644 index e4fd88c..0000000 --- a/plugins/easy_mindmup/assets/stylesheets/mindmup.css +++ /dev/null @@ -1,1434 +0,0 @@ -body, html { - height: 100%; - /*overflow: hidden*/ -} - -#container, #floating-toolbar, #topbar, .dropdown-menu, .floating { - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none -} - -#toolbarSocial { - margin-right: 20px -} - -.logo { - background-image: url(//d1g6a398qq2djm.cloudfront.net/img/logo_32.png); - background-position: left center; - background-repeat: no-repeat; - width: 0; - height: 40px; - padding-left: 40px; - padding-top: 5px; - padding-bottom: 5px -} - -#logo-img { - background-image: url(//d1g6a398qq2djm.cloudfront.net/img/logo_32.png); - background-position: left center; - background-repeat: no-repeat; - width: 40px; - height: 40px; - padding: 0; - margin-left: 50px -} - -@media (max-width: 979px) { - .navbar-fixed-bottom, .navbar-fixed-top { - position: fixed; - margin-bottom: 0 - } -} - -@media (max-width: 767px) { - .navbar { - padding-left: 20px; - padding-right: 20px - } - - body { - padding: 0 - } -} - -.span-toolbar { - width: 120px; - cursor: move -} - -@media (max-width: 1024px) { - .hidden-tablet-landscape { - display: none !important - } -} - -@media (max-width: 768px) { - .hidden-tablet-portrait { - display: none !important - } -} - -@media (max-width: 320px) { - .hidden-phone-portrait { - display: none !important - } -} - -@media (max-height: 320px) { - .form-horizontal .control-group { - margin-bottom: 5px - } - - .hidden-phone-landscape { - display: none - } -} - -@media (max-width: 400px) { - .map-changed .changed-phone-hidden { - display: none !important - } -} - -@media (max-width: 1024px) { - .map-changed .changed-tablet-hidden { - display: none !important - } -} - -@media screen { - #topbar .nav > li > a { - font-weight: 700 - } -} - -#floating-toolbar { - position: absolute; - top: 100px; - right: 10px; - z-index: 999; - border: 1px solid #08c; - border-radius: 9px -} - -.android .visible-touch, .ios .visible-touch { - display: block !important -} - -.android .hidden-touch, .ios .hidden-touch { - display: none !important -} - -div.topbar-color-picker { - width: 127px -} - -.topbar-color-picker .colorPicker-swatch { - width: 15px; - height: 15px -} - -.android .colorPicker-swatch, .ios .colorPicker-swatch { - width: 30px; - height: 30px -} - -.android .colorPicker-palette, .ios .colorPicker-palette { - width: 217px; - top: 55px; - left: 5px -} - -.map-changed .hidden-map-changed, .map-unchanged .visible-map-changed { - display: none !important -} - -#toolbarEdit .btn-group { - margin-left: 0 -} - -#toolbarEdit button { - margin-top: 5px; - width: 40px; - height: 32px -} - -#toolbarEdit button.two { - width: 80px -} - -#toolbarEdit button.three { - width: 120px -} - -.ideaInput { - position: absolute; - z-index: 999; - background-color: #5FBF5F; - color: #FFF; - font-family: Helvetica, "Arial Unicode MS", sans-serif; - font-weight: 700; - font-size: 13px; - line-height: 13px; - text-align: center; - padding: 0 -} - -.center { - text-align: center -} - -.ideaInput:focus { - outline: 0 -} - -.menulink { - margin-right: 20px; - margin-top: 10px -} - -#gplus-share { - border: 0; - height: 16px; - background-image: url(//ssl.gstatic.com/images/icons/gplus-16.png); - background-position: left center; - background-repeat: no-repeat; - margin-left: 6px; - margin-right: 20px; - margin-top: 2px; - padding-right: 0 -} - -#modalDownload .modal-body { - text-align: center -} - -#modalDownload .modal-body p { - text-align: left -} - -#modalDownload img { - max-height: 300px; - max-width: 450px -} - -.share { - width: 32px; - height: 32px; - display: inline-block; - margin: 5px; - cursor: pointer -} - -.btn-inline { - border: 0; - background: 0 0; - margin-left: 5px; - margin-right: 5px -} - -.colorPicker_hexWrap { - display: none -} - -div.colorPicker-picker { - display: inline; - float: left; - background: 0 0 -} - -#modalImport input[type=file] { - opacity: 0; - position: absolute; - width: 0; - height: 0 -} - -.repo { - background-repeat: no-repeat; - background-position: left center; - background-image: url(//d1g6a398qq2djm.cloudfront.net/img/logo_16.png) -} - -.repo-a { - background-image: url(//d1g6a398qq2djm.cloudfront.net/img/logo_16.png) -} - -.repo-b { - background-image: url(//d1g6a398qq2djm.cloudfront.net/img/logo_gold_16.png) -} - -.repo-p { - background-image: url(//d1g6a398qq2djm.cloudfront.net/img/logo_gold_private_16.png) -} - -.repo-g { - background-image: url(//d1g6a398qq2djm.cloudfront.net/img/google_drive.png) -} - -.repo-menuitem { - background-position: 14px center; - padding-left: 35px !important -} - -a.repo { - margin-left: 5px -} - -span.repo-a, span.repo-b, span.repo-g, span.repo-p { - padding-left: 16px -} - -.dropdown-menu li a { - cursor: pointer -} - -.visible-collapsed-toolbar { - display: none -} - -.collapsed-toolbar .visible-collapsed-toolbar { - display: block !important -} - -.collapsed-toolbar span.visible-collapsed-toolbar { - display: inline !important -} - -.collapsed-toolbar .hidden-collapsed-toolbar { - display: none !important -} - -.visible-row-split { - display: none -} - -.row-split .visible-row-split { - display: block !important -} - -.row-split span.visible-row-split { - display: inline !important -} - -.row-split .hidden-row-split { - display: none !important -} - -.visible-column-split { - display: none -} - -.column-split .visible-column-split { - display: block !important -} - -.column-split span.visible-column-split { - display: inline !important -} - -.column-split .hidden-column-split { - display: none !important -} - -#listBookmarks a .btn-inline { - margin-left: 15px -} - -.gecko #listBookmarks a .btn-inline { - position: relative; - top: -17px; - left: 15px -} - -.hidden-topbar #topbar .navbar-inner { - visibility: hidden -} - -.column-split.hidden-topbar #topbar .navbar-inner, .hidden-topbar #topbar:hover .navbar-inner { - visibility: visible -} - -.topbar-autohide { - display: inline -} - -.hidden-topbar .topbar-autohide, span.topbar-fixed { - display: none -} - -.hidden-topbar span.topbar-fixed { - display: inline -} - -body.ipad { - margin: 1px -} - -body.ios-wkwebview { - margin: 0; - padding: 0; - width: 100% -} - -.image-render-visible { - display: none -} - -.image-render .image-render-visible { - display: block -} - -.image-render .image-render-hidden, .offline-disabled-hidden { - display: none -} - -body.offline-enabled .offline-disabled-hidden { - display: block -} - -#attachEditArea { - overflow: scroll; - outline: 0; - border: 1px solid #ccc; - padding: 4px; - margin: 10px; - box-sizing: content-box; - -webkit-box-shadow: rgba(0, 0, 0, .0745098) 0 1px 1px 0 inset; - box-shadow: rgba(0, 0, 0, .0745098) 0 1px 1px 0 inset; - border-radius: 3px; - background-color: #fff; - display: block; - clear: both -} - -#modalAttachmentEditor .editor-topbar { - padding-right: 10px; - padding-left: 10px; - display: none -} - -#modalAttachmentEditor.mm-editable .editor-topbar { - display: block -} - -#modalAttachmentEditor .viewer-topbar { - margin-top: 5px; - margin-bottom: 5px; - padding-right: 10px; - padding-left: 10px; - height: 30px -} - -#modalAttachmentEditor.mm-editable .viewer-topbar { - display: none -} - -#modalAttachmentEditor button.close { - margin-left: 5px -} - -#modalAttachmentEditor .editor-topbar > .btn-toolbar { - display: inline-block; - background-color: #eee; - width: 100% -} - -#modalAttachmentEditor { - position: absolute; - height: 80%; - width: 80%; - left: 10%; - top: 10%; - padding: 5px; - z-index: 9999; - background-color: #eee; - -moz-border-radius: 6px; - border-radius: 6px; - margin: 0 -} - -@media (max-width: 1200px) { - #modalAttachmentEditor { - width: 90%; - left: 5%; - top: 5% - } -} - -#modalAttachmentEditor .dropdown-menu .btn-toolbar { - display: block -} - -#modalAttachmentEditor .dropdown-menu .btn-toolbar .btn-group { - margin-top: 5px; - margin-left: 5px; - margin-right: 5px -} - -.android #modalAttachmentEditor .btn-toolbar, .ios #modalAttachmentEditor .btn-toolbar { - margin-top: 5px; - margin-bottom: 5px; - padding-bottom: 10px -} - -.android #modalAttachmentEditor, .ios #modalAttachmentEditor { - top: 0; - height: 60% -} - -@media (max-height: 768px) { - .android #modalAttachmentEditor, .ios #modalAttachmentEditor { - height: 37% - } -} - -.non-group .btn { - margin-left: 5px -} - -#linkEditWidget { - display: none; - z-index: 999; - position: absolute; - padding: 10px -} - -.alert a { - text-decoration: underline; - cursor: pointer -} - -.alert a.btn { - text-decoration: none -} - -input.noglow { - outline: 0; - border: none !important; - box-shadow: none !important; - cursor: pointer -} - -.visible-map-source-a, .visible-map-source-b, .visible-map-source-g, .visible-map-source-n, .visible-map-source-p { - display: none -} - -.map-source-a .visible-map-source-a, .map-source-b .visible-map-source-b, .map-source-g .visible-map-source-g, .map-source-n .visible-map-source-n, .map-source-p .visible-map-source-p { - display: inherit -} - -@media (max-width: 1200px) { - .hidden-narrow-screen { - display: none - } -} - -@media (max-width: 1600px) { - #optionalPane .hidden-narrow-screen { - display: none - } -} - -.btn-xlarge { - padding: 18px 28px; - font-size: 40px; - line-height: normal; - -webkit-border-radius: 8px; - -moz-border-radius: 8px; - border-radius: 8px; - width: 250px; - height: 180px; - margin-left: 10px; - margin-bottom: 10px -} - -@media (max-height: 320px) { - .btn-xlarge { - padding: 9px 14px; - font-size: 20px; - line-height: normal; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - width: 230px; - height: 70px; - margin-left: 5px; - margin-bottom: 5px - } -} - -@media (max-width: 320px) { - .btn-xlarge { - padding: 9px 14px; - font-size: 20px; - line-height: normal; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - width: 230px; - height: 70px; - margin-left: 5px; - margin-bottom: 5px - } - - #mainMenu > li > a { - padding-left: 0; - padding-right: 15px - } - - #logo-img { - margin: 0; - padding-left: 5px; - padding-right: 0 - } -} - -@media (min-height: 640px) { - #modalKeyActions .modal-body { - min-height: 400px - } -} - -#modalKeyActions .item a span { - padding-right: 10px -} - -#modalKeyActions a { - cursor: pointer; - color: #000 -} - -#modalKeyActions div.item > a { - text-decoration: underline -} - -.social { - display: inline-block !important; - padding-left: 2px !important; - padding-right: 2px !important; - margin-right: 2px !important; - cursor: pointer -} - -#modalGoldLicense textarea { - width: 95%; - height: 200px -} - -#modalIconEdit .file-drop-zone { - width: 150px; - height: 150px; - border: 1px dashed #000; - color: gray; - font-size: 7px; - text-align: center -} - -#modalIconEdit .file-drop-zone img { - max-width: 150px; - max-height: 150px -} - -#modalIconEdit { - z-index: 9999 -} - -.btn .export { - max-width: 24px -} - -.btn .landscape { - transform: rotate(90deg); - -moz-transform: rotate(90deg); - -webkit-transform: rotate(90deg) -} - -#modalPDFExport form { - margin-top: 20px -} - -.alert-error input { - background: 0 0; - margin: 0 0 2px; - color: #b94a48; - border: none !important; - outline: 0; - box-shadow: none !important; - width: 100%; - cursor: pointer -} - -body .modal.huge { - width: 90%; - height: 80%; - left: 5%; - margin-left: auto; - margin-right: auto -} - -#measuresSheet table { - background-color: #fff; - border: 1px solid #d4d4d4 -} - -#measuresSheet td { - text-align: right; - width: 20% -} - -#measuresSheet th + th { - text-align: right -} - -#measuresSheet table thead tr th { - border-bottom: 3px gray solid !important -} - -#measuresSheet table tfoot tr th { - border-top: 3px gray solid !important -} - -#measuresSheet table tbody th { - width: 30% -} - -#measuresSheet form { - margin: 0 !important -} - -#measuresSheet td:focus { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #7ab5d3; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #7ab5d3; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #7ab5d3; - outline: #5b9dd9 auto -} - -.measures-editor.error { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px red !important; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px red !important; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px red !important; - outline: red auto thin !important -} - -#measuresSheet .modal-footer a { - margin-right: 20px; - margin-left: 20px; - line-height: 30px -} - -#optionalPane .input-append.navbar-form button { - margin-top: 5px !important -} - -#measuresSheet { - margin: 5px; - border-left: 1px; - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none -} - -.table-container { - margin-right: 5px -} - -.column-split .table-container { - margin-bottom: 45px -} - -.show-active { - display: none -} - -.mm-active .show-active { - display: initial -} - -.black { - color: #000 !important -} - -.activated-scene { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #7ab5d3; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #7ab5d3; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #7ab5d3; - outline: #5b9dd9 auto -} - -#storyboard { - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none -} - -.storyboard-container { - padding-left: 10px; - padding-right: 10px -} - -.storyboard-scene { - display: inline-block; - max-height: 120px; - max-width: 160px; - min-height: 120px; - min-width: 160px; - overflow: hidden; - background-color: #fff; - border: 1px solid silver; - border-radius: 4px; - color: #000; - margin: 10px; - text-align: center; - cursor: move -} - -.storyboard-scene-title { - display: table-cell; - vertical-align: middle; - white-space: pre-wrap; - font-weight: 700 -} - -.drag-shadow { - opacity: .5; - box-shadow: none; - outline: 0; - cursor: move; - z-index: 10; - position: relative -} - -.potential-drop-left { - margin-left: 0; - margin-right: 20px -} - -.potential-drop-right { - margin-left: 20px; - margin-right: 0 -} - -#splittable { - width: 100%; - height: calc(100% - 41px); - margin-top: 41px; - -webkit-tap-highlight-color: transparent -} - -.hidden-topbar:not(.column-split) > #splittable { - height: 100%; - margin-top: 0 -} - -.ios-wkwebview > #splittable { - width: 100%; - height: calc(100%); - margin-top: 0 -} - -.ios-wkwebview { - -webkit-tap-highlight-color: transparent -} - -.splittable-optional .navbar { - width: 100%; - margin-bottom: 0 -} - -.splittable-optional .content { - overflow: scroll; - height: calc(100% - 41px) -} - -.ios-wkwebview .splittable-optional .content { - overflow: scroll; - height: 100% -} - -.splittable-primary { - outline: #d4d4d4 solid 1px -} - -.splittable-optional { - display: none; - outline: #d4d4d4 solid 1px -} - -.column-split .splittable-primary { - float: left; - height: 100%; - overflow: scroll; - width: 50% -} - -.column-split .splittable-optional { - float: right; - height: 100%; - width: 50%; - display: block -} - -.splittable-primary { - height: 100%; - width: 100% -} - -.row-split .splittable-primary { - height: 50%; - overflow: scroll; - width: 100% -} - -.row-split .splittable-optional { - height: 50%; - width: 100%; - display: block -} - -#optionalPane { - background-color: #f5f5f5; - -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, .1); - -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, .1); - box-shadow: 0 1px 10px rgba(0, 0, 0, .1) -} - -.splittable-optional .content-container { - height: 100% -} - -.pull-middle { - display: table; - height: 100% -} - -.pull-middle > div { - display: table-cell; - vertical-align: middle; - padding-left: 20%; - padding-right: 20% -} - -.ios-menu-toggle-container { - position: absolute; - height: 90px; - width: 75px; - top: calc(100% - 90px); - left: 0; - overflow: hidden; - z-index: 999 -} - -.ios-corner-icon-container { - position: absolute; - height: 100px; - width: 75px; - top: 5; - left: -11px; - border: 1px solid #22AAE0; - background-color: #FFF; - border-radius: 5px; - box-shadow: 2px 2px 1px rgba(104, 104, 104, .8) -} - -.ios-menu-toggle { - position: absolute; - top: 5; - left: 12; - height: 73px; - width: 65px -} - -.ios-toolbar { - position: absolute; - box-shadow: 0 -1px 0 #22AAE0; - background-color: rgba(255, 255, 255, .85); - top: calc(100% - 80px); - left: 65px; - width: calc(100% - 65px); - height: 80px; - z-index: 998; - overflow: scroll -} - -.ios-icon-label { - position: absolute; - font-family: Helvetica, "Arial Unicode MS", sans-serif; - font-size: 8pt; - color: #22AAE0; - font-weight: 400; - text-align: center; - line-height: 1.2; - top: calc(100% - 22px); - width: 50px; - left: 5px; - height: 22px -} - -.ios-toolbar-item { - display: inline-block; - position: relative; - top: 0; - height: 75px; - width: 60px -} - -.ios-toolbar-icon { - position: absolute; - left: 10px; - top: 8px; - height: 40px; - width: 40px -} - -.ios-modal { - z-index: 1090; - position: absolute; - overflow: hidden; - left: 0; - top: 0; - height: 100%; - width: 100%; - background-color: rgba(255, 255, 255, .85) -} - -.ios-modal-close { - position: absolute; - top: 20; - left: calc(100% - 45px); - height: 40px; - width: 40px -} - -.ios-modal-title { - position: absolute; - left: 45px; - top: 30px; - height: 40px; - width: calc(100% - 90px); - text-align: center; - font-family: Helvetica, "Arial Unicode MS", sans-serif; - font-size: 12pt; - color: #22AAE0; - font-weight: 700; - line-height: 1.2 -} - -.ios-modal-content { - z-index: 1095; - position: absolute; - top: 80px; - height: calc(100% - 75px); - overflow-x: hidden; - overflow-y: auto; - background-color: #FFF; - border: 1px solid #22AAE0; - border-radius: 5px; - box-shadow: 2px 2px 1px rgba(104, 104, 104, .8) -} - -.ios-color-selector { - display: inline-block; - box-shadow: 1px 1px 3px rgba(104, 104, 104, .7) -} - -.ios-color-palette { - display: block; - text-align: center -} - -@media (min-width: 601px) { - .ios-modal-content { - left: calc(50% - 300px); - width: 600px - } - - .ios-color-palette { - margin: 20px 50px - } - - .ios-color-selector { - margin: 20px; - height: 80px; - width: 80px; - border-radius: 40px - } -} - -@media (max-width: 600px) { - .ios-modal-content { - left: calc(50% - 150px); - width: 300px - } - - .ios-color-palette { - margin: 10px 20px - } - - .ios-color-selector { - margin: 10px; - height: 40px; - width: 40px; - border-radius: 20px - } -} - -.collaborator-list-container { - max-height: 200px; - overflow-y: scroll; - padding-top: 10px -} - -.collaborator-list-container td { - cursor: pointer -} - -.collaborator-list-container table { - margin-bottom: 0 -} - -.mm-collaborator { - position: absolute; - width: 32px; - height: 32px; - border: 3px solid transparent; - border-radius: 20px; - transform: translate(5px, 5px); - min-width: 30px -} - -.collab-name { - overflow-x: hidden; - max-width: 50px; - white-space: nowrap -} - -.collab-name a { - line-height: 30px -} - -.collab-photo { - width: 30px -} - -.collab-photo img { - width: 30px; - height: 30px; - float: left; - margin-right: 10px; - border: 2px solid transparent; - border-radius: 20px -} - -#floating-collaborators { - position: absolute; - top: 100px; - left: 10px; - z-index: 999; - border: 1px solid #08c; - border-radius: 9px -} - -.visible-collaboration-toolbar { - display: none -} - -.map-source-c.collaboration-toolbar .visible-collaboration-toolbar { - display: initial !important -} - -.collaboration-toolbar .hidden-collaboration-toolbar { - display: none !important -} - -.mm-has-collaborators .hidden-has-collaborators, .visible-has-collaborators { - display: none -} - -.mm-has-collaborators .visible-has-collaborators { - display: block -} - -.visible-collaboration-mute-speech { - display: none -} - -.collaboration-mute-speech .visible-collaboration-mute-speech { - display: initial !important -} - -.collaboration-mute-speech .hidden-collaboration-mute-speech { - display: none !important -} - -.btn-share { - margin-left: 10px; - margin-right: 10px -} - -.mm-icon-gmail { - background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDU1NTUgMzMwOTciPg0KIDxnPg0KICA8cGF0aCBmaWxsPSIjRTc1QTREIiBkPSJNNDE2MDggMjUwYzIwMzAsMCAzNjkxLDE2NjEgMzY5MSwzNjkxbDAgMTA3MCAtNTEyOCAzNjYzIC0xNzQ1OCAxMjAyNiAtMTc0NTggLTEyMTQ4IDAgMjQyOTUgLTEzMTQgMGMtMjAzMCwwIC0zNjkxLC0xNjYxIC0zNjkxLC0zNjkxbDAgLTI1MjE0YzAsLTIwMzAgMTY2MSwtMzY5MSAzNjkxLC0zNjkxbDE4NzcyIDEzOTE4IDE4ODk0IC0xMzkxOHoiLz4NCiAgPHBvbHlnb24gZmlsbD0iI0U3RTRENyIgcG9pbnRzPSI1MjU1LDg1NTIgNTI1NSwzMjg0NyA0MDE3MiwzMjg0NyA0MDE3Miw4Njc0IDIyNzEzLDIwNzAwICIvPg0KICA8cG9seWdvbiBmaWxsPSIjQjhCN0FFIiBwb2ludHM9IjUyNTUsMzI4NDcgMjI3MTMsMjA3MDAgMjI2MzQsMjA2NDQgNTI1NSwzMjU4MCAiLz4NCiAgPHBvbHlnb24gZmlsbD0iI0I3QjZBRCIgcG9pbnRzPSI0MDE3Miw4Njc0IDQwMTgyLDMyODQ3IDIyNzEzLDIwNzAwICIvPg0KICA8cGF0aCBmaWxsPSIjQjIzOTJGIiBkPSJNNDUyOTkgNTAxMWw2IDI0MTQ4Yy04OCwyNjg0IC0xMjUxLDM2NDIgLTUxMjMsMzY4N2wtMTAgLTI0MTczIDUxMjggLTM2NjN6Ii8+DQogIDxwb2x5Z29uIGZpbGw9IiNGN0Y1RUQiIHBvaW50cz0iMzk0MSwyNTAgMjI3MTMsMTQxNjggNDE2MDgsMjUwICIvPg0KIDwvZz4NCjwvc3ZnPg0K); - padding: 15px 9px; - background-position: center center; - background-repeat: no-repeat -} - -.mm-icon-gdrive { - background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWw6c3BhY2U9InByZXNlcnZlIiB3aWR0aD0iNTA5LjA4bW0iIGhlaWdodD0iNDQwLjk3bW0iIHZlcnNpb249IjEuMSIgc3R5bGU9InNoYXBlLXJlbmRlcmluZzpnZW9tZXRyaWNQcmVjaXNpb247IHRleHQtcmVuZGVyaW5nOmdlb21ldHJpY1ByZWNpc2lvbjsgaW1hZ2UtcmVuZGVyaW5nOm9wdGltaXplUXVhbGl0eTsgZmlsbC1ydWxlOmV2ZW5vZGQ7IGNsaXAtcnVsZTpldmVub2RkIg0Kdmlld0JveD0iMCAwIDEzMzE1NiAxMTUzNDEiDQogeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPg0KIDxkZWZzPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgPCFbQ0RBVEFbDQogICAgLmZpbDIge2ZpbGw6IzExQTg2MX0NCiAgICAuZmlsMCB7ZmlsbDojMzc3N0UzfQ0KICAgIC5maWwxIHtmaWxsOiNGRkNGNjN9DQogICBdXT4NCiAgPC9zdHlsZT4NCiA8L2RlZnM+DQogPGcgaWQ9IkxpdmVsbG9feDAwMjBfMSI+DQogIDxtZXRhZGF0YSBpZD0iQ29yZWxDb3JwSURfMENvcmVsLUxheWVyIi8+DQogIDxwb2x5Z29uIGNsYXNzPSJmaWwwIiBwb2ludHM9IjIyMTk0LDExNTM0MSA0NDM4NSw3Njg5NCAxMzMxNTYsNzY4OTQgMTEwOTYzLDExNTM0MSAiLz4NCiAgPHBvbHlnb24gY2xhc3M9ImZpbDEiIHBvaW50cz0iODg3NzIsNzY4OTQgMTMzMTU2LDc2ODk0IDg4NzcyLDAgNDQzODUsMCAiLz4NCiAgPHBvbHlnb24gY2xhc3M9ImZpbDIiIHBvaW50cz0iMCw3Njg5NCAyMjE5NCwxMTUzNDEgNjY1NzgsMzg0NDcgNDQzODUsMCAiLz4NCiA8L2c+DQo8L3N2Zz4=); - padding: 15px 9px; - background-position: center center; - background-repeat: no-repeat; - background-size: 100% 100% -} - -#collaboratorSpeechBubble { - position: absolute; - z-index: 2; - top: 100px; - left: 20px -} - -#collaboratorSpeechBubble img { - width: 60px; - height: 60px; - border-radius: 60px; - border: 2px solid transparent; - box-shadow: 0 5px 10px rgba(0, 0, 0, .2); - cursor: pointer -} - -#collaboratorSpeechBubble img:hover { - box-shadow: 0 5px 10px rgba(0, 0, 0, .5) -} - -.speech-bubble-inner { - max-width: 300px; - max-height: 100px; - min-width: 150px; - overflow: hidden -} - -.speech-bubble-title { - max-width: 300px; - white-space: nowrap; - overflow: hidden -} - -.icon-volume-off { - margin-left: 3px; - margin-right: 5px -} - -.hidden-topbar #mainMenu .dropdown-menu { - margin-top: 0 -} - -.mapjs-node { - margin: 0; - padding: 7px; - border-radius: 10px; - border: 1px solid #777; - /*box-shadow: 5px 5px 5px rgba(204, 204, 204, .8);*/ - z-index: 3; - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - background-color: #E0E0E0; - color: #4F4F4F; - cursor: pointer; - font-family: Helvetica, "Arial Unicode MS", sans-serif; - font-weight: 700; - font-size: 12px -} - -.mapjs-add-link { - cursor: crosshair -} - -.mapjs-add-link .mapjs-node { - cursor: alias -} - -.mapjs-node span { - white-space: pre-wrap; - text-align: center; - line-height: 150%; - display: block; - max-width: 146px; - min-height: 1.5em; - min-width: 1em; - outline: 0; - cursor: pointer -} - -.mapjs-node span[contenteditable=true] { - user-select: text; - -moz-user-select: text; - -webkit-user-select: text; - -ms-user-select: text; - cursor: auto -} - -.mapjs-node.activated { - outline: 0; - border: 3px dotted #2E9AFE; - margin: -2px -} - -.mapjs-node:focus { - outline: 0 -} - -.mapjs-node.selected { - outline: 0; - /*box-shadow: 5px 5px 5px #000;*/ - z-index: 4 -} - -.mapjs-node.dragging { - opacity: .4; - z-index: 5 -} - -/*.mapjs-node.collapsed {*/ - /*box-shadow: 3px 3px 0 #A0A0A0, 4px 4px 0 #333, 6px 6px 0 #707070, 7px 7px 0 #222*/ -/*}*/ - -/*.mapjs-node.collapsed.selected {*/ - /*box-shadow: 4px 4px 0 #A0A0A0, 5px 5px 0 #333, 8px 8px 0 #707070, 9px 9px 0 #222, 12px 12px 5px #000*/ -/*}*/ - -/*.mapjs-node[mapjs-level="1"] {*/ - /*background-color: #22AAE0*/ -/*}*/ - -/*.mapjs-node[mapjs-level="1"].activated {*/ - /*border: 3px dotted #E0E0E0*/ -/*}*/ - -.mapjs-node.droppable { - outline: 0; - border: 3px dashed #EF6F6F; - margin: -2px -} - -.mapjs-node-light { - color: #4F4F4F -} - -.mapjs-node-dark { - color: #EEE -} - -.mapjs-node-white { - color: #000 -} - -.mapjs-label { - left: -.75em; - position: absolute; - bottom: -1em; - opacity: .8; - background-color: #f13333; - padding: 1px 2px; - border: 1px solid #fff; - -webkit-border-radius: 9px; - -moz-border-radius: 9px; - border-radius: 9px; - display: inline-block; - font-size: 10px; - font-weight: 700; - line-height: 14px; - color: #fff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); - white-space: nowrap; - vertical-align: baseline -} - -.mapjs-hyperlink { - right: -.75em; - position: absolute; - bottom: -.75em; - background-image: url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiDQoNCgkgd2lkdGg9IjUxMnB4IiBoZWlnaHQ9IjUxMnB4IiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQoNCjxwYXRoIHN0eWxlPSJmaWxsOmJsYWNrIiBkPSJNMTU2LjIyNiwxOTkuNjc5YzcuNTQxLTcuNTQsMTUuOTAyLTEzLjc1NywyNC43OTQtMTguNjU5YzQ5LjU1Ni0yNy4zMTgsMTEzLjExNy0xMi43ODgsMTQ0Ljk3LDM1LjUxOA0KDQoJbC0zOC41NDcsMzguNTQ3Yy0xMS4wNTktMjUuMjI3LTM4LjUtMzkuNTY1LTY1LjgxMy0zMy40NTZjLTEwLjI4MiwyLjMtMjAuMDU0LDcuNDI3LTI4LjAzOSwxNS40MTNsLTczLjg5OCw3My44OTYNCg0KCWMtMjIuNDMzLDIyLjQzMy0yMi40MzIsNTguOTM2LDAuMDAyLDgxLjM2OWMyMi40MzMsMjIuNDMzLDU4LjkzNSwyMi40MzMsODEuMzY4LDBsMjIuNzgtMjIuNzc5DQoNCgljMjAuNzEsOC4yMTcsNDIuOTM4LDExLjUwOCw2NC44NjIsOS44NjNsLTUwLjI3OCw1MC4yNzhjLTQzLjEwNSw0My4xMDUtMTEyLjk5MSw0My4xMDUtMTU2LjA5NiwwDQoNCgljLTQzLjEwNS00My4xMDQtNDMuMTA2LTExMi45OTEtMC4wMDEtMTU2LjA5NkwxNTYuMjI2LDE5OS42Nzl6IE0yNzMuNTc0LDgyLjMzbC01MC4yNzgsNTAuMjc4DQoNCgljMjEuOTI4LTEuNjQzLDQ0LjE1MiwxLjY0OCw2NC44NjMsOS44NjVsMjIuNzc5LTIyLjc4YzIyLjQzNC0yMi40MzQsNTguOTM2LTIyLjQzNCw4MS4zNywwYzIyLjQzNCwyMi40MzQsMjIuNDM0LDU4LjkzNiwwLDgxLjM3DQoNCglsLTczLjg5Nyw3My44OTVjLTIyLjUwMSwyMi41MDEtNTkuMDYxLDIyLjMxMS04MS4zNjgsMGMtNS4yMDItNS4yMDEtOS42OTQtMTEuNjc4LTEyLjQ4NC0xOC4wNGwtMzguNTQ2LDM4LjU0Ng0KDQoJYzQuMDQ5LDYuMTQyLDguMjYxLDExLjQ1MywxMy42NjYsMTYuODU4YzEzLjk0OSwxMy45NSwzMS42OTgsMjQuMzM5LDUyLjExNywyOS4yNTFjMjYuNDY2LDYuMzcsNTQuODIzLDIuODM5LDc5LjE4NS0xMC41OTINCg0KCWM4Ljg5Mi00LjkwMywxNy4yNTQtMTEuMTE5LDI0Ljc5NC0xOC42NTlsNzMuODk2LTczLjg5NWM0My4xMDUtNDMuMTA1LDQzLjEwNS0xMTIuOTkxLDAuMDAxLTE1Ni4wOTcNCg0KCUMzODYuNTY2LDM5LjIyNSwzMTYuNjgsMzkuMjI1LDI3My41NzQsODIuMzN6Ii8+DQo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjAsLTIwKSIgc3R5bGU9ImZpbGw6IzAwOUFDRCI+DQo8cGF0aCAgZD0iTTE1Ni4yMjYsMTk5LjY3OWM3LjU0MS03LjU0LDE1LjkwMi0xMy43NTcsMjQuNzk0LTE4LjY1OWM0OS41NTYtMjcuMzE4LDExMy4xMTctMTIuNzg4LDE0NC45NywzNS41MTgNCg0KCWwtMzguNTQ3LDM4LjU0N2MtMTEuMDU5LTI1LjIyNy0zOC41LTM5LjU2NS02NS44MTMtMzMuNDU2Yy0xMC4yODIsMi4zLTIwLjA1NCw3LjQyNy0yOC4wMzksMTUuNDEzbC03My44OTgsNzMuODk2DQoNCgljLTIyLjQzMywyMi40MzMtMjIuNDMyLDU4LjkzNiwwLjAwMiw4MS4zNjljMjIuNDMzLDIyLjQzMyw1OC45MzUsMjIuNDMzLDgxLjM2OCwwbDIyLjc4LTIyLjc3OQ0KDQoJYzIwLjcxLDguMjE3LDQyLjkzOCwxMS41MDgsNjQuODYyLDkuODYzbC01MC4yNzgsNTAuMjc4Yy00My4xMDUsNDMuMTA1LTExMi45OTEsNDMuMTA1LTE1Ni4wOTYsMA0KDQoJYy00My4xMDUtNDMuMTA0LTQzLjEwNi0xMTIuOTkxLTAuMDAxLTE1Ni4wOTZMMTU2LjIyNiwxOTkuNjc5eiBNMjczLjU3NCw4Mi4zM2wtNTAuMjc4LDUwLjI3OA0KDQoJYzIxLjkyOC0xLjY0Myw0NC4xNTIsMS42NDgsNjQuODYzLDkuODY1bDIyLjc3OS0yMi43OGMyMi40MzQtMjIuNDM0LDU4LjkzNi0yMi40MzQsODEuMzcsMGMyMi40MzQsMjIuNDM0LDIyLjQzNCw1OC45MzYsMCw4MS4zNw0KDQoJbC03My44OTcsNzMuODk1Yy0yMi41MDEsMjIuNTAxLTU5LjA2MSwyMi4zMTEtODEuMzY4LDBjLTUuMjAyLTUuMjAxLTkuNjk0LTExLjY3OC0xMi40ODQtMTguMDRsLTM4LjU0NiwzOC41NDYNCg0KCWM0LjA0OSw2LjE0Miw4LjI2MSwxMS40NTMsMTMuNjY2LDE2Ljg1OGMxMy45NDksMTMuOTUsMzEuNjk4LDI0LjMzOSw1Mi4xMTcsMjkuMjUxYzI2LjQ2Niw2LjM3LDU0LjgyMywyLjgzOSw3OS4xODUtMTAuNTkyDQoNCgljOC44OTItNC45MDMsMTcuMjU0LTExLjExOSwyNC43OTQtMTguNjU5bDczLjg5Ni03My44OTVjNDMuMTA1LTQzLjEwNSw0My4xMDUtMTEyLjk5MSwwLjAwMS0xNTYuMDk3DQoNCglDMzg2LjU2NiwzOS4yMjUsMzE2LjY4LDM5LjIyNSwyNzMuNTc0LDgyLjMzeiIvPg0KPC9nPg0KDQo8L3N2Zz4NCg0K); - width: 2em; - height: 2em; - background-size: 2em; - background-repeat: no-repeat no-repeat -} - -.mapjs-hyperlink:hover { - background-image: url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiDQoNCgkgd2lkdGg9IjUxMnB4IiBoZWlnaHQ9IjUxMnB4IiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQoNCjxwYXRoIHN0eWxlPSJmaWxsOmJsYWNrIiBkPSJNMTU2LjIyNiwxOTkuNjc5YzcuNTQxLTcuNTQsMTUuOTAyLTEzLjc1NywyNC43OTQtMTguNjU5YzQ5LjU1Ni0yNy4zMTgsMTEzLjExNy0xMi43ODgsMTQ0Ljk3LDM1LjUxOA0KDQoJbC0zOC41NDcsMzguNTQ3Yy0xMS4wNTktMjUuMjI3LTM4LjUtMzkuNTY1LTY1LjgxMy0zMy40NTZjLTEwLjI4MiwyLjMtMjAuMDU0LDcuNDI3LTI4LjAzOSwxNS40MTNsLTczLjg5OCw3My44OTYNCg0KCWMtMjIuNDMzLDIyLjQzMy0yMi40MzIsNTguOTM2LDAuMDAyLDgxLjM2OWMyMi40MzMsMjIuNDMzLDU4LjkzNSwyMi40MzMsODEuMzY4LDBsMjIuNzgtMjIuNzc5DQoNCgljMjAuNzEsOC4yMTcsNDIuOTM4LDExLjUwOCw2NC44NjIsOS44NjNsLTUwLjI3OCw1MC4yNzhjLTQzLjEwNSw0My4xMDUtMTEyLjk5MSw0My4xMDUtMTU2LjA5NiwwDQoNCgljLTQzLjEwNS00My4xMDQtNDMuMTA2LTExMi45OTEtMC4wMDEtMTU2LjA5NkwxNTYuMjI2LDE5OS42Nzl6IE0yNzMuNTc0LDgyLjMzbC01MC4yNzgsNTAuMjc4DQoNCgljMjEuOTI4LTEuNjQzLDQ0LjE1MiwxLjY0OCw2NC44NjMsOS44NjVsMjIuNzc5LTIyLjc4YzIyLjQzNC0yMi40MzQsNTguOTM2LTIyLjQzNCw4MS4zNywwYzIyLjQzNCwyMi40MzQsMjIuNDM0LDU4LjkzNiwwLDgxLjM3DQoNCglsLTczLjg5Nyw3My44OTVjLTIyLjUwMSwyMi41MDEtNTkuMDYxLDIyLjMxMS04MS4zNjgsMGMtNS4yMDItNS4yMDEtOS42OTQtMTEuNjc4LTEyLjQ4NC0xOC4wNGwtMzguNTQ2LDM4LjU0Ng0KDQoJYzQuMDQ5LDYuMTQyLDguMjYxLDExLjQ1MywxMy42NjYsMTYuODU4YzEzLjk0OSwxMy45NSwzMS42OTgsMjQuMzM5LDUyLjExNywyOS4yNTFjMjYuNDY2LDYuMzcsNTQuODIzLDIuODM5LDc5LjE4NS0xMC41OTINCg0KCWM4Ljg5Mi00LjkwMywxNy4yNTQtMTEuMTE5LDI0Ljc5NC0xOC42NTlsNzMuODk2LTczLjg5NWM0My4xMDUtNDMuMTA1LDQzLjEwNS0xMTIuOTkxLDAuMDAxLTE1Ni4wOTcNCg0KCUMzODYuNTY2LDM5LjIyNSwzMTYuNjgsMzkuMjI1LDI3My41NzQsODIuMzN6Ii8+DQo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjAsLTIwKSIgc3R5bGU9ImZpbGw6IzAwQkZGRiI+DQo8cGF0aCAgZD0iTTE1Ni4yMjYsMTk5LjY3OWM3LjU0MS03LjU0LDE1LjkwMi0xMy43NTcsMjQuNzk0LTE4LjY1OWM0OS41NTYtMjcuMzE4LDExMy4xMTctMTIuNzg4LDE0NC45NywzNS41MTgNCg0KCWwtMzguNTQ3LDM4LjU0N2MtMTEuMDU5LTI1LjIyNy0zOC41LTM5LjU2NS02NS44MTMtMzMuNDU2Yy0xMC4yODIsMi4zLTIwLjA1NCw3LjQyNy0yOC4wMzksMTUuNDEzbC03My44OTgsNzMuODk2DQoNCgljLTIyLjQzMywyMi40MzMtMjIuNDMyLDU4LjkzNiwwLjAwMiw4MS4zNjljMjIuNDMzLDIyLjQzMyw1OC45MzUsMjIuNDMzLDgxLjM2OCwwbDIyLjc4LTIyLjc3OQ0KDQoJYzIwLjcxLDguMjE3LDQyLjkzOCwxMS41MDgsNjQuODYyLDkuODYzbC01MC4yNzgsNTAuMjc4Yy00My4xMDUsNDMuMTA1LTExMi45OTEsNDMuMTA1LTE1Ni4wOTYsMA0KDQoJYy00My4xMDUtNDMuMTA0LTQzLjEwNi0xMTIuOTkxLTAuMDAxLTE1Ni4wOTZMMTU2LjIyNiwxOTkuNjc5eiBNMjczLjU3NCw4Mi4zM2wtNTAuMjc4LDUwLjI3OA0KDQoJYzIxLjkyOC0xLjY0Myw0NC4xNTIsMS42NDgsNjQuODYzLDkuODY1bDIyLjc3OS0yMi43OGMyMi40MzQtMjIuNDM0LDU4LjkzNi0yMi40MzQsODEuMzcsMGMyMi40MzQsMjIuNDM0LDIyLjQzNCw1OC45MzYsMCw4MS4zNw0KDQoJbC03My44OTcsNzMuODk1Yy0yMi41MDEsMjIuNTAxLTU5LjA2MSwyMi4zMTEtODEuMzY4LDBjLTUuMjAyLTUuMjAxLTkuNjk0LTExLjY3OC0xMi40ODQtMTguMDRsLTM4LjU0NiwzOC41NDYNCg0KCWM0LjA0OSw2LjE0Miw4LjI2MSwxMS40NTMsMTMuNjY2LDE2Ljg1OGMxMy45NDksMTMuOTUsMzEuNjk4LDI0LjMzOSw1Mi4xMTcsMjkuMjUxYzI2LjQ2Niw2LjM3LDU0LjgyMywyLjgzOSw3OS4xODUtMTAuNTkyDQoNCgljOC44OTItNC45MDMsMTcuMjU0LTExLjExOSwyNC43OTQtMTguNjU5bDczLjg5Ni03My44OTVjNDMuMTA1LTQzLjEwNSw0My4xMDUtMTEyLjk5MSwwLjAwMS0xNTYuMDk3DQoNCglDMzg2LjU2NiwzOS4yMjUsMzE2LjY4LDM5LjIyNSwyNzMuNTc0LDgyLjMzeiIvPg0KPC9nPg0KDQo8L3N2Zz4NCg==) -} - -.mapjs-attachment { - right: -5px; - position: absolute; - top: -15px; - background-image: url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiDQoJIHdpZHRoPSIxNnB4IiBoZWlnaHQ9IjMycHgiIHhtbDpzcGFjZT0icHJlc2VydmUiIHN0eWxlPSJ0cmFuc2Zvcm06cm90YXRlKDEwKSI+DQogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiwtMikgcm90YXRlKDEwKSIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MiI+DQogICA8cGF0aCBkPSJNNCwxNiBMNCwxMSBDNCwxIDE1LDEgMTUsMTEgTDE1LDI2IEMxNSwzMSA4LDMxIDgsMjUgTDgsMTAiDQogICAgIHN0eWxlPSJzdHJva2U6YmxhY2siLz4NCiAgIDxwYXRoIGQ9Ik0zLDE2IEwzLDEwIEMzLDAgMTQsMCAxNCwxMCBMMTQsMjUgQzE0LDMwIDcsMzAgNywyNSBMNywxMCINCiAgICAgc3R5bGU9InN0cm9rZTojMDA5QUNEIi8+DQogIDwvZz4NCjwvc3ZnPg0K); - width: 16px; - height: 32px; - background-size: 16px 32px; - background-repeat: no-repeat no-repeat -} - -.mapjs-attachment:hover { - background-image: url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiDQoJIHdpZHRoPSIxNnB4IiBoZWlnaHQ9IjMycHgiIHhtbDpzcGFjZT0icHJlc2VydmUiIHN0eWxlPSJ0cmFuc2Zvcm06cm90YXRlKDEwKSI+DQogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiwtMikgcm90YXRlKDEwKSIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MiI+DQogICA8cGF0aCBkPSJNNCwxNiBMNCwxMSBDNCwxIDE1LDEgMTUsMTEgTDE1LDI2IEMxNSwzMSA4LDMxIDgsMjUgTDgsMTAiDQogICAgIHN0eWxlPSJzdHJva2U6YmxhY2siLz4NCiAgIDxwYXRoIGQ9Ik0zLDE2IEwzLDEwIEMzLDAgMTQsMCAxNCwxMCBMMTQsMjUgQzE0LDMwIDcsMzAgNywyNSBMNywxMCINCiAgICAgc3R5bGU9InN0cm9rZTojMDBCRkZGIi8+DQogIDwvZz4NCjwvc3ZnPg0K) -} - -.mapjs-draw-container { - position: absolute; - margin: 0; - padding: 0 -} - -.mapjs-draw-container[data-mapjs-role=connector] { - z-index: 1 -} - -.mapjs-draw-container[data-mapjs-role=link] { - z-index: 2 -} - -.mapjs-connector { - stroke-width: 1px; - fill: none; - stroke: #888 -} - -.mapjs-link { - stroke-width: 1.5px; - fill: none -} - -.mapjs-link-hit { - stroke: transparent; - stroke-width: 15; - cursor: crosshair -} - -#container { - background-color: #FFF; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - margin: 0; - padding: 0 -} - -.mapjs-reorder-bounds { - background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjExcHgiIGhlaWdodD0iMjAuNjM0cHgiPg0KPHBhdGggZD0iTTAuMTk5LDEwLjc5bDkuNjQ2LDkuNjQ2YzAuMTMsMC4xMzMsMC4zMDIsMC4xOTcsMC40NzEsMC4xOTdjMC4xNzMsMCwwLjM0NC0wLjA2NCwwLjQ3My0wLjE5N2wwLjAxMy0wLjAxMQ0KCUMxMC45MjksMjAuMzA1LDExLDIwLjEzMiwxMSwxOS45NTJ2LTQuNjhjMC0wLjE4Mi0wLjA3LTAuMzQ3LTAuMTk4LTAuNDc1TDYuMzIzLDEwLjMybDQuNDc5LTQuNDgzQzEwLjkyOSw1LjcxNCwxMSw1LjU0MywxMSw1LjM2NA0KCVYwLjY4MmMwLTAuMTc2LTAuMDctMC4zNDUtMC4xOTgtMC40NzRsLTAuMDEzLTAuMDEyQzEwLjY2NywwLjA3MSwxMC40OTcsMCwxMC4zMTYsMEMxMC4xNDMsMCw5Ljk3LDAuMDcxLDkuODQ1LDAuMTk2TDAuMTk5LDkuODQ1DQoJQy0wLjA2NiwxMC4xMDQtMC4wNjYsMTAuNTMyLDAuMTk5LDEwLjc5eiIvPg0KPC9zdmc+); - background-height: 100%; - background-width: 100%; - height: 20px; - width: 11px; - z-index: 999; - background-repeat: no-repeat -} - -.mapjs-reorder-bounds[mapjs-edge=left] { - background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjExcHgiIGhlaWdodD0iMjAuNjM0cHgiPg0KICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTEsIDApIHNjYWxlKC0xLCAxKSI+DQo8cGF0aCBkPSJNMC4xOTksMTAuNzlsOS42NDYsOS42NDZjMC4xMywwLjEzMywwLjMwMiwwLjE5NywwLjQ3MSwwLjE5N2MwLjE3MywwLDAuMzQ0LTAuMDY0LDAuNDczLTAuMTk3bDAuMDEzLTAuMDExDQoJQzEwLjkyOSwyMC4zMDUsMTEsMjAuMTMyLDExLDE5Ljk1MnYtNC42OGMwLTAuMTgyLTAuMDctMC4zNDctMC4xOTgtMC40NzVMNi4zMjMsMTAuMzJsNC40NzktNC40ODNDMTAuOTI5LDUuNzE0LDExLDUuNTQzLDExLDUuMzY0DQoJVjAuNjgyYzAtMC4xNzYtMC4wNy0wLjM0NS0wLjE5OC0wLjQ3NGwtMC4wMTMtMC4wMTJDMTAuNjY3LDAuMDcxLDEwLjQ5NywwLDEwLjMxNiwwQzEwLjE0MywwLDkuOTcsMC4wNzEsOS44NDUsMC4xOTZMMC4xOTksOS44NDUNCglDLTAuMDY2LDEwLjEwNC0wLjA2NiwxMC41MzIsMC4xOTksMTAuNzl6Ii8+DQogIDwvZz4NCjwvc3ZnPg==) -} diff --git a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup.scss b/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup.scss deleted file mode 100644 index e69de29..0000000 diff --git a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_default_variables.scss b/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_default_variables.scss deleted file mode 100644 index 4ef0ca3..0000000 --- a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_default_variables.scss +++ /dev/null @@ -1,6 +0,0 @@ -$form-input-height: 25px !default; -$mup-background-menu: white !default; -$mindmup-node-shadow: 5px 5px 5px 0 gray !default; - -$retrace: .75 * $box-padding !default; -$retrace-mod: (0.25)*$box-padding !default; diff --git a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_frame.scss b/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_frame.scss deleted file mode 100644 index cefc367..0000000 --- a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_frame.scss +++ /dev/null @@ -1,211 +0,0 @@ -$legend-width: 260px; -.mindmup { - &-cont { - margin: 0 (-$retrace) $retrace-mod; - width: auto; - overflow: hidden; - @include respond-to(max-small-screen) { - margin-top: -$box-padding; - } - } - &-container { - @extend %user-select-none !optional; - position: relative; - cursor: all-scroll; - border-top: none; - box-sizing: border-box; - background-color: mix($color-background, $color-foreground); - margin: 0; - padding: 0; - outline: none; - overflow-y: hidden !important; - @extend %pattern-grid-background !optional; - } - &__legend { - &-container { - @extend %box-shadow !optional; - @extend %material__elevation--depth_2 !optional; - background-color: $color-foreground; - position: absolute; - left: $gap; - top: $gap; - width: $legend-width; - @include respond-to(max-small-screen) { - top: 110%; - } - //@include respond-to(max-small-screen) { - // display: none; - //} - &--hidden { - display: none; - } - } - &-header { - background: mix($color-foreground, $color-background); - padding: $gap; - @extend %flex; - & > label { - @extend %flex-grow-1; - } - } - &-toggler { - a { - color: rgba($color-text, .5); - font-size: 1.5em; - line-height: $form-input-height; - } - .tip { - display: none; - } - &.active { - a { - @if map-has-key($icons, 'expand-less') { - @include icon-parent('expand-less'); - } - } - } - } - } - &-noselect { - @extend %user-select-none !optional; - } - &__menu { - @extend %box-sizing-border-box !optional; - //@extend %material__elevation--inline !optional; - @extend %box-shadow-none !optional; - @extend %flex !optional; - @extend %justify-content-space-between !optional; - user-select: none; - position: relative; - z-index: 1; - background-color: $mup-background-menu; - //overflow-x: hidden; - //border-top: 1px solid $color-border-minor; - border-bottom: 1px solid $color-border-minor; - - //margin: 0 (-$retrace-mod); - padding: $box-padding; - //@include respond-to(min-medium-screen){ - // padding-left: $gap + $box-padding + $legend-width; - //} - &-item { - display: inline-block; - text-align: left; - - a.active { - //* TODO - WILL BE REMOVED after changes in @menu-tooltip - // 035b00e84609610ee12cb93294ea823bd2f130ad - // 62002a072a0997a8b275a528c8e4aefa41a48412 - color: #d94838 !important; - &:before { - color: #d94838 !important; - } - } - - @include respond-to(max-medium-screen) { - & > a { - padding-right: 0; - & > span { - display: none; - } - } - } - @include respond-to(max-xlarge-screen) { - & > a { - &.easy-mindmup__icon--settings, &.easy-mindmup__icon--display { - padding-right: 0; - & > span { - display: none; - } - } - } - } - } - .right-menu { - float: right; - } - &-group { - ul { - margin: 0; - } - &--tooltiped { - .easy & { - @extend %menu-tooltip !optional; - } - & > ul { - display: none; - } - &:hover { - & > ul { - display: block; - } - } - } - &--sizing { - @extend %flex-grow-1 !optional; - text-align: center; - font-size: 1.5em; - position: absolute; - bottom: -2*$box-padding; - right: $box-padding; - line-height: $box-padding; - @include respond-to(max-small-screen) { - display: none; - } - a { - color: rgba($color-text, .5); - text-decoration: none; - } - li { - list-style: none; - display: inline-block; - } - } - &-display { - @include respond-to(min-small-screen) { - margin-left: $gap + $legend-width - } - - } - .mindmup__legend-container--hidden + &-display { - margin-left: 0 - } - } - &-save { - } - } - &_hover_menu { - display: block; - position: absolute; - z-index: 99; - background-color: white; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - border: 1px solid rgba(0, 0, 0, 0.2); - @extend %border-radius !optional; - @include box-shadow(0 5px 10px rgba(0, 0, 0, 0.2)); - @extend %background-clip-padding-box !optional; - } - &-reload-modal-errors li { - color: $color-negative; - } - - &-last-modal-diffs li { - color: $color-important; - } - &__button { - &--disabled { - opacity: 0.4; - } - } - &_modal { - &__flash_close { - position: absolute; - right: $gap; - font-size: 2*$gap; - line-height: 2*$gap; - } - } -} - diff --git a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_icons.scss b/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_icons.scss deleted file mode 100644 index 09a1d23..0000000 --- a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_icons.scss +++ /dev/null @@ -1,50 +0,0 @@ -$mindmup-icons: ( - add: \e3ba, - add_sibling: \e3ba, - insert_between: \e3bb, - remove: \e92b, - rename: \e22b, - edit_data: \e880, - follow_url: \e0e2, - zoom_in: \e8ff, - zoom_out:\e900, - refresh_view: \e881, - filter: \e152, - cancel: \e5c9, - cancel_filter: \e5c9, - close: \e5cd, - display: \e417, - links: \e157, - icons: \e24e, - collapse: \e909, - expand: \e146, - one_side: \e86d, - settings: \e8b8, - undo: \e166, - redo: \e15a, - print: \e16b, - cut: \e14e, - copy: \e14d, - paste: \e14f, - save: \e161, - legend: \e5d2, - legend_hide: \e06d, -); - -.easy-mindmup { - &__icon { - @include icon-parent; - &:before { - font-family: "Material Icons", sans-serif; - } - @each $icon, $sign in $mindmup-icons { - &--#{$icon}:before { - content: unicode($sign); - } - } - &.button { - @extend %button-with-icon; - padding-left: 3*$gap; - } - } -} diff --git a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_legend.scss b/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_legend.scss deleted file mode 100644 index 7d689ac..0000000 --- a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_legend.scss +++ /dev/null @@ -1,67 +0,0 @@ -.mindmup{ - &-legend { - @extend %background-clip-padding-box !optional; - overflow-y: auto; - padding: $gap $box-padding; - overflow-x: hidden; - &-color-box { - //@include mindmup-scheme($color-border-minor); - background-color: #E0E0E0; - border-color: #E0E0E0; - @extend %border-radius-infinite !optional; - //&:before{ - // content: 'B'; - // font-weight: bold; - // display: block; - // text-align: center; - //} - width: $box-padding; - height: $box-padding; - display: inline-block; - border-width: 1px; - border-style: solid; - vertical-align: middle; - margin-right: 5px; - } - &-used-toggle{ - float:right; - margin: 5px 0; - } - &-item{ - &-cont{ - cursor: pointer; - margin-top: 0.5*$gap; - } - } - .hotkey_link { - margin: $gap (-$gap) 0; - padding-top: $gap; - border-top: 1px solid $color-border-minor; - .easy & a{ - color: rgba($color-text, .5); - } - } - &__filter{ - &_cont{ - position: absolute; - right: $gap; - } - &_icon{ - color: rgba($color-text, .4);; - font-size: 2em; - padding: 5px; - } - &_cancel_icon{ - position: absolute; - display: none; - color: lighten($color-negative,10); - //color: $color-negative; - font-size: 2em; - padding: 0 5px 5px; - } - &_cont:hover &_cancel_icon{ - display: inline; - } - } - } -} \ No newline at end of file diff --git a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_mapjs.scss b/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_mapjs.scss deleted file mode 100644 index 4cc10c6..0000000 --- a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_mapjs.scss +++ /dev/null @@ -1,30 +0,0 @@ -.mapjs{ - &-connector{ - stroke: darken($color-border,5%); - //stroke-width: 2px; - //stroke-dasharray: 2, 2; - } - &-draw{ - &-container{ - pointer-events: none; - overflow: visible; - &[data-mapjs-role=connector]{ - - } - } - } - &-link-hit { - pointer-events: all; - fill: none; - } - &-exclamation { - right: -.9em; - position: absolute; - top: -.9em; - background-image: url(data:image/png;base64,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); - width: 2em; - height: 2em; - background-size: 2em; - background-repeat: no-repeat no-repeat - } -} \ No newline at end of file diff --git a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_mixins.scss b/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_mixins.scss deleted file mode 100644 index 953d642..0000000 --- a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_mixins.scss +++ /dev/null @@ -1,6 +0,0 @@ -@mixin mindmup-scheme($color){ - background-color: $color; - &.activated { - background-color: darken($color, 10%); - } -} \ No newline at end of file diff --git a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_nodes.scss b/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_nodes.scss deleted file mode 100644 index 08726a7..0000000 --- a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_nodes.scss +++ /dev/null @@ -1,130 +0,0 @@ -.mapjs { - &-node { - border: 1px solid transparent; // !important; - @extend %border-radius-small !optional; - //@include mindmup-scheme($color-border-minor); - //@include box-shadow(0 0 3px 0px rgba($black, .25)); - @include box-shadow(none); - @include mindmup-scheme($mindmup-default-node-color); - color: $color-text; - padding: 0.75*$gap 1.5*$gap; - margin: 0; - &.activated, &.selected, &.droppable { - @include box-shadow($mindmup-node-shadow); - @extend %material__elevation--depth_4 !optional; - margin-left: -2px; - } - &.activated { - border: 1px solid transparent; - } - &.droppable { - border-color: $color-important; - } - span { - word-wrap: break-word; - } - } - &-collapsor { - @extend %border-radius-infinite !optional; - position: absolute; - left: auto; - top: 50%; - right: -$gap - 2; - margin-top: -$gap; - background-color: $white; - color: $button-negative-background; - line-height: 1; - font-size: 2*$gap; - font-weight: normal; - - font-family: "Material Icons", sans-serif; - @extend %material-icon !optional; - &:before { - content: '\e15c' - } - .collapsed & { - color: $button-positive-background; - &:before { - content: '\e147' - } - } - .mindmup-node-left & { - right: auto; - left: -$gap - 2; - } - .mapjs-node:hover & { - font-size: 2.5*$gap; - margin-top: -$gap - 2; - right: -$gap - 5; - } - .mindmup-node-left:hover & { - left: -$gap - 5; - right: auto; - } - } -} - -.mindmup { - &-node { - &-filtered { - opacity: 0.2; - } - &-icon { - height: 20px; - display: inline-block; - margin-right: 3px; - vertical-align: middle; - &-progress { - width: 4px; - background-color: $color-border; - @extend %rotate-90cw; - margin: 0 $gap; - } - &-progress-bar { - background-color: $color-positive; - position: relative; - } - &-milestone-shell { - border: 1px solid $color-border; - @extend %rotate-45cw; - vertical-align: middle; - display: inline-block; - margin: 1px; - } - &-status { - font-weight: normal; - opacity: .5; - @include small; - } - - &s { - position: absolute; - left: 0; - top: -10px; - white-space: nowrap; - &--with_icons & { - top: -18px; - } - } - } - - &-filtered { - opacity: 0.2; - } - &-avatar { - position: absolute; - top: 50%; - margin-top: -11px; - .mindmup-node-left & { - left: auto; - right: -31px; - } - } - } -} - -.mindmup-scheme-project { - @include mindmup-scheme($button-main-background); - color: $button-main-color; -} - diff --git a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_print.scss b/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_print.scss deleted file mode 100644 index aa8844a..0000000 --- a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_print.scss +++ /dev/null @@ -1,32 +0,0 @@ -@media print { - .gravatar { - max-width: 100%; - height: auto; - -webkit-border-radius: 5000px; - -moz-border-radius: 5000px; - border-radius: 5000px; - } -} -.mindmup-print{ - &-area{ - & .mapjs-collapsor{ - display: none; - } - & .mindmup-node-add-button{ - display: none; - } - } - &-strip{ - position: relative; - /*border: 1px solid red;*/ - border: 1px solid #cecece; - overflow: hidden; - white-space: nowrap; - break-inside: avoid; - margin: 10px 0; - margin-left: -1px; - display: inline-block; - background-color: #ffffff; - border-left: 0; - } -} diff --git a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_progress.scss b/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_progress.scss deleted file mode 100644 index e207235..0000000 --- a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_progress.scss +++ /dev/null @@ -1,30 +0,0 @@ -.mindmup-progress { - &-modal { - position: fixed; - z-index: 10000; - width: 40%; - height: 150px; - top: 150px; - left: 30%; - right: 30%; - padding-top: 30px; - background-color: $color-foreground; - border: 1px solid $color-border; - box-shadow: 6px 6px 42px 7px transparentize($color-border, 0.35); - h3 { - text-align: center; - } - } - &-cont { - height: 8px; - width: 80%; - margin-left: 10%; - margin-right: 10%; - border: 1px solid $color-border; - } - &-bar { - width: 50%; - height: 100%; - background-color: green; - } -} \ No newline at end of file diff --git a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_redmine.scss b/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_redmine.scss deleted file mode 100644 index 905200f..0000000 --- a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_redmine.scss +++ /dev/null @@ -1,143 +0,0 @@ -%icon_before_list_item{ - position: absolute; - left: 0; - text-align: center; - font-size: 1.2em; - line-height: 1; - color: inherit; - top: 50%; - margin-top: -0.5em; -} - -.redmine { - .mindmup { - &-cont { - margin: 0 -10px -10px -10px; - } - &-menu { - padding: 5px 1px 0 1px; - .menu-item { - padding: 8px 10px 8px 10px; - } - } - &__menu { - padding: 14px; - &-group { - &--tooltiped { - & > a { - padding-top: 10px; - padding-bottom: 10px; - } - & > ul { - position: absolute; - background-color: #ffffff; - border: 1px solid #dfccaf; - color: #42321a; - padding: 5px 5px 5px 0; - margin-top: 10px; - margin-left: -10px; - min-width: 150px; - li { - display: block; - padding: 3px; - a { - display: block; - padding-left: 20px; - &:before { - position: absolute; - left: 0; - width: 20px; - } - } - } - } - &:after { - display: none; - } - .icon { - background-image: none; - } - } - &--sizing { - a { - padding: 0; - } - } - } - &-item { - padding-left: 15px; - padding-right: 15px; - } - &-save { - a { - padding-left: 30px !important; - &:before { - text-align: center; - width: 36px; - position: absolute; - } - } - } - } - &-legend { - margin-top: 1px; - &__filter { - &_cancel_icon { - position: absolute; - } - } - } - &__legend { - &-container { - top: 0; - } - &-toggler { - height: 25px; - a { - line-height: 1.5em; - } - } - &-header { - padding: 8px; - } - } - } - a.button-positive { - background-color: #4ebf67; - border-radius: 2px; - border: 1.3px solid rgb(51, 141, 71); - color: #ffffff; - padding: 8px 16px; - } - .menu-item.active { - background-color: #9DB9D5; - } - .menu-item.active a.button { - color: #fff; - } - .gravatar { - max-width: 100%; - height: auto; - border-radius: 5000px; - overflow: hidden; - box-sizing: border-box; - } - .button-2.active { - background-color: transparent !important; - } - &.mindmup__context_menu{ - .easy-mindmup__icon:before{ - @extend %icon_before_list_item - } - } - .button{ - &.easy-mindmup__icon:before{ - @extend %icon_before_list_item - } - } - .mindmup_modal__flash_close{ - color: #880000; - right: 15px; - line-height: 18px; - } -} diff --git a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_schemes.scss b/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_schemes.scss deleted file mode 100644 index 19601c5..0000000 --- a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_schemes.scss +++ /dev/null @@ -1,12 +0,0 @@ -.scheme{ - @each $scheme, $map in $mindmup-schemes { - &-by-#{$scheme} &-#{$scheme}{ - @for $i from 1 through length($map) { - $color: nth($map, $i); - &-#{$i} { - @include mindmup-scheme($color); - } - } - } - } -} \ No newline at end of file diff --git a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_sidebar.scss b/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_sidebar.scss deleted file mode 100644 index 58466a1..0000000 --- a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_sidebar.scss +++ /dev/null @@ -1,219 +0,0 @@ -&-sidebar { - - %info-block { - background-color: #ffffaa; - border: 1px solid #bfb23f; - padding: 5px; - text-align: center; - } - - display: block; - &__empty-title { - @extend %info-block; - display: block; - margin-top: 10px; - box-sizing: border-box; - } - &__resize { - position: fixed; - width: 10px; - text-align: center; - cursor: col-resize; - display: block; - z-index: 101; - background-color: silver; - box-sizing: border-box; - padding-top: 8px; - font-size: 20px; - border-radius: 5px; - } - &__root { - position: absolute; - right: 0; - bottom: 0; - z-index: 5; - } - &__toggler { - position: absolute; - top: 1px; - right: 1px; - padding: 0; - z-index: 1; - &.active { - background: #d94838; - color: #fff; - } - } - &__container { - border-left: 1px solid #dfccaf; - background: mix($color-foreground, $color-background); - padding-left: 8px; - overflow-y: scroll; - } - &__long-text { - position: relative; - max-height: 100px; - overflow: hidden; - min-height:30px; - border: 1px solid #dfccaf; - &__curtain { - height: 100%; - position: absolute; - width: 100%; - top: 0; - left: 1px; - border-bottom: 1px solid #dfccaf; - background: -moz-linear-gradient(top, rgba(255, 255, 255, 0.01) 0%, rgba(255, 255, 255, 0.01) 65%, white 100%); - background: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.01) 0%, rgba(255, 255, 255, 0.01) 65%, white 100%); - background: linear-gradient(to bottom, rgba(255, 255, 255, 0.01) 0%, rgba(255, 255, 255, 0.01) 65%, white 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#03ffffff', endColorstr='#ffffff', GradientType=0); - } - &__content{ - padding: 3px; - min-height: 25px; - width: 100%; - box-sizing: border-box; - max-height: 100px; - } - } - &__attribute { - display: block; - overflow: hidden; - margin-top: 3px; - position: relative; - & .invalid{ - border: 1px solid red; - color: red; - } - &-form-field { - max-width: 200px !important; - padding: 1px 1px 1px 5px !important; - line-height: normal; - float: right; - overflow-x: hidden !important; - } - &-value { - max-width: 197px !important; - width: 100%; - padding: 1px 1px 1px 5px !important; - line-height: normal; - float: right; - margin-top: 6px; - } - &-label-disabled { - color: rgba(0, 0, 0, 0.38); - } - &-label { - display: inline-block; - width: 90px; - margin-top: 5px; - } - .spaceholder { - display: none; - } - .top-section { - margin-bottom: 0; - } - &-full-screen-icon { - display: block; - float: right; - cursor: pointer; - margin-top: 6px; - position: absolute; - top: 0; - right: 0; - } - & .icon-edit{ - position: absolute; - top: 0; - right: 0; - cursor: pointer; - } - } - &__attributes { - - } - &__add-comment-button { - a { - width: 100%; - box-sizing: border-box; - } - margin: 3px 0 12px 0; - } - &__journal { - &-avatar-container { - margin-top: 6px - } - &-header { - margin-top: -6px - } - &-notes { - margin-top: 0; - background: #ffffff; - border: 1px solid #dfccaf; - margin-bottom: 0 !important; - box-sizing: border-box; - padding: 3px; - p:last-child { - margin-bottom: 0; - } - } - &-full-screen-icon { - display: block; - float: right; - cursor: pointer; - margin-top: 25px; - position: absolute; - top: 0; - right: 20px; - } - &-timestamp { - font-weight: bold; - font-size: smaller; - } - } - &__coworkers--no_id { - @extend %info-block - } - &__tab { - margin: 6px 6px; - header { - min-height: 36px !important; - padding: 0 12px 8px !important; - } - header.open { - min-height: 44px; - } - header:not(:hover) { - color: inherit !important; - background-color: unset !important; - } - } - &__input { - &__name { - color: black; - font-family: "Open Sans", sans-serif; - width: 100% !important; - .input { - max-width: none; - text-align: center; - font-weight: bold; - opacity: 1; - color: black !important; - } - .bottom-section { - display: none; - } - } - } - .gravatar { - max-height: 32px; - max-width: 32px; - } - .content-wrapper { - margin: 0 12px 8px !important; - } - .material-tab { - padding: 0 !important; - } -} diff --git a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_variables.scss b/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_variables.scss deleted file mode 100644 index ad8db5d..0000000 --- a/plugins/easy_mindmup/assets/stylesheets/sass/_mindmup_variables.scss +++ /dev/null @@ -1,44 +0,0 @@ -$mindmup-default-node-color: #e5e5e5; -$mindmup-default-schemes: ( - #f9f6a8, - #fbe3bd, - #f3cccf, - #eabdec, - #d0b8ec, - #c9c9f9, - #c9dcff, - #d2f4f0, - #d2ecc9, - #e1ee9e, - #dadace, - #dbd1c7 -); -$progress-0: white; -$progress-1: $color-positive; -$mindmup-schemes: ( - priority: ( - hsl(hue($color-negative), 80%, 90%), - hsl(hue($color-negative), 80%, 80%), - hsl(hue($color-positive), 80%, 90%), - hsl(hue($color-positive), 80%, 80%), - hsl(hue($color-main), 80%, 90%), - hsl(hue($color-main), 80%, 80%), - hsl(hue($color-important), 80%, 90%), - hsl(hue($color-important), 80%, 80%), - #add7f3, // redmine low - #e5e5e5, // redmine normal - #fcc, // redmine high - #ffb4b4 // redmine urgent - ), - status: join((), $mindmup-default-schemes), - tracker: join((), $mindmup-default-schemes), - assignee: join((), $mindmup-default-schemes), - milestone: join((), $mindmup-default-schemes), - progress: ( - $mindmup-default-node-color, - mix($progress-1, $progress-0, 10%), - mix($progress-1, $progress-0, 25%), - mix($progress-1, $progress-0, 45%), - mix($progress-1, $progress-0, 70%), - $progress-1) -) !default; diff --git a/plugins/easy_mindmup/config/locales/cs.yml b/plugins/easy_mindmup/config/locales/cs.yml deleted file mode 100644 index cfa1ca6..0000000 --- a/plugins/easy_mindmup/config/locales/cs.yml +++ /dev/null @@ -1,163 +0,0 @@ ---- -cs: - easy_mindmup: - button_add_child: Přidat dítě - button_add_parent: Přidat rodiče - button_add_sibling: Přidat sourozence - button_all_icons: Ikony - button_collapse: Sbalit - button_collapse_all: Sbalit vše - button_cut: Vyjmout - button_edit_data: Upravit údaje - button_expand: Rozbalit - button_expand_all: Rozbalit vše - button_expand_collapse: Rozbalit/sbalit - button_legend: Legenda - button_one_side: Jedna strana - button_paste: Vložit - button_project_menu: Easy MindMup - button_redo: Vpřed - button_remove_node: Odstranit uzel - button_show_links: Zobrazit odkazy - button_undo: Zpět - edit_issue: Upravit úkol - error_create: Nelze vytvořit - error_delete: Nelze smazat - error_update: Nelze aktualizovat - errors: - not_subtaskable: Úkol "%{task_name}" nemůže být podúkolem kvůli nastavení jeho - trackeru - button_hotkeys: Klávesové zkratky - hotkeys: - info_mac_metakey: Na Mac OS X klávesy Ctrl a Cmd mohou být použity pro zkratky - níže - některé prohlížeče mohou určitým klávesovým zkratkám bránit. Například - pokud Cmd + Space nefunguje v prohlížeči, zkuste Ctrl + Space. - keyboard: - - název: Manipulace s uzly - hotkeys: - - hotkey: Enter - info: Přidat sourozence - - hotkey: Shift+Enter - info: Přidat sourozence nad, nebo zalomení řádku (při přejmenování uzlu) - - hotkey: Tab nebo Insert - info: Přidat dítě - - hotkey: Shift+Tab - info: Přidat rodiče - - hotkey: Mezerník - info: Přejmenovat uzel - - hotkey: Shift+mezerník - info: Upravit údaje uzlu - - hotkey: Backspace nebo Delete - info: Odstranit uzel - - hotkey: Ctrl+nahoru/dolů - info: Posunout uzel nahoru/dolů - - název: "Úpravy" - hotkeys: - - hotkey: Ctrl+S - info: Uložit - - hotkey: Ctrl+X nebo C - info: Vyjmout - - hotkey: Ctrl+C nebo Y - info: Kopírovat - - hotkey: Ctrl+V nebo P - info: Vložit - - hotkey: U nebo Ctrl+Z - info: Zpět - - hotkey: R nebo Ctrl+Y nebo Ctrl+Shift+Z - info: Vpřed - - název: Vybrat - hotkeys: - - hotkey: "šipky" - info: Vyberte uzel nahoře/dole/vlevo/vpravo nebo aktuálně vybraný - - hotkey: Shift+šipky - info: Přidat uzel nahoru/dolů/doleva/doprava k výběru (užitečné pro vícenásobné - označení sourozenců) - - hotkey: "{" - info: Vícenásobný výběr aktuálního uzlu a celého podstromu pod ním - - hotkey: "[" - info: Vícenásobný výběr pouze podstromu pod aktuálním uzlem (nikoli uzel - sám) - - hotkey: "=" - info: Vícenásobný výběr všech sourozenců aktuálního uzlu (které mají stejného - rodiče) - - hotkey: "." - info: Zrušit vícenásobný výběr a vybrat znovu pouze aktuální uzel - - hotkey: 1 - 9 - info: Vybrat všechny uzly na určité úrovni (např. 1 vybere všechny uzly - první úrovně) - - název: Navigace a obrazovka - hotkeys: - - hotkey: "/ nebo F" - info: Rozbalit nebo sbalit uzel (složit nebo rozložit děti) - - hotkey: Ctrl + nebo Z - info: Přiblížit - - hotkey: Ctrl - nebo Shift Z - info: Oddálit - - hotkey: Esc, 0, Ctrl+0 - info: Resetovat zobrazení mapy - vyberte kořenový uzel a přetáhněte jej - do středu obrazovky - mouse: - - action: Přesunutí mapy - gesture: klikněte a přetáhněte středový uzel, klikněte a přetáhněte pozadí nebo - skrolujte na trackpadu/touchpadu. - - action: Vybrat uzel - gesture: klikněte nebo klepněte na něj - - action: Vybrat více uzlů - gesture: Shift+klik - - action: Změna pořadí uzlů - gesture: přetáhněte uzel mezi svými sourozenci, horizontálně blízko k místu - změny pořadí. Při změně pořadí se zobrazí bod s černou šipkou. - - action: Ručně umístit uzel - gesture: stačí přetáhnout uzel, dokud šipka pro změnu pořadí nezmizí. Chcete-li - vynutit ruční postavení, i když se šipka pro změnu pořadí ukazuje, podržte - klávesu Shift při tažení. Upozorňujeme, že děti z kořenového uzlu je možné - přetáhnout v libovolném směru, ale uzly nižší úrovně mohou být umístěny - pouze ve směru svého rodiče ke kořeni. - - action: Přejmenování uzlu - gesture: Dvojitý klik nebo dvojité ťuknutí - - action: Zobrazit kontextové menu s operacemi - gesture: 'Klikněte pravým tlačítkem na uzel (myší) nebo poklepejte na pozadí, - nebo dlouze stiskněte uzel: zobrazit (na dotykových zařízeních)' - - action: Změna rodičovského uzlu - gesture: přetáhněte uzel na jiný uzel (kruhové upuštění není povoleno, takže - nelze upustit uzel na jednom ze svých dětí nebo potomků) - - action: Otevřít úkol nebo projekt v samostatném okně - gesture: Alt+klik - title_key_shortcuts: Klávesové operace - title_mouse_shortcuts: Operace s myší a dotykem - title_shortcuts: Zkratky - info_all_saved: Vše úspěšně uloženo - info_any_failed: 'Některé z neúspěšných požadavků:' - info_no_permission: Nemáte potřebná oprávnění k této akci - warning_delete_node: Opravdu chcete smazat uzel {{name}} a všechny jeho poduzly? - warning_delete_nodes: Opravdu chcete smazat tyto uzly a všechny jejich poduzly? - label_color_by: Barva dle - label_go_to: Jít do - label_or: nebo - last_state_modal: - label_differencies: Rozdíly na serveru - message_changed: mají rozdílné atributy (browser => server) ({{changes}}) - message_missing: nemá nadřazený úkol "{{from}}" - message_moved: je podúkolem "{{to}}", ne "{{from}}" - message_present: je přítomen jako podúkol "{{to}}" - text_reload_appeal: Přejete si znovu načíst stav ze serveru? - title: Poslední klientský stav Myšlenkové mapy je odlišný od stavu serveru - reload_modal: - label_errors: Chyby - text_reload_appeal: Chcete ignorovat neuložené položky a znovu načíst data ze - serveru? - title: Myšlenkovou mapu se nepodařilo správně uložit - stored_modal: - text_load_appeal: Chcete jej načíst místo aktuálního stavu ze serveru? - title: Byl nalezen neuložený stav - button_local: Neuložená verze - button_server: Serverová verze - save_info: - loaded: Staženo - saved: Uloženo - autosaved: Automaticky uloženo - at: v - label_save_progress: Prosím počkejte, probíhá ukládání - warning_not_saved: není správně uloženo - title_node_changed: Tento uzel byl změněn a bude uložen - label_less: Méně diff --git a/plugins/easy_mindmup/config/locales/en.yml b/plugins/easy_mindmup/config/locales/en.yml deleted file mode 100644 index c5149d5..0000000 --- a/plugins/easy_mindmup/config/locales/en.yml +++ /dev/null @@ -1,171 +0,0 @@ ---- -en: - easy_mindmup: - button_add_child: Add child - button_add_parent: Add parent - button_add_sibling: Add sibling - button_all_icons: Icons - button_collapse: Collapse - button_collapse_all: Collapse all - button_cut: Cut - button_edit_data: Edit data - button_expand: Expand - button_expand_all: Expand all - button_expand_collapse: Expand/Collapse - button_legend: Legend - button_one_side: One side - button_paste: Paste - button_project_menu: Easy MindMup - button_redo: Redo - button_remove_node: Remove node - button_show_links: Show links - button_undo: Undo - error_create: could not be created - error_delete: could not be deleted - error_update: could not be updated - errors: - not_subtaskable: Task "%{task_name}" cannot be subtask because of the setting - of its tracker - no_rest_api: REST API is disabled. Please enable it on Administration. - free: - button_upgrade: Get Full version - feature_coloring: Coloring nodes by property - feature_context_menu: Changing node's properties by context menu - feature_dnd_property: Changing node's properties by drag & drop - feature_filtering: Filtering nodes by property - header_not_available: Available only in Full version - button_hotkeys: Hotkeys - hotkeys: - info_mac_metakey: On Mac OSX, Ctrl and Cmd keys can be used for shortcuts marked - Ctrl below - some browsers prevent certain key bindings. So, for example, - if Cmd+Space does not work in your browser, try Ctrl+Space. - keyboard: - - title: Node manipulation - hotkeys: - - hotkey: Enter - info: Add Sibling - - hotkey: Shift+Enter - info: Add Sibling above or line break (when renaming node) - - hotkey: Tab or Insert - info: Add child - - hotkey: Shift+Tab - info: Insert parent - - hotkey: Space - info: Rename node - - hotkey: Shift+Space - info: Edit node data - - hotkey: Backspace or Delete - info: Remove node - - hotkey: Ctrl+Up/Down - info: Move node up/down - - title: Editing - hotkeys: - - hotkey: Ctrl+S - info: Save - - hotkey: Ctrl+X or C - info: Cut - - hotkey: Ctrl+C or Y - info: Copy - - hotkey: Ctrl+V or P - info: Paste - - hotkey: U or Ctrl+Z - info: Undo - - hotkey: R or Ctrl+Y or Ctrl+Shift+Z - info: Redo - - title: Selection - hotkeys: - - hotkey: Arrow Keys - info: Select the node up/down/left/right of the currently selected one - - hotkey: Shift + Arrow keys - info: Add node up/down/left/right to selection (useful to multi-select siblings) - - hotkey: "{" - info: Multi-select the current node and the entire subtree under it - - hotkey: "[" - info: Multi-select only the subtree under the current node (not the node - itself) - - hotkey: "=" - info: Multi-select all the siblings of the current node (that have the same - parent) - - hotkey: "." - info: Cancel multi-selection and select only the current node again - - hotkey: 1 - 9 - info: Select all nodes of a particular level (eg 1 selects all first level - nodes) - - title: Navigation and screen - hotkeys: - - hotkey: "/ or F" - info: Expand or collapse node (fold or unfold children) - - hotkey: Ctrl + or Z - info: Zoom in - - hotkey: Ctrl - or Shift Z - info: Zoom out - - hotkey: Esc, 0, Ctrl+0 - info: Reset map view - select root node and bring it to the center of the - screen - mouse: - - action: Move the map - gesture: click and drag the center node, click and drag the background or - scroll with trackpad/touchpad. - - action: Select a node - gesture: tap or click on it - - action: Select multiple nodes - gesture: Shift+click - - action: Reorder nodes - gesture: drag a node between its siblings, horizontally close to the position - of reordering. A black arrow point will show when reordering. - - action: Manually position a node - gesture: just drag a node until the arrow point for reordering isn't showing. - To force manual position even when the reorder arrow point is showing, hold - Shift while dragging. Please note that children of the root node can be - pulled in any direction, but lower level nodes can only be positioned in - the direction of its parent relative to the root. - - action: Rename a node - gesture: Double-click or double-tap it - - action: Show context menu with operations - gesture: 'Right click on a node (by mouse) or double-tap the background, or - long press a node: show (on touch devices)' - - action: Change node parent - gesture: drag and drop a node on another node (circular drops are not allowed, - so you can't drop a node on one of it's children or descendants) - - action: Open issue or project in separate window - gesture: Alt+click - title_key_shortcuts: Keyboard operations - title_mouse_shortcuts: Mouse and touch operations - title_shortcuts: Shortcuts - info_all_saved: Everything saved successfully - info_any_failed: 'Some of the requests failed:' - info_no_permission: You do not have necessary permissions to do that - warning_delete_node: Do you really want to delete node {{name}} and every of its descendants? - warning_delete_nodes: Do you really want to delete these nodes and every of their descendants? - label_color_by: Color by - label_go_to: Go to - label_hide_unused: Hide unused - label_or: or - last_state_modal: - label_differencies: Differencies on server - message_changed: have different attributes (browser => server) ({{changes}}) - message_missing: is missing from parent "{{from}}" - message_moved: is child of "{{to}}", not "{{from}}" - message_present: is present as child of "{{to}}" - text_reload_appeal: Do you want reload state from server? - title: Last client state of Mind map is different from server state - reload_modal: - label_errors: Errors - text_reload_appeal: Do you want to ignore unsaved items and reload data from - server? - title: Mind map failed to save properly - stored_modal: - text_load_appeal: Do you want to loaded it? Or you want to load fresh state from the server? - title: Unsaved local version have been found - button_local: Local version - button_server: Server version - save_info: - loaded: Loaded - saved: Saved - autosaved: Autosaved - at: at - label_save_progress: Please wait, all entities are being saved - label_show_unused: Show unused - warning_not_saved: is not properly saved - title_node_changed: This node have been changed and will be saved - label_less: Less diff --git a/plugins/easy_mindmup/config/routes.rb b/plugins/easy_mindmup/config/routes.rb deleted file mode 100644 index 69ec9c2..0000000 --- a/plugins/easy_mindmup/config/routes.rb +++ /dev/null @@ -1,3 +0,0 @@ -resources :projects do - put 'easy_mindmup_update_layout', to: 'easy_mindmup#update_layout', as: 'easy_mindmup_update_layout' -end diff --git a/plugins/easy_mindmup/init.rb b/plugins/easy_mindmup/init.rb deleted file mode 100644 index a6b7bd9..0000000 --- a/plugins/easy_mindmup/init.rb +++ /dev/null @@ -1,17 +0,0 @@ -Redmine::Plugin.register :easy_mindmup do - name 'Easy MindMup plugin' - author 'Easy Software Ltd' - description 'Mind map view based on MindMup' - version '1.0' - url 'www.easyredmine.com' - author_url 'www.easysoftware.cz' - - if Redmine::Plugin.installed?(:easy_extensions) - visible false - should_be_disabled false - end -end - -unless Redmine::Plugin.installed?(:easy_extensions) - require_relative 'after_init' -end diff --git a/plugins/easy_mindmup/lib/easy_mindmup/easy_mindmup.rb b/plugins/easy_mindmup/lib/easy_mindmup/easy_mindmup.rb deleted file mode 100644 index e767709..0000000 --- a/plugins/easy_mindmup/lib/easy_mindmup/easy_mindmup.rb +++ /dev/null @@ -1,7 +0,0 @@ -module EasyMindmup - - def self.easy_extensions? - Redmine::Plugin.installed?(:easy_extensions) - end - -end diff --git a/plugins/easy_mindmup/spec/controllers/easy_wbs_controller_spec.rb b/plugins/easy_mindmup/spec/controllers/easy_wbs_controller_spec.rb deleted file mode 100644 index e09343c..0000000 --- a/plugins/easy_mindmup/spec/controllers/easy_wbs_controller_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -# require File.expand_path('../../../../easyproject/easy_plugins/easy_extensions/test/spec/spec_helper', __FILE__) - -# RSpec.describe EasyWbsController, logged: :admin do - -# around(:each) do |example| -# with_settings(rest_api_enabled: 1) { example.run } -# end - -# context 'rest api' do -# let(:project) { FactoryGirl.create(:project, add_modules: ['easy_wbs']) } - -# it 'enabled' do -# get :index, project_id: project -# expect(response).to be_success -# end -# end - -# end - diff --git a/plugins/easy_mindmup/spec/features/wbs_tree_spec.rb b/plugins/easy_mindmup/spec/features/wbs_tree_spec.rb deleted file mode 100644 index 9e95f96..0000000 --- a/plugins/easy_mindmup/spec/features/wbs_tree_spec.rb +++ /dev/null @@ -1,74 +0,0 @@ -# require File.expand_path('../../../../easyproject/easy_plugins/easy_extensions/test/spec/spec_helper', __FILE__) - -# RSpec.feature 'tree', logged: :admin, js: true do -# let(:superproject) { -# FactoryGirl.create(:project, add_modules: ['easy_wbs'], number_of_issues: 3) -# } -# let(:subproject) { -# FactoryGirl.create(:project, add_modules: ['easy_wbs'], number_of_issues: 0,parent_id:superproject.id) -# } -# let(:project_issues) { -# FactoryGirl.create_list(:issue, 3, :project_id => superproject.id) -# } -# let(:subproject_issues) { -# FactoryGirl.create_list(:issue, 3, :project_id => subproject.id) -# } -# let(:sub_issues) { -# FactoryGirl.create_list(:issue, 3, :parent_issue_id => subproject_issues[0].id, :project_id => subproject.id) -# } -# let(:sub_sub_issues) { -# FactoryGirl.create_list(:issue, 3, :parent_issue_id => sub_issues[0].id, :project_id => subproject.id) -# } - -# around(:each) do |example| -# with_settings(rest_api_enabled: 1) { example.run } -# end -# it 'should show project items in correct tree' do -# superproject -# project_issues -# subproject_issues -# sub_issues -# sub_sub_issues -# visit project_easy_wbs_index_path(superproject) -# wait_for_ajax - -# expect(page).to have_css('#container') -# container=page.find('#container') -# #puts evaluate_script('ysy.loader.sourceData;').to_json -# expect(container).to have_text(superproject.name) -# project_issues.each do |issue| -# expect(container).to have_text(issue.subject) -# end -# expect(container).to have_text(subproject.name) -# subproject_issues.each do |issue| -# expect(container).not_to have_text(issue.subject) -# end - -# node = container.find('span', text: subproject.name).find(:xpath, '..') -# node.find('.mapjs-collapsor').click -# subproject_issues.each do |issue| -# expect(container).to have_text(issue.subject) -# end -# sub_issues.each do |issue| -# expect(container).not_to have_text(issue.subject) -# end - -# sleep(0.5) -# node = container.find('span', text: subproject_issues[0].subject).find(:xpath, '..') -# node.find('.mapjs-collapsor').click -# sub_issues.each do |issue| -# expect(container).to have_text(issue.subject) -# end -# sub_sub_issues.each do |issue| -# expect(container).not_to have_text(issue.subject) -# end - -# sleep(0.5) -# node = container.find('span', text: sub_issues[0].subject).find(:xpath, '..') -# execute_script("ysy.mapjs.getModel().selectNode(#{node[:id].split('_')[1]})") -# node.find('.mapjs-collapsor').click -# sub_sub_issues.each do |issue| -# expect(container).to have_text(issue.subject) -# end -# end -# end diff --git a/plugins/easy_wbs/Gemfile b/plugins/easy_wbs/Gemfile deleted file mode 100644 index 772940c..0000000 --- a/plugins/easy_wbs/Gemfile +++ /dev/null @@ -1 +0,0 @@ -gem 'redmine_extensions' unless Dir.exist?(File.expand_path('../../easyproject', __FILE__)) diff --git a/plugins/easy_wbs/README.rdoc b/plugins/easy_wbs/README.rdoc deleted file mode 100644 index f394e67..0000000 --- a/plugins/easy_wbs/README.rdoc +++ /dev/null @@ -1,3 +0,0 @@ -= easy_wbs - -Description goes here diff --git a/plugins/easy_wbs/after_init.rb b/plugins/easy_wbs/after_init.rb deleted file mode 100644 index 51781c2..0000000 --- a/plugins/easy_wbs/after_init.rb +++ /dev/null @@ -1,33 +0,0 @@ -app_dir = File.join(File.dirname(__FILE__), 'app') -lib_dir = File.join(File.dirname(__FILE__), 'lib', 'easy_wbs') - -# Redmine patches -patch_path = File.join(lib_dir, 'redmine_patch', '**', '*.rb') -Dir.glob(patch_path).each do |file| - require file -end - -if Redmine::Plugin.installed?(:easy_extensions) - ActiveSupport::Dependencies.autoload_paths << File.join(app_dir, 'models', 'easy_queries') - EasyQuery.register(EasyWbsEasyIssueQuery) -end - -Redmine::MenuManager.map :project_menu do |menu| - menu.push(:easy_wbs, { controller: 'easy_wbs', action: 'index'}, - param: :project_id, - caption: :'easy_wbs.button_project_menu') -end - -Redmine::AccessControl.map do |map| - map.project_module :easy_wbs do |pmap| - pmap.permission :view_easy_wbs, { easy_wbs: [:index] }, read: true - pmap.permission :edit_easy_wbs, { easy_wbs: [:create, :update, :destroy, :update_layout] } - end -end - -RedmineExtensions::Reloader.to_prepare do - require 'easy_wbs/hooks' - require 'easy_wbs/easy_wbs' - - RedmineExtensions::EasySettingPresenter.boolean_keys << :easy_wbs_no_sidebar -end diff --git a/plugins/easy_wbs/app/controllers/easy_wbs_controller.rb b/plugins/easy_wbs/app/controllers/easy_wbs_controller.rb deleted file mode 100644 index bf12aea..0000000 --- a/plugins/easy_wbs/app/controllers/easy_wbs_controller.rb +++ /dev/null @@ -1,108 +0,0 @@ -class EasyWbsController < ApplicationController - accept_api_auth :index, :update_layout - menu_item :easy_wbs - - before_action :check_rest_api_enabled, only: [:index, :update_layout] - before_action :find_project_by_project_id, if: proc { params[:project_id].present? } - before_action :authorize, if: proc { @project.present? } - before_action :authorize_global, if: proc { @project.nil? } - - helper :easy_mindmup - - include_query_helpers - - def index - retrieve_query - - respond_to do |format| - format.html { render(layout: !request.xhr?) } - format.api do - load_issues - load_projects - load_trackers - load_users - load_versions - load_relations - end - end - end - - private - - def check_rest_api_enabled - if Setting.rest_api_enabled != '1' - render_error message: l('easy_mindmup.errors.no_rest_api') - return false - end - end - - def query_class - easy_extensions? ? EasyWbsEasyIssueQuery : EasyWbs::IssueQuery - end - - def retrieve_query - if params[:query_id].present? - cond = 'project_id IS NULL' - - if @project - cond << " OR project_id = #{@project.id}" - - # In Easy Project query can be defined for subprojects - if !@project.root? && EasyWbs.easy_extensions? - ancestors = @project.ancestors.select(:id).to_sql - cond << " OR (is_for_subprojects = #{Project.connection.quoted_true} AND project_id IN (#{ancestors}))" - end - end - - @query = query_class.where(cond).find_by(id: params[:query_id]) - raise ActiveRecord::RecordNotFound if @query.nil? - raise Unauthorized unless @query.visible? - - @query.project = @project - sort_clear - else - @query = query_class.new(name: '_') - @query.project = @project - @query.from_params(params) - end - end - - def load_issues - @issues = @query.entities(order: "#{Issue.table_name}.id") - @issue_ids = @issues.map(&:id) - - if @issues.blank? - return - end - - # All ancestors conditions - tree_conditions = [] - @issues.each do |issue| - tree_conditions << "(root_id = #{issue.root_id} AND lft < #{issue.lft} AND rgt > #{issue.rgt})" - end - tree_conditions = tree_conditions.join(' OR ') - - @missing_parent_issues = Issue.where(tree_conditions).where.not(id: @issue_ids) - end - - def load_projects - @projects = @project.self_and_descendants.where.not(status: [Project::STATUS_CLOSED, Project::STATUS_ARCHIVED]) - end - - def load_trackers - @trackers = Setting.display_subprojects_issues? ? @project.rolled_up_trackers : @project.trackers - end - - def load_users - @users = @project.assignable_users_including_all_subprojects - end - - def load_versions - @versions = @projects.flat_map(&:shared_versions).uniq - end - - def load_relations - @relations = IssueRelation.where(issue_from_id: @issue_ids, issue_to_id: @issue_ids) - end - -end diff --git a/plugins/easy_wbs/app/helpers/easy_wbs_helper.rb b/plugins/easy_wbs/app/helpers/easy_wbs_helper.rb deleted file mode 100644 index 82b81a6..0000000 --- a/plugins/easy_wbs/app/helpers/easy_wbs_helper.rb +++ /dev/null @@ -1,59 +0,0 @@ -module EasyWbsHelper - - TRANSLATION_KEYS = [ - 'field_name', - 'label_attribute_plural', - 'label_description', - 'title_user_detail', - 'easy_wbs.label_basic_data', - 'easy_wbs.label_additional_data', - 'label_comment_plural', - 'field_attachments', - 'easy_wbs.label_all', - 'label_others', - 'description_notes', - 'easy_wbs.button_remove_comment', - 'easy_wbs.button_add_comment', - 'easy_wbs.text_issue_not_saved', - 'sidebar_project_members', - 'label_issue_watchers', - 'label_issue_automatic_recalculate_attributes', - 'easy_wbs.button_add_child', - 'heading_easy_wbs_issues', - 'label_preview', - 'title_inline_editable', - 'easy_wbs.name_an_entity_first' - ] - - def api_render_issues(api, issues, filtered_out: false) - issues.each do |issue| - api.issue do - api.id issue.id - api.subject issue.subject - api.parent_issue_id issue.parent_issue_id - api.project_id issue.project_id - api.assigned_to_id issue.assigned_to_id - api.tracker_id issue.tracker_id - api.status_id issue.status_id - api.priority_id issue.priority_id - api.done_ratio issue.done_ratio - api.activity_id issue.try(:activity_id) - api.fixed_version_id issue.fixed_version_id - api.filtered_out filtered_out - end - end - end - - def wbs_url_to_project(project) - if EasyWbs.easy_extensions? - url_to_project(project) - else - project_path(project) - end - end - - def wbs_translations - TRANSLATION_KEYS.map{|k| [k, l(k)] }.to_h - end - -end diff --git a/plugins/easy_wbs/app/models/easy_wbs/issue_query.rb b/plugins/easy_wbs/app/models/easy_wbs/issue_query.rb deleted file mode 100644 index 62820fd..0000000 --- a/plugins/easy_wbs/app/models/easy_wbs/issue_query.rb +++ /dev/null @@ -1,51 +0,0 @@ -module EasyWbs - class IssueQuery < ::IssueQuery - - def initialize(*args) - super - self.filters = { 'status_id' => { operator: 'o', values: ['']} } - end - - def to_partial_path - 'easy_wbs/easy_queries/show' - end - - def from_params(params) - build_from_params(params) - end - - def to_params - params = { set_filter: 1, type: self.class.name, f: [], op: {}, v: {} } - - filters.each do |filter_name, opts| - params[:f] << filter_name - params[:op][filter_name] = opts[:operator] - params[:v][filter_name] = opts[:values] - end - - params[:c] = column_names - params - end - - def entity - Issue - end - - def entity_scope - scope = Issue.visible.preload(:project) - if Project.column_names.include? 'easy_baseline_for_id' - scope = scope.where(Project.table_name => {easy_baseline_for_id: nil}) - end - scope - end - - def create_entity_scope(options={}) - entity_scope.includes(options[:includes]).references(options[:includes]).preload(options[:preload]).where(statement) - end - - def entities(options={}) - create_entity_scope(options).order(options[:order]) - end - - end -end diff --git a/plugins/easy_wbs/app/views/easy_query_settings/by_query/_easy_wbs_easy_issue_query_settings.html.erb b/plugins/easy_wbs/app/views/easy_query_settings/by_query/_easy_wbs_easy_issue_query_settings.html.erb deleted file mode 100644 index d2f1e08..0000000 --- a/plugins/easy_wbs/app/views/easy_query_settings/by_query/_easy_wbs_easy_issue_query_settings.html.erb +++ /dev/null @@ -1,5 +0,0 @@ -<% # A little hack %> - -<script> - $("#custom_formatting, #filters_settings, .easy_query_additional_options, .show_avatars").remove(); -</script> diff --git a/plugins/easy_wbs/app/views/easy_wbs/_includes.html.erb b/plugins/easy_wbs/app/views/easy_wbs/_includes.html.erb deleted file mode 100644 index 321f373..0000000 --- a/plugins/easy_wbs/app/views/easy_wbs/_includes.html.erb +++ /dev/null @@ -1,14 +0,0 @@ -<%= stylesheet_link_tag('easy_wbs', plugin: 'easy_wbs', media: 'all') %> -<%= javascript_include_tag( - :wbs_main, - :wbs_context_menu, - :wbs_loader, - :wbs_node_patch, - :wbs_saver, - :wbs_modals, - :wbs_styles, - :wbs_validator, - plugin: 'easy_wbs' - -) %> -<% include_galereya_headers_tags if defined?(include_galereya_headers_tags) %> diff --git a/plugins/easy_wbs/app/views/easy_wbs/_js_prepare.html.erb b/plugins/easy_wbs/app/views/easy_wbs/_js_prepare.html.erb deleted file mode 100644 index c4095ed..0000000 --- a/plugins/easy_wbs/app/views/easy_wbs/_js_prepare.html.erb +++ /dev/null @@ -1,57 +0,0 @@ -<script type="text/javascript"> - window.easyMindMupSetting = $.extend(true, window.easyMindMupSetting, <%= { - mindMupId: 'WBS classic', - menuDiv: '#wbs_menu', - projectID: @project.id, - noSave: (params[:nosave] ? true : false), - paths: { - issuePage: issue_path(':issueID'), - projectPage: project_path(':projectID'), - issuePOST: issues_path(format: 'json', key: User.current.api_key), - issuePUT: issue_path(':issueID', format: 'json', key: User.current.api_key), - issueDELETE: issue_path(':issueID', format: 'json', key: User.current.api_key), - projectPUT: project_path(':projectID', format: 'json', key: User.current.api_key), - newIssuePath: new_issue_path(key: User.current.api_key), - editIssuePath: edit_issue_path(':issueID', key: User.current.api_key), - updateLayout: project_easy_mindmup_update_layout_path(@project, format: 'json', key: User.current.api_key) - }, - labels: { - free: { - textNotAvailable: l('easy_wbs.free.text_not_available'), - buttonUpgradeHref: l('easy_wbs.free.button_upgrade_href') - }, - errors:{ - not_subtaskable: l('easy_wbs.errors.not_subtaskable'), - cannotBeEmpty: l('activerecord.errors.messages.empty') - }, - types:{ - project: l(:field_project), - issue: l(:field_issue) - }, - modals: { - new_issue: l(:label_issue_new), - edit_issue: l('easy_wbs.edit_issue') - }, - context: { - tracker: l(:field_tracker), - priority: l(:field_priority), - status: l(:field_status), - assignee: l(:field_assigned_to), - doneRatio: l(:field_done_ratio) - }, - links: { - start_to_start: l(:label_start_to_start), - start_to_finish: l(:label_start_to_finish), - finish_to_finish: l(:label_finish_to_finish), - precedes: l(:label_precedes), - relates: l(:label_relates_to), - copied_to: l(:label_copied_to), - blocks: l(:label_blocks), - duplicates: l(:label_duplicates) - } - }, - templates: { - }, - translations: wbs_translations - }.to_json.html_safe %>); -</script> diff --git a/plugins/easy_wbs/app/views/easy_wbs/_test_includes.html.erb b/plugins/easy_wbs/app/views/easy_wbs/_test_includes.html.erb deleted file mode 100644 index 54a36eb..0000000 --- a/plugins/easy_wbs/app/views/easy_wbs/_test_includes.html.erb +++ /dev/null @@ -1,6 +0,0 @@ -<%= javascript_include_tag( - 'tests/saving_test', - 'tests/printing', - 'tests/parse_form', - plugin: 'easy_wbs' - ) %> diff --git a/plugins/easy_wbs/app/views/easy_wbs/easy_queries/_show.html.erb b/plugins/easy_wbs/app/views/easy_wbs/easy_queries/_show.html.erb deleted file mode 100644 index 0206dad..0000000 --- a/plugins/easy_wbs/app/views/easy_wbs/easy_queries/_show.html.erb +++ /dev/null @@ -1,19 +0,0 @@ -<div class="content-title"><%= title(easy_query_name) %></div> - -<%= form_tag(project_easy_wbs_index_path(@project), method: :get, id: 'query_form') do %> - <div id="query_form_with_buttons" class="hide-when-print"> - <%= hidden_field_tag 'set_filter', '1' %> - <div id="query_form_content"> - <fieldset id="filters" class="collapsible collapsed"> - <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend> - <div style="display: none;"> - <%= render 'queries/filters', query: @query %> - </div> - </fieldset> - </div> - <p class="buttons"> - <%= link_to_function l(:button_apply), '$("#query_form").submit()', class: 'icon icon-checked' %> - <%= link_to l(:button_clear), { set_filter: 1, project_id: @project }, class: 'icon icon-reload' %> - </p> - </div> -<% end %> diff --git a/plugins/easy_wbs/app/views/easy_wbs/index.api.rsb b/plugins/easy_wbs/app/views/easy_wbs/index.api.rsb deleted file mode 100644 index 4540602..0000000 --- a/plugins/easy_wbs/app/views/easy_wbs/index.api.rsb +++ /dev/null @@ -1,91 +0,0 @@ -api.easy_wbs_data do - - api.layout EasySetting.value(:easy_wbs_layout, @project) - - api.array :projects do - @projects.each do |project| - api.project do - api.id project.id - api.name project.name - api.parent_id project.parent_id - api.default_url wbs_url_to_project(project) - end - end - end - - api.array :issues do - api_render_issues(api, @issues) - api_render_issues(api, @missing_parent_issues, filtered_out: true) if @missing_parent_issues - end - - api.array :relations do - @relations.each do |rel| - api.relation do - api.id rel.id - api.source_id rel.issue_from_id - api.target_id rel.issue_to_id - api.type rel.relation_type - end - end - end - - api.array :trackers do - @trackers.each do |tracker| - api.tracker do - api.id tracker.id - api.name tracker.name - api.subtaskable tracker.core_fields.include?('parent_issue_id') - end - end - end - - api.array :users do - @users.each do |user| - api.user do - api.id user.id - api.name user.name - api.avatar_url mindmup_avatar_url(user) - end - end - end - if defined?(EasyExtensions) - api.array :priorities do - IssuePriority.active.sorted.each do |priority| - api.priority do - api.id priority.id - api.name priority.name - api.scheme priority.easy_color_scheme - end - end - end - else - api.array :priorities do - IssuePriority.active.sorted.each do |priority| - api.priority do - api.id priority.id - api.name priority.name - api.is_default priority.is_default - end - end - end - end - - api.array :statuses do - IssueStatus.sorted.each do |status| - api.status do - api.id status.id - api.name status.name - end - end - end - - api.array :versions do - @versions.each do |version| - api.version do - api.id version.id - api.name version.name - end - end - end - -end diff --git a/plugins/easy_wbs/app/views/easy_wbs/index.html.erb b/plugins/easy_wbs/app/views/easy_wbs/index.html.erb deleted file mode 100644 index 79c6c54..0000000 --- a/plugins/easy_wbs/app/views/easy_wbs/index.html.erb +++ /dev/null @@ -1,157 +0,0 @@ -<% - data_path_params = @query.to_params.merge(key: User.current.api_key, format: 'json') - data_path = project_easy_wbs_index_path(@project, data_path_params) -%> - -<div id="easy_wbs" class="<%= defined?(EasyExtensions) ? 'easy' : 'redmine' %> - wbs clear"> - - <%= render @query, easy_query_name: l(:heading_easy_wbs_issues), - wrapper_class: '', - options: { show_custom_formatting: false, show_free_search: false } %> - - <div id="wbs_cont" class="clear mindmup-cont"> - <div id="wbs_menu" class="mindmup__menu"> - <div class="push-left"> - <div class="mindmup__legend-container"> - <div class="mindmup__legend-header"> - <label class=mindmup__legend-label"><%= l(:button_legend, :scope => [:easy_wbs]) %>: - <select class="mindmup-color-select" style="width:150px"> - <option value="tracker" selected><%= l(:field_tracker) %></option> - <option value="progress"><%= l(:field_done_ratio) %></option> - <option value="priority"><%= l(:field_priority) %></option> - <option value="status"><%= l(:field_status) %></option> - <option value="assignee"><%= l(:field_assigned_to) %></option> - <option value="milestone"><%= l(:field_version) %></option> - </select> - </label> - <div class="mindmup__legend-toggler legend-toggler push-right"> - <a href="javascript:void(0)" class="easy-mindmup__icon easy-mindmup__icon--legend mindmup__legend-trigger"><span class="tip"><%= l(:button_legend, :scope => [:easy_wbs]) %></span></a> - </div> - </div> - <div class="mindmup-legend"></div> - </div> - <div class="mindmup__menu-group mindmup__menu-group--tooltiped mindmup__menu-item mindmup__menu-group-display"> - <a href="javascript:void(0)" class="button button-2 easy-mindmup__icon easy-mindmup__icon--display"><span><%= l(:button_display, :scope => [:easy_wbs]) %></span></a> - <ul> - <li class="show-links-toggler"> - <a href="javascript:void(0)" class="easy-mindmup__icon easy-mindmup__icon--links"><%= l(:button_show_links, :scope => [:easy_wbs]) %></a> - </li> - <li class="all-icon-toggler"> - <a href="javascript:void(0)" class="easy-mindmup__icon easy-mindmup__icon--icons"><%= l(:button_all_icons, :scope => [:easy_wbs]) %></a> - </li> - <li class="toggleOneSide"> - <a href="javascript:void(0)" class="easy-mindmup__icon easy-mindmup__icon--one_side"><%= l(:button_one_side, :scope => [:easy_wbs]) %></a> - </li> - <li class="mindmup-expand-all"> - <a href="javascript:void(0)" class="mindmup-button-expand-all easy-mindmup__icon easy-mindmup__icon--expand"><%= l(:button_expand_all, :scope => [:easy_wbs]) %></a> - <a href="javascript:void(0)" class="mindmup-button-collapse-all easy-mindmup__icon easy-mindmup__icon--collapse"><%= l(:button_collapse_all, :scope => [:easy_wbs]) %></a> - </li> - <li class="mindmup__legend-cont-toggler"> - <a href="javascript:void(0)" class="easy-mindmup__icon easy-mindmup__icon--legend_hide"><%= l(:button_legend, :scope => [:easy_mindmup]) %></a> - </li> - </ul> - </div> - </div> - <% if defined?(EasyExtensions) && !EasySetting.value(:easy_wbs_no_sidebar)%> - <script type="application/javascript"> - window.easyDartLoaders = window.easyDartLoaders || []; - document.write('<ng-root-' + window.easyDartLoaders.length + ' class="mindmup-sidebar__root"></ng-root-' + window.easyDartLoaders.length + '>'); - window.easyDartLoaders.push(<%= { - subtype: :wbs, - id:'WBS classic', - plugin: 'mindmupSidebar', - data: { - lang: wbs_translations, - paths: { - # home_path: (home_path=='/')?home_path:(home_path+'/'), - home_path: home_path, - issue_path: issue_path('__issueId',key: User.current.api_key,format: :json), - project_path: project_path('__projectId',key: User.current.api_key,format: :json), - easy_issue_form_fields: url_for(controller: :easy_issues, action: :form_fields,id: '__issueId',format: :json,project_id: nil,key: User.current.api_key), - easy_issue_project_form_fields: url_for(controller: :easy_issues, action: :form_fields,format: :json,project_id: '__projectId',key: User.current.api_key), - user_json: user_path('__userId',key: User.current.api_key,format: :json), - user_html: user_path('__userId'), - user_profile_html:profile_user_path('__userId') - } - }.to_json.to_s - # there should be String value in key data - it is faster to iterop with dart part - }.to_json.html_safe %>); - </script> - <% end %> - <div class="mindmup__menu-group mindmup__menu-group--sizing mindmup__menu-item"> - <ul> - <li class="scaleUp"> - <a href="javascript:void(0)" class="easy-mindmup__icon easy-mindmup__icon--zoom_in"></a> - </li> - <li class="resetView"> - <a href="javascript:void(0)" class="easy-mindmup__icon easy-mindmup__icon--refresh_view"></a> - </li> - <li class="scaleDown"> - <a href="javascript:void(0)" class="easy-mindmup__icon easy-mindmup__icon--zoom_out"></a> - </li> - </ul> - </div> - <div class="push-right"> - <div class="mindmup__menu-group mindmup__menu-group--tooltiped mindmup__menu-item"> - <a href="javascript:void(0)" class="button button-2 easy-mindmup__icon easy-mindmup__icon--settings"><span><%= l(:button_actions, :scope => [:easy_wbs]) %></span></a> - <ul> - <li class="undo mindmup-button-undo"> - <a href="javascript:void(0)" class="easy-mindmup__icon easy-mindmup__icon--undo"><%= l(:button_undo, :scope => [:easy_wbs]) %></a> - </li> - <li class="redo mindmup-button-redo"> - <a href="javascript:void(0)" class="easy-mindmup__icon easy-mindmup__icon--redo"><%= l(:button_redo, :scope => [:easy_wbs]) %></a> - </li> - <li class="mindmup-button-print"> - <a href="javascript:void(0)" class="easy-mindmup__icon easy-mindmup__icon--print"><%= l(:button_export) %></a> - </li> - <li class="cut"> - <a href="javascript:void(0)" class="easy-mindmup__icon easy-mindmup__icon--cut"><%= l(:button_cut, :scope => [:easy_wbs]) %></a> - </li> - <li class="copy"> - <a href="javascript:void(0)" class="easy-mindmup__icon easy-mindmup__icon--copy"><%= l(:button_copy) %></a> - </li> - <li class="paste"> - <a href="javascript:void(0)" class="easy-mindmup__icon easy-mindmup__icon--paste"><%= l(:button_paste, :scope => [:easy_wbs]) %></a> - </li> - </ul> - </div> - <div class="mindmup__menu-item save mindmup__menu-save"> - <a href="javascript:void(0)" class="button button-positive easy-mindmup__icon easy-mindmup__icon--save"><span><%= l(:button_save) %></span></a> - <div class="mindmup__menu-save--tooltip"></div> - </div> - </div> - </div> - - <div id="container" class="mindmup-container" style="min-height: 600px;width: 100%;"> - <div class="link-edit-widget"> - <div class="link-edit-type-actual"></div> - </div> - <%= render 'easy_mindmup/hotkeys' %> - </div> - </div> -</div> - -<% heads_for_wiki_formatter %> -<%= content_for :header_tags do %> - <%= render 'easy_mindmup/includes' %> - <%= render 'easy_mindmup/js_prepare' %> - <%= render 'easy_wbs/js_prepare' %> - <%= render 'easy_wbs/includes' %> - <%= render 'easy_wbs/test_includes' %> - - <script type="application/javascript"> - window.easyMindMupSetting.paths.data = "<%= data_path.html_safe %>"; - </script> - - <script type="text/javascript"> - (function () { - var settings = window.easyMindMupSetting; - delete window.easyMindMupSetting; - $(document).ready(function () { - new window.easyMindMupClasses.WbsMain(settings); - }) - })(); - </script> -<% end %> - diff --git a/plugins/easy_wbs/assets/images/person.gif b/plugins/easy_wbs/assets/images/person.gif deleted file mode 100644 index a0e72aff4e540308d048fd10a07f48a64d32b654..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 zcmZ?wbhEHb6l4%#c+LO<jEsy-Oiawo%q%P{tgNhTY;5f8>>L~%oSd9oTwL7T+&nxy zyu7@8e0==;`~m_3f`WoVLPEmA!XhFfqN1W=Vq)Ur;t~=Pl9G~AQc}{=(lRnKva+&r za&q$W@(KzHii(O#N=nMg$|@=<s;a7LYHI50>KYmvnwpwgT3XuL+B!Nqy1Kf0dV2c$ z`UVCDhK7blMn=ZQ#wI2vrlzK5W@hH*<`xzfmX?-QR#w*5);2aawzjr*c6Rpm_6`mX zj*gB_PEO9w&Mq!4uCA_bZf@@G?j9Z<o}QjwUS8hb-abA)zP`SGet!P`{s932fq{WR zK|#U6!66|bp`oE+VPWCn;SmuLk&%&6QBl#+(J?VGv9YmnadGkS@d*hDiHV6xNlD4c z$tfu*si~=HX=&-{=@}UrnVFecSy|cH**Q5mxw*M{d3pKy`2__9g@uJhMMcHM#U&*r zrKP21Wo6~%<rNhbm6erMRaMp1)ipIWwY9Z%b#?Xi^$iUTjg5^>O-;?s%`Gi0t*xzX zZEfxC?HwH*ot>RsU0vPX-90@$y}iACeSQ7?{Szikm^g9bq)C$|Po6ww%9N>7r%szT zZTj@-GiJ<~IdkT$S+i!(o;_#IoVj!7&YL%H{`~n17A#n}aN(jwixw|lykyCerAwDC zTefWZ^5rX5tXR2n<*HSyR<B;YX3d(lYuBz@w{HFV^&2*9*tl`yrcIkRZ{ECR%a*NM zw{F|EZTt4^J9g~YxpU{PUAuPg-o0nfp1phb?%TI-|Ni|44jedm@Zh0ChYlY;eB{WH zqeqV(J9g~&@#7~>oH%*%<f&7qPM<z~=FFM1XV0EHckcZ8^A|2$xOnm6rAwDCU%q_h z%9X2EuU@-$?fUiWH*VaxdGqG2TeoiCzJ2G;ox6AM-n)12{{8z89z1yX@ZqCJj~+jM z{N%}#r%#_gd-m-4^XD&Kym<NY<*Qe(UcY|*=FOY8Z{NOq_wN1s_a8od`1tYTr%#_g zfByXC%a^ZTzkd7n?fdudKYsl9`Sa(mU%!6;{{83ApTB?q{`>du|NsArKUo;L82&Tp zfN}yTPcU$JF#P9~`LVv+v5A9SDyG6<p;H^LtW(O14G)fVaOfwUvDmoiK)0NH8K-B^ lBabF&U8xi!1J0xU0<L;3lEO=l&9*3hb?4+}^>Ymj)&PIyq38er diff --git a/plugins/easy_wbs/assets/javascripts/gateway.js b/plugins/easy_wbs/assets/javascripts/gateway.js deleted file mode 100644 index f98d458..0000000 --- a/plugins/easy_wbs/assets/javascripts/gateway.js +++ /dev/null @@ -1,99 +0,0 @@ -/** - * Created by hosekp on 11/15/16. - */ -(function () { - /** - * Helper class - contains Ajax requests - * @param ysy - * @constructor - */ - function Gateway(ysy) { - this.ysy = ysy; - } - - /** - * @callback GatewayCallback - * @param {Object} response - */ - /** - * - * @param {String} urlTemplate - * @param {Object} obj - * @param {GatewayCallback} callback - * @param {GatewayCallback} fail - */ - Gateway.prototype.polymorficGet = function (urlTemplate, obj, callback, fail) { - if (!urlTemplate) return; - var url = urlTemplate.replace(":issueID", obj.issueID); - $.get(url, obj) - .done(callback) - .fail(fail); - }; - /** - * - * @param {String} urlTemplate - * @param {Object} obj - * @param {GatewayCallback} callback - * @param {GatewayCallback} fail - */ - Gateway.prototype.polymorficGetJSON = function (urlTemplate, obj, callback, fail) { - if (!urlTemplate) return; - var url = Mustache.render(urlTemplate, $.extend(this.getBasicParams(), obj)); - $.getJSON(url, obj) - .done(callback) - .fail(fail); - }; - /** - * - * @param {String} urlTemplate - * @param {Object} obj - * @param {Object} data - * @param {GatewayCallback} callback - * @param {GatewayCallback} fail - */ - Gateway.prototype.polymorficPost = function (urlTemplate, obj, data, callback, fail) { - if (!urlTemplate) return; - var url = Mustache.render(urlTemplate, $.extend(this.getBasicParams(), obj)); - $.ajax({ - url: url, - type: "POST", - data: data, - dataType: "json" - }).done(callback).fail(fail); - }; - /** - * - * @param {String} urlTemplate - * @param {Object} obj - * @param {Object} data - * @param {GatewayCallback} callback - * @param {GatewayCallback} fail - */ - Gateway.prototype.polymorficPut = function (urlTemplate, obj, data, callback, fail) { - if (!urlTemplate) return; - var url = Mustache.render(urlTemplate, $.extend(this.getBasicParams(), obj)); - $.ajax({ - url: url, - type: "PUT", - data: JSON.stringify(data), - contentType: "application/json", - dataType: "text" - }).done(callback).fail(fail); - }; - /** - * - * @param {String} urlTemplate - * @param {Object} obj - * @param {GatewayCallback} callback - * @param {GatewayCallback} fail - */ - Gateway.prototype.polymorficDelete = function (urlTemplate, obj, callback, fail) { - if (!urlTemplate) return; - var url = Mustache.render(urlTemplate, $.extend(this.getBasicParams(), obj)); - $.ajax({ - url: url, - type: "DELETE", - dataType: "json" - }).done(callback).fail(fail); - } -})(); diff --git a/plugins/easy_wbs/assets/javascripts/tests/idea_diff.js b/plugins/easy_wbs/assets/javascripts/tests/idea_diff.js deleted file mode 100644 index 2570ac4..0000000 --- a/plugins/easy_wbs/assets/javascripts/tests/idea_diff.js +++ /dev/null @@ -1,102 +0,0 @@ -ysy.wbs = ysy.wbs || {}; -ysy.wbs.test = ysy.wbs.test || {}; -ysy.wbs.test.ideaDiff = function () { - var idea1 = {id: 0, attr: {data: {id: 0}}}; - var idea2 = {id: 0, attr: {data: {id: 0}}}; - - var recursiveBuilder = function (idea1, idea2, level) { - if (Math.random() < 0.5 * (level - 1)) return; // leaves - var count = Math.ceil(Math.random() * 7); - idea1.ideas = {}; - idea2.ideas = {}; - for (var i = 0; i < count; i++) { - var id = Math.ceil(Math.random() * 10000); - var child1 = { - id: id, - title: "Task " + id, - attr: { - data: { - id: id - } - } - }; - var child2 = { - id: child1.id, - title: "Task " + child1.attr.data.id, - attr: { - data: { - id: child1.attr.data.id - } - } - }; - var rank = 0; - while (rank === 0 || idea1.ideas[rank]) { - rank = Math.ceil(Math.random() * count * 2); - } - idea1.ideas[rank] = child1; - rank = 0; - while (rank === 0 || idea2.ideas[rank]) { - rank = Math.ceil(Math.random() * count * 2); - } - idea2.ideas[rank] = child2; - recursiveBuilder(child1, child2, level + 1); - } - }; - - recursiveBuilder(idea1, idea2, 1); - return {idea1: idea1, idea2: idea2}; - // console.log(JSON.stringify([idea1,idea2])); - // console.log(JSON.stringify(ysy.storage.lastState.compareIdea(idea1,"structure",idea2))); -}; -ysy.wbs.test.scramble = function (idea) { - var possibleParents = []; - ysy.util.traverse(idea, function (node) { - if (_.isEmpty(node.ideas)) return; - for (var rank in node.ideas) { - if (!node.ideas.hasOwnProperty(rank)) continue; - if (!_.isEmpty(node.ideas[rank].ideas)) return; - } - possibleParents.push(node); - }); - var parent = possibleParents[Math.floor(Math.random() * possibleParents.length)]; - var childRanks = Object.getOwnPropertyNames(parent.ideas); - var childRank = childRanks[Math.floor(Math.random() * childRanks.length)]; - var child = parent.ideas[childRank]; - child.scrambled = true; - var possibleTargets = []; - ysy.util.findWhere(idea, function (node) { - if (node === child) return true; - if (node === parent) return false; - possibleTargets.push(node); - }); - var target = possibleTargets[Math.floor(Math.random() * possibleTargets.length)]; - if (!target.ideas) target.ideas = {}; - target.ideas[100000] = child; - delete parent.ideas[childRank]; -}; -ysy.wbs.test.changeValue = function (idea) { - var possibleNodes = []; - ysy.util.traverse(idea, function (node) { - if (node.attr.isProject) return; - possibleNodes.push(node); - }); - var node = possibleNodes[Math.floor(Math.random() * possibleNodes.length)]; - // node = idea; - node.changed = true; - ysy.mapModel.setData(node, {status_id: 5}); -}; -ysy.wbs.test.nonSubtaskable = function () { - var task4 = ysy.mapjs.idea.ideas[-1].ideas[1]; - ysy.mapModel.setData(task4, {tracker_id: 1}); - ysy.mapModel.setData(task4, {tracker_id: 2}); - task4.attr.data.tracker_id = 57; -}; -ysy.wbs.test.diffMessages = function () { - var ideas = ysy.wbs.test.ideaDiff(); - // ysy.wbs.test.scramble(ideas.idea2); - ysy.wbs.test.changeValue(ideas.idea2); - // ysy.log.debug(JSON.stringify(ideas)); - var diff = ysy.storage.lastState.compareIdea(ideas.idea2, "server", ideas.idea1); - ysy.log.debug(JSON.stringify(diff)); - ysy.loader.prepareLastStateMessages(diff, ideas.idea1, ideas.idea2); -}; \ No newline at end of file diff --git a/plugins/easy_wbs/assets/javascripts/tests/parse_form.js b/plugins/easy_wbs/assets/javascripts/tests/parse_form.js deleted file mode 100644 index 1f07c26..0000000 --- a/plugins/easy_wbs/assets/javascripts/tests/parse_form.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Created by hosekp on 2/21/17. - */ -window.easyTests = $.extend(window.easyTests, { - /** @type {MindMup}*/ - ysyInstance: null, - parseForm: function () { - var formData = [{"name": "utf8", "value": "✓"}, { - "name": "_method", - "value": "patch" - }, { - "name": "authenticity_token", - "value": "AyUhWxdKyCnB5V5FgkMZecRtDucWOsFRAq+RmxhPjclTrjNy3VngNdHp5tiS+iVqOqp4+7PXyrJNrDAX2rWGmA==" - }, {"name": "form_update_triggered_by", "value": ""}, { - "name": "issue[subject]", - "value": "level 1d" - }, {"name": "issue[tracker_id]", "value": "15"}, { - "name": "issue[author_id]", - "value": "5" - }, {"name": "issue[fixed_version_id]", "value": ""}, { - "name": "issue[old_fixed_version_id]", - "value": "" - }, {"name": "issue[parent_issue_id]", "value": ""}, { - "name": "issue[parent_issue_id]", - "value": "" - }, {"name": "issue[start_date]", "value": "2016-12-08"}, { - "name": "issue[easy_repeat_settings][simple_period]", - "value": "" - }, { - "name": "issue[easy_repeat_settings][end_date]", - "value": "" - }, { - "name": "issue[easy_repeat_settings][endtype_count_x]", - "value": "" - }, {"name": "issue[custom_field_values][29][]", "value": "material2"}, { - "name": "issue[custom_field_values][29][]", - "value": "material4" - }, {"name": "issue[custom_field_values][29][]", "value": ""}, { - "name": "issue[custom_field_values][83]", - "value": "" - }, {"name": "issue[status_id]", "value": "1"}, { - "name": "issue[done_ratio]", - "value": "0" - }, {"name": "issue[priority_id]", "value": "9"}, {"name": "issue[due_date]", "value": ""}, { - "name": "issue[notes]", - "value": "" - }, {"name": "version[project_id]", "value": "118"}, { - "name": "issue[private_notes]", - "value": "0" - }, {"name": "issue[private_notes]", "value": "1"}, { - "name": "issue[update_repeat_entity_attributes]", - "value": "1" - }, {"name": "issue[lock_version]", "value": "4"}]; - var result = this.ysyInstance.util.formToJson(formData); - console.log(JSON.stringify(result)); - } -}); \ No newline at end of file diff --git a/plugins/easy_wbs/assets/javascripts/tests/printing.js b/plugins/easy_wbs/assets/javascripts/tests/printing.js deleted file mode 100644 index 46b9f73..0000000 --- a/plugins/easy_wbs/assets/javascripts/tests/printing.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Created by hosekp on 11/25/16. - */ - -window.easyTests = $.extend(window.easyTests,{ - /** @type {MindMup}*/ - ysyInstance: null, - printify:function(){ - this.ysyInstance.print.beforePrint(); - }, - deprintify:function () { - this.ysyInstance.print.afterPrint(); - } -}); \ No newline at end of file diff --git a/plugins/easy_wbs/assets/javascripts/tests/saving_test.js b/plugins/easy_wbs/assets/javascripts/tests/saving_test.js deleted file mode 100644 index 8cc83a6..0000000 --- a/plugins/easy_wbs/assets/javascripts/tests/saving_test.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Created by hosekp on 11/15/16. - */ - -window.easyTests = $.extend(window.easyTests,{ - /** @type {MindMup}*/ - ysyInstance: null, - addTenIssues: function () { - var counter = 1; - var mapModel = this.ysyInstance.mapModel; - for (var i = 0; i < 10; i++) { - mapModel.addSubIdea("script", undefined, "Node " + counter++); - } - }, - changeStatusOfAll: function (status) { - /** @type {MindMup}*/ - var ysy = this.ysyInstance; - ysy.util.traverse(ysy.idea, function (node) { - ysy.setData(node,{status_id:status || 2}); - }); - ysy.idea.dispatchEvent('changed'); - } -}); diff --git a/plugins/easy_wbs/assets/javascripts/wbs_context_menu.js b/plugins/easy_wbs/assets/javascripts/wbs_context_menu.js deleted file mode 100644 index 09c1891..0000000 --- a/plugins/easy_wbs/assets/javascripts/wbs_context_menu.js +++ /dev/null @@ -1,133 +0,0 @@ -/** - * Created by hosekp on 11/28/16. - */ -(function () { - var classes = window.easyMindMupClasses; - - /** - * Context menu for WBS - * @param {WbsMain} ysy - * @constructor - */ - function WbsContextMenu(ysy) { - classes.ContextMenu.call(this, ysy); - } - - classes.extendClass(WbsContextMenu, classes.ContextMenu); - /** - * Prepare Object for Mustache to render context menu - * @param {ModelEntity} node - * @override - * @return {Object} - */ - WbsContextMenu.prototype.getStructure = function (node) { - var ysy = this.ysy; - var data = ysy.getData(node); - var isProject = node.attr.entityType === "project"; - var isBulkEdit = ysy.mapModel.getActivatedNodeIds().length > 1; - var isCollapsed = node.attr.collapsed; - var trackers, priorities, statuses, assignees, doneRatio; - if (!isProject) { - trackers = ysy.dataStorage.get("trackers").map(function (entity) { - return {name: entity.name, value: entity.id, previous: data.tracker_id === entity.id} - }); - priorities = ysy.dataStorage.get("priorities").map(function (entity) { - return {name: entity.name, value: entity.id, previous: data.priority_id === entity.id}; - }); - statuses = ysy.dataStorage.get("statuses").map(function (entity) { - return {name: entity.name, value: entity.id, previous: data.status_id === entity.id}; - }); - assignees = [{name: "<< nobody >>", value: null, previous: !data.assigned_to_id}] - .concat(ysy.dataStorage.get("users").map(function (entity) { - return {name: entity.name, value: entity.id, previous: data.assigned_to_id === entity.id} - })); - doneRatio = []; - var dataDoneRatio = data.done_ratio || 0; - for (var i = 0; i <= 100; i += 10) { - doneRatio.push({name: i + " %", value: i, previous: dataDoneRatio === i}) - } - } - var labels = ysy.settings.labels; - var ctxLabels = labels.context; - var nonEditable = node.attr.nonEditable; - return [ - { - name: isCollapsed ? ctxLabels.expand : ctxLabels.collapse, - aClassName: 'easy-mindmup__icon easy-mindmup__icon--'+(isCollapsed ? 'expand' : 'collapse') + ' toggleCollapse', - skip: _.isEmpty(node.ideas) - }, { - name: ctxLabels.goto + " " + (isProject ? labels.types.project : labels.types.issue), - aClassName: 'easy-mindmup__icon easy-mindmup__icon--follow_url followURL', - skip: isBulkEdit - }, { - name: ctxLabels.rename, - aClassName: 'easy-mindmup__icon easy-mindmup__icon--rename editNode', - skip: isBulkEdit || !ysy.validator.validate("nodeRename", node) - }, { - name: ctxLabels.editData, - aClassName: 'easy-mindmup__icon easy-mindmup__icon--edit_data editNodeData', - skip: isBulkEdit || nonEditable - }, - this.prepareOption(function () { - return { - name: ctxLabels.tracker, - key: 'tracker_id', - changer: trackers - }; - }, nonEditable || isProject), - this.prepareOption(function () { - return { - name: ctxLabels.priority, - key: 'priority_id', - changer: priorities - }; - }, nonEditable), - this.prepareOption(function () { - return { - name: ctxLabels.status, - key: 'status_id', - changer: statuses - }; - }, nonEditable || isProject), - this.prepareOption(function () { - return { - name: ctxLabels.assignee, - key: 'assigned_to_id', - changer: assignees - }; - }, nonEditable || isProject), - this.prepareOption(function () { - return { - name: ctxLabels.doneRatio, - key: 'done_ratio', - changer: doneRatio - }; - }, nonEditable || isProject), - this.prepareOption(function () { - return { - name: ctxLabels.add, - className: 'folder', - aClassName: 'easy-mindmup__icon easy-mindmup__icon--add', - subMenu: [ - { - name: ctxLabels.addChild, - className: 'easy-mindmup__icon easy-mindmup__icon--add addSubIdea' - }, { - name: ctxLabels.addSibling, - className: 'easy-mindmup__icon easy-mindmup__icon--add_sibling addSiblingIdea' - }, { - name: ctxLabels.addParent, - className: 'easy-mindmup__icon easy-mindmup__icon--insert_between insertIntermediate' - } - ] - }; - }, isBulkEdit), - { - name: ctxLabels.remove, - aClassName: 'easy-mindmup__icon easy-mindmup__icon--remove removeSubIdea', - skip: nonEditable - } - ] - }; - classes.WbsContextMenu = WbsContextMenu; -})(); \ No newline at end of file diff --git a/plugins/easy_wbs/assets/javascripts/wbs_loader.js b/plugins/easy_wbs/assets/javascripts/wbs_loader.js deleted file mode 100644 index 7b81688..0000000 --- a/plugins/easy_wbs/assets/javascripts/wbs_loader.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Created by hosekp on 11/14/16. - */ -(function () { - var classes = window.easyMindMupClasses; - - /** - * @extends {Loader} - * @param {WbsMain} ysy - * @constructor - */ - function WbsLoader(ysy) { - classes.Loader.call(this, ysy); - } - - classes.extendClass(WbsLoader, classes.Loader); - - /** - * - * @param {Object} rawData - * @return {Object} - */ - WbsLoader.prototype.extractData = function (rawData) { - return rawData["easy_wbs_data"]; - }; - WbsLoader.prototype.loadSideData = function (data) { - this.ysy.dataStorage.save("trackers", data["trackers"]); - this.ysy.dataStorage.save("priorities", data["priorities"]); - this.ysy.dataStorage.save("statuses", data["statuses"]); - this.ysy.dataStorage.save("users", data["users"]); - this.ysy.dataStorage.save("versions", data["versions"]); - }; - - WbsLoader.prototype.getParentFromSource = function (entity, next) { - var entityData = entity.attr.data; - if (!next) { - if (entityData["parent_issue_id"]) return new classes.ParentPack("issue", entityData["parent_issue_id"]); - if (entityData["parent_id"]) return new classes.ParentPack("project", entityData["parent_id"]); - if (entityData["project_id"]) return new classes.ParentPack("project", entityData["project_id"]); - } else { - if (entityData["parent_issue_id"]) return new classes.ParentPack("project", entityData["project_id"]); - } - return null; - }; - - classes.WbsLoader = WbsLoader; -})(); \ No newline at end of file diff --git a/plugins/easy_wbs/assets/javascripts/wbs_main.js b/plugins/easy_wbs/assets/javascripts/wbs_main.js deleted file mode 100644 index 545e533..0000000 --- a/plugins/easy_wbs/assets/javascripts/wbs_main.js +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Created by hosekp on 11/14/16. - */ -(function () { - var classes = window.easyMindMupClasses; - - /** - * @extends {MindMup} - * @param {Object} settings - * @constructor - */ - function WbsMain(settings) { - classes.MindMup.call(this, settings); - this.helperInit(); - this.patch(); - this.init(); - // this.settings.noSave = true; - easyTests.ysyInstance = this; - } - - classes.extendClass(WbsMain, classes.MindMup); - - - WbsMain.prototype.patch = function () { - /** @type {WbsLoader} */ - this.loader = new classes.WbsLoader(this); - /** @type {WbsNodePatch} */ - this.nodePatch = new classes.WbsNodePatch(this); - /** @type {WbsSaver} */ - this.saver = new classes.WbsSaver(this); - /** @type {WbsStyles} */ - this.styles = new classes.WbsStyles(this); - /** @type {WbsValidator} */ - this.validator = new classes.WbsValidator(this); - /** @type {WbsContextMenu} */ - this.contextMenu = new classes.WbsContextMenu(this); - /** @type {WbsModals} */ - this.modals = new classes.WbsModals(this); - - /** @type {WbsMain} */ - var self = this; - /** - * Modify StorageExtra._getIdOfIdea(), so it use proper prefixes - */ - this.eventBus.register("BeforeViewClassInit", function () { - /** @param {ModelEntity} idea */ - self.storage.extra._getIdOfIdea = function (idea) { - var id = this.ysy.getData(idea).id; - if (idea.attr.entityType === "project") { - return "p" + id; - } else { - return "i" + id; - } - }; - }); - }; - WbsMain.prototype.creatingEntity = "issue"; - - classes.WbsMain = WbsMain; -})(); diff --git a/plugins/easy_wbs/assets/javascripts/wbs_modals.js b/plugins/easy_wbs/assets/javascripts/wbs_modals.js deleted file mode 100644 index 74a694c..0000000 --- a/plugins/easy_wbs/assets/javascripts/wbs_modals.js +++ /dev/null @@ -1,267 +0,0 @@ -/** - * Created by hosekp on 11/15/16. - */ -(function () { - /** - * - * @param {WbsMain} ysy - * @constructor - */ - function WbsModals(ysy) { - this.ysy = ysy; - /** @type {jQuery} */ - this.$target = null; - /** @type {ModelEntity} */ - this.selectedIdea = null; - this._cache = {}; - this.patch(ysy); - } - - /** - * - * @param {WbsMain} ysy - */ - WbsModals.prototype.patch = function (ysy) { - var self = this; - ysy.eventBus.register("MapInited", function (mapModel) { - ysy.$container.off("click.exclamation").on("click.exclamation", ".mapjs-exclamation", function () { - var contextNodeId = mapModel.getSelectedNodeId(); - - ysy.eventBus.fireEvent('nodeEditDataRequested', contextNodeId); - }); - ysy.eventBus.register('nodeEditDataRequested', $.proxy(self.onEditRequested, self)); - }); - }; - WbsModals.prototype.onEditRequested = function (nodeId) { - /** @type {ModelEntity} */ - var idea = this.ysy.mapModel.findIdeaById(nodeId); - this.selectedIdea = idea; - var sendPack = new this.ysy.saver.createSendPack(idea, this.ysy.idea.findParent(idea.id)); - sendPack.ysy = this.ysy; - sendPack.updateNodeData(); - var startsWith = this.ysy.util.startsWith; - var preFill = _.omit(sendPack.node.attr.data, function (value, key) { - return _.isFunction(value) || startsWith(key, "_"); - }); - if(preFill.custom_fields){ - var customValues={}; - for(var i=0;i<preFill.custom_fields.length;i++){ - var customField = preFill.custom_fields[i]; - customValues[customField.id]=customField.value; - } - delete preFill.custom_fields; - preFill.custom_field_values = customValues; - } - if (idea.attr.entityType === "project") { - - } else { - this.$target = this.ysy.util.getModal("form-modal", "90%"); - if (preFill.id) { - this.openEditIssueModal(preFill); - } else { - this.openNewIssueModal(preFill); - } - } - - }; - WbsModals.prototype.submitFunction = function (e) { - var $target = this.$target; - if (window.fillFormTextAreaFromCKEditor) { - $target.find("textarea").each(function () { - window.fillFormTextAreaFromCKEditor(this.id); - }); - } - var errors = []; - var cannotBeEmpty = this.ysy.settings.labels.errors.cannotBeEmpty; - $.unique($target.find("label.required, label .required").closest("label")).each(function () { - var $label = $(this); - var $input = $label.parent().find("#" + $label.attr("for")); - if (!$input.length) return; - //var $input = $label.next(); - if (!$input.val()) { - var label = $label.text(); - errors.push(label.substring(0, label.length - 2) + " " + cannotBeEmpty /* + ysy.view.getLabel("addTask", "error_blank")*/); - } - }); - if (errors.length) { - var errorSpan = $('<span></span>').html(errors.join("<br>")); - var closeButton = $('<a href="javascript:void(0)" class="easy-mindmup__icon easy-mindmup__icon--close mindmup_modal__flash_close"></a>').click(function (event) { - $(this) - .closest('.flash') - .fadeOut(500, function () { - $(this).remove(); - }) - }); - $target.prepend($('<div class="flash error"></div>').append(errorSpan, closeButton)); - return false; - } - var data = $target.parent().find("form").serializeArray(); - - var transformed = this.transformData(data); - this.updateIssue(this.selectedIdea, transformed); - $target.dialog("close"); - return false; - }; - WbsModals.prototype.openNewIssueModal = function (preFill) { - var self = this; - var successCallback = function (data) { - var $form = $(data).filter("#issue-form"); - if ($form.length === 0) $form = $(data).find("#issue-form"); - - $form.find('input[name="continue"]').remove(); - $form.find('fieldset[data-toggle="easy_checklist_form_container"]').remove(); - self.finishModal("new", "issue", $form, preFill); - }; - $.ajax(this.ysy.settings.paths.newIssuePath, { - method: "GET", - data: { - projectID: preFill.project_id, - issue: preFill - } - }).done(successCallback); - }; - WbsModals.prototype.openEditIssueModal = function (preFill) { - var self = this; - var path = this.ysy.settings.paths.editIssuePath.replace(":issueID", preFill.id); - var successCallback = function (data) { - var $form = $(data).filter("#issue-form"); - if ($form.length === 0) $form = $(data).find("#issue-form"); - if (self.ysy.settings.easyRedmine) { - $form.find("#issue_timeentry_fields").parent().remove(); - $form.find("#edit_issue_notes").hide() - .siblings().find(".module-toggle-button .group").removeClass("open"); - $form.find("#issue_descr_fields").show(); - $form.find(".issue-edit-hidden-attributes").remove(); - $form.find(".issue_edit_submit_buttons a").remove(); - } else { - $form.find("#time_entry_hours").closest("fieldset").remove(); - $form.find("#attachments_fields").closest("fieldset").remove(); - } - $form.find(".issue-attachments-container").remove(); - self.finishModal("edit", "issue", $form, preFill); - }; - $.ajax(path, { - method: "GET", - data: { - projectID: preFill.project_id, - issue: preFill - } - }).done(successCallback); - - }; - /** - * - * @param {String} actionType - * @param {String} entityType - * @param {jQuery} $form - * @param {Object} preFill - */ - WbsModals.prototype.finishModal = function (actionType, entityType, $form, preFill) { - var settings = this.ysy.settings; - $form.find("#preview").remove(); - $form.find("h2, h3.title").remove(); - var $target = this.$target; - $target.empty().append($form); - if (!settings.easyRedmine) { - $form.contents().filter(function () { - return this.nodeName === "A" || this.nodeType == 3; - }).remove(); - $('<div class="issue_submit_buttons"></div>').append($form.find('input[type="submit"]')).appendTo($form); - } - $target.prepend($("<h3 class='title'>" + settings.labels.modals[actionType + "_" + entityType] + "</h3>")); - var $buttons = $form.find(".issue_edit_submit_buttons, .issue_submit_buttons"); - $buttons.find('input[type="submit"]').click($.proxy(this.submitFunction, this)); - $buttons.append($('<a href="javascript:void(0)" class="wbs-modal-close button">' + settings.labels.buttons.close + '</a>') - .click(function () { - $target.dialog('close'); - })); - $target.find(".form-actions").hide(); - - showModal("form-modal"); - $target.dialog({ - maxHeight: window.innerHeight - 100, - buttons: [ - {} - ] - }); - $target.parent().find(".ui-dialog-buttonpane").empty().append($('<form id="modal_submit_form">').append($buttons.children())); - $target.find("#issue-form").submit($.proxy(this.submitFunction, this)) - .append($('<input type="hidden" name="version[project_id]" value="' + preFill.project_id + '" />')); - }; - /** - * Accepts data from form.serializeArray() and transform it to Object similar to ModelEntityData - * @param {Array.<Object.<String,String>>} data - * @return {Object} - */ - WbsModals.prototype.transformData = function (data) { - //var momentarize=function(date){return moment(date,"YYYY-MM-DD");}; - //var momentarizeEnd=function(date){var mom=moment(date,"YYYY-MM-DD");mom._isEndDate=true;return mom;}; - var structured = this.ysy.util.formToJson(data); - var transformed = {}; - var parseInteger = function (number) { - if (number === "") return null; - return parseInt(number); - }; - var parseDecimal = function (number) { - if (number === "") return null; - return parseFloat(number); - }; - var functionMap = { - // name: nothing, - is_private: parseInteger, - tracker_id: parseInteger, - status_id: parseInteger, - // status: nothing, - // sharing: nothing, - // subject: nothing, - // description: nothing, - priority_id: parseInteger, - project_id: parseInteger, - assigned_to_id: parseInteger, - fixed_version_id: parseInteger, - easy_version_category_id: parseInteger, - old_fixed_version_id: parseInteger, - parent_issue_id: parseInteger, - // start_date: nothing, - // due_date: nothing, - effective_date: function (value) { - transformed.start_date = value; - return null; - }, - estimated_hours: parseDecimal, - done_ratio: parseInteger, - // custom_field_values: nothing, - // easy_distributed_tasks: nothing, - // easy_repeat_settings: nothing, - // easy_repeat_simple_repeat_end_at: nothing, - // watcher_user_ids: nothing, - // easy_ldap_entity_mapping: nothing, - // skip_estimated_hours_validation: nothing, - activity_id: parseInteger - }; - var issueKeys = Object.getOwnPropertyNames(structured.issue); - for (var i = 0; i < issueKeys.length; i++) { - var key = issueKeys[i]; - if (functionMap.hasOwnProperty(key)) { - var parsed = functionMap[key](structured.issue[key], key); - } else { - parsed = structured.issue[key]; - } - transformed[key] = parsed; - } - return transformed; - }; - /** - * - * @param {ModelEntity} idea - * @param {Object} transformed - */ - WbsModals.prototype.updateIssue = function (idea, transformed) { - this.ysy.setData(idea, transformed); - idea.title = idea.attr.data.subject; - this.ysy.idea.dispatchEvent("changed"); - }; - - - window.easyMindMupClasses.WbsModals = WbsModals; -})(); \ No newline at end of file diff --git a/plugins/easy_wbs/assets/javascripts/wbs_node_patch.js b/plugins/easy_wbs/assets/javascripts/wbs_node_patch.js deleted file mode 100644 index e2ec91c..0000000 --- a/plugins/easy_wbs/assets/javascripts/wbs_node_patch.js +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Created by hosekp on 11/14/16. - */ -(function () { - var classes = window.easyMindMupClasses; - - /** - * - * @param {WbsMain} ysy - * @constructor - */ - function WbsNodePatch(ysy) { - classes.NodePatch.call(this, ysy); - this.initIcons(); - } - - classes.extendClass(WbsNodePatch, classes.NodePatch); - /** - * @param {ModelEntity} nodeContent - * @return {String} - */ - WbsNodePatch.prototype.nodeBonusCss = function (nodeContent) { - return nodeContent.attr.entityType === "project" ? " mindmup-scheme-project wbs-project" : " wbs-issue"; - }; - - WbsNodePatch.prototype.iconsForEntity = { - issue: ["exclamation", "avatar", "progress", "status", "milestone"] - }; - WbsNodePatch.prototype.initIcons = function () { - /** @type {WbsMain} */ - var ysy = this.ysy; - this.addIconBuilder("progress", function (nodeContent) { - var data = ysy.getData(nodeContent); - if (data.done_ratio === undefined) return null; - return '<div class="mindmup-node-icon-progress-bar" style="top:' + (100 - data.done_ratio) + '%;height:' + data.done_ratio + '%"></div>'; - }); - this.addIconBuilder("status", function (nodeContent) { - var data = ysy.getData(nodeContent); - var statuses = ysy.dataStorage.get("statuses"); - if (data.status_id === undefined) return; - var status = _.find(statuses, function (status) { - return status.id === data.status_id; - }); - if (status) return status.name; - }); - this.addIconBuilder("milestone", function (nodeContent) { - var data = ysy.getData(nodeContent); - var css = ysy.styles.styles["milestone"].addSchemeClassFromData(data); - if (!css) return null; - return '<div class="mindmup-node-icon-milestone-shell scheme-by-milestone">\ - <div class="mindmup-node-icon-milestone-diamond' + css + '"></div></div>' - }); - }; - - classes.WbsNodePatch = WbsNodePatch; -})(); \ No newline at end of file diff --git a/plugins/easy_wbs/assets/javascripts/wbs_saver.js b/plugins/easy_wbs/assets/javascripts/wbs_saver.js deleted file mode 100644 index 96af2c6..0000000 --- a/plugins/easy_wbs/assets/javascripts/wbs_saver.js +++ /dev/null @@ -1,119 +0,0 @@ -/** - * Created by hosekp on 11/14/16. - */ -(function () { - var classes = window.easyMindMupClasses; - - /** - * @extends {Saver} - * @param {WbsMain} ysy - * @constructor - */ - function WbsSaver(ysy) { - classes.Saver.call(this, ysy); - } - - classes.extendClass(WbsSaver, classes.Saver); - - WbsSaver.prototype.layoutKey = "easy_wbs_layout"; - - classes.WbsSaver = WbsSaver; - //#################################################################################################################### - /** - * @extends {SendPack} - * @param {ModelEntity} node - * @param {ModelEntity} [parent] - * @param {ModelEntity} [project] - * @constructor - */ - function WbsSendPack(node, parent, project) { - classes.SendPack.call(this, node, parent, project); - } - - classes.extendClass(WbsSendPack, classes.SendPack); - - WbsSendPack.prototype.needInclusionCheck = function () { - var entityData = this.nodeData; - return entityData._old.parent_issue_id !== entityData.parent_issue_id - && entityData.parent_issue_id - && entityData._old.parent_issue_id - }; - WbsSendPack.prototype.isSafeCheck = function () { - var data = this.nodeData; - if (this.node.attr.entityType === "project") { - return !data._old.hasOwnProperty("parent_id") || data._old.parent_id === data.parent_id; - } - if (data._old.hasOwnProperty("project_id") && data._old.project_id !== data.project_id) return false; - return !data._old.hasOwnProperty("parent_issue_id") || data._old.parent_issue_id === data.parent_issue_id; - }; - WbsSendPack.prototype.updateNodeData = function () { - var idea = this.node; - var parent = this.parent; - var updateObj; - if (idea.attr.entityType === "project") { - if (parent) { - var parentData = this.ysy.getData(parent); - updateObj = {parent_id: parentData.id, name: idea.title}; - } else { - updateObj = {name: idea.title}; - } - } else { - if (parent) { - parentData = this.ysy.getData(parent); - if (parent.attr.entityType === "project") { - updateObj = { - project_id: parentData.id, - parent_issue_id: null, - subject: idea.title - } - } else { - if (this.project) { - var projectId = this.project && this.ysy.getData(this.project).id; - } - updateObj = { - parent_issue_id: parentData.id, - subject: idea.title, - project_id: projectId || this.ysy.util.getEntityProjectId(parent) - }; - } - } else { - updateObj = { - subject: idea.title - }; - } - } - if (updateObj) { - this.ysy.setData(idea, updateObj); - } - }; - WbsSendPack.prototype.updateByPOSTAdditional = function (source) { - var keysToTransform = ["tracker", "status", "priority"]; - var wantedKeys = ["tracker_id", "status_id", "priority_id", "done_ratio"]; - for (var i = 0; i < keysToTransform.length; i++) { - var key = keysToTransform[i]; - if (_.isObject(source[key])) { - source[key + "_id"] = source[key].id; - delete source[key]; - } - } - $.extend(this.nodeData, _.pick(source, wantedKeys)); - }; - WbsSendPack.prototype.getInclusionData = function () { - if (this.node.attr.entityType === "issue") { - return {id: this.nodeData.id, _old: {parent_issue_id: 5}, parent_issue_id: null}; - } - }; - - classes.WbsSendPack = WbsSendPack; - /** - * @param {ModelEntity} node - * @param {ModelEntity} [parent] - * @param {ModelEntity} [project] - * @return {WbsSendPack} - */ - WbsSaver.prototype.createSendPack = function (node, parent, project) { - var pack = new WbsSendPack(node, parent, project); - pack.saver = this; - return pack; - }; -})(); \ No newline at end of file diff --git a/plugins/easy_wbs/assets/javascripts/wbs_styles.js b/plugins/easy_wbs/assets/javascripts/wbs_styles.js deleted file mode 100644 index 3cd5e1c..0000000 --- a/plugins/easy_wbs/assets/javascripts/wbs_styles.js +++ /dev/null @@ -1,134 +0,0 @@ -/** - * Created by hosekp on 11/14/16. - */ -(function () { - var classes = window.easyMindMupClasses; - - /** - * @extends {Styles} - * @param {WbsMain} ysy - * @constructor - */ - function WbsStyles(ysy) { - this.defaultStyle = "tracker"; - classes.Styles.call(this, ysy); - this.createStyles(this.styleSources); - } - - classes.extendClass(WbsStyles, classes.Styles); - - WbsStyles.prototype.styleSources = { - tracker: { - dataArray: "trackers", - value: function (data) { - if (data.isProject) return "project"; - return data.tracker_id; - } - }, - assignee: { - dataArray: "users", - value: function (data) { - if (data.isProject) return "project"; - return data.assigned_to_id || 0; - }, - builderType: "assignee", - nullAllowed: true, - changeObject: classes.Style.oneKeyObjectConstructorBuilder("assigned_to_id") - }, - status: { - dataArray: "statuses", - value: function (data) { - if (data.isProject) return "project"; - return data.status_id; - } - }, - priority: { - initAttribute: function (list) { - this.colors = {}; - if (this.ysy.settings.easyRedmine) { - for (var i = 0; i < list.length; i++) { - var scheme = list[i].scheme; - if (!scheme) continue; - var schemeSplit = scheme.split("-"); - if (schemeSplit.length <= 1) continue; - var schemeId = parseInt(schemeSplit[schemeSplit.length - 1]); - this.colors[list[i].id] = schemeId + 1; - } - } else { - var schemeOffset = 8; // first 8 colors are from easyRedmine - scheme = 1 + schemeOffset; - var defaultFound = false; - for (i = 0; i < list.length; i++) { - var isDefault = list[i].is_default; - if (isDefault) { - this.colors[list[i].id] = 2 + schemeOffset; - defaultFound = true; - scheme = 3 + schemeOffset; - continue; - } - this.colors[list[i].id] = scheme; - if (!defaultFound) { - scheme = 2 + schemeOffset; - } else { - scheme = 4 + schemeOffset; - } - } - } - this.data = list; - }, - dataArray: "priorities", - value: function (data) { - if (data.isProject) return "project"; - return data.priority_id; - } - }, - progress: { - init: function () { - var colors = {}; - for (var i = 0; i < 6; i++) { - colors[i * 20] = i + 1; - } - this.colors = colors; - }, - value: function (data) { - if (data.isProject) return "project"; - return Math.round(data.done_ratio / 20.0) * 20.0; - }, - options: function () { - return [0, 20, 40, 60, 80, 100]; - }, - builderType: "percent", - changeObject: classes.Style.oneKeyObjectConstructorBuilder("done_ratio") - }, - milestone: { - dataArray: "versions", - value: function (data) { - if (data.isProject) return; - return data.fixed_version_id || 0; - }, - nullAllowed: true, - changeObject: classes.Style.oneKeyObjectConstructorBuilder("fixed_version_id") - } - }; - - - /** - * - * @param {ModelEntity} node - * @return {String} - */ - WbsStyles.prototype.cssClasses = function (node) { - var data = this.ysy.getData(node); - if (node.attr && node.attr.entityType === "project") return " mindmup-scheme-project"; - return "" - + this.styles["tracker"].addSchemeClassFromData(data) - + this.styles["assignee"].addSchemeClassFromData(data) - + this.styles["status"].addSchemeClassFromData(data) - + this.styles["progress"].addSchemeClassFromData(data) - + this.styles["milestone"].addSchemeClassFromData(data) - + this.styles["priority"].addSchemeClassFromData(data); - }; - - - classes.WbsStyles = WbsStyles; -})(); \ No newline at end of file diff --git a/plugins/easy_wbs/assets/javascripts/wbs_validator.js b/plugins/easy_wbs/assets/javascripts/wbs_validator.js deleted file mode 100644 index 81579f4..0000000 --- a/plugins/easy_wbs/assets/javascripts/wbs_validator.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Created by hosekp on 11/14/16. - */ -(function () { - var classes = window.easyMindMupClasses; - - function WbsValidator(ysy) { - classes.Validator.call(this,ysy); - } - classes.extendClass(WbsValidator,classes.Validator); - - WbsValidator.prototype.changeParent = function (child, newParent) { - if(child.attr.nonEditable) return false; - var childData = this.ysy.getData(child); - if (!childData.tracker_id) return true; - var tracker = _.find(this.ysy.dataStorage.get("trackers"), function (item) { - return item.id === childData.tracker_id; - }); - if (!tracker.subtaskable) { - if (newParent.attr && newParent.attr.isProject) return true; - showFlashMessage("error", this.ysy.settings.labels.errors.not_subtaskable.replace("%{task_name}", child.title)); - return false; - } - return true; - - }; - - - classes.WbsValidator = WbsValidator; -})(); \ No newline at end of file diff --git a/plugins/easy_wbs/assets/stylesheets/easy_wbs.css b/plugins/easy_wbs/assets/stylesheets/easy_wbs.css deleted file mode 100644 index f6a0c98..0000000 --- a/plugins/easy_wbs/assets/stylesheets/easy_wbs.css +++ /dev/null @@ -1,10 +0,0 @@ -/* -* = require_self -*/ -.mindmup-sidebar__attachments-thumbnails > img{ - display: none; -} -.mindmup-sidebar__attachments-thumbnails{ - margin: 0; -} - diff --git a/plugins/easy_wbs/assets/stylesheets/easy_wbs_old.css b/plugins/easy_wbs/assets/stylesheets/easy_wbs_old.css deleted file mode 100644 index ff8e544..0000000 --- a/plugins/easy_wbs/assets/stylesheets/easy_wbs_old.css +++ /dev/null @@ -1,271 +0,0 @@ -/* -* = require_self -*/ - -#container{ - position: relative; - cursor: all-scroll; -} -.wbs_noselect { - -moz-user-select: -moz-none; - -webkit-user-select: none; - -ms-user-select: none; - user-select: none -} - -#easy_wbs #wbs_menu { - user-select: none; - position: relative; - z-index: 1; - width: 100%; - background-color: white; -} - -#easy_wbs .menu-item { - display: inline-block; -} - -#wbs_menu .right-menu { - float: right; -} - -#easy_wbs.redmine .menu-item { - padding: 8px 10px 8px 10px; -} - -#easy_wbs.redmine .button.icon-magnifier { - background-image: url('../../../images/magnifier.png'); -} - -#easy_wbs.redmine a.button-positive { - background-color: #4ebf67; - border-radius: 2px; - border: 1.3px solid rgb(51, 141, 71); - color: #ffffff; - padding: 8px 16px; -} - -.wbs_hover_menu { - display: block; - position: absolute; - z-index: 99; - background-color: white; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} - -.wbs_context_menu_item { - cursor: pointer; -} - -.mapjs-exclamation { - right: -.9em; - position: absolute; - top: -.9em; - background-image: url(data:image/png;base64,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); - width: 2em; - height: 2em; - background-size: 2em; - background-repeat: no-repeat no-repeat -} - -.wbs-legend-color-box { - width: 20px; - height: 20px; - display: inline-block; - border: 1px solid; - vertical-align: middle; - margin-right: 5px; -} - -.table-striped > tbody > tr:nth-child(odd) > td { - background-color: #f9f9f9; -} - -.table-striped td { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #ddd; -} - -#easy_wbs.redmine .menu-item.active { - background-color: #9DB9D5; -} - -#easy_wbs.redmine .menu-item.active a.button { - color: #fff; -} - -.close_button.close-icon { - float: right; -} - -.mapjs-link-hit{ - fill:none; -} -.mapjs-draw-container{ - overflow: visible; -} - -#wbs_menu .legend-toggler { - text-align: center; -} - -#wbs_legend { - position: absolute; - display: block; - z-index: 99; - background-color: white; - overflow-x: auto; - min-width: 160px; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} - - -#wbs_legend .hotkey_link { - margin: 4px 0; -} - -.wbs-reload-modal-errors li { - color: #cd0a0a; -} - -.wbs-last-modal-diffs li { - color: #bf993f; -} - -.wbs-node-icons{ - position: absolute; - left: 0; - top: -18px; - white-space: nowrap; -} - -.wbs-node-icon{ - height: 20px; - display: inline-block; - margin-right: 3px; - vertical-align: middle; -} - -.wbs-node-icon-avatar,.wbs-legend-item-cont .gravatar { - height: 24px; - width: 24px; -} - -/*.scheme-by-assignee .wbs-node-icon-avatar {*/ -/*display: inline-block;*/ -/*}*/ - -.wbs-node-icon-avatar .gravatar{ - vertical-align: sub; -} - -.wbs-node-icon-avatar .gravatar, -.wbs-legend-item-cont .gravatar { - padding: 1px; - border: 1px solid #777; -} - -.wbs-node-icon-avatar .gravatar:hover, -.wbs-legend-item-cont .gravatar:hover { - transform: scale(2); - position: relative; - z-index: 5; -} -.wbs-node-icon-progress{ - width:4px; - background-color: #ee6666; - border: 1px solid dimgray; -} -.wbs-node-icon-progress-bar{ - background-color: #66bb66; - position:relative; -} -.wbs-node-icon-milestone-shell{ - border: 1px solid dimgray; - transform: rotate(45deg); - vertical-align: middle; - display: inline-block; - margin: 1px; -} -.wbs-node-icon-milestone-diamond{ - border-width: 4px; - border-style: solid; -} - -#context-menu li:not(.folder) > ul { - display: none; -} - -.wbs-node-filtered { - opacity: 0.2; -} - -.wbs-legend-item-cont { - cursor: pointer; -} - -.wbs-print-area { - -} - -.wbs-print-strip { - position: relative; - /*border: 1px solid red;*/ - border: 1px solid #cecece; - overflow: hidden; - white-space: nowrap; - break-inside: avoid; - margin: 10px 0; - margin-left: -1px; - display: inline-block; - background-color: #ffffff; - border-left: 0; -} -.wbs-print-area .mapjs-collapsor{ - display: none; -} - -@media print{ - .gravatar{ - max-width: 100%; - height: auto; - -webkit-border-radius: 5000px; - -moz-border-radius: 5000px; - border-radius: 5000px; - } -} -.mapjs-node span { - word-wrap: break-word; -} - -.controller-easy_wbs .easy-content-page{ - transform: none !important; -} -.mapjs-link-hit{ - pointer-events: all; -} -.mapjs-draw-container{ - pointer-events: none; -} -.link-edit-widget{ - background-color: white; - border: 1px solid #dd3e3a; - cursor: default; -} diff --git a/plugins/easy_wbs/config/locales/ar.yml b/plugins/easy_wbs/config/locales/ar.yml deleted file mode 100644 index b93c21a..0000000 --- a/plugins/easy_wbs/config/locales/ar.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -ar: diff --git a/plugins/easy_wbs/config/locales/cs.yml b/plugins/easy_wbs/config/locales/cs.yml deleted file mode 100644 index b949c79..0000000 --- a/plugins/easy_wbs/config/locales/cs.yml +++ /dev/null @@ -1,170 +0,0 @@ ---- -cs: - easy_query: - name: - easy_wbs_easy_issue_query: Easy WBS - easy_wbs: - button_actions: Ostatní akce - button_add_child: Přidat dítě - button_add_parent: Přidat rodiče - button_add_sibling: Přidat sourozence - button_all_icons: Ikony - button_collapse: Sbalit - button_collapse_all: Sbalit vše - button_cut: Vyjmout - button_display: Zobrazit nastavení - button_edit_data: Upravit údaje - button_expand: Rozbalit - button_expand_all: Rozbalit vše - button_expand_collapse: Rozbalit/sbalit - button_legend: Legenda - button_one_side: Jedna strana - button_paste: Vložit - button_project_menu: Easy WBS - button_redo: Vpřed - button_remove_node: Odstranit uzel - button_show_links: Zobrazit vazby - button_undo: Zpět - edit_issue: Upravit úkol - error_create: Nelze vytvořit - error_delete: Nelze smazat - error_update: Nelze aktualizovat - errors: - not_subtaskable: Úkol "%{task_name}" nemůže být podúkolem kvůli nastavení jeho - trackeru - free: - button_upgrade: Získat plnou verzi - button_upgrade_href: https://www.easyredmine.com/redmine-wbs-plugin - feature_coloring: Obarvení uzlů podle vlastnosti - feature_context_menu: Změna vlastností uzlů - feature_filtering: Filtrování uzlů podle vlastnosti - header_not_available: K dispozici pouze v plné verzi - text_not_available: je k dispozici pouze v plné verzi Easy WBS. - hotkeys: - info_mac_metakey: Na Mac OS X klávesy Ctrl a Cmd mohou být použity pro zkratky - níže - některé prohlížeče mohou určitým klávesovým zkratkám bránit. Například - pokud Cmd + Space nefunguje v prohlížeči, zkuste Ctrl + Space. - keyboard: - - title: Manipulace s uzly - hotkeys: - - hotkey: Enter - info: Přidat sourozence - - hotkey: Shift+Enter - info: Přidat sourozence nad nebo konec řádku (při přejmenování uzlu) - - hotkey: Tab nebo Insert - info: Přidat dítě - - hotkey: Shift+Tab - info: Přidat rodiče - - hotkey: Mezerník - info: Přejmenovat uzel - - hotkey: Shift+mezerník - info: Upravit data uzlu - - hotkey: Backspace nebo Delete - info: Odstranit uzel - - hotkey: Ctrl+nahoru/dolů - info: Posunout uzel nahoru/dolů - - title: Úpravy - hotkeys: - - hotkey: Ctrl+S - info: Uložit - - hotkey: Ctrl+X nebo C - info: Vyjmout - - hotkey: Ctrl+C nebo Y - info: Kopírovat - - hotkey: Ctrl+V nebo P - info: Vložit - - hotkey: U nebo Ctrl+Z - info: Zpět - - hotkey: R nebo Ctrl+Y nebo Ctrl+Shift+Z - info: Vpřed - - title: Výběr - hotkeys: - - hotkey: Šipky - info: Vyberte uzel nahoře/dole/nalevo/napravo od aktuálně vybraného - - hotkey: Shift + šipky - info: Přidat uzel nahoru/dolů/nalevo/napravo od aktuálně vybraného (užitečné - pro vícenásobný výběr sourozenců) - - hotkey: "{" - info: Vícenásobný výběr aktuálního uzlu a celého jeho podstromu - - hotkey: "[" - info: Vícenásobný výběr pouze podstromu aktuálního uzlu (nikoli uzlu samého) - - hotkey: "=" - info: Vícenásobný výběr všech sourozenců aktuálního uzlu (které mají stejného - rodiče) - - hotkey: "." - info: Zrušit vícenásobný výběr a znovu vybrat pouze aktuální uzel - - hotkey: 1 - 9 - info: Vybrat všechny uzly na určité úrovni (např. 1 vybere všechny uzly - první úrovně) - - title: Navigace a obrazovka - hotkeys: - - hotkey: "/ nebo F" - info: Rozbalit nebo sbalit uzel (zobrazit nebo skrýt děti) - - hotkey: Ctrl + nebo Z - info: Přiblížit - - hotkey: Ctrl - nebo Shift Z - info: Oddálit - - hotkey: Esc, 0, Ctrl+0 - info: Resetovat zobrazení mapy - vybrat kořenový uzel a umístit ho do středu - obrazovky - mouse: - - action: Přesunutí mapy - gesture: klikněte a přetáhněte středový uzel, klikněte a přetáhněte pozadí - nebo skrolujte na trackpadu/touchpadu. - - action: Vybrat uzel - gesture: klikněte nebo klepněte na něj - - action: Vybrat více uzlů - gesture: Shift+klik - - action: Změna pořadí uzlů - gesture: přetáhněte uzel mezi svými sourozenci, horizontálně blízko k místu - změny pořadí. Při změně pořadí se zobrazí bod s černou šipkou. - - action: Ručně umístit uzel - gesture: stačí přetáhnout uzel, dokud šipka pro změnu pořadí nezmizí. Chcete-li - vynutit ruční postavení, i když se šipka pro změnu pořadí ukazuje, podržte - klávesu Shift při tažení. Upozorňujeme, že děti z kořenového uzlu je možné - přetáhnout v libovolném směru, ale uzly nižší úrovně mohou být umístěny - pouze ve směru svého rodiče ke kořeni. - - action: Přejmenování uzlu - gesture: Dvojitý klik nebo dvojité ťuknutí - - action: Zobrazit kontextové menu s operacemi - gesture: 'Klikněte pravým tlačítkem na uzel (myší) nebo poklepejte na pozadí, - nebo dlouze stiskněte uzel: zobrazit (na dotykových zařízeních)' - - action: Změna rodičovského uzlu - gesture: přetáhněte uzel na jiný uzel (kruhové upuštění není povoleno, takže - nelze upustit uzel na jednom ze svých dětí nebo potomků) - - action: Otevřít úkol nebo projekt v samostatném okně - gesture: Alt+klik - title_key_shortcuts: Klávesové operace - title_mouse_shortcuts: Operace s myší a dotykem - title_shortcuts: Zkratky - info_all_saved: Vše úspěšně uloženo - info_any_failed: 'Některé z neúspěšných požadavků:' - info_no_permission: Nemáte potřebná oprávnění k této akci - label_color_by: Barva dle - label_go_to: Jít do - label_or: nebo - last_state_modal: - label_differencies: Rozdíly na serveru - message_changed: mají rozdílné atributy (browser => server) ({{changes}}) - message_missing: nemá nadřazený úkol "{{from}}" - message_moved: je podúkolem "{{to}}", ne "{{from}}" - message_present: je přítomen jako podúkol "{{to}}" - text_reload_appeal: Přejete si znovu načíst stav ze serveru? - title: Poslední klientský stav WBS je odlišný od stavu serveru - reload_modal: - label_errors: Chyby - text_reload_appeal: Chcete ignorovat neuložené položky a znovu načíst data ze - serveru? - title: WBS se nepodařilo správně uložit - stored_modal: - text_load_appeal: Chcete jej načíst místo aktuálního stavu ze serveru? - title: Byl zjištěn neuložený stav - text_issue_not_saved: Úkol není uložen. Nejdříve jej uložte. - warning_delete_node: Opravdu chcete odstranit uzel {{name}} a všechny jeho potomky? - warning_not_saved: není správně uloženo - heading_easy_wbs_issues: Easy WBS - label_filter_group_easy_wbs_easy_issue_query: Úkoly - label_filter_group_easy_wbs: - easy_issue_query: Úkoly - project_default_page: - easy_wbs: Easy WBS diff --git a/plugins/easy_wbs/config/locales/da.yml b/plugins/easy_wbs/config/locales/da.yml deleted file mode 100644 index d3dcd59..0000000 --- a/plugins/easy_wbs/config/locales/da.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -da: diff --git a/plugins/easy_wbs/config/locales/de.yml b/plugins/easy_wbs/config/locales/de.yml deleted file mode 100644 index c4b6d8b..0000000 --- a/plugins/easy_wbs/config/locales/de.yml +++ /dev/null @@ -1,181 +0,0 @@ ---- -de: - easy_query: - name: - easy_wbs_easy_issue_query: Easy WBS - easy_wbs: - button_actions: Andere Aktionen - button_add_child: Untergeordneter Aufgabe hinzufügen - button_add_parent: Übergeordnete Aufgabe hinzufügen - button_add_sibling: Geschwister Aufgabe hinzufügen - button_all_icons: Icons - button_collapse: Zusammenklappen - button_collapse_all: Alle zusammenklappen - button_cut: Ausschneiden - button_display: Einstellung anzeigen - button_edit_data: Daten bearbeiten - button_expand: Aufklappen - button_expand_all: Alle aufklappen - button_expand_collapse: Aufklappen/Zusammenklappen - button_legend: Legende - button_one_side: Eine Seite - button_paste: Einfügen - button_project_menu: Easy WBS - button_redo: Wiederherstellen - button_remove_node: Knotenpunkt entfernen - button_show_links: Links anzeigen - button_undo: Rückgängig - edit_issue: Die Aufgabe bearbeiten - error_create: Konnte nicht erstellt werden - error_delete: Konnte nicht gelöscht werden - error_update: Konnte nicht aktualisiert werden - errors: - not_subtaskable: Die Aufgabe "%{task_name}" kann wegen der Einstellungen des - Trackers nicht die Teilaufgabe sein - free: - button_upgrade: Die Vollversion erwerben - button_upgrade_href: https://www.easyredmine.com/redmine-wbs-plugin - feature_coloring: Die Knotenpunkte nach Merkmal färben - feature_context_menu: Die Eigenschaften der Knotenpunkte verändern - feature_filtering: Knotenpunkte nach Merkmal sortieren - header_not_available: Verfügbar nur in der Vollversion - text_not_available: verfügbar in der Vollversion der Easy WBS. - hotkeys: - info_mac_metakey: Auf dem Mac OSX, Ctrl and Cmd tasten können für die unten - markierten Abkürzungen statt Ctrl benutzt werden- einige Browser verhindern - spezifische Tastenkombinationen. Zum beispiel, falls Cmd+Space funktionier - nicht in Ihrem Browser, versuchen Sie Ctrl+Space. - keyboard: - - title: Knotenpunkt manipulation - hotkeys: - - hotkey: Enter - info: Geschwister Aufgabe einfügen - - hotkey: Shift+Enter - info: Geschwister Aufgabe einfügen über oder Zeilenumbruch (wenn Knotenpunkt - umbenennen) - - hotkey: Tab oder Einfg - info: Untergeordnete Aufgabe einfügen - - hotkey: Shift+Tab - info: Übergeordnete Aufgabe einfügen - - hotkey: Space - info: Knotenpunkt umbenennen - - hotkey: Shift+Space - info: Daten des Knotenpunkts bearbeiten - - hotkey: Backspace oder Entfernen - info: Knotenpunkt löschen - - hotkey: Ctrl+Up/Down - info: Den Knotenpunkt nach oben oder unten verschieben - - title: Bearbeitung - hotkeys: - - hotkey: Ctrl+S - info: Speichern - - hotkey: Ctrl+X oder C - info: Ausschneiden - - hotkey: Ctrl+C oder Y - info: Kopieren - - hotkey: Ctrl+V or P - info: Einfügen - - hotkey: U oder Ctrl+Z - info: Rückgängig - - hotkey: R oder Ctrl+Y oder Ctrl+Shift+Z - info: Wiederholen - - title: Auswahl - hotkeys: - - hotkey: Richtungspfeile - info: Knotenpunkt auswählen hoch/runter/rechts/links ausgehend vom aktuell - aktiven Knotenpunkt - - hotkey: Shift + Richtungspfeile - info: Knotenpunkt zur Auswahl hinzufügen hoch/runter/rechts/links (hilfreich - für die Mehrfachauswahl der Geschwistern Aufgaben) - - hotkey: "{" - info: Mehrfachauswahl für den aktuellen Knotenpunkt und kompletten untergeordneten - Strukturbaum darunter - - hotkey: "[" - info: Mehrfachauswahl nur für den Strukturbaum unter aktuellem Knotenpunkt - (nicht für Knotenpunkt selbst) - - hotkey: "=" - info: Mehrfachauswahl für alle Geschwister Aufgaben vom aktuellen Knotenpunkt - (Geschwister mit einer gemeinsamen übergeordneten Aufgabe) - - hotkey: "." - info: Mehrfachauswahl abbrechen und nur wieder aktuellen Knotenpunkt auswählen - - hotkey: 1 - 9 - info: Alle Knotenpunkte eines bestimmten Levels auswählen (z.B. 1 wählt - alle Knotenpunkte auf dem ersten Level aus ) - - title: Navigation and Bildschirm - hotkeys: - - hotkey: "/ oder F" - info: Knotenpunkt aufklappen oder zusammenklappen (falten oder entfalten - untergeordneter Aufgaben) - - hotkey: Ctrl + oder Z - info: Einzoomen - - hotkey: Ctrl - oder Shift Z - info: Auszoomen - - hotkey: Esc, 0, Ctrl+0 - info: Die Ansicht der Karte zurücksetzen- Hauptknotenpunkt auswählen und - diesen zur Mitte des Bildschirms bringen - mouse: - - action: Karte verschieben - gesture: den Hauptknotenpunkt anklicken und ziehen , Hintergrund anklicken - und ziehen oder scrollen mit dem Trackpad/Touchpad. - - action: Knotenpunkt auswählen - gesture: tippen oder darauf klicken - - action: Mehrer Knotenpunkte auswählen - gesture: Shift+klick - - action: Knotenpunkte neu sortieren - gesture: Knotenpunkt zwischen deren Geschwistern ziehen, horizontal nah zu - der gewünschten Position. Beim Neusortierung wird der Zeigepunkt zu dem - Schwarzen Pfeil. - - action: Manuell Knotenpunkt positionieren - gesture: Knotenpunkt so lange ziehen bis der Pfeilpunkt für die Neusortierung - erscheint. Um manuelle Positionierung zu erzwingen auch mit dem Pfeilpunkt - angezeigt wir, Shift halten während ziehen . Bitte bemerken,dass die untergeordnete - Aufgaben des Hauptknotenpunkts können in jeder Richtung gezogen werden, - aber Knotenpunkte mit niedrigerem Level können nur in die Richtung der Übergeordnete - Aufgabe relativ zum Hauptknotenpunkt positioniert werden. - - action: Knotenpunkt umbenennen - gesture: Doppel-klick oder 2 mal darauf tippen - - action: Das Kontextmenü mit den Operationen anzeigen - gesture: 'Rechts-klick auf einen Knotenpunkt mit der Maus oder 2 mal auf das - Hintergrund tippen, oder lange auf den Knotenpunkt drücken: Anzeigen (Auf - Touch-Geräten)' - - action: Übergeordnete Aufgabe des Knotenpunkts ändern - gesture: Den Knotenpunkt ziehen und auf den anderen Knotenpunkt loslassen - (Zyklische Drops (einfügen) sind nicht erlaubt, sprich Sie können nicht - einen Knotenpunkt auf die untergeordnete Aufgabe oder auf die Nachfahren - ziehen) - - action: Aufgabe oder Projekt in separatem Fenster öffnen - gesture: Alt+klick - title_key_shortcuts: Tastatur-Befehle - title_mouse_shortcuts: Maus- und Berührungs- aufgaben - title_shortcuts: Abkürzungen - info_all_saved: Alles wurde erfolgreich gespeichert - info_any_failed: Einige der Anfragen sind fehlgeschlagen - info_no_permission: Sie haben nicht die benötigten Berechtigungen um dies durchzuführen - label_color_by: Färben nach - label_go_to: Springen zu - label_or: oder - last_state_modal: - label_differencies: Unterschiede auf dem Server - message_changed: haben unterschiedliche Attribute (Browser => Server) ({{changes}}) - message_missing: fehlt von der übergeordnete Aufgabe "{{von}}" - message_moved: ist untergeordneter von "{{zu}}", nicht"{{von}}" - message_present: enthält als untergeordnete Aufgabe von "{{zu}}" - text_reload_appeal: Möchten Sie den Status erneut vom Server laden? - title: Letzter Client Status von WBS ist unterschiedlich zum Server Status - reload_modal: - label_errors: Die Fehler - text_reload_appeal: Möchten Sie die nicht gespeicherte Elemente ignorieren und - die Daten erneut vom Server laden? - title: WBS ordnungsgemäßer Speichervorgang ist fehlgeschlagen - stored_modal: - text_load_appeal: Möchten Sie Laden? Statt des neustens Status vom Server? - title: Nicht abgespeicherte Status wurde gefunden - warning_delete_node: Möchten Sie wirklich die Node {{name}} und all ihre Nachfahren - löschen? - warning_not_saved: Es ist nicht ordnungsgemäß abgespeichert - heading_easy_wbs_issues: Easy WBS - label_filter_group_easy_wbs_easy_issue_query: Die Aufgaben - label_filter_group_easy_wbs: - easy_issue_query: Die Aufgaben - project_default_page: - easy_wbs: Easy WBS diff --git a/plugins/easy_wbs/config/locales/en-AU.yml b/plugins/easy_wbs/config/locales/en-AU.yml deleted file mode 100644 index 56b80b3..0000000 --- a/plugins/easy_wbs/config/locales/en-AU.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -en-AU: diff --git a/plugins/easy_wbs/config/locales/en-GB.yml b/plugins/easy_wbs/config/locales/en-GB.yml deleted file mode 100644 index a32c228..0000000 --- a/plugins/easy_wbs/config/locales/en-GB.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -en-GB: diff --git a/plugins/easy_wbs/config/locales/en-US.yml b/plugins/easy_wbs/config/locales/en-US.yml deleted file mode 100644 index 54b3be8..0000000 --- a/plugins/easy_wbs/config/locales/en-US.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -en-US: diff --git a/plugins/easy_wbs/config/locales/en.yml b/plugins/easy_wbs/config/locales/en.yml deleted file mode 100644 index 33cc489..0000000 --- a/plugins/easy_wbs/config/locales/en.yml +++ /dev/null @@ -1,169 +0,0 @@ ---- -en: - easy_query: - name: - easy_wbs_easy_issue_query: Easy WBS - easy_wbs: - button_actions: Other actions - button_add_comment: Add comment - button_add_child: Add child - button_add_parent: Add parent - button_add_sibling: Add sibling - button_all_icons: Icons - button_collapse: Collapse - button_collapse_all: Collapse all - button_cut: Cut - button_display: Display settings - button_edit_data: Edit data - button_expand: Expand - button_expand_all: Expand all - button_expand_collapse: Expand/Collapse - button_legend: Legend - button_one_side: One side - button_paste: Paste - button_project_menu: Easy WBS - button_redo: Redo - button_remove_comment: Remove comment - button_remove_node: Remove node - button_show_links: Show links - button_undo: Undo - edit_issue: Edit task - name_an_entity_first: Name an entity first - error_create: could not be created - error_delete: could not be deleted - error_update: could not be updated - errors: - not_subtaskable: Task "%{task_name}" cannot be subtask because of the setting - of its tracker - free: - button_upgrade_href: https://www.easyredmine.com/redmine-wbs-plugin - text_not_available: is available only in Full version of Easy WBS. - hotkeys: - info_mac_metakey: On Mac OSX, Ctrl and Cmd keys can be used for shortcuts marked - Ctrl below - some browsers prevent certain key bindings. So, for example, - if Cmd+Space does not work in your browser, try Ctrl+Space. - keyboard: - - title: Node manipulation - hotkeys: - - hotkey: Enter - info: Add Sibling - - hotkey: Shift+Enter - info: Add Sibling above or line break (when renaming node) - - hotkey: Tab or Insert - info: Add child - - hotkey: Shift+Tab - info: Insert parent - - hotkey: Space - info: Rename node - - hotkey: Shift+Space - info: Edit node data - - hotkey: Backspace or Delete - info: Remove node - - hotkey: Ctrl+Up/Down - info: Move node up/down - - title: Editing - hotkeys: - - hotkey: Ctrl+S - info: Save - - hotkey: Ctrl+X or C - info: Cut - - hotkey: Ctrl+C or Y - info: Copy - - hotkey: Ctrl+V or P - info: Paste - - hotkey: U or Ctrl+Z - info: Undo - - hotkey: R or Ctrl+Y or Ctrl+Shift+Z - info: Redo - - title: Selection - hotkeys: - - hotkey: Arrow Keys - info: Select the node up/down/left/right of the currently selected one - - hotkey: Shift + Arrow keys - info: Add node up/down/left/right to selection (useful to multi-select siblings) - - hotkey: "{" - info: Multi-select the current node and the entire subtree under it - - hotkey: "[" - info: Multi-select only the subtree under the current node (not the node - itself) - - hotkey: "=" - info: Multi-select all the siblings of the current node (that have the same - parent) - - hotkey: "." - info: Cancel multi-selection and select only the current node again - - hotkey: 1 - 9 - info: Select all nodes of a particular level (eg 1 selects all first level - nodes) - - title: Navigation and screen - hotkeys: - - hotkey: "/ or F" - info: Expand or collapse node (fold or unfold children) - - hotkey: Ctrl + or Z - info: Zoom in - - hotkey: Ctrl - or Shift Z - info: Zoom out - - hotkey: Esc, 0, Ctrl+0 - info: Reset map view - select root node and bring it to the center of the - screen - mouse: - - action: Move the map - gesture: Click and drag the center node, click and drag the background or - scroll with trackpad/touchpad. - - action: Select a node - gesture: Tap or click on it - - action: Select multiple nodes - gesture: Shift+click - - action: Reorder nodes - gesture: Drag a node between its siblings, horizontally close to the position - of reordering. A black arrow point will show when reordering. - - action: Manually position a node - gesture: Just drag a node until the arrow point for reordering isn't showing. - To force manual position even when the reorder arrow point is showing, hold - Shift while dragging. Please note that children of the root node can be - pulled in any direction, but lower level nodes can only be positioned in - the direction of its parent relative to the root. - - action: Rename a node - gesture: Double-click or double-tap it - - action: Show context menu with operations - gesture: 'Right click on a node (by mouse) or double-tap the background, or - long press a node: show (on touch devices)' - - action: Change node parent - gesture: Drag and drop a node on another node (circular drops are not allowed, - so you can't drop a node on one of it's children or descendants) - - action: Open task or project in separate window - gesture: Alt+click - title_key_shortcuts: Keyboard operations - title_mouse_shortcuts: Mouse and touch operations - title_shortcuts: Shortcuts - label_additional_data: Additional data - label_all: All - label_basic_data: Basic data - label_color_by: Color by - label_go_to: Go to - label_or: or - last_state_modal: - label_differencies: Differencies on server - message_changed: have different attributes (browser => server) ({{changes}}) - message_missing: is missing from parent "{{from}}" - message_moved: is child of "{{to}}", not "{{from}}" - message_present: is present as child of "{{to}}" - text_reload_appeal: Do you want reload state from server? - title: Last client state of WBS is different from server state - name_an_entity_first: Name an entity first - reload_modal: - label_errors: Errors - text_reload_appeal: Do you want to ignore unsaved items and reload data from - server? - title: WBS failed to save properly - stored_modal: - text_load_appeal: Do you want to loaded it? Instead of the fresh state from - the server? - title: Unsaved state have been found - text_issue_not_saved: Issue is not saved. Save it first. - heading_easy_wbs_issues: Easy WBS - label_filter_group_easy_wbs_easy_issue_query: Tasks - label_filter_group_easy_wbs: - easy_issue_query: Tasks - project_default_page: - easy_wbs: Easy WBS - project_module_easy_wbs: Easy WBS diff --git a/plugins/easy_wbs/config/locales/es.yml b/plugins/easy_wbs/config/locales/es.yml deleted file mode 100644 index 5bacf9a..0000000 --- a/plugins/easy_wbs/config/locales/es.yml +++ /dev/null @@ -1,177 +0,0 @@ ---- -es: - easy_query: - name: - easy_wbs_easy_issue_query: Easy WBS - easy_wbs: - button_actions: Otras acciones - button_add_child: Añadir hijo - button_add_parent: Añadir matriz - button_add_sibling: Añadir hermano - button_all_icons: Iconos - button_collapse: Plegar - button_collapse_all: Plegar todo - button_cut: Cortar - button_display: Ajustes de visualización - button_edit_data: Editar datos - button_expand: Expandir - button_expand_all: Expandir todo - button_expand_collapse: Expandir/Plegar - button_legend: Leyenda - button_one_side: Un lado - button_paste: Pegar - button_project_menu: Easy WBS - button_redo: Volver a hacer - button_remove_node: Eliminar nodo - button_show_links: Mostrar enlaces - button_undo: Deshacer - edit_issue: Editar tarea - error_create: no se ha podido crear - error_delete: no se ha podido borrar - error_update: no se ha podido actualizar - errors: - not_subtaskable: La tarea "%{task_name}" no puede ser una subtarea debido a - los ajustes de su rastreador - free: - button_upgrade: Consigue la versión Completa - button_upgrade_href: https://www.easyredmine.com/redmine-wbs-plugin - feature_coloring: Colorear nodos por propiedad - feature_context_menu: Cambiar propiedades del nodo - feature_filtering: Filtrar nodos por propiedad - header_not_available: Disponible sólo en la versión Completa - text_not_available: está disponible en la versión Completa de Easy WBS. - hotkeys: - info_mac_metakey: En Mac OSX, las teclas Ctrl y Cmd pueden emplearse para atajos - marcados en Ctrl bajo - algunos navegadores no permiten ciertos atajos de - teclado. Así, por ejemplo, si Cmd+Espacio no funciona en tu navegador, prueba - con Ctrl+Espacio - keyboard: - - title: Manipulación del nódulo - hotkeys: - - hotkey: Enter - info: Añadir hermano - - hotkey: Shift+Enter - info: Añadir hermano encima o salto de línea (al cambiar nombre de nódulo) - - hotkey: Tabulador o Insertar - info: Añadir hijo - - hotkey: Shift+Tab - info: Insertar matriz - - hotkey: Espacio - info: Cambiar nombre a nódulo - - hotkey: Shift+Espacio - info: Editar datos de nódulo - - hotkey: Retroceso o Borrar - info: Eliminar nódulo - - hotkey: Ctrl+Arriba/Abajo - info: Mover nódulo arriba/abajo - - title: Editar - hotkeys: - - hotkey: Ctrl+S - info: Guardar - - hotkey: Ctrl+X o C - info: Cortar - - hotkey: Ctrl+C o Y - info: Copiar - - hotkey: Ctrl+V o P - info: Pegar - - hotkey: U o Ctrl+Z - info: Deshacer - - hotkey: R o Ctrl+Y o Ctrl+Shift+Z - info: Rehacer - - title: Selección - hotkeys: - - hotkey: Cursores - info: Selecciona el nódulo arriba/abajo/izquierda/derecha del seleccionado - actual - - hotkey: Shift + Cursores - info: Añade nódulo arriba/abajo/izquierda/derecha de selección (útil para - seleccionar varios hermanos) - - hotkey: "{" - info: Selección múltiple del nódulo actual y el subárbol bajo él - - hotkey: "[" - info: Selección múltiple sólo del subárbol bajo el nódulo actual (pero no - el nódulo) - - hotkey: "=" - info: Selección múltiple de todos los hermanos del módulo actual (que tienen - la misma matriz) - - hotkey: "." - info: Cancelar selección múltiple y seleccionar sólo el nódulo actual de - nuevo - - hotkey: 1 - 9 - info: 'Selecciona todos los nódulos de un nivel particular (ej: 1 selecciona - todos los nódulos de primer nivel)' - - title: Navegación y pantalla - hotkeys: - - hotkey: "/ o F" - info: Expandir u ocultar nódulo (desplegar o contraer hijos) - - hotkey: Ctrl + o Z - info: Acercar - - hotkey: Ctrl - o Shift Z - info: Alejar - - hotkey: Esc, 0, Ctrl+0 - info: Restablecer vista de mapa - seleccionar nódulo raíz y llevarlo al - centro de la pantalla - mouse: - - action: Mover el mapa - gesture: pulsar y arrastrar el nódulo central, pulsar y arrastrar el fondo - o desplazar con trackpad/touchpad. - - action: Seleccionar un nódulo - gesture: pulsar o hacer clic - - action: Seleccionar múltiples nódulos - gesture: Shift+clic - - action: Reordenar nódulos - gesture: arrastrar un nódulo entre sus hermanos, horizontalmente cerca de - la posición de reordenamiento. Se mostrará una flecha negra cuando se esté - reordenando. - - action: Posicionar un nódulo manualmente - gesture: arrastra un nódulo hasta que la flecha para reordenar desaparezca. - Para forzar la posición manual incluso cuando la flecha de reordenamiento - se muestre, pulsa Shift mientras arrastres. Ten en cuenta que los hijos - del nódulo raíz pueden moverse en cualquier dirección, mientras que los - nódulos de niveles inferiores sólo se podrán colocar en la dirección del - matriz relativo a la raíz. - - action: Renombrar un nódulo - gesture: Hacer doble clic o pulsar dos veces - - action: Mostrar menú de contexto con operaciones - gesture: 'Hacer clic sobre el botón derecho en el nódulo (con ratón) o pulsar - dos veces sobre el fondo, o pulsar un momento sobre el nódulo: mostrar (en - dispositivos táctiles)' - - action: Cambiar matriz del nódulo - gesture: arrastrar y soltar un nódulo en otro nódulo (soltar no está permitirdo, - de modo que no puede soltar un nódulo en uno de sus hijos o descendientes) - - action: Abrir asunto o proyecto en una ventana separada - gesture: Alt+clic - title_key_shortcuts: Operaciones de teclado - title_mouse_shortcuts: Operaciones por ratón y táctiles - title_shortcuts: Atajos - info_all_saved: Todo se ha guardado correctamente - info_any_failed: 'Algunas de las solicitudes no se han podido realizar:' - info_no_permission: No tienes el permiso necesario para realizar esa acción - label_color_by: Color por - label_go_to: Ir a - label_or: o - last_state_modal: - label_differencies: Diferencias en el servidor - message_changed: tiene diferentes atributos (navegador => servidor) ({{changes}}) - message_missing: ha desaparecido de su matriz "{{from}}" - message_moved: es hijo de "{{to}}", no de "{{from}}" - message_present: aparece como hijo de "{{to}}" - text_reload_appeal: "¿Quieres recargar el estado desde el servidor?" - title: El último estado del cliente de WBS es diferente al estado del servidor - reload_modal: - label_errors: Errores - text_reload_appeal: "¿Quieres ignorar los objetos sin guardar y recargar los - datos desde el servidor?" - title: No se ha podido guardar el WBS correctamente - stored_modal: - text_load_appeal: "¿Deseas cargarlo en lugar del último estado desde el servidor?" - title: Se ha encontrado el estado no guardado - warning_delete_node: "¿Seguro que quieres eliminar el nodo {{name}} y todos sus - descendientes?" - warning_not_saved: no se ha guardado correctamente - heading_easy_wbs_issues: Easy WBS - label_filter_group_easy_wbs_easy_issue_query: Tareas - label_filter_group_easy_wbs: - easy_issue_query: Tareas - project_default_page: - easy_wbs: Easy WBS diff --git a/plugins/easy_wbs/config/locales/fi.yml b/plugins/easy_wbs/config/locales/fi.yml deleted file mode 100644 index e173d18..0000000 --- a/plugins/easy_wbs/config/locales/fi.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -fi: diff --git a/plugins/easy_wbs/config/locales/fr.yml b/plugins/easy_wbs/config/locales/fr.yml deleted file mode 100644 index 9356e01..0000000 --- a/plugins/easy_wbs/config/locales/fr.yml +++ /dev/null @@ -1,182 +0,0 @@ ---- -fr: - easy_query: - name: - easy_wbs_easy_issue_query: Easy WBS - easy_wbs: - button_actions: Autres actions - button_add_child: Ajouter enfant - button_add_parent: Ajouter parent - button_add_sibling: Ajouter frère/soeur - button_all_icons: Icônes - button_collapse: Réduire - button_collapse_all: Réduire tout - button_cut: Couper - button_display: Paramètres d'affichage - button_edit_data: Éditer données - button_expand: Développer - button_expand_all: Développer tout - button_expand_collapse: Développer/réduire - button_legend: Légende - button_one_side: Un côté - button_paste: Coller - button_project_menu: Easy WBS - button_redo: Refaire - button_remove_node: Retirer noeud - button_show_links: Afficher les liens - button_undo: Défaire - edit_issue: Éditer tâche - error_create: n'a pas pu être créé - error_delete: n'a pas pu être supprimé - error_update: n'a pas pu être mis à jour - errors: - not_subtaskable: La tâche "%{task_name}" ne peut pas être une sous-tâche en - raison du réglage de son tracker - free: - button_upgrade: Obtenir la Version complète - button_upgrade_href: https://www.easyredmine.com/redmine-wbs-plugin - feature_coloring: Nœuds colorants par propriété - feature_context_menu: Modification des propriétés du noeud - feature_filtering: Nœuds filtrants par propriété - header_not_available: Uniquement disponible en Version complète - text_not_available: est disponible en version complète d'Easy WBS. - hotkeys: - info_mac_metakey: Sur Mac OSX , les touches Ctrl et Cmd peuvent être utilisées - pour les raccourcis Ctrl marqués ci-dessous - certains navigateurs empêchent - certains raccourcis clavier . Ainsi, par exemple, si Cmd + Espace ne fonctionne - pas dans votre navigateur , essayez Ctrl + Espace . - keyboard: - - title: Manipulation du nœud - hotkeys: - - hotkey: Entrer - info: Ajouter frère - - hotkey: Shift+Entrée - info: Ajouter parent au-dessus ou saut de ligne (lors du renommage du nœud) - - hotkey: Tab ou Insérer - info: Ajouter enfant - - hotkey: Shift+Tab - info: Insérer parent - - hotkey: Espace - info: Renommage du nœud - - hotkey: Shift+Espace - info: Editer les données nœud - - hotkey: Retour arrière or Effacer - info: Enlever nœud - - hotkey: Ctrl+Haut/Bas - info: Déplacer nœud vers le haut/bas - - title: 'Édition ' - hotkeys: - - hotkey: Ctrl+S - info: Sauvegarder - - hotkey: Ctrl+X or C - info: Couper - - hotkey: Ctrl+C or Y - info: Copier - - hotkey: Ctrl+V or P - info: Coller - - hotkey: U ou Ctrl+Z - info: Défaire - - hotkey: R ou Ctrl+Y ou Ctrl+Shift+Z - info: Refaire - - title: Sélection - hotkeys: - - hotkey: touche fléchée - info: Sélectionnez le noeud haut/bas/gauche/droite de celui sélectionné - actuellement - - hotkey: Shift + touche fléchée - info: Ajouter le nœud haut/bas/gauche/droite à la sélection (utile pour - les frères de multi-sélection ) - - hotkey: "{" - info: Multi-sélectionner le nœud actuel et l'arbre entier - - hotkey: "[" - info: Multi-sélectionner uniquement le sous-arbre sous le nœud actuel (pas - le nœud lui-même) - - hotkey: "=" - info: Multi-sélectionnez tous les frères du nœud actuel (qui ont le même - parent) - - hotkey: "." - info: Annuler la multi-sélection et sélectionnez uniquement le nœud actuel - à nouveau - - hotkey: 1 - 9 - info: Sélectionnez tous les nœuds d'un niveau particulier (par ex. 1 sélectionne - tous les nœuds de premier niveau ) - - title: Navigation et écran - hotkeys: - - hotkey: "/ ou F" - info: Développer ou réduire le nœud (plier ou déplier enfants) - - hotkey: Ctrl + ou Z - info: Zoom avant - - hotkey: Ctrl - ou Shift Z - info: Zoom arrière - - hotkey: Esc, 0, Ctrl+0 - info: Réinitialiser vue de la carte- sélectionnez le nœud racine et l'amener - au centre de l'écran - mouse: - - action: Déplacer la carte - gesture: cliquez et faites glisser le nœud central, cliquez et faites glisser - l'arrière-plan ou faites défiler avec le trackpad / touchpad . - - action: Sélectionnez un nœud - gesture: tapez ou cliquez dessus - - action: Sélectionnez des nœuds multiples - gesture: Shift+clic - - action: Réorganiser les nœuds - gesture: faire glisser un nœud entre ses frères et sœurs , à l'horizontale - près de la position de réordonnancement . Un point de flèche noire montrera - quand à lieu le réordonnancement. - - action: positionner manuellement un nœud - gesture: il suffit de glisser un nœud jusqu'à ce que le point flèche de réordonnancement - ne s'affiche plus . Pour forcer la position manuelle, même lorsque le point - flèche de réapprovisionnement est affiché, maintenez la touche Maj tout - en faisant glisser. S'il vous plaît noter que les enfants du nœud racine - peuvent être tirés dans une direction quelconque, mais des nœuds de niveau - inférieur ne peuvent pas être placés dans la direction de leur parent par - rapport à la racine. - - action: Renommer un nœud - gesture: Double-cliquez ou double-taper dessus - - action: Afficher le menu contextuel avec des opérations - gesture: 'Faites un clic droit sur un nœud ( par la souris ) ou double -taper - l''arrière-plan , ou appuyez longuement sur un nœud: afficher (sur les appareils - tactiles)' - - action: Modifier le parent nœud - gesture: glisser-déposer un nœud sur un autre nœud ( les gouttes circulaires - ne sont pas autorisés , de sorte que vous ne pouvez pas supprimer un nœud - sur l'un de ses enfants ou descendants) - - action: question ouverte ou projet dans une fenêtre séparée - gesture: Alt+clic - title_key_shortcuts: Opérations de clavier - title_mouse_shortcuts: Souris et opérations tactiles - title_shortcuts: Raccourcis - info_all_saved: Tout a été sauvegardé avec succès - info_any_failed: 'Certaines des demandes ont échoué:' - info_no_permission: Vous ne disposez pas des permissions nécessaires pour agir - ainsi - label_color_by: Couleur par - label_go_to: Aller à - label_or: ou - last_state_modal: - label_differencies: Différences sur le serveur - message_changed: dispose de différentes caractéristiques (navigateur =>serveur) - ({{changements}}) - message_missing: est manquant du parent "{{de}}" - message_moved: est enfant de "{{à}}", pas"{{de}}" - message_present: est présent en tant qu'enfant de "{{à}}" - text_reload_appeal: Souhaitez-vous recharger l'état à partir du serveur? - title: Le dernier état du client de WBS est différent de l'état du serveur - reload_modal: - label_errors: Erreurs - text_reload_appeal: Souhaitez-vous ignorer les éléments non enregistrés et recharger - les données à partir du serveur? - title: WBS n'a pas pu être sauvegardé correctement - stored_modal: - text_load_appeal: Voulez-vous le charger? Au lieu du nouvel état à partir du - serveur? - title: un état non sauvegardé a été trouvé - warning_delete_node: Voulez-vous vraiment supprimer le nœud {{nom}} et tous ses - descendants? - warning_not_saved: n'est pas sauvegardé correctement - heading_easy_wbs_issues: Easy WBS - label_filter_group_easy_wbs_easy_issue_query: Tâches - label_filter_group_easy_wbs: - easy_issue_query: Tâches - project_default_page: - easy_wbs: Easy WBS diff --git a/plugins/easy_wbs/config/locales/he.yml b/plugins/easy_wbs/config/locales/he.yml deleted file mode 100644 index de35edf..0000000 --- a/plugins/easy_wbs/config/locales/he.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -he: diff --git a/plugins/easy_wbs/config/locales/hr.yml b/plugins/easy_wbs/config/locales/hr.yml deleted file mode 100644 index 662a199..0000000 --- a/plugins/easy_wbs/config/locales/hr.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -hr: diff --git a/plugins/easy_wbs/config/locales/hu.yml b/plugins/easy_wbs/config/locales/hu.yml deleted file mode 100644 index c5a661d..0000000 --- a/plugins/easy_wbs/config/locales/hu.yml +++ /dev/null @@ -1,171 +0,0 @@ ---- -hu: - easy_query: - name: - easy_wbs_easy_issue_query: Easy WBS - easy_wbs: - button_actions: Más tevékenységek - button_add_child: Alfeladat hozzáadása - button_add_parent: Szülő feladat hozzáadása - button_add_sibling: Testvérfeladat hozzáadása - button_all_icons: Ikonok - button_collapse: Összezár - button_collapse_all: Összes összezárása - button_cut: Kivágás - button_display: Beállítások megjelenítése - button_edit_data: Adat szerkesztése - button_expand: Kinyit - button_expand_all: Összes kinyitása - button_expand_collapse: Kinyit / Összezár - button_legend: Magyarázat - button_one_side: Egy oldal - button_paste: Beillesztés - button_project_menu: Easy WBS - button_redo: Visszaállít - button_remove_node: Ág eltávolítása - button_show_links: Linkek megjelenítése - button_undo: Visszavonás - edit_issue: Feladat szerkesztése - error_create: nem lehet létrehozni - error_delete: nem lehet törölni - error_update: Frissítés nem sikerült - errors: - not_subtaskable: Feladat "%{task_name}" nem lehet alfeladat a beállítás típusa - miatt - free: - button_upgrade: Szerezze be a teljes verziót - button_upgrade_href: https://www.easyproject.hu/szoftver - feature_coloring: Ágak színezése tulajdonság alapján - feature_context_menu: Ág tulajdonságának megváltoztatása - feature_filtering: Ágak szűrése tulajdonság alapján - header_not_available: Csak teljes verzióban érhető el - text_not_available: az Easy WBS teljes verziója elérhető - hotkeys: - info_mac_metakey: Mac OSX esetén a Ctrl és Cmd billentyűkombináció használható - olyan rövidítésekre melyeket Ctrl-er jelölünk- néhány böngésző nem engedélyezi - ezeket a kombinációkat. Ezért például, ha a Cmd + Space nem működik a böngészőjében, - akkor próbálja meg a Ctrl+ Space kombinációt - keyboard: - - title: ág manipulálás - hotkeys: - - hotkey: Enter - info: Testvér hozzáadása - - hotkey: Shift+Enter - info: Testvér hozzáadása fölé vagy sortöréssel (ág átnevezésekor) - - hotkey: Tab vagy Beillesztés - info: alfeladat hozzáadása - - hotkey: Shift+Tab - info: Szülő beillesztése - - hotkey: Space - info: Ág átnevezése - - hotkey: Shift+Space - info: Ág adat szerkesztése - - hotkey: Backspace vagy Törlés - info: Ág eltávolítása - - hotkey: Ctrl+Fel/Le - info: Ág elmozdítása fel/le - - title: Szerkesztés - hotkeys: - - hotkey: Ctrl+S - info: Mentés - - hotkey: Ctrl+X vagy C - info: Kivágás - - hotkey: Ctrl+C vagy Y - info: Másolás - - hotkey: Ctrl+V vagy P - info: Beillesztés - - hotkey: U vagy Ctrl+Z - info: Visszaállít - - hotkey: R vagy Ctrl+Y vagy Ctrl+Shift+Z - info: Redo - - title: Kiválasztás - hotkeys: - - hotkey: Nyilak - info: A jelenleg kiválaszott ágból válassza ki a fel/le/bal/jobb - - hotkey: Shift + Nyilak - info: Ág hozzáadása fel/le/bel/jobb ( hasznos a testvér többszörös kiválasztása) - - hotkey: "{" - info: Többszörös kiválasztása a jelenlegi ágnak és a maradé alfának alatta - - hotkey: "[" - info: Többszörös kiválasztása az alfának amelyik a jelenlegi ág alatt van - (nem az ágat magát) - - hotkey: "=" - info: A jelenlegi ág testvéreinek többszörös kiválasztása ( amelyek ugyanazza - a szülővel rendelkeznek) - - hotkey: "." - info: Többszörös kiválasztás törélese és válassza ki a jelenlegi ágat ismét - - hotkey: 1 - 9 - info: Egy kiválaszott szinten az összes ág kiválasztása (pl. 1 az összes - eslő szintes ágak kiválasztása) - - title: Navigáció és képernyő - hotkeys: - - hotkey: "/ vagy F" - info: Ág kinyitása vagy összezárása (kinyitja vagy bezárja az alfeladatot - ) - - hotkey: Ctrl + vagy Z - info: Nagyítás - - hotkey: Ctrl - vagy Shift Z - info: Kizoomolás - - hotkey: Esc, 0, Ctrl+0 - info: Térkép nézet újraindítása - Gyökérág kiválasztása és a képernyő közepére - hozása - mouse: - - action: Térkép áthelyezése - gesture: kattintás és behúzás a központi ágba, kattintás és behúzás a háttér - vagy görgetés a touchpaddel. - - action: Ág kiválasztása - gesture: érintse meg vagy kattintson rá - - action: több ág kiválasztása - gesture: Shift+kattintás - - action: ágak újrhívása - gesture: behúzniaz ágat a két testvér közé, vízszintesen zárja be a feladatot - a pozíció újrahívásához. Egy fekete nyíl fog megjelenni az újrahívásnál. - - action: Manuálisan állítsa be az ágat - gesture: 'csak húzza be az ágta, a nyílig. A kézi pozícionáls kényszerítése - amikor az újrahívott nyíl megjelenik, tartsa a Shift-et ameddig húzza. - Figyeljen , hogy az alág bármilyen irányban húzható, de az alacsonyabb szintű - ágak a szülő irányába pozícionálhatók. ' - - action: Ág átnevezése - gesture: Dupla kattintás vagy dupla koppintás - - action: Kapcsolatban álló menü megjelenítése műveletekkel - gesture: 'Jobb klikk az ágra (egérrel) vagy duppla koppintás a háttéren, vagy - hosszan nyomva tartás az ágon: mutatás (érintős eszközön)' - - action: Szülő ág megváltoztatása - gesture: az ág egy másik ágra húzása (körkörös húzás nem megengedett, tehát - egy ág nem húzható rá a gyerek ágra, vagy az egyik alágára) - - action: Nyitott feladatok vagy projekt különböző ablakban - gesture: Alt+click - title_key_shortcuts: Billentyű műveletek - title_mouse_shortcuts: Egér műveltek - title_shortcuts: Lerövidítések - info_all_saved: Sikeresen mentve - info_any_failed: Kérések egy része sikertelen - info_no_permission: Nem rendelkezik a szükséges jogosultsággal a művelet végrehajtásához - label_color_by: Színezve - label_go_to: Megy! - label_or: vagy - last_state_modal: - label_differencies: Különbségek a szerveren - message_changed: különböző attribútumokkal rendelkezik (böngésző => server ({{változások}}) - message_missing: hiányzik a szülő feladatból "{{from}}" - message_moved: alfeladata "{{to}}", nem "{{from}}" - message_present: alfeladatként kelenik meg a "{{to}}"-nak - text_reload_appeal: Szeretné újratölteni az állapotot a szerverről? - title: A WBS utolsó kliens állapota különbözik a szerver állapottól - reload_modal: - label_errors: Hibák - text_reload_appeal: Szeretné figyelmen kívül hagyni a nem mentett elemeket és - újratölteni a serverről? - title: Nem sikerült megfelelően menteni a WBS-t - stored_modal: - text_load_appeal: Szeretné betölteni? A friss állapot helyett a szerverről? - title: Nem mentett állapotot talált - warning_delete_node: Biztosan törölni akarja a {{name}} csomópontot és minden - származékát? - warning_not_saved: nem megfelelő mentés - heading_easy_wbs_issues: Easy WBS - label_filter_group_easy_wbs_easy_issue_query: Feladatok - label_filter_group_easy_wbs: - easy_issue_query: Feladatok - project_default_page: - easy_wbs: Easy WBS diff --git a/plugins/easy_wbs/config/locales/it.yml b/plugins/easy_wbs/config/locales/it.yml deleted file mode 100644 index 6454ea2..0000000 --- a/plugins/easy_wbs/config/locales/it.yml +++ /dev/null @@ -1,175 +0,0 @@ ---- -it: - easy_query: - name: - easy_wbs_easy_issue_query: Easy WBS - easy_wbs: - button_actions: Altre azioni - button_add_child: Aggiungi attività figlio - button_add_parent: Aggiungi attività padre - button_add_sibling: Aggiungi attività parallela - button_all_icons: Icone - button_collapse: Contrai - button_collapse_all: Contrai tutto - button_cut: Taglia - button_display: Mostra impostazioni - button_edit_data: Modifica dati - button_expand: Espandi - button_expand_all: Espandi tutto - button_expand_collapse: Espandi/Contrai - button_legend: Legenda - button_one_side: Da una parte - button_paste: Incolla - button_project_menu: Easy WBS - button_redo: Ripristina - button_remove_node: Rimuovi nodo - button_show_links: Mostra collegamenti - button_undo: Annulla - edit_issue: Modifica task - error_create: creazione non riuscita - error_delete: cancellazione non riuscita - error_update: aggiornamento non riuscito - errors: - not_subtaskable: Il task "%{task_name}" non può avere sottotask a causa delle - impostazioni del suo tracker - free: - button_upgrade: Ottieni la Versione Completa - button_upgrade_href: https://www.easyredmine.com/redmine-wbs-plugin - feature_coloring: Colorazione dei nodi in base alla caratteristica - feature_context_menu: Cambiamento delle caratteristiche dei nodi - feature_filtering: Filtro dei nodi in base alla caratteristica - header_not_available: Disponibile solo nella Versione Completa - text_not_available: è disponibile nella Versione Completa di Easy WBS. - hotkeys: - info_mac_metakey: In caso di sistemi Mac, i tasti Ctrl e Cmd possono essere - utilizzati per le scorciatoie in cui si impiega Ctrl. Alcuni browser non permettono - alcune combinazioni di tasti. Quindi, se per esempio nel tuo browser Cmd+Spazio - non funziona, prova Ctrl+Spazio. - keyboard: - - title: Node manipulation - hotkeys: - - hotkey: Enter - info: Add Sibling - - hotkey: Shift+Enter - info: Add Sibling above or line break (when renaming node) - - hotkey: Tab or Insert - info: Add child - - hotkey: Shift+Tab - info: Insert parent - - hotkey: Space - info: Rename node - - hotkey: Shift+Space - info: Edit node data - - hotkey: Backspace or Delete - info: Remove node - - hotkey: Ctrl+Up/Down - info: Move node up/down - - title: Editing - hotkeys: - - hotkey: Ctrl+S - info: Save - - hotkey: Ctrl+X or C - info: Cut - - hotkey: Ctrl+C or Y - info: Copy - - hotkey: Ctrl+V or P - info: Paste - - hotkey: U or Ctrl+Z - info: Undo - - hotkey: R or Ctrl+Y or Ctrl+Shift+Z - info: Redo - - title: Selection - hotkeys: - - hotkey: Arrow Keys - info: Select the node up/down/left/right of the currently selected one - - hotkey: Shift + Arrow keys - info: Add node up/down/left/right to selection (useful to multi-select siblings) - - hotkey: "{" - info: Multi-select the current node and the entire subtree under it - - hotkey: "[" - info: Multi-select only the subtree under the current node (not the node - itself) - - hotkey: "=" - info: Multi-select all the siblings of the current node (that have the same - parent) - - hotkey: "." - info: Cancel multi-selection and select only the current node again - - hotkey: 1 - 9 - info: Select all nodes of a particular level (eg 1 selects all first level - nodes) - - title: Navigation and screen - hotkeys: - - hotkey: "/ or F" - info: Expand or collapse node (fold or unfold children) - - hotkey: Ctrl + or Z - info: Zoom in - - hotkey: Ctrl - or Shift Z - info: Zoom out - - hotkey: Esc, 0, Ctrl+0 - info: Reset map view - select root node and bring it to the center of the - screen - mouse: - - action: Muovi la mappa - gesture: clicca e trascina il nodo centrale, clicca e trascina lo sfondo o - scorri con la rotella/touchpad. - - action: Seleziona un nodo - gesture: tocca o cliccaci sopra - - action: Seleziona nodi multipli - gesture: Shift+click - - action: Riordina nodi - gesture: trascina un nodo tra i suoi fratelli, orizzontalmente vicino alla - posizione di riordino. Un puntatore nero a forma di freccia mostrerà dove - riordinare. - - action: Posizionare manualmente un nodo - gesture: semplicemente trascina un nodo finché la freccia che mostra dove - riordinare non appare. Per forzare il posizionamento manuale anche quando - viene mostrata la freccia nera, tieni premuto Shift mentre trascini. Considera - che i figli del nodo radice possono essere spostati in ogni direzione, ma - i nodi di livello inferiore possono essere posizionati solo in direzione - del proprio padre relativo alla radice. - - action: Rinonima un nodo - gesture: Fai doppio clic/tocco - - action: Mostra il menu contestuale con le operazioni - gesture: 'Clicca col destro su un nodo (col mouse) o fai un doppio tocco sullo - sfondo, oppure tieni premuto a lungo sul nodo: mostra (su dispositivi touch)' - - action: Cambia nodo padre - gesture: trascina e rilascia un nodo su un altro nodo (i rilasci circolari - non sono permessi, quindi non puoi rilasciare un nodo su uno dei suoi figli - o discendenti) - - action: Apri questione o progetto in una finestra separata - gesture: Alt+click - title_key_shortcuts: Operazioni tramite tastiera - title_mouse_shortcuts: Operazioni tramite tastiera e tocco - title_shortcuts: Scorciatoie - info_all_saved: Tutto è stato salvato con successo - info_any_failed: 'Alcune richieste non sono andate a buon fine:' - info_no_permission: Non hai i permessi necessari per compiere questa operazione - label_color_by: Colore per - label_go_to: Vai a - label_or: oppure - last_state_modal: - label_differencies: Differenze sul server - message_changed: ha degli attributi differenti (browser => server) ({{changes}}) - message_missing: manca dal padre "{{from}}" - message_moved: è figlio di "{{to}}", non di "{{from}}" - message_present: è presente come figlio di "{{to}}" - text_reload_appeal: Desideri ricaricare lo stato dal server? - title: L'ultimo stato WBS del client è diverso da quello del server - reload_modal: - label_errors: Errori - text_reload_appeal: Vuoi ignorare le voci non salvate e ricaricare i dati dal - server? - title: WBS non salvato correttamente - stored_modal: - text_load_appeal: Desideri caricarla? Invece di ottenere lo stato più recente - dal server? - title: Qualcosa risulta priva di salvataggio - warning_delete_node: Desideri davvero cancellare il nodo {{name}} e tutti i suoi - discendenti? - warning_not_saved: non salvato correttamente - heading_easy_wbs_issues: Easy WBS - label_filter_group_easy_wbs_easy_issue_query: Task - label_filter_group_easy_wbs: - easy_issue_query: Task - project_default_page: - easy_wbs: Easy WBS diff --git a/plugins/easy_wbs/config/locales/ja.yml b/plugins/easy_wbs/config/locales/ja.yml deleted file mode 100644 index 55af76a..0000000 --- a/plugins/easy_wbs/config/locales/ja.yml +++ /dev/null @@ -1,151 +0,0 @@ ---- -ja: - easy_query: - name: - easy_wbs_easy_issue_query: Easy WBS - easy_wbs: - button_add_child: 子を追加 - button_add_parent: 親を追加 - button_add_sibling: 兄弟を追加 - button_all_icons: アイコン - button_collapse: 折りたたみ - button_collapse_all: すべて展開 - button_cut: 切り取り - button_edit_data: ノードの詳細を編集 - button_expand: 展開 - button_expand_all: すべて展開 - button_expand_collapse: 展開/折りたたみ - button_legend: 判例 - button_one_side: 片側 - button_paste: 貼り付け - button_project_menu: WBS - button_redo: やり直し - button_remove_node: ノードを削除 - button_show_links: リンクを表示 - button_undo: 元に戻す - edit_issue: チケットを編集 - error_create: 作成できませんでした - error_delete: 削除できませんでした - error_update: 更新できませんでした - errors: - not_subtaskable: "%{task_name} は子チケットにできません" - free: - button_upgrade: フルバージョンを入手 - button_upgrade_href: https://www.easyredmine.com/redmine-wbs-plugin - feature_coloring: プロパティ毎にノードを塗り分け - feature_context_menu: ノードのプロパティを変更 - feature_filtering: プロパティ毎にノードをフィルタ - header_not_available: フルバージョンでのみ入手可能 - text_not_available: 'WBSプラグインのフルバージョンで入手可能:' - hotkeys: - info_mac_metakey: Mac OS Xの場合、ControlキーとCommandキーは、以下でCtrlと表示しているショートカットで使用可能です。しかしブラウザによっては、無効なキーの組み合わせがあります。そのため、例えばCommand+Spaceが効かない場合は、Control+Spaceを試してください。 - keyboard: - - title: ノード操作 - hotkeys: - - hotkey: Enter - info: 兄弟を追加 - - hotkey: Shift+Enter - info: 1つ上に兄弟を追加、または改行(ノード名を変更中の場合) - - hotkey: Tab or Insert - info: 子を追加 - - hotkey: Shift+Tab - info: 親を追加 - - hotkey: Space - info: ノード名の変更 - - hotkey: Shift+Space - info: ノードの詳細を編集 - - hotkey: Backspace または Delete - info: ノードの削除 - - hotkey: Ctrl+Up/Down - info: ノードを上/下へ移動 - - title: 編集 - hotkeys: - - hotkey: Ctrl+S - info: 保存 - - hotkey: Ctrl+X または C - info: 切り取り - - hotkey: Ctrl+C または Y - info: コピー - - hotkey: Ctrl+V または P - info: 貼り付け - - hotkey: U または Ctrl+Z - info: 元に戻す - - hotkey: R または Ctrl+Y または Ctrl+Shift+Z - info: やり直し - - title: ノード選択 - hotkeys: - - hotkey: 矢印キー - info: ノードの選択を、上下左右に移動 - - hotkey: Shift+矢印キー - info: ノードの選択範囲を、上下左右に拡大(兄弟を複数選択するときに便利です) - - hotkey: "{" - info: 選択中ノードと、その子すべてを選択 - - hotkey: "[" - info: 選択中ノードの、子だけを選択(選択中のノードを含みません) - - hotkey: "=" - info: 選択中ノードの兄弟を、すべて選択(同じ親の下にある兄弟が対象です) - - hotkey: "." - info: 複数選択を解除し、現在のノードだけを選択 - - hotkey: 1 - 9 - info: 指定された階層のノードをすべて選択(1の場合、第一階層のノードがすべて選択されます) - - title: 表示 - hotkeys: - - hotkey: "/ または F" - info: ノードの展開/折りたたみ - - hotkey: Ctrl+(+) または Z - info: 拡大 - - hotkey: Ctrl+(-) または Shift+Z - info: 縮小 - - hotkey: Esc または 0 または Ctrl+0 - info: マップ表示を元に戻す - ルートノードを画面中央に異動します - mouse: - - action: マップを移動 - gesture: ルートノードを選択してドラッグ - - action: ノード選択 - gesture: ノードをクリック - - action: ノードの複数選択 - gesture: Shift+クリック - - action: ノードの並べ替え - gesture: ノードをもっていきたいところまでドラッグして、黒い矢印が表示されたら離す - - action: ノードの位置を手動で調整 - gesture: ノードをもっていきたいところまでドラッグして離す(黒い矢印が表示されていないことを確認してください)。黒い矢印が表示される場所に移動したい場合は、Shiftを押しながらドラッグしてください。注意:第一階層のノードはどの方向にも自由に配置できますが、それより下位階層のノードは、ルート⇒親の向きにしか配置できません。 - - action: ノード名の変更 - gesture: ダブルクリック - - action: コンテキストメニューを表示 - gesture: ノードを右クリック - - action: ノードの親を変更 - gesture: ドラッグ&ドロップ(循環リンクとなる関係にはできません) - - action: チケット/プロジェクトを別ウィンドウで表示 - gesture: Alt+クリック - title_key_shortcuts: キーボード操作 - title_mouse_shortcuts: マウスとタッチ操作 - title_shortcuts: ショートカット - info_all_saved: すべて正しく保存されました - info_any_failed: いくつかの要求に失敗しました: - info_no_permission: その操作をする権限がありません - label_color_by: 色の塗り分け - label_go_to: '次へ:' - label_or: または - last_state_modal: - label_differencies: サーバとの差異 - message_changed: はブラウザ上とサーバ上で属性が異なります ({changes}) - message_missing: は親ノード {from} に存在しません - message_moved: は {from} ではなく {to} の子ノードです - message_present: は {to} の子ノードです - text_reload_appeal: サーバからステータスを再読込みしますか? - title: WBSのクライアントのステータスがサーバのデータと異なります - reload_modal: - label_errors: エラー - text_reload_appeal: 保存されていない変更を破棄して、サーバのデータを再読み込みしますか? - title: WBSを正しく保存できませんでした - stored_modal: - text_load_appeal: サーバから最新のデータを読み込みますか? - title: 保存されていないステータスが見つかりました - warning_delete_node: 本当に {{name}} とその子孫チケットを削除してもよろしいですか? - warning_not_saved: は正しく保存されません - heading_easy_wbs_issues: Easy WBS - label_filter_group_easy_wbs_easy_issue_query: タスク - label_filter_group_easy_wbs: - easy_issue_query: チケット - project_default_page: - easy_wbs: Easy WBS diff --git a/plugins/easy_wbs/config/locales/ko.yml b/plugins/easy_wbs/config/locales/ko.yml deleted file mode 100644 index c748d5f..0000000 --- a/plugins/easy_wbs/config/locales/ko.yml +++ /dev/null @@ -1,162 +0,0 @@ ---- -ko: - easy_query: - name: - easy_wbs_easy_issue_query: 쉬운 WBS - easy_wbs: - button_actions: 다른 실행 - button_add_child: 자녀 추가 - button_add_parent: 부모 추가 - button_add_sibling: 형제/자매 추가 - button_all_icons: 아이콘 - button_collapse: 줄이기 - button_collapse_all: 모두 줄이기 - button_cut: 잘라내기 - button_display: 설정 확인 - button_edit_data: 데이터 수정 - button_expand: 넓히기 - button_expand_all: 모두 늘이기 - button_expand_collapse: 더보기/줄이기 - button_legend: 전설 - button_one_side: 한 쪽 - button_paste: 붙여넣기 - button_project_menu: Easy WBS - button_redo: 다시하기 - button_remove_node: 연결고리 제거 - button_show_links: 링크 보여주기 - button_undo: 실행취소 - edit_issue: 작업 수정 - error_create: 생성될 수 없습니다 - error_delete: 삭제될 수 없습니다 - error_update: 업데이트 될 수 없습니다 - errors: - not_subtaskable: 추적기 설정으로 인해 작업 "%{task_name}"은 하위 작업이 될 수 없습니다 - free: - button_upgrade: 전체 버전 받기 - button_upgrade_href: https://www.easyredmine.com/redmine-wbs-plugin - feature_coloring: 속성별로 연결 색 칠하기 - feature_context_menu: 연결값 변경 - feature_filtering: 속성별로 연결 필터링 - header_not_available: 전체 버전에서만 사용할 수 있음 - text_not_available: Easy WBS의 전체 버전에서만 사용할 수 있음 - hotkeys: - info_mac_metakey: Mac OSX에서는 Ctrl 키와 Cmd 키를 Ctrl 아래에 표시된 단축키에 사용할 수 있습니다. 일부 - 브라우저는 특정 키 조합을 사용하지 못하게 합니다. 예를 들어 Cmd + Space가 브라우저에서 작동하지 않는 경우, Ctrl + - Space를 사용하여주세요. - keyboard: - - title: Node manipulation - hotkeys: - - hotkey: Enter - info: Add Sibling - - hotkey: Shift+Enter - info: Add Sibling above or line break (when renaming node) - - hotkey: Tab or Insert - info: Add child - - hotkey: Shift+Tab - info: Insert parent - - hotkey: Space - info: Rename node - - hotkey: Shift+Space - info: Edit node data - - hotkey: Backspace or Delete - info: Remove node - - hotkey: Ctrl+Up/Down - info: Move node up/down - - title: Editing - hotkeys: - - hotkey: Ctrl+S - info: Save - - hotkey: Ctrl+X or C - info: Cut - - hotkey: Ctrl+C or Y - info: Copy - - hotkey: Ctrl+V or P - info: Paste - - hotkey: U or Ctrl+Z - info: Undo - - hotkey: R or Ctrl+Y or Ctrl+Shift+Z - info: Redo - - title: Selection - hotkeys: - - hotkey: Arrow Keys - info: Select the node up/down/left/right of the currently selected one - - hotkey: Shift + Arrow keys - info: Add node up/down/left/right to selection (useful to multi-select siblings) - - hotkey: "{" - info: Multi-select the current node and the entire subtree under it - - hotkey: "[" - info: Multi-select only the subtree under the current node (not the node - itself) - - hotkey: "=" - info: Multi-select all the siblings of the current node (that have the same - parent) - - hotkey: "." - info: Cancel multi-selection and select only the current node again - - hotkey: 1 - 9 - info: Select all nodes of a particular level (eg 1 selects all first level - nodes) - - title: Navigation and screen - hotkeys: - - hotkey: "/ or F" - info: Expand or collapse node (fold or unfold children) - - hotkey: Ctrl + or Z - info: Zoom in - - hotkey: Ctrl - or Shift Z - info: Zoom out - - hotkey: Esc, 0, Ctrl+0 - info: Reset map view - select root node and bring it to the center of the - screen - mouse: - - action: Move the map - gesture: 가운데 노드를 클릭하고 드래그하고 배경을 클릭하여 드래그하거나 트랙 패드 / 터치 패드로 스크롤합니다. - - action: 노드 선택 - gesture: 선택 혹은 클릭하기 - - action: 다양한 노드 선택 - gesture: Shift+클릭 - - action: 노드 재정렬 - gesture: 형제 파일 간 노드를 드래그하고 재정렬 위치에 가깝게 놓습니다. 재정렬 할 때는 검은 색 화살표 점이 표시됩니다.. - - action: 직접 노트 위치 수정 - gesture: 재정렬을 위한 화살표 점이 표시되지 않을 때까지 노드를 드래그하세요. 재정렬 화살표가 표시되어 있지만, 수동으로 위치를 - 지정하려면 Shift 키를 누른 상태에서 드래그하십시오. 루트 노드의 하위 자료는 모든 방향에서 끌어 올 수 있지만, 하위 노드는 - 루트와 관련된 상위 폴더 방향으로 만 이동 할 수 있습니다.. - - action: 노드 이름 재설정 - gesture: 더블 클릭 혹은 두번 선택하기 - - action: 작업이 포함된 메뉴 표시 - gesture: 노드를 마우스 오른쪽 버튼으로 클릭하거나 배경을 두 번 탭하거나 노드를 길게 누르기 (터치 장치) - - action: 노드 상위파일 변경 - gesture: 다른 노드에 노드를 드래그 앤 드롭하기 (순환 삭제는 허용되지 않으므로 하위 노드 또는 하위 노드 중 한개의 노드를 - 삭제할 수 없습니다.) - - action: 작업 실행 혹은 다른 창에서 프로젝트 열기 - gesture: Alt+클릭 - title_key_shortcuts: 키보드 활용 - title_mouse_shortcuts: 마우스 및 터치 활용 - title_shortcuts: 단축키 - info_all_saved: 모든 것이 성공적으로 저장되었습니다 - info_any_failed: '몇몇 요청이 이행되지 않았습니다:' - info_no_permission: 이를 실행할 수 있는 허가가 없습니다 - label_color_by: 으로 칠해진 - label_go_to: 이동하기 - label_or: 혹은 - last_state_modal: - label_differencies: 서버의 차이점 - message_changed: 다른 속성을 가지고 있습니다 (브라우저 => 서버) ({{changes}}) - message_missing: '"{{from}}" 상위자료로 부터 없어짐' - message_moved: '"{{from}}" 가 아닌 "{{to}}" 의 하부내역입니다' - message_present: '"{{to}}" 의 하위자료로 있습니다' - text_reload_appeal: 서버에서 재로딩을 하시겠습니까? - title: WBS의 마지막 고객의 위치는 서버 위치와 다릅니다 - reload_modal: - label_errors: 오류 - text_reload_appeal: 저장되지 않은 항목들을 무시하고 서버로부터 데이터를 재로딩할까요? - title: WBS가 올바르게 저장되지 못했습니다 - stored_modal: - text_load_appeal: 로딩하시겠습니까? 대신에 서버에서 새로운 상태를 로딩하시겠습니까? - title: 저장되지 않은 상태를 찾았습니다 - warning_delete_node: 연결 {{name}}과 모든 하위 자료를 삭제하시겠습니까? - warning_not_saved: 올바르게 저장되지 않았습니다 - heading_easy_wbs_issues: 쉬운 WBS - label_filter_group_easy_wbs_easy_issue_query: 작업 - label_filter_group_easy_wbs: - easy_issue_query: 작업 - project_default_page: - easy_wbs: 쉬운 WBS diff --git a/plugins/easy_wbs/config/locales/mk.yml b/plugins/easy_wbs/config/locales/mk.yml deleted file mode 100644 index 0ae1092..0000000 --- a/plugins/easy_wbs/config/locales/mk.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -mk: diff --git a/plugins/easy_wbs/config/locales/nl.yml b/plugins/easy_wbs/config/locales/nl.yml deleted file mode 100644 index 5d3da2c..0000000 --- a/plugins/easy_wbs/config/locales/nl.yml +++ /dev/null @@ -1,173 +0,0 @@ ---- -nl: - easy_query: - name: - easy_wbs_easy_issue_query: Easy WBS - easy_wbs: - button_actions: Andere acties - button_add_child: Voeg kind toe - button_add_parent: Voeg ouder toe - button_add_sibling: Voeg broer/zus toe - button_all_icons: Iconen - button_collapse: Inklappen - button_collapse_all: Alle inklappen - button_cut: Knippen - button_display: Weergave instellingen - button_edit_data: Bewerk gegevens - button_expand: Uitvouwen - button_expand_all: Allen uitklappen - button_expand_collapse: Uitklappen/Inklappen - button_legend: Legenda - button_one_side: Een zijde - button_paste: Plakken - button_project_menu: Easy WBS - button_redo: Opnieuw - button_remove_node: Verwijder knooppunt - button_show_links: Toon links - button_undo: Ongedaan maken - edit_issue: Bewerk taak - error_create: kon niet aangemaakt worden - error_delete: kon niet verwijderd worden - error_update: kon niet bijgewerkt worden - errors: - not_subtaskable: Taak "%{task_name}" kan geen subtaak zijn door de instelling - van zijn tracker - free: - button_upgrade: Koop Volledige versie - button_upgrade_href: https://www.easyredmine.com/redmine-wbs-plugin - feature_coloring: Kleur knooppunten op eigenschap - feature_context_menu: Wijzig eigenschappen knooppunt - feature_filtering: Filter knooppunten op eigenschap - header_not_available: Alleen beschikbaar in Volledige versie - text_not_available: is beschikbaar in de Volledige versie van Easy WBS. - hotkeys: - info_mac_metakey: Op Mac OSX kunnen Ctrl en Cmd gebruikt worden voor snelkoppelingen - met Ctrl hieronder - sommige browsers blokkeren bepaalde toetscombinaties. - Dus, bijvoorbeeld, als Cmd+Spatie niet werkt in uw browser, probeer dan Ctrl+Spatie. - keyboard: - - title: Knooppunt manipulatie - hotkeys: - - hotkey: Enter - info: Kind Toevoegen - - hotkey: Shift+Enter - info: Kind Toevoegen boven of breuklijn (bij hernoemen knooppunt) - - hotkey: Tab of Insert - info: Add child - - hotkey: Shift+Tab - info: Ouder Invoegen - - hotkey: Spatie - info: Kind Toevoegen - - hotkey: Shift+Spatie - info: Knooppunt data bewerken - - hotkey: Backspace of Delete - info: Verwijder Knooppunt - - hotkey: Ctrl+Up/Down - info: Verplaats knooppunt omhoog/omlaag - - title: Bewerken - hotkeys: - - hotkey: Ctrl+S - info: Opslaan - - hotkey: Ctrl+X of C - info: Knippen - - hotkey: Ctrl+C of Y - info: Kopieren - - hotkey: Ctrl+V of P - info: PLakken - - hotkey: U of Ctrl+Z - info: Ongedaan maken - - hotkey: R of Ctrl+Y of Ctrl+Shift+Z - info: Redo - - title: Selectie - hotkeys: - - hotkey: Pijltjestoetsen - info: Selecteer het knooppunt omhoog/omlaag/links/rechts van de huidige - geselecteerde - - hotkey: Shift + Pijltjestoetsen - info: Voeg knooppunt toe omhoog/omlaag/links/rechts van de selectie (handing - voor het selecteren van meerdere siblings) - - hotkey: "{" - info: Multi-select het huidige knooppunt en de volledige sub-boom eronder - - hotkey: "[" - info: Multi-select alleen de sub-boom onder het huidige knooppunt (niet - het knooppunt zelf) - - hotkey: "=" - info: Multi-select alle siblings van het huidige knooppunt (met dezelfde - ouder) - - hotkey: "." - info: Cancel multi-selection and select only the current node again - - hotkey: 1 - 9 - info: Selecteer alle knooppunten op een bepaald niveau (dwz 1 selecteert - alle knooppunten van het eerste niveau) - - title: Navigatie en scherm - hotkeys: - - hotkey: "/ of F" - info: Knooppunt inklappen of uitklappen (vouw kinderen in of uit) - - hotkey: Ctrl + of Z - info: Zoom in - - hotkey: Ctrl - of Shift Z - info: Zoom uit - - hotkey: Esc, 0, Ctrl+0 - info: Reset map weergave - selecteer basis knooppunt en breng het naar het - centrum van het scherm - mouse: - - action: Verplaats de kaart - gesture: klik en versleep het centrale knooppunt, klik en versleep de achtergrond - of scroll met trackpad/touchpad. - - action: Selecteer een knooppunt - gesture: tap of click erop - - action: Selecteer meerdere knooppunten - gesture: Shift+click - - action: Herschik knooppunten - gesture: versleep een knooppunt tussen zijn siblings, horizontaal dichtbij - de positie om te herschikken. Een zwarte pijl is zichtbaar bij het herschikken. - - action: Handmatig een knooppunt plaatsen - gesture: sleep een knooppunt tot de pijl voor het herschikken niet meer zichtbaar - is. Om handmatig te plaatsen als de pijl zichtbaar is hou Shift ingedrukt - bij het slepen. Let op, kinderen van het basisknooppunt kunnen in elke richting - getrokken worden, maar knooppunten van een lagen niveau kunnen alleen geplaatst - worden in de richting van de ouders relatief aan de basis. - - action: Hernoem een knooppunt - gesture: Dubbelklik of dubbeltap erop - - action: Toon context menu met handelingen - gesture: 'Rechtsklikken op knooppunt (met muis) of dubbel-tap de achtergrand, - of hou het knooppunt lang ingedrukt: toon (op touch apparaten)' - - action: Wijzig knooppunt ouder - gesture: sleep en drop een knooppunt op een ander knooppunt (circelvormige - drops zijn niet toegestaan, dus een knooppunt kan niet op zijn kinderen - of afstammelingen geplaatst worden) - - action: Open kwestie of project in apart venster - gesture: Alt+click - title_key_shortcuts: Toetsenbord bediening - title_mouse_shortcuts: Muis en touch bedieningen - title_shortcuts: Snelkoppelingen - info_all_saved: Alles succesvol opgeslagen - info_any_failed: 'Sommige aanvragen zijn mislukt:' - info_no_permission: U heeft niet de benodigde toestemming om dit te doen - label_color_by: Kleur op - label_go_to: Ga naar - label_or: of - last_state_modal: - label_differencies: Verschillen op server - message_changed: heeft verschillende attributen (browser => server) ({{changes}}) - message_missing: mist van ouder "{{from}}" - message_moved: is kind van "{{to}}", niet "{{from}}" - message_present: is present als kind van "{{to}}" - text_reload_appeal: Wilt u de staat opnieuw laden van de server - title: Laatste client status van WBS is anders dan de server status - reload_modal: - label_errors: Fouten - text_reload_appeal: Wilt u de niet opgeslagen items negeren en de data van de - server opnieuw laden? - title: WBS niet correct opgeslagen - stored_modal: - text_load_appeal: Wilt u het opnieuw laden? In plaats van de verse status van - de server? - title: Niet opgeslagen staat gevonden - warning_delete_node: Wilt u echt{{name}} en al zijn afhankelijkheden verwijderen? - warning_not_saved: is niet correct opgeslagen - heading_easy_wbs_issues: Easy WBS - label_filter_group_easy_wbs_easy_issue_query: Taken - label_filter_group_easy_wbs: - easy_issue_query: Taken - project_default_page: - easy_wbs: Easy WBS diff --git a/plugins/easy_wbs/config/locales/no.yml b/plugins/easy_wbs/config/locales/no.yml deleted file mode 100644 index 38901c6..0000000 --- a/plugins/easy_wbs/config/locales/no.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -'no': diff --git a/plugins/easy_wbs/config/locales/pl.yml b/plugins/easy_wbs/config/locales/pl.yml deleted file mode 100644 index 35d8983..0000000 --- a/plugins/easy_wbs/config/locales/pl.yml +++ /dev/null @@ -1,174 +0,0 @@ ---- -pl: - easy_query: - name: - easy_wbs_easy_issue_query: Easy WBS - easy_wbs: - button_actions: Inne działania - button_add_child: Dodaj dziecko - button_add_parent: Dodaj rodzica - button_add_sibling: Dodaj rodzeństwo - button_all_icons: Ikony - button_collapse: Zwiń - button_collapse_all: Zwiń wszystko - button_cut: Przytnij - button_display: Wyświetl ustawienia - button_edit_data: Edytuj dane - button_expand: Rozwiń - button_expand_all: Rozwiń wszystko - button_expand_collapse: Rozwiń/Zwiń - button_legend: Legenda - button_one_side: Jedna strona - button_paste: Wklej - button_project_menu: Easy WBS - button_redo: Popraw - button_remove_node: Usuń węzeł - button_show_links: Pokaż linki - button_undo: Cofnij - edit_issue: Edytuj zadanie - error_create: nie mógł zostać utworzony - error_delete: nie mógł zostać usunięty - error_update: nie mógł zostać zaktualizowany - errors: - not_subtaskable: Zadanie "%{task_name}" nie może być podzadaniem ustawienia - swojego narzędzia śledzenia - free: - button_upgrade: Zdobądź pełną wersję - button_upgrade_href: https://www.easyredmine.com/redmine-wbs-plugin - feature_coloring: Koloruj węzły wg właściwości - feature_context_menu: Zmienianie właściwości węzłów - feature_filtering: Filtruj węzły wg właściwości - header_not_available: Dostępny jedynie w pełnej wersji - text_not_available: jest dostępny jedynie w pełnej wersji Easy WBS. - hotkeys: - info_mac_metakey: Na Mac OSX, klucze Ctrl i Cmd mogą być użyte dla skrótów oznaczonych - poniżej Ctrl - niektóre przeglądarki zapobiegają łączeniu niektórych klawiszy. - Przykładowo, w ten sposób, jeśli Cmd+Space nie działa na twojej przeglądarce, - wypróbuj Ctrl+Space. - keyboard: - - title: Manipulacja węzłem - hotkeys: - - hotkey: Enter - info: Dodaj rodzeństwo - - hotkey: Shift+Enter - info: Dodaj rodzeństwo powyżej lub przy końcu linii (podczas zmiany nazwy - węzła) - - hotkey: Zakładka lub Wstaw - info: Dodaj rodzeństwo - - hotkey: Shift+Tab - info: Wstaw rodzica - - hotkey: Spacja - info: Zmień nazwę węzła - - hotkey: Shift+Space - info: Edytuj dane węzła - - hotkey: Backspace lub Delete - info: Usuń węzeł - - hotkey: Ctrl+Up/Down - info: Przesuń węzeł w górę/dół - - title: Edytowanie - hotkeys: - - hotkey: Ctrl+S - info: Zapisz - - hotkey: Ctrl+X lub C - info: Przytnij - - hotkey: Ctrl+C lub Y - info: Kopiuj - - hotkey: Ctrl+V lub P - info: Wklej - - hotkey: U lub Ctrl+Z - info: Cofnij - - hotkey: R lub Ctrl+Y lub Ctrl+Shift+Z - info: Napraw - - title: Wybór - hotkeys: - - hotkey: Klawisze strzałek - info: Wybierz węzeł w górę/dół/lewo/prawo obecnie wybranego - - hotkey: Shift + Klawisze strzałek - info: Dodaj węzeł w górę/dół/lewo/prawo do wyboru (użyteczne przy rodzeństwie - wielokrotnego wyboru) - - hotkey: "{" - info: Wielokrotny wybór obecnego węzła i całe pod drzewo pod nim - - hotkey: "[" - info: Wielokrotny wybór jedynie drzewa pod obecnym węzłem (nie samym węzłem) - - hotkey: "=" - info: Wielokrotny wybór całego rodzeństwa obecnego węzła (które posiada - tego samego rodzica) - - hotkey: "." - info: Anuluj wielokrotny wybór i wybierz ponownie jedynie obecny węzeł - - hotkey: 1 - 9 - info: Wybierz wszystkie węzły konkretnego poziomu (np. 1 wybiera wszystkie - węzły pierwszego poziomu) - - title: Nawigacja i ekran - hotkeys: - - hotkey: "/ lub F" - info: Rozwiń lub zwiń węzeł (złóż lub rozłóż dzieci) - - hotkey: Ctrl + lub Z - info: Powiększ w - - hotkey: Ctrl - lub Shift Z - info: Pomniejsz - - hotkey: Esc, 0, Ctrl+0 - info: Resetuj widok mapy – wybierz węzeł główny i przynieś go na środek - ekranu - mouse: - - action: Przesuń mapę - gesture: kliknij i przeciągnij środek węzła, kliknij i przeciągnij tło lub - przewiń trackpadem/touchpadem. - - action: Wybierz węzeł - gesture: stuknij lub kliknij go - - action: Wybierz wiele węzłów - gesture: Shift+click - - action: Zmień kolejność węzłów - gesture: przeciągnij węzeł pomiędzy jego rodzeństwem, zamknij poziomo do pozycji - ponownej zmiany kolejności. Podczas zmieniania kolejności pojawi się czarna - strzałka. - - action: Ręcznie ustaw pozycję węzła - gesture: przeciągnij węzeł dopóki nie pokazuje się punkt strzałki do zmiany - kolejności. Aby wymusić ręczną pozycję nawet gdy pokazuje się punkt zmiany - kolejności strzałki, przytrzymaj Shift podczas przeciągania. Zauważ, że - dzieci głównego węzła mogą zostać przeciągnięte w dowolnym kierunku, jednak - węzły niższego poziomu mogą zostać wypozycjonowane w kierunku swojego rodzica - do węzła. - - action: Zmień nazwę węzła - gesture: Dwa razy kliknij lub stuknij to - - action: Pokaż menu kontekstowe z operacjami - gesture: 'Kliknij prawym przyciskiem myszy na węzeł lub podwójnie stuknij - tło, bądź przyciśnij dłużej węzeł: pokaż (na urządzeniach dotykowych)' - - action: Zmień rodzica węzła - gesture: przeciągnij i opuść węzeł na inny węzeł (okrągłe krople nie są dozwolone, - więc nie możesz opuścić kropli na węzeł jednego z jego dzieci lub potomków) - - action: Otwórz problem lub projekt w oddzielnym oknie - gesture: Alt+click - title_key_shortcuts: Operacje klawiatury - title_mouse_shortcuts: Operacje myszki i touch pada - title_shortcuts: Skróty - info_all_saved: Wszystko pomyślnie zapisano - info_any_failed: 'Niektóre żądania nie powiodły się:' - info_no_permission: Nie masz wymaganych pozwoleń, aby to zrobić - label_color_by: Kolor wg - label_go_to: Idź do - label_or: lub - last_state_modal: - label_differencies: Różnice na serwerze - message_changed: posiada różne atrybuty (przeglądarka => serwer) ({{changes}}) - message_missing: brakuje rodzica "{{from}}" - message_moved: jest dzieckiem "{{to}}", nie "{{from}}" - message_present: jest obecnie jako dziecko "{{to}}" - text_reload_appeal: Czy chcesz ponownie załadować stan z serwera? - title: Ostatni stan klienta WBS jest różny od stanu serwera - reload_modal: - label_errors: Błędy - text_reload_appeal: Czy chcesz zignorować niezapisane pozycje i ponownie załadować - dane z serwera? - title: Poprawne zapisanie WBS nie powiodło się - stored_modal: - text_load_appeal: Czy chcesz załadować to zamiast odświeżać stanu z serwera? - title: Znaleziono niezapisany stan - warning_delete_node: Czy na pewno chcesz usunąć węzeł {{name}} i wszystkich jego - potomków? - warning_not_saved: nie jest poprawnie zapisany - heading_easy_wbs_issues: Easy WBS - label_filter_group_easy_wbs_easy_issue_query: Zadania - label_filter_group_easy_wbs: - easy_issue_query: Zadania - project_default_page: - easy_wbs: '' diff --git a/plugins/easy_wbs/config/locales/pt-BR.yml b/plugins/easy_wbs/config/locales/pt-BR.yml deleted file mode 100644 index 48634c3..0000000 --- a/plugins/easy_wbs/config/locales/pt-BR.yml +++ /dev/null @@ -1,174 +0,0 @@ ---- -pt-BR: - easy_query: - name: - easy_wbs_easy_issue_query: WBS Easy - easy_wbs: - button_actions: Outras ações - button_add_child: Adicionar criança - button_add_parent: Adicionar pai - button_add_sibling: Adicionar irmão - button_all_icons: Ícones - button_collapse: Colapsar - button_collapse_all: Colapsar tudo - button_cut: Cortar - button_display: Configurações de visualização - button_edit_data: Editar dados - button_expand: Expandir - button_expand_all: Expandir tudo - button_expand_collapse: Expandir/Colapso - button_legend: Legenda - button_one_side: Um lado - button_paste: Colar - button_project_menu: Easy WBS - button_redo: Refazer - button_remove_node: Remover nódulo - button_show_links: Mostrar links - button_undo: Desfazer - edit_issue: Editar tarefa - error_create: não pode ser criado - error_delete: não pode ser apagado - error_update: não pode ser atualizado - errors: - not_subtaskable: Tarefa "%{task_name}" não pode ser sub tarefa, devido à configuração - do seu rastreador - free: - button_upgrade: Obter versão completa - button_upgrade_href: https://www.easyredmine.com/redmine-wbs-plugin - feature_coloring: Colorir nódulos por propriedade - feature_context_menu: Mudar propriedades de nódulo - feature_filtering: Filtrar nódulos por propriedades - header_not_available: Disponível apenas na versão completa - text_not_available: está disponível na versão completa de Easy WBS. - hotkeys: - info_mac_metakey: Em Mac OSX, teclas Ctrl e Cmd pode ser usado para atalhos - marcados Ctrl em baixo - alguns browsers evitar certas combinações de teclas. - Então, por exemplo, se Cmd+Space não funcionar no browser, tente Ctrl+Space. - keyboard: - - title: Manipulação de nódulos - hotkeys: - - hotkey: Enter - info: Adicionar irmão - - hotkey: Shift+Enter - info: Adicionar irmão ou mudança de linha (quando renomear nódulo) - - hotkey: Guia ou Inserir - info: Adicionar criança - - hotkey: Shift+Guia - info: Inserir pai - - hotkey: Espaço - info: Renomear nódulo - - hotkey: Shift+Espaço - info: Editar informação de nódulos - - hotkey: Espaço ou Apagar - info: Retirar nódulo - - hotkey: Ctrl+Seta para Cima/Baixo - info: Deslocar nódulo para Cima/Baixo - - title: Editando - hotkeys: - - hotkey: Ctrl+S - info: Salvar - - hotkey: Ctrl+X ou C - info: Cortar - - hotkey: Ctrl+C ou Y - info: Copiar - - hotkey: Ctrl+V ou P - info: Colar - - hotkey: U ou Ctrl+Z - info: Desfazer - - hotkey: R ou Ctrl+Y ou Ctrl+Shift+Z - info: Refazer - - title: Seleção - hotkeys: - - hotkey: Teclas Seta - info: Selecionar o nódulo cima/baixo/esquerda/direita do que está atualmente - selecionado - - hotkey: Shift + Teclas Seta - info: Adicionar nódulo cima/baixo/esquerda/direita para seleção (útil para - irmãos multi-selecionados) - - hotkey: "{" - info: 'Multi-selecione o nódulo atual e toda subárvore sob ele ' - - hotkey: "[" - info: Multi-selecione somente a subárvore sob o nódulo atual (e não o próprio - nódulo) - - hotkey: "=" - info: Multi-selecione todos os irmãos do nódulo atual (que tem o mesmo pai) - - hotkey: "." - info: Cancelar multi-seleção e selecionar somente o nódulo atual novamente - - hotkey: 1 - 9 - info: 'Selecionar todos os nódulos de um nível específico (por exemplo: - 1 seleciona todos os nódulos do primeiro nível)' - - title: Navegação e tela - hotkeys: - - hotkey: "/ ou F" - info: Expandir ou contrair nódulo (dobrar ou desdobrar crianças) - - hotkey: Ctrl + ou Z - info: Fazer zoom - - hotkey: Ctrl - ou Shift Z - info: Diminuir - - hotkey: Esc, 0, Ctrl+0 - info: Redefinir vista de mapa - selecionar nódulo raíz e trazê-lo para o - centro da tela - mouse: - - action: Deslocar o mapa - gesture: clique e arraste o nódulo central, clique e arraste o fundo ou desloque - com touchpad/teclado tátil. - - action: Selecionar um nódulo - gesture: toque ou clique sobre ele - - action: Selecionar nódulos múltiplos - gesture: Shift+clique - - action: Reordenar nódulos - gesture: arraste um nódulo entre os da mesma família, na horizontal perto - da posição da reordenação. Uma seta preta vai mostrar quando reordenar. - - action: Posicione manualmente um nódulo - gesture: apenas arraste o nódulo até a ponta da flecha para a reordenação - não estiver a mostra. Para forçar manualmente a posição, mesmo quando a - ponta da flecha de reordenação esteja a mostra, segure a tecla Shift ao - arrastar. Por favor note que filhos do nódulo raiz podem ser arrastados - em qualquer direção, mas nódulos de nível inferior só podem ser posicionados - na direção do seu pai em relação à raiz. - - action: Renomear um nódulo - gesture: Clique ou toque duas vezes - - action: Mostrar menu de contexto com operações - gesture: 'Clique com o botão direito em um nódulo (com o mouse) ou toque duas - vezes no fundo, ou pressione por muito tempo um nódulo: mostra (em dispositivos - sensíveis ao toque)' - - action: Mudar nódulo pai - gesture: arraste e solte um nodulo em outro nódulo (movimentos circulares - não são permitidos, para que você não possa deixar cair um nódulo em um - de seus filhos ou descendentes) - - action: Questão em aberto ou projeto em janela separada - gesture: Alt+clique - title_key_shortcuts: Operações de teclado - title_mouse_shortcuts: Operações de mouse e toque - title_shortcuts: Atalhos - info_all_saved: Tudo foi salvo com êxito - info_any_failed: 'Algumas das solicitações falharam:' - info_no_permission: Você não tem as permissões necessárias para fazer isso - label_color_by: Colorir por - label_go_to: Ir a - label_or: ou - last_state_modal: - label_differencies: Diferenças no servidor - message_changed: têm diferentes atributos (browser => servidor) ({{changes}}) - message_missing: está ausente do pai "{{from}}" - message_moved: é criança de "{{to}}", não "{{from}}" - message_present: no momento é criança de "{{to}}" - text_reload_appeal: Você quer recarregar estado desdo servidor? - title: Último cliente de WBS é diferente do estado do servidor - reload_modal: - label_errors: Erros - text_reload_appeal: Você quer ignorar itens que não foram salvos e recarregar - os dados do servidor? - title: WBS não foi salvo corretamente - stored_modal: - text_load_appeal: Você quer carregá-lo? Em vez do estado recente a partir do - servidor? - title: Estado não salvos foram encontrados - warning_delete_node: Deseja mesmo apagar o nó {{name}} e todos os seus descendentes? - warning_not_saved: não foi salvado corretamente - heading_easy_wbs_issues: Easy WBS - label_filter_group_easy_wbs_easy_issue_query: Tarefas - label_filter_group_easy_wbs: - easy_issue_query: Tarefas - project_default_page: - easy_wbs: Easy WBS diff --git a/plugins/easy_wbs/config/locales/pt.yml b/plugins/easy_wbs/config/locales/pt.yml deleted file mode 100644 index e40c485..0000000 --- a/plugins/easy_wbs/config/locales/pt.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -pt: diff --git a/plugins/easy_wbs/config/locales/ro.yml b/plugins/easy_wbs/config/locales/ro.yml deleted file mode 100644 index 0df6ab3..0000000 --- a/plugins/easy_wbs/config/locales/ro.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -ro: diff --git a/plugins/easy_wbs/config/locales/ru.yml b/plugins/easy_wbs/config/locales/ru.yml deleted file mode 100644 index 00e24ca..0000000 --- a/plugins/easy_wbs/config/locales/ru.yml +++ /dev/null @@ -1,172 +0,0 @@ ---- -ru: - easy_query: - name: - easy_wbs_easy_issue_query: Easy WBS - easy_wbs: - button_actions: Другие действия - button_add_child: Добавить дочерний элемент - button_add_parent: добавить родительский элемент - button_add_sibling: Добавить одноуровневый элемент - button_all_icons: Icons - button_collapse: Свернуть - button_collapse_all: Свернуть все - button_cut: Вырезать - button_display: Настройки - button_edit_data: Редактировать данные - button_expand: Развернуть - button_expand_all: Развернуть все - button_expand_collapse: Развернуть/Свернуть - button_legend: Легенда - button_one_side: одна сторона - button_paste: Вставить - button_project_menu: Easy WBS - button_redo: Переделать - button_remove_node: Удалить узел - button_show_links: Показать ссылки - button_undo: Отмена - edit_issue: Редактировать задачу - error_create: не может быть создан - error_delete: не может быть удален - error_update: не может быть обновлен - errors: - not_subtaskable: Задача "%{task_name}" не может быть подзадачей из-за настройки - трекера - free: - button_upgrade: Получить Полную версию - button_upgrade_href: https://www.easyredmine.com/redmine-wbs-plugin - feature_coloring: Цвет узла - feature_context_menu: Изменение свойств узла - feature_filtering: Фильтрация узлов - header_not_available: Доступно только в Полной версии - text_not_available: доступна в полной версии Easy WBS - hotkeys: - info_mac_metakey: На Mac OSX, Ctrl и клавиши Cmd могут быть использованы для - ярлыков отмеченные Ctrl - иногда браузеры блокируют некоторые комбинации клавиш. - Так, например, если Cmd + Space не работает в вашем браузере, попробуйте Ctrl - + Space. - keyboard: - - title: Манипуляция c узлом - hotkeys: - - hotkey: Enter - info: Добавить одноуровневый элемент - - hotkey: Shift+Enter - info: Добавить одноуровневый элемент выше или разрыв (при переименовании - узла) - - hotkey: Tab or Insert - info: Добавить дочерний элемент - - hotkey: Shift+Tab - info: Вставить родителя - - hotkey: Space - info: Переименовать узел - - hotkey: Shift+Space - info: Редактирование данных узла - - hotkey: Backspace or Delete - info: Удалить узел - - hotkey: Ctrl+Up/Down - info: Переместить узел вверх/вниз - - title: Редактирование - hotkeys: - - hotkey: Ctrl+S - info: Сохранить - - hotkey: Ctrl+X or C - info: Вырезать - - hotkey: Ctrl+C or Y - info: Копировать - - hotkey: Ctrl+V or P - info: Вставить - - hotkey: U or Ctrl+Z - info: Отменить - - hotkey: R or Ctrl+Y or Ctrl+Shift+Z - info: Восстановить - - title: Выбор - hotkeys: - - hotkey: Arrow Keys - info: 'Выберете узел вверх/вниз/влево/вправо для выбора нужного ' - - hotkey: Shift + Arrow keys - info: 'Добавление узла выше/ниже/слева/справа от выбранного (удобно при - выборе нескольких одноуровневых элементов) ' - - hotkey: "{" - info: Выбор текущего узла и всего его поддерева - - hotkey: "[" - info: Мульти-выбор только поддерева текущего узла (не самого узла) - - hotkey: "=" - info: Выбор нескольких или всех одноуровневых элементов текущего узла (у - которых один и тот же родитель) - - hotkey: "." - info: Отмена мульти-выбора и выбор снова текущего узла - - hotkey: 1 - 9 - info: Выбрать все узлы определенного уровня (например, 1, выбор всех узлов - первого уровня) - - title: 'Навигация и масштабирование ' - hotkeys: - - hotkey: "/ or F" - info: Развернуть или свернуть узел (свернуть или развернуть дочерние элементы) - - hotkey: Ctrl + or Z - info: 'Увеличить масштаб ' - - hotkey: Ctrl - or Shift Z - info: Уменьшить масштаб - - hotkey: Esc, 0, Ctrl+0 - info: 'Сброс настроек карты – выбор корневого узла и перемещение его в центр - экрана ' - mouse: - - action: Переместить карту - gesture: 'кликните на центральный узел и перетащите его, кликните на фон и - переместите его при помощи мышки или на тачпаде. ' - - action: Выберете узел - gesture: коснитесь или кликните по нему - - action: 'Выбор нескольких узлов ' - gesture: Shift+click - - action: Перемещение узлов - gesture: выберете узел и перемещайте его между одноуровневыми элементами, - переместите его ближе к нужной позиции. Черная стрелка поможет вам при смене - положения узла. - - action: Перемещение узла в ручную - gesture: Просто перетаскиваете узел пока не появиться черная стрелка. Для - принудительной смены позиции, даже когда появляется черная стрелка нажмите - Shift. Обратите внимание, что дочерние элементы основного узла можно перемещать - в любом направлении, а более низкого узлы располагаются только в одном направлении - относительно своего родителя. - - action: 'Переименование узла ' - gesture: дважды кликните на узел - - action: Показать контекстное меню с операциями - gesture: Кликните Правой кнопкой мыши по узлу или двойное кликание по фону - узла, или долгое нажатие (на сенсорных устройствах) - - action: Изменение родителя у узла - gesture: притащите узел на другой узел (circular drops are not allowed, so - you can't drop a node on one of it's children or descendants) - - action: 'Открытие задачи в отдельном окне ' - gesture: Alt+click - title_key_shortcuts: Работа с клавиатурой - title_mouse_shortcuts: Мышь и операции с тачскрином - title_shortcuts: Клавиши быстрого доступа - info_all_saved: Все успешно сохранено - info_any_failed: Некоторые запросы отменены - info_no_permission: У вас нет необходимых прав делать это - label_color_by: 'Цвет по:' - label_go_to: Переход к - label_or: или - last_state_modal: - label_differencies: Различия на сервере - message_changed: имеют разные атрибуты (браузер => сервер) ({{changes}} - message_missing: отсутствует от родительского "{{from}}" - message_moved: является дочерним к "{{to}}", а не "{{from}}" - message_present: присутствует как дочерний к "{{to}}" - text_reload_appeal: Вы хотите перезагрузить состояние с сервера? - title: Последнее состояние клиента WBS отличается от состояния сервера - reload_modal: - label_errors: Ошибки - text_reload_appeal: Вы хотите игнорировать несохраненные элементы и загрузить - данные с сервера? - title: WBS не удалось сохранить должным образом - stored_modal: - text_load_appeal: Хотите загрузить это? Вместо новой версии с сервера? - title: Было найдено несохраненное состояние - warning_delete_node: Вы действительно хотите удалить узел {{name}} и все его связи? - warning_not_saved: не сохранен должным образом - heading_easy_wbs_issues: Easy WBS - label_filter_group_easy_wbs_easy_issue_query: Задачи - label_filter_group_easy_wbs: - easy_issue_query: Задачи - project_default_page: - easy_wbs: Easy WBS diff --git a/plugins/easy_wbs/config/locales/sk.yml b/plugins/easy_wbs/config/locales/sk.yml deleted file mode 100644 index 354e579..0000000 --- a/plugins/easy_wbs/config/locales/sk.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -sk: diff --git a/plugins/easy_wbs/config/locales/sl.yml b/plugins/easy_wbs/config/locales/sl.yml deleted file mode 100644 index 31bb26c..0000000 --- a/plugins/easy_wbs/config/locales/sl.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -sl: diff --git a/plugins/easy_wbs/config/locales/sq.yml b/plugins/easy_wbs/config/locales/sq.yml deleted file mode 100644 index 9c092f0..0000000 --- a/plugins/easy_wbs/config/locales/sq.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -sq: diff --git a/plugins/easy_wbs/config/locales/sr-YU.yml b/plugins/easy_wbs/config/locales/sr-YU.yml deleted file mode 100644 index 24e1796..0000000 --- a/plugins/easy_wbs/config/locales/sr-YU.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -sr-YU: diff --git a/plugins/easy_wbs/config/locales/sr.yml b/plugins/easy_wbs/config/locales/sr.yml deleted file mode 100644 index 43a1014..0000000 --- a/plugins/easy_wbs/config/locales/sr.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -sr: diff --git a/plugins/easy_wbs/config/locales/sv.yml b/plugins/easy_wbs/config/locales/sv.yml deleted file mode 100644 index ed425ea..0000000 --- a/plugins/easy_wbs/config/locales/sv.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -sv: diff --git a/plugins/easy_wbs/config/locales/th.yml b/plugins/easy_wbs/config/locales/th.yml deleted file mode 100644 index 3596914..0000000 --- a/plugins/easy_wbs/config/locales/th.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -th: diff --git a/plugins/easy_wbs/config/locales/tr.yml b/plugins/easy_wbs/config/locales/tr.yml deleted file mode 100644 index 3be79e7..0000000 --- a/plugins/easy_wbs/config/locales/tr.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -tr: diff --git a/plugins/easy_wbs/config/locales/zh-TW.yml b/plugins/easy_wbs/config/locales/zh-TW.yml deleted file mode 100644 index 44cf0f8..0000000 --- a/plugins/easy_wbs/config/locales/zh-TW.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -zh-TW: diff --git a/plugins/easy_wbs/config/locales/zh.yml b/plugins/easy_wbs/config/locales/zh.yml deleted file mode 100644 index 2622411..0000000 --- a/plugins/easy_wbs/config/locales/zh.yml +++ /dev/null @@ -1,155 +0,0 @@ ---- -zh: - easy_query: - name: - easy_wbs_easy_issue_query: Easy WBS - easy_wbs: - button_actions: 其它操作 - button_add_child: 新增子项 - button_add_parent: 新增父项 - button_add_sibling: 新建同级项(同一父项) - button_all_icons: 图标 - button_collapse: 折叠 - button_collapse_all: 全部折叠 - button_cut: 剪切 - button_display: 显示设置 - button_edit_data: 修改资料 - button_expand: 展开 - button_expand_all: 全部展开 - button_expand_collapse: 展开/ 折叠 - button_legend: 图例 - button_one_side: 一侧 - button_paste: 粘贴 - button_project_menu: Easy WBS - button_redo: 重做 - button_remove_node: 删除节点 - button_show_links: 显示连接关系 - button_undo: 撤消 - edit_issue: 编辑任务 - error_create: 无法创建 - error_delete: 无法删除 - error_update: 无法更新 - errors: - not_subtaskable: 由于跟踪器的设置, 任务"%{task_name}" 无法为其创建子任务. - free: - button_upgrade: 获取完全版 - button_upgrade_href: https://www.easyredmine.com/redmine-wbs-plugin - feature_coloring: 按性质着色节点 - feature_context_menu: 变更节点性质 - feature_filtering: 按性质分类的过滤器节点 - header_not_available: 仅在完全版中可用 - text_not_available: 在Easy WBS完全版中可用 - hotkeys: - info_mac_metakey: 在 Mac OSX系统, Ctrl 和 Cmd 键可以用于被浏览器屏蔽的一些CTRL键组合, 如, 在 Cmd+Space - 被浏览器禁止时, 使用 Ctrl+Space. - keyboard: - - title: 结点操作 - hotkeys: - - hotkey: Enter - info: 添加同级成员 - - hotkey: Shift+Enter - info: 添加成员或换行(当重命名结点时) - - hotkey: Tab or Insert - info: 添加子项 - - hotkey: Shift+Tab - info: 插入父项 - - hotkey: Space - info: 重命名结点 - - hotkey: Shift+Space - info: 编辑结点资料 - - hotkey: Backspace or Delete - info: 移除结点 - - hotkey: Ctrl+Up/Down - info: 上下移动结点 - - title: 编辑 - hotkeys: - - hotkey: Ctrl+S - info: 保存 - - hotkey: Ctrl+X or C - info: 剪切 - - hotkey: Ctrl+C or Y - info: 复制 - - hotkey: Ctrl+V or P - info: 粘贴 - - hotkey: U or Ctrl+Z - info: 撤消 - - hotkey: R or Ctrl+Y or Ctrl+Shift+Z - info: 恢复 - - title: 选择 - hotkeys: - - hotkey: Arrow Keys - info: 上下左右移动当前选定的结点 - - hotkey: Shift + Arrow keys - info: 在选定结点的上/下/左/右方添加一个新的结点(选定多个兄弟结点时特别有用) - - hotkey: "{" - info: 多选 -选定当前结点和其下方整个子树形上的成员 - - hotkey: "[" - info: 多选 -选定当前结点下方整个子树形上的成员 (不包括自身) - - hotkey: "=" - info: 多选 -选定当前结点同一父项下所有同级成员 - - hotkey: "." - info: 取消多选, 只选择当前结点自身 - - hotkey: 1 - 9 - info: 选择一个特别层级的所有结点(如1 表示选定所有1级的结点) - - title: 导航与视图 - hotkeys: - - hotkey: "/ or F" - info: 展开或折叠结点(收起或打开其子项) - - hotkey: Ctrl + or Z - info: 放大 - - hotkey: Ctrl - or Shift Z - info: 缩小 - - hotkey: Esc, 0, Ctrl+0 - info: 重置节点地图设置- 选定根结点并让其处于屏幕中心 - mouse: - - action: 移动树形图 - gesture: " 点并拖动中心结点, 点击并拖动背景或滚动方向条/触摸板." - - action: 选择结点 - gesture: 点击此处 - - action: 选择多个结点 - gesture: Shift+click - - action: 重排结点 - gesture: 拖动结点, 将其放在水平方向其重排后的大致位置. 重排时将会出现一个黑色的箭头. - - action: 手动放置结点 - gesture: 拖动结点直到重排时的箭头消失. 如要在箭头未消失时强行放置结点, 须在拖动的同时 按住 Shift. 注意根结点下一级子结点可以在拖向任何方向, - 但低级的子结点只能在其上级所关联的范围内拖动. - - action: 重命名结点 - gesture: 双击结点 - - action: 显示带操作的菜单环境 - gesture: '右击结点 (用鼠标) 或双击背景, 或长按结点: 显示 (在触摸设备上)' - - action: 变更父结点 - gesture: 将结点拖放到另一个结点 (不允许出偱环, 所以不允许将其放到其子结点或继承者上) - - action: 在另外的窗口打开项目或问题 - gesture: Alt+左击 - title_key_shortcuts: 键盘操作 - title_mouse_shortcuts: 鼠标操作 - title_shortcuts: 快捷键及操作一览表 - info_all_saved: 已全部保存成功 - info_any_failed: '其中一些请求失败:' - info_no_permission: 你没有足够的权限进行此操作 - label_color_by: 按颜色 - label_go_to: 转到 - label_or: 或 - last_state_modal: - label_differencies: 服务器上的差异 - message_changed: 有不同的属性 (browser => server) ({{changes}}) - message_missing: 从父项 "{{from}}"中丢失 - message_moved: 是"{{to}}"的子项, 而不是"{{from}}" - message_present: 代表 "{{to}}"的子项 - text_reload_appeal: 重新从服务器下载国别(状态)? - title: WBS中最新的客户国别(状态)与服务器中的不同 - reload_modal: - label_errors: 错误 - text_reload_appeal: 忽略未保存项目并从服务器重新下载数据? - title: WBS 没能完全保存 - stored_modal: - text_load_appeal: 重新下载, 而不是从服务器刷新国别(状态)? - title: 不能找到未保存国别(状态) - warning_delete_node: 你真的想要删除节点 {{name}} 和这个节点下 全部子项? - warning_not_saved: 没有完全保存 - heading_easy_wbs_issues: Easy WBS - label_filter_group_easy_wbs_easy_issue_query: 任务 - label_filter_group_easy_wbs: - easy_issue_query: 任务 - project_default_page: - easy_wbs: Easy WBS diff --git a/plugins/easy_wbs/config/routes.rb b/plugins/easy_wbs/config/routes.rb deleted file mode 100644 index e35baee..0000000 --- a/plugins/easy_wbs/config/routes.rb +++ /dev/null @@ -1,6 +0,0 @@ -# Because of plugin deactivations -if Redmine::Plugin.installed?(:easy_wbs) - resources :projects do - get 'easy_wbs', to: 'easy_wbs#index', as: 'easy_wbs_index' - end -end diff --git a/plugins/easy_wbs/init.rb b/plugins/easy_wbs/init.rb deleted file mode 100644 index 2f8159a..0000000 --- a/plugins/easy_wbs/init.rb +++ /dev/null @@ -1,19 +0,0 @@ -Redmine::Plugin.register :easy_wbs do - name 'Easy WBS plugin' - author 'Easy Software Ltd' - description 'new WBS tree hierarchy generator' - version '1.5' - url 'www.easyredmine.com' - author_url 'www.easysoftware.cz' - - requires_redmine_plugin :easy_mindmup, version_or_higher: '1.0' - - if Redmine::Plugin.installed?(:easy_extensions) - depends_on [:easy_mindmup] - end - -end - -unless Redmine::Plugin.installed?(:easy_extensions) - require_relative 'after_init' -end diff --git a/plugins/easy_wbs/lib/easy_wbs/easy_wbs.rb b/plugins/easy_wbs/lib/easy_wbs/easy_wbs.rb deleted file mode 100644 index 7acb657..0000000 --- a/plugins/easy_wbs/lib/easy_wbs/easy_wbs.rb +++ /dev/null @@ -1,7 +0,0 @@ -module EasyWbs - - def self.easy_extensions? - Redmine::Plugin.installed?(:easy_extensions) - end - -end diff --git a/plugins/easy_wbs/lib/easy_wbs/hooks.rb b/plugins/easy_wbs/lib/easy_wbs/hooks.rb deleted file mode 100644 index 4265885..0000000 --- a/plugins/easy_wbs/lib/easy_wbs/hooks.rb +++ /dev/null @@ -1,9 +0,0 @@ -module EasyWbs - class Hooks < Redmine::Hook::ViewListener - - def helper_options_for_default_project_page(context={}) - context[:default_pages] << 'easy_wbs' if context[:enabled_modules].include?('easy_wbs') - end - - end -end diff --git a/plugins/easy_wbs/lib/easy_wbs/redmine_patch/controllers/queries_controller_patch.rb b/plugins/easy_wbs/lib/easy_wbs/redmine_patch/controllers/queries_controller_patch.rb deleted file mode 100644 index ca8efa8..0000000 --- a/plugins/easy_wbs/lib/easy_wbs/redmine_patch/controllers/queries_controller_patch.rb +++ /dev/null @@ -1,26 +0,0 @@ -module EasyWbs - module QueriesControllerPatch - - def self.included(base) - base.prepend(InstanceMethods) - end - - module InstanceMethods - - # Redmine return only direct sublasses but - # Wbs query inherit from IssueQuery - def query_class - case params[:type] - when 'EasyWbs::IssueQuery' - EasyWbs::IssueQuery - else - super - end - end - - end - - end -end - -RedmineExtensions::PatchManager.register_controller_patch 'QueriesController', 'EasyWbs::QueriesControllerPatch' diff --git a/plugins/easy_wbs/lib/easy_wbs/redmine_patch/helpers/application_helper_patch.rb b/plugins/easy_wbs/lib/easy_wbs/redmine_patch/helpers/application_helper_patch.rb deleted file mode 100644 index 6eb1ada..0000000 --- a/plugins/easy_wbs/lib/easy_wbs/redmine_patch/helpers/application_helper_patch.rb +++ /dev/null @@ -1,17 +0,0 @@ -module EasyWbs - module ApplicationHelperPatch - - def self.included(base) - base.class_eval do - - def link_to_project_with_easy_wbs(project, options = {}) - { controller: 'easy_wbs', action: 'index', project_id: project } - end - - end - end - - end -end - -RedmineExtensions::PatchManager.register_helper_patch 'ApplicationHelper', 'EasyWbs::ApplicationHelperPatch' diff --git a/plugins/easy_wbs/lib/easy_wbs/redmine_patch/models/project_patch.rb b/plugins/easy_wbs/lib/easy_wbs/redmine_patch/models/project_patch.rb deleted file mode 100644 index 67467aa..0000000 --- a/plugins/easy_wbs/lib/easy_wbs/redmine_patch/models/project_patch.rb +++ /dev/null @@ -1,30 +0,0 @@ -module EasyWbs - module ProjectPatch - - def self.included(base) - base.send(:include, InstanceMethods) unless base.respond_to?(:assignable_users_including_all_subprojects) - end - - module InstanceMethods - - def assignable_users_including_all_subprojects - if Setting.display_subprojects_issues? - types = ['User'] - types << 'Group' if Setting.issue_group_assignment? - - @assignable_users_including_all_subprojects ||= Principal. - active. - joins(:members => :roles). - where(:type => types, :roles => {:assignable => true}). - where(:members => {:project_id => Project.where("lft >= ? AND rgt <= ?", lft, rgt)}).distinct.sorted - else - assignable_users - end - end - - end - - end -end - -RedmineExtensions::PatchManager.register_model_patch 'Project', 'EasyWbs::ProjectPatch' diff --git a/plugins/easy_wbs/spec/controllers/easy_wbs_controller_spec.rb b/plugins/easy_wbs/spec/controllers/easy_wbs_controller_spec.rb deleted file mode 100644 index 1188d7f..0000000 --- a/plugins/easy_wbs/spec/controllers/easy_wbs_controller_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -require File.expand_path('../../../../easyproject/easy_plugins/easy_extensions/test/spec/spec_helper', __FILE__) - -RSpec.describe EasyWbsController, logged: :admin do - - around(:each) do |example| - with_settings(rest_api_enabled: 1) { example.run } - end - - context 'rest api' do - let(:project) { FactoryGirl.create(:project, add_modules: ['easy_wbs']) } - - it 'enabled' do - get :index, project_id: project - expect(response).to be_success - end - end - -end - diff --git a/plugins/easy_wbs/spec/features/jasmine_spec.rb b/plugins/easy_wbs/spec/features/jasmine_spec.rb deleted file mode 100644 index 6f26ae3..0000000 --- a/plugins/easy_wbs/spec/features/jasmine_spec.rb +++ /dev/null @@ -1,22 +0,0 @@ -# require File.expand_path('../../../../easyproject/easy_plugins/easy_extensions/test/spec/spec_helper', __FILE__) -# -# RSpec.feature 'Jasmine', logged: :admin, js: true, js_wait: true do -# -# let(:superproject) { -# FactoryGirl.create(:project, add_modules: ['easy_wbs'], number_of_issues: 3) -# } -# -# around(:each) do |example| -# with_settings(rest_api_enabled: 1) { example.run } -# end -# -# describe 'WBS' do -# it 'should not fail' do -# visit project_easy_wbs_index_path(superproject, run_jasmine_tests: true) -# wait_for_ajax -# expect(page).to have_css('.jasmine-bar') -# result = page.evaluate_script('ysy.pro.test.parseResult();') -# expect(result).to eq('success') -# end -# end -# end diff --git a/plugins/easy_wbs/spec/features/wbs_legend_spec.rb b/plugins/easy_wbs/spec/features/wbs_legend_spec.rb deleted file mode 100644 index 0479c49..0000000 --- a/plugins/easy_wbs/spec/features/wbs_legend_spec.rb +++ /dev/null @@ -1,59 +0,0 @@ -require File.expand_path('../../../../easyproject/easy_plugins/easy_extensions/test/spec/spec_helper', __FILE__) - -RSpec.feature 'legend', logged: :admin, js: true do - - let(:project_1) { - FactoryGirl.create(:project, add_modules: ['easy_wbs']) - } - let(:priority_A) { - FactoryGirl.create(:issue_priority, name: 'Priority A') - } - let(:priority_B) { - FactoryGirl.create(:issue_priority, name: 'Priority B') - } - let(:priority_C) { - FactoryGirl.create(:issue_priority, name: 'Priority C') - } - let(:priority_D) { - FactoryGirl.create(:issue_priority, name: 'Priority D') - } - let(:issue_1) { - FactoryGirl.create(:issue, project_id: project_1.id, priority_id: priority_A.id) - } - let(:issue_2) { - FactoryGirl.create(:issue, project_id: project_1.id, priority_id: priority_B.id) - } - let(:issue_3) { - FactoryGirl.create(:issue, project_id: project_1.id, priority_id: priority_C.id) - } - - around(:each) do |example| - with_settings(rest_api_enabled: 1) { - with_easy_settings(easy_wbs_no_sidebar: 1) { example.run } - } - end - - it 'should show legend filled with priorities' do - issue_1 - issue_2 - issue_3 - priority_D - visit project_easy_wbs_index_path(project_1) - wait_for_ajax - expect(page).to have_text(project_1.name) - page.find('.mindmup-color-select').first(:option, I18n.t(:field_priority)).select_option - legend = page.find('.mindmup-legend') - expect(legend).to have_text('Priority A') - expect(legend).to have_text('Priority B') - expect(legend).to have_text('Priority C') - - # TODO: All priorities all visible - # - # expect(legend).not_to have_text('Priority D') - # within(legend) do - # click_link(I18n.t(:label_more)) - # end - - expect(legend).to have_text('Priority D') - end -end diff --git a/plugins/easy_wbs/spec/features/wbs_no_sidebar_spec.rb b/plugins/easy_wbs/spec/features/wbs_no_sidebar_spec.rb deleted file mode 100644 index e834ada..0000000 --- a/plugins/easy_wbs/spec/features/wbs_no_sidebar_spec.rb +++ /dev/null @@ -1,22 +0,0 @@ -require File.expand_path('../../../../easyproject/easy_plugins/easy_extensions/test/spec/spec_helper', __FILE__) - -RSpec.feature 'sidebar', logged: :admin, js: true do - let(:superproject) { - FactoryGirl.create(:project, add_modules: ['easy_wbs'], number_of_issues: 3) - } - - around(:each) do |example| - with_settings(rest_api_enabled: 1) { - with_easy_settings(easy_wbs_no_sidebar: 1) { example.run } - } - end - - it 'should be missing' do - visit project_easy_wbs_index_path(superproject) - wait_for_ajax - within('#container') do - expect(page).to have_text(superproject.name) - end - expect(page).not_to have_css('.mindmup-sidebar__container') - end -end diff --git a/plugins/easy_wbs/spec/features/wbs_sidebar_spec.rb b/plugins/easy_wbs/spec/features/wbs_sidebar_spec.rb deleted file mode 100644 index 35eedd3..0000000 --- a/plugins/easy_wbs/spec/features/wbs_sidebar_spec.rb +++ /dev/null @@ -1,84 +0,0 @@ -require File.expand_path('../../../../easyproject/easy_plugins/easy_extensions/test/spec/spec_helper', __FILE__) - -RSpec.feature 'sidebar', logged: :admin, js: true do - let(:priority_A) { - FactoryGirl.create(:issue_priority, name: 'Priority A') - } - let(:superproject) { - FactoryGirl.create(:project, add_modules: ['easy_wbs'], number_of_issues: 0) - } - let(:superproject_issue) { - FactoryGirl.create(:issue, :project_id => superproject.id, priority_id: priority_A.id) - } - let(:sub_issue) { - FactoryGirl.create(:issue, :parent_issue_id => superproject_issue.id, :project_id => superproject.id, - description: "sub_issue of #{superproject_issue.subject} in project #{superproject.name}") - } - - around(:each) do |example| - with_settings(rest_api_enabled: 1) { example.run } - end - - it 'should show sidebar data for superproject_issue' do - expect(superproject_issue.priority_id).to eq(priority_A.id) - visit project_easy_wbs_index_path(superproject) - wait_for_ajax - - menu=page.find('#wbs_menu') - sidebar_toggler=page.find('.mindmup-sidebar__toggler') - sidebar_toggler.click - scale_down=menu.find('.scaleDown') - scale_down.click - scale_down.click - container=page.find('#container') - sidebar_toggler.click - - container.find('span', text: superproject_issue.subject).click - - wait_for_ajax - within('.mindmup-sidebar__input__name') do - expect(find('input').value).to eq(superproject_issue.subject) - end - within('.mindmup-sidebar__attribute-group') do - priority_attribute = page.find('.mindmup-sidebar__attribute-label', text: I18n.t(:field_priority)).first(:xpath, './/..') - priority_select = priority_attribute.find('.mindmup-sidebar__attribute-form-field') - # priority_option_selector = "option[value='#{priority_select.value}']" - # binding.pry - expect(priority_select.find("option[value='#{priority_select.value}']")).to have_text(priority_A.name) - end - - end - it 'should show sidebar data for sub_issue' do - sub_issue - visit project_easy_wbs_index_path(superproject) - wait_for_ajax - - menu=page.find('#wbs_menu') - sidebar_toggler=page.find('.mindmup-sidebar__toggler') - sidebar_toggler.click - scale_down=menu.find('.scaleDown') - scale_down.click - scale_down.click - container=page.find('#container') - sidebar_toggler.click - - within('#wbs_menu') do - page.find('a', text: I18n.t(:button_display, :scope => [:easy_wbs])).hover - click_link(I18n.t(:button_collapse_all, :scope => [:easy_wbs])) - click_link(I18n.t(:button_expand_all, :scope => [:easy_wbs])) - end - - expect(container).to have_text(sub_issue.subject) - container.find('span', text: sub_issue.subject).click - - wait_for_ajax - - within('.mindmup-sidebar__input__name') do - expect(find('input').value).to eq(sub_issue.subject) - end - within('.mindmup-sidebar__attribute-group') do - expect(page).to have_text(sub_issue.description) - end - - end -end diff --git a/plugins/easy_wbs/spec/features/wbs_tree_spec.rb b/plugins/easy_wbs/spec/features/wbs_tree_spec.rb deleted file mode 100644 index 27baa2c..0000000 --- a/plugins/easy_wbs/spec/features/wbs_tree_spec.rb +++ /dev/null @@ -1,90 +0,0 @@ -require File.expand_path('../../../../easyproject/easy_plugins/easy_extensions/test/spec/spec_helper', __FILE__) - -RSpec.feature 'tree', logged: :admin, js: true do - let(:superproject) { - FactoryGirl.create(:project, add_modules: ['easy_wbs'], number_of_issues: 0) - } - let(:subproject) { - FactoryGirl.create(:project, add_modules: ['easy_wbs'], number_of_issues: 0, parent_id: superproject.id) - } - let(:project_issues) { - FactoryGirl.create_list(:issue, 3, :project_id => superproject.id) - } - let(:subproject_issues) { - FactoryGirl.create_list(:issue, 3, :project_id => subproject.id) - } - let(:sub_issues) { - FactoryGirl.create_list(:issue, 3, :parent_issue_id => subproject_issues[0].id, :project_id => subproject.id) - } - let(:sub_sub_issues) { - FactoryGirl.create_list(:issue, 3, :parent_issue_id => sub_issues[0].id, :project_id => subproject.id) - } - - around(:each) do |example| - with_settings(rest_api_enabled: 1) { - with_easy_settings(easy_wbs_no_sidebar: 1) { example.run } - } - end - it 'should show project items in correct tree' do - superproject - project_issues - subproject_issues - sub_issues - sub_sub_issues - visit project_easy_wbs_index_path(superproject) - wait_for_ajax - - def sidebar_toggler - page.find('.mindmup-sidebar__toggler') - rescue - return nil - end - - expect(page).to have_css('#container') - unless sidebar_toggler.nil? - sidebar_toggler.click - end - menu=page.find('#wbs_menu') - scale_down=menu.find('.scaleDown') - scale_down.click - scale_down.click - scale_down.click - container=page.find('#container') - #puts evaluate_script('ysy.loader.sourceData;').to_json - expect(container).to have_text(superproject.name) - project_issues.each do |issue| - expect(container).to have_text(issue.subject) - end - expect(container).to have_text(subproject.name) - subproject_issues.each do |issue| - expect(container).not_to have_text(issue.subject) - end - - node = container.find('span', text: subproject.name).find(:xpath, '..') - node.find('.mapjs-collapsor').click - subproject_issues.each do |issue| - expect(container).to have_text(issue.subject) - end - sub_issues.each do |issue| - expect(container).not_to have_text(issue.subject) - end - - sleep(0.5) - node = container.find('span', text: subproject_issues[0].subject).find(:xpath, '..') - node.find('.mapjs-collapsor').click - sub_issues.each do |issue| - expect(container).to have_text(issue.subject) - end - sub_sub_issues.each do |issue| - expect(container).not_to have_text(issue.subject) - end - - sleep(0.5) - node = container.find('span', text: sub_issues[0].subject).find(:xpath, '..') - execute_script("easyMindMupClasses.MindMup.allMindMups[\"WBS classic\"].mapModel.selectNode(#{node[:id].split('_')[1]})") - node.find('.mapjs-collapsor').click - sub_sub_issues.each do |issue| - expect(container).to have_text(issue.subject) - end - end -end diff --git a/plugins/redmine_agile/Gemfile b/plugins/redmine_agile/Gemfile deleted file mode 100644 index 58237bb..0000000 --- a/plugins/redmine_agile/Gemfile +++ /dev/null @@ -1 +0,0 @@ -gem "redmine_crm" diff --git a/plugins/redmine_agile/README.rdoc b/plugins/redmine_agile/README.rdoc deleted file mode 100644 index 320c8ea..0000000 --- a/plugins/redmine_agile/README.rdoc +++ /dev/null @@ -1,19 +0,0 @@ -= Agile plugin - -== Install - -* Copy redmine_agile plugin to {RAILS_APP}/plugins on your redmine path -* Run bundle install --without development test RAILS_ENV=production -* Run bundle exec rake redmine:plugins NAME=redmine_agile RAILS_ENV=production - -== Uninstall - -<pre> -bundle exec rake redmine:plugins NAME=redmine_agile VERSION=0 RAILS_ENV=production -rm -r plugins/redmine_agile -</pre> - -== Test - -bundle exec rake db:drop db:create db:migrate redmine:plugins RAILS_ENV=test -bundle exec rake test TEST="plugins/redmine_agile/test/**/*_test.rb" RAILS_ENV=test \ No newline at end of file diff --git a/plugins/redmine_agile/app/controllers/agile_boards_controller.rb b/plugins/redmine_agile/app/controllers/agile_boards_controller.rb deleted file mode 100644 index 2f04dd2..0000000 --- a/plugins/redmine_agile/app/controllers/agile_boards_controller.rb +++ /dev/null @@ -1,158 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -class AgileBoardsController < ApplicationController - unloadable - - menu_item :agile - - before_action :find_issue, only: [:update, :issue_tooltip, :inline_comment, :edit_issue, :update_issue, :agile_data] - before_action :find_optional_project, only: [ - :index, - :create_issue, - ] - before_action :authorize, except: [:index, :edit_issue, :update_issue] - - accept_api_auth :agile_data - - helper :issues - helper :journals - helper :projects - include ProjectsHelper - helper :custom_fields - include CustomFieldsHelper - helper :issue_relations - include IssueRelationsHelper - helper :watchers - include WatchersHelper - helper :attachments - include AttachmentsHelper - helper :queries - include QueriesHelper - helper :repositories - include RepositoriesHelper - helper :sort - include SortHelper - include IssuesHelper - helper :timelog - include RedmineAgile::AgileHelper - helper :checklists if RedmineAgile.use_checklist? - - def index - retrieve_agile_query - if @query.valid? - @issues = @query.issues - @issue_board = @query.issue_board - @board_columns = @query.board_statuses - @allowed_statuses = statuses_allowed_for_create - - respond_to do |format| - format.html { render :template => 'agile_boards/index', :layout => !request.xhr? } - format.js - end - else - respond_to do |format| - format.html { render(:template => 'agile_boards/index', :layout => !request.xhr?) } - format.js - end - end - rescue ActiveRecord::RecordNotFound - render_404 - end - - def update - (render_403; return false) unless @issue.editable? - retrieve_agile_query_from_session - old_status = @issue.status - @issue.init_journal(User.current) - @issue.safe_attributes = auto_assign_on_move? ? params[:issue].merge(:assigned_to_id => User.current.id) : params[:issue] - checking_params = params.respond_to?(:to_unsafe_hash) ? params.to_unsafe_hash : params - - saved = checking_params['issue'] && checking_params['issue'].inject(true) do |total, attribute| - if @issue.attributes.include?(attribute.first) - total &&= @issue.attributes[attribute.first].to_i == attribute.last.to_i - else - total &&= true - end - end - call_hook(:controller_agile_boards_update_before_save, { params: params, issue: @issue}) - @update = true - if saved && @issue.save - call_hook(:controller_agile_boards_update_after_save, { :params => params, :issue => @issue}) - AgileData.transaction do - Issue.eager_load(:agile_data).find(params[:positions].keys).each do |issue| - issue.agile_data.position = params[:positions][issue.id.to_s]['position'] - issue.agile_data.save - end - end if params[:positions] - - @inline_adding = params[:issue][:notes] || nil - - respond_to do |format| - format.html { render(:partial => 'issue_card', :locals => {:issue => @issue}, :status => :ok, :layout => nil) } - end - else - respond_to do |format| - messages = @issue.errors.full_messages - messages = [l(:text_agile_move_not_possible)] if messages.empty? - format.html { - render json: messages, status: :unprocessable_entity, layout: nil - } - end - end - end - - def issue_tooltip - render :partial => 'issue_tooltip' - end - - def inline_comment - render 'inline_comment', :layout => nil - end - - def agile_data - @agile_data = @issue.agile_data - return render_404 unless @agile_data - - respond_to do |format| - format.any { head :ok } - format.api { } - end - end - - private - - def auto_assign_on_move? - RedmineAgile.auto_assign_on_move? && @issue.assigned_to.nil? && - !params[:issue].keys.include?('assigned_to_id') && - @issue.status_id != params[:issue]['status_id'].to_i - end - - def statuses_allowed_for_create - issue = Issue.new(project: @project) - issue.tracker = issue_tracker(issue) - issue.new_statuses_allowed_to - end - - def issue_tracker(issue) - return issue.allowed_target_trackers.first if issue.respond_to?(:allowed_target_trackers) - return @project.trackers.first if @project - nil - end -end diff --git a/plugins/redmine_agile/app/controllers/agile_charts_controller.rb b/plugins/redmine_agile/app/controllers/agile_charts_controller.rb deleted file mode 100644 index 5fd0ebe..0000000 --- a/plugins/redmine_agile/app/controllers/agile_charts_controller.rb +++ /dev/null @@ -1,140 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -class AgileChartsController < ApplicationController - unloadable - - menu_item :agile - - before_action :find_optional_project, :only => [:show, :render_chart] - before_action :find_optional_version, :only => [:render_chart, :select_version_chart] - - helper :issues - helper :journals - helper :projects - include ProjectsHelper - helper :custom_fields - include CustomFieldsHelper - helper :issue_relations - include IssueRelationsHelper - helper :watchers - include WatchersHelper - helper :attachments - include AttachmentsHelper - helper :queries - include QueriesHelper - helper :repositories - include RepositoriesHelper - helper :sort - include SortHelper - include IssuesHelper - helper :timelog - include RedmineAgile::AgileHelper - - def show - retrieve_charts_query - @query.date_to ||= Date.today - @issues = @query.issues - respond_to do |format| - format.html - end - end - - def render_chart - if @version - @issues = @version.fixed_issues - options = { date_from: @version.start_date, - date_to: [@version.due_date, - @issues.maximum(:due_date), - @issues.maximum(:updated_on)].compact.max, - due_date: @version.due_date || @issues.maximum(:due_date) || @issues.maximum(:updated_on), - chart_unit: params[:chart_unit] } - @chart = params[:chart] - else - retrieve_charts_query - @issues = Issue.visible - @issues = @issues.joins(:fixed_version) if @query.filters.keys.include?('version_status') - @issues = @issues.where(@query.statement) - options = { date_from: @query.date_from, - date_to: @query.date_to, - interval_size: @query.interval_size, - chart_unit: @query.chart_unit } - end - render_data(options) - end - - def select_version_chart - end - - private - - def render_data(options = {}) - agile_chart = RedmineAgile::Charts::AGILE_CHARTS[@chart] - data = agile_chart[:class].data(@issues, options) if agile_chart - - if data - data[:chart] = @chart - data[:chart_unit] = options[:chart_unit] - return render json: data - end - - raise ActiveRecord::RecordNotFound - end - - def find_optional_version - @version = Version.find(params[:version_id]) if params[:version_id] - rescue ActiveRecord::RecordNotFound - render_404 - end - - def retrieve_charts_query - if params[:query_id].present? - @query = AgileChartsQuery.find(params[:query_id]) - raise ::Unauthorized unless @query.visible? - @query.project = @project - elsif params[:set_filter] || session[:agile_charts_query].nil? || session[:agile_charts_query][:project_id] != (@project ? @project.id : nil) - # Give it a name, required to be valid - @query = AgileChartsQuery.new(:name => '_') - @query.project = @project - @query.build_from_params(params) - session[:agile_charts_query] = { project_id: @query.project_id, - filters: @query.filters, - group_by: @query.group_by, - column_names: @query.column_names, - date_from: @query.date_from, - date_to: @query.date_to, - interval_size: @query.interval_size, - chart: @query.chart, - chart_unit: @query.chart_unit } - else - # retrieve from session - @query = AgileChartsQuery.new(name: '_', - filters: session[:agile_charts_query][:filters] || session[:agile_query][:filters], - group_by: session[:agile_charts_query][:group_by], - column_names: session[:agile_charts_query][:column_names], - date_from: session[:agile_charts_query][:date_from], - date_to: session[:agile_charts_query][:date_to], - interval_size: session[:agile_charts_query][:interval_size], - chart: session[:agile_charts_query][:chart], - chart_unit: session[:agile_charts_query][:chart_unit]) - @query.project = @project - end - @chart = params[:chart] || @query.chart - end -end diff --git a/plugins/redmine_agile/app/controllers/agile_charts_queries_controller.rb b/plugins/redmine_agile/app/controllers/agile_charts_queries_controller.rb deleted file mode 100644 index 6dc6fa0..0000000 --- a/plugins/redmine_agile/app/controllers/agile_charts_queries_controller.rb +++ /dev/null @@ -1,21 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -class AgileChartsQueriesController < ApplicationController -end diff --git a/plugins/redmine_agile/app/controllers/agile_journal_details_controller.rb b/plugins/redmine_agile/app/controllers/agile_journal_details_controller.rb deleted file mode 100644 index 3d2c6c0..0000000 --- a/plugins/redmine_agile/app/controllers/agile_journal_details_controller.rb +++ /dev/null @@ -1,71 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -class AgileJournalDetailsController < ApplicationController - unloadable - - before_action :find_issue - - helper :issues - helper :agile_support - include AgileSupportHelper - - def done_ratio - @done_ratios = @issue.journals.map(&:details).flatten.select {|detail| 'done_ratio' == detail.prop_key }.sort_by {|a| a.journal.created_on } - @done_ratios.unshift(JournalDetail.new(:property => 'attr', :prop_key => 'done_ratio', :value => history_initial_value(@done_ratios) || @issue.done_ratio, - :journal => Journal.new(:user => @issue.author, :created_on => @issue.created_on))) - end - - def status - @statuses_collector = AgileStatusesCollector.new(@issue) - @group = params[:group_by] if params[:group_by].present? - - respond_to do |format| - format.html - format.csv { send_data(issue_statuses_to_csv(@statuses_collector), type: 'text/csv; header=present', filename: "issue_#{@issue.id}_statuses.csv") } - end - end - - def assignee - @assignees = @issue.journals.map(&:details).flatten.select {|detail| 'assigned_to_id' == detail.prop_key }.sort_by {|a| a.journal.created_on } - @assignees.unshift(JournalDetail.new(:property => 'attr', :prop_key => 'assigned_to_id', :value => history_initial_value(@assignees) || @issue.assigned_to_id, - :journal => Journal.new(:user => @issue.author, :created_on => @issue.created_on))) - end - - def edit - end - - def new - end - - private - - def find_issue - @issue = Issue.eager_load(:journals => :details).find(params[:issue_id]) - raise Unauthorized unless @issue.visible? - @project = @issue.project - rescue ActiveRecord::RecordNotFound - render_404 - end - - def history_initial_value(journals) - return nil unless journals.present? - journals.first.old_value - end -end diff --git a/plugins/redmine_agile/app/helpers/agile_boards_helper.rb b/plugins/redmine_agile/app/helpers/agile_boards_helper.rb deleted file mode 100644 index 5a11b6f..0000000 --- a/plugins/redmine_agile/app/helpers/agile_boards_helper.rb +++ /dev/null @@ -1,159 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -module AgileBoardsHelper - def agile_color_class(issue, options={}) - '' - end - - def agile_user_color(user, options={}) - end - - def header_th(name, rowspan = 1, colspan = 1, leaf = nil) - th_attributes = {} - if leaf - # th_attributes[:style] = "" - th_attributes[:"data-column-id"] = leaf.id - issue_count = leaf.instance_variable_get("@issue_count") || 0 - count_tag = " (#{content_tag(:span, issue_count.to_i, :class => 'count')})".html_safe - - - # estimated hours total - story_points_count = leaf.instance_variable_get("@story_points") || 0 - hours_count = leaf.instance_variable_get("@estimated_hours_sum") || 0 - values = [] - values << '%.2fh' % hours_count.to_f if hours_count > 0 - values << "#{story_points_count}sp" if story_points_count > 0 - if values.present? - hours_tag = content_tag(:span, values.join('/').html_safe, class: 'hours', title: l(:field_estimated_hours)) - end - end - content_tag :th, h(name) + count_tag + hours_tag, th_attributes - end - - def render_board_headers(columns) - "<tr>#{columns.map{|column| header_th(column.name, 1, 1, column)}.join}</tr>".html_safe - end - - def color_by_name(name) - "##{"%06x" % (name.unpack('H*').first.hex % 0xffffff)}" - end - - def render_board_fields_selection(query) - query.available_inline_columns.reject(&:frozen?).reject{ |c| c.name == :story_points && !RedmineAgile.use_story_points? }.map do |column| - label_tag('', check_box_tag('c[]', column.name, query.columns.include?(column)) + column.caption, :class => "floating" ) - end.join(" ").html_safe - end - - def render_board_fields_status(query) - available_statuses = Redmine::VERSION.to_s >= '3.4' && @project ? @project.rolled_up_statuses : IssueStatus.sorted - current_statuses = query.options[:f_status] || IssueStatus.where(:is_closed => false).pluck(:id).map(&:to_s) - wp = query.options[:wp] || {} - status_tags = available_statuses.map do |status| - label_tag('', check_box_tag('f_status[]', status.id, current_statuses.include?(status.id.to_s) - ) + status.to_s, :class => 'floating') - end.join(' ').html_safe - hidden_field_tag('f[]', 'status_id').html_safe + - hidden_field_tag('op[status_id]', "=").html_safe + - status_tags - end - - def render_issue_card_hours(query, issue) - hours = [] - hours << "%.2f" % issue.total_spent_hours.to_f if query.has_column_name?(:spent_hours) && issue.total_spent_hours > 0 - hours << "%.2f" % issue.estimated_hours.to_f if query.has_column_name?(:estimated_hours) && issue.estimated_hours - hours = [hours.join('/') + "h"] unless hours.blank? - hours << "#{issue.story_points}sp" if RedmineAgile.use_story_points? && query.has_column_name?(:story_points) && issue.story_points - - content_tag(:span, "(#{hours.join('/')})", :class => 'hours') unless hours.blank? - end - - def agile_progress_bar(pcts, options={}) - pcts = [pcts, pcts] unless pcts.is_a?(Array) - pcts = pcts.collect(&:round) - pcts[1] = pcts[1] - pcts[0] - pcts << (100 - pcts[1] - pcts[0]) - width = options[:width] || '100px;' - legend = options[:legend] || '' - content_tag('table', - content_tag('tr', - (pcts[0] > 0 ? content_tag('td', '', :style => "width: #{pcts[0]}%;", :class => 'closed') : ''.html_safe) + - (pcts[1] > 0 ? content_tag('td', '', :style => "width: #{pcts[1]}%;", :class => 'done') : ''.html_safe) + - (pcts[2] > 0 ? content_tag('td', '', :style => "width: #{pcts[2]}%;", :class => 'todo') : ''.html_safe) + - (legend ? content_tag('td', content_tag('p', legend, :class => 'percent'), :class => 'legend') : ''.html_safe) - ), :class => "progress progress-#{pcts[0]}", :style => "width: #{width};").html_safe - end - - def issue_children(issue) - return unless issue.children.any? - content_tag :ul do - issue.children.select{ |x| x.visible? }.each do |child| - id = if @query.has_column_name?(:tracker) || @query.has_column_name?(:id) then "##{child.id}: " else '' end - concat "<li class='#{'task-closed' if child.closed?}'><a href='#{issue_path(child)}'>#{id}#{child.subject}</a></li>#{issue_children(child)}".html_safe - end - end - end - - def time_in_state(distance=nil) - return "" if !distance || !(distance.is_a? Time) - distance = Time.now - distance - hours = distance/(3600) - return "#{I18n.t('datetime.distance_in_words.x_hours', :count => hours.to_i)}" if hours < 24 - "#{I18n.t('datetime.distance_in_words.x_days', :count => (hours/24).to_i)}" - end - - def class_for_closed_issue(issue, is_version_board) - return '' if !RedmineAgile.hide_closed_issues_data? && !is_version_board - return 'closed-issue' if issue.closed? - '' - end - - def init_agile_tooltip_info(options={}) - js_code = "function callGetToolTipInfo() - { - var url = '#{issue_tooltip_url}'; - agileBoard.getToolTipInfo(this, url); - } - $('.tooltip').mouseenter(callGetToolTipInfo); - " - return js_code.html_safe if options[:only_code] - javascript_tag(js_code) - end - - def estimated_value(issue) - return (issue.story_points || 0) if RedmineAgile.use_story_points? - issue.estimated_hours.to_f || 0 - end - - def estimated_time_value(query, issue) - issue.estimated_hours.to_f if query.has_column_name?(:estimated_hours) - end - - def story_points_value(query, issue) - issue.story_points.to_f if query.has_column_name?(:story_points) && RedmineAgile.use_story_points? - end - - def show_checklist?(issue) - RedmineAgile.use_checklist? && issue.checklists.any? && User.current.allowed_to?(:view_checklists, issue.project) - rescue - false - end -end diff --git a/plugins/redmine_agile/app/helpers/agile_charts_helper.rb b/plugins/redmine_agile/app/helpers/agile_charts_helper.rb deleted file mode 100644 index 679997a..0000000 --- a/plugins/redmine_agile/app/helpers/agile_charts_helper.rb +++ /dev/null @@ -1,32 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -module AgileChartsHelper - def render_agile_charts_breadcrumb - links = [] - links << link_to(l(:label_project_all), project_id: nil, issue_id: nil) - links << link_to(h(@project), project_id: @project, issue_id: nil) if @project - if @version - links << @version.visible? ? link_to(@version.name, version_path(@version)) : @version.name - end - breadcrumb links - end -end diff --git a/plugins/redmine_agile/app/helpers/agile_support_helper.rb b/plugins/redmine_agile/app/helpers/agile_support_helper.rb deleted file mode 100644 index aba1c22..0000000 --- a/plugins/redmine_agile/app/helpers/agile_support_helper.rb +++ /dev/null @@ -1,70 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -module AgileSupportHelper - include ActionView::Helpers::DateHelper - - # Returns a h2 tag and sets the html title with the given arguments - def title(*args) - strings = args.map do |arg| - if arg.is_a?(Array) && arg.size >= 2 - link_to(*arg) - else - h(arg.to_s) - end - end - html_title args.reverse.map {|s| (s.is_a?(Array) ? s.first : s).to_s} - content_tag('h2', strings.join(' » ').html_safe) - end - - def event_duration(event, next_event) - end_time = next_event ? next_event.journal.created_on : Time.now - distance_of_time_in_words(end_time, event.journal.created_on).html_safe - end - - def issue_statuses_to_csv(collector) - decimal_separator = l(:general_csv_decimal_separator) - encoding = 'utf-8' - export = FCSV.generate(:col_sep => l(:general_csv_separator)) do |csv| - headers = [ "#", - l(:field_created_on, locale: :en), - l(:field_status, locale: :en), - l(:field_duration, locale: :en), - l(:field_author, locale: :en), - l(:field_assigned_to, locale: :en) - ] - csv << headers.collect {|c| Redmine::CodesetUtil.from_utf8(c.to_s, encoding) } - - collector.data.each_with_index do |data, index| - issue_status = IssueStatus.where(id: data.status_id).first - fields = [index + 1, - format_time(data.journal.created_on), - issue_status.name, - distance_of_time_in_words(data.end_time, data.start_time), - data.journal.user.name, - Principal.where(id: data.assigned_to_id).first.try(:name) - ] - csv << fields.collect { |c| Redmine::CodesetUtil.from_utf8(c.to_s, encoding) } - end - end - export - end -end diff --git a/plugins/redmine_agile/app/models/agile_charts_query.rb b/plugins/redmine_agile/app/models/agile_charts_query.rb deleted file mode 100644 index c38ffff..0000000 --- a/plugins/redmine_agile/app/models/agile_charts_query.rb +++ /dev/null @@ -1,167 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -class AgileChartsQuery < AgileQuery - unloadable - - validate :validate_query_dates - - attr_writer :date_from, :date_to - - def initialize(attributes = nil, *args) - super attributes - self.filters.delete('status_id') - self.filters['chart_period'] = { operator: 'm', values: [''] } unless has_filter?('chart_period') - end - - self.operators_by_filter_type[:chart_period] = ['><', 'w', 'lw', 'l2w', 'm', 'lm', 'y'] - - def initialize_available_filters - super - - add_available_filter 'chart_period', type: :date_past, name: l(:label_date) - end - - def sprint_values - return [] unless project - - project.shared_agile_sprints.available.map { |s| [s.to_s, s.id.to_s] } - end - - def default_columns_names - @default_columns_names = [:id, :subject, :estimated_hours, :spent_hours, :done_ratio, :assigned_to] - end - - def sql_for_chart_period_field(_field, _operator, _value) - '1=1' - end - - def chart - @chart ||= RedmineAgile::Charts.valid_chart_name_by(options[:chart]) - end - - def chart=(arg) - options[:chart] = arg - end - - def date_from - @date_from ||= chart_period[:from] - end - - def date_to - @date_to ||= chart_period[:to] - end - - def interval_size - if RedmineAgile::AgileChart::TIME_INTERVALS.include?(options[:interval_size]) - options[:interval_size] - else - RedmineAgile::AgileChart::DAY_INTERVAL - end - end - - def interval_size=(value) - options[:interval_size] = value - end - - def build_from_params(params) - if params[:fields] || params[:f] - self.filters = {}.merge(chart_period_filter(params)) - add_filters(params[:fields] || params[:f], params[:operators] || params[:op], params[:values] || params[:v]) - else - available_filters.keys.each do |field| - add_short_filter(field, params[field]) if params[field] - end - end - self.group_by = params[:group_by] || (params[:query] && params[:query][:group_by]) - self.column_names = params[:c] || (params[:query] && params[:query][:column_names]) - self.date_from = params[:date_from] || (params[:query] && params[:query][:date_from]) - self.date_to = params[:date_to] || (params[:query] && params[:query][:date_to]) - self.chart = params[:chart] || (params[:query] && params[:query][:chart]) || params[:default_chart] || RedmineAgile.default_chart - self.interval_size = params[:interval_size] || (params[:query] && params[:query][:interval_size]) || RedmineAgile::AgileChart::DAY_INTERVAL - self.chart_unit = params[:chart_unit] || (params[:query] && params[:query][:chart_unit]) || RedmineAgile::Charts::UNIT_ISSUES - - self - end - - def condition_for_status - '1=1' - end - - private - - def chart_period_filter(params) - return {} if (params[:fields] || params[:f]).include?('chart_period') - { 'chart_period' => { operator: 'm', values: [''] } } - end - - def validate_query_dates - if (self.date_from && self.date_to && self.date_from >= self.date_to) - errors.add(:base, l(:label_agile_chart_dates) + ' ' + l(:invalid, scope: 'activerecord.errors.messages')) - end - end - - def db_timestamp_regex - /(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(?:.\d*))/ - end - - def chart_period - @chart_period ||= { - from: chart_period_statement.match("chart_period > '#{db_timestamp_regex}") { |m| Time.zone.parse(m[1]) }, - to: chart_period_statement.match("chart_period <= '#{db_timestamp_regex}") { |m| Time.zone.parse(m[1]) } - } - end - - def chart_period_statement - @chart_period_statement ||= build_chart_period_statement - end - - def build_chart_period_statement - field = 'chart_period' - operator = filters[field][:operator] - values = filters[field][:values] - date = User.current.today - - case operator - when 'w' - first_day_of_week = (Setting.start_of_week || l(:general_first_day_of_week)).to_i - day_of_week = date.cwday - days_ago = (day_of_week >= first_day_of_week ? day_of_week - first_day_of_week : day_of_week + 7 - first_day_of_week) - sql_for_field(field, '><t-', [days_ago], Issue.table_name, field) - when 'm' - days_ago = date - date.beginning_of_month - sql_for_field(field, '><t-', [days_ago], Issue.table_name, field) - when 'y' - days_ago = date - date.beginning_of_year - sql_for_field(field, '><t-', [days_ago], Issue.table_name, field) - when '><' - sql_for_field(field, '><', adjusted_values(values), Issue.table_name, field) - else - sql_for_field(field, operator, values, Issue.table_name, field) - end - end - - def adjusted_values(values) - return values unless values.is_a?(Array) - - from = values[0].present? ? Date.parse(values[0]) : Date.today - to = values[1].present? ? Date.parse(values[1]) : Date.today - [from.to_s, (to < from ? from : to).to_s] - end -end diff --git a/plugins/redmine_agile/app/models/agile_data.rb b/plugins/redmine_agile/app/models/agile_data.rb deleted file mode 100644 index 87db483..0000000 --- a/plugins/redmine_agile/app/models/agile_data.rb +++ /dev/null @@ -1,25 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -class AgileData < ActiveRecord::Base - unloadable - belongs_to :issue - - validates :story_points, :numericality => {:only_integer => true, :greater_than_or_equal_to => 0, :allow_nil => true, :message => :invalid} -end diff --git a/plugins/redmine_agile/app/models/agile_query.rb b/plugins/redmine_agile/app/models/agile_query.rb deleted file mode 100644 index 1cb03d1..0000000 --- a/plugins/redmine_agile/app/models/agile_query.rb +++ /dev/null @@ -1,679 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -class AgileQuery < Query - include Redmine::SafeAttributes - - attr_reader :truncated - - self.queried_class = Issue - self.view_permission = :view_issues if Redmine::VERSION.to_s >= '3.4' - - self.available_columns = [ - QueryColumn.new(:id, sortable: "#{Issue.table_name}.id", default_order: 'desc', caption: :label_agile_issue_id), - QueryColumn.new(:project, groupable: "#{Issue.table_name}.project_id", sortable: "#{Project.table_name}.id"), - QueryColumn.new(:tracker, sortable: "#{Tracker.table_name}.position", groupable: true), - QueryColumn.new(:estimated_hours, sortable: "#{Issue.table_name}.estimated_hours"), - QueryColumn.new(:done_ratio, sortable: "#{Issue.table_name}.done_ratio"), - QueryColumn.new(:day_in_state, caption: :label_agile_day_in_state), - QueryColumn.new(:parent, groupable: "#{Issue.table_name}.parent_id", sortable: "#{AgileData.table_name}.position", caption: :field_parent_issue), - QueryColumn.new(:assigned_to, sortable: lambda { User.fields_for_order_statement }, groupable: "#{Issue.table_name}.assigned_to_id"), - QueryColumn.new(:relations, caption: :label_related_issues), - QueryColumn.new(:last_comment, caption: :label_agile_last_comment), - QueryColumn.new(:story_points, caption: :label_agile_story_points) - ] - - self.available_columns << QueryColumn.new(:checklists, caption: :label_checklist_plural) if RedmineAgile.use_checklist? - - def self.build_from_params(params, attributes = {}) - new(attributes).build_from_params(params) - end - - scope :visible, lambda { |*args| - user = args.shift || User.current - base = Project.allowed_to_condition(user, :view_issues, *args) - scope = eager_load(:project).where("#{table_name}.project_id IS NULL OR (#{base})") - - if user.admin? - scope.where("#{table_name}.visibility <> ? OR #{table_name}.user_id = ?", VISIBILITY_PRIVATE, user.id) - elsif user.memberships.any? - scope.where("#{table_name}.visibility = ?" + - " OR (#{table_name}.visibility = ? AND #{table_name}.id IN (" + - "SELECT DISTINCT q.id FROM #{table_name} q" + - " INNER JOIN #{table_name_prefix}queries_roles#{table_name_suffix} qr on qr.query_id = q.id" + - " INNER JOIN #{MemberRole.table_name} mr ON mr.role_id = qr.role_id" + - " INNER JOIN #{Member.table_name} m ON m.id = mr.member_id AND m.user_id = ?" + - " WHERE q.project_id IS NULL OR q.project_id = m.project_id))" + - " OR #{table_name}.user_id = ?", - VISIBILITY_PUBLIC, VISIBILITY_ROLES, user.id, user.id) - elsif user.logged? - scope.where("#{table_name}.visibility = ? OR #{table_name}.user_id = ?", VISIBILITY_PUBLIC, user.id) - else - scope.where("#{table_name}.visibility = ?", VISIBILITY_PUBLIC) - end - } - - def initialize(attributes = nil, *args) - super attributes - unless Redmine::VERSION.to_s > '2.4' - self.filters ||= { 'status_id' => { operator: '*', values: [''] } } - end - self.filters ||= {} - @truncated = false - end - - def card_columns - self.inline_columns.select { |c| !%w(day_in_state tracker thumbnails description assigned_to done_ratio spent_hours estimated_hours project id sub_issues checklists last_comment story_points).include?(c.name.to_s) } - end - - def visible?(user=User.current) - return true if user.admin? - return false unless project.nil? || user.allowed_to?(:view_issues, project) - case visibility - when VISIBILITY_PUBLIC - true - when VISIBILITY_ROLES - if project - (user.roles_for_project(project) & roles).any? - else - Member.where(user_id: user.id).joins(:roles).where(member_roles: {role_id: roles.map(&:id)}).any? - end - else - user == self.user - end - end - - def is_private? - visibility == VISIBILITY_PRIVATE - end - - def is_public? - !is_private? - end - - def color_base - end - - def color_base=(value) - end - - def default_chart - end - - def default_chart=(value) - end - - def chart_unit - @chart_unit ||= RedmineAgile::Charts.valid_chart_unit_by(options[:chart], options[:chart_unit]) - end - - def chart_unit=(value) - options[:chart_unit] = value - end - - def draw_relations - r = options[:draw_relations] - r.nil? || r == '1' - end - - def draw_relations=(arg) - options[:draw_relations] = (arg == '0' ? '0' : nil) - end - - def with_totals? - end - - def build_from_params(params) - if params[:fields] || params[:f] - self.filters = {} - add_filters(params[:fields] || params[:f], params[:operators] || params[:op], params[:values] || params[:v]) - else - available_filters.keys.each do |field| - add_short_filter(field, params[field]) if params[field] - end - end - self.group_by = params[:group_by] || (params[:query] && params[:query][:group_by]) - self.column_names = params[:c] || (params[:query] && params[:query][:column_names]) - self.color_base = params[:color_base] || (params[:query] && params[:query][:color_base]) - self.draw_relations = params[:draw_relations] || (params[:query] && params[:query][:draw_relations]) - if params[:f_status] || params[:wp] - self.options = options.merge({ :f_status => params[:f_status], :wp => params[:wp] }) - end - self - end - - def initialize_available_filters - principals = [] - subprojects = [] - versions = [] - categories = [] - issue_custom_fields = [] - - if project - principals += project.principals.sort - unless project.leaf? - subprojects = project.descendants.visible.all - principals += Principal.member_of(subprojects) - end - versions = project.shared_versions.all - categories = project.issue_categories.all - issue_custom_fields = project.all_issue_custom_fields - else - if all_projects.any? - principals += Principal.member_of(all_projects) - end - versions = Version.visible.where(sharing: 'system').all - issue_custom_fields = IssueCustomField.where(is_for_all: true) - end - principals.uniq! - principals.sort! - users = principals.select { |p| p.is_a?(User) } - - unless Redmine::VERSION.to_s > '2.4' - add_available_filter 'status_id', - type: :list_status, values: IssueStatus.sorted.collect{|s| [s.name, s.id.to_s] } - end - - if project.nil? - project_values = [] - if User.current.logged? && User.current.memberships.any? - project_values << ["<< #{l(:label_my_projects).downcase} >>", "mine"] - end - project_values += all_projects_values - add_available_filter("project_id", - type: :list, values: project_values - ) unless project_values.empty? - end - - add_available_filter "tracker_id", - type: :list, values: trackers.collect{|s| [s.name, s.id.to_s] } - add_available_filter "priority_id", - type: :list, values: IssuePriority.all.collect{|s| [s.name, s.id.to_s] } - - author_values = [] - author_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged? - author_values += users.collect{|s| [s.name, s.id.to_s] } - add_available_filter("author_id", - type: :list, values: author_values - ) unless author_values.empty? - - assigned_to_values = [] - assigned_to_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged? - assigned_to_values += (Setting.issue_group_assignment? ? - principals : users).collect{|s| [s.name, s.id.to_s] } - add_available_filter("assigned_to_id", - type: :list_optional, values: assigned_to_values - ) unless assigned_to_values.empty? - - group_values = Group.visible.all.collect {|g| [g.name, g.id.to_s] } - add_available_filter("member_of_group", - type: :list_optional, values: group_values - ) unless group_values.empty? - - role_values = Role.givable.collect {|r| [r.name, r.id.to_s] } - add_available_filter("assigned_to_role", - type: :list_optional, values: role_values - ) unless role_values.empty? - - if versions.any? - fixed_versions = [] - fixed_versions << ["<< #{l(:label_current_version)} >>", 'current_version'] - versions.sort.each{ |s| fixed_versions << ["#{s.project.name} - #{s.name}", s.id.to_s] } - add_available_filter "fixed_version_id", - type: :list_optional, - values: fixed_versions - end - - if categories.any? - add_available_filter "category_id", - type: :list_optional, - values: categories.collect{|s| [s.name, s.id.to_s] } - end - - add_available_filter "subject", type: :text - add_available_filter "created_on", type: :date_past - add_available_filter "updated_on", type: :date_past - add_available_filter "closed_on", type: :date_past - add_available_filter "start_date", type: :date - add_available_filter "due_date", type: :date - add_available_filter "estimated_hours", type: :float - add_available_filter "done_ratio", type: :integer - add_available_filter "parent_issue_id", type: :relation, values: all_projects_values - add_available_filter "has_sub_issues", type: :list, - values: [l(:general_text_yes), l(:general_text_no)], - label: :label_agile_has_sub_issues - add_available_filter "version_status", type: :list, - name: l("label_attribute_of_fixed_version", name: 'status'), - values: Version::VERSION_STATUSES.collect {|s| [l("version_status_#{s}"), s]} - add_available_filter "parent_issue_tracker_id", type: :list, - label: :label_agile_parent_issue_tracker_id, - values: Tracker.pluck(:name) - - if subprojects.any? - add_available_filter "subproject_id", - type: :list_subprojects, - values: subprojects.collect{|s| [s.name, s.id.to_s] } - end - - - add_custom_fields_filters(issue_custom_fields) - - add_associations_custom_fields_filters :project, :author, :assigned_to, :fixed_version - - IssueRelation::TYPES.each do |relation_type, options| - add_available_filter relation_type, type: :relation, label: options[:name], values: all_projects_values - end - - Tracker.disabled_core_fields(trackers).each { |field| - delete_available_filter field - } - - add_available_filter "issue_id", type: :integer, label: :label_issue - - if User.current.allowed_to?(:set_issues_private, nil, global: true) || - User.current.allowed_to?(:set_own_issues_private, nil, global: true) - add_available_filter 'is_private', type: :list, - values: [[l(:general_text_yes), '1'], [l(:general_text_no), '0']] - end - - if User.current.logged? - add_available_filter 'watcher_id', type: :list, values: author_values - end - end - - def available_columns - return @available_columns if @available_columns - @available_columns = self.class.available_columns.dup - @available_columns += (project ? project.all_issue_custom_fields : IssueCustomField).visible.collect { |cf| QueryCustomFieldColumn.new(cf) } - - if User.current.allowed_to?(:view_time_entries, project, global: true) - index = nil - @available_columns.each_with_index { |column, i| index = i if column.name == :estimated_hours} - index = (index ? index + 1 : -1) - # insert the column after estimated_hours or at the end - @available_columns.insert index, QueryColumn.new(:spent_hours, - sortable: "COALESCE((SELECT SUM(hours) FROM #{TimeEntry.table_name} WHERE #{TimeEntry.table_name}.issue_id = #{Issue.table_name}.id), 0)", - default_order: 'desc', - caption: :label_spent_time - ) - end - - if User.current.allowed_to?(:set_issues_private, nil, global: true) || - User.current.allowed_to?(:set_own_issues_private, nil, global: true) - @available_columns << QueryColumn.new(:is_private, sortable: "#{Issue.table_name}.is_private") - end - - disabled_fields = Tracker.disabled_core_fields(trackers).map { |field| field.sub(/_id$/, '')} - @available_columns.reject! { |column| - disabled_fields.include?(column.name.to_s) - } - - @available_columns.reject! { |column| column.name == :done_ratio} unless Issue.use_field_for_done_ratio? - - @available_columns - end - - def editable_by?(user) - return false unless user - # Admin can edit them all and regular users can edit their private queries - return true if user.admin? || (is_private? && user_id == user.id) - # Members can not edit public queries that are for all project (only admin is allowed to) - is_public? && !@is_for_all && user.allowed_to?(:manage_public_agile_queries, project, global: true) - end - - def default_columns_names - @default_columns_names = RedmineAgile.default_columns.map(&:to_sym) - end - - def has_column_name?(name) - columns.detect { |c| c.name == name} - end - - def groupable_columns - groupable_method = Redmine::VERSION.to_s > '4.2' ? :groupable? : :groupable - available_columns.select { |c| c.public_send(groupable_method) && !c.is_a?(QueryCustomFieldColumn) } - end - - def sql_for_issue_id_field(field, operator, value) - if operator == "=" - # accepts a comma separated list of ids - ids = value.first.to_s.scan(/\d+/).map(&:to_i) - if ids.present? - "#{Issue.table_name}.id IN (#{ids.join(",")})" - else - "1=0" - end - else - sql_for_field("id", operator, value, Issue.table_name, "id") - end - end - - def sql_for_watcher_id_field(field, operator, value) - db_table = Watcher.table_name - "#{Issue.table_name}.id #{ operator == '=' ? 'IN' : 'NOT IN' } (SELECT #{db_table}.watchable_id FROM #{db_table} WHERE #{db_table}.watchable_type='Issue' AND " + - sql_for_field(field, '=', value, db_table, 'user_id') + ')' - end - - def sql_for_version_status_field(field, operator, value) - sql_for_field(field, operator, value, Version.table_name, "status") - end - - def sql_for_has_sub_issues_field(field, operator, value) - cond = '' - cond = 'NOT' if operator == '=' && value.include?(I18n.t(:general_text_no)) - cond = 'NOT' if operator == '!' && value.include?(I18n.t(:general_text_yes)) - "( #{cond} EXISTS ( SELECT * FROM #{Issue.table_name} AS subissues WHERE subissues.parent_id = issues.id ) )" - end - - def sql_for_parent_issue_id_field(field, operator, value, options={}) - value = value.first.split(',') if value.is_a? Array - value = value.split(',') if value.is_a? String - sql = case operator - when '*', '!*', '=', '!' - sql_for_field(field, operator, value, queried_table_name, 'parent_id') - when '=p', '=!p', '!p' - op = (operator == '!p' ? 'NOT IN' : 'IN') - comp = (operator == '=!p' ? '<>' : '=') - "#{Issue.table_name}.parent_id #{op} (SELECT DISTINCT #{Issue.table_name}.id FROM #{Issue.table_name} WHERE #{Issue.table_name}.project_id #{comp} #{value.first.to_i})" - when '*o', '!o' - op = (operator == '!o' ? 'NOT IN' : 'IN') - "#{Issue.table_name}.parent_id #{op} (SELECT DISTINCT #{Issue.table_name}.id FROM #{Issue.table_name} WHERE #{Issue.table_name}.status_id IN (SELECT DISTINCT #{IssueStatus.table_name}.id FROM #{IssueStatus.table_name} WHERE is_closed=#{self.class.connection.quoted_false}))" - end - "(#{sql})" - end - - def sql_for_parent_issue_tracker_id_field(field, operator, value) - cond = if operator == '=' then '' else 'NOT' end - selected_trackers_ids = Tracker.where(name: value).pluck(:id).join(',') - "( EXISTS (SELECT * FROM #{Issue.table_name} AS parents WHERE parents.tracker_id #{cond} IN (#{selected_trackers_ids}) AND parents.id = issues.parent_id ) )" - end - - def sql_for_member_of_group_field(field, operator, value) - if operator == '*' # Any group - groups = Group.all - operator = '=' # Override the operator since we want to find by assigned_to - elsif operator == "!*" - groups = Group.all - operator = '!' # Override the operator since we want to find by assigned_to - else - groups = Group.where(:id => value).all - end - groups ||= [] - - members_of_groups = groups.inject([]) {|user_ids, group| - user_ids + group.user_ids + [group.id] - }.uniq.compact.sort.collect(&:to_s) - - '(' + sql_for_field("assigned_to_id", operator, members_of_groups, Issue.table_name, "assigned_to_id", false) + ')' - end - - def sql_for_assigned_to_role_field(field, operator, value) - case operator - when "*", "!*" # Member / Not member - sw = operator == "!*" ? 'NOT' : '' - nl = operator == "!*" ? "#{Issue.table_name}.assigned_to_id IS NULL OR" : '' - "(#{nl} #{Issue.table_name}.assigned_to_id #{sw} IN (SELECT DISTINCT #{Member.table_name}.user_id FROM #{Member.table_name}" + - " WHERE #{Member.table_name}.project_id = #{Issue.table_name}.project_id))" - when "=", "!" - role_cond = value.any? ? - "#{MemberRole.table_name}.role_id IN (" + value.collect{|val| "'#{self.class.connection.quote_string(val)}'"}.join(",") + ")" : - "1=0" - - sw = operator == "!" ? 'NOT' : '' - nl = operator == "!" ? "#{Issue.table_name}.assigned_to_id IS NULL OR" : '' - "(#{nl} #{Issue.table_name}.assigned_to_id #{sw} IN (SELECT DISTINCT #{Member.table_name}.user_id FROM #{Member.table_name}, #{MemberRole.table_name}" + - " WHERE #{Member.table_name}.project_id = #{Issue.table_name}.project_id AND #{Member.table_name}.id = #{MemberRole.table_name}.member_id AND #{role_cond}))" - end - end - - def sql_for_relations(field, operator, value, options={}) - relation_options = IssueRelation::TYPES[field] - return relation_options unless relation_options - - relation_type = field - join_column, target_join_column = "issue_from_id", "issue_to_id" - if relation_options[:reverse] || options[:reverse] - relation_type = relation_options[:reverse] || relation_type - join_column, target_join_column = target_join_column, join_column - end - - sql = case operator - when "*", "!*" - op = (operator == "*" ? 'IN' : 'NOT IN') - "#{Issue.table_name}.id #{op} (SELECT DISTINCT #{IssueRelation.table_name}.#{join_column} FROM #{IssueRelation.table_name} WHERE #{IssueRelation.table_name}.relation_type = '#{self.class.connection.quote_string(relation_type)}')" - when "=", "!" - op = (operator == "=" ? 'IN' : 'NOT IN') - "#{Issue.table_name}.id #{op} (SELECT DISTINCT #{IssueRelation.table_name}.#{join_column} FROM #{IssueRelation.table_name} WHERE #{IssueRelation.table_name}.relation_type = '#{self.class.connection.quote_string(relation_type)}' AND #{IssueRelation.table_name}.#{target_join_column} = #{value.first.to_i})" - when "=p", "=!p", "!p" - op = (operator == "!p" ? 'NOT IN' : 'IN') - comp = (operator == "=!p" ? '<>' : '=') - "#{Issue.table_name}.id #{op} (SELECT DISTINCT #{IssueRelation.table_name}.#{join_column} FROM #{IssueRelation.table_name}, #{Issue.table_name} relissues WHERE #{IssueRelation.table_name}.relation_type = '#{self.class.connection.quote_string(relation_type)}' AND #{IssueRelation.table_name}.#{target_join_column} = relissues.id AND relissues.project_id #{comp} #{value.first.to_i})" - when "*o", "!o" - op = (operator == "!o" ? 'NOT IN' : 'IN') - "#{Issue.table_name}.id #{op} (SELECT DISTINCT #{IssueRelation.table_name}.#{join_column} FROM #{IssueRelation.table_name}, #{Issue.table_name} relissues WHERE #{IssueRelation.table_name}.relation_type = '#{self.class.connection.quote_string(relation_type)}' AND #{IssueRelation.table_name}.#{target_join_column} = relissues.id AND relissues.status_id IN (SELECT id FROM #{IssueStatus.table_name} WHERE is_closed=#{self.class.connection.quoted_false}))" - end - - if relation_options[:sym] == field && !options[:reverse] - sqls = [sql, sql_for_relations(field, operator, value, :reverse => true)] - sql = sqls.join(["!", "!*", "!p"].include?(operator) ? " AND " : " OR ") - end - "(#{sql})" - end - - IssueRelation::TYPES.keys.each do |relation_type| - alias_method "sql_for_#{relation_type}_field".to_sym, :sql_for_relations - end - - def condition_for_status - if Redmine::VERSION.to_s > '2.4' - return { status_id: options[:f_status] || IssueStatus.where(is_closed: false) } - end - '1=1' - end - - def issues(options={}) - @issues_cache ||= {} - return @issues_cache[options.to_s] if @issues_cache.has_key?(options.to_s) - - order_option = [group_by_sort_order, options[:order]].flatten.reject(&:blank?) - scope = options[:scope] ? options[:scope] : issue_scope - scope = scope. - joins(:status). - eager_load((options[:include] || []).uniq). - where(options[:conditions]). - order(order_option). - joins(joins_for_order_statement(order_option.join(','))). - limit(options[:limit]). - offset(options[:offset]) - - scope = scope.preload(:custom_values) - scope = scope.preload(:author) if has_column?(:author) - - if has_column_name?(:checklists) - scope = scope.preload(:checklists) - end - - if order_option.detect {|x| x.match("agile_data.position")} - scope = scope.sorted_by_rank - end - - if has_column_name?(:last_comment) - journal_comment = Journal.joins(:issue).where("#{Journal.table_name}.notes <> ''"). - where(:issues => {:id => issues_ids(scope)}).order("#{Journal.table_name}.id ASC") - @last_comments = {} - - journal_comment.each do |lc| - @last_comments[lc.journalized_id] = lc - end - end - - if has_column_name?(:day_in_state) - @journals_for_state = Journal.joins(:details).where( - :journals => { - :journalized_id => issues_ids(scope), - :journalized_type => "Issue" - }, - :journal_details => {:prop_key => 'status_id'}).order("created_on DESC") - end - - @issues_cache[options.to_s] = scope - rescue ::ActiveRecord::StatementInvalid => e - raise StatementInvalid.new(e.message) - end - - def issues_ids(scope) - @issues_ids ||= scope.map(&:id) - end - - def issues_paginator(issues, page = nil) - Redmine::Pagination::Paginator.new(issues.count, 20, page) - end - - def journals_for_state - @journals_for_state - end - - def issue_last_comment(issue, options = {}) - return unless has_column_name?(:last_comment) || options[:inline_adding] - return issue.last_comment unless @last_comments - @last_comments[issue.id] - end - - def board_statuses - if Redmine::VERSION.to_s > '2.4' - statuses = - if Redmine::VERSION.to_s >= '3.4' && project - project.rolled_up_statuses - else - IssueStatus.where(id: Tracker.eager_load(issues: [:status, :project, :fixed_version]).where(statement).map(&:issue_statuses).flatten.uniq.map(&:id)) - end - status_filter_values = (options[:f_status] if options) - if status_filter_values - result_statuses = statuses.where(id: status_filter_values) - else - result_statuses = statuses.where(is_closed: false) - end - result_statuses.sorted.map do |s| - s.instance_variable_set "@issue_count", self.issue_count_by_status[s.id].to_i - if has_column_name?(:estimated_hours) - s.instance_variable_set "@estimated_hours_sum", self.issue_count_by_estimated_hours[s.id].to_f - end - if RedmineAgile.use_story_points? && has_column_name?(:story_points) - s.instance_variable_set "@story_points", self.issue_count_by_story_points[s.id].to_i - end - s - end - else - status_filter_operator = filters.fetch("status_id", {}).fetch(:operator, nil) - status_filter_values = filters.fetch("status_id", {}).fetch(:values, []) - statuses = IssueStatus.where(id: Tracker.eager_load(issues: [:status, :project, :fixed_version]).where(statement).map(&:issue_statuses).flatten.uniq.map(&:id)) - result_statuses = - case status_filter_operator - when "o" - statuses.where(is_closed: false).sorted - when "c" - statuses.where(is_closed: true).sorted - when "=" - statuses.where(id: status_filter_values).sorted - when "!" - statuses.where("#{IssueStatus.table_name}.id NOT IN (" + status_filter_values.map{|val| "'#{self.class.connection.quote_string(val)}'"}.join(",") + ")").sorted - else - statuses.sorted - end - result_statuses.map do |s| - s.instance_variable_set "@issue_count", self.issue_count_by_status[s.id].to_i - if has_column_name?(:estimated_hours) - s.instance_variable_set "@estimated_hours_sum", self.issue_count_by_estimated_hours[s.id].to_f - end - s - end - s - end - end - - def issue_count_by_status - @issue_count_by_status ||= issue_scope.group("#{Issue.table_name}.status_id").count - end - - def issue_count_by_estimated_hours - @issue_count_by_estimated_hours ||= issue_scope.group("#{Issue.table_name}.status_id").sum("estimated_hours") - end - - def issue_count_by_story_points - @issue_count_by_story_points ||= issue_scope.group("#{Issue.table_name}.status_id").sum("#{AgileData.table_name}.story_points") - end - - def issue_board - @truncated = RedmineAgile.board_items_limit <= issue_scope.count - all_issues = self.issues.limit(RedmineAgile.board_items_limit).sorted_by_rank - all_issues.group_by{|i| [i.status_id]} - end - - def statement - if values_for('fixed_version_id') == ['current_version'] && project - version = current_version - # substitute id for current version - version ? filters['fixed_version_id'][:values] = [version.id.to_s] : filters.delete('fixed_version_id') - end - clauses = super - if version - # return string for correct value in a select on a form - filters['fixed_version_id'][:values] = ['current_version'] - end - clauses - end - - private - - def base_agile_query_scope - Issue.visible - .eager_load(:status, :project, :assigned_to, :tracker, :priority, :category, :fixed_version, :agile_data) - .where(agile_projects) - .where(statement) - .where(condition_for_status) - end - - def agile_projects - return '1=1' unless project - - p_ids = [project.id] - p_ids += project.descendants.select { |sub| sub.module_enabled?('agile') }.map(&:id) if Setting.display_subprojects_issues? - - "#{Project.table_name}.id IN (#{p_ids.join(',')})" - end - - def issue_scope - return @agile_scope if @agile_scope - - @agile_scope = base_agile_query_scope - @agile_scope - end - - def project_statement - return super - end - - def current_version - return @current_version if @current_version - - versions = project.shared_versions.open.where("LOWER(#{Version.table_name}.name) NOT LIKE LOWER(?)", 'backlog') - versions -= versions.select(&:completed?).reverse - @current_version = versions.to_a.uniq.sort.first - end -end diff --git a/plugins/redmine_agile/app/models/agile_statuses_collector.rb b/plugins/redmine_agile/app/models/agile_statuses_collector.rb deleted file mode 100644 index b2b0673..0000000 --- a/plugins/redmine_agile/app/models/agile_statuses_collector.rb +++ /dev/null @@ -1,104 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -class AgileStatusesCollector - def initialize(issue, options = {}) - @issue = issue - @data = [] - fill_data - end - - def data - @data - end - - def grouped_by(field) - return unless field - - @data.group_by { |detail| detail.status_id } if field == 'status' - end - - def object_for(field) - return unless field - return IssueStatus if field == 'status' - end - - def issue_status_for(field, group_id) - return IssueStatus.where(id: group_id).first if field == 'status' - end - - def group_total_for(field, group_data) - return unless field - (group_data.map(&:duration).sum / 1.days).to_i if field == 'status' - end - - private - - def fill_data - assignee_id = initial_assignee_id - @data << detail_object(initial_detail, initial_assignee_id, @issue.created_on) - - issue_details.each_with_index do |detail, idx| - next if detail.prop_key != 'status_id' - - assignee_id = assignee_for(detail) || assignee_id - @data << detail_object(detail, assignee_id, detail.journal.created_on) - end - - @data.each_with_index do |detail, idx| - detail.end_time = @data[idx + 1] ? @data[idx + 1].journal.created_on : Time.now - detail.duration = detail.end_time - detail.start_time - end - end - - def detail_object(detail, assignee_id, start_time) - OpenStruct.new(journal: detail.journal, - status_id: detail.value, - assigned_to_id: assignee_id, - start_time: start_time, - end_time: nil, - duration: nil) - end - - def assignee_for(detail) - detail.journal.details.detect { |detail| 'assigned_to_id' == detail.prop_key }.try(:value) - end - - def issue_details - return @issue_details if @issue_details - - @issue_details = @issue.journals.map(&:details).flatten.sort_by { |a| a.journal.created_on } - @issue_details.unshift() - end - - def first_status_detail - issue_details.detect { |d| d.prop_key == 'status_id' } - end - - def initial_assignee_id - issue_details.detect { |detail| 'assigned_to_id' == detail.prop_key }.try(:old_value) || @issue.assigned_to_id - end - - def initial_detail - JournalDetail.new(property: 'attr', - prop_key: 'status_id', - value: first_status_detail.try(:old_value) || @issue.status.id, - journal: Journal.new(user: @issue.author, created_on: @issue.created_on)) - end -end diff --git a/plugins/redmine_agile/app/views/agile_boards/_add_issue_card.html.erb b/plugins/redmine_agile/app/views/agile_boards/_add_issue_card.html.erb deleted file mode 100644 index 8b13789..0000000 --- a/plugins/redmine_agile/app/views/agile_boards/_add_issue_card.html.erb +++ /dev/null @@ -1 +0,0 @@ - diff --git a/plugins/redmine_agile/app/views/agile_boards/_backlog_column.html.erb b/plugins/redmine_agile/app/views/agile_boards/_backlog_column.html.erb deleted file mode 100644 index c47610a..0000000 --- a/plugins/redmine_agile/app/views/agile_boards/_backlog_column.html.erb +++ /dev/null @@ -1,15 +0,0 @@ -<td class="issue-backlog-col" rowspan="<%= rowspan %>"> - <div class="issue-backlog-search"> - <%= text_field_tag('search', '', placeholder: l(:label_agile_board_search_backlog_issues)) %> - <%= javascript_tag("observeIssueSearchfield('search', '#{backlog_autocomplete_agile_boards_path(project_id: query.project.try(:id))}');") %> - </div> - <div class="backlog-issues issue-status-col <%= 'empty' if @backlog_issues.empty? %>" data-id=""> - <% paginator = query.issues_paginator(@backlog_issues, params[:page]) %> - <%= render partial: 'issues_list', locals: { column_id: nil, - project: query.project, - issues: @backlog_issues.offset(paginator.offset).limit(paginator.per_page).all, - more_url: paginator.next_page ? backlog_load_more_agile_boards_path(project_id: query.project.try(:id), - q: params[:q], - page: paginator.next_page) : nil } %> - </div> -</td> diff --git a/plugins/redmine_agile/app/views/agile_boards/_board.html.erb b/plugins/redmine_agile/app/views/agile_boards/_board.html.erb deleted file mode 100644 index c60d1b5..0000000 --- a/plugins/redmine_agile/app/views/agile_boards/_board.html.erb +++ /dev/null @@ -1,26 +0,0 @@ - -<%= form_tag({}) do -%> - <%= hidden_field_tag 'back_url', url_for(params.respond_to?(:to_unsafe_hash) ? params.to_unsafe_hash : params) %> - <%= hidden_field_tag 'project_id', @project.id if @project %> - <div class="agile-board autoscroll"> - <div class="flash error" style="display: none;" id="agile-board-errors"> - </div> - <table class="list issues-board <%= 'status-colors' if RedmineAgile.status_colors? %> <%= 'minimize-closed' if RedmineAgile.minimize_closed? %>"> - <div class='lock'> </div> - <thead> - <%= render_board_headers(@board_columns) %> - </thead> - <tr style="text-align: center;white-space: nowrap;" class="issue <%= cycle('odd', 'even') %>"> - <% @board_columns.each do |column| %> - <% column_issues = @issue_board[[column.id]] || [] %> - <td class="issue-status-col <%= 'closed' if column.is_closed? %> <%= 'collapse' if RedmineAgile.hide_closed_issues_data? %> <%= column.wp_class if column.respond_to?(:wp_class) %> <%= 'empty' if column_issues.empty? %>" data-id="<%= column.id %>"> - <% column_issues.each do |issue| %> - <%= render :partial => 'issue_card', :locals => {:issue => issue} %> - <% end if @issue_board[[column.id]] %> - <%= render(:partial => 'add_issue_card') if @allowed_statuses.include?(column) && !column.is_closed? %> - </td> - <% end %> - </tr> - </table> -</div> -<% end %> diff --git a/plugins/redmine_agile/app/views/agile_boards/_form.html.erb b/plugins/redmine_agile/app/views/agile_boards/_form.html.erb deleted file mode 100644 index 8b13789..0000000 --- a/plugins/redmine_agile/app/views/agile_boards/_form.html.erb +++ /dev/null @@ -1 +0,0 @@ - diff --git a/plugins/redmine_agile/app/views/agile_boards/_index.html.erb b/plugins/redmine_agile/app/views/agile_boards/_index.html.erb deleted file mode 100644 index 8afe358..0000000 --- a/plugins/redmine_agile/app/views/agile_boards/_index.html.erb +++ /dev/null @@ -1,98 +0,0 @@ -<div class="contextual"> - <%= link_to l(:label_agile_charts), @project ? project_agile_charts_path(project_id: @project) : agile_charts_path, class: 'icon icon-stats agile_charts_link', onclick: 'chartLinkGenerator();' %> - <% if !@query.new_record? && @query.editable_by?(User.current) %> - <%= link_to l(:button_edit), edit_agile_query_path(@query), class: 'icon icon-edit' %> - <%= delete_link agile_query_path(@query) %> - <% end %> -</div> - -<% html_title(@query.new_record? ? l(:label_agile_board) : @query.name) %> -<%= form_tag({ controller: 'agile_boards', action: 'index', project_id: @project }, method: :get, id: 'query_form', onsubmit: 'DisableNullFields()') do %> - <h2> - <%= @query.new_record? ? l(:label_agile_board) : h(@query.name) %> - <span class="live_search"> - <%= text_field_tag(:search, '', :id => 'agile_live_search', :class => 'live_search_field', :placeholder => l(:label_cards_search)) %> - </span> - </h2> - - <div id="query_form_with_buttons" class="hide-when-print"> - <%= hidden_field_tag 'set_filter', '1' %> - <div id="query_form_content"> - <fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>"> - <legend class="icon icon-<%= @query.new_record? ? 'expended' : 'collapsed' %>" onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend> - <div style="<%= @query.new_record? ? "" : "display: none;" %>"> - <%= render :partial => 'queries/filters', :locals => {:query => @query} %> - </div> - </fieldset> - <fieldset id="options" class="collapsible collapsed"> - <legend onclick="toggleFieldset(this);" class="icon icon-collapsed"><%= l(:label_options) %></legend> - <div style="display: none;"> - <table class="options agile_options"> - <tr> - <td colspan="2"> - <fieldset class="card-fields"> - <legend><%= l(:label_agile_board_columns) %></legend> - <%= render_board_fields_status(@query) %> - </fieldset> - </tr> - <tr> - <td colspan="2"> - <fieldset class="card-fields"> - <legend><%= l(:label_agile_fields) %></legend> - <%= render_board_fields_selection(@query) %> - </fieldset> - </td> - </tr> - </table> - </div> - </fieldset> - </div> - <p class="buttons"> - <%= link_to_function l(:button_apply), '$("#query_form").submit()', :class => 'icon icon-checked' %> - <%= link_to l(:button_clear), { :set_filter => 1, :project_id => @project }, :class => 'icon icon-reload' %> - </p> - - </div> -<% end %> - -<%= error_messages_for 'query' %> -<% if @query.valid? %> - <% empty_data = @issues.empty? || @board_columns.empty? %> - <% if empty_data %> - <p class="nodata"><%= l(:label_no_data) %></p> - <% else %> - <% if @query.truncated %> - <p class="warning"><%= l(:label_agile_board_truncated, :max => RedmineAgile.board_items_limit) %></p> - <% end %> - <%= render :partial => 'board' %> - <% end %> -<% end %> - -<% content_for :sidebar do %> - - <%= render :partial => 'upgrade_to_pro' %> - - <%= render :partial => 'issues_links' %> - <% if @project && @project.assignable_users.any? %> - <%= render :partial => 'members' %> - <% end %> - <%= render :partial => 'agile_charts/agile_charts' %> -<% end %> - -<% html_title l(:label_agile_board) %> -<% content_for :header_tags do %> - <%= javascript_include_tag "redmine_agile", plugin: 'redmine_agile' %> - <%= javascript_include_tag "jquery.ui.touch-punch.js", plugin: 'redmine_agile' %> - <%= stylesheet_link_tag 'context_menu' %> - <%= stylesheet_link_tag "redmine_agile.css", plugin: "redmine_agile", media: "print" %> -<% end %> -<% if User.current.allowed_to?(:edit_issues, @project, global: true) %> - <script type="text/javascript"> - var agileBoard = new AgileBoard({ - project_id: '<%= @project && @project.id %>', - update_agile_board_path: '<%= escape_javascript update_agile_board_path %>', - issues_path: '<%= escape_javascript issues_path %>', - create_issue_path: '<%= escape_javascript(agile_create_issue_path(project_id: @project)) if @project %>' - }); - </script> -<% end %> diff --git a/plugins/redmine_agile/app/views/agile_boards/_issue_card.html.erb b/plugins/redmine_agile/app/views/agile_boards/_issue_card.html.erb deleted file mode 100644 index 9dc7ec1..0000000 --- a/plugins/redmine_agile/app/views/agile_boards/_issue_card.html.erb +++ /dev/null @@ -1,149 +0,0 @@ -<div class="issue-card hascontextmenu <%= agile_color_class(issue, :color_base => @query.respond_to?(:color_base) && @query.color_base) %> <%= class_for_closed_issue(issue, @version_board) %>" - data-id="<%= issue.id %>" - data-estimated-hours="<%= estimated_time_value(@query, issue).to_f %>" - data-story-points="<%= story_points_value(@query, issue).to_f %>" - style="<%= agile_user_color(issue.assigned_to, :color_base => @query.respond_to?(:color_base) && @query.color_base) if issue.assigned_to %>"> - - <% if issue.closed? && RedmineAgile.hide_closed_issues_data? && !@version_board %> - <span class="fields"> - <div class="tooltip"> - <p class="issue-id <%= 'without-tracker' if @query.has_column_name?(:tracker).blank? %>"> - <strong><%= link_to "#{'#' + issue.id.to_s}", issue_path(issue) %></strong> - </p> - <span class="tip"> - </span> - </div> - </span> - <% else %> - <span class="fields"> - <% if User.current.allowed_to?(:edit_issues, @project, :global => true) && !@version_board %> - <div class="quick-edit-card"> - <%= link_to image_tag("/images/comment.png", alt: 'Comment'), '#', onclick: "showInlineComment(this, '#{j(agile_inline_comment_path(:id => issue))}'); return false;", title: l(:label_comment_add), class: 'add-comment' if RedmineAgile.allow_inline_comments? %> - </div> - <% end %> - <% if @query.has_column_name?(:project) %> - <p class="project"> - <%= issue.project.name %> - </p> - <% end %> - <p class="issue-id <%= 'without-tracker' if @query.has_column_name?(:tracker).blank? %>"> - <%= check_box_tag("ids[]", issue.id, false, :id => nil, :class => 'checkbox') %> - <% if @query.has_column_name?(:tracker) %> - <strong><%= issue_heading(issue) %></strong> - <% end %> - <%= render_issue_card_hours(@query, issue) %> - </p> - <p class="name" ><%= link_to "#{'#' + issue.id.to_s + ': ' if @query.has_column_name?(:id) && @query.has_column_name?(:tracker).blank?}#{issue.subject.truncate(100)}", issue_path(issue) %></p> - <p class="attributes"> - <% @query.card_columns.select{|c| !c.value(issue).blank? }.each do |column| %> - <b><%= column.caption %></b>: <%= column_content(column, issue) %> <br> - <% end %> - </p> - - <% if @query.has_column_name?(:day_in_state) %> - <p class="attributes"> - <b><%= " #{I18n.t('label_agile_day_in_state')}: " %></b> - <% find_change_state = false %> - <% if @query.journals_for_state %> - <% @query.journals_for_state.each do |journal| %> - <% if journal.journalized_id == issue.id %> - <%= time_in_state(journal.created_on) %> - <% find_change_state = true %> - <% break %> - <% end %> - <% end %> - <% end %> - - <% if !find_change_state %> - <%= time_in_state(issue.day_in_state) %> - <% end %> - </p> - <% end %> - - <% if @query.has_column_name?(:description) && !issue.description.blank? %> - <em class="info description"> - <%= issue.description.truncate(200) %> - </em> - <% end %> - <% if @query.has_column_name?(:sub_issues) && issue.sub_issues.any? %> - <div class='sub-issues'> - <%= issue_children(issue) %> - </div> - <% end %> - <% if @query.has_column_name?(:thumbnails) %> - <% image = issue.attachments.select(&:thumbnailable?).last %> - <% if image %> - <div class="thumbnail" style="background-image: url('<%= thumbnail_path(image, :size => 250) %>')"> - </div> - <% end %> - <% end %> - <!-- Check list --> - <% if @query.has_column_name?(:checklists) && show_checklist?(issue) %> - <div class="checklist" id="checklist_<%= issue.id %>"> - <ul id="checklist_items"> - <% issue.checklists.each do |checklist_item| %> - <%= render :partial => 'checklists/checklist_item', :object => checklist_item %> - <% end %> - </ul> - <script type="text/javascript"> - $("#checklist_<%= issue.id %>").checklist(); - </script> - </div> - <% end %> - <% if @query.has_column_name?(:assigned_to) %> - <p class="info assigned-user" style="<%= 'display: none;' unless issue.assigned_to %>"> - <span class="user"><%= avatar(issue.assigned_to, :size => "14").to_s.html_safe + " " + link_to_user(issue.assigned_to) if issue.assigned_to %></span> - </p> - <% end %> - - <% if @query.has_column_name?(:done_ratio) %> - <%= progress_bar(issue.done_ratio, :width => '100%') %> - <% end %> - - <% if (last_comment = @query.issue_last_comment(issue, :inline_adding => @inline_adding)) %> - <em class="info description last_comment" title='<%= last_comment.user.to_s + " " + format_date(last_comment.created_on) %>'> - <span class="icon icon-comment last-comment"> - <%= last_comment.notes.truncate(100) %> - </span> - </em> - <% end %> - <% if User.current.allowed_to?(:edit_issues, @project, :global => true) && RedmineAgile.allow_inline_comments? %> - <div class="quick-comment"> - </div> - <% end %> - </span> - <% end %> -</div> -<% if User.current.allowed_to?(:edit_issues, @project, :global => true) && @update %> - <script type="text/javascript"> - - document.onkeydown = function(evt) { - evt = evt || window.event; - if (evt.keyCode == 27) { - $('html.agile-board-fullscreen').removeClass('agile-board-fullscreen'); - $(".issue-card").addClass("hascontextmenu"); - saveFullScreenState(); - } - }; - - $("table.issues-board thead").html("<%=escape_javascript render_board_headers(@query.board_statuses) %>"); - </script> - - <% if @error_msg %> - <script type="text/javascript"> - setErrorMessage("<%= @error_msg%>", 'warning'); - </script> - <% end %> - - <% if @update && !@version_board %> - <script type="text/javascript"> - $("table.issues-board thead").html("<%=escape_javascript render_board_headers(@query.board_statuses) %>"); - </script> - <% if Redmine::VERSION.to_s > '2.4' %> - <script type="text/javascript"> - agileBoard.initDroppable(); - </script> - <% end %> - <% end %> - <%= init_agile_tooltip_info %> -<% end %> diff --git a/plugins/redmine_agile/app/views/agile_boards/_issue_tooltip.html.erb b/plugins/redmine_agile/app/views/agile_boards/_issue_tooltip.html.erb deleted file mode 100644 index 6228bee..0000000 --- a/plugins/redmine_agile/app/views/agile_boards/_issue_tooltip.html.erb +++ /dev/null @@ -1 +0,0 @@ -<%= render_issue_tooltip @issue %> diff --git a/plugins/redmine_agile/app/views/agile_boards/_issues_links.html.erb b/plugins/redmine_agile/app/views/agile_boards/_issues_links.html.erb deleted file mode 100644 index d25a0ff..0000000 --- a/plugins/redmine_agile/app/views/agile_boards/_issues_links.html.erb +++ /dev/null @@ -1,17 +0,0 @@ -<h3><%= l(:label_issue_plural) %></h3> - -<ul> - <li><%= link_to l(:label_issue_view_all), _project_issues_path(@project, :set_filter => 1) %></li> - <% if @project %> - <li><%= link_to l(:field_summary), project_issues_report_path(@project) %></li> - <% end %> - <% if User.current.allowed_to?(:view_calendar, @project, :global => true) %> - <li><%= link_to l(:label_calendar), _project_calendar_path(@project) %></li> - <% end %> - <% if User.current.allowed_to?(:view_gantt, @project, :global => true) %> - <li><%= link_to l(:label_gantt), _project_gantt_path(@project) %></li> - <% end %> - <% if User.current.allowed_to?(:view_agile_queries, @project) %> - <li><%= link_to l(:label_agile_board), {:controller => "agile_boards", :action => "index", :project_id => @project} %></li> - <% end %> -</ul> diff --git a/plugins/redmine_agile/app/views/agile_boards/_issues_list.html.erb b/plugins/redmine_agile/app/views/agile_boards/_issues_list.html.erb deleted file mode 100644 index 998dd1e..0000000 --- a/plugins/redmine_agile/app/views/agile_boards/_issues_list.html.erb +++ /dev/null @@ -1,15 +0,0 @@ -<% if issues.any? %> - <% issues.each do |issue| %> - <%= render partial: 'issue_card', locals: { issue: issue } %> - <% end %> - - <% if more_url %> - <div class="load-more"> - <div class="pagination-wrapper"> - <span class="pagination"> - <%= link_to l(:label_agile_planning_board_more), more_url, remote: true %> - </span> - </div> - </div> - <% end %> -<% end %> diff --git a/plugins/redmine_agile/app/views/agile_boards/_members.html.erb b/plugins/redmine_agile/app/views/agile_boards/_members.html.erb deleted file mode 100644 index ffd2096..0000000 --- a/plugins/redmine_agile/app/views/agile_boards/_members.html.erb +++ /dev/null @@ -1,8 +0,0 @@ -<div class="project-members"> - <h3><%=l(:label_member_plural)%></h3> - <% @project.assignable_users.each do |user| %> - <span class="assignable-user" data-id="<%= user.id %>"><%= avatar(user.is_a?(User) ? user : '<gravatar>', :size => "14", :style => agile_user_color(user, :color_base => @query.respond_to?(:color_base) && @query.color_base) ).to_s.html_safe + " " + link_to_user(user) %> - <br> - </span> - <% end %> -</div> diff --git a/plugins/redmine_agile/app/views/agile_boards/_upgrade_to_pro.html.erb b/plugins/redmine_agile/app/views/agile_boards/_upgrade_to_pro.html.erb deleted file mode 100644 index 030aab1..0000000 --- a/plugins/redmine_agile/app/views/agile_boards/_upgrade_to_pro.html.erb +++ /dev/null @@ -1,9 +0,0 @@ -<h3><%= l(:label_agile_light_free_version) %></h3> -<ul> - <li><%= link_to l(:label_agile_link_to_pro), "https://www.redmineup.com/pages/plugins/agile#pricing?from=light_upgrade" %> - </li> - <li><%= link_to l(:label_agile_link_to_pro_demo), "http://demo.redmineup.com/projects/agile/agile/board?query_id=4?from=light_live_preview" %> - </li> - <li><%= link_to l(:label_agile_link_to_more_plugins), "https://www.redmineup.com/pages/plugins?from=light_more_plugins" %> - </li> -</ul> diff --git a/plugins/redmine_agile/app/views/agile_boards/agile_data.api.rsb b/plugins/redmine_agile/app/views/agile_boards/agile_data.api.rsb deleted file mode 100644 index 0971d98..0000000 --- a/plugins/redmine_agile/app/views/agile_boards/agile_data.api.rsb +++ /dev/null @@ -1,7 +0,0 @@ -api.agile_data do - api.id @agile_data.id - api.issue_id @agile_data.issue_id - api.position @agile_data.position - api.story_points @agile_data.story_points - api.agile_sprint_id @agile_data.agile_sprint_id -end diff --git a/plugins/redmine_agile/app/views/agile_boards/autocomplete.js.erb b/plugins/redmine_agile/app/views/agile_boards/autocomplete.js.erb deleted file mode 100644 index b59254d..0000000 --- a/plugins/redmine_agile/app/views/agile_boards/autocomplete.js.erb +++ /dev/null @@ -1 +0,0 @@ -$(".issues-board div[data-id='<%= @column_id %>']").html('<%= escape_javascript(render partial: "issues_list", locals: { project: @project, issues: @issues, more_url: @more_url }) %>') diff --git a/plugins/redmine_agile/app/views/agile_boards/index.html.erb b/plugins/redmine_agile/app/views/agile_boards/index.html.erb deleted file mode 100644 index e798b5b..0000000 --- a/plugins/redmine_agile/app/views/agile_boards/index.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -<%= render 'index' %> -<%= init_agile_tooltip_info %> -<%= call_hook(:view_agile_board_bottom, { :issues => @issues, :project => @project, :query => @query }) %> diff --git a/plugins/redmine_agile/app/views/agile_boards/index.js.erb b/plugins/redmine_agile/app/views/agile_boards/index.js.erb deleted file mode 100644 index 1d3ad17..0000000 --- a/plugins/redmine_agile/app/views/agile_boards/index.js.erb +++ /dev/null @@ -1,3 +0,0 @@ -$('#content').html('<%= j(render('index')) %>') -$('table.issues-board').StickyHeader(); -<%= init_agile_tooltip_info(:only_code => true) %> diff --git a/plugins/redmine_agile/app/views/agile_boards/inline_comment.html.erb b/plugins/redmine_agile/app/views/agile_boards/inline_comment.html.erb deleted file mode 100644 index a030bdf..0000000 --- a/plugins/redmine_agile/app/views/agile_boards/inline_comment.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -<%= text_area_tag "issue[notes]", "", :cols => 60, :rows => 5, :class => 'wiki-edit', :no_label => true %> -<button type="button" onclick="saveInlineComment(this, '<%= update_agile_board_path(:id => @issue) %>'); return false;"> <%= l(:button_submit) %> </button> -<%= link_to l(:button_cancel), "#", :onclick => "cancelInlineComment(this);return false;" %> diff --git a/plugins/redmine_agile/app/views/agile_boards/load_more.js.erb b/plugins/redmine_agile/app/views/agile_boards/load_more.js.erb deleted file mode 100644 index abec88e..0000000 --- a/plugins/redmine_agile/app/views/agile_boards/load_more.js.erb +++ /dev/null @@ -1 +0,0 @@ -$(".issues-board div[data-id='<%= @column_id %>'] .load-more").replaceWith('<%= escape_javascript(render partial: "issues_list", locals: { project: @project, issues: @issues, more_url: @more_url }) %>') diff --git a/plugins/redmine_agile/app/views/agile_boards/update.js.erb b/plugins/redmine_agile/app/views/agile_boards/update.js.erb deleted file mode 100644 index 3069414..0000000 --- a/plugins/redmine_agile/app/views/agile_boards/update.js.erb +++ /dev/null @@ -1,6 +0,0 @@ -decHtmlNumber('th[data-column-id="<%= params[:old_status_id] %>"] span.count'); -incHtmlNumber('th[data-column-id="<%= params[:new_status_id] %>"] span.count'); -decHtmlNumber('tr.group.swimlane[data-id="<%= params[:old_swimlane_id] %>"] td span.count'); -incHtmlNumber('tr.group.swimlane[data-id="<%= params[:new_swimlane_id] %>"] td span.count'); - -//$('.issue-card[data-id="<%= @issue.id %>"]').html("<%= render :partial => 'issue_card', :locals => {:issue => @issue} %>"); diff --git a/plugins/redmine_agile/app/views/agile_charts/_agile_charts.html.erb b/plugins/redmine_agile/app/views/agile_charts/_agile_charts.html.erb deleted file mode 100644 index acbe13e..0000000 --- a/plugins/redmine_agile/app/views/agile_charts/_agile_charts.html.erb +++ /dev/null @@ -1,5 +0,0 @@ -<% if User.current.allowed_to?(:view_agile_charts, @project, :global => true) %> - - <ul class=agile-chart-queries> - </ul> -<% end %> diff --git a/plugins/redmine_agile/app/views/agile_charts/_chart.html.erb b/plugins/redmine_agile/app/views/agile_charts/_chart.html.erb deleted file mode 100644 index 8fb57da..0000000 --- a/plugins/redmine_agile/app/views/agile_charts/_chart.html.erb +++ /dev/null @@ -1,99 +0,0 @@ -<% if issues_scope.empty? %> - <p class="nodata"><%= l(:label_no_data) %></p> -<% elsif %w(work_burndown cumulative_flow hours_velocity).include?(chart) && issues_scope.count > RedmineAgile.time_reports_items_limit %> - <p class="nodata"><%= l(:label_agile_too_many_items, :max => RedmineAgile.time_reports_items_limit) %></p> -<% else %> - <div class="agile-chart-container"> - <canvas id="agile-chart"></canvas> - <div style="clear: both;"></div> - </div> -<% end %> - -<%= javascript_tag do %> - $(document).ready(function(){ - Chart.plugins.register({ - beforeDraw: function(chartInstance, easing) { - if (chartInstance.config.options.tooltips.onlyShowForDatasetIndex) { - var tooltipsToDisplay = chartInstance.config.options.tooltips.onlyShowForDatasetIndex; - var active = chartInstance.tooltip._active || []; - if (active.length > 0) { - if (tooltipsToDisplay.indexOf(active[0]._datasetIndex) === -1) { - chartInstance.tooltip._model.opacity = 0; - } - } - } - } - }); - - if (document.getElementById("agile-chart")) { - $.getJSON(<%= raw url_for(controller: 'agile_charts', action: 'render_chart', project_id: @project, - chart: chart, version_id: @version, query_id: @query.try(:id), chart_unit: chart_unit).to_json %>, function(data){ - - Chart.defaults.global.defaultFontColor = 'black'; - Chart.defaults.global.defaultFontFamily = '"Arial", sans-serif'; - Chart.defaults.global.defaultFontStyle = 'normal'; - - var chartData = { - labels: data['labels'], - datasets: data['datasets'], - stacked: data['stacked'] - }; - - new Chart(document.getElementById("agile-chart").getContext("2d"), { - type: data['type'] || 'bar', - data: chartData, - options: { - tooltips: { - onlyShowForDatasetIndex: data['show_tooltips'], - callbacks: chartTooltipCallbacks(data['type']) - }, - maintainAspectRatio: false, - legend: { - position: 'right', - labels: { - filter: function(legendItem, chartData) { - if (legendItem.text) { return true } - } - } - }, - title: { - display: true, - fontSize: 16, - fontStyle: 'normal', - text: data['title'] - }, - elements: { - line: { - tension: 0, // disables bezier curves - } - }, - scales: { - yAxes: [{ - stacked: data['stacked'], - scaleLabel: { - display: true, - fontColor: 'rgba(255, 0, 0 ,1)', - fontSize: 14, - labelString: data['y_title'] - } - }], - xAxes: [{ - ticks: { - autoSkip: true, - maxRotation: 0, - userCallback: function(value, index, values) { - if (data['type'] == 'scatter') { - return data['labels'][value] - } else { - return value - } - } - } - }] - }, - } - }); - }); - } - }); -<% end %> diff --git a/plugins/redmine_agile/app/views/agile_charts/_versions_show.html.erb b/plugins/redmine_agile/app/views/agile_charts/_versions_show.html.erb deleted file mode 100644 index 79c9725..0000000 --- a/plugins/redmine_agile/app/views/agile_charts/_versions_show.html.erb +++ /dev/null @@ -1,31 +0,0 @@ -<% if @issues.any? && User.current.allowed_to?(:view_agile_charts, @project) %> - <fieldset> - <legend> - <%= l(:label_agile_chart) %> - <%= select_tag('chart', options_charts_for_select(params[:chart] || RedmineAgile.default_chart), - id: 'chart_by_select', - onchange: "toggleChartUnit($(this).val(), 'chart-unit-row'); updateVersionAgileChart('#{agile_charts_select_version_chart_path(version_id: @version)}');") %> - - <span id="chart-unit-row"> - <label for='chart_unit'><%= l(:label_agile_chart_units) %></label> - <%= select_tag 'chart_unit', options_chart_units_for_select, - onchange: "updateVersionAgileChart('#{agile_charts_select_version_chart_path(version_id: @version)}');" %> - </span> - </legend> - <div id='agile_chart'> - <%= render_agile_chart(RedmineAgile::Charts.valid_chart_name_by(params[:chart] || RedmineAgile.default_chart), @version.fixed_issues) %> - </div> - </fieldset> -<% end %> - -<% content_for :header_tags do %> - <%= chartjs_assets %> - <%= javascript_include_tag 'redmine_agile', plugin: 'redmine_agile' %> -<% end %> - -<%= javascript_tag do %> - var chartsWithUnits = <%= raw RedmineAgile::Charts::CHARTS_WITH_UNITS.to_json %> - $(document).ready(function() { - toggleChartUnit($('#chart_by_select').val(), 'chart-unit-row'); - }); -<% end %> diff --git a/plugins/redmine_agile/app/views/agile_charts/select_version_chart.js.erb b/plugins/redmine_agile/app/views/agile_charts/select_version_chart.js.erb deleted file mode 100644 index e9d4c38..0000000 --- a/plugins/redmine_agile/app/views/agile_charts/select_version_chart.js.erb +++ /dev/null @@ -1,5 +0,0 @@ -$('#agile_chart').html('<%= escape_javascript(render_agile_chart(params[:chart], @version.fixed_issues)) %>'); - -if ("replaceState" in window.history) { - window.history.replaceState(null, document.title, "?chart=<%= params[:chart] %>"); -} diff --git a/plugins/redmine_agile/app/views/agile_charts/show.html.erb b/plugins/redmine_agile/app/views/agile_charts/show.html.erb deleted file mode 100644 index a92392f..0000000 --- a/plugins/redmine_agile/app/views/agile_charts/show.html.erb +++ /dev/null @@ -1,67 +0,0 @@ -<%= render_agile_charts_breadcrumb %> - -<h2><%= @query.new_record? ? l(:label_agile_chart_plural) : h(@query.name) %></h2> -<% html_title(@query.new_record? ? l(:label_agile_chart_plural) : @query.name) %> - -<%= form_tag({ :controller => 'agile_charts', :action => 'show', :project_id => @project }, - :method => :get, :id => 'query_form') do %> - <div id="query_form_with_buttons" class="hide-when-print"> - <%= hidden_field_tag 'set_filter', '1' %> - <div id="query_form_content"> - <fieldset id="filters" class="collapsible"> - <legend class="icon icon-expended" onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend> - <div> - <%= render :partial => 'queries/filters', :locals => {:query => @query} %> - </div> - </fieldset> - <fieldset class="collapsible"> - <legend class="icon icon-expended" onclick="toggleFieldset(this);"><%= l(:label_options) %></legend> - <div> - <table> - <tr> - <td><label for='chart'><%= l(:label_agile_chart) %></label></td> - <td><%= select_tag 'chart', options_charts_for_select(@chart), onchange: "toggleChartUnit($(this).val(), 'chart-unit-row');" %></td> - <td id="chart-unit-row"> - <label for='chart_unit'><%= l(:label_agile_chart_units) %></label> - <%= select_tag 'chart_unit', options_chart_units_for_select(@query.chart_unit) %> - </td> - </tr> - <tr id="interval-size"> - <td><%= l(:label_agile_interval_size) %></td> - <td> - <%= select_tag 'interval_size', options_for_select(RedmineAgile::AgileChart::TIME_INTERVALS.map { |i| [l(:"label_agile_#{i}"), i] }, @query.interval_size) %> - </td> - </tr> - </table> - </div> - </fieldset> - </div> - <p class="buttons"> - <%= link_to_function l(:button_apply), '$("#query_form").submit()', :class => 'icon icon-checked' %> - <%= link_to l(:button_clear), { :set_filter => 1, :project_id => @project }, :class => 'icon icon-reload' %> - </p> - </div> -<% end %> - -<%= error_messages_for 'query' %> - -<%= render_agile_chart(@chart, @issues) if @query.valid? %> - -<% content_for :header_tags do %> - <%= chartjs_assets %> - <%= javascript_include_tag 'redmine_agile', plugin: 'redmine_agile' %> -<% end %> - -<% content_for :sidebar do %> - <%= render :partial => 'agile_boards/issues_links' %> - <%= render :partial => 'agile_charts/agile_charts' %> -<% end %> - -<%= javascript_tag do %> - var chartsWithUnits = <%= raw RedmineAgile::Charts::CHARTS_WITH_UNITS.to_json %> - $(document).ready(function() { - toggleChartUnit($('#chart').val(), 'chart-unit-row'); - /* Hide chart_period checkbox so that it couldn't be unchecked */ - hideChartPeriodCheckbox(); - }); -<% end %> diff --git a/plugins/redmine_agile/app/views/agile_charts_queries/_form.html.erb b/plugins/redmine_agile/app/views/agile_charts_queries/_form.html.erb deleted file mode 100644 index 8b13789..0000000 --- a/plugins/redmine_agile/app/views/agile_charts_queries/_form.html.erb +++ /dev/null @@ -1 +0,0 @@ - diff --git a/plugins/redmine_agile/app/views/agile_charts_queries/edit.html.erb b/plugins/redmine_agile/app/views/agile_charts_queries/edit.html.erb deleted file mode 100644 index 8b13789..0000000 --- a/plugins/redmine_agile/app/views/agile_charts_queries/edit.html.erb +++ /dev/null @@ -1 +0,0 @@ - diff --git a/plugins/redmine_agile/app/views/agile_charts_queries/new.html.erb b/plugins/redmine_agile/app/views/agile_charts_queries/new.html.erb deleted file mode 100644 index 2fdcc74..0000000 --- a/plugins/redmine_agile/app/views/agile_charts_queries/new.html.erb +++ /dev/null @@ -1,8 +0,0 @@ -<!-- </PRO> --> -<h2><%= l(:label_agile_chart_new) %></h2> - -<%= form_tag(@project ? project_agile_charts_queries_path(@project) : agile_charts_queries_path) do %> - <%= render partial: 'form', locals: { query: @query } %> - <%= submit_tag l(:button_create) %> -<% end %> -<!-- </PRO> --> diff --git a/plugins/redmine_agile/app/views/agile_journal_details/_status_detail.html.erb b/plugins/redmine_agile/app/views/agile_journal_details/_status_detail.html.erb deleted file mode 100644 index a050f2a..0000000 --- a/plugins/redmine_agile/app/views/agile_journal_details/_status_detail.html.erb +++ /dev/null @@ -1,9 +0,0 @@ -<% assignee = Principal.where(:id => data.assigned_to_id).first %> -<tr class="<%= cycle('odd', 'even') %>"> - <td class="index"><%= index + 1 %></td> - <td class="name"><%= format_time(data.journal.created_on) %></td> - <td><%= issue_status.name %></td> - <td><%= distance_of_time_in_words(data.end_time, data.start_time).html_safe %></td> - <td><%= data.journal.user.name %></td> - <td><%= assignee.try(:name) %></td> -</tr> diff --git a/plugins/redmine_agile/app/views/agile_journal_details/assignee.html.erb b/plugins/redmine_agile/app/views/agile_journal_details/assignee.html.erb deleted file mode 100644 index 9b58399..0000000 --- a/plugins/redmine_agile/app/views/agile_journal_details/assignee.html.erb +++ /dev/null @@ -1,27 +0,0 @@ -<%= title [issue_heading(@issue) , issue_path(@issue)], l(:field_assigned_to) %> - -<% html_title(l(:field_assigned_to)) %> - -<% if @assignees.any? %> - <table class="list"><thead> - <tr> - <th>#</th> - <th><%= l(:field_created_on) %></th> - <th><%= l(:field_assigned_to) %></th> - <th><%= l(:field_duration) %></th> - <th><%= l(:field_author) %></th> - </tr></thead> - <% @assignees.each_with_index do |status, index| %> - <% assignee = User.where(:id => status.value).first %> - <tr class="<%= cycle('odd', 'even') %>"> - <td class="index"><%= index + 1 %></td> - <td class="name"><%= format_time(status.journal.created_on) %></td> - <td class="name"><%= avatar(assignee, :size => "14").to_s.html_safe + " " + link_to_user(assignee) %></td> - <td><%= event_duration(status, @assignees[index + 1]) %></td> - <td><%= link_to_user status.journal.user %></td> - </tr> - <% end %> - </table> -<% else %> -<p class="nodata"><%= l(:label_no_data) %></p> -<% end %> diff --git a/plugins/redmine_agile/app/views/agile_journal_details/done_ratio.html.erb b/plugins/redmine_agile/app/views/agile_journal_details/done_ratio.html.erb deleted file mode 100644 index bcf9e45..0000000 --- a/plugins/redmine_agile/app/views/agile_journal_details/done_ratio.html.erb +++ /dev/null @@ -1,28 +0,0 @@ -<%= title [issue_heading(@issue) , issue_path(@issue)], l(:field_done_ratio) %> - -<% html_title(l(:field_done_ratio)) %> - -<% if @done_ratios.any? %> - <table class="list"><thead> - <tr> - <th>#</th> - <th><%= l(:field_created_on) %></th> - <th><%= l(:field_done_ratio) %></th> - <th><%= l(:label_agile_charts_number_of_hours) %></th> - <th><%= l(:field_duration) %></th> - <th><%= l(:field_author) %></th> - </tr></thead> - <% @done_ratios.each_with_index do |done_ratio, index| %> - <tr class="<%= cycle('odd', 'even') %>"> - <td class="index"><%= index + 1 %></td> - <td class="name"><%= format_time(done_ratio.journal.created_on) %></td> - <td><%= progress_bar(done_ratio.value.to_f, :width => '80px', :legend => "#{"%.2f" %done_ratio.value.to_f}%") %></td> - <td><%= "%.2f" % (@issue.estimated_hours.to_f * (100 - done_ratio.value.to_f) / 100.0) %></td> - <td><%= event_duration(done_ratio, @done_ratios[index + 1]) %></td> - <td><%= done_ratio.journal.user.name %></td> - </tr> - <% end %> - </table> -<% else %> -<p class="nodata"><%= l(:label_no_data) %></p> -<% end %> diff --git a/plugins/redmine_agile/app/views/agile_journal_details/edit.html.erb b/plugins/redmine_agile/app/views/agile_journal_details/edit.html.erb deleted file mode 100644 index d72d1ce..0000000 --- a/plugins/redmine_agile/app/views/agile_journal_details/edit.html.erb +++ /dev/null @@ -1 +0,0 @@ -<h2>AgileDoneRatioFlowsController#edit</h2> diff --git a/plugins/redmine_agile/app/views/agile_journal_details/new.html.erb b/plugins/redmine_agile/app/views/agile_journal_details/new.html.erb deleted file mode 100644 index 00643dd..0000000 --- a/plugins/redmine_agile/app/views/agile_journal_details/new.html.erb +++ /dev/null @@ -1 +0,0 @@ -<h2>AgileDoneRatioFlowsController#new</h2> diff --git a/plugins/redmine_agile/app/views/agile_journal_details/status.html.erb b/plugins/redmine_agile/app/views/agile_journal_details/status.html.erb deleted file mode 100644 index 10dcb43..0000000 --- a/plugins/redmine_agile/app/views/agile_journal_details/status.html.erb +++ /dev/null @@ -1,70 +0,0 @@ -<%= title [issue_heading(@issue) , issue_path(@issue)], l(:label_issue_status) %> - -<% html_title(l(:label_issue_status_plural)) %> - -<%= form_tag({ controller: 'agile_journal_details', action: 'status' }, method: :get, id: 'query_form') do %> - <div id="query_form_with_buttons" class="hide-when-print"> - <div id="query_form_content"> - <fieldset id="options" class="collapsible collapsed"> - <legend onclick="toggleFieldset(this);" class="icon icon-expended"><%= l(:label_options) %></legend> - <div style="display: none;"> - <table> - <tr> - <td><label for='group_by'><%= l(:field_group_by) %></label></td> - <td><%= select_tag('group_by', options_for_select([[]] + [[l(:field_status), 'status']], params[:group_by])) %></td> - </tr> - </table> - </div> - </fieldset> - </div> - </div> - - <p class="buttons hide-when-print"> - <%= link_to_function l(:button_apply), 'submit_query_form("query_form")', :class => 'icon icon-checked' %> - <%= link_to l(:button_clear), { }, :class => 'icon icon-reload' %> - </p> -<% end %> - -<% if @statuses_collector.data.any? %> - <table class="list"><thead> - <tr> - <th>#</th> - <th><%= l(:field_created_on) %></th> - <th><%= l(:field_status) %></th> - <th><%= l(:field_duration) %></th> - <th><%= l(:field_author) %></th> - <th><%= l(:field_assigned_to) %></th> - </tr></thead> - <% if @group %> - <% @statuses_collector.grouped_by(@group).each do |group_id, group_data| %> - <% group_object = @statuses_collector.object_for(@group).where(:id => group_id).first %> - <tr class="group open"> - <td colspan="6"> - <span class="expander icon icon-expended" onclick="toggleRowGroup(this);"> </span> - <span class="name"><%= group_object.name %></span> - <span class="badge badge-count count"><%= group_data.count %></span> - <span class="totals"> - <%= l('datetime.distance_in_words.x_days', count: @statuses_collector.group_total_for(@group, group_data)) %> - </span> - <%= link_to_function("#{l(:button_collapse_all)}/#{l(:button_expand_all)}", - "toggleAllRowGroups(this)", :class => 'toggle-all') %> - </td> - </tr> - <% group_data.each_with_index do |data, index| %> - <%= render partial: 'status_detail', locals: { issue_status: @statuses_collector.issue_status_for(@group, group_id), data: data, index: index } %> - <% end %> - <% end %> - <% else %> - <% @statuses_collector.data.each_with_index do |data, index| %> - <% issue_status = IssueStatus.where(:id => data.status_id).first %> - <%= render partial: 'status_detail', locals: { issue_status: issue_status, data: data, index: index } %> - <% end %> - <% end %> - </table> -<% else %> - <p class="nodata"><%= l(:label_no_data) %></p> -<% end %> - -<% other_formats_links do |f| %> - <%= f.link_to 'CSV', :url => params.respond_to?(:to_unsafe_hash) ? params.to_unsafe_hash : params %> -<% end %> diff --git a/plugins/redmine_agile/app/views/issues/_agile_data_fields.html.erb b/plugins/redmine_agile/app/views/issues/_agile_data_fields.html.erb deleted file mode 100644 index be8cdbf..0000000 --- a/plugins/redmine_agile/app/views/issues/_agile_data_fields.html.erb +++ /dev/null @@ -1,9 +0,0 @@ -<div class="attributes"> - <div class="splitcontent"> - <%= render :partial => 'issue_story_points_form', :locals => { :form => form } %> - </div> -</div> - -<% content_for :header_tags do %> - <%= javascript_include_tag "redmine_agile", :plugin => 'redmine_agile' %> -<% end %> diff --git a/plugins/redmine_agile/app/views/issues/_agile_data_labels.html.erb b/plugins/redmine_agile/app/views/issues/_agile_data_labels.html.erb deleted file mode 100644 index 552e3dc..0000000 --- a/plugins/redmine_agile/app/views/issues/_agile_data_labels.html.erb +++ /dev/null @@ -1 +0,0 @@ -<%= render :partial => 'issue_story_points' %> diff --git a/plugins/redmine_agile/app/views/issues/_issue_spint_form.html.erb b/plugins/redmine_agile/app/views/issues/_issue_spint_form.html.erb deleted file mode 100644 index 8b13789..0000000 --- a/plugins/redmine_agile/app/views/issues/_issue_spint_form.html.erb +++ /dev/null @@ -1 +0,0 @@ - diff --git a/plugins/redmine_agile/app/views/issues/_issue_story_points.html.erb b/plugins/redmine_agile/app/views/issues/_issue_story_points.html.erb deleted file mode 100644 index bfc90dd..0000000 --- a/plugins/redmine_agile/app/views/issues/_issue_story_points.html.erb +++ /dev/null @@ -1,7 +0,0 @@ -<% if @issue.project.module_enabled?('agile') && RedmineAgile.use_story_points? && RedmineAgile.use_story_points_for?(@issue.tracker) %> - <%= issue_fields_rows do |rows| - rows.left l(:label_agile_story_points), @issue.story_points - end if @issue.story_points %> -<% end %> - -<%= javascript_tag "linkableAttributeFields();" %> diff --git a/plugins/redmine_agile/app/views/issues/_issue_story_points_form.html.erb b/plugins/redmine_agile/app/views/issues/_issue_story_points_form.html.erb deleted file mode 100644 index 9761dd2..0000000 --- a/plugins/redmine_agile/app/views/issues/_issue_story_points_form.html.erb +++ /dev/null @@ -1,9 +0,0 @@ -<% if @issue.project.module_enabled?('agile') && RedmineAgile.use_story_points? && RedmineAgile.use_story_points_for?(@issue.tracker) %> - <div class="splitcontentright"> - <%= form.fields_for :agile_data do |f| %> - <p> - <%= f.text_field :story_points, :size => 3, :required => @issue.required_attribute?('agile_data_attributes') %> - </p> - <% end %> - </div> -<% end %> diff --git a/plugins/redmine_agile/app/views/settings/agile/_general.html.erb b/plugins/redmine_agile/app/views/settings/agile/_general.html.erb deleted file mode 100644 index f0059ee..0000000 --- a/plugins/redmine_agile/app/views/settings/agile/_general.html.erb +++ /dev/null @@ -1,54 +0,0 @@ - -<p> - <label><%= l(:label_agile_board_items_limit) %></label> - <%= text_field_tag 'settings[board_items_limit]', RedmineAgile.board_items_limit, :size => 3 %> -</p> - -<p> - <label><%= l(:label_agile_board_default_fields) %></label> - <%= select_tag 'settings[default_columns]', options_for_select(AgileQuery.new(:column_names => RedmineAgile.default_columns).available_columns.collect{|column| [column.caption, column.name]}, RedmineAgile.default_columns), :multiple => true, :include_blank => true, :size => 10, :style => "width:150px" %> -</p> - -<p> - <label><%= l(:label_agile_story_points) %></label> - <%= hidden_field_tag 'settings[story_points_on]', 0, id: nil %> - <%= check_box_tag 'settings[story_points_on]', 1, RedmineAgile.use_story_points?, onchange: "$('#trackers_for_sp').toggle(this.checked);" %> -</p> - -<div id="trackers_for_sp" style="display:<%= RedmineAgile.use_story_points? ? 'block' : 'none' %>"> - <p> - <label><%= l(:label_agile_trackers_for_sp) %></label> - <%= select_tag 'settings[trackers_for_sp]', options_for_select(Tracker.all.map{|tr| [tr.name, tr.id]}, RedmineAgile.trackers_for_sp), :prompt => "All", :style => "width:150px" %> - </p> -</div> - -<p> - <label><%= l(:label_agile_default_chart) %></label> - <%= select_tag 'settings[default_chart]', grouped_options_charts_for_select(RedmineAgile.default_chart) %> -</p> - -<p> - <label for="settings_exclude_weekends"><%= l(:label_agile_exclude_weekends) %></label> - <%= hidden_field_tag 'settings[exclude_weekends]', 0, :id => nil %> - <%= check_box_tag 'settings[exclude_weekends]', 1, RedmineAgile.exclude_weekends? %> -</p> - -<p> - <label><%= l(:label_agile_time_reports_items_limit) %></label> - <%= text_field_tag 'settings[time_reports_items_limit]', RedmineAgile.time_reports_items_limit, :size => 3 %> -</p> -<p> - <label for="settings_hide_closed_issues_data"><%= l(:label_agile_hide_closed_issues_data) %></label> - <%= check_box_tag 'settings[hide_closed_issues_data]', 1, RedmineAgile.hide_closed_issues_data? %> -</p> -<p> - <label for="settings_auto_assign_on_move"><%= l(:label_agile_auto_assign_on_move) %></label> - <%= hidden_field_tag 'settings[auto_assign_on_move]', 0, :id => nil %> - <%= check_box_tag 'settings[auto_assign_on_move]', 1, RedmineAgile.auto_assign_on_move? %> -</p> - -<p> - <label for="settings_allow_inline_comments"><%= l(:label_agile_inline_comment) %></label> - <%= hidden_field_tag 'settings[allow_inline_comments]', 0, :id => nil %> - <%= check_box_tag 'settings[allow_inline_comments]', 1, RedmineAgile.allow_inline_comments? %> -</p> diff --git a/plugins/redmine_agile/assets/images/agile.png b/plugins/redmine_agile/assets/images/agile.png deleted file mode 100644 index e9604d3df4a7db1e14a320dec490d5ec594747ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 857 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7BuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztF#Yy)aSW-rwItZrN7zxMZnJmd_Df8;niqtgT=x)k z>Atu?VljKOn@h5Zq8tAm(}$0Gn>!ya`MBg`hLg{Q6OO(r8A%<1!ds7J2>fLCj`q4) z#=SeW?A!Use^(bz-c!5z{oCKqe&3tzx-9e1|1~<VKQ2=L(Xea#th_Iqcs?n%oV)xz zEo=9hKW`sRPrkBudHYxCU2<1VcuhiE`>(IM#t?FrBPcymS2u6nih_{ed-j~p+<tTI zpX;)$TZ=jG7zs|Z?&P~`@};JkaWfyo^IJ@gul(m(1Qnfm|Ij<qp=`~I2?wndc;BSz zt=sZ<#rBEk8>16urT?4Y(7`xK<Iv7)n-X-|4n95AcA=oiNM@Rg_WzxB6XRny9qxas z^RA>g@bBdC{dud}1Q)G*p~c+FByhFiqbFxqx8;j!GvQe?Vx$gqT}+WkyPV_lrtWWM zUWA9Ig;-pZmi_yS9G3ev4=y@Yth3|gNzI84&!-+!=#^bmX1RAw;IU`QQzuy4FKh9z zn#$OJ`I%BzQN?T)<C6CeZ)|($v)+_rp%}wv@zbBQJXH2w3VpV*nfYUx=;K+w4ZHh( z+otRFzVUHqHTkHxZH;72$Jvw2lOL|Iku&+o{h~*lXB$JxU53bu4MsPz7Om3Q_9SMP zz{07IVxD`g6X~BF74`Sf1|5SL4*Pmrb<SN&th)6%bs5(qrE>y3$G0C_p)tuo`9j#N z6&d~OT@Jr;_4*m|^P^1kSxxpuzxkwIugaV8Nk8@JfszVC&+L1-h6*k-<U3E@b1+Sa zG%TNgSGuE~+x)1VdNsq$vhbzsmC}FeSkreXJ!jzgTcY#I<@J4*1=lAFc-9*Ku?UH} zdX1sTEs^V0&Ayy{cl<B=ZE{kWtau<ubF;sEz5c|&@-AD6tyvep&0o1_DdW>$-0Po* zipdp(?O@(!v+fd8z-5cgHnU>{)P)v_MD8%O*W!8Pa%I+;`3%z97q;C$xpQv#+jnom zjxfxgb!@RyguKwQXY5yxOi9Vp-}J41_SHMPxPNb2nST9jmf7WN*T0_MzMoZs!Mbvu W?v9BkLKzqs7(8A5T-G@yGywpQq?cI$ diff --git a/plugins/redmine_agile/assets/images/fullscreen.png b/plugins/redmine_agile/assets/images/fullscreen.png deleted file mode 100644 index 2e9bc42bec16e3077a9680e7af0f90395bfeb60c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 594 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$@o_i(`nz>AREj{eu!E zj?K?6+~>>HC7|r;(#Tx&Lwtsuhs~ul-)o1is+f4k6sIix<lh@yHlfd0O}DdTZ)WZ~ z{)5tX2d{qK5;$Awb?N!Cy}RqLf3^8uYoD^skWuZWH;3_8g+=r8o8&He9_-?7+$6m3 zJ72}UTMzYm8x1O+KUd>=uD|<`kH|BpRK}O<y(6q++p@279hy}9T>3;!eVcoFp-WcX zPUSTp=H%bM*cJZ%L85No)GDExi%dqvLN06UTCZ$p*<^1Nk#Xnn75DS1!teJjwv6vh z+&Zx-g!6FVh6B@#n|&^4-~T7_;L!1Z*B-sBwXv9ac&)SJ-VB8kW~$5F6l6Pi{>d8b zGX1gLVNKP}lgj?Zk1ni@xyt<fT*s}p+e&w5ebfJSpC@Da(~sthUxglhChnG6aQA|V z?e*e%o<CguW;&rRE~h8w_)J$boMO1Dv8f^8BKzZ6>rx}$KL6tX`$f~9&CQ1r3N~$P zxY^8+6IuLu(ZSx*<~L`1ll?jm&KFJadcClE(ZZ8ooK><p@BCG8)avHRyU6;`%JyMZ zl=|-Y&m2$g&d}?85&w#{@NMMAia8FCGUU$f5xsWyTtPImc9e^EqDK+Stq^{Wc$r39 z`<{(&71<7dI@OZ5AuqDoZq}OGJIubHr0N)%`?vJ!c5N_cU|?YIboFyt=akR{050|o A%>V!Z diff --git a/plugins/redmine_agile/assets/javascripts/jquery.simplecolorpicker.js b/plugins/redmine_agile/assets/javascripts/jquery.simplecolorpicker.js deleted file mode 100644 index 9cfc456..0000000 --- a/plugins/redmine_agile/assets/javascripts/jquery.simplecolorpicker.js +++ /dev/null @@ -1,235 +0,0 @@ -/* - * Very simple jQuery Color Picker - * https://github.com/tkrotoff/jquery-simplecolorpicker - * - * Copyright (C) 2012-2013 Tanguy Krotoff <tkrotoff@gmail.com> - * - * Licensed under the MIT license - */ - -(function($) { - 'use strict'; - - /** - * Constructor. - */ - var SimpleColorPicker = function(select, options) { - this.init('simplecolorpicker', select, options); - }; - - /** - * SimpleColorPicker class. - */ - SimpleColorPicker.prototype = { - constructor: SimpleColorPicker, - - init: function(type, select, options) { - var self = this; - - self.type = type; - - self.$select = $(select); - self.$select.hide(); - - self.options = $.extend({}, $.fn.simplecolorpicker.defaults, options); - - self.$colorList = null; - - if (self.options.picker === true) { - var selectText = self.$select.find('> option:selected').text(); - self.$icon = $('<span class="simplecolorpicker button"' - + ' title="' + selectText + '"' - + ' style="background-color: ' + self.$select.val() + ';"' - + ' role="button" tabindex="0">' - + '</span>').insertAfter(self.$select); - self.$icon.on('click.' + self.type, $.proxy(self.showPicker, self)); - - self.$picker = $('<span class="simplecolorpicker picker ' + self.options.theme + '"></span>').appendTo(document.body); - self.$colorList = self.$picker; - - // Hide picker when clicking outside - $(document).on('mousedown.' + self.type, $.proxy(self.hidePicker, self)); - self.$picker.on('mousedown.' + self.type, $.proxy(self.mousedown, self)); - } else { - self.$inline = $('<span class="simplecolorpicker inline ' + self.options.theme + '"></span>').insertAfter(self.$select); - self.$colorList = self.$inline; - } - - // Build the list of colors - // <span class="color selected" title="Green" style="background-color: #7bd148;" role="button"></span> - self.$select.find('> option').each(function() { - var $option = $(this); - var color = $option.val(); - - var isSelected = $option.is(':selected'); - var isDisabled = $option.is(':disabled'); - - var selected = ''; - if (isSelected === true) { - selected = ' data-selected'; - } - - var disabled = ''; - if (isDisabled === true) { - disabled = ' data-disabled'; - } - - var title = ''; - if (isDisabled === false) { - title = ' title="' + $option.text() + '"'; - } - - var role = ''; - if (isDisabled === false) { - role = ' role="button" tabindex="0"'; - } - - var $colorSpan = $('<span class="color"' - + title - + ' style="background-color: ' + color + ';"' - + ' data-color="' + color + '"' - + selected - + disabled - + role + '>' - + '</span>'); - - self.$colorList.append($colorSpan); - $colorSpan.on('click.' + self.type, $.proxy(self.colorSpanClicked, self)); - - var $next = $option.next(); - if ($next.is('optgroup') === true) { - // Vertical break, like hr - self.$colorList.append('<span class="vr"></span>'); - } - }); - }, - - /** - * Changes the selected color. - * - * @param color the hexadecimal color to select, ex: '#fbd75b' - */ - selectColor: function(color) { - var self = this; - - var $colorSpan = self.$colorList.find('> span.color').filter(function() { - return $(this).data('color').toLowerCase() === color.toLowerCase(); - }); - - if ($colorSpan.length > 0) { - self.selectColorSpan($colorSpan); - } else { - console.error("The given color '" + color + "' could not be found"); - } - }, - - showPicker: function() { - var pos = this.$icon.offset(); - this.$picker.css({ - // Remove some pixels to align the picker icon with the icons inside the dropdown - left: pos.left - 1, - top: pos.top - 4//+ this.$icon.outerHeight() - }); - - this.$picker.show(this.options.pickerDelay); - }, - - hidePicker: function() { - this.$picker.hide(this.options.pickerDelay); - }, - - /** - * Selects the given span inside $colorList. - * - * The given span becomes the selected one. - * It also changes the HTML select value, this will emit the 'change' event. - */ - selectColorSpan: function($colorSpan) { - var color = $colorSpan.data('color'); - var title = $colorSpan.prop('title'); - - // Mark this span as the selected one - $colorSpan.siblings().removeAttr('data-selected'); - $colorSpan.attr('data-selected', ''); - - if (this.options.picker === true) { - this.$icon.css('background-color', color); - this.$icon.prop('title', title); - this.hidePicker(); - } - - // Change HTML select value - this.$select.val(color); - }, - - /** - * The user clicked on a color inside $colorList. - */ - colorSpanClicked: function(e) { - // When a color is clicked, make it the new selected one (unless disabled) - if ($(e.target).is('[data-disabled]') === false) { - this.selectColorSpan($(e.target)); - this.$select.trigger('change'); - } - }, - - /** - * Prevents the mousedown event from "eating" the click event. - */ - mousedown: function(e) { - e.stopPropagation(); - e.preventDefault(); - }, - - destroy: function() { - if (this.options.picker === true) { - this.$icon.off('.' + this.type); - this.$icon.remove(); - $(document).off('.' + this.type); - } - - this.$colorList.off('.' + this.type); - this.$colorList.remove(); - - this.$select.removeData(this.type); - this.$select.show(); - } - }; - - /** - * Plugin definition. - * How to use: $('#id').simplecolorpicker() - */ - $.fn.simplecolorpicker = function(option) { - var args = $.makeArray(arguments); - args.shift(); - - // For HTML element passed to the plugin - return this.each(function() { - var $this = $(this), - data = $this.data('simplecolorpicker'), - options = typeof option === 'object' && option; - if (data === undefined) { - $this.data('simplecolorpicker', (data = new SimpleColorPicker(this, options))); - } - if (typeof option === 'string') { - data[option].apply(data, args); - } - }); - }; - - /** - * Default options. - */ - $.fn.simplecolorpicker.defaults = { - // No theme by default - theme: '', - - // Show the picker or make it inline - picker: false, - - // Animation delay in milliseconds - pickerDelay: 0 - }; - -})(jQuery); diff --git a/plugins/redmine_agile/assets/javascripts/jquery.ui.touch-punch.js b/plugins/redmine_agile/assets/javascripts/jquery.ui.touch-punch.js deleted file mode 100644 index 16ce41d..0000000 --- a/plugins/redmine_agile/assets/javascripts/jquery.ui.touch-punch.js +++ /dev/null @@ -1,180 +0,0 @@ -/*! - * jQuery UI Touch Punch 0.2.3 - * - * Copyright 2011–2014, Dave Furfero - * Dual licensed under the MIT or GPL Version 2 licenses. - * - * Depends: - * jquery.ui.widget.js - * jquery.ui.mouse.js - */ -(function ($) { - - // Detect touch support - $.support.touch = 'ontouchend' in document; - - // Ignore browsers without touch support - if (!$.support.touch) { - return; - } - - var mouseProto = $.ui.mouse.prototype, - _mouseInit = mouseProto._mouseInit, - _mouseDestroy = mouseProto._mouseDestroy, - touchHandled; - - /** - * Simulate a mouse event based on a corresponding touch event - * @param {Object} event A touch event - * @param {String} simulatedType The corresponding mouse event - */ - function simulateMouseEvent (event, simulatedType) { - - // Ignore multi-touch events - if (event.originalEvent.touches.length > 1) { - return; - } - - event.preventDefault(); - - var touch = event.originalEvent.changedTouches[0], - simulatedEvent = document.createEvent('MouseEvents'); - - // Initialize the simulated mouse event using the touch event's coordinates - simulatedEvent.initMouseEvent( - simulatedType, // type - true, // bubbles - true, // cancelable - window, // view - 1, // detail - touch.screenX, // screenX - touch.screenY, // screenY - touch.clientX, // clientX - touch.clientY, // clientY - false, // ctrlKey - false, // altKey - false, // shiftKey - false, // metaKey - 0, // button - null // relatedTarget - ); - - // Dispatch the simulated event to the target element - event.target.dispatchEvent(simulatedEvent); - } - - /** - * Handle the jQuery UI widget's touchstart events - * @param {Object} event The widget element's touchstart event - */ - mouseProto._touchStart = function (event) { - - var self = this; - - // Ignore the event if another widget is already being handled - if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) { - return; - } - - // Set the flag to prevent other widgets from inheriting the touch event - touchHandled = true; - - // Track movement to determine if interaction was a click - self._touchMoved = false; - - // Simulate the mouseover event - simulateMouseEvent(event, 'mouseover'); - - // Simulate the mousemove event - simulateMouseEvent(event, 'mousemove'); - - // Simulate the mousedown event - simulateMouseEvent(event, 'mousedown'); - }; - - /** - * Handle the jQuery UI widget's touchmove events - * @param {Object} event The document's touchmove event - */ - mouseProto._touchMove = function (event) { - - // Ignore event if not handled - if (!touchHandled) { - return; - } - - // Interaction was not a click - this._touchMoved = true; - - // Simulate the mousemove event - simulateMouseEvent(event, 'mousemove'); - }; - - /** - * Handle the jQuery UI widget's touchend events - * @param {Object} event The document's touchend event - */ - mouseProto._touchEnd = function (event) { - - // Ignore event if not handled - if (!touchHandled) { - return; - } - - // Simulate the mouseup event - simulateMouseEvent(event, 'mouseup'); - - // Simulate the mouseout event - simulateMouseEvent(event, 'mouseout'); - - // If the touch interaction did not move, it should trigger a click - if (!this._touchMoved) { - - // Simulate the click event - simulateMouseEvent(event, 'click'); - } - - // Unset the flag to allow other widgets to inherit the touch event - touchHandled = false; - }; - - /** - * A duck punch of the $.ui.mouse _mouseInit method to support touch events. - * This method extends the widget with bound touch event handlers that - * translate touch events to mouse events and pass them to the widget's - * original mouse event handling methods. - */ - mouseProto._mouseInit = function () { - - var self = this; - - // Delegate the touch handlers to the widget's element - self.element.bind({ - touchstart: $.proxy(self, '_touchStart'), - touchmove: $.proxy(self, '_touchMove'), - touchend: $.proxy(self, '_touchEnd') - }); - - // Call the original $.ui.mouse init method - _mouseInit.call(self); - }; - - /** - * Remove the touch event handlers - */ - mouseProto._mouseDestroy = function () { - - var self = this; - - // Delegate the touch handlers to the widget's element - self.element.unbind({ - touchstart: $.proxy(self, '_touchStart'), - touchmove: $.proxy(self, '_touchMove'), - touchend: $.proxy(self, '_touchEnd') - }); - - // Call the original $.ui.mouse destroy method - _mouseDestroy.call(self); - }; - -})(jQuery); \ No newline at end of file diff --git a/plugins/redmine_agile/assets/javascripts/redmine_agile.js b/plugins/redmine_agile/assets/javascripts/redmine_agile.js deleted file mode 100644 index d4ea53c..0000000 --- a/plugins/redmine_agile/assets/javascripts/redmine_agile.js +++ /dev/null @@ -1,787 +0,0 @@ -(function() { - // var AgileBoard = function() {}; - var PlanningBoard = function() {}; - - PlanningBoard.prototype = { - - init: function(routes) { - var self = this; - self.routes = routes; - - $(function() { - self.initSortable(); - }); - }, - - // If there are no changes - backSortable: function($oldColumn) { - $oldColumn.sortable('cancel'); - }, - - successSortable: function($oldColumn, $column) { - clearErrorMessage(); - var r = new RegExp(/\d+/) - var ids = []; - - ids.push({ - column: $column, - id: $column.data('id'), - to: true - }); - ids.push({ - column: $oldColumn, - id: $oldColumn.data('id'), - from: true - }); - - for (var i = 0; i < ids.length; i++) { - var current = ids[i]; - var headerSelector = '.version-planning-board thead tr th[data-column-id="' + current.id + '"]'; - var $columnHeader = $(headerSelector); - var columnText = $columnHeader.text(); - var currentIssuesAmount = ~~columnText.match(r); - currentIssuesAmount = (current.from) ? currentIssuesAmount - 1 : currentIssuesAmount + 1; - $columnHeader.text(columnText.replace(r, currentIssuesAmount)); - } - }, - - errorSortable: function(responseText) { - var alertMessage = parseErrorResponse(responseText); - if (alertMessage) { - setErrorMessage(alertMessage); - }; - }, - - initSortable: function() { - var self = this; - var $issuesCols = $(".column-issues"); - - $issuesCols.sortable({ - connectWith: ".column-issues", - start: function(event, ui) { - var $item = $(ui.item); - $item.attr('oldColumnId', $item.parent().data('version-id')); - $item.attr('oldSprintId', $item.parent().data('sprint-id')); - $item.attr('oldPosition', $item.index()); - }, - stop: function(event, ui) { - var $item = $(ui.item); - var $column = $item.parents('.column-issues'); - var issue_id = $item.data('id'); - var version_id = $column.attr('data-version-id'); - var sprint_id = $column.attr('data-sprint-id'); - var positions = {}; - var oldId = $item.attr('oldColumnId'); - var $oldColumn = $('.ui-sortable[data-version-id="' + oldId + '"]'); - - if(!self.hasChange($item)){ - self.backSortable($column); - return; - } - - $column.find('.issue-card').each(function(i, e) { - var $e = $(e); - positions[$e.data('id')] = { position: $e.index() }; - }); - - var issueParams = {}; - if (version_id != undefined) issueParams['fixed_version_id'] = version_id || ""; - if (sprint_id != undefined) issueParams['sprint_id'] = sprint_id || ""; - - $.ajax({ - url: self.routes.update_agile_board_path, - type: 'PUT', - data: { - issue: issueParams, - positions: positions, - id: issue_id - }, - success: function(data, status, xhr) { - self.successSortable($oldColumn, $column); - }, - error: function(xhr, status, error) { - self.errorSortable(xhr.responseText); - self.backSortable($oldColumn); - } - }); - } - }).disableSelection(); - - $issuesCols.sortable('option', 'cancel', 'div.pagination-wrapper'); - }, - - hasChange: function($item){ - var column = $item.parents('.column-issues'); - return $item.attr('oldColumnId') != column.data('version-id') || // Checks a version change - $item.attr('oldSprintId') != column.data('sprint-id') || // Checks a sprint change; - $item.attr('oldPosition') != $item.index() - }, - - } - - function AgileBoard(routes){ - - // ----- estimated hours ------ - this.recalculateEstimateHours = function(oldStatusId, newStatusId, value){ - oldStatusElement = $('th[data-column-id="' + oldStatusId + '"]'); - newStatusElement = $('th[data-column-id="' + newStatusId + '"]'); - oldStatusElement.each(function(i, elem){ - changeHtmlNumber(elem, -value); - }); - newStatusElement.each(function(i, elem){ - changeHtmlNumber(elem, value); - }); - }; - - this.successSortable = function(oldStatusId, newStatusId, oldSwimLaneId, newSwimLaneId) { - clearErrorMessage(); - }; - - // If there are no changes - this.backSortable = function($oldColumn) { - $oldColumn.sortable('cancel'); - }; - - this.errorSortable = function($oldColumn, responseText) { - var alertMessage = parseErrorResponse(responseText); - if (alertMessage) { - setErrorMessage(alertMessage); - } - }; - - this.initSortable = function() { - var self = this; - var $issuesCols = $(".issue-status-col"); - - $issuesCols.sortable({ - items: '.issue-card', - connectWith: ".issue-status-col", - start: function(event, ui) { - var $item = $(ui.item); - $item.attr('oldColumnId', $item.parent().data('id')); - $item.attr('oldSwimLaneId', $item.parents('tr.swimlane').data('id')); - $item.attr('oldSwimLaneField', $item.parents('tr.swimlane').attr('data-field')); - $item.attr('oldPosition', $item.index()); - }, - stop: function(event, ui) { - var that = this; - var $item = $(ui.item); - var sender = ui.sender; - var $column = $item.parents('.issue-status-col'); - var $swimlane = $item.parents('tr.swimlane'); - var issue_id = $item.data('id'); - var newStatusId = $column.data("id"); - var order = $column.sortable('serialize'); - var swimLaneId = $swimlane.data('id') - var swimLaneField = $swimlane.attr('data-field'); - var positions = {}; - var oldStatusId = $item.attr('oldColumnId'); - var oldSwimLaneId = $item.attr('oldSwimLaneId'); - var oldSwimLaneField = $item.attr('oldSwimLaneField'); - var $oldColumn = $('.ui-sortable[data-id="' + oldStatusId + '"]'); - var $sprintField = $('#sprint_id'); - - if(!self.hasChange($item)){ - self.backSortable($column); - return; - } - $('.lock').show(); - if ($column.hasClass("closed")){ - $item.addClass("float-left") - } - else{ - $item.removeClass("closed-issue"); - $item.removeClass("float-left") - } - - $column.find('.issue-card').each(function(i, e) { - var $e = $(e); - positions[$e.data('id')] = { position: $e.index() }; - }); - - var params = { - issue: { - status_id: newStatusId - }, - positions: positions, - id: issue_id - } - params['issue'][swimLaneField] = swimLaneId; - - - if ($sprintField) { - if (oldStatusId == '' && newStatusId != '') { - params['issue'].sprint_id = $sprintField.val(); - } - if (oldStatusId != '' && newStatusId == '') { - delete(params['issue'].status_id) - params['issue'].sprint_id = ''; - } - } - - $.ajax({ - url: self.routes.update_agile_board_path, - type: 'PUT', - data: params, - success: function(data, status, xhr) { - self.successSortable(oldStatusId, newStatusId, oldSwimLaneId, swimLaneId); - $($item).replaceWith(data); - estimatedHours = $($item).find("span.hours"); - if(estimatedHours.length > 0){ - hours = $(estimatedHours).html().replace(/(\(|\)|h)?/g, ''); - // self.recalculateEstimateHours(oldStatusId, newStatusId, hours); - } - }, - error: function(xhr, status, error) { - self.errorSortable($oldColumn, xhr.responseText); - $(that).sortable( "cancel" ); - }, - complete: function(){ - $('.lock').hide(); - } - }); - } - }); - - }; - - this.initDraggable = function() { - if ($("#group_by").val() != "assigned_to"){ - $(".assignable-user").draggable({ - helper: "clone", - start: function startDraggable(event, ui) { - $(ui.helper).addClass("draggable-active") - } - }); - } - }; - - this.hasChange = function($item){ - var column = $item.parents('.issue-status-col'); - var swimlane = $item.parents('tr.swimlane'); - return $item.attr('oldColumnId') != column.data('id') || // Checks the status change - $item.attr('oldSwimLaneId') != swimlane.data('id') || - $item.attr('oldPosition') != $item.index(); - }; - - this.initDroppable = function() { - var self = this; - - $(".issue-card").droppable({ - activeClass: 'droppable-active', - hoverClass: 'droppable-hover', - accept: '.assignable-user', - tolerance: 'pointer', - drop: function(event, ui) { - var $self = $(this); - $('.lock').show(); - $.ajax({ - url: self.routes.update_agile_board_path, - type: "PUT", - dataType: "html", - data: { - issue: { - assigned_to_id: ui.draggable.data("id") - }, - id: $self.data("id") - }, - success: function(data, status, xhr){ - $self.replaceWith(data); - }, - error:function(xhr, status, error) { - var alertMessage = parseErrorResponse(xhr.responseText); - if (alertMessage) { - setErrorMessage(alertMessage); - $self.find("p.assigned-user").remove(); - } - }, - complete: function(){ - $('.lock').hide(); - } - }); - $self.find("p.info").show(); - $self.find("p.info").html(ui.draggable.clone()); - } - }); - }; - - this.getToolTipInfo = function(node, url){ - var issue_id = $(node).parents(".issue-card").data("id"); - var tip = $(node).children(".tip"); - if( $(tip).html() && $.trim($(tip).html()) != "") - return; - $.ajax({ - url: url, - type: "get", - dataType: "html", - data: { - id: issue_id - }, - success: function(data, status, xhr){ - $(tip).html(data); - }, - error:function(xhr, status, error) { - $(tip).html(error); - } - }); - } - - this.createIssue = function (url) { - $(".add-issue").click(function () { - $(this).children(".new-card__input").focus() - }) - $(".new-card__input").keyup(function (evt) { - var node = this - var $sprintField = $("#sprint_id") - evt = evt || window.event - subject = $.trim($(node).val()) - sprint_id = $sprintField ? $sprintField.val() : "" - if (evt.keyCode == 13 && subject.length != 0) { - $.ajax({ - url: url, - type: "POST", - data: { - subject: subject, - status_id: $(node).parents("td").data("id"), - sprint_id: sprint_id - }, - dataType: "html", - success: function (data, status, xhr) { - $(node).parent().before(data) - $(node).val("") - }, - error: function (xhr, status, error) { - var alertMessage = parseErrorResponse(xhr.responseText) - if (alertMessage) { - setErrorMessage(alertMessage) - } - }, - }) - } - }) - } - - this.routes = routes; - - this.initSortable(); - this.initDraggable(); - this.initDroppable(); - this.createIssue(routes.create_issue_path); - } - - window.AgileBoard = AgileBoard; - window.PlanningBoard = PlanningBoard; - - $.fn.StickyHeader = function() { - return this.each(function() { - var - $this = $(this), - $body = $('body'), - $html = $body.parent(), - $hideButton = $body.find('#hideSidebarButton'), - $fullScreenButton = $body.find('.icon-fullscreen'), - $containerFixed, - $tableFixed, - $tableRows, - $tableFixedRows, - containerWidth, - offset, - tableHeight, - tableHeadHeight, - tableOffsetTop, - tableOffsetBottom, - tmp; - - function init() { - $this.wrap('<div class="container-fixed" />'); - $tableFixed = $this.clone(); - $containerFixed = $this.parents('.container-fixed'); - $tableFixed - .find('tbody') - .remove() - .end() - .addClass('sticky') - .insertBefore($this) - .hide(); - } - - function resizeFixed() { - containerWidth = $containerFixed.width(); - tableHeadHeight = $this.find("thead").height() + 3; - $tableRows = $this.find('thead th'); - $tableFixedRows = $tableFixed.find('th'); - - $tableFixed.css({'width': containerWidth}); - - $tableRows.each(function(i) { - tmp = jQuery(this).width(); - jQuery($tableFixedRows[i]).css('width', tmp); - }); - } - - function scrollFixed() { - tableHeight = $this.height(); - tableHeadHeight = $this.find("thead").height(); - offset = $(window).scrollTop(); - tableOffsetTop = $this.offset().top; - tableOffsetBottom = tableOffsetTop + tableHeight - tableHeadHeight; - - resizeFixed(); - - // The first breakpoint to add responsiveness is 899px - var headerHeight = $(window).width() < 900 ? $('#header').height() : 0; - var tablePositionTop= tableOffsetTop - headerHeight; - var tablePositionBottom= tableOffsetBottom - headerHeight; - - if (offset < tablePositionTop|| offset > tablePositionBottom) { - $tableFixed.css('display', 'none'); - } else if (offset >= tablePositionTop && offset <= tablePositionBottom) { - $tableFixed.css('display', 'table'); - // Fix for chrome not redrawing header - $tableFixed.css('z-index', '100'); - } - } - - - function bindScroll() { - if ($html.hasClass('agile-board-fullscreen')) { - scrollFixed(); - $('div.agile-board.autoscroll').scroll(scrollFixed); - $(window).unbind('scroll'); - } else { - $(window).scroll(scrollFixed); - $('div.agile-board.autoscroll').unbind('scroll'); - $tableFixed.hide(); - } - } - - $hideButton.click(function() { - resizeFixed(); - }); - - $fullScreenButton.click(function() { - bindScroll(); - }); - - $(window).resize(resizeFixed); - - $(window).keyup(function(evt){ - if (evt.keyCode == 27) { - $('html.agile-board-fullscreen').removeClass('agile-board-fullscreen'); - $(".issue-card").addClass("hascontextmenu"); - bindScroll(); - saveFullScreenState(); - } - } - ); - - init(); - bindScroll(); - - }); - }; -})(); - -function parseErrorResponse(responseText){ - try { - var errors = JSON.parse(responseText); - } catch(e) { - - }; - - var alertMessage = ''; - - if (errors && errors.length > 0) { - for (var i = 0; i < errors.length; i++) { - alertMessage += errors[i] + '\n'; - } - } - return alertMessage; -} - -function setErrorMessage(message, flashClass) { - flashClass = flashClass || "error" - $('div#agile-board-errors').addClass("flash " + flashClass); - $('div#agile-board-errors').html(message).show(); - setTimeout(clearErrorMessage,3000); -} - -function clearErrorMessage() { - $('div#agile-board-errors').removeClass(); - $('div#agile-board-errors').html('').hide(); -} - - -function incHtmlNumber(element) { - $(element).html(~~$(element).html() + 1); -} - -function decHtmlNumber(element) { - $(element).html(~~$(element).html() - 1); -} - -function changeHtmlNumber(element, number){ - elementWithHours = $(element).find("span.hours"); - if (elementWithHours.size() > 0){ - old_value = $(elementWithHours).html().replace(/(\(|\)|h)/); - new_value = parseFloat(old_value)+ parseFloat(number); - if (new_value > 0) - $(elementWithHours).html(new_value.toFixed(2) + "h"); - else - $(elementWithHours).remove(); - } - else{ - new_value = number; - $(element).append("<span class='hours'>" + new_value + "h</span>"); - } -} - -function observeIssueSearchfield(fieldId, url) { - $('#'+fieldId).each(function() { - var $this = $(this); - $this.addClass('autocomplete'); - $this.attr('data-value-was', $this.val()); - var check = function() { - var val = $this.val(); - - if ($this.attr('data-value-was') != val){ - var request_data = {} - $.map($('#query_form').serializeArray(), function(n, i){ - if (request_data[n['name']]) { - if ($.isArray(request_data[n['name']])) { - request_data[n['name']].push(n['value']) - } else { - request_data[n['name']] = [request_data[n['name']], n['value']]; - } - } else { - request_data[n['name']] = n['value']; - } - }); - request_data['q'] = val - - $this.attr('data-value-was', val); - $.ajax({ - url: url, - type: 'get', - data: request_data, - beforeSend: function(){ $this.addClass('ajax-loading'); }, - complete: function(){ $this.removeClass('ajax-loading'); } - }); - } - }; - var reset = function(e) { - if (timer) { - clearInterval(timer); - timer = setInterval(check, 300); - } - }; - var skipSpecialKeys = function(e) { - if (e.keyCode === 13) { e.preventDefault() } - } - var timer = setInterval(check, 300); - var skipSubmit = function(e) { - if (e.which == 13 || e.keyCode == 13) { - e.preventDefault(); - return false - } - } - $this.bind('keydown', skipSubmit); - $this.bind('keyup click mousemove', reset); - $this.bind('keydown', skipSpecialKeys); - }); -} - -function recalculateHours() { - $('.version-column').each(function (i, elem) { - var estimatedHours = 0; - var storyPoints = 0; - $(elem).find('.issue-card').each(function (j, issue) { - estimatedHours += parseFloat($(issue).data('estimated-hours')); - storyPoints += parseFloat($(issue).data('story-points')); - }); - - var values = []; - if (estimatedHours > 0) { - values.push(estimatedHours.toFixed(2) + 'h'); - } - - if (storyPoints > 0) { - values.push(storyPoints.toFixed(2) + 'sp'); - } - - if (values.length > 0) { - $(elem).find('.version-estimate').text('(' + values.join('/') + ')'); - } - }); -} - -function recalculateSprintHours() { - var unit = $(".planning-board").data('estimated-unit'); - var dataAttr = unit == 'sp' ? 'story-points' : 'estimated-hours'; - - $('.sprint-column').each(function(i, elem){ - var versionEstimationSum = 0; - $(elem).find('.issue-card').each(function(j, issue){ - hours = parseFloat($(issue).data(dataAttr)); - versionEstimationSum += hours; - }); - $(elem).find('.sprint-estimate').text('(' + versionEstimationSum.toFixed(2) + unit + ')'); - }); -} - -function showInlineCommentNode(quick_comment){ - if(quick_comment){ - $(quick_comment).siblings(".last_comment").hide(); - $(quick_comment).show(); - $(quick_comment).children("textarea").focus(); - } -} - -function showInlineComment(node, url){ - $(node).parent().toggleClass('hidden'); - var quick_comment = $(node).parents(".fields").children(".quick-comment"); - if ( $.trim($(quick_comment).html()) != '' ){ - showInlineCommentNode(quick_comment); - } - else{ - $.ajax({ - url: url, - type: "get", - dataType: "html", - success: function(data, status, xhr){ - $(quick_comment).html(data); - showInlineCommentNode(quick_comment); - }, - error:function(xhr, status, error) { - var alertMessage = parseErrorResponse(xhr.responseText); - if (alertMessage) { - setErrorMessage(alertMessage); - } - } - }) - }; -} - -function saveInlineComment(node, url){ - var node = node; - var comment = $(node).siblings("textarea").val(); - if ($.trim(comment) === "") return false; - $(node).prop('disabled', true); - $('.lock').show(); - var card = $(node).parents(".issue-card"); - var version_board = $('.planning-board').length; - $.ajax({ - url: url, - type: "PUT", - dataType: "html", - data: { issue: { notes: comment }, version_board: version_board }, - success: function(data, status, xhr){ - $(card).replaceWith(data); - }, - error: function(xhr, status, error){ - var alertMessage = parseErrorResponse(xhr.responseText); - if (alertMessage) { - setErrorMessage(alertMessage); - } - }, - complete: function(xhr, status){ - $(node).prop('disabled', false); - $('.lock').hide(); - } - }); -} - -function cancelInlineComment(node){ - $(node).parent().hide(); - $(node).parent().siblings(".last_comment").show(); - $(node).parent().siblings('.quick-edit-card').toggleClass('hidden'); - $(node).parent().html(''); - return false; -} - -function saveFullScreenState() { - state = $('html').hasClass('agile-board-fullscreen'); - localStorage.setItem('full-screen-board', state); -}; - -$(document).ready(function(){ - $('table.issues-board').StickyHeader(); - $('div#agile-board-errors').click(function(){ - $(this).animate({top: -$(this).outerHeight()}, 500); - }); - - $("#agile_live_search").keyup(function() { - var cards = $(".issues-board").find(".issue-card"); - var searchTerm = this.value; - cards.removeClass("filtered"); - cards.filter(function() { - return $(this).find(".name").text().toLowerCase().indexOf(searchTerm.toLowerCase()) === -1; - }).addClass("filtered"); - }); -}); - -function DisableNullFields() { - $('input').each(function(i) { - var $input = $(this); - if ($input.val() == '') - $input.attr('disabled', 'disabled'); - } - ); -}; - -function linkGenerator(path, text) { - return '<a href="' + window.location.origin + window.location.pathname + path + ' ">' + text + '</a>' -}; - -function linkableAttributeFields() { - var status_label = $('.status.attribute .label') - status_label.html(linkGenerator('/status', status_label.html())); - - var assigned_label = $('.assigned-to.attribute .label') - assigned_label.html(linkGenerator('/assignee', assigned_label.html())); - - var progress_label = $('.progress.attribute .label') - progress_label.html(linkGenerator('/done_ratio', progress_label.html())); -}; - -function chartLinkGenerator() { - var filter_values = $("#query_form").serialize(); - event.preventDefault(); - window.location.href = $('.agile_charts_link').prop('href') + '?' + filter_values; -} - -function hideChartPeriodCheckbox() { - $("#cb_chart_period").hide(); - $("label[for=cb_chart_period]").removeAttr("for"); -}; - -function toggleChartUnit(chart, target) { - var showTarget = chartsWithUnits.indexOf(chart) > -1; - $('#' + target).toggle(showTarget); -}; - -function updateVersionAgileChart(url) { - $.ajax(url + '&chart=' + $('#chart_by_select').val() + '&chart_unit=' + $('#chart_unit').val()); -}; - -function chartTooltipCallbacks(chartType) { - if (chartType === 'scatter') { - return scatterChartTooltipCallbacks() - } else { - return {} - } -}; - -function scatterChartTooltipCallbacks() { - return { - title: function (tooltipItem, data) { - return data.labels[tooltipItem[0].xLabel] || ''; - }, - label: function (tooltipItem, data) { - var label = data.datasets[tooltipItem.datasetIndex].label || ''; - if (label) { label += ': ' } - label += tooltipItem.yLabel; - return label; - } - } -}; diff --git a/plugins/redmine_agile/assets/javascripts/redmine_agile_sprint.js b/plugins/redmine_agile/assets/javascripts/redmine_agile_sprint.js deleted file mode 100644 index 10a9b92..0000000 --- a/plugins/redmine_agile/assets/javascripts/redmine_agile_sprint.js +++ /dev/null @@ -1,14 +0,0 @@ -function setAgileSprintEndDate(){ - var start_date = new Date($("#agile_sprint_start_date").val()); - var end_date = new Date(start_date); - var duration = this.value; - if (start_date && duration >= 1) { - end_date.setDate(start_date.getDate() + duration * 7); - $("#agile_sprint_end_date").val(end_date.getFullYear() + '-' + ('0' + (end_date.getMonth() + 1)).slice(-2) + '-' + ('0' + end_date.getDate()).slice(-2)); - $("#agile_sprint_duration").val(null); - } -} - -$(document).ready(function(){ - $('#content').on('change', '#agile_sprint_duration', setAgileSprintEndDate); -}); diff --git a/plugins/redmine_agile/assets/stylesheets/jquery.simplecolorpicker.css b/plugins/redmine_agile/assets/stylesheets/jquery.simplecolorpicker.css deleted file mode 100644 index 234017d..0000000 --- a/plugins/redmine_agile/assets/stylesheets/jquery.simplecolorpicker.css +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Very simple jQuery Color Picker - * https://github.com/tkrotoff/jquery-simplecolorpicker - * - * Copyright (C) 2012-2013 Tanguy Krotoff <tkrotoff@gmail.com> - * - * Licensed under the MIT license - */ - -/** - * Inspired by Bootstrap Twitter. - * See https://github.com/twbs/bootstrap/blob/master/less/navbar.less - * See https://github.com/twbs/bootstrap/blob/master/less/dropdowns.less - */ - -.simplecolorpicker.picker { - position: absolute; - top: 100%; - left: 0; - z-index: 1051; /* Above Bootstrap modal (@zindex-modal = 1050) */ - display: none; - float: left; - - min-width: 160px; - max-width: 283px; /* @popover-max-width = 276px + 7 */ - - padding: 5px 0 0 5px; - margin: 2px 0 0; - list-style: none; - background-color: #fff; /* @dropdown-bg */ - - border: 1px solid #ccc; -} - -.simplecolorpicker.inline { - display: inline-block; -} - -.simplecolorpicker span { - margin: 0 5px 5px 0; -} - -.simplecolorpicker.button, -.simplecolorpicker span.color { - display: inline-block; - outline: none; - cursor: pointer; - border: 1px solid transparent; -} - -.simplecolorpicker.button { - border: 1px solid #DDD; -} - -.simplecolorpicker.button:after, -.simplecolorpicker span.color:after { - content: '\00a0\00a0\00a0\00a0'; /* Spaces */ -} - -.simplecolorpicker span.color[data-disabled]:hover { - cursor: not-allowed; - border: 1px solid transparent; -} - -.simplecolorpicker span.color:hover, -.simplecolorpicker span.color[data-selected], -.simplecolorpicker span.color[data-selected]:hover { - border: 1px solid #222; /* @gray-dark */ -} -.simplecolorpicker span.color[data-selected]:after { - color: #fff; -} - -/* Vertical separator, replaces optgroup. */ -.simplecolorpicker span.vr { - border-left: 1px solid #222; /* @gray-dark */ -} - -.simplecolorpicker span.color[data-selected]:after { - /*font-family: 'FontAwesome';*/ - -webkit-font-smoothing: antialiased; - - content: '\2714'; /* Ok/check mark */ - - margin-right: 2px; - margin-left: 2px; -} - diff --git a/plugins/redmine_agile/assets/stylesheets/redmine_agile.css b/plugins/redmine_agile/assets/stylesheets/redmine_agile.css deleted file mode 100644 index d8ce691..0000000 --- a/plugins/redmine_agile/assets/stylesheets/redmine_agile.css +++ /dev/null @@ -1,610 +0,0 @@ -/**********************************************************************/ -/* ICONS -/**********************************************************************/ -#admin-menu a.agile { background-image: url(../images/agile.png);} -.icon-fullscreen { background-image: url(../images/fullscreen.png); } - -/**********************************************************************/ -/* FULLSCREEN -/**********************************************************************/ -html.agile-board-fullscreen { - overflow: hidden; -} - -html.agile-board-fullscreen div.agile-board { - position: fixed; - top: 0px; - left: 0px; - right: 0px; - bottom: 0px; - z-index: 20; - background: white; - overflow-y:scroll; -} - -html.agile-board-fullscreen table.list.issues-board { - min-height: 100%; - top: 0px; - left: 0px; - right: 0px; -} - -html.agile-board-fullscreen table.list.issues-board.sticky { min-height: auto; } - -html.agile-board-fullscreen .icon-fullscreen { - position: fixed; - right: 5px; - top: 5px; - z-index: 21; - text-indent: -9999px; - white-space: nowrap; - overflow: hidden; -} - -div.agile-board.autoscroll { - overflow: visible; - position: relative; -} - -/**********************************************************************/ -/* BOARD SETTINGS -/**********************************************************************/ -table.options tr > td { - white-space: nowrap; -} - -.agile_options_field { - display: inline-block; - min-width: 30%; -} - -.agile_options_label { - display: inline-block; - min-width: 100px; -} - -.selected_sprint { - font-size: 14px; -} - -.selected_sprint > select { - font-size: 14px; -} - -.card-fields .floating { - text-align: left; - width: 200px; - float: left; - overflow: hidden; - word-wrap: break-word; -} - -.card-fields .floating label span { - width: 110px; - text-overflow: ellipsis; - display: inline-block; - white-space: nowrap; - overflow: hidden; - vertical-align: middle; -} - -.card-fields .floating .wp_input{ - width: 50px; - padding: 1px 5px !important; -} - -.card-fields .floating .wp_input:not(:focus) { - background-color: transparent; - border-color: transparent; - font-size: 90%; -} - - -/**********************************************************************/ -/* ISSUES SIDEBAR -/**********************************************************************/ -#sidebar ul { - margin: 0; - padding: 0; -} - -#sidebar ul li { - list-style-type: none; - margin: 0px 2px 0px 0px; - padding: 0px 0px 0px 0px; -} - -/**********************************************************************/ -/* PLANNING BOARD -/**********************************************************************/ -table.versions-planning-board { - border-spacing: 10px; - width: 100%; -} - -table.versions-planning-board td.issue-version-col { - vertical-align: top; - height: 400px; -} - -table.list.versions-planning-board input#search.autocomplete {width: 80%;} - -table.list.versions-planning-board tbody tr, -table.list.versions-planning-board tbody tr:hover {background-color: white;} -table.list.versions-planning-board .header-hours { - float: right; - vertical-align: baseline; - height: 26px; - line-height: 26px; -} - -/**********************************************************************/ -/* AGILE BOARD -/**********************************************************************/ -table.list.issues-board {table-layout: fixed;} -table.list.issues-board th {overflow: hidden; text-overflow: ellipsis;} - -.agile-board table.list.issues-board tbody tr, -.agile-board table.list.issues-board tbody tr:hover {background-color: white;} - -.assignable-user.draggable-active { - padding: 5px; - border: 1px solid #D5D5D5; - background-color: #ffffdd; -} - -table.issues-board .issue-status-col.empty { padding-bottom: 30px } -table.issues-board td.issue-status-col.closed {background-color: #FAFAFA;} - -table.issues-board tr.group.swimlane {height: 30px;} -table.issues-board tr.group.swimlane td {border-top: 0px;border-bottom: 1px solid #ccc;} - -table.issues-board tbody td, -table.issues-board tbody tr.issue:hover td {border: 0px; vertical-align: top;} - -table.issues-board.minimize-closed td.issue-status-col.closed .issue-card { - width: 10px; - float: left; -} -table.issues-board.minimize-closed td.issue-status-col.closed .issue-card span.fields {display: none;} - -/**********************************************************************/ -/* ISSUE CARD -/**********************************************************************/ -.issue-card { - padding: 5px; - border: solid 1px #d5d5d5; - background-color: #ffffdd; - margin: 5px; - word-wrap: break-word; - text-align: left; - white-space: normal; - cursor: pointer; - position: relative; -} - -.issues-board td.issue-status-col.closed .issue-card.closed-issue {float: left;} -.issues-board td.issue-status-col.closed.collapse .issue-card.float-left {float: left; position: relative;} -.issue-card.closed-issue {white-space: nowrap; display: inline-block;} -.issue-card .tip{ position: fixed; white-space: normal; } - -.issue-card:not(.context-menu-selection) .attributes, -.issue-card:not(.context-menu-selection) span.hours {color: #888;} - -.issue-card .attributes, -.issue-card span.hours {font-size: 90%;} - -.issue-card span.hours {float: right;} - -.issue-card .thumbnail { - height: 145px; - background-size: auto; - background-position: center; - background-repeat: no-repeat; - margin: 5px; -} - -.issue-card .checkbox {display: none;} -.issue-card .avatar {float: left; margin-right: 5px;} -.issue-card p.name {font-weight: bold;} -.issue-card p.project { - border: 1px solid #d5d5d5; - padding: 5px; - margin-bottom: 5px; - text-align: center; - background-color: white; -} -.issue-card .info { - border-top: 1px solid #d5d5d5; - padding-top: 5px; - margin-top: 5px; -} -.issue-card table.progress { - float: none; - margin-top: 5px; - width: 100%; -} - -.issue-card table.progress td { - height: 5px; - padding: 0px; -} - -.issue-card li.task-closed { - text-decoration: line-through; - color: #999; -} - -.issue-card div.sub-issues { - border-top: 1px solid #d5d5d5; - padding-top: 5px; - margin-top: 5px; - font-size: 90%; -} - -.issue-card div.sub-issues ul { - margin: 1px 0px 5px 0px; - padding-left: 30px; -} - -.issue-card .issue-id.without-tracker { - float: right; -} - -.issue-card.context-menu-selection p.project { - color: black; -} - -.issue-card.context-menu-selection .attributes, -.issue-card.context-menu-selection em.info { - color: white; -} - -.issues-board td.issue-status-col.closed .issue-card {background-color: #EDEDED;} - -.issue-card.ui-sortable-helper { - -moz-transform: rotate(5deg); /* Для Firefox */ - -ms-transform: rotate(5deg); /* Для IE */ - -webkit-transform: rotate(5deg); /* Для Safari, Chrome, iOS */ - -o-transform: rotate(5deg); /* Для Opera */ - transform: rotate(5deg); - box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.05); - -moz-box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.05); - -webkit-box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.05); - cursor: -moz-grabbing; - cursor: -webkit-grabbing; - cursor: grabbing; -} - - -.issue-card.br-red {border-left: 5px solid red;} -.issue-card.br-green {border-left: 5px solid green;} -.issue-card.br-blue {border-left: 5px solid blue;} -.issue-card.br-turquoise {border-left: 5px solid turquoise;} -.issue-card.br-lightgreen {border-left: 5px solid lightgreen;} -.issue-card.br-yellow {border-left: 5px solid yellow;} -.issue-card.br-orange {border-left: 5px solid orange;} -.issue-card.br-purple {border-left: 5px solid purple;} -.issue-card.br-gray {border-left: 5px solid gray;} - -table.list.issues tr.issue.br-red, .issue-card.br-red {border-left: 5px solid red;} -table.list.issues tr.issue.br-green, .issue-card.br-green {border-left: 5px solid green;} -table.list.issues tr.issue.br-blue, .issue-card.br-blue {border-left: 5px solid blue;} -table.list.issues tr.issue.br-turquoise, .issue-card.br-turquoise {border-left: 5px solid turquoise;} -table.list.issues tr.issue.br-lightgreen, .issue-card.br-lightgreen {border-left: 5px solid lightgreen;} -table.list.issues tr.issue.br-yellow, .issue-card.br-yellow {border-left: 5px solid yellow;} -table.list.issues tr.issue.br-orange, .issue-card.br-orange {border-left: 5px solid orange;} -table.list.issues tr.issue.br-purple, .issue-card.br-purple {border-left: 5px solid purple;} -table.list.issues tr.issue.br-gray, .issue-card.br-gray {border-left: 5px solid gray;} - -.issue-card.bk-red {background-color: #FFE2E3; border-color: rgb(255, 201, 201);} -.issue-card.bk-green {background-color: #DFFFCC; border-color: rgb(190, 239, 190);} -.issue-card.bk-blue {background-color: #DCE7FF; border-color: rgb(189, 189, 233);} -.issue-card.bk-turquoise {background-color: #C4FDFF; border-color: rgb(151, 222, 214);} -.issue-card.bk-lightgreen {background-color: #D2FFEF; border-color: rgb(184, 228, 226);} -.issue-card.bk-yellow {background-color: #FFFD9C; border-color: rgb(234, 234, 94);} -.issue-card.bk-orange {background-color: #FFDBBA; border-color: rgb(255, 202, 105);} -.issue-card.bk-purple {background-color: #EFDFFC; border-color: rgb(233, 186, 233);} -.issue-card.bk-gray {background-color: #e1e1e1; border-color: rgb(198, 198, 198);} - -div.issue.details.br-red div.subject div > h3::before, div.issue.details.bk-red div.subject div > h3::before, a.issue.bk-red::before, a.issue.br-red::before {content: "\25CF "; color: red;} -div.issue.details.br-green div.subject div > h3::before, div.issue.details.bk-green div.subject div > h3::before, a.issue.bk-green::before, a.issue.br-green::before {content: "\25CF "; color: green;} -div.issue.details.br-blue div.subject div > h3::before, div.issue.details.bk-blue div.subject div > h3::before, a.issue.bk-blue::before, a.issue.br-blue::before {content: "\25CF "; color: blue;} -div.issue.details.br-turquoise div.subject div > h3::before, div.issue.details.bk-turquoise div.subject div > h3::before, a.issue.bk-turquoise::before, a.issue.br-turquoise::before {content: "\25CF "; color: turquoise;} -div.issue.details.br-lightgreen div.subject div > h3::before, div.issue.details.bk-lightgreen div.subject div > h3::before, a.issue.bk-lightgreen::before, a.issue.br-lightgreen::before {content: "\25CF "; color: lightgreen;} -div.issue.details.br-yellow div.subject div > h3::before, div.issue.details.bk-yellow div.subject div > h3::before, a.issue.bk-yellow::before, a.issue.br-yellow::before {content: "\25CF "; color: yellow;} -div.issue.details.br-orange div.subject div > h3::before, div.issue.details.bk-orange div.subject div > h3::before, a.issue.bk-orange::before, a.issue.br-orange::before {content: "\25CF "; color: orange;} -div.issue.details.br-purple div.subject div > h3::before, div.issue.details.bk-purple div.subject div > h3::before, a.issue.bk-purple::before, a.issue.br-purple::before {content: "\25CF "; color: purple;} -div.issue.details.br-gray div.subject div > h3::before, div.issue.details.bk-gray div.subject div > h3::before, a.issue.bk-gray::before, a.issue.br-gray::before {content: "\25CF "; color: gray;} - -table.list.issues tr.issue:not(.context-menu-selection).bk-red td.id a {background-color: #FFE2E3; padding: 2px; border: 1px solid #DDD;} -table.list.issues tr.issue:not(.context-menu-selection).bk-green td.id a {background-color: #DFFFCC; padding: 2px; border: 1px solid #DDD;} -table.list.issues tr.issue:not(.context-menu-selection).bk-blue td.id a {background-color: #DCE7FF; padding: 2px; border: 1px solid #DDD;} -table.list.issues tr.issue:not(.context-menu-selection).bk-turquoise td.id a {background-color: #C4FDFF; padding: 2px; border: 1px solid #DDD;} -table.list.issues tr.issue:not(.context-menu-selection).bk-lightgreen td.id a {background-color: #D2FFEF; padding: 2px; border: 1px solid #DDD;} -table.list.issues tr.issue:not(.context-menu-selection).bk-yellow td.id a {background-color: #FFFD9C; padding: 2px; border: 1px solid #DDD;} -table.list.issues tr.issue:not(.context-menu-selection).bk-orange td.id a {background-color: #FFDBBA; padding: 2px; border: 1px solid #DDD;} -table.list.issues tr.issue:not(.context-menu-selection).bk-purple td.id a {background-color: #EFDFFC; padding: 2px; border: 1px solid #DDD;} -table.list.issues tr.issue:not(.context-menu-selection).bk-gray td.id a {background-color: #e1e1e1; padding: 2px; border: 1px solid #DDD;} - - -/**********************************************************************/ -/* ISSUE CARD CHECKLIST -/**********************************************************************/ - -.issue-card div.checklist { - border-top: 1px solid #d5d5d5; - padding-top: 5px; - margin-top: 5px; - font-size: 90%; -} - -.issue-card div.checklist ul { - list-style: none; - padding: 0px; - margin: 0px; -} - -.issue-card div.checklist input[type=checkbox] { - margin: 0px; -} - -/**********************************************************************/ -/* ISSUE CARD QUICKEDIT -/**********************************************************************/ - -.issue-card div.quick-edit-card { - position: absolute; - right: 2px; - bottom: 2px; - border: 1px solid #ddd; - background-color: white; - height: 17px; - padding: 1px 1px 0px 1px; - margin: 0px; - display: none; -} - -.issue-card div.quick-edit-card a { - float: left; -} - -.issue-card:hover div.quick-edit-card.hidden{ - display: none; -} -.issue-card:hover div.quick-edit-card { - display: block; - cursor: default; - opacity: 0.5; -} - -.issue-card:hover div.quick-edit-card:hover { opacity: 1;} - -.issue-card .quick-comment { - display: none; - margin-top: 5px; - padding-right: 5px; -} - -.issue-card .quick-comment textarea{ - width: 100%; -} - -.issue-card .quick-edit { - margin-right: 3px; -} - -.issue-card .last-comment{ - font-style: italic; -} - -.issues-board .add-issue{ - background: transparent; - border: 1px dashed rgba(48, 59, 77, 0.3); - padding: 5px; - margin: 5px; -} - -.issues-board .add-issue .new-card__input{ - outline: none; - width: 100%; - border: 0px; - background: transparent; - position: relative; - text-align: center; -} - -/**********************************************************************/ -/* ISSUES BOARD -/**********************************************************************/ - -.issues-board td.issue-status-col.droppable-hover, .issues-board td.issue-status-col .issue-card.droppable-hover { - border-style: dotted; - background-color: #E9F8FD; -} - -table.list thead tr th span.hours {color: #888; float: right; font-size: 90%; font-weight: normal;} -table.issues-board thead th {white-space: normal;} -/* -tr.issue.br-red td.id::before, -tr.issue.br-green td.id::before, -tr.issue.br-blue td.id::before, -tr.issue.br-turquoise td.id::before, -tr.issue.br-lightgreen td.id::before, -tr.issue.br-yellow td.id::before, -tr.issue.br-orange td.id::before, -tr.issue.br-purple td.id::before, -tr.issue.br-gray td.id::before, -*/ - -.wp_input { - margin-left: 2px; -} - -table.issues-board thead th span.count span.under_wp_limit {color: #008000;} -table.issues-board thead th span.count span.over_wp_limit {color: #A50000;} - -table.issues-board thead th.under_wp_limit {background-color: #D4F1D4;} -table.issues-board thead th.over_wp_limit {background-color: #FFE9E9;} - -table.issues-board tbody td.under_wp_limit {background-color: #EFFFEF;} -table.issues-board tbody td.over_wp_limit {background-color: #FFF6F6;} - -.add-issue{ - background: transparent; - border: 1px dashed rgba(48, 59, 77, 0.3); - margin: 5px; -} - -.add-issue .new-card__input{ - outline: none; - width: 100%; - border: 0px; - background: transparent; - position: relative; - text-align: center; -} -table.issues-board tbody td.over_wp_limit {background-color: #FFF6F6;} - -.lock { - display: none; - position: absolute; - width: 100%; - height: 100%; - z-index: 9999; - opacity: 0.9; -} - -.agile-board-fullscreen .lock{ - position: fixed; -} - - -.agile-chart-container { - margin: auto; - min-height: 400px; - max-width: 1200px; -} - -.issue-card.filtered { - opacity: 0.2; -} - - -table.list.issues-board.sticky { - display: table; - top: 0px; - position: fixed; -} - -@media screen and (max-width: 899px) { - html.agile-board-fullscreen div.agile-board { - padding: 64px 0 0; /* padding-top equals header height */ - } - - html.agile-board-fullscreen .icon-fullscreen { - top: 64px; /* top equals header height */ - } - - html.agile-board-fullscreen table.list.issues-board.sticky { top: 64px; } - table.list.issues-board.sticky { top: 64px; } - - html.agile-board-fullscreen #wrapper > div.flyout-menu.js-flyout-menu { z-index: 22; } -} - -.planning-board { - display: flex; - overflow-x: auto; -} - -.planning-board p { - margin: 0; -} - -.planning-board .column-content { - width: 272px; - min-width: 272px; - margin: 0 4px 4px 4px; - background-color: #f6f7f8; - border: 1px solid #d7d7d7; -} - -.planning-board .column-header { - display: block; - justify-content: space-between; - align-items: center; - min-height: 28px; - padding: 5px; - background-color: #eeeeee; - border-bottom: 1px solid #d7d7d7; -} - -.planning-board .column-header .version-name { - color: #555; - font-size: 90%; - font-weight: bold; -} - -.planning-board .column-issues { - padding-bottom: 30px; -} - -.planning-board .closed-issue { - color: #999; - display: block; - white-space: inherit; - background-color: #ededed; - border-color: #d7d7d7; -} - -.planning-board .closed-issue p.name a, .planning-board .closed-issue p.issue-id { - color: #999; - text-decoration: line-through; -} - -.issue-edit-modal { - min-height: initial !important; -} - -.modal-action-button { - height: 28px; -} - -.agile_sprint_list .spring_column { text-align: center; } - -.controller-agile_boards .query-totals { - margin-top: -2.3em; -} - -.agile-board-fullscreen .controller-agile_boards .query-totals { - margin: 0px; - position: fixed; - top: 0px; - background: inherit; - left: 0; - right: 0; - padding-right: 32px; - min-height: 20px; - line-height: 20px; -} - -.backlog-column-header { - min-width: 15%; - border-right: solid 3px #d7d7d7; -} - -.issue-backlog-search { padding: 5px 5px 0px 5px; } -.issue-backlog-search input#search { - max-width: 100%; -} - -.issues-board .backlog-column-header { background-color: #e1f1f8; } - -.issues-board .issue-backlog-col { - background: #e1f1f8; - border-right: solid 3px #d7d7d7 !important; -} - -html { - overflow-y: inherit !important; -} diff --git a/plugins/redmine_agile/config/locales/de.yml b/plugins/redmine_agile/config/locales/de.yml deleted file mode 100644 index 428cde2..0000000 --- a/plugins/redmine_agile/config/locales/de.yml +++ /dev/null @@ -1,233 +0,0 @@ -# German strings go here for Rails i18n -de: - label_agile: Agiles Projektmanagement - label_agile_board: Agiles Taskboard - label_agile_board_plural: Agile Taskboards - label_agile_board_thumbnails: Vorschaubilder - label_agile_board_more_issues: Mehr Aufgaben - error_agile_status_transition: Aufgabenstatus konnte nicht geändert werden. - label_agile_board_new: Neues Taskboard - label_agile_board_edit: Taskboard bearbeiten - label_agile_my_boards: Meine Taskboards - label_agile_issue_id: Aufgaben-Nummer - - permission_manage_public_agile_queries: Taskboards verwalten - permission_add_agile_queries: Taskboards hinzufügen - permission_view_agile_queries: Taskboards ansehen - - #1.1.0 - label_agile_board_default_fields: Standardfelder für Taskboard-Karten - label_agile_charts_issues_burndown: Burndown nach Aufgaben - label_agile_charts_work_burndown: Burndown nach erfassten Zeiten - label_agile_charts_work_burndown_sp: Burndown nach Story points - label_agile_charts_work_burndown_hours: Burndown nach Stunden - label_agile_charts_number_of_hours: Stunden - label_agile_charts_number_of_issues: Anzahl Aufgaben - label_agile_charts_cumulative_flow: Kumulativer Fluss - label_agile_charts_trackers_cumulative_flow: Kumulativer Fluss nach Tracker - label_agile_charts_issues_velocity: Velocity - label_agile_charts_cycle_time: Zyklus - label_agile_charts_lead_time: Durchlaufzeit - label_agile_charts_average_lead_time: Durchschnittliche Durchlaufzeit - label_agile_chart_plural: Agile Diagramme - permission_view_agile_charts: Agile Diagramme ansehen - label_agile_ideal_work_remaining: Soll - label_agile_actual_work_remaining: Ist - label_agile_chart: Diagramm - label_agile_date_from: Von - label_agile_date_to: Bis - label_agile_chart_dates: Intervall für das Diagramm - label_agile_weighed_ideal_work_remaining: Gewichtetes Soll - label_agile_status_colors: Status-Farben - label_agile_charts_burnup: Burnup nach Aufgaben - label_agile_charts_number_of_days: Anzahl Tage - label_agile_too_many_items: "Das Diagramm konnte nicht generiert werden, da es die maximale Anzahl an darstellbaren Aufgaben (%{max}) überschreiten würde." - label_agile_time_reports_items_limit: Maximale Anzahl an Aufgaben in Diagrammen - label_agile_total_work_remaining: Gesamt - label_agile_default_chart: Standarddiagramm für Versions - - #1.1.1 - label_agile_charts_average_velocity: Durchschnittliche Velocity - label_agile_charts_avarate_number_of_issues: Durchschnittliche Aufgabenanzahl - label_agile_charts_avarate_number_of_hours: Durchschnittliche Stundenanzahl - - #1.2.0 - label_agile_color: Farben - permission_manage_agile_verions: Versionplanung verwalten - label_agile_version_planning: Versionplanung - error_agile_version_transition: Version der Aufgabe konnte nicht verändert werden. - label_agile_tracker_colors: Farben für Tracker - label_agile_issue_priority_colors: Farben für Aufgabenprioritäten - label_agile_color_based_on: Taskboard-Karten einfärben basierend auf - label_agile_color_no_colors: Keine Farben - label_agile_manage_colors: Farben verwalten - label_agile_fullscreen: Vollbild - label_agile_no_version_issues: Aufgaben ohne Version - label_agile_charts_work_burnup: Burnup nach erfassten Zeiten - label_agile_completed: Abgeschlossen - label_agile_exclude_weekends: Wochenenden von Soll-Zeiten ausnehmen - label_agile_board_truncated: "Das Taskboard wurde abgeschnitten, da es die maximale Anzahl an darstellbaren Aufgaben (%{max}) überschreitet." - label_agile_board_items_limit: Aufgabenlimit für Taskboards - label_agile_swimlanes: Swimlanes - label_agile_minimize_closed: Geschlossene Aufgaben minimieren - label_agile_fields: Felder für Taskboard-Karten - label_agile_default_board: Standard-Taskboard - - #1.3.6 - text_agile_move_not_possible: Diese Änderung ist nicht möglich - - #1.3.8 - label_agile_parent_issue_tracker_id: Übergeordneter Tracker - label_agile_sub_issues: Unteraufgaben - label_agile_color_green: Grün - label_agile_color_blue: Blau - label_agile_color_turquoise: Türkis - label_agile_color_lightgreen: Hellgrün - label_agile_color_yellow: Gelb - label_agile_color_orange: Orange - label_agile_color_red: Rot - label_agile_color_purple: Lila - label_agile_color_gray: Grau - label_agile_has_sub_issues: Hat Unteraufgaben - label_agile_light_free_version: Agile Light freie Version - label_agile_link_to_pro: Upgrade auf PRO - label_agile_link_to_pro_demo: PRO version live demo - label_agile_link_to_more_plugins: Entdecken Sie mehr RedmineUP plugins - label_agile_button_agree: Einverstanden - label_agile_license: RedmineUP Lizenz - label_agile_saving_boards: Boards speichern - label_agile_horizontal_swim_lines: Horizontale Swimlanes - label_agile_board_sub_columns: Board-Unterspalten - label_agile_additional_agile_charts: Weitere Agile-Charts - label_agile_coloured_issue_cards: Farbige Karten - label_agile_4_more_features: 4 weitere Funktionen... - label_agile_upgrade_to_pro: Upgrade auf die PRO-Version um die Funktionen zu nutzen - - label_agile_day_in_state: Zeit seit letzter Status-Änderung - - #1.3.10 - label_agile_hide_closed_issues_data: Daten von geschlossenen Aufgaben ausblenden - project_module_agile: Agile - - #1.3.13 - label_agile_last_comment: Letzter Kommentar - label_agile_esitmate_units: Einheit für Schätzungen - label_agile_trackers_for_sp: Tracker für Story Points - label_agile_story_points: Story Points - field_story_points: Story Points - label_agile_charts_number_of_story_points: Anzahl an Story Points - label_agile_board_columns: Taskboard Spalten - lable_agile_wip_limit_exceeded: Work-in-progress Grenze überschritten - label_agile_wip_limit: Work-in-progress Grenze - label_agile_add_new_issue: + NEUE AUFGABE - label_agile_allow_create_cards: Karte für neue Aufgabe - label_agile_auto_assign_on_move: Selbst zuweisen bei Taskboard-Karten-Bewegung - text_agile_create_issue_error: Die Aufgabe konnte nicht erstellt werden - label_agile_inline_comment: Inline-Kommentar - label_agile_hours: Stunden - field_color: Farbe - - #1.4.0 - label_agile_esitmate_units: Einheit für Schätzung - label_agile_trackers_for_sp: Tracker für Story points - label_agile_story_points: Story points - field_story_points: Story points - label_agile_charts_number_of_story_points: Anzahl Story points - label_agile_board_columns: Board Spalten - lable_agile_wip_limit_exceeded: Work-in-progress Limit überschritten - label_agile_wip_limit: Work-in-progress Limit - label_agile_add_new_issue: '+ NEUES TICKET' - label_agile_allow_create_cards: Ticket aus Taskboard erstellen - label_agile_auto_assign_on_move: Automatische Zuweisung bei - text_agile_create_issue_error: Beim Erstellen der Aufgabe ist ein Fehler aufgetreten - label_agile_inline_comment: Inline Kommentar - label_agile_hours: Stunden - field_color: Farbe - - field_duration: Dauer - - field_closed_on_trendline: Closed trendline - field_created_on_trendline: Created trendline - - label_agile_sp_values: Story points Werte - - label_agile_interval_size: Interval Größe - label_agile_day: Tag - label_agile_week: Woche - label_agile_month: Monat - label_agile_quarter: Quartal - label_agile_year: Jahr - label_cards_search: Suche nach Thema - - field_agile_sprint: Sprint - field_end_date: Enddatum - label_agile_sprints_on: Aktiviere Sprints standardmäßig - label_agile_sprint: Sprint - label_agile_sprint_plural: Sprints - label_agile_sprint_name: Name - label_agile_sprint_description: Beschreibung - label_agile_sprint_status: Status - label_agile_sprint_start_date: Startdatum - label_agile_sprint_end_date: Enddatum - label_agile_sprint_new: Neuer Sprint - label_agile_sprint_status_open: Offen - label_agile_sprint_status_active: Aktiv - label_agile_sprint_status_closed: Geschlossen - label_agile_sprint_duration: Dauer - label_agile_sprint_duration_select: <<Wähle Dauer>> - label_agile_sprint_duration_week_1: 1 Woche - label_agile_sprint_duration_week_2: 2 Wochen - label_agile_sprint_duration_week_3: 3 Wochen - label_agile_sprint_duration_week_4: 4 Wochen - label_agile_sprint_errors_crossed: Sprint Daten überschneiden sich mit einem anderen existierenden Sprint - label_agile_sprint_errors_end_more_start: Das Enddatum sollte nach dem Startdatum liegen - label_agile_sprint_default_chart: Diagramm - label_agile_sprint_chart_units: Einheit für Schätzung - label_agile_chart_for_sprint: "Für Sprint: %{sprint}" - - label_agile_charts: Diagramme - label_agile_chart_burndown: Burndown Diagramm - label_agile_chart_burnup: Burnup Diagramm - label_agile_chart_units: Einheiten - - label_agile_planning_board_more: Lade mehr... - label_agile_version_query_new: Neue agile Abfrage - label_agile_version_my_boards: Meine agilen boards - label_agile_version_board_plural: Agile boards - label_agile_version_board_edit: Bearbeite agile Board version - - label_agile_edit_issue: Bearbeite Ticket - - label_agile_board_type: Art des Taskboards - label_agile_board_type_kanban: Kanban board - label_agile_board_type_scrum: Scrum board - label_agile_board_totals: Gesamt - label_agile_board_totals_story_points: Story points - label_agile_board_totals_hours: Stunden - label_agile_board_totals_spent_time: Aufgewendete Zeit - label_agile_board_totals_percent_done: Prozent erledigt - label_agile_board_totals_velocity: Velocity - label_agile_board_totals_interval: Intervall - label_agile_board_totals_remaining: Verbleibend - - label_agile_sprint_list_active: Aktive Sprints - label_agile_sprint_list_future: Zukünftige Sprints - - label_agile_mixed_trackers: Verschiedene Tracker - label_agile_moving_average: Gleitender Durchschnitt - - label_agile_board_backlog: Backlog - label_agile_board_backlog_column: Backlog Spalten - label_agile_board_search_backlog_issues: Durchsuche Backlog Tickets - label_agile_version_plural: Versionen - label_agile_sprint_add: Sprint hinzufügen - label_agile_version_add: Version hinzufügen - - label_agile_sprint_query_new: Neue agile Sprint Abfragen - label_agile_sprint_my_boards: Meine agilen Sprint boards - label_agile_sprint_board_plural: Agile Sprint boards - label_agile_sprint_board_edit: Bearbeite agiles Sprint board - field_sprint: Sprint - label_agile_no_sprint_issues: Tickets ohne Sprint - field_closed_sprints: Geschlossenen Sprints - field_closed_versions: Geschlossene Versionen diff --git a/plugins/redmine_agile/config/locales/en.yml b/plugins/redmine_agile/config/locales/en.yml deleted file mode 100644 index a223a40..0000000 --- a/plugins/redmine_agile/config/locales/en.yml +++ /dev/null @@ -1,231 +0,0 @@ -# English strings go here for Rails i18n -en: - label_agile: Agile - label_agile_board: Agile board - label_agile_board_plural: Agile boards - label_agile_board_thumbnails: Thumbnails - label_agile_board_more_issues: More issues - error_agile_status_transition: Can’t change issue status - label_agile_board_new: New agile board - label_agile_board_edit: Edit agile board - label_agile_my_boards: My agile boards - label_agile_issue_id: Issue ID - - permission_manage_public_agile_queries: Manage public agile boards - permission_add_agile_queries: Add agile boards - permission_view_agile_queries: View agile boards - - #1.1.0 - label_agile_board_default_fields: Default card fields - label_agile_charts_issues_burndown: Issues burndown - label_agile_charts_work_burndown_hours: Hours burndown - label_agile_charts_work_burndown_sp: Story points burndown - label_agile_charts_number_of_hours: Number of hours - label_agile_charts_number_of_issues: Number of issues - label_agile_charts_cumulative_flow: Cumulative flow - label_agile_charts_trackers_cumulative_flow: Trackers cumulative flow - label_agile_charts_issues_velocity: Velocity - label_agile_charts_cycle_time: Cycle time - label_agile_charts_lead_time: Lead time - label_agile_charts_average_lead_time: Average lead time - label_agile_chart_plural: Agile charts - label_agile_chart_new: New agile chart - label_agile_chart_edit: Edit agile chart - permission_view_agile_charts: View agile charts - label_agile_ideal_work_remaining: Ideal - label_agile_actual_work_remaining: Actual - label_agile_chart: Chart - label_agile_date_from: From - label_agile_date_to: To - label_agile_chart_dates: Chart intervals - label_agile_weighed_ideal_work_remaining: Weighted ideal - label_agile_status_colors: Status colors - label_agile_charts_burnup: Issues burnup - label_agile_charts_number_of_days: Number of days - label_agile_too_many_items: "The chart can't be created because it exceeds the maximum number of items that can be displayed (%{max})" - label_agile_time_reports_items_limit: Time entries based charts issues limit - label_agile_total_work_remaining: Total - label_agile_default_chart: Default chart - - #1.1.1 - label_agile_charts_average_velocity: Average velocity - label_agile_charts_avarate_number_of_issues: Average number of issues - label_agile_charts_avarate_number_of_hours: Average number of hours - - #1.2.0 - label_agile_color: Color - permission_manage_agile_verions: Manage version planning - label_agile_version_planning: Version planning - error_agile_version_transition: Can’t change issue version - label_agile_tracker_colors: Tracker colors - label_agile_issue_priority_colors: Issue priority colors - label_agile_color_based_on: Colored by - label_agile_color_no_colors: No colors - label_agile_manage_colors: Manage colors - label_agile_fullscreen: Full screen - label_agile_no_version_issues: Issues without version - label_agile_charts_work_burnup_hours: Hours burnup - label_agile_charts_work_burnup_sp: Story points burnup - label_agile_completed: Completed - label_agile_exclude_weekends: Exclude weekends from ideal effort - label_agile_board_truncated: "The board was truncated because it exceeds the maximum number of items that can be displayed (%{max})" - label_agile_board_items_limit: Agile board items limit - label_agile_swimlanes: Swim lanes - label_agile_minimize_closed: Minimize closed issues - label_agile_fields: Card fields - label_agile_default_board: Default board - - #1.3.6 - text_agile_move_not_possible: That move is not possible - - #1.3.8 - label_agile_parent_issue_tracker_id: Parent tracker - label_agile_sub_issues: Sub issues - label_agile_color_green: Green - label_agile_color_blue: Blue - label_agile_color_turquoise: Turquoise - label_agile_color_lightgreen: Light green - label_agile_color_yellow: Yellow - label_agile_color_orange: Orange - label_agile_color_red: Red - label_agile_color_purple: Purple - label_agile_color_gray: Gray - label_agile_has_sub_issues: Has sub issues - label_agile_light_free_version: Agile Light free version - label_agile_link_to_pro: Upgrade to PRO - label_agile_link_to_pro_demo: PRO version live demo - label_agile_link_to_more_plugins: Find more RedmineUP plugins - label_agile_button_agree: Agree - label_agile_license: RedmineUP License - label_agile_saving_boards: Saving board - label_agile_horizontal_swim_lines: Horizontal swim lines - label_agile_board_sub_columns: Board sub-columns - label_agile_additional_agile_charts: Additional agile charts - label_agile_coloured_issue_cards: Coloured issue cards - label_agile_4_more_features: 4 more features... - label_agile_upgrade_to_pro: Upgrade to PRO version to use this features - - label_agile_day_in_state: In status - - #1.3.10 - label_agile_hide_closed_issues_data: Hide closed issues data - project_module_agile: Agile - - #1.3.13 - label_agile_last_comment: Last comment - - #1.4.0 - label_agile_esitmate_units: Estimate units - label_agile_trackers_for_sp: Trackers for story points - label_agile_story_points: Story points - field_story_points: Story points - label_agile_charts_number_of_story_points: Number of story points - label_agile_board_columns: Board columns - lable_agile_wip_limit_exceeded: Work-in-progress limit exceeded - label_agile_wip_limit: Work-in-progress limit - label_agile_add_new_issue: '+ ADD NEW ISSUE' - label_agile_allow_create_cards: Card creation - label_agile_auto_assign_on_move: Auto assign on move - text_agile_create_issue_error: An error occurred while creating the task - label_agile_inline_comment: Inline comment - label_agile_hours: Hours - field_color: Color - - field_duration: Duration - - field_closed_on_trendline: Closed trendline - field_created_on_trendline: Created trendline - - label_agile_sp_values: Story points values - - label_agile_interval_size: Interval size - label_agile_day: Day - label_agile_week: Week - label_agile_month: Month - label_agile_quarter: Quarter - label_agile_year: Year - label_cards_search: Search by subject - - field_agile_sprint: Sprint - field_end_date: End date - label_agile_sprints_on: Activate sprints by default - label_agile_sprint: Sprint - label_agile_sprint_plural: Sprints - label_agile_sprint_name: Name - label_agile_sprint_description: Description - label_agile_sprint_status: Status - label_agile_sprint_sharing: Sharing - label_agile_sprint_start_date: Start date - label_agile_sprint_end_date: End date - label_agile_sprint_new: New sprint - label_agile_sprint_status_open: Open - label_agile_sprint_status_active: Active - label_agile_sprint_status_closed: Closed - label_agile_sprint_duration: Duration - label_agile_sprint_duration_select: <<Select duration>> - label_agile_sprint_duration_week_1: 1 week - label_agile_sprint_duration_week_2: 2 weeks - label_agile_sprint_duration_week_3: 3 weeks - label_agile_sprint_duration_week_4: 4 weeks - label_agile_sprint_errors_crossed: Sprint dates are cross another existed sprint - label_agile_sprint_errors_end_more_start: End date should be more than start date - label_agile_sprint_errors_open_issues: Sprint with open issues can be closed - label_agile_sprint_default_chart: Сhart - label_agile_sprint_chart_units: Estimation - label_agile_chart_for_sprint: "For sprint: %{sprint}" - - label_agile_charts: Charts - label_agile_chart_burndown: Burndown chart - label_agile_chart_burnup: Burnup chart - label_agile_chart_units: Units - - label_agile_planning_board_more: Load more... - label_agile_version_query_new: New Agile versions query - label_agile_version_my_boards: My agile version boards - label_agile_version_board_plural: Agile version boards - label_agile_version_board_edit: Edit agile version board - - label_agile_edit_issue: Edit issue - - label_agile_board_type: Board type - label_agile_board_type_kanban: Kanban board - label_agile_board_type_scrum: Scrum board - label_agile_board_totals: Totals - label_agile_board_totals_story_points: Story points - label_agile_board_totals_hours: Hours - label_agile_board_totals_spent_time: Spent time - label_agile_board_totals_percent_done: Percent done - label_agile_board_totals_velocity: Velocity - label_agile_board_totals_interval: Interval - label_agile_board_totals_remaining: Remaining - - label_agile_sprint_list_active: Active sprints - label_agile_sprint_list_future: Future sprints - label_agile_sprint_list_old: Old sprints - - label_agile_mixed_trackers: Mixed trackers - label_agile_moving_average: Moving average - - label_agile_board_backlog: Backlog - label_agile_board_backlog_column: Backlog column - label_agile_board_search_backlog_issues: Search backlog issues - label_agile_version_plural: Versions - label_agile_sprint_add: Add sprint - label_agile_version_add: Add version - - label_agile_sprint_query_new: New agile sprints query - label_agile_sprint_my_boards: My agile sprint boards - label_agile_sprint_board_plural: Agile sprint boards - label_agile_sprint_board_edit: Edit agile sprint board - field_sprint: Sprint - label_agile_no_sprint_issues: Issues without sprint - field_closed_sprints: Closed sprints - field_closed_versions: Closed versions - - label_agile_sprint_sharing_none: Not shared - label_agile_sprint_sharing_descendants: With subprojects - label_agile_sprint_sharing_hierarchy: With project hierarchy - label_agile_sprint_sharing_tree: With project tree - label_agile_sprint_sharing_system: With all projects - - diff --git a/plugins/redmine_agile/config/locales/es.yml b/plugins/redmine_agile/config/locales/es.yml deleted file mode 100644 index 5891751..0000000 --- a/plugins/redmine_agile/config/locales/es.yml +++ /dev/null @@ -1,221 +0,0 @@ -# Spanish strings go here for Rails i18n -es: - label_agile: Ágil - label_agile_board: Tablero ágil - label_agile_board_plural: Tableros ágiles - label_agile_board_thumbnails: Thumbnails - label_agile_board_more_issues: Más peticiones - error_agile_status_transition: No se puede cambiar el estado de la petición - label_agile_board_new: Nuevo tablero ágil - label_agile_board_edit: Editar tablero ágil - label_agile_my_boards: Mis tableros ágiles - label_agile_issue_id: ID de petición - - permission_manage_public_agile_queries: Administrar tableros ágiles públicos - permission_add_agile_queries: Agregar tableros ágiles - permission_view_agile_queries: Ver tableros ágiles - - #1.1.0 - label_agile_board_default_fields: Columnas por defecto - label_agile_charts_issues_burndown: Peticiones burndown - label_agile_charts_work_burndown: Horas burndown - label_agile_charts_work_burndown_sp: Story points burndown - label_agile_charts_number_of_hours: Número de horas - label_agile_charts_number_of_issues: Número de peticiones - label_agile_charts_cumulative_flow: Flujo acumulado - label_agile_charts_trackers_cumulative_flow: Seguimiento de flujo acumulado - label_agile_charts_issues_velocity: Velocidad - label_agile_charts_cycle_time: Ciclo de tiempo - label_agile_charts_lead_time: Tiempo de ejecución - label_agile_charts_average_lead_time: Tiempo medio de entrega - label_agile_chart_plural: Gráficas Agile - label_agile_chart_new: Nueva gráfica Agile - label_agile_chart_edit: Editar gráfica Agile - permission_view_agile_charts: Ver gráfica Agile - label_agile_ideal_work_remaining: Ideal - label_agile_actual_work_remaining: Actual - label_agile_chart: Gráfica - label_agile_date_from: Desde - label_agile_date_to: a - label_agile_chart_dates: Gráfica de interválos - label_agile_weighed_ideal_work_remaining: Ideal ponderado - label_agile_status_colors: Estado de colores - label_agile_charts_burnup: Peticiones burnup - label_agile_charts_number_of_days: Número de días - label_agile_too_many_items: El gráfico no puede ser creado por exceder el número máximo de items que pueden ser mostrados (%{max}) - label_agile_time_reports_items_limit: Tiempo de entradas basado en gráfico de peticiones límite - label_agile_total_work_remaining: Total - label_agile_default_chart: Versión gráfica por defecto - - #1.1.1 - label_agile_charts_average_velocity: Velocidad promedio - label_agile_charts_avarate_number_of_issues: Número de peticiones promedio - label_agile_charts_avarate_number_of_hours: Número de horas promedio - - #1.2.0 - label_agile_color: Color - permission_manage_agile_verions: Administrar planificación de versiones - label_agile_version_planning: planificación de versiones - error_agile_version_transition: No se puede cambiar la versión de la petición - label_agile_tracker_colors: Colores de tipos - label_agile_issue_priority_colors: Colores de prioridades de la petición - label_agile_color_based_on: Color por - label_agile_color_no_colors: Sin colores - label_agile_manage_colors: Administrar colores - label_agile_fullscreen: Pantalla completa - label_agile_no_version_issues: Petición sin version - label_agile_charts_work_burnup_hours: burnup de horas - label_agile_charts_work_burnup_sp: burnup de Story points - label_agile_completed: Completado - label_agile_exclude_weekends: Excluir los fines de semana del esfuerzo ideal - label_agile_board_truncated: El tablero se truncó porque excede el número máximo de elementos que se pueden mostrar (%{max}) - label_agile_board_items_limit: Límite de elementos del tablero ágil - label_agile_swimlanes: Swimlanes - label_agile_minimize_closed: minimizar las peticiones cerradas - label_agile_fields: Campos de la tarjeta - label_agile_default_board: tablero por defecto - - #1.3.6 - text_agile_move_not_possible: Esté movimiento no es posible () - - #1.3.8 - label_agile_parent_issue_tracker_id: Tipo petición padre - label_agile_sub_issues: SubTareas - label_agile_color_green: Verde - label_agile_color_blue: Azul - label_agile_color_turquoise: Turquesa - label_agile_color_lightgreen: Verde claro - label_agile_color_yellow: Amarillo - label_agile_color_orange: Naranja - label_agile_color_red: Rojo - label_agile_color_purple: Morado - label_agile_color_gray: Gris - label_agile_has_sub_issues: Tiene SubTareas - label_agile_light_free_version: Versión gratuita Agile - label_agile_link_to_pro: Actualizar a PRO - label_agile_link_to_pro_demo: demo version PRO - label_agile_link_to_more_plugins: Encontrar más extensiones de RedmineUP - label_agile_button_agree: Acuerdo - label_agile_license: Licencia RedmineUP - label_agile_saving_boards: Guardar tablero - label_agile_horizontal_swim_lines: swimlines horizontales - label_agile_board_sub_columns: sub-columns del tablero - label_agile_additional_agile_charts: Additional agile charts - label_agile_coloured_issue_cards: Tarjetas de colores - label_agile_4_more_features: 4 funcionalides más... - label_agile_upgrade_to_pro: Actualice a la version PRO apra usar estas funcionalidades - - label_agile_day_in_state: En estado - - #1.3.10 - label_agile_hide_closed_issues_data: Ocultar datos de las peticiones cerradas - project_module_agile: Agile - - #1.3.13 - label_agile_last_comment: Último comentario - - #1.4.0 - label_agile_esitmate_units: Unidades estimadas - label_agile_trackers_for_sp: Tipos para story points - label_agile_story_points: Story points - field_story_points: Story points - label_agile_charts_number_of_story_points: Número de story points - label_agile_board_columns: Columnas del tablero - lable_agile_wip_limit_exceeded: Excedido límite de dedicación - label_agile_wip_limit: límite de dedicación - label_agile_add_new_issue: "+ AÑADIR NUEVA PETICION" - label_agile_allow_create_cards: Crear una tarjeta - label_agile_auto_assign_on_move: Auto-Asignar al mover - text_agile_create_issue_error: Se produjo un error al crear la petición - label_agile_inline_comment: Comentario en linea - label_agile_hours: Horas - field_color: Color - - field_duration: Duración - - field_closed_on_trendline: Trendline cerrada - field_created_on_trendline: Trendline creada - - label_agile_sp_values: Valores Story points - - label_agile_interval_size: Tamaño intervalo - label_agile_day: Día - label_agile_week: Semana - label_agile_month: Mes - label_agile_quarter: Trimestre - label_agile_year: Año - label_cards_search: Búsqueda por asunto - - field_agile_sprint: Sprint - field_end_date: Fecha fin - label_agile_sprints_on: Activar sprints por defecto - label_agile_sprint: Sprint - label_agile_sprint_plural: Sprints - label_agile_sprint_name: Nombre - label_agile_sprint_description: Descripción - label_agile_sprint_status: Estado - label_agile_sprint_start_date: Fecha inicio - label_agile_sprint_end_date: Fecha fin - label_agile_sprint_new: nuevo sprint - label_agile_sprint_status_open: Abierto - label_agile_sprint_status_active: Activo - label_agile_sprint_status_closed: Cerrado - label_agile_sprint_duration: Duraccion - label_agile_sprint_duration_select: <<Seleccionar duración>> - label_agile_sprint_duration_week_1: 1 semana - label_agile_sprint_duration_week_2: 2 semanas - label_agile_sprint_duration_week_3: 3 semanas - label_agile_sprint_duration_week_4: 4 semanas - label_agile_sprint_errors_crossed: Las fechas del Sprint se cruza con otro Sprint - label_agile_sprint_errors_end_more_start: La fecha fin debe ser mayor que la fecha de inicio - label_agile_sprint_errors_open_issues: las tareas abiertas del Sprint se puede cerrar - label_agile_sprint_default_chart: Gráfica - label_agile_sprint_chart_units: Estimación - label_agile_chart_for_sprint: "Para el sprint: %{sprint}" - - label_agile_charts: Gráficas - label_agile_chart_burndown: Gráficas Burndown - label_agile_chart_burnup: Gráfica Burnup - label_agile_chart_units: Unidades - - label_agile_planning_board_more: cargar más... - label_agile_version_query_new: Nueva consulta de version Agile - label_agile_version_my_boards: Mis tableros Ágiles - label_agile_version_board_plural: Tablero versión Agil - label_agile_version_board_edit: Editar tablero versión Agil - - label_agile_edit_issue: Editar petición - - label_agile_board_type: Tipo de tablero - label_agile_board_type_kanban: Tablero Kanban - label_agile_board_type_scrum: Tablero Scrum - label_agile_board_totals: Totales - label_agile_board_totals_story_points: Story points - label_agile_board_totals_hours: Horas - label_agile_board_totals_spent_time: Tiempo dedicado - label_agile_board_totals_percent_done: "% Realizado" - label_agile_board_totals_velocity: Velocidad - label_agile_board_totals_interval: Intervalo - label_agile_board_totals_remaining: Restante - - label_agile_sprint_list_active: Sprints activos - label_agile_sprint_list_future: Sprints futuros - - label_agile_mixed_trackers: Tipos mixtos - label_agile_moving_average: Moving Average - - label_agile_board_backlog: Backlog - label_agile_board_backlog_column: columna Backlog - label_agile_board_search_backlog_issues: Buscar peticiones en backlog - label_agile_version_plural: Versiones - label_agile_sprint_add: Añadir sprint - label_agile_version_add: Añadir versión - - label_agile_sprint_query_new: Nueva consulta Sprint ágil - label_agile_sprint_my_boards: Mis tableros Sprint ágil - label_agile_sprint_board_plural: Tablero Sprint ágil - label_agile_sprint_board_edit: Editar tablero Sprint ágil - field_sprint: Sprint - label_agile_no_sprint_issues: Peticiones sin sprint - field_closed_sprints: sprints cerrados - field_closed_versions: Versiones cerradas diff --git a/plugins/redmine_agile/config/locales/fr.yml b/plugins/redmine_agile/config/locales/fr.yml deleted file mode 100644 index 205a99d..0000000 --- a/plugins/redmine_agile/config/locales/fr.yml +++ /dev/null @@ -1,106 +0,0 @@ -# French strings go here for Rails i18n -fr: - label_agile: Agile - label_agile_board: Tableau Agile - label_agile_board_plural: Tableaux Agile - label_agile_board_thumbnails: Miniatures - label_agile_board_more_issues: Plus de demandes - error_agile_status_transition: Impossible de modifier les statuts des demandes - label_agile_board_new: Nouveau tableau Agile - label_agile_board_edit: Modifier le tableau Agile - label_agile_my_boards: Mes tableaux Agiles - label_agile_issue_id: ID de demande - - permission_manage_public_agile_queries: Gérer les tableaux Agile publics - permission_add_agile_queries: Ajouter des tableaux Agile - permission_view_agile_queries: Afficher des tableaux Agile - - #1.1.0 - label_agile_board_default_fields: Champs par défaut des cartes - label_agile_charts_issues_burndown: Burndown des demandes - label_agile_charts_work_burndown: Burndown du temps de travail - label_agile_charts_number_of_hours: Nombre d'heures - label_agile_charts_number_of_issues: Nombre de demandes - label_agile_charts_cumulative_flow: Flux cumulé - label_agile_charts_trackers_cumulative_flow: Flux cumulé des trackers - label_agile_charts_issues_velocity: Vélocité - label_agile_charts_lead_time: Délais - label_agile_charts_average_lead_time: Délai moyen de livraison - label_agile_chart_plural: Graphiques Agiles - permission_view_agile_charts: Afficher les graphique Agiles - label_agile_ideal_work_remaining: Idéal - label_agile_actual_work_remaining: Réel - label_agile_chart: Graphique - label_agile_date_from: De - label_agile_date_to: À - label_agile_chart_dates: Intervalles du graphique - label_agile_weighed_ideal_work_remaining: Idéal pondéré - label_agile_status_colors: Couleurs des statuts - label_agile_charts_burnup: Burnup des demandes - label_agile_charts_number_of_days: Nombre de jours - label_agile_too_many_items: "Le graphique ne peut pas être créé car il dépasse le nombre maximal d'éléments pouvant être affichés (%{max})" - label_agile_time_reports_items_limit: Limite du nombre de demandes pour les graphiques temporels - label_agile_total_work_remaining: Total - label_agile_default_chart: Graphique de versions - - #1.1.1 - label_agile_charts_average_velocity: Vélocité moyenne - label_agile_charts_avarate_number_of_issues: Nombre moyen de demandes - label_agile_charts_avarate_number_of_hours: nombre moyen d'heures - - #1.2.0 - label_agile_color: Couleur - permission_manage_agile_verions: Gérer la planification de versions - label_agile_version_planning: Planification de versions - error_agile_version_transition: Impossible de modifier la version de la demande - label_agile_tracker_colors: Couleurs des trackers - label_agile_issue_priority_colors: Couleurs des priorités de demandes - label_agile_color_based_on: Coloré par - label_agile_color_no_colors: Pas de couleurs - label_agile_manage_colors: Gérer les couleurs - label_agile_fullscreen: Plein écran - label_agile_no_version_issues: Demandes sans version - label_agile_charts_work_burnup: Burnup du temps de travail - label_agile_completed: Terminé - label_agile_exclude_weekends: Exclure les week-ends de l'effort idéal - label_agile_board_truncated: "Le tableau ne peut pas être créé car il dépasse le nombre maximal d'éléments pouvant être affichés (%{max})" - label_agile_board_items_limit: Limite du nombre d'élément du tableau Agile - label_agile_swimlanes: Lignes - label_agile_minimize_closed: Réduire les demandes fermées - label_agile_fields: Champs des cartes - label_agile_default_board: Tableau par défaut - - #1.3.6 - text_agile_move_not_possible: Ce déplacement n'est pas possible - - #1.3.8 - label_agile_parent_issue_tracker_id: Tracker parent - label_agile_sub_issues: Sous-demandes - label_agile_color_green: Vert - label_agile_color_blue: Bleu - label_agile_color_turquoise: Turquoise - label_agile_color_lightgreen: Vert clair - label_agile_color_yellow: Jaune - label_agile_color_orange: Orange - label_agile_color_red: Rouge - label_agile_color_purple: Violet - label_agile_color_gray: Gris - label_agile_has_sub_issues: A des sous-demandes - label_agile_light_free_version: Agile Version gratuite - label_agile_link_to_pro: Mettre à jour en version PRO - label_agile_link_to_pro_demo: Démo live de la version PRO - label_agile_link_to_more_plugins: Voir plus de plugins RedmineUP - label_agile_button_agree: D'accord - label_agile_license: Licence RedmineUP - label_agile_saving_boards: Enregistrement des tableaux - label_agile_horizontal_swim_lines: Lignes en horizontal - label_agile_board_sub_columns: Sous-colonnes du tableau - label_agile_additional_agile_charts: Graphiques Agiles supplémentaires - label_agile_coloured_issue_cards: Cartes colorées - label_agile_4_more_features: 4 nouveautés supplémentaires... - label_agile_upgrade_to_pro: Passez en version PRO pour bénéficier de ces nouveautés - - label_agile_day_in_state: Dans le statut - - #1.3.10 - project_module_agile: Agile \ No newline at end of file diff --git a/plugins/redmine_agile/config/locales/it.yml b/plugins/redmine_agile/config/locales/it.yml deleted file mode 100644 index 15fcb4f..0000000 --- a/plugins/redmine_agile/config/locales/it.yml +++ /dev/null @@ -1,221 +0,0 @@ -# Italian strings go here for Rails i18n -it: - label_agile: Agile - label_agile_board: Tabella Agile - label_agile_board_plural: Tabelle Agile - label_agile_board_thumbnails: Thumbnails - label_agile_board_more_issues: Altre segnalazioni - error_agile_status_transition: Lo stato della segnalazione non può essere cambiato - label_agile_board_new: Nuova tabella Agile - label_agile_board_edit: Modifica tabella Agile - label_agile_my_boards: Le mie tabelle Agile - label_agile_issue_id: ID segnalazione - - permission_manage_public_agile_queries: Gestione tabelle pubbliche Agile - permission_add_agile_queries: Aggiungi tabella Agile - permission_view_agile_queries: Visualizza tabelle Agile - - #1.1.0 - label_agile_board_default_fields: Colonne di Default - label_agile_charts_issues_burndown: Segnalazioni burndown - label_agile_charts_work_burndown_hours: Ore di burndown - label_agile_charts_work_burndown_sp: Story points burndown - label_agile_charts_number_of_hours: Numero di ore - label_agile_charts_number_of_issues: Numero di segnalazioni - label_agile_charts_cumulative_flow: Flusso cumulativo - label_agile_charts_trackers_cumulative_flow: Flusso cumulativo di trackers - label_agile_charts_issues_velocity: Velocità - label_agile_charts_cycle_time: Tempo di ciclo - label_agile_charts_lead_time: Tempo di esecuzione - label_agile_charts_average_lead_time: Media del tempo di esecuziona - label_agile_chart_plural: Grafici Agile - label_agile_chart_new: Nuovo grafico Agile - label_agile_chart_edit: Modifica Grafico Agile - permission_view_agile_charts: Visuaolizza grafici Agile - label_agile_ideal_work_remaining: Ideale - label_agile_actual_work_remaining: Attuale - label_agile_chart: Grafico - label_agile_date_from: Da - label_agile_date_to: A - label_agile_chart_dates: Intervalli dei grafici - label_agile_weighed_ideal_work_remaining: Ideali pesati - label_agile_status_colors: Colori di status - label_agile_charts_burnup: Burnup segnalazioni - label_agile_charts_number_of_days: Numero di giorni - label_agile_too_many_items: "Il grafico non può essere generato perchè ecccede il numero massimo di elementi che possono essere visualizzati (%{max})" - label_agile_time_reports_items_limit: Grafici basati su limiti temporali delle segnalazioni - label_agile_total_work_remaining: Totale - label_agile_default_chart: Grafico di default - - #1.1.1 - label_agile_charts_average_velocity: Media velocità - label_agile_charts_avarate_number_of_issues: Media del numero di segnalazioni - label_agile_charts_avarate_number_of_hours: Media del numero di ore - - #1.2.0 - label_agile_color: Colore - permission_manage_agile_verions: Gestione Pianificazione di versione - label_agile_version_planning: Pianificazione di versione - error_agile_version_transition: Cambio versione di segnalazione non possibile - label_agile_tracker_colors: Colori Tracker - label_agile_issue_priority_colors: Colori priorità di segnalazione - label_agile_color_based_on: Colorato da - label_agile_color_no_colors: Nessun colore - label_agile_manage_colors: Gestione colori - label_agile_fullscreen: Full screen - label_agile_no_version_issues: Segnalazioni senza versione - label_agile_charts_work_burnup_hours: Burnup ore di lavoro - label_agile_charts_work_burnup_sp: Burnup degli Story points - label_agile_completed: Completato - label_agile_exclude_weekends: Escludi weekends dall'effort ideale - label_agile_board_truncated: "La tabella è stata troncata perchè eccede il massimo numero di elementi che possono essere visualizzati (%{max})" - label_agile_board_items_limit: Limite elementi tabella Agile - label_agile_swimlanes: Swim lanes - label_agile_minimize_closed: Minimizza le segnalazioni chiuse - label_agile_fields: Colonne tabella - label_agile_default_board: Tabella di default - - #1.3.6 - text_agile_move_not_possible: That move is not possible - - #1.3.8 - label_agile_parent_issue_tracker_id: Tracker principale - label_agile_sub_issues: Richieste secondarie - label_agile_color_green: Verde - label_agile_color_blue: Blu - label_agile_color_turquoise: Turchese - label_agile_color_lightgreen: Verde chiaro - label_agile_color_yellow: Giallo - label_agile_color_orange: Arancione - label_agile_color_red: Rosso - label_agile_color_purple: Viola - label_agile_color_gray: Grigio - label_agile_has_sub_issues: Ha segnalazioni secondarie - label_agile_light_free_version: Versione Agile Free - label_agile_link_to_pro: Aggiorna alla versione PRO - label_agile_link_to_pro_demo: Demo live della versione PRO - label_agile_link_to_more_plugins: Visualizza altri plug-in RedmineUP - label_agile_button_agree: Okay - label_agile_license: Licenza RedmineUP - label_agile_saving_boards: Salvataggio delle tabelle - label_agile_horizontal_swim_lines: Swim lanes - label_agile_board_sub_columns: Sottocolonne della tabella - label_agile_additional_agile_charts: Grafico aggiuntivo Agile - label_agile_coloured_issue_cards: Schede segnalazioni colorate - label_agile_4_more_features: 4 nuove funzionalità aggiuntive ... - label_agile_upgrade_to_pro: Passa alla versione PRO per beneficiare di queste nuove funzionalità - - label_agile_day_in_state: In status - - #1.3.10 - label_agile_hide_closed_issues_data: Nascondi i dati relativi ai problemi chiusi - project_module_agile: Agile - - #1.3.13 - label_agile_last_comment: Ultimo commento - - #1.4.0 - label_agile_esitmate_units: Stimare le unità - label_agile_trackers_for_sp: Trackers per gli Story points - label_agile_story_points: Story points - field_story_points: Story points - label_agile_charts_number_of_story_points: Numero di Story points - label_agile_board_columns: Colonne della tabella - lable_agile_wip_limit_exceeded: Limite Work-in-progress superato - label_agile_wip_limit: Limite Work-in-progress - label_agile_add_new_issue: "+ aggiungi nuova segnalazione" - label_agile_allow_create_cards: Creazione schede - label_agile_auto_assign_on_move: Assegnazione automatica sulla disposizione - text_agile_create_issue_error: Si è verificato un errore durante la creazione dell'atticità - label_agile_inline_comment: Commento in linea - label_agile_hours: Ore - field_color: Colore - - field_duration: Durata - - field_closed_on_trendline: Trendline chiusa - field_created_on_trendline: Trendline creata - - label_agile_sp_values: Valore degli Story points - - label_agile_interval_size: Dimensione intervallo - label_agile_day: Giorno - label_agile_week: Settimana - label_agile_month: Mese - label_agile_quarter: Trimestre - label_agile_year: Anno - label_cards_search: Cerca per argomento - - field_agile_sprint: Sprint - field_end_date: Data di fine - label_agile_sprints_on: Attiva gli sprint per impostazione predefinita - label_agile_sprint: Sprint - label_agile_sprint_plural: Sprints - label_agile_sprint_name: Nome - label_agile_sprint_description: Descrizione - label_agile_sprint_status: Stato - label_agile_sprint_start_date: Data d'inizio - label_agile_sprint_end_date: Data di fine - label_agile_sprint_new: Nuovo sprint - label_agile_sprint_status_open: Aperto - label_agile_sprint_status_active: Attivo - label_agile_sprint_status_closed: Chiuso - label_agile_sprint_duration: Durata - label_agile_sprint_duration_select: << Seleziona durata >> - label_agile_sprint_duration_week_1: 1 settimana - label_agile_sprint_duration_week_2: 2 settimane - label_agile_sprint_duration_week_3: 3 settimane - label_agile_sprint_duration_week_4: 4 settimane - label_agile_sprint_errors_crossed: Le date dello sprint si incrociano con un altro sprint esistente - label_agile_sprint_errors_end_more_start: La data di fine dovrebbe essere superiore alla data di inizio - label_agile_sprint_errors_open_issues: Lo sprint con problemi aperti non può essere chiuso - label_agile_sprint_default_chart: Grafico - label_agile_sprint_chart_units: Stima - label_agile_chart_for_sprint: "Per lo sprint: %{sprint}" - - label_agile_charts: Grafici - label_agile_chart_burndown: Grafico di burndown - label_agile_chart_burnup: Grafico di burnup - label_agile_chart_units: unità - - label_agile_planning_board_more: Carica altri ... - label_agile_version_query_new: Nuova query sulle versioni Agile - label_agile_version_my_boards: Le mie schede di versioni Agile - label_agile_version_board_plural: Schede versioni Agile - label_agile_version_board_edit: Modifica la scheda della versione Agile - - label_agile_edit_issue: Modifica segnbalazione - - label_agile_board_type: Tipo di tabella - label_agile_board_type_kanban: Tabella Kanban - label_agile_board_type_scrum: Tabella Scrum - label_agile_board_totals: Totali - label_agile_board_totals_story_points: Story points - label_agile_board_totals_hours: Ore - label_agile_board_totals_spent_time: Tempo trascorso - label_agile_board_totals_percent_done: Percentuale fatta - label_agile_board_totals_velocity: Velocità - label_agile_board_totals_interval: Intervallo - label_agile_board_totals_remaining: Residuo - - label_agile_sprint_list_active: Sprint attivi - label_agile_sprint_list_future: Sprint futuri - - label_agile_mixed_trackers: Trackers misti - label_agile_moving_average: Media scostamenti - - label_agile_board_backlog: Backlog - label_agile_board_backlog_column: Colonna Backlog - label_agile_board_search_backlog_issues: Cerca segnalazioni backlog - label_agile_version_plural: Versioni - label_agile_sprint_add: Aggiungi Sprint - label_agile_version_add: Aggiungi versione - - label_agile_sprint_query_new: Nuova query sugli sprint Agile - label_agile_sprint_my_boards: Le mie tabelle Sprint Agile - label_agile_sprint_board_plural: Tabelle Sprint Agile - label_agile_sprint_board_edit: Modifica la tabella Sprint Agile - field_sprint: Sprint - label_agile_no_sprint_issues: Segnalazioni senza Sprint - field_closed_sprints: Sprint chiusi - field_closed_versions: Versioni chiuse diff --git a/plugins/redmine_agile/config/locales/ko.yml b/plugins/redmine_agile/config/locales/ko.yml deleted file mode 100644 index 5e58dcb..0000000 --- a/plugins/redmine_agile/config/locales/ko.yml +++ /dev/null @@ -1,70 +0,0 @@ -# Translation by Ki Won Kim (http://x10.iptime.org/redmine, http://xyz37.blog.me, xyz37@naver.com) -ko: - label_agile: "애자일" - label_agile_board: "애자일 보드" - label_agile_board_plural: "애자일 보드" - label_agile_board_thumbnails: "축소판 그림" - label_agile_board_more_issues: "더 많은 일감" - error_agile_status_transition: "일감 상태를 변경할 수 없습니다." - label_agile_board_new: "신규 애자일 보드" - label_agile_board_edit: "애자일 보드 수정" - label_agile_my_boards: "내 애자일 보드" - label_agile_issue_id: "일감 번호" - - permission_manage_public_agile_queries: "공용 애자일 보드 관리" - permission_add_agile_queries: "애자일 보드 추가" - permission_view_agile_queries: "애자일 보드 보기" - - #1.1.0 - label_agile_board_default_fields: "기본 카드 필드" - label_agile_charts_issues_burndown: "일감 Burn Down" - label_agile_charts_work_burndown: "작업 Burn Down" - label_agile_charts_number_of_hours: "시간 수" - label_agile_charts_number_of_issues: "일감 수" - label_agile_charts_cumulative_flow: "누적 흐름" - label_agile_charts_trackers_cumulative_flow: "일감 유형 누적 흐름" - label_agile_charts_issues_velocity: "속도" - label_agile_charts_lead_time: "리드 타임" - label_agile_charts_average_lead_time: "평균 리드 타임" - label_agile_chart_plural: "애자일 차트" - permission_view_agile_charts: "애자일 차트 보기" - label_agile_ideal_work_remaining: "이상적인" - label_agile_actual_work_remaining: "실제" - label_agile_chart: "차트" - label_agile_date_from: "부터" - label_agile_date_to: "까지" - label_agile_chart_dates: "차트 간격" - label_agile_weighed_ideal_work_remaining: "무게 이상" - label_agile_status_colors: "상태 색상" - label_agile_charts_burnup: "일감 Burn Up" - label_agile_charts_number_of_days: "일 수" - label_agile_too_many_items: "차트가 표시 (% {max}) 될 수 있는 항목의 최대 수를 초과 하므로 만들 수 없습니다." - label_agile_time_reports_items_limit: "시간 항목에 기반한 차트 일감 제한" - label_agile_total_work_remaining: "전체" - label_agile_default_chart: "버전 기본 차트" - - #1.1.1 - label_agile_charts_average_velocity: "평균 속도" - label_agile_charts_avarate_number_of_issues: "평균 일감 수" - label_agile_charts_avarate_number_of_hours: "평균 시간 수" - - #1.2.0 - label_agile_color: "색상" - permission_manage_agile_verions: "버전 계획 관리" - label_agile_version_planning: "버전 계획" - error_agile_version_transition: "일감 버전을 변경할 수 없습니다." - label_agile_tracker_colors: "일감 유형 색상" - label_agile_issue_priority_colors: "일감 우선 순위 색상" - label_agile_color_based_on: "색상의" - label_agile_color_no_colors: "색상 없음" - label_agile_manage_colors: "색상 관리" - label_agile_fullscreen: "전체 화면" - label_agile_no_version_issues: "버전없는 일감들" - label_agile_charts_work_burnup: "작업 Burn Up" - label_agile_completed: "완료됨" - label_agile_exclude_weekends: "이상적인 노력에서 주말 제외" - label_agile_board_truncated: "보드가 표시 (% {max}) 될 수 있는 항목의 최대 수를 초과 하므로 잘렸습니다." - label_agile_board_items_limit: "애자일 보드 항목 제한" - label_agile_swimlanes: "Swim lanes" - label_agile_minimize_closed: "완료된 일감 최소화" - label_agile_fields: "카드 필드" \ No newline at end of file diff --git a/plugins/redmine_agile/config/locales/pt-BR.yml b/plugins/redmine_agile/config/locales/pt-BR.yml deleted file mode 100644 index 5580ab7..0000000 --- a/plugins/redmine_agile/config/locales/pt-BR.yml +++ /dev/null @@ -1,222 +0,0 @@ -# Portugues - Brazil strings go here for Rails i18n -pt-BR: - label_agile: Ágil - label_agile_board: Quadro Ágil - label_agile_board_plural: Quadros ágeis - label_agile_board_thumbnails: Thumbnails - label_agile_board_more_issues: Mais tarefas - error_agile_status_transition: Não é possível alterar o status do problema - label_agile_board_new: Novo quadro ágil - label_agile_board_edit: Editar quadro ágil - label_agile_my_boards: Meus quadros ágeis - label_agile_issue_id: Id. Tarefa - - permission_manage_public_agile_queries: Gerenciar quadros ágeis publicos - permission_add_agile_queries: Adicionar quadro ágil - permission_view_agile_queries: Visualizar quadros ágeis - - #1.1.0 - label_agile_board_default_fields: Campos padrão no post-it - label_agile_charts_issues_burndown: Burndow de tarefas - label_agile_charts_work_burndown_hours: Burndow de horas - label_agile_charts_work_burndown_sp: Burndow por pontos por histórias - label_agile_charts_number_of_hours: Número de horas - label_agile_charts_number_of_issues: Número de tarefas - label_agile_charts_cumulative_flow: Fluxo cumulativo - label_agile_charts_trackers_cumulative_flow: Fluxo comulativo por tipo - label_agile_charts_issues_velocity: Velocidade - label_agile_charts_cycle_time: Tempo de ciclo - label_agile_charts_lead_time: Tempo de espera - label_agile_charts_average_lead_time: Tempo de espera médio - label_agile_chart_plural: Gráficos ágeis - label_agile_chart_new: Novo gráfico ágil - label_agile_chart_edit: Editar gráfico ágil - permission_view_agile_charts: Visualizar gráficos ágeis - label_agile_ideal_work_remaining: Ideal - label_agile_actual_work_remaining: Atual - label_agile_chart: Gráfico - label_agile_date_from: De - label_agile_date_to: Para - label_agile_chart_dates: Intervalo de gráficos - label_agile_weighed_ideal_work_remaining: Ideal ponderado - label_agile_status_colors: Cor dos status - label_agile_charts_burnup: Burnup tarefas - label_agile_charts_number_of_days: Número de dias - label_agile_too_many_items: "O gráfico não pode ser criado porque excede o número máximo de itens que podem ser exibidos (%{max})" - label_agile_time_reports_items_limit: Limite de problemas de gráficos baseados em entradas de tempo - label_agile_total_work_remaining: Total - label_agile_default_chart: Gráfico padrão - - #1.1.1 - label_agile_charts_average_velocity: Velocidade média - label_agile_charts_avarate_number_of_issues: Média de número de tarefas - label_agile_charts_avarate_number_of_hours: Média número de horas - - #1.2.0 - label_agile_color: Cor - permission_manage_agile_verions: Gerencia planejamento da versão - label_agile_version_planning: Planejamento da versão - error_agile_version_transition: Não é possível alterar a versão do problema - label_agile_tracker_colors: Cores por tipo - label_agile_issue_priority_colors: Cores pela prioridade das tarefas - label_agile_color_based_on: Colorir por - label_agile_color_no_colors: Sem cores - label_agile_manage_colors: Gerenciar cores - label_agile_fullscreen: Tela cheia - label_agile_no_version_issues: Tarefas sem versão - label_agile_charts_work_burnup_hours: Burnup de horas - label_agile_charts_work_burnup_sp: Burnup de pontos por histórias - label_agile_completed: Completado - label_agile_exclude_weekends: Exclua fins de semana do esforço - label_agile_board_truncated: "O tabuleiro foi truncado porque excede o número máximo de itens que podem ser exibidos (%{max})" - label_agile_board_items_limit: Limites de tarefas no quadro ágil - label_agile_swimlanes: Rais do quadro - label_agile_minimize_closed: Minimizar itens concluídos - label_agile_fields: Post-its - label_agile_default_board: Quadro padrão - - #1.3.6 - text_agile_move_not_possible: Esse movimento não é possível - - #1.3.8 - label_agile_parent_issue_tracker_id: Tipo parental - label_agile_sub_issues: Sub-tarefas - label_agile_color_green: Verde - label_agile_color_blue: Azul - label_agile_color_turquoise: Turquesa - label_agile_color_lightgreen: Verde claro - label_agile_color_yellow: Amarelo - label_agile_color_orange: Laranja - label_agile_color_red: Vermelho - label_agile_color_purple: Roxo - label_agile_color_gray: Cinza - label_agile_has_sub_issues: Teve Sub-tarefas - label_agile_light_free_version: Versão gratuita Agile Light - label_agile_link_to_pro: Atualize para PRO - label_agile_link_to_pro_demo: Demo da versão PRO - label_agile_link_to_more_plugins: Procurar mais plugins no RedmineUP - label_agile_button_agree: Aceito - label_agile_license: RedmineUP Licensa - label_agile_saving_boards: Salvando quadro - label_agile_horizontal_swim_lines: Rais horizontais - label_agile_board_sub_columns: Quadro sub-colunas - label_agile_additional_agile_charts: Quadro ágil adicional - label_agile_coloured_issue_cards: Colorir post-its das tarefas - label_agile_4_more_features: 4 mais funcionalidades... - label_agile_upgrade_to_pro: Atualizar para versão PRO version para usar estas funcionalidades - - label_agile_day_in_state: Em status - - #1.3.10 - label_agile_hide_closed_issues_data: Ocultar dados de tarefas fechadas - project_module_agile: Agile - - #1.3.13 - label_agile_last_comment: Último comentário - - #1.4.0 - label_agile_esitmate_units: Unidades estimadas - label_agile_trackers_for_sp: Tipos por pontos de histórias - label_agile_story_points: Pontos por histórias - field_story_points: Pontos por histórias - label_agile_charts_number_of_story_points: Número de pontos por história - label_agile_board_columns: Colunas do quadro - lable_agile_wip_limit_exceeded: Limite de trabalho excedido - label_agile_wip_limit: Limite trabalho WIP - label_agile_add_new_issue: '+ Adicionar nova tarefa' - label_agile_allow_create_cards: Criação do post-it - label_agile_auto_assign_on_move: Adicionar o responsável ao mover - text_agile_create_issue_error: Ocorreu um erro na criação da tarefa - label_agile_inline_comment: Comentários em linha - label_agile_hours: Horas - field_color: Cores - - field_duration: Duração - - field_closed_on_trendline: Linha de tendência fechada - field_created_on_trendline: Criar linha de tendência - - label_agile_sp_values: Valor dos pontos por história - - label_agile_interval_size: Tamanho do intervalo - label_agile_day: Dia - label_agile_week: Semana - label_agile_month: Mês - label_agile_quarter: Trimestre - label_agile_year: Ano - label_cards_search: Pesquisar por título - - field_agile_sprint: Sprint - field_end_date: Encerramento - label_agile_sprints_on: Ativar sprints por padrão - label_agile_sprint: Sprint - label_agile_sprint_plural: Sprints - label_agile_sprint_name: Nome - label_agile_sprint_description: Descrição - label_agile_sprint_status: Status - label_agile_sprint_start_date: Início em - label_agile_sprint_end_date: Término em - label_agile_sprint_new: Nova sprint - label_agile_sprint_status_open: Aberta - label_agile_sprint_status_active: Ativa - label_agile_sprint_status_closed: Fechada - label_agile_sprint_duration: Duração - label_agile_sprint_duration_select: <<Select duration>> - label_agile_sprint_duration_week_1: 1 semana - label_agile_sprint_duration_week_2: 2 semanas - label_agile_sprint_duration_week_3: 3 semanas - label_agile_sprint_duration_week_4: 4 semanas - label_agile_sprint_errors_crossed: As datas da sprint são cruzadas com outra sprint existente - label_agile_sprint_errors_end_more_start: A data de término deve ser posterior à data de início - label_agile_sprint_errors_open_issues: Sprint com problemas abertos pode ser fechado - label_agile_sprint_default_chart: Gráfico - label_agile_sprint_chart_units: Estimativa - label_agile_chart_for_sprint: "Para sprint: %{sprint}" - - label_agile_charts: Gráficos - label_agile_chart_burndown: Gráfico burndown - label_agile_chart_burnup: Gráfico burnup - label_agile_chart_units: Unidades - - label_agile_planning_board_more: Carregar mais... - label_agile_version_query_new: Consulta de novas versões do Agile - label_agile_version_my_boards: Meus quadros ágeis - label_agile_version_board_plural: Versões dos quados ágeis - label_agile_version_board_edit: Editar versão do quadro ágil - - label_agile_edit_issue: Editar tarefa - - label_agile_board_type: Tipo do quadro - label_agile_board_type_kanban: Quadro Kanban - label_agile_board_type_scrum: Quadro Scrum - label_agile_board_totals: Totais - label_agile_board_totals_story_points: Pontos por história - label_agile_board_totals_hours: Horas - label_agile_board_totals_spent_time: Tempo gasto - label_agile_board_totals_percent_done: Percentual de pronto - label_agile_board_totals_velocity: Velocidade - label_agile_board_totals_interval: Intervalo - label_agile_board_totals_remaining: Remanecente - - label_agile_sprint_list_active: Sprints ativos - label_agile_sprint_list_future: Sprints futuros - label_agile_sprint_list_old: Sprints antigos - - label_agile_mixed_trackers: Tipos mistos - label_agile_moving_average: Média móvel - - label_agile_board_backlog: Backlog - label_agile_board_backlog_column: Colunas do Backlog - label_agile_board_search_backlog_issues: Pesquisar tarefas do backlog - label_agile_version_plural: Vesões - label_agile_sprint_add: Adicionar novo Sprint - label_agile_version_add: Adicionar Versão - - label_agile_sprint_query_new: Nova consulta sprint ágil - label_agile_sprint_my_boards: Meus quadros de sprint - label_agile_sprint_board_plural: Quadros de sprint ágeis - label_agile_sprint_board_edit: Editar quadros de sprint - field_sprint: Sprint - label_agile_no_sprint_issues: Tarefas sem sprint - field_closed_sprints: Sprints fechadas - field_closed_versions: Versões fechadas diff --git a/plugins/redmine_agile/config/locales/pt.yml b/plugins/redmine_agile/config/locales/pt.yml deleted file mode 100644 index 89bfa75..0000000 --- a/plugins/redmine_agile/config/locales/pt.yml +++ /dev/null @@ -1,222 +0,0 @@ -# Portugues - Portugal strings go here for Rails i18n -pt: - label_agile: Ágil - label_agile_board: Quadro Ágil - label_agile_board_plural: Quadros ágeis - label_agile_board_thumbnails: Thumbnails - label_agile_board_more_issues: Mais tarefas - error_agile_status_transition: Não é possível alterar o status do problema - label_agile_board_new: Novo quadro ágil - label_agile_board_edit: Editar quadro ágil - label_agile_my_boards: Meus quadros ágeis - label_agile_issue_id: Id. Tarefa - - permission_manage_public_agile_queries: Gerenciar quadros ágeis publicos - permission_add_agile_queries: Adicionar quadro ágil - permission_view_agile_queries: Visualizar quadros ágeis - - #1.1.0 - label_agile_board_default_fields: Campos padrão no post-it - label_agile_charts_issues_burndown: Burndow de tarefas - label_agile_charts_work_burndown_hours: Burndow de horas - label_agile_charts_work_burndown_sp: Burndow por pontos por histórias - label_agile_charts_number_of_hours: Número de horas - label_agile_charts_number_of_issues: Número de tarefas - label_agile_charts_cumulative_flow: Fluxo cumulativo - label_agile_charts_trackers_cumulative_flow: Fluxo comulativo por tipo - label_agile_charts_issues_velocity: Velocidade - label_agile_charts_cycle_time: Tempo de ciclo - label_agile_charts_lead_time: Tempo de espera - label_agile_charts_average_lead_time: Tempo de espera médio - label_agile_chart_plural: Gráficos ágeis - label_agile_chart_new: Novo gráfico ágil - label_agile_chart_edit: Editar gráfico ágil - permission_view_agile_charts: Visualizar gráficos ágeis - label_agile_ideal_work_remaining: Ideal - label_agile_actual_work_remaining: Atual - label_agile_chart: Gráfico - label_agile_date_from: De - label_agile_date_to: Para - label_agile_chart_dates: Intervalo de gráficos - label_agile_weighed_ideal_work_remaining: Ideal ponderado - label_agile_status_colors: Cor dos status - label_agile_charts_burnup: Burnup tarefas - label_agile_charts_number_of_days: Número de dias - label_agile_too_many_items: "O gráfico não pode ser criado porque excede o número máximo de itens que podem ser exibidos (%{max})" - label_agile_time_reports_items_limit: Limite de problemas de gráficos baseados em entradas de tempo - label_agile_total_work_remaining: Total - label_agile_default_chart: Gráfico padrão - - #1.1.1 - label_agile_charts_average_velocity: Velocidade média - label_agile_charts_avarate_number_of_issues: Média de número de tarefas - label_agile_charts_avarate_number_of_hours: Média número de horas - - #1.2.0 - label_agile_color: Cor - permission_manage_agile_verions: Gerencia planejamento da versão - label_agile_version_planning: Planejamento da versão - error_agile_version_transition: Não é possível alterar a versão do problema - label_agile_tracker_colors: Cores por tipo - label_agile_issue_priority_colors: Cores pela prioridade das tarefas - label_agile_color_based_on: Colorir por - label_agile_color_no_colors: Sem cores - label_agile_manage_colors: Gerenciar cores - label_agile_fullscreen: Tela cheia - label_agile_no_version_issues: Tarefas sem versão - label_agile_charts_work_burnup_hours: Burnup de horas - label_agile_charts_work_burnup_sp: Burnup de pontos por histórias - label_agile_completed: Completado - label_agile_exclude_weekends: Exclua fins de semana do esforço - label_agile_board_truncated: "O tabuleiro foi truncado porque excede o número máximo de itens que podem ser exibidos (%{max})" - label_agile_board_items_limit: Limites de tarefas no quadro ágil - label_agile_swimlanes: Rais do quadro - label_agile_minimize_closed: Minimizar itens concluídos - label_agile_fields: Post-its - label_agile_default_board: Quadro padrão - - #1.3.6 - text_agile_move_not_possible: Esse movimento não é possível - - #1.3.8 - label_agile_parent_issue_tracker_id: Tipo parental - label_agile_sub_issues: Sub-tarefas - label_agile_color_green: Verde - label_agile_color_blue: Azul - label_agile_color_turquoise: Turquesa - label_agile_color_lightgreen: Verde claro - label_agile_color_yellow: Amarelo - label_agile_color_orange: Laranja - label_agile_color_red: Vermelho - label_agile_color_purple: Roxo - label_agile_color_gray: Cinza - label_agile_has_sub_issues: Teve Sub-tarefas - label_agile_light_free_version: Versão gratuita Agile Light - label_agile_link_to_pro: Atualize para PRO - label_agile_link_to_pro_demo: Demo da versão PRO - label_agile_link_to_more_plugins: Procurar mais plugins no RedmineUP - label_agile_button_agree: Aceito - label_agile_license: RedmineUP Licensa - label_agile_saving_boards: Salvando quadro - label_agile_horizontal_swim_lines: Rais horizontais - label_agile_board_sub_columns: Quadro sub-colunas - label_agile_additional_agile_charts: Quadro ágil adicional - label_agile_coloured_issue_cards: Colorir post-its das tarefas - label_agile_4_more_features: 4 mais funcionalidades... - label_agile_upgrade_to_pro: Atualizar para versão PRO version para usar estas funcionalidades - - label_agile_day_in_state: Em status - - #1.3.10 - label_agile_hide_closed_issues_data: Ocultar dados de tarefas fechadas - project_module_agile: Agile - - #1.3.13 - label_agile_last_comment: Último comentário - - #1.4.0 - label_agile_esitmate_units: Unidades estimadas - label_agile_trackers_for_sp: Tipos por pontos de histórias - label_agile_story_points: Pontos por histórias - field_story_points: Pontos por histórias - label_agile_charts_number_of_story_points: Número de pontos por história - label_agile_board_columns: Colunas do quadro - lable_agile_wip_limit_exceeded: Limite de trabalho excedido - label_agile_wip_limit: Limite trabalho WIP - label_agile_add_new_issue: '+ Adicionar nova tarefa' - label_agile_allow_create_cards: Criação do post-it - label_agile_auto_assign_on_move: Adicionar o responsável ao mover - text_agile_create_issue_error: Ocorreu um erro na criação da tarefa - label_agile_inline_comment: Comentários em linha - label_agile_hours: Horas - field_color: Cores - - field_duration: Duração - - field_closed_on_trendline: Linha de tendência fechada - field_created_on_trendline: Criar linha de tendência - - label_agile_sp_values: Valor dos pontos por história - - label_agile_interval_size: Tamanho do intervalo - label_agile_day: Dia - label_agile_week: Semana - label_agile_month: Mês - label_agile_quarter: Trimestre - label_agile_year: Ano - label_cards_search: Pesquisar por título - - field_agile_sprint: Sprint - field_end_date: Encerramento - label_agile_sprints_on: Ativar sprints por padrão - label_agile_sprint: Sprint - label_agile_sprint_plural: Sprints - label_agile_sprint_name: Nome - label_agile_sprint_description: Descrição - label_agile_sprint_status: Status - label_agile_sprint_start_date: Início em - label_agile_sprint_end_date: Término em - label_agile_sprint_new: Nova sprint - label_agile_sprint_status_open: Aberta - label_agile_sprint_status_active: Ativa - label_agile_sprint_status_closed: Fechada - label_agile_sprint_duration: Duração - label_agile_sprint_duration_select: <<Select duration>> - label_agile_sprint_duration_week_1: 1 semana - label_agile_sprint_duration_week_2: 2 semanas - label_agile_sprint_duration_week_3: 3 semanas - label_agile_sprint_duration_week_4: 4 semanas - label_agile_sprint_errors_crossed: As datas da sprint são cruzadas com outra sprint existente - label_agile_sprint_errors_end_more_start: A data de término deve ser posterior à data de início - label_agile_sprint_errors_open_issues: Sprint com problemas abertos pode ser fechado - label_agile_sprint_default_chart: Gráfico - label_agile_sprint_chart_units: Estimativa - label_agile_chart_for_sprint: "Para sprint: %{sprint}" - - label_agile_charts: Gráficos - label_agile_chart_burndown: Gráfico burndown - label_agile_chart_burnup: Gráfico burnup - label_agile_chart_units: Unidades - - label_agile_planning_board_more: Carregar mais... - label_agile_version_query_new: Consulta de novas versões do Agile - label_agile_version_my_boards: Meus quadros ágeis - label_agile_version_board_plural: Versões dos quados ágeis - label_agile_version_board_edit: Editar versão do quadro ágil - - label_agile_edit_issue: Editar tarefa - - label_agile_board_type: Tipo do quadro - label_agile_board_type_kanban: Quadro Kanban - label_agile_board_type_scrum: Quadro Scrum - label_agile_board_totals: Totais - label_agile_board_totals_story_points: Pontos por história - label_agile_board_totals_hours: Horas - label_agile_board_totals_spent_time: Tempo gasto - label_agile_board_totals_percent_done: Percentual de pronto - label_agile_board_totals_velocity: Velocidade - label_agile_board_totals_interval: Intervalo - label_agile_board_totals_remaining: Remanecente - - label_agile_sprint_list_active: Sprints ativos - label_agile_sprint_list_future: Sprints futuros - label_agile_sprint_list_old: Sprints antigos - - label_agile_mixed_trackers: Tipos mistos - label_agile_moving_average: Média móvel - - label_agile_board_backlog: Backlog - label_agile_board_backlog_column: Colunas do Backlog - label_agile_board_search_backlog_issues: Pesquisar tarefas do backlog - label_agile_version_plural: Vesões - label_agile_sprint_add: Adicionar novo Sprint - label_agile_version_add: Adicionar Versão - - label_agile_sprint_query_new: Nova consulta sprint ágil - label_agile_sprint_my_boards: Meus quadros de sprint - label_agile_sprint_board_plural: Quadros de sprint ágeis - label_agile_sprint_board_edit: Editar quadros de sprint - field_sprint: Sprint - label_agile_no_sprint_issues: Tarefas sem sprint - field_closed_sprints: Sprints fechadas - field_closed_versions: Versões fechadas diff --git a/plugins/redmine_agile/config/locales/ru.yml b/plugins/redmine_agile/config/locales/ru.yml deleted file mode 100644 index d4ad02d..0000000 --- a/plugins/redmine_agile/config/locales/ru.yml +++ /dev/null @@ -1,220 +0,0 @@ -# Russian strings go here for Rails i18n -ru: - label_agile: Agile - label_agile_board: Доска задач - label_agile_board_plural: Доски задач - label_agile_board_thumbnails: Превью - label_agile_board_issues_per_column: Кол-во задач в колонке - label_agile_board_more_issues: Еще задачи - error_agile_status_transition: Невозможно изменить статус - label_agile_board_new: Новая доска - label_agile_board_edit: Редактировать доску - label_agile_my_boards: Мои доски - label_agile_issue_id: Номер задачи - - permission_manage_public_agile_queries: Управление публичными досками задач - permission_add_agile_queries: Добавление досок задач - permission_view_agile_queries: Просмотр досок задач - - #1.1.0 - label_agile_board_default_fields: Поля по умолчанию - label_agile_charts_issues_burndown: Сгорание задач - label_agile_charts_work_burndown_hours: Сгорание времени задач (burndown) - label_agile_charts_work_burndown_sp: Сгорание story points (burndown) - label_agile_charts_number_of_hours: Кол-во часов - label_agile_charts_number_of_issues: Кол-во задач - label_agile_charts_cumulative_flow: Накопительный поток - label_agile_charts_trackers_cumulative_flow: Накопительный поток трекеров - label_agile_charts_issues_velocity: Скорость закрытия задач - label_agile_charts_cycle_time: Цикл задачи - label_agile_charts_lead_time: Цикл задачи - label_agile_charts_average_lead_time: Средний цикл задачи - label_agile_chart_plural: Диаграммы - label_agile_chart_new: Новая диаграмма - label_agile_chart_edit: Редактировать диаграмму - permission_view_agile_charts: Просмотр диаграмм - label_agile_ideal_work_remaining: Идеально - label_agile_actual_work_remaining: Действительно - label_agile_chart: Диаграмма - label_agile_date_from: С - label_agile_date_to: По - label_agile_chart_dates: Интервалы диаграммы - label_agile_weighed_ideal_work_remaining: Взвещенно - label_agile_status_colors: Цвета статусов - label_agile_charts_burnup: Выполнение задач - label_agile_charts_number_of_days: Кол-во дней - label_agile_too_many_items: "Диаграмма не может быть создана потому что превышено максимальное кол-во задач (%{max})" - label_agile_time_reports_items_limit: Максимальное кол-во задач отображаемых на диаграммах - label_agile_total_work_remaining: Всего - label_agile_default_chart: Диаграмма по умолчанию - - #1.1.1 - label_agile_charts_average_velocity: Средняя скорость закрытия задач - label_agile_charts_avarate_number_of_issues: Среднее кол-во задач - label_agile_charts_avarate_number_of_hours: Среднее кол-во часов - - #1.2.0 - label_agile_color: Цвет - permission_manage_agile_verions: Планирование версий - label_agile_version_planning: Планирование версий - error_agile_version_transition: Невозможно изменить версию задачи - label_agile_tracker_colors: Цвета трекеров - label_agile_issue_priority_colors: Цвета приоритетов задачи - label_agile_color_based_on: Цвета на основании - label_agile_color_no_colors: Без цвета - label_agile_manage_colors: Настроить цвета - label_agile_fullscreen: Во весь экран - label_agile_no_version_issues: Задачи без версии - label_agile_charts_work_burnup_hours: Выполнение времени задач (burnup) - label_agile_charts_work_burnup_sp: Выполнение story points (burnup) - label_agile_completed: Выполнено - label_agile_exclude_weekends: Исключать выходные для диаграммы сгорания - label_agile_board_truncated: "Доска была усечена, поскольку превышено максимальное кол-во элементов, которые могут отображаться (%{max})" - label_agile_board_items_limit: Максимальное кол-во задач отображаемых на Доске - label_agile_swimlanes: Группировать по - label_agile_minimize_closed: Минимизировать закрытые задачи - label_agile_fields: Поля - label_agile_default_board: По умолчанию - - #1.3.6 - text_agile_move_not_possible: Данное передвижение невозможно - - #1.3.8 - label_agile_parent_issue_tracker_id: Трекер родителя - label_agile_sub_issues: Подзадачи - label_agile_color_green: Зеленый - label_agile_color_blue: Синий - label_agile_color_turquoise: Бирюзовый - label_agile_color_lightgreen: Светло зеленый - label_agile_color_yellow: Желтый - label_agile_color_orange: Оранжевый - label_agile_color_red: Красный - label_agile_color_purple: Фиолетовый - label_agile_color_gray: Серый - label_agile_has_sub_issues: Подзадачи - label_agile_light_free_version: Agile бесплатная версия - label_agile_link_to_pro: Обновление до PRO - label_agile_link_to_pro_demo: Онлайн демо PRO - label_agile_link_to_more_plugins: Другие плагины RedmineUP - label_agile_button_agree: Согласен - label_agile_license: Лицензионное соглашение RedmineUP - label_agile_saving_boards: Сохранить настройку доски - label_agile_horizontal_swim_lines: Группировки карточек - label_agile_board_sub_columns: Доп. колонки - label_agile_additional_agile_charts: Доп. диаграммы - label_agile_coloured_issue_cards: Цветовая индикация карточек - label_agile_4_more_features: И еще другие 4 функции... - label_agile_upgrade_to_pro: 'Обновитесь до PRO версии чтобы:' - - #1.3.10 - label_agile_hide_closed_issues_data: Скрывать данные закрытых задач - label_agile_day_in_state: В статусе - project_module_agile: Agile - - #1.3.13 - label_agile_last_comment: Последний комментарий - - #1.4.0 - label_agile_esitmate_units: Использовать для оценки - label_agile_trackers_for_sp: Трекеры для Story points - label_agile_story_points: Story points - field_story_points: Story points - label_agile_charts_number_of_story_points: Кол-во story points - label_agile_board_columns: Столбцы доски - lable_agile_wip_limit_exceeded: Превышен лимит по задачам в данном столбце - label_agile_wip_limit: Ограничение по кол-ву задач в столбце - label_agile_add_new_issue: '+ НОВАЯ ЗАДАЧА' - label_agile_allow_create_cards: Создавать новые задачи на доске - label_agile_auto_assign_on_move: Автоназначение при перетаскивании - text_agile_create_issue_error: Произошла ошибка при создании задачи - label_agile_inline_comment: Комментирование с доски - label_agile_hours: Часы - field_color: Цвет - - field_duration: Продолжительность - label_cards_search: Поиск по теме - - field_agile_sprint: Спринт - field_end_date: Дата окончания - label_agile_sprints_on: Активировать спринты по умолчанию - label_agile_sprint: Спринт - label_agile_sprint_plural: Спринты - label_agile_sprint_name: Название - label_agile_sprint_description: Описание - label_agile_sprint_status: Статус - label_agile_sprint_sharing: Совместное использование - label_agile_sprint_start_date: Дата начала - label_agile_sprint_end_date: Дата окончания - label_agile_sprint_new: Новый спринт - label_agile_sprint_status_open: Открытый - label_agile_sprint_status_active: Активный - label_agile_sprint_status_closed: Закрытый - label_agile_sprint_duration: Продолжительность - label_agile_sprint_duration_select: <<Выберите>> - label_agile_sprint_duration_week_1: 1 неделя - label_agile_sprint_duration_week_2: 2 недели - label_agile_sprint_duration_week_3: 3 недели - label_agile_sprint_duration_week_4: 4 недели - label_agile_sprint_errors_crossed: Выбранные даты пересекают другой спринт - label_agile_sprint_errors_end_more_start: Дата окончания должна быть больше даты начала - label_agile_sprint_errors_open_issues: Нельзя закрыть спринт содержащий открытые задачи - label_agile_sprint_default_chart: График - label_agile_sprint_chart_units: Единицы - label_agile_chart_for_sprint: "Для спринта: %{sprint}" - - label_agile_interval_size: Размер интервала - label_agile_day: День - label_agile_week: Неделя - label_agile_month: Месяц - label_agile_quarter: Квартал - label_agile_year: Год - - label_agile_charts: Диаграммы - label_agile_chart_units: Тип - - label_agile_planning_board_more: Загрузить еще... - label_agile_version_query_new: Новый запрос версий - label_agile_version_my_boards: Мои доски версий - label_agile_version_board_plural: Доски версий - label_agile_version_board_edit: Редактировать доску версий - - label_agile_edit_issue: Изменить задачу - - - label_agile_board_type: Тип доски - label_agile_board_type_kanban: Kanban доска - label_agile_board_type_scrum: Scrum доска - label_agile_board_totals: Итоги - label_agile_board_totals_story_points: Story points - label_agile_board_totals_hours: Часы - label_agile_board_totals_spent_time: Потраченное время - label_agile_board_totals_percent_done: Готовность (%) - label_agile_board_totals_velocity: Скорость закрытия - - label_agile_sprint_list_active: Активные спринты - label_agile_sprint_list_future: Следующие спринты - label_agile_sprint_list_old: Прошлые спринты - - label_agile_moving_average: Скользящая средняя - - label_agile_board_backlog: Backlog - label_agile_board_backlog_column: Backlog column - label_agile_board_search_backlog_issues: Поиск backlog задач - label_agile_version_plural: Версии - label_agile_sprint_add: Добавить спринт - label_agile_version_add: Добавить версию - - label_agile_sprint_query_new: Новый запрос спринтов - label_agile_sprint_my_boards: Мои доски спринтов - label_agile_sprint_board_plural: Доски спринтов - label_agile_sprint_board_edit: Редактировать доску спринтов - field_sprint: Спринт - label_agile_no_sprint_issues: Задачи без спринта - field_closed_sprints: Закрытые спринты - field_closed_versions: Закрытые версии - - label_agile_sprint_sharing_none: Без совместного использования - label_agile_sprint_sharing_descendants: С подпроектами - label_agile_sprint_sharing_hierarchy: С иерархией проектов - label_agile_sprint_sharing_tree: С деревом проектов - label_agile_sprint_sharing_system: Со всеми проектами diff --git a/plugins/redmine_agile/config/locales/zh-TW.yml b/plugins/redmine_agile/config/locales/zh-TW.yml deleted file mode 100644 index 1751082..0000000 --- a/plugins/redmine_agile/config/locales/zh-TW.yml +++ /dev/null @@ -1,92 +0,0 @@ -# encoding: utf-8 -# Simplified Chinese strings go here for Rails i18n -# Author: zhoutt -# Based on file: en.yml - -zh-TW: - label_agile: 敏捷 - label_agile_board: 敏捷看板 - label_agile_board_plural: 敏捷看板 - label_agile_board_thumbnails: 縮略圖 - label_agile_board_more_issues: 更多問題 - error_agile_status_transition: 不能更改問題狀態 - label_agile_board_new: 新敏捷看板 - label_agile_board_edit: 編輯敏捷看板 - label_agile_my_boards: 我的敏捷看板 - label_agile_issue_id: 問題ID - - permission_manage_public_agile_queries: 管理公共敏捷看板 - permission_add_agile_queries: 新建敏捷看板 - permission_view_agile_queries: 瀏覽敏捷看板 - - #1.1.0 - label_agile_board_default_fields: 默認卡片區域 - label_agile_charts_issues_burndown: 問題燃燒圖 - label_agile_charts_work_burndown: 工作燃燒圖 - label_agile_charts_number_of_hours: 時長數 - label_agile_charts_number_of_issues: 問題數 - label_agile_charts_cumulative_flow: 累積流量 - label_agile_charts_trackers_cumulative_flow: 追蹤累流量 - label_agile_charts_issues_velocity: 速度 - label_agile_charts_lead_time: 交付周期 - label_agile_charts_average_lead_time: 平均交付周期 - label_agile_chart_plural: 敏捷圖標 - permission_view_agile_charts: 瀏覽敏捷圖標 - label_agile_ideal_work_remaining: 理想 - label_agile_actual_work_remaining: 實際 - label_agile_chart: 圖表 - label_agile_date_from: 自 - label_agile_date_to: 至 - label_agile_chart_dates: 圖標間隔 - label_agile_weighed_ideal_work_remaining: 理想權衡 - label_agile_status_colors: 狀態顏色 - label_agile_charts_burnup: 問題燃燒圖 - label_agile_charts_number_of_days: 天數 - label_agile_too_many_items: "該圖表因超出可顯示的最大項目數而不能被創建(%{max})" - label_agile_time_reports_items_limit: 時間條目基于圖表的問題限制 - label_agile_total_work_remaining: 總計 - label_agile_default_chart: 版本默認圖表 - - #1.1.1 - label_agile_charts_average_velocity: 平均速率 - label_agile_charts_avarate_number_of_issues: 平均問題數 - label_agile_charts_avarate_number_of_hours: 平均時長 - - #1.2.0 - label_agile_color: 顏色 - permission_manage_agile_verions: 管理版本規劃 - label_agile_version_planning: 版本規劃 - error_agile_version_transition: 不能更改問題版本 - label_agile_tracker_colors: 跟蹤器顏色 - label_agile_issue_priority_colors: 問題優先級顏色 - label_agile_color_based_on: 顏色 - label_agile_color_no_colors: 無顏色 - label_agile_manage_colors: 管理顏色 - label_agile_fullscreen: 全屏 - label_agile_no_version_issues: 無版本項目 - label_agile_charts_work_burnup: 工作燃燒 - label_agile_completed: 完成 - label_agile_exclude_weekends: 從理想工作中排除周末時間 - label_agile_board_truncated: "看板被縮短是由于超出最大顯示項目數 (%{max})" - label_agile_board_items_limit: 敏捷看板項目限制 - label_agile_swimlanes: 泳道 - label_agile_minimize_closed: 最小化關閉的問題 - label_agile_fields: 卡片區域 - label_agile_default_board: 默認看板 - - #1.3.6 - text_agile_move_not_possible: 該步驟不可行 - - #1.3.8 - label_agile_parent_issue_tracker_id: 本追蹤 - label_agile_sub_issues: 子問題 - label_agile_color_green: 綠色 - label_agile_color_blue: 藍色 - label_agile_color_turquoise: 藍綠色 - label_agile_color_lightgreen: 淺綠色 - label_agile_color_yellow: 黃色 - label_agile_color_orange: 橙色 - label_agile_color_red: 紅色 - label_agile_color_purple: 紫色 - label_agile_color_gray: 灰色 - label_agile_has_sub_issues: 子問題 \ No newline at end of file diff --git a/plugins/redmine_agile/config/locales/zh.yml b/plugins/redmine_agile/config/locales/zh.yml deleted file mode 100644 index ff313fc..0000000 --- a/plugins/redmine_agile/config/locales/zh.yml +++ /dev/null @@ -1,133 +0,0 @@ -# encoding: utf-8 -# Simplified Chinese strings go here for Rails i18n -# Author: zhoutt -# Based on file: en.yml - -zh: - label_agile: 敏捷 - label_agile_board: 敏捷看板 - label_agile_board_plural: 敏捷看板 - label_agile_board_thumbnails: 缩略图 - label_agile_board_more_issues: 更多问题 - error_agile_status_transition: 不能更改问题状态 - label_agile_board_new: 新敏捷看板 - label_agile_board_edit: 编辑敏捷看板 - label_agile_my_boards: 我的敏捷看板 - label_agile_issue_id: 问题ID - - permission_manage_public_agile_queries: 管理公共敏捷看板 - permission_add_agile_queries: 新建敏捷看板 - permission_view_agile_queries: 浏览敏捷看板 - - #1.1.0 - label_agile_board_default_fields: 默认卡片区域 - label_agile_charts_issues_burndown: 问题燃烧图 - label_agile_charts_work_burndown_hours: 小时燃尽图 - label_agile_charts_work_burndown_sp: 故事点燃烧图 - label_agile_charts_number_of_hours: 时长数 - label_agile_charts_number_of_issues: 问题数 - label_agile_charts_cumulative_flow: 累积流量 - label_agile_charts_trackers_cumulative_flow: 追踪累流量 - label_agile_charts_issues_velocity: 速度 - label_agile_charts_lead_time: 交付周期 - label_agile_charts_average_lead_time: 平均交付周期 - label_agile_chart_plural: 敏捷图标 - permission_view_agile_charts: 浏览敏捷图标 - label_agile_ideal_work_remaining: 理想 - label_agile_actual_work_remaining: 实际 - label_agile_chart: 图表 - label_agile_date_from: 自 - label_agile_date_to: 至 - label_agile_chart_dates: 图标间隔 - label_agile_weighed_ideal_work_remaining: 理想权衡 - label_agile_status_colors: 状态颜色 - label_agile_charts_burnup: 问题燃烧图 - label_agile_charts_number_of_days: 天数 - label_agile_too_many_items: "该图表因超出可显示的最大项目数而不能被创建(%{max})" - label_agile_time_reports_items_limit: 时间条目基于图表的问题限制 - label_agile_total_work_remaining: 总计 - label_agile_default_chart: 版本默认图表 - - #1.1.1 - label_agile_charts_average_velocity: 平均速率 - label_agile_charts_avarate_number_of_issues: 平均问题数 - label_agile_charts_avarate_number_of_hours: 平均时长 - - #1.2.0 - label_agile_color: 颜色 - permission_manage_agile_verions: 管理版本规划 - label_agile_version_planning: 版本规划 - error_agile_version_transition: 不能更改问题版本 - label_agile_tracker_colors: 跟踪器颜色 - label_agile_issue_priority_colors: 问题优先级颜色 - label_agile_color_based_on: 颜色 - label_agile_color_no_colors: 无颜色 - label_agile_manage_colors: 管理颜色 - label_agile_fullscreen: 全屏 - label_agile_no_version_issues: 无版本项目 - label_agile_charts_work_burnup_hours: 小时燃耗 - label_agile_charts_work_burnup_sp: 故事点燃耗 - label_agile_completed: 完成 - label_agile_exclude_weekends: 从理想工作中排除周末时间 - label_agile_board_truncated: "看板被缩短是由于超出最大显示项目数 (%{max})" - label_agile_board_items_limit: 敏捷看板项目限制 - label_agile_swimlanes: 泳道 - label_agile_minimize_closed: 最小化关闭的问题 - label_agile_fields: 卡片区域 - label_agile_default_board: 默认看板 - - #1.3.6 - text_agile_move_not_possible: 该步骤不可行 - - #1.3.8 - label_agile_parent_issue_tracker_id: 本追踪 - label_agile_sub_issues: 子问题 - label_agile_color_green: 绿色 - label_agile_color_blue: 蓝色 - label_agile_color_turquoise: 蓝绿色 - label_agile_color_lightgreen: 浅绿色 - label_agile_color_yellow: 黄色 - label_agile_color_orange: 橙色 - label_agile_color_red: 红色 - label_agile_color_purple: 紫色 - label_agile_color_gray: 灰色 - label_agile_has_sub_issues: 子问题 - label_agile_light_free_version: 敏捷免费版 - label_agile_link_to_pro: 升级到PRO版 - label_agile_link_to_pro_demo: PRO版在线演示 - label_agile_link_to_more_plugins: 查找更多RedmineUP插件 - label_agile_button_agree: 同意 - label_agile_license: RedmineUP 协议 - label_agile_saving_boards: 保存白板 - label_agile_horizontal_swim_lines: 水平泳道线 - label_agile_board_sub_columns: 白板子列 - label_agile_additional_agile_charts: 额外的敏捷图表 - label_agile_coloured_issue_cards: 彩色的问题卡 - label_agile_4_more_features: 敏捷4更多功能... - label_agile_upgrade_to_pro: 更新到PRO版使用这个功能 - - label_agile_day_in_state: 状态 - - #1.3.10 - label_agile_hide_closed_issues_data: 隐藏关闭的问题数据 - project_module_agile: 敏捷 - - #1.3.13 - label_agile_last_comment: 最后的评论 - - #1.4.0 - label_agile_esitmate_units: 单元评估 - label_agile_trackers_for_sp: 追踪故事点 - label_agile_story_points: 故事要点 - field_story_points: 故事要点 - label_agile_charts_number_of_story_points: 故事要点数量 - label_agile_board_columns: 白板列 - lable_agile_wip_limit_exceeded: 进展中的工作超出限制 - label_agile_wip_limit: 进展中的工作限制 - label_agile_add_new_issue: '+ 添加新问题' - label_agile_allow_create_cards: 卡片创建 - label_agile_auto_assign_on_move: 移动自动分配 - text_agile_create_issue_error: 在创建任务时发生了一个错误 - label_agile_inline_comment: 内联注释 - label_agile_hours: 小时 - field_color: 颜色 diff --git a/plugins/redmine_agile/config/routes.rb b/plugins/redmine_agile/config/routes.rb deleted file mode 100644 index 21dc7b9..0000000 --- a/plugins/redmine_agile/config/routes.rb +++ /dev/null @@ -1,47 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -# Plugin's routes -# See: http://guides.rubyonrails.org/routing.html - -resources :projects do - resources :agile_queries, only: [:new, :create] -end - -resources :issues do - get "done_ratio", :to => "agile_journal_details#done_ratio" - get "status", :to => "agile_journal_details#status" - get "assignee", :to => "agile_journal_details#assignee" - member do - get "agile_data", :to => "agile_boards#agile_data" - end -end - -resources :agile_queries - -get '/projects/:project_id/agile/charts', :to => "agile_charts#show", :as => "project_agile_charts" -get '/agile/charts/', :to => "agile_charts#show", :as => "agile_charts" -get '/agile/charts/render_chart', :to => "agile_charts#render_chart" -get '/agile/charts/select_version_chart', :to => "agile_charts#select_version_chart" -get '/projects/:project_id/agile/board', :to => 'agile_boards#index' -get '/agile/board', :to => 'agile_boards#index' -put '/agile/board', :to => 'agile_boards#update', :as => 'update_agile_board' -get '/agile/issue_tooltip', :to => 'agile_boards#issue_tooltip', :as => 'issue_tooltip' -get '/agile/inline_comment', :to => 'agile_boards#inline_comment', :as => 'agile_inline_comment' -post 'projects/:project_id/agile/create_issue', :to => 'agile_boards#create_issue', :as => 'agile_create_issue' diff --git a/plugins/redmine_agile/db/migrate/001_create_issue_status_orders.rb b/plugins/redmine_agile/db/migrate/001_create_issue_status_orders.rb deleted file mode 100644 index c345ce3..0000000 --- a/plugins/redmine_agile/db/migrate/001_create_issue_status_orders.rb +++ /dev/null @@ -1,30 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -class CreateIssueStatusOrders < Rails.version < '5.1' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2] - def change - create_table :issue_status_orders do |t| - t.integer :issue_id - t.integer :position - end - - add_index :issue_status_orders, :issue_id - add_index :issue_status_orders, :position - end -end diff --git a/plugins/redmine_agile/db/migrate/002_create_agile_colors.rb b/plugins/redmine_agile/db/migrate/002_create_agile_colors.rb deleted file mode 100644 index 1e705e8..0000000 --- a/plugins/redmine_agile/db/migrate/002_create_agile_colors.rb +++ /dev/null @@ -1,30 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -class CreateAgileColors < Rails.version < '5.1' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2] - def change - create_table :agile_colors do |t| - t.references :container, :polymorphic => true - t.string :color - end - - add_index :agile_colors, :container_id - add_index :agile_colors, :container_type - end -end diff --git a/plugins/redmine_agile/db/migrate/003_rename_issue_status_orders.rb b/plugins/redmine_agile/db/migrate/003_rename_issue_status_orders.rb deleted file mode 100644 index c21e129..0000000 --- a/plugins/redmine_agile/db/migrate/003_rename_issue_status_orders.rb +++ /dev/null @@ -1,40 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -class RenameIssueStatusOrders < Rails.version < '5.1' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2] - def up - remove_index :issue_status_orders, :issue_id - remove_index :issue_status_orders, :position - - rename_table :issue_status_orders, :agile_ranks - - add_index :agile_ranks, :issue_id - add_index :agile_ranks, :position - end - - def down - remove_index :agile_ranks, :issue_id - remove_index :agile_ranks, :position - - rename_table :agile_ranks, :issue_status_orders - - add_index :issue_status_orders, :issue_id - add_index :issue_status_orders, :position - end -end diff --git a/plugins/redmine_agile/db/migrate/004_rename_agile_ranks.rb b/plugins/redmine_agile/db/migrate/004_rename_agile_ranks.rb deleted file mode 100644 index de7b86f..0000000 --- a/plugins/redmine_agile/db/migrate/004_rename_agile_ranks.rb +++ /dev/null @@ -1,40 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -class RenameAgileRanks < Rails.version < '5.1' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2] - def up - remove_index :agile_ranks, :issue_id if index_exists? :agile_ranks, :issue_id - remove_index :agile_ranks, :position if index_exists? :agile_ranks, :position - - rename_table :agile_ranks, :agile_data - - add_index :agile_data, :issue_id - add_index :agile_data, :position - end - - def down - remove_index :agile_data, :issue_id - remove_index :agile_data, :position - - rename_table :agile_data, :agile_ranks - - add_index :agile_ranks, :issue_id - add_index :agile_ranks, :position - end -end diff --git a/plugins/redmine_agile/db/migrate/005_add_story_points_to_agile_ranks.rb b/plugins/redmine_agile/db/migrate/005_add_story_points_to_agile_ranks.rb deleted file mode 100644 index 16ef93d..0000000 --- a/plugins/redmine_agile/db/migrate/005_add_story_points_to_agile_ranks.rb +++ /dev/null @@ -1,24 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -class AddStoryPointsToAgileRanks < Rails.version < '5.1' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2] - def change - add_column :agile_data, :story_points, :integer - end -end diff --git a/plugins/redmine_agile/db/migrate/006_create_agile_sprints.rb b/plugins/redmine_agile/db/migrate/006_create_agile_sprints.rb deleted file mode 100644 index 59cac7f..0000000 --- a/plugins/redmine_agile/db/migrate/006_create_agile_sprints.rb +++ /dev/null @@ -1,33 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -class CreateAgileSprints < Rails.version < '5.1' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2] - def change - create_table :agile_sprints do |t| - t.references :project - t.string :name, null: false - t.text :description - t.integer :status, null: false, default: 0 - t.date :start_date, null: false - t.date :end_date, null: false - - t.timestamps null: false - end - end -end diff --git a/plugins/redmine_agile/db/migrate/007_add_sprint_id_to_agile_data.rb b/plugins/redmine_agile/db/migrate/007_add_sprint_id_to_agile_data.rb deleted file mode 100644 index 5fc4159..0000000 --- a/plugins/redmine_agile/db/migrate/007_add_sprint_id_to_agile_data.rb +++ /dev/null @@ -1,24 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -class AddSprintIdToAgileData < Rails.version < '5.1' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2] - def change - add_column :agile_data, :agile_sprint_id, :integer, index: true - end -end diff --git a/plugins/redmine_agile/db/migrate/008_add_sharing_to_agile_sprint.rb b/plugins/redmine_agile/db/migrate/008_add_sharing_to_agile_sprint.rb deleted file mode 100644 index 0df6426..0000000 --- a/plugins/redmine_agile/db/migrate/008_add_sharing_to_agile_sprint.rb +++ /dev/null @@ -1,24 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -class AddSharingToAgileSprint < Rails.version < '5.1' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2] - def change - add_column :agile_sprints, :sharing, :integer, default: 0, null: false, index: true - end -end diff --git a/plugins/redmine_agile/doc/CHANGELOG b/plugins/redmine_agile/doc/CHANGELOG deleted file mode 100644 index 35be743..0000000 --- a/plugins/redmine_agile/doc/CHANGELOG +++ /dev/null @@ -1,346 +0,0 @@ -== Redmine Agile plugin changelog - -Redmine Agile plugin - Agile board plugin for redmine -Copyright (C) 2011-2021 RedmineUP -http://www.redmineup.com/ - -== 2021-05-04 v1.6.1 - -* Redmine 4.2 support -* Added assignee group board filter -* Added past Sprints -* Added reset sprint on project change -* Fixed missied table SQL error -* Fixed empty data error -* Fixed FCSV warning -* Dropped Redmine <3.0 support - -== 2021-02-15 v1.6.0 - -* Added Agile Sprint sharing -* Fixed sprint/story points copy -* Fixed sprint for on-board created sprints -* Fixed initial install error -* Fixed Sprint query save bug -* Fixed chart dates interval -* Fixed for all-projects query bug -* Fixed chart empty dates bug -* Fixed chart version bug -* Fixed Backlog load-more bug -* Fixed Agile board remarks -* Fixed selected sprint bug -* Fixed Agile board issues display bug -* Fixed missed filters for old Redmine versions -* Fixed empty watcher filter bug -* Fixed workflow issue creation bug -* Updated BR locale (Adriano J. Baptistella) -* Updated pt-BR locale (Adriano J. Baptistella) - -== 2020-07-24 v1.5.4 - -* Added None for Sprint in issue context menu -* Updated zh-tw locale (Hsiao Chung Chiang) -* Updated es locale (Manuel Alba Ortega) -* Fixed agile sprint remaining bug -* Fixed issue copy error -* Fixed submit error for issue search field -* Fixed future data in the charts -* Fixed error with all closed issues -* Fixed full screen board update bug -* Fixed first day for Agile chart -* Fixed chart query visibility bug -* Fixed no version column bug -* Fixed sub project sprint assignment -* Fixed backlog column saving -* Fixed "For all projects" chart bug - -== 2020-03-18 v1.5.3 - -* Added grouping for agine status changes view -* Added issue list sprint filter -* German translation updated (Peter Schossig) -* Added Italian translation (Marco Congia) -* Fixed bug with context menu story points -* Added validation for sprint open issues -* Backlog tab default menu - -== 2020-02-05 v1.5.2 - -* Agile Backlog as a different module -* Fixed between dates chart bug -* Fixed context menu edit bug -* Fixed sprint cards load bug - -== 2019-12-10 v1.5.1 - -* Added Sprint view permissions -* Redmine 4.1 styles support -* New Story points board setting -* Hide Sprint field without available sprints -* Modal edit styles cleanup -* Fixed sprint charts bug -* Fixed MySQL order by bug - -== 2019-10-22 v1.5.0 - -* Agile sprints -* New Backlog tab -* Board types: Scrum and Kanban -* New lead time chart -* Totals for board and swimlanes -* Added board units -* Added board default chart -* Fixed chart caclulation bug -* Fixed custom field js error - -== 2019-06-14 v1.4.12 - -* Fixed light version Redmine 4.0.3+ bug -* Fixed swilanes sorting -* Fixed version planing Load more bug - -== 2019-05-15 v1.4.11 - -* Fixed compatibility issues - -== 2019-04-25 v1.4.10 - -* Fixed light version compatibility bug - -== 2019-04-15 v1.4.9 - -* Redmine 4.0.3 support -* Agile chart units setting -* Charts end date fixes -* Fixed expand all board bug -* Fixed interval size for old user sessions -* Fixed charts with current interval - -== 2019-02-08 v1.4.8 - -* Added new Version planner -* Added saving for Agile charts -* Fixed "Related to" filter -* Fixed "Parent task" filter -* Fixed search sensitive bug -* Fixed empty current version bug - -== 2018-09-25 v1.4.7 - -* Added missing filters: Issue, Description, Private, Watcher -* Added preloading of colors for issues -* Fixed tags render on a card -* Fixed public board permission bug -* Fixed agile board adaptability -* Fixed fullscreen link displaying -* Fixed filtering by Company custom field - -== 2018-03-20 v1.4.6 - -* Redmine 4 support -* Quick seach on the board -* Issue tags field on cards -* Story Points available values setting -* Fixed story point showing bug -* Fixed makeup on issue edit form -* Fixed light version dropable bug -* Fixed custom fields bug with charts - -== 2017-09-06 v1.4.5 - -* Agile charts moved to Chartjs -* Fixed current version filter value -* Fixed issue sorting bug with active story points - -== 2017-07-06 v1.4.4 - -* Redmine 3.4 support -* Color attribute for users -* Agile board <Current version> query filter -* Added initional state for status and assignee history -* Chinese translation update -* Fixed checklist items order - -== 2017-03-20 v1.4.3 - -* Added assignee, status and % done history urls -* Created and Updated dates card fields -* Fixed version from future bug -* Fixed Agile board z-index bug -* Fixed blocked query filter error -* Fixed bug with zero divide for spent time color -* Added trendline first point - -== 2016-11-16 v1.4.2 - -* Trendlines for lead time and velocity charts -* Current active version filter -* Chinese translation (Zuofeng Zhang) -* Issue order for swimlanes -* Fixed bug with session storage overload -* Story points chart data calculation bug fixed -* Firefox and IE bug with on board comments fixed - -== 2016-06-20 v1.4.1 - -* Agile board header height fixed for IE -* Auto assign user on move card -* Burndown/burnup charts fixes for story points and hours -* Context menu for fullscreen board -* Separate charts for SP and hours -* Lock board on autorefresh - -== 2016-02-09 v1.4.0 - -* Story points estimation -* Card assignment error messages -* Cleanup WIP limits option styles -* Highligh inline created cards -* Inline comments board lock -* Fixed version planning access right -* Fixed unicode letters in locale files -* Fixed performance issues with board rendering - -== 2016-01-20 v1.3.13 - -* Inline issue creation -* Work-in-progress limits -* Colored by project -* Adding notes inline -* Checklist on card view -* Last comment card field -* French locale by Olivier Houdas -* Fixed bug with sorting cards in redmine < 3 - -== 2015-11-03 v1.3.12 - -* Estimated time sum in column header -* Issue relations filter -* Fixed bug with Mysql migration -* Fixed bug with global board cards view -* Fixed issue context menu bug - -== 2015-08-18 v1.3.11 - -* Setting for closed cards view -* Colorized by assignee - -== 2015-08-06 v1.3.10 - -* Fixed bug with sticky headers after fullscreen auto update -* Colored by spent time -* Fixed bug with version planner unassigned issues -* Added translation for module -* Days in state card field - -== 2015-05-20 v1.3.9 - -* Chinese translation (zhoutt) -* Fixed print media styles for board -* Parent task filter allowed commas -* Version planner filters - -== 2015-03-06 v1.3.8 - -* Redmine 3.0 support fixes -* Autoupdate board on fullscreen view -* N+1 agile color fixes -* New filter Parent issue tracker -* Total hours on version planning columns -* Sub issues card field -* Issue history for color changes - -== 2015-02-10 v1.3.6 - -* Sticky headers in fullscreen mode (Dariusz Kowalski) -* Ajax error messages -* Fixed bug in version planner with wrong column ID -* Fixed 404 when enter hit in version planning form -* Portuguese (Brazil) translation (Marcelo de A. Fernandes) - -== 2014-10-28 v1.3.5 - -* Default boards for projects roles and users -* Sub-projects issues in version planner - -== 2014-10-16 v1.3.4 - -* Added filters for Assignee's role and Assignee's group -* Shared versions support -* Assignee history log - -== 2014-09-28 v1.3.3 - -* German translation (Jan Schulz-Hofen) -* Assignable users on agile board sidebar -* Fixed bug with saving boards for non admin roles for Redmine 2.3 -* Fixed bug with authors swimlanes -* Fixed bug in swimlanes with empty versions list - -== 2014-06-27 v1.3.2 - -* Default desc sorting for priority swimlanes -* Rank sorting for parent task swimlanes -* Koren translation (김기원) -* Fixed XSS Vulnerability (Felix Schäfer) -* Fixed Issue status count starting with empty not updated (Felix Schäfer) -* Fixed bug with "Is not" status filter - -== 2014-05-05 v1.3.1 - -* Status Sub-Columns with colon delimiter -* Fixes for SQL Server - -== 2014-04-24 v1.3.0 - -* Swim lanes -* Weekends for burnup and burndown charts -* Burnup charts cleanup -* New board card fields setting - -== 2014-04-18 v1.2.0 - -* Colors -* Version planning -* Touch devices support -* Fullscreen mode -* Spanish translation by (Leandro Russo) -* Created/Closed chart renamed to Issues burnup -* Work burnup chart -* First period effort for budrndown charst -* Fixes in cumulative flow chart -* Fixes with load_more duplications - -== 2014-04-09 v1.1.2 - -* Compatibility fixes - -== 2014-04-09 v1.1.1 - -* New scale divisions for charts -* Fixes for work burndown with subtasks -* Fixed Gantt and Caledar issues - -== 2014-04-07 v1.1.0 - -* Save and manage agile boards -* Select issue card fields -* Permissions for agile boards -* Default issue card columns setting -* Issue card context menu -* Project column -* Issue done ratio and status flows -* Charts (Work burndown chart, Issues burndown chart, Cumulative flow chart, Trackers cumulative flow chart, Velocity chart, Lead time chart, Average lead time chart, Created/Closed chart) -* Fixed bug with load more filters - -== 2014-03-18 v1.0.1 - -* Sorting issues inside status -* Issues lazy loading - -== 2014-02-28 v1.0.0 - -* Initial release -* Draggable issues -* Draggable assignees -* Issue description and attached image preview diff --git a/plugins/redmine_agile/doc/COPYING b/plugins/redmine_agile/doc/COPYING deleted file mode 100644 index 63e41a4..0000000 --- a/plugins/redmine_agile/doc/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - 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. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - 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. - - <signature of Ty Coon>, 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/redmine_agile/doc/LICENSE b/plugins/redmine_agile/doc/LICENSE deleted file mode 100644 index e2e50b5..0000000 --- a/plugins/redmine_agile/doc/LICENSE +++ /dev/null @@ -1,26 +0,0 @@ -LICENSING - -RedmineUP Licencing - -This End User License Agreement is a binding legal agreement between you and RedmineUP. Purchase, installation or use of RedmineUP Extensions provided on redmineup.com signifies that you have read, understood, and agreed to be bound by the terms outlined below. - -RedmineUP GPL Licencing - -All Redmine Extensions produced by RedmineUP are released under the GNU General Public License, version 2 (http://www.gnu.org/licenses/gpl-2.0.html). Specifically, the Ruby code portions are distributed under the GPL license. If not otherwise stated, all images, manuals, cascading style sheets, and included JavaScript are NOT GPL, and are released under the RedmineUP Proprietary Use License v1.0 (See below) unless specifically authorized by RedmineUP. Elements of the extensions released under this proprietary license may not be redistributed or repackaged for use other than those allowed by the Terms of Service. - -RedmineUP Proprietary Use License (v1.0) - -The RedmineUP Proprietary Use License covers any images, cascading stylesheets, manuals and JavaScript files in any extensions produced and/or distributed by redmineup.com. These files are copyrighted by redmineup.com (RedmineUP) and cannot be redistributed in any form without prior consent from redmineup.com (RedmineUP) - -Usage Terms - -You are allowed to use the Extensions on one or many "production" domains, depending on the type of your license -You are allowed to make any changes to the code, however modified code will not be supported by us. - -Modification Of Extensions Produced By RedmineUP. - -You are authorized to make any modification(s) to RedmineUP extension Ruby code. However, if you change any Ruby code and it breaks functionality, support may not be available to you. - -In accordance with the RedmineUP Proprietary Use License v1.0, you may not release any proprietary files (modified or otherwise) under the GPL license. The terms of this license and the GPL v2 prohibit the removal of the copyright information from any file. - -Please contact us if you have any requirements that are not covered by these terms. \ No newline at end of file diff --git a/plugins/redmine_agile/init.rb b/plugins/redmine_agile/init.rb deleted file mode 100644 index 8cf0285..0000000 --- a/plugins/redmine_agile/init.rb +++ /dev/null @@ -1,71 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -requires_redmine_crm version_or_higher: '0.0.43' rescue raise "\n\033[31mRedmine requires newer redmine_crm gem version.\nPlease update with 'bundle update redmine_crm'.\033[0m" - -require 'redmine' - -AGILE_VERSION_NUMBER = '1.6.1' -AGILE_VERSION_TYPE = "Light version" - -if ActiveRecord::VERSION::MAJOR >= 4 && !defined?(FCSV) - require 'csv' - FCSV = CSV -end - -Redmine::Plugin.register :redmine_agile do - name "Redmine Agile plugin (#{AGILE_VERSION_TYPE})" - author 'RedmineUP' - description 'Scrum and Agile project management plugin for redmine' - version AGILE_VERSION_NUMBER - url 'http://redmineup.com/pages/plugins/agile' - author_url 'mailto:support@redmineup.com' - - requires_redmine version_or_higher: '3.0' - - settings default: { 'default_columns' => %w(tracker assigned_to) }, - partial: 'settings/agile/general' - - menu :application_menu, :agile, - { controller: 'agile_boards', action: 'index' }, - caption: :label_agile, - if: Proc.new { User.current.allowed_to?(:view_agile_queries, nil, global: true) } - menu :project_menu, :agile, { controller: 'agile_boards', action: 'index' }, caption: :label_agile, - after: :gantt, - param: :project_id - - menu :admin_menu, :agile, { controller: 'settings', action: 'plugin', id: 'redmine_agile' }, caption: :label_agile, html: { class: 'icon' } - - project_module :agile do - permission :manage_public_agile_queries, { agile_queries: [:new, :create, :edit, :update, :destroy] }, require: :member - permission :add_agile_queries, { agile_queries: [:new, :create, :edit, :update, :destroy] }, require: :loggedin - permission :view_agile_queries, { agile_boards: [:index, - :update, - :create_issue, - :issue_tooltip, - :inline_comment, - :agile_data, - :backlog_load_more, - :backlog_autocomplete], - agile_queries: :index }, read: true - permission :view_agile_charts, { agile_charts: [:show, :render_chart, :select_version_chart] }, read: true - end -end - -require 'redmine_agile' diff --git a/plugins/redmine_agile/lib/redmine_agile.rb b/plugins/redmine_agile/lib/redmine_agile.rb deleted file mode 100644 index 9e292d4..0000000 --- a/plugins/redmine_agile/lib/redmine_agile.rb +++ /dev/null @@ -1,133 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - - - -require 'redmine_agile/hooks/views_layouts_hook' -require 'redmine_agile/hooks/views_issues_hook' -require 'redmine_agile/hooks/views_versions_hook' -require 'redmine_agile/hooks/controller_issue_hook' -require 'redmine_agile/patches/issue_patch' - -require 'redmine_agile/helpers/agile_helper' - -require 'redmine_agile/charts/agile_chart' -require 'redmine_agile/charts/burndown_chart' -require 'redmine_agile/charts/work_burndown_chart' -require 'redmine_agile/charts/charts' -require 'redmine_agile/patches/issue_drop_patch' - -module RedmineAgile - - ISSUES_PER_COLUMN = 10 - TIME_REPORTS_ITEMS = 1000 - BOARD_ITEMS = 500 - - ESTIMATE_HOURS = 'hours'.freeze - ESTIMATE_STORY_POINTS = 'story_points'.freeze - ESTIMATE_UNITS = [ESTIMATE_HOURS, ESTIMATE_STORY_POINTS].freeze - - class << self - def time_reports_items_limit - by_settigns = Setting.plugin_redmine_agile['time_reports_items_limit'].to_i - by_settigns > 0 ? by_settigns : TIME_REPORTS_ITEMS - end - - def board_items_limit - by_settigns = Setting.plugin_redmine_agile['board_items_limit'].to_i - by_settigns > 0 ? by_settigns : BOARD_ITEMS - end - - def issues_per_column - by_settigns = Setting.plugin_redmine_agile['issues_per_column'].to_i - by_settigns > 0 ? by_settigns : ISSUES_PER_COLUMN - end - - def default_columns - Setting.plugin_redmine_agile['default_columns'].to_a - end - - def default_chart - Setting.plugin_redmine_agile['default_chart'] || Charts::BURNDOWN_CHART - end - - def estimate_units - Setting.plugin_redmine_agile['estimate_units'] || 'hours' - end - - def use_story_points? - if Setting.plugin_redmine_agile.key?('story_points_on') - Setting.plugin_redmine_agile['story_points_on'] == '1' - else - estimate_units == ESTIMATE_STORY_POINTS - end - end - - def trackers_for_sp - Setting.plugin_redmine_agile['trackers_for_sp'] - end - - def use_story_points_for?(tracker) - return true if trackers_for_sp.blank? && use_story_points? - tracker = tracker.is_a?(Tracker) ? tracker.id.to_s : tracker - trackers_for_sp == tracker && use_story_points? - end - - def use_colors? - false - end - - def color_base - "none" - end - - def minimize_closed? - Setting.plugin_redmine_agile['minimize_closed'].to_i > 0 - end - - def exclude_weekends? - Setting.plugin_redmine_agile['exclude_weekends'].to_i > 0 - end - - def auto_assign_on_move? - Setting.plugin_redmine_agile['auto_assign_on_move'].to_i > 0 - end - - def status_colors? - false - end - - def hide_closed_issues_data? - Setting.plugin_redmine_agile['hide_closed_issues_data'].to_i > 0 - end - - def use_checklist? - @@chcklist_plugin_installed ||= (Redmine::Plugin.installed?(:redmine_checklists)) - end - - def allow_create_card? - false - end - - def allow_inline_comments? - Setting.plugin_redmine_agile['allow_inline_comments'].to_i > 0 - end - end - -end diff --git a/plugins/redmine_agile/lib/redmine_agile/charts/agile_chart.rb b/plugins/redmine_agile/lib/redmine_agile/charts/agile_chart.rb deleted file mode 100644 index f152dc3..0000000 --- a/plugins/redmine_agile/lib/redmine_agile/charts/agile_chart.rb +++ /dev/null @@ -1,278 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -module RedmineAgile - class AgileChart - include Redmine::I18n - include Redmine::Utils::DateCalculation - - DAY_INTERVAL = 'day'.freeze - WEEK_INTERVAL = 'week'.freeze - MONTH_INTERVAL = 'month'.freeze - QUARTER_INTERVAL = 'quarter'.freeze - YEAR_INTERVAL = 'year'.freeze - - TIME_INTERVALS = [DAY_INTERVAL, WEEK_INTERVAL, MONTH_INTERVAL, QUARTER_INTERVAL, YEAR_INTERVAL].freeze - - attr_reader :line_colors - - def initialize(data_scope, options = {}) - @options = options - @data_scope = data_scope - @data_from ||= options[:data_from] - @data_to ||= options[:data_to] - @interval_size = options[:interval_size] || DAY_INTERVAL - initialize_chart_periods - @step_x_labels = @period_count > 18 ? @period_count / 12 + 1 : 1 - @fields = chart_fields_by_period - @weekend_periods = weekend_periods - @estimated_unit = options[:estimated_unit] || ESTIMATE_HOURS - @line_colors = {} - end - - def data - { title: '', y_title: '', labels: [], datasets: [] } - end - - def self.data(data_scope, options = {}) - new(data_scope, options).data - end - - protected - - def current_date_period - return @current_date_period if @current_date_period - - date_period = (@date_to <= Date.today || @options[:date_to].present? ? @period_count : (@period_count - (@date_to - Date.today).to_i / @scale_division) + 1).round - @current_date_period ||= date_period > 0 ? date_period : 0 - end - - def due_date_period - @date_from = @date_from.to_date - @date_to = @date_to.to_date - due_date = (@due_date && @due_date > @date_from) ? @due_date : @date_from - @due_date_period ||= (@due_date ? @period_count - (@date_to - due_date.to_date).to_i : @period_count - 1) + 1 - @due_date_period = @due_date_period > 0 ? @due_date_period : 1 - end - - def date_short_period? - (@date_to.to_date - @date_from.to_date).to_i <= 31 - end - - def date_effort(issues, effort_date) - cumulative_left = 0 - total_left = 0 - total_done = 0 - issues.each do |issue| - done_ratio_details = issue.journals.map(&:details).flatten.select { |detail| 'done_ratio' == detail.prop_key } - details_today_or_earlier = done_ratio_details.select { |a| a.journal.created_on.localtime.to_date <= effort_date } - - last_done_ratio_change = details_today_or_earlier.sort_by { |a| a.journal.created_on }.last - ratio = if issue.closed? && issue.closed_on.localtime.to_date <= effort_date - 100 - elsif last_done_ratio_change - last_done_ratio_change.value - elsif (done_ratio_details.size > 0) || (issue.closed? && issue.closed_on > effort_date) - 0 - else - issue.done_ratio.to_i - end - - if @estimated_unit == 'hours' - cumulative_left += (issue.estimated_hours.to_f * ratio.to_f / 100.0) - total_left += (issue.estimated_hours.to_f * (100 - ratio.to_f) / 100.0) - total_done += (issue.estimated_hours.to_f * ratio.to_f / 100.0) - else - cumulative_left += (issue.story_points.to_f * ratio.to_f / 100.0) - total_left += (issue.story_points.to_f * (100 - ratio.to_f) / 100.0) - total_done += (issue.story_points.to_f * ratio.to_f / 100.0) - end - end - [total_left, cumulative_left, total_done] - end - - def use_subissue_done_ratio - !Setting.respond_to?(:parent_issue_done_ratio) || Setting.parent_issue_done_ratio == 'derived' || Setting.parent_issue_done_ratio.nil? - end - - private - - def scope_by_created_date - @data_scope. - where("#{Issue.table_name}.created_on >= ?", @date_from). - where("#{Issue.table_name}.created_on < ?", @date_to.to_date + 1). - where("#{Issue.table_name}.created_on IS NOT NULL"). - group("#{Issue.table_name}.created_on"). - count - end - - def scope_by_closed_date - @data_scope. - open(false). - where("#{Issue.table_name}.closed_on >= ?", @date_from). - where("#{Issue.table_name}.closed_on < ?", @date_to.to_date + 1). - where("#{Issue.table_name}.closed_on IS NOT NULL"). - group("#{Issue.table_name}.closed_on"). - count - end - - # options - # color - Line color in RGB format (e.g '255,255,255') (random) - # fill - Fille background under line (false) - # dashed - Draw dached line (solid) - # nopoints - Doesn't show points on line (false) - - def dataset(dataset_data, label, options = {}) - color = options[:color] || [rand(255), rand(255), rand(255)].join(',') - dataset_color = "rgba(#{color}, 1)" - { - type: (options[:type] || 'line'), - data: dataset_data, - label: label, - fill: (options[:fill] || false), - backgroundColor: "rgba(#{color}, 0.2)", - borderColor: dataset_color, - borderDash: (options[:dashed] ? [5, 5] : []), - borderWidth: (options[:dashed] ? 1.5 : 2), - pointRadius: (options[:nopoints] ? 0 : 3), - pointBackgroundColor: dataset_color, - tooltips: { enable: false } - } - end - - def initialize_chart_periods - raise Exception "Dates can't be blank" if [@date_to, @date_from].any?(&:blank?) - period_count - scale_division - end - - def issues_count_by_period(issues_scope) - data = [0] * @period_count - issues_scope.each do |c| - next if c.first.localtime.to_date > @date_to.to_date - period_num = ((@date_to.to_date - c.first.localtime.to_date).to_i / @scale_division).to_i - data[period_num] += c.last unless data[period_num].blank? - end - data.reverse - end - - def issues_avg_count_by_period(issues_scope) - count_by_date = {} - issues_scope.each {|x, y| count_by_date[x.localtime.to_date] = count_by_date[x.localtime.to_date].to_i + y } - data = [0] * @period_count - count_by_date.each do |x, y| - next if x.to_date > @date_to.to_date - period_num = ((@date_to.to_date - x.to_date).to_i / @scale_division).to_i - if data[period_num] - data[period_num] = y unless data[period_num].to_i > 0 - data[period_num] = (data[period_num] + y) / 2.0 - end - end - data.reverse - end - - def chart_fields_by_period - chart_dates_by_period.map { |d| chart_field_by_date(d) } - end - - def chart_field_by_date(date) - case @interval_size - when YEAR_INTERVAL - date.year - when QUARTER_INTERVAL, MONTH_INTERVAL - month_abbr_name(date.month) + ' ' + date.year.to_s - else - date.day.to_s + ' ' + month_name(date.month) - end - end - - def weekend_periods - periods = [] - @period_count.times do |m| - period_date = ((@date_to.to_date - 1 - m * @scale_division) + 1) - periods << @period_count - m - 1 if non_working_week_days.include?(period_date.cwday) - end - periods.compact - end - - def chart_data_pairs(chart_data) - chart_data.inject([]) { |accum, value| accum << value } - data_pairs = [] - for i in 0..chart_data.count - 1 - data_pairs << [chart_dates_by_period[i], chart_data[i]] - end - data_pairs - end - - def chart_dates_by_period - return @chart_dates_by_period if @chart_dates_by_period - - period = period_count > 1 ? period_count - 1 : period_count - @chart_dates_by_period ||= period.times.inject([]) do |accum, m| - period_date = ((@date_to.to_date - 1 - m * @scale_division) + 1) - accum << if @interval_size == WEEK_INTERVAL - period_date.at_beginning_of_week.to_date - else - period_date.to_date - end - end.reverse - end - - def month_abbr_name(month) - l('date.abbr_month_names')[month] - end - - def trendline(y_values) - size = y_values.size - x_values = (1..size).to_a - sum_x = 0 - sum_y = 0 - sum_xx = 0 - sum_xy = 0 - y_values.zip(x_values).each do |y, x| - sum_xy += x * y - sum_xx += x * x - sum_x += x - sum_y += y - end - - slope = 1.0 * ((size * sum_xy) - (sum_x * sum_y)) / ((size * sum_xx) - (sum_x * sum_x)) - intercept = 1.0 * (sum_y - (slope * sum_x)) / size - - line_values = x_values.map { |x| predict(x, slope, intercept) } - line_values.select { |val| val >= 0 } - end - - def predict(x, slope, intercept) - slope * x + intercept - end - - def period_count - @period_count ||= ((@date_to.to_time - @date_from.to_time) / time_divider).round + 1 - end - - def scale_division - @scale_division ||= time_divider / 1.day - end - - def time_divider - @interval_size == QUARTER_INTERVAL ? 3.months : 1.send(@interval_size) - end - end -end diff --git a/plugins/redmine_agile/lib/redmine_agile/charts/burndown_chart.rb b/plugins/redmine_agile/lib/redmine_agile/charts/burndown_chart.rb deleted file mode 100644 index 6a21a57..0000000 --- a/plugins/redmine_agile/lib/redmine_agile/charts/burndown_chart.rb +++ /dev/null @@ -1,112 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -module RedmineAgile - class BurndownChart < AgileChart - attr_accessor :burndown_data, :cumulative_burndown_data - - def initialize(data_scope, options = {}) - @date_from = options[:date_from] && options[:date_from].to_date || - [data_scope.minimum("#{Issue.table_name}.created_on"), - data_scope.minimum("#{Issue.table_name}.start_date")].compact.map(&:to_date).min - - @date_to = options[:date_to] && options[:date_to].to_date || - [options[:due_date], - data_scope.maximum("#{Issue.table_name}.updated_on")].compact.map(&:to_date).max - - @due_date = options[:due_date].to_date if options[:due_date] - @show_ideal_effort = options[:date_from] && options[:date_to] - - super data_scope, options - - @fields = [''] + @fields - @y_title = l(:label_agile_charts_number_of_issues) - @graph_title = l(:label_agile_charts_issues_burndown) - @line_colors = { :work => '80,122,170', :ideal => '102,102,102', :total => '80,122,170' } - end - - def data - return false unless calculate_burndown_data.any? - - datasets = [dataset(@burndown_data, l(:label_agile_actual_work_remaining), :fill => true, :color => line_colors[:work])] - if @show_ideal_effort - datasets << dataset(ideal_effort(@cumulative_burndown_data.first), l(:label_agile_ideal_work_remaining), - :color => line_colors[:ideal], :dashed => true, :nopoints => true) - end - if @show_ideal_effort && (@cumulative_burndown_data != @burndown_data) - datasets << dataset(@cumulative_burndown_data, l(:label_agile_total_work_remaining), - :color => line_colors[:total], :dashed => true) - end - - { - :title => @graph_title, - :y_title => @y_title, - :labels => @fields, - :datasets => datasets, - :show_tooltips => [0, 2] - } - end - - def self.data(data_scope, options = {}) - if options[:chart_unit] == Charts::UNIT_HOURS - WorkBurndownChart.new(data_scope, options.merge(estimated_unit: ESTIMATE_HOURS)).data - elsif options[:chart_unit] == Charts::UNIT_STORY_POINTS - WorkBurndownChart.new(data_scope, options.merge(estimated_unit: ESTIMATE_STORY_POINTS)).data - else - super - end - end - - protected - - def ideal_effort(start_remaining) - data = [0] * (due_date_period - 1) - active_periods = (RedmineAgile.exclude_weekends? && date_short_period?) ? due_date_period - @weekend_periods.select { |p| p < due_date_period }.count : due_date_period - avg_remaining_velocity = start_remaining.to_f / active_periods.to_f - sum = start_remaining.to_f - data[0] = sum - (1..due_date_period - 1).each do |i| - sum -= avg_remaining_velocity unless (RedmineAgile.exclude_weekends? && date_short_period?) && @weekend_periods.include?(i - 1) - data[i] = (sum * 100).round / 100.0 - end - data[due_date_period] = 0 - data - end - - def calculate_burndown_data - created_by_period = issues_count_by_period(scope_by_created_date) - closed_by_period = issues_count_by_period(scope_by_closed_date) - - total_issues = @data_scope.count - total_issues_before = @data_scope.where("#{Issue.table_name}.created_on < ?", @date_from).count - total_closed_before = @data_scope.open(false).where("#{Issue.table_name}.closed_on < ?", @date_from).count - - sum = total_issues_before - cumulative_created_by_period = created_by_period.first(current_date_period).map { |x| sum += x } - sum = total_closed_before - cumulative_closed_by_period = closed_by_period.first(current_date_period).map { |x| sum += x } - - burndown_by_period = [0] * (current_date_period) - cumulative_created_by_period.each_with_index { |e, i| burndown_by_period[i] = e - cumulative_closed_by_period[i] } - first_day_open_issues = @data_scope.where("#{Issue.table_name}.created_on < ?", @date_from + 1).count - total_closed_before - @cumulative_burndown_data = [total_issues - total_closed_before] + cumulative_closed_by_period.map { |c| total_issues - c } - @burndown_data = [first_day_open_issues] + burndown_by_period - end - end -end diff --git a/plugins/redmine_agile/lib/redmine_agile/charts/charts.rb b/plugins/redmine_agile/lib/redmine_agile/charts/charts.rb deleted file mode 100644 index a2a478e..0000000 --- a/plugins/redmine_agile/lib/redmine_agile/charts/charts.rb +++ /dev/null @@ -1,98 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -module RedmineAgile - module Charts - BURNDOWN_CHART = 'burndown_chart'.freeze - ISSUES_BURNDOWN_CHART = 'issues_burndown'.freeze - WORK_BURNDOWN_SP_CHART = 'work_burndown_sp'.freeze - WORK_BURNDOWN_HOURS_CHART = 'work_burndown_hours'.freeze - - AGILE_CHARTS = { - BURNDOWN_CHART => { name: :label_agile_chart_burndown, class: BurndownChart, - aliases: [ISSUES_BURNDOWN_CHART, WORK_BURNDOWN_HOURS_CHART, WORK_BURNDOWN_SP_CHART] }, - }.freeze - - CHARTS_WITH_UNITS = [ - BURNDOWN_CHART, - ].freeze - - UNIT_ISSUES = 'issues'.freeze - UNIT_STORY_POINTS = 'story_points'.freeze - UNIT_HOURS = 'hours'.freeze - - CHART_UNITS = { - UNIT_ISSUES => :label_issue_plural, - UNIT_STORY_POINTS => :label_agile_story_points, - UNIT_HOURS => :label_agile_hours - }.freeze - - CHART_UNIT_BY_ALIAS = { - ISSUES_BURNDOWN_CHART => UNIT_ISSUES, - WORK_BURNDOWN_HOURS_CHART => UNIT_HOURS, - WORK_BURNDOWN_SP_CHART => UNIT_STORY_POINTS, - } - - def self.valid_chart?(name) !!AGILE_CHARTS[name] end - - def self.chart_by_alias(alias_name) - chart_name = nil - AGILE_CHARTS.each do |chart, value| - if value[:aliases] && value[:aliases].include?(alias_name) - chart_name = chart - break - end - end - chart_name - end - - def self.valid_chart_name_by(old_chart_name) - if valid_chart?(old_chart_name) - old_chart_name - elsif (chart_by_alias = chart_by_alias(old_chart_name)) - chart_by_alias - else - BURNDOWN_CHART - end - end - - def self.valid_chart_unit?(name) !!CHART_UNITS[name] end - - def self.chart_with_units?(old_chart_name) - CHARTS_WITH_UNITS.include? valid_chart_name_by(old_chart_name) - end - - def self.valid_chart_unit_by(old_chart_name, chart_unit) - if chart_with_units?(old_chart_name) - if chart_by_alias(old_chart_name) - CHART_UNIT_BY_ALIAS[old_chart_name] - elsif valid_chart_unit?(chart_unit) - chart_unit - else - UNIT_ISSUES - end - end - end - - def self.chart_unit_label_by(alias_name) - chart_unit = CHART_UNIT_BY_ALIAS[alias_name] - CHART_UNITS[chart_unit] - end - end -end diff --git a/plugins/redmine_agile/lib/redmine_agile/charts/work_burndown_chart.rb b/plugins/redmine_agile/lib/redmine_agile/charts/work_burndown_chart.rb deleted file mode 100644 index 0c8019e..0000000 --- a/plugins/redmine_agile/lib/redmine_agile/charts/work_burndown_chart.rb +++ /dev/null @@ -1,69 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -module RedmineAgile - class WorkBurndownChart < BurndownChart - def initialize(data_scope, options = {}) - super data_scope, options - if @estimated_unit == 'hours' - @y_title = l(:label_agile_charts_number_of_hours) - @graph_title = l(:label_agile_charts_work_burndown_hours) - else - @y_title = l(:label_agile_charts_number_of_story_points) - @graph_title = l(:label_agile_charts_work_burndown_sp) - end - - @line_colors = { work: '0,153,0', ideal: '102,102,102', total: '0,153,0' } - end - - protected - - def calculate_burndown_data - data_scope = @data_scope - data_scope = data_scope.where("#{Issue.table_name}.rgt - #{Issue.table_name}.lft = 1") if use_subissue_done_ratio && @estimated_unit == 'hours' - - if @estimated_unit == 'hours' - all_issues = data_scope.where("#{Issue.table_name}.estimated_hours IS NOT NULL"). - eager_load([:journals, :status, { journals: { details: :journal } }]) - cumulative_total_hours = data_scope.sum("#{Issue.table_name}.estimated_hours").to_f - else - all_issues = data_scope.where("#{AgileData.table_name}.story_points IS NOT NULL"). - joins(:agile_data).eager_load([:journals, :status, { journals: { details: :journal } }]) - cumulative_total_hours = data_scope.joins(:agile_data).sum("#{AgileData.table_name}.story_points").to_f - end - - data = chart_dates_by_period.select { |d| d <= Date.today }.map do |date| - issues = all_issues.select { |issue| issue.created_on.localtime.to_date <= date } - total_hours_left, cumulative_total_hours_left = date_effort(issues, date) - [total_hours_left, cumulative_total_hours - cumulative_total_hours_left] - end - tail_values = data.last ? [data.last] * (current_date_period - data.size) : [] - data = first_period_effort(all_issues, chart_dates_by_period.first, cumulative_total_hours) + data + tail_values - @burndown_data, @cumulative_burndown_data = data.transpose - end - - private - - def first_period_effort(issues_scope, start_date, cumulative_total_hours) - issues = issues_scope.select { |issue| issue.created_on.localtime.to_date <= start_date } - total_left, cumulative_left = date_effort(issues, start_date - 1) - [[total_left, cumulative_total_hours - cumulative_left]] - end - end -end diff --git a/plugins/redmine_agile/lib/redmine_agile/helpers/agile_helper.rb b/plugins/redmine_agile/lib/redmine_agile/helpers/agile_helper.rb deleted file mode 100644 index cdc4be9..0000000 --- a/plugins/redmine_agile/lib/redmine_agile/helpers/agile_helper.rb +++ /dev/null @@ -1,153 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -module RedmineAgile - module AgileHelper - - def retrieve_agile_query_from_session - if session[:agile_query] - if session[:agile_query][:id] - @query = AgileQuery.find_by_id(session[:agile_query][:id]) - return unless @query - else - @query = AgileQuery.new(get_query_attributes_from_session) - end - if session[:agile_query].has_key?(:project_id) - @query.project_id = session[:agile_query][:project_id] - else - @query.project = @project - end - @query - else - @query = AgileQuery.new(:name => "_") - end - end - - def retrieve_agile_query - if !params[:query_id].blank? - cond = "project_id IS NULL" - cond << " OR project_id = #{@project.id}" if @project - @query = AgileQuery.where(cond).find(params[:query_id]) - raise ::Unauthorized unless @query.visible? - @query.project = @project - session[:agile_query] = {:id => @query.id, :project_id => @query.project_id} - sort_clear - elsif api_request? || params[:set_filter] || session[:agile_query].nil? || session[:agile_query][:project_id] != (@project ? @project.id : nil) - unless @query - @query = AgileQuery.new(:name => "_", :project => @project) - @query.build_from_params(params) - else - @query.project = @project if @project - end - save_query_attribures_to_session(@query) - else - # retrieve from session - @query = nil - if session[:agile_query] && !session[:agile_query][:id] && !params[:project_id] - @query = AgileQuery.new(get_query_attributes_from_session) - end - - @query ||= AgileQuery.find_by_id(session[:agile_query][:id]) if session[:agile_query][:id] - @query ||= AgileQuery.new(get_query_attributes_from_session) - @query.project = @project - save_query_attribures_to_session(@query) - end - end - - def options_card_colors_for_select(selected, options={}) - color_base = [[l(:label_agile_color_no_colors), "none"], - [l(:label_issue), "issue"], - [l(:label_tracker), "tracker"], - [l(:field_priority), "priority"], - [l(:label_spent_time), "spent_time"], - [l(:field_assigned_to), "user"]] - color_base << [l(:field_project), 'project'] if (@project && @project.children.any?) || !@project - options_for_select(color_base.compact, selected) - end - - def options_charts_for_select(selected) - container = [] - RedmineAgile::Charts::AGILE_CHARTS.each { |k, v| container << [l(v[:name]), k] } - selected_chart = RedmineAgile::Charts.chart_by_alias(selected) || selected - options_for_select(container, selected_chart) - end - - def grouped_options_charts_for_select(selected) - grouped_options = {} - container = [] - - RedmineAgile::Charts::AGILE_CHARTS.each do |chart, value| - if RedmineAgile::Charts::CHARTS_WITH_UNITS.include?(chart) - group = l(value[:name]) - grouped_options[group] = [] - value[:aliases].each do |alias_name| - grouped_options[group] << ["#{group} (#{l(RedmineAgile::Charts.chart_unit_label_by(alias_name))})", alias_name] - end - else - container << [l(value[:name]), chart] - end - end - - grouped_options_for_select(grouped_options, selected) + options_for_select(container, selected) - end - - def options_chart_units_for_select(selected = nil) - container = [] - RedmineAgile::Charts::CHART_UNITS.each { |k, v| container << [l(v), k] } - selected_unit = RedmineAgile::Charts::CHART_UNIT_BY_ALIAS[selected] || selected - options_for_select(container, selected_unit) - end - - def render_agile_chart(chart_name, issues_scope) - render partial: "agile_charts/chart", - locals: { chart: chart_name, issues_scope: issues_scope, chart_unit: params[:chart_unit] } - end - - def upgrade_to_pro_agile_chart_link(chart_name, query = @query, current_chart = @chart) - link_to l("label_agile_charts_#{chart_name}"), '#', - onclick: "showModal('upgrade-to-pro', '557px');", - class: ('selected' if query.is_a?(AgileChartsQuery) && query.new_record? && current_chart == chart_name) - end - - private - - def get_query_attributes_from_session - attributes = { name: '_', - filters: session[:agile_query][:filters], - group_by: session[:agile_query][:group_by], - column_names: session[:agile_query][:column_names], - color_base: session[:agile_query][:color_base] } - (attributes[:options] = session[:agile_query][:options] || {}) if Redmine::VERSION.to_s > '2.4' - attributes - end - - def save_query_attribures_to_session(query) - session[:agile_query] = { project_id: query.project_id, - filters: query.filters, - group_by: query.group_by, - color_base: (query.respond_to?(:color_base) && query.color_base), - column_names: query.column_names } - (session[:agile_query][:options] = query.options) if Redmine::VERSION.to_s > '2.4' - end - end -end - -ActionView::Base.send :include, RedmineAgile::AgileHelper diff --git a/plugins/redmine_agile/lib/redmine_agile/hooks/controller_issue_hook.rb b/plugins/redmine_agile/lib/redmine_agile/hooks/controller_issue_hook.rb deleted file mode 100644 index 06cc964..0000000 --- a/plugins/redmine_agile/lib/redmine_agile/hooks/controller_issue_hook.rb +++ /dev/null @@ -1,50 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -module RedmineAgile - module Hooks - class ControllerIssueHook < Redmine::Hook::ViewListener - - def controller_issues_edit_before_save(context={}) - add_agile_journal_details(context) - end - - def controller_issues_bulk_edit_before_save(context={}) - add_agile_journal_details(context) - end - - private - - def add_agile_journal_details(context) - return false unless context[:issue].project.module_enabled?(:agile) - # return false unless context[:issue].color - old_value = Issue.where(id: context[:issue].id).first || context[:issue] - # save changes for story points to journal - old_sp = old_value.story_points - new_sp = context[:issue].story_points - if !((new_sp == old_sp) || context[:issue].current_journal.blank?) - context[:issue].current_journal.details << JournalDetail.new(:property => 'attr', - :prop_key => 'story_points', - :old_value => old_sp, - :value => new_sp) - end - end - end - end -end diff --git a/plugins/redmine_agile/lib/redmine_agile/hooks/views_issues_hook.rb b/plugins/redmine_agile/lib/redmine_agile/hooks/views_issues_hook.rb deleted file mode 100644 index d4d7ab2..0000000 --- a/plugins/redmine_agile/lib/redmine_agile/hooks/views_issues_hook.rb +++ /dev/null @@ -1,31 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -module RedmineAgile - module Hooks - class ViewsIssuesHook < Redmine::Hook::ViewListener - def view_issues_sidebar_issues_bottom(context = {}) - context[:controller].send(:render_to_string, partial: 'agile_charts/agile_charts', locals: context) - end - - render_on :view_issues_form_details_bottom, :partial => 'issues/agile_data_fields' - render_on :view_issues_show_details_bottom, :partial => 'issues/agile_data_labels' - end - end -end diff --git a/plugins/redmine_agile/lib/redmine_agile/hooks/views_layouts_hook.rb b/plugins/redmine_agile/lib/redmine_agile/hooks/views_layouts_hook.rb deleted file mode 100644 index ef723bc..0000000 --- a/plugins/redmine_agile/lib/redmine_agile/hooks/views_layouts_hook.rb +++ /dev/null @@ -1,28 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -module RedmineAgile - module Hooks - class ViewsLayoutsHook < Redmine::Hook::ViewListener - def view_layouts_base_html_head(context={}) - return stylesheet_link_tag(:redmine_agile, :plugin => 'redmine_agile') - end - end - end -end diff --git a/plugins/redmine_agile/lib/redmine_agile/hooks/views_versions_hook.rb b/plugins/redmine_agile/lib/redmine_agile/hooks/views_versions_hook.rb deleted file mode 100644 index 67af1e1..0000000 --- a/plugins/redmine_agile/lib/redmine_agile/hooks/views_versions_hook.rb +++ /dev/null @@ -1,26 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -module RedmineAgile - module Hooks - class ViewsVersionsHook < Redmine::Hook::ViewListener - render_on :view_versions_show_bottom, :partial => "agile_charts/versions_show" - end - end -end diff --git a/plugins/redmine_agile/lib/redmine_agile/patches/issue_drop_patch.rb b/plugins/redmine_agile/lib/redmine_agile/patches/issue_drop_patch.rb deleted file mode 100644 index db476e5..0000000 --- a/plugins/redmine_agile/lib/redmine_agile/patches/issue_drop_patch.rb +++ /dev/null @@ -1,44 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -module RedmineAgile - module Patches - module IssueDropPatch - - def self.included(base) - base.class_eval do - base.send(:include, InstanceMethods) - end - end - - module InstanceMethods - def time_in_statuses - statuses_data = AgileStatusesCollector.new(@issue).grouped_by('status') - statuses = Hash[IssueStatus.where(id: statuses_data.keys).map { |s| [s.id.to_s, s.name] }] - Hash[statuses_data.map { |sid, data| [statuses[sid], (data.map(&:duration).sum / 1.days).round] }] - end - end - end - - end -end - -unless RedmineCrm::Liquid::IssueDrop.included_modules.include?(RedmineAgile::Patches::IssueDropPatch) - RedmineCrm::Liquid::IssueDrop.send(:include, RedmineAgile::Patches::IssueDropPatch) -end diff --git a/plugins/redmine_agile/lib/redmine_agile/patches/issue_patch.rb b/plugins/redmine_agile/lib/redmine_agile/patches/issue_patch.rb deleted file mode 100644 index 8caca54..0000000 --- a/plugins/redmine_agile/lib/redmine_agile/patches/issue_patch.rb +++ /dev/null @@ -1,75 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -require_dependency 'issue' -require_dependency 'agile_data' - -module RedmineAgile - module Patches - - module IssuePatch - def self.included(base) - base.send(:include, InstanceMethods) - base.class_eval do - unloadable - has_one :agile_data, :dependent => :destroy - delegate :position, :to => :agile_data, :allow_nil => true - scope :sorted_by_rank, lambda { eager_load(:agile_data). - order(Arel.sql("COALESCE(#{AgileData.table_name}.position, 999999 )")) } - safe_attributes 'agile_data_attributes', :if => lambda { |issue, user| issue.new_record? || user.allowed_to?(:edit_issues, issue.project) } - accepts_nested_attributes_for :agile_data, :allow_destroy => true - - alias_method :agile_data_without_default, :agile_data - alias_method :agile_data, :agile_data_with_default - end - end - - module InstanceMethods - def agile_data_with_default - agile_data_without_default || build_agile_data - end - - def day_in_state - change_time = journals.joins(:details).where(:journals => { :journalized_id => id, :journalized_type => 'Issue' }, - :journal_details => { :prop_key => 'status_id' }).order('created_on DESC').first - change_time.created_on - rescue - created_on - end - - def last_comment - journals.where("notes <> ''").order("#{Journal.table_name}.id ASC").last - end - - def story_points - @story_points ||= agile_data.story_points - end - - def sub_issues - descendants - end - end - end - - end -end - -unless Issue.included_modules.include?(RedmineAgile::Patches::IssuePatch) - Issue.send(:include, RedmineAgile::Patches::IssuePatch) -end diff --git a/plugins/redmine_agile/lib/redmine_agile/patches/issues_controller_patch.rb b/plugins/redmine_agile/lib/redmine_agile/patches/issues_controller_patch.rb deleted file mode 100644 index 5e4d94c..0000000 --- a/plugins/redmine_agile/lib/redmine_agile/patches/issues_controller_patch.rb +++ /dev/null @@ -1,33 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -module RedmineAgile - module Patches - module IssuesControllerPatch - def self.included(base) # :nodoc: - base.class_eval do - end - end - end - end -end - -unless IssuesController.included_modules.include?(RedmineAgile::Patches::IssuesControllerPatch) - IssuesController.send(:include, RedmineAgile::Patches::IssuesControllerPatch) -end diff --git a/plugins/redmine_agile/lib/redmine_agile/patches/project_patch.rb b/plugins/redmine_agile/lib/redmine_agile/patches/project_patch.rb deleted file mode 100644 index 2f4a628..0000000 --- a/plugins/redmine_agile/lib/redmine_agile/patches/project_patch.rb +++ /dev/null @@ -1,41 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -module RedmineAgile - module Patches - module ProjectPatch - - def self.included(base) - base.class_eval do - base.send(:include, InstanceMethods) - safe_attributes 'agile_color_attributes', - if: lambda { |project, user| user.allowed_to?(:edit_project, project) && user.allowed_to?(:view_agile_queries, project) && RedmineAgile.use_colors? } - end - end - - module InstanceMethods - end - end - - end -end - -unless Project.included_modules.include?(RedmineAgile::Patches::ProjectPatch) - Project.send(:include, RedmineAgile::Patches::ProjectPatch) -end diff --git a/plugins/redmine_agile/lib/redmine_agile/patches/projects_helper_patch.rb b/plugins/redmine_agile/lib/redmine_agile/patches/projects_helper_patch.rb deleted file mode 100644 index 653c009..0000000 --- a/plugins/redmine_agile/lib/redmine_agile/patches/projects_helper_patch.rb +++ /dev/null @@ -1,41 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -require_dependency 'queries_helper' - -module RedmineAgile - module Patches - module ProjectsHelperPatch - def self.included(base) - base.send(:include, InstanceMethods) - - base.class_eval do - unloadable - end - end - - module InstanceMethods - end - end - end -end - -unless ProjectsHelper.included_modules.include?(RedmineAgile::Patches::ProjectsHelperPatch) - ProjectsHelper.send(:include, RedmineAgile::Patches::ProjectsHelperPatch) -end diff --git a/plugins/redmine_agile/lib/redmine_agile/patches/queries_controller_patch.rb b/plugins/redmine_agile/lib/redmine_agile/patches/queries_controller_patch.rb deleted file mode 100644 index 085b7d6..0000000 --- a/plugins/redmine_agile/lib/redmine_agile/patches/queries_controller_patch.rb +++ /dev/null @@ -1,44 +0,0 @@ -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -module RedmineAgile - module Patches - module QueriesControllerPatch - def self.included(base) - base.send(:include, InstanceMethods) - base.class_eval do - alias_method :query_class_without_agile, :query_class - alias_method :query_class, :query_class_with_agile - end - end - - module InstanceMethods - def query_class_with_agile - return AgileChartsQuery if params[:type] == 'AgileChartsQuery' - return AgileVersionsQuery if params[:type] == 'AgileVersionsQuery' - query_class_without_agile - end - end - end - end -end - -unless QueriesController.included_modules.include?(RedmineAgile::Patches::QueriesControllerPatch) - QueriesController.send(:include, RedmineAgile::Patches::QueriesControllerPatch) -end diff --git a/plugins/redmine_agile/test/fixtures/agile_data.yml b/plugins/redmine_agile/test/fixtures/agile_data.yml deleted file mode 100644 index bcd268a..0000000 --- a/plugins/redmine_agile/test/fixtures/agile_data.yml +++ /dev/null @@ -1,18 +0,0 @@ -agile_data_1: - id: 1 - issue_id: 1 - position: 1 - story_points: 1.1 - agile_sprint_id: nil -agile_data_2: - id: 2 - issue_id: 2 - position: 1 - story_points: 2.2 - agile_sprint_id: 1 -agile_data_3: - id: 3 - issue_id: 3 - position: 3 - story_points: nil - agile_sprint_id: nil diff --git a/plugins/redmine_agile/test/fixtures/queries.yml b/plugins/redmine_agile/test/fixtures/queries.yml deleted file mode 100644 index 7e33abb..0000000 --- a/plugins/redmine_agile/test/fixtures/queries.yml +++ /dev/null @@ -1,32 +0,0 @@ -agile_query_101: - id: 101 - type: AgileQuery - project_id: 1 - <% if Redmine::VERSION.to_s < '2.4' %> - is_public: false - <% else %> - visibility: 2 - <% end %> - name: Board for specific project - filters: | - --- - tracker_id: - :values: - - "3" - :operator: "=" - user_id: 1 - column_names: [] - -agile_query_102: - id: 102 - type: AgileQuery - project_id: nil - <% if Redmine::VERSION.to_s < '2.4' %> - is_public: true - <% else %> - visibility: 2 - <% end %> - name: Board for all projects - filters: {} - user_id: 1 - column_names: [] diff --git a/plugins/redmine_agile/test/functional/agile_boards_controller_test.rb b/plugins/redmine_agile/test/functional/agile_boards_controller_test.rb deleted file mode 100644 index 6619a26..0000000 --- a/plugins/redmine_agile/test/functional/agile_boards_controller_test.rb +++ /dev/null @@ -1,819 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -module RedmineAgile - module AgileBoardsControllerTest - module SpecificTestCase - def test_get_index_with_filter_issue_id - compatible_request :get, :index, { - project_id: 'ecookbook', - set_filter: '1', - f: %w(issue_id), - op: { 'issue_id' => '<=' }, - v: { 'issue_id' => ['2'] }, - c: %w(tracker assigned_to) - } - - assert_response :success - assert_equal [1, 2], agile_issues_in_list.map(&:id).sort - end - - def test_get_index_with_filter_is_private - project = Project.find(3) - emodule = EnabledModule.create(project_id: project.id, name: 'agile') - - compatible_request :get, :index, { - project_id: 'ecookbook', - set_filter: '1', - f: %w(is_private), - op: { 'is_private' => '=' }, - v: { 'is_private' => ['1'] }, - c: %w(tracker assigned_to) - } - - assert_response :success - assert_equal [14], agile_issues_in_list.map(&:id) - ensure - emodule.destroy - end - - def test_get_index_with_filter_watcher_id - issues(:issues_001).set_watcher(users(:users_002)) - - compatible_request :get, :index, { - project_id: 'ecookbook', - set_filter: '1', - f: %w(watcher_id), - op: { 'watcher_id' => '=' }, - v: { 'watcher_id' => ['2'] }, - c: %w(tracker assigned_to) - } - - assert_response :success - assert_equal [1], agile_issues_in_list.map(&:id) - end - end - end -end - - -class AgileBoardsControllerTest < ActionController::TestCase - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :issue_relations, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers, - :time_entries, - :journals, - :journal_details, - :queries - fixtures :email_addresses if Redmine::VERSION.to_s > '3.0' - - include(RedmineAgile::AgileBoardsControllerTest::SpecificTestCase) if Redmine::VERSION.to_s > '2.4' - - def setup - RedmineAgile::TestCase.prepare - @project_1 = Project.find(1) - @project_2 = Project.find(5) - @project_3 = Project.find(3) - EnabledModule.create(:project => @project_1, :name => 'agile') - EnabledModule.create(:project => @project_2, :name => 'agile') - EnabledModule.create(:project => @project_3, :name => 'agile') - @request.session[:user_id] = 1 - end - - def test_get_index - # global board - compatible_request :get, :index - assert_response :success - assert_equal Issue.open.map(&:id).sort, agile_issues_in_list.map(&:id).sort - assert_select '.issue-card', Issue.open.count - end - - def test_get_index_with_project - compatible_request :get, :index, project_id: @project_1 - issues = Issue.where(project_id: [@project_1] + Project.where(parent_id: @project_1.id) - .select {|p| p.module_enabled?('agile') }.to_a, - status_id: IssueStatus.where(is_closed: false)) - assert_equal issues.map(&:id).sort, agile_issues_in_list.map(&:id).sort - assert_select '.issue-card', issues.count - assert_select '.issue-card span.fields p.issue-id strong', issues.count - assert_select '.issue-card span.fields p.name a', issues.count - end - - def test_get_index_truncated - with_agile_settings 'board_items_limit' => 1 do - compatible_request :get, :index, agile_query_params - assert_response :success - assert_select 'div#content p.warning', 1 - assert_select 'td.issue-status-col .issue-card', 1 - end - end - - def test_limit_for_truncated - expected_issues = Issue.where(:project_id => [@project_1] + Project.where(:parent_id => @project_1.id).to_a, - :status_id => IssueStatus.where(:is_closed => false)) - with_agile_settings 'board_items_limit' => (expected_issues.count + 1) do - compatible_request :get, :index, agile_query_params.merge(:f_status => IssueStatus.where(:is_closed => false).pluck(:id)) - assert_response :success - assert_select 'div#content p.warning', 0 - end - end if Redmine::VERSION.to_s > '2.4' - - def test_get_index_with_filters - if Redmine::VERSION.to_s > '2.4' - compatible_request :get, :index, agile_query_params.merge(:f_status => IssueStatus.where('id != 1').pluck(:id)) - else - compatible_request :get, :index, agile_query_params.merge(:op => { :status_id => '!' }, :v => { :status_id => ['1'] }) - end - assert_response :success - expected_issues = Issue.where(:project_id => [@project_1] + Project.where(:parent_id => @project_1.id).to_a, - :status_id => IssueStatus.where('id != 1')) - assert_equal expected_issues.map(&:id).sort, agile_issues_in_list.map(&:id).sort - end - - def test_get_index_with_filter_on_assignee_role - assignee_params = { :set_filter => '1', - :f => ['assigned_to_role', ''], - :op => { :assigned_to_role => '=' }, - :v => { 'assigned_to_role' => ['2'] }, - :c => ['assigned_to'], - :project_id => 'ecookbook' } - compatible_request :get, :index, assignee_params - assert_response :success - members = Member.joins(:roles).where(:project_id => [@project_1]).where('member_roles.role_id = 2').map(&:user_id).uniq - expected_issues = Issue.where(:project_id => [@project_1]).where(:assigned_to_id => members) - assert_equal expected_issues.map(&:id).sort, agile_issues_in_list.map(&:id).sort - end if Redmine::VERSION.to_s > '2.4' - - def create_subissue - @issue1 = Issue.find(1) - @subissue = Issue.create!( - :subject => 'Sub issue', - :project => @issue1.project, - :tracker => @issue1.tracker, - :author => @issue1.author, - :parent_issue_id => @issue1.id, - :fixed_version => Version.last - ) - end - - def test_get_index_with_filter_on_parent_tracker - create_subissue - compatible_request :get, :index, agile_query_params.merge( - :op => { :parent_issue_tracker_id => '=' }, - :v => { :parent_issue_tracker_id => [Tracker.find(1).name] }, - :f => [:parent_issue_tracker_id], - :project_id => Project.order(:id).first.id - ) - assert_response :success - assert_equal [@subissue.id], agile_issues_in_list.map(&:id) - end if Redmine::VERSION.to_s > '2.4' - - def test_get_index_with_filter_on_two_parent_id - create_subissue - issue2 = Issue.generate! - child2 = Issue.generate!(:parent_issue_id => issue2.id) - - compatible_request :get, :index, agile_query_params.merge( - :op => { :parent_issue_id => '=' }, - :v => { :parent_issue_id => ["#{@issue1.id}, #{issue2.id}"] }, - :f => [:parent_issue_id], - :project_id => Project.order(:id).first.id - ) - assert_response :success - assert_equal [@subissue.id, child2.id].sort, agile_issues_in_list.map(&:id).sort - end if Redmine::VERSION.to_s > '2.4' - - def test_get_index_with_filter_on_parent_tracker_inversed - create_subissue - compatible_request :get, :index, agile_query_params.merge( - :op => { :parent_issue_tracker_id => '!' }, - :v => { :parent_issue_tracker_id => [Tracker.find(1).name] }, - :f => [:parent_issue_tracker_id], - :project_id => Project.order(:id).first.id - ) - assert_response :success - assert_not_include @subissue.id, agile_issues_in_list.map(&:id) - end if Redmine::VERSION.to_s > '2.4' - - def test_get_index_with_filter_on_has_subissues - create_subissue - compatible_request :get, :index, agile_query_params.merge( - :op => { :has_sub_issues => '=' }, - :v => { :has_sub_issues => ['yes'] }, - :f => [:has_sub_issues], - :project_id => Project.order(:id).first.id - ) - assert_response :success - assert_equal [@issue1.id], agile_issues_in_list.map(&:id) - end if Redmine::VERSION.to_s > '2.4' - - def test_get_index_with_filter_and_field_time_in_state - create_subissue - columns_group_by = AgileQuery.new.groupable_columns - columns_group_by.each do |col| - compatible_request :get, :index, agile_query_params.merge( - :project_id => Project.order(:id).first.id, - :group_by => col.name.to_s - ) - assert_response :success, "Error with group by #{col.name}" - end - end if Redmine::VERSION.to_s > '2.4' - - def test_put_update_status - status_id = 1 - first_issue_id = 1 - second_issue_id = 3 - first_pos = 1 - second_pos = 2 - positions = { first_issue_id.to_s => { 'position' => first_pos }, second_issue_id.to_s => { 'position' => second_pos } } - compatible_xhr_request :put, :update, :id => first_issue_id, :issue => { :status_id => status_id }, :positions => positions - assert_response :success - assert_equal status_id, Issue.find(first_issue_id).status_id - assert_equal first_pos, Issue.find(first_issue_id).agile_data.position - assert_equal second_pos, Issue.find(second_issue_id).agile_data.position - # check js code for update board header - assert_match '$("table.issues-board thead").html(', @response.body - end - - def test_put_update_version - fixed_version_id = 3 - first_issue_id = 1 - second_issue_id = 3 - first_pos = 1 - second_pos = 2 - positions = { first_issue_id.to_s => { 'position' => first_pos }, second_issue_id.to_s => { 'position' => second_pos } } - compatible_xhr_request :put, :update, :id => first_issue_id, :issue => { :fixed_version_id => fixed_version_id }, :positions => positions - assert_response :success - assert_equal fixed_version_id, Issue.find(first_issue_id).fixed_version_id - assert_equal first_pos, Issue.find(first_issue_id).agile_data.position - assert_equal second_pos, Issue.find(second_issue_id).agile_data.position - end - - def test_put_update_assigned - assigned_to_id = 3 - issue_id = 1 - compatible_xhr_request :put, :update, :id => issue_id, :issue => { :assigned_to_id => assigned_to_id } - assert_response :success - assert_equal assigned_to_id, Issue.find(issue_id).assigned_to_id - end - - def test_get_index_with_all_fields - compatible_request :get, :index, agile_query_params.merge(:f => AgileQuery.available_columns.map(&:name)) - assert_response :success - end - - def test_short_card_for_closed_issue - with_agile_settings 'hide_closed_issues_data' => '1' do - closed_status = IssueStatus.where(:is_closed => true).pluck(:id) - closed_issues = Issue.where(:status_id => closed_status) - project = closed_issues.first.project - - # get :index, agile_query_params.merge(:f_status => closed_status) - if Redmine::VERSION.to_s > '2.4' - compatible_request :get, :index, agile_query_params.merge(:f_status => closed_status) - else - compatible_request :get, :index, agile_query_params.merge('f' => ['']) - end - - assert_response :success - assert_select '.closed-issue', project.issues.where(:status_id => IssueStatus.where(:is_closed => true)).count - end - end - - def test_get_tooltip_for_issue - issue = Issue.where(:status_id => IssueStatus.where(:is_closed => true)).first - compatible_request :get, :issue_tooltip, :id => issue.id - assert_response :success - assert_select 'a.issue', 1 - assert_select 'strong', 6 - assert_match issue.status.name, @response.body - end - - def test_empty_node_for_tooltip - with_agile_settings 'hide_closed_issues_data' => '1' do - closed_status = IssueStatus.where(:is_closed => true).pluck(:id) - if Redmine::VERSION.to_s > '2.4' - compatible_request :get, :index, agile_query_params.merge(:f_status => closed_status) - else - compatible_request :get, :index, agile_query_params.merge('f' => ['']) - end - assert_select 'span.tip', { :text => '' } - end - end - - def test_setting_for_closed_issues - with_agile_settings 'hide_closed_issues_data' => '0' do - closed_issues = Issue.where(:status_id => IssueStatus.where(:is_closed => true)) - project = closed_issues.first.project - compatible_request :get, :index, agile_query_params.merge('f' => ['']) - assert_response :success - assert_select '.closed-issue', 0 - end - end - - def test_index_with_js_format - with_agile_settings 'hide_closed_issues_data' => '1' do - closed_issues = Issue.where(:status_id => IssueStatus.where(:is_closed => true)) - project = closed_issues.first.project - compatible_xhr_request :get, :index, agile_query_params.merge('f' => [''], :format => :js) - assert_response :success - assert_match "$('.tooltip').mouseenter(callGetToolTipInfo)", @response.body - end - end - - def test_get_index_with_day_in_state_and_parent_group - compatible_request :get, :index, agile_query_params.merge(:c => ['day_in_state'], :group_by => 'parent') - assert_response :success - end - - def test_assinged_to_and_in_state_in_index - issue1 = Issue.find(1) - issue2 = Issue.create!( - :subject => 'Test assigned_to with day in state', - :project => issue1.project, - :tracker => issue1.tracker, - :author => issue1.author, - :fixed_version => Version.last - ) - compatible_request :get, :index, agile_query_params.merge(:c => ['day_in_state'], :group_by => 'parent') - assigned_to_id = 3 - issue_id = issue2.id - compatible_xhr_request :put, :update, :id => issue_id, :issue => { :assigned_to_id => assigned_to_id } - assert_response :success - issue2.reload - assert_equal assigned_to_id, issue2.assigned_to_id - end - - def test_index_with_relations_relates - create_issue_relation - compatible_request :get, :index, agile_query_params.merge(:f_status => IssueStatus.pluck(:id), :op => { :status_id => '*', :relates => '*' }, :f => ['relates']) - assert_response :success - assert_equal [1, 7, 8], agile_issues_in_list.map(&:id).sort - end if Redmine::VERSION.to_s > '2.4' - - def test_index_with_relations_blocked - create_issue_relation - - compatible_request :get, :index, agile_query_params.merge(:f_status => IssueStatus.pluck(:id), :op => { :status_id => '*', :blocked => '*' }, :f => ['blocked']) - assert_response :success - assert_equal [2, 11], agile_issues_in_list.map(&:id).sort - end if Redmine::VERSION.to_s > '2.4' - - def test_list_of_attributes_on_update_status - params = agile_query_params.merge(:c => ['project', 'day_in_state'], :group_by => 'parent') - params.delete(:project_id) - compatible_request :get, :index, params - assert_response :success - assert_select 'p.project' - compatible_request :put, :update, :issue => { :status_id => 2 }, :id => 1 - assert_select 'p.project', { :text => @project_1.to_s } - end - - def test_day_in_state_when_change_status - @request.session[:agile_query] = {} - @request.session[:agile_query][:column_names] = ['project', 'day_in_state'] - issue = Issue.find(1) - compatible_request :put, :update, :issue => { :status_id => 2 }, :id => 1 - issue.reload - assert_response :success - assert_equal 2, issue.status_id - assert_select 'p.attributes', /0.hours/ - end if Redmine::VERSION.to_s > '2.4' - - def test_global_query_and_project_board - query = AgileQuery.create(:name => 'global', :column_names => ['project'], :visibility => 2, :options => { :is_default => true }) - compatible_request :get, :index, :project_id => 1 - assert_select 'p.project', { :count => 0, :text => Project.find(2).to_s } - end if Redmine::VERSION.to_s > '2.4' - - def test_total_estimated_hours_for_status - Setting.stubs(:display_subprojects_issues?).returns(false) if Redmine::VERSION.to_s >= '4.0' - Issue.find(1, 2, 3).each do |issue| - issue.estimated_hours = 10 - issue.save - end - - compatible_request :get, :index, agile_query_params.merge(c: ['estimated_hours'], - f: [:issue_id], - op: { issue_id: '><' }, - v: { issue_id: [1, 3] }) - - assert_response :success - - assert_select 'thead tr th span.hours', { count: 1, text: '20.00h' } # status_id == 1 - assert_select 'thead tr th span.hours', { count: 1, text: '10.00h' } # status_id == 2 - end - - def test_get_index_with_checklist - # global board - issue1 = issue_with_checklist - - compatible_request :get, :index, agile_query_params.merge(:c => ['checklists'], :project_id => nil) - assert_response :success - # check checklist nodes - assert_select "#checklist_#{issue1.id}" - issue1.checklists.each do |checklist| - assert_select "#checklist_item_#{checklist.id}", :text => checklist.subject - end - end if RedmineAgile.use_checklist? - - def test_get_index_without_checklist - issue1 = issue_with_checklist - compatible_request :get, :index, :c => [] - assert_response :success - # check checklist nodes - assert_select "#checklist_#{issue1.id}", :count => 0 - issue1.checklists.each do |checklist| - assert_select "#checklist_item_#{checklist.id}", :count => 0 - end - end if RedmineAgile.use_checklist? - - def test_get_index_with_project_with_checklist - issue1 = issue_with_checklist - compatible_request :get, :index, agile_query_params.merge(:c => ['checklists'], :project_id => issue1.project) - assert_response :success - # check checklist nodes - assert_select "#checklist_#{issue1.id}" - issue1.checklists.each do |checklist| - assert_select "#checklist_item_#{checklist.id}", :text => checklist.subject - end - end if RedmineAgile.use_checklist? - - def test_get_index_with_project_without_checklist - issue1 = issue_with_checklist - compatible_request :get, :index, agile_query_params.merge(:project_id => issue1.project, :c => []) - assert_response :success - # check checklist nodes - assert_select "#checklist_#{issue1.id}", :count => 0 - issue1.checklists.each do |checklist| - assert_select "#checklist_item_#{checklist.id}", :count => 0 - end - end if RedmineAgile.use_checklist? - - def test_get_index_check_quick_edit_without_permission - role = Role.find(2) - role.permissions << :veiw_issues - role.permissions << :view_agile_queries - role.permissions.delete(:edit_issues) - role.save - @request.session[:user_id] = 3 - - compatible_request :get, :index, :project_id => @project_1 - issues = Issue.where(:project_id => [@project_1], :status_id => IssueStatus.where(:is_closed => false)) - assert_response :success - assert_select '.issue-card', agile_issues_in_list.count - assert_select '.issue-card .quick-edit-card a', :count => 0 - end - - def test_last_comment_on_issue_cart - issue = @project_1.issues.open.first - text_comment = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus in blandit ex. Donec vitae urna quis tortor tempor mollis.' - comment = Journal.new(:notes => text_comment, :user_id => 1) - issue.journals << comment - params = agile_query_params.merge(:c => ['project', 'last_comment'], :group_by => 'parent') - compatible_request :get, :index, params - assert_response :success - assert_select 'span.last-comment', :text => text_comment.truncate(100) - compatible_request :put, :update, :issue => { :status_id => 2 }, :id => issue.id - assert_select 'span.last-comment', :text => text_comment.truncate(100) - end if Redmine::VERSION.to_s > '2.4' - - def test_show_sp_value_on_issue_cart - with_agile_settings 'estimate_units' => 'story_points', 'story_points_on' => '1' do - issues = @project_1.issues.open.first(3) - issues.each do |issue| - issue.agile_data.story_points = issue.id * 10 - issue.save - end - params = agile_query_params.merge(:c => ['story_points']) - compatible_request :get, :index, params - IssueStatus.where(:id => @project_1.issues.open.joins(:status).pluck(:status_id).uniq).each do |status| - sp_sum = @project_1.issues.eager_load(:agile_data).where(:status_id => status.id).sum("#{AgileData.table_name}.story_points") - next unless sp_sum.to_i > 0 - assert_select "th[data-column-id='#{status.id}'] span.hours", :text =>"#{sp_sum}sp" - end - issues.each do |issue| - assert_select ".issue-card[data-id='#{issue.id}'] span.fields p.issue-id span.hours", :text =>"(#{issue.story_points}sp)" - end - # check story_points in available_columns for query - assert_select 'input[value="story_points"]' - end - end if Redmine::VERSION.to_s > '2.4' - - def test_show_sp_with_estimated_hours_on_issue_cart - Setting.stubs(:display_subprojects_issues?).returns(false) - - with_agile_settings 'estimate_units' => 'story_points', 'story_points_on' => '1' do - issues = @project_1.issues.open.first(3) - issues.each do |issue| - issue.agile_data.story_points = issue.id * 10 - issue.estimated_hours = issue.id * 2 - issue.save - end - - compatible_request :get, :index, agile_query_params.merge(c: %w(story_points estimated_hours)) - - # Should show estimated time and story points in the board header - IssueStatus.where(id: @project_1.issues.open.joins(:status).pluck(:status_id).uniq).each do |status| - column_issues = @project_1.issues.eager_load(:agile_data).where(status_id: status.id) - sp_sum = column_issues.to_a.sum { |issue| issue.story_points.to_i } - estimated_hours = column_issues.to_a.sum { |issue| issue.estimated_hours.to_i } - values = [] - values.push('%.2fh' % estimated_hours) if estimated_hours.to_i > 0 - values.push("#{sp_sum}sp") if sp_sum.to_i > 0 - if values.present? - assert_select "th[data-column-id='#{status.id}'] span.hours", text: values.join('/') - end - end - - # Should show estimated time and story points on a card - issues.each do |issue| - assert_select ".issue-card[data-id='#{issue.id}'] span.fields p.issue-id span.hours", - text: "(#{"%.2fh" % issue.estimated_hours.to_f}/#{issue.story_points}sp)" - end - end - end - - def test_index_for_estimated_values_by_default - prepare_issues_with_points_and_estimated_hours - compatible_request :get, :index - should_not_show_estimated_hours - should_not_show_story_points - end - - def test_index_for_estimated_values_with_enabled_options - prepare_issues_with_points_and_estimated_hours - compatible_request :get, :index, agile_query_params.merge(c: %w(story_points estimated_hours)) - should_show_estimated_hours - should_not_show_story_points - end - - def test_index_for_estimated_values_with_estimate_units - with_agile_settings 'estimate_units' => RedmineAgile::ESTIMATE_STORY_POINTS do - prepare_issues_with_points_and_estimated_hours - compatible_request :get, :index - should_not_show_estimated_hours - should_not_show_story_points - end - end - - def test_index_for_estimated_values_with_estimate_units_and_enabled_options - with_agile_settings 'estimate_units' => RedmineAgile::ESTIMATE_STORY_POINTS, 'story_points_on' => '1' do - prepare_issues_with_points_and_estimated_hours - compatible_request :get, :index, agile_query_params.merge(c: %w(story_points estimated_hours)) - should_show_estimated_hours - should_show_story_points - end - end - - def test_index_for_estimated_values_with_story_points_off - with_agile_settings 'story_points_on' => '0' do - prepare_issues_with_points_and_estimated_hours - compatible_request :get, :index - should_not_show_estimated_hours - should_not_show_story_points - end - ensure - Setting.plugin_redmine_agile.delete('story_points_on') - end - - def test_index_for_estimated_values_with_story_points_off_and_enabled_options - with_agile_settings 'story_points_on' => '0' do - prepare_issues_with_points_and_estimated_hours - compatible_request :get, :index, agile_query_params.merge(c: %w(story_points estimated_hours)) - should_show_estimated_hours - should_not_show_story_points - end - ensure - Setting.plugin_redmine_agile.delete('story_points_on') - end - - def test_index_for_estimated_values_with_story_points_on - with_agile_settings 'story_points_on' => '1' do - prepare_issues_with_points_and_estimated_hours - compatible_request :get, :index - should_not_show_estimated_hours - should_not_show_story_points - end - ensure - Setting.plugin_redmine_agile.delete('story_points_on') - end - - def test_index_for_estimated_values_with_story_points_on_and_enabled_options - with_agile_settings 'story_points_on' => '1' do - prepare_issues_with_points_and_estimated_hours - compatible_request :get, :index, agile_query_params.merge(c: %w(story_points estimated_hours)) - should_show_estimated_hours - should_show_story_points - end - ensure - Setting.plugin_redmine_agile.delete('story_points_on') - end - - def test_quick_add_comment_button - with_agile_settings 'allow_inline_comments' => 1 do - compatible_request :get, :index, agile_query_params - assert_response :success - assert_select '.quick-edit-card img[alt="Comment"]' - end - end if Redmine::VERSION.to_s > '2.4' - - def test_quick_add_comment_form - compatible_request :get, :inline_comment, :id => @project_1.issues.open.first - assert_response :success - assert_select 'textarea' - assert_select 'button' - end if Redmine::VERSION.to_s > '2.4' - - def test_quick_add_comment_update - issue = @project_1.issues.open.first - compatible_request :put, :update, :issue => { :notes => 'new comment!!!' }, :id => issue - assert_response :success - assert_select '.last_comment', :text => 'new comment!!!' - end if Redmine::VERSION.to_s > '2.4' - - - def test_card_for_new_issue - with_agile_settings "allow_create_card" => 1 do - statuses = IssueStatus.all - compatible_request :get, :index, { - "set_filter"=>"1", :project_id => @project_1, :f_status => statuses.map(&:id) } - assert_select '.add-issue input.new-card__input', 0 - end - end if Redmine::VERSION.to_s > '2.4' - - - def test_on_auto_assign_on_move - with_agile_settings 'auto_assign_on_move' => '1' do - @request.session[:user_id] = 2 - issue = Issue.find(1) - - user = issue.project.users.first - @request.session[:user_id] = user.id - - assert_nil issue.assigned_to - compatible_request :put, :update, :issue => { :status_id => 2 }, :id => 1 - issue.reload - assert_response :success - assert_equal 2, issue.status_id - assert_equal user, issue.assigned_to - end - end - - def test_off_auto_assign_on_move - with_agile_settings 'auto_assign_on_move' => '0' do - issue = Issue.find(1) - - user = issue.project.users.first - @request.session[:user_id] = user.id - - assert_nil issue.assigned_to - compatible_request :put, :update, :issue => { :status_id => 2 }, :id => 1 - issue.reload - assert_response :success - assert_equal 2, issue.status_id - assert_nil issue.assigned_to - end - end - - def test_off_auto_assign_on_move_by_sorting - with_agile_settings 'auto_assign_on_move' => '1' do - @request.session[:user_id] = 2 - issue = Issue.find(1) - - user = issue.project.users.first - @request.session[:user_id] = user.id - - assert_nil issue.assigned_to - compatible_request :put, :update, :issue => { :status_id => issue.status_id }, :id => 1 - issue.reload - assert_response :success - assert_nil issue.assigned_to - end - end - - def test_option_for_select_current_version - @request.session[:user_id] = 1 - compatible_request :get, :index, :project_id => @project_1 - assert_response :success - assert_match 'current_version', response.body - end if Redmine::VERSION.to_s > '2.4' - - def test_filter_by_current_version - @request.session[:user_id] = 1 - compatible_request :get, :index, :project_id => @project_1, 'v' => { 'fixed_version_id' => ['current_version'] }, - 'set_filter' => '1', 'f' => ['fixed_version_id'], - 'op' => { 'fixed_version_id' => '=' } - assert_response :success - current_version = @project_1.shared_versions.order(:effective_date).first - issue = @project_1.issues.first - issue.fixed_version = current_version - issue.save - assert agile_issues_in_list.all? { |i| i.fixed_version == current_version } - end if Redmine::VERSION.to_s > '2.4' - - def test_filter_by_current_version_closed - @request.session[:user_id] = 1 - current_version = @project_1.shared_versions.order(:effective_date).first - current_version.status = 'closed' - current_version.save - - compatible_request :get, :index, :project_id => @project_1, 'v' => { 'fixed_version_id' => ['current_version'] }, - 'set_filter' => '1', 'f' => ['fixed_version_id'], - 'op' => { 'fixed_version_id' => '=' } - assert_response :success - issue = @project_1.issues.first - issue.fixed_version = current_version - issue.save - assert agile_issues_in_list.all?{ |i| i.fixed_version != current_version } - # check set filter for current version - assert_match 'addFilter("fixed_version_id", "=", ["current_version"])', response.body - end if Redmine::VERSION.to_s > '2.4' - - private - - def agile_query_params - { :set_filter => '1', :f => ['status_id', ''], :op => { :status_id => 'o' }, :c => ['tracker', 'assigned_to'], :project_id => 'ecookbook' } - end - - def create_issue_relation - IssueRelation.delete_all - IssueRelation.create!(:relation_type => 'relates', :issue_from => Issue.find(1), :issue_to => Issue.find(7)) - IssueRelation.create!(:relation_type => 'relates', :issue_from => Issue.find(8), :issue_to => Issue.find(1)) - IssueRelation.create!(:relation_type => 'blocks', :issue_from => Issue.find(1), :issue_to => Issue.find(11)) - IssueRelation.create!(:relation_type => 'blocks', :issue_from => Issue.find(12), :issue_to => Issue.find(2)) - end - - def issue_with_checklist - issue1 = Issue.find(1) - chk1 = issue1.checklists.create(:subject => 'TEST1', :position => 1) - chk2 = issue1.checklists.create(:subject => 'TEST2', :position => 2) - issue1 - end if RedmineAgile.use_checklist? - - def prepare_issues_with_points_and_estimated_hours - issues = @project_1.issues.open.first(3) - issues.each do |issue| - issue.agile_data.story_points = issue.id * 10 - issue.estimated_hours = issue.id * 2 - issue.save - end - end - - def should_show_estimated_hours - assert_select "th span.hours", text: /.+h/ - assert_select ".issue-card span.fields p.issue-id span.hours", text: /.+h/ - end - - def should_not_show_estimated_hours - assert_select "th span.hours", { count: 0, text: /.+h/ } - assert_select ".issue-card span.fields p.issue-id span.hours", { count: 0, text: /.+h/ } - end - - def should_show_story_points - assert_select "th span.hours", text: /.+sp/ - assert_select ".issue-card span.fields p.issue-id span.hours", text: /.+sp/ - end - - def should_not_show_story_points - assert_select "th span.hours", { count: 0, text: /.+sp/ } - assert_select ".issue-card span.fields p.issue-id span.hours", { count: 0, text: /.+sp/ } - end -end diff --git a/plugins/redmine_agile/test/functional/agile_charts_controller_test.rb b/plugins/redmine_agile/test/functional/agile_charts_controller_test.rb deleted file mode 100644 index 0752633..0000000 --- a/plugins/redmine_agile/test/functional/agile_charts_controller_test.rb +++ /dev/null @@ -1,195 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -class AgileChartsControllerTest < ActionController::TestCase - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers, - :time_entries, - :journals, - :journal_details, - :queries - - def setup - @request.session[:user_id] = 1 - @project = Project.find(1) - @issue = @project.issues.first - - EnabledModule.create(project: @project, name: 'agile') - - @charts = RedmineAgile::Charts::AGILE_CHARTS.keys - @charts_with_units = RedmineAgile::Charts::CHARTS_WITH_UNITS - end - - def test_get_show - should_get_show - should_get_show project_id: @project.identifier - end - - def test_get_show_with_period - should_get_show({ f: ['issue_id', ''], op: { 'issue_id' => '*' } }) - should_get_show({ f: ['issue_id', ''], op: { 'issue_id' => '*' }, project_id: @project.identifier }) - end - - def test_charts_by_default_params - @charts.each { |chart| check_chart(chart: chart, project_id: @project.identifier) } - end - - def test_charts_with_chart_unit - @charts_with_units.each do |chart| - RedmineAgile::Charts::CHART_UNITS.each do |chart_unit, label| - check_chart chart: chart, project_id: @project.identifier, chart_unit: chart_unit - end - end - end - - def test_charts_by_different_time_intervals - @charts.each do |chart| - RedmineAgile::AgileChart::TIME_INTERVALS.each do |interval| - check_chart chart: chart, project_id: @project.identifier, interval_size: interval - end - end - end - - def test_charts_by_different_periods_and_time_intervals - @charts.each do |chart| - RedmineAgile::AgileChart::TIME_INTERVALS.each do |interval| - params = { - chart: chart, - project_id: @project.identifier, - interval_size: interval, - set_filter: 1, - f: ['chart_period'] - } - - check_chart params.merge(op: { chart_period: '=' }, v: { chart_period: ['2014-01-01'] }) - check_chart params.merge(op: { chart_period: '>=' }, v: { chart_period: ['2014-01-01'] }) - check_chart params.merge(op: { chart_period: '<=' }, v: { chart_period: ['2019-01-01'] }) - check_chart params.merge(op: { chart_period: '><' }, v: { chart_period: ['2014-01-01', '2018-12-31'] }) - check_chart params.merge(op: { chart_period: '>t-' }, v: { chart_period: [99] }) - check_chart params.merge(op: { chart_period: '<t-' }, v: { chart_period: [99] }) - check_chart params.merge(op: { chart_period: '><t-' }, v: { chart_period: [99] }) - check_chart params.merge(op: { chart_period: 't-' }, v: { chart_period: [99] }) - check_chart params.merge(op: { chart_period: 't' }) - check_chart params.merge(op: { chart_period: 'ld' }) - check_chart params.merge(op: { chart_period: 'w' }) - check_chart params.merge(op: { chart_period: 'lw' }) - check_chart params.merge(op: { chart_period: 'l2w' }) - check_chart params.merge(op: { chart_period: 'm' }) - check_chart params.merge(op: { chart_period: 'lm' }) - check_chart params.merge(op: { chart_period: 'y' }) - check_chart params.merge(op: { chart_period: '!*' }) - check_chart params.merge(op: { chart_period: '*' }) - end - end - end - - def test_render_charts - @charts.each do |chart| - should_get_render_chart chart: chart, chart_unit: 'issues' - end - end - - def test_charts_with_version - @charts.each do |chart| - should_get_render_chart chart: chart, version_id: 2 - should_get_render_chart chart: chart, version_id: 2, project_id: @project.identifier - end - end - - def test_charts_with_version_and_chart_unit - @charts_with_units.each do |chart| - RedmineAgile::Charts::CHART_UNITS.each do |chart_unit, label| - should_get_render_chart chart: chart, version_id: 2, chart_unit: chart_unit - end - end - end - - def test_issues_burndown_chart_when_first_issue_later_then_due_date - new_version = Version.create!(name: 'Some new vesion', effective_date: (Date.today - 10.days), project_id: @project.id) - issue = Issue.create!( - project_id: @project.id, - tracker_id: 1, - subject: 'test_issues_burndown_chart_when_first_issue_later_then_due_date', - author_id: 2, - start_date: Date.today - ) - new_version.fixed_issues << issue.reload - - should_get_render_chart chart: RedmineAgile::Charts::BURNDOWN_CHART, project_id: @project.identifier, version_id: new_version.id - end - - def test_get_show_chart_with_open_target_version - current_version = @issue.fixed_version - @issue.update(fixed_version: Version.open.first) - - should_get_render_chart project_id: @project.identifier, chart: 'burndown_chart', - f: ['version_status'], - op: { 'version_status' => '=' }, - v: { 'version_status' => ['open'] } - ensure - @issue.update(fixed_version: current_version) - end - - private - - def should_get_show(parameters = {}) - compatible_request :get, :show, parameters - assert_response :success - assert_select 'canvas#agile-chart', 1 - end - - def should_get_render_chart(parameters = {}) - compatible_xhr_request :get, :render_chart, parameters - assert_response :success - assert_match 'application/json', response.content_type - - json = ActiveSupport::JSON.decode(response.body) - assert_kind_of Hash, json - assert_equal parameters[:chart], json['chart'] - if parameters[:chart_unit] - assert_equal parameters[:chart_unit], json['chart_unit'] - end - end - - def check_chart(parameters = {}) - should_get_show parameters - should_get_render_chart parameters.slice(:chart, :project_id) - end -end diff --git a/plugins/redmine_agile/test/functional/agile_journal_details_controller_test.rb b/plugins/redmine_agile/test/functional/agile_journal_details_controller_test.rb deleted file mode 100644 index 5d3db81..0000000 --- a/plugins/redmine_agile/test/functional/agile_journal_details_controller_test.rb +++ /dev/null @@ -1,95 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -class AgileJournalDetailsControllerTest < ActionController::TestCase - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :issue_relations, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers, - :time_entries, - :journals, - :journal_details, - :queries - fixtures :email_addresses if Redmine::VERSION.to_s > '3.0' - - def setup - @project = Project.find(1) - EnabledModule.create(:project => @project, :name => 'agile') - @request.session[:user_id] = 1 - end - - def test_get_done_ratio - compatible_request :get, :done_ratio, issue_id: 1 - assert_response :success - assert_match /% Done/, @response.body - assert_match /Bug #1/, @response.body - assert_select 'table.progress', 2 - end - - def test_get_status - compatible_request :get, :status, issue_id: 1 - assert_response :success - assert_match /Issue statuses/, @response.body - assert_match /Bug #1/, @response.body - assert_select '.list td.name', 2 - end - - def test_get_status_with_group - compatible_request :get, :status, issue_id: 1, group_by: 'status' - assert_response :success - assert_match /Issue statuses/, @response.body - assert_match /Bug #1/, @response.body - assert_select 'tr.group' - end - - def test_get_status_csv - compatible_request :get, :status, issue_id: 1, format: :csv - assert_response :success - assert_match 'text/csv', @response.content_type - assert_match /#,Created/, @response.body - end - - def test_get_done_assignee - compatible_request :get, :assignee, issue_id: 1 - assert_response :success - assert_match /Assignee/, @response.body - assert_match /Bug #1/, @response.body - assert_select '.list td a.user', 1 - end -end diff --git a/plugins/redmine_agile/test/functional/issues_controller_test.rb b/plugins/redmine_agile/test/functional/issues_controller_test.rb deleted file mode 100644 index f124644..0000000 --- a/plugins/redmine_agile/test/functional/issues_controller_test.rb +++ /dev/null @@ -1,125 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -class IssuesControllerTest < ActionController::TestCase - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers, - :time_entries, - :journals, - :journal_details, - :queries - - def setup - @project_1 = Project.find(1) - @project_2 = Project.find(5) - EnabledModule.create(:project => @project_1, :name => 'agile') - EnabledModule.create(:project => @project_2, :name => 'agile') - @request.session[:user_id] = 1 - end - - def test_new_issue_with_sp_value - with_agile_settings 'estimate_units' => 'story_points', 'story_points_on' => '1' do - compatible_request :get, :new, :project_id => 1 - assert_response :success - assert_select 'input#issue_agile_data_attributes_story_points' - end - end - - def test_new_issue_without_sp_value - with_agile_settings 'estimate_units' => 'hours' do - compatible_request :get, :new, :project_id => 1 - assert_response :success - assert_select 'input#issue_agile_data_attributes_story_points', :count => 0 - end - end - - def test_create_issue_with_sp_value - with_agile_settings 'estimate_units' => 'story_points', 'story_points_on' => '1' do - assert_difference 'Issue.count' do - compatible_request :post, :create, :project_id => 1, :issue => { - :subject => 'issue with sp', - :tracker_id => 3, - :status_id => 1, - :priority_id => IssuePriority.first.id, - :agile_data_attributes => { :story_points => 50 } - } - end - issue = Issue.last - assert_equal 'issue with sp', issue.subject - assert_equal 50, issue.story_points - end - end - - def test_post_issue_journal_story_points - with_agile_settings 'estimate_units' => 'story_points', 'story_points_on' => '1' do - compatible_request :put, :update, :id => 1, :issue => { :agile_data_attributes => { :story_points => 100 } } - issue = Issue.find(1) - assert_equal 100, issue.story_points - sp_history = JournalDetail.where(:property => 'attr', :prop_key => 'story_points', :journal_id => issue.journals).last - assert sp_history - assert_equal 100, sp_history.value.to_i - end - end - - def test_show_issue_with_story_points - with_agile_settings 'estimate_units' => 'story_points', 'story_points_on' => '1' do - compatible_request :get, :show, :id => 1 - assert_response :success - assert_select '#issue-form .attributes', :text => /Story points/, :count => 1 - end - end - - def test_show_issue_with_order_by_story_points - session[:issue_query] = { :project_id => Issue.find(1).project_id, - :filters => { 'status_id' => { :operator => 'o', :values => [''] } }, - :group_by => '', - :column_names => [:tracker, :status, :story_points], - :totalable_names => [], - :sort => [['story_points', 'asc'], ['id', 'desc']] - } - with_agile_settings 'estimate_units' => 'story_points', 'story_points_on' => '1' do - compatible_request :get, :show, :id => 1 - assert_response :success - assert_select '#issue-form .attributes', :text => /Story points/, :count => 1 - end - ensure - session[:issue_query] = {} - end -end diff --git a/plugins/redmine_agile/test/functional/projects_controller_test.rb b/plugins/redmine_agile/test/functional/projects_controller_test.rb deleted file mode 100644 index 67d3a32..0000000 --- a/plugins/redmine_agile/test/functional/projects_controller_test.rb +++ /dev/null @@ -1,39 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -class ProjectsControllerTest < ActionController::TestCase - fixtures :projects, - :users, - :roles, - :members, - :member_roles - - - def setup - @project_1 = Project.find(1) - @project_2 = Project.find(5) - EnabledModule.create(:project => @project_1, :name => 'agile') - EnabledModule.create(:project => @project_2, :name => 'agile') - @request.session[:user_id] = 1 - end -end diff --git a/plugins/redmine_agile/test/functional/users_controller_test.rb b/plugins/redmine_agile/test/functional/users_controller_test.rb deleted file mode 100644 index 71aa90c..0000000 --- a/plugins/redmine_agile/test/functional/users_controller_test.rb +++ /dev/null @@ -1,36 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -class UsersControllerTest < ActionController::TestCase - fixtures :users, - :roles, - :members, - :member_roles - - fixtures :email_addresses if Redmine::VERSION.to_s > '3.0' - - def setup - @user = User.find(1) - @request.session[:user_id] = @user.id - end -end diff --git a/plugins/redmine_agile/test/integration/api_test/agile_data_test.rb b/plugins/redmine_agile/test/integration/api_test/agile_data_test.rb deleted file mode 100644 index bae9bcd..0000000 --- a/plugins/redmine_agile/test/integration/api_test/agile_data_test.rb +++ /dev/null @@ -1,77 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path(File.dirname(__FILE__) + '/../../test_helper') - -class Redmine::ApiTest::AgileDataTest < ActiveRecord::VERSION::MAJOR >= 4 ? Redmine::ApiTest::Base : ActionController::IntegrationTest - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers, - :time_entries, - :journals, - :journal_details, - :queries - - RedmineAgile::TestCase.create_fixtures(Redmine::Plugin.find(:redmine_agile).directory + '/test/fixtures/', [:agile_data]) - - def setup - Setting.rest_api_enabled = '1' - EnabledModule.create(:project => Project.find(1), :name => 'agile') - RedmineAgile::TestCase.prepare - end - - test 'GET agile_data' do - if ActiveRecord::VERSION::MAJOR < 4 - Redmine::ApiTest::Base.should_allow_api_authentication(:get, '/issues/1/agile_data.xml') - end - compatible_api_request :get, '/issues/1/agile_data.xml', {}, credentials('admin') - - assert_match 'application/xml', @response.content_type - assert_equal '200', @response.code - end - - test 'GET missied id' do - missied_id = Issue.order(:id).last.id - if ActiveRecord::VERSION::MAJOR < 4 - Redmine::ApiTest::Base.should_allow_api_authentication(:get, "/issues/#{missied_id}/agile_data.xml") - end - compatible_api_request :get, "/issues/#{missied_id}/agile_data.xml", {}, credentials('admin') - - assert_match 'application/xml', @response.content_type - assert ['401', '403'].include?(@response.code) - end -end diff --git a/plugins/redmine_agile/test/integration/common_views_test.rb b/plugins/redmine_agile/test/integration/common_views_test.rb deleted file mode 100644 index eb3936c..0000000 --- a/plugins/redmine_agile/test/integration/common_views_test.rb +++ /dev/null @@ -1,87 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) -require File.expand_path(File.dirname(__FILE__) + '/../../../../test/test_helper') - -class RedmineAgile::CommonViewsTest < ActionDispatch::IntegrationTest - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers, - :time_entries, - :journals, - :journal_details, - :queries - - def setup - @project_1 = Project.find(1) - EnabledModule.create(:project => @project_1, :name => 'agile') - EnabledModule.create(:project => @project_1, :name => 'gantt') - EnabledModule.create(:project => @project_1, :name => 'calendar') - end - - test 'View issues' do - log_user('admin', 'admin') - compatible_request :get, '/issues' - assert_response :success - end - - test 'View Gantt chart' do - log_user('admin', 'admin') - compatible_request :get, '/projects/ecookbook/issues/gantt' - assert_response :success - end - - test 'View Calendar' do - log_user('admin', 'admin') - compatible_request :get, '/projects/ecookbook/issues/calendar' - assert_response :success - end - - test 'View agile settings' do - log_user('admin', 'admin') - compatible_request :get, '/settings/plugin/redmine_agile' - assert_response :success - end - - test 'View version' do - log_user('admin', 'admin') - compatible_request :get, '/versions/2' - assert_response :success - end - -end diff --git a/plugins/redmine_agile/test/test_helper.rb b/plugins/redmine_agile/test/test_helper.rb deleted file mode 100644 index 73e3b83..0000000 --- a/plugins/redmine_agile/test/test_helper.rb +++ /dev/null @@ -1,368 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -# Load the Redmine helper -require File.expand_path(File.dirname(__FILE__) + '/../../../test/test_helper') - -def with_agile_settings(options, &block) - saved_settings = options.keys.inject({}) do |h, k| - h[k] = case Setting.plugin_redmine_agile[k] - when Symbol, false, true, nil - Setting.plugin_redmine_agile[k] - else - Setting.plugin_redmine_agile[k].dup - end - h - end - options.each {|k, v| Setting.plugin_redmine_agile[k] = v} - yield -ensure - saved_settings.each {|k, v| Setting.plugin_redmine_agile[k] = v} if saved_settings -end - -def log_user(login, password) - User.anonymous - compatible_request :get, '/logout' - compatible_request :get, '/login' - assert_nil session[:user_id] - assert_response :success - compatible_request :post, '/login', :username => login, :password => password - assert_equal login, User.find(session[:user_id]).login -end - -def wait_for_ajax - counter = 0 - while page.execute_script('return $.active').to_i > 0 - counter += 1 - sleep(0.1) - raise 'AJAX request took longer than 5 seconds.' if counter >= 50 - end -end - -def credentials(user, password=nil) - {'HTTP_AUTHORIZATION' => ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user)} -end - -module RedmineAgile - module TestHelper - def compatible_request(type, action, parameters = {}) - return send(type, action, parameters) if Redmine::VERSION.to_s < '3.5' && Redmine::VERSION::BRANCH == 'stable' - send(type, action, :params => parameters) - end - - def compatible_xhr_request(type, action, parameters = {}) - return xhr type, action, parameters if Redmine::VERSION.to_s < '3.5' && Redmine::VERSION::BRANCH == 'stable' - send(type, action, :params => parameters, :xhr => true) - end - - def compatible_api_request(type, action, parameters = {}, headers = {}) - return send(type, action, :params => parameters, :headers => headers) if Rails.version >= '5.1' - send(type, action, parameters, headers) - end - - def agile_issues_in_list - ids = css_select('p.issue-id input').map { |tag| tag.to_s.to_s[/.*?value=\"(\d+)".*?/, 1] }.map(&:to_i) - Issue.where(:id => ids).sort_by { |issue| ids.index(issue.id) } - end - end - - module Demo - # create_issue(10.days.ago, 4.days.ago, version) - # 100.times{|i| create_issue(100.days.ago + i, 90.days.ago + i, version)} - class << self - def create_issue(from, to, options={}) - version = options[:version] || Version.last - tracker = options[:tracker] || version.project.trackers.select{|t| t.issue_statuses.any?}.sample - return false unless tracker - status = options[:status] || tracker.issue_statuses.sample - issue = Issue.create(:subject => "New issue #{rand(1000)}", - :fixed_version => version, - :project => version.project, - :tracker => tracker, - :start_date => from, - :created_on => from, - :updated_on => to, - :due_date => to, - :closed_on => (status.is_closed? ? to : nil), - :status => status, - :author => version.project.members.map(&:user).flatten.sample) - end - - def change_issue_done_ratio(issue, change_date, value) - # journal = issue.init_journal(User.current) - issue.done_ratio = value - issue.save - issue.update(:updated_on => change_date) - Journal.last.update(:created_on => change_date) - end - - def close_issue(issue, closed_on) - journal = issue.init_journal(User.current) - done_status = IssueStatus.where(:name => "Closed", :is_closed => true).first - in_status = IssueStatus.where(:name => "In progress", :is_closed => false) - days_count = (issue.due_date - issue.created_on).to_i - change_date = issue.created_on - change_date = change_date + rand((issue.due_date - days_count).to_i) - issue.update(:status_id => in_status.id, :updated_on => change_date) - journal.update(:created_on => change_date) - change_date = change_date + rand((issue.due_date - days_count).to_i) - issue.update(:status_id => done_status.id, :updated_on => change_date) - journal.update(:created_on => change_date) - issue - end - - def create_version_issue(from, to, version, done_ratio=[]) - to = from + 1 if to < from - issue = create_issue(from, to, :version => version, :status => IssueStatus.where(:name => "New", :is_closed => false).first) - days_count = (to - from).to_i - if done_ratio.empty? - change_issue_done_ratio(issue, from + rand(days_count), rand(100)) - change_issue_done_ratio(issue.reload, to.to_time - 2.hours , 100) - else - change_date = from - done_ratio.each do |ratio| - change_date = change_date + rand((to - change_date).to_i) - change_issue_done_ratio(issue, change_date, ratio) - end - end - end - - # create_version_issue("2012-03-10".to_date, "2012-03-14".to_date, version) - # create_version_issue("2012-03-10".to_date, "2012-03-14".to_date, version, done_ratio=[30, 100]) - - end - end - - def self.create_issues - [ # BackLog - { - :project_id => 2, - :priority_id => 1, - :subject => "Issue 100", - :id => 100, - :fixed_version_id => 7, - :category_id => 1, - :description => "Unable to print recipes", - :tracker_id => 1, - :assigned_to_id => 1, - :author_id => 1, - :status_id => 4, - :start_date => 1.day.ago.to_date.to_s(:db), - :due_date => 10.day.from_now.to_date.to_s(:db), - :root_id => 1, - :lock_version => 3, - :estimated_hours => 3, - :agile_data_attributes => { :story_points => 10 } - }, - { - :project_id => 2, - :priority_id => 1, - :subject => "Issue 101", - :id => 101, - :fixed_version_id => 7, - :category_id => 3, - :description => "Unable to print recipes", - :tracker_id => 2, - :assigned_to_id => 3, - :author_id => 3, - :status_id => 3, - :start_date => 1.day.ago.to_date.to_s(:db), - :due_date => 10.day.from_now.to_date.to_s(:db), - :root_id => 1, - :lock_version => 3, - :estimated_hours => 1, - }, - { - :project_id => 2, - :priority_id => 3, - :subject => "Issue 102", - :id => 102, - :fixed_version_id => 7, - :category_id => 1, - :description => "Unable to print recipes", - :tracker_id => 3, - :assigned_to_id => 2, - :author_id => 3, - :status_id => 2, - :start_date => 1.day.ago.to_date.to_s(:db), - :due_date => 10.day.from_now.to_date.to_s(:db), - :root_id => 1, - :lock_version => 3, - :estimated_hours => 12 - }, - { - :project_id => 2, - :priority_id => 3, - :subject => "Issue 103", - :id => 103, - :fixed_version_id => 7, - :category_id => 1, - :description => "Unable to print recipes", - :tracker_id => 1, - :assigned_to_id => 2, - :author_id => 1, - :status_id => 1, - :start_date => 1.day.ago.to_date.to_s(:db), - :due_date => 10.day.from_now.to_date.to_s(:db), - :root_id => 1, - :lock_version => 3, - :estimated_hours => 55, - }, - # Current Version - { - :project_id => 2, - :priority_id => 2, - :subject => "Issue 104", - :id => 104, - :fixed_version_id => 5, - :category_id => 3, - :description => "Unable to print recipes", - :tracker_id => 2, - :assigned_to_id => nil, - :author_id => 1, - :status_id => 4, - :start_date => 1.day.ago.to_date.to_s(:db), - :due_date => 10.day.from_now.to_date.to_s(:db), - :root_id => 1, - :lock_version => 3, - :estimated_hours => 3, - }, - { - :project_id => 2, - :priority_id => 2, - :subject => "Issue 105", - :id => 105, - :fixed_version_id => 5, - :category_id => 3, - :description => "Unable to print recipes", - :tracker_id => 2, - :assigned_to_id => 2, - :author_id => 1, - :status_id => 5, - :start_date => 1.day.ago.to_date.to_s(:db), - :due_date => 10.day.from_now.to_date.to_s(:db), - :root_id => 1, - :lock_version => 3, - :estimated_hours => 4, - }, - { - :project_id => 2, - :priority_id => 2, - :subject => "Issue 106", - :id => 106, - :fixed_version_id => 5, - :category_id => 3, - :description => "Unable to print recipes", - :tracker_id => 2, - :assigned_to_id => 2, - :author_id => 1, - :status_id => 5, - :start_date => 1.day.ago.to_date.to_s(:db), - :due_date => 10.day.from_now.to_date.to_s(:db), - :root_id => 1, - :lock_version => 3, - :estimated_hours => 8, - }, - # No Version - { - :project_id => 2, - :priority_id => 2, - :subject => "Blaa", - :id => 107, - # fixed_version_id => - :category_id => 3, - :description => "Unable to print recipes", - :tracker_id => 2, - :assigned_to_id => 2, - :author_id => 1, - :status_id => 4, - :start_date => 1.day.ago.to_date.to_s(:db), - :due_date => 10.day.from_now.to_date.to_s(:db), - :root_id => 1, - :lock_version => 3, - :estimated_hours => 3, - }, - { - :project_id => 2, - :priority_id => 2, - :subject => "No Version Issue 108", - :id => 108, - # fixed_version_id => - :category_id => 3, - :description => "No Version Issue 108", - :tracker_id => 2, - :assigned_to_id => 2, - :author_id => 1, - :status_id => 5, - :start_date => 1.day.ago.to_date.to_s(:db), - :due_date => 10.day.from_now.to_date.to_s(:db), - :root_id => 1, - :lock_version => 3, - :estimated_hours => 4 - }, - { - :project_id => 2, - :priority_id => 2, - :subject => "Blaaa", - :id => 109, - # fixed_version_id => - :category_id => 3, - :description => "Unable to print recipes", - :tracker_id => 2, - :assigned_to_id => 2, - :author_id => 1, - :status_id => 5, - :start_date => 1.day.ago.to_date.to_s(:db), - :due_date => 10.day.from_now.to_date.to_s(:db), - :root_id => 1, - :lock_version => 3, - :estimated_hours => 8 - }].each do |issue| - i = Issue.new(issue) - i.id = issue[:id] - i.save - end - - end - -end - -class RedmineAgile::TestCase - def self.create_fixtures(fixtures_directory, table_names, class_names = {}) - if ActiveRecord::VERSION::MAJOR >= 4 - ActiveRecord::FixtureSet.create_fixtures(fixtures_directory, table_names, class_names = {}) - else - ActiveRecord::Fixtures.create_fixtures(fixtures_directory, table_names, class_names = {}) - end - end - - def self.prepare - Role.find(1, 2, 3, 4).each do |r| - r.permissions << :manage_public_agile_queries - r.permissions << :add_agile_queries - r.permissions << :view_agile_queries - r.permissions << :agile_versions - r.save - end - end -end - -include RedmineAgile::TestHelper diff --git a/plugins/redmine_agile/test/ui/agile_board_ui_test.rb b/plugins/redmine_agile/test/ui/agile_board_ui_test.rb deleted file mode 100644 index b27389f..0000000 --- a/plugins/redmine_agile/test/ui/agile_board_ui_test.rb +++ /dev/null @@ -1,99 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) -if ENV["UI_TESTS"] - - require File.expand_path('../../../../../test/ui/base', __FILE__) - - class Redmine::UiTest::AgileBoardUiTest < Redmine::UiTest::Base - fixtures :projects, :users, :email_addresses, :roles, :members, :member_roles, - :trackers, :projects_trackers, :enabled_modules, :issue_statuses, :issues, - :enumerations, :custom_fields, :custom_values, :custom_fields_trackers, - :watchers, :journals, :journal_details - - def setup - project = Project.find(1) - EnabledModule.create(:project => project, :name => 'agile') - Issue.find_each do |issue| - issue.agile_data.position = issue.id - issue.agile_data.save! - end - end - - def test_move_issue_to_resolved_column - log_user('admin', 'admin') - visit '/projects/ecookbook/agile/board' - - first_issue = Issue.first - issue = first(:css, '.issue-card[data-id="1"]') - feedback_col = first(:css, '.issue-status-col[data-id="3"]') - assert_equal 'New', first_issue.status.name - issue.drag_to(feedback_col) - wait_for_ajax - assert_equal 'Resolved', first_issue.reload.status.name - end - - def test_reorder_issue_on_board - log_user('admin', 'admin') - visit '/projects/ecookbook/agile/board' - - first_issue = all(:css, '.issue-status-col[data-id="1"] .issue-card').first - last_issue = all(:css, '.issue-status-col[data-id="1"] .issue-card').last - issue = Issue.find(last_issue['data-id'].to_i) - assert_not_equal 0, issue.reload.agile_data.position - last_issue.drag_to(first_issue) - wait_for_ajax - assert_equal 0, issue.reload.agile_data.position - end - - def test_assign_member_on_issue - log_user('admin', 'admin') - visit '/projects/ecookbook/agile/board' - - first_issue = all(:css, '.issue-status-col[data-id="1"] .issue-card').first - last_user = all(:css, '.assignable-user').last - issue = Issue.find(first_issue['data-id'].to_i) - user = User.find(last_user['data-id'].to_i) - assert_nil issue.reload.assigned_to - last_user.drag_to(first_issue) - wait_for_ajax - assert_equal user, issue.reload.assigned_to - end - - def test_add_comment_to_issue - with_agile_settings 'allow_inline_comments' => 1 do - log_user('admin', 'admin') - visit '/projects/ecookbook/agile/board' - - first_issue = all(:css, '.issue-status-col[data-id="1"] .issue-card').first - issue = Issue.find(first_issue['data-id'].to_i) - page.driver.browser.mouse.move_to(first_issue.native) - all(:css, '.issue-status-col[data-id="1"] .issue-card .quick-edit-card a').first.click - wait_for_ajax - fill_in 'issue[notes]', :with => 'Test quick comment' - click_button('Submit') - wait_for_ajax - assert_equal 'Test quick comment', issue.journals.last.notes - end - end - end -end diff --git a/plugins/redmine_agile/test/unit/agile_charts_query_test.rb b/plugins/redmine_agile/test/unit/agile_charts_query_test.rb deleted file mode 100644 index a9fde49..0000000 --- a/plugins/redmine_agile/test/unit/agile_charts_query_test.rb +++ /dev/null @@ -1,68 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -class AgileChartsQueryTest < ActiveSupport::TestCase - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issue_statuses, - :issues, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers, - :time_entries, - :journals, - :journal_details, - :queries - - def setup - RedmineAgile.create_issues - end - - def test_query_chart_period_statement_with_between - data = [ - [[(Date.today - 5.days).to_s, (Date.today - 1.days).to_s], [(Date.today - 6.days).to_s, (Date.today - 1.days).to_s]], - [[(Date.today - 5.days).to_s, Date.today.to_s], [(Date.today - 6.days).to_s, Date.today.to_s]], - [[(Date.today - 5.days).to_s, (Date.today + 5.days).to_s], [(Date.today - 6.days).to_s, (Date.today + 5.days).to_s]], - [[Date.today.to_s, (Date.today + 5.days).to_s], [(Date.today - 1.days).to_s, (Date.today + 5.days).to_s]], - [['',''], [Date.today - 1.days, Date.today]] - ] - - data.each do |values, result| - hash = { f: ['chart_period'], op: { 'chart_period' => '><' }, v: { 'chart_period' => values } } - query = AgileChartsQuery.new(:name => '_').build_from_params(hash) - assert_equal "issues.chart_period > '#{result[0]} 23:59:59.999999' AND issues.chart_period <= '#{result[1]} 23:59:59.999999'", query.send(:chart_period_statement) - end - end -end diff --git a/plugins/redmine_agile/test/unit/agile_data_test.rb b/plugins/redmine_agile/test/unit/agile_data_test.rb deleted file mode 100644 index 13bf20a..0000000 --- a/plugins/redmine_agile/test/unit/agile_data_test.rb +++ /dev/null @@ -1,67 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -class AgileDataTest < ActiveSupport::TestCase - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers, - :time_entries, - :journals, - :journal_details, - :queries - - # Replace this with your real tests. - def test_save_color - issue = Issue.find(1) - issue.agile_data.position = 1 - assert issue.save - issue.reload - assert_equal 1, issue.agile_data.position - end - - def test_delete_color - issue = Issue.find(1) - issue.agile_data.position = 1 - assert issue.save - issue.reload - agile_data = issue.agile_data - assert issue.destroy - assert !AgileData.exists?(agile_data.id) - end -end diff --git a/plugins/redmine_agile/test/unit/charts/burndown_chart_test.rb b/plugins/redmine_agile/test/unit/charts/burndown_chart_test.rb deleted file mode 100644 index 9275edd..0000000 --- a/plugins/redmine_agile/test/unit/charts/burndown_chart_test.rb +++ /dev/null @@ -1,171 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../../test_helper', __FILE__) - -class BurndownChartTest < ActiveSupport::TestCase - fixtures :users, :projects, :trackers, :enumerations, :issue_statuses, :issue_categories - - def setup - @user = User.first - @tracker = Tracker.first - @project = Project.first_or_create(name: 'BurndownChartTest', identifier: 'burndowncharttest') - @project.trackers << @tracker unless @project.trackers.include?(@tracker) - @open_status = IssueStatus.where(is_closed: false).first - @closed_status = IssueStatus.where(is_closed: true).first - end - - def test_returned_data - chart_data_cases.each do |test_case| - test_case_issues = test_case[:issues].call - test_case[:inerval_data].each do |case_interval| - puts "BurndownChartTest case - #{case_interval[:name]}" - chart_data = RedmineAgile::BurndownChart.data(test_case_issues, case_interval[:options]) - assert_equal case_interval[:result], extract_values(chart_data) - end - test_case_issues.destroy_all - end - ensure - @project.issues.destroy_all - @project.destroy - end - - private - - def extract_values(chart_data) - { title: chart_data[:title], datasets: chart_data[:datasets].map { |data| data.slice(:type, :data, :label) } } - end - - def chart_data_cases - data_cases = [ - { - name: 'every month issues by issues', - issues: Proc.new { Issue.where(id: (1..12).map { |month| create_issue_data(month) }) }, - title: 'Issues burndown', - internals: { - day: { - dates: { date_from: Date.parse('2019-01-01'), date_to: Date.parse('2019-01-01'), interval_size: 'day' }, - result: [{ type: 'line', data: [12, 11], label: 'Actual'}, - { type: 'line', data: [12, 0], label: 'Ideal' }] - }, - month: { - dates: { date_from: Date.parse('2019-03-01'), date_to: Date.parse('2019-03-31'), interval_size: 'week' }, - result: [{ type: 'line', data: [10, 9, 9, 9, 9, 9], label: 'Actual' }, - { type: 'line', data: [10.0, 8.0, 6.0, 4.0, 2.0, 0], label: 'Ideal' }] - }, - year: { - dates: { date_from: Date.parse('2019-01-01'), date_to: Date.parse('2019-12-31'), interval_size: 'month' }, - result: [{ type: 'line', data: [12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1, 1], label: 'Actual' }, - { type: 'line', data: [12.0, 11.08, 10.15, 9.23, 8.31, 7.38, 6.46, 5.54, 4.62, 3.69, 2.77, 1.85, 0.92, 0], label: 'Ideal' }] - }, - between: { - dates: { date_from: Date.parse('2019-07-01'), date_to: Date.parse('2019-12-31'), interval_size: 'month' }, - result: [{ type: 'line', data: [6, 5, 4, 3, 2, 1, 1, 1], label: 'Actual' }, - { type: 'line', data: [6.0, 5.14, 4.29, 3.43, 2.57, 1.71, 0.86, 0], label: 'Ideal' }] - } - } - }, - { - name: 'every month issues by SP', - issues: Proc.new { Issue.where(id: (1..12).map { |month| create_issue_data(month) }) }, - title: 'Story points burndown', - internals: { - day: { - dates: { date_from: Date.parse('2018-12-31'), date_to: Date.parse('2019-01-01'), chart_unit: 'story_points', interval_size: 'day' }, - result: [{ type: 'line', data: [234.0, 231.0, 231.0], label: 'Actual'}, - { type: 'line', data: [234.0, 117.0, 0], label: 'Ideal' }] - }, - month: { - dates: { date_from: Date.parse('2019-03-01'), date_to: Date.parse('2019-03-31'), chart_unit: 'story_points', interval_size: 'week' }, - result: [{ type: 'line', data: [216.0, 216.0, 216.0, 216.0, 216.0, 216.0], label: 'Actual' }, - { type: 'line', data: [216.0, 172.8, 129.6, 86.4, 43.2, 0], label: 'Ideal' }] - }, - year: { - dates: { date_from: Date.parse('2019-01-01'), date_to: Date.parse('2019-12-31'), chart_unit: 'story_points', interval_size: 'month' }, - result: [{ type: 'line', data: [225.0, 225.0, 216.0, 204.0, 189.0, 171.0, 150.0, 126.0, 99.0, 69.0, 36.0, 36.0, 36.0, 36.0], label: 'Actual' }, - { type: 'line', data: [225.0, 207.69, 190.38, 173.08, 155.77, 138.46, 121.15, 103.85, 86.54, 69.23, 51.92, 34.62, 17.31, 0], label: 'Ideal' }] - }, - between: { - dates: { date_from: Date.parse('2019-07-01'), date_to: Date.parse('2019-12-31'), chart_unit: 'story_points', interval_size: 'month' }, - result: [{ type: 'line', data: [126.0, 126.0, 99.0, 69.0, 36.0, 36.0, 36.0, 36.0], label: 'Actual' }, - { type: 'line', data: [126.0, 108.0, 90.0, 72.0, 54.0, 36.0, 18.0, 0], label: 'Ideal' }] - } - } - }, - { - name: 'every month issues by Hours', - issues: Proc.new { Issue.where(id: (1..12).map { |month| create_issue_data(month) }) }, - title: 'Hours burndown', - internals: { - day: { - dates: { date_from: Date.parse('2018-12-31'), date_to: Date.parse('2019-01-01'), chart_unit: 'hours', interval_size: 'day' }, - result: [{ type: 'line', data: [156.0, 154.0, 154.0], label: 'Actual'}, - { type: 'line', data: [156.0, 78.0, 0], label: 'Ideal' }] - }, - month: { - dates: { date_from: Date.parse('2019-03-01'), date_to: Date.parse('2019-03-31'), chart_unit: 'hours', interval_size: 'week' }, - result: [{ type: 'line', data: [144.0, 144.0, 144.0, 144.0, 144.0, 144.0], label: 'Actual' }, - { type: 'line', data: [144.0, 115.2, 86.4, 57.6, 28.8, 0], label: 'Ideal' }] - }, - year: { - dates: { date_from: Date.parse('2019-01-01'), date_to: Date.parse('2019-12-31'), chart_unit: 'hours', interval_size: 'month' }, - result: [{ type: 'line', data: [150.0, 150.0, 144.0, 136.0, 126.0, 114.0, 100.0, 84.0, 66.0, 46.0, 24.0, 24.0, 24.0, 24.0], label: 'Actual' }, - { type: 'line', data: [150.0, 138.46, 126.92, 115.38, 103.85, 92.31, 80.77, 69.23, 57.69, 46.15, 34.62, 23.08, 11.54, 0], label: 'Ideal' }] - }, - between: { - dates: { date_from: Date.parse('2019-07-01'), date_to: Date.parse('2019-12-31'), chart_unit: 'hours', interval_size: 'month' }, - result: [{ type: 'line', data: [84.0, 84.0, 66.0, 46.0, 24.0, 24.0, 24.0, 24.0], label: 'Actual' }, - { type: 'line', data: [84.0, 72.0, 60.0, 48.0, 36.0, 24.0, 12.0, 0], label: 'Ideal' }] - } - } - } - ] - - test_cases = data_cases.map do |test_case| - { - issues: test_case[:issues], - inerval_data: test_case[:internals].map do |interval_name, interval_data| - { - name: [test_case[:name], 'interval', interval_name].join(' '), - options: { chart_unit: 'issues', interval_size: 'day' }.merge(interval_data[:dates]), - result: { title: test_case[:title], datasets: interval_data[:result] } - } - end - } - end - - test_cases - end - - def create_issue_data(month) - mstring = month.to_s.rjust(2, '0') - issue = Issue.create!(tracker: @tracker, - project: @project, - author: @user, - subject: "Issue ##{month}", - status: month != 12 ? @closed_status : @open_status, - estimated_hours: month * 2) - issue.reload - issue.create_agile_data(story_points: month * 3) - issue.update(created_on: "2019-01-01 09:00", closed_on: "2019-#{mstring}-01 11:00") - issue.id - end -end diff --git a/plugins/redmine_agile/test/unit/helpers/agile_boards_helper_test.rb b/plugins/redmine_agile/test/unit/helpers/agile_boards_helper_test.rb deleted file mode 100644 index accb368..0000000 --- a/plugins/redmine_agile/test/unit/helpers/agile_boards_helper_test.rb +++ /dev/null @@ -1,59 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmin Agile (redmine_agile) plugin, -# Agile board plugin for redmine -# -# Copyright (C) 2011-2021 RedmineUP -# http://www.redmineup.com/ -# -# redmine_agile 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 3 of the License, or -# (at your option) any later version. -# -# redmine_agile 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 redmine_agile. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../../test_helper', __FILE__) - -class AgileBoardsHelperTest < ActiveSupport::TestCase - fixtures :projects, :trackers, :issue_statuses, :issues, :issue_categories - - include ApplicationHelper - include AgileBoardsHelper - include CustomFieldsHelper - include ActionView::Helpers::TagHelper - include Redmine::I18n - include ERB::Util - - def setup - super - set_language_if_valid('en') - User.current = nil - EnabledModule.create(:project => Project.find(1), :name => 'issue_tracking') if RedmineAgile.use_checklist? - end - - def test_time_in_state - hour10 = Time.now - 10.hours - assert_equal "#{I18n.t('datetime.distance_in_words.x_hours', :count => 10)}", time_in_state(hour10) - one_day = Time.now - 25.hours - assert_equal "#{I18n.t('datetime.distance_in_words.x_days', :count => 1)}", time_in_state(one_day) - - assert_equal "", time_in_state(nil) - assert_equal "", time_in_state("string") - end - - def test_show_checklist - issue = Issue.first - issue.checklists.create(subject: 'TEST1', position: 1) - User.current = User.find(1) - - assert show_checklist?(issue), 'Not allowed show checklist for first issue' - assert !show_checklist?(Issue.find(3)), 'Allowed show checklist for issue without checklist' - end if RedmineAgile.use_checklist? -end diff --git a/plugins/redmine_checklists/Gemfile b/plugins/redmine_checklists/Gemfile deleted file mode 100644 index ffc40a3..0000000 --- a/plugins/redmine_checklists/Gemfile +++ /dev/null @@ -1 +0,0 @@ -gem 'redmineup' diff --git a/plugins/redmine_checklists/app/controllers/checklists_controller.rb b/plugins/redmine_checklists/app/controllers/checklists_controller.rb deleted file mode 100644 index fc65f24..0000000 --- a/plugins/redmine_checklists/app/controllers/checklists_controller.rb +++ /dev/null @@ -1,122 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -class ChecklistsController < ApplicationController - - before_action :find_checklist_item, :except => [:index, :create] - before_action :find_issue_by_id, :only => [:index, :create] - before_action :authorize, :except => [:done] - helper :issues - - accept_api_auth :index, :update, :destroy, :create, :show - - def index - @checklists = @issue.checklists - respond_to do |format| - format.api - end - end - - def show - respond_to do |format| - format.api - end - end - - def destroy - @checklist_item.destroy - respond_to do |format| - format.api { render_api_ok } - end - end - - def create - @checklist_item = Checklist.new - @checklist_item.safe_attributes = params[:checklist] - @checklist_item.issue = @issue - respond_to do |format| - format.api { - if @checklist_item.save - recalculate_issue_ratio(@checklist_item) - render :action => 'show', :status => :created, :location => checklist_url(@checklist_item) - else - render_validation_errors(@checklist_item) - end - } - end - end - - def update - @checklist_item.safe_attributes = params[:checklist] - respond_to do |format| - format.api { - if with_issue_journal { @checklist_item.save } - recalculate_issue_ratio(@checklist_item) - render_api_ok - else - render_validation_errors(@checklist_item) - end - } - end - end - - def done - (render_403; return false) unless User.current.allowed_to?(:done_checklists, @checklist_item.issue.project) - - with_issue_journal do - @checklist_item.is_done = params[:is_done] == 'true' - if @checklist_item.save - recalculate_issue_ratio(@checklist_item) - true - end - end - respond_to do |format| - format.js - format.html { redirect_to :back } - end - end - - private - - def find_issue_by_id - @issue = Issue.find(params[:issue_id]) - @project = @issue.project - rescue ActiveRecord::RecordNotFound - render_404 - end - - def find_checklist_item - @checklist_item = Checklist.find(params[:id]) - @project = @checklist_item.issue.project - rescue ActiveRecord::RecordNotFound - render_404 - end - - def with_issue_journal(&block) - return unless yield - true - end - - def recalculate_issue_ratio(checklist_item) - if (Setting.issue_done_ratio == 'issue_field') && RedmineChecklists.issue_done_ratio? - Checklist.recalc_issue_done_ratio(checklist_item.issue.id) - checklist_item.issue.reload - end - end -end diff --git a/plugins/redmine_checklists/app/helpers/checklists_helper.rb b/plugins/redmine_checklists/app/helpers/checklists_helper.rb deleted file mode 100644 index cb5dfe7..0000000 --- a/plugins/redmine_checklists/app/helpers/checklists_helper.rb +++ /dev/null @@ -1,58 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -module ChecklistsHelper - - def link_to_remove_checklist_fields(name, f, options={}) - f.hidden_field(:_destroy) + link_to(name, "javascript:void(0)", options) - end - - def new_object(f, association) - @new_object ||= f.object.class.reflect_on_association(association).klass.new - end - - def checklist_fields(f, association) - @fields ||= f.fields_for(association, new_object(f, association), :child_index => "new_#{association}") do |builder| - render(association.to_s.singularize + "_fields", :f => builder) - end - end - - def new_or_show(f) - if f.object.new_record? - if f.object.subject.present? - "show" - else - "new" - end - else - "show" - end - end - - def done_css(f) - if f.object.is_done - "is-done-checklist-item" - else - "" - end - end - -end diff --git a/plugins/redmine_checklists/app/models/checklist.rb b/plugins/redmine_checklists/app/models/checklist.rb deleted file mode 100644 index 3c61da9..0000000 --- a/plugins/redmine_checklists/app/models/checklist.rb +++ /dev/null @@ -1,79 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -class Checklist < ActiveRecord::Base - - include Redmine::SafeAttributes - belongs_to :issue - belongs_to :author, :class_name => "User", :foreign_key => "author_id" - - acts_as_event :datetime => :created_at, - :url => Proc.new {|o| {:controller => 'issues', :action => 'show', :id => o.issue_id}}, - :type => 'issue issue-closed', - :title => Proc.new {|o| o.subject }, - :description => Proc.new {|o| "#{l(:field_issue)}: #{o.issue.subject}" } - - - acts_as_activity_provider :type => "checklists", - :permission => :view_checklists, - :scope => preload({:issue => :project}) - acts_as_searchable :columns => ["#{table_name}.subject"], - :scope => lambda { includes([:issue => :project]).order("#{table_name}.id") }, - :project_key => "#{Issue.table_name}.project_id" - - - up_acts_as_list scope: :issue - - validates_presence_of :subject - validates_length_of :subject, maximum: 512 - validates_presence_of :position - validates_numericality_of :position - - def self.recalc_issue_done_ratio(issue_id) - issue = Issue.find(issue_id) - return false if (Setting.issue_done_ratio != 'issue_field') || !RedmineChecklists.issue_done_ratio? || issue.checklists.reject(&:is_section).empty? - done_checklist = issue.checklists.reject(&:is_section).map { |c| c.is_done ? 1 : 0 } - done_ratio = (done_checklist.count(1) * 10) / done_checklist.count * 10 - issue.update(done_ratio: done_ratio) - end - - def self.old_format?(detail) - (detail.old_value.is_a?(String) && detail.old_value.match(/^\[[ |x]\] .+$/).present?) || - (detail.value.is_a?(String) && detail.value.match(/^\[[ |x]\] .+$/).present?) - end - - safe_attributes 'subject', 'position', 'issue_id', 'is_done', 'is_section' - - def editable_by?(usr = User.current) - usr && (usr.allowed_to?(:edit_checklists, project) || (author == usr && usr.allowed_to?(:edit_own_checklists, project))) - end - - def project - issue.project if issue - end - - def info - "[#{is_done ? 'x' : ' '}] #{subject.strip}" - end - - def add_to_list_bottom - return unless issue.checklists.select(&:persisted?).map(&:position).include?(self[position_column]) - self[position_column] = bottom_position_in_list.to_i + 1 - end -end diff --git a/plugins/redmine_checklists/app/models/journal_checklist_history.rb b/plugins/redmine_checklists/app/models/journal_checklist_history.rb deleted file mode 100644 index a82d84d..0000000 --- a/plugins/redmine_checklists/app/models/journal_checklist_history.rb +++ /dev/null @@ -1,127 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -class JournalChecklistHistory - def self.can_fixup?(journal_details) - return false if journal_details.journal.nil? - - issue = journal_details.journal.journalized - return false unless issue.is_a?(Issue) - - prev_journal_scope = issue.journals.order('id DESC') - prev_journal_scope = prev_journal_scope.where('id <> ?', journal_details.journal_id) if journal_details.journal_id - prev_journal = prev_journal_scope.first - return false unless prev_journal - - return false if prev_journal.user_id != journal_details.journal.user_id - return false if Time.zone.now > prev_journal.created_on + 1.minute - - prev_journal.details.all? { |x| x.prop_key == 'checklist' } && - journal_details.journal.details.all? { |x| x.prop_key == 'checklist' } && - journal_details.journal.notes.blank? && - prev_journal.notes.blank? && - prev_journal.details.select { |x| x.prop_key == 'checklist' }.size == 1 - end - - def self.fixup(journal_details) - issue = journal_details.journal.journalized - prev_journal_scope = issue.journals.order('id DESC') - prev_journal_scope = prev_journal_scope.where('id <> ?', journal_details.journal_id) if journal_details.journal_id - prev_journal = prev_journal_scope.first - checklist_details = prev_journal.details.find{ |x| x.prop_key == 'checklist'} - if new(checklist_details.old_value, journal_details.value).empty_diff? - prev_journal.destroy - else - checklist_details.update(value: journal_details.value) - journal_details.journal.destroy unless journal_details.journal.new_record? && journal_details.journal.details.any?{ |x| x.prop_key != 'checklist'} - end - end - - def initialize(was, become) - @was = force_object(was) - @become = force_object(become) - @was_ids = @was.map(&:id) - @become_ids = @become.map(&:id) - @both_ids = @become_ids & @was_ids - end - - def diff - { - :undone => undone, - :done => done - } - end - - def empty_diff? - diff.all?{ |_,v| v.empty? } - end - - def journal_details(opts = {}) - JournalDetail.new(opts.merge({ - :property => 'attr', - :prop_key => 'checklist', - :old_value => @was.map(&:to_h).to_json, - :value => @become.map(&:to_h).to_json - })) - end - - private - - def undone - @both_ids.map do |id| - was_is_done = was_by_id(id).is_done - become_is_done = become_by_id(id).is_done - if was_is_done != become_is_done && was_is_done - become_by_id(id) - else - nil - end - end.compact - end - - def done - @both_ids.map do |id| - was_is_done = was_by_id(id).is_done - become_is_done = become_by_id(id).is_done - if was_is_done != become_is_done && become_is_done - become_by_id(id) - else - nil - end - end.compact - end - - def was_by_id(id) - @was.find{ |x| x.id == id } - end - - def become_by_id(id) - @become.find{ |x| x.id == id } - end - - def force_object(unk) - if unk.is_a?(String) - json = JSON.parse(unk) - json = [json] unless json.is_a?(Array) - json.map{ |x| OpenStruct2.new(x.has_key?('checklist') ? x['checklist'] : x) } - else - unk.map{ |x| OpenStruct2.new(x.attributes) } - end - end -end diff --git a/plugins/redmine_checklists/app/views/checklists/_checklist_item.html.erb b/plugins/redmine_checklists/app/views/checklists/_checklist_item.html.erb deleted file mode 100644 index 186d6bd..0000000 --- a/plugins/redmine_checklists/app/views/checklists/_checklist_item.html.erb +++ /dev/null @@ -1,11 +0,0 @@ -<li id="checklist_item_<%= checklist_item.id %>" class="<%= 'is-done-checklist-item' if checklist_item.is_done %> <%= 'checklist-section' if checklist_item.is_section %>"> - <% unless checklist_item.is_section %> - <%= check_box_tag 'checklist_item', '', checklist_item.is_done, - disabled: !User.current.allowed_to?(:done_checklists, checklist_item.issue.project) && !User.current.allowed_to?(:edit_checklists, checklist_item.issue.project), - data_url: url_for({ controller: 'checklists', action: 'done', id: checklist_item.id }), - class: 'checklist-checkbox', - id: "checklist-checkbox-#{checklist_item.id}" - %> - <% end %> - <%= textilizable(checklist_item, :subject).gsub(/<\/?(p|h\d+|li|ul|hr \/)>/, '').strip.html_safe %> -</li> diff --git a/plugins/redmine_checklists/app/views/checklists/done.js.erb b/plugins/redmine_checklists/app/views/checklists/done.js.erb deleted file mode 100644 index ac8b878..0000000 --- a/plugins/redmine_checklists/app/views/checklists/done.js.erb +++ /dev/null @@ -1,17 +0,0 @@ -$("#checklist_item_<%= @checklist_item.id %>").toggleClass('is-done-checklist-item'); -$('#checklist_form .checklist-item#<%= @checklist_item.id %> input[type=checkbox]').trigger('click'); -$('.issue .attributes table.progress').parent().html('<%= j(progress_bar(@checklist_item.issue.done_ratio, :width => '80px', :legend => "#{@checklist_item.issue.done_ratio}%")) %>'); -$('#issue_done_ratio').val('<%= @checklist_item.issue.done_ratio %>'); - -var checkedCheckboxes = $('#checklist_items .checklist-checkbox:checkbox:checked'); - -if(localStorage.getItem("hide_closed_checklists") === '0' && checkedCheckboxes.length > 0){ - $("#checklist_item_<%= @checklist_item.id %>").fadeOut(1000).hide(15); - $('#switch_link').text('<%= l("label_checklist_show_closed") %>' + '(' + checkedCheckboxes.length + ')'); -} -if(checkedCheckboxes.length < 1 && localStorage.getItem("hide_closed_checklists") === '1'){ - $('#switch_link').hide(); -} -if(checkedCheckboxes.length > 0){ - $('#switch_link').show(); -} diff --git a/plugins/redmine_checklists/app/views/checklists/index.api.rsb b/plugins/redmine_checklists/app/views/checklists/index.api.rsb deleted file mode 100644 index 4dff4f0..0000000 --- a/plugins/redmine_checklists/app/views/checklists/index.api.rsb +++ /dev/null @@ -1,15 +0,0 @@ -api.array :checklists, api_meta(:total_count => @checklists.size) do - @checklists.each do |checklist| - api.checklist do - api.id checklist.id - api.issue_id checklist.issue_id - api.subject checklist.subject - api.is_done checklist.is_done - api.position checklist.position - api.is_section checklist.is_section - - api.created_at checklist.created_at - api.updated_at checklist.updated_at - end - end -end diff --git a/plugins/redmine_checklists/app/views/checklists/show.api.rsb b/plugins/redmine_checklists/app/views/checklists/show.api.rsb deleted file mode 100644 index 37987b2..0000000 --- a/plugins/redmine_checklists/app/views/checklists/show.api.rsb +++ /dev/null @@ -1,11 +0,0 @@ -api.checklist do - api.id @checklist_item.id - api.issue_id @checklist_item.issue_id - api.subject @checklist_item.subject - api.is_done @checklist_item.is_done - api.position @checklist_item.position - api.is_section @checklist_item.is_section - - api.created_at @checklist_item.created_at - api.updated_at @checklist_item.updated_at -end diff --git a/plugins/redmine_checklists/app/views/issues/_checklist.html.erb b/plugins/redmine_checklists/app/views/issues/_checklist.html.erb deleted file mode 100644 index 8205892..0000000 --- a/plugins/redmine_checklists/app/views/issues/_checklist.html.erb +++ /dev/null @@ -1,19 +0,0 @@ -<% if !@issue.blank? && @issue.checklists.any? && User.current.allowed_to?(:view_checklists, @project) %> -<hr /> -<div id="checklist"> - <div class="contextual"> - <%= link_to l("label_checklist_hide_closed"), '#', id: 'switch_link' %> - </div> - <p><strong><%=l(:label_checklist_plural)%></strong></p> - - <ul id="checklist_items"> - <% @issue.checklists.each do |checklist_item| %> - <%= render :partial => 'checklists/checklist_item', :object => checklist_item %> - <% end %> - </ul> -</div> - <%= javascript_tag do %> - new Redmine.ChecklistToggle('<%= l("label_checklist_show_closed") %>', '<%= l("label_checklist_hide_closed") %>'); - $("#checklist_items").checklist(); - <% end %> -<% end %> diff --git a/plugins/redmine_checklists/app/views/issues/_checklist_fields.html.erb b/plugins/redmine_checklists/app/views/issues/_checklist_fields.html.erb deleted file mode 100644 index ec1a0d4..0000000 --- a/plugins/redmine_checklists/app/views/issues/_checklist_fields.html.erb +++ /dev/null @@ -1,26 +0,0 @@ -<span class="checklist-item <%= new_or_show(f) %> <%= 'checklist-section' if f.object.is_section %> existing" id="<%= f.object.id %>"> - <% unless f.object.is_section %> - <span class="checklist-show-only checklist-checkbox"><%= f.check_box :is_done %></span> - <% end %> - - <span class="checklist-show checklist-subject <%= done_css(f) %>"> - <%= f.object.subject.to_s.strip.html_safe %> - </span> - - <span class="checklist-edit checklist-new checklist-edit-box"> - <%= text_field_tag nil, f.object.subject, class: 'edit-box' %> - <%= f.hidden_field :subject, class: 'checklist-subject-hidden' %> - </span> - - <span class="checklist-edit-only checklist-edit-save-button"><%= submit_tag l(:button_save), type: 'button', class: 'item item-save small' %> </span> - <span class="checklist-edit-only checklist-edit-reset-button"><% concat l(:button_cancel) %> </span> - <span class="checklist-show-only checklist-remove"><%= link_to_remove_checklist_fields "", f, class: 'icon icon-del' %></span> - - <%= f.hidden_field :position, class: 'checklist-item-position' %> - <%= f.hidden_field :is_section, class: 'checklist-item-is_section' %> - <%= f.hidden_field :id, class: 'checklist-item-id' %> - - <span class="icon icon-add checklist-new-only save-new-by-button"></span> - - <br> -</span> diff --git a/plugins/redmine_checklists/app/views/issues/_checklist_form.html.erb b/plugins/redmine_checklists/app/views/issues/_checklist_form.html.erb deleted file mode 100644 index de1c0b2..0000000 --- a/plugins/redmine_checklists/app/views/issues/_checklist_form.html.erb +++ /dev/null @@ -1,23 +0,0 @@ -<% if User.current.allowed_to?(:edit_checklists, @project, :global => true) %> - <div class="tabular"> - <p id="checklist_form"> - <label><%=l(:label_checklist_plural)%></label> - <% @issue.checklists.build if @issue.checklists.blank? || @issue.checklists.last.subject.present? %> - <%= fields_for @issue do |f| -%> - <span id="checklist_form_items" data-checklist-fields='<%= checklist_fields(f, :checklists) %>'> - <%= f.fields_for :checklists do |builder| %> - <%= render :partial => 'checklist_fields', :locals => {:f => builder, :checklist => @checklist} %> - <% end %> - </span> - <% end %> - </p> - </div> -<% end %> - -<%= javascript_tag do %> - <% unless User.current.allowed_to?(:done_checklists, @project) %> - $("#checklist_items input").attr("disabled", true); - <% end %> - - $("span#checklist_form_items").checklist(); -<% end %> diff --git a/plugins/redmine_checklists/app/views/settings/checklists/_checklists.html.erb b/plugins/redmine_checklists/app/views/settings/checklists/_checklists.html.erb deleted file mode 100644 index d4307f4..0000000 --- a/plugins/redmine_checklists/app/views/settings/checklists/_checklists.html.erb +++ /dev/null @@ -1,8 +0,0 @@ -<% checklist_tabs = [ - {:name => 'general', :partial => 'settings/checklists/general', :label => :label_general}] - - %> - -<%= render_tabs checklist_tabs %> - -<% html_title(l(:label_settings), l(:label_checklists)) -%> diff --git a/plugins/redmine_checklists/app/views/settings/checklists/_general.html.erb b/plugins/redmine_checklists/app/views/settings/checklists/_general.html.erb deleted file mode 100644 index af66755..0000000 --- a/plugins/redmine_checklists/app/views/settings/checklists/_general.html.erb +++ /dev/null @@ -1,13 +0,0 @@ -<% if Setting.issue_done_ratio == "issue_field" %> -<p> - <label for="settings_issue_done_ratio"><%= l(:label_checklist_done_ratio) %></label> - <%= hidden_field_tag 'settings[issue_done_ratio]', 0, :id => nil %> - <%= check_box_tag 'settings[issue_done_ratio]', 1, @settings["issue_done_ratio"].to_i > 0 %> -</p> -<% end %> - -<p> - <label for="settings_block_issue_closing"><%= l(:label_checklist_block_issue_closing) %></label> - <%= hidden_field_tag 'settings[block_issue_closing]', 0, :id => nil %> - <%= check_box_tag 'settings[block_issue_closing]', 1, @settings["block_issue_closing"].to_i > 0 %> -</p> diff --git a/plugins/redmine_checklists/assets/javascripts/checklists.js b/plugins/redmine_checklists/assets/javascripts/checklists.js deleted file mode 100644 index 84ad103..0000000 --- a/plugins/redmine_checklists/assets/javascripts/checklists.js +++ /dev/null @@ -1,485 +0,0 @@ -if(typeof(String.prototype.trim) === "undefined") -{ - String.prototype.trim = function() - { - return String(this).replace(/^\s+|\s+$/g, ''); - }; -} - -/*! jQuery klass v0.2a - Jean-Louis Grall - MIT license - http://code.google.com/p/jquery-klass-plugin */ - -( function( $, undefined ) { - - -// Function: $.klass( [SuperKlass,] props ) -// Creates and returns a new class. -// Usages: MyKlass = $.klass( { init: function() { ... } } ) -// MyKlass = $.klass( SuperKlass, { } ) -// Arguments: -// SuperKlass (optional) The super class that the new class will extend. -// props Set of methods and other class properties. -// Special props names: -// init The constructor. If omitted, an implicit init will be created. -// Thus all classes have an init method. -// _klass Set of class methods (static methods). They will be added directly to the class. -// Notes: -// - $.klass is the implicit super class, not Object - var $klass = $.klass = function( _super, fields ) { // The class factory. It is also the invisible "super class" of all classes. Methods added to its prototype will be available to all classes. - - // If no _super: - if ( !fields ) { - fields = _super; - _super = undefined; - } - - var - // init is our future class and constructor - // If no init is provided, make one (Implicit constructor) - klass = fields.init || ( fields.init = function() { - // Automatically calls the superconstructor if there is one. - _super && _super.prototype.init.apply( this, arguments ); - } ), - - // Used to make the new klass extends its super class - protoChainingProxy = function() { }, - - // klass.prototype - proto, - - // index in loop - name; - - // Prepare prototype chaining to the super class - // If no super class, use $.klass as implicit super class - protoChainingProxy.prototype = (_super || $klass).prototype; - // Make the [[prototype]]'s chain from klass to it's super class - proto = klass.prototype = new protoChainingProxy; // At the end we have: klass.prototype.[[prototype]] = protoChainingProxy.prototype = _super.prototype. Here the "new" operator creates the new object with the right prototype chain, but doesn't call the constructor because there is no "()". See also: http://brokenliving.blogspot.com/2009/09/simple-javascript-inheritance.html - // Now we have: klass.prototype.[[prototype]] = protoChainingProxy.prototype = _super.prototype - - // Accessor for super klass ( can be undefined ) - klass._super = _super; - - // Add each function to the prototype of the new class (they are our new class methods): - for ( name in fields ) { - // Add the static variables to the new class: - if ( name === "_klass" ) $.extend( klass, fields[name] ); - // Each new method keeps a reference to its name and its class, allowing us to find its super method dynamically at runtime: - else $.isFunction( proto[ name ] = fields[name] ) && ( fields[name]._klass = { klass: klass, name: name } ); - } - - // Sets the constructor for instanciated objects - proto.constructor = klass; - - return klass; - }, - Array_slice = [].slice; - - - /* $.klass.prototype */ -// Properties assigned to it are available from any instance of a class made by $.klass - -// Function: this._super( [ methodName,] arguments, args... ) -// Calls a super method. Finds the super method dynamically. -// Usages: this._super( arguments, arg1, arg2, arg3, ... ) -// this._super( "methodName", arguments, arg1, arg2, arg3, ... ) -// Arguments: -// methodName (optional) Name of the super method. -// By default, use the name of the calling method. -// arguments You must give the arguments object here. -// args... List of arguments for the super method. -// Note: -// - Super methods are found dynamically by the function in the super class using the method's name. - $klass.prototype._super = function( arg0, arg1 ) { - var arg0IsArguments = arg0.callee, - _klass = ( arg0IsArguments ? arg0 : arg1 ).callee._klass, - name = arg0IsArguments ? _klass.name : arg0, - superMethod = _klass.klass._super.prototype[ name ]; - return superMethod.apply( this, Array_slice.call( arguments, 1 + ( !arg0IsArguments ) ) ); - }; - -})( jQuery ); - -var updateChecklistPositions = function() { - $(".checklist-item.existing").each(function(index, element){ - $(element).children('.checklist-item-position').val(index); - }); -} - -var Redmine = Redmine || {}; - -Redmine.Checklist = $.klass({ - - preventEvent: function(event) { - if (event.preventDefault) - event.preventDefault() - else - event.returnValue = false - }, - - addChecklistFields: function() { - var new_id = new Date().getTime(); - var regexp = new RegExp("new_checklist", "g"); - appended = $(this.content.replace(regexp, new_id)).appendTo(this.root); - updateChecklistPositions(); - appended.find('.edit-box').focus(); - }, - - findSpan: function(event) { - return $(event.target).closest('.checklist-item') - }, - - findSpanBefore: function(elem) { - return elem.prevAll('span.checklist-item.new') - }, - - transformItem: function(event, elem, valueToSet, isSection) { - var checklistItem; - if (event) { - checklistItem = this.findSpan(event) - } else if (elem) { - checklistItem = this.findSpanBefore(elem) - } else { - checklistItem = this.root.find('span.checklist-item.new') - } - - var val; - if (valueToSet) { - val = valueToSet - checklistItem.find('input.edit-box').val(val) - } else { - val = checklistItem.find('input.edit-box').val() - } - - checklistItem.find('.checklist-subject').text(val) - checklistItem.find('.checklist-subject-hidden').val(val) - checklistItem.removeClass('edit') - checklistItem.removeClass('new') - checklistItem.addClass('show') - - if (isSection) { - checklistItem.addClass('checklist-section'); - checklistItem.children('.checklist-item-is_section').val(true); - } - }, - - resetItem: function(item) { - item.find('input.edit-box').val(item.find('checklist-subject-hidden').val() ) - item.removeClass('edit') - item.addClass('show') - }, - - addChecklistItem: function(event) { - this.preventEvent(event); - this.transformItem(event); - this.addChecklistFields(); - }, - - canSave: function(span) { - return (!span.hasClass('invalid')) && (span.find('input.edit-box').val().length > 0) - }, - - onEnterInNewChecklistItemForm: function() { - this.root.on('keydown', 'input.edit-box', $.proxy(function(event) { - if (event.which == 13) { - this.preventEvent(event) - span = this.findSpan(event) - if (this.canSave(span)) - { - if (span.hasClass('edit')) - this.transformItem(event) - else - this.addChecklistItem(event) - } - } - }, this)) - }, - - onClickPlusInNewChecklistItem: function() { - this.root.on('click', '.save-new-by-button', $.proxy(function(event){ - span = this.findSpan(event) - if (this.canSave(span)) - this.addChecklistItem(event) - }, this)) - }, - - onClickAddChecklistItemMenuButton: function() { - $('#checklist-menu .add-checklist-item').on('click', $.proxy(function(event) { - this.preventEvent(event); - var span = $('#checklist_form_items > span.checklist-item.new'); - if (this.canSave(span)) { - this.transformItem(); - this.addChecklistFields(); - this.$plusButtonMenu.hide(); - } - }, this)) - }, - - onClickNewSectionMenuButton: function() { - $('#checklist-menu .add-checklist-section').on('click', $.proxy(function(event) { - this.preventEvent(event); - var span = $('#checklist_form_items > span.checklist-item.new'); - if (this.canSave(span)) { - this.transformItem(null, null, null, true); - this.addChecklistFields(); - this.$plusButtonMenu.hide(); - } - }, this)) - }, - - onMouseEnterLeavePlusButton: function() { - var hideMenuTimer; - var $menu = this.$plusButtonMenu; - - this.root.on('mouseenter', '.save-new-by-button', function() { - var $plusButton = $(this); - var position = $plusButton.position(); - $menu.css('left', (position.left + 'px')); - $menu.css('top', (position.top + $plusButton.height() + 'px')); - $menu.show(); - }); - - this.root.on('mouseleave', '.save-new-by-button', function() { - hideMenuTimer = setTimeout(function() { - $menu.hide(); - }, 500); - }); - - $('#checklist-menu').on('mouseenter', function() { - clearTimeout(hideMenuTimer); - }); - - $('#checklist-menu').on('mouseleave', function() { - $menu.hide(); - }); - }, - - onIssueFormSubmitRemoveEmptyChecklistItems: function() { - $('body').on('submit', '#issue-form', function(){ - $('.checklist-subject-hidden').each(function(i, elem) { - if ($(elem).val() == "") - { - $(elem).closest('.checklist-item').remove() - } - }) - }) - }, - - onChecklistRemove: function() { - this.root.on('click', '.checklist-remove a', $.proxy(function(event){ - this.preventEvent(event); - var itemToRemove = this.findSpan(event); - var checkbox = itemToRemove.find(".checklist-remove input[type=hidden]"); - - if (checkbox.val() === "false") { - checkbox.val("1"); - itemToRemove.removeClass('existing') - itemToRemove.fadeOut(200); - } - - updateChecklistPositions(); - }, this)); - }, - - makeChecklistsSortable: function() { - $('#checklist_form_items').sortable({ - items: '.checklist-item.show', - helper: "clone", - stop: function (event, ui) { - if (ui.item.hasClass("edited-now")) { - $( this ).sortable( "cancel" ); - } - if (ui.item.hasClass("edit-active")) { - $( this ).sortable( "cancel" ); - } - updateChecklistPositions(); - } - }); - }, - - makeChecklistsEditable: function() { - this.root.on('click', '.checklist-subject', $.proxy(function(event) { - $('.checklist-item').each($.proxy(function(i, elem) { - if ($(elem).hasClass('edit')) - this.resetItem($(elem)) - }, this)) - - span = this.findSpan(event) - span.addClass('edit') - span.removeClass('show') - span.find('.edit-box').val(span.find('.checklist-subject-hidden').val()) - span.find('.edit-box').focus() - }, this)); - this.root.on('click', '.checklist-edit-save-button', $.proxy(function(event){ - this.transformItem(event) - }, this)) - this.root.on('click', '.checklist-edit-reset-button', $.proxy(function(event){ - this.resetItem(this.findSpan(event)) - }, this)) - }, - - onCheckboxChanged: function() { - this.root.on('change', 'input[type=checkbox]', $.proxy(function(event){ - checkbox = $(event.target) - subj = this.findSpan(event).find('.checklist-subject') - if (checkbox.is(':checked')) - subj.addClass('is-done-checklist-item') - else - subj.removeClass('is-done-checklist-item') - }, this)) - }, - - onChangeCheckbox: function(){ - this.root.on('change', 'input.checklist-checkbox', $.proxy(function(event) { - this.darkenCompletedSections(); - checkbox = $(event.target) - url = checkbox.attr('data_url') - $.ajax({type: "PUT", url: url, data: { is_done: checkbox.prop('checked') }, dataType: 'script'}) - }, this)) - }, - - darkenCompletedSections: function() { - var isCompletedSection = true; - var reversedChecklistItems = $('#checklist_items li').get().reverse(); - - $(reversedChecklistItems).each(function(index, element) { - var $element = $(element); - if ($element.hasClass('checklist-section')) { - if (isCompletedSection) { - $element.addClass('completed-section') - } else { - $element.removeClass('completed-section') - } - isCompletedSection = true; - } else { - isCompletedSection = isCompletedSection && $element.children('.checklist-checkbox').is(':checked') - } - }) - }, - - enableUniquenessValidation: function() { - this.root.on('input', 'input.edit-box', $.proxy(function(event) { - value = $(event.target).val() - span = this.findSpan(event) - span.removeClass('invalid') - $('.checklist-item.existing').each(function(i, elem) { - e = $(elem) - if (!e.is('.edit') && !e.is('.new')) - { - if ( (value == e.find('.edit-box').val()) ) - { - span.addClass('invalid') - } - } - }) - }, this)) - }, - - hasAlreadyChecklistWithName: function(value) { - var ret = false; - $('.checklist-show.checklist-subject').each(function(i, elem) { - e = $(elem) - if (value == e.text().trim()) - { - ret = true; - } - }) - return ret; - }, - - assignTemplateSelectedEvent: function() { - this.$plusButtonMenu.on('click', 'li a.checklist-template', $.proxy(function(event) { - this.preventEvent(event); - items = $(event.target).data('template-items').split(/\n/); - for(var i = 0; i < items.length; i++) { - var item = items[i]; - var isSection = item.slice(0, 2) === '--'; - if (isSection) { item = item.slice(2) } - if (!this.hasAlreadyChecklistWithName(item)) { - this.transformItem(null, null, item, isSection); - this.addChecklistFields(); - } - } - }, this)) - }, - - init: function(element) { - this.root = element - this.content = element.data('checklist-fields') - this.onEnterInNewChecklistItemForm() - this.onClickPlusInNewChecklistItem() - - if (this.content) { - this.$plusButtonMenu = $('#checklist-menu').menu(); - if (this.$plusButtonMenu.length > 0) { - this.onMouseEnterLeavePlusButton(); - this.onClickAddChecklistItemMenuButton(); - this.assignTemplateSelectedEvent(); - this.onClickNewSectionMenuButton(); - } - } else { - this.darkenCompletedSections() - } - - this.onIssueFormSubmitRemoveEmptyChecklistItems() - this.onChecklistRemove() - this.makeChecklistsSortable() - this.makeChecklistsEditable() - this.onCheckboxChanged() - this.onChangeCheckbox() - this.enableUniquenessValidation() - } - -}) - -$.fn.checklist = function(element){ - new Redmine.Checklist(this); -}; - -Redmine.ChecklistToggle = $.klass({ - manageToggling: function (t_val) { - var checkedCheckboxes = $('#checklist_items .checklist-checkbox:checkbox:checked'); - - if(localStorage.getItem("hide_closed_checklists") === t_val){ - $($(checkedCheckboxes).closest('li')).hide(); - $(this.switch_link).text(this.show_text + '(' + checkedCheckboxes.length + ')'); - } else { - $($(checkedCheckboxes).closest('li')).show(); - $(this.switch_link).text(this.hide_text); - } - }, - switch_link_click: function(){ - var th = $(this)[0]; - this.switch_link.click(function (e) { - e.preventDefault(); - th.manageToggling("1"); - var setVal = (localStorage.getItem("hide_closed_checklists") === "1") ? "0" : "1"; - localStorage.setItem("hide_closed_checklists", setVal); - }); - }, - hide_switch_link: function(){ - if($('.checklist-checkbox:checkbox:checked').length < 1){ - this.switch_link.hide(); - } - }, - init: function(show_text, hide_text) { - this.show_text = show_text; - this.hide_text = hide_text; - this.switch_link = $('#switch_link'); - this.manageToggling("0"); - this.switch_link_click(); - this.hide_switch_link(); - } -}); - - -$(document).ready(function () { - if (typeof(contextMenuCheckSelectionBox) === 'function') { - var originContextMenuCheckSelectionBox = contextMenuCheckSelectionBox; - contextMenuCheckSelectionBox = function (tr, checked) { - var $td = tr.find('td.checklist_relations'); - var $checklist = $td.find('.checklist').detach(); - originContextMenuCheckSelectionBox(tr, checked); - $checklist.appendTo($td); - }; - } -}); diff --git a/plugins/redmine_checklists/assets/stylesheets/checklists.css b/plugins/redmine_checklists/assets/stylesheets/checklists.css deleted file mode 100644 index 649a8f9..0000000 --- a/plugins/redmine_checklists/assets/stylesheets/checklists.css +++ /dev/null @@ -1,145 +0,0 @@ -#checklist_form_items input[type="checkbox"], -#checklist_items input[type="checkbox"] { - height: initial; -} - -div#checklist ul { - list-style: none; - padding-left: 0px; - margin-bottom: 0px; -} - -div#checklist li { - padding-bottom: 10px; - margin-left: 10px; -} - -.checklist-checkbox {height: inherit} - -#checklist li:hover a.delete {opacity: 1;} - -#checklist a.delete {opacity: 0.4;} - -span.checklist-item { - display: block; - margin-bottom: 5px; -} - -span.checklist-subject.is-done-checklist-item, span.checklist-item.is-done-checklist-item, #checklist_items li.is-done-checklist-item { - text-decoration: line-through; - color: #999; -} - -span.checklist-remove { margin-left: 2px; opacity: 0.4;} - -span.checklist-remove:hover {opacity: 1;} - -span.checklist-edit-box input { - margin-right: 6px; - width: 40%; - -moz-transition: top 0.2s; - -o-transition: top 0.2s; - -webkit-transition: top 0.2s; - transition: top 0.2s; -} - -.invalid span.checklist-edit-box input { - border-color: #b94a48; - color: #b94a48; -} - -.invalid span.checklist-edit-box input:focus { - border-color: #953b39; - color: #b94a48; -} - -.invalid .checklist-edit-save-button { - display: none; -} - -span.checklist-edit-reset-button { - cursor: pointer; - color: #2996CC; -} - -span.checklist-subject {cursor: pointer;} - -span.checklist-item.show .checklist-edit, -span.checklist-item.show .checklist-edit-only, -span.checklist-item.show .checklist-new, -span.checklist-item.show .checklist-new-only, -span.checklist-item.edit .checklist-show, -span.checklist-item.edit .checklist-new-only, -span.checklist-item.new .checklist-edit-only, -span.checklist-item.new .checklist-show-or-edit, -span.checklist-item.new .checklist-show-only, -span.checklist-item.edit .checklist-show-only { - display: none; -} - -div#checklist ol { - display: inline-block; - padding-left: 0; -} - -.checklist-section { - padding-top: 10px; - font-weight: bold; - border-bottom-width: 1px; - border-bottom-style: solid; - border-bottom-color: #eee; -} - -.checklist-item.checklist-section > .checklist-checkbox { display: none; } - -#checklist_items li.checklist-section { - padding-bottom: 5px; - margin-bottom: 5px; -} - -.completed-section { color: #999; } - -.save-new-by-button { cursor: pointer; } - -table.list td.checklist_relations { text-align: left } - -/* ========================================================================= */ -/* Checklist context menu */ -/* ========================================================================= */ - -#checklist-menu ul, #checklist-menu li, #checklist-menu a { - display:block; - margin:0; - padding:0; - border:0; -} - -#checklist-menu { - display: none; - position: absolute; - font-size: 0.9em; -} - -#checklist-menu, #checklist-menu ul { - width: 150px; - border: 1px solid #ccc; - background: white; - list-style: none; - padding: 2px; - border-radius: 2px; - z-index: 10; -} - -#checklist-menu li { - position: relative; - padding: 1px; - border: 1px solid white; -} - -#checklist-menu a { - text-decoration: none !important; - padding: 2px 0px 2px 20px; -} - -#checklist-menu a:hover { color:#2A5685; } -#checklist-menu li:hover { border:1px solid #628db6; background-color:#eef5fd; border-radius:3px; } diff --git a/plugins/redmine_checklists/config/locales/bg.yml b/plugins/redmine_checklists/config/locales/bg.yml deleted file mode 100644 index 888a23b..0000000 --- a/plugins/redmine_checklists/config/locales/bg.yml +++ /dev/null @@ -1,9 +0,0 @@ -# encoding: utf-8 -bg: - label_checklist_plural: Чеклист - field_checklist: Чеклист - label_checklist_save_log: Съхраняване на записи в историята на дейността - label_checklist_done_ratio: Преизчисляване на процента готовност - permission_view_checklists: Разглеждане на чеклисти - permission_done_checklists: Изпълнение на чеклисти - permission_edit_checklists: Редактиране на чеклисти diff --git a/plugins/redmine_checklists/config/locales/de.yml b/plugins/redmine_checklists/config/locales/de.yml deleted file mode 100644 index 6216dd9..0000000 --- a/plugins/redmine_checklists/config/locales/de.yml +++ /dev/null @@ -1,44 +0,0 @@ -# Deutsche Übersetzungen für Rails i18n -de: - activerecord: - attributes: - checklists: - subject: Checklisten-Thema - label_checklist_plural: Checklist - field_checklist: Checklist - label_checklist_save_log: Änderungen im Problem-Log speichern - label_checklist_done_ratio: Fortschritt des Problems festlegen - permission_view_checklists: Checklist anzeigen - permission_done_checklists: Erledigte Checklistenelemente - permission_edit_checklists: Checklistenelemente bearbeiten - label_checklist_template_category_plural: Vorlagenkategorien - label_checklist_template_category_new: Neue Checklistenvorlage - field_checklist_template_category: Vorlagenelemente - label_checklist_templates: Checklistenvorlagen - label_checklist_new_checklist_template: Neue Checklistenvorlage - field_template_items: Vorlagenelemente - label_checklist_template: Checklistenvorlage - label_add_checklists_from_template: Von Vorlage hinzufügen - label_checklists_from_template: Von Vorlage - label_select_template: "-- Nicht angegeben --" - label_checklist_category_not_specified: "-- Nicht spezifiziert --" - label_checklists_description: Mehrere Werte erlaubt (eine Zeile für jeden Wert) - label_checklist_item: Checklistenelement - label_checklist_section: Checklistensektion - label_checklist_deleted: gelöscht - label_checklist_changed_from: geändert von - label_checklist_changed_to: zu - label_checklist_added: hinzugefügt - label_checklist_done: auf Erledigt gesetzt - label_checklist_undone: auf Nicht erledigt gesetzt - label_checklist_updated: Checklistenelement bearbeitet - label_checklist_status: Checklistestatus - label_checklist_status_done: Erledigt - label_checklist_status_undone: Nicht erledigt - label_checklist_is_default: Standardmäßig - field_is_for_tracker: Tracker - label_checklists_must_be_completed: Alle Checklisten eines Problems müssen erledigt sein, bevor es geschlossen werden kann - label_checklist_block_issue_closing: Problemabschluss blockieren - label_checklist_show_closed: Geschlossene anzeigen - label_checklist_hide_closed: Geschlossene ausblenden - label_checklist_new_section: Neue Sektion diff --git a/plugins/redmine_checklists/config/locales/en.yml b/plugins/redmine_checklists/config/locales/en.yml deleted file mode 100644 index b60cd28..0000000 --- a/plugins/redmine_checklists/config/locales/en.yml +++ /dev/null @@ -1,44 +0,0 @@ -# English strings go here for Rails i18n -en: - activerecord: - attributes: - checklists: - subject: Checklist subject - label_checklist_plural: Checklist - field_checklist: Checklist - label_checklist_save_log: Save changes to issue log - label_checklist_done_ratio: Set issue done ratio - permission_view_checklists: View checklist - permission_done_checklists: Done checklist items - permission_edit_checklists: Edit checklist items - label_checklist_template_category_plural: Template categories - label_checklist_template_category_new: New category - field_checklist_template_category: Category - label_checklist_templates: Checklist templates - label_checklist_new_checklist_template: New checklist template - field_template_items: Template items - label_checklist_template: Checklist template - label_add_checklists_from_template: Add from template - label_checklists_from_template: From template - label_select_template: "-- Select template --" - label_checklist_category_not_specified: "-- Not specified --" - label_checklists_description: 'Multiple values allowed (one line for each value)' - label_checklist_item: Checklist item - label_checklist_section: Checklist section - label_checklist_deleted: deleted - label_checklist_changed_from: changed from - label_checklist_changed_to: to - label_checklist_added: added - label_checklist_done: set to Done - label_checklist_undone: set to Not done - label_checklist_updated: Checklist item edited - label_checklist_status: Checklist status - label_checklist_status_done: Done - label_checklist_status_undone: Undone - label_checklist_is_default: Default - field_is_for_tracker: Tracker - label_checklists_must_be_completed: All checklists of an issue must be done before closing - label_checklist_block_issue_closing: Block issue closing - label_checklist_show_closed: Show closed - label_checklist_hide_closed: Hide closed - label_checklist_new_section: New section diff --git a/plugins/redmine_checklists/config/locales/es.yml b/plugins/redmine_checklists/config/locales/es.yml deleted file mode 100644 index d129956..0000000 --- a/plugins/redmine_checklists/config/locales/es.yml +++ /dev/null @@ -1,28 +0,0 @@ -# Spanish strings go here for Rails i18n -es: - label_checklist_plural: Checklist - field_checklist: Checklist - label_checklist_save_log: Salvar cambios al log de la petición - label_checklist_done_ratio: Setear porcentaje de estado de petición - permission_view_checklists: Ver checklist - permission_done_checklists: Cerrar items de checklist - permission_edit_checklists: Editar iterms de checklist - label_checklist_template_category_plural: Categorías de plantillas - label_checklist_template_category_new: Nueva categoría - field_checklist_template_category: Categoría - label_checklist_templates: Plantillas de checklists - label_checklist_new_checklist_template: Nueva plantilla de checklist - field_template_items: Items de la plantilla - label_checklist_template: Plantilla de checklist - label_add_checklists_from_template: Añadir desde plantilla - label_select_template: "-- Seleccionar plantilla --" - label_checklist_category_not_specified: "-- No especificada --" - label_checklists_description: 'Se permiten múltiples valores (un valor por línea)' - label_checklist_item: Item de checklist - label_checklist_deleted: borrado - label_checklist_changed_from: cambiado de - label_checklist_changed_to: a - label_checklist_added: añadido - label_checklist_done: marcado como Hecho - label_checklist_undone: marcado como No hecho - label_checklist_updated: Item de checklist modificado \ No newline at end of file diff --git a/plugins/redmine_checklists/config/locales/fr.yml b/plugins/redmine_checklists/config/locales/fr.yml deleted file mode 100755 index 339ca02..0000000 --- a/plugins/redmine_checklists/config/locales/fr.yml +++ /dev/null @@ -1,44 +0,0 @@ -# Traductions en français pour Rails i18n -fr: - activerecord: - attributes: - checklists: - subject: Sujet de la checklist - label_checklist_plural: Checklist - field_checklist: Checklist - label_checklist_save_log: Enregistrer les modifications dans le journal des problèmes - label_checklist_done_ratio: Définir le taux d'avancement du problème - permission_view_checklists: Voir la checklist - permission_done_checklists: Éléments de la checklist terminés - permission_edit_checklists: Modifier les éléments de la checklist - label_checklist_template_category_plural: Catégories de modèles - label_checklist_template_category_new: Nouvelle catégorie - field_checklist_template_category: Catégorie - label_checklist_templates: Modèles de checklist - label_checklist_new_checklist_template: Nouveau modèle de checklist - field_template_items: Éléments de modèle - label_checklist_template: Modèle de checklist - label_add_checklists_from_template: Ajouter à partir du modèle - label_checklists_from_template: À partir du modèle - label_select_template: "-- Sélectionner un modèle --" - label_checklist_category_not_specified: "-- Non spécifié --" - label_checklists_description: 'Plusieurs valeurs autorisées (une ligne pour chaque valeur)' - label_checklist_item: Élément de checklist - label_checklist_section: Section de checklist - label_checklist_deleted: supprimé - label_checklist_changed_from: changé de - label_checklist_changed_to: à - label_checklist_added: ajouté - label_checklist_done: défini comme Terminé - label_checklist_undone: défini comme Non terminé - label_checklist_updated: Élément de checklist modifié - label_checklist_status: Statut de la checklist - label_checklist_status_done: Terminé - label_checklist_status_undone: Non terminé - label_checklist_is_default: Par défaut - field_is_for_tracker: Tracker - label_checklists_must_be_completed: Toutes les checklists d'un problème doivent être terminées avant la clôture - label_checklist_block_issue_closing: Bloquer la clôture du problème - label_checklist_show_closed: Afficher les éléments clos - label_checklist_hide_closed: Masquer les éléments clos - label_checklist_new_section: Nouvelle section diff --git a/plugins/redmine_checklists/config/locales/hu.yml b/plugins/redmine_checklists/config/locales/hu.yml deleted file mode 100644 index 917ce27..0000000 --- a/plugins/redmine_checklists/config/locales/hu.yml +++ /dev/null @@ -1,47 +0,0 @@ -# Hungarian translations for redmine_checklists -# by Lilla Basilides basilides.h.lilla@gmail.com) -# Hungarian strings go here for Rails i18n -hu: - activerecord: - attributes: - checklists: - subject: Ellenőrző lista tárgya - label_checklist_plural: Ellenőrző lista - field_checklist: Ellenőrző lista - label_checklist_save_log: Változások mentése a jegy naplójába - label_checklist_done_ratio: Állítsa be az elkészült jegyek arányát - permission_view_checklists: Ellenőrző lista megtekintése - permission_done_checklists: Elkészült ellenőrzőlista elemek - permission_edit_checklists: Ellenőrzőlista elemeinek szerkesztése - label_checklist_template_category_plural: Sablon kategóriák - label_checklist_template_category_new: Új kategória - field_checklist_template_category: Kategória - label_checklist_templates: Ellenőrzőlista sablonok - label_checklist_new_checklist_template: Új ellenőrzőlista sablon - field_template_items: Sablon elemek - label_checklist_template: Ellenőrzőlista sablon - label_add_checklists_from_template: Hozzáadás sablonból - label_checklists_from_template: A sablonból - label_select_template: "-- Sablon kiválasztása --" - label_checklist_category_not_specified: "-- Nincs meghatározva --" - label_checklists_description: 'Több érték megengedett (értékenként egy sor)' - label_checklist_item: Ellenőrzőlista elem - label_checklist_section: Ellenőrzőlista szakasz - label_checklist_deleted: törölve - label_checklist_changed_from: változott a következőből - label_checklist_changed_to: a címre - label_checklist_added: hozzáadva - label_checklist_done: készre állítva - label_checklist_undone: Nem készre állítva - label_checklist_updated: Szerkesztett ellenőrzőlista elem - label_checklist_status: Ellenőrzőlista állapota - label_checklist_status_done: Elkészült - label_checklist_status_undone: visszavonva - label_checklist_is_default: Alapértelmezett - field_is_for_tracker: Nyomkövető - label_checklists_must_be_completed: A jegy összes ellenőrző listáját el kell végezni a lezárás előtt. - label_checklist_block_issue_closing: Blokkjegy zárás - label_checklist_show_closed: Mutasd a zártakat - label_checklist_hide_closed: Rejtsd el zártakat - label_checklist_new_section: Új szakasz - \ No newline at end of file diff --git a/plugins/redmine_checklists/config/locales/it.yml b/plugins/redmine_checklists/config/locales/it.yml deleted file mode 100644 index 79dc3d5..0000000 --- a/plugins/redmine_checklists/config/locales/it.yml +++ /dev/null @@ -1,45 +0,0 @@ -# encoding: utf-8 -# Italian strings go here for Rails i18n -it: - activerecord: - attributes: - checklists: - subject: Checklist soggetto - label_checklist_plural: Checklist - field_checklist: Checklist - label_checklist_save_log: Salva le modifiche nel log delle segnalazioni - label_checklist_done_ratio: Imposta ratio checklist segnalazioni completate - permission_view_checklists: Visualizza la checklist - permission_done_checklists: Elementi checklist completati - permission_edit_checklists: Modifica elementi checklist - label_checklist_template_category_plural: Categorie di modelli - label_checklist_template_category_new: Nuova categoria - field_checklist_template_category: Categoria - label_checklist_templates: Modelli di checklist - label_checklist_new_checklist_template: Nuovo modello di checklist - field_template_items: Elementi del modello - label_checklist_template: Modello di checklist - label_add_checklists_from_template: Aggiungi dal modello - label_checklists_from_template: Dal modello - label_select_template: "- Seleziona modello -" - label_checklist_category_not_specified: "-- Non specificato --" - label_checklists_description: "Sono consentiti più valori (una riga per ciascun valore)" - label_checklist_item: Elemento della checklist - label_checklist_section: Sezione checklist - label_checklist_deleted: Eliminato - label_checklist_changed_from: Modificato da - label_checklist_changed_to: a - label_checklist_added: aggiunto - label_checklist_done: Impostato su Completato - label_checklist_undone: Impostato su Non completato - label_checklist_updated: Elemento della checklist aggiornato - label_checklist_status: Stato della checklist - label_checklist_status_done: Completato - label_checklist_status_undone: Non completato - label_checklist_is_default: Predefinito - field_is_for_tracker: Tracker - label_checklists_must_be_completed: Tutte le liste di controllo di una segnalazione devono essere eseguite prima della chiusura - label_checklist_block_issue_closing: Blocca segnalazione in chiusura - label_checklist_show_closed: Mostra completati - label_checklist_hide_closed: Nascondi completati - label_checklist_new_section: Nuova sezione diff --git a/plugins/redmine_checklists/config/locales/ja.yml b/plugins/redmine_checklists/config/locales/ja.yml deleted file mode 100644 index c81518d..0000000 --- a/plugins/redmine_checklists/config/locales/ja.yml +++ /dev/null @@ -1,9 +0,0 @@ -# encoding: utf-8 -ja: - label_checklist_plural: "チェックリスト" # Checklist - field_checklist: "チェックリスト" # Checklist - label_checklist_save_log: "変更をチケットに記録する" # Save changes to issue log - label_checklist_done_ratio: "チェック完了率" # Set issue done ratio - permission_view_checklists: "チェックリストの参照" # View checklist - permission_done_checklists: "チェックリストへ済印" # Done checklist items - permission_edit_checklists: "チェックリストの編集" # Edit checklist items \ No newline at end of file diff --git a/plugins/redmine_checklists/config/locales/ko.yml b/plugins/redmine_checklists/config/locales/ko.yml deleted file mode 100644 index aaa94ab..0000000 --- a/plugins/redmine_checklists/config/locales/ko.yml +++ /dev/null @@ -1,11 +0,0 @@ -# Translation by Ki Won Kim (http://x10.iptime.org/redmine, http://xyz37.blog.me, xyz37@naver.com) -ko: - label_checklist_plural: "체크리스트" - field_checklist: "체크리스트" - label_checklist_save_log: "일감 로그에 변경사항을 저장합니다." - label_checklist_done_ratio: "완료 비율 일감 설정" - permission_view_checklists: "체크리스트 보기" - permission_done_checklists: "체크리스트 완료" - permission_edit_checklists: "체크리스트 수정" - label_checklists_must_be_completed: "일감을 완료하려면 모든 체크리스트가 완료되어야 합니다." - label_checklist_block_issue_closing: "일감이 종료되는 것을 방지합니다." diff --git a/plugins/redmine_checklists/config/locales/nl.yml b/plugins/redmine_checklists/config/locales/nl.yml deleted file mode 100644 index 359fb1e..0000000 --- a/plugins/redmine_checklists/config/locales/nl.yml +++ /dev/null @@ -1,44 +0,0 @@ - -nl: - activerecord: - attributes: - checklists: - subject: Onderwerp van de checklist - label_checklist_plural: Checklists - field_checklist: Checklist - label_checklist_save_log: Wijzigingen in probleemlogboek opslaan - label_checklist_done_ratio: Stel voltooiingspercentage in - permission_view_checklists: View checklist - permission_done_checklists: Voltooide checklistitems - permission_edit_checklists: Bewerk checklistitems - label_checklist_template_category_plural: Sjabloonscategorieën - label_checklist_template_category_new: Nieuwe categorie - field_checklist_template_category: Categorie - label_checklist_templates: Checklistsjablonen - label_checklist_new_checklist_template: Nieuw checklistsjabloon - field_template_items: Sjabloonitems - label_checklist_template: Checklistsjabloon - label_add_checklists_from_template: Toevoegen vanuit sjabloon - label_checklists_from_template: Van sjabloon - label_select_template: -- Selecteer sjabloon -- - label_checklist_category_not_specified: -- Niet gespecificeerd -- - label_checklists_description: Meerdere waarden toegestaan (één regel voor elke waarde) - label_checklist_item: Checklistitem - label_checklist_section: Checklistsectie - label_checklist_deleted: verwijderd - label_checklist_changed_from: veranderd van - label_checklist_changed_to: naar - label_checklist_added: toegevoegd - label_checklist_done: ingesteld op Voltooid - label_checklist_undone: ingesteld op Niet voltooid - label_checklist_updated: Checklistitem bewerkt - label_checklist_status: Checkliststatus - label_checklist_status_done: Voltooid - label_checklist_status_undone: Niet voltooid - label_checklist_is_default: Standaard - field_is_for_tracker: Tracker - label_checklists_must_be_completed: Alle checklists van een probleem moeten voltooid zijn voordat het gesloten wordt - label_checklist_block_issue_closing: Blokkeer het sluiten van het probleem - label_checklist_show_closed: Gesloten weergeven - label_checklist_hide_closed: Gesloten verbergen - label_checklist_new_section: Nieuwe sectie diff --git a/plugins/redmine_checklists/config/locales/pl.yml b/plugins/redmine_checklists/config/locales/pl.yml deleted file mode 100644 index d91b76f..0000000 --- a/plugins/redmine_checklists/config/locales/pl.yml +++ /dev/null @@ -1,28 +0,0 @@ -# English strings go here for Rails i18n -pl: - label_checklist_plural: Lista - field_checklist: Checklista - label_checklist_save_log: Zapisuj zmiany w historii - label_checklist_done_ratio: Ustawia wskaźnik wykonania dla zgłoszeń - permission_view_checklists: Zobacz listę - permission_done_checklists: Ustaw jako ukończone elementy checklisty - permission_edit_checklists: Edytuj elementy checklisty - label_checklist_template_category_plural: Kategorie szablonów - label_checklist_template_category_new: Nowa kategoria - field_checklist_template_category: Kategoria - label_checklist_templates: Szablony checklist - label_checklist_new_checklist_template: New checklist template - field_template_items: Elementy szablonu - label_checklist_template: Szablon checklisty - label_add_checklists_from_template: Dodaj z szablonu - label_select_template: "-- Wybierz szablon --" - label_checklist_category_not_specified: "-- Nie wybrano --" - label_checklists_description: 'Dozwolone wiele wartości (po jednej linii dla każdej wartości)' - label_checklist_item: Element checklisty - label_checklist_deleted: usunięty - label_checklist_changed_from: zmieniony z - label_checklist_changed_to: na - label_checklist_added: dodany - label_checklist_done: ustaw jako Wykonane - label_checklist_undone: ustaw jako Niewykonane - label_checklist_updated: Zmieniono element checklisty diff --git a/plugins/redmine_checklists/config/locales/pt-BR.yml b/plugins/redmine_checklists/config/locales/pt-BR.yml deleted file mode 100644 index b185ee7..0000000 --- a/plugins/redmine_checklists/config/locales/pt-BR.yml +++ /dev/null @@ -1,44 +0,0 @@ -#Portuguese Brazilian strings go here for Rails i18n -pt-BR: - activerecord: - attributes: - checklists: - subject: Checklist conteúdo - label_checklist_plural: Checklist - field_checklist: Checklist - label_checklist_save_log: Salvar alterações nas notas - label_checklist_done_ratio: Atribuir % conclusão - permission_view_checklists: Ver checklist - permission_done_checklists: Prontos do checklist - permission_edit_checklists: Editar checklist - label_checklist_template_category_plural: Categoria de templates - label_checklist_template_category_new: Nova categoria - field_checklist_template_category: Categoria - label_checklist_templates: Checklist templates - label_checklist_new_checklist_template: Novo checklist template - field_template_items: Template items - label_checklist_template: Checklist template - label_add_checklists_from_template: Adicionar do template - label_checklists_from_template: Do template - label_select_template: "-- Selecione o template --" - label_checklist_category_not_specified: "-- Não especificado --" - label_checklists_description: 'Permitir multiplos valores' - label_checklist_item: Checklist item - label_checklist_section: Checklist sessão - label_checklist_deleted: deletado - label_checklist_changed_from: alterado por - label_checklist_changed_to: para - label_checklist_added: adicionado - label_checklist_done: alterar para concluído - label_checklist_undone: alterar para não concluído - label_checklist_updated: Checklist item editado - label_checklist_status: Checklist status - label_checklist_status_done: Pronto - label_checklist_status_undone: Não pronto - label_checklist_is_default: Padrão - field_is_for_tracker: Tipo - label_checklists_must_be_completed: Para concluir a tarefa, todos os checklists devem estar prontos - label_checklist_block_issue_closing: Bloquear tarefa ao concluir - label_checklist_show_closed: Mostrar concluídos - label_checklist_hide_closed: Esconder concluídos - label_checklist_new_section: Nova sessão diff --git a/plugins/redmine_checklists/config/locales/pt.yml b/plugins/redmine_checklists/config/locales/pt.yml deleted file mode 100644 index 1016709..0000000 --- a/plugins/redmine_checklists/config/locales/pt.yml +++ /dev/null @@ -1,44 +0,0 @@ -#Portuguese Portugal strings go here for Rails i18n -pt: - activerecord: - attributes: - checklists: - subject: Checklist conteúdo - label_checklist_plural: Checklist - field_checklist: Checklist - label_checklist_save_log: Salvar alterações nas notas - label_checklist_done_ratio: Atribuir % conclusão - permission_view_checklists: Ver checklist - permission_done_checklists: Prontos do checklist - permission_edit_checklists: Editar checklist - label_checklist_template_category_plural: Categoria de templates - label_checklist_template_category_new: Nova categoria - field_checklist_template_category: Categoria - label_checklist_templates: Checklist templates - label_checklist_new_checklist_template: Novo checklist template - field_template_items: Template items - label_checklist_template: Checklist template - label_add_checklists_from_template: Adicionar do template - label_checklists_from_template: Do template - label_select_template: "-- Selecione o template --" - label_checklist_category_not_specified: "-- Não especificado --" - label_checklists_description: 'Permitir multiplos valores' - label_checklist_item: Checklist item - label_checklist_section: Checklist sessão - label_checklist_deleted: deletado - label_checklist_changed_from: alterado por - label_checklist_changed_to: para - label_checklist_added: adicionado - label_checklist_done: alterar para concluído - label_checklist_undone: alterar para não concluído - label_checklist_updated: Checklist item editado - label_checklist_status: Checklist status - label_checklist_status_done: Pronto - label_checklist_status_undone: Não pronto - label_checklist_is_default: Padrão - field_is_for_tracker: Tipo - label_checklists_must_be_completed: Para concluir a tarefa, todos os checklists devem estar prontos - label_checklist_block_issue_closing: Bloquear tarefa ao concluir - label_checklist_show_closed: Mostrar concluídos - label_checklist_hide_closed: Esconder concluídos - label_checklist_new_section: Nova sessão diff --git a/plugins/redmine_checklists/config/locales/ru.yml b/plugins/redmine_checklists/config/locales/ru.yml deleted file mode 100644 index 8c7463f..0000000 --- a/plugins/redmine_checklists/config/locales/ru.yml +++ /dev/null @@ -1,46 +0,0 @@ -# encoding: utf-8 -ru: - activerecord: - attributes: - checklists: - subject: Заголовок чеклиста - label_checklist_plural: Чеклист - field_checklist: Чеклист - label_checklist_save_log: Сохранять изменения в истории - label_checklist_done_ratio: Рассчитывать готовность задачи - permission_view_checklists: Просматривать чеклисты - permission_done_checklists: Выполнять чеклисты - permission_edit_checklists: Редактировать чеклисты - label_checklist_template_category_plural: Категории шаблонов чеклистов - label_checklist_template_category_new: Новая категория шаблонов чеклистов - field_checklist_template_category: Категория - label_checklist_templates: Шаблоны чеклистов - label_checklist_new_checklist_template: Новый шаблон чеклистов - field_template_items: Элементы шаблона - label_checklist_template: Шаблон чеклистов - label_add_checklists_from_template: Добавить из шаблона - label_checklists_from_template: Из шаблона - label_select_template: "-- Выберите шаблон --" - label_checklist_category_not_specified: "-- Без категории --" - label_checklists_description: 'Для ввода нескольких значений вводите по одному на строку' - label_checklist_item: Пункт чеклиста - label_checklist_section: Раздел чеклиста - label_checklist_deleted: удалён - label_checklist_changed_from: изменён с - label_checklist_changed_to: на - label_checklist_added: добавлен - label_checklist_done: выполнен - label_checklist_undone: не выполнен - label_checklist_updated: Пункт чеклиста изменен - label_checklist_status: Статус пункта чеклиста - label_checklist_status_done: Выполнен - label_checklist_status_undone: Не выполнен - label_checklist_is_default: По умолчанию - field_is_for_tracker: Трекер - label_checklist_show_closed: Показать закрытые - label_checklist_hide_closed: Скрыть закрытые - label_checklist_new_section: Новая секция - label_checklist_block_issue_closing: Запретить закрытие заявки - label_checklists: Чеклист - label_checklists_must_be_completed: Чтобы заявка закрылась, должны быть выполнены все пункты чеклиста - field_checklists: Чеклист diff --git a/plugins/redmine_checklists/config/locales/sk.yml b/plugins/redmine_checklists/config/locales/sk.yml deleted file mode 100644 index 1fe026c..0000000 --- a/plugins/redmine_checklists/config/locales/sk.yml +++ /dev/null @@ -1,10 +0,0 @@ -# encoding: utf-8 -# Slovak strings go here for Rails i18n -sk: - label_checklist_plural: Checklist - field_checklist: Checklist - label_checklist_save_log: Uložiť zmeny do histórie úlohy - label_checklist_done_ratio: Nastaviť úlohu ako kompletnú - permission_view_checklists: Zobraziť checklist - permission_done_checklists: Splnené checklist položky - permission_edit_checklists: Upraviť checklist položky diff --git a/plugins/redmine_checklists/config/locales/sv.yml b/plugins/redmine_checklists/config/locales/sv.yml deleted file mode 100644 index 797b1e3..0000000 --- a/plugins/redmine_checklists/config/locales/sv.yml +++ /dev/null @@ -1,11 +0,0 @@ -# Swedish strings go here for Rails i18n -# Translation by Khedron Wilk (khedron.wilk@gmail.com) -# Created 2014 Dec 14 Based on RedmineUP Checklist plugin (Light) ver 3.0.2 -sv: - label_checklist_plural: Checklista - field_checklist: Checklista - label_checklist_save_log: Spara ändringar i ärendeloggen - label_checklist_done_ratio: Använd checklista för att beräkna % klart - permission_view_checklists: Visa checklistor - permission_done_checklists: Klara checklistepunkter - permission_edit_checklists: Redigera checklistepunkter diff --git a/plugins/redmine_checklists/config/locales/tr.yml b/plugins/redmine_checklists/config/locales/tr.yml deleted file mode 100644 index 9c56228..0000000 --- a/plugins/redmine_checklists/config/locales/tr.yml +++ /dev/null @@ -1,44 +0,0 @@ -# Turkish strings go here for Rails i18n -tr: - activerecord: - attributes: - checklists: - subject: Kontrol Listesi konusu - label_checklist_plural: Kontrol listeleri - field_checklist: Kontrol Listesi - label_checklist_save_log: Değişiklikleri iş geçmişine kaydet - label_checklist_done_ratio: İş tamamlanma oranını ayarla - permission_view_checklists: Kontrol listesini görüntüle - permission_done_checklists: Kontrol Listesi elemanlarını tamamlandı olarak işaretle - permission_edit_checklists: Kontrol Listesini düzenle - label_checklist_template_category_plural: Taslak kategorileri - label_checklist_template_category_new: Yeni kategori - field_checklist_template_category: Kategori - label_checklist_templates: Kontrol listesi taslakları - label_checklist_new_checklist_template: Yeni kontrol listesi taslağı - field_template_items: Taslak elemanları - label_checklist_template: Kontrol listesi taslağı - label_add_checklists_from_template: Taslaktan ekle - label_checklists_from_template: Taslaktan - label_select_template: "-- Taslak seç --" - label_checklist_category_not_specified: "-- Belirtilmemiş --" - label_checklists_description: 'Birden fazla değer kabul edilir (her değer için bir satır)' - label_checklist_item: Kontrol listesi elemanı - label_checklist_section: Kontrol listesi kısmı - label_checklist_deleted: silindi - label_checklist_changed_from: '' - label_checklist_changed_to: '>>' - label_checklist_added: eklendi - label_checklist_done: Bitti olarak işaretlendi - label_checklist_undone: Bitti işareti kaldırıldı - label_checklist_updated: Kontrol listesi elemanı eklendi - label_checklist_status: Kontrol listesi durumu - label_checklist_status_done: Bitti - label_checklist_status_undone: Bitmedi - label_checklist_is_default: Varsayılan - field_is_for_tracker: İş tipi - label_checklists_must_be_completed: İş kapatılmadan önce tüm kontrol listeleri elemanlarının bitti olarak işaretlemesi mecburi olsun. - label_checklist_block_issue_closing: Block issue closing - label_checklist_show_closed: Kapalıları göster - label_checklist_hide_closed: Kapalıları gizle - label_checklist_new_section: Yeni kısım diff --git a/plugins/redmine_checklists/config/locales/uk.yml b/plugins/redmine_checklists/config/locales/uk.yml deleted file mode 100644 index 5c03945..0000000 --- a/plugins/redmine_checklists/config/locales/uk.yml +++ /dev/null @@ -1,9 +0,0 @@ -# encoding: utf-8 -uk: - label_checklist_plural: Чекліст - field_checklist: Чекліст - label_checklist_save_log: Зберегти зміни в історії - label_checklist_done_ratio: Розрахувати готовність завдання - permission_view_checklists: Переглядати чеклісти - permission_done_checklists: Виконувати чеклісти - permission_edit_checklists: Редагувати чеклісти \ No newline at end of file diff --git a/plugins/redmine_checklists/config/locales/zh-TW.yml b/plugins/redmine_checklists/config/locales/zh-TW.yml deleted file mode 100644 index f3f377a..0000000 --- a/plugins/redmine_checklists/config/locales/zh-TW.yml +++ /dev/null @@ -1,44 +0,0 @@ -# encoding: utf-8 -# Simplified Chinese strings go here for Rails i18n -# Author: Steven.W -# Based on file: en.yml - -zh-TW: - label_checklist_plural: 檢查清單 - field_checklist: 檢查清單 - label_checklist_save_log: 保存檢查清單的變更到問題日誌 - label_checklist_done_ratio: 設置列表完成比率 - permission_view_checklists: 查看檢查清單 - permission_done_checklists: 完成檢查清單 - permission_edit_checklists: 編輯檢查清單 - label_checklist_template_category_plural: 範本類別 - label_checklist_template_category_new: 新類別 - field_checklist_template_category: 類別 - label_checklist_templates: 檢查清單範本 - label_checklist_new_checklist_template: 新增檢查清單範本 - field_template_items: 範本項目 - label_checklist_template: 檢查清單範本 - label_add_checklists_from_template: 從範本新建 - label_checklists_from_template: 從範本中新增 - label_select_template: "-- 選擇範本 --" - label_checklist_category_not_specified: "-- 未指定 --" - label_checklists_description: '允許多重值 (每一行的值)' - label_checklist_item: 檢查清單項目 - label_checklist_deleted: 刪除 - label_checklist_changed_from: 改變自 - label_checklist_changed_to: 到 - label_checklist_added: 添加 - label_checklist_done: 設置完成 - label_checklist_undone: 設置未完成 - label_checklist_updated: 檢查清單項目編輯 - - label_checklist_status: 檢查清單狀態 - label_checklist_status_done: 已完成 - label_checklist_status_undone: 未完成 - label_checklist_is_default: 預設 - field_is_for_tracker: 追蹤標籤 - label_checklists_must_be_completed: 議題中的所有檢查清單必須全部完成才能關閉 - label_checklist_block_issue_closing: 阻擋議題關閉 - label_checklist_show_closed: 顯示已完成 - label_checklist_hide_closed: 隱藏已完成 - label_checklist_new_section: 新增區塊 \ No newline at end of file diff --git a/plugins/redmine_checklists/config/locales/zh.yml b/plugins/redmine_checklists/config/locales/zh.yml deleted file mode 100644 index d5fb510..0000000 --- a/plugins/redmine_checklists/config/locales/zh.yml +++ /dev/null @@ -1,32 +0,0 @@ -# encoding: utf-8 -# Simplified Chinese strings go here for Rails i18n -# Author: Steven.W -# Based on file: en.yml - -zh: - label_checklist_plural: 检查列表 - field_checklist: 检查列表 - label_checklist_save_log: 保存检查列表变更到问题日志 - label_checklist_done_ratio: 设置列表完成比率 - permission_view_checklists: 查看检查列表 - permission_done_checklists: 完成检查项 - permission_edit_checklists: 编辑检查项 - label_checklist_template_category_plural: 模板类别 - label_checklist_template_category_new: 新类别 - field_checklist_template_category: 类别 - label_checklist_templates: 检查列表模板 - label_checklist_new_checklist_template: 新检查列表模板 - field_template_items: 模板项 - label_checklist_template: 检查列表模板 - label_add_checklists_from_template: 从模板新建 - label_select_template: "-- 选择模板 --" - label_checklist_category_not_specified: "-- 未指定 --" - label_checklists_description: '允许多重值 (每一行的值)' - label_checklist_item: 检查列表项 - label_checklist_deleted: 删除 - label_checklist_changed_from: 改变自 - label_checklist_changed_to: 到 - label_checklist_added: 添加 - label_checklist_done: 设置完成 - label_checklist_undone: 设置未完成 - label_checklist_updated: 检查列表项编辑 diff --git a/plugins/redmine_checklists/config/routes.rb b/plugins/redmine_checklists/config/routes.rb deleted file mode 100644 index 26f894f..0000000 --- a/plugins/redmine_checklists/config/routes.rb +++ /dev/null @@ -1,28 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -resources :issues do - resources :checklists, :only => [:index, :create] -end - -resources :checklists, :only => [:destroy, :update, :show] do - member do - put :done - end -end diff --git a/plugins/redmine_checklists/db/migrate/001_create_checklists.rb b/plugins/redmine_checklists/db/migrate/001_create_checklists.rb deleted file mode 100644 index 715f822..0000000 --- a/plugins/redmine_checklists/db/migrate/001_create_checklists.rb +++ /dev/null @@ -1,38 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -class CreateChecklists < ActiveRecord::Migration[4.2] - - def self.up - if ActiveRecord::Base.connection.table_exists? :issue_checklists - rename_table :issue_checklists, :checklists - else - create_table :checklists do |t| - t.boolean :is_done, :default => false - t.string :subject - t.integer :position, :default => 1 - t.references :issue, :null => false - end - end - end - - def self.down - drop_table :checklists - end -end diff --git a/plugins/redmine_checklists/db/migrate/002_add_time_stamps_to_checklists.rb b/plugins/redmine_checklists/db/migrate/002_add_time_stamps_to_checklists.rb deleted file mode 100644 index fd7e02e..0000000 --- a/plugins/redmine_checklists/db/migrate/002_add_time_stamps_to_checklists.rb +++ /dev/null @@ -1,25 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -class AddTimeStampsToChecklists < ActiveRecord::Migration[4.2] - def change - add_column :checklists, :created_at, :timestamp - add_column :checklists, :updated_at, :timestamp - end -end diff --git a/plugins/redmine_checklists/db/migrate/003_create_checklist_template_category.rb b/plugins/redmine_checklists/db/migrate/003_create_checklist_template_category.rb deleted file mode 100644 index ba26d4e..0000000 --- a/plugins/redmine_checklists/db/migrate/003_create_checklist_template_category.rb +++ /dev/null @@ -1,32 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -class CreateChecklistTemplateCategory < ActiveRecord::Migration[4.2] - - def self.up - create_table :checklist_template_categories do |t| - t.string :name - t.integer :position, :default => 1 - end - end - - def self.down - drop_table :checklist_template_categories - end -end diff --git a/plugins/redmine_checklists/db/migrate/004_create_checklist_templates.rb b/plugins/redmine_checklists/db/migrate/004_create_checklist_templates.rb deleted file mode 100644 index 670f8da..0000000 --- a/plugins/redmine_checklists/db/migrate/004_create_checklist_templates.rb +++ /dev/null @@ -1,36 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -class CreateChecklistTemplates < ActiveRecord::Migration[4.2] - - def self.up - create_table :checklist_templates do |t| - t.string :name - t.references :project - t.references :category - t.references :user - t.boolean :is_public - t.text :template_items - end - end - - def self.down - drop_table :checklist_templates - end -end diff --git a/plugins/redmine_checklists/db/migrate/005_modify_checklist_subject_length.rb b/plugins/redmine_checklists/db/migrate/005_modify_checklist_subject_length.rb deleted file mode 100644 index 77a6ea5..0000000 --- a/plugins/redmine_checklists/db/migrate/005_modify_checklist_subject_length.rb +++ /dev/null @@ -1,28 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -class ModifyChecklistSubjectLength < ActiveRecord::Migration[4.2] - def self.up - change_column :checklists, :subject, :string, :limit => 512 - end - - def self.down - change_column :checklists, :subject, :string, :limit => 256 - end -end diff --git a/plugins/redmine_checklists/db/migrate/006_add_fields_to_checklist_template.rb b/plugins/redmine_checklists/db/migrate/006_add_fields_to_checklist_template.rb deleted file mode 100644 index 922bda5..0000000 --- a/plugins/redmine_checklists/db/migrate/006_add_fields_to_checklist_template.rb +++ /dev/null @@ -1,31 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -class AddFieldsToChecklistTemplate < ActiveRecord::Migration[4.2] - def self.up - add_column :checklist_templates, :is_default, :boolean, :default => false - add_column :checklist_templates, :tracker_id, :integer - add_index :checklist_templates, :tracker_id - end - - def self.down - remove_column :checklist_templates, :is_default - remove_column :checklist_templates, :tracker_id - end -end diff --git a/plugins/redmine_checklists/db/migrate/007_add_is_section_to_checklists.rb b/plugins/redmine_checklists/db/migrate/007_add_is_section_to_checklists.rb deleted file mode 100644 index 3113511..0000000 --- a/plugins/redmine_checklists/db/migrate/007_add_is_section_to_checklists.rb +++ /dev/null @@ -1,24 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -class AddIsSectionToChecklists < (Rails.version < '5.1') ? ActiveRecord::Migration : ActiveRecord::Migration[4.2] - def change - add_column :checklists, :is_section, :boolean, default: false - end -end diff --git a/plugins/redmine_checklists/doc/CHANGELOG b/plugins/redmine_checklists/doc/CHANGELOG deleted file mode 100644 index 6268bcc..0000000 --- a/plugins/redmine_checklists/doc/CHANGELOG +++ /dev/null @@ -1,181 +0,0 @@ -== Redmine Checklists plugin changelog - -Redmine Checklists plugin - managing issue checklists plugin for Redmine -Copyright (C) 2011-2024 Kirill Bezrukov (RedmineUP) -http://www.redmineup.com/ - -== 2024-02-14 v3.1.23 - -* Dropped Redmine 3 support -* Added Taiwanese(Traditional chinese) translation (Tomy) -* Updated Dutch, French, German locales (Jan Catrysse) -* Fixed notification bug - -== 2023-01-16 v3.1.22 - -* Added is_section API property -* Added Hungarian locale (Krisztian Engi, Lilla Basilides) -* Added Turkish locale (Adnan Topçu) -* Updated Korean locale (Ki Won Kim) -* Updated German locale (Joachim Mathes) -* Fixed name validation for item checkbox -* Fixed items sorting - -== 2022-02-21 v3.1.21 - -* Redmine 5.0 compatibility fixes - -== 2021-10-12 v3.1.20 - -* Fixed subtask checklists copy -* Fixed checklist formating error - -== 2021-05-21 v3.1.19 - -* Added Redmine 4.2 compatibility -* Fixed empty project errors -* Fixed notification on journal fixup -* Fixed checklist positions bug - -== 2020-08-17 v3.1.18 - -* Added italian locale -* Updated zh-tw locale -* Fixed size() method error -* Fixed initial install error -* Fixed checklist ration recalculate -* Fixed display checklist element with Markdown syntax -* Fixed done ratio recalculate on checklist API update -* Fixed API call journalizing - -== 2020-01-31 v3.1.17 - -* Redmine 4.1 compatibility fixes -* Fixed view permission bug -* Fixed template permissions bug -* Fixed context menu conflicts -* Fixed Agile support -* Fixed checklist copy bug -* Fixed locale bug -* Fixed project copy bug - -== 2019-04-29 v3.1.16 - -* Checklists sections - -== 2019-04-15 v3.1.15 - -* Redmine 4.0.3 support -* Added Hide link for closed items - -== 2018-12-20 v3.1.14 - -* Hotfix for Redmine 4 - -== 2018-12-18 v3.1.13 - -* Redmine 4 saving issue fixes - -== 2018-11-26 v3.1.12 - -* German translation update from Tobias Fischer -* Fixed diferent authors changes bug -* Fixed sortable animation bug - -== 2018-03-23 v3.1.11 - -* Redmine 4 support -* Setting for block issues with undone checklists -* Fixed bug with default template -* Fixed email notification bug - -== 2017-10-12 v3.1.10 - -* Fixed email notification bug -* Fixed empty project issues bug - -== 2017-09-23 v3.1.9 - -* Fixed bug with creating issues without checklist - -== 2017-09-21 v3.1.8 - -* Default templates bug fixed - -== 2017-08-30 v3.1.7 - -* Assigned tracker for checklist template -* Fixed bug with coping project and issue with subissues -* Fixed settings saving bug -* 512 characters in checklist subjects (Ondřej Kudlík) -* Fixed bug for markdown - -== 2017-07-07 v3.1.6 - -* Redmine 3.4 support -* New checklists filters for issues table -* Save log by default -* Chinese translation update -* Polish translation update -* Fixed bug with template editing - -== 2016-08-15 v3.1.5 - -* Fixed bug with project tabs - -== 2016-08-10 v3.1.4 - -* Fixed empty history items for issues with checklists -* Fixed XSS in journal rendering -* Fixed error with template search in MSSQL -* Banner plugin compatibility -* Fixed for-all-project template option -* Validation for subject length -* Hungarian translation by Peter Tabajdi -* Spanish translation update by Luis Blasco -* Merge checklists history if less than minute interval changes - -== 2015-09-25 v3.1.3 - -* Bug with attach files history fixed -* Bug with old checkboxes fixed - -== 2015-09-25 v3.1.2 - -* Issue history details -* Templates permissions fixes - -== 2015-04-08 v3.1.0 - -* Checklist templates - -== 2015-03-06 v3.0.4 - -* Redmine 3.0 compatibility fixes -* Fixed checklist styles on read only issue mode - -== 2015-02-23 v3.0.3 - -* Swedish translation update (Khedron Wilk) -* Portuguese Brazilian translation (Leandro Gehlen) -* Redmine 3.0 (Rails4) support -* Copying checklists with project copying (Andrew Reshetov) -* Fixed bug with unable editing checklist after tracker or status changed - -== 2014-12-09 v3.0.2 - -* Fixed bug wuth empty subject with CKEditor plugin - -== 2014-09-15 v3.0.1 - -* Bulgarian translation (Иван Ценов) -* Fixed bug with IE browser - -== 2014-09-10 v3.0.0 - -* Editing checklist items -* REST API for index, create, destroy, update, show -* Change issues progress in real time -* Sync checked items with show and edit forms -* Fixed bug with rejecting new checklist items on update issue status -* Japan translation (Yukio KANEDA) diff --git a/plugins/redmine_checklists/doc/COPYING b/plugins/redmine_checklists/doc/COPYING deleted file mode 100644 index 63e41a4..0000000 --- a/plugins/redmine_checklists/doc/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - 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. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - 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. - - <signature of Ty Coon>, 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/redmine_checklists/doc/LICENSE b/plugins/redmine_checklists/doc/LICENSE deleted file mode 100644 index e2e50b5..0000000 --- a/plugins/redmine_checklists/doc/LICENSE +++ /dev/null @@ -1,26 +0,0 @@ -LICENSING - -RedmineUP Licencing - -This End User License Agreement is a binding legal agreement between you and RedmineUP. Purchase, installation or use of RedmineUP Extensions provided on redmineup.com signifies that you have read, understood, and agreed to be bound by the terms outlined below. - -RedmineUP GPL Licencing - -All Redmine Extensions produced by RedmineUP are released under the GNU General Public License, version 2 (http://www.gnu.org/licenses/gpl-2.0.html). Specifically, the Ruby code portions are distributed under the GPL license. If not otherwise stated, all images, manuals, cascading style sheets, and included JavaScript are NOT GPL, and are released under the RedmineUP Proprietary Use License v1.0 (See below) unless specifically authorized by RedmineUP. Elements of the extensions released under this proprietary license may not be redistributed or repackaged for use other than those allowed by the Terms of Service. - -RedmineUP Proprietary Use License (v1.0) - -The RedmineUP Proprietary Use License covers any images, cascading stylesheets, manuals and JavaScript files in any extensions produced and/or distributed by redmineup.com. These files are copyrighted by redmineup.com (RedmineUP) and cannot be redistributed in any form without prior consent from redmineup.com (RedmineUP) - -Usage Terms - -You are allowed to use the Extensions on one or many "production" domains, depending on the type of your license -You are allowed to make any changes to the code, however modified code will not be supported by us. - -Modification Of Extensions Produced By RedmineUP. - -You are authorized to make any modification(s) to RedmineUP extension Ruby code. However, if you change any Ruby code and it breaks functionality, support may not be available to you. - -In accordance with the RedmineUP Proprietary Use License v1.0, you may not release any proprietary files (modified or otherwise) under the GPL license. The terms of this license and the GPL v2 prohibit the removal of the copyright information from any file. - -Please contact us if you have any requirements that are not covered by these terms. \ No newline at end of file diff --git a/plugins/redmine_checklists/init.rb b/plugins/redmine_checklists/init.rb deleted file mode 100644 index dea2522..0000000 --- a/plugins/redmine_checklists/init.rb +++ /dev/null @@ -1,52 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -requires_redmineup version_or_higher: '1.0.5' rescue raise "\n\033[31mRedmine requires newer redmineup gem version.\nPlease update with 'bundle update redmineup'.\033[0m" - -CHECKLISTS_VERSION_NUMBER = '3.1.23'.freeze -CHECKLISTS_VERSION_TYPE = "Light version" - -Redmine::Plugin.register :redmine_checklists do - name "Redmine Checklists plugin (#{CHECKLISTS_VERSION_TYPE})" - author 'RedmineUP' - description 'This is a issue checklist plugin for Redmine' - version CHECKLISTS_VERSION_NUMBER - url 'https://www.redmineup.com/pages/plugins/checklists' - author_url 'mailto:support@redmineup.com' - - requires_redmine :version_or_higher => '4.0' - - settings :default => { - :save_log => true, - :issue_done_ratio => false - }, :partial => 'settings/checklists/checklists' - - Redmine::AccessControl.map do |map| - map.project_module :issue_tracking do |map| - map.permission :view_checklists, { :checklists => [:show, :index] } - map.permission :done_checklists, { :checklists => :done } - map.permission :edit_checklists, { :checklists => [:done, :create, :destroy, :update] } - end - end -end - -if (Rails.configuration.respond_to?(:autoloader) && Rails.configuration.autoloader == :zeitwerk) || Rails.version > '7.0' - Rails.autoloaders.each { |loader| loader.ignore(File.dirname(__FILE__) + '/lib') } -end -require File.dirname(__FILE__) + '/lib/redmine_checklists' diff --git a/plugins/redmine_checklists/lib/redmine_checklists.rb b/plugins/redmine_checklists/lib/redmine_checklists.rb deleted file mode 100644 index 88425e9..0000000 --- a/plugins/redmine_checklists/lib/redmine_checklists.rb +++ /dev/null @@ -1,46 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -module RedmineChecklists - def self.settings() Setting.plugin_redmine_checklists.blank? ? {} : Setting.plugin_redmine_checklists end - - def self.block_issue_closing? - settings['block_issue_closing'].to_i > 0 - end - - def self.issue_done_ratio? - settings['issue_done_ratio'].to_i > 0 - end -end - -REDMINE_CHECKLISTS_REQUIRED_FILES = [ - 'redmine_checklists/patches/compatibility/application_helper_patch', - 'redmine_checklists/hooks/views_issues_hook', - 'redmine_checklists/hooks/views_layouts_hook', - 'redmine_checklists/hooks/controller_issues_hook', - 'redmine_checklists/patches/issue_patch', - 'redmine_checklists/patches/project_patch', - 'redmine_checklists/patches/issues_controller_patch', - 'redmine_checklists/patches/helper_for_checklists_patch', - 'redmine_checklists/patches/issues_helper_patch', - 'redmine_checklists/patches/compatibility/open_struct_patch', -] - -base_url = File.dirname(__FILE__) -REDMINE_CHECKLISTS_REQUIRED_FILES.each { |file| require(base_url + '/' + file) } diff --git a/plugins/redmine_checklists/lib/redmine_checklists/hooks/controller_issues_hook.rb b/plugins/redmine_checklists/lib/redmine_checklists/hooks/controller_issues_hook.rb deleted file mode 100644 index fd4d639..0000000 --- a/plugins/redmine_checklists/lib/redmine_checklists/hooks/controller_issues_hook.rb +++ /dev/null @@ -1,31 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -module RedmineChecklists - module Hooks - class ControllerIssuesHook < Redmine::Hook::ViewListener - def controller_issues_edit_after_save(context = {}) - - if (Setting.issue_done_ratio == 'issue_field') && RedmineChecklists.issue_done_ratio? - Checklist.recalc_issue_done_ratio(context[:issue].id) - end - end - end - end -end diff --git a/plugins/redmine_checklists/lib/redmine_checklists/hooks/views_issues_hook.rb b/plugins/redmine_checklists/lib/redmine_checklists/hooks/views_issues_hook.rb deleted file mode 100644 index 8fc562a..0000000 --- a/plugins/redmine_checklists/lib/redmine_checklists/hooks/views_issues_hook.rb +++ /dev/null @@ -1,27 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -module RedmineChecklists - module Hooks - class ViewsIssuesHook < Redmine::Hook::ViewListener - render_on :view_issues_show_description_bottom, :partial => "issues/checklist" - render_on :view_issues_form_details_bottom, :partial => "issues/checklist_form" - end - end -end diff --git a/plugins/redmine_checklists/lib/redmine_checklists/hooks/views_layouts_hook.rb b/plugins/redmine_checklists/lib/redmine_checklists/hooks/views_layouts_hook.rb deleted file mode 100644 index f54450d..0000000 --- a/plugins/redmine_checklists/lib/redmine_checklists/hooks/views_layouts_hook.rb +++ /dev/null @@ -1,29 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -module RedmineChecklists - module Hooks - class ViewsLayoutsHook < Redmine::Hook::ViewListener - def view_layouts_base_html_head(context={}) - return javascript_include_tag(:checklists, :plugin => 'redmine_checklists') + - stylesheet_link_tag(:checklists, :plugin => 'redmine_checklists') - end - end - end -end diff --git a/plugins/redmine_checklists/lib/redmine_checklists/patches/compatibility/application_helper_patch.rb b/plugins/redmine_checklists/lib/redmine_checklists/patches/compatibility/application_helper_patch.rb deleted file mode 100644 index 4b43930..0000000 --- a/plugins/redmine_checklists/lib/redmine_checklists/patches/compatibility/application_helper_patch.rb +++ /dev/null @@ -1,36 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -module RedmineChecklists - module Patches - module ApplicationHelperPatch - def self.included(base) # :nodoc: - base.class_eval do - def stocked_reorder_link(object, name = nil, url = {}, method = :post) - Redmine::VERSION.to_s > '3.3' ? reorder_handle(object, :param => name) : reorder_links(name, url, method) - end - end - end - end - end -end - -unless ApplicationHelper.included_modules.include?(RedmineChecklists::Patches::ApplicationHelperPatch) - ApplicationHelper.send(:include, RedmineChecklists::Patches::ApplicationHelperPatch) -end diff --git a/plugins/redmine_checklists/lib/redmine_checklists/patches/compatibility/open_struct_patch.rb b/plugins/redmine_checklists/lib/redmine_checklists/patches/compatibility/open_struct_patch.rb deleted file mode 100644 index dc9900c..0000000 --- a/plugins/redmine_checklists/lib/redmine_checklists/patches/compatibility/open_struct_patch.rb +++ /dev/null @@ -1,37 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -class OpenStruct2 < OpenStruct - undef id if defined?(id) - - def to_h - json - end - - def [](key) - json[key.to_s] - end - - def json - return @json if @json - @json = JSON.parse(to_json) - @json = @json['table'] if @json.has_key?('table') - @json - end -end diff --git a/plugins/redmine_checklists/lib/redmine_checklists/patches/helper_for_checklists_patch.rb b/plugins/redmine_checklists/lib/redmine_checklists/patches/helper_for_checklists_patch.rb deleted file mode 100644 index c0777ee..0000000 --- a/plugins/redmine_checklists/lib/redmine_checklists/patches/helper_for_checklists_patch.rb +++ /dev/null @@ -1,32 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -module RedmineChecklists - module Patches - module HelperForChecklistsPatch - def self.apply(controller) - controller.send(:helper, 'checklists') - end - end - end -end - -[IssuesController].each do |controller| - RedmineChecklists::Patches::HelperForChecklistsPatch.apply(controller) -end diff --git a/plugins/redmine_checklists/lib/redmine_checklists/patches/issue_patch.rb b/plugins/redmine_checklists/lib/redmine_checklists/patches/issue_patch.rb deleted file mode 100644 index cf136fd..0000000 --- a/plugins/redmine_checklists/lib/redmine_checklists/patches/issue_patch.rb +++ /dev/null @@ -1,93 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -require_dependency 'issue' - -module RedmineChecklists - module Patches - module IssuePatch - def self.included(base) # :nodoc: - base.send(:include, InstanceMethods) - base.class_eval do - attr_accessor :old_checklists - attr_accessor :removed_checklist_ids - attr_accessor :checklists_from_params - attr_reader :copied_from - - alias_method :copy_without_checklist, :copy - alias_method :copy, :copy_with_checklist - after_save :copy_subtask_checklists - - has_many :checklists, lambda { order("#{Checklist.table_name}.position") }, :class_name => 'Checklist', :dependent => :destroy, :inverse_of => :issue - - accepts_nested_attributes_for :checklists, :allow_destroy => true, :reject_if => proc { |attrs| attrs['subject'].blank? } - - validate :block_issue_closing_if_checklists_unclosed - - safe_attributes 'checklists_attributes', - :if => lambda { |issue, user| (user.allowed_to?(:done_checklists, issue.project) || user.allowed_to?(:edit_checklists, issue.project)) } - end - end - - module InstanceMethods - def copy_checklists(arg) - issue = arg.is_a?(Issue) ? arg : Issue.visible.find(arg) - return unless issue - - issue.checklists.each do |checklist| - Checklist.create(checklist.attributes.except('id', 'issue_id').merge(issue: self)) - end - end - - def copy_subtask_checklists - return if checklists_from_params || !copy? || parent_id.nil? || checklists.reload.any? - - copy_checklists(@copied_from) - end - - def copy_with_checklist(attributes = nil, copy_options = {}) - copy = copy_without_checklist(attributes, copy_options) - copy.copy_checklists(self) - copy - end - - def all_checklist_items_is_done? - (checklists - checklists.where(id: removed_checklist_ids)).reject(&:is_section).all?(&:is_done) - end - - def need_to_block_issue_closing? - RedmineChecklists.block_issue_closing? && - checklists.reject(&:is_section).any? && - status.is_closed? && - !all_checklist_items_is_done? - end - - def block_issue_closing_if_checklists_unclosed - if need_to_block_issue_closing? - errors.add(:checklists, l(:label_checklists_must_be_completed)) - end - end - end - end - end -end - -unless Issue.included_modules.include?(RedmineChecklists::Patches::IssuePatch) - Issue.send(:include, RedmineChecklists::Patches::IssuePatch) -end diff --git a/plugins/redmine_checklists/lib/redmine_checklists/patches/issue_query_patch.rb b/plugins/redmine_checklists/lib/redmine_checklists/patches/issue_query_patch.rb deleted file mode 100644 index 5a768c0..0000000 --- a/plugins/redmine_checklists/lib/redmine_checklists/patches/issue_query_patch.rb +++ /dev/null @@ -1,38 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -require_dependency 'query' - -module RedmineChecklists - module Patches - module IssueQueryPatch - def self.included(base) - base.send(:include, InstanceMethods) - end - - module InstanceMethods - end - end - end -end - -if (ActiveRecord::Base.connection.tables.include?('queries') rescue false) && - IssueQuery.included_modules.exclude?(RedmineChecklists::Patches::IssueQueryPatch) - IssueQuery.send(:include, RedmineChecklists::Patches::IssueQueryPatch) -end diff --git a/plugins/redmine_checklists/lib/redmine_checklists/patches/issues_controller_patch.rb b/plugins/redmine_checklists/lib/redmine_checklists/patches/issues_controller_patch.rb deleted file mode 100644 index f007eb7..0000000 --- a/plugins/redmine_checklists/lib/redmine_checklists/patches/issues_controller_patch.rb +++ /dev/null @@ -1,87 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -module RedmineChecklists - module Patches - - module IssuesControllerPatch - def self.included(base) # :nodoc: - base.send(:include, InstanceMethods) - base.class_eval do - alias_method :build_new_issue_from_params_without_checklist, :build_new_issue_from_params - alias_method :build_new_issue_from_params, :build_new_issue_from_params_with_checklist - before_action :save_before_state, :only => [:update] - end - end - - module InstanceMethods - def build_new_issue_from_params_with_checklist - if params[:id].blank? - begin - if params[:copy_from].blank? - else - fill_checklist_attributes - end - rescue ActiveRecord::RecordNotFound - render_404 - return - end - end - build_new_issue_from_params_without_checklist - @issue.checklists_from_params = true - end - - def save_before_state - @issue.old_checklists = @issue.checklists.to_json - checklists_params = params[:issue].present? && params[:issue][:checklists_attributes].present? ? params[:issue][:checklists_attributes] : {} - @issue.removed_checklist_ids = - if checklists_params.present? - checklists_params = checklists_params.respond_to?(:to_unsafe_hash) ? checklists_params.to_unsafe_hash : checklists_params - checklists_params.map { |_k, v| v['id'].to_i if ['1', 'true'].include?(v['_destroy']) }.compact - else - [] - end - end - - def fill_checklist_attributes - return unless params[:issue].blank? - - @copy_from = Issue.visible.find(params[:copy_from]) - add_checklists_to_params(@copy_from.checklists) - end - - def add_checklists_to_params(checklists) - params[:issue].blank? ? params[:issue] = { :checklists_attributes => {} } : params[:issue][:checklists_attributes] = {} - checklists.each_with_index do |checklist_item, index| - params[:issue][:checklists_attributes][index.to_s] = { - is_done: checklist_item.is_done, - subject: checklist_item.subject, - position: checklist_item.position, - is_section: checklist_item.is_section - } - end - end - end - end - end -end - -unless IssuesController.included_modules.include?(RedmineChecklists::Patches::IssuesControllerPatch) - IssuesController.send(:include, RedmineChecklists::Patches::IssuesControllerPatch) -end diff --git a/plugins/redmine_checklists/lib/redmine_checklists/patches/issues_helper_patch.rb b/plugins/redmine_checklists/lib/redmine_checklists/patches/issues_helper_patch.rb deleted file mode 100644 index e0e8f9e..0000000 --- a/plugins/redmine_checklists/lib/redmine_checklists/patches/issues_helper_patch.rb +++ /dev/null @@ -1,86 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -module RedmineChecklists - module Patches - module IssuesHelperPatch - def self.included(base) - base.send(:include, InstanceMethods) - - base.class_eval do - alias_method :details_to_strings_without_checklists, :details_to_strings - alias_method :details_to_strings, :details_to_strings_with_checklists - end - end - - - module InstanceMethods - - def details_to_strings_with_checklists(details, no_html = false, options = {}) - details_checklist, details_other = details.partition{ |x| x.prop_key == 'checklist' } - if @issue.nil? || !User.current.allowed_to?(:view_checklists, @issue.try(:project), global: @issue.present?) - return details_to_strings_without_checklists(details_other, no_html, options) - end - - details_checklist.map do |detail| - result = [] - diff = Hash.new([]) - - if Checklist.old_format?(detail) - result << "<b>#{l(:label_checklist_item)}</b> #{l(:label_checklist_changed_from)} #{detail.old_value} #{l(:label_checklist_changed_to)} #{detail.value}" - else - diff = JournalChecklistHistory.new(detail.old_value, detail.value).diff - end - - checklist_item_label = lambda do |item| - item[:is_section] ? l(:label_checklist_section) : l(:label_checklist_item) - end - - if diff[:done].any? - diff[:done].each do |item| - result << "<b>#{ERB::Util.h l(:label_checklist_item)}</b> <input type='checkbox' class='checklist-checkbox' #{item.is_done ? 'checked' : '' } disabled> <i>#{ERB::Util.h item[:subject]}</i> #{ERB::Util.h l(:label_checklist_done)}" - end - end - - if diff[:undone].any? - diff[:undone].each do |item| - result << "<b>#{ERB::Util.h l(:label_checklist_item)}</b> <input type='checkbox' class='checklist-checkbox' #{item.is_done ? 'checked' : '' } disabled> <i>#{ERB::Util.h item[:subject]}</i> #{ERB::Util.h l(:label_checklist_undone)}" - end - end - - result = result.join('</li><li>').html_safe - result = nil if result.blank? - if result && no_html - result = result.gsub /<\/li><li>/, "\n" - result = result.gsub /<input type='checkbox' class='checklist-checkbox'[^c^>]*checked[^>]*>/, '[x]' - result = result.gsub /<input type='checkbox' class='checklist-checkbox'[^c^>]*>/, '[ ]' - result = result.gsub /<[^>]*>/, '' - result = CGI.unescapeHTML(result) - end - result - end.compact + details_to_strings_without_checklists(details_other, no_html, options) - end - end - end - end -end - -unless IssuesHelper.included_modules.include?(RedmineChecklists::Patches::IssuesHelperPatch) - IssuesHelper.send(:include, RedmineChecklists::Patches::IssuesHelperPatch) -end diff --git a/plugins/redmine_checklists/lib/redmine_checklists/patches/notifiable_patch.rb b/plugins/redmine_checklists/lib/redmine_checklists/patches/notifiable_patch.rb deleted file mode 100644 index a6daac4..0000000 --- a/plugins/redmine_checklists/lib/redmine_checklists/patches/notifiable_patch.rb +++ /dev/null @@ -1,20 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - - diff --git a/plugins/redmine_checklists/lib/redmine_checklists/patches/project_patch.rb b/plugins/redmine_checklists/lib/redmine_checklists/patches/project_patch.rb deleted file mode 100644 index 66636e9..0000000 --- a/plugins/redmine_checklists/lib/redmine_checklists/patches/project_patch.rb +++ /dev/null @@ -1,46 +0,0 @@ -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -require_dependency 'project' - -module RedmineChecklists - module Patches - module ProjectPatch - def self.included(base) # :nodoc: - base.send(:include, InstanceMethods) - base.class_eval do - alias_method :copy_issues_without_checklist, :copy_issues - alias_method :copy_issues, :copy_issues_with_checklist - end - end - - module InstanceMethods - - def copy_issues_with_checklist(project) - copy_issues_without_checklist(project) - issues.each{ |issue| issue.copy_checklists(issue.copied_from) if issue.reload.checklists.empty? } - end - end - end - end -end - -unless Project.included_modules.include?(RedmineChecklists::Patches::ProjectPatch) - Project.send(:include, RedmineChecklists::Patches::ProjectPatch) -end diff --git a/plugins/redmine_checklists/test/fixtures/checklists.yml b/plugins/redmine_checklists/test/fixtures/checklists.yml deleted file mode 100644 index 399383b..0000000 --- a/plugins/redmine_checklists/test/fixtures/checklists.yml +++ /dev/null @@ -1,27 +0,0 @@ ---- -# === Checklist for Issue(1) === -one: - id: 1 - is_done: false - subject: First todo - issue_id: 1 - -two: - id: 2 - is_done: true - subject: Second todo - issue_id: 1 - -# === Checklist for Issue(2) === -section_one: - id: 4 - is_done: false - subject: New section - is_section: true - issue_id: 2 - -three: - id: 3 - is_done: true - subject: Third todo - issue_id: 2 diff --git a/plugins/redmine_checklists/test/functional/checklists_controller_test.rb b/plugins/redmine_checklists/test/functional/checklists_controller_test.rb deleted file mode 100644 index 855fe3c..0000000 --- a/plugins/redmine_checklists/test/functional/checklists_controller_test.rb +++ /dev/null @@ -1,91 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) -class ChecklistsControllerTest < ActionController::TestCase - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers, - :time_entries, - :journals, - :journal_details, - :queries - RedmineChecklists::TestCase.create_fixtures(Redmine::Plugin.find(:redmine_checklists).directory + '/test/fixtures/', [:checklists]) - - def setup - RedmineChecklists::TestCase.prepare - Setting.default_language = 'en' - Project.find(1).enable_module!(:checklists) - User.current = nil - @project_1 = Project.find(1) - @issue_1 = Issue.find(1) - @checklist_1 = Checklist.find(1) - end - - test "should post done" do - # log_user('admin', 'admin') - @request.session[:user_id] = 1 - - compatible_xhr_request :put, :done, :is_done => 'true', :id => '1' - assert_response :success, 'Post done not working' - assert_equal true, Checklist.find(1).is_done, 'Post done not working' - end - - test "should not post done by deny user" do - # log_user('admin', 'admin') - @request.session[:user_id] = 5 - - compatible_xhr_request :put, :done, :is_done => true, :id => "1" - assert_response 403, "Post done accessible for all" - end - - test "should view issue with checklist" do - # log_user('admin', 'admin') - @request.session[:user_id] = 1 - @controller = IssuesController.new - compatible_request :get, :show, :id => @issue_1.id - assert_select 'ul#checklist_items li#checklist_item_1', @checklist_1.subject, "Issue won't view for admin" - end - - test "should not view issue with checklist if deny" do - # log_user('anonymous', '') - @request.session[:user_id] = 5 - @controller = IssuesController.new - compatible_request :get, :show, :id => @issue_1.id - assert_select 'ul#checklist_items', false, "Issue view for anonymous" - end -end diff --git a/plugins/redmine_checklists/test/functional/issues_controller_test.rb b/plugins/redmine_checklists/test/functional/issues_controller_test.rb deleted file mode 100644 index f36646b..0000000 --- a/plugins/redmine_checklists/test/functional/issues_controller_test.rb +++ /dev/null @@ -1,236 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -# Re-raise errors caught by the controller. -# class HelpdeskMailerController; def rescue_action(e) raise e end; end - -class IssuesControllerTest < ActionController::TestCase - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers, - :time_entries, - :journals, - :journal_details, - :queries - - RedmineChecklists::TestCase.create_fixtures(Redmine::Plugin.find(:redmine_checklists).directory + '/test/fixtures/', [:checklists]) - - def setup - @request.session[:user_id] = 1 - RedmineChecklists::TestCase.prepare - end - - def test_new_issue_without_project - compatible_request :get, :new - assert_response :success - end - - def test_get_show_issue - issue = Issue.find(1) - assert_not_nil issue.checklists.first - compatible_request(:get, :show, :id => 1) - assert_response :success - assert_select "ul#checklist_items li#checklist_item_1", /First todo/ - assert_select "ul#checklist_items li#checklist_item_1 input[checked=?]", "checked", { :count => 0 } - assert_select "ul#checklist_items li#checklist_item_2 input[checked=?]", "checked" - end - - def test_get_edit_issue - compatible_request :get, :edit, :id => 1 - assert_response :success - end - - def test_get_copy_issue - compatible_request :get, :new, :project_id => 1, :copy_from => 1 - assert_response :success - assert_select "span#checklist_form_items span.checklist-subject", { :count => 3 } - assert_select "span#checklist_form_items span.checklist-edit input[value=?]", "First todo" - end - - def test_put_update_form - parameters = {:tracker_id => 2, - :checklists_attributes => { - "0" => {"is_done"=>"0", "subject"=>"FirstChecklist"}, - "1" => {"is_done"=>"0", "subject"=>"Second"}}} - - @request.session[:user_id] = 1 - issue = Issue.find(1) - compatible_xhr_request :put, :new, :issue => parameters, :project_id => issue.project - assert_response :success - assert_match 'text/javascript', response.content_type - assert_match 'FirstChecklist', response.body - end - - def test_added_attachment_shows_in_log_once - Setting[:plugin_redmine_checklists] = { :save_log => 1, :issue_done_ratio => 0 } - set_tmp_attachments_directory - parameters = { :tracker_id => 2, - :checklists_attributes => { - '0' => { 'is_done' => '0', 'subject' => 'First' }, - '1' => { 'is_done' => '0', 'subject' => 'Second' } } } - @request.session[:user_id] = 1 - issue = Issue.find(1) - compatible_request :post, :update, :issue => parameters, - :attachments => { '1' => { 'file' => uploaded_test_file('testfile.txt', 'text/plain'), 'description' => 'test file' } }, - :project_id => issue.project, - :id => issue.to_param - assert_response :redirect - assert_equal 1, Journal.last.details.where(:property => 'attachment').count - end - - def test_history_dont_show_old_format_checklists - Setting[:plugin_redmine_checklists] = { :save_log => 1, :issue_done_ratio => 0 } - @request.session[:user_id] = 1 - issue = Issue.find(1) - issue.journals.create!(:user_id => 1) - issue.journals.last.details.create!(:property => 'attr', - :prop_key => 'checklist', - :old_value => '[ ] TEST', - :value => '[x] TEST') - - compatible_request :post, :show, :id => issue.id - assert_response :success - last_journal = issue.journals.last - assert_equal last_journal.details.size, 1 - assert_equal last_journal.details.first.prop_key, 'checklist' - assert_select "#change-#{last_journal.id} .details li", 'Checklist item changed from [ ] TEST to [x] TEST' - end - - def test_empty_update_dont_write_to_journal - @request.session[:user_id] = 1 - issue = Issue.find(1) - journals_before = issue.journals.count - compatible_request :post, :update, :issue => {}, :id => issue.to_param, :project_id => issue.project - assert_response :redirect - assert_equal journals_before, issue.reload.journals.count - end - - def test_create_issue_without_checklists - @request.session[:user_id] = 1 - assert_difference 'Issue.count' do - compatible_request :post, :create, :project_id => 1, :issue => { :tracker_id => 3, - :status_id => 2, - :subject => 'NEW issue without checklists', - :description => 'This is the description' - } - end - assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id - - issue = Issue.find_by_subject('NEW issue without checklists') - assert_not_nil issue - end - - def test_create_issue_with_checklists - @request.session[:user_id] = 1 - assert_difference 'Issue.count' do - compatible_request :post, :create, :project_id => 1, :issue => { :tracker_id => 3, - :status_id => 2, - :subject => 'NEW issue with checklists', - :description => 'This is the description', - :checklists_attributes => { '0' => { 'is_done' => '0', 'subject' => 'item 001', 'position' => '1' } } - } - end - assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id - - issue = Issue.find_by_subject('NEW issue with checklists') - assert_equal 1, issue.checklists.count - assert_equal 'item 001', issue.checklists.last.subject - assert_not_nil issue - end - - def test_delete_issue_with_checklists - @request.session[:user_id] = 1 - other_checklist = Checklist.first - other_checklist.update(position: 2) - - assert_difference('Issue.count', -1) do - assert_difference('Checklist.count', -2) do - compatible_request :post, :destroy, id: '2' - assert_response :redirect - end - end - assert_equal other_checklist.position, other_checklist.reload.position - end - - def test_create_issue_using_json - old_value = Setting.rest_api_enabled - Setting.rest_api_enabled = '1' - @request.session[:user_id] = 1 - assert_difference 'Issue.count' do - compatible_request :post, :create, :format => :json, :project_id => 1, :issue => { :tracker_id => 3, - :status_id => 2, - :subject => 'NEW JSON issue', - :description => 'This is the description', - :checklists_attributes => [{ :is_done => 0, :subject => 'JSON checklist' }] - }, - :key => User.find(1).api_key - end - assert_response :created - - issue = Issue.find_by_subject('NEW JSON issue') - assert_not_nil issue - assert_equal 1, issue.checklists.count - ensure - Setting.rest_api_enabled = old_value - end - - def test_history_displaying_for_checklist - @request.session[:user_id] = 1 - Setting[:plugin_redmine_checklists] = { save_log: 1, issue_done_ratio: 0 } - - issue = Issue.find(1) - journal = issue.journals.create!(user_id: 1) - journal.details.create!(:property => 'attr', - :prop_key => 'checklist', - :old_value => '[ ] TEST', - :value => '[x] TEST') - - # With permissions - @request.session[:user_id] = 1 - compatible_request :get, :show, id: issue.id - assert_response :success - assert_include 'changed from [ ] TEST to [x] TEST', response.body - - # Without permissions - @request.session[:user_id] = 5 - compatible_request :get, :show, id: issue.id - assert_response :success - assert_not_include 'changed from [ ] TEST to [x] TEST', response.body - end -end diff --git a/plugins/redmine_checklists/test/integration/api_test/checklists_test.rb b/plugins/redmine_checklists/test/integration/api_test/checklists_test.rb deleted file mode 100644 index 6d7bc56..0000000 --- a/plugins/redmine_checklists/test/integration/api_test/checklists_test.rb +++ /dev/null @@ -1,166 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../../test_helper', __FILE__) - -class Redmine::ApiTest::ChecklistsTest < Redmine::ApiTest::Base - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers, - :time_entries, - :journals, - :journal_details, - :queries - - RedmineChecklists::TestCase.create_fixtures(Redmine::Plugin.find(:redmine_checklists).directory + '/test/fixtures/', [:checklists]) - - def setup - Setting.rest_api_enabled = '1' - end - - def test_get_checklists_xml - compatible_api_request :get, '/issues/1/checklists.xml', {}, credentials('admin') - - assert_select 'checklists[type=array]' do - assert_select 'checklist' do - assert_select 'id', :text => '1' - assert_select 'subject', :text => 'First todo' - end - end - end - - def test_get_checklists_with_section_xml - compatible_api_request :get, '/issues/2/checklists.xml', {}, credentials('admin') - - assert_select 'checklists[type=array]' do - assert_select 'checklist' do - assert_select 'id', :text => '4' - assert_select 'subject', :text => 'New section' - assert_select 'is_section', :text => 'true' - end - end - end - - def test_get_checklists_1_xml - compatible_api_request :get, '/checklists/1.xml', {}, credentials('admin') - - assert_select 'checklist' do - assert_select 'id', :text => '1' - assert_select 'subject', :text => 'First todo' - end - end - - def test_get_checklists_2_with_section_xml - compatible_api_request :get, '/checklists/4.xml', {}, credentials('admin') - - assert_select 'checklist' do - assert_select 'id', :text => '4' - assert_select 'subject', :text => 'New section' - assert_select 'is_section', :text => 'true' - end - end - - def test_checklists_2_should_not_section_xml - compatible_api_request :get, '/checklists/3.xml', {}, credentials('admin') - - assert_select 'checklist' do - assert_select 'id', :text => '3' - assert_select 'subject', :text => 'Third todo' - assert_select 'is_section', :text => 'false' - end - end - - def test_post_checklists_xml - parameters = { :checklist => { :issue_id => 1, - :subject => 'api_test_001', - :is_done => true } } - assert_difference('Checklist.count') do - compatible_api_request :post, '/issues/1/checklists.xml', parameters, credentials('admin') - end - - checklist = Checklist.order('id DESC').first - assert_equal parameters[:checklist][:subject], checklist.subject - - assert_response :created - assert_match 'application/xml', @response.content_type - assert_select 'checklist id', :text => checklist.id.to_s - end - - def test_put_checklists_1_xml - parameters = { :checklist => { subject: 'Item_UPDATED', is_done: '1' } } - - assert_no_difference('Checklist.count') do - compatible_api_request :put, '/checklists/1.xml', parameters, credentials('admin') - end - - checklist = Checklist.find(1) - assert_equal parameters[:checklist][:subject], checklist.subject - end - - def test_recalculate_ratio_after_multirequests - issue = Issue.find(1) - with_checklists_settings('issue_done_ratio' => '1') do - assert_equal 0, issue.reload.done_ratio - - parameters_array = [ - [1, { :checklist => { subject: 'Item 1', is_done: '1' } }], - [2, { :checklist => { subject: 'Item 2', is_done: '1' } }], - [1, { :checklist => { subject: 'Item 1', is_done: '0' } }], - [2, { :checklist => { subject: 'Item 2', is_done: '1' } }] - ] - - assert_no_difference('Checklist.count') do - parameters_array.each do |params| - compatible_api_request :put, "/checklists/#{params[0]}.xml", params[1], credentials('admin') - assert ['200', '204'].include?(response.code) - end - end - - assert_equal 50, issue.reload.done_ratio - end - end - - def test_delete_1_xml - assert_difference 'Checklist.count', -1 do - compatible_api_request :delete, '/checklists/1.xml', {}, credentials('admin') - end - - assert ['200', '204'].include?(response.code) - assert_equal '', @response.body - assert_nil Checklist.find_by_id(1) - end -end diff --git a/plugins/redmine_checklists/test/integration/common_issue_test.rb b/plugins/redmine_checklists/test/integration/common_issue_test.rb deleted file mode 100644 index 458c628..0000000 --- a/plugins/redmine_checklists/test/integration/common_issue_test.rb +++ /dev/null @@ -1,62 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) -class CommonIssueTest < RedmineChecklists::IntegrationTest - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers, - :time_entries, - :journals, - :journal_details, - :queries - RedmineChecklists::TestCase.create_fixtures(Redmine::Plugin.find(:redmine_checklists).directory + '/test/fixtures/', [:checklists]) - - def setup - RedmineChecklists::TestCase.prepare - Setting.default_language = 'en' - @project_1 = Project.find(1) - @issue_1 = Issue.find(1) - @checklist_1 = Checklist.find(1) - end - - def test_global_search_with_checklist - log_user('admin', 'admin') - compatible_request :get, '/search?q=First' - assert_response :success - end -end diff --git a/plugins/redmine_checklists/test/test_helper.rb b/plugins/redmine_checklists/test/test_helper.rb deleted file mode 100644 index 39fc8e9..0000000 --- a/plugins/redmine_checklists/test/test_helper.rb +++ /dev/null @@ -1,86 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path(File.dirname(__FILE__) + '/../../../test/test_helper') - -module RedmineChecklists - module TestHelper - def compatible_request(type, action, parameters = {}) - return send(type, action, :params => parameters) if Rails.version >= '5.1' - send(type, action, parameters) - end - - def compatible_xhr_request(type, action, parameters = {}) - return send(type, action, :params => parameters, :xhr => true) if Rails.version >= '5.1' - xhr type, action, parameters - end - - def compatible_api_request(type, action, parameters = {}, headers = {}) - return send(type, action, :params => parameters, :headers => headers) if Redmine::VERSION.to_s >= '3.4' - send(type, action, parameters, headers) - end - - def issues_in_list - ids = css_select('tr.issue td.id a').map { |tag| tag.to_s.gsub(/<.*?>/, '') }.map(&:to_i) - Issue.where(:id => ids).sort_by { |issue| ids.index(issue.id) } - end - - def with_checklists_settings(options, &block) - original_settings = Setting.plugin_redmine_checklists - Setting.plugin_redmine_checklists = original_settings.merge(Hash[options.map {|k,v| [k, v]}]) - yield - ensure - Setting.plugin_redmine_checklists = original_settings - end - end -end - -include RedmineChecklists::TestHelper - -class RedmineChecklists::IntegrationTest < Redmine::IntegrationTest; end - -class RedmineChecklists::TestCase - def self.create_fixtures(fixtures_directory, table_names, class_names = {}) - ActiveRecord::FixtureSet.create_fixtures(fixtures_directory, table_names, class_names = {}) - end - - def self.prepare - Role.find([1,2]).each do |r| # For anonymous - r.permissions << :view_checklists - r.save - end - - Role.find(1, 2, 3, 4).each do |r| - r.permissions << :edit_checklists - r.save - end - - Role.find(3, 4).each do |r| - r.permissions << :done_checklists - r.save - end - - Role.find([2]).each do |r| - r.permissions << :manage_checklist_templates - r.save - end - end -end diff --git a/plugins/redmine_checklists/test/unit/checklist_test.rb b/plugins/redmine_checklists/test/unit/checklist_test.rb deleted file mode 100644 index 8034beb..0000000 --- a/plugins/redmine_checklists/test/unit/checklist_test.rb +++ /dev/null @@ -1,138 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -class ChecklistTest < ActiveSupport::TestCase - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers, - :time_entries, - :journals, - :journal_details, - :queries - - RedmineChecklists::TestCase.create_fixtures(Redmine::Plugin.find(:redmine_checklists).directory + '/test/fixtures/', [:checklists]) - def setup - RedmineChecklists::TestCase.prepare - Setting.default_language = 'en' - @project_1 = Project.find(1) - @issue_1 = Issue.create(:project_id => 1, :tracker_id => 1, :author_id => 1, - :status_id => 1, :priority => IssuePriority.first, - :subject => 'Invoice Issue 1') - @checklist_1 = Checklist.create(:subject => 'TEST1', :position => 1, :issue => @issue_1) - end - - test "should save checklist" do - assert @checklist_1.save, "Checklist save error" - end - - test "should not save checklist without subject" do - @checklist_1.subject = nil - assert !@checklist_1.save, "Checklist save with nil subject" - end - - test "should not save checklist without position" do - @checklist_1.position = nil - assert !@checklist_1.save, "Checklist save with nil position" - end - - test "should not save checklist with non integer position" do - @checklist_1.position = "string" - assert !@checklist_1.save, "Checklist save with non ingeger position" - end - - test "should return project info" do - assert_equal @project_1, @checklist_1.project, "Helper project broken" - end - - test "should return info about checklist" do - assert_equal "[ ] #{@checklist_1.subject}", @checklist_1.info, "Helper info broken" - @checklist_1.is_done = 1 - assert_equal "[x] #{@checklist_1.subject}", @checklist_1.info, "Helper info broken" - end - - def test_should_correct_recalculate_rate - issues = [ - [Issue.create(project_id: 1, tracker_id: 1, author_id: 1, status_id: 1, priority: IssuePriority.first, subject: "TI #1", done_ratio: 0, - checklists_attributes: { - '0' => { subject: 'item 1', is_done: false }, - '1' => { subject: 'item 2', is_done: false }, - '2' => { subject: 'item 3', is_done: true }, - }), - 30], - [Issue.create(project_id: 1, tracker_id: 1, author_id: 1, status_id: 1, priority: IssuePriority.first, subject: "TI #2", done_ratio: 0, - checklists_attributes: { - '0' => { subject: 'item 1', is_done: false }, - '1' => { subject: 'item 2', is_done: true }, - '2' => { subject: 'item 3', is_done: true }, - }), - 60], - [Issue.create(project_id: 1, tracker_id: 1, author_id: 1, status_id: 1, priority: IssuePriority.first, subject: "TI #3", done_ratio: 0, - checklists_attributes: { - '0' => { subject: 'item 1', is_done: true }, - '1' => { subject: 'item 2', is_done: true }, - '2' => { subject: 'item 3', is_done: true }, - }), - 100], - [Issue.create(project_id: 1, tracker_id: 1, author_id: 1, status_id: 1, priority: IssuePriority.first, subject: "TI #4", done_ratio: 0, - checklists_attributes: { - '0' => { subject: 'item 1', is_done: false }, - '1' => { subject: 'item 2', is_done: false }, - '2' => { subject: 'section 1', is_done: true, is_section: true }, - '3' => { subject: 'item 3', is_done: true }, - }), - 30], - [Issue.create(project_id: 1, tracker_id: 1, author_id: 1, status_id: 1, priority: IssuePriority.first, subject: "TI #5", done_ratio: 0, - checklists_attributes: { - '0' => { subject: 'section 1', is_done: true, is_section: true } - }), - 0] - ] - - with_checklists_settings('issue_done_ratio' => '1') do - issues.each do |issue, after_ratio| - assert_equal 0, issue.done_ratio - Checklist.recalc_issue_done_ratio(issue.id) - issue.reload - assert_equal after_ratio, issue.done_ratio - end - end - ensure - issues.each { |issue, ratio| issue.destroy } - end -end diff --git a/plugins/redmine_checklists/test/unit/issue_test.rb b/plugins/redmine_checklists/test/unit/issue_test.rb deleted file mode 100644 index 87fe01f..0000000 --- a/plugins/redmine_checklists/test/unit/issue_test.rb +++ /dev/null @@ -1,85 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) -include RedmineChecklists::TestHelper - -class IssueTest < ActiveSupport::TestCase - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers, - :time_entries, - :journals, - :journal_details, - :queries - - RedmineChecklists::TestCase.create_fixtures(Redmine::Plugin.find(:redmine_checklists).directory + '/test/fixtures/', [:checklists]) - def setup - RedmineChecklists::TestCase.prepare - Setting.default_language = 'en' - @project = Project.find(1) - @issue = Issue.create(:project => @project, :tracker_id => 1, :author_id => 1, - :status_id => 1, :priority => IssuePriority.first, - :subject => 'TestIssue') - @checklist_1 = Checklist.create(:subject => 'TEST1', :position => 1, :issue => @issue) - @checklist_2 = Checklist.create(:subject => 'TEST2', :position => 2, :issue => @issue, :is_done => true) - @issue.reload - end - - def test_issue_shouldnt_close_when_it_has_unfinished_checklists - with_checklists_settings('block_issue_closing' => '1') do - @issue.status_id = 5 - assert !@issue.valid? - end - end - - def test_validation_should_be_ignored_if_setting_disabled - with_checklists_settings('block_issue_closing' => '0') do - @issue.status_id = 5 - assert @issue.valid? - end - end - - def test_issue_should_close_when_all_checklists_finished - with_checklists_settings('block_issue_closing' => '1') do - @checklist_1.update(is_done: true) - assert @issue.valid? - end - ensure - @checklist_1.update(is_done: false) - end -end diff --git a/plugins/redmine_checklists/test/unit/project_test.rb b/plugins/redmine_checklists/test/unit/project_test.rb deleted file mode 100644 index d32ff14..0000000 --- a/plugins/redmine_checklists/test/unit/project_test.rb +++ /dev/null @@ -1,73 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Checklists (redmine_checklists) plugin, -# issue checklists management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_checklists 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 3 of the License, or -# (at your option) any later version. -# -# redmine_checklists 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 redmine_checklists. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -class ProjectTest < ActiveSupport::TestCase - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers, - :time_entries, - :journals, - :journal_details, - :queries - - RedmineChecklists::TestCase.create_fixtures(Redmine::Plugin.find(:redmine_checklists).directory + '/test/fixtures/', - [:checklists]) - def setup - RedmineChecklists::TestCase.prepare - Setting.default_language = 'en' - @project_1 = Project.find(1) - @issue_1 = Issue.create(:project => @project_1, :tracker_id => 1, :author_id => 1, - :status_id => 1, :priority => IssuePriority.first, - :subject => 'TestIssue') - @checklist_1 = Checklist.create(:subject => 'TEST1', :position => 1, :issue => @issue_1) - @checklist_1 = Checklist.create(:subject => 'TEST2', :position => 2, :issue => @issue_1, :is_done => true) - end - - test 'should copy checklists' do - project_copy = Project.copy_from(Project.find(1)) - project_copy.name = 'Test name' - project_copy.identifier = Project.next_identifier - project_copy.copy(Project.find(1)) - - checklists_copies = project_copy.issues.where(:subject => 'TestIssue').first.checklists - assert_equal(checklists_copies.count, 2) - assert_equal(checklists_copies.where(:subject => 'TEST1').first.is_done, false) - assert_equal(checklists_copies.where(:subject => 'TEST2').first.is_done, true) - end -end diff --git a/plugins/redmine_monitoring_controlling/README.rdoc b/plugins/redmine_monitoring_controlling/README.rdoc deleted file mode 100644 index 48cb1a5..0000000 --- a/plugins/redmine_monitoring_controlling/README.rdoc +++ /dev/null @@ -1,53 +0,0 @@ -= Monitoring & Controlling (M&C) - Redmine Plugin - -M&C is a Redmine Plugin used as a chart tool to monitoring issues' project - -== Website - Portuguese only - -* Visite: Monitoramento-&-Controle[http://alexmonteiro.github.com/Redmine-Monitoring-Controlling] - -== Features -===Master Version (0.1.2) (Redmine 1.4.x or 2.0.x) -====Release notes -* Included progress bar on top right -* Refactoring menu structure -* Scrollbar on Time Management charts -====Task Management -* Pie and Bar Chart of issues by category; -* Pie Chart of issues by statuses; -* Pie Chart of manageable and unmanagleabe issues; -* Chart with overdue tasks by project. -====Time Management -* Line chart with estimated hours and spent hours till due date of tasks. -* Column chart with ammount of estimated and spent hours on project. -====Human Resource Management -* Column Bar charts issues by Assignee -* Column Bar chart with issues by Status of each Assignee - -== How to install - -=== Requirements - -* Redmine trunk version; - -=== Step-by-step - -* Copy or clone the app on Redmine plugin folder with the same name like: /vendor/plugins/redmine_monitoring_controlling - - cd /{redmineInstalationDir}/vendor/plugins - git clone https://github.com/alexmonteiro/Redmine-Monitoring-Controlling.git redmine_monitoring_controlling - -* Run - rake db:migrate_plugins to copy the assets. -* Restart your redmine application. -* Activate your M&C on projects modulues. - -== License - -Redmine Monitoring & Controlling Plugin is open source and released under the terms of the {GNU General Public License - GPL - v3}[https://github.com/alexmonteiro/Redmine-Monitoring-Controlling/blob/master/license.txt]. -Check {GNU GPL v3 quick guide}[http://www.gnu.org/licenses/quick-guide-gplv3.html] for more information. - -== Credits - -* Highcharts[http://www.highcharts.com/]: interactive javascript charts for your web projects; -* Railscasts[http://railscasts.com/]: learn how to use highcharts on your rails app in #223[http://railscasts.com/episodes/223-charts] episode. diff --git a/plugins/redmine_monitoring_controlling/app/controllers/home_monitoring_controlling_project_controller.rb b/plugins/redmine_monitoring_controlling/app/controllers/home_monitoring_controlling_project_controller.rb deleted file mode 100644 index acba51f..0000000 --- a/plugins/redmine_monitoring_controlling/app/controllers/home_monitoring_controlling_project_controller.rb +++ /dev/null @@ -1,119 +0,0 @@ -class HomeMonitoringControllingProjectController < ApplicationController - unloadable - - layout 'base' - before_action :find_project, :authorize - menu_item :redmine_monitoring_controlling - - def index - #tool instance - tool = McTools.new - - #get main project - @project = Project.find_by_identifier(params[:id]) - - #get projects and sub projects - stringSqlProjectsSubProjects = tool.return_ids(@project.id) - - @projects_subprojects = Project.find_by_sql("select * from projects where id in (#{stringSqlProjectsSubProjects});") - @all_project_issues = Issue.find_by_sql("select * from issues where project_id in (#{stringSqlProjectsSubProjects});") - - # total issues from the project and subprojects - @totalIssues = Issue.where(:project_id => [stringSqlProjectsSubProjects]).count - - #get count of issues by category - @issuesbycategory = IssueStatus.find_by_sql(["select trackers.name, trackers.position, count(*) as totalbycategory, - (select count(*) - from issues - where project_id in (#{stringSqlProjectsSubProjects}) - and issues.tracker_id = trackers.id - and status_id in (select id from issue_statuses where is_closed = ?) - - ) as totaldone, - (select count(*) - from issues - where project_id in (#{stringSqlProjectsSubProjects}) - and issues.tracker_id = trackers.id - and status_id in (select id from issue_statuses where is_closed = ?) - - ) as totalundone - from trackers, projects_trackers, issues - where projects_trackers.tracker_id = trackers.id - and projects_trackers.project_id = issues.project_id - and issues.tracker_id = trackers.id - and projects_trackers.project_id in (#{stringSqlProjectsSubProjects}) - group by trackers.id, trackers.name, trackers.position - order by 2;", true, false]) - - - #get statuses by main project and subprojects - if @totalIssues > 0 - @statuses = IssueStatus.find_by_sql("SELECT *, - ((SELECT COUNT(1) FROM issues where project_id in (#{stringSqlProjectsSubProjects}) and status_id = issue_statuses.id) - / - #{@totalIssues})*100 as percent, - (SELECT COUNT(1) FROM issues where project_id in (#{stringSqlProjectsSubProjects}) and status_id = issue_statuses.id) - AS totalissues - FROM issue_statuses;") - else - @statuses = nil - end - - #get management issues by main project - @managementissues = Issue.find_by_sql("select 1 as id, '#{t :manageable_label}' as typemanagement, count(1) as totalissues - from issues where project_id in (#{stringSqlProjectsSubProjects}) and due_date is not null - union - select 2 as id, '#{t :unmanageable_label}' as typemanagement, count(1) as totalissues - from issues where project_id in (#{stringSqlProjectsSubProjects}) and due_date is null;") - - - #get overdue issues for char by by project and subprojects - @overdueissueschart = Issue.find_by_sql(["select 2 as id, '#{t :overdue_label}' as typeissue, count(1) as totalissuedelayed - from issues - where project_id in (#{stringSqlProjectsSubProjects}) - and due_date is not null - and due_date < '#{Date.today}' - and status_id in (select id from issue_statuses where is_closed = ?) - union - select 1 as id, '#{t :delivered_label}' as typeissue, count(1) as totalissuedelayed - from issues - where project_id in (#{stringSqlProjectsSubProjects}) - and due_date is not null - and due_date < '#{Date.today}' - and status_id in (select id from issue_statuses where is_closed = ?) - union - select 3 as id, '#{t :tobedelivered_label}' as typeissue, count(1) as totalissuedelayed - from issues - where project_id in (#{stringSqlProjectsSubProjects}) - and due_date is not null - and due_date >= '#{Date.today}' - and status_id in (select id from issue_statuses where is_closed = ?) - order by 1;", false, true, false]) - - - #get overdueissues by project and subprojects - @overdueissues = Issue.find_by_sql(["select * - from issues - where project_id in (#{stringSqlProjectsSubProjects}) - and due_date is not null - and due_date < '#{Date.today}' - and status_id in (select id from issue_statuses where is_closed = ? ) - order by due_date;",false]) - - #get unmanagement issues by main project - @unmanagementissues = Issue.find_by_sql("select * - from issues where project_id in (#{stringSqlProjectsSubProjects}) - and due_date is null - order by 1;") - - - - - - end - - private - def find_project - @project=Project.find(params[:id]) - end -end diff --git a/plugins/redmine_monitoring_controlling/app/controllers/mc_human_resource_mgmt_project_controller.rb b/plugins/redmine_monitoring_controlling/app/controllers/mc_human_resource_mgmt_project_controller.rb deleted file mode 100644 index f7fad67..0000000 --- a/plugins/redmine_monitoring_controlling/app/controllers/mc_human_resource_mgmt_project_controller.rb +++ /dev/null @@ -1,39 +0,0 @@ -class McHumanResourceMgmtProjectController < ApplicationController - unloadable - - layout 'base' - before_action :find_project, :authorize - menu_item :redmine_monitoring_controlling - - def index - #tool instance - tool = McTools.new - - #get main project - @project = Project.find_by_identifier(params[:id]) - - #get projects and sub projects - stringSqlProjectsSubProjects = tool.return_ids(@project.id) - - # total issues from the project and subprojects - @totalIssues = Issue.where(:project_id => [stringSqlProjectsSubProjects]).count - - @statusesByAssigneds = Issue.find_by_sql("select assigned_to_id, (select firstname from users where id = assigned_to_id) as assigned_first_name, (select lastname from users where id = assigned_to_id) as assigned_last_name, - issue_statuses.id, issue_statuses.name, - (select COUNT(1) - from issues i - where i.project_id in (#{stringSqlProjectsSubProjects}) - and ((i.assigned_to_id = issues.assigned_to_id and i.assigned_to_id is not null)or(i.assigned_to_id is null and issues.assigned_to_id is null)) and i.status_id = issue_statuses.id) as totalassignedbystatuses - from issues, issue_statuses - where project_id in (#{stringSqlProjectsSubProjects}) - group by assigned_to_id, assigned_first_name, assigned_last_name, issue_statuses.id, issue_statuses.name - order by 2,3;") || nil - end - - private - def find_project - @project=Project.find(params[:id]) - end - - -end diff --git a/plugins/redmine_monitoring_controlling/app/controllers/mc_time_mgmt_project_controller.rb b/plugins/redmine_monitoring_controlling/app/controllers/mc_time_mgmt_project_controller.rb deleted file mode 100644 index 0d21b85..0000000 --- a/plugins/redmine_monitoring_controlling/app/controllers/mc_time_mgmt_project_controller.rb +++ /dev/null @@ -1,70 +0,0 @@ -class McTimeMgmtProjectController < ApplicationController - unloadable - - layout 'base' - before_action :find_project, :authorize - menu_item :redmine_monitoring_controlling - - def index - #tool instance - tool = McTools.new - - #get main project - @project = Project.find_by_identifier(params[:id]) - - #get projects and sub projects - stringSqlProjectsSubProjects = tool.return_ids(@project.id) - - # total issues from the project and subprojects - @totalIssues = Issue.where(:project_id => [stringSqlProjectsSubProjects]).count - - - @issuesSpentHours = Issue.find_by_sql("select issues.due_date, sum(issues.estimated_hours) as estimated_hours, - (select sum(i.estimated_hours) - from issues i - where i.project_id in (#{stringSqlProjectsSubProjects}) - /*and i.due_date is not null*/ - and i.due_date <= issues.due_date and i.parent_id is null) as sumestimatedhours, - (select sum(hours) from time_entries where project_id in (#{stringSqlProjectsSubProjects}) and spent_on <= issues.due_date ) as sumspenthours - from issues - where issues.project_id in (#{stringSqlProjectsSubProjects}) - /*and due_date is not null*/ - and due_date <= issues.due_date - and parent_id is null - group by issues.due_date - order by due_date;") - - - @spentHoursByVersion = Issue.find_by_sql("select versions.name as version, versions.effective_date, sum(issues.estimated_hours) as estimated_hours, - (select sum(i.estimated_hours) - from issues i - where i.project_id in (#{stringSqlProjectsSubProjects}) - and i.fixed_version_id = versions.id - /*and i.due_date is not null*/ - and i.parent_id is null - and i.due_date <= versions.effective_date) as sumestimatedhours, - (select sum(hours) - from issues i, time_entries t - where i.project_id in (#{stringSqlProjectsSubProjects}) - and i.project_id = t.project_id - and i.id = t.issue_id - and i.fixed_version_id = versions.id - and t.spent_on <= versions.effective_date) as sumspenthours - from issues, versions - where issues.project_id in (#{stringSqlProjectsSubProjects}) - and issues.parent_id is null - and issues.fixed_version_id = versions.id - and due_date <= versions.effective_date - group by versions.id, versions.name, versions.effective_date - order by versions.effective_date;") - - - end - - private - def find_project - @project=Project.find(params[:id]) - end - - -end diff --git a/plugins/redmine_monitoring_controlling/app/views/home_monitoring_controlling_project/_index.html.erb b/plugins/redmine_monitoring_controlling/app/views/home_monitoring_controlling_project/_index.html.erb deleted file mode 100644 index ad57cbf..0000000 --- a/plugins/redmine_monitoring_controlling/app/views/home_monitoring_controlling_project/_index.html.erb +++ /dev/null @@ -1,342 +0,0 @@ -<!-- -Tasks by Statuses / Situação por Tarefas ---> -<script type="text/javascript"> -$(function () { - var chart; - $(document).ready(function() { - chart = new Highcharts.Chart({ - credits: { - enabled: false - }, - chart: { - renderTo: 'container', - plotBackgroundColor: null, - plotBorderWidth: null, - plotShadow: false - }, - title: { - text: '<%=@project.name%>' - }, - tooltip: { - formatter: function() { - return '<b>'+ this.point.name +'</b>: '+ Highcharts.numberFormat(this.y,0) +' <%=t :tasks_label%>'; - } - }, - plotOptions: { - pie: { - allowPointSelect: true, - cursor: 'pointer', - dataLabels: { - enabled: true, - color: '#000000', - connectorColor: '#000000', - formatter: function() { - return '<b>'+ this.point.name +'</b>: '+ Highcharts.numberFormat(this.percentage,2) +' %'; - } - } - } - }, - series: [{ - type: 'pie', - data: <%=@statuses.map{ |situacao| [situacao.name.to_s, situacao.totalissues.to_i]}.inspect.html_safe%> - }] - }); - }); - -}); - -</script> -<script type="text/javascript"> -var chart; -$(document).ready(function() { - chart = new Highcharts.Chart({ - credits: { - enabled: false - }, - chart: { - renderTo: 'containerColumn', - type: 'column' - }, - title: { - text: '<%=t :statuses_issue_label_title %>' - }, - xAxis: { - categories: <%=@statuses.map{ |situacao| situacao.name.to_s}.inspect.html_safe%>, - labels: {enabled: false} - }, - yAxis: { - min: 0, - title: { - text: '<%=t :tasks_label%> ', - } - }, - legend: { - enabled: true - }, - tooltip: { - formatter: function() { - return '<b>'+ this.series.name +'</b><br/>'+ - '<%=t :tasks_label%> '+ Highcharts.numberFormat(this.y, 0); - } - }, - series: [ - <%@statuses.each do |cat|%> - { - name: <%=cat.name.inspect.html_safe%>, - data: [<%=cat.totalissues%>], - cursor: 'pointer', - events: { - // Default action for (left) clicking the data - click: function(point) { - window.open('../../projects/<%=@project.identifier%>/issues?set_filter=1&f%5B%5D=status_id&op%5Bstatus_id%5D=%3D&v%5Bstatus_id%5D%5B%5D=<%=cat.id%>&f%5B%5D=&c%5B%5D=status&c%5B%5D=priority&c%5B%5D=subject&c%5B%5D=author&c%5B%5D=assigned_to&c%5B%5D=start_date&c%5B%5D=due_date&c%5B%5D=spent_hours&c%5B%5D=done_ratio&group_by='); - } - }, - dataLabels: { - enabled: true, - rotation: -90, - color: '#FFFFFF', - align: 'right', - x: -3, - y: 10, - formatter: function() { - return this.y; - }, - style: { - font: 'normal 13px Verdana, sans-serif' - } - } - }<%if !(@statuses.last == cat)%>,<%end%> - <%end%> - ] - }); -}); -</script> - -<!-- - Task Management / Gerenciamento de Tarefas ---> -<script type="text/javascript"> -$(function () { - var chart; - $(document).ready(function() { - chart = new Highcharts.Chart({ - credits: { - enabled: false - }, - chart: { - renderTo: 'managementissues', - plotBackgroundColor: null, - plotBorderWidth: null, - plotShadow: false - }, - title: { - text: '<%=t :task_manageable_chart_title %>' - }, - tooltip: { - formatter: function() { - return '<b>'+ this.point.name +'</b>: '+ Highcharts.numberFormat(this.y,0)+ ' <%=t :tasksof_label%> '+<%= @project.issues.count %>; - } - }, - plotOptions: { - pie: { - allowPointSelect: true, - cursor: 'pointer', - showInLegend: true, - dataLabels: { - enabled: true, - color: '#000000', - connectorColor: '#000000', - distance: 0, - formatter: function() { - return Highcharts.numberFormat(this.percentage,2) +' %'; - } - } - } - }, - series: [{ - type: 'pie', - name: 'Tarefas por Situação', - data: <%=@managementissues.map{ |issue| [issue.typemanagement.to_s, issue.totalissues.to_i]}.inspect.html_safe%> - }] - }); - }); - -}); -</script> - -<script type="text/javascript"> -$(function () { - var chart; - $(document).ready(function() { - chart = new Highcharts.Chart({ - credits: { - enabled: false - }, - chart: { - renderTo: 'delayedissues', - plotBackgroundColor: null, - plotBorderWidth: null, - plotShadow: false - }, - title: { - text: '<%=t :task_manageable_chart_overdue_title %>' - }, - tooltip: { - formatter: function() { - return '<b>'+ this.point.name +'</b>: '+ Highcharts.numberFormat(this.y,0)+ ' <%=t :tasksof_label%> '+<%= @managementissues.first.totalissues %>+' <%=t :manageable_label%>'; - } - }, - plotOptions: { - pie: { - allowPointSelect: true, - cursor: 'pointer', - showInLegend: true, - dataLabels: { - enabled: true, - color: '#000000', - connectorColor: '#000000', - distance: 0, - formatter: function() { - return Highcharts.numberFormat(this.percentage,2) +' %'; - } - } - } - }, - series: [{ - type: 'pie', - name: 'Tarefas atrasadas', - data: <%=@overdueissueschart.map{ |issue| [issue.typeissue.to_s, issue.totalissuedelayed.to_i]}.inspect.html_safe%> - }] - }); - }); - -}); - -</script> - -<script type="text/javascript"> -$(function () { - var chart; - $(document).ready(function() { - chart = new Highcharts.Chart({ - credits: { - enabled: false - }, - chart: { - renderTo: 'categoryPie', - plotBackgroundColor: null, - plotBorderWidth: null, - plotShadow: false - }, - title: { - text: '<%=@project.name%>' - }, - tooltip: { - formatter: function() { - return '<b>'+ this.point.name +'</b>: '+ Highcharts.numberFormat(this.y,0) +' <%=t :tasks_label%>'; - } - }, - plotOptions: { - pie: { - allowPointSelect: true, - cursor: 'pointer', - dataLabels: { - enabled: true, - color: '#000000', - connectorColor: '#000000', - formatter: function() { - return '<b>'+ this.point.name +'</b>: '+ Highcharts.numberFormat(this.percentage,2) +' %'; - } - } - } - }, - series: [{ - type: 'pie', - data: <%=@issuesbycategory.map{ |category| [category.name.to_s, category.totalbycategory.to_i]}.inspect.html_safe%> - }] - }); - }); - -}); -</script> - -<script type="text/javascript"> -var chart; -$(document).ready(function() { - chart = new Highcharts.Chart({ - chart: { - renderTo: 'categoryStackedColumn', - type: 'column' - }, - title: { - text: '<%=@project.name%>' - }, - subtitle: { - text: '<%=t :categories_issue_label_title%>' - }, - scrollbar:{ - enabled: false - }, - credits: { - enabled: false - }, - xAxis: { - categories: [ - <% @issuesbycategory.each do |cat| %> - <%= cat.name.to_s.inspect.html_safe %>, - <%end%> - ], - labels: { - rotation: -45, - align: 'right', - style: { - font: 'normal 13px Verdana, sans-serif' - } - } - }, - yAxis: { - min: 0, - title: { - text: '' - } - }, - legend: { - enabled: true, - reversed: true - }, - tooltip: { - formatter: function() { - return ''+ - this.series.name +': '+ this.y +' ('+ Math.round(this.percentage) +'%)'; - } - }, - plotOptions: { - column: { - stacking: 'percent' - } - }, - series: [ - { - name: '<%=t :tobedelivered_label%>', - data: [ - <% @issuesbycategory.each do |cat| %> - <%= cat.totalundone %>, - <%end%> - ] , - color: '#AA4643' - }, - { - name: '<%=t :delivered_label%>', - data: [ - <% @issuesbycategory.each do |cat| %> - <%= cat.totaldone %>, - <%end%> - ] , - color: '#4572A7' - } - - ] - }); -}); -</script> \ No newline at end of file diff --git a/plugins/redmine_monitoring_controlling/app/views/home_monitoring_controlling_project/index.html.erb b/plugins/redmine_monitoring_controlling/app/views/home_monitoring_controlling_project/index.html.erb deleted file mode 100644 index 5f86708..0000000 --- a/plugins/redmine_monitoring_controlling/app/views/home_monitoring_controlling_project/index.html.erb +++ /dev/null @@ -1,83 +0,0 @@ -<%= render :partial => '/mc_menu/contentHeader' %> - -<% if @totalIssues > 0 %> - <%= render :partial => 'index' %> -<%end%> - - -<%= render :partial => '/mc_menu/mcmenu' %> - -<div class="central_charts"> - <% if @totalIssues > 0 %> - <h2><%=t :statuses_issue_label_title %> - <%= @all_project_issues.count %> <%=t :tasks_label%>, <%= @overdueissues.count %> <%=t :overdue_text%></h2> - - - - <div id="container" class="double_chart"></div> - <div id="containerColumn" class="double_chart"></div> - </div> - - <div class="double_charts"> - <h2><%= t :categories_issue_label_title %></h2> - - <div id="categoryPie" class="double_chart"></div> - <div id="categoryStackedColumn" class="double_chart"></div> - </div> - - <div class="double_charts"> - <h2><%= t :task_management_label_title %></h2> - - <div class="double_chart"> - <div id="managementissues" class="mini_chart"></div> - <div class="mini_note"> - <% @managementissues.each do |issue| %> - <div> - <%if (issue.id == 1)%> - <b><%= issue.typemanagement %>: <%= issue.totalissues %></b> - <div><%= t :manageable_text_tip %></div><br/> - <%else%> - <b><a href="#TB_inline?height=400&width=600&inlineId=hiddenModalContentUnmanageable&modal=false" title='<%= issue.typemanagement %>: <%= issue.totalissues %>' class="thickbox"><%= issue.typemanagement %>: <%= issue.totalissues %></a></b> - <div><%= t :unmanageable_text_tip %></div> - <div id="hiddenModalContentUnmanageable" style="display: none;"> - <% @unmanagementissues.each do |unmanagementissue| %> - <% link_unmanagementissue = unmanagementissue.id.to_s+' - '+unmanagementissue.subject %> - <div style="font-size: 11px; margin-left: 5px;"><%= link_to link_unmanagementissue, unmanagementissue %></div> - <%end%> - </div> - <%end%> - </div> - <%end%> - </div> - </div> - - <div class="double_chart"> - <div id="delayedissues" class="mini_chart"></div> - <div class="mini_note"> - <%@overdueissueschart.each do |issue|%> - <div> - <%if (issue.id == 2)%> - <b><a href="#TB_inline?height=400&width=600&inlineId=hiddenModalContentOverdue&modal=false" title='<%=issue.typeissue%>(<%=issue.totalissuedelayed%>)' class="thickbox"><%=issue.typeissue%>: <%=issue.totalissuedelayed%></a></b> - <div id="hiddenModalContentOverdue" style="display: none;"> - <% @overdueissues.each do |delayed| %> - <%link_name = delayed.id.to_s+' - '+delayed.subject%> - <div style="font-size: 11px; margin-left: 5px;"> - <%= link_to link_name, delayed %> - <span style="color: red;"><%= (Date.today - delayed.due_date).to_i %> <%= t :days_late_text %></span> - </div> - <%end%> - </div> - <%else%> - <b><%=issue.typeissue%>: <%=issue.totalissuedelayed%></b> - <%end%> - </div> - <%end%> - </div> - </div> - - <p id="notice"><%= notice %></p> - - <% else %> - <div id="errorExplanation"><%=t :time_mgmt_error_no_issues_found_text %></div> - <%end%> - -</div> - diff --git a/plugins/redmine_monitoring_controlling/app/views/mc_human_resource_mgmt_project/_scripts.html.erb b/plugins/redmine_monitoring_controlling/app/views/mc_human_resource_mgmt_project/_scripts.html.erb deleted file mode 100644 index 7b4a803..0000000 --- a/plugins/redmine_monitoring_controlling/app/views/mc_human_resource_mgmt_project/_scripts.html.erb +++ /dev/null @@ -1,163 +0,0 @@ -<!-- - Column Bar chart ---> -<script type="text/javascript"> -var chart; -$(document).ready(function() { - chart = new Highcharts.Chart({ - chart: { - renderTo: 'containerColumnBar', - type: 'column', - margin: [ 50, 50, 100, 80] - }, - credits: { - enabled: false - }, - scrollbar:{ - enabled: true - }, - title: { - text: '<%=t :hr_columnbar_title_label%>' - }, - xAxis: { - categories: [ - <% @statusesByAssigneds.group_by(&:assigned_to_id).each do |s, t| %> - <%= (s.nil? ? t(:hr_unassigned_issue_label) : (t[0].assigned_first_name.length > 0 ? t[0].assigned_first_name : t[0].assigned_last_name) ).inspect.html_safe%>, - <%end%> - ], - scrollbar: { - enabled: true - }, - labels: { - rotation: -45, - align: 'right', - style: { - font: 'normal 13px Verdana, sans-serif' - } - } - }, - plotOptions: { - series: { - cursor: 'pointer', - events: { - click: function(event) { - // Log to console - // console.log(event.point); - // console.log(event.point.config.user_id); - window.open('../../projects/<%=@project.identifier%>/issues?set_filter=1&f%5B%5D=status_id&op%5Bstatus_id%5D=*&f%5B%5D=assigned_to_id&op%5Bassigned_to_id%5D=%3D&v%5Bassigned_to_id%5D%5B%5D=' + event.point.config.user_id + '&f%5B%5D=&c%5B%5D=status&c%5B%5D=priority&c%5B%5D=subject&c%5B%5D=author&c%5B%5D=assigned_to&c%5B%5D=start_date&c%5B%5D=due_date&c%5B%5D=spent_hours&c%5B%5D=done_ratio&group_by='); - } - } - } - }, - yAxis: { - min: 0, - title: { - text: '<%=t :hr_columnbar_yaxis_label%>' - } - }, - legend: { - enabled: false - }, - tooltip: { - formatter: function() { - return '<b>'+ this.x +'</b><br/>'+ - '<%=t :tasks_label%>: '+ Highcharts.numberFormat(this.y, 0) ; - } - }, - series: [{ - data: [<% @statusesByAssigneds.group_by(&:assigned_to_id).each do |s, t| %> - {y: <%= t.map{|a| a.totalassignedbystatuses.to_i}.sum.inspect.html_safe%>, user_id: <%= (s.nil? ? 0 : s) %>}, - <%end%> - ], - dataLabels: { - enabled: true, - rotation: -90, - color: '#FFFFFF', - align: 'right', - x: -3, - y: 10, - formatter: function() { - return this.y; - }, - style: { - font: 'normal 13px Verdana, sans-serif' - } - } - }] - }); -}); -</script> -<!-- - Stacked Bar chart ---> -<script type="text/javascript"> -var chart; -$(document).ready(function() { - chart = new Highcharts.Chart({ - chart: { - renderTo: 'containerStackedBar', - type: 'bar' - }, - credits: { - enabled: false - }, - scrollbar:{ - enabled: true - }, - title: { - text: '<%=t :hr_stackedcolumnbar_title_label%>' - }, - - xAxis: { - categories: [ - <% @statusesByAssigneds.group_by(&:assigned_to_id).each do |s, t| %> - <%= (s.nil? ? t(:hr_unassigned_issue_label) : (t[0].assigned_first_name.length > 0 ? t[0].assigned_first_name : t[0].assigned_last_name) ).inspect.html_safe%>, - <%end%> - ] - }, - - yAxis: { - title: { - text: '<%=t :hr_stackedcolumnbar_yaxis_label%>' - } - }, - legend: { - backgroundColor: '#FFFFFF', - reversed: false, - y: -50 - }, - tooltip: { - formatter: function() { - return ''+ - this.series.name +': '+ this.y +''; - } - }, - plotOptions: { - series: { - cursor: 'pointer', - events: { - click: function(event) { - // Log to console - // console.log(event.point); - // console.log(event.point.config.user_id); - window.open('../../projects/<%=@project.identifier%>/issues?set_filter=1&f%5B%5D=status_id&op%5Bstatus_id%5D=%3D&v%5Bstatus_id%5D%5B%5D=' + event.point.config.issue_status_id + '&f%5B%5D=assigned_to_id&op%5Bassigned_to_id%5D=%3D&v%5Bassigned_to_id%5D%5B%5D=' + event.point.config.user_id + '&f%5B%5D=&c%5B%5D=status&c%5B%5D=priority&c%5B%5D=subject&c%5B%5D=author&c%5B%5D=assigned_to&c%5B%5D=start_date&c%5B%5D=due_date&c%5B%5D=spent_hours&c%5B%5D=done_ratio&group_by='); - } - }, - stacking: 'normal' - } - }, - series: - [ - <% @statusesByAssigneds.group_by(&:id).each do |s, t| %> - { - name: '<%= IssueStatus.find(s).name%>', - data: [ - <%= t.map {|a| "{y: " + a.totalassignedbystatuses.to_i.to_s + ", user_id: " + (a.assigned_to_id.nil? ? "0" : a.assigned_to_id.to_s) + ", issue_status_id: " + a.id.to_s + "},"} %> - ] - }, - <%end%> - ] - - }); -}); -</script> diff --git a/plugins/redmine_monitoring_controlling/app/views/mc_human_resource_mgmt_project/index.html.erb b/plugins/redmine_monitoring_controlling/app/views/mc_human_resource_mgmt_project/index.html.erb deleted file mode 100644 index fd80fb3..0000000 --- a/plugins/redmine_monitoring_controlling/app/views/mc_human_resource_mgmt_project/index.html.erb +++ /dev/null @@ -1,20 +0,0 @@ -<%= render :partial => '/mc_menu/contentHeader' %> - -<%= render :partial => 'scripts' %> - -<%= render :partial => '/mc_menu/mcmenu' %> - -<div class="central_charts"> - <% if @totalIssues > 0 %> - <h2><%=t :hr_mgmt_label_title %></h2> - <div id="containerColumnBar" class="central_chart"></div> - <div id="containerStackedBar" class="central_chart"></div> - </div> - - <div> - <p id="notice"><%= notice %></p> - - <% else %> - <div id="errorExplanation"><%=t :time_mgmt_error_no_issues_found_text %></div> - <%end%> -</div> diff --git a/plugins/redmine_monitoring_controlling/app/views/mc_menu/_contentHeader.html.erb b/plugins/redmine_monitoring_controlling/app/views/mc_menu/_contentHeader.html.erb deleted file mode 100644 index a18ad08..0000000 --- a/plugins/redmine_monitoring_controlling/app/views/mc_menu/_contentHeader.html.erb +++ /dev/null @@ -1,11 +0,0 @@ -<% @PluginFolderName = McTools.new.returnPluginFolderName %> -<% content_for :header_tags do %> - <%= stylesheet_link_tag 'thickbox', :plugin => @PluginFolderName, :media => "screen" %> - <%= stylesheet_link_tag 'monitoringcontrolling', :plugin => @PluginFolderName, :media => "screen" %> - <%= javascript_include_tag 'jquery.min.js', :plugin => @PluginFolderName %> - <%= javascript_include_tag 'rails', :plugin => @PluginFolderName %> - <%= javascript_include_tag 'highcharts', :plugin => @PluginFolderName %> - <%= javascript_include_tag 'highstock.js', :plugin => @PluginFolderName%> - <%= javascript_include_tag 'exporting', :plugin => @PluginFolderName %> - <%= javascript_include_tag 'thickbox', :plugin => @PluginFolderName %> -<% end %> diff --git a/plugins/redmine_monitoring_controlling/app/views/mc_menu/_mcmenu.html.erb b/plugins/redmine_monitoring_controlling/app/views/mc_menu/_mcmenu.html.erb deleted file mode 100644 index bb62c22..0000000 --- a/plugins/redmine_monitoring_controlling/app/views/mc_menu/_mcmenu.html.erb +++ /dev/null @@ -1,11 +0,0 @@ -<%= render :partial => '/mc_menu/progressbar' %> -<nav id="menu"> - <ul> - <li><%= link_to t(:mc_tasksmgmt_menu_label), { :controller => 'home_monitoring_controlling_project', :action => 'index' }, :class => ("home_monitoring_controlling_project" == params[:controller] ? "menu_selected" : "") %></li> - <li><%= link_to t(:mc_timemgmt_menu_label), { :controller => 'mc_time_mgmt_project', :action => 'index' }, :class => ("mc_time_mgmt_project" == params[:controller] ? "menu_selected" : "") %></li> - <li><%= link_to t(:mc_humanresourcemgmt_menu_label), { :controller => 'mc_human_resource_mgmt_project', :action => 'index' }, :class => ("mc_human_resource_mgmt_project" == params[:controller] ? "menu_selected" : "") %></li> - <li><span id="progressbar" style="width: 250px; margin: 0 0 0 0; float: right; padding: 0;"></span></li> - </ul> -</nav> - - diff --git a/plugins/redmine_monitoring_controlling/app/views/mc_menu/_progressbar.html.erb b/plugins/redmine_monitoring_controlling/app/views/mc_menu/_progressbar.html.erb deleted file mode 100644 index 28a4411..0000000 --- a/plugins/redmine_monitoring_controlling/app/views/mc_menu/_progressbar.html.erb +++ /dev/null @@ -1,96 +0,0 @@ -<% tools = McTools.new%> -<script type="text/javascript"> -var chart; -$(document).ready(function() { - chart = new Highcharts.Chart({ - chart: { - renderTo: 'progressbar', - type: 'bar', - height: 25, - margin: [-9, 0, -9, 0], - backgroundColor: 'transparent' - }, - exporting: { - enabled: false - }, - credits: { - enabled: false - }, - title: { - text: '' - }, - xAxis: { - categories: ['Progress'], - gridLineWidth : 0, - gridLineColor : '#FFFFFF', - lineWidth: 0, - minorGridLineWidth: 0, - lineColor: 'transparent', - minorTickLength: 0, - tickLength: 0, - labels : { - enabled: false - } - }, - yAxis: { - title: { - text: '' - }, - gridLineWidth : 0, - gridLineColor : '#FFFFFF', - lineWidth: 0, - minorGridLineWidth: 0, - lineColor: 'transparent', - minorTickLength: 0, - tickLength: 0, - labels : { - enabled: false - } - }, - legend: { - backgroundColor: '#FFFFFF', - reversed: true, - enabled: false - }, - tooltip: { - formatter: function() { - return ''+ - this.series.name +': '+ this.y + ' <%=t :tasks_label%>'; - }, - style: { - color: '#333333', - fontSize: '8pt', - padding: '2px' - } - }, - plotOptions: { - series: { - stacking: 'percent', - dataLabels: { - enabled: true, - align : 'center', - color: (Highcharts.theme && Highcharts.theme.dataLabelsColor) || 'white', - formatter: function() { - return Highcharts.numberFormat(this.percentage,2) +' %'; - } - } - } , - bar: { - borderWidth:0, - shadow: false, - borderRadius: 3 - } - }, - series: [{ - name: '<%=t :tobedelivered_label%>', - data: [<%=tools.returnTotalOfOpenTasks(params[:id])%>], - color: '#A0A0A0' - }, - { - name: '<%=t :delivered_label%>', - data: [<%=tools.returnTotalOfClosedTasks(params[:id])%>], - color: '#006600' - }] - }); -}); -</script> \ No newline at end of file diff --git a/plugins/redmine_monitoring_controlling/app/views/mc_time_mgmt_project/_scripts.html.erb b/plugins/redmine_monitoring_controlling/app/views/mc_time_mgmt_project/_scripts.html.erb deleted file mode 100644 index b407161..0000000 --- a/plugins/redmine_monitoring_controlling/app/views/mc_time_mgmt_project/_scripts.html.erb +++ /dev/null @@ -1,224 +0,0 @@ -<!-- - Timeline Sum Estimated Hours and Executed Hours by due dates ---> -<script type="text/javascript"> -var chart; -$(document).ready(function() { - chart = new Highcharts.Chart({ - credits: { - enabled: false - }, - chart: { - renderTo: 'containerSpentHours', - type: 'areaspline' - }, - title: { - text: '<%= @project.name%>' - }, - subtitle: { - text: '<%=t :time_mgmt_label_title%>' - }, - xAxis: { - categories: [ - <% @issuesSpentHours.each do | issue | %> - <%= issue.due_date.to_date.strftime(t(:default_date_format)).inspect.html_safe %>, - <%end%> - ], - - labels:{ - enabled: true, - rotation: 90, - y: 40 - } - }, - yAxis: { - title: { - text: '<%=t :time_mgmt_areaspline_yaxis_label %>' - }, - min: 0 - }, - tooltip: { - formatter: function() { - var s; - if (this.point.name) { // the pie chart - s = ''+ this.point.name +': '+ Highcharts.numberFormat(this.y,2) +' '+'<%=t :time_mgmt_hours_label%>'; - } else { - s = '<b>'+ this.series.name +'</b><br/>'+ this.x +' : '+ Highcharts.numberFormat(this.y,2) +' '+'<%=t :time_mgmt_hours_label%>'; - } - return s; - } - - - }, - plotOptions: { - areaspline: { - fillOpacity: 0.5 - } - }, - series: [ { - name: '<%=t :time_mgmt_estimated_label%>', - data: - [ - <% @issuesSpentHours.each do | issue | %> - <%=issue.sumestimatedhours.to_f%>, - <%end%> - ] - }, - { - name: '<%=t :time_mgmt_spent_label %>', - data: - [ - <% @issuesSpentHours.each do | issue | %> - <%=issue.sumspenthours.to_f%>, - <%end%> - ] - }, - - { - type: 'pie', - name: '<%=t :time_mgmt_label_title%>', - data: [ - { - name: '<%=t :time_mgmt_estimated_label%>', - y: <%= @issuesSpentHours.last.sumestimatedhours.to_f %>, - color: '#4572A7' - }, { - name: '<%=t :time_mgmt_spent_label %>', - y: <%= @issuesSpentHours.last.sumspenthours.to_f %>, - color: '#AA4643' - } - ], - center: [120, 30], - size: 80, - showInLegend: false, - dataLabels: { - enabled: true, - formatter: function() { - return Highcharts.numberFormat(this.percentage,2) +' %'; - } - } - - } - - ] - }); -}); -</script> - -<% -@spentHoursByVersionEstimated = 0 -@spentHoursByVersionSpent = 0 -@spentHoursByVersion.each do | issue | - @spentHoursByVersionEstimated = @spentHoursByVersionEstimated + issue.sumestimatedhours.to_f unless issue.sumestimatedhours.nil? - @spentHoursByVersionSpent = @spentHoursByVersionSpent +issue.sumspenthours.to_f unless issue.sumspenthours.nil? -end -%> - - -<script type="text/javascript"> -$(function () { - var chart; - $(document).ready(function() { - chart = new Highcharts.Chart({ - chart: { - renderTo: 'containerSpentHoursByVersion', - type: 'spline' - }, - credits: { - enabled: false - }, - title: { - text: '<%= @project.name%>' - }, - subtitle: { - text: '<%=t :time_mgmt_version_label_title%>' - }, - xAxis: { - categories: [ - <% @spentHoursByVersion.each do | issue | %> - <%= (issue.version+' <br/> '+issue.effective_date.to_date.strftime(t(:default_date_format))).inspect.html_safe %>, - <%end%> - ], - labels: { - enabled: true - } - }, - yAxis: { - title: { - text: '<%=t :time_mgmt_areaspline_yaxis_label%>' - }, - labels: { - formatter: function() { - return this.value - } - } - }, - tooltip: { - crosshairs: true, - shared: true - }, - plotOptions: { - spline: { - marker: { - radius: 4, - lineColor: '#666666', - lineWidth: 1 - } - } - }, - series: [{ - name: '<%=t :time_mgmt_estimated_label%>', - marker: { - symbol: 'square' - }, - - data: [ - <% @spentHoursByVersion.each do | issue | %> - <%= issue.sumestimatedhours.to_f.round(2)%>, - <%end%> - ] - - }, { - name: '<%=t :time_mgmt_spent_label %>', - marker: { - symbol: 'diamond' - }, - data: [ - <% @spentHoursByVersion.each do | issue | %> - <%=issue.sumspenthours.to_f.round(2)%>, - <%end%> - ] - }, - { - type: 'pie', - name: '<%=t :time_mgmt_label_title%>', - data: [ - { - name: '<%=t :time_mgmt_estimated_label%>', - y: <%= @spentHoursByVersionEstimated.to_f %>, - color: '#4572A7' - }, { - name: '<%=t :time_mgmt_spent_label %>', - y: <%= @spentHoursByVersionSpent.to_f %>, - color: '#AA4643' - } - ], - center: [120, 30], - size: 80, - showInLegend: false, - fillOpacity: 2.5, - dataLabels: { - enabled: true, - distance: 0, - formatter: function() { - return Highcharts.numberFormat(this.y,2) +' '+'<%=t :time_mgmt_hours_label%>'+'<br/>'+ Highcharts.numberFormat(this.percentage,2) +' %'; - } - } - - } - ] - }); - }); - -}); -</script> diff --git a/plugins/redmine_monitoring_controlling/app/views/mc_time_mgmt_project/index.html.erb b/plugins/redmine_monitoring_controlling/app/views/mc_time_mgmt_project/index.html.erb deleted file mode 100644 index 0406f69..0000000 --- a/plugins/redmine_monitoring_controlling/app/views/mc_time_mgmt_project/index.html.erb +++ /dev/null @@ -1,23 +0,0 @@ -<%= render :partial => '/mc_menu/contentHeader' %> - -<% if @issuesSpentHours.count > 0 %> - <%= render :partial => 'scripts' %> -<%end%> - -<%= render :partial => '/mc_menu/mcmenu' %> - -<div class="central_charts"> - <% if @issuesSpentHours.count > 0 %> - <h2><%=t :time_mgmt_label_title %></h2> - <div id="containerSpentHours" class="central_chart"></div> - <div id="containerSpentHoursByVersion" class="central_chart"></div> - </div> - - <div> - <p id="notice"><%= notice %></p> - - <%else%> - <div id="errorExplanation"><%=t :time_mgmt_error_no_issues_duedate_found_text %></div> - <%end%> - -</div> diff --git a/plugins/redmine_monitoring_controlling/assets/images/loadingAnimation.gif b/plugins/redmine_monitoring_controlling/assets/images/loadingAnimation.gif deleted file mode 100644 index 82290f48334c81272ff5991962951758137a08ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5886 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 diff --git a/plugins/redmine_monitoring_controlling/assets/javascripts/exporting.js b/plugins/redmine_monitoring_controlling/assets/javascripts/exporting.js deleted file mode 100644 index 3c6df2e..0000000 --- a/plugins/redmine_monitoring_controlling/assets/javascripts/exporting.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - Highcharts JS v2.2.5 (2012-06-08) - Exporting module - - (c) 2010-2011 Torstein H?nsi - - License: www.highcharts.com/license -*/ -(function(){function x(a){for(var b=a.length;b--;)typeof a[b]==="number"&&(a[b]=Math.round(a[b])-0.5);return a}var g=Highcharts,y=g.Chart,z=g.addEvent,B=g.removeEvent,r=g.createElement,u=g.discardElement,t=g.css,s=g.merge,k=g.each,n=g.extend,C=Math.max,h=document,D=window,A=h.documentElement.ontouchstart!==void 0,v=g.getOptions();n(v.lang,{downloadPNG:"Download PNG image",downloadJPEG:"Download JPEG image",downloadPDF:"Download PDF document",downloadSVG:"Download SVG vector image",exportButtonTitle:"Export to raster or vector image", -printButtonTitle:"Print the chart"});v.navigation={menuStyle:{border:"1px solid #A0A0A0",background:"#FFFFFF"},menuItemStyle:{padding:"0 5px",background:"none",color:"#303030",fontSize:A?"14px":"11px"},menuItemHoverStyle:{background:"#4572A5",color:"#FFFFFF"},buttonOptions:{align:"right",backgroundColor:{linearGradient:[0,0,0,20],stops:[[0.4,"#F7F7F7"],[0.6,"#E3E3E3"]]},borderColor:"#B0B0B0",borderRadius:3,borderWidth:1,height:20,hoverBorderColor:"#909090",hoverSymbolFill:"#81A7CF",hoverSymbolStroke:"#4572A5", -symbolFill:"#E0E0E0",symbolStroke:"#A0A0A0",symbolX:11.5,symbolY:10.5,verticalAlign:"top",width:24,y:10}};v.exporting={type:"image/png",url:"http://export.highcharts.com/",width:800,buttons:{exportButton:{symbol:"exportIcon",x:-10,symbolFill:"#A8BF77",hoverSymbolFill:"#768F3E",_id:"exportButton",_titleKey:"exportButtonTitle",menuItems:[{textKey:"downloadPNG",onclick:function(){this.exportChart()}},{textKey:"downloadJPEG",onclick:function(){this.exportChart({type:"image/jpeg"})}},{textKey:"downloadPDF", -onclick:function(){this.exportChart({type:"application/pdf"})}},{textKey:"downloadSVG",onclick:function(){this.exportChart({type:"image/svg+xml"})}}]},printButton:{symbol:"printIcon",x:-36,symbolFill:"#B5C9DF",hoverSymbolFill:"#779ABF",_id:"printButton",_titleKey:"printButtonTitle",onclick:function(){this.print()}}}};n(y.prototype,{getSVG:function(a){var b=this,c,d,e,f=s(b.options,a);if(!h.createElementNS)h.createElementNS=function(a,b){return h.createElement(b)};a=r("div",null,{position:"absolute", -top:"-9999em",width:b.chartWidth+"px",height:b.chartHeight+"px"},h.body);n(f.chart,{renderTo:a,forExport:!0});f.exporting.enabled=!1;f.chart.plotBackgroundImage=null;f.series=[];k(b.series,function(a){e=s(a.options,{animation:!1,showCheckbox:!1,visible:a.visible});if(!e.isInternal){if(e&&e.marker&&/^url\(/.test(e.marker.symbol))e.marker.symbol="circle";f.series.push(e)}});c=new Highcharts.Chart(f);k(["xAxis","yAxis"],function(a){k(b[a],function(b,d){var e=c[a][d],f=b.getExtremes(),g=f.userMin,f=f.userMax; -(g!==void 0||f!==void 0)&&e.setExtremes(g,f,!0,!1)})});d=c.container.innerHTML;f=null;c.destroy();u(a);d=d.replace(/zIndex="[^"]+"/g,"").replace(/isShadow="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery[0-9]+="[^"]+"/g,"").replace(/isTracker="[^"]+"/g,"").replace(/url\([^#]+#/g,"url(#").replace(/<svg /,'<svg xmlns:xlink="http://www.w3.org/1999/xlink" ').replace(/ href=/g," xlink:href=").replace(/\n/," ").replace(/<\/svg>.*?$/,"</svg>").replace(/ /g,"\u00a0").replace(/­/g, -"\u00ad").replace(/<IMG /g,"<image ").replace(/height=([^" ]+)/g,'height="$1"').replace(/width=([^" ]+)/g,'width="$1"').replace(/hc-svg-href="([^"]+)">/g,'xlink:href="$1"/>').replace(/id=([^" >]+)/g,'id="$1"').replace(/class=([^" ]+)/g,'class="$1"').replace(/ transform /g," ").replace(/:(path|rect)/g,"$1").replace(/style="([^"]+)"/g,function(a){return a.toLowerCase()});d=d.replace(/(url\(#highcharts-[0-9]+)"/g,"$1").replace(/"/g,"'");d.match(/ xmlns="/g).length===2&&(d=d.replace(/xmlns="[^"]+"/, -""));return d},exportChart:function(a,b){var c,d=this.getSVG(s(this.options.exporting.chartOptions,b)),a=s(this.options.exporting,a);c=r("form",{method:"post",action:a.url,enctype:"multipart/form-data"},{display:"none"},h.body);k(["filename","type","width","svg"],function(b){r("input",{type:"hidden",name:b,value:{filename:a.filename||"chart",type:a.type,width:a.width,svg:d}[b]},null,c)});c.submit();u(c)},print:function(){var a=this,b=a.container,c=[],d=b.parentNode,e=h.body,f=e.childNodes;if(!a.isPrinting)a.isPrinting= -!0,k(f,function(a,b){if(a.nodeType===1)c[b]=a.style.display,a.style.display="none"}),e.appendChild(b),D.print(),setTimeout(function(){d.appendChild(b);k(f,function(a,b){if(a.nodeType===1)a.style.display=c[b]});a.isPrinting=!1},1E3)},contextMenu:function(a,b,c,d,e,f){var i=this,g=i.options.navigation,h=g.menuItemStyle,o=i.chartWidth,p=i.chartHeight,q="cache-"+a,j=i[q],l=C(e,f),m,w;if(!j)i[q]=j=r("div",{className:"highcharts-"+a},{position:"absolute",zIndex:1E3,padding:l+"px"},i.container),m=r("div", -null,n({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},g.menuStyle),j),w=function(){t(j,{display:"none"})},z(j,"mouseleave",w),k(b,function(a){if(a){var b=r("div",{onmouseover:function(){t(this,g.menuItemHoverStyle)},onmouseout:function(){t(this,h)},innerHTML:a.text||i.options.lang[a.textKey]},n({cursor:"pointer"},h),m);b[A?"ontouchstart":"onclick"]=function(){w();a.onclick.apply(i,arguments)};i.exportDivElements.push(b)}}),i.exportDivElements.push(m, -j),i.exportMenuWidth=j.offsetWidth,i.exportMenuHeight=j.offsetHeight;a={display:"block"};c+i.exportMenuWidth>o?a.right=o-c-e-l+"px":a.left=c-l+"px";d+f+i.exportMenuHeight>p?a.bottom=p-d-l+"px":a.top=d+f-l+"px";t(j,a)},addButton:function(a){function b(){p.attr(l);o.attr(j)}var c=this,d=c.renderer,e=s(c.options.navigation.buttonOptions,a),f=e.onclick,g=e.menuItems,h=e.width,k=e.height,o,p,q,a=e.borderWidth,j={stroke:e.borderColor},l={stroke:e.symbolStroke,fill:e.symbolFill},m=e.symbolSize||12;if(!c.exportDivElements)c.exportDivElements= -[],c.exportSVGElements=[];e.enabled!==!1&&(o=d.rect(0,0,h,k,e.borderRadius,a).align(e,!0).attr(n({fill:e.backgroundColor,"stroke-width":a,zIndex:19},j)).add(),q=d.rect(0,0,h,k,0).align(e).attr({id:e._id,fill:"rgba(255, 255, 255, 0.001)",title:c.options.lang[e._titleKey],zIndex:21}).css({cursor:"pointer"}).on("mouseover",function(){p.attr({stroke:e.hoverSymbolStroke,fill:e.hoverSymbolFill});o.attr({stroke:e.hoverBorderColor})}).on("mouseout",b).on("click",b).add(),g&&(f=function(){b();var a=q.getBBox(); -c.contextMenu("export-menu",g,a.x,a.y,h,k)}),q.on("click",function(){f.apply(c,arguments)}),p=d.symbol(e.symbol,e.symbolX-m/2,e.symbolY-m/2,m,m).align(e,!0).attr(n(l,{"stroke-width":e.symbolStrokeWidth||1,zIndex:20})).add(),c.exportSVGElements.push(o,q,p))},destroyExport:function(){var a,b;for(a=0;a<this.exportSVGElements.length;a++)b=this.exportSVGElements[a],b.onclick=b.ontouchstart=null,this.exportSVGElements[a]=b.destroy();for(a=0;a<this.exportDivElements.length;a++)b=this.exportDivElements[a], -B(b,"mouseleave"),this.exportDivElements[a]=b.onmouseout=b.onmouseover=b.ontouchstart=b.onclick=null,u(b)}});g.Renderer.prototype.symbols.exportIcon=function(a,b,c,d){return x(["M",a,b+c,"L",a+c,b+d,a+c,b+d*0.8,a,b+d*0.8,"Z","M",a+c*0.5,b+d*0.8,"L",a+c*0.8,b+d*0.4,a+c*0.4,b+d*0.4,a+c*0.4,b,a+c*0.6,b,a+c*0.6,b+d*0.4,a+c*0.2,b+d*0.4,"Z"])};g.Renderer.prototype.symbols.printIcon=function(a,b,c,d){return x(["M",a,b+d*0.7,"L",a+c,b+d*0.7,a+c,b+d*0.4,a,b+d*0.4,"Z","M",a+c*0.2,b+d*0.4,"L",a+c*0.2,b,a+c* -0.8,b,a+c*0.8,b+d*0.4,"Z","M",a+c*0.2,b+d*0.7,"L",a,b+d,a+c,b+d,a+c*0.8,b+d*0.7,"Z"])};y.prototype.callbacks.push(function(a){var b,c=a.options.exporting,d=c.buttons;if(c.enabled!==!1){for(b in d)a.addButton(d[b]);z(a,"destroy",a.destroyExport)}})})(); diff --git a/plugins/redmine_monitoring_controlling/assets/javascripts/highcharts.js b/plugins/redmine_monitoring_controlling/assets/javascripts/highcharts.js deleted file mode 100644 index 78b17ae..0000000 --- a/plugins/redmine_monitoring_controlling/assets/javascripts/highcharts.js +++ /dev/null @@ -1,239 +0,0 @@ -/* - Highcharts JS v2.2.5 (2012-06-08) - - (c) 2009-2011 Torstein H?nsi - - License: www.highcharts.com/license -*/ -(function(){function u(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a}function la(){for(var a=0,b=arguments,c=b.length,d={};a<c;a++)d[b[a++]]=b[a];return d}function w(a,b){return parseInt(a,b||10)}function ra(a){return typeof a==="string"}function aa(a){return typeof a==="object"}function Ja(a){return Object.prototype.toString.call(a)==="[object Array]"}function Ka(a){return typeof a==="number"}function ma(a){return L.log(a)/L.LN10}function ba(a){return L.pow(10,a)}function za(a,b){for(var c= -a.length;c--;)if(a[c]===b){a.splice(c,1);break}}function s(a){return a!==A&&a!==null}function z(a,b,c){var d,e;if(ra(b))s(c)?a.setAttribute(b,c):a&&a.getAttribute&&(e=a.getAttribute(b));else if(s(b)&&aa(b))for(d in b)a.setAttribute(d,b[d]);return e}function na(a){return Ja(a)?a:[a]}function o(){var a=arguments,b,c,d=a.length;for(b=0;b<d;b++)if(c=a[b],typeof c!=="undefined"&&c!==null)return c}function F(a,b){if(La&&b&&b.opacity!==A)b.filter="alpha(opacity="+b.opacity*100+")";u(a.style,b)}function S(a, -b,c,d,e){a=B.createElement(a);b&&u(a,b);e&&F(a,{padding:0,border:U,margin:0});c&&F(a,c);d&&d.appendChild(a);return a}function ca(a,b){var c=function(){};c.prototype=new a;u(c.prototype,b);return c}function Xa(a,b,c,d){var e=V.lang,f=a;b===-1?(b=(a||0).toString(),a=b.indexOf(".")>-1?b.split(".")[1].length:0):a=isNaN(b=M(b))?2:b;var b=a,c=c===void 0?e.decimalPoint:c,d=d===void 0?e.thousandsSep:d,e=f<0?"-":"",a=String(w(f=M(+f||0).toFixed(b))),g=a.length>3?a.length%3:0;return e+(g?a.substr(0,g)+d:"")+ -a.substr(g).replace(/(\d{3})(?=\d)/g,"$1"+d)+(b?c+M(f-a).toFixed(b).slice(2):"")}function sa(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function gb(a,b,c,d){var e,c=o(c,1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals===!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;d<b.length;d++)if(a=b[d],e<=(b[d]+(b[d+1]||b[d]))/2)break;a*=c;return a}function Ob(a,b){var c=b||[[vb,[1,2,5,10,20,25,50,100,200,500]],[hb,[1,2,5,10,15,30]],[Ya,[1,2,5,10,15,30]],[Ma,[1,2,3,4,6,8,12]],[oa,[1,2]],[Za, -[1,2]],[Na,[1,2,3,4,6]],[ta,null]],d=c[c.length-1],e=D[d[0]],f=d[1],g;for(g=0;g<c.length;g++)if(d=c[g],e=D[d[0]],f=d[1],c[g+1]&&a<=(e*f[f.length-1]+D[c[g+1][0]])/2)break;e===D[ta]&&a<5*e&&(f=[1,2,5]);e===D[ta]&&a<5*e&&(f=[1,2,5]);c=gb(a/e,f);return{unitRange:e,count:c,unitName:d[0]}}function Pb(a,b,c,d){var e=[],f={},g=V.global.useUTC,h,i=new Date(b),b=a.unitRange,j=a.count;b>=D[hb]&&(i.setMilliseconds(0),i.setSeconds(b>=D[Ya]?0:j*W(i.getSeconds()/j)));if(b>=D[Ya])i[wb](b>=D[Ma]?0:j*W(i[ib]()/j)); -if(b>=D[Ma])i[xb](b>=D[oa]?0:j*W(i[jb]()/j));if(b>=D[oa])i[kb](b>=D[Na]?1:j*W(i[Oa]()/j));b>=D[Na]&&(i[yb](b>=D[ta]?0:j*W(i[$a]()/j)),h=i[ab]());b>=D[ta]&&(h-=h%j,i[zb](h));if(b===D[Za])i[kb](i[Oa]()-i[lb]()+o(d,1));d=1;h=i[ab]();for(var k=i.getTime(),l=i[$a](),m=i[Oa](),i=g?0:(864E5+i.getTimezoneOffset()*6E4)%864E5;k<c;)e.push(k),b===D[ta]?k=bb(h+d*j,0):b===D[Na]?k=bb(h,l+d*j):!g&&(b===D[oa]||b===D[Za])?k=bb(h,l,m+d*j*(b===D[oa]?1:7)):(k+=b*j,b<=D[Ma]&&k%D[oa]===i&&(f[k]=oa)),d++;e.push(k);e.info= -u(a,{higherRanks:f,totalRange:b*j});return e}function Ab(){this.symbol=this.color=0}function Qb(a,b){var c=a.length,d,e;for(e=0;e<c;e++)a[e].ss_i=e;a.sort(function(a,c){d=b(a,c);return d===0?a.ss_i-c.ss_i:d});for(e=0;e<c;e++)delete a[e].ss_i}function Pa(a){for(var b=a.length,c=a[0];b--;)a[b]<c&&(c=a[b]);return c}function Aa(a){for(var b=a.length,c=a[0];b--;)a[b]>c&&(c=a[b]);return c}function Ba(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Qa(a){cb||(cb=S(ia)); -a&&cb.appendChild(a);cb.innerHTML=""}function mb(a,b){var c="Highcharts error #"+a+": www.highcharts.com/errors/"+a;if(b)throw c;else N.console&&console.log(c)}function ja(a){return parseFloat(a.toPrecision(14))}function ua(a,b){Ra=o(a,b.animation)}function Bb(){var a=V.global.useUTC,b=a?"getUTC":"get",c=a?"setUTC":"set";bb=a?Date.UTC:function(a,b,c,g,h,i){return(new Date(a,b,o(c,1),o(g,0),o(h,0),o(i,0))).getTime()};ib=b+"Minutes";jb=b+"Hours";lb=b+"Day";Oa=b+"Date";$a=b+"Month";ab=b+"FullYear";wb= -c+"Minutes";xb=c+"Hours";kb=c+"Date";yb=c+"Month";zb=c+"FullYear"}function va(){}function Sa(a,b,c){this.axis=a;this.pos=b;this.type=c||"";this.isNew=!0;c||this.addLabel()}function nb(a,b){this.axis=a;if(b)this.options=b,this.id=b.id;return this}function Cb(a,b,c,d,e){var f=a.chart.inverted;this.axis=a;this.isNegative=c;this.options=b;this.x=d;this.stack=e;this.alignOptions={align:b.align||(f?c?"left":"right":"center"),verticalAlign:b.verticalAlign||(f?"middle":c?"bottom":"top"),y:o(b.y,f?4:c?14: --6),x:o(b.x,f?c?-6:6:0)};this.textAlign=b.textAlign||(f?c?"right":"left":"center")}function ob(){this.init.apply(this,arguments)}function pb(a,b){var c=b.borderWidth,d=b.style,e=b.shared,f=w(d.padding);this.chart=a;this.options=b;d.padding=0;this.crosshairs=[];this.currentY=this.currentX=0;this.tooltipIsHidden=!0;this.label=a.renderer.label("",0,0,null,null,null,b.useHTML,null,"tooltip").attr({padding:f,fill:b.backgroundColor,"stroke-width":c,r:b.borderRadius,zIndex:8}).css(d).hide().add();ga||this.label.shadow(b.shadow); -this.shared=e}function Db(a,b){var c=ga?"":b.chart.zoomType;this.zoomX=/x/.test(c);this.zoomY=/y/.test(c);this.options=b;this.chart=a;this.init(a,b.tooltip)}function qb(a){this.init(a)}function rb(a,b){var c,d=a.series;a.series=null;c=C(V,a);c.series=a.series=d;var d=c.chart,e=d.margin,e=aa(e)?e:[e,e,e,e];this.optionsMarginTop=o(d.marginTop,e[0]);this.optionsMarginRight=o(d.marginRight,e[1]);this.optionsMarginBottom=o(d.marginBottom,e[2]);this.optionsMarginLeft=o(d.marginLeft,e[3]);this.runChartClick= -(e=d.events)&&!!e.click;this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;this.init(e)}var A,B=document,N=window,L=Math,t=L.round,W=L.floor,wa=L.ceil,x=L.max,O=L.min,M=L.abs,X=L.cos,da=L.sin,xa=L.PI,Eb=xa*2/360,ya=navigator.userAgent,La=/msie/i.test(ya)&&!N.opera,Ca=B.documentMode===8,Fb=/AppleWebKit/.test(ya),Gb=/Firefox/.test(ya),Da=!!B.createElementNS&&!!B.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,Rb=Gb&&parseInt(ya.split("Firefox/")[1], -10)<4,ga=!Da&&!La&&!!B.createElement("canvas").getContext,Ta,ea=B.documentElement.ontouchstart!==A,Hb={},sb=0,cb,V,db,Ra,Ua,D,Sb=function(){},ia="div",U="none",tb="rgba(192,192,192,"+(Da?1.0E-6:0.0020)+")",vb="millisecond",hb="second",Ya="minute",Ma="hour",oa="day",Za="week",Na="month",ta="year",bb,ib,jb,lb,Oa,$a,ab,wb,xb,kb,yb,zb,Y={};N.Highcharts={};db=function(a,b,c){if(!s(b)||isNaN(b))return"Invalid date";var a=o(a,"%Y-%m-%d %H:%M:%S"),d=new Date(b),e,f=d[jb](),g=d[lb](),h=d[Oa](),i=d[$a](),j= -d[ab](),k=V.lang,l=k.weekdays,b={a:l[g].substr(0,3),A:l[g],d:sa(h),e:h,b:k.shortMonths[i],B:k.months[i],m:sa(i+1),y:j.toString().substr(2,2),Y:j,H:sa(f),I:sa(f%12||12),l:f%12||12,M:sa(d[ib]()),p:f<12?"AM":"PM",P:f<12?"am":"pm",S:sa(d.getSeconds()),L:sa(t(b%1E3),3)};for(e in b)a=a.replace("%"+e,b[e]);return c?a.substr(0,1).toUpperCase()+a.substr(1):a};Ab.prototype={wrapColor:function(a){if(this.color>=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};D=la(vb,1,hb,1E3,Ya,6E4, -Ma,36E5,oa,864E5,Za,6048E5,Na,2592E6,ta,31556952E3);Ua={init:function(a,b,c){var b=b||"",d=a.shift,e=b.indexOf("C")>-1,f=e?7:3,g,b=b.split(" "),c=[].concat(c),h,i,j=function(a){for(g=a.length;g--;)a[g]==="M"&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&(j(b),j(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));if(d<=c.length/f)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length<a;)d=[].concat(b).splice(b.length-f,f),e&&(d[f-6]=d[f-2],d[f- -5]=d[f-1]),b=b.concat(d);h&&(b=b.concat(h),c=c.concat(i));return[b,c]},step:function(a,b,c,d){var e=[],f=a.length;if(c===1)e=d;else if(f===b.length&&c<1)for(;f--;)d=parseFloat(a[f]),e[f]=isNaN(d)?a[f]:c*parseFloat(b[f]-d)+d;else e=b;return e}};var T=N.HighchartsAdapter,G=T||{},Va=G.adapterRun,Ib=G.getScript,n=G.each,ub=G.grep,Jb=G.offset,Ea=G.map,C=G.merge,I=G.addEvent,P=G.removeEvent,E=G.fireEvent,Kb=G.washMouseEvent,eb=G.animate,Fa=G.stop;T&&T.init&&T.init(Ua);if(!T&&N.jQuery){var Q=jQuery,Ib=Q.getScript, -Va=function(a,b){return Q(a)[b]()},n=function(a,b){for(var c=0,d=a.length;c<d;c++)if(b.call(a[c],a[c],c,a)===!1)return c},ub=Q.grep,Ea=function(a,b){for(var c=[],d=0,e=a.length;d<e;d++)c[d]=b.call(a[d],a[d],d,a);return c},C=function(){var a=arguments;return Q.extend(!0,null,a[0],a[1],a[2],a[3])},Jb=function(a){return Q(a).offset()},I=function(a,b,c){Q(a).bind(b,c)},P=function(a,b,c){var d=B.removeEventListener?"removeEventListener":"detachEvent";B[d]&&!a[d]&&(a[d]=function(){});Q(a).unbind(b,c)}, -E=function(a,b,c,d){var e=Q.Event(b),f="detached"+b,g;!La&&c&&(delete c.layerX,delete c.layerY);u(e,c);a[b]&&(a[f]=a[b],a[b]=null);n(["preventDefault","stopPropagation"],function(a){var b=e[a];e[a]=function(){try{b.call(e)}catch(c){a==="preventDefault"&&(g=!0)}}});Q(a).trigger(e);a[f]&&(a[b]=a[f],a[f]=null);d&&!e.isDefaultPrevented()&&!g&&d(e)},Kb=function(a){return a},eb=function(a,b,c){var d=Q(a);if(b.d)a.toD=b.d,b.d=1;d.stop();d.animate(b,c)},Fa=function(a){Q(a).stop()};Q.extend(Q.easing,{easeOutQuad:function(a, -b,c,d,e){return-d*(b/=e)*(b-2)+c}});var Lb=Q.fx,Mb=Lb.step;n(["cur","_default","width","height"],function(a,b){var c=Mb,d,e;a==="cur"?c=Lb.prototype:a==="_default"&&Q.Tween&&(c=Q.Tween.propHooks[a],a="set");(d=c[a])&&(c[a]=function(c){c=b?c:this;e=c.elem;return e.attr?e.attr(c.prop,a==="cur"?A:c.now):d.apply(this,arguments)})});Mb.d=function(a){var b=a.elem;if(!a.started){var c=Ua.init(b,b.d,b.toD);a.start=c[0];a.end=c[1];a.started=!0}b.attr("d",Ua.step(a.start,a.end,a.pos,b.toD))}}G={enabled:!0, -align:"center",x:0,y:15,style:{color:"#666",fontSize:"11px",lineHeight:"14px"}};V={colors:"#4572A7,#AA4643,#89A54E,#80699B,#3D96AE,#DB843D,#92A8CD,#A47D7C,#B5CA92".split(","),symbols:["circle","diamond","square","triangle","triangle-down"],lang:{loading:"Loading...",months:"January,February,March,April,May,June,July,August,September,October,November,December".split(","),shortMonths:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),weekdays:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","), -decimalPoint:".",resetZoom:"Reset zoom",resetZoomTitle:"Reset zoom level 1:1",thousandsSep:","},global:{useUTC:!0,canvasToolsURL:"http://code.highcharts.com/2.2.5/modules/canvas-tools.js"},chart:{borderColor:"#4572A7",borderRadius:5,defaultSeriesType:"line",ignoreHiddenSeries:!0,spacingTop:10,spacingRight:10,spacingBottom:15,spacingLeft:10,style:{fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif',fontSize:"12px"},backgroundColor:"#FFFFFF",plotBorderColor:"#C0C0C0", -resetZoomButton:{theme:{zIndex:20},position:{align:"right",x:-10,y:10}}},title:{text:"Chart title",align:"center",y:15,style:{color:"#3E576F",fontSize:"16px"}},subtitle:{text:"",align:"center",y:30,style:{color:"#6D869F"}},plotOptions:{line:{allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},lineWidth:2,shadow:!0,marker:{enabled:!0,lineWidth:0,radius:4,lineColor:"#FFFFFF",states:{hover:{},select:{fillColor:"#FFFFFF",lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:C(G, -{enabled:!1,y:-6,formatter:function(){return this.y}}),cropThreshold:300,pointRange:0,showInLegend:!0,states:{hover:{marker:{}},select:{marker:{}}},stickyTracking:!0}},labels:{style:{position:"absolute",color:"#3E576F"}},legend:{enabled:!0,align:"center",layout:"horizontal",labelFormatter:function(){return this.name},borderWidth:1,borderColor:"#909090",borderRadius:5,navigation:{activeColor:"#3E576F",inactiveColor:"#CCC"},shadow:!1,itemStyle:{cursor:"pointer",color:"#3E576F",fontSize:"12px"},itemHoverStyle:{color:"#000"}, -itemHiddenStyle:{color:"#CCC"},itemCheckboxStyle:{position:"absolute",width:"13px",height:"13px"},symbolWidth:16,symbolPadding:5,verticalAlign:"bottom",x:0,y:0},loading:{labelStyle:{fontWeight:"bold",position:"relative",top:"1em"},style:{position:"absolute",backgroundColor:"white",opacity:0.5,textAlign:"center"}},tooltip:{enabled:!0,backgroundColor:"rgba(255, 255, 255, .85)",borderWidth:2,borderRadius:5,dateTimeLabelFormats:{millisecond:"%A, %b %e, %H:%M:%S.%L",second:"%A, %b %e, %H:%M:%S",minute:"%A, %b %e, %H:%M", -hour:"%A, %b %e, %H:%M",day:"%A, %b %e, %Y",week:"Week from %A, %b %e, %Y",month:"%B %Y",year:"%Y"},headerFormat:'<span style="font-size: 10px">{point.key}</span><br/>',pointFormat:'<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b><br/>',shadow:!0,shared:ga,snap:ea?25:10,style:{color:"#333333",fontSize:"12px",padding:"5px",whiteSpace:"nowrap"}},credits:{enabled:!0,text:"Highcharts.com",href:"http://www.highcharts.com",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5}, -style:{cursor:"pointer",color:"#909090",fontSize:"10px"}}};var Z=V.plotOptions,T=Z.line;Bb();var pa=function(a){var b=[],c;(function(a){(c=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/.exec(a))?b=[w(c[1]),w(c[2]),w(c[3]),parseFloat(c[4],10)]:(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(a))&&(b=[w(c[1],16),w(c[2],16),w(c[3],16),1])})(a);return{get:function(c){return b&&!isNaN(b[0])?c==="rgb"?"rgb("+b[0]+","+b[1]+","+b[2]+")":c==="a"?b[3]: -"rgba("+b.join(",")+")":a},brighten:function(a){if(Ka(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=w(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},setOpacity:function(a){b[3]=a;return this}}};va.prototype={init:function(a,b){this.element=b==="span"?S(b):B.createElementNS("http://www.w3.org/2000/svg",b);this.renderer=a;this.attrSetters={}},animate:function(a,b,c){b=o(b,Ra,!0);Fa(this);if(b){b=C(b);if(c)b.complete=c;eb(this,a,b)}else this.attr(a),c&&c()},attr:function(a,b){var c,d,e,f,g=this.element, -h=g.nodeName,i=this.renderer,j,k=this.attrSetters,l=this.shadows,m,p,q=this;ra(a)&&s(b)&&(c=a,a={},a[c]=b);if(ra(a))c=a,h==="circle"?c={x:"cx",y:"cy"}[c]||c:c==="strokeWidth"&&(c="stroke-width"),q=z(g,c)||this[c]||0,c!=="d"&&c!=="visibility"&&(q=parseFloat(q));else for(c in a)if(j=!1,d=a[c],e=k[c]&&k[c](d,c),e!==!1){e!==A&&(d=e);if(c==="d")d&&d.join&&(d=d.join(" ")),/(NaN| {2}|^$)/.test(d)&&(d="M 0 0");else if(c==="x"&&h==="text"){for(e=0;e<g.childNodes.length;e++)f=g.childNodes[e],z(f,"x")===z(g, -"x")&&z(f,"x",d);this.rotation&&z(g,"transform","rotate("+this.rotation+" "+d+" "+w(a.y||z(g,"y"))+")")}else if(c==="fill")d=i.color(d,g,c);else if(h==="circle"&&(c==="x"||c==="y"))c={x:"cx",y:"cy"}[c]||c;else if(h==="rect"&&c==="r")z(g,{rx:d,ry:d}),j=!0;else if(c==="translateX"||c==="translateY"||c==="rotation"||c==="verticalAlign")j=p=!0;else if(c==="stroke")d=i.color(d,g,c);else if(c==="dashstyle")if(c="stroke-dasharray",d=d&&d.toLowerCase(),d==="solid")d=U;else{if(d){d=d.replace("shortdashdotdot", -"3,1,1,1,1,1,").replace("shortdashdot","3,1,1,1").replace("shortdot","1,1,").replace("shortdash","3,1,").replace("longdash","8,3,").replace(/dot/g,"1,3,").replace("dash","4,3,").replace(/,$/,"").split(",");for(e=d.length;e--;)d[e]=w(d[e])*a["stroke-width"];d=d.join(",")}}else if(c==="isTracker")this[c]=d;else if(c==="width")d=w(d);else if(c==="align")c="text-anchor",d={left:"start",center:"middle",right:"end"}[d];else if(c==="title")e=g.getElementsByTagName("title")[0],e||(e=B.createElementNS("http://www.w3.org/2000/svg", -"title"),g.appendChild(e)),e.textContent=d;c==="strokeWidth"&&(c="stroke-width");Fb&&c==="stroke-width"&&d===0&&(d=1.0E-6);this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(c)&&(m||(this.symbolAttr(a),m=!0),j=!0);if(l&&/^(width|height|visibility|x|y|d|transform)$/.test(c))for(e=l.length;e--;)z(l[e],c,c==="height"?x(d-(l[e].cutHeight||0),0):d);if((c==="width"||c==="height")&&h==="rect"&&d<0)d=0;this[c]=d;p&&this.updateTransform();c==="text"?(this.textStr=d,this.added&& -i.buildText(this)):j||z(g,c,d)}if(Fb&&/Chrome\/(18|19)/.test(ya)&&h==="text"&&(a.x!==A||a.y!==A))c=g.parentNode,d=g.nextSibling,c&&(c.removeChild(g),d?c.insertBefore(g,d):c.appendChild(g));return q},symbolAttr:function(a){var b=this;n("x,y,r,start,end,width,height,innerR,anchorX,anchorY".split(","),function(c){b[c]=o(a[c],b[c])});b.attr({d:b.renderer.symbols[b.symbolName](b.x,b.y,b.width,b.height,b)})},clip:function(a){return this.attr("clip-path","url("+this.renderer.url+"#"+a.id+")")},crisp:function(a, -b,c,d,e){var f,g={},h={},i,a=a||this.strokeWidth||this.attr&&this.attr("stroke-width")||0;i=t(a)%2/2;h.x=W(b||this.x||0)+i;h.y=W(c||this.y||0)+i;h.width=W((d||this.width||0)-2*i);h.height=W((e||this.height||0)-2*i);h.strokeWidth=a;for(f in h)this[f]!==h[f]&&(this[f]=g[f]=h[f]);return g},css:function(a){var b=this.element,b=a&&a.width&&b.nodeName==="text",c,d="",e=function(a,b){return"-"+b.toLowerCase()};if(a&&a.color)a.fill=a.color;this.styles=a=u(this.styles,a);if(La&&!Da)b&&delete a.width,F(this.element, -a);else{for(c in a)d+=c.replace(/([A-Z])/g,e)+":"+a[c]+";";this.attr({style:d})}b&&this.added&&this.renderer.buildText(this);return this},on:function(a,b){var c=b;ea&&a==="click"&&(a="touchstart",c=function(a){a.preventDefault();b()});this.element["on"+a]=c;return this},setRadialReference:function(a){this.element.radialReference=a;return this},translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},htmlCss:function(a){var b= -this.element;if(b=a&&b.tagName==="SPAN"&&a.width)delete a.width,this.textWidth=b,this.updateTransform();this.styles=u(this.styles,a);F(this.element,a);return this},htmlGetBBox:function(a){var b=this.element,c=this.bBox;if(!c||a){if(b.nodeName==="text")b.style.position="absolute";c=this.bBox={x:b.offsetLeft,y:b.offsetTop,width:b.offsetWidth,height:b.offsetHeight}}return c},htmlUpdateTransform:function(){if(this.added){var a=this.renderer,b=this.element,c=this.translateX||0,d=this.translateY||0,e=this.x|| -0,f=this.y||0,g=this.textAlign||"left",h={left:0,center:0.5,right:1}[g],i=g&&g!=="left",j=this.shadows;if(c||d)F(b,{marginLeft:c,marginTop:d}),j&&n(j,function(a){F(a,{marginLeft:c+1,marginTop:d+1})});this.inverted&&n(b.childNodes,function(c){a.invertChild(c,b)});if(b.tagName==="SPAN"){var k,l,j=this.rotation,m;k=0;var p=1,q=0,fa;m=w(this.textWidth);var r=this.xCorr||0,y=this.yCorr||0,$=[j,g,b.innerHTML,this.textWidth].join(",");if($!==this.cTT)s(j)&&(k=j*Eb,p=X(k),q=da(k),F(b,{filter:j?["progid:DXImageTransform.Microsoft.Matrix(M11=", -p,", M12=",-q,", M21=",q,", M22=",p,", sizingMethod='auto expand')"].join(""):U})),k=o(this.elemWidth,b.offsetWidth),l=o(this.elemHeight,b.offsetHeight),k>m&&/[ \-]/.test(b.innerText)&&(F(b,{width:m+"px",display:"block",whiteSpace:"normal"}),k=m),m=a.fontMetrics(b.style.fontSize).b,r=p<0&&-k,y=q<0&&-l,fa=p*q<0,r+=q*m*(fa?1-h:h),y-=p*m*(j?fa?h:1-h:1),i&&(r-=k*h*(p<0?-1:1),j&&(y-=l*h*(q<0?-1:1)),F(b,{textAlign:g})),this.xCorr=r,this.yCorr=y;F(b,{left:e+r+"px",top:f+y+"px"});this.cTT=$}}else this.alignOnAdd= -!0},updateTransform:function(){var a=this.translateX||0,b=this.translateY||0,c=this.inverted,d=this.rotation,e=[];c&&(a+=this.attr("width"),b+=this.attr("height"));(a||b)&&e.push("translate("+a+","+b+")");c?e.push("rotate(90) scale(-1,1)"):d&&e.push("rotate("+d+" "+(this.x||0)+" "+(this.y||0)+")");e.length&&z(this.element,"transform",e.join(" "))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){a?(this.alignOptions=a,this.alignByTranslate=b,c|| -this.renderer.alignedObjects.push(this)):(a=this.alignOptions,b=this.alignByTranslate);var c=o(c,this.renderer),d=a.align,e=a.verticalAlign,f=(c.x||0)+(a.x||0),g=(c.y||0)+(a.y||0),h={};/^(right|center)$/.test(d)&&(f+=(c.width-(a.width||0))/{right:1,center:2}[d]);h[b?"translateX":"x"]=t(f);/^(bottom|middle)$/.test(e)&&(g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1));h[b?"translateY":"y"]=t(g);this[this.placed?"animate":"attr"](h);this.placed=!0;this.alignAttr=h;return this},getBBox:function(a){var b, -c,d=this.rotation;c=this.element;var e=d*Eb;if(c.namespaceURI==="http://www.w3.org/2000/svg"||this.renderer.forExport){try{b=c.getBBox?u({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight}}catch(f){}if(!b||b.width<0)b={width:0,height:0};a=b.width;c=b.height;if(d)b.width=M(c*da(e))+M(a*X(e)),b.height=M(c*X(e))+M(a*da(e))}else b=this.htmlGetBBox(a);return b},show:function(){return this.attr({visibility:"visible"})},hide:function(){return this.attr({visibility:"hidden"})},add:function(a){var b= -this.renderer,c=a||b,d=c.element||b.box,e=d.childNodes,f=this.element,g=z(f,"zIndex"),h;this.parentInverted=a&&a.inverted;this.textStr!==void 0&&b.buildText(this);if(g)c.handleZ=!0,g=w(g);if(c.handleZ)for(c=0;c<e.length;c++)if(a=e[c],b=z(a,"zIndex"),a!==f&&(w(b)>g||!s(g)&&s(b))){d.insertBefore(f,a);h=!0;break}h||d.appendChild(f);this.added=!0;E(this,"add");return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.box, -e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=null;Fa(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f=0;f<a.stops.length;f++)a.stops[f]=a.stops[f].destroy();a.stops=null}a.safeRemoveChild(b);c&&n(c,function(b){a.safeRemoveChild(b)});d&&d.destroy();za(a.renderer.alignedObjects,a);for(e in a)delete a[e];return null},empty:function(){for(var a=this.element,b=a.childNodes,c=b.length;c--;)a.removeChild(b[c])},shadow:function(a,b,c){var d=[],e,f=this.element,g,h=this.parentInverted? -"(-1,-1)":"(1,1)";if(a){for(a=1;a<=3;a++){e=f.cloneNode(0);g=7-2*a;z(e,{isShadow:"true",stroke:"rgb(0, 0, 0)","stroke-opacity":0.05*a,"stroke-width":g,transform:"translate"+h,fill:U});if(c)z(e,"height",x(z(e,"height")-g,0)),e.cutHeight=g;b?b.element.appendChild(e):f.parentNode.insertBefore(e,f);d.push(e)}this.shadows=d}return this}};var qa=function(){this.init.apply(this,arguments)};qa.prototype={Element:va,init:function(a,b,c,d){var e=location,f;f=this.createElement("svg").attr({xmlns:"http://www.w3.org/2000/svg", -version:"1.1"});a.appendChild(f.element);this.isSVG=!0;this.box=f.element;this.boxWrapper=f;this.alignedObjects=[];this.url=La?"":e.href.replace(/#.*?$/,"").replace(/([\('\)])/g,"\\$1");this.defs=this.createElement("defs").add();this.forExport=d;this.gradients={};this.setSize(b,c,!1);var g;if(Gb&&a.getBoundingClientRect)this.subPixelFix=b=function(){F(a,{left:0,top:0});g=a.getBoundingClientRect();F(a,{left:wa(g.left)-g.left+"px",top:wa(g.top)-g.top+"px"})},b(),I(N,"resize",b)},isHidden:function(){return!this.boxWrapper.getBBox().width}, -destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();Ba(this.gradients||{});this.gradients=null;if(a)this.defs=a.destroy();this.subPixelFix&&P(N,"resize",this.subPixelFix);return this.alignedObjects=null},createElement:function(a){var b=new this.Element;b.init(this,a);return b},draw:function(){},buildText:function(a){for(var b=a.element,c=o(a.textStr,"").toString().replace(/<(b|strong)>/g,'<span style="font-weight:bold">').replace(/<(i|em)>/g,'<span style="font-style:italic">').replace(/<a/g, -"<span").replace(/<\/(b|strong|i|em|a)>/g,"</span>").split(/<br.*?>/g),d=b.childNodes,e=/style="([^"]+)"/,f=/href="([^"]+)"/,g=z(b,"x"),h=a.styles,i=h&&w(h.width),j=h&&h.lineHeight,k,h=d.length,l=[];h--;)b.removeChild(d[h]);i&&!a.added&&this.box.appendChild(b);c[c.length-1]===""&&c.pop();n(c,function(c,d){var h,fa=0,r,c=c.replace(/<span/g,"|||<span").replace(/<\/span>/g,"</span>|||");h=c.split("|||");n(h,function(c){if(c!==""||h.length===1){var m={},n=B.createElementNS("http://www.w3.org/2000/svg", -"tspan");e.test(c)&&z(n,"style",c.match(e)[1].replace(/(;| |^)color([ :])/,"$1fill$2"));f.test(c)&&(z(n,"onclick",'location.href="'+c.match(f)[1]+'"'),F(n,{cursor:"pointer"}));c=(c.replace(/<(.|\n)*?>/g,"")||" ").replace(/</g,"<").replace(/>/g,">");n.appendChild(B.createTextNode(c));fa?m.dx=3:m.x=g;if(!fa){if(d){!Da&&a.renderer.forExport&&F(n,{display:"block"});r=N.getComputedStyle&&w(N.getComputedStyle(k,null).getPropertyValue("line-height"));if(!r||isNaN(r)){var o;if(!(o=j))if(!(o=k.offsetHeight))l[d]= -b.getBBox().height,o=t(l[d]-(l[d-1]||0))||18;r=o}z(n,"dy",r)}k=n}z(n,m);b.appendChild(n);fa++;if(i)for(var c=c.replace(/-/g,"- ").split(" "),H=[];c.length||H.length;)o=a.getBBox().width,m=o>i,!m||c.length===1?(c=H,H=[],c.length&&(n=B.createElementNS("http://www.w3.org/2000/svg","tspan"),z(n,{dy:j||16,x:g}),b.appendChild(n),o>i&&(i=o))):(n.removeChild(n.firstChild),H.unshift(c.pop())),c.length&&n.appendChild(B.createTextNode(c.join(" ").replace(/- /g,"-")))}})})},button:function(a,b,c,d,e,f,g){var h= -this.label(a,b,c),i=0,j,k,l,m,p,a={x1:0,y1:0,x2:0,y2:1},e=C(la("stroke-width",1,"stroke","#999","fill",la("linearGradient",a,"stops",[[0,"#FFF"],[1,"#DDD"]]),"r",3,"padding",3,"style",la("color","black")),e);l=e.style;delete e.style;f=C(e,la("stroke","#68A","fill",la("linearGradient",a,"stops",[[0,"#FFF"],[1,"#ACF"]])),f);m=f.style;delete f.style;g=C(e,la("stroke","#68A","fill",la("linearGradient",a,"stops",[[0,"#9BD"],[1,"#CDF"]])),g);p=g.style;delete g.style;I(h.element,"mouseenter",function(){h.attr(f).css(m)}); -I(h.element,"mouseleave",function(){j=[e,f,g][i];k=[l,m,p][i];h.attr(j).css(k)});h.setState=function(a){(i=a)?a===2&&h.attr(g).css(p):h.attr(e).css(l)};return h.on("click",function(){d.call(h)}).attr(e).css(u({cursor:"default"},l))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=t(a[1])+b%2/2);a[2]===a[5]&&(a[2]=a[5]=t(a[2])+b%2/2);return a},path:function(a){var b={fill:U};Ja(a)?b.d=a:aa(a)&&u(b,a);return this.createElement("path").attr(b)},circle:function(a,b,c){a=aa(a)?a:{x:a,y:b,r:c};return this.createElement("circle").attr(a)}, -arc:function(a,b,c,d,e,f){if(aa(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;return this.symbol("arc",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0})},rect:function(a,b,c,d,e,f){e=aa(a)?a.r:e;e=this.createElement("rect").attr({rx:e,ry:e,fill:U});return e.attr(aa(a)?a:e.crisp(f,a,b,x(c,0),x(d,0)))},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[o(c,!0)?"animate":"attr"]({width:a,height:b});e--;)d[e].align()},g:function(a){var b= -this.createElement("g");return s(a)?b.attr({"class":"highcharts-"+a}):b},image:function(a,b,c,d,e){var f={preserveAspectRatio:U};arguments.length>1&&u(f,{x:b,y:c,width:d,height:e});f=this.createElement("image").attr(f);f.element.setAttributeNS?f.element.setAttributeNS("http://www.w3.org/1999/xlink","href",a):f.element.setAttribute("hc-svg-href",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(t(b),t(c),d,e,f),i=/^url\((.*?)\)$/,j,k;h?(g=this.path(h),u(g,{symbolName:a,x:b,y:c, -width:d,height:e}),f&&u(g,f)):i.test(a)&&(k=function(a,b){a.attr({width:b[0],height:b[1]});a.alignByTranslate||a.translate(-t(b[0]/2),-t(b[1]/2))},j=a.match(i)[1],a=Hb[j],g=this.image(j).attr({x:b,y:c}),a?k(g,a):(g.attr({width:0,height:0}),S("img",{onload:function(){k(g,Hb[j]=[this.width,this.height])},src:j})));return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return["M",a+c/2,b,"C",a+c+e,b,a+c+e,b+d,a+c/2,b+d,"C",a-e,b+d,a-e,b,a+c/2,b,"Z"]},square:function(a,b,c,d){return["M",a,b,"L",a+ -c,b,a+c,b+d,a,b+d,"Z"]},triangle:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d,a,b+d,"Z"]},"triangle-down":function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c/2,b+d,"Z"]},diamond:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d/2,a+c/2,b+d,a,b+d/2,"Z"]},arc:function(a,b,c,d,e){var f=e.start,c=e.r||c||d,g=e.end-1.0E-6,d=e.innerR,h=e.open,i=X(f),j=da(f),k=X(g),g=da(g),e=e.end-f<xa?0:1;return["M",a+c*i,b+c*j,"A",c,c,0,e,1,a+c*k,b+c*g,h?"M":"L",a+d*k,b+d*g,"A",d,d,0,e,0,a+d*i,b+d*j,h?"":"Z"]}},clipRect:function(a, -b,c,d){var e="highcharts-"+sb++,f=this.createElement("clipPath").attr({id:e}).add(this.defs),a=this.rect(a,b,c,d,0).add(f);a.id=e;a.clipPath=f;return a},color:function(a,b,c){var d=this,e,f=/^rgba/,g;a&&a.linearGradient?g="linearGradient":a&&a.radialGradient&&(g="radialGradient");if(g){var c=a[g],h=d.gradients,i,j,k,b=b.radialReference;if(!c.id||!h[c.id])Ja(c)&&(a[g]=c={x1:c[0],y1:c[1],x2:c[2],y2:c[3],gradientUnits:"userSpaceOnUse"}),g==="radialGradient"&&b&&!s(c.gradientUnits)&&u(c,{cx:b[0]-b[2]/ -2+c.cx*b[2],cy:b[1]-b[2]/2+c.cy*b[2],r:c.r*b[2],gradientUnits:"userSpaceOnUse"}),c.id="highcharts-"+sb++,h[c.id]=i=d.createElement(g).attr(c).add(d.defs),i.stops=[],n(a.stops,function(a){f.test(a[1])?(e=pa(a[1]),j=e.get("rgb"),k=e.get("a")):(j=a[1],k=1);a=d.createElement("stop").attr({offset:a[0],"stop-color":j,"stop-opacity":k}).add(i);i.stops.push(a)});return"url("+d.url+"#"+c.id+")"}else return f.test(a)?(e=pa(a),z(b,c+"-opacity",e.get("a")),e.get("rgb")):(b.removeAttribute(c+"-opacity"),a)},text:function(a, -b,c,d){var e=V.chart.style;if(d&&!this.forExport)return this.html(a,b,c);b=t(o(b,0));c=t(o(c,0));a=this.createElement("text").attr({x:b,y:c,text:a}).css({fontFamily:e.fontFamily,fontSize:e.fontSize});a.x=b;a.y=c;return a},html:function(a,b,c){var d=V.chart.style,e=this.createElement("span"),f=e.attrSetters,g=e.element,h=e.renderer;f.text=function(a){g.innerHTML=a;return!1};f.x=f.y=f.align=function(a,b){b==="align"&&(b="textAlign");e[b]=a;e.htmlUpdateTransform();return!1};e.attr({text:a,x:t(b),y:t(c)}).css({position:"absolute", -whiteSpace:"nowrap",fontFamily:d.fontFamily,fontSize:d.fontSize});e.css=e.htmlCss;if(h.isSVG)e.add=function(a){var b,c,d=h.box.parentNode;if(a){if(b=a.div,!b)b=a.div=S(ia,{className:z(a.element,"class")},{position:"absolute",left:a.attr("translateX")+"px",top:a.attr("translateY")+"px"},d),c=b.style,u(a.attrSetters,{translateX:function(a){c.left=a+"px"},translateY:function(a){c.top=a+"px"},visibility:function(a,b){c[b]=a}})}else b=d;b.appendChild(g);e.added=!0;e.alignOnAdd&&e.htmlUpdateTransform(); -return e};return e},fontMetrics:function(a){var a=w(a||11),a=a<24?a+4:t(a*1.2),b=t(a*0.8);return{h:a,b:b}},label:function(a,b,c,d,e,f,g,h,i){function j(){var a=p.styles,a=a&&a.textAlign,b=$*(1-y),c;c=h?0:Ha;if(s(Ga)&&(a==="center"||a==="right"))b+={center:0.5,right:1}[a]*(Ga-r.width);(b!==q.x||c!==q.y)&&q.attr({x:b,y:c});q.x=b;q.y=c}function k(a,b){o?o.attr(a,b):x[a]=b}function l(){p.attr({text:a,x:b,y:c});s(e)&&p.attr({anchorX:e,anchorY:f})}var m=this,p=m.g(i),q=m.text("",0,0,g).attr({zIndex:1}).add(p), -o,r,y=0,$=3,Ga,v,H,J,K=0,x={},Ha,g=p.attrSetters;I(p,"add",l);g.width=function(a){Ga=a;return!1};g.height=function(a){v=a;return!1};g.padding=function(a){s(a)&&a!==$&&($=a,j());return!1};g.align=function(a){y={left:0,center:0.5,right:1}[a];return!1};g.text=function(a,b){q.attr(b,a);var c;c=q.element.style;r=(Ga===void 0||v===void 0||p.styles.textAlign)&&q.getBBox(!0);p.width=(Ga||r.width||0)+2*$;p.height=(v||r.height||0)+2*$;Ha=$+m.fontMetrics(c&&c.fontSize).b;if(!o)c=h?-Ha:0,p.box=o=d?m.symbol(d, --y*$,c,p.width,p.height):m.rect(-y*$,c,p.width,p.height,0,x["stroke-width"]),o.add(p);o.attr(C({width:p.width,height:p.height},x));x=null;j();return!1};g["stroke-width"]=function(a,b){K=a%2/2;k(b,a);return!1};g.stroke=g.fill=g.r=function(a,b){k(b,a);return!1};g.anchorX=function(a,b){e=a;k(b,a+K-H);return!1};g.anchorY=function(a,b){f=a;k(b,a-J);return!1};g.x=function(a){p.x=a;a-=y*((Ga||r.width)+$);H=t(a);p.attr("translateX",H);return!1};g.y=function(a){J=p.y=t(a);p.attr("translateY",a);return!1}; -var w=p.css;return u(p,{css:function(a){if(a){var b={},a=C({},a);n("fontSize,fontWeight,fontFamily,color,lineHeight,width".split(","),function(c){a[c]!==A&&(b[c]=a[c],delete a[c])});q.css(b)}return w.call(p,a)},getBBox:function(){return o.getBBox()},shadow:function(a){o.shadow(a);return p},destroy:function(){P(p,"add",l);P(p.element,"mouseenter");P(p.element,"mouseleave");q&&(q=q.destroy());va.prototype.destroy.call(p)}})}};Ta=qa;var ka;if(!Da&&!ga){ka={init:function(a,b){var c=["<",b,' filled="f" stroked="f"'], -d=["position: ","absolute",";"];(b==="shape"||b===ia)&&d.push("left:0;top:0;width:1px;height:1px;");Ca&&d.push("visibility: ",b===ia?"hidden":"visible");c.push(' style="',d.join(""),'"/>');if(b)c=b===ia||b==="span"||b==="img"?c.join(""):a.prepVML(c),this.element=S(c);this.renderer=a;this.attrSetters={}},add:function(a){var b=this.renderer,c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);Ca&&d.gVis==="hidden"&&F(c,{visibility:"hidden"});d.appendChild(c);this.added=!0;this.alignOnAdd&& -!this.deferUpdateTransform&&this.updateTransform();E(this,"add");return this},toggleChildren:function(a,b){for(var c=a.childNodes,d=c.length;d--;)F(c[d],{visibility:b}),c[d].nodeName==="DIV"&&this.toggleChildren(c[d],b)},updateTransform:va.prototype.htmlUpdateTransform,attr:function(a,b){var c,d,e,f=this.element||{},g=f.style,h=f.nodeName,i=this.renderer,j=this.symbolName,k,l=this.shadows,m,p=this.attrSetters,q=this;ra(a)&&s(b)&&(c=a,a={},a[c]=b);if(ra(a))c=a,q=c==="strokeWidth"||c==="stroke-width"? -this.strokeweight:this[c];else for(c in a)if(d=a[c],m=!1,e=p[c]&&p[c](d,c),e!==!1&&d!==null){e!==A&&(d=e);if(j&&/^(x|y|r|start|end|width|height|innerR|anchorX|anchorY)/.test(c))k||(this.symbolAttr(a),k=!0),m=!0;else if(c==="d"){d=d||[];this.d=d.join(" ");e=d.length;for(m=[];e--;)m[e]=Ka(d[e])?t(d[e]*10)-5:d[e]==="Z"?"x":d[e];d=m.join(" ")||"x";f.path=d;if(l)for(e=l.length;e--;)l[e].path=l[e].cutOff?this.cutOffPath(d,l[e].cutOff):d;m=!0}else if(c==="zIndex"||c==="visibility"){if(Ca&&c==="visibility"&& -h==="DIV")f.gVis=d,this.toggleChildren(f,d),d==="visible"&&(d=null);d&&(g[c]=d);m=!0}else if(c==="width"||c==="height")d=x(0,d),this[c]=d,this.updateClipping?(this[c]=d,this.updateClipping()):g[c]=d,m=!0;else if(c==="x"||c==="y")this[c]=d,g[{x:"left",y:"top"}[c]]=d;else if(c==="class")f.className=d;else if(c==="stroke")d=i.color(d,f,c),c="strokecolor";else if(c==="stroke-width"||c==="strokeWidth")f.stroked=d?!0:!1,c="strokeweight",this[c]=d,Ka(d)&&(d+="px");else if(c==="dashstyle")(f.getElementsByTagName("stroke")[0]|| -S(i.prepVML(["<stroke/>"]),null,null,f))[c]=d||"solid",this.dashstyle=d,m=!0;else if(c==="fill")h==="SPAN"?g.color=d:(f.filled=d!==U?!0:!1,d=i.color(d,f,c),c="fillcolor");else if(h==="shape"&&c==="rotation")this[c]=d;else if(c==="translateX"||c==="translateY"||c==="rotation")this[c]=d,this.updateTransform(),m=!0;else if(c==="text")this.bBox=null,f.innerHTML=d,m=!0;if(l&&c==="visibility")for(e=l.length;e--;)l[e].style[c]=d;m||(Ca?f[c]=d:z(f,c,d))}return q},clip:function(a){var b=this,c=a.members,d= -b.element,e=d.parentNode;c.push(b);b.destroyClip=function(){za(c,b)};e&&e.className==="highcharts-tracker"&&!Ca&&F(d,{visibility:"hidden"});return b.css(a.getCSS(b))},css:va.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&Qa(a)},destroy:function(){this.destroyClip&&this.destroyClip();return va.prototype.destroy.apply(this)},empty:function(){for(var a=this.element.childNodes,b=a.length,c;b--;)c=a[b],c.parentNode.removeChild(c)},on:function(a,b){this.element["on"+a]=function(){var a=N.event; -a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,b){var c,a=a.split(/[ ,]/);c=a.length;if(c===9||c===11)a[c-4]=a[c-2]=w(a[c-2])-10*b;return a.join(" ")},shadow:function(a,b,c){var d=[],e=this.element,f=this.renderer,g,h=e.style,i,j=e.path,k,l;j&&typeof j.value!=="string"&&(j="x");l=j;if(a){for(a=1;a<=3;a++){k=7-2*a;c&&(l=this.cutOffPath(j.value,k+0.5));i=['<shape isShadow="true" strokeweight="',7-2*a,'" filled="false" path="',l,'" coordsize="10 10" style="',e.style.cssText,'" />'];g= -S(f.prepVML(i),null,{left:w(h.left)+1,top:w(h.top)+1});if(c)g.cutOff=k+1;i=['<stroke color="black" opacity="',0.05*a,'"/>'];S(f.prepVML(i),null,null,g);b?b.element.appendChild(g):e.parentNode.insertBefore(g,e);d.push(g)}this.shadows=d}return this}};ka=ca(va,ka);var ha={Element:ka,isIE8:ya.indexOf("MSIE 8.0")>-1,init:function(a,b,c){var d,e;this.alignedObjects=[];d=this.createElement(ia);e=d.element;e.style.position="relative";a.appendChild(d.element);this.box=e;this.boxWrapper=d;this.setSize(b,c, -!1);if(!B.namespaces.hcv)B.namespaces.add("hcv","urn:schemas-microsoft-com:vml"),B.createStyleSheet().cssText="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "},isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement();return u(e,{members:[],left:a,top:b,width:c,height:d,getCSS:function(a){var b=a.inverted,c=this.top,d=this.left,e=d+this.width,k=c+this.height,c={clip:"rect("+t(b?d:c)+"px,"+t(b?k: -e)+"px,"+t(b?e:k)+"px,"+t(b?c:d)+"px)"};!b&&Ca&&a.element.nodeName!=="IMG"&&u(c,{width:e+"px",height:k+"px"});return c},updateClipping:function(){n(e.members,function(a){a.css(e.getCSS(a))})}})},color:function(a,b,c){var d,e=/^rgba/,f,g=U;a&&a.linearGradient?f="gradient":a&&a.radialGradient&&(f="pattern");if(f){var h,i,j=a.linearGradient||a.radialGradient,k,l,m,p,q,o,r="",a=a.stops,y,s=[];l=a[0];y=a[a.length-1];l[0]>0&&a.unshift([0,l[1]]);y[0]<1&&a.push([1,y[1]]);n(a,function(a,b){e.test(a[1])?(d= -pa(a[1]),h=d.get("rgb"),i=d.get("a")):(h=a[1],i=1);s.push(a[0]*100+"% "+h);b?(p=i,q=h):(m=i,o=h)});f==="gradient"?(k=j.x1||j[0]||0,a=j.y1||j[1]||0,l=j.x2||j[2]||0,j=j.y2||j[3]||0,k=90-L.atan((j-a)/(l-k))*180/xa):(g=j.r*2,r='src="http://code.highcharts.com/gfx/radial-gradient.png" size="'+g+","+g+'" origin="0.5,0.5" position="'+j.cx+","+j.cy+'" color2="'+o+'" ',g=q);c==="fill"?(c=['<fill colors="'+s.join(",")+'" angle="',k,'" opacity="',p,'" o:opacity2="',m,'" type="',f,'" ',r,'focus="100%" method="any" />'], -S(this.prepVML(c),null,null,b)):g=h}else if(e.test(a)&&b.tagName!=="IMG")d=pa(a),c=["<",c,' opacity="',d.get("a"),'"/>'],S(this.prepVML(c),null,null,b),g=d.get("rgb");else{b=b.getElementsByTagName(c);if(b.length)b[0].opacity=1;g=a}return g},prepVML:function(a){var b=this.isIE8,a=a.join("");b?(a=a.replace("/>",' xmlns="urn:schemas-microsoft-com:vml" />'),a=a.indexOf('style="')===-1?a.replace("/>",' style="display:inline-block;behavior:url(#default#VML);" />'):a.replace('style="','style="display:inline-block;behavior:url(#default#VML);')): -a=a.replace("<","<hcv:");return a},text:qa.prototype.html,path:function(a){var b={coordsize:"10 10"};Ja(a)?b.d=a:aa(a)&&u(b,a);return this.createElement("shape").attr(b)},circle:function(a,b,c){return this.symbol("circle").attr({x:a-c,y:b-c,width:2*c,height:2*c})},g:function(a){var b;a&&(b={className:"highcharts-"+a,"class":"highcharts-"+a});return this.createElement(ia).attr(b)},image:function(a,b,c,d,e){var f=this.createElement("img").attr({src:a});arguments.length>1&&f.css({left:b,top:c,width:d, -height:e});return f},rect:function(a,b,c,d,e,f){if(aa(a))b=a.y,c=a.width,d=a.height,f=a.strokeWidth,a=a.x;var g=this.symbol("rect");g.r=e;return g.attr(g.crisp(f,a,b,x(c,0),x(d,0)))},invertChild:function(a,b){var c=b.style;F(a,{flip:"x",left:w(c.width)-1,top:w(c.height)-1,rotation:-90})},symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c||d,c=X(f),d=da(f),i=X(g),j=da(g),k=e.innerR,l=0.08/h,m=k&&0.1/k||0;if(g-f===0)return["x"];else 2*xa-g+f<l?i=-l:g-f<m&&(i=X(f+m));f=["wa",a-h,b-h,a+h, -b+h,a+h*c,b+h*d,a+h*i,b+h*j];e.open&&f.push("M",a-k,b-k);f.push("at",a-k,b-k,a+k,b+k,a+k*i,b+k*j,a+k*c,b+k*d,"x","e");return f},circle:function(a,b,c,d){return["wa",a,b,a+c,b+d,a+c,b+d/2,a+c,b+d/2,"e"]},rect:function(a,b,c,d,e){var f=a+c,g=b+d,h;!s(e)||!e.r?f=qa.prototype.symbols.square.apply(0,arguments):(h=O(e.r,c,d),f=["M",a+h,b,"L",f-h,b,"wa",f-2*h,b,f,b+2*h,f-h,b,f,b+h,"L",f,g-h,"wa",f-2*h,g-2*h,f,g,f,g-h,f-h,g,"L",a+h,g,"wa",a,g-2*h,a+2*h,g,a+h,g,a,g-h,"L",a,b+h,"wa",a,b,a+2*h,b+2*h,a,b+h,a+ -h,b,"x","e"]);return f}}};ka=function(){this.init.apply(this,arguments)};ka.prototype=C(qa.prototype,ha);Ta=ka}var fb,Nb;if(ga)fb=function(){},fb.prototype.symbols={},Nb=function(){function a(){var a=b.length,d;for(d=0;d<a;d++)b[d]();b=[]}var b=[];return{push:function(c,d){b.length===0&&Ib(d,a);b.push(c)}}}();Ta=ka||fb||qa;Sa.prototype={addLabel:function(){var a=this.axis,b=a.options,c=a.chart,d=a.horiz,e=a.categories,f=this.pos,g=b.labels,h=a.tickPositions,d=e&&d&&e.length&&!g.step&&!g.staggerLines&& -!g.rotation&&c.plotWidth/h.length||!d&&c.plotWidth/2,i=f===h[0],j=f===h[h.length-1],k=e&&s(e[f])?e[f]:f,e=this.label,h=h.info,l;a.isDatetimeAxis&&h&&(l=b.dateTimeLabelFormats[h.higherRanks[f]||h.unitName]);this.isFirst=i;this.isLast=j;b=a.labelFormatter.call({axis:a,chart:c,isFirst:i,isLast:j,dateTimeLabelFormat:l,value:a.isLog?ja(ba(k)):k});f=d&&{width:x(1,t(d-2*(g.padding||10)))+"px"};f=u(f,g.style);if(s(e))e&&e.attr({text:b}).css(f);else{d={align:g.align};if(Ka(g.rotation))d.rotation=g.rotation; -this.label=s(b)&&g.enabled?c.renderer.text(b,0,0,g.useHTML).attr(d).css(f).add(a.axisGroup):null}},getLabelSize:function(){var a=this.label,b=this.axis;return a?(this.labelBBox=a.getBBox(!0))[b.horiz?"height":"width"]:0},getLabelSides:function(){var a=this.axis.options.labels,b=this.labelBBox.width,a=b*{left:0,center:0.5,right:1}[a.align]-a.x;return[-a,b-a]},handleOverflow:function(a,b){var c=!0,d=this.axis,e=d.chart,f=this.isFirst,g=this.isLast,h=b.x,i=d.reversed,j=d.tickPositions;if(f||g){var k= -this.getLabelSides(),l=k[0],k=k[1],e=e.plotLeft,m=e+d.len,j=(d=d.ticks[j[a+(f?1:-1)]])&&d.label.xy.x+d.getLabelSides()[f?0:1];f&&!i||g&&i?h+l<e&&(h=e-l,d&&h+k>j&&(c=!1)):h+k>m&&(h=m-k,d&&h+l<j&&(c=!1));b.x=h}return c},getPosition:function(a,b,c,d){var e=this.axis,f=e.chart,g=d&&f.oldChartHeight||f.chartHeight;return{x:a?e.translate(b+c,null,null,d)+e.transB:e.left+e.offset+(e.opposite?(d&&f.oldChartWidth||f.chartWidth)-e.right-e.left:0),y:a?g-e.bottom+e.offset-(e.opposite?e.height:0):g-e.translate(b+ -c,null,null,d)-e.transB}},getLabelPosition:function(a,b,c,d,e,f,g,h){var i=this.axis,j=i.transA,k=i.reversed,i=i.staggerLines,a=a+e.x-(f&&d?f*j*(k?-1:1):0),b=b+e.y-(f&&!d?f*j*(k?1:-1):0);s(e.y)||(b+=w(c.styles.lineHeight)*0.9-c.getBBox().height/2);i&&(b+=g/(h||1)%i*16);return{x:a,y:b}},getMarkPath:function(a,b,c,d,e,f){return f.crispLine(["M",a,b,"L",a+(e?0:-c),b+(e?c:0)],d)},render:function(a,b){var c=this.axis,d=c.options,e=c.chart.renderer,f=c.horiz,g=this.type,h=this.label,i=this.pos,j=d.labels, -k=this.gridLine,l=g?g+"Grid":"grid",m=g?g+"Tick":"tick",p=d[l+"LineWidth"],q=d[l+"LineColor"],n=d[l+"LineDashStyle"],r=d[m+"Length"],l=d[m+"Width"]||0,y=d[m+"Color"],s=d[m+"Position"],m=this.mark,t=j.step,v=!0,H=d.categories&&d.tickmarkPlacement==="between"?0.5:0,J=this.getPosition(f,i,H,b),K=J.x,J=J.y,x=c.staggerLines;if(p){i=c.getPlotLinePath(i+H,p,b);if(k===A){k={stroke:q,"stroke-width":p};if(n)k.dashstyle=n;if(!g)k.zIndex=1;this.gridLine=k=p?e.path(i).attr(k).add(c.gridGroup):null}if(!b&&k&&i)k[this.isNew? -"attr":"animate"]({d:i})}if(l)s==="inside"&&(r=-r),c.opposite&&(r=-r),g=this.getMarkPath(K,J,r,l,f,e),m?m.animate({d:g}):this.mark=e.path(g).attr({stroke:y,"stroke-width":l}).add(c.axisGroup);if(h&&!isNaN(K))h.xy=J=this.getLabelPosition(K,J,h,f,j,H,a,t),this.isFirst&&!o(d.showFirstLabel,1)||this.isLast&&!o(d.showLastLabel,1)?v=!1:!x&&f&&j.overflow==="justify"&&!this.handleOverflow(a,J)&&(v=!1),t&&a%t&&(v=!1),v?(h[this.isNew?"attr":"animate"](J),h.show(),this.isNew=!1):h.hide()},destroy:function(){Ba(this, -this.axis)}};nb.prototype={render:function(){var a=this,b=a.axis,c=b.horiz,d=(b.pointRange||0)/2,e=a.options,f=e.label,g=a.label,h=e.width,i=e.to,j=e.from,k=s(j)&&s(i),l=e.value,m=e.dashStyle,p=a.svgElem,q=[],n,r=e.color,y=e.zIndex,t=e.events,u=b.chart.renderer;b.isLog&&(j=ma(j),i=ma(i),l=ma(l));if(h){if(q=b.getPlotLinePath(l,h),d={stroke:r,"stroke-width":h},m)d.dashstyle=m}else if(k){if(j=x(j,b.min-d),i=O(i,b.max+d),q=b.getPlotBandPath(j,i,e),d={fill:r},e.borderWidth)d.stroke=e.borderColor,d["stroke-width"]= -e.borderWidth}else return;if(s(y))d.zIndex=y;if(p)q?p.animate({d:q},null,p.onGetPath):(p.hide(),p.onGetPath=function(){p.show()});else if(q&&q.length&&(a.svgElem=p=u.path(q).attr(d).add(),t))for(n in e=function(b){p.on(b,function(c){t[b].apply(a,[c])})},t)e(n);if(f&&s(f.text)&&q&&q.length&&b.width>0&&b.height>0){f=C({align:c&&k&&"center",x:c?!k&&4:10,verticalAlign:!c&&k&&"middle",y:c?k?16:10:k?6:-4,rotation:c&&!k&&90},f);if(!g)a.label=g=u.text(f.text,0,0).attr({align:f.textAlign||f.align,rotation:f.rotation, -zIndex:y}).css(f.style).add();b=[q[1],q[4],o(q[6],q[1])];q=[q[2],q[5],o(q[7],q[2])];c=Pa(b);k=Pa(q);g.align(f,!1,{x:c,y:k,width:Aa(b)-c,height:Aa(q)-k});g.show()}else g&&g.hide();return a},destroy:function(){za(this.axis.plotLinesAndBands,this);Ba(this,this.axis)}};Cb.prototype={destroy:function(){Ba(this,this.axis)},setTotal:function(a){this.cum=this.total=a},render:function(a){var b=this.options.formatter.call(this);this.label?this.label.attr({text:b,visibility:"hidden"}):this.label=this.axis.chart.renderer.text(b, -0,0).css(this.options.style).attr({align:this.textAlign,rotation:this.options.rotation,visibility:"hidden"}).add(a)},setOffset:function(a,b){var c=this.axis,d=c.chart,e=d.inverted,f=this.isNegative,g=c.translate(this.total,0,0,0,1),c=c.translate(0),c=M(g-c),h=d.xAxis[0].translate(this.x)+a,d=d.plotHeight,e={x:e?f?g:g-c:h,y:e?d-h-b:f?d-g-c:d-g,width:e?c:b,height:e?b:c};this.label&&this.label.align(this.alignOptions,null,e).attr({visibility:"visible"})}};ob.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L", -second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b",month:"%b '%y",year:"%Y"},endOnTick:!1,gridLineColor:"#C0C0C0",labels:G,lineColor:"#C0D0E0",lineWidth:1,minPadding:0.01,maxPadding:0.01,minorGridLineColor:"#E0E0E0",minorGridLineWidth:1,minorTickColor:"#A0A0A0",minorTickLength:2,minorTickPosition:"outside",startOfWeek:1,startOnTick:!1,tickColor:"#C0D0E0",tickLength:5,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",tickWidth:1,title:{align:"middle",style:{color:"#6D869F", -fontWeight:"bold"}},type:"linear"},defaultYAxisOptions:{endOnTick:!0,gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{align:"right",x:-8,y:3},lineWidth:0,maxPadding:0.05,minPadding:0.05,startOnTick:!0,tickWidth:0,title:{rotation:270,text:"Y-values"},stackLabels:{enabled:!1,formatter:function(){return this.total},style:G.style}},defaultLeftAxisOptions:{labels:{align:"right",x:-8,y:null},title:{rotation:270}},defaultRightAxisOptions:{labels:{align:"left",x:8,y:null},title:{rotation:90}}, -defaultBottomAxisOptions:{labels:{align:"center",x:0,y:14},title:{rotation:0}},defaultTopAxisOptions:{labels:{align:"center",x:0,y:-5},title:{rotation:0}},init:function(a,b){var c=b.isX;this.horiz=a.inverted?!c:c;this.xOrY=(this.isXAxis=c)?"x":"y";this.opposite=b.opposite;this.side=this.horiz?this.opposite?0:2:this.opposite?1:3;this.setOptions(b);var d=this.options,e=d.type,f=e==="datetime";this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.staggerLines=this.horiz&&d.labels.staggerLines; -this.userOptions=b;this.minPixelPadding=0;this.chart=a;this.reversed=d.reversed;this.categories=d.categories;this.isLog=e==="logarithmic";this.isLinked=s(d.linkedTo);this.isDatetimeAxis=f;this.ticks={};this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange=this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.min=this.max=null;var g,d=this.options.events;a.axes.push(this);a[c?"xAxis":"yAxis"].push(this);this.series= -[];if(a.inverted&&c&&this.reversed===A)this.reversed=!0;this.removePlotLine=this.removePlotBand=this.removePlotBandOrLine;this.addPlotLine=this.addPlotBand=this.addPlotBandOrLine;for(g in d)I(this,g,d[g]);if(this.isLog)this.val2lin=ma,this.lin2val=ba},setOptions:function(a){this.options=C(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],a)},defaultLabelFormatter:function(){var a= -this.axis,b=this.value,c=a.tickInterval,d=this.dateTimeLabelFormat;return a.categories?b:d?db(d,b):c%1E6===0?b/1E6+"M":c%1E3===0?b/1E3+"k":b>=1E3?Xa(b,0):Xa(b,-1)},getSeriesExtremes:function(){var a=this,b=a.chart,c=a.stacks,d=[],e=[],f;a.dataMin=a.dataMax=null;n(a.series,function(g){if(g.visible||!b.options.chart.ignoreHiddenSeries){var h=g.options,i,j,k,l,m,p,q,n,r,y=h.threshold,t,u=[],v=0;if(a.isLog&&y<=0)y=h.threshold=null;if(a.isXAxis){if(h=g.xData,h.length)a.dataMin=O(o(a.dataMin,h[0]),Pa(h)), -a.dataMax=x(o(a.dataMax,h[0]),Aa(h))}else{var H,J,K,C=g.cropped,Ha=g.xAxis.getExtremes(),w=!!g.modifyValue;i=h.stacking;a.usePercentage=i==="percent";if(i)m=h.stack,l=g.type+o(m,""),p="-"+l,g.stackKey=l,j=d[l]||[],d[l]=j,k=e[p]||[],e[p]=k;if(a.usePercentage)a.dataMin=0,a.dataMax=99;h=g.processedXData;q=g.processedYData;t=q.length;for(f=0;f<t;f++)if(n=h[f],r=q[f],r!==null&&r!==A&&(i?(J=(H=r<y)?k:j,K=H?p:l,r=J[n]=s(J[n])?J[n]+r:r,c[K]||(c[K]={}),c[K][n]||(c[K][n]=new Cb(a,a.options.stackLabels,H,n, -m)),c[K][n].setTotal(r)):w&&(r=g.modifyValue(r)),C||(h[f+1]||n)>=Ha.min&&(h[f-1]||n)<=Ha.max))if(n=r.length)for(;n--;)r[n]!==null&&(u[v++]=r[n]);else u[v++]=r;if(!a.usePercentage&&u.length)a.dataMin=O(o(a.dataMin,u[0]),Pa(u)),a.dataMax=x(o(a.dataMax,u[0]),Aa(u));if(s(y))if(a.dataMin>=y)a.dataMin=y,a.ignoreMinPadding=!0;else if(a.dataMax<y)a.dataMax=y,a.ignoreMaxPadding=!0}}})},translate:function(a,b,c,d,e){var f=this.len,g=1,h=0,i=d?this.oldTransA:this.transA,d=d?this.oldMin:this.min,e=this.options.ordinal|| -this.isLog&&e;if(!i)i=this.transA;c&&(g*=-1,h=f);this.reversed&&(g*=-1,h-=g*f);b?(this.reversed&&(a=f-a),a=a/i+d,e&&(a=this.lin2val(a))):(e&&(a=this.val2lin(a)),a=g*(a-d)*i+h+g*this.minPixelPadding);return a},getPlotLinePath:function(a,b,c){var d=this.chart,e=this.left,f=this.top,g,h,i,a=this.translate(a,null,null,c),j=c&&d.oldChartHeight||d.chartHeight,k=c&&d.oldChartWidth||d.chartWidth,l;g=this.transB;c=h=t(a+g);g=i=t(j-a-g);if(isNaN(a))l=!0;else if(this.horiz){if(g=f,i=j-this.bottom,c<e||c>e+this.width)l= -!0}else if(c=e,h=k-this.right,g<f||g>f+this.height)l=!0;return l?null:d.renderer.crispLine(["M",c,g,"L",h,i],b||0)},getPlotBandPath:function(a,b){var c=this.getPlotLinePath(b),d=this.getPlotLinePath(a);d&&c?d.push(c[4],c[5],c[1],c[2]):d=null;return d},getLinearTickPositions:function(a,b,c){for(var d,b=ja(W(b/a)*a),c=ja(wa(c/a)*a),e=[];b<=c;){e.push(b);b=ja(b+a);if(b===d)break;d=b}return e},getLogTickPositions:function(a,b,c,d){var e=this.options,f=this.len,g=[];if(!d)this._minorAutoInterval=null; -if(a>=0.5)a=t(a),g=this.getLinearTickPositions(a,b,c);else if(a>=0.08)for(var f=W(b),h,i,j,k,l,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];f<c+1&&!l;f++){i=e.length;for(h=0;h<i&&!l;h++)j=ma(ba(f)*e[h]),j>b&&g.push(k),k>c&&(l=!0),k=j}else if(b=ba(b),c=ba(c),a=e[d?"minorTickInterval":"tickInterval"],a=o(a==="auto"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length:f)||1)),a=gb(a,null,L.pow(10,W(L.log(a)/L.LN10))),g=Ea(this.getLinearTickPositions(a, -b,c),ma),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval=a;return g},getMinorTickPositions:function(){var a=this.tickPositions,b=this.minorTickInterval,c=[],d,e;if(this.isLog){e=a.length;for(d=1;d<e;d++)c=c.concat(this.getLogTickPositions(b,a[d-1],a[d],!0))}else for(a=this.min+(a[0]-this.min)%b;a<=this.max;a+=b)c.push(a);return c},adjustForMinRange:function(){var a=this.options,b=this.min,c=this.max,d,e=this.dataMax-this.dataMin>=this.minRange,f,g,h,i,j;if(this.isXAxis&&this.minRange===A&& -!this.isLog)s(a.min)||s(a.max)?this.minRange=null:(n(this.series,function(a){i=a.xData;for(g=j=a.xIncrement?1:i.length-1;g>0;g--)if(h=i[g]-i[g-1],f===A||h<f)f=h}),this.minRange=O(f*5,this.dataMax-this.dataMin));if(c-b<this.minRange){var k=this.minRange;d=(k-c+b)/2;d=[b-d,o(a.min,b-d)];if(e)d[2]=this.dataMin;b=Aa(d);c=[b+k,o(a.max,b+k)];if(e)c[2]=this.dataMax;c=Pa(c);c-b<k&&(d[0]=c-k,d[1]=o(a.min,c-k),b=Aa(d))}this.min=b;this.max=c},setAxisTranslation:function(){var a=this.max-this.min,b=0,c,d,e=this.transA; -if(this.isXAxis)this.isLinked?b=this.linkedParent.pointRange:n(this.series,function(a){b=x(b,a.pointRange);d=a.closestPointRange;!a.noSharedTooltip&&s(d)&&(c=s(c)?O(c,d):d)}),this.pointRange=b,this.closestPointRange=c;this.oldTransA=e;this.translationSlope=this.transA=e=this.len/(a+b||1);this.transB=this.horiz?this.left:this.bottom;this.minPixelPadding=e*(b/2)},setTickPositions:function(a){var b=this,c=b.chart,d=b.options,e=b.isLog,f=b.isDatetimeAxis,g=b.isXAxis,h=b.isLinked,i=b.options.tickPositioner, -j=d.maxPadding,k=d.minPadding,l=d.tickInterval,m=d.tickPixelInterval,p=b.categories;h?(b.linkedParent=c[g?"xAxis":"yAxis"][d.linkedTo],c=b.linkedParent.getExtremes(),b.min=o(c.min,c.dataMin),b.max=o(c.max,c.dataMax),d.type!==b.linkedParent.options.type&&mb(11,1)):(b.min=o(b.userMin,d.min,b.dataMin),b.max=o(b.userMax,d.max,b.dataMax));if(e)!a&&O(b.min,o(b.dataMin,b.min))<=0&&mb(10,1),b.min=ja(ma(b.min)),b.max=ja(ma(b.max));if(b.range&&(b.userMin=b.min=x(b.min,b.max-b.range),b.userMax=b.max,a))b.range= -null;b.adjustForMinRange();if(!p&&!b.usePercentage&&!h&&s(b.min)&&s(b.max)){c=b.max-b.min||1;if(!s(d.min)&&!s(b.userMin)&&k&&(b.dataMin<0||!b.ignoreMinPadding))b.min-=c*k;if(!s(d.max)&&!s(b.userMax)&&j&&(b.dataMax>0||!b.ignoreMaxPadding))b.max+=c*j}b.tickInterval=b.min===b.max||b.min===void 0||b.max===void 0?1:h&&!l&&m===b.linkedParent.options.tickPixelInterval?b.linkedParent.tickInterval:o(l,p?1:(b.max-b.min)*m/(b.len||1));g&&!a&&n(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)}); -b.setAxisTranslation();b.beforeSetTickPositions&&b.beforeSetTickPositions();if(b.postProcessTickInterval)b.tickInterval=b.postProcessTickInterval(b.tickInterval);if(!f&&!e&&(a=L.pow(10,W(L.log(b.tickInterval)/L.LN10)),!s(d.tickInterval)))b.tickInterval=gb(b.tickInterval,null,a,d);b.minorTickInterval=d.minorTickInterval==="auto"&&b.tickInterval?b.tickInterval/5:d.minorTickInterval;b.tickPositions=i=d.tickPositions||i&&i.apply(b,[b.min,b.max]);if(!i)i=f?(b.getNonLinearTimeTicks||Pb)(Ob(b.tickInterval, -d.units),b.min,b.max,d.startOfWeek,b.ordinalPositions,b.closestPointRange,!0):e?b.getLogTickPositions(b.tickInterval,b.min,b.max):b.getLinearTickPositions(b.tickInterval,b.min,b.max),b.tickPositions=i;if(!h)e=i[0],f=i[i.length-1],d.startOnTick?b.min=e:b.min>e&&i.shift(),d.endOnTick?b.max=f:b.max<f&&i.pop()},setMaxTicks:function(){var a=this.chart,b=a.maxTicks,c=this.tickPositions,d=this.xOrY;b||(b={x:0,y:0});if(!this.isLinked&&!this.isDatetimeAxis&&c.length>b[d]&&this.options.alignTicks!==!1)b[d]= -c.length;a.maxTicks=b},adjustTickAmount:function(){var a=this.xOrY,b=this.tickPositions,c=this.chart.maxTicks;if(c&&c[a]&&!this.isDatetimeAxis&&!this.categories&&!this.isLinked&&this.options.alignTicks!==!1){var d=this.tickAmount,e=b.length;this.tickAmount=a=c[a];if(e<a){for(;b.length<a;)b.push(ja(b[b.length-1]+this.tickInterval));this.transA*=(e-1)/(a-1);this.max=b[b.length-1]}if(s(d)&&a!==d)this.isDirty=!0}},setScale:function(){var a=this.stacks,b,c,d,e;this.oldMin=this.min;this.oldMax=this.max; -this.oldAxisLength=this.len;this.setAxisSize();e=this.len!==this.oldAxisLength;n(this.series,function(a){if(a.isDirtyData||a.isDirty||a.xAxis.isDirty)d=!0});if(e||d||this.isLinked||this.userMin!==this.oldUserMin||this.userMax!==this.oldUserMax)if(this.getSeriesExtremes(),this.setTickPositions(),this.oldUserMin=this.userMin,this.oldUserMax=this.userMax,!this.isDirty)this.isDirty=e||this.min!==this.oldMin||this.max!==this.oldMax;if(!this.isXAxis)for(b in a)for(c in a[b])a[b][c].cum=a[b][c].total;this.setMaxTicks()}, -setExtremes:function(a,b,c,d,e){var f=this,g=f.chart,c=o(c,!0),e=u(e,{min:a,max:b});E(f,"setExtremes",e,function(){f.userMin=a;f.userMax=b;f.isDirtyExtremes=!0;c&&g.redraw(d)})},setAxisSize:function(){var a=this.chart,b=this.options,c=b.offsetLeft||0,d=b.offsetRight||0;this.left=o(b.left,a.plotLeft+c);this.top=o(b.top,a.plotTop);this.width=o(b.width,a.plotWidth-c+d);this.height=o(b.height,a.plotHeight);this.bottom=a.chartHeight-this.height-this.top;this.right=a.chartWidth-this.width-this.left;this.len= -x(this.horiz?this.width:this.height,0)},getExtremes:function(){var a=this.isLog;return{min:a?ja(ba(this.min)):this.min,max:a?ja(ba(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,c=b?ba(this.min):this.min,b=b?ba(this.max):this.max;c>a||a===null?a=c:b<a&&(a=b);return this.translate(a,0,1,0,1)},addPlotBandOrLine:function(a){a=(new nb(this,a)).render();this.plotLinesAndBands.push(a);return a},getOffset:function(){var a= -this,b=a.chart,c=b.renderer,d=a.options,e=a.tickPositions,f=a.ticks,g=a.horiz,h=a.side,i,j=0,k,l=0,m=d.title,p=d.labels,q=0,fa=b.axisOffset,r=[-1,1,1,-1][h],y;a.hasData=b=a.series.length&&s(a.min)&&s(a.max);a.showAxis=i=b||o(d.showEmpty,!0);if(!a.axisGroup)a.axisGroup=c.g("axis").attr({zIndex:d.zIndex||7}).add(),a.gridGroup=c.g("grid").attr({zIndex:d.gridZIndex||1}).add();if(b||a.isLinked)n(e,function(b){f[b]?f[b].addLabel():f[b]=new Sa(a,b)}),n(e,function(a){if(h===0||h===2||{1:"left",3:"right"}[h]=== -p.align)q=x(f[a].getLabelSize(),q)}),a.staggerLines&&(q+=(a.staggerLines-1)*16);else for(y in f)f[y].destroy(),delete f[y];if(m&&m.text){if(!a.axisTitle)a.axisTitle=c.text(m.text,0,0,m.useHTML).attr({zIndex:7,rotation:m.rotation||0,align:m.textAlign||{low:"left",middle:"center",high:"right"}[m.align]}).css(m.style).add(a.axisGroup),a.axisTitle.isNew=!0;if(i)j=a.axisTitle.getBBox()[g?"height":"width"],l=o(m.margin,g?5:10),k=m.offset;a.axisTitle[i?"show":"hide"]()}a.offset=r*o(d.offset,fa[h]);a.axisTitleMargin= -o(k,q+l+(h!==2&&q&&r*d.labels[g?"y":"x"]));fa[h]=x(fa[h],a.axisTitleMargin+j+r*a.offset)},getLinePath:function(a){var b=this.chart,c=this.opposite,d=this.offset,e=this.horiz,f=this.left+(c?this.width:0)+d,c=b.chartHeight-this.bottom-(c?this.height:0)+d;return b.renderer.crispLine(["M",e?this.left:f,e?c:this.top,"L",e?b.chartWidth-this.right:f,e?c:b.chartHeight-this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite, -h=this.offset,i=w(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)*this.axisTitleMargin+(this.side===2?i:0);return{x:a?d:b+(g?this.width:0)+h+(e.x||0),y:a?b-(g?this.height:0)+h:d+(e.y||0)}},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.isLog,f=a.isLinked,g=a.tickPositions,h=a.axisTitle,i=a.stacks,j=a.ticks,k=a.minorTicks,l=a.alternateBands,m=d.stackLabels,p=d.alternateGridColor,q=d.lineWidth,o,r=b.hasRendered&& -s(a.oldMin)&&!isNaN(a.oldMin),y=a.showAxis,t,u;if(a.hasData||f)if(a.minorTickInterval&&!a.categories&&n(a.getMinorTickPositions(),function(b){k[b]||(k[b]=new Sa(a,b,"minor"));r&&k[b].isNew&&k[b].render(null,!0);k[b].isActive=!0;k[b].render()}),n(g.slice(1).concat([g[0]]),function(b,c){c=c===g.length-1?0:c+1;if(!f||b>=a.min&&b<=a.max)j[b]||(j[b]=new Sa(a,b)),r&&j[b].isNew&&j[b].render(c,!0),j[b].isActive=!0,j[b].render(c)}),p&&n(g,function(b,c){if(c%2===0&&b<a.max)l[b]||(l[b]=new nb(a)),t=b,u=g[c+ -1]!==A?g[c+1]:a.max,l[b].options={from:e?ba(t):t,to:e?ba(u):u,color:p},l[b].render(),l[b].isActive=!0}),!a._addedPlotLB)n((d.plotLines||[]).concat(d.plotBands||[]),function(b){a.addPlotBandOrLine(b)}),a._addedPlotLB=!0;n([j,k,l],function(a){for(var b in a)a[b].isActive?a[b].isActive=!1:(a[b].destroy(),delete a[b])});if(q)o=a.getLinePath(q),a.axisLine?a.axisLine.animate({d:o}):a.axisLine=c.path(o).attr({stroke:d.lineColor,"stroke-width":q,zIndex:7}).add(),a.axisLine[y?"show":"hide"]();if(h&&y)h[h.isNew? -"attr":"animate"](a.getTitlePosition()),h.isNew=!1;if(m&&m.enabled){var v,H,d=a.stackTotalGroup;if(!d)a.stackTotalGroup=d=c.g("stack-labels").attr({visibility:"visible",zIndex:6}).add();d.translate(b.plotLeft,b.plotTop);for(v in i)for(H in b=i[v],b)b[H].render(d)}a.isDirty=!1},removePlotBandOrLine:function(a){for(var b=this.plotLinesAndBands,c=b.length;c--;)b[c].id===a&&b[c].destroy()},setTitle:function(a,b){var c=this.chart,d=this.options;d.title=C(d.title,a);this.axisTitle=void 0;this.isDirty=!0; -o(b,!0)&&c.redraw()},redraw:function(){var a=this.chart;a.tracker.resetTracker&&a.tracker.resetTracker(!0);this.render();n(this.plotLinesAndBands,function(a){a.render()});n(this.series,function(a){a.isDirty=!0})},setCategories:function(a,b){var c=this.chart;this.categories=this.userOptions.categories=a;n(this.series,function(a){a.translate();a.setTooltipPoints(!0)});this.isDirty=!0;o(b,!0)&&c.redraw()},destroy:function(){var a=this,b=a.stacks,c;P(a);for(c in b)Ba(b[c]),b[c]=null;n([a.ticks,a.minorTicks, -a.alternateBands,a.plotLinesAndBands],function(a){Ba(a)});n(["stackTotalGroup","axisLine","axisGroup","gridGroup","axisTitle"],function(b){a[b]&&(a[b]=a[b].destroy())})}};pb.prototype={destroy:function(){n(this.crosshairs,function(a){a&&a.destroy()});if(this.label)this.label=this.label.destroy()},move:function(a,b){var c=this;c.currentX=c.tooltipIsHidden?a:(2*c.currentX+a)/3;c.currentY=c.tooltipIsHidden?b:(c.currentY+b)/2;c.label.attr({x:c.currentX,y:c.currentY});c.tooltipTick=M(a-c.currentX)>1|| -M(b-c.currentY)>1?function(){c.move(a,b)}:null},hide:function(){if(!this.tooltipIsHidden){var a=this.chart.hoverPoints;this.label.hide();a&&n(a,function(a){a.setState()});this.chart.hoverPoints=null;this.tooltipIsHidden=!0}},hideCrosshairs:function(){n(this.crosshairs,function(a){a&&a.hide()})},getAnchor:function(a,b){var c,d=this.chart,e=d.inverted,f=0,g=0,a=na(a);c=a[0].tooltipPos;c||(n(a,function(a){f+=a.plotX;g+=a.plotLow?(a.plotLow+a.plotHigh)/2:a.plotY}),f/=a.length,g/=a.length,c=[e?d.plotWidth- -g:f,this.shared&&!e&&a.length>1&&b?b.chartY-d.plotTop:e?d.plotHeight-f:g]);return Ea(c,t)},getPosition:function(a,b,c){var d=this.chart,e=d.plotLeft,f=d.plotTop,g=d.plotWidth,h=d.plotHeight,i=o(this.options.distance,12),j=c.plotX,c=c.plotY,d=j+e+(d.inverted?i:-a-i),k=c-b+f+15,l;d<7&&(d=e+j+i);d+a>e+g&&(d-=d+a-(e+g),k=c-b+f-i,l=!0);k<f+5&&(k=f+5,l&&c>=k&&c<=k+b&&(k=c+f+i));k+b>f+h&&(k=x(f,f+h-b-i));return{x:d,y:k}},refresh:function(a,b){function c(){var a=this.points||na(this),b=a[0].series,c;c=[b.tooltipHeaderFormatter(a[0].key)]; -n(a,function(a){b=a.series;c.push(b.tooltipFormatter&&b.tooltipFormatter(a)||a.point.tooltipFormatter(b.tooltipOptions.pointFormat))});c.push(f.footerFormat||"");return c.join("")}var d=this.chart,e=this.label,f=this.options,g,h,i,j={},k,l=[];k=f.formatter||c;var j=d.hoverPoints,m,p=f.crosshairs;i=this.shared;h=this.getAnchor(a,b);g=h[0];h=h[1];i&&(!a.series||!a.series.noSharedTooltip)?(j&&n(j,function(a){a.setState()}),d.hoverPoints=a,n(a,function(a){a.setState("hover");l.push(a.getLabelConfig())}), -j={x:a[0].category,y:a[0].y},j.points=l,a=a[0]):j=a.getLabelConfig();k=k.call(j);j=a.series;i=i||!j.isCartesian||j.tooltipOutsidePlot||d.isInsidePlot(g,h);k===!1||!i?this.hide():(this.tooltipIsHidden&&e.show(),e.attr({text:k}),m=f.borderColor||a.color||j.color||"#606060",e.attr({stroke:m}),e=(f.positioner||this.getPosition).call(this,e.width,e.height,{plotX:g,plotY:h}),this.move(t(e.x),t(e.y)),this.tooltipIsHidden=!1);if(p){p=na(p);for(e=p.length;e--;)if(i=a.series[e?"yAxis":"xAxis"],p[e]&&i)if(i= -i.getPlotLinePath(e?o(a.stackY,a.y):a.x,1),this.crosshairs[e])this.crosshairs[e].attr({d:i,visibility:"visible"});else{j={"stroke-width":p[e].width||1,stroke:p[e].color||"#C0C0C0",zIndex:p[e].zIndex||2};if(p[e].dashStyle)j.dashstyle=p[e].dashStyle;this.crosshairs[e]=d.renderer.path(i).attr(j).add()}}E(d,"tooltipRefresh",{text:k,x:g+d.plotLeft,y:h+d.plotTop,borderColor:m})},tick:function(){this.tooltipTick&&this.tooltipTick()}};Db.prototype={normalizeMouseEvent:function(a){var b,c,d,a=a||N.event;if(!a.target)a.target= -a.srcElement;if(a.originalEvent)a=a.originalEvent;if(a.event)a=a.event;d=a.touches?a.touches.item(0):a;this.chartPosition=b=Jb(this.chart.container);d.pageX===A?(c=a.x,b=a.y):(c=d.pageX-b.left,b=d.pageY-b.top);return u(a,{chartX:t(c),chartY:t(b)})},getMouseCoordinates:function(a){var b={xAxis:[],yAxis:[]},c=this.chart;n(c.axes,function(d){var e=d.isXAxis;b[e?"xAxis":"yAxis"].push({axis:d,value:d.translate((c.inverted?!e:e)?a.chartX-c.plotLeft:c.plotHeight-a.chartY+c.plotTop,!0)})});return b},onmousemove:function(a){var b= -this.chart,c=b.series,d,e,f=b.hoverPoint,g=b.hoverSeries,h,i,j=b.chartWidth,k=b.inverted?b.plotHeight+b.plotTop-a.chartY:a.chartX-b.plotLeft;if(b.tooltip&&this.options.tooltip.shared&&(!g||!g.noSharedTooltip)){e=[];h=c.length;for(i=0;i<h;i++)if(c[i].visible&&c[i].options.enableMouseTracking!==!1&&!c[i].noSharedTooltip&&c[i].tooltipPoints.length)d=c[i].tooltipPoints[k],d._dist=M(k-d.plotX),j=O(j,d._dist),e.push(d);for(h=e.length;h--;)e[h]._dist>j&&e.splice(h,1);if(e.length&&e[0].plotX!==this.hoverX)b.tooltip.refresh(e, -a),this.hoverX=e[0].plotX}if(g&&g.tracker&&(d=g.tooltipPoints[k])&&d!==f)d.onMouseOver()},resetTracker:function(a){var b=this.chart,c=b.hoverSeries,d=b.hoverPoint,e=b.hoverPoints||d,b=b.tooltip;(a=a&&b&&e)&&na(e)[0].plotX===A&&(a=!1);if(a)b.refresh(e);else{if(d)d.onMouseOut();if(c)c.onMouseOut();b&&(b.hide(),b.hideCrosshairs());this.hoverX=null}},setDOMEvents:function(){function a(){if(b.selectionMarker){var f={xAxis:[],yAxis:[]},g=b.selectionMarker.getBBox(),h=g.x-c.plotLeft,l=g.y-c.plotTop,m;e&& -(n(c.axes,function(a){if(a.options.zoomEnabled!==!1){var b=a.isXAxis,d=c.inverted?!b:b,e=a.translate(d?h:c.plotHeight-l-g.height,!0,0,0,1),d=a.translate(d?h+g.width:c.plotHeight-l,!0,0,0,1);!isNaN(e)&&!isNaN(d)&&(f[b?"xAxis":"yAxis"].push({axis:a,min:O(e,d),max:x(e,d)}),m=!0)}}),m&&E(c,"selection",f,function(a){c.zoom(a)}));b.selectionMarker=b.selectionMarker.destroy()}if(c)F(d,{cursor:"auto"}),c.cancelClick=e,c.mouseIsDown=e=!1;P(B,ea?"touchend":"mouseup",a)}var b=this,c=b.chart,d=c.container,e, -f=b.zoomX&&!c.inverted||b.zoomY&&c.inverted,g=b.zoomY&&!c.inverted||b.zoomX&&c.inverted;b.hideTooltipOnMouseMove=function(a){Kb(a);b.chartPosition&&c.hoverSeries&&c.hoverSeries.isCartesian&&!c.isInsidePlot(a.pageX-b.chartPosition.left-c.plotLeft,a.pageY-b.chartPosition.top-c.plotTop)&&b.resetTracker()};b.hideTooltipOnMouseLeave=function(){b.resetTracker();b.chartPosition=null};d.onmousedown=function(d){d=b.normalizeMouseEvent(d);!ea&&d.preventDefault&&d.preventDefault();c.mouseIsDown=!0;c.cancelClick= -!1;c.mouseDownX=b.mouseDownX=d.chartX;b.mouseDownY=d.chartY;I(B,ea?"touchend":"mouseup",a)};var h=function(a){if(!a||!(a.touches&&a.touches.length>1)){a=b.normalizeMouseEvent(a);if(!ea)a.returnValue=!1;var d=a.chartX,h=a.chartY,l=!c.isInsidePlot(d-c.plotLeft,h-c.plotTop);ea&&a.type==="touchstart"&&(z(a.target,"isTracker")?c.runTrackerClick||a.preventDefault():!c.runChartClick&&!l&&a.preventDefault());if(l)d<c.plotLeft?d=c.plotLeft:d>c.plotLeft+c.plotWidth&&(d=c.plotLeft+c.plotWidth),h<c.plotTop?h= -c.plotTop:h>c.plotTop+c.plotHeight&&(h=c.plotTop+c.plotHeight);if(c.mouseIsDown&&a.type!=="touchstart"){if(e=Math.sqrt(Math.pow(b.mouseDownX-d,2)+Math.pow(b.mouseDownY-h,2)),e>10){a=c.isInsidePlot(b.mouseDownX-c.plotLeft,b.mouseDownY-c.plotTop);if(c.hasCartesianSeries&&(b.zoomX||b.zoomY)&&a&&!b.selectionMarker)b.selectionMarker=c.renderer.rect(c.plotLeft,c.plotTop,f?1:c.plotWidth,g?1:c.plotHeight,0).attr({fill:b.options.chart.selectionMarkerFill||"rgba(69,114,167,0.25)",zIndex:7}).add();if(b.selectionMarker&& -f){var m=d-b.mouseDownX;b.selectionMarker.attr({width:M(m),x:(m>0?0:m)+b.mouseDownX})}b.selectionMarker&&g&&(h-=b.mouseDownY,b.selectionMarker.attr({height:M(h),y:(h>0?0:h)+b.mouseDownY}));a&&!b.selectionMarker&&b.options.chart.panning&&c.pan(d)}}else if(!l)b.onmousemove(a);return l||!c.hasCartesianSeries}};d.onmousemove=h;I(d,"mouseleave",b.hideTooltipOnMouseLeave);I(B,"mousemove",b.hideTooltipOnMouseMove);d.ontouchstart=function(a){if(b.zoomX||b.zoomY)d.onmousedown(a);h(a)};d.ontouchmove=h;d.ontouchend= -function(){e&&b.resetTracker()};d.onclick=function(a){var d=c.hoverPoint,e,f,a=b.normalizeMouseEvent(a);a.cancelBubble=!0;if(!c.cancelClick)d&&(z(a.target,"isTracker")||z(a.target.parentNode,"isTracker"))?(e=d.plotX,f=d.plotY,u(d,{pageX:b.chartPosition.left+c.plotLeft+(c.inverted?c.plotWidth-f:e),pageY:b.chartPosition.top+c.plotTop+(c.inverted?c.plotHeight-e:f)}),E(d.series,"click",u(a,{point:d})),d.firePointEvent("click",a)):(u(a,b.getMouseCoordinates(a)),c.isInsidePlot(a.chartX-c.plotLeft,a.chartY- -c.plotTop)&&E(c,"click",a))}},destroy:function(){var a=this.chart,b=a.container;if(a.trackerGroup)a.trackerGroup=a.trackerGroup.destroy();P(b,"mouseleave",this.hideTooltipOnMouseLeave);P(B,"mousemove",this.hideTooltipOnMouseMove);b.onclick=b.onmousedown=b.onmousemove=b.ontouchstart=b.ontouchend=b.ontouchmove=null;clearInterval(this.tooltipInterval)},init:function(a,b){if(!a.trackerGroup)a.trackerGroup=a.renderer.g("tracker").attr({zIndex:9}).add();if(b.enabled)a.tooltip=new pb(a,b),this.tooltipInterval= -setInterval(function(){a.tooltip.tick()},32);this.setDOMEvents()}};qb.prototype={init:function(a){var b=this,c=b.options=a.options.legend;if(c.enabled){var d=c.itemStyle,e=o(c.padding,8),f=c.itemMarginTop||0;b.baseline=w(d.fontSize)+3+f;b.itemStyle=d;b.itemHiddenStyle=C(d,c.itemHiddenStyle);b.itemMarginTop=f;b.padding=e;b.initialItemX=e;b.initialItemY=e-5;b.maxItemWidth=0;b.chart=a;b.itemHeight=0;b.lastLineHeight=0;b.render();I(b.chart,"endResize",function(){b.positionCheckboxes()})}},colorizeItem:function(a, -b){var c=this.options,d=a.legendItem,e=a.legendLine,f=a.legendSymbol,g=this.itemHiddenStyle.color,c=b?c.itemStyle.color:g,g=b?a.color:g;d&&d.css({fill:c});e&&e.attr({stroke:g});f&&f.attr({stroke:g,fill:g})},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,e=d[0],d=d[1],f=a.checkbox;a.legendGroup&&a.legendGroup.translate(b?e:this.legendWidth-e-2*c-4,d);if(f)f.x=e,f.y=d},destroyItem:function(a){var b=a.checkbox;n(["legendItem","legendLine","legendSymbol","legendGroup"], -function(b){a[b]&&a[b].destroy()});b&&Qa(a.checkbox)},destroy:function(){var a=this.group,b=this.box;if(b)this.box=b.destroy();if(a)this.group=a.destroy()},positionCheckboxes:function(){var a=this;n(a.allItems,function(b){var c=b.checkbox,d=a.group.alignAttr;c&&F(c,{left:d.translateX+b.legendItemWidth+c.x-20+"px",top:d.translateY+c.y+3+"px"})})},renderItem:function(a){var q;var b=this,c=b.chart,d=c.renderer,e=b.options,f=e.layout==="horizontal",g=e.symbolWidth,h=e.symbolPadding,i=b.itemStyle,j=b.itemHiddenStyle, -k=b.padding,l=!e.rtl,m=e.width,p=e.itemMarginBottom||0,n=b.itemMarginTop,o=b.initialItemX,r=a.legendItem,s=a.series||a,t=s.options,u=t.showCheckbox;if(!r&&(a.legendGroup=d.g("legend-item").attr({zIndex:1}).add(b.scrollGroup),s.drawLegendSymbol(b,a),a.legendItem=r=d.text(e.labelFormatter.call(a),l?g+h:-h,b.baseline,e.useHTML).css(C(a.visible?i:j)).attr({align:l?"left":"right",zIndex:2}).add(a.legendGroup),a.legendGroup.on("mouseover",function(){a.setState("hover");r.css(b.options.itemHoverStyle)}).on("mouseout", -function(){r.css(a.visible?i:j);a.setState()}).on("click",function(b){var c=function(){a.setVisible()},b={browserEvent:b};a.firePointEvent?a.firePointEvent("legendItemClick",b,c):E(a,"legendItemClick",b,c)}),b.colorizeItem(a,a.visible),t&&u))a.checkbox=S("input",{type:"checkbox",checked:a.selected,defaultChecked:a.selected},e.itemCheckboxStyle,c.container),I(a.checkbox,"click",function(b){E(a,"checkboxClick",{checked:b.target.checked},function(){a.select()})});d=r.getBBox();q=a.legendItemWidth=e.itemWidth|| -g+h+d.width+k+(u?20:0),e=q;b.itemHeight=g=d.height;if(f&&b.itemX-o+e>(m||c.chartWidth-2*k-o))b.itemX=o,b.itemY+=n+b.lastLineHeight+p,b.lastLineHeight=0;b.maxItemWidth=x(b.maxItemWidth,e);b.lastItemY=n+b.itemY+p;b.lastLineHeight=x(g,b.lastLineHeight);a._legendItemPos=[b.itemX,b.itemY];f?b.itemX+=e:(b.itemY+=n+g+p,b.lastLineHeight=g);b.offsetWidth=m||x(f?b.itemX-o:e,b.offsetWidth)},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e,f,g,h,i=a.box,j=a.options,k=a.padding,l=j.borderWidth, -m=j.backgroundColor;a.itemX=a.initialItemX;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g("legend").attr({zIndex:7}).add(),a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup),a.clipRect=c.clipRect(0,0,9999,b.chartHeight),a.contentGroup.clip(a.clipRect);e=[];n(b.series,function(a){var b=a.options;b.showInLegend&&(e=e.concat(a.legendItems||(b.legendType==="point"?a.data:a)))});Qb(e,function(a,b){return(a.options.legendIndex||0)-(b.options.legendIndex|| -0)});j.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;n(e,function(b){a.renderItem(b)});g=j.width||a.offsetWidth;h=a.lastItemY+a.lastLineHeight;h=a.handleOverflow(h);if(l||m){g+=k;h+=k;if(i){if(g>0&&h>0)i[i.isNew?"attr":"animate"](i.crisp(null,null,null,g,h)),i.isNew=!1}else a.box=i=c.rect(0,0,g,h,j.borderRadius,l||0).attr({stroke:j.borderColor,"stroke-width":l||0,fill:m||U}).add(d).shadow(j.shadow),i.isNew=!0;i[f?"show":"hide"]()}a.legendWidth=g;a.legendHeight=h;n(e,function(b){a.positionItem(b)}); -f&&d.align(u({width:g,height:h},j),!0,b.spacingBox);b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this,c=this.chart,d=c.renderer,e=this.options,f=e.y,f=c.spacingBox.height+(e.verticalAlign==="top"?-f:f)-this.padding,g=e.maxHeight,h=this.clipRect,i=e.navigation,j=o(i.animation,!0),k=i.arrowSize||12,l=this.nav;e.layout==="horizontal"&&(f/=2);g&&(f=O(f,g));if(a>f){this.clipHeight=c=f-20;this.pageCount=wa(a/c);this.currentPage=o(this.currentPage,1);this.fullHeight=a;h.attr({height:c}); -if(!l)this.nav=l=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol("triangle",0,0,k,k).on("click",function(){b.scroll(-1,j)}).add(l),this.pager=d.text("",15,10).css(i.style).add(l),this.down=d.symbol("triangle-down",0,0,k,k).on("click",function(){b.scroll(1,j)}).add(l);b.scroll(0);a=f}else l&&(h.attr({height:c.chartHeight}),l.hide(),this.scrollGroup.attr({translateY:1}));return a},scroll:function(a,b){var c=this.pageCount,d=this.currentPage+a,e=this.clipHeight,f=this.options.navigation,g=f.activeColor, -f=f.inactiveColor,h=this.pager,i=this.padding;d>c&&(d=c);if(d>0)b!==A&&ua(b,this.chart),this.nav.attr({translateX:i,translateY:e+7,visibility:"visible"}),this.up.attr({fill:d===1?f:g}).css({cursor:d===1?"default":"pointer"}),h.attr({text:d+"/"+this.pageCount}),this.down.attr({x:18+this.pager.getBBox().width,fill:d===c?f:g}).css({cursor:d===c?"default":"pointer"}),this.scrollGroup.animate({translateY:-O(e*(d-1),this.fullHeight-e+i)+1}),h.attr({text:d+"/"+c}),this.currentPage=d}};rb.prototype={initSeries:function(a){var b= -this.options.chart,b=new Y[a.type||b.type||b.defaultSeriesType];b.init(this,a);return b},addSeries:function(a,b,c){var d=this;a&&(ua(c,d),b=o(b,!0),E(d,"addSeries",{options:a},function(){d.initSeries(a);d.isDirtyLegend=!0;b&&d.redraw()}))},isInsidePlot:function(a,b){return a>=0&&a<=this.plotWidth&&b>=0&&b<=this.plotHeight},adjustTickAmounts:function(){this.options.chart.alignTicks!==!1&&n(this.axes,function(a){a.adjustTickAmount()});this.maxTicks=null},redraw:function(a){var b=this.axes,c=this.series, -d=this.tracker,e=this.legend,f=this.isDirtyLegend,g,h=this.isDirtyBox,i=c.length,j=i,k=this.clipRect,l=this.renderer,m=l.isHidden();ua(a,this);for(m&&this.cloneRenderTo();j--;)if(a=c[j],a.isDirty&&a.options.stacking){g=!0;break}if(g)for(j=i;j--;)if(a=c[j],a.options.stacking)a.isDirty=!0;n(c,function(a){a.isDirty&&a.options.legendType==="point"&&(f=!0)});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;if(this.hasCartesianSeries){if(!this.isResizing)this.maxTicks=null,n(b,function(a){a.setScale()}); -this.adjustTickAmounts();this.getMargins();n(b,function(a){if(a.isDirtyExtremes)a.isDirtyExtremes=!1,E(a,"afterSetExtremes",a.getExtremes());if(a.isDirty||h||g)a.redraw(),h=!0})}h&&(this.drawChartBox(),k&&(Fa(k),k.animate({width:this.plotSizeX,height:this.plotSizeY+1})));n(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});d&&d.resetTracker&&d.resetTracker(!0);l.draw();E(this,"redraw");m&&this.cloneRenderTo(!0)},showLoading:function(a){var b=this.options,c=this.loadingDiv, -d=b.loading;if(!c)this.loadingDiv=c=S(ia,{className:"highcharts-loading"},u(d.style,{left:this.plotLeft+"px",top:this.plotTop+"px",width:this.plotWidth+"px",height:this.plotHeight+"px",zIndex:10,display:U}),this.container),this.loadingSpan=S("span",null,d.labelStyle,c);this.loadingSpan.innerHTML=a||b.lang.loading;if(!this.loadingShown)F(c,{opacity:0,display:""}),eb(c,{opacity:d.style.opacity},{duration:d.showDuration||0}),this.loadingShown=!0},hideLoading:function(){var a=this.options,b=this.loadingDiv; -b&&eb(b,{opacity:0},{duration:a.loading.hideDuration||100,complete:function(){F(b,{display:U})}});this.loadingShown=!1},get:function(a){var b=this.axes,c=this.series,d,e;for(d=0;d<b.length;d++)if(b[d].options.id===a)return b[d];for(d=0;d<c.length;d++)if(c[d].options.id===a)return c[d];for(d=0;d<c.length;d++){e=c[d].points||[];for(b=0;b<e.length;b++)if(e[b].id===a)return e[b]}return null},getAxes:function(){var a=this,b=this.options,c=b.xAxis||{},b=b.yAxis||{},c=na(c);n(c,function(a,b){a.index=b;a.isX= -!0});b=na(b);n(b,function(a,b){a.index=b});c=c.concat(b);n(c,function(b){new ob(a,b)});a.adjustTickAmounts()},getSelectedPoints:function(){var a=[];n(this.series,function(b){a=a.concat(ub(b.points,function(a){return a.selected}))});return a},getSelectedSeries:function(){return ub(this.series,function(a){return a.selected})},showResetZoom:function(){var a=this,b=V.lang,c=a.options.chart.resetZoomButton,d=c.theme,e=d.states,f=c.relativeTo==="chart"?null:{x:a.plotLeft,y:a.plotTop,width:a.plotWidth,height:a.plotHeight}; -this.resetZoomButton=a.renderer.button(b.resetZoom,null,null,function(){a.zoomOut()},d,e&&e.hover).attr({align:c.position.align,title:b.resetZoomTitle}).add().align(c.position,!1,f)},zoomOut:function(){var a=this,b=a.resetZoomButton;E(a,"selection",{resetSelection:!0},function(){a.zoom()});if(b)a.resetZoomButton=b.destroy()},zoom:function(a){var b=this,c=b.options.chart,d;b.resetZoomEnabled!==!1&&!b.resetZoomButton&&b.showResetZoom();!a||a.resetSelection?n(b.axes,function(a){a.options.zoomEnabled!== -!1&&(a.setExtremes(null,null,!1),d=!0)}):n(a.xAxis.concat(a.yAxis),function(a){var c=a.axis;if(b.tracker[c.isXAxis?"zoomX":"zoomY"])c.setExtremes(a.min,a.max,!1),d=!0});d&&b.redraw(o(c.animation,b.pointCount<100))},pan:function(a){var b=this.xAxis[0],c=this.mouseDownX,d=b.pointRange/2,e=b.getExtremes(),f=b.translate(c-a,!0)+d,c=b.translate(c+this.plotWidth-a,!0)-d;(d=this.hoverPoints)&&n(d,function(a){a.setState()});b.series.length&&f>O(e.dataMin,e.min)&&c<x(e.dataMax,e.max)&&b.setExtremes(f,c,!0, -!1);this.mouseDownX=a;F(this.container,{cursor:"move"})},setTitle:function(a,b){var c=this,d=c.options,e;c.chartTitleOptions=e=C(d.title,a);c.chartSubtitleOptions=d=C(d.subtitle,b);n([["title",a,e],["subtitle",b,d]],function(a){var b=a[0],d=c[b],e=a[1],a=a[2];d&&e&&(d=d.destroy());a&&a.text&&!d&&(c[b]=c.renderer.text(a.text,0,0,a.useHTML).attr({align:a.align,"class":"highcharts-"+b,zIndex:a.zIndex||4}).css(a.style).add().align(a,!1,c.spacingBox))})},getChartSize:function(){var a=this.options.chart, -b=this.renderToClone||this.renderTo;this.containerWidth=Va(b,"width");this.containerHeight=Va(b,"height");this.chartWidth=a.width||this.containerWidth||600;this.chartHeight=a.height||(this.containerHeight>19?this.containerHeight:400)},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container;a?b&&(this.renderTo.appendChild(c),Qa(b),delete this.renderToClone):(c&&this.renderTo.removeChild(c),this.renderToClone=b=this.renderTo.cloneNode(0),F(b,{position:"absolute",top:"-9999px",display:"block"}), -B.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options.chart,c,d,e;this.renderTo=a=b.renderTo;e="highcharts-"+sb++;if(ra(a))this.renderTo=a=B.getElementById(a);a||mb(13,!0);a.innerHTML="";a.offsetWidth||this.cloneRenderTo();this.getChartSize();c=this.chartWidth;d=this.chartHeight;this.container=a=S(ia,{className:"highcharts-container"+(b.className?" "+b.className:""),id:e},u({position:"relative",overflow:"hidden",width:c+"px",height:d+"px",textAlign:"left",lineHeight:"normal"}, -b.style),this.renderToClone||a);this.renderer=b.forExport?new qa(a,c,d,!0):new Ta(a,c,d);ga&&this.renderer.create(this,a,c,d)},getMargins:function(){var a=this.options.chart,b=a.spacingTop,c=a.spacingRight,d=a.spacingBottom,a=a.spacingLeft,e,f=this.legend,g=this.optionsMarginTop,h=this.optionsMarginLeft,i=this.optionsMarginRight,j=this.optionsMarginBottom,k=this.chartTitleOptions,l=this.chartSubtitleOptions,m=this.options.legend,p=o(m.margin,10),q=m.x,t=m.y,r=m.align,y=m.verticalAlign;this.resetMargins(); -e=this.axisOffset;if((this.title||this.subtitle)&&!s(this.optionsMarginTop))if(l=x(this.title&&!k.floating&&!k.verticalAlign&&k.y||0,this.subtitle&&!l.floating&&!l.verticalAlign&&l.y||0))this.plotTop=x(this.plotTop,l+o(k.margin,15)+b);if(f.display&&!m.floating)if(r==="right"){if(!s(i))this.marginRight=x(this.marginRight,f.legendWidth-q+p+c)}else if(r==="left"){if(!s(h))this.plotLeft=x(this.plotLeft,f.legendWidth+q+p+a)}else if(y==="top"){if(!s(g))this.plotTop=x(this.plotTop,f.legendHeight+t+p+b)}else if(y=== -"bottom"&&!s(j))this.marginBottom=x(this.marginBottom,f.legendHeight-t+p+d);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);this.hasCartesianSeries&&n(this.axes,function(a){a.getOffset()});s(h)||(this.plotLeft+=e[3]);s(g)||(this.plotTop+=e[0]);s(j)||(this.marginBottom+=e[2]);s(i)||(this.marginRight+=e[1]);this.setChartSize()},initReflow:function(){function a(a){var g=c.width||Va(d,"width"),h=c.height||Va(d,"height"),a=a? -a.target:N;if(g&&h&&(a===N||a===B)){if(g!==b.containerWidth||h!==b.containerHeight)clearTimeout(e),e=setTimeout(function(){b.resize(g,h,!1)},100);b.containerWidth=g;b.containerHeight=h}}var b=this,c=b.options.chart,d=b.renderTo,e;I(N,"resize",a);I(b,"destroy",function(){P(N,"resize",a)})},fireEndResize:function(){var a=this;a&&E(a,"endResize",null,function(){a.isResizing-=1})},resize:function(a,b,c){var d,e,f=this.title,g=this.subtitle;this.isResizing+=1;ua(c,this);this.oldChartHeight=this.chartHeight; -this.oldChartWidth=this.chartWidth;if(s(a))this.chartWidth=d=t(a);if(s(b))this.chartHeight=e=t(b);F(this.container,{width:d+"px",height:e+"px"});this.renderer.setSize(d,e,c);this.plotWidth=d-this.plotLeft-this.marginRight;this.plotHeight=e-this.plotTop-this.marginBottom;this.maxTicks=null;n(this.axes,function(a){a.isDirty=!0;a.setScale()});n(this.series,function(a){a.isDirty=!0});this.isDirtyBox=this.isDirtyLegend=!0;this.getMargins();a=this.spacingBox;f&&f.align(null,null,a);g&&g.align(null,null, -a);this.redraw(c);this.oldChartHeight=null;E(this,"resize");Ra===!1?this.fireEndResize():setTimeout(this.fireEndResize,Ra&&Ra.duration||500)},setChartSize:function(){var a=this.inverted,b=this.chartWidth,c=this.chartHeight,d=this.options.chart,e=d.spacingTop,f=d.spacingRight,g=d.spacingBottom,d=d.spacingLeft;this.plotLeft=t(this.plotLeft);this.plotTop=t(this.plotTop);this.plotWidth=t(b-this.plotLeft-this.marginRight);this.plotHeight=t(c-this.plotTop-this.marginBottom);this.plotSizeX=a?this.plotHeight: -this.plotWidth;this.plotSizeY=a?this.plotWidth:this.plotHeight;this.spacingBox={x:d,y:e,width:b-d-f,height:c-e-g};n(this.axes,function(a){a.setAxisSize();a.setAxisTranslation()})},resetMargins:function(){var a=this.options.chart,b=a.spacingRight,c=a.spacingBottom,d=a.spacingLeft;this.plotTop=o(this.optionsMarginTop,a.spacingTop);this.marginRight=o(this.optionsMarginRight,b);this.marginBottom=o(this.optionsMarginBottom,c);this.plotLeft=o(this.optionsMarginLeft,d);this.axisOffset=[0,0,0,0]},drawChartBox:function(){var a= -this.options.chart,b=this.renderer,c=this.chartWidth,d=this.chartHeight,e=this.chartBackground,f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,i=a.borderWidth||0,j=a.backgroundColor,k=a.plotBackgroundColor,l=a.plotBackgroundImage,m,p={x:this.plotLeft,y:this.plotTop,width:this.plotWidth,height:this.plotHeight};m=i+(a.shadow?8:0);if(i||j)if(e)e.animate(e.crisp(null,null,null,c-m,d-m));else{e={fill:j||U};if(i)e.stroke=a.borderColor,e["stroke-width"]=i;this.chartBackground=b.rect(m/2,m/2,c- -m,d-m,a.borderRadius,i).attr(e).add().shadow(a.shadow)}if(k)f?f.animate(p):this.plotBackground=b.rect(this.plotLeft,this.plotTop,this.plotWidth,this.plotHeight,0).attr({fill:k}).add().shadow(a.plotShadow);if(l)h?h.animate(p):this.plotBGImage=b.image(l,this.plotLeft,this.plotTop,this.plotWidth,this.plotHeight).add();if(a.plotBorderWidth)g?g.animate(g.crisp(null,this.plotLeft,this.plotTop,this.plotWidth,this.plotHeight)):this.plotBorder=b.rect(this.plotLeft,this.plotTop,this.plotWidth,this.plotHeight, -0,a.plotBorderWidth).attr({stroke:a.plotBorderColor,"stroke-width":a.plotBorderWidth,zIndex:4}).add();this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart,c,d=a.options.series,e,f;n(["inverted","angular","polar"],function(g){c=Y[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g];for(e=d&&d.length;!f&&e--;)(c=Y[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},render:function(){var a=this,b=a.axes,c=a.renderer,d=a.options,e=d.labels,d=d.credits,f;a.setTitle();a.legend=new qb(a); -n(b,function(a){a.setScale()});a.getMargins();a.maxTicks=null;n(b,function(a){a.setTickPositions(!0);a.setMaxTicks()});a.adjustTickAmounts();a.getMargins();a.drawChartBox();a.hasCartesianSeries&&n(b,function(a){a.render()});if(!a.seriesGroup)a.seriesGroup=c.g("series-group").attr({zIndex:3}).add();n(a.series,function(a){a.translate();a.setTooltipPoints();a.render()});e.items&&n(e.items,function(){var b=u(e.style,this.style),d=w(b.left)+a.plotLeft,f=w(b.top)+a.plotTop+12;delete b.left;delete b.top; -c.text(this.html,d,f).attr({zIndex:2}).css(b).add()});if(d.enabled&&!a.credits)f=d.href,a.credits=c.text(d.text,0,0).on("click",function(){if(f)location.href=f}).attr({align:d.position.align,zIndex:8}).css(d.style).add().align(d.position);a.hasRendered=!0},destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;if(a!==null){E(a,"destroy");P(a);for(e=b.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy();n("title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,tracker,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer".split(","), -function(b){var c=a[b];c&&(a[b]=c.destroy())});if(d)d.innerHTML="",P(d),f&&Qa(d),d=null;for(e in a)delete a[e];a=a.options=null}},firstRender:function(){var a=this,b=a.options,c=a.callback;if(!Da&&N==N.top&&B.readyState!=="complete"||ga&&!N.canvg)ga?Nb.push(function(){a.firstRender()},b.global.canvasToolsURL):B.attachEvent("onreadystatechange",function(){B.detachEvent("onreadystatechange",a.firstRender);B.readyState==="complete"&&a.firstRender()});else{a.getContainer();E(a,"init");if(Highcharts.RangeSelector&& -b.rangeSelector.enabled)a.rangeSelector=new Highcharts.RangeSelector(a);a.resetMargins();a.setChartSize();a.propFromSeries();a.getAxes();n(b.series||[],function(b){a.initSeries(b)});if(Highcharts.Scroller&&(b.navigator.enabled||b.scrollbar.enabled))a.scroller=new Highcharts.Scroller(a);a.tracker=new Db(a,b);a.render();a.renderer.draw();c&&c.apply(a,[a]);n(a.callbacks,function(b){b.apply(a,[a])});a.cloneRenderTo(!0);E(a,"load")}},init:function(a){var b=this.options.chart,c;b.reflow!==!1&&I(this,"load", -this.initReflow);if(a)for(c in a)I(this,c,a[c]);this.xAxis=[];this.yAxis=[];this.animation=ga?!1:o(b.animation,!0);this.setSize=this.resize;this.pointCount=0;this.counters=new Ab;this.firstRender()}};rb.prototype.callbacks=[];var Wa=function(){};Wa.prototype={init:function(a,b,c){var d=a.chart.counters;this.series=a;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint){b=a.chart.options.colors;if(!this.options)this.options={};this.color=this.options.color=this.color||b[d.color++];d.wrapColor(b.length)}a.chart.pointCount++; -return this},applyOptions:function(a,b){var c=this.series,d=typeof a;this.config=a;if(d==="number"||a===null)this.y=a;else if(typeof a[0]==="number")this.x=a[0],this.y=a[1];else if(d==="object"&&typeof a.length!=="number"){if(u(this,a),this.options=a,a.dataLabels)c._hasPointLabels=!0}else if(typeof a[0]==="string")this.name=a[0],this.y=a[1];if(this.x===A)this.x=b===A?c.autoIncrement():b},destroy:function(){var a=this.series.chart,b=a.hoverPoints,c;a.pointCount--;if(b&&(this.setState(),za(b,this), -!b.length))a.hoverPoints=null;if(this===a.hoverPoint)this.onMouseOut();if(this.graphic||this.dataLabel)P(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(c in this)this[c]=null},destroyElements:function(){for(var a="graphic,tracker,dataLabel,group,connector,shadowGroup".split(","),b,c=6;c--;)b=a[c],this[b]&&(this[b]=this[b].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage, -total:this.total||this.stackTotal}},select:function(a,b){var c=this,d=c.series.chart,a=o(a,!c.selected);c.firePointEvent(a?"select":"unselect",{accumulate:b},function(){c.selected=a;c.setState(a&&"select");b||n(d.getSelectedPoints(),function(a){if(a.selected&&a!==c)a.selected=!1,a.setState(""),a.firePointEvent("unselect")})})},onMouseOver:function(){var a=this.series,b=a.chart,c=b.tooltip,d=b.hoverPoint;if(d&&d!==this)d.onMouseOut();this.firePointEvent("mouseOver");c&&(!c.shared||a.noSharedTooltip)&& -c.refresh(this);this.setState("hover");b.hoverPoint=this},onMouseOut:function(){this.firePointEvent("mouseOut");this.setState();this.series.chart.hoverPoint=null},tooltipFormatter:function(a){var b=this.series,c=b.tooltipOptions,d=a.match(/\{(series|point)\.[a-zA-Z]+\}/g),e=/[{\.}]/,f,g,h,i,j={y:0,open:0,high:0,low:0,close:0,percentage:1,total:1};c.valuePrefix=c.valuePrefix||c.yPrefix;c.valueDecimals=c.valueDecimals||c.yDecimals;c.valueSuffix=c.valueSuffix||c.ySuffix;for(i in d)g=d[i],ra(g)&&g!== -a&&(h=(" "+g).split(e),f={point:this,series:b}[h[1]],h=h[2],f===this&&j.hasOwnProperty(h)?(f=j[h]?h:"value",f=(c[f+"Prefix"]||"")+Xa(this[h],o(c[f+"Decimals"],-1))+(c[f+"Suffix"]||"")):f=f[h],a=a.replace(g,f));return a},update:function(a,b,c){var d=this,e=d.series,f=d.graphic,g,h=e.data,i=h.length,j=e.chart,b=o(b,!0);d.firePointEvent("update",{options:a},function(){d.applyOptions(a);aa(a)&&(e.getAttribs(),f&&f.attr(d.pointAttr[e.state]));for(g=0;g<i;g++)if(h[g]===d){e.xData[g]=d.x;e.yData[g]=d.y; -e.options.data[g]=a;break}e.isDirty=!0;e.isDirtyData=!0;b&&j.redraw(c)})},remove:function(a,b){var c=this,d=c.series,e=d.chart,f,g=d.data,h=g.length;ua(b,e);a=o(a,!0);c.firePointEvent("remove",null,function(){for(f=0;f<h;f++)if(g[f]===c){g.splice(f,1);d.options.data.splice(f,1);d.xData.splice(f,1);d.yData.splice(f,1);break}c.destroy();d.isDirty=!0;d.isDirtyData=!0;a&&e.redraw()})},firePointEvent:function(a,b,c){var d=this,e=this.series.options;(e.point.events[a]||d.options&&d.options.events&&d.options.events[a])&& -this.importEvents();a==="click"&&e.allowPointSelect&&(c=function(a){d.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});E(this,a,b,c)},importEvents:function(){if(!this.hasImportedEvents){var a=C(this.series.options.point,this.options).events,b;this.events=a;for(b in a)I(this,b,a[b]);this.hasImportedEvents=!0}},setState:function(a){var b=this.plotX,c=this.plotY,d=this.series,e=d.options.states,f=Z[d.type].marker&&d.options.marker,g=f&&!f.enabled,h=f&&f.states[a],i=h&&h.enabled===!1,j=d.stateMarkerGraphic, -k=d.chart,l=this.pointAttr,a=a||"";if(!(a===this.state||this.selected&&a!=="select"||e[a]&&e[a].enabled===!1||a&&(i||g&&!h.enabled))){if(this.graphic)e=f&&this.graphic.symbolName&&l[a].r,this.graphic.attr(C(l[a],e?{x:b-e,y:c-e,width:2*e,height:2*e}:{}));else{if(a&&h){if(!j)e=h.radius,d.stateMarkerGraphic=j=k.renderer.symbol(d.symbol,-e,-e,2*e,2*e).attr(l[a]).add(d.group);j.translate(b,c)}if(j)j[a?"show":"hide"]()}this.state=a}}};var R=function(){};R.prototype={isCartesian:!0,type:"line",pointClass:Wa, -sorted:!0,pointAttrToOptions:{stroke:"lineColor","stroke-width":"lineWidth",fill:"fillColor",r:"radius"},init:function(a,b){var c,d;d=a.series.length;this.chart=a;this.options=b=this.setOptions(b);this.bindAxes();u(this,{index:d,name:b.name||"Series "+(d+1),state:"",pointAttr:{},visible:b.visible!==!1,selected:b.selected===!0});if(ga)b.animation=!1;d=b.events;for(c in d)I(this,c,d[c]);if(d&&d.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;this.getColor(); -this.getSymbol();this.setData(b.data,!1);if(this.isCartesian)a.hasCartesianSeries=!0;a.series.push(this)},bindAxes:function(){var a=this,b=a.options,c=a.chart,d;a.isCartesian&&n(["xAxis","yAxis"],function(e){n(c[e],function(c){d=c.options;if(b[e]===d.index||b[e]===A&&d.index===0)c.series.push(a),a[e]=c,c.isDirty=!0})})},autoIncrement:function(){var a=this.options,b=this.xIncrement,b=o(b,a.pointStart,0);this.pointInterval=o(this.pointInterval,a.pointInterval,1);this.xIncrement=b+this.pointInterval; -return b},getSegments:function(){var a=-1,b=[],c,d=this.points,e=d.length;if(e)if(this.options.connectNulls){for(c=e;c--;)d[c].y===null&&d.splice(c,1);d.length&&(b=[d])}else n(d,function(c,g){c.y===null?(g>a+1&&b.push(d.slice(a+1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart.options,c=b.plotOptions,d=a.data;a.data=null;c=C(c[this.type],c.series,a);c.data=a.data=d;this.tooltipOptions=C(b.tooltip,c.tooltip);return c},getColor:function(){var a= -this.options,b=this.chart.options.colors,c=this.chart.counters;this.color=a.color||!a.colorByPoint&&b[c.color++]||"gray";c.wrapColor(b.length)},getSymbol:function(){var a=this.options.marker,b=this.chart,c=b.options.symbols,b=b.counters;this.symbol=a.symbol||c[b.symbol++];if(/^url/.test(this.symbol))a.radius=0;b.wrapSymbol(c.length)},drawLegendSymbol:function(a){var b=this.options,c=b.marker,d=a.options.symbolWidth,e=this.chart.renderer,f=this.legendGroup,a=a.baseline,g;if(b.lineWidth){g={"stroke-width":b.lineWidth}; -if(b.dashStyle)g.dashstyle=b.dashStyle;this.legendLine=e.path(["M",0,a-4,"L",d,a-4]).attr(g).add(f)}if(c&&c.enabled)b=c.radius,this.legendSymbol=e.symbol(this.symbol,d/2-b,a-4-b,2*b,2*b).attr(this.pointAttr[""]).add(f)},addPoint:function(a,b,c,d){var e=this.data,f=this.graph,g=this.area,h=this.chart,i=this.xData,j=this.yData,k=f&&f.shift||0,l=this.options.data;ua(d,h);if(f&&c)f.shift=k+1;if(g){if(c)g.shift=k+1;g.isArea=!0}b=o(b,!0);d={series:this};this.pointClass.prototype.applyOptions.apply(d,[a]); -i.push(d.x);j.push(this.valueCount===4?[d.open,d.high,d.low,d.close]:d.y);l.push(a);c&&(e[0]&&e[0].remove?e[0].remove(!1):(e.shift(),i.shift(),j.shift(),l.shift()));this.getAttribs();this.isDirtyData=this.isDirty=!0;b&&h.redraw()},setData:function(a,b){var c=this.points,d=this.options,e=this.initialColor,f=this.chart,g=null,h=this.xAxis,i=this.pointClass.prototype;this.xIncrement=null;this.pointRange=h&&h.categories&&1||d.pointRange;if(s(e))f.counters.color=e;var j=[],k=[],l=a?a.length:[],m=this.valueCount; -if(l>(d.turboThreshold||1E3)){for(e=0;g===null&&e<l;)g=a[e],e++;if(Ka(g)){i=o(d.pointStart,0);d=o(d.pointInterval,1);for(e=0;e<l;e++)j[e]=i,k[e]=a[e],i+=d;this.xIncrement=i}else if(Ja(g))if(m)for(e=0;e<l;e++)d=a[e],j[e]=d[0],k[e]=d.slice(1,m+1);else for(e=0;e<l;e++)d=a[e],j[e]=d[0],k[e]=d[1]}else for(e=0;e<l;e++)d={series:this},i.applyOptions.apply(d,[a[e]]),j[e]=d.x,k[e]=i.toYData?i.toYData.apply(d):d.y;this.data=[];this.options.data=a;this.xData=j;this.yData=k;for(e=c&&c.length||0;e--;)c[e]&&c[e].destroy&& -c[e].destroy();if(h)h.minRange=h.userMinRange;this.isDirty=this.isDirtyData=f.isDirtyBox=!0;o(b,!0)&&f.redraw(!1)},remove:function(a,b){var c=this,d=c.chart,a=o(a,!0);if(!c.isRemoving)c.isRemoving=!0,E(c,"remove",null,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=!0;a&&d.redraw(b)});c.isRemoving=!1},processData:function(a){var b=this.xData,c=this.yData,d=b.length,e=0,f=d,g,h,i=this.xAxis,j=this.options,k=j.cropThreshold,l=this.isCartesian;if(l&&!this.isDirty&&!i.isDirty&&!this.yAxis.isDirty&& -!a)return!1;if(l&&this.sorted&&(!k||d>k||this.forceCrop))if(a=i.getExtremes(),i=a.min,k=a.max,b[d-1]<i||b[0]>k)b=[],c=[];else if(b[0]<i||b[d-1]>k){for(a=0;a<d;a++)if(b[a]>=i){e=x(0,a-1);break}for(;a<d;a++)if(b[a]>k){f=a+1;break}b=b.slice(e,f);c=c.slice(e,f);g=!0}for(a=b.length-1;a>0;a--)if(d=b[a]-b[a-1],d>0&&(h===A||d<h))h=d;this.cropped=g;this.cropStart=e;this.processedXData=b;this.processedYData=c;if(j.pointRange===null)this.pointRange=h||1;this.closestPointRange=h},generatePoints:function(){var a= -this.options.data,b=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass,g=d.length,h=this.cropStart||0,i,j=this.hasGroupedData,k,l=[],m;if(!b&&!j)b=[],b.length=a.length,b=this.data=b;for(m=0;m<g;m++)i=h+m,j?l[m]=(new f).init(this,[d[m]].concat(na(e[m]))):(b[i]?k=b[i]:a[i]!==A&&(b[i]=k=(new f).init(this,a[i],d[m])),l[m]=k);if(b&&(g!==(c=b.length)||j))for(m=0;m<c;m++)if(m===h&&!j&&(m+=g),b[m])b[m].destroyElements(),b[m].plotX=A;this.data=b;this.points=l},translate:function(){this.processedXData|| -this.processData();this.generatePoints();for(var a=this.chart,b=this.options,c=b.stacking,d=this.xAxis,e=d.categories,f=this.yAxis,g=this.points,h=g.length,i=!!this.modifyValue,j,k=f.series,l=k.length;l--;)if(k[l].visible){l===this.index&&(j=!0);break}for(l=0;l<h;l++){var k=g[l],m=k.x,p=k.y,n=k.low,o=f.stacks[(p<b.threshold?"-":"")+this.stackKey];k.plotX=d.translate(m,0,0,0,1);if(c&&this.visible&&o&&o[m]){n=o[m];m=n.total;n.cum=n=n.cum-p;p=n+p;if(j)n=b.threshold;c==="percent"&&(n=m?n*100/m:0,p=m? -p*100/m:0);k.percentage=m?k.y*100/m:0;k.stackTotal=m;k.stackY=p}k.yBottom=s(n)?f.translate(n,0,1,0,1):null;i&&(p=this.modifyValue(p,k));k.plotY=typeof p==="number"?t(f.translate(p,0,1,0,1)*10)/10:A;k.clientX=a.inverted?a.plotHeight-k.plotX:k.plotX;k.category=e&&e[k.x]!==A?e[k.x]:k.x}this.getSegments()},setTooltipPoints:function(a){var b=[],c=this.chart.plotSizeX,d,e;d=this.xAxis;var f,g,h=[];if(this.options.enableMouseTracking!==!1){if(a)this.tooltipPoints=null;n(this.segments||this.points,function(a){b= -b.concat(a)});d&&d.reversed&&(b=b.reverse());a=b.length;for(g=0;g<a;g++){f=b[g];d=b[g-1]?b[g-1]._high+1:0;for(f._high=e=b[g+1]?x(0,W((f.plotX+(b[g+1]?b[g+1].plotX:c))/2)):c;d>=0&&d<=e;)h[d++]=f}this.tooltipPoints=h}},tooltipHeaderFormatter:function(a){var b=this.tooltipOptions,c=b.xDateFormat,d=this.xAxis,e=d&&d.options.type==="datetime",f;if(e&&!c)for(f in D)if(D[f]>=d.closestPointRange){c=b.dateTimeLabelFormats[f];break}return b.headerFormat.replace("{point.key}",e?db(c,a):a).replace("{series.name}", -this.name).replace("{series.color}",this.color)},onMouseOver:function(){var a=this.chart,b=a.hoverSeries;if(ea||!a.mouseIsDown){if(b&&b!==this)b.onMouseOut();this.options.events.mouseOver&&E(this,"mouseOver");this.setState("hover");a.hoverSeries=this}},onMouseOut:function(){var a=this.options,b=this.chart,c=b.tooltip,d=b.hoverPoint;if(d)d.onMouseOut();this&&a.events.mouseOut&&E(this,"mouseOut");c&&!a.stickyTracking&&!c.shared&&c.hide();this.setState();b.hoverSeries=null},animate:function(a){var b= -this.chart,c=this.clipRect,d=this.options.animation;d&&!aa(d)&&(d={});if(a){if(!c.isAnimating)c.attr("width",0),c.isAnimating=!0}else c.animate({width:b.plotSizeX},d),this.animate=null},drawPoints:function(){var a,b=this.points,c=this.chart,d,e,f,g,h,i,j,k;if(this.options.marker.enabled)for(f=b.length;f--;)if(g=b[f],d=g.plotX,e=g.plotY,k=g.graphic,e!==A&&!isNaN(e))if(a=g.pointAttr[g.selected?"select":""],h=a.r,i=o(g.marker&&g.marker.symbol,this.symbol),j=i.indexOf("url")===0,k)k.animate(u({x:d-h, -y:e-h},k.symbolName?{width:2*h,height:2*h}:{}));else if(h>0||j)g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h).attr(a).add(this.group)},convertAttribs:function(a,b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=o(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=Z[a.type].marker?a.options.marker:a.options,c=b.states,d=c.hover,e,f=a.color,g={stroke:f,fill:f},h=a.points||[],i=[],j,k=a.pointAttrToOptions,l;a.options.marker?(d.radius= -d.radius||b.radius+2,d.lineWidth=d.lineWidth||b.lineWidth+1):d.color=d.color||pa(d.color||f).brighten(d.brightness).get();i[""]=a.convertAttribs(b,g);n(["hover","select"],function(b){i[b]=a.convertAttribs(c[b],i[""])});a.pointAttr=i;for(f=h.length;f--;){g=h[f];if((b=g.options&&g.options.marker||g.options)&&b.enabled===!1)b.radius=0;e=!1;if(g.options)for(l in k)s(b[k[l]])&&(e=!0);if(e){j=[];c=b.states||{};e=c.hover=c.hover||{};if(!a.options.marker)e.color=pa(e.color||g.options.color).brighten(e.brightness|| -d.brightness).get();j[""]=a.convertAttribs(b,i[""]);j.hover=a.convertAttribs(c.hover,i.hover,j[""]);j.select=a.convertAttribs(c.select,i.select,j[""])}else j=i;g.pointAttr=j}},destroy:function(){var a=this,b=a.chart,c=a.clipRect,d=/AppleWebKit\/533/.test(ya),e,f,g=a.data||[],h,i,j;E(a,"destroy");P(a);n(["xAxis","yAxis"],function(b){if(j=a[b])za(j.series,a),j.isDirty=!0});a.legendItem&&a.chart.legend.destroyItem(a);for(f=g.length;f--;)(h=g[f])&&h.destroy&&h.destroy();a.points=null;if(c&&c!==b.clipRect)a.clipRect= -c.destroy();n("area,graph,dataLabelsGroup,group,tracker,trackerGroup".split(","),function(b){a[b]&&(e=d&&b==="group"?"hide":"destroy",a[b][e]())});if(b.hoverSeries===a)b.hoverSeries=null;za(b.series,a);for(i in a)delete a[i]},drawDataLabels:function(){var a=this,b=a.options,c=b.dataLabels;if(c.enabled||a._hasPointLabels){var d,e,f=a.points,g,h,i,j=a.dataLabelsGroup,k=a.chart,l=a.xAxis,l=l?l.left:k.plotLeft,m=a.yAxis,m=m?m.top:k.plotTop,p=k.renderer,q=k.inverted,u=a.type,r=b.stacking,y=u==="column"|| -u==="bar",x=c.verticalAlign===null,w=c.y===null,v=p.fontMetrics(c.style.fontSize),H=v.h,J=v.b,K,z;y&&(v={top:J,middle:J-H/2,bottom:-H+J},r?(x&&(c=C(c,{verticalAlign:"middle"})),w&&(c=C(c,{y:v[c.verticalAlign]}))):x?c=C(c,{verticalAlign:"top"}):w&&(c=C(c,{y:v[c.verticalAlign]})));j?j.translate(l,m):j=a.dataLabelsGroup=p.g("data-labels").attr({visibility:a.visible?"visible":"hidden",zIndex:6}).translate(l,m).add();h=c;n(f,function(f){K=f.dataLabel;c=h;(g=f.options)&&g.dataLabels&&(c=C(c,g.dataLabels)); -if(z=c.enabled){var l=f.barX&&f.barX+f.barW/2||o(f.plotX,-999),m=o(f.plotY,-999),n=c.y===null?f.y>=b.threshold?-H+J:J:c.y;d=(q?k.plotWidth-m:l)+c.x;e=t((q?k.plotHeight-l:m)+n)}if(K&&a.isCartesian&&(!k.isInsidePlot(d,e)||!z))f.dataLabel=K.destroy();else if(z){var l=c.align,v;i=c.formatter.call(f.getLabelConfig(),c);u==="column"&&(d+={left:-1,right:1}[l]*f.barW/2||0);!r&&q&&f.y<0&&(l="right",d-=10);c.style.color=o(c.color,c.style.color,a.color,"black");if(K)K.attr({text:i}).animate({x:d,y:e});else if(s(i)){l= -{align:l,fill:c.backgroundColor,stroke:c.borderColor,"stroke-width":c.borderWidth,r:c.borderRadius||0,rotation:c.rotation,padding:c.padding,zIndex:1};for(v in l)l[v]===A&&delete l[v];K=f.dataLabel=p[c.rotation?"text":"label"](i,d,e,null,null,null,c.useHTML,!0).attr(l).css(c.style).add(j).shadow(c.shadow)}if(y&&b.stacking&&K)v=f.barX,l=f.barY,m=f.barW,f=f.barH,K.align(c,null,{x:q?k.plotWidth-l-f:v,y:q?k.plotHeight-v-m:l,width:q?f:m,height:q?m:f})}})}},getSegmentPath:function(a){var b=this,c=[];n(a, -function(d,e){b.getPointSpline?c.push.apply(c,b.getPointSpline(a,d,e)):(c.push(e?"L":"M"),e&&b.options.step&&c.push(d.plotX,a[e-1].plotY),c.push(d.plotX,d.plotY))});return c},drawGraph:function(){var a=this,b=a.options,c=a.graph,d=[],e=a.group,f=b.lineColor||a.color,g=b.lineWidth,h=b.dashStyle,i,j=a.chart.renderer,k=[];n(a.segments,function(b){i=a.getSegmentPath(b);b.length>1?d=d.concat(i):k.push(b[0])});a.graphPath=d;a.singlePoints=k;if(c)Fa(c),c.animate({d:d});else if(g){c={stroke:f,"stroke-width":g}; -if(h)c.dashstyle=h;a.graph=j.path(d).attr(c).add(e).shadow(b.shadow)}},invertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len};c.attr(a).invert();d&&d.attr(a).invert()}var b=this,c=b.group,d=b.trackerGroup,e=b.chart;I(e,"resize",a);I(b,"destroy",function(){P(e,"resize",a)});a();b.invertGroups=a},createGroup:function(){var a=this.chart;(this.group=a.renderer.g("series")).attr({visibility:this.visible?"visible":"hidden",zIndex:this.options.zIndex}).translate(this.xAxis.left, -this.yAxis.top).add(a.seriesGroup);this.createGroup=Sb},render:function(){var a=this,b=a.chart,c,d=a.options,e=d.clip!==!1,f=d.animation,f=(d=f&&a.animate)?f&&f.duration||500:0,g=a.clipRect,h=b.renderer;if(!g&&(g=a.clipRect=!b.hasRendered&&b.clipRect?b.clipRect:h.clipRect(0,0,b.plotSizeX,b.plotSizeY+1),!b.clipRect))b.clipRect=g;a.createGroup();c=a.group;a.drawDataLabels();d&&a.animate(!0);a.getAttribs();a.drawGraph&&a.drawGraph();a.drawPoints();a.options.enableMouseTracking!==!1&&a.drawTracker(); -b.inverted&&a.invertGroups();e&&!a.hasRendered&&(c.clip(g),a.trackerGroup&&a.trackerGroup.clip(b.clipRect));d&&a.animate();setTimeout(function(){g.isAnimating=!1;if((c=a.group)&&g!==b.clipRect&&g.renderer){if(e)c.clip(a.clipRect=b.clipRect);g.destroy()}},f);a.isDirty=a.isDirtyData=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirtyData,c=this.group;c&&(a.inverted&&c.attr({width:a.plotWidth,height:a.plotHeight}),c.animate({translateX:this.xAxis.left,translateY:this.yAxis.top})); -this.translate();this.setTooltipPoints(!0);this.render();b&&E(this,"updatedData")},setState:function(a){var b=this.options,c=this.graph,d=b.states,b=b.lineWidth,a=a||"";if(this.state!==a)this.state=a,d[a]&&d[a].enabled===!1||(a&&(b=d[a].lineWidth||b+1),c&&!c.dashstyle&&c.attr({"stroke-width":b},a?0:500))},setVisible:function(a,b){var c=this.chart,d=this.legendItem,e=this.group,f=this.tracker,g=this.dataLabelsGroup,h,i=this.points,j=c.options.chart.ignoreHiddenSeries;h=this.visible;h=(this.visible= -a=a===A?!h:a)?"show":"hide";if(e)e[h]();if(f)f[h]();else if(i)for(e=i.length;e--;)if(f=i[e],f.tracker)f.tracker[h]();if(g)g[h]();d&&c.legend.colorizeItem(this,a);this.isDirty=!0;this.options.stacking&&n(c.series,function(a){if(a.options.stacking&&a.visible)a.isDirty=!0});if(j)c.isDirtyBox=!0;b!==!1&&c.redraw();E(this,h)},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=a===A?!this.selected:a;if(this.checkbox)this.checkbox.checked=a;E(this, -a?"select":"unselect")},drawTrackerGroup:function(){var a=this.trackerGroup,b=this.chart;if(this.isCartesian){if(!a)this.trackerGroup=a=b.renderer.g().attr({zIndex:this.options.zIndex||1}).add(b.trackerGroup);a.translate(this.xAxis.left,this.yAxis.top)}return a},drawTracker:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath:a.graphPath),e=d.length,f=a.chart,g=f.renderer,h=f.options.tooltip.snap,i=a.tracker,j=b.cursor,j=j&&{cursor:j},k=a.singlePoints,l=a.drawTrackerGroup(), -m;if(e&&!c)for(m=e+1;m--;)d[m]==="M"&&d.splice(m+1,0,d[m+1]-h,d[m+2],"L"),(m&&d[m]==="M"||m===e)&&d.splice(m,0,"L",d[m-2]+h,d[m-1]);for(m=0;m<k.length;m++)e=k[m],d.push("M",e.plotX-h,e.plotY,"L",e.plotX+h,e.plotY);i?i.attr({d:d}):a.tracker=g.path(d).attr({isTracker:!0,"stroke-linejoin":"bevel",visibility:a.visible?"visible":"hidden",stroke:tb,fill:c?tb:U,"stroke-width":b.lineWidth+(c?0:2*h)}).on(ea?"touchstart":"mouseover",function(){if(f.hoverSeries!==a)a.onMouseOver()}).on("mouseout",function(){if(!b.stickyTracking)a.onMouseOut()}).css(j).add(l)}}; -G=ca(R);Y.line=G;Z.area=C(T,{threshold:0});G=ca(R,{type:"area",getSegmentPath:function(a){var b=R.prototype.getSegmentPath.call(this,a),c=[].concat(b),d,e=this.options;d=b.length;var f=this.yAxis.getThreshold(e.threshold);d===3&&c.push("L",b[1],b[2]);if(e.stacking&&this.type!=="areaspline")for(d=a.length-1;d>=0;d--)d<a.length-1&&e.step&&c.push(a[d+1].plotX,a[d].yBottom),c.push(a[d].plotX,a[d].yBottom);else c.push("L",a[a.length-1].plotX,f,"L",a[0].plotX,f);this.areaPath=this.areaPath.concat(c);return b}, -drawGraph:function(){this.areaPath=[];R.prototype.drawGraph.apply(this);var a=this.areaPath,b=this.options,c=this.area;c?c.animate({d:a}):this.area=this.chart.renderer.path(a).attr({fill:o(b.fillColor,pa(this.color).setOpacity(b.fillOpacity||0.75).get())}).add(this.group)},drawLegendSymbol:function(a,b){b.legendSymbol=this.chart.renderer.rect(0,a.baseline-11,a.options.symbolWidth,12,2).attr({zIndex:3}).add(b.legendGroup)}});Y.area=G;Z.spline=C(T);ha=ca(R,{type:"spline",getPointSpline:function(a,b, -c){var d=b.plotX,e=b.plotY,f=a[c-1],g=a[c+1],h,i,j,k;if(c&&c<a.length-1){a=f.plotY;j=g.plotX;var g=g.plotY,l;h=(1.5*d+f.plotX)/2.5;i=(1.5*e+a)/2.5;j=(1.5*d+j)/2.5;k=(1.5*e+g)/2.5;l=(k-i)*(j-d)/(j-h)+e-k;i+=l;k+=l;i>a&&i>e?(i=x(a,e),k=2*e-i):i<a&&i<e&&(i=O(a,e),k=2*e-i);k>g&&k>e?(k=x(g,e),i=2*e-k):k<g&&k<e&&(k=O(g,e),i=2*e-k);b.rightContX=j;b.rightContY=k}c?(b=["C",f.rightContX||f.plotX,f.rightContY||f.plotY,h||d,i||e,d,e],f.rightContX=f.rightContY=null):b=["M",d,e];return b}});Y.spline=ha;Z.areaspline= -C(Z.area);var Ia=G.prototype,ha=ca(ha,{type:"areaspline",getSegmentPath:Ia.getSegmentPath,drawGraph:Ia.drawGraph});Y.areaspline=ha;Z.column=C(T,{borderColor:"#FFFFFF",borderWidth:1,borderRadius:0,groupPadding:0.2,marker:null,pointPadding:0.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{brightness:0.1,shadow:!1},select:{color:"#C0C0C0",borderColor:"#000000",shadow:!1}},dataLabels:{y:null,verticalAlign:null},threshold:0});ha=ca(R,{type:"column",tooltipOutsidePlot:!0,pointAttrToOptions:{stroke:"borderColor", -"stroke-width":"borderWidth",fill:"color",r:"borderRadius"},init:function(){R.prototype.init.apply(this,arguments);var a=this,b=a.chart;b.hasRendered&&n(b.series,function(b){if(b.type===a.type)b.isDirty=!0})},translate:function(){var a=this,b=a.chart,c=a.options,d=c.stacking,e=c.borderWidth,f=0,g=a.xAxis,h=g.reversed,i={},j,k;R.prototype.translate.apply(a);n(b.series,function(b){if(b.type===a.type&&b.visible&&a.options.group===b.options.group)b.options.stacking?(j=b.stackKey,i[j]===A&&(i[j]=f++), -k=i[j]):k=f++,b.columnIndex=k});var l=a.points,g=M(g.transA)*(g.ordinalSlope||c.pointRange||g.closestPointRange||1),m=g*c.groupPadding,p=(g-2*m)/f,q=c.pointWidth,t=s(q)?(p-q)/2:p*c.pointPadding,r=o(q,p-2*t),y=wa(x(r,1+2*e)),w=t+(m+((h?f-a.columnIndex:a.columnIndex)||0)*p-g/2)*(h?-1:1),z=a.yAxis.getThreshold(c.threshold),v=o(c.minPointLength,5);n(l,function(c){var f=c.plotY,g=o(c.yBottom,z),h=c.plotX+w,i=wa(O(f,g)),j=wa(x(f,g)-i),k=a.yAxis.stacks[(c.y<0?"-":"")+a.stackKey];d&&a.visible&&k&&k[c.x]&& -k[c.x].setOffset(w,y);M(j)<v&&v&&(j=v,i=M(i-z)>v?g-v:z-(f<=z?v:0));u(c,{barX:h,barY:i,barW:y,barH:j,pointWidth:r});c.shapeType="rect";c.shapeArgs=f=b.renderer.Element.prototype.crisp.call(0,e,h,i,y,j);e%2&&(f.y-=1,f.height+=1);c.trackerArgs=M(j)<3&&C(c.shapeArgs,{height:6,y:i-3})})},getSymbol:function(){},drawLegendSymbol:G.prototype.drawLegendSymbol,drawGraph:function(){},drawPoints:function(){var a=this,b=a.options,c=a.chart.renderer,d,e;n(a.points,function(f){var g=f.plotY;if(g!==A&&!isNaN(g)&& -f.y!==null)d=f.graphic,e=f.shapeArgs,d?(Fa(d),d.animate(C(e))):f.graphic=d=c[f.shapeType](e).attr(f.pointAttr[f.selected?"select":""]).add(a.group).shadow(b.shadow,null,b.stacking&&!b.borderRadius)})},drawTracker:function(){var a=this,b=a.chart,c=b.renderer,d,e,f=+new Date,g=a.options,h=g.cursor,i=h&&{cursor:h},j=a.drawTrackerGroup(),k,l,m;n(a.points,function(h){e=h.tracker;d=h.trackerArgs||h.shapeArgs;l=h.plotY;m=!a.isCartesian||l!==A&&!isNaN(l);delete d.strokeWidth;if(h.y!==null&&m)e?e.attr(d): -h.tracker=c[h.shapeType](d).attr({isTracker:f,fill:tb,visibility:a.visible?"visible":"hidden"}).on(ea?"touchstart":"mouseover",function(c){k=c.relatedTarget||c.fromElement;if(b.hoverSeries!==a&&z(k,"isTracker")!==f)a.onMouseOver();h.onMouseOver()}).on("mouseout",function(b){if(!g.stickyTracking&&(k=b.relatedTarget||b.toElement,z(k,"isTracker")!==f))a.onMouseOut()}).css(i).add(h.group||j)})},animate:function(a){var b=this,c=b.points,d=b.options;if(!a)n(c,function(a){var c=a.graphic,a=a.shapeArgs,g= -b.yAxis,h=d.threshold;c&&(c.attr({height:0,y:s(h)?g.getThreshold(h):g.translate(g.getExtremes().min,0,1,0,1)}),c.animate({height:a.height,y:a.y},d.animation))}),b.animate=null},remove:function(){var a=this,b=a.chart;b.hasRendered&&n(b.series,function(b){if(b.type===a.type)b.isDirty=!0});R.prototype.remove.apply(a,arguments)}});Y.column=ha;Z.bar=C(Z.column,{dataLabels:{align:"left",x:5,y:null,verticalAlign:"middle"}});Ia=ca(ha,{type:"bar",inverted:!0});Y.bar=Ia;Z.scatter=C(T,{lineWidth:0,states:{hover:{lineWidth:0}}, -tooltip:{headerFormat:'<span style="font-size: 10px; color:{series.color}">{series.name}</span><br/>',pointFormat:"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>"}});Ia=ca(R,{type:"scatter",sorted:!1,translate:function(){var a=this;R.prototype.translate.apply(a);n(a.points,function(b){b.shapeType="circle";b.shapeArgs={x:b.plotX,y:b.plotY,r:a.chart.options.tooltip.snap}})},drawTracker:function(){for(var a=this,b=a.options.cursor,b=b&&{cursor:b},c=a.points,d=c.length,e;d--;)if(e=c[d].graphic)e.element._i= -d;a._hasTracking?a._hasTracking=!0:a.group.attr({isTracker:!0}).on(ea?"touchstart":"mouseover",function(b){a.onMouseOver();if(b.target._i!==A)c[b.target._i].onMouseOver()}).on("mouseout",function(){if(!a.options.stickyTracking)a.onMouseOut()}).css(b)}});Y.scatter=Ia;Z.pie=C(T,{borderColor:"#FFFFFF",borderWidth:1,center:["50%","50%"],colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name},y:5},legendType:"point",marker:null,size:"75%",showInLegend:!1,slicedOffset:10, -states:{hover:{brightness:0.1,shadow:!1}}});T={type:"pie",isCartesian:!1,pointClass:ca(Wa,{init:function(){Wa.prototype.init.apply(this,arguments);var a=this,b;u(a,{visible:a.visible!==!1,name:o(a.name,"Slice")});b=function(){a.slice()};I(a,"select",b);I(a,"unselect",b);return a},setVisible:function(a){var b=this.series.chart,c=this.tracker,d=this.dataLabel,e=this.connector,f=this.shadowGroup,g;g=(this.visible=a=a===A?!this.visible:a)?"show":"hide";this.group[g]();if(c)c[g]();if(d)d[g]();if(e)e[g](); -if(f)f[g]();this.legendItem&&b.legend.colorizeItem(this,a)},slice:function(a,b,c){var d=this.series.chart,e=this.slicedTranslation;ua(c,d);o(b,!0);a=this.sliced=s(a)?a:!this.sliced;a={translateX:a?e[0]:d.plotLeft,translateY:a?e[1]:d.plotTop};this.group.animate(a);this.shadowGroup&&this.shadowGroup.animate(a)}}),pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color"},getColor:function(){this.initialColor=this.chart.counters.color},animate:function(){var a=this;n(a.points, -function(b){var c=b.graphic,b=b.shapeArgs,d=-xa/2;c&&(c.attr({r:0,start:d,end:d}),c.animate({r:b.r,start:b.start,end:b.end},a.options.animation))});a.animate=null},setData:function(a,b){R.prototype.setData.call(this,a,!1);this.processData();this.generatePoints();o(b,!0)&&this.chart.redraw()},getCenter:function(){var a=this.options,b=this.chart,c=b.plotWidth,d=b.plotHeight,a=a.center.concat([a.size,a.innerSize||0]),e=O(c,d),f;return Ea(a,function(a,b){return(f=/%$/.test(a))?[c,d,e,e][b]*w(a)/100:a})}, -translate:function(){this.generatePoints();var a=0,b=-0.25,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g=this.chart,h,i,j,k=this.points,l=2*xa,m,p,o,s=c.dataLabels.distance;this.center=f=this.getCenter();this.getX=function(a,b){j=L.asin((a-f[1])/(f[2]/2+s));return f[0]+(b?-1:1)*X(j)*(f[2]/2+s)};n(k,function(b){a+=b.y});n(k,function(c){m=a?c.y/a:0;h=t(b*l*1E3)/1E3;b+=m;i=t(b*l*1E3)/1E3;c.shapeType="arc";c.shapeArgs={x:f[0],y:f[1],r:f[2]/2,innerR:f[3]/2,start:h,end:i};j=(i+h)/2;c.slicedTranslation= -Ea([X(j)*d+g.plotLeft,da(j)*d+g.plotTop],t);p=X(j)*f[2]/2;o=da(j)*f[2]/2;c.tooltipPos=[f[0]+p*0.7,f[1]+o*0.7];c.labelPos=[f[0]+p+X(j)*s,f[1]+o+da(j)*s,f[0]+p+X(j)*e,f[1]+o+da(j)*e,f[0]+p,f[1]+o,s<0?"center":j<l/4?"left":"right",j];c.percentage=m*100;c.total=a});this.setTooltipPoints()},render:function(){this.getAttribs();this.drawPoints();this.options.enableMouseTracking!==!1&&this.drawTracker();this.drawDataLabels();this.options.animation&&this.animate&&this.animate();this.isDirty=!1},drawPoints:function(){var a= -this,b=a.chart,c=b.renderer,d,e,f,g=a.options.shadow,h,i;n(a.points,function(j){e=j.graphic;i=j.shapeArgs;f=j.group;h=j.shadowGroup;if(g&&!h)h=j.shadowGroup=c.g("shadow").attr({zIndex:4}).add();if(!f)f=j.group=c.g("point").attr({zIndex:5}).add();d=j.sliced?j.slicedTranslation:[b.plotLeft,b.plotTop];f.translate(d[0],d[1]);h&&h.translate(d[0],d[1]);e?e.animate(i):j.graphic=e=c.arc(i).setRadialReference(a.center).attr(u(j.pointAttr[""],{"stroke-linejoin":"round"})).add(j.group).shadow(g,h);j.visible=== -!1&&j.setVisible(!1)})},drawDataLabels:function(){var a=this.data,b,c=this.chart,d=this.options.dataLabels,e=o(d.connectorPadding,10),f=o(d.connectorWidth,1),g,h,i=o(d.softConnector,!0),j=d.distance,k=this.center,l=k[2]/2,m=k[1],p=j>0,q=[[],[]],s,r,t,u,x=2,v;if(d.enabled){R.prototype.drawDataLabels.apply(this);n(a,function(a){a.dataLabel&&q[a.labelPos[7]<xa/2?0:1].push(a)});q[1].reverse();u=function(a,b){return b.y-a.y};for(a=q[0][0]&&q[0][0].dataLabel&&(q[0][0].dataLabel.getBBox().height||21);x--;){var w= -[],C=[],z=q[x],A=z.length,B;if(j>0){for(v=m-l-j;v<=m+l+j;v+=a)w.push(v);t=w.length;if(A>t){h=[].concat(z);h.sort(u);for(v=A;v--;)h[v].rank=v;for(v=A;v--;)z[v].rank>=t&&z.splice(v,1);A=z.length}for(v=0;v<A;v++){b=z[v];h=b.labelPos;b=9999;for(r=0;r<t;r++)g=M(w[r]-h[1]),g<b&&(b=g,B=r);if(B<v&&w[v]!==null)B=v;else for(t<A-v+B&&w[v]!==null&&(B=t-A+v);w[B]===null;)B++;C.push({i:B,y:w[B]});w[B]=null}C.sort(u)}for(v=0;v<A;v++){b=z[v];h=b.labelPos;g=b.dataLabel;t=b.visible===!1?"hidden":"visible";s=h[1];if(j> -0){if(r=C.pop(),B=r.i,r=r.y,s>r&&w[B+1]!==null||s<r&&w[B-1]!==null)r=s}else r=s;s=d.justify?k[0]+(x?-1:1)*(l+j):this.getX(B===0||B===w.length-1?s:r,x);g.attr({visibility:t,align:h[6]})[g.moved?"animate":"attr"]({x:s+d.x+({left:e,right:-e}[h[6]]||0),y:r+d.y});g.moved=!0;if(p&&f)g=b.connector,h=i?["M",s+(h[6]==="left"?5:-5),r,"C",s,r,2*h[2]-h[4],2*h[3]-h[5],h[2],h[3],"L",h[4],h[5]]:["M",s+(h[6]==="left"?5:-5),r,"L",h[2],h[3],"L",h[4],h[5]],g?(g.animate({d:h}),g.attr("visibility",t)):b.connector=g=this.chart.renderer.path(h).attr({"stroke-width":f, -stroke:d.connectorColor||b.color||"#606060",visibility:t,zIndex:3}).translate(c.plotLeft,c.plotTop).add()}}}},drawTracker:ha.prototype.drawTracker,drawLegendSymbol:G.prototype.drawLegendSymbol,getSymbol:function(){}};T=ca(R,T);Y.pie=T;u(Highcharts,{Axis:ob,CanVGRenderer:fb,Chart:rb,Color:pa,Legend:qb,Point:Wa,Tick:Sa,Tooltip:pb,Renderer:Ta,Series:R,SVGRenderer:qa,VMLRenderer:ka,dateFormat:db,pathAnim:Ua,getOptions:function(){return V},hasBidiBug:Rb,numberFormat:Xa,seriesTypes:Y,setOptions:function(a){V= -C(V,a);Bb();return V},addEvent:I,removeEvent:P,createElement:S,discardElement:Qa,css:F,each:n,extend:u,map:Ea,merge:C,pick:o,splat:na,extendClass:ca,pInt:w,product:"Highcharts",version:"2.2.5"})})(); diff --git a/plugins/redmine_monitoring_controlling/assets/javascripts/highstock.js b/plugins/redmine_monitoring_controlling/assets/javascripts/highstock.js deleted file mode 100644 index 17b614a..0000000 --- a/plugins/redmine_monitoring_controlling/assets/javascripts/highstock.js +++ /dev/null @@ -1,295 +0,0 @@ -/* - Highstock JS v1.1.6 (2012-06-08) - - (c) 2009-2011 Torstein H?nsi - - License: www.highcharts.com/license -*/ -(function(){function z(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a}function ha(){for(var a=0,b=arguments,c=b.length,d={};a<c;a++)d[b[a++]]=b[a];return d}function F(a,b){return parseInt(a,b||10)}function ya(a){return typeof a==="string"}function ia(a){return typeof a==="object"}function Va(a){return Object.prototype.toString.call(a)==="[object Array]"}function Wa(a){return typeof a==="number"}function ra(a){return R.log(a)/R.LN10}function ja(a){return R.pow(10,a)}function Ka(a,b){for(var c= -a.length;c--;)if(a[c]===b){a.splice(c,1);break}}function s(a){return a!==v&&a!==null}function G(a,b,c){var d,e;if(ya(b))s(c)?a.setAttribute(b,c):a&&a.getAttribute&&(e=a.getAttribute(b));else if(s(b)&&ia(b))for(d in b)a.setAttribute(d,b[d]);return e}function la(a){return Va(a)?a:[a]}function p(){var a=arguments,b,c,d=a.length;for(b=0;b<d;b++)if(c=a[b],typeof c!=="undefined"&&c!==null)return c}function M(a,b){if(Xa&&b&&b.opacity!==v)b.filter="alpha(opacity="+b.opacity*100+")";z(a.style,b)}function V(a, -b,c,d,e){a=I.createElement(a);b&&z(a,b);e&&M(a,{padding:0,border:da,margin:0});c&&M(a,c);d&&d.appendChild(a);return a}function ca(a,b){var c=function(){};c.prototype=new a;z(c.prototype,b);return c}function Ya(a,b,c,d){var e=T.lang,f=a;b===-1?(b=(a||0).toString(),a=b.indexOf(".")>-1?b.split(".")[1].length:0):a=isNaN(b=W(b))?2:b;var b=a,c=c===void 0?e.decimalPoint:c,d=d===void 0?e.thousandsSep:d,e=f<0?"-":"",a=String(F(f=W(+f||0).toFixed(b))),g=a.length>3?a.length%3:0;return e+(g?a.substr(0,g)+d:"")+ -a.substr(g).replace(/(\d{3})(?=\d)/g,"$1"+d)+(b?c+W(f-a).toFixed(b).slice(2):"")}function za(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function pb(a,b,c,d){var e,c=p(c,1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals===!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;d<b.length;d++)if(a=b[d],e<=(b[d]+(b[d+1]||b[d]))/2)break;a*=c;return a}function Cb(a,b){var c=b||[[fb,[1,2,5,10,20,25,50,100,200,500]],[Za,[1,2,5,10,15,30]],[La,[1,2,5,10,15,30]],[sa,[1,2,3,4,6,8,12]],[fa,[1,2]],[Aa, -[1,2]],[Ba,[1,2,3,4,6]],[na,null]],d=c[c.length-1],e=E[d[0]],f=d[1],g;for(g=0;g<c.length;g++)if(d=c[g],e=E[d[0]],f=d[1],c[g+1]&&a<=(e*f[f.length-1]+E[c[g+1][0]])/2)break;e===E[na]&&a<5*e&&(f=[1,2,5]);e===E[na]&&a<5*e&&(f=[1,2,5]);c=pb(a/e,f);return{unitRange:e,count:c,unitName:d[0]}}function gb(a,b,c,d){var e=[],f={},g=T.global.useUTC,h,k=new Date(b),b=a.unitRange,i=a.count;b>=E[Za]&&(k.setMilliseconds(0),k.setSeconds(b>=E[La]?0:i*$(k.getSeconds()/i)));if(b>=E[La])k[Db](b>=E[sa]?0:i*$(k[qb]()/i)); -if(b>=E[sa])k[Eb](b>=E[fa]?0:i*$(k[rb]()/i));if(b>=E[fa])k[sb](b>=E[Ba]?1:i*$(k[Ca]()/i));b>=E[Ba]&&(k[Fb](b>=E[na]?0:i*$(k[hb]()/i)),h=k[ib]());b>=E[na]&&(h-=h%i,k[Gb](h));if(b===E[Aa])k[sb](k[Ca]()-k[tb]()+p(d,1));d=1;h=k[ib]();for(var j=k.getTime(),l=k[hb](),m=k[Ca](),k=g?0:(864E5+k.getTimezoneOffset()*6E4)%864E5;j<c;)e.push(j),b===E[na]?j=jb(h+d*i,0):b===E[Ba]?j=jb(h,l+d*i):!g&&(b===E[fa]||b===E[Aa])?j=jb(h,l,m+d*i*(b===E[fa]?1:7)):(j+=b*i,b<=E[sa]&&j%E[fa]===k&&(f[j]=fa)),d++;e.push(j);e.info= -z(a,{higherRanks:f,totalRange:b*i});return e}function Hb(){this.symbol=this.color=0}function ac(a,b){var c=a.length,d,e;for(e=0;e<c;e++)a[e].ss_i=e;a.sort(function(a,c){d=b(a,c);return d===0?a.ss_i-c.ss_i:d});for(e=0;e<c;e++)delete a[e].ss_i}function Ma(a){for(var b=a.length,c=a[0];b--;)a[b]<c&&(c=a[b]);return c}function Da(a){for(var b=a.length,c=a[0];b--;)a[b]>c&&(c=a[b]);return c}function ta(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Na(a){kb||(kb=V(oa)); -a&&kb.appendChild(a);kb.innerHTML=""}function ub(a,b){var c="Highcharts error #"+a+": www.highcharts.com/errors/"+a;if(b)throw c;else Y.console&&console.log(c)}function pa(a){return parseFloat(a.toPrecision(14))}function Ea(a,b){$a=p(a,b.animation)}function Ib(){var a=T.global.useUTC,b=a?"getUTC":"get",c=a?"setUTC":"set";jb=a?Date.UTC:function(a,b,c,g,h,k){return(new Date(a,b,p(c,1),p(g,0),p(h,0),p(k,0))).getTime()};qb=b+"Minutes";rb=b+"Hours";tb=b+"Day";Ca=b+"Date";hb=b+"Month";ib=b+"FullYear";Db= -c+"Minutes";Eb=c+"Hours";sb=c+"Date";Fb=c+"Month";Gb=c+"FullYear"}function Fa(){}function ab(a,b,c){this.axis=a;this.pos=b;this.type=c||"";this.isNew=!0;c||this.addLabel()}function vb(a,b){this.axis=a;if(b)this.options=b,this.id=b.id;return this}function Jb(a,b,c,d,e){var f=a.chart.inverted;this.axis=a;this.isNegative=c;this.options=b;this.x=d;this.stack=e;this.alignOptions={align:b.align||(f?c?"left":"right":"center"),verticalAlign:b.verticalAlign||(f?"middle":c?"bottom":"top"),y:p(b.y,f?4:c?14: --6),x:p(b.x,f?c?-6:6:0)};this.textAlign=b.textAlign||(f?c?"right":"left":"center")}function bb(){this.init.apply(this,arguments)}function wb(a,b){var c=b.borderWidth,d=b.style,e=b.shared,f=F(d.padding);this.chart=a;this.options=b;d.padding=0;this.crosshairs=[];this.currentY=this.currentX=0;this.tooltipIsHidden=!0;this.label=a.renderer.label("",0,0,null,null,null,b.useHTML,null,"tooltip").attr({padding:f,fill:b.backgroundColor,"stroke-width":c,r:b.borderRadius,zIndex:8}).css(d).hide().add();ma||this.label.shadow(b.shadow); -this.shared=e}function Kb(a,b){var c=ma?"":b.chart.zoomType;this.zoomX=/x/.test(c);this.zoomY=/y/.test(c);this.options=b;this.chart=a;this.init(a,b.tooltip)}function xb(a){this.init(a)}function cb(a,b){var c,d=a.series;a.series=null;c=y(T,a);c.series=a.series=d;var d=c.chart,e=d.margin,e=ia(e)?e:[e,e,e,e];this.optionsMarginTop=p(d.marginTop,e[0]);this.optionsMarginRight=p(d.marginRight,e[1]);this.optionsMarginBottom=p(d.marginBottom,e[2]);this.optionsMarginLeft=p(d.marginLeft,e[3]);this.runChartClick= -(e=d.events)&&!!e.click;this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;this.init(e)}function Lb(a){var b=a.options,c=b.navigator,d=c.enabled,b=b.scrollbar,e=b.enabled,f=d?c.height:0,g=e?b.height:0,h=c.baseSeries;this.baseSeries=a.series[h]||typeof h==="string"&&a.get(h)||a.series[0];this.handles=[];this.scrollbarButtons=[];this.elementsToDestroy=[];a.resetZoomEnabled=!1;this.chart=a;this.height=f;this.scrollbarHeight=g;this.scrollbarEnabled= -e;this.navigatorEnabled=d;this.navigatorOptions=c;this.scrollbarOptions=b;this.outlineHeight=f+g;this.init()}function Mb(a){a.resetZoomEnabled=!1;this.chart=a;this.buttons=[];this.boxSpanElements={};this.init([{type:"month",count:1,text:"1m"},{type:"month",count:3,text:"3m"},{type:"month",count:6,text:"6m"},{type:"ytd",text:"YTD"},{type:"year",count:1,text:"1y"},{type:"all",text:"All"}])}var v,I=document,Y=window,R=Math,u=R.round,$=R.floor,Ga=R.ceil,t=R.max,O=R.min,W=R.abs,ga=R.cos,ka=R.sin,Ha=R.PI, -Nb=Ha*2/360,Ia=navigator.userAgent,Xa=/msie/i.test(Ia)&&!Y.opera,Oa=I.documentMode===8,Ob=/AppleWebKit/.test(Ia),Pb=/Firefox/.test(Ia),Pa=!!I.createElementNS&&!!I.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,bc=Pb&&parseInt(Ia.split("Firefox/")[1],10)<4,ma=!Pa&&!Xa&&!!I.createElement("canvas").getContext,Qa,aa=I.documentElement.ontouchstart!==v,Qb={},yb=0,kb,T,ua,$a,db,E,Rb=function(){},oa="div",da="none",zb="rgba(192,192,192,"+(Pa?1.0E-6:0.0020)+")",fb="millisecond",Za="second", -La="minute",sa="hour",fa="day",Aa="week",Ba="month",na="year",jb,qb,rb,tb,Ca,hb,ib,Db,Eb,sb,Fb,Gb,U={};Y.Highcharts={};ua=function(a,b,c){if(!s(b)||isNaN(b))return"Invalid date";var a=p(a,"%Y-%m-%d %H:%M:%S"),d=new Date(b),e,f=d[rb](),g=d[tb](),h=d[Ca](),k=d[hb](),i=d[ib](),j=T.lang,l=j.weekdays,b={a:l[g].substr(0,3),A:l[g],d:za(h),e:h,b:j.shortMonths[k],B:j.months[k],m:za(k+1),y:i.toString().substr(2,2),Y:i,H:za(f),I:za(f%12||12),l:f%12||12,M:za(d[qb]()),p:f<12?"AM":"PM",P:f<12?"am":"pm",S:za(d.getSeconds()), -L:za(u(b%1E3),3)};for(e in b)a=a.replace("%"+e,b[e]);return c?a.substr(0,1).toUpperCase()+a.substr(1):a};Hb.prototype={wrapColor:function(a){if(this.color>=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};E=ha(fb,1,Za,1E3,La,6E4,sa,36E5,fa,864E5,Aa,6048E5,Ba,2592E6,na,31556952E3);db={init:function(a,b,c){var b=b||"",d=a.shift,e=b.indexOf("C")>-1,f=e?7:3,g,b=b.split(" "),c=[].concat(c),h,k,i=function(a){for(g=a.length;g--;)a[g]==="M"&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+ -2])};e&&(i(b),i(c));a.isArea&&(h=b.splice(b.length-6,6),k=c.splice(c.length-6,6));if(d<=c.length/f)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length<a;)d=[].concat(b).splice(b.length-f,f),e&&(d[f-6]=d[f-2],d[f-5]=d[f-1]),b=b.concat(d);h&&(b=b.concat(h),c=c.concat(k));return[b,c]},step:function(a,b,c,d){var e=[],f=a.length;if(c===1)e=d;else if(f===b.length&&c<1)for(;f--;)d=parseFloat(a[f]),e[f]=isNaN(d)?a[f]:c*parseFloat(b[f]-d)+d;else e=b;return e}};var P= -Y.HighchartsAdapter,L=P||{},eb=L.adapterRun,Sb=L.getScript,n=L.each,Ab=L.grep,Tb=L.offset,va=L.map,y=L.merge,B=L.addEvent,Q=L.removeEvent,N=L.fireEvent,Ub=L.washMouseEvent,lb=L.animate,Ra=L.stop;P&&P.init&&P.init(db);if(!P&&Y.jQuery){var ba=jQuery,Sb=ba.getScript,eb=function(a,b){return ba(a)[b]()},n=function(a,b){for(var c=0,d=a.length;c<d;c++)if(b.call(a[c],a[c],c,a)===!1)return c},Ab=ba.grep,va=function(a,b){for(var c=[],d=0,e=a.length;d<e;d++)c[d]=b.call(a[d],a[d],d,a);return c},y=function(){var a= -arguments;return ba.extend(!0,null,a[0],a[1],a[2],a[3])},Tb=function(a){return ba(a).offset()},B=function(a,b,c){ba(a).bind(b,c)},Q=function(a,b,c){var d=I.removeEventListener?"removeEventListener":"detachEvent";I[d]&&!a[d]&&(a[d]=function(){});ba(a).unbind(b,c)},N=function(a,b,c,d){var e=ba.Event(b),f="detached"+b,g;!Xa&&c&&(delete c.layerX,delete c.layerY);z(e,c);a[b]&&(a[f]=a[b],a[b]=null);n(["preventDefault","stopPropagation"],function(a){var b=e[a];e[a]=function(){try{b.call(e)}catch(c){a=== -"preventDefault"&&(g=!0)}}});ba(a).trigger(e);a[f]&&(a[b]=a[f],a[f]=null);d&&!e.isDefaultPrevented()&&!g&&d(e)},Ub=function(a){return a},lb=function(a,b,c){var d=ba(a);if(b.d)a.toD=b.d,b.d=1;d.stop();d.animate(b,c)},Ra=function(a){ba(a).stop()};ba.extend(ba.easing,{easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c}});var Vb=ba.fx,Wb=Vb.step;n(["cur","_default","width","height"],function(a,b){var c=Wb,d,e;a==="cur"?c=Vb.prototype:a==="_default"&&ba.Tween&&(c=ba.Tween.propHooks[a],a="set");(d= -c[a])&&(c[a]=function(c){c=b?c:this;e=c.elem;return e.attr?e.attr(c.prop,a==="cur"?v:c.now):d.apply(this,arguments)})});Wb.d=function(a){var b=a.elem;if(!a.started){var c=db.init(b,b.d,b.toD);a.start=c[0];a.end=c[1];a.started=!0}b.attr("d",db.step(a.start,a.end,a.pos,b.toD))}}L={enabled:!0,align:"center",x:0,y:15,style:{color:"#666",fontSize:"11px",lineHeight:"14px"}};T={colors:"#4572A7,#AA4643,#89A54E,#80699B,#3D96AE,#DB843D,#92A8CD,#A47D7C,#B5CA92".split(","),symbols:["circle","diamond","square", -"triangle","triangle-down"],lang:{loading:"Loading...",months:"January,February,March,April,May,June,July,August,September,October,November,December".split(","),shortMonths:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),weekdays:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),decimalPoint:".",resetZoom:"Reset zoom",resetZoomTitle:"Reset zoom level 1:1",thousandsSep:","},global:{useUTC:!0,canvasToolsURL:"http://code.highcharts.com/stock/1.1.6/modules/canvas-tools.js"}, -chart:{borderColor:"#4572A7",borderRadius:5,defaultSeriesType:"line",ignoreHiddenSeries:!0,spacingTop:10,spacingRight:10,spacingBottom:15,spacingLeft:10,style:{fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif',fontSize:"12px"},backgroundColor:"#FFFFFF",plotBorderColor:"#C0C0C0",resetZoomButton:{theme:{zIndex:20},position:{align:"right",x:-10,y:10}}},title:{text:"Chart title",align:"center",y:15,style:{color:"#3E576F",fontSize:"16px"}},subtitle:{text:"",align:"center", -y:30,style:{color:"#6D869F"}},plotOptions:{line:{allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},lineWidth:2,shadow:!0,marker:{enabled:!0,lineWidth:0,radius:4,lineColor:"#FFFFFF",states:{hover:{},select:{fillColor:"#FFFFFF",lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:y(L,{enabled:!1,y:-6,formatter:function(){return this.y}}),cropThreshold:300,pointRange:0,showInLegend:!0,states:{hover:{marker:{}},select:{marker:{}}},stickyTracking:!0}},labels:{style:{position:"absolute", -color:"#3E576F"}},legend:{enabled:!0,align:"center",layout:"horizontal",labelFormatter:function(){return this.name},borderWidth:1,borderColor:"#909090",borderRadius:5,navigation:{activeColor:"#3E576F",inactiveColor:"#CCC"},shadow:!1,itemStyle:{cursor:"pointer",color:"#3E576F",fontSize:"12px"},itemHoverStyle:{color:"#000"},itemHiddenStyle:{color:"#CCC"},itemCheckboxStyle:{position:"absolute",width:"13px",height:"13px"},symbolWidth:16,symbolPadding:5,verticalAlign:"bottom",x:0,y:0},loading:{labelStyle:{fontWeight:"bold", -position:"relative",top:"1em"},style:{position:"absolute",backgroundColor:"white",opacity:0.5,textAlign:"center"}},tooltip:{enabled:!0,backgroundColor:"rgba(255, 255, 255, .85)",borderWidth:2,borderRadius:5,dateTimeLabelFormats:{millisecond:"%A, %b %e, %H:%M:%S.%L",second:"%A, %b %e, %H:%M:%S",minute:"%A, %b %e, %H:%M",hour:"%A, %b %e, %H:%M",day:"%A, %b %e, %Y",week:"Week from %A, %b %e, %Y",month:"%B %Y",year:"%Y"},headerFormat:'<span style="font-size: 10px">{point.key}</span><br/>',pointFormat:'<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b><br/>', -shadow:!0,shared:ma,snap:aa?25:10,style:{color:"#333333",fontSize:"12px",padding:"5px",whiteSpace:"nowrap"}},credits:{enabled:!0,text:"Highcharts.com",href:"http://www.highcharts.com",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#909090",fontSize:"10px"}}};var S=T.plotOptions,P=S.line;Ib();var wa=function(a){var b=[],c;(function(a){(c=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/.exec(a))?b=[F(c[1]),F(c[2]), -F(c[3]),parseFloat(c[4],10)]:(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(a))&&(b=[F(c[1],16),F(c[2],16),F(c[3],16),1])})(a);return{get:function(c){return b&&!isNaN(b[0])?c==="rgb"?"rgb("+b[0]+","+b[1]+","+b[2]+")":c==="a"?b[3]:"rgba("+b.join(",")+")":a},brighten:function(a){if(Wa(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=F(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},setOpacity:function(a){b[3]=a;return this}}};Fa.prototype={init:function(a,b){this.element=b==="span"?V(b): -I.createElementNS("http://www.w3.org/2000/svg",b);this.renderer=a;this.attrSetters={}},animate:function(a,b,c){b=p(b,$a,!0);Ra(this);if(b){b=y(b);if(c)b.complete=c;lb(this,a,b)}else this.attr(a),c&&c()},attr:function(a,b){var c,d,e,f,g=this.element,h=g.nodeName,k=this.renderer,i,j=this.attrSetters,l=this.shadows,m,o,r=this;ya(a)&&s(b)&&(c=a,a={},a[c]=b);if(ya(a))c=a,h==="circle"?c={x:"cx",y:"cy"}[c]||c:c==="strokeWidth"&&(c="stroke-width"),r=G(g,c)||this[c]||0,c!=="d"&&c!=="visibility"&&(r=parseFloat(r)); -else for(c in a)if(i=!1,d=a[c],e=j[c]&&j[c](d,c),e!==!1){e!==v&&(d=e);if(c==="d")d&&d.join&&(d=d.join(" ")),/(NaN| {2}|^$)/.test(d)&&(d="M 0 0");else if(c==="x"&&h==="text"){for(e=0;e<g.childNodes.length;e++)f=g.childNodes[e],G(f,"x")===G(g,"x")&&G(f,"x",d);this.rotation&&G(g,"transform","rotate("+this.rotation+" "+d+" "+F(a.y||G(g,"y"))+")")}else if(c==="fill")d=k.color(d,g,c);else if(h==="circle"&&(c==="x"||c==="y"))c={x:"cx",y:"cy"}[c]||c;else if(h==="rect"&&c==="r")G(g,{rx:d,ry:d}),i=!0;else if(c=== -"translateX"||c==="translateY"||c==="rotation"||c==="verticalAlign")i=o=!0;else if(c==="stroke")d=k.color(d,g,c);else if(c==="dashstyle")if(c="stroke-dasharray",d=d&&d.toLowerCase(),d==="solid")d=da;else{if(d){d=d.replace("shortdashdotdot","3,1,1,1,1,1,").replace("shortdashdot","3,1,1,1").replace("shortdot","1,1,").replace("shortdash","3,1,").replace("longdash","8,3,").replace(/dot/g,"1,3,").replace("dash","4,3,").replace(/,$/,"").split(",");for(e=d.length;e--;)d[e]=F(d[e])*a["stroke-width"];d=d.join(",")}}else if(c=== -"isTracker")this[c]=d;else if(c==="width")d=F(d);else if(c==="align")c="text-anchor",d={left:"start",center:"middle",right:"end"}[d];else if(c==="title")e=g.getElementsByTagName("title")[0],e||(e=I.createElementNS("http://www.w3.org/2000/svg","title"),g.appendChild(e)),e.textContent=d;c==="strokeWidth"&&(c="stroke-width");Ob&&c==="stroke-width"&&d===0&&(d=1.0E-6);this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(c)&&(m||(this.symbolAttr(a),m=!0),i=!0);if(l&&/^(width|height|visibility|x|y|d|transform)$/.test(c))for(e= -l.length;e--;)G(l[e],c,c==="height"?t(d-(l[e].cutHeight||0),0):d);if((c==="width"||c==="height")&&h==="rect"&&d<0)d=0;this[c]=d;o&&this.updateTransform();c==="text"?(this.textStr=d,this.added&&k.buildText(this)):i||G(g,c,d)}if(Ob&&/Chrome\/(18|19)/.test(Ia)&&h==="text"&&(a.x!==v||a.y!==v))c=g.parentNode,d=g.nextSibling,c&&(c.removeChild(g),d?c.insertBefore(g,d):c.appendChild(g));return r},symbolAttr:function(a){var b=this;n("x,y,r,start,end,width,height,innerR,anchorX,anchorY".split(","),function(c){b[c]= -p(a[c],b[c])});b.attr({d:b.renderer.symbols[b.symbolName](b.x,b.y,b.width,b.height,b)})},clip:function(a){return this.attr("clip-path","url("+this.renderer.url+"#"+a.id+")")},crisp:function(a,b,c,d,e){var f,g={},h={},k,a=a||this.strokeWidth||this.attr&&this.attr("stroke-width")||0;k=u(a)%2/2;h.x=$(b||this.x||0)+k;h.y=$(c||this.y||0)+k;h.width=$((d||this.width||0)-2*k);h.height=$((e||this.height||0)-2*k);h.strokeWidth=a;for(f in h)this[f]!==h[f]&&(this[f]=g[f]=h[f]);return g},css:function(a){var b= -this.element,b=a&&a.width&&b.nodeName==="text",c,d="",e=function(a,b){return"-"+b.toLowerCase()};if(a&&a.color)a.fill=a.color;this.styles=a=z(this.styles,a);if(Xa&&!Pa)b&&delete a.width,M(this.element,a);else{for(c in a)d+=c.replace(/([A-Z])/g,e)+":"+a[c]+";";this.attr({style:d})}b&&this.added&&this.renderer.buildText(this);return this},on:function(a,b){var c=b;aa&&a==="click"&&(a="touchstart",c=function(a){a.preventDefault();b()});this.element["on"+a]=c;return this},setRadialReference:function(a){this.element.radialReference= -a;return this},translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},htmlCss:function(a){var b=this.element;if(b=a&&b.tagName==="SPAN"&&a.width)delete a.width,this.textWidth=b,this.updateTransform();this.styles=z(this.styles,a);M(this.element,a);return this},htmlGetBBox:function(a){var b=this.element,c=this.bBox;if(!c||a){if(b.nodeName==="text")b.style.position="absolute";c=this.bBox={x:b.offsetLeft,y:b.offsetTop, -width:b.offsetWidth,height:b.offsetHeight}}return c},htmlUpdateTransform:function(){if(this.added){var a=this.renderer,b=this.element,c=this.translateX||0,d=this.translateY||0,e=this.x||0,f=this.y||0,g=this.textAlign||"left",h={left:0,center:0.5,right:1}[g],k=g&&g!=="left",i=this.shadows;if(c||d)M(b,{marginLeft:c,marginTop:d}),i&&n(i,function(a){M(a,{marginLeft:c+1,marginTop:d+1})});this.inverted&&n(b.childNodes,function(c){a.invertChild(c,b)});if(b.tagName==="SPAN"){var j,l,i=this.rotation,m;j=0; -var o=1,r=0,A;m=F(this.textWidth);var q=this.xCorr||0,C=this.yCorr||0,J=[i,g,b.innerHTML,this.textWidth].join(",");if(J!==this.cTT)s(i)&&(j=i*Nb,o=ga(j),r=ka(j),M(b,{filter:i?["progid:DXImageTransform.Microsoft.Matrix(M11=",o,", M12=",-r,", M21=",r,", M22=",o,", sizingMethod='auto expand')"].join(""):da})),j=p(this.elemWidth,b.offsetWidth),l=p(this.elemHeight,b.offsetHeight),j>m&&/[ \-]/.test(b.innerText)&&(M(b,{width:m+"px",display:"block",whiteSpace:"normal"}),j=m),m=a.fontMetrics(b.style.fontSize).b, -q=o<0&&-j,C=r<0&&-l,A=o*r<0,q+=r*m*(A?1-h:h),C-=o*m*(i?A?h:1-h:1),k&&(q-=j*h*(o<0?-1:1),i&&(C-=l*h*(r<0?-1:1)),M(b,{textAlign:g})),this.xCorr=q,this.yCorr=C;M(b,{left:e+q+"px",top:f+C+"px"});this.cTT=J}}else this.alignOnAdd=!0},updateTransform:function(){var a=this.translateX||0,b=this.translateY||0,c=this.inverted,d=this.rotation,e=[];c&&(a+=this.attr("width"),b+=this.attr("height"));(a||b)&&e.push("translate("+a+","+b+")");c?e.push("rotate(90) scale(-1,1)"):d&&e.push("rotate("+d+" "+(this.x||0)+ -" "+(this.y||0)+")");e.length&&G(this.element,"transform",e.join(" "))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){a?(this.alignOptions=a,this.alignByTranslate=b,c||this.renderer.alignedObjects.push(this)):(a=this.alignOptions,b=this.alignByTranslate);var c=p(c,this.renderer),d=a.align,e=a.verticalAlign,f=(c.x||0)+(a.x||0),g=(c.y||0)+(a.y||0),h={};/^(right|center)$/.test(d)&&(f+=(c.width-(a.width||0))/{right:1,center:2}[d]);h[b?"translateX": -"x"]=u(f);/^(bottom|middle)$/.test(e)&&(g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1));h[b?"translateY":"y"]=u(g);this[this.placed?"animate":"attr"](h);this.placed=!0;this.alignAttr=h;return this},getBBox:function(a){var b,c,d=this.rotation;c=this.element;var e=d*Nb;if(c.namespaceURI==="http://www.w3.org/2000/svg"||this.renderer.forExport){try{b=c.getBBox?z({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight}}catch(f){}if(!b||b.width<0)b={width:0,height:0};a=b.width;c=b.height;if(d)b.width= -W(c*ka(e))+W(a*ga(e)),b.height=W(c*ga(e))+W(a*ka(e))}else b=this.htmlGetBBox(a);return b},show:function(){return this.attr({visibility:"visible"})},hide:function(){return this.attr({visibility:"hidden"})},add:function(a){var b=this.renderer,c=a||b,d=c.element||b.box,e=d.childNodes,f=this.element,g=G(f,"zIndex"),h;this.parentInverted=a&&a.inverted;this.textStr!==void 0&&b.buildText(this);if(g)c.handleZ=!0,g=F(g);if(c.handleZ)for(c=0;c<e.length;c++)if(a=e[c],b=G(a,"zIndex"),a!==f&&(F(b)>g||!s(g)&&s(b))){d.insertBefore(f, -a);h=!0;break}h||d.appendChild(f);this.added=!0;N(this,"add");return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.box,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=null;Ra(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f=0;f<a.stops.length;f++)a.stops[f]=a.stops[f].destroy();a.stops=null}a.safeRemoveChild(b);c&&n(c,function(b){a.safeRemoveChild(b)});d&&d.destroy();Ka(a.renderer.alignedObjects, -a);for(e in a)delete a[e];return null},empty:function(){for(var a=this.element,b=a.childNodes,c=b.length;c--;)a.removeChild(b[c])},shadow:function(a,b,c){var d=[],e,f=this.element,g,h=this.parentInverted?"(-1,-1)":"(1,1)";if(a){for(a=1;a<=3;a++){e=f.cloneNode(0);g=7-2*a;G(e,{isShadow:"true",stroke:"rgb(0, 0, 0)","stroke-opacity":0.05*a,"stroke-width":g,transform:"translate"+h,fill:da});if(c)G(e,"height",t(G(e,"height")-g,0)),e.cutHeight=g;b?b.element.appendChild(e):f.parentNode.insertBefore(e,f); -d.push(e)}this.shadows=d}return this}};var qa=function(){this.init.apply(this,arguments)};qa.prototype={Element:Fa,init:function(a,b,c,d){var e=location,f;f=this.createElement("svg").attr({xmlns:"http://www.w3.org/2000/svg",version:"1.1"});a.appendChild(f.element);this.isSVG=!0;this.box=f.element;this.boxWrapper=f;this.alignedObjects=[];this.url=Xa?"":e.href.replace(/#.*?$/,"").replace(/([\('\)])/g,"\\$1");this.defs=this.createElement("defs").add();this.forExport=d;this.gradients={};this.setSize(b, -c,!1);var g;if(Pb&&a.getBoundingClientRect)this.subPixelFix=b=function(){M(a,{left:0,top:0});g=a.getBoundingClientRect();M(a,{left:Ga(g.left)-g.left+"px",top:Ga(g.top)-g.top+"px"})},b(),B(Y,"resize",b)},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();ta(this.gradients||{});this.gradients=null;if(a)this.defs=a.destroy();this.subPixelFix&&Q(Y,"resize",this.subPixelFix);return this.alignedObjects=null}, -createElement:function(a){var b=new this.Element;b.init(this,a);return b},draw:function(){},buildText:function(a){for(var b=a.element,c=p(a.textStr,"").toString().replace(/<(b|strong)>/g,'<span style="font-weight:bold">').replace(/<(i|em)>/g,'<span style="font-style:italic">').replace(/<a/g,"<span").replace(/<\/(b|strong|i|em|a)>/g,"</span>").split(/<br.*?>/g),d=b.childNodes,e=/style="([^"]+)"/,f=/href="([^"]+)"/,g=G(b,"x"),h=a.styles,k=h&&F(h.width),i=h&&h.lineHeight,j,h=d.length,l=[];h--;)b.removeChild(d[h]); -k&&!a.added&&this.box.appendChild(b);c[c.length-1]===""&&c.pop();n(c,function(c,d){var h,A=0,q,c=c.replace(/<span/g,"|||<span").replace(/<\/span>/g,"</span>|||");h=c.split("|||");n(h,function(c){if(c!==""||h.length===1){var m={},n=I.createElementNS("http://www.w3.org/2000/svg","tspan");e.test(c)&&G(n,"style",c.match(e)[1].replace(/(;| |^)color([ :])/,"$1fill$2"));f.test(c)&&(G(n,"onclick",'location.href="'+c.match(f)[1]+'"'),M(n,{cursor:"pointer"}));c=(c.replace(/<(.|\n)*?>/g,"")||" ").replace(/</g, -"<").replace(/>/g,">");n.appendChild(I.createTextNode(c));A?m.dx=3:m.x=g;if(!A){if(d){!Pa&&a.renderer.forExport&&M(n,{display:"block"});q=Y.getComputedStyle&&F(Y.getComputedStyle(j,null).getPropertyValue("line-height"));if(!q||isNaN(q)){var p;if(!(p=i))if(!(p=j.offsetHeight))l[d]=b.getBBox().height,p=u(l[d]-(l[d-1]||0))||18;q=p}G(n,"dy",q)}j=n}G(n,m);b.appendChild(n);A++;if(k)for(var c=c.replace(/-/g,"- ").split(" "),D=[];c.length||D.length;)p=a.getBBox().width,m=p>k,!m||c.length===1?(c=D,D=[], -c.length&&(n=I.createElementNS("http://www.w3.org/2000/svg","tspan"),G(n,{dy:i||16,x:g}),b.appendChild(n),p>k&&(k=p))):(n.removeChild(n.firstChild),D.unshift(c.pop())),c.length&&n.appendChild(I.createTextNode(c.join(" ").replace(/- /g,"-")))}})})},button:function(a,b,c,d,e,f,g){var h=this.label(a,b,c),k=0,i,j,l,m,o,a={x1:0,y1:0,x2:0,y2:1},e=y(ha("stroke-width",1,"stroke","#999","fill",ha("linearGradient",a,"stops",[[0,"#FFF"],[1,"#DDD"]]),"r",3,"padding",3,"style",ha("color","black")),e);l=e.style; -delete e.style;f=y(e,ha("stroke","#68A","fill",ha("linearGradient",a,"stops",[[0,"#FFF"],[1,"#ACF"]])),f);m=f.style;delete f.style;g=y(e,ha("stroke","#68A","fill",ha("linearGradient",a,"stops",[[0,"#9BD"],[1,"#CDF"]])),g);o=g.style;delete g.style;B(h.element,"mouseenter",function(){h.attr(f).css(m)});B(h.element,"mouseleave",function(){i=[e,f,g][k];j=[l,m,o][k];h.attr(i).css(j)});h.setState=function(a){(k=a)?a===2&&h.attr(g).css(o):h.attr(e).css(l)};return h.on("click",function(){d.call(h)}).attr(e).css(z({cursor:"default"}, -l))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=u(a[1])+b%2/2);a[2]===a[5]&&(a[2]=a[5]=u(a[2])+b%2/2);return a},path:function(a){var b={fill:da};Va(a)?b.d=a:ia(a)&&z(b,a);return this.createElement("path").attr(b)},circle:function(a,b,c){a=ia(a)?a:{x:a,y:b,r:c};return this.createElement("circle").attr(a)},arc:function(a,b,c,d,e,f){if(ia(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;return this.symbol("arc",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0})},rect:function(a,b,c,d,e,f){e= -ia(a)?a.r:e;e=this.createElement("rect").attr({rx:e,ry:e,fill:da});return e.attr(ia(a)?a:e.crisp(f,a,b,t(c,0),t(d,0)))},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[p(c,!0)?"animate":"attr"]({width:a,height:b});e--;)d[e].align()},g:function(a){var b=this.createElement("g");return s(a)?b.attr({"class":"highcharts-"+a}):b},image:function(a,b,c,d,e){var f={preserveAspectRatio:da};arguments.length>1&&z(f,{x:b,y:c,width:d,height:e});f=this.createElement("image").attr(f); -f.element.setAttributeNS?f.element.setAttributeNS("http://www.w3.org/1999/xlink","href",a):f.element.setAttribute("hc-svg-href",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(u(b),u(c),d,e,f),k=/^url\((.*?)\)$/,i,j;h?(g=this.path(h),z(g,{symbolName:a,x:b,y:c,width:d,height:e}),f&&z(g,f)):k.test(a)&&(j=function(a,b){a.attr({width:b[0],height:b[1]});a.alignByTranslate||a.translate(-u(b[0]/2),-u(b[1]/2))},i=a.match(k)[1],a=Qb[i],g=this.image(i).attr({x:b,y:c}),a?j(g,a):(g.attr({width:0, -height:0}),V("img",{onload:function(){j(g,Qb[i]=[this.width,this.height])},src:i})));return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return["M",a+c/2,b,"C",a+c+e,b,a+c+e,b+d,a+c/2,b+d,"C",a-e,b+d,a-e,b,a+c/2,b,"Z"]},square:function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c,b+d,a,b+d,"Z"]},triangle:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d,a,b+d,"Z"]},"triangle-down":function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c/2,b+d,"Z"]},diamond:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d/2,a+ -c/2,b+d,a,b+d/2,"Z"]},arc:function(a,b,c,d,e){var f=e.start,c=e.r||c||d,g=e.end-1.0E-6,d=e.innerR,h=e.open,k=ga(f),i=ka(f),j=ga(g),g=ka(g),e=e.end-f<Ha?0:1;return["M",a+c*k,b+c*i,"A",c,c,0,e,1,a+c*j,b+c*g,h?"M":"L",a+d*j,b+d*g,"A",d,d,0,e,0,a+d*k,b+d*i,h?"":"Z"]}},clipRect:function(a,b,c,d){var e="highcharts-"+yb++,f=this.createElement("clipPath").attr({id:e}).add(this.defs),a=this.rect(a,b,c,d,0).add(f);a.id=e;a.clipPath=f;return a},color:function(a,b,c){var d=this,e,f=/^rgba/,g;a&&a.linearGradient? -g="linearGradient":a&&a.radialGradient&&(g="radialGradient");if(g){var c=a[g],h=d.gradients,k,i,j,b=b.radialReference;if(!c.id||!h[c.id])Va(c)&&(a[g]=c={x1:c[0],y1:c[1],x2:c[2],y2:c[3],gradientUnits:"userSpaceOnUse"}),g==="radialGradient"&&b&&!s(c.gradientUnits)&&z(c,{cx:b[0]-b[2]/2+c.cx*b[2],cy:b[1]-b[2]/2+c.cy*b[2],r:c.r*b[2],gradientUnits:"userSpaceOnUse"}),c.id="highcharts-"+yb++,h[c.id]=k=d.createElement(g).attr(c).add(d.defs),k.stops=[],n(a.stops,function(a){f.test(a[1])?(e=wa(a[1]),i=e.get("rgb"), -j=e.get("a")):(i=a[1],j=1);a=d.createElement("stop").attr({offset:a[0],"stop-color":i,"stop-opacity":j}).add(k);k.stops.push(a)});return"url("+d.url+"#"+c.id+")"}else return f.test(a)?(e=wa(a),G(b,c+"-opacity",e.get("a")),e.get("rgb")):(b.removeAttribute(c+"-opacity"),a)},text:function(a,b,c,d){var e=T.chart.style;if(d&&!this.forExport)return this.html(a,b,c);b=u(p(b,0));c=u(p(c,0));a=this.createElement("text").attr({x:b,y:c,text:a}).css({fontFamily:e.fontFamily,fontSize:e.fontSize});a.x=b;a.y=c; -return a},html:function(a,b,c){var d=T.chart.style,e=this.createElement("span"),f=e.attrSetters,g=e.element,h=e.renderer;f.text=function(a){g.innerHTML=a;return!1};f.x=f.y=f.align=function(a,b){b==="align"&&(b="textAlign");e[b]=a;e.htmlUpdateTransform();return!1};e.attr({text:a,x:u(b),y:u(c)}).css({position:"absolute",whiteSpace:"nowrap",fontFamily:d.fontFamily,fontSize:d.fontSize});e.css=e.htmlCss;if(h.isSVG)e.add=function(a){var b,c,d=h.box.parentNode;if(a){if(b=a.div,!b)b=a.div=V(oa,{className:G(a.element, -"class")},{position:"absolute",left:a.attr("translateX")+"px",top:a.attr("translateY")+"px"},d),c=b.style,z(a.attrSetters,{translateX:function(a){c.left=a+"px"},translateY:function(a){c.top=a+"px"},visibility:function(a,b){c[b]=a}})}else b=d;b.appendChild(g);e.added=!0;e.alignOnAdd&&e.htmlUpdateTransform();return e};return e},fontMetrics:function(a){var a=F(a||11),a=a<24?a+4:u(a*1.2),b=u(a*0.8);return{h:a,b:b}},label:function(a,b,c,d,e,f,g,h,k){function i(){var a=o.styles,a=a&&a.textAlign,b=J*(1- -p),c;c=h?0:Sa;if(s(w)&&(a==="center"||a==="right"))b+={center:0.5,right:1}[a]*(w-q.width);(b!==r.x||c!==r.y)&&r.attr({x:b,y:c});r.x=b;r.y=c}function j(a,b){A?A.attr(a,b):t[a]=b}function l(){o.attr({text:a,x:b,y:c});s(e)&&o.attr({anchorX:e,anchorY:f})}var m=this,o=m.g(k),r=m.text("",0,0,g).attr({zIndex:1}).add(o),A,q,p=0,J=3,w,x,D,K,H=0,t={},Sa,g=o.attrSetters;B(o,"add",l);g.width=function(a){w=a;return!1};g.height=function(a){x=a;return!1};g.padding=function(a){s(a)&&a!==J&&(J=a,i());return!1};g.align= -function(a){p={left:0,center:0.5,right:1}[a];return!1};g.text=function(a,b){r.attr(b,a);var c;c=r.element.style;q=(w===void 0||x===void 0||o.styles.textAlign)&&r.getBBox(!0);o.width=(w||q.width||0)+2*J;o.height=(x||q.height||0)+2*J;Sa=J+m.fontMetrics(c&&c.fontSize).b;if(!A)c=h?-Sa:0,o.box=A=d?m.symbol(d,-p*J,c,o.width,o.height):m.rect(-p*J,c,o.width,o.height,0,t["stroke-width"]),A.add(o);A.attr(y({width:o.width,height:o.height},t));t=null;i();return!1};g["stroke-width"]=function(a,b){H=a%2/2;j(b, -a);return!1};g.stroke=g.fill=g.r=function(a,b){j(b,a);return!1};g.anchorX=function(a,b){e=a;j(b,a+H-D);return!1};g.anchorY=function(a,b){f=a;j(b,a-K);return!1};g.x=function(a){o.x=a;a-=p*((w||q.width)+J);D=u(a);o.attr("translateX",D);return!1};g.y=function(a){K=o.y=u(a);o.attr("translateY",a);return!1};var cc=o.css;return z(o,{css:function(a){if(a){var b={},a=y({},a);n("fontSize,fontWeight,fontFamily,color,lineHeight,width".split(","),function(c){a[c]!==v&&(b[c]=a[c],delete a[c])});r.css(b)}return cc.call(o, -a)},getBBox:function(){return A.getBBox()},shadow:function(a){A.shadow(a);return o},destroy:function(){Q(o,"add",l);Q(o.element,"mouseenter");Q(o.element,"mouseleave");r&&(r=r.destroy());Fa.prototype.destroy.call(o)}})}};Qa=qa;var Ja;if(!Pa&&!ma){var ea={init:function(a,b){var c=["<",b,' filled="f" stroked="f"'],d=["position: ","absolute",";"];(b==="shape"||b===oa)&&d.push("left:0;top:0;width:1px;height:1px;");Oa&&d.push("visibility: ",b===oa?"hidden":"visible");c.push(' style="',d.join(""),'"/>'); -if(b)c=b===oa||b==="span"||b==="img"?c.join(""):a.prepVML(c),this.element=V(c);this.renderer=a;this.attrSetters={}},add:function(a){var b=this.renderer,c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);Oa&&d.gVis==="hidden"&&M(c,{visibility:"hidden"});d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();N(this,"add");return this},toggleChildren:function(a,b){for(var c=a.childNodes,d=c.length;d--;)M(c[d],{visibility:b}),c[d].nodeName=== -"DIV"&&this.toggleChildren(c[d],b)},updateTransform:Fa.prototype.htmlUpdateTransform,attr:function(a,b){var c,d,e,f=this.element||{},g=f.style,h=f.nodeName,k=this.renderer,i=this.symbolName,j,l=this.shadows,m,o=this.attrSetters,r=this;ya(a)&&s(b)&&(c=a,a={},a[c]=b);if(ya(a))c=a,r=c==="strokeWidth"||c==="stroke-width"?this.strokeweight:this[c];else for(c in a)if(d=a[c],m=!1,e=o[c]&&o[c](d,c),e!==!1&&d!==null){e!==v&&(d=e);if(i&&/^(x|y|r|start|end|width|height|innerR|anchorX|anchorY)/.test(c))j||(this.symbolAttr(a), -j=!0),m=!0;else if(c==="d"){d=d||[];this.d=d.join(" ");e=d.length;for(m=[];e--;)m[e]=Wa(d[e])?u(d[e]*10)-5:d[e]==="Z"?"x":d[e];d=m.join(" ")||"x";f.path=d;if(l)for(e=l.length;e--;)l[e].path=l[e].cutOff?this.cutOffPath(d,l[e].cutOff):d;m=!0}else if(c==="zIndex"||c==="visibility"){if(Oa&&c==="visibility"&&h==="DIV")f.gVis=d,this.toggleChildren(f,d),d==="visible"&&(d=null);d&&(g[c]=d);m=!0}else if(c==="width"||c==="height")d=t(0,d),this[c]=d,this.updateClipping?(this[c]=d,this.updateClipping()):g[c]= -d,m=!0;else if(c==="x"||c==="y")this[c]=d,g[{x:"left",y:"top"}[c]]=d;else if(c==="class")f.className=d;else if(c==="stroke")d=k.color(d,f,c),c="strokecolor";else if(c==="stroke-width"||c==="strokeWidth")f.stroked=d?!0:!1,c="strokeweight",this[c]=d,Wa(d)&&(d+="px");else if(c==="dashstyle")(f.getElementsByTagName("stroke")[0]||V(k.prepVML(["<stroke/>"]),null,null,f))[c]=d||"solid",this.dashstyle=d,m=!0;else if(c==="fill")h==="SPAN"?g.color=d:(f.filled=d!==da?!0:!1,d=k.color(d,f,c),c="fillcolor");else if(h=== -"shape"&&c==="rotation")this[c]=d;else if(c==="translateX"||c==="translateY"||c==="rotation")this[c]=d,this.updateTransform(),m=!0;else if(c==="text")this.bBox=null,f.innerHTML=d,m=!0;if(l&&c==="visibility")for(e=l.length;e--;)l[e].style[c]=d;m||(Oa?f[c]=d:G(f,c,d))}return r},clip:function(a){var b=this,c=a.members,d=b.element,e=d.parentNode;c.push(b);b.destroyClip=function(){Ka(c,b)};e&&e.className==="highcharts-tracker"&&!Oa&&M(d,{visibility:"hidden"});return b.css(a.getCSS(b))},css:Fa.prototype.htmlCss, -safeRemoveChild:function(a){a.parentNode&&Na(a)},destroy:function(){this.destroyClip&&this.destroyClip();return Fa.prototype.destroy.apply(this)},empty:function(){for(var a=this.element.childNodes,b=a.length,c;b--;)c=a[b],c.parentNode.removeChild(c)},on:function(a,b){this.element["on"+a]=function(){var a=Y.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,b){var c,a=a.split(/[ ,]/);c=a.length;if(c===9||c===11)a[c-4]=a[c-2]=F(a[c-2])-10*b;return a.join(" ")},shadow:function(a,b, -c){var d=[],e=this.element,f=this.renderer,g,h=e.style,k,i=e.path,j,l;i&&typeof i.value!=="string"&&(i="x");l=i;if(a){for(a=1;a<=3;a++){j=7-2*a;c&&(l=this.cutOffPath(i.value,j+0.5));k=['<shape isShadow="true" strokeweight="',7-2*a,'" filled="false" path="',l,'" coordsize="10 10" style="',e.style.cssText,'" />'];g=V(f.prepVML(k),null,{left:F(h.left)+1,top:F(h.top)+1});if(c)g.cutOff=j+1;k=['<stroke color="black" opacity="',0.05*a,'"/>'];V(f.prepVML(k),null,null,g);b?b.element.appendChild(g):e.parentNode.insertBefore(g, -e);d.push(g)}this.shadows=d}return this}},ea=ca(Fa,ea),ea={Element:ea,isIE8:Ia.indexOf("MSIE 8.0")>-1,init:function(a,b,c){var d,e;this.alignedObjects=[];d=this.createElement(oa);e=d.element;e.style.position="relative";a.appendChild(d.element);this.box=e;this.boxWrapper=d;this.setSize(b,c,!1);if(!I.namespaces.hcv)I.namespaces.add("hcv","urn:schemas-microsoft-com:vml"),I.createStyleSheet().cssText="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}, -isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement();return z(e,{members:[],left:a,top:b,width:c,height:d,getCSS:function(a){var b=a.inverted,c=this.top,d=this.left,e=d+this.width,j=c+this.height,c={clip:"rect("+u(b?d:c)+"px,"+u(b?j:e)+"px,"+u(b?e:j)+"px,"+u(b?c:d)+"px)"};!b&&Oa&&a.element.nodeName!=="IMG"&&z(c,{width:e+"px",height:j+"px"});return c},updateClipping:function(){n(e.members,function(a){a.css(e.getCSS(a))})}})},color:function(a,b,c){var d, -e=/^rgba/,f,g=da;a&&a.linearGradient?f="gradient":a&&a.radialGradient&&(f="pattern");if(f){var h,k,i=a.linearGradient||a.radialGradient,j,l,m,o,r,A,q="",a=a.stops,p,J=[];l=a[0];p=a[a.length-1];l[0]>0&&a.unshift([0,l[1]]);p[0]<1&&a.push([1,p[1]]);n(a,function(a,b){e.test(a[1])?(d=wa(a[1]),h=d.get("rgb"),k=d.get("a")):(h=a[1],k=1);J.push(a[0]*100+"% "+h);b?(o=k,r=h):(m=k,A=h)});f==="gradient"?(j=i.x1||i[0]||0,a=i.y1||i[1]||0,l=i.x2||i[2]||0,i=i.y2||i[3]||0,j=90-R.atan((i-a)/(l-j))*180/Ha):(g=i.r*2, -q='src="http://code.highcharts.com/gfx/radial-gradient.png" size="'+g+","+g+'" origin="0.5,0.5" position="'+i.cx+","+i.cy+'" color2="'+A+'" ',g=r);c==="fill"?(c=['<fill colors="'+J.join(",")+'" angle="',j,'" opacity="',o,'" o:opacity2="',m,'" type="',f,'" ',q,'focus="100%" method="any" />'],V(this.prepVML(c),null,null,b)):g=h}else if(e.test(a)&&b.tagName!=="IMG")d=wa(a),c=["<",c,' opacity="',d.get("a"),'"/>'],V(this.prepVML(c),null,null,b),g=d.get("rgb");else{b=b.getElementsByTagName(c);if(b.length)b[0].opacity= -1;g=a}return g},prepVML:function(a){var b=this.isIE8,a=a.join("");b?(a=a.replace("/>",' xmlns="urn:schemas-microsoft-com:vml" />'),a=a.indexOf('style="')===-1?a.replace("/>",' style="display:inline-block;behavior:url(#default#VML);" />'):a.replace('style="','style="display:inline-block;behavior:url(#default#VML);')):a=a.replace("<","<hcv:");return a},text:qa.prototype.html,path:function(a){var b={coordsize:"10 10"};Va(a)?b.d=a:ia(a)&&z(b,a);return this.createElement("shape").attr(b)},circle:function(a, -b,c){return this.symbol("circle").attr({x:a-c,y:b-c,width:2*c,height:2*c})},g:function(a){var b;a&&(b={className:"highcharts-"+a,"class":"highcharts-"+a});return this.createElement(oa).attr(b)},image:function(a,b,c,d,e){var f=this.createElement("img").attr({src:a});arguments.length>1&&f.css({left:b,top:c,width:d,height:e});return f},rect:function(a,b,c,d,e,f){if(ia(a))b=a.y,c=a.width,d=a.height,f=a.strokeWidth,a=a.x;var g=this.symbol("rect");g.r=e;return g.attr(g.crisp(f,a,b,t(c,0),t(d,0)))},invertChild:function(a, -b){var c=b.style;M(a,{flip:"x",left:F(c.width)-1,top:F(c.height)-1,rotation:-90})},symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c||d,c=ga(f),d=ka(f),k=ga(g),i=ka(g),j=e.innerR,l=0.08/h,m=j&&0.1/j||0;if(g-f===0)return["x"];else 2*Ha-g+f<l?k=-l:g-f<m&&(k=ga(f+m));f=["wa",a-h,b-h,a+h,b+h,a+h*c,b+h*d,a+h*k,b+h*i];e.open&&f.push("M",a-j,b-j);f.push("at",a-j,b-j,a+j,b+j,a+j*k,b+j*i,a+j*c,b+j*d,"x","e");return f},circle:function(a,b,c,d){return["wa",a,b,a+c,b+d,a+c,b+d/2,a+c,b+d/2,"e"]}, -rect:function(a,b,c,d,e){var f=a+c,g=b+d,h;!s(e)||!e.r?f=qa.prototype.symbols.square.apply(0,arguments):(h=O(e.r,c,d),f=["M",a+h,b,"L",f-h,b,"wa",f-2*h,b,f,b+2*h,f-h,b,f,b+h,"L",f,g-h,"wa",f-2*h,g-2*h,f,g,f,g-h,f-h,g,"L",a+h,g,"wa",a,g-2*h,a+2*h,g,a+h,g,a,g-h,"L",a,b+h,"wa",a,b,a+2*h,b+2*h,a,b+h,a+h,b,"x","e"]);return f}}};Ja=function(){this.init.apply(this,arguments)};Ja.prototype=y(qa.prototype,ea);Qa=Ja}var mb,Xb;if(ma)mb=function(){},mb.prototype.symbols={},Xb=function(){function a(){var a=b.length, -d;for(d=0;d<a;d++)b[d]();b=[]}var b=[];return{push:function(c,d){b.length===0&&Sb(d,a);b.push(c)}}}();Qa=Ja||mb||qa;ab.prototype={addLabel:function(){var a=this.axis,b=a.options,c=a.chart,d=a.horiz,e=a.categories,f=this.pos,g=b.labels,h=a.tickPositions,d=e&&d&&e.length&&!g.step&&!g.staggerLines&&!g.rotation&&c.plotWidth/h.length||!d&&c.plotWidth/2,k=f===h[0],i=f===h[h.length-1],j=e&&s(e[f])?e[f]:f,e=this.label,h=h.info,l;a.isDatetimeAxis&&h&&(l=b.dateTimeLabelFormats[h.higherRanks[f]||h.unitName]); -this.isFirst=k;this.isLast=i;b=a.labelFormatter.call({axis:a,chart:c,isFirst:k,isLast:i,dateTimeLabelFormat:l,value:a.isLog?pa(ja(j)):j});f=d&&{width:t(1,u(d-2*(g.padding||10)))+"px"};f=z(f,g.style);if(s(e))e&&e.attr({text:b}).css(f);else{d={align:g.align};if(Wa(g.rotation))d.rotation=g.rotation;this.label=s(b)&&g.enabled?c.renderer.text(b,0,0,g.useHTML).attr(d).css(f).add(a.axisGroup):null}},getLabelSize:function(){var a=this.label,b=this.axis;return a?(this.labelBBox=a.getBBox(!0))[b.horiz?"height": -"width"]:0},getLabelSides:function(){var a=this.axis.options.labels,b=this.labelBBox.width,a=b*{left:0,center:0.5,right:1}[a.align]-a.x;return[-a,b-a]},handleOverflow:function(a,b){var c=!0,d=this.axis,e=d.chart,f=this.isFirst,g=this.isLast,h=b.x,k=d.reversed,i=d.tickPositions;if(f||g){var j=this.getLabelSides(),l=j[0],j=j[1],e=e.plotLeft,m=e+d.len,i=(d=d.ticks[i[a+(f?1:-1)]])&&d.label.xy.x+d.getLabelSides()[f?0:1];f&&!k||g&&k?h+l<e&&(h=e-l,d&&h+j>i&&(c=!1)):h+j>m&&(h=m-j,d&&h+l<i&&(c=!1));b.x=h}return c}, -getPosition:function(a,b,c,d){var e=this.axis,f=e.chart,g=d&&f.oldChartHeight||f.chartHeight;return{x:a?e.translate(b+c,null,null,d)+e.transB:e.left+e.offset+(e.opposite?(d&&f.oldChartWidth||f.chartWidth)-e.right-e.left:0),y:a?g-e.bottom+e.offset-(e.opposite?e.height:0):g-e.translate(b+c,null,null,d)-e.transB}},getLabelPosition:function(a,b,c,d,e,f,g,h){var k=this.axis,i=k.transA,j=k.reversed,k=k.staggerLines,a=a+e.x-(f&&d?f*i*(j?-1:1):0),b=b+e.y-(f&&!d?f*i*(j?1:-1):0);s(e.y)||(b+=F(c.styles.lineHeight)* -0.9-c.getBBox().height/2);k&&(b+=g/(h||1)%k*16);return{x:a,y:b}},getMarkPath:function(a,b,c,d,e,f){return f.crispLine(["M",a,b,"L",a+(e?0:-c),b+(e?c:0)],d)},render:function(a,b){var c=this.axis,d=c.options,e=c.chart.renderer,f=c.horiz,g=this.type,h=this.label,k=this.pos,i=d.labels,j=this.gridLine,l=g?g+"Grid":"grid",m=g?g+"Tick":"tick",o=d[l+"LineWidth"],r=d[l+"LineColor"],A=d[l+"LineDashStyle"],q=d[m+"Length"],l=d[m+"Width"]||0,n=d[m+"Color"],J=d[m+"Position"],m=this.mark,w=i.step,x=!0,D=d.categories&& -d.tickmarkPlacement==="between"?0.5:0,K=this.getPosition(f,k,D,b),H=K.x,K=K.y,s=c.staggerLines;if(o){k=c.getPlotLinePath(k+D,o,b);if(j===v){j={stroke:r,"stroke-width":o};if(A)j.dashstyle=A;if(!g)j.zIndex=1;this.gridLine=j=o?e.path(k).attr(j).add(c.gridGroup):null}if(!b&&j&&k)j[this.isNew?"attr":"animate"]({d:k})}if(l)J==="inside"&&(q=-q),c.opposite&&(q=-q),g=this.getMarkPath(H,K,q,l,f,e),m?m.animate({d:g}):this.mark=e.path(g).attr({stroke:n,"stroke-width":l}).add(c.axisGroup);if(h&&!isNaN(H))h.xy= -K=this.getLabelPosition(H,K,h,f,i,D,a,w),this.isFirst&&!p(d.showFirstLabel,1)||this.isLast&&!p(d.showLastLabel,1)?x=!1:!s&&f&&i.overflow==="justify"&&!this.handleOverflow(a,K)&&(x=!1),w&&a%w&&(x=!1),x?(h[this.isNew?"attr":"animate"](K),h.show(),this.isNew=!1):h.hide()},destroy:function(){ta(this,this.axis)}};vb.prototype={render:function(){var a=this,b=a.axis,c=b.horiz,d=(b.pointRange||0)/2,e=a.options,f=e.label,g=a.label,h=e.width,k=e.to,i=e.from,j=s(i)&&s(k),l=e.value,m=e.dashStyle,o=a.svgElem, -r=[],A,q=e.color,n=e.zIndex,J=e.events,w=b.chart.renderer;b.isLog&&(i=ra(i),k=ra(k),l=ra(l));if(h){if(r=b.getPlotLinePath(l,h),d={stroke:q,"stroke-width":h},m)d.dashstyle=m}else if(j){if(i=t(i,b.min-d),k=O(k,b.max+d),r=b.getPlotBandPath(i,k,e),d={fill:q},e.borderWidth)d.stroke=e.borderColor,d["stroke-width"]=e.borderWidth}else return;if(s(n))d.zIndex=n;if(o)r?o.animate({d:r},null,o.onGetPath):(o.hide(),o.onGetPath=function(){o.show()});else if(r&&r.length&&(a.svgElem=o=w.path(r).attr(d).add(),J))for(A in e= -function(b){o.on(b,function(c){J[b].apply(a,[c])})},J)e(A);if(f&&s(f.text)&&r&&r.length&&b.width>0&&b.height>0){f=y({align:c&&j&&"center",x:c?!j&&4:10,verticalAlign:!c&&j&&"middle",y:c?j?16:10:j?6:-4,rotation:c&&!j&&90},f);if(!g)a.label=g=w.text(f.text,0,0).attr({align:f.textAlign||f.align,rotation:f.rotation,zIndex:n}).css(f.style).add();b=[r[1],r[4],p(r[6],r[1])];r=[r[2],r[5],p(r[7],r[2])];c=Ma(b);j=Ma(r);g.align(f,!1,{x:c,y:j,width:Da(b)-c,height:Da(r)-j});g.show()}else g&&g.hide();return a},destroy:function(){Ka(this.axis.plotLinesAndBands, -this);ta(this,this.axis)}};Jb.prototype={destroy:function(){ta(this,this.axis)},setTotal:function(a){this.cum=this.total=a},render:function(a){var b=this.options.formatter.call(this);this.label?this.label.attr({text:b,visibility:"hidden"}):this.label=this.axis.chart.renderer.text(b,0,0).css(this.options.style).attr({align:this.textAlign,rotation:this.options.rotation,visibility:"hidden"}).add(a)},setOffset:function(a,b){var c=this.axis,d=c.chart,e=d.inverted,f=this.isNegative,g=c.translate(this.total, -0,0,0,1),c=c.translate(0),c=W(g-c),h=d.xAxis[0].translate(this.x)+a,d=d.plotHeight,e={x:e?f?g:g-c:h,y:e?d-h-b:f?d-g-c:d-g,width:e?c:b,height:e?b:c};this.label&&this.label.align(this.alignOptions,null,e).attr({visibility:"visible"})}};bb.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L",second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b",month:"%b '%y",year:"%Y"},endOnTick:!1,gridLineColor:"#C0C0C0",labels:L,lineColor:"#C0D0E0",lineWidth:1,minPadding:0.01, -maxPadding:0.01,minorGridLineColor:"#E0E0E0",minorGridLineWidth:1,minorTickColor:"#A0A0A0",minorTickLength:2,minorTickPosition:"outside",startOfWeek:1,startOnTick:!1,tickColor:"#C0D0E0",tickLength:5,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",tickWidth:1,title:{align:"middle",style:{color:"#6D869F",fontWeight:"bold"}},type:"linear"},defaultYAxisOptions:{endOnTick:!0,gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{align:"right",x:-8,y:3},lineWidth:0,maxPadding:0.05, -minPadding:0.05,startOnTick:!0,tickWidth:0,title:{rotation:270,text:"Y-values"},stackLabels:{enabled:!1,formatter:function(){return this.total},style:L.style}},defaultLeftAxisOptions:{labels:{align:"right",x:-8,y:null},title:{rotation:270}},defaultRightAxisOptions:{labels:{align:"left",x:8,y:null},title:{rotation:90}},defaultBottomAxisOptions:{labels:{align:"center",x:0,y:14},title:{rotation:0}},defaultTopAxisOptions:{labels:{align:"center",x:0,y:-5},title:{rotation:0}},init:function(a,b){var c=b.isX; -this.horiz=a.inverted?!c:c;this.xOrY=(this.isXAxis=c)?"x":"y";this.opposite=b.opposite;this.side=this.horiz?this.opposite?0:2:this.opposite?1:3;this.setOptions(b);var d=this.options,e=d.type,f=e==="datetime";this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.staggerLines=this.horiz&&d.labels.staggerLines;this.userOptions=b;this.minPixelPadding=0;this.chart=a;this.reversed=d.reversed;this.categories=d.categories;this.isLog=e==="logarithmic";this.isLinked=s(d.linkedTo);this.isDatetimeAxis= -f;this.ticks={};this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange=this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.min=this.max=null;var g,d=this.options.events;a.axes.push(this);a[c?"xAxis":"yAxis"].push(this);this.series=[];if(a.inverted&&c&&this.reversed===v)this.reversed=!0;this.removePlotLine=this.removePlotBand=this.removePlotBandOrLine;this.addPlotLine=this.addPlotBand=this.addPlotBandOrLine;for(g in d)B(this, -g,d[g]);if(this.isLog)this.val2lin=ra,this.lin2val=ja},setOptions:function(a){this.options=y(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],a)},defaultLabelFormatter:function(){var a=this.axis,b=this.value,c=a.tickInterval,d=this.dateTimeLabelFormat;return a.categories?b:d?ua(d,b):c%1E6===0?b/1E6+"M":c%1E3===0?b/1E3+"k":b>=1E3?Ya(b,0):Ya(b,-1)},getSeriesExtremes:function(){var a= -this,b=a.chart,c=a.stacks,d=[],e=[],f;a.dataMin=a.dataMax=null;n(a.series,function(g){if(g.visible||!b.options.chart.ignoreHiddenSeries){var h=g.options,k,i,j,l,m,o,r,n,q,C=h.threshold,J,w=[],x=0;if(a.isLog&&C<=0)C=h.threshold=null;if(a.isXAxis){if(h=g.xData,h.length)a.dataMin=O(p(a.dataMin,h[0]),Ma(h)),a.dataMax=t(p(a.dataMax,h[0]),Da(h))}else{var D,K,H,u=g.cropped,Sa=g.xAxis.getExtremes(),y=!!g.modifyValue;k=h.stacking;a.usePercentage=k==="percent";if(k)m=h.stack,l=g.type+p(m,""),o="-"+l,g.stackKey= -l,i=d[l]||[],d[l]=i,j=e[o]||[],e[o]=j;if(a.usePercentage)a.dataMin=0,a.dataMax=99;h=g.processedXData;r=g.processedYData;J=r.length;for(f=0;f<J;f++)if(n=h[f],q=r[f],q!==null&&q!==v&&(k?(K=(D=q<C)?j:i,H=D?o:l,q=K[n]=s(K[n])?K[n]+q:q,c[H]||(c[H]={}),c[H][n]||(c[H][n]=new Jb(a,a.options.stackLabels,D,n,m)),c[H][n].setTotal(q)):y&&(q=g.modifyValue(q)),u||(h[f+1]||n)>=Sa.min&&(h[f-1]||n)<=Sa.max))if(n=q.length)for(;n--;)q[n]!==null&&(w[x++]=q[n]);else w[x++]=q;if(!a.usePercentage&&w.length)a.dataMin=O(p(a.dataMin, -w[0]),Ma(w)),a.dataMax=t(p(a.dataMax,w[0]),Da(w));if(s(C))if(a.dataMin>=C)a.dataMin=C,a.ignoreMinPadding=!0;else if(a.dataMax<C)a.dataMax=C,a.ignoreMaxPadding=!0}}})},translate:function(a,b,c,d,e){var f=this.len,g=1,h=0,k=d?this.oldTransA:this.transA,d=d?this.oldMin:this.min,e=this.options.ordinal||this.isLog&&e;if(!k)k=this.transA;c&&(g*=-1,h=f);this.reversed&&(g*=-1,h-=g*f);b?(this.reversed&&(a=f-a),a=a/k+d,e&&(a=this.lin2val(a))):(e&&(a=this.val2lin(a)),a=g*(a-d)*k+h+g*this.minPixelPadding);return a}, -getPlotLinePath:function(a,b,c){var d=this.chart,e=this.left,f=this.top,g,h,k,a=this.translate(a,null,null,c),i=c&&d.oldChartHeight||d.chartHeight,j=c&&d.oldChartWidth||d.chartWidth,l;g=this.transB;c=h=u(a+g);g=k=u(i-a-g);if(isNaN(a))l=!0;else if(this.horiz){if(g=f,k=i-this.bottom,c<e||c>e+this.width)l=!0}else if(c=e,h=j-this.right,g<f||g>f+this.height)l=!0;return l?null:d.renderer.crispLine(["M",c,g,"L",h,k],b||0)},getPlotBandPath:function(a,b){var c=this.getPlotLinePath(b),d=this.getPlotLinePath(a); -d&&c?d.push(c[4],c[5],c[1],c[2]):d=null;return d},getLinearTickPositions:function(a,b,c){for(var d,b=pa($(b/a)*a),c=pa(Ga(c/a)*a),e=[];b<=c;){e.push(b);b=pa(b+a);if(b===d)break;d=b}return e},getLogTickPositions:function(a,b,c,d){var e=this.options,f=this.len,g=[];if(!d)this._minorAutoInterval=null;if(a>=0.5)a=u(a),g=this.getLinearTickPositions(a,b,c);else if(a>=0.08)for(var f=$(b),h,k,i,j,l,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];f<c+1&&!l;f++){k=e.length;for(h=0;h<k&&!l;h++)i=ra(ja(f)* -e[h]),i>b&&g.push(j),j>c&&(l=!0),j=i}else if(b=ja(b),c=ja(c),a=e[d?"minorTickInterval":"tickInterval"],a=p(a==="auto"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length:f)||1)),a=pb(a,null,R.pow(10,$(R.log(a)/R.LN10))),g=va(this.getLinearTickPositions(a,b,c),ra),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval=a;return g},getMinorTickPositions:function(){var a=this.tickPositions,b=this.minorTickInterval,c=[],d,e;if(this.isLog){e=a.length;for(d= -1;d<e;d++)c=c.concat(this.getLogTickPositions(b,a[d-1],a[d],!0))}else for(a=this.min+(a[0]-this.min)%b;a<=this.max;a+=b)c.push(a);return c},adjustForMinRange:function(){var a=this.options,b=this.min,c=this.max,d,e=this.dataMax-this.dataMin>=this.minRange,f,g,h,k,i;if(this.isXAxis&&this.minRange===v&&!this.isLog)s(a.min)||s(a.max)?this.minRange=null:(n(this.series,function(a){k=a.xData;for(g=i=a.xIncrement?1:k.length-1;g>0;g--)if(h=k[g]-k[g-1],f===v||h<f)f=h}),this.minRange=O(f*5,this.dataMax-this.dataMin)); -if(c-b<this.minRange){var j=this.minRange;d=(j-c+b)/2;d=[b-d,p(a.min,b-d)];if(e)d[2]=this.dataMin;b=Da(d);c=[b+j,p(a.max,b+j)];if(e)c[2]=this.dataMax;c=Ma(c);c-b<j&&(d[0]=c-j,d[1]=p(a.min,c-j),b=Da(d))}this.min=b;this.max=c},setAxisTranslation:function(){var a=this.max-this.min,b=0,c,d,e=this.transA;if(this.isXAxis)this.isLinked?b=this.linkedParent.pointRange:n(this.series,function(a){b=t(b,a.pointRange);d=a.closestPointRange;!a.noSharedTooltip&&s(d)&&(c=s(c)?O(c,d):d)}),this.pointRange=b,this.closestPointRange= -c;this.oldTransA=e;this.translationSlope=this.transA=e=this.len/(a+b||1);this.transB=this.horiz?this.left:this.bottom;this.minPixelPadding=e*(b/2)},setTickPositions:function(a){var b=this,c=b.chart,d=b.options,e=b.isLog,f=b.isDatetimeAxis,g=b.isXAxis,h=b.isLinked,k=b.options.tickPositioner,i=d.maxPadding,j=d.minPadding,l=d.tickInterval,m=d.tickPixelInterval,o=b.categories;h?(b.linkedParent=c[g?"xAxis":"yAxis"][d.linkedTo],c=b.linkedParent.getExtremes(),b.min=p(c.min,c.dataMin),b.max=p(c.max,c.dataMax), -d.type!==b.linkedParent.options.type&&ub(11,1)):(b.min=p(b.userMin,d.min,b.dataMin),b.max=p(b.userMax,d.max,b.dataMax));if(e)!a&&O(b.min,p(b.dataMin,b.min))<=0&&ub(10,1),b.min=pa(ra(b.min)),b.max=pa(ra(b.max));if(b.range&&(b.userMin=b.min=t(b.min,b.max-b.range),b.userMax=b.max,a))b.range=null;b.adjustForMinRange();if(!o&&!b.usePercentage&&!h&&s(b.min)&&s(b.max)){c=b.max-b.min||1;if(!s(d.min)&&!s(b.userMin)&&j&&(b.dataMin<0||!b.ignoreMinPadding))b.min-=c*j;if(!s(d.max)&&!s(b.userMax)&&i&&(b.dataMax> -0||!b.ignoreMaxPadding))b.max+=c*i}b.tickInterval=b.min===b.max||b.min===void 0||b.max===void 0?1:h&&!l&&m===b.linkedParent.options.tickPixelInterval?b.linkedParent.tickInterval:p(l,o?1:(b.max-b.min)*m/(b.len||1));g&&!a&&n(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation();b.beforeSetTickPositions&&b.beforeSetTickPositions();if(b.postProcessTickInterval)b.tickInterval=b.postProcessTickInterval(b.tickInterval);if(!f&&!e&&(a=R.pow(10,$(R.log(b.tickInterval)/ -R.LN10)),!s(d.tickInterval)))b.tickInterval=pb(b.tickInterval,null,a,d);b.minorTickInterval=d.minorTickInterval==="auto"&&b.tickInterval?b.tickInterval/5:d.minorTickInterval;b.tickPositions=k=d.tickPositions||k&&k.apply(b,[b.min,b.max]);if(!k)k=f?(b.getNonLinearTimeTicks||gb)(Cb(b.tickInterval,d.units),b.min,b.max,d.startOfWeek,b.ordinalPositions,b.closestPointRange,!0):e?b.getLogTickPositions(b.tickInterval,b.min,b.max):b.getLinearTickPositions(b.tickInterval,b.min,b.max),b.tickPositions=k;if(!h)e= -k[0],f=k[k.length-1],d.startOnTick?b.min=e:b.min>e&&k.shift(),d.endOnTick?b.max=f:b.max<f&&k.pop()},setMaxTicks:function(){var a=this.chart,b=a.maxTicks,c=this.tickPositions,d=this.xOrY;b||(b={x:0,y:0});if(!this.isLinked&&!this.isDatetimeAxis&&c.length>b[d]&&this.options.alignTicks!==!1)b[d]=c.length;a.maxTicks=b},adjustTickAmount:function(){var a=this.xOrY,b=this.tickPositions,c=this.chart.maxTicks;if(c&&c[a]&&!this.isDatetimeAxis&&!this.categories&&!this.isLinked&&this.options.alignTicks!==!1){var d= -this.tickAmount,e=b.length;this.tickAmount=a=c[a];if(e<a){for(;b.length<a;)b.push(pa(b[b.length-1]+this.tickInterval));this.transA*=(e-1)/(a-1);this.max=b[b.length-1]}if(s(d)&&a!==d)this.isDirty=!0}},setScale:function(){var a=this.stacks,b,c,d,e;this.oldMin=this.min;this.oldMax=this.max;this.oldAxisLength=this.len;this.setAxisSize();e=this.len!==this.oldAxisLength;n(this.series,function(a){if(a.isDirtyData||a.isDirty||a.xAxis.isDirty)d=!0});if(e||d||this.isLinked||this.userMin!==this.oldUserMin|| -this.userMax!==this.oldUserMax)if(this.getSeriesExtremes(),this.setTickPositions(),this.oldUserMin=this.userMin,this.oldUserMax=this.userMax,!this.isDirty)this.isDirty=e||this.min!==this.oldMin||this.max!==this.oldMax;if(!this.isXAxis)for(b in a)for(c in a[b])a[b][c].cum=a[b][c].total;this.setMaxTicks()},setExtremes:function(a,b,c,d,e){var f=this,g=f.chart,c=p(c,!0),e=z(e,{min:a,max:b});N(f,"setExtremes",e,function(){f.userMin=a;f.userMax=b;f.isDirtyExtremes=!0;c&&g.redraw(d)})},setAxisSize:function(){var a= -this.chart,b=this.options,c=b.offsetLeft||0,d=b.offsetRight||0;this.left=p(b.left,a.plotLeft+c);this.top=p(b.top,a.plotTop);this.width=p(b.width,a.plotWidth-c+d);this.height=p(b.height,a.plotHeight);this.bottom=a.chartHeight-this.height-this.top;this.right=a.chartWidth-this.width-this.left;this.len=t(this.horiz?this.width:this.height,0)},getExtremes:function(){var a=this.isLog;return{min:a?pa(ja(this.min)):this.min,max:a?pa(ja(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin, -userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,c=b?ja(this.min):this.min,b=b?ja(this.max):this.max;c>a||a===null?a=c:b<a&&(a=b);return this.translate(a,0,1,0,1)},addPlotBandOrLine:function(a){a=(new vb(this,a)).render();this.plotLinesAndBands.push(a);return a},getOffset:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.tickPositions,f=a.ticks,g=a.horiz,h=a.side,k,i=0,j,l=0,m=d.title,o=d.labels,r=0,A=b.axisOffset,q=[-1,1,1,-1][h],C;a.hasData=b=a.series.length&&s(a.min)&& -s(a.max);a.showAxis=k=b||p(d.showEmpty,!0);if(!a.axisGroup)a.axisGroup=c.g("axis").attr({zIndex:d.zIndex||7}).add(),a.gridGroup=c.g("grid").attr({zIndex:d.gridZIndex||1}).add();if(b||a.isLinked)n(e,function(b){f[b]?f[b].addLabel():f[b]=new ab(a,b)}),n(e,function(a){if(h===0||h===2||{1:"left",3:"right"}[h]===o.align)r=t(f[a].getLabelSize(),r)}),a.staggerLines&&(r+=(a.staggerLines-1)*16);else for(C in f)f[C].destroy(),delete f[C];if(m&&m.text){if(!a.axisTitle)a.axisTitle=c.text(m.text,0,0,m.useHTML).attr({zIndex:7, -rotation:m.rotation||0,align:m.textAlign||{low:"left",middle:"center",high:"right"}[m.align]}).css(m.style).add(a.axisGroup),a.axisTitle.isNew=!0;if(k)i=a.axisTitle.getBBox()[g?"height":"width"],l=p(m.margin,g?5:10),j=m.offset;a.axisTitle[k?"show":"hide"]()}a.offset=q*p(d.offset,A[h]);a.axisTitleMargin=p(j,r+l+(h!==2&&r&&q*d.labels[g?"y":"x"]));A[h]=t(A[h],a.axisTitleMargin+i+q*a.offset)},getLinePath:function(a){var b=this.chart,c=this.opposite,d=this.offset,e=this.horiz,f=this.left+(c?this.width: -0)+d,c=b.chartHeight-this.bottom-(c?this.height:0)+d;return b.renderer.crispLine(["M",e?this.left:f,e?c:this.top,"L",e?b.chartWidth-this.right:f,e?c:b.chartHeight-this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite,h=this.offset,k=F(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)*this.axisTitleMargin+(this.side===2?k:0);return{x:a?d:b+(g?this.width: -0)+h+(e.x||0),y:a?b-(g?this.height:0)+h:d+(e.y||0)}},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.isLog,f=a.isLinked,g=a.tickPositions,h=a.axisTitle,k=a.stacks,i=a.ticks,j=a.minorTicks,l=a.alternateBands,m=d.stackLabels,o=d.alternateGridColor,r=d.lineWidth,p,q=b.hasRendered&&s(a.oldMin)&&!isNaN(a.oldMin),C=a.showAxis,J,w;if(a.hasData||f)if(a.minorTickInterval&&!a.categories&&n(a.getMinorTickPositions(),function(b){j[b]||(j[b]=new ab(a,b,"minor"));q&&j[b].isNew&&j[b].render(null, -!0);j[b].isActive=!0;j[b].render()}),n(g.slice(1).concat([g[0]]),function(b,c){c=c===g.length-1?0:c+1;if(!f||b>=a.min&&b<=a.max)i[b]||(i[b]=new ab(a,b)),q&&i[b].isNew&&i[b].render(c,!0),i[b].isActive=!0,i[b].render(c)}),o&&n(g,function(b,c){if(c%2===0&&b<a.max)l[b]||(l[b]=new vb(a)),J=b,w=g[c+1]!==v?g[c+1]:a.max,l[b].options={from:e?ja(J):J,to:e?ja(w):w,color:o},l[b].render(),l[b].isActive=!0}),!a._addedPlotLB)n((d.plotLines||[]).concat(d.plotBands||[]),function(b){a.addPlotBandOrLine(b)}),a._addedPlotLB= -!0;n([i,j,l],function(a){for(var b in a)a[b].isActive?a[b].isActive=!1:(a[b].destroy(),delete a[b])});if(r)p=a.getLinePath(r),a.axisLine?a.axisLine.animate({d:p}):a.axisLine=c.path(p).attr({stroke:d.lineColor,"stroke-width":r,zIndex:7}).add(),a.axisLine[C?"show":"hide"]();if(h&&C)h[h.isNew?"attr":"animate"](a.getTitlePosition()),h.isNew=!1;if(m&&m.enabled){var x,D,d=a.stackTotalGroup;if(!d)a.stackTotalGroup=d=c.g("stack-labels").attr({visibility:"visible",zIndex:6}).add();d.translate(b.plotLeft,b.plotTop); -for(x in k)for(D in b=k[x],b)b[D].render(d)}a.isDirty=!1},removePlotBandOrLine:function(a){for(var b=this.plotLinesAndBands,c=b.length;c--;)b[c].id===a&&b[c].destroy()},setTitle:function(a,b){var c=this.chart,d=this.options;d.title=y(d.title,a);this.axisTitle=void 0;this.isDirty=!0;p(b,!0)&&c.redraw()},redraw:function(){var a=this.chart;a.tracker.resetTracker&&a.tracker.resetTracker(!0);this.render();n(this.plotLinesAndBands,function(a){a.render()});n(this.series,function(a){a.isDirty=!0})},setCategories:function(a, -b){var c=this.chart;this.categories=this.userOptions.categories=a;n(this.series,function(a){a.translate();a.setTooltipPoints(!0)});this.isDirty=!0;p(b,!0)&&c.redraw()},destroy:function(){var a=this,b=a.stacks,c;Q(a);for(c in b)ta(b[c]),b[c]=null;n([a.ticks,a.minorTicks,a.alternateBands,a.plotLinesAndBands],function(a){ta(a)});n(["stackTotalGroup","axisLine","axisGroup","gridGroup","axisTitle"],function(b){a[b]&&(a[b]=a[b].destroy())})}};wb.prototype={destroy:function(){n(this.crosshairs,function(a){a&& -a.destroy()});if(this.label)this.label=this.label.destroy()},move:function(a,b){var c=this;c.currentX=c.tooltipIsHidden?a:(2*c.currentX+a)/3;c.currentY=c.tooltipIsHidden?b:(c.currentY+b)/2;c.label.attr({x:c.currentX,y:c.currentY});c.tooltipTick=W(a-c.currentX)>1||W(b-c.currentY)>1?function(){c.move(a,b)}:null},hide:function(){if(!this.tooltipIsHidden){var a=this.chart.hoverPoints;this.label.hide();a&&n(a,function(a){a.setState()});this.chart.hoverPoints=null;this.tooltipIsHidden=!0}},hideCrosshairs:function(){n(this.crosshairs, -function(a){a&&a.hide()})},getAnchor:function(a,b){var c,d=this.chart,e=d.inverted,f=0,g=0,a=la(a);c=a[0].tooltipPos;c||(n(a,function(a){f+=a.plotX;g+=a.plotLow?(a.plotLow+a.plotHigh)/2:a.plotY}),f/=a.length,g/=a.length,c=[e?d.plotWidth-g:f,this.shared&&!e&&a.length>1&&b?b.chartY-d.plotTop:e?d.plotHeight-f:g]);return va(c,u)},getPosition:function(a,b,c){var d=this.chart,e=d.plotLeft,f=d.plotTop,g=d.plotWidth,h=d.plotHeight,k=p(this.options.distance,12),i=c.plotX,c=c.plotY,d=i+e+(d.inverted?k:-a-k), -j=c-b+f+15,l;d<7&&(d=e+i+k);d+a>e+g&&(d-=d+a-(e+g),j=c-b+f-k,l=!0);j<f+5&&(j=f+5,l&&c>=j&&c<=j+b&&(j=c+f+k));j+b>f+h&&(j=t(f,f+h-b-k));return{x:d,y:j}},refresh:function(a,b){function c(){var a=this.points||la(this),b=a[0].series,c;c=[b.tooltipHeaderFormatter(a[0].key)];n(a,function(a){b=a.series;c.push(b.tooltipFormatter&&b.tooltipFormatter(a)||a.point.tooltipFormatter(b.tooltipOptions.pointFormat))});c.push(f.footerFormat||"");return c.join("")}var d=this.chart,e=this.label,f=this.options,g,h,k, -i={},j,l=[];j=f.formatter||c;var i=d.hoverPoints,m,o=f.crosshairs;k=this.shared;h=this.getAnchor(a,b);g=h[0];h=h[1];k&&(!a.series||!a.series.noSharedTooltip)?(i&&n(i,function(a){a.setState()}),d.hoverPoints=a,n(a,function(a){a.setState("hover");l.push(a.getLabelConfig())}),i={x:a[0].category,y:a[0].y},i.points=l,a=a[0]):i=a.getLabelConfig();j=j.call(i);i=a.series;k=k||!i.isCartesian||i.tooltipOutsidePlot||d.isInsidePlot(g,h);j===!1||!k?this.hide():(this.tooltipIsHidden&&e.show(),e.attr({text:j}), -m=f.borderColor||a.color||i.color||"#606060",e.attr({stroke:m}),e=(f.positioner||this.getPosition).call(this,e.width,e.height,{plotX:g,plotY:h}),this.move(u(e.x),u(e.y)),this.tooltipIsHidden=!1);if(o){o=la(o);for(e=o.length;e--;)if(k=a.series[e?"yAxis":"xAxis"],o[e]&&k)if(k=k.getPlotLinePath(e?p(a.stackY,a.y):a.x,1),this.crosshairs[e])this.crosshairs[e].attr({d:k,visibility:"visible"});else{i={"stroke-width":o[e].width||1,stroke:o[e].color||"#C0C0C0",zIndex:o[e].zIndex||2};if(o[e].dashStyle)i.dashstyle= -o[e].dashStyle;this.crosshairs[e]=d.renderer.path(k).attr(i).add()}}N(d,"tooltipRefresh",{text:j,x:g+d.plotLeft,y:h+d.plotTop,borderColor:m})},tick:function(){this.tooltipTick&&this.tooltipTick()}};Kb.prototype={normalizeMouseEvent:function(a){var b,c,d,a=a||Y.event;if(!a.target)a.target=a.srcElement;if(a.originalEvent)a=a.originalEvent;if(a.event)a=a.event;d=a.touches?a.touches.item(0):a;this.chartPosition=b=Tb(this.chart.container);d.pageX===v?(c=a.x,b=a.y):(c=d.pageX-b.left,b=d.pageY-b.top);return z(a, -{chartX:u(c),chartY:u(b)})},getMouseCoordinates:function(a){var b={xAxis:[],yAxis:[]},c=this.chart;n(c.axes,function(d){var e=d.isXAxis;b[e?"xAxis":"yAxis"].push({axis:d,value:d.translate((c.inverted?!e:e)?a.chartX-c.plotLeft:c.plotHeight-a.chartY+c.plotTop,!0)})});return b},onmousemove:function(a){var b=this.chart,c=b.series,d,e,f=b.hoverPoint,g=b.hoverSeries,h,k,i=b.chartWidth,j=b.inverted?b.plotHeight+b.plotTop-a.chartY:a.chartX-b.plotLeft;if(b.tooltip&&this.options.tooltip.shared&&(!g||!g.noSharedTooltip)){e= -[];h=c.length;for(k=0;k<h;k++)if(c[k].visible&&c[k].options.enableMouseTracking!==!1&&!c[k].noSharedTooltip&&c[k].tooltipPoints.length)d=c[k].tooltipPoints[j],d._dist=W(j-d.plotX),i=O(i,d._dist),e.push(d);for(h=e.length;h--;)e[h]._dist>i&&e.splice(h,1);if(e.length&&e[0].plotX!==this.hoverX)b.tooltip.refresh(e,a),this.hoverX=e[0].plotX}if(g&&g.tracker&&(d=g.tooltipPoints[j])&&d!==f)d.onMouseOver()},resetTracker:function(a){var b=this.chart,c=b.hoverSeries,d=b.hoverPoint,e=b.hoverPoints||d,b=b.tooltip; -(a=a&&b&&e)&&la(e)[0].plotX===v&&(a=!1);if(a)b.refresh(e);else{if(d)d.onMouseOut();if(c)c.onMouseOut();b&&(b.hide(),b.hideCrosshairs());this.hoverX=null}},setDOMEvents:function(){function a(){if(b.selectionMarker){var f={xAxis:[],yAxis:[]},g=b.selectionMarker.getBBox(),h=g.x-c.plotLeft,l=g.y-c.plotTop,m;e&&(n(c.axes,function(a){if(a.options.zoomEnabled!==!1){var b=a.isXAxis,d=c.inverted?!b:b,e=a.translate(d?h:c.plotHeight-l-g.height,!0,0,0,1),d=a.translate(d?h+g.width:c.plotHeight-l,!0,0,0,1);!isNaN(e)&& -!isNaN(d)&&(f[b?"xAxis":"yAxis"].push({axis:a,min:O(e,d),max:t(e,d)}),m=!0)}}),m&&N(c,"selection",f,function(a){c.zoom(a)}));b.selectionMarker=b.selectionMarker.destroy()}if(c)M(d,{cursor:"auto"}),c.cancelClick=e,c.mouseIsDown=e=!1;Q(I,aa?"touchend":"mouseup",a)}var b=this,c=b.chart,d=c.container,e,f=b.zoomX&&!c.inverted||b.zoomY&&c.inverted,g=b.zoomY&&!c.inverted||b.zoomX&&c.inverted;b.hideTooltipOnMouseMove=function(a){Ub(a);b.chartPosition&&c.hoverSeries&&c.hoverSeries.isCartesian&&!c.isInsidePlot(a.pageX- -b.chartPosition.left-c.plotLeft,a.pageY-b.chartPosition.top-c.plotTop)&&b.resetTracker()};b.hideTooltipOnMouseLeave=function(){b.resetTracker();b.chartPosition=null};d.onmousedown=function(d){d=b.normalizeMouseEvent(d);!aa&&d.preventDefault&&d.preventDefault();c.mouseIsDown=!0;c.cancelClick=!1;c.mouseDownX=b.mouseDownX=d.chartX;b.mouseDownY=d.chartY;B(I,aa?"touchend":"mouseup",a)};var h=function(a){if(!a||!(a.touches&&a.touches.length>1)){a=b.normalizeMouseEvent(a);if(!aa)a.returnValue=!1;var d=a.chartX, -h=a.chartY,l=!c.isInsidePlot(d-c.plotLeft,h-c.plotTop);aa&&a.type==="touchstart"&&(G(a.target,"isTracker")?c.runTrackerClick||a.preventDefault():!c.runChartClick&&!l&&a.preventDefault());if(l)d<c.plotLeft?d=c.plotLeft:d>c.plotLeft+c.plotWidth&&(d=c.plotLeft+c.plotWidth),h<c.plotTop?h=c.plotTop:h>c.plotTop+c.plotHeight&&(h=c.plotTop+c.plotHeight);if(c.mouseIsDown&&a.type!=="touchstart"){if(e=Math.sqrt(Math.pow(b.mouseDownX-d,2)+Math.pow(b.mouseDownY-h,2)),e>10){a=c.isInsidePlot(b.mouseDownX-c.plotLeft, -b.mouseDownY-c.plotTop);if(c.hasCartesianSeries&&(b.zoomX||b.zoomY)&&a&&!b.selectionMarker)b.selectionMarker=c.renderer.rect(c.plotLeft,c.plotTop,f?1:c.plotWidth,g?1:c.plotHeight,0).attr({fill:b.options.chart.selectionMarkerFill||"rgba(69,114,167,0.25)",zIndex:7}).add();if(b.selectionMarker&&f){var m=d-b.mouseDownX;b.selectionMarker.attr({width:W(m),x:(m>0?0:m)+b.mouseDownX})}b.selectionMarker&&g&&(h-=b.mouseDownY,b.selectionMarker.attr({height:W(h),y:(h>0?0:h)+b.mouseDownY}));a&&!b.selectionMarker&& -b.options.chart.panning&&c.pan(d)}}else if(!l)b.onmousemove(a);return l||!c.hasCartesianSeries}};d.onmousemove=h;B(d,"mouseleave",b.hideTooltipOnMouseLeave);B(I,"mousemove",b.hideTooltipOnMouseMove);d.ontouchstart=function(a){if(b.zoomX||b.zoomY)d.onmousedown(a);h(a)};d.ontouchmove=h;d.ontouchend=function(){e&&b.resetTracker()};d.onclick=function(a){var d=c.hoverPoint,e,f,a=b.normalizeMouseEvent(a);a.cancelBubble=!0;if(!c.cancelClick)d&&(G(a.target,"isTracker")||G(a.target.parentNode,"isTracker"))? -(e=d.plotX,f=d.plotY,z(d,{pageX:b.chartPosition.left+c.plotLeft+(c.inverted?c.plotWidth-f:e),pageY:b.chartPosition.top+c.plotTop+(c.inverted?c.plotHeight-e:f)}),N(d.series,"click",z(a,{point:d})),d.firePointEvent("click",a)):(z(a,b.getMouseCoordinates(a)),c.isInsidePlot(a.chartX-c.plotLeft,a.chartY-c.plotTop)&&N(c,"click",a))}},destroy:function(){var a=this.chart,b=a.container;if(a.trackerGroup)a.trackerGroup=a.trackerGroup.destroy();Q(b,"mouseleave",this.hideTooltipOnMouseLeave);Q(I,"mousemove", -this.hideTooltipOnMouseMove);b.onclick=b.onmousedown=b.onmousemove=b.ontouchstart=b.ontouchend=b.ontouchmove=null;clearInterval(this.tooltipInterval)},init:function(a,b){if(!a.trackerGroup)a.trackerGroup=a.renderer.g("tracker").attr({zIndex:9}).add();if(b.enabled)a.tooltip=new wb(a,b),this.tooltipInterval=setInterval(function(){a.tooltip.tick()},32);this.setDOMEvents()}};xb.prototype={init:function(a){var b=this,c=b.options=a.options.legend;if(c.enabled){var d=c.itemStyle,e=p(c.padding,8),f=c.itemMarginTop|| -0;b.baseline=F(d.fontSize)+3+f;b.itemStyle=d;b.itemHiddenStyle=y(d,c.itemHiddenStyle);b.itemMarginTop=f;b.padding=e;b.initialItemX=e;b.initialItemY=e-5;b.maxItemWidth=0;b.chart=a;b.itemHeight=0;b.lastLineHeight=0;b.render();B(b.chart,"endResize",function(){b.positionCheckboxes()})}},colorizeItem:function(a,b){var c=this.options,d=a.legendItem,e=a.legendLine,f=a.legendSymbol,g=this.itemHiddenStyle.color,c=b?c.itemStyle.color:g,g=b?a.color:g;d&&d.css({fill:c});e&&e.attr({stroke:g});f&&f.attr({stroke:g, -fill:g})},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,e=d[0],d=d[1],f=a.checkbox;a.legendGroup&&a.legendGroup.translate(b?e:this.legendWidth-e-2*c-4,d);if(f)f.x=e,f.y=d},destroyItem:function(a){var b=a.checkbox;n(["legendItem","legendLine","legendSymbol","legendGroup"],function(b){a[b]&&a[b].destroy()});b&&Na(a.checkbox)},destroy:function(){var a=this.group,b=this.box;if(b)this.box=b.destroy();if(a)this.group=a.destroy()},positionCheckboxes:function(){var a= -this;n(a.allItems,function(b){var c=b.checkbox,d=a.group.alignAttr;c&&M(c,{left:d.translateX+b.legendItemWidth+c.x-20+"px",top:d.translateY+c.y+3+"px"})})},renderItem:function(a){var x;var b=this,c=b.chart,d=c.renderer,e=b.options,f=e.layout==="horizontal",g=e.symbolWidth,h=e.symbolPadding,k=b.itemStyle,i=b.itemHiddenStyle,j=b.padding,l=!e.rtl,m=e.width,o=e.itemMarginBottom||0,r=b.itemMarginTop,n=b.initialItemX,q=a.legendItem,p=a.series||a,s=p.options,w=s.showCheckbox;if(!q&&(a.legendGroup=d.g("legend-item").attr({zIndex:1}).add(b.scrollGroup), -p.drawLegendSymbol(b,a),a.legendItem=q=d.text(e.labelFormatter.call(a),l?g+h:-h,b.baseline,e.useHTML).css(y(a.visible?k:i)).attr({align:l?"left":"right",zIndex:2}).add(a.legendGroup),a.legendGroup.on("mouseover",function(){a.setState("hover");q.css(b.options.itemHoverStyle)}).on("mouseout",function(){q.css(a.visible?k:i);a.setState()}).on("click",function(b){var c=function(){a.setVisible()},b={browserEvent:b};a.firePointEvent?a.firePointEvent("legendItemClick",b,c):N(a,"legendItemClick",b,c)}),b.colorizeItem(a, -a.visible),s&&w))a.checkbox=V("input",{type:"checkbox",checked:a.selected,defaultChecked:a.selected},e.itemCheckboxStyle,c.container),B(a.checkbox,"click",function(b){N(a,"checkboxClick",{checked:b.target.checked},function(){a.select()})});d=q.getBBox();x=a.legendItemWidth=e.itemWidth||g+h+d.width+j+(w?20:0),e=x;b.itemHeight=g=d.height;if(f&&b.itemX-n+e>(m||c.chartWidth-2*j-n))b.itemX=n,b.itemY+=r+b.lastLineHeight+o,b.lastLineHeight=0;b.maxItemWidth=t(b.maxItemWidth,e);b.lastItemY=r+b.itemY+o;b.lastLineHeight= -t(g,b.lastLineHeight);a._legendItemPos=[b.itemX,b.itemY];f?b.itemX+=e:(b.itemY+=r+g+o,b.lastLineHeight=g);b.offsetWidth=m||t(f?b.itemX-n:e,b.offsetWidth)},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e,f,g,h,k=a.box,i=a.options,j=a.padding,l=i.borderWidth,m=i.backgroundColor;a.itemX=a.initialItemX;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g("legend").attr({zIndex:7}).add(),a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup), -a.clipRect=c.clipRect(0,0,9999,b.chartHeight),a.contentGroup.clip(a.clipRect);e=[];n(b.series,function(a){var b=a.options;b.showInLegend&&(e=e.concat(a.legendItems||(b.legendType==="point"?a.data:a)))});ac(e,function(a,b){return(a.options.legendIndex||0)-(b.options.legendIndex||0)});i.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;n(e,function(b){a.renderItem(b)});g=i.width||a.offsetWidth;h=a.lastItemY+a.lastLineHeight;h=a.handleOverflow(h);if(l||m){g+=j;h+=j;if(k){if(g>0&&h>0)k[k.isNew? -"attr":"animate"](k.crisp(null,null,null,g,h)),k.isNew=!1}else a.box=k=c.rect(0,0,g,h,i.borderRadius,l||0).attr({stroke:i.borderColor,"stroke-width":l||0,fill:m||da}).add(d).shadow(i.shadow),k.isNew=!0;k[f?"show":"hide"]()}a.legendWidth=g;a.legendHeight=h;n(e,function(b){a.positionItem(b)});f&&d.align(z({width:g,height:h},i),!0,b.spacingBox);b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this,c=this.chart,d=c.renderer,e=this.options,f=e.y,f=c.spacingBox.height+(e.verticalAlign=== -"top"?-f:f)-this.padding,g=e.maxHeight,h=this.clipRect,k=e.navigation,i=p(k.animation,!0),j=k.arrowSize||12,l=this.nav;e.layout==="horizontal"&&(f/=2);g&&(f=O(f,g));if(a>f){this.clipHeight=c=f-20;this.pageCount=Ga(a/c);this.currentPage=p(this.currentPage,1);this.fullHeight=a;h.attr({height:c});if(!l)this.nav=l=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol("triangle",0,0,j,j).on("click",function(){b.scroll(-1,i)}).add(l),this.pager=d.text("",15,10).css(k.style).add(l),this.down=d.symbol("triangle-down", -0,0,j,j).on("click",function(){b.scroll(1,i)}).add(l);b.scroll(0);a=f}else l&&(h.attr({height:c.chartHeight}),l.hide(),this.scrollGroup.attr({translateY:1}));return a},scroll:function(a,b){var c=this.pageCount,d=this.currentPage+a,e=this.clipHeight,f=this.options.navigation,g=f.activeColor,f=f.inactiveColor,h=this.pager,k=this.padding;d>c&&(d=c);if(d>0)b!==v&&Ea(b,this.chart),this.nav.attr({translateX:k,translateY:e+7,visibility:"visible"}),this.up.attr({fill:d===1?f:g}).css({cursor:d===1?"default": -"pointer"}),h.attr({text:d+"/"+this.pageCount}),this.down.attr({x:18+this.pager.getBBox().width,fill:d===c?f:g}).css({cursor:d===c?"default":"pointer"}),this.scrollGroup.animate({translateY:-O(e*(d-1),this.fullHeight-e+k)+1}),h.attr({text:d+"/"+c}),this.currentPage=d}};cb.prototype={initSeries:function(a){var b=this.options.chart,b=new U[a.type||b.type||b.defaultSeriesType];b.init(this,a);return b},addSeries:function(a,b,c){var d=this;a&&(Ea(c,d),b=p(b,!0),N(d,"addSeries",{options:a},function(){d.initSeries(a); -d.isDirtyLegend=!0;b&&d.redraw()}))},isInsidePlot:function(a,b){return a>=0&&a<=this.plotWidth&&b>=0&&b<=this.plotHeight},adjustTickAmounts:function(){this.options.chart.alignTicks!==!1&&n(this.axes,function(a){a.adjustTickAmount()});this.maxTicks=null},redraw:function(a){var b=this.axes,c=this.series,d=this.tracker,e=this.legend,f=this.isDirtyLegend,g,h=this.isDirtyBox,k=c.length,i=k,j=this.clipRect,l=this.renderer,m=l.isHidden();Ea(a,this);for(m&&this.cloneRenderTo();i--;)if(a=c[i],a.isDirty&&a.options.stacking){g= -!0;break}if(g)for(i=k;i--;)if(a=c[i],a.options.stacking)a.isDirty=!0;n(c,function(a){a.isDirty&&a.options.legendType==="point"&&(f=!0)});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;if(this.hasCartesianSeries){if(!this.isResizing)this.maxTicks=null,n(b,function(a){a.setScale()});this.adjustTickAmounts();this.getMargins();n(b,function(a){if(a.isDirtyExtremes)a.isDirtyExtremes=!1,N(a,"afterSetExtremes",a.getExtremes());if(a.isDirty||h||g)a.redraw(),h=!0})}h&&(this.drawChartBox(),j&&(Ra(j), -j.animate({width:this.plotSizeX,height:this.plotSizeY+1})));n(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});d&&d.resetTracker&&d.resetTracker(!0);l.draw();N(this,"redraw");m&&this.cloneRenderTo(!0)},showLoading:function(a){var b=this.options,c=this.loadingDiv,d=b.loading;if(!c)this.loadingDiv=c=V(oa,{className:"highcharts-loading"},z(d.style,{left:this.plotLeft+"px",top:this.plotTop+"px",width:this.plotWidth+"px",height:this.plotHeight+"px",zIndex:10,display:da}),this.container), -this.loadingSpan=V("span",null,d.labelStyle,c);this.loadingSpan.innerHTML=a||b.lang.loading;if(!this.loadingShown)M(c,{opacity:0,display:""}),lb(c,{opacity:d.style.opacity},{duration:d.showDuration||0}),this.loadingShown=!0},hideLoading:function(){var a=this.options,b=this.loadingDiv;b&&lb(b,{opacity:0},{duration:a.loading.hideDuration||100,complete:function(){M(b,{display:da})}});this.loadingShown=!1},get:function(a){var b=this.axes,c=this.series,d,e;for(d=0;d<b.length;d++)if(b[d].options.id===a)return b[d]; -for(d=0;d<c.length;d++)if(c[d].options.id===a)return c[d];for(d=0;d<c.length;d++){e=c[d].points||[];for(b=0;b<e.length;b++)if(e[b].id===a)return e[b]}return null},getAxes:function(){var a=this,b=this.options,c=b.xAxis||{},b=b.yAxis||{},c=la(c);n(c,function(a,b){a.index=b;a.isX=!0});b=la(b);n(b,function(a,b){a.index=b});c=c.concat(b);n(c,function(b){new bb(a,b)});a.adjustTickAmounts()},getSelectedPoints:function(){var a=[];n(this.series,function(b){a=a.concat(Ab(b.points,function(a){return a.selected}))}); -return a},getSelectedSeries:function(){return Ab(this.series,function(a){return a.selected})},showResetZoom:function(){var a=this,b=T.lang,c=a.options.chart.resetZoomButton,d=c.theme,e=d.states,f=c.relativeTo==="chart"?null:{x:a.plotLeft,y:a.plotTop,width:a.plotWidth,height:a.plotHeight};this.resetZoomButton=a.renderer.button(b.resetZoom,null,null,function(){a.zoomOut()},d,e&&e.hover).attr({align:c.position.align,title:b.resetZoomTitle}).add().align(c.position,!1,f)},zoomOut:function(){var a=this, -b=a.resetZoomButton;N(a,"selection",{resetSelection:!0},function(){a.zoom()});if(b)a.resetZoomButton=b.destroy()},zoom:function(a){var b=this,c=b.options.chart,d;b.resetZoomEnabled!==!1&&!b.resetZoomButton&&b.showResetZoom();!a||a.resetSelection?n(b.axes,function(a){a.options.zoomEnabled!==!1&&(a.setExtremes(null,null,!1),d=!0)}):n(a.xAxis.concat(a.yAxis),function(a){var c=a.axis;if(b.tracker[c.isXAxis?"zoomX":"zoomY"])c.setExtremes(a.min,a.max,!1),d=!0});d&&b.redraw(p(c.animation,b.pointCount<100))}, -pan:function(a){var b=this.xAxis[0],c=this.mouseDownX,d=b.pointRange/2,e=b.getExtremes(),f=b.translate(c-a,!0)+d,c=b.translate(c+this.plotWidth-a,!0)-d;(d=this.hoverPoints)&&n(d,function(a){a.setState()});b.series.length&&f>O(e.dataMin,e.min)&&c<t(e.dataMax,e.max)&&b.setExtremes(f,c,!0,!1);this.mouseDownX=a;M(this.container,{cursor:"move"})},setTitle:function(a,b){var c=this,d=c.options,e;c.chartTitleOptions=e=y(d.title,a);c.chartSubtitleOptions=d=y(d.subtitle,b);n([["title",a,e],["subtitle",b,d]], -function(a){var b=a[0],d=c[b],e=a[1],a=a[2];d&&e&&(d=d.destroy());a&&a.text&&!d&&(c[b]=c.renderer.text(a.text,0,0,a.useHTML).attr({align:a.align,"class":"highcharts-"+b,zIndex:a.zIndex||4}).css(a.style).add().align(a,!1,c.spacingBox))})},getChartSize:function(){var a=this.options.chart,b=this.renderToClone||this.renderTo;this.containerWidth=eb(b,"width");this.containerHeight=eb(b,"height");this.chartWidth=a.width||this.containerWidth||600;this.chartHeight=a.height||(this.containerHeight>19?this.containerHeight: -400)},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container;a?b&&(this.renderTo.appendChild(c),Na(b),delete this.renderToClone):(c&&this.renderTo.removeChild(c),this.renderToClone=b=this.renderTo.cloneNode(0),M(b,{position:"absolute",top:"-9999px",display:"block"}),I.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options.chart,c,d,e;this.renderTo=a=b.renderTo;e="highcharts-"+yb++;if(ya(a))this.renderTo=a=I.getElementById(a);a||ub(13,!0);a.innerHTML=""; -a.offsetWidth||this.cloneRenderTo();this.getChartSize();c=this.chartWidth;d=this.chartHeight;this.container=a=V(oa,{className:"highcharts-container"+(b.className?" "+b.className:""),id:e},z({position:"relative",overflow:"hidden",width:c+"px",height:d+"px",textAlign:"left",lineHeight:"normal"},b.style),this.renderToClone||a);this.renderer=b.forExport?new qa(a,c,d,!0):new Qa(a,c,d);ma&&this.renderer.create(this,a,c,d)},getMargins:function(){var a=this.options.chart,b=a.spacingTop,c=a.spacingRight,d= -a.spacingBottom,a=a.spacingLeft,e,f=this.legend,g=this.optionsMarginTop,h=this.optionsMarginLeft,k=this.optionsMarginRight,i=this.optionsMarginBottom,j=this.chartTitleOptions,l=this.chartSubtitleOptions,m=this.options.legend,o=p(m.margin,10),r=m.x,A=m.y,q=m.align,C=m.verticalAlign;this.resetMargins();e=this.axisOffset;if((this.title||this.subtitle)&&!s(this.optionsMarginTop))if(l=t(this.title&&!j.floating&&!j.verticalAlign&&j.y||0,this.subtitle&&!l.floating&&!l.verticalAlign&&l.y||0))this.plotTop= -t(this.plotTop,l+p(j.margin,15)+b);if(f.display&&!m.floating)if(q==="right"){if(!s(k))this.marginRight=t(this.marginRight,f.legendWidth-r+o+c)}else if(q==="left"){if(!s(h))this.plotLeft=t(this.plotLeft,f.legendWidth+r+o+a)}else if(C==="top"){if(!s(g))this.plotTop=t(this.plotTop,f.legendHeight+A+o+b)}else if(C==="bottom"&&!s(i))this.marginBottom=t(this.marginBottom,f.legendHeight-A+o+d);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin); -this.hasCartesianSeries&&n(this.axes,function(a){a.getOffset()});s(h)||(this.plotLeft+=e[3]);s(g)||(this.plotTop+=e[0]);s(i)||(this.marginBottom+=e[2]);s(k)||(this.marginRight+=e[1]);this.setChartSize()},initReflow:function(){function a(a){var g=c.width||eb(d,"width"),h=c.height||eb(d,"height"),a=a?a.target:Y;if(g&&h&&(a===Y||a===I)){if(g!==b.containerWidth||h!==b.containerHeight)clearTimeout(e),e=setTimeout(function(){b.resize(g,h,!1)},100);b.containerWidth=g;b.containerHeight=h}}var b=this,c=b.options.chart, -d=b.renderTo,e;B(Y,"resize",a);B(b,"destroy",function(){Q(Y,"resize",a)})},fireEndResize:function(){var a=this;a&&N(a,"endResize",null,function(){a.isResizing-=1})},resize:function(a,b,c){var d,e,f=this.title,g=this.subtitle;this.isResizing+=1;Ea(c,this);this.oldChartHeight=this.chartHeight;this.oldChartWidth=this.chartWidth;if(s(a))this.chartWidth=d=u(a);if(s(b))this.chartHeight=e=u(b);M(this.container,{width:d+"px",height:e+"px"});this.renderer.setSize(d,e,c);this.plotWidth=d-this.plotLeft-this.marginRight; -this.plotHeight=e-this.plotTop-this.marginBottom;this.maxTicks=null;n(this.axes,function(a){a.isDirty=!0;a.setScale()});n(this.series,function(a){a.isDirty=!0});this.isDirtyBox=this.isDirtyLegend=!0;this.getMargins();a=this.spacingBox;f&&f.align(null,null,a);g&&g.align(null,null,a);this.redraw(c);this.oldChartHeight=null;N(this,"resize");$a===!1?this.fireEndResize():setTimeout(this.fireEndResize,$a&&$a.duration||500)},setChartSize:function(){var a=this.inverted,b=this.chartWidth,c=this.chartHeight, -d=this.options.chart,e=d.spacingTop,f=d.spacingRight,g=d.spacingBottom,d=d.spacingLeft;this.plotLeft=u(this.plotLeft);this.plotTop=u(this.plotTop);this.plotWidth=u(b-this.plotLeft-this.marginRight);this.plotHeight=u(c-this.plotTop-this.marginBottom);this.plotSizeX=a?this.plotHeight:this.plotWidth;this.plotSizeY=a?this.plotWidth:this.plotHeight;this.spacingBox={x:d,y:e,width:b-d-f,height:c-e-g};n(this.axes,function(a){a.setAxisSize();a.setAxisTranslation()})},resetMargins:function(){var a=this.options.chart, -b=a.spacingRight,c=a.spacingBottom,d=a.spacingLeft;this.plotTop=p(this.optionsMarginTop,a.spacingTop);this.marginRight=p(this.optionsMarginRight,b);this.marginBottom=p(this.optionsMarginBottom,c);this.plotLeft=p(this.optionsMarginLeft,d);this.axisOffset=[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth,d=this.chartHeight,e=this.chartBackground,f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,k=a.borderWidth||0,i=a.backgroundColor,j=a.plotBackgroundColor, -l=a.plotBackgroundImage,m,o={x:this.plotLeft,y:this.plotTop,width:this.plotWidth,height:this.plotHeight};m=k+(a.shadow?8:0);if(k||i)if(e)e.animate(e.crisp(null,null,null,c-m,d-m));else{e={fill:i||da};if(k)e.stroke=a.borderColor,e["stroke-width"]=k;this.chartBackground=b.rect(m/2,m/2,c-m,d-m,a.borderRadius,k).attr(e).add().shadow(a.shadow)}if(j)f?f.animate(o):this.plotBackground=b.rect(this.plotLeft,this.plotTop,this.plotWidth,this.plotHeight,0).attr({fill:j}).add().shadow(a.plotShadow);if(l)h?h.animate(o): -this.plotBGImage=b.image(l,this.plotLeft,this.plotTop,this.plotWidth,this.plotHeight).add();if(a.plotBorderWidth)g?g.animate(g.crisp(null,this.plotLeft,this.plotTop,this.plotWidth,this.plotHeight)):this.plotBorder=b.rect(this.plotLeft,this.plotTop,this.plotWidth,this.plotHeight,0,a.plotBorderWidth).attr({stroke:a.plotBorderColor,"stroke-width":a.plotBorderWidth,zIndex:4}).add();this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart,c,d=a.options.series,e,f;n(["inverted","angular", -"polar"],function(g){c=U[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g];for(e=d&&d.length;!f&&e--;)(c=U[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},render:function(){var a=this,b=a.axes,c=a.renderer,d=a.options,e=d.labels,d=d.credits,f;a.setTitle();a.legend=new xb(a);n(b,function(a){a.setScale()});a.getMargins();a.maxTicks=null;n(b,function(a){a.setTickPositions(!0);a.setMaxTicks()});a.adjustTickAmounts();a.getMargins();a.drawChartBox();a.hasCartesianSeries&&n(b,function(a){a.render()}); -if(!a.seriesGroup)a.seriesGroup=c.g("series-group").attr({zIndex:3}).add();n(a.series,function(a){a.translate();a.setTooltipPoints();a.render()});e.items&&n(e.items,function(){var b=z(e.style,this.style),d=F(b.left)+a.plotLeft,f=F(b.top)+a.plotTop+12;delete b.left;delete b.top;c.text(this.html,d,f).attr({zIndex:2}).css(b).add()});if(d.enabled&&!a.credits)f=d.href,a.credits=c.text(d.text,0,0).on("click",function(){if(f)location.href=f}).attr({align:d.position.align,zIndex:8}).css(d.style).add().align(d.position); -a.hasRendered=!0},destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;if(a!==null){N(a,"destroy");Q(a);for(e=b.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy();n("title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,tracker,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer".split(","),function(b){var c=a[b];c&&(a[b]=c.destroy())});if(d)d.innerHTML="",Q(d),f&&Na(d),d=null;for(e in a)delete a[e]; -a=a.options=null}},firstRender:function(){var a=this,b=a.options,c=a.callback;if(!Pa&&Y==Y.top&&I.readyState!=="complete"||ma&&!Y.canvg)ma?Xb.push(function(){a.firstRender()},b.global.canvasToolsURL):I.attachEvent("onreadystatechange",function(){I.detachEvent("onreadystatechange",a.firstRender);I.readyState==="complete"&&a.firstRender()});else{a.getContainer();N(a,"init");if(Highcharts.RangeSelector&&b.rangeSelector.enabled)a.rangeSelector=new Highcharts.RangeSelector(a);a.resetMargins();a.setChartSize(); -a.propFromSeries();a.getAxes();n(b.series||[],function(b){a.initSeries(b)});if(Highcharts.Scroller&&(b.navigator.enabled||b.scrollbar.enabled))a.scroller=new Highcharts.Scroller(a);a.tracker=new Kb(a,b);a.render();a.renderer.draw();c&&c.apply(a,[a]);n(a.callbacks,function(b){b.apply(a,[a])});a.cloneRenderTo(!0);N(a,"load")}},init:function(a){var b=this.options.chart,c;b.reflow!==!1&&B(this,"load",this.initReflow);if(a)for(c in a)B(this,c,a[c]);this.xAxis=[];this.yAxis=[];this.animation=ma?!1:p(b.animation, -!0);this.setSize=this.resize;this.pointCount=0;this.counters=new Hb;this.firstRender()}};cb.prototype.callbacks=[];var xa=function(){};xa.prototype={init:function(a,b,c){var d=a.chart.counters;this.series=a;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint){b=a.chart.options.colors;if(!this.options)this.options={};this.color=this.options.color=this.color||b[d.color++];d.wrapColor(b.length)}a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series,d=typeof a;this.config= -a;if(d==="number"||a===null)this.y=a;else if(typeof a[0]==="number")this.x=a[0],this.y=a[1];else if(d==="object"&&typeof a.length!=="number"){if(z(this,a),this.options=a,a.dataLabels)c._hasPointLabels=!0}else if(typeof a[0]==="string")this.name=a[0],this.y=a[1];if(this.x===v)this.x=b===v?c.autoIncrement():b},destroy:function(){var a=this.series.chart,b=a.hoverPoints,c;a.pointCount--;if(b&&(this.setState(),Ka(b,this),!b.length))a.hoverPoints=null;if(this===a.hoverPoint)this.onMouseOut();if(this.graphic|| -this.dataLabel)Q(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(c in this)this[c]=null},destroyElements:function(){for(var a="graphic,tracker,dataLabel,group,connector,shadowGroup".split(","),b,c=6;c--;)b=a[c],this[b]&&(this[b]=this[b].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}},select:function(a,b){var c=this,d=c.series.chart, -a=p(a,!c.selected);c.firePointEvent(a?"select":"unselect",{accumulate:b},function(){c.selected=a;c.setState(a&&"select");b||n(d.getSelectedPoints(),function(a){if(a.selected&&a!==c)a.selected=!1,a.setState(""),a.firePointEvent("unselect")})})},onMouseOver:function(){var a=this.series,b=a.chart,c=b.tooltip,d=b.hoverPoint;if(d&&d!==this)d.onMouseOut();this.firePointEvent("mouseOver");c&&(!c.shared||a.noSharedTooltip)&&c.refresh(this);this.setState("hover");b.hoverPoint=this},onMouseOut:function(){this.firePointEvent("mouseOut"); -this.setState();this.series.chart.hoverPoint=null},tooltipFormatter:function(a){var b=this.series,c=b.tooltipOptions,d=a.match(/\{(series|point)\.[a-zA-Z]+\}/g),e=/[{\.}]/,f,g,h,k,i={y:0,open:0,high:0,low:0,close:0,percentage:1,total:1};c.valuePrefix=c.valuePrefix||c.yPrefix;c.valueDecimals=c.valueDecimals||c.yDecimals;c.valueSuffix=c.valueSuffix||c.ySuffix;for(k in d)g=d[k],ya(g)&&g!==a&&(h=(" "+g).split(e),f={point:this,series:b}[h[1]],h=h[2],f===this&&i.hasOwnProperty(h)?(f=i[h]?h:"value",f=(c[f+ -"Prefix"]||"")+Ya(this[h],p(c[f+"Decimals"],-1))+(c[f+"Suffix"]||"")):f=f[h],a=a.replace(g,f));return a},update:function(a,b,c){var d=this,e=d.series,f=d.graphic,g,h=e.data,k=h.length,i=e.chart,b=p(b,!0);d.firePointEvent("update",{options:a},function(){d.applyOptions(a);ia(a)&&(e.getAttribs(),f&&f.attr(d.pointAttr[e.state]));for(g=0;g<k;g++)if(h[g]===d){e.xData[g]=d.x;e.yData[g]=d.y;e.options.data[g]=a;break}e.isDirty=!0;e.isDirtyData=!0;b&&i.redraw(c)})},remove:function(a,b){var c=this,d=c.series, -e=d.chart,f,g=d.data,h=g.length;Ea(b,e);a=p(a,!0);c.firePointEvent("remove",null,function(){for(f=0;f<h;f++)if(g[f]===c){g.splice(f,1);d.options.data.splice(f,1);d.xData.splice(f,1);d.yData.splice(f,1);break}c.destroy();d.isDirty=!0;d.isDirtyData=!0;a&&e.redraw()})},firePointEvent:function(a,b,c){var d=this,e=this.series.options;(e.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&this.importEvents();a==="click"&&e.allowPointSelect&&(c=function(a){d.select(null,a.ctrlKey||a.metaKey|| -a.shiftKey)});N(this,a,b,c)},importEvents:function(){if(!this.hasImportedEvents){var a=y(this.series.options.point,this.options).events,b;this.events=a;for(b in a)B(this,b,a[b]);this.hasImportedEvents=!0}},setState:function(a){var b=this.plotX,c=this.plotY,d=this.series,e=d.options.states,f=S[d.type].marker&&d.options.marker,g=f&&!f.enabled,h=f&&f.states[a],k=h&&h.enabled===!1,i=d.stateMarkerGraphic,j=d.chart,l=this.pointAttr,a=a||"";if(!(a===this.state||this.selected&&a!=="select"||e[a]&&e[a].enabled=== -!1||a&&(k||g&&!h.enabled))){if(this.graphic)e=f&&this.graphic.symbolName&&l[a].r,this.graphic.attr(y(l[a],e?{x:b-e,y:c-e,width:2*e,height:2*e}:{}));else{if(a&&h){if(!i)e=h.radius,d.stateMarkerGraphic=i=j.renderer.symbol(d.symbol,-e,-e,2*e,2*e).attr(l[a]).add(d.group);i.translate(b,c)}if(i)i[a?"show":"hide"]()}this.state=a}}};var Z=function(){};Z.prototype={isCartesian:!0,type:"line",pointClass:xa,sorted:!0,pointAttrToOptions:{stroke:"lineColor","stroke-width":"lineWidth",fill:"fillColor",r:"radius"}, -init:function(a,b){var c,d;d=a.series.length;this.chart=a;this.options=b=this.setOptions(b);this.bindAxes();z(this,{index:d,name:b.name||"Series "+(d+1),state:"",pointAttr:{},visible:b.visible!==!1,selected:b.selected===!0});if(ma)b.animation=!1;d=b.events;for(c in d)B(this,c,d[c]);if(d&&d.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;this.getColor();this.getSymbol();this.setData(b.data,!1);if(this.isCartesian)a.hasCartesianSeries=!0;a.series.push(this)}, -bindAxes:function(){var a=this,b=a.options,c=a.chart,d;a.isCartesian&&n(["xAxis","yAxis"],function(e){n(c[e],function(c){d=c.options;if(b[e]===d.index||b[e]===v&&d.index===0)c.series.push(a),a[e]=c,c.isDirty=!0})})},autoIncrement:function(){var a=this.options,b=this.xIncrement,b=p(b,a.pointStart,0);this.pointInterval=p(this.pointInterval,a.pointInterval,1);this.xIncrement=b+this.pointInterval;return b},getSegments:function(){var a=-1,b=[],c,d=this.points,e=d.length;if(e)if(this.options.connectNulls){for(c= -e;c--;)d[c].y===null&&d.splice(c,1);d.length&&(b=[d])}else n(d,function(c,g){c.y===null?(g>a+1&&b.push(d.slice(a+1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart.options,c=b.plotOptions,d=a.data;a.data=null;c=y(c[this.type],c.series,a);c.data=a.data=d;this.tooltipOptions=y(b.tooltip,c.tooltip);return c},getColor:function(){var a=this.options,b=this.chart.options.colors,c=this.chart.counters;this.color=a.color||!a.colorByPoint&&b[c.color++]||"gray"; -c.wrapColor(b.length)},getSymbol:function(){var a=this.options.marker,b=this.chart,c=b.options.symbols,b=b.counters;this.symbol=a.symbol||c[b.symbol++];if(/^url/.test(this.symbol))a.radius=0;b.wrapSymbol(c.length)},drawLegendSymbol:function(a){var b=this.options,c=b.marker,d=a.options.symbolWidth,e=this.chart.renderer,f=this.legendGroup,a=a.baseline,g;if(b.lineWidth){g={"stroke-width":b.lineWidth};if(b.dashStyle)g.dashstyle=b.dashStyle;this.legendLine=e.path(["M",0,a-4,"L",d,a-4]).attr(g).add(f)}if(c&& -c.enabled)b=c.radius,this.legendSymbol=e.symbol(this.symbol,d/2-b,a-4-b,2*b,2*b).attr(this.pointAttr[""]).add(f)},addPoint:function(a,b,c,d){var e=this.data,f=this.graph,g=this.area,h=this.chart,k=this.xData,i=this.yData,j=f&&f.shift||0,l=this.options.data;Ea(d,h);if(f&&c)f.shift=j+1;if(g){if(c)g.shift=j+1;g.isArea=!0}b=p(b,!0);d={series:this};this.pointClass.prototype.applyOptions.apply(d,[a]);k.push(d.x);i.push(this.valueCount===4?[d.open,d.high,d.low,d.close]:d.y);l.push(a);c&&(e[0]&&e[0].remove? -e[0].remove(!1):(e.shift(),k.shift(),i.shift(),l.shift()));this.getAttribs();this.isDirtyData=this.isDirty=!0;b&&h.redraw()},setData:function(a,b){var c=this.points,d=this.options,e=this.initialColor,f=this.chart,g=null,h=this.xAxis,k=this.pointClass.prototype;this.xIncrement=null;this.pointRange=h&&h.categories&&1||d.pointRange;if(s(e))f.counters.color=e;var i=[],j=[],l=a?a.length:[],m=this.valueCount;if(l>(d.turboThreshold||1E3)){for(e=0;g===null&&e<l;)g=a[e],e++;if(Wa(g)){k=p(d.pointStart,0);d= -p(d.pointInterval,1);for(e=0;e<l;e++)i[e]=k,j[e]=a[e],k+=d;this.xIncrement=k}else if(Va(g))if(m)for(e=0;e<l;e++)d=a[e],i[e]=d[0],j[e]=d.slice(1,m+1);else for(e=0;e<l;e++)d=a[e],i[e]=d[0],j[e]=d[1]}else for(e=0;e<l;e++)d={series:this},k.applyOptions.apply(d,[a[e]]),i[e]=d.x,j[e]=k.toYData?k.toYData.apply(d):d.y;this.data=[];this.options.data=a;this.xData=i;this.yData=j;for(e=c&&c.length||0;e--;)c[e]&&c[e].destroy&&c[e].destroy();if(h)h.minRange=h.userMinRange;this.isDirty=this.isDirtyData=f.isDirtyBox= -!0;p(b,!0)&&f.redraw(!1)},remove:function(a,b){var c=this,d=c.chart,a=p(a,!0);if(!c.isRemoving)c.isRemoving=!0,N(c,"remove",null,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=!0;a&&d.redraw(b)});c.isRemoving=!1},processData:function(a){var b=this.xData,c=this.yData,d=b.length,e=0,f=d,g,h,k=this.xAxis,i=this.options,j=i.cropThreshold,l=this.isCartesian;if(l&&!this.isDirty&&!k.isDirty&&!this.yAxis.isDirty&&!a)return!1;if(l&&this.sorted&&(!j||d>j||this.forceCrop))if(a=k.getExtremes(),k=a.min,j= -a.max,b[d-1]<k||b[0]>j)b=[],c=[];else if(b[0]<k||b[d-1]>j){for(a=0;a<d;a++)if(b[a]>=k){e=t(0,a-1);break}for(;a<d;a++)if(b[a]>j){f=a+1;break}b=b.slice(e,f);c=c.slice(e,f);g=!0}for(a=b.length-1;a>0;a--)if(d=b[a]-b[a-1],d>0&&(h===v||d<h))h=d;this.cropped=g;this.cropStart=e;this.processedXData=b;this.processedYData=c;if(i.pointRange===null)this.pointRange=h||1;this.closestPointRange=h},generatePoints:function(){var a=this.options.data,b=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass, -g=d.length,h=this.cropStart||0,k,i=this.hasGroupedData,j,l=[],m;if(!b&&!i)b=[],b.length=a.length,b=this.data=b;for(m=0;m<g;m++)k=h+m,i?l[m]=(new f).init(this,[d[m]].concat(la(e[m]))):(b[k]?j=b[k]:a[k]!==v&&(b[k]=j=(new f).init(this,a[k],d[m])),l[m]=j);if(b&&(g!==(c=b.length)||i))for(m=0;m<c;m++)if(m===h&&!i&&(m+=g),b[m])b[m].destroyElements(),b[m].plotX=v;this.data=b;this.points=l},translate:function(){this.processedXData||this.processData();this.generatePoints();for(var a=this.chart,b=this.options, -c=b.stacking,d=this.xAxis,e=d.categories,f=this.yAxis,g=this.points,h=g.length,k=!!this.modifyValue,i,j=f.series,l=j.length;l--;)if(j[l].visible){l===this.index&&(i=!0);break}for(l=0;l<h;l++){var j=g[l],m=j.x,o=j.y,r=j.low,n=f.stacks[(o<b.threshold?"-":"")+this.stackKey];j.plotX=d.translate(m,0,0,0,1);if(c&&this.visible&&n&&n[m]){r=n[m];m=r.total;r.cum=r=r.cum-o;o=r+o;if(i)r=b.threshold;c==="percent"&&(r=m?r*100/m:0,o=m?o*100/m:0);j.percentage=m?j.y*100/m:0;j.stackTotal=m;j.stackY=o}j.yBottom=s(r)? -f.translate(r,0,1,0,1):null;k&&(o=this.modifyValue(o,j));j.plotY=typeof o==="number"?u(f.translate(o,0,1,0,1)*10)/10:v;j.clientX=a.inverted?a.plotHeight-j.plotX:j.plotX;j.category=e&&e[j.x]!==v?e[j.x]:j.x}this.getSegments()},setTooltipPoints:function(a){var b=[],c=this.chart.plotSizeX,d,e;d=this.xAxis;var f,g,h=[];if(this.options.enableMouseTracking!==!1){if(a)this.tooltipPoints=null;n(this.segments||this.points,function(a){b=b.concat(a)});d&&d.reversed&&(b=b.reverse());a=b.length;for(g=0;g<a;g++){f= -b[g];d=b[g-1]?b[g-1]._high+1:0;for(f._high=e=b[g+1]?t(0,$((f.plotX+(b[g+1]?b[g+1].plotX:c))/2)):c;d>=0&&d<=e;)h[d++]=f}this.tooltipPoints=h}},tooltipHeaderFormatter:function(a){var b=this.tooltipOptions,c=b.xDateFormat,d=this.xAxis,e=d&&d.options.type==="datetime",f;if(e&&!c)for(f in E)if(E[f]>=d.closestPointRange){c=b.dateTimeLabelFormats[f];break}return b.headerFormat.replace("{point.key}",e?ua(c,a):a).replace("{series.name}",this.name).replace("{series.color}",this.color)},onMouseOver:function(){var a= -this.chart,b=a.hoverSeries;if(aa||!a.mouseIsDown){if(b&&b!==this)b.onMouseOut();this.options.events.mouseOver&&N(this,"mouseOver");this.setState("hover");a.hoverSeries=this}},onMouseOut:function(){var a=this.options,b=this.chart,c=b.tooltip,d=b.hoverPoint;if(d)d.onMouseOut();this&&a.events.mouseOut&&N(this,"mouseOut");c&&!a.stickyTracking&&!c.shared&&c.hide();this.setState();b.hoverSeries=null},animate:function(a){var b=this.chart,c=this.clipRect,d=this.options.animation;d&&!ia(d)&&(d={});if(a){if(!c.isAnimating)c.attr("width", -0),c.isAnimating=!0}else c.animate({width:b.plotSizeX},d),this.animate=null},drawPoints:function(){var a,b=this.points,c=this.chart,d,e,f,g,h,k,i,j;if(this.options.marker.enabled)for(f=b.length;f--;)if(g=b[f],d=g.plotX,e=g.plotY,j=g.graphic,e!==v&&!isNaN(e))if(a=g.pointAttr[g.selected?"select":""],h=a.r,k=p(g.marker&&g.marker.symbol,this.symbol),i=k.indexOf("url")===0,j)j.animate(z({x:d-h,y:e-h},j.symbolName?{width:2*h,height:2*h}:{}));else if(h>0||i)g.graphic=c.renderer.symbol(k,d-h,e-h,2*h,2*h).attr(a).add(this.group)}, -convertAttribs:function(a,b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=p(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=S[a.type].marker?a.options.marker:a.options,c=b.states,d=c.hover,e,f=a.color,g={stroke:f,fill:f},h=a.points||[],k=[],i,j=a.pointAttrToOptions,l;a.options.marker?(d.radius=d.radius||b.radius+2,d.lineWidth=d.lineWidth||b.lineWidth+1):d.color=d.color||wa(d.color||f).brighten(d.brightness).get();k[""]=a.convertAttribs(b, -g);n(["hover","select"],function(b){k[b]=a.convertAttribs(c[b],k[""])});a.pointAttr=k;for(f=h.length;f--;){g=h[f];if((b=g.options&&g.options.marker||g.options)&&b.enabled===!1)b.radius=0;e=!1;if(g.options)for(l in j)s(b[j[l]])&&(e=!0);if(e){i=[];c=b.states||{};e=c.hover=c.hover||{};if(!a.options.marker)e.color=wa(e.color||g.options.color).brighten(e.brightness||d.brightness).get();i[""]=a.convertAttribs(b,k[""]);i.hover=a.convertAttribs(c.hover,k.hover,i[""]);i.select=a.convertAttribs(c.select,k.select, -i[""])}else i=k;g.pointAttr=i}},destroy:function(){var a=this,b=a.chart,c=a.clipRect,d=/AppleWebKit\/533/.test(Ia),e,f,g=a.data||[],h,k,i;N(a,"destroy");Q(a);n(["xAxis","yAxis"],function(b){if(i=a[b])Ka(i.series,a),i.isDirty=!0});a.legendItem&&a.chart.legend.destroyItem(a);for(f=g.length;f--;)(h=g[f])&&h.destroy&&h.destroy();a.points=null;if(c&&c!==b.clipRect)a.clipRect=c.destroy();n("area,graph,dataLabelsGroup,group,tracker,trackerGroup".split(","),function(b){a[b]&&(e=d&&b==="group"?"hide":"destroy", -a[b][e]())});if(b.hoverSeries===a)b.hoverSeries=null;Ka(b.series,a);for(k in a)delete a[k]},drawDataLabels:function(){var a=this,b=a.options,c=b.dataLabels;if(c.enabled||a._hasPointLabels){var d,e,f=a.points,g,h,k,i=a.dataLabelsGroup,j=a.chart,l=a.xAxis,l=l?l.left:j.plotLeft,m=a.yAxis,m=m?m.top:j.plotTop,o=j.renderer,r=j.inverted,A=a.type,q=b.stacking,C=A==="column"||A==="bar",J=c.verticalAlign===null,w=c.y===null,x=o.fontMetrics(c.style.fontSize),D=x.h,K=x.b,H,t;C&&(x={top:K,middle:K-D/2,bottom:-D+ -K},q?(J&&(c=y(c,{verticalAlign:"middle"})),w&&(c=y(c,{y:x[c.verticalAlign]}))):J?c=y(c,{verticalAlign:"top"}):w&&(c=y(c,{y:x[c.verticalAlign]})));i?i.translate(l,m):i=a.dataLabelsGroup=o.g("data-labels").attr({visibility:a.visible?"visible":"hidden",zIndex:6}).translate(l,m).add();h=c;n(f,function(f){H=f.dataLabel;c=h;(g=f.options)&&g.dataLabels&&(c=y(c,g.dataLabels));if(t=c.enabled){var l=f.barX&&f.barX+f.barW/2||p(f.plotX,-999),m=p(f.plotY,-999),n=c.y===null?f.y>=b.threshold?-D+K:K:c.y;d=(r?j.plotWidth- -m:l)+c.x;e=u((r?j.plotHeight-l:m)+n)}if(H&&a.isCartesian&&(!j.isInsidePlot(d,e)||!t))f.dataLabel=H.destroy();else if(t){var l=c.align,w;k=c.formatter.call(f.getLabelConfig(),c);A==="column"&&(d+={left:-1,right:1}[l]*f.barW/2||0);!q&&r&&f.y<0&&(l="right",d-=10);c.style.color=p(c.color,c.style.color,a.color,"black");if(H)H.attr({text:k}).animate({x:d,y:e});else if(s(k)){l={align:l,fill:c.backgroundColor,stroke:c.borderColor,"stroke-width":c.borderWidth,r:c.borderRadius||0,rotation:c.rotation,padding:c.padding, -zIndex:1};for(w in l)l[w]===v&&delete l[w];H=f.dataLabel=o[c.rotation?"text":"label"](k,d,e,null,null,null,c.useHTML,!0).attr(l).css(c.style).add(i).shadow(c.shadow)}if(C&&b.stacking&&H)w=f.barX,l=f.barY,m=f.barW,f=f.barH,H.align(c,null,{x:r?j.plotWidth-l-f:w,y:r?j.plotHeight-w-m:l,width:r?f:m,height:r?m:f})}})}},getSegmentPath:function(a){var b=this,c=[];n(a,function(d,e){b.getPointSpline?c.push.apply(c,b.getPointSpline(a,d,e)):(c.push(e?"L":"M"),e&&b.options.step&&c.push(d.plotX,a[e-1].plotY),c.push(d.plotX, -d.plotY))});return c},drawGraph:function(){var a=this,b=a.options,c=a.graph,d=[],e=a.group,f=b.lineColor||a.color,g=b.lineWidth,h=b.dashStyle,k,i=a.chart.renderer,j=[];n(a.segments,function(b){k=a.getSegmentPath(b);b.length>1?d=d.concat(k):j.push(b[0])});a.graphPath=d;a.singlePoints=j;if(c)Ra(c),c.animate({d:d});else if(g){c={stroke:f,"stroke-width":g};if(h)c.dashstyle=h;a.graph=i.path(d).attr(c).add(e).shadow(b.shadow)}},invertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len}; -c.attr(a).invert();d&&d.attr(a).invert()}var b=this,c=b.group,d=b.trackerGroup,e=b.chart;B(e,"resize",a);B(b,"destroy",function(){Q(e,"resize",a)});a();b.invertGroups=a},createGroup:function(){var a=this.chart;(this.group=a.renderer.g("series")).attr({visibility:this.visible?"visible":"hidden",zIndex:this.options.zIndex}).translate(this.xAxis.left,this.yAxis.top).add(a.seriesGroup);this.createGroup=Rb},render:function(){var a=this,b=a.chart,c,d=a.options,e=d.clip!==!1,f=d.animation,f=(d=f&&a.animate)? -f&&f.duration||500:0,g=a.clipRect,h=b.renderer;if(!g&&(g=a.clipRect=!b.hasRendered&&b.clipRect?b.clipRect:h.clipRect(0,0,b.plotSizeX,b.plotSizeY+1),!b.clipRect))b.clipRect=g;a.createGroup();c=a.group;a.drawDataLabels();d&&a.animate(!0);a.getAttribs();a.drawGraph&&a.drawGraph();a.drawPoints();a.options.enableMouseTracking!==!1&&a.drawTracker();b.inverted&&a.invertGroups();e&&!a.hasRendered&&(c.clip(g),a.trackerGroup&&a.trackerGroup.clip(b.clipRect));d&&a.animate();setTimeout(function(){g.isAnimating= -!1;if((c=a.group)&&g!==b.clipRect&&g.renderer){if(e)c.clip(a.clipRect=b.clipRect);g.destroy()}},f);a.isDirty=a.isDirtyData=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirtyData,c=this.group;c&&(a.inverted&&c.attr({width:a.plotWidth,height:a.plotHeight}),c.animate({translateX:this.xAxis.left,translateY:this.yAxis.top}));this.translate();this.setTooltipPoints(!0);this.render();b&&N(this,"updatedData")},setState:function(a){var b=this.options,c=this.graph,d=b.states,b=b.lineWidth, -a=a||"";if(this.state!==a)this.state=a,d[a]&&d[a].enabled===!1||(a&&(b=d[a].lineWidth||b+1),c&&!c.dashstyle&&c.attr({"stroke-width":b},a?0:500))},setVisible:function(a,b){var c=this.chart,d=this.legendItem,e=this.group,f=this.tracker,g=this.dataLabelsGroup,h,k=this.points,i=c.options.chart.ignoreHiddenSeries;h=this.visible;h=(this.visible=a=a===v?!h:a)?"show":"hide";if(e)e[h]();if(f)f[h]();else if(k)for(e=k.length;e--;)if(f=k[e],f.tracker)f.tracker[h]();if(g)g[h]();d&&c.legend.colorizeItem(this,a); -this.isDirty=!0;this.options.stacking&&n(c.series,function(a){if(a.options.stacking&&a.visible)a.isDirty=!0});if(i)c.isDirtyBox=!0;b!==!1&&c.redraw();N(this,h)},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=a===v?!this.selected:a;if(this.checkbox)this.checkbox.checked=a;N(this,a?"select":"unselect")},drawTrackerGroup:function(){var a=this.trackerGroup,b=this.chart;if(this.isCartesian){if(!a)this.trackerGroup=a=b.renderer.g().attr({zIndex:this.options.zIndex|| -1}).add(b.trackerGroup);a.translate(this.xAxis.left,this.yAxis.top)}return a},drawTracker:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath:a.graphPath),e=d.length,f=a.chart,g=f.renderer,h=f.options.tooltip.snap,k=a.tracker,i=b.cursor,i=i&&{cursor:i},j=a.singlePoints,l=a.drawTrackerGroup(),m;if(e&&!c)for(m=e+1;m--;)d[m]==="M"&&d.splice(m+1,0,d[m+1]-h,d[m+2],"L"),(m&&d[m]==="M"||m===e)&&d.splice(m,0,"L",d[m-2]+h,d[m-1]);for(m=0;m<j.length;m++)e=j[m],d.push("M",e.plotX-h,e.plotY, -"L",e.plotX+h,e.plotY);k?k.attr({d:d}):a.tracker=g.path(d).attr({isTracker:!0,"stroke-linejoin":"bevel",visibility:a.visible?"visible":"hidden",stroke:zb,fill:c?zb:da,"stroke-width":b.lineWidth+(c?0:2*h)}).on(aa?"touchstart":"mouseover",function(){if(f.hoverSeries!==a)a.onMouseOver()}).on("mouseout",function(){if(!b.stickyTracking)a.onMouseOut()}).css(i).add(l)}};L=ca(Z);U.line=L;S.area=y(P,{threshold:0});L=ca(Z,{type:"area",getSegmentPath:function(a){var b=Z.prototype.getSegmentPath.call(this,a), -c=[].concat(b),d,e=this.options;d=b.length;var f=this.yAxis.getThreshold(e.threshold);d===3&&c.push("L",b[1],b[2]);if(e.stacking&&this.type!=="areaspline")for(d=a.length-1;d>=0;d--)d<a.length-1&&e.step&&c.push(a[d+1].plotX,a[d].yBottom),c.push(a[d].plotX,a[d].yBottom);else c.push("L",a[a.length-1].plotX,f,"L",a[0].plotX,f);this.areaPath=this.areaPath.concat(c);return b},drawGraph:function(){this.areaPath=[];Z.prototype.drawGraph.apply(this);var a=this.areaPath,b=this.options,c=this.area;c?c.animate({d:a}): -this.area=this.chart.renderer.path(a).attr({fill:p(b.fillColor,wa(this.color).setOpacity(b.fillOpacity||0.75).get())}).add(this.group)},drawLegendSymbol:function(a,b){b.legendSymbol=this.chart.renderer.rect(0,a.baseline-11,a.options.symbolWidth,12,2).attr({zIndex:3}).add(b.legendGroup)}});U.area=L;S.spline=y(P);ea=ca(Z,{type:"spline",getPointSpline:function(a,b,c){var d=b.plotX,e=b.plotY,f=a[c-1],g=a[c+1],h,k,i,j;if(c&&c<a.length-1){a=f.plotY;i=g.plotX;var g=g.plotY,l;h=(1.5*d+f.plotX)/2.5;k=(1.5* -e+a)/2.5;i=(1.5*d+i)/2.5;j=(1.5*e+g)/2.5;l=(j-k)*(i-d)/(i-h)+e-j;k+=l;j+=l;k>a&&k>e?(k=t(a,e),j=2*e-k):k<a&&k<e&&(k=O(a,e),j=2*e-k);j>g&&j>e?(j=t(g,e),k=2*e-j):j<g&&j<e&&(j=O(g,e),k=2*e-j);b.rightContX=i;b.rightContY=j}c?(b=["C",f.rightContX||f.plotX,f.rightContY||f.plotY,h||d,k||e,d,e],f.rightContX=f.rightContY=null):b=["M",d,e];return b}});U.spline=ea;S.areaspline=y(S.area);var Ta=L.prototype,ea=ca(ea,{type:"areaspline",getSegmentPath:Ta.getSegmentPath,drawGraph:Ta.drawGraph});U.areaspline=ea;S.column= -y(P,{borderColor:"#FFFFFF",borderWidth:1,borderRadius:0,groupPadding:0.2,marker:null,pointPadding:0.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{brightness:0.1,shadow:!1},select:{color:"#C0C0C0",borderColor:"#000000",shadow:!1}},dataLabels:{y:null,verticalAlign:null},threshold:0});ea=ca(Z,{type:"column",tooltipOutsidePlot:!0,pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color",r:"borderRadius"},init:function(){Z.prototype.init.apply(this,arguments); -var a=this,b=a.chart;b.hasRendered&&n(b.series,function(b){if(b.type===a.type)b.isDirty=!0})},translate:function(){var a=this,b=a.chart,c=a.options,d=c.stacking,e=c.borderWidth,f=0,g=a.xAxis,h=g.reversed,k={},i,j;Z.prototype.translate.apply(a);n(b.series,function(b){if(b.type===a.type&&b.visible&&a.options.group===b.options.group)b.options.stacking?(i=b.stackKey,k[i]===v&&(k[i]=f++),j=k[i]):j=f++,b.columnIndex=j});var l=a.points,g=W(g.transA)*(g.ordinalSlope||c.pointRange||g.closestPointRange||1), -m=g*c.groupPadding,o=(g-2*m)/f,r=c.pointWidth,A=s(r)?(o-r)/2:o*c.pointPadding,q=p(r,o-2*A),C=Ga(t(q,1+2*e)),u=A+(m+((h?f-a.columnIndex:a.columnIndex)||0)*o-g/2)*(h?-1:1),w=a.yAxis.getThreshold(c.threshold),x=p(c.minPointLength,5);n(l,function(c){var f=c.plotY,g=p(c.yBottom,w),h=c.plotX+u,i=Ga(O(f,g)),k=Ga(t(f,g)-i),j=a.yAxis.stacks[(c.y<0?"-":"")+a.stackKey];d&&a.visible&&j&&j[c.x]&&j[c.x].setOffset(u,C);W(k)<x&&x&&(k=x,i=W(i-w)>x?g-x:w-(f<=w?x:0));z(c,{barX:h,barY:i,barW:C,barH:k,pointWidth:q}); -c.shapeType="rect";c.shapeArgs=f=b.renderer.Element.prototype.crisp.call(0,e,h,i,C,k);e%2&&(f.y-=1,f.height+=1);c.trackerArgs=W(k)<3&&y(c.shapeArgs,{height:6,y:i-3})})},getSymbol:function(){},drawLegendSymbol:L.prototype.drawLegendSymbol,drawGraph:function(){},drawPoints:function(){var a=this,b=a.options,c=a.chart.renderer,d,e;n(a.points,function(f){var g=f.plotY;if(g!==v&&!isNaN(g)&&f.y!==null)d=f.graphic,e=f.shapeArgs,d?(Ra(d),d.animate(y(e))):f.graphic=d=c[f.shapeType](e).attr(f.pointAttr[f.selected? -"select":""]).add(a.group).shadow(b.shadow,null,b.stacking&&!b.borderRadius)})},drawTracker:function(){var a=this,b=a.chart,c=b.renderer,d,e,f=+new Date,g=a.options,h=g.cursor,k=h&&{cursor:h},i=a.drawTrackerGroup(),j,l,m;n(a.points,function(h){e=h.tracker;d=h.trackerArgs||h.shapeArgs;l=h.plotY;m=!a.isCartesian||l!==v&&!isNaN(l);delete d.strokeWidth;if(h.y!==null&&m)e?e.attr(d):h.tracker=c[h.shapeType](d).attr({isTracker:f,fill:zb,visibility:a.visible?"visible":"hidden"}).on(aa?"touchstart":"mouseover", -function(c){j=c.relatedTarget||c.fromElement;if(b.hoverSeries!==a&&G(j,"isTracker")!==f)a.onMouseOver();h.onMouseOver()}).on("mouseout",function(b){if(!g.stickyTracking&&(j=b.relatedTarget||b.toElement,G(j,"isTracker")!==f))a.onMouseOut()}).css(k).add(h.group||i)})},animate:function(a){var b=this,c=b.points,d=b.options;if(!a)n(c,function(a){var c=a.graphic,a=a.shapeArgs,g=b.yAxis,h=d.threshold;c&&(c.attr({height:0,y:s(h)?g.getThreshold(h):g.translate(g.getExtremes().min,0,1,0,1)}),c.animate({height:a.height, -y:a.y},d.animation))}),b.animate=null},remove:function(){var a=this,b=a.chart;b.hasRendered&&n(b.series,function(b){if(b.type===a.type)b.isDirty=!0});Z.prototype.remove.apply(a,arguments)}});U.column=ea;S.bar=y(S.column,{dataLabels:{align:"left",x:5,y:null,verticalAlign:"middle"}});Ta=ca(ea,{type:"bar",inverted:!0});U.bar=Ta;S.scatter=y(P,{lineWidth:0,states:{hover:{lineWidth:0}},tooltip:{headerFormat:'<span style="font-size: 10px; color:{series.color}">{series.name}</span><br/>',pointFormat:"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>"}}); -Ta=ca(Z,{type:"scatter",sorted:!1,translate:function(){var a=this;Z.prototype.translate.apply(a);n(a.points,function(b){b.shapeType="circle";b.shapeArgs={x:b.plotX,y:b.plotY,r:a.chart.options.tooltip.snap}})},drawTracker:function(){for(var a=this,b=a.options.cursor,b=b&&{cursor:b},c=a.points,d=c.length,e;d--;)if(e=c[d].graphic)e.element._i=d;a._hasTracking?a._hasTracking=!0:a.group.attr({isTracker:!0}).on(aa?"touchstart":"mouseover",function(b){a.onMouseOver();if(b.target._i!==v)c[b.target._i].onMouseOver()}).on("mouseout", -function(){if(!a.options.stickyTracking)a.onMouseOut()}).css(b)}});U.scatter=Ta;S.pie=y(P,{borderColor:"#FFFFFF",borderWidth:1,center:["50%","50%"],colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name},y:5},legendType:"point",marker:null,size:"75%",showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}}});P={type:"pie",isCartesian:!1,pointClass:ca(xa,{init:function(){xa.prototype.init.apply(this,arguments);var a=this,b;z(a,{visible:a.visible!== -!1,name:p(a.name,"Slice")});b=function(){a.slice()};B(a,"select",b);B(a,"unselect",b);return a},setVisible:function(a){var b=this.series.chart,c=this.tracker,d=this.dataLabel,e=this.connector,f=this.shadowGroup,g;g=(this.visible=a=a===v?!this.visible:a)?"show":"hide";this.group[g]();if(c)c[g]();if(d)d[g]();if(e)e[g]();if(f)f[g]();this.legendItem&&b.legend.colorizeItem(this,a)},slice:function(a,b,c){var d=this.series.chart,e=this.slicedTranslation;Ea(c,d);p(b,!0);a=this.sliced=s(a)?a:!this.sliced; -a={translateX:a?e[0]:d.plotLeft,translateY:a?e[1]:d.plotTop};this.group.animate(a);this.shadowGroup&&this.shadowGroup.animate(a)}}),pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color"},getColor:function(){this.initialColor=this.chart.counters.color},animate:function(){var a=this;n(a.points,function(b){var c=b.graphic,b=b.shapeArgs,d=-Ha/2;c&&(c.attr({r:0,start:d,end:d}),c.animate({r:b.r,start:b.start,end:b.end},a.options.animation))});a.animate=null},setData:function(a, -b){Z.prototype.setData.call(this,a,!1);this.processData();this.generatePoints();p(b,!0)&&this.chart.redraw()},getCenter:function(){var a=this.options,b=this.chart,c=b.plotWidth,d=b.plotHeight,a=a.center.concat([a.size,a.innerSize||0]),e=O(c,d),f;return va(a,function(a,b){return(f=/%$/.test(a))?[c,d,e,e][b]*F(a)/100:a})},translate:function(){this.generatePoints();var a=0,b=-0.25,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g=this.chart,h,k,i,j=this.points,l=2*Ha,m,o,r,p=c.dataLabels.distance; -this.center=f=this.getCenter();this.getX=function(a,b){i=R.asin((a-f[1])/(f[2]/2+p));return f[0]+(b?-1:1)*ga(i)*(f[2]/2+p)};n(j,function(b){a+=b.y});n(j,function(c){m=a?c.y/a:0;h=u(b*l*1E3)/1E3;b+=m;k=u(b*l*1E3)/1E3;c.shapeType="arc";c.shapeArgs={x:f[0],y:f[1],r:f[2]/2,innerR:f[3]/2,start:h,end:k};i=(k+h)/2;c.slicedTranslation=va([ga(i)*d+g.plotLeft,ka(i)*d+g.plotTop],u);o=ga(i)*f[2]/2;r=ka(i)*f[2]/2;c.tooltipPos=[f[0]+o*0.7,f[1]+r*0.7];c.labelPos=[f[0]+o+ga(i)*p,f[1]+r+ka(i)*p,f[0]+o+ga(i)*e,f[1]+ -r+ka(i)*e,f[0]+o,f[1]+r,p<0?"center":i<l/4?"left":"right",i];c.percentage=m*100;c.total=a});this.setTooltipPoints()},render:function(){this.getAttribs();this.drawPoints();this.options.enableMouseTracking!==!1&&this.drawTracker();this.drawDataLabels();this.options.animation&&this.animate&&this.animate();this.isDirty=!1},drawPoints:function(){var a=this,b=a.chart,c=b.renderer,d,e,f,g=a.options.shadow,h,k;n(a.points,function(i){e=i.graphic;k=i.shapeArgs;f=i.group;h=i.shadowGroup;if(g&&!h)h=i.shadowGroup= -c.g("shadow").attr({zIndex:4}).add();if(!f)f=i.group=c.g("point").attr({zIndex:5}).add();d=i.sliced?i.slicedTranslation:[b.plotLeft,b.plotTop];f.translate(d[0],d[1]);h&&h.translate(d[0],d[1]);e?e.animate(k):i.graphic=e=c.arc(k).setRadialReference(a.center).attr(z(i.pointAttr[""],{"stroke-linejoin":"round"})).add(i.group).shadow(g,h);i.visible===!1&&i.setVisible(!1)})},drawDataLabels:function(){var a=this.data,b,c=this.chart,d=this.options.dataLabels,e=p(d.connectorPadding,10),f=p(d.connectorWidth, -1),g,h,k=p(d.softConnector,!0),i=d.distance,j=this.center,l=j[2]/2,m=j[1],o=i>0,r=[[],[]],A,q,C,s,w=2,x;if(d.enabled){Z.prototype.drawDataLabels.apply(this);n(a,function(a){a.dataLabel&&r[a.labelPos[7]<Ha/2?0:1].push(a)});r[1].reverse();s=function(a,b){return b.y-a.y};for(a=r[0][0]&&r[0][0].dataLabel&&(r[0][0].dataLabel.getBBox().height||21);w--;){var D=[],u=[],H=r[w],v=H.length,t;if(i>0){for(x=m-l-i;x<=m+l+i;x+=a)D.push(x);C=D.length;if(v>C){h=[].concat(H);h.sort(s);for(x=v;x--;)h[x].rank=x;for(x= -v;x--;)H[x].rank>=C&&H.splice(x,1);v=H.length}for(x=0;x<v;x++){b=H[x];h=b.labelPos;b=9999;for(q=0;q<C;q++)g=W(D[q]-h[1]),g<b&&(b=g,t=q);if(t<x&&D[x]!==null)t=x;else for(C<v-x+t&&D[x]!==null&&(t=C-v+x);D[t]===null;)t++;u.push({i:t,y:D[t]});D[t]=null}u.sort(s)}for(x=0;x<v;x++){b=H[x];h=b.labelPos;g=b.dataLabel;C=b.visible===!1?"hidden":"visible";A=h[1];if(i>0){if(q=u.pop(),t=q.i,q=q.y,A>q&&D[t+1]!==null||A<q&&D[t-1]!==null)q=A}else q=A;A=d.justify?j[0]+(w?-1:1)*(l+i):this.getX(t===0||t===D.length-1? -A:q,w);g.attr({visibility:C,align:h[6]})[g.moved?"animate":"attr"]({x:A+d.x+({left:e,right:-e}[h[6]]||0),y:q+d.y});g.moved=!0;if(o&&f)g=b.connector,h=k?["M",A+(h[6]==="left"?5:-5),q,"C",A,q,2*h[2]-h[4],2*h[3]-h[5],h[2],h[3],"L",h[4],h[5]]:["M",A+(h[6]==="left"?5:-5),q,"L",h[2],h[3],"L",h[4],h[5]],g?(g.animate({d:h}),g.attr("visibility",C)):b.connector=g=this.chart.renderer.path(h).attr({"stroke-width":f,stroke:d.connectorColor||b.color||"#606060",visibility:C,zIndex:3}).translate(c.plotLeft,c.plotTop).add()}}}}, -drawTracker:ea.prototype.drawTracker,drawLegendSymbol:L.prototype.drawLegendSymbol,getSymbol:function(){}};P=ca(Z,P);U.pie=P;var X=Z.prototype,dc=X.processData,ec=X.generatePoints,fc=X.destroy,gc=X.tooltipHeaderFormatter,P={approximation:"average",groupPixelWidth:2,dateTimeLabelFormats:ha(fb,["%A, %b %e, %H:%M:%S.%L","%A, %b %e, %H:%M:%S.%L","-%H:%M:%S.%L"],Za,["%A, %b %e, %H:%M:%S","%A, %b %e, %H:%M:%S","-%H:%M:%S"],La,["%A, %b %e, %H:%M","%A, %b %e, %H:%M","-%H:%M"],sa,["%A, %b %e, %H:%M","%A, %b %e, %H:%M", -"-%H:%M"],fa,["%A, %b %e, %Y","%A, %b %e","-%A, %b %e, %Y"],Aa,["Week from %A, %b %e, %Y","%A, %b %e","-%A, %b %e, %Y"],Ba,["%B %Y","%B","-%B %Y"],na,["%Y","%Y","-%Y"])},Yb=[[fb,[1,2,5,10,20,25,50,100,200,500]],[Za,[1,2,5,10,15,30]],[La,[1,2,5,10,15,30]],[sa,[1,2,3,4,6,8,12]],[fa,[1]],[Aa,[1]],[Ba,[1,3,6]],[na,null]],Ua={sum:function(a){var b=a.length,c;if(!b&&a.hasNulls)c=null;else if(b)for(c=0;b--;)c+=a[b];return c},average:function(a){var b=a.length,a=Ua.sum(a);typeof a==="number"&&b&&(a/=b);return a}, -open:function(a){return a.length?a[0]:a.hasNulls?null:v},high:function(a){return a.length?Da(a):a.hasNulls?null:v},low:function(a){return a.length?Ma(a):a.hasNulls?null:v},close:function(a){return a.length?a[a.length-1]:a.hasNulls?null:v},ohlc:function(a,b,c,d){a=Ua.open(a);b=Ua.high(b);c=Ua.low(c);d=Ua.close(d);if(typeof a==="number"||typeof b==="number"||typeof c==="number"||typeof d==="number")return[a,b,c,d]}};X.groupData=function(a,b,c,d){var e=this.data,f=this.options.data,g=[],h=[],k=a.length, -i,j,l=!!b;j=[];var m=[],o=[],n=[],p=typeof d==="function"?d:Ua[d],q;for(q=0;q<=k;q++){for(;c[1]!==v&&a[q]>=c[1]||q===k;)if(i=c.shift(),j=p(j,m,o,n),j!==v&&(g.push(i),h.push(j)),j=[],m=[],o=[],n=[],q===k)break;if(q===k)break;i=l?b[q]:null;if(d==="ohlc"){i=this.cropStart+q;var t=e&&e[i]||this.pointClass.prototype.applyOptions.apply({},[f[i]]);i=t.open;var s=t.high,w=t.low,t=t.close;if(typeof i==="number")j.push(i);else if(i===null)j.hasNulls=!0;if(typeof s==="number")m.push(s);else if(s===null)m.hasNulls= -!0;if(typeof w==="number")o.push(w);else if(w===null)o.hasNulls=!0;if(typeof t==="number")n.push(t);else if(t===null)n.hasNulls=!0}else if(typeof i==="number")j.push(i);else if(i===null)j.hasNulls=!0}return[g,h]};X.processData=function(){var a=this.options,b=a.dataGrouping,c=b&&b.enabled,d;this.forceCrop=c;if(dc.apply(this,arguments)!==!1&&c){this.destroyGroupedData();var e;e=this.chart;var c=this.processedXData,f=this.processedYData,g=e.plotSizeX,h=this.xAxis,k=p(h.groupPixelWidth,b.groupPixelWidth), -i=c.length,j=e.series,l=this.pointRange;if(!h.groupPixelWidth){for(e=j.length;e--;)j[e].xAxis===h&&j[e].options.dataGrouping&&(k=t(k,j[e].options.dataGrouping.groupPixelWidth));h.groupPixelWidth=k}if(i>g/k||i&&b.forced){d=!0;this.points=null;e=h.getExtremes();i=e.min;j=e.max;e=h.getGroupIntervalFactor&&h.getGroupIntervalFactor(i,j,c)||1;g=k*(j-i)/g*e;h=(h.getNonLinearTimeTicks||gb)(Cb(g,b.units||Yb),i,j,null,c,this.closestPointRange);f=X.groupData.apply(this,[c,f,h,b.approximation]);c=f[0];f=f[1]; -if(b.smoothed){e=c.length-1;for(c[e]=j;e--&&e>0;)c[e]+=g/2;c[0]=i}this.currentDataGrouping=h.info;if(a.pointRange===null)this.pointRange=h.info.totalRange;this.closestPointRange=h.info.totalRange;this.processedXData=c;this.processedYData=f}else this.currentDataGrouping=null,this.pointRange=l;this.hasGroupedData=d}};X.destroyGroupedData=function(){var a=this.groupedData;n(a||[],function(b,c){b&&(a[c]=b.destroy?b.destroy():null)});this.groupedData=null};X.generatePoints=function(){ec.apply(this);this.destroyGroupedData(); -this.groupedData=this.hasGroupedData?this.points:null};X.tooltipHeaderFormatter=function(a){var b=this.tooltipOptions,c=this.options.dataGrouping,d=b.xDateFormat,e,f=this.xAxis,g,h;if(f&&f.options.type==="datetime"&&c){g=this.currentDataGrouping;c=c.dateTimeLabelFormats;if(g)f=c[g.unitName],g.count===1?d=f[0]:(d=f[1],e=f[2]);else if(!d)for(h in E)if(E[h]>=f.closestPointRange){d=c[h][0];break}d=ua(d,a);e&&(d+=ua(e,a+g.totalRange-1));a=b.headerFormat.replace("{point.key}",d)}else a=gc.apply(this,[a]); -return a};X.destroy=function(){for(var a=this.groupedData||[],b=a.length;b--;)a[b]&&a[b].destroy();fc.apply(this)};S.line.dataGrouping=S.spline.dataGrouping=S.area.dataGrouping=S.areaspline.dataGrouping=P;S.column.dataGrouping=y(P,{approximation:"sum",groupPixelWidth:10});S.ohlc=y(S.column,{lineWidth:1,dataGrouping:{approximation:"ohlc",enabled:!0,groupPixelWidth:5},tooltip:{pointFormat:'<span style="color:{series.color};font-weight:bold">{series.name}</span><br/>Open: {point.open}<br/>High: {point.high}<br/>Low: {point.low}<br/>Close: {point.close}<br/>'}, -states:{hover:{lineWidth:3}},threshold:null});var P=ca(xa,{applyOptions:function(a){var b=this.series,c=0;if(typeof a==="object"&&typeof a.length!=="number")z(this,a),this.options=a;else if(a.length){if(a.length===5){if(typeof a[0]==="string")this.name=a[0];else if(typeof a[0]==="number")this.x=a[0];c++}this.open=a[c++];this.high=a[c++];this.low=a[c++];this.close=a[c++]}this.y=this.high;if(this.x===v&&b)this.x=b.autoIncrement();return this},tooltipFormatter:function(){var a=this.series;return['<span style="color:'+ -a.color+';font-weight:bold">',this.name||a.name,"</span><br/>Open: ",this.open,"<br/>High: ",this.high,"<br/>Low: ",this.low,"<br/>Close: ",this.close,"<br/>"].join("")},toYData:function(){return[this.open,this.high,this.low,this.close]}}),Bb=ca(U.column,{type:"ohlc",valueCount:4,pointClass:P,pointAttrToOptions:{stroke:"color","stroke-width":"lineWidth"},translate:function(){var a=this.yAxis;U.column.prototype.translate.apply(this);n(this.points,function(b){if(b.open!==null)b.plotOpen=a.translate(b.open, -0,1,0,1);if(b.close!==null)b.plotClose=a.translate(b.close,0,1,0,1)})},drawPoints:function(){var a=this,b=a.chart,c,d,e,f,g,h,k,i;n(a.points,function(j){if(j.plotY!==v)k=j.graphic,c=j.pointAttr[j.selected?"selected":""],f=c["stroke-width"]%2/2,i=u(j.plotX)+f,g=u(j.barW/2),h=["M",i,u(j.yBottom),"L",i,u(j.plotY)],j.open!==null&&(d=u(j.plotOpen)+f,h.push("M",i,d,"L",i-g,d)),j.close!==null&&(e=u(j.plotClose)+f,h.push("M",i,e,"L",i+g,e)),k?k.animate({d:h}):j.graphic=b.renderer.path(h).attr(c).add(a.group)})}, -animate:null});U.ohlc=Bb;S.candlestick=y(S.column,{dataGrouping:{approximation:"ohlc",enabled:!0},lineColor:"black",lineWidth:1,states:{hover:{lineWidth:2}},tooltip:S.ohlc.tooltip,threshold:null,upColor:"white"});P=ca(Bb,{type:"candlestick",pointAttrToOptions:{fill:"color",stroke:"lineColor","stroke-width":"lineWidth"},getAttribs:function(){Bb.prototype.getAttribs.apply(this,arguments);var a=this.options,b=a.states,a=a.upColor,c=y(this.pointAttr);c[""].fill=a;c.hover.fill=b.hover.upColor||a;c.select.fill= -b.select.upColor||a;n(this.points,function(a){if(a.open<a.close)a.pointAttr=c})},drawPoints:function(){var a=this,b=a.chart,c,d,e,f,g,h,k,i,j,l;n(a.points,function(m){i=m.graphic;if(m.plotY!==v)c=m.pointAttr[m.selected?"selected":""],h=c["stroke-width"]%2/2,k=u(m.plotX)+h,d=u(m.plotOpen)+h,e=u(m.plotClose)+h,f=R.min(d,e),g=R.max(d,e),l=u(m.barW/2),j=["M",k-l,g,"L",k-l,f,"L",k+l,f,"L",k+l,g,"L",k-l,g,"M",k,g,"L",k,u(m.yBottom),"M",k,f,"L",k,u(m.plotY),"Z"],i?i.animate({d:j}):m.graphic=b.renderer.path(j).attr(c).add(a.group)})}}); -U.candlestick=P;var nb=qa.prototype.symbols;S.flags=y(S.column,{dataGrouping:null,fillColor:"white",lineWidth:1,pointRange:0,shape:"flag",stackDistance:7,states:{hover:{lineColor:"black",fillColor:"#FCFFC5"}},style:{fontSize:"11px",fontWeight:"bold",textAlign:"center"},threshold:null,y:-30});U.flags=ca(U.column,{type:"flags",sorted:!1,noSharedTooltip:!0,forceCrop:!0,init:Z.prototype.init,pointAttrToOptions:{fill:"fillColor",stroke:"color","stroke-width":"lineWidth",r:"radius"},translate:function(){U.column.prototype.translate.apply(this); -var a=this.chart,b=this.points,c=b.length-1,d,e,f=this.options.onSeries,f=(d=f&&a.get(f))&&d.options.step,g=d&&d.points,h=g&&g.length,k=this.xAxis.getExtremes(),i,j,l;if(d&&d.visible&&h){j=g[h-1].x;for(b.sort(function(a,b){return a.x-b.x});h--&&b[c];)if(d=b[c],i=g[h],i.x<=d.x&&i.plotY!==v){if(d.x<=j)d.plotY=i.plotY,i.x<d.x&&!f&&(l=g[h+1])&&l.plotY!==v&&(d.plotY+=(d.x-i.x)/(l.x-i.x)*(l.plotY-i.plotY));c--;h++;if(c<0)break}}n(b,function(c,d){if(c.plotY===v)c.x>=k.min&&c.x<=k.max?c.plotY=a.plotHeight: -c.shapeArgs={};if((e=b[d-1])&&e.plotX===c.plotX){if(e.stackIndex===v)e.stackIndex=0;c.stackIndex=e.stackIndex+1}})},drawPoints:function(){var a,b=this.points,c=this.chart.renderer,d,e,f=this.options,g=f.y,h=f.shape,k,i,j,l,m=f.lineWidth%2/2,o;for(j=b.length;j--;)if(l=b[j],d=l.plotX+m,i=l.stackIndex,e=l.plotY,e!==v&&(e=l.plotY+g+m-(i!==v&&i*f.stackDistance)),k=i?v:l.plotX+m,o=i?v:l.plotY,i=l.graphic,a=l.tracker,e!==v)a=l.pointAttr[l.selected?"select":""],i?i.attr({x:d,y:e,r:a.r,anchorX:k,anchorY:o}): -i=l.graphic=c.label(l.options.title||f.title||"A",d,e,h,k,o).css(y(f.style,l.style)).attr(a).attr({align:h==="flag"?"left":"center",width:f.width,height:f.height}).add(this.group).shadow(f.shadow),k=i.box,i=k.getBBox(),l.shapeArgs=z(i,{x:d-(h==="flag"?0:k.attr("width")/2),y:e});else if(i)l.graphic=i.destroy(),a&&a.attr("y",-9999)},drawTracker:function(){U.column.prototype.drawTracker.apply(this);n(this.points,function(a){B(a.tracker.element,"mouseover",function(){a.graphic.toFront()})})},tooltipFormatter:function(a){return a.point.text}, -animate:function(){}});nb.flag=function(a,b,c,d,e){var f=e&&e.anchorX||a,e=e&&e.anchorY||b;return["M",f,e,"L",a,b+d,a,b,a+c,b,a+c,b+d,a,b+d,"M",f,e,"Z"]};n(["circle","square"],function(a){nb[a+"pin"]=function(b,c,d,e,f){var g=f&&f.anchorX,f=f&&f.anchorY,b=nb[a](b,c,d,e);g&&f&&b.push("M",g,c+e,"L",g,f);return b}});Qa===Ja&&n(["flag","circlepin","squarepin"],function(a){Ja.prototype.symbols[a]=nb[a]});var ob=aa?"touchstart":"mousedown",Zb=aa?"touchmove":"mousemove",$b=aa?"touchend":"mouseup",P=ha("linearGradient", -{x1:0,y1:0,x2:0,y2:1},"stops",[[0,"#FFF"],[1,"#CCC"]]),L=[].concat(Yb);L[4]=[fa,[1,2,3,4]];L[5]=[Aa,[1,2,3]];z(T,{navigator:{handles:{backgroundColor:"#FFF",borderColor:"#666"},height:40,margin:10,maskFill:"rgba(255, 255, 255, 0.75)",outlineColor:"#444",outlineWidth:1,series:{type:"areaspline",color:"#4572A7",compare:null,fillOpacity:0.4,dataGrouping:{approximation:"average",groupPixelWidth:2,smoothed:!0,units:L},dataLabels:{enabled:!1},id:"highcharts-navigator-series",lineColor:"#4572A7",lineWidth:1, -marker:{enabled:!1},pointRange:0,shadow:!1},xAxis:{tickWidth:0,lineWidth:0,gridLineWidth:1,tickPixelInterval:200,labels:{align:"left",x:3,y:-4}},yAxis:{gridLineWidth:0,startOnTick:!1,endOnTick:!1,minPadding:0.1,maxPadding:0.1,labels:{enabled:!1},title:{text:null},tickWidth:0}},scrollbar:{height:aa?20:14,barBackgroundColor:P,barBorderRadius:2,barBorderWidth:1,barBorderColor:"#666",buttonArrowColor:"#666",buttonBackgroundColor:P,buttonBorderColor:"#666",buttonBorderRadius:2,buttonBorderWidth:1,rifleColor:"#666", -trackBackgroundColor:ha("linearGradient",{x1:0,y1:0,x2:0,y2:1},"stops",[[0,"#EEE"],[1,"#FFF"]]),trackBorderColor:"#CCC",trackBorderWidth:1}});Lb.prototype={getAxisTop:function(a){return this.navigatorOptions.top||a-this.height-this.scrollbarHeight-this.chart.options.chart.spacingBottom},drawHandle:function(a,b){var c=this.chart.renderer,d=this.elementsToDestroy,e=this.handles,f=this.navigatorOptions.handles,f={fill:f.backgroundColor,stroke:f.borderColor,"stroke-width":1},g;this.rendered||(e[b]=c.g().css({cursor:"e-resize"}).attr({zIndex:4- -b}).add(),g=c.rect(-4.5,0,9,16,3,1).attr(f).add(e[b]),d.push(g),g=c.path(["M",-1.5,4,"L",-1.5,12,"M",0.5,4,"L",0.5,12]).attr(f).add(e[b]),d.push(g));e[b].translate(this.scrollerLeft+this.scrollbarHeight+parseInt(a,10),this.top+this.height/2-8)},drawScrollbarButton:function(a){var b=this.chart.renderer,c=this.elementsToDestroy,d=this.scrollbarButtons,e=this.scrollbarHeight,f=this.scrollbarOptions,g;this.rendered||(d[a]=b.g().add(this.scrollbarGroup),g=b.rect(-0.5,-0.5,e+1,e+1,f.buttonBorderRadius, -f.buttonBorderWidth).attr({stroke:f.buttonBorderColor,"stroke-width":f.buttonBorderWidth,fill:f.buttonBackgroundColor}).add(d[a]),c.push(g),g=b.path(["M",e/2+(a?-1:1),e/2-3,"L",e/2+(a?-1:1),e/2+3,e/2+(a?2:-2),e/2]).attr({fill:f.buttonArrowColor}).add(d[a]),c.push(g));a&&d[a].attr({translateX:this.scrollerWidth-e})},render:function(a,b,c,d){var e=this.chart,f=e.renderer,g,h,k,i,j=this.scrollbarGroup,l=this.scrollbar,m=this.xAxis,o=this.scrollbarTrack,n=this.scrollbarHeight,A=this.scrollbarEnabled, -q=this.navigatorOptions,s=this.scrollbarOptions,v=this.height,w=this.top,x=this.navigatorEnabled,D=q.outlineWidth,K=D/2,H=this.outlineHeight,y=s.barBorderRadius,z=s.barBorderWidth,B=w+K;if(!isNaN(a)){this.navigatorLeft=g=p(m.left,e.plotLeft+n);this.navigatorWidth=h=p(m.len,e.plotWidth-2*n);this.scrollerLeft=k=g-n;this.scrollerWidth=i=i=h+2*n;if(m.getExtremes){var E=e.xAxis[0].getExtremes(),e=E.dataMin===null,G=m.getExtremes(),I=O(E.dataMin,G.dataMin),E=t(E.dataMax,G.dataMax);!e&&(I!==G.min||E!==G.max)&& -m.setExtremes(I,E,!0,!1)}c=p(c,m.translate(a));d=p(d,m.translate(b));this.zoomedMin=a=F(O(c,d));this.zoomedMax=d=F(t(c,d));this.range=c=d-a;if(!this.rendered){if(x)this.leftShade=f.rect().attr({fill:q.maskFill,zIndex:3}).add(),this.rightShade=f.rect().attr({fill:q.maskFill,zIndex:3}).add(),this.outline=f.path().attr({"stroke-width":D,stroke:q.outlineColor,zIndex:3}).add();if(A)this.scrollbarGroup=j=f.g().add(),l=s.trackBorderWidth,this.scrollbarTrack=o=f.rect().attr({y:-l%2/2,fill:s.trackBackgroundColor, -stroke:s.trackBorderColor,"stroke-width":l,r:s.trackBorderRadius||0,height:n}).add(j),this.scrollbar=l=f.rect().attr({y:-z%2/2,height:n,fill:s.barBackgroundColor,stroke:s.barBorderColor,"stroke-width":z,r:y}).add(j),this.scrollbarRifles=f.path().attr({stroke:s.rifleColor,"stroke-width":1}).add(j)}x&&(this.leftShade.attr({x:g,y:w,width:a,height:v}),this.rightShade.attr({x:g+d,y:w,width:h-d,height:v}),this.outline.attr({d:["M",k,B,"L",g+a+K,B,g+a+K,B+H-n,"M",g+d-K,B+H-n,"L",g+d-K,B,k+i,B]}),this.drawHandle(a+ -K,0),this.drawHandle(d+K,1));A&&(this.drawScrollbarButton(0),this.drawScrollbarButton(1),j.translate(k,u(B+v)),o.attr({width:i}),l.attr({x:u(n+a)+z%2/2,width:c-z}),f=n+a+c/2-0.5,this.scrollbarRifles.attr({d:["M",f-3,n/4,"L",f-3,2*n/3,"M",f,n/4,"L",f,2*n/3,"M",f+3,n/4,"L",f+3,2*n/3],visibility:c>12?"visible":"hidden"}));this.rendered=!0}},addEvents:function(){var a=this.chart;B(a.container,ob,this.mouseDownHandler);B(a.container,Zb,this.mouseMoveHandler);B(document,$b,this.mouseUpHandler)},removeEvents:function(){var a= -this.chart;Q(a.container,ob,this.mouseDownHandler);Q(a.container,Zb,this.mouseMoveHandler);Q(document,$b,this.mouseUpHandler);this.navigatorEnabled&&Q(this.baseSeries,"updatedData",this.updatedDataHandler)},init:function(){var a=this,b=a.chart,c,d,e=a.scrollbarHeight,f=a.navigatorOptions,g=a.height,h=a.top,k,i,j,l=document.body.style,m,o=a.baseSeries,n;a.mouseDownHandler=function(d){var d=b.tracker.normalizeMouseEvent(d),e=a.zoomedMin,f=a.zoomedMax,h=a.top,k=a.scrollbarHeight,j=a.scrollerLeft,o=a.scrollerWidth, -n=a.navigatorLeft,p=a.navigatorWidth,r=a.range,q=d.chartX,s=d.chartY,d=aa?10:7;if(s>h&&s<h+g+k)(h=!a.scrollbarEnabled||s<h+g)&&R.abs(q-e-n)<d?(a.grabbedLeft=!0,a.otherHandlePos=f):h&&R.abs(q-f-n)<d?(a.grabbedRight=!0,a.otherHandlePos=e):q>n+e&&q<n+f?(a.grabbedCenter=q,m=l.cursor,l.cursor="ew-resize",i=q-e):q>j&&q<j+o&&(f=h?q-n-r/2:q<n?e-O(10,r):q>j+o-k?e+O(10,r):q<n+e?e-r:f,f<0?f=0:f+r>p&&(f=p-r),f!==e&&b.xAxis[0].setExtremes(c.translate(f,!0),c.translate(f+r,!0),!0,!1))};a.mouseMoveHandler=function(c){var d= -a.scrollbarHeight,e=a.navigatorLeft,f=a.navigatorWidth,g=a.scrollerLeft,h=a.scrollerWidth,k=a.range,c=b.tracker.normalizeMouseEvent(c),c=c.chartX;c<e?c=e:c>g+h-d&&(c=g+h-d);a.grabbedLeft?(j=!0,a.render(0,0,c-e,a.otherHandlePos)):a.grabbedRight?(j=!0,a.render(0,0,a.otherHandlePos,c-e)):a.grabbedCenter&&(j=!0,c<i?c=i:c>f+i-k&&(c=f+i-k),a.render(0,0,c-i,c-i+k))};a.mouseUpHandler=function(){var d=a.zoomedMin,e=a.zoomedMax;j&&b.xAxis[0].setExtremes(c.translate(d,!0),c.translate(e,!0),!0,!1);a.grabbedLeft= -a.grabbedRight=a.grabbedCenter=j=i=null;l.cursor=m};a.updatedDataHandler=function(){var c=o.xAxis,d=c.getExtremes(),e=d.min,f=d.max,g=d.dataMin,d=d.dataMax,h=f-e,i,j,l,m,q;i=k.xData;var p=!!c.setExtremes;j=f>=i[i.length-1];i=e<=g;if(!n)k.options.pointStart=o.xData[0],k.setData(o.options.data,!1),q=!0;i&&(m=g,l=m+h);j&&(l=d,i||(m=t(l-h,k.xData[0])));p&&(i||j)?c.setExtremes(m,l,!0,!1):(q&&b.redraw(!1),a.render(t(e,g),O(f,d)))};var p=b.xAxis.length,q=b.yAxis.length,s=b.setSize;b.extraBottomMargin=a.outlineHeight+ -f.margin;a.top=h=a.getAxisTop(b.chartHeight);if(a.navigatorEnabled){var v=o.options,w=v.data,u=f.series;n=u.data;v.data=u.data=null;a.xAxis=c=new bb(b,y({ordinal:o.xAxis.options.ordinal},f.xAxis,{isX:!0,type:"datetime",index:p,height:g,top:h,offset:0,offsetLeft:e,offsetRight:-e,startOnTick:!1,endOnTick:!1,minPadding:0,maxPadding:0,zoomEnabled:!1}));a.yAxis=d=new bb(b,y(f.yAxis,{alignTicks:!1,height:g,top:h,offset:0,index:q,zoomEnabled:!1}));f=y(o.options,u,{threshold:null,clip:!1,enableMouseTracking:!1, -group:"nav",padXAxis:!1,xAxis:p,yAxis:q,name:"Navigator",showInLegend:!1,isInternal:!0,visible:!0});v.data=w;u.data=n;f.data=n||w;k=b.initSeries(f);B(o,"updatedData",a.updatedDataHandler)}else a.xAxis=c={translate:function(a,c){var d=b.xAxis[0].getExtremes(),f=b.plotWidth-2*e,g=d.dataMin,d=d.dataMax-g;return c?a*d/f+g:f*(a-g)/d}};a.series=k;b.setSize=function(e,f,g){a.top=h=a.getAxisTop(f);if(c&&d)c.options.top=d.options.top=h;s.call(b,e,f,g)};a.addEvents()},destroy:function(){this.removeEvents(); -n([this.xAxis,this.yAxis,this.leftShade,this.rightShade,this.outline,this.scrollbarTrack,this.scrollbarRifles,this.scrollbarGroup,this.scrollbar],function(a){a&&a.destroy&&a.destroy()});this.xAxis=this.yAxis=this.leftShade=this.rightShade=this.outline=this.scrollbarTrack=this.scrollbarRifles=this.scrollbarGroup=this.scrollbar=null;n([this.scrollbarButtons,this.handles,this.elementsToDestroy],function(a){ta(a)})}};Highcharts.Scroller=Lb;z(T,{rangeSelector:{buttonTheme:{width:28,height:16,padding:1, -r:0,zIndex:7}}});T.lang=y(T.lang,{rangeSelectorZoom:"Zoom",rangeSelectorFrom:"From:",rangeSelectorTo:"To:"});Mb.prototype={clickButton:function(a,b,c){var d=this,e=d.chart,f=d.buttons,g=e.xAxis[0],h=g&&g.getExtremes(),k=e.scroller&&e.scroller.xAxis,i=(k=k&&k.getExtremes&&k.getExtremes())&&k.dataMax,j=h&&h.dataMin,l=h&&h.dataMax,k=O(j,p(k&&k.dataMin,j)),i=t(l,p(i,l)),m,n=g&&O(h.max,i),h=new Date(n),l=b.type,j=b.count,r,s,q={millisecond:1,second:1E3,minute:6E4,hour:36E5,day:864E5,week:6048E5};if(!(k=== -null||i===null||a===d.selected))q[l]?(r=q[l]*j,m=t(n-r,k)):l==="month"?(h.setMonth(h.getMonth()-j),m=t(h.getTime(),k),r=2592E6*j):l==="ytd"?(h=new Date(0),l=new Date(i),s=l.getFullYear(),h.setFullYear(s),String(s)!==ua("%Y",h)&&h.setFullYear(s-1),m=s=t(k||0,h.getTime()),l=l.getTime(),n=O(i||l,l)):l==="year"?(h.setFullYear(h.getFullYear()-j),m=t(k,h.getTime()),r=31536E6*j):l==="all"&&g&&(m=k,n=i),f[a]&&f[a].setState(2),g?setTimeout(function(){g.setExtremes(m,n,p(c,1),0,{rangeSelectorButton:b});d.selected= -a},1):(e=e.options.xAxis,e[0]=y(e[0],{range:r,min:s}),d.selected=a)},init:function(a){var b=this,c=b.chart,d=c.options.rangeSelector,a=d.buttons||a,e=b.buttons,f=b.leftBox,g=b.rightBox,d=d.selected;c.extraTopMargin=25;b.buttonOptions=a;b.mouseDownHandler=function(){f&&f.blur();g&&g.blur()};B(c.container,ob,b.mouseDownHandler);d!==v&&a[d]&&this.clickButton(d,a[d],!1);B(c,"load",function(){B(c.xAxis[0],"afterSetExtremes",function(){e[b.selected]&&!c.renderer.forExport&&e[b.selected].setState(0);b.selected= -null})})},setInputValue:function(a,b){var c=this.chart.options.rangeSelector,c=a.hasFocus?c.inputEditDateFormat||"%Y-%m-%d":c.inputDateFormat||"%b %e, %Y";if(b)a.HCTime=b;a.value=ua(c,a.HCTime)},drawInput:function(a){var b=this,c=b.chart,d=c.options.rangeSelector,e=b.div,f=a==="min",g;b.boxSpanElements[a]=V("span",{innerHTML:T.lang[f?"rangeSelectorFrom":"rangeSelectorTo"]},d.labelStyle,e);g=V("input",{name:a,className:"highcharts-range-selector",type:"text"},z({width:"80px",height:"16px",border:"1px solid silver", -marginLeft:"5px",marginRight:f?"5px":"0",textAlign:"center"},d.inputStyle),e);g.onfocus=g.onblur=function(a){a=a||window.event||{};g.hasFocus=a.type==="focus";b.setInputValue(g)};g.onchange=function(){var a=g.value,d=Date.parse(a),e=c.xAxis[0].getExtremes();isNaN(d)&&(d=a.split("-"),d=Date.UTC(F(d[0]),F(d[1])-1,F(d[2])));if(!isNaN(d)&&(f&&d>=e.dataMin&&d<=b.rightBox.HCTime||!f&&d<=e.dataMax&&d>=b.leftBox.HCTime))c.xAxis[0].setExtremes(f?d:e.min,f?e.max:d)};return g},render:function(a,b){var c=this, -d=c.chart,e=d.renderer,f=d.container,g=d.options.rangeSelector,h=c.buttons,k=T.lang,i=c.div,i=d.options.chart.style,j=g.buttonTheme,l=g.inputEnabled!==!1,m=j&&j.states,o=d.plotLeft,p;if(!c.rendered&&(c.zoomText=e.text(k.rangeSelectorZoom,o,d.plotTop-10).css(g.labelStyle).add(),p=o+c.zoomText.getBBox().width+5,n(c.buttonOptions,function(a,b){h[b]=e.button(a.text,p,d.plotTop-25,function(){c.clickButton(b,a);c.isActive=!0},j,m&&m.hover,m&&m.select).css({textAlign:"center"}).add();p+=h[b].width+(g.buttonSpacing|| -0);c.selected===b&&h[b].setState(2)}),l))c.divRelative=i=V("div",null,{position:"relative",height:0,fontFamily:i.fontFamily,fontSize:i.fontSize,zIndex:1}),f.parentNode.insertBefore(i,f),c.divAbsolute=c.div=i=V("div",null,z({position:"absolute",top:d.plotTop-25+"px",right:d.chartWidth-d.plotLeft-d.plotWidth+"px"},g.inputBoxStyle),i),c.leftBox=c.drawInput("min"),c.rightBox=c.drawInput("max");l&&(c.setInputValue(c.leftBox,a),c.setInputValue(c.rightBox,b));c.rendered=!0},destroy:function(){var a=this.leftBox, -b=this.rightBox,c=this.boxSpanElements,d=this.divRelative,e=this.divAbsolute,f=this.zoomText;Q(this.chart.container,ob,this.mouseDownHandler);n([this.buttons],function(a){ta(a)});if(f)this.zoomText=f.destroy();if(a)a.onfocus=a.onblur=a.onchange=null;if(b)b.onfocus=b.onblur=b.onchange=null;n([a,b,c.min,c.max,e,d],function(a){Na(a)});this.leftBox=this.rightBox=this.boxSpanElements=this.div=this.divAbsolute=this.divRelative=null}};Highcharts.RangeSelector=Mb;cb.prototype.callbacks.push(function(a){function b(){f= -a.xAxis[0].getExtremes();g.render(t(f.min,f.dataMin),O(f.max,f.dataMax))}function c(){f=a.xAxis[0].getExtremes();h.render(f.min,f.max)}function d(a){g.render(a.min,a.max)}function e(a){h.render(a.min,a.max)}var f,g=a.scroller,h=a.rangeSelector;g&&(B(a.xAxis[0],"afterSetExtremes",d),B(a,"resize",b),b());h&&(B(a.xAxis[0],"afterSetExtremes",e),B(a,"resize",c),c());B(a,"destroy",function(){g&&(Q(a,"resize",b),Q(a.xAxis[0],"afterSetExtremes",d));h&&(Q(a,"resize",c),Q(a.xAxis[0],"afterSetExtremes",e))})}); -Highcharts.StockChart=function(a,b){var c=a.series,d,e={marker:{enabled:!1,states:{hover:{enabled:!0,radius:5}}},shadow:!1,states:{hover:{lineWidth:2}},dataGrouping:{enabled:!0}};a.xAxis=va(la(a.xAxis||{}),function(a){return y({minPadding:0,maxPadding:0,ordinal:!0,title:{text:null},labels:{overflow:"justify"},showLastLabel:!0},a,{type:"datetime",categories:null})});a.yAxis=va(la(a.yAxis||{}),function(a){d=a.opposite;return y({labels:{align:d?"right":"left",x:d?-2:2,y:-2},showLastLabel:!1,title:{text:null}}, -a)});a.series=null;a=y({chart:{panning:!0},navigator:{enabled:!0},scrollbar:{enabled:!0},rangeSelector:{enabled:!0},title:{text:null},tooltip:{shared:!0,crosshairs:!0},legend:{enabled:!1},plotOptions:{line:e,spline:e,area:e,areaspline:e,column:{shadow:!1,borderWidth:0,dataGrouping:{enabled:!0}}}},a,{chart:{inverted:!1}});a.series=c;return new cb(a,b)};var hc=X.init,ic=X.processData,jc=xa.prototype.tooltipFormatter;X.init=function(){hc.apply(this,arguments);var a=this.options.compare;if(a)this.modifyValue= -function(b,c){var d=this.compareValue,b=a==="value"?b-d:b=100*(b/d)-100;if(c)c.change=b;return b}};X.processData=function(){ic.apply(this,arguments);if(this.options.compare)for(var a=0,b=this.processedXData,c=this.processedYData,d=c.length,e=this.xAxis.getExtremes().min;a<d;a++)if(typeof c[a]==="number"&&b[a]>=e){this.compareValue=c[a];break}};xa.prototype.tooltipFormatter=function(a){a=a.replace("{point.change}",(this.change>0?"+":"")+Ya(this.change,this.series.tooltipOptions.changeDecimals||2)); -return jc.apply(this,[a])};(function(){var a=X.init,b=X.getSegments;X.init=function(){var b,d;a.apply(this,arguments);b=this.chart;(d=this.xAxis)&&d.options.ordinal&&B(this,"updatedData",function(){delete d.ordinalIndex});if(d&&d.options.ordinal&&!d.hasOrdinalExtension){d.hasOrdinalExtension=!0;d.beforeSetTickPositions=function(){var a,b=[],c=!1,e,i=this.getExtremes(),j=i.min,i=i.max,l;if(this.options.ordinal){n(this.series,function(c,d){if(c.visible!==!1&&(b=b.concat(c.processedXData),a=b.length, -d&&a)){b.sort(function(a,b){return a-b});for(d=a-1;d--;)b[d]===b[d+1]&&b.splice(d,1)}});a=b.length;if(a>2){e=b[1]-b[0];for(l=a-1;l--&&!c;)b[l+1]-b[l]!==e&&(c=!0)}c?(this.ordinalPositions=b,c=d.val2lin(j,!0),e=d.val2lin(i,!0),this.ordinalSlope=i=(i-j)/(e-c),this.ordinalOffset=j-c*i):this.ordinalPositions=this.ordinalSlope=this.ordinalOffset=v}};d.val2lin=function(a,b){var c=this.ordinalPositions;if(c){var d=c.length,e,j;for(e=d;e--;)if(c[e]===a){j=e;break}for(e=d-1;e--;)if(a>c[e]||e===0){c=(a-c[e])/ -(c[e+1]-c[e]);j=e+c;break}return b?j:this.ordinalSlope*(j||0)+this.ordinalOffset}else return a};d.lin2val=function(a,b){var c=this.ordinalPositions;if(c){var d=this.ordinalSlope,e=this.ordinalOffset,j=c.length-1,l,m;if(b)a<0?a=c[0]:a>j?a=c[j]:(j=$(a),m=a-j);else for(;j--;)if(l=d*j+e,a>=l){d=d*(j+1)+e;m=(a-l)/(d-l);break}return m!==v&&c[j]!==v?c[j]+(m?m*(c[j+1]-c[j]):0):a}else return a};d.getExtendedPositions=function(){var a=d.series[0].currentDataGrouping,e=d.ordinalIndex,h=a?a.count+a.unitName: -"raw",k=d.getExtremes(),i,j;if(!e)e=d.ordinalIndex={};if(!e[h])i={series:[],getExtremes:function(){return{min:k.dataMin,max:k.dataMax}},options:{ordinal:!0}},n(d.series,function(d){j={xAxis:i,xData:d.xData,chart:b,destroyGroupedData:Rb};j.options={dataGrouping:a?{enabled:!0,forced:!0,approximation:"open",units:[[a.unitName,[a.count]]]}:{enabled:!1}};d.processData.apply(j);i.series.push(j)}),d.beforeSetTickPositions.apply(i),e[h]=i.ordinalPositions;return e[h]};d.getGroupIntervalFactor=function(a, -b,c){for(var d=0,e=c.length,j=[];d<e-1;d++)j[d]=c[d+1]-c[d];j.sort(function(a,b){return a-b});c=j[$(e/2)];return e*c/(b-a)};d.postProcessTickInterval=function(a){var b=this.ordinalSlope;return b?a/(b/d.closestPointRange):a};d.getNonLinearTimeTicks=function(a,b,c,e,i,j,l){var m=0,n=0,p,t={},q,u,y,w=[],x=d.options.tickPixelInterval;if(!i||b===v)return gb(a,b,c,e);for(u=i.length;n<u;n++){y=n&&i[n-1]>c;i[n]<b&&(m=n);if(n===u-1||i[n+1]-i[n]>j*5||y)p=gb(a,i[m],i[n],e),w=w.concat(p),m=n+1;if(y)break}a=p.info; -if(l&&a.unitRange<=E[sa]){n=w.length-1;for(m=1;m<n;m++)(new Date(w[m]))[Ca]()!==(new Date(w[m-1]))[Ca]()&&(t[w[m]]=fa,q=!0);q&&(t[w[0]]=fa);a.higherRanks=t}w.info=a;if(l&&s(x)){var l=a=w.length,n=[],z;for(q=[];l--;)m=d.translate(w[l]),z&&(q[l]=z-m),n[l]=z=m;q.sort();q=q[$(q.length/2)];q<x*0.6&&(q=null);l=w[a-1]>c?a-1:a;for(z=void 0;l--;)m=n[l],c=z-m,z&&c<x*0.8&&(q===null||c<q*0.8)?(t[w[l]]&&!t[w[l+1]]?(c=l+1,z=m):c=l,w.splice(c,1)):z=m}return w};var e=b.pan;b.pan=function(a){var d=b.xAxis[0],h=!1; -if(d.options.ordinal&&d.series.length){var k=b.mouseDownX,i=d.getExtremes(),j=i.dataMax,l=i.min,m=i.max,o;o=b.hoverPoints;var p=d.closestPointRange,k=(k-a)/(d.translationSlope*(d.ordinalSlope||p)),s={ordinalPositions:d.getExtendedPositions()},q,p=d.lin2val,u=d.val2lin;if(s.ordinalPositions){if(W(k)>1)o&&n(o,function(a){a.setState()}),k<0?(o=s,s=d.ordinalPositions?d:s):o=d.ordinalPositions?d:s,q=s.ordinalPositions,j>q[q.length-1]&&q.push(j),o=p.apply(o,[u.apply(o,[l,!0])+k,!0]),k=p.apply(s,[u.apply(s, -[m,!0])+k,!0]),o>O(i.dataMin,l)&&k<t(j,m)&&d.setExtremes(o,k,!0,!1),b.mouseDownX=a,M(b.container,{cursor:"move"})}else h=!0}else h=!0;h&&e.apply(b,arguments)}}};X.getSegments=function(){var a=this,d,e=a.options.gapSize;b.apply(a);if(e)d=a.segments,n(d,function(b,g){for(var h=b.length-1;h--;)b[h+1].x-b[h].x>a.xAxis.closestPointRange*e&&d.splice(g+1,0,b.splice(h+1,b.length-h))})}})();z(Highcharts,{Axis:bb,CanVGRenderer:mb,Chart:cb,Color:wa,Legend:xb,Point:xa,Tick:ab,Tooltip:wb,Renderer:Qa,Series:Z, -SVGRenderer:qa,VMLRenderer:Ja,dateFormat:ua,pathAnim:db,getOptions:function(){return T},hasBidiBug:bc,numberFormat:Ya,seriesTypes:U,setOptions:function(a){T=y(T,a);Ib();return T},addEvent:B,removeEvent:Q,createElement:V,discardElement:Na,css:M,each:n,extend:z,map:va,merge:y,pick:p,splat:la,extendClass:ca,pInt:F,product:"Highstock",version:"1.1.6"})})(); diff --git a/plugins/redmine_monitoring_controlling/assets/javascripts/jquery.min.js b/plugins/redmine_monitoring_controlling/assets/javascripts/jquery.min.js deleted file mode 100644 index 198b3ff..0000000 --- a/plugins/redmine_monitoring_controlling/assets/javascripts/jquery.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v1.7.1 jquery.com | jquery.org/license */ -(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; -f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() -{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/plugins/redmine_monitoring_controlling/assets/javascripts/rails.js b/plugins/redmine_monitoring_controlling/assets/javascripts/rails.js deleted file mode 100755 index 2cbbeeb..0000000 --- a/plugins/redmine_monitoring_controlling/assets/javascripts/rails.js +++ /dev/null @@ -1,377 +0,0 @@ -(function($, undefined) { - -/** - * Unobtrusive scripting adapter for jQuery - * - * Requires jQuery 1.6.0 or later. - * https://github.com/rails/jquery-ujs - - * Uploading file using rails.js - * ============================= - * - * By default, browsers do not allow files to be uploaded via AJAX. As a result, if there are any non-blank file fields - * in the remote form, this adapter aborts the AJAX submission and allows the form to submit through standard means. - * - * The `ajax:aborted:file` event allows you to bind your own handler to process the form submission however you wish. - * - * Ex: - * $('form').live('ajax:aborted:file', function(event, elements){ - * // Implement own remote file-transfer handler here for non-blank file inputs passed in `elements`. - * // Returning false in this handler tells rails.js to disallow standard form submission - * return false; - * }); - * - * The `ajax:aborted:file` event is fired when a file-type input is detected with a non-blank value. - * - * Third-party tools can use this hook to detect when an AJAX file upload is attempted, and then use - * techniques like the iframe method to upload the file instead. - * - * Required fields in rails.js - * =========================== - * - * If any blank required inputs (required="required") are detected in the remote form, the whole form submission - * is canceled. Note that this is unlike file inputs, which still allow standard (non-AJAX) form submission. - * - * The `ajax:aborted:required` event allows you to bind your own handler to inform the user of blank required inputs. - * - * !! Note that Opera does not fire the form's submit event if there are blank required inputs, so this event may never - * get fired in Opera. This event is what causes other browsers to exhibit the same submit-aborting behavior. - * - * Ex: - * $('form').live('ajax:aborted:required', function(event, elements){ - * // Returning false in this handler tells rails.js to submit the form anyway. - * // The blank required inputs are passed to this function in `elements`. - * return ! confirm("Would you like to submit the form with missing info?"); - * }); - */ - - // Shorthand to make it a little easier to call public rails functions from within rails.js - var rails; - - $.rails = rails = { - // Link elements bound by jquery-ujs - linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote], a[data-disable-with]', - - // Select elements bound by jquery-ujs - inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]', - - // Form elements bound by jquery-ujs - formSubmitSelector: 'form', - - // Form input elements bound by jquery-ujs - formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not(button[type])', - - // Form input elements disabled during form submission - disableSelector: 'input[data-disable-with], button[data-disable-with], textarea[data-disable-with]', - - // Form input elements re-enabled after form submission - enableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled', - - // Form required input elements - requiredInputSelector: 'input[name][required]:not([disabled]),textarea[name][required]:not([disabled])', - - // Form file input elements - fileInputSelector: 'input:file', - - // Link onClick disable selector with possible reenable after remote submission - linkDisableSelector: 'a[data-disable-with]', - - // Make sure that every Ajax request sends the CSRF token - CSRFProtection: function(xhr) { - var token = $('meta[name="csrf-token"]').attr('content'); - if (token) xhr.setRequestHeader('X-CSRF-Token', token); - }, - - // Triggers an event on an element and returns false if the event result is false - fire: function(obj, name, data) { - var event = $.Event(name); - obj.trigger(event, data); - return event.result !== false; - }, - - // Default confirm dialog, may be overridden with custom confirm dialog in $.rails.confirm - confirm: function(message) { - return confirm(message); - }, - - // Default ajax function, may be overridden with custom function in $.rails.ajax - ajax: function(options) { - return $.ajax(options); - }, - - // Default way to get an element's href. May be overridden at $.rails.href. - href: function(element) { - return element.attr('href'); - }, - - // Submits "remote" forms and links with ajax - handleRemote: function(element) { - var method, url, data, crossDomain, dataType, options; - - if (rails.fire(element, 'ajax:before')) { - crossDomain = element.data('cross-domain') || null; - dataType = element.data('type') || ($.ajaxSettings && $.ajaxSettings.dataType); - - if (element.is('form')) { - method = element.attr('method'); - url = element.attr('action'); - data = element.serializeArray(); - // memoized value from clicked submit button - var button = element.data('ujs:submit-button'); - if (button) { - data.push(button); - element.data('ujs:submit-button', null); - } - } else if (element.is(rails.inputChangeSelector)) { - method = element.data('method'); - url = element.data('url'); - data = element.serialize(); - if (element.data('params')) data = data + "&" + element.data('params'); - } else { - method = element.data('method'); - url = rails.href(element); - data = element.data('params') || null; - } - - options = { - type: method || 'GET', data: data, dataType: dataType, crossDomain: crossDomain, - // stopping the "ajax:beforeSend" event will cancel the ajax request - beforeSend: function(xhr, settings) { - if (settings.dataType === undefined) { - xhr.setRequestHeader('accept', '*/*;q=0.5, ' + settings.accepts.script); - } - return rails.fire(element, 'ajax:beforeSend', [xhr, settings]); - }, - success: function(data, status, xhr) { - element.trigger('ajax:success', [data, status, xhr]); - }, - complete: function(xhr, status) { - element.trigger('ajax:complete', [xhr, status]); - }, - error: function(xhr, status, error) { - element.trigger('ajax:error', [xhr, status, error]); - } - }; - // Only pass url to `ajax` options if not blank - if (url) { options.url = url; } - - return rails.ajax(options); - } else { - return false; - } - }, - - // Handles "data-method" on links such as: - // <a href="/users/5" data-method="delete" rel="nofollow" data-confirm="Are you sure?">Delete</a> - handleMethod: function(link) { - var href = rails.href(link), - method = link.data('method'), - target = link.attr('target'), - csrf_token = $('meta[name=csrf-token]').attr('content'), - csrf_param = $('meta[name=csrf-param]').attr('content'), - form = $('<form method="post" action="' + href + '"></form>'), - metadata_input = '<input name="_method" value="' + method + '" type="hidden" />'; - - if (csrf_param !== undefined && csrf_token !== undefined) { - metadata_input += '<input name="' + csrf_param + '" value="' + csrf_token + '" type="hidden" />'; - } - - if (target) { form.attr('target', target); } - - form.hide().append(metadata_input).appendTo('body'); - form.submit(); - }, - - /* Disables form elements: - - Caches element value in 'ujs:enable-with' data store - - Replaces element text with value of 'data-disable-with' attribute - - Sets disabled property to true - */ - disableFormElements: function(form) { - form.find(rails.disableSelector).each(function() { - var element = $(this), method = element.is('button') ? 'html' : 'val'; - element.data('ujs:enable-with', element[method]()); - element[method](element.data('disable-with')); - element.prop('disabled', true); - }); - }, - - /* Re-enables disabled form elements: - - Replaces element text with cached value from 'ujs:enable-with' data store (created in `disableFormElements`) - - Sets disabled property to false - */ - enableFormElements: function(form) { - form.find(rails.enableSelector).each(function() { - var element = $(this), method = element.is('button') ? 'html' : 'val'; - if (element.data('ujs:enable-with')) element[method](element.data('ujs:enable-with')); - element.prop('disabled', false); - }); - }, - - /* For 'data-confirm' attribute: - - Fires `confirm` event - - Shows the confirmation dialog - - Fires the `confirm:complete` event - - Returns `true` if no function stops the chain and user chose yes; `false` otherwise. - Attaching a handler to the element's `confirm` event that returns a `falsy` value cancels the confirmation dialog. - Attaching a handler to the element's `confirm:complete` event that returns a `falsy` value makes this function - return false. The `confirm:complete` event is fired whether or not the user answered true or false to the dialog. - */ - allowAction: function(element) { - var message = element.data('confirm'), - answer = false, callback; - if (!message) { return true; } - - if (rails.fire(element, 'confirm')) { - answer = rails.confirm(message); - callback = rails.fire(element, 'confirm:complete', [answer]); - } - return answer && callback; - }, - - // Helper function which checks for blank inputs in a form that match the specified CSS selector - blankInputs: function(form, specifiedSelector, nonBlank) { - var inputs = $(), input, - selector = specifiedSelector || 'input,textarea'; - form.find(selector).each(function() { - input = $(this); - // Collect non-blank inputs if nonBlank option is true, otherwise, collect blank inputs - if (nonBlank ? input.val() : !input.val()) { - inputs = inputs.add(input); - } - }); - return inputs.length ? inputs : false; - }, - - // Helper function which checks for non-blank inputs in a form that match the specified CSS selector - nonBlankInputs: function(form, specifiedSelector) { - return rails.blankInputs(form, specifiedSelector, true); // true specifies nonBlank - }, - - // Helper function, needed to provide consistent behavior in IE - stopEverything: function(e) { - $(e.target).trigger('ujs:everythingStopped'); - e.stopImmediatePropagation(); - return false; - }, - - // find all the submit events directly bound to the form and - // manually invoke them. If anyone returns false then stop the loop - callFormSubmitBindings: function(form, event) { - var events = form.data('events'), continuePropagation = true; - if (events !== undefined && events['submit'] !== undefined) { - $.each(events['submit'], function(i, obj){ - if (typeof obj.handler === 'function') return continuePropagation = obj.handler(event); - }); - } - return continuePropagation; - }, - - // replace element's html with the 'data-disable-with' after storing original html - // and prevent clicking on it - disableElement: function(element) { - element.data('ujs:enable-with', element.html()); // store enabled state - element.html(element.data('disable-with')); // set to disabled state - element.bind('click.railsDisable', function(e) { // prevent further clicking - return rails.stopEverything(e) - }); - }, - - // restore element to its original state which was disabled by 'disableElement' above - enableElement: function(element) { - if (element.data('ujs:enable-with') !== undefined) { - element.html(element.data('ujs:enable-with')); // set to old enabled state - // this should be element.removeData('ujs:enable-with') - // but, there is currently a bug in jquery which makes hyphenated data attributes not get removed - element.data('ujs:enable-with', false); // clean up cache - } - element.unbind('click.railsDisable'); // enable element - } - - }; - - $.ajaxPrefilter(function(options, originalOptions, xhr){ if ( !options.crossDomain ) { rails.CSRFProtection(xhr); }}); - - $(document).delegate(rails.linkDisableSelector, 'ajax:complete', function() { - rails.enableElement($(this)); - }); - - $(document).delegate(rails.linkClickSelector, 'click.rails', function(e) { - var link = $(this), method = link.data('method'), data = link.data('params'); - if (!rails.allowAction(link)) return rails.stopEverything(e); - - if (link.is(rails.linkDisableSelector)) rails.disableElement(link); - - if (link.data('remote') !== undefined) { - if ( (e.metaKey || e.ctrlKey) && (!method || method === 'GET') && !data ) { return true; } - - if (rails.handleRemote(link) === false) { rails.enableElement(link); } - return false; - - } else if (link.data('method')) { - rails.handleMethod(link); - return false; - } - }); - - $(document).delegate(rails.inputChangeSelector, 'change.rails', function(e) { - var link = $(this); - if (!rails.allowAction(link)) return rails.stopEverything(e); - - rails.handleRemote(link); - return false; - }); - - $(document).delegate(rails.formSubmitSelector, 'submit.rails', function(e) { - var form = $(this), - remote = form.data('remote') !== undefined, - blankRequiredInputs = rails.blankInputs(form, rails.requiredInputSelector), - nonBlankFileInputs = rails.nonBlankInputs(form, rails.fileInputSelector); - - if (!rails.allowAction(form)) return rails.stopEverything(e); - - // skip other logic when required values are missing or file upload is present - if (blankRequiredInputs && form.attr("novalidate") == undefined && rails.fire(form, 'ajax:aborted:required', [blankRequiredInputs])) { - return rails.stopEverything(e); - } - - if (remote) { - if (nonBlankFileInputs) { - return rails.fire(form, 'ajax:aborted:file', [nonBlankFileInputs]); - } - - // If browser does not support submit bubbling, then this live-binding will be called before direct - // bindings. Therefore, we should directly call any direct bindings before remotely submitting form. - if (!$.support.submitBubbles && $().jquery < '1.7' && rails.callFormSubmitBindings(form, e) === false) return rails.stopEverything(e); - - rails.handleRemote(form); - return false; - - } else { - // slight timeout so that the submit button gets properly serialized - setTimeout(function(){ rails.disableFormElements(form); }, 13); - } - }); - - $(document).delegate(rails.formInputClickSelector, 'click.rails', function(event) { - var button = $(this); - - if (!rails.allowAction(button)) return rails.stopEverything(event); - - // register the pressed submit button - var name = button.attr('name'), - data = name ? {name:name, value:button.val()} : null; - - button.closest('form').data('ujs:submit-button', data); - }); - - $(document).delegate(rails.formSubmitSelector, 'ajax:beforeSend.rails', function(event) { - if (this == event.target) rails.disableFormElements($(this)); - }); - - $(document).delegate(rails.formSubmitSelector, 'ajax:complete.rails', function(event) { - if (this == event.target) rails.enableFormElements($(this)); - }); - -})( jQuery ); diff --git a/plugins/redmine_monitoring_controlling/assets/javascripts/thickbox.js b/plugins/redmine_monitoring_controlling/assets/javascripts/thickbox.js deleted file mode 100644 index 4e8a1b1..0000000 --- a/plugins/redmine_monitoring_controlling/assets/javascripts/thickbox.js +++ /dev/null @@ -1,320 +0,0 @@ -/* - * Thickbox 3.1 - One Box To Rule Them All. - * By Cody Lindley (http://www.codylindley.com) - * Copyright (c) 2007 cody lindley - * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php -*/ - -var tb_pathToImage = "/plugin_assets/redmine_monitoring_controlling/images/loadingAnimation.gif"; -var TB_closelabel = 'x'; - -/*!!!!!!!!!!!!!!!!! edit below this line at your own risk !!!!!!!!!!!!!!!!!!!!!!!*/ - -//on page load call tb_init -$(document).ready(function(){ - tb_init('a.thickbox, area.thickbox, input.thickbox');//pass where to apply thickbox - imgLoader = new Image();// preload image - imgLoader.src = tb_pathToImage; -}); - -//add thickbox to href & area elements that have a class of .thickbox -function tb_init(domChunk){ - $(domChunk).click(function(){ - var t = this.title || this.name || null; - var a = this.href || this.alt; - var g = this.rel || false; - tb_show(t,a,g); - this.blur(); - return false; - }); -} - -function tb_show(caption, url, imageGroup) {//function called when the user clicks on a thickbox link - - try { - if (typeof document.body.style.maxHeight === "undefined") {//if IE 6 - $("body","html").css({height: "100%", width: "100%"}); - $("html").css("overflow","hidden"); - if (document.getElementById("TB_HideSelect") === null) {//iframe to hide select elements in ie6 - $("body").append("<iframe id='TB_HideSelect'></iframe><div id='TB_overlay'></div><div id='TB_window'></div>"); - $("#TB_overlay").click(tb_remove); - } - }else{//all others - if(document.getElementById("TB_overlay") === null){ - $("body").append("<div id='TB_overlay'></div><div id='TB_window'></div>"); - $("#TB_overlay").click(tb_remove); - } - } - - if(tb_detectMacXFF()){ - $("#TB_overlay").addClass("TB_overlayMacFFBGHack");//use png overlay so hide flash - }else{ - $("#TB_overlay").addClass("TB_overlayBG");//use background and opacity - } - - if(caption===null){caption="";} - $("body").append("<div id='TB_load'><img src='"+imgLoader.src+"' /></div>");//add loader to the page - $('#TB_load').show();//show loader - - var baseURL; - if(url.indexOf("?")!==-1){ //ff there is a query string involved - baseURL = url.substr(0, url.indexOf("?")); - }else{ - baseURL = url; - } - - var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/; - var urlType = baseURL.toLowerCase().match(urlString); - - if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp'){//code to show images - - TB_PrevCaption = ""; - TB_PrevURL = ""; - TB_PrevHTML = ""; - TB_NextCaption = ""; - TB_NextURL = ""; - TB_NextHTML = ""; - TB_imageCount = ""; - TB_FoundURL = false; - if(imageGroup){ - TB_TempArray = $("a[@rel="+imageGroup+"]").get(); - for (TB_Counter = 0; ((TB_Counter < TB_TempArray.length) && (TB_NextHTML === "")); TB_Counter++) { - var urlTypeTemp = TB_TempArray[TB_Counter].href.toLowerCase().match(urlString); - if (!(TB_TempArray[TB_Counter].href == url)) { - if (TB_FoundURL) { - TB_NextCaption = TB_TempArray[TB_Counter].title; - TB_NextURL = TB_TempArray[TB_Counter].href; - TB_NextHTML = "<span id='TB_next'> <a href='#'>Next ></a></span>"; - } else { - TB_PrevCaption = TB_TempArray[TB_Counter].title; - TB_PrevURL = TB_TempArray[TB_Counter].href; - TB_PrevHTML = "<span id='TB_prev'> <a href='#'>< Prev</a></span>"; - } - } else { - TB_FoundURL = true; - TB_imageCount = "Image " + (TB_Counter + 1) +" of "+ (TB_TempArray.length); - } - } - } - - imgPreloader = new Image(); - imgPreloader.onload = function(){ - imgPreloader.onload = null; - - // Resizing large images - orginal by Christian Montoya edited by me. - var pagesize = tb_getPageSize(); - var x = pagesize[0] - 150; - var y = pagesize[1] - 150; - var imageWidth = imgPreloader.width; - var imageHeight = imgPreloader.height; - if (imageWidth > x) { - imageHeight = imageHeight * (x / imageWidth); - imageWidth = x; - if (imageHeight > y) { - imageWidth = imageWidth * (y / imageHeight); - imageHeight = y; - } - } else if (imageHeight > y) { - imageWidth = imageWidth * (y / imageHeight); - imageHeight = y; - if (imageWidth > x) { - imageHeight = imageHeight * (x / imageWidth); - imageWidth = x; - } - } - // End Resizing - - TB_WIDTH = imageWidth + 30; - TB_HEIGHT = imageHeight + 60; - $("#TB_window").append("<a href='' id='TB_ImageOff' title='Close'><img id='TB_Image' src='"+url+"' width='"+imageWidth+"' height='"+imageHeight+"' alt='"+caption+"'/></a>" + "<div id='TB_caption'>"+caption+"<div id='TB_secondLine'>" + TB_imageCount + TB_PrevHTML + TB_NextHTML + "</div></div><div id='TB_closeWindow'><a href='#' id='TB_closeWindowButton' title='Close'>"+TB_closelabel+"</a></div>"); - - $("#TB_closeWindowButton").click(tb_remove); - - if (!(TB_PrevHTML === "")) { - function goPrev(){ - if($(document).unbind("click",goPrev)){$(document).unbind("click",goPrev);} - $("#TB_window").remove(); - $("body").append("<div id='TB_window'></div>"); - tb_show(TB_PrevCaption, TB_PrevURL, imageGroup); - return false; - } - $("#TB_prev").click(goPrev); - } - - if (!(TB_NextHTML === "")) { - function goNext(){ - $("#TB_window").remove(); - $("body").append("<div id='TB_window'></div>"); - tb_show(TB_NextCaption, TB_NextURL, imageGroup); - return false; - } - $("#TB_next").click(goNext); - - } - - document.onkeydown = function(e){ - if (e == null) { // ie - keycode = event.keyCode; - } else { // mozilla - keycode = e.which; - } - if(keycode == 27){ // close - tb_remove(); - } else if(keycode == 190){ // display previous image - if(!(TB_NextHTML == "")){ - document.onkeydown = ""; - goNext(); - } - } else if(keycode == 188){ // display next image - if(!(TB_PrevHTML == "")){ - document.onkeydown = ""; - goPrev(); - } - } - }; - - tb_position(); - $("#TB_load").remove(); - $("#TB_ImageOff").click(tb_remove); - $("#TB_window").css({display:"block"}); //for safari using css instead of show - }; - - imgPreloader.src = url; - }else{//code to show html - - var queryString = url.replace(/^[^\?]+\??/,''); - var params = tb_parseQuery( queryString ); - - TB_WIDTH = (params['width']*1) + 30 || 630; //defaults to 630 if no paramaters were added to URL - TB_HEIGHT = (params['height']*1) + 40 || 440; //defaults to 440 if no paramaters were added to URL - ajaxContentW = TB_WIDTH - 30; - ajaxContentH = TB_HEIGHT - 45; - - if(url.indexOf('TB_iframe') != -1){// either iframe or ajax window - urlNoQuery = url.split('TB_'); - $("#TB_iframeContent").remove(); - if(params['modal'] != "true"){//iframe no modal - $("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton' title='Close'>"+TB_closelabel+"</a></div></div><iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;' > </iframe>"); - }else{//iframe modal - $("#TB_overlay").unbind(); - $("#TB_window").append("<iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;'> </iframe>"); - } - }else{// not an iframe, ajax - if($("#TB_window").css("display") != "block"){ - if(params['modal'] != "true"){//ajax no modal - $("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton'>"+TB_closelabel+"</a></div></div><div id='TB_ajaxContent' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px'></div>"); - }else{//ajax modal - $("#TB_overlay").unbind(); - $("#TB_window").append("<div id='TB_ajaxContent' class='TB_modal' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px;'></div>"); - } - }else{//this means the window is already up, we are just loading new content via ajax - $("#TB_ajaxContent")[0].style.width = ajaxContentW +"px"; - $("#TB_ajaxContent")[0].style.height = ajaxContentH +"px"; - $("#TB_ajaxContent")[0].scrollTop = 0; - $("#TB_ajaxWindowTitle").html(caption); - } - } - - $("#TB_closeWindowButton").click(tb_remove); - - if(url.indexOf('TB_inline') != -1){ - $("#TB_ajaxContent").append($('#' + params['inlineId']).children()); - $("#TB_window").unload(function () { - $('#' + params['inlineId']).append( $("#TB_ajaxContent").children() ); // move elements back when you're finished - }); - tb_position(); - $("#TB_load").remove(); - $("#TB_window").css({display:"block"}); - }else if(url.indexOf('TB_iframe') != -1){ - tb_position(); - if($.browser.safari){//safari needs help because it will not fire iframe onload - $("#TB_load").remove(); - $("#TB_window").css({display:"block"}); - } - }else{ - $("#TB_ajaxContent").load(url += "&random=" + (new Date().getTime()),function(){//to do a post change this load method - tb_position(); - $("#TB_load").remove(); - tb_init("#TB_ajaxContent a.thickbox"); - $("#TB_window").css({display:"block"}); - }); - } - - } - - if(!params['modal']){ - document.onkeyup = function(e){ - if (e == null) { // ie - keycode = event.keyCode; - } else { // mozilla - keycode = e.which; - } - if(keycode == 27){ // close - tb_remove(); - } - }; - } - - } catch(e) { - //nothing here - } -} - -//helper functions below -function tb_showIframe(){ - $("#TB_load").remove(); - $("#TB_window").css({display:"block"}); -} - -function tb_remove() { - $("#TB_imageOff").unbind("click"); - $("#TB_closeWindowButton").unbind("click"); - $("#TB_window").fadeOut("fast",function(){$('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove();}); - $("#TB_load").remove(); - if (typeof document.body.style.maxHeight == "undefined") {//if IE 6 - $("body","html").css({height: "auto", width: "auto"}); - $("html").css("overflow",""); - } - document.onkeydown = ""; - document.onkeyup = ""; - return false; -} - -function tb_position() { -$("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'}); - if ( !(jQuery.browser.msie && jQuery.browser.version < 7)) { // take away IE6 - $("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'}); - } -} - -function tb_parseQuery ( query ) { - var Params = {}; - if ( ! query ) {return Params;}// return empty object - var Pairs = query.split(/[;&]/); - for ( var i = 0; i < Pairs.length; i++ ) { - var KeyVal = Pairs[i].split('='); - if ( ! KeyVal || KeyVal.length != 2 ) {continue;} - var key = unescape( KeyVal[0] ); - var val = unescape( KeyVal[1] ); - val = val.replace(/\+/g, ' '); - Params[key] = val; - } - return Params; -} - -function tb_getPageSize(){ - var de = document.documentElement; - var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth; - var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight; - arrayPageSize = [w,h]; - return arrayPageSize; -} - -function tb_detectMacXFF() { - var userAgent = navigator.userAgent.toLowerCase(); - if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) { - return true; - } -} - - diff --git a/plugins/redmine_monitoring_controlling/assets/stylesheets/monitoringcontrolling.css b/plugins/redmine_monitoring_controlling/assets/stylesheets/monitoringcontrolling.css deleted file mode 100644 index 7e24afb..0000000 --- a/plugins/redmine_monitoring_controlling/assets/stylesheets/monitoringcontrolling.css +++ /dev/null @@ -1,77 +0,0 @@ -#menu ul { - padding:5px; - margin:0 auto; - float: left; - width: 100%; - background-color:#EDEDED; - list-style:none; - text-align: center; -} - -#menu ul li { display: inline;} - -#menu ul li a { - padding: 2px 10px; - float:left; - /* visual do link */ - background-color:#EDEDED; - color: #333; - text-decoration: none; - border-bottom:3px solid #EDEDED; -} - -#menu ul li a:hover { - background-color:#D6D6D6; - color: #6D6D6D; - border-bottom:3px solid #EA0000; -} - -#menu ul li a:active { - background-color: #EDEDED; - color: #6D6D6D; - border-bottom:3px solid #EA0000; -} - -#menu ul li a.menu_selected { - padding: 2px 10px; - color: #333; - background-color:#D6D6D6; - color: #6D6D6D; - border-bottom:3px solid #0066FF; -} - -div.central_charts { - margin-top: 40px; -} - -div.central_chart { - min-width: 520px; - height: 400px; - margin: 0 auto; -} - -div.double_charts { - margin-top: 5px; - float: left; -} - -div.double_chart { - min-width: 520px; - height: 400px; - margin: 0 auto; - float: left; -} - -div.mini_chart { - min-width: 350px; - height: 400px; - margin: 0 auto; - float: left; -} - -div.mini_chart_note { - min-width: 150px; - height: 400px; - margin: 0 auto; - float: left; -} diff --git a/plugins/redmine_monitoring_controlling/assets/stylesheets/thickbox.css b/plugins/redmine_monitoring_controlling/assets/stylesheets/thickbox.css deleted file mode 100644 index d24b9be..0000000 --- a/plugins/redmine_monitoring_controlling/assets/stylesheets/thickbox.css +++ /dev/null @@ -1,163 +0,0 @@ -/* ----------------------------------------------------------------------------------------------------------------*/ -/* ---------->>> global settings needed for thickbox <<<-----------------------------------------------------------*/ -/* ----------------------------------------------------------------------------------------------------------------*/ -*{padding: 0; margin: 0;} - -/* ----------------------------------------------------------------------------------------------------------------*/ -/* ---------->>> thickbox specific link and font settings <<<------------------------------------------------------*/ -/* ----------------------------------------------------------------------------------------------------------------*/ -#TB_window { - font: 12px Arial, Helvetica, sans-serif; - color: #333333; -} - -#TB_secondLine { - font: 10px Arial, Helvetica, sans-serif; - color:#666666; -} - -#TB_window a:link {color: #666666;} -#TB_window a:visited {color: #666666;} -#TB_window a:hover {color: #000;} -#TB_window a:active {color: #666666;} -#TB_window a:focus{color: #666666;} - -/* ----------------------------------------------------------------------------------------------------------------*/ -/* ---------->>> thickbox settings <<<-----------------------------------------------------------------------------*/ -/* ----------------------------------------------------------------------------------------------------------------*/ -#TB_overlay { - position: fixed; - z-index:100; - top: 0px; - left: 0px; - height:100%; - width:100%; -} - -.TB_overlayMacFFBGHack {background: url(macFFBgHack.png) repeat;} -.TB_overlayBG { - background-color:#000; - filter:alpha(opacity=75); - -moz-opacity: 0.75; - opacity: 0.75; -} - -* html #TB_overlay { /* ie6 hack */ - position: absolute; - height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'); -} - -#TB_window { - position: fixed; - background: #ffffff; - z-index: 102; - color:#000000; - display:none; - border: 4px solid #525252; - text-align:left; - top:50%; - left:50%; -} - -* html #TB_window { /* ie6 hack */ -position: absolute; -margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); -} - -#TB_window img#TB_Image { - display:block; - margin: 15px 0 0 15px; - border-right: 1px solid #ccc; - border-bottom: 1px solid #ccc; - border-top: 1px solid #666; - border-left: 1px solid #666; -} - -#TB_caption{ - height:25px; - padding:7px 30px 10px 25px; - float:left; -} - -#TB_closeWindow{ - height:25px; - padding:11px 25px 10px 0; - float:right; -} - -#TB_closeAjaxWindow{ - padding:7px 10px 5px 0; - margin-bottom:1px; - text-align:right; - float:right; -} - -#TB_ajaxWindowTitle{ - float:left; - padding:7px 0 5px 10px; - margin-bottom:1px; -} - -#TB_title{ - background-color:#e8e8e8; - height:27px; -} - -#TB_ajaxContent{ - clear:both; - padding:2px 15px 15px 15px; - overflow:auto; - text-align:left; - line-height:1.4em; -} - -#TB_ajaxContent.TB_modal{ - padding:15px; -} - -#TB_ajaxContent p{ - padding:5px 0px 5px 0px; -} - -#TB_load{ - position: fixed; - display:none; - height:13px; - width:208px; - z-index:103; - top: 50%; - left: 50%; - margin: -6px 0 0 -104px; /* -height/2 0 0 -width/2 */ -} - -* html #TB_load { /* ie6 hack */ -position: absolute; -margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); -} - -#TB_HideSelect{ - z-index:99; - position:fixed; - top: 0; - left: 0; - background-color:#fff; - border:none; - filter:alpha(opacity=0); - -moz-opacity: 0; - opacity: 0; - height:100%; - width:100%; -} - -* html #TB_HideSelect { /* ie6 hack */ - position: absolute; - height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'); -} - -#TB_iframeContent{ - clear:both; - border:none; - margin-bottom:-1px; - margin-top:1px; - _margin-bottom:1px; -} diff --git a/plugins/redmine_monitoring_controlling/config/locales/de.yml b/plugins/redmine_monitoring_controlling/config/locales/de.yml deleted file mode 100644 index 309cf44..0000000 --- a/plugins/redmine_monitoring_controlling/config/locales/de.yml +++ /dev/null @@ -1,57 +0,0 @@ -de: - #menu - mc_tasksmgmt_menu_label: "Aufgaben verwalten" - mc_timemgmt_menu_label: "Zeitverwaltung" - mc_humanresourcemgmt_menu_label: "Human Resource verwalten" - - #permissions - permission_view_home_monitoring_controlling: "M&C Aufgabenverwaltung anzeigen" - permission_view_mc_time_mgmt_project: "M&C Zeitverwaltung anzeigen" - permission_view_mc_human_resource_mgmt_project: "M&C Human Resources anzeigen" - - monitoring_controlling_title: "Scrum Statistik" - project_module_monitoring_controlling_project: "Monitoring & Controlling by Project" - monitoring_controlling_project: "Monitoring & Controlling by Project" - statuses_issue_label_title: "Aufgaben nach Status" - categories_issue_label_title: "Aufgaben nach Kategorie" - - task_management_label_title: "Ausgabenverwaltung" - task_manageable_chart_title: "Überschaubare Aufgaben" - task_manageable_chart_overdue_title: "Überfällige Aufgaben" - - manageable_label: "Manageable(s)" - unmanageable_label: "Unmanageable(s)" - manageable_text_tip: "Aufgabe mit Abgabedatum." - unmanageable_text_tip: "Aufgaben ohne Abgabedatum." - - tasks_label: "Aufgabe(n)" - tasksof_label: "Aufgabe(n) von" - - overdue_label: "Überfällig" - overdue_text: "überfällig(e)" - delivered_label: "Ausgeliefert" - tobedelivered_label: "Auszuliefern am" - days_late_text: "Tag(e) verpätet" - - close_label: "schliessen" - - # date format - default_date_format: "%d.%m.%Y" - - # time management screen - time_mgmt_label_title: "Fällige Stunden und aufgewendete Stunden" - time_mgmt_areaspline_yaxis_label: "Zeit (Stunden)" - time_mgmt_estimated_label: "Geschätzt" - time_mgmt_spent_label: "Abgelaufen" - time_mgmt_hours_label: "Stunde(n)" - time_mgmt_error_no_issues_found_text: "Keine Tickets gefunden." - time_mgmt_error_no_issues_duedate_found_text: "Keine Tickets mit Abgabedatum gefunden." - time_mgmt_version_label_title: "Versionen nach Stunden" - - # human resource management - hr_mgmt_label_title: "Human Resources Verwaltung" - hr_unassigned_issue_label: "nicht zugeordnet" - hr_columnbar_title_label: "Tickets nach Zugehörigkeit" - hr_columnbar_yaxis_label: "Anzahl der Tickets" - hr_stackedcolumnbar_title_label: "Zugehörigkeit und Tickets by situation" - hr_stackedcolumnbar_yaxis_label: "Anzahl der Tickets" \ No newline at end of file diff --git a/plugins/redmine_monitoring_controlling/config/locales/en.yml b/plugins/redmine_monitoring_controlling/config/locales/en.yml deleted file mode 100644 index 0cc5538..0000000 --- a/plugins/redmine_monitoring_controlling/config/locales/en.yml +++ /dev/null @@ -1,57 +0,0 @@ -en: - #menu - mc_tasksmgmt_menu_label: "Tasks Management" - mc_timemgmt_menu_label: "Time Management" - mc_humanresourcemgmt_menu_label: "Human Resource Management" - - #permissions - permission_view_home_monitoring_controlling: "View M&C Tasks Management" - permission_view_mc_time_mgmt_project: "View M&C Time Management" - permission_view_mc_human_resource_mgmt_project: "View M&C Human Resource Management" - - monitoring_controlling_title: "Monitoring & Controlling" - project_module_monitoring_controlling_project: "Monitoring & Controlling by Project" - monitoring_controlling_project: "Monitoring & Controlling by Project" - statuses_issue_label_title: "Tasks by Statuses" - categories_issue_label_title: "Tasks by Category" - - task_management_label_title: "Tasks Management" - task_manageable_chart_title: "Manageable Tasks" - task_manageable_chart_overdue_title: "Overdue Tasks" - - manageable_label: "Manageable(s)" - unmanageable_label: "Unmanageable(s)" - manageable_text_tip: "Tasks with due date." - unmanageable_text_tip: "Tasks without due date." - - tasks_label: "task(s)" - tasksof_label: "task(s) of" - - overdue_label: "Overdue" - overdue_text: "overdue(s)" - delivered_label: "Delivered" - tobedelivered_label: "To be delivered" - days_late_text: "day(s) late" - - close_label: "close" - - # date format - default_date_format: "%Y/%m/%d" - - # time management screen - time_mgmt_label_title: "Due hours and Spent hours" - time_mgmt_areaspline_yaxis_label: "Time (hours)" - time_mgmt_estimated_label: "Estimated" - time_mgmt_spent_label: "Executed" - time_mgmt_hours_label: "hour(s)" - time_mgmt_error_no_issues_found_text: "No issues were found." - time_mgmt_error_no_issues_duedate_found_text: "No issues with due date registered were found." - time_mgmt_version_label_title: "Versions by Hours" - - # human resource management - hr_mgmt_label_title: "Human Resource Management" - hr_unassigned_issue_label: "unassigned" - hr_columnbar_title_label: "Issues by Assignee" - hr_columnbar_yaxis_label: "Count of Issues" - hr_stackedcolumnbar_title_label: "Assignee and issues by situation" - hr_stackedcolumnbar_yaxis_label: "Count of Issues" \ No newline at end of file diff --git a/plugins/redmine_monitoring_controlling/config/locales/fr.yml b/plugins/redmine_monitoring_controlling/config/locales/fr.yml deleted file mode 100644 index 9c2e823..0000000 --- a/plugins/redmine_monitoring_controlling/config/locales/fr.yml +++ /dev/null @@ -1,57 +0,0 @@ -fr: - #menu - mc_tasksmgmt_menu_label: "Gestion des tâches" - mc_timemgmt_menu_label: "Gestion du temps" - mc_humanresourcemgmt_menu_label: "Gestion des ressources humaines" - - #permissions - permission_view_home_monitoring_controlling: "Voir Gestion des tâches" - permission_view_mc_time_mgmt_project: "Voir Gestion du temps" - permission_view_mc_human_resource_mgmt_project: "Voir Gestion des ressources humaines " - - monitoring_controlling_title: "Statistiques" - project_module_monitoring_controlling_project: "Statistiques par Projet" - monitoring_controlling_project: "Statistiques par Projet" - statuses_issue_label_title: "Tâches par statut" - categories_issue_label_title: "Tâches par catégorie" - - task_management_label_title: "Gestion des tâches" - task_manageable_chart_title: "Tâches gérées" - task_manageable_chart_overdue_title: "Tâches en retard" - - manageable_label: "Géré(s)" - unmanageable_label: "Ingérable(s)" - manageable_text_tip: "Tâches avec une date de fin." - unmanageable_text_tip: "Tâches sans date de fin." - - tasks_label: "tâche(s)" - tasksof_label: "tâche(s) de" - - overdue_label: "En retard" - overdue_text: "Retard(s)" - delivered_label: "Livré" - tobedelivered_label: "En cours de livraison" - days_late_text: "jour(s) de retard" - - close_label: "Terminé" - - # date format - default_date_format: "%d/%m/%Y" - - # time management screen - time_mgmt_label_title: "Temps estimé et réalisé" - time_mgmt_areaspline_yaxis_label: "Temps (heures)" - time_mgmt_estimated_label: "Estimé" - time_mgmt_spent_label: "Réalisé" - time_mgmt_hours_label: "heure(s)" - time_mgmt_error_no_issues_found_text: "No issues were found." - time_mgmt_error_no_issues_duedate_found_text: "Aucune demande avec une date de fin n'a été trouvée." - time_mgmt_version_label_title: "Versions by Hours" - - # human resource management - hr_mgmt_label_title: "Gestion des ressources humaines" - hr_unassigned_issue_label: "Non assignée" - hr_columnbar_title_label: "Demandes assignées" - hr_columnbar_yaxis_label: "Nombre de demandes" - hr_stackedcolumnbar_title_label: "Assignés et demandes par états" - hr_stackedcolumnbar_yaxis_label: "Nombre de demandes" \ No newline at end of file diff --git a/plugins/redmine_monitoring_controlling/config/locales/pl.yml b/plugins/redmine_monitoring_controlling/config/locales/pl.yml deleted file mode 100644 index 925224f..0000000 --- a/plugins/redmine_monitoring_controlling/config/locales/pl.yml +++ /dev/null @@ -1,57 +0,0 @@ -pl: - #menu - mc_tasksmgmt_menu_label: "Notki" - mc_timemgmt_menu_label: "Czas" - mc_humanresourcemgmt_menu_label: "Zasoby ludzkie" - - #permissions - permission_view_home_monitoring_controlling: "Przeglądanie statystyk zadań" - permission_view_mc_time_mgmt_project: "Przeglądanie statystyk czasu" - permission_view_mc_human_resource_mgmt_project: "Przeglądanie statystyk zasobów ludzkich" - - monitoring_controlling_title: "Statystyki" - project_module_monitoring_controlling_project: "Statystyki projektu" - monitoring_controlling_project: "Statystyki projektu" - statuses_issue_label_title: "Notki według statusów" - categories_issue_label_title: "Notki według kategorii" - - task_management_label_title: "Terminy notek" - task_manageable_chart_title: "Daty oddania notek" - task_manageable_chart_overdue_title: "Notki z datą oddania" - - manageable_label: "Z datą oddania" - unmanageable_label: "Bez daty oddania" - manageable_text_tip: "Notki z datą oddania." - unmanageable_text_tip: "Notki bez daty oddania." - - tasks_label: "notek" - tasksof_label: "notek z" - - overdue_label: "Opóźnione" - overdue_text: "opóźnionych" - delivered_label: "Zamknięte" - tobedelivered_label: "W czasie" - days_late_text: "dni opóźnienia" - - close_label: "zamknij" - - # date format - default_date_format: "%Y/%m/%d" - - # time management screen - time_mgmt_label_title: "Szacowany i przepracowany czas" - time_mgmt_areaspline_yaxis_label: "Czas (godziny)" - time_mgmt_estimated_label: "Szacowany czas" - time_mgmt_spent_label: "Przepracowany czas" - time_mgmt_hours_label: "godzin" - time_mgmt_error_no_issues_found_text: "Brak notek." - time_mgmt_error_no_issues_duedate_found_text: "Brak notek z datą oddania." - time_mgmt_version_label_title: "Czas w wersjach" - - # human resource management - hr_mgmt_label_title: "Zasoby ludzkie" - hr_unassigned_issue_label: "nieprzypisane" - hr_columnbar_title_label: "Liczba przypisanych notek do osoby" - hr_columnbar_yaxis_label: "Liczba notek" - hr_stackedcolumnbar_title_label: "Assignee and issues by situation" - hr_stackedcolumnbar_yaxis_label: "Liczba notek" \ No newline at end of file diff --git a/plugins/redmine_monitoring_controlling/config/locales/pt-BR.yml b/plugins/redmine_monitoring_controlling/config/locales/pt-BR.yml deleted file mode 100644 index 2c29343..0000000 --- a/plugins/redmine_monitoring_controlling/config/locales/pt-BR.yml +++ /dev/null @@ -1,57 +0,0 @@ -pt-BR: - #menu - mc_tasksmgmt_menu_label: "Gerenciamento de Tarefas" - mc_timemgmt_menu_label: "Gerenciamento de Tempo" - mc_humanresourcemgmt_menu_label: "Gerenciamento de Recursos Humanos" - - #permissions - permission_view_home_monitoring_controlling: "Visualizar M&C Gerenciamento de Tarefas" - permission_view_mc_time_mgmt_project: "Visualizar M&C Gerenciamento de Tempo" - permission_view_mc_human_resource_mgmt_project: "Visualizar M&C Gerenciamento de Recursos Humanos" - - monitoring_controlling_title: "Monitoramento & Controle" - project_module_monitoring_controlling_project: "Monitoramento & Controle por Projeto" - monitoring_controlling_project: "Monitoramento & Controle por Projeto" - statuses_issue_label_title: "Situação das tarefas" - categories_issue_label_title: "Tarefas por Tipo" - - task_management_label_title: "Gerenciamento das Tarefas" - task_manageable_chart_title: "Tarefas Gerenciáveis" - task_manageable_chart_overdue_title: "Tarefas Atrasadas" - - manageable_label: "Gerenciável" - unmanageable_label: "Não Gerenciável" - manageable_text_tip: "Tarefas com data de entrega." - unmanageable_text_tip: "Tarefas sem data de entrega preenchida" - - tasks_label: "tarefa(s)" - tasksof_label: "tarefa(s) de" - - overdue_label: "Atrasada" - overdue_text: "atrasada(s)" - delivered_label: "Entregue" - tobedelivered_label: "A ser entregue" - days_late_text: "dia(s) atrasada(s)" - - close_label: "fechar" - - # formatos de data e hora - default_date_format: "%d/%m/%Y" - - # time management screen - time_mgmt_label_title: "Horas Planejada por Horas Executadas" - time_mgmt_areaspline_yaxis_label: "Tempo (horas)" - time_mgmt_estimated_label: "Planejado" - time_mgmt_spent_label: "Executado" - time_mgmt_hours_label: "hora(s)" - time_mgmt_error_no_issues_found_text: "Nenhuma tarefa foi encontrada." - time_mgmt_error_no_issues_duedate_found_text: "Nenhuma tarefa com data de entrega preenchida foi encontrada." - time_mgmt_version_label_title: "Versões por Horas" - - # human resource management - hr_mgmt_label_title: "Gerenciamento de Pessoas" - hr_unassigned_issue_label: "Não atribuída" - hr_columnbar_title_label: "Tarefas por responsáveis" - hr_columnbar_yaxis_label: "Quantidade de Tarefas" - hr_stackedcolumnbar_title_label: "Responsáveis e suas respectivas tarefas por situação" - hr_stackedcolumnbar_yaxis_label: "Quantidade de tarefas" \ No newline at end of file diff --git a/plugins/redmine_monitoring_controlling/config/locales/ru.yml b/plugins/redmine_monitoring_controlling/config/locales/ru.yml deleted file mode 100644 index 62b05f3..0000000 --- a/plugins/redmine_monitoring_controlling/config/locales/ru.yml +++ /dev/null @@ -1,57 +0,0 @@ -ru: - #menu - mc_tasksmgmt_menu_label: "Управление задачами" - mc_timemgmt_menu_label: "Управление временными затратами" - mc_humanresourcemgmt_menu_label: "Управление человеческими ресурсами" - - #permissions - permission_view_home_monitoring_controlling: "Вид M&C Управление задачами" - permission_view_mc_time_mgmt_project: "Вид M&C Управление временными затратами" - permission_view_mc_human_resource_mgmt_project: "Вид M&C Управление человеческими ресурсами" - - monitoring_controlling_title: "Мониторинг & Контроль" - project_module_monitoring_controlling_project: "Мониторинг & Контроль by Project" - monitoring_controlling_project: "Мониторинг & Контроль by Projeto" - statuses_issue_label_title: "Задачи по статусам" - categories_issue_label_title: "Tasks by Category" - - task_management_label_title: "Управление задачами" - task_manageable_chart_title: "Задачи" - task_manageable_chart_overdue_title: "Просроченные задачи" - - manageable_label: "Управляемые" - unmanageable_label: "Неуправляемые" - manageable_text_tip: "Задачи с датой выполнения." - unmanageable_text_tip: "Задачи без даты выполнения." - - tasks_label: "задачи" - tasksof_label: "задач(a) из" - - overdue_label: "Просрочена" - overdue_text: "просрочена(-ы)" - delivered_label: "Закрыта" - tobedelivered_label: "Решена" - days_late_text: "день(дней) задержки" - - close_label: "закрыт" - - # date format - default_date_format: "%Y/%m/%d" - - # time management screen - time_mgmt_label_title: "Оценка времени и количество затраченных часов" - time_mgmt_areaspline_yaxis_label: "Время (часов)" - time_mgmt_estimated_label: "Оценка" - time_mgmt_spent_label: "Затраты" - time_mgmt_hours_label: "час(ов)" - time_mgmt_error_no_issues_found_text: "No issues were found." - time_mgmt_error_no_issues_duedate_found_text: "Не было найдено ни одного зарегестрированного тикета с датой выполнения." - time_mgmt_version_label_title: "Versions by Hours" - - # human resource management - hr_mgmt_label_title: "Управление человеческими ресурсами" - hr_unassigned_issue_label: "неназначенная" - hr_columnbar_title_label: "Распределение задач" - hr_columnbar_yaxis_label: "Количество задач" - hr_stackedcolumnbar_title_label: "Распределение задач и статусов выполнения по ресурсам" - hr_stackedcolumnbar_yaxis_label: "Количество задач" \ No newline at end of file diff --git a/plugins/redmine_monitoring_controlling/config/locales/tr.yml b/plugins/redmine_monitoring_controlling/config/locales/tr.yml deleted file mode 100644 index 422afb2..0000000 --- a/plugins/redmine_monitoring_controlling/config/locales/tr.yml +++ /dev/null @@ -1,57 +0,0 @@ -tr: - #menu - mc_tasksmgmt_menu_label: "İş İzlemesi" - mc_timemgmt_menu_label: "Zaman İzlemesi" - mc_humanresourcemgmt_menu_label: "İnsan Kaynakları İzlemesi" - - #permissions - permission_view_home_monitoring_controlling: "İzleme ve Kontrol için görme" - permission_view_mc_time_mgmt_project: "Zaman izlemesini görme" - permission_view_mc_human_resource_mgmt_project: "İnsan Kaynkakları izlemesini görme" - - monitoring_controlling_title: "İzleme ve Kontrol" - project_module_monitoring_controlling_project: "Proje bazında İzleme ve Kontrol" - monitoring_controlling_project: "Proje bazında İzleme ve Kontrol" - statuses_issue_label_title: "Duruma göre İşler" - categories_issue_label_title: "Kategoriye göre İşler" - - task_management_label_title: "İş Yönetimi" - task_manageable_chart_title: "Yönetilebilir İşler" - task_manageable_chart_overdue_title: "Tarihi Geçmiş İşler" - - manageable_label: "Yönetiliebilir" - unmanageable_label: "Yönetilemez" - manageable_text_tip: "Teslim tarihi olan İşler." - unmanageable_text_tip: "Teslim tarihi olmayan İşler." - - tasks_label: "iş" - tasksof_label: "iş. toplam" - - overdue_label: "Tarihi Geçmiş" - overdue_text: "tarihi geçmiş" - delivered_label: "Teslim Edilmiş" - tobedelivered_label: "Teslim Edilecek" - days_late_text: "gün gecikmiş" - - close_label: "kapat" - - # date format - default_date_format: "%Y-%m-%d" - - # time management screen - time_mgmt_label_title: "Tahmin edilen ve Harcanan zaman" - time_mgmt_areaspline_yaxis_label: "Zaman (saat)" - time_mgmt_estimated_label: "Tahmini" - time_mgmt_spent_label: "Harcanmış" - time_mgmt_hours_label: "saat" - time_mgmt_error_no_issues_found_text: "Hiç iş bulanamadı." - time_mgmt_error_no_issues_duedate_found_text: "Bitiş tarihi işlenmiş herhangi iş bulunamadı." - time_mgmt_version_label_title: "Sürüme göre Saat" - - # human resource management - hr_mgmt_label_title: "İnsan Kaynakları İzleme" - hr_unassigned_issue_label: "atanmamış" - hr_columnbar_title_label: "Atanana göre İşler" - hr_columnbar_yaxis_label: "İş adedi" - hr_stackedcolumnbar_title_label: "Duruma göre atanan ve işler" - hr_stackedcolumnbar_yaxis_label: "İş adedi" diff --git a/plugins/redmine_monitoring_controlling/config/locales/zh.yml b/plugins/redmine_monitoring_controlling/config/locales/zh.yml deleted file mode 100644 index fe56f92..0000000 --- a/plugins/redmine_monitoring_controlling/config/locales/zh.yml +++ /dev/null @@ -1,58 +0,0 @@ -zh: - #menu - mc_tasksmgmt_menu_label: "任务管理" - mc_timemgmt_menu_label: "时间管理" - mc_humanresourcemgmt_menu_label: "HR管理" - - #permissions - permission_view_home_monitoring_controlling: "查看M&C任务管理" - permission_view_mc_time_mgmt_project: "查看M&C时间管理" - permission_view_mc_human_resource_mgmt_project: "查看M&C HR管理" - - monitoring_controlling_title: "项目监控" - project_module_monitoring_controlling_project: "项目监控" - monitoring_controlling_project: "项目监控" - statuses_issue_label_title: "任务情况(按状态)" - categories_issue_label_title: "Tasks by Category" - - task_management_label_title: "任务管理" - task_manageable_chart_title: "可控任务分布图" - task_manageable_chart_overdue_title: "逾期任务分布图" - - manageable_label: "已定义计划完成时间任务" - unmanageable_label: "未定义计划完成时间任务" - manageable_text_tip: "当前项目中所有已定义计划完成日期的任务。" - unmanageable_text_tip: "当前项目中所有未定义计划完成日期的任务。" - - tasks_label: "任务" - tasksof_label: " 任务 /" - - overdue_label: "逾期" - overdue_text: "逾期" - delivered_label: "已交付" - tobedelivered_label: "即将交付" - days_late_text: "日延迟" - - close_label: "关闭" - - # date format - default_date_format: "%Y/%m/%d" - - # time management screen - time_mgmt_label_title: "计划时间和已用时间" - time_mgmt_areaspline_yaxis_label: "时间(小时)" - time_mgmt_estimated_label: "预估" - time_mgmt_spent_label: "已用" - time_mgmt_hours_label: "工时" - time_mgmt_error_no_issues_found_text: "No issues were found." - time_mgmt_error_no_issues_duedate_found_text: "未找到定义计划完成时间的问题。" - time_mgmt_version_label_title: "按工时查看版本" - - # human resource management - hr_mgmt_label_title: "HR管理" - hr_unassigned_issue_label: "未分配" - hr_columnbar_title_label: "按处理人统计问题数量" - hr_columnbar_yaxis_label: "问题数" - hr_stackedcolumnbar_title_label: "按处理人分状态统计问题数量(堆积图)" - hr_stackedcolumnbar_yaxis_label: "问题数" - \ No newline at end of file diff --git a/plugins/redmine_monitoring_controlling/config/routes.rb b/plugins/redmine_monitoring_controlling/config/routes.rb deleted file mode 100644 index 0786ab1..0000000 --- a/plugins/redmine_monitoring_controlling/config/routes.rb +++ /dev/null @@ -1,11 +0,0 @@ -if Rails.version.to_f >= 3.0 - match 'home_monitoring_controlling_project/index/:id', :to => 'home_monitoring_controlling_project#index', :via => :get - match 'mc_time_mgmt_project/index/:id', :to => 'mc_time_mgmt_project#index', :via => :get - match 'mc_human_resource_project/index/:id', :to => 'mc_human_resource_mgmt_project#index', :via => :get -else # Routes for older Rails routes - ActionController::Routing::Routes.draw do |map| - map.connect '/home_monitoring_controlling_project/index/:id', :controller => 'home_monitoring_controlling_project', :action => 'index' - map.connect '/mc_time_mgmt_project/index/:id', :controller => 'mc_time_mgmt_project', :action => 'index' - map.connect '/mc_human_resource_project/index/:id', :controller => 'mc_human_resource_mgmt_project', :action => 'index' - end -end \ No newline at end of file diff --git a/plugins/redmine_monitoring_controlling/init.rb b/plugins/redmine_monitoring_controlling/init.rb deleted file mode 100644 index 00fa3bf..0000000 --- a/plugins/redmine_monitoring_controlling/init.rb +++ /dev/null @@ -1,25 +0,0 @@ -# encoding: UTF-8 -require 'redmine' - -Redmine::Plugin.register :redmine_monitoring_controlling do - name 'Redmine (Monitoring & Controlling | Monitoramento & Controle)' - author 'Alexander Monteiro' - description "Este plugin foi criado para auxiliar no Monitoramento e Controle dos projetos no redmine através de uma visualização gráfica das tarefas e sua execução.\n - This plugin is a graphic tool to Monitoring and Controlling projects on redmine." - version '0.1.1' - url 'http://alexmonteiro.github.com/redmine_monitoring_controlling/' - author_url 'http://www.alexandermonteiro.com.br' - - #Settings page of plugin - #settings :default => {'redmine_monitoring_controlling_setting' => 'value', 'foo'=>'bar'}, :partial => 'settings/redmine_monitoring_controlling_settings' - - project_module :monitoring_controlling_project do - permission :view_home_monitoring_controlling, {:home_monitoring_controlling_project => [:index]} - permission :view_mc_time_mgmt_project, {:mc_time_mgmt_project => [:index]} - permission :view_mc_human_resource_mgmt_project, {:mc_human_resource_mgmt_project => [:index]} - end - - menu :project_menu, :redmine_monitoring_controlling, { :controller => 'home_monitoring_controlling_project', :action => 'index' }, :caption => :monitoring_controlling_title - -end - diff --git a/plugins/redmine_monitoring_controlling/lang/en.yml b/plugins/redmine_monitoring_controlling/lang/en.yml deleted file mode 100644 index e338591..0000000 --- a/plugins/redmine_monitoring_controlling/lang/en.yml +++ /dev/null @@ -1,2 +0,0 @@ -# English strings go here -my_label: "My label" diff --git a/plugins/redmine_monitoring_controlling/lib/mc_tools.rb b/plugins/redmine_monitoring_controlling/lib/mc_tools.rb deleted file mode 100644 index 1e75e9e..0000000 --- a/plugins/redmine_monitoring_controlling/lib/mc_tools.rb +++ /dev/null @@ -1,60 +0,0 @@ -class McTools - # This class holds useful functions - # user on Monitoring & Controlling plugin - - # return the plugin folder instalation - def returnPluginFolderName - if Rails.version.to_f >= 3.0 - File.dirname(__FILE__).gsub(File.join(Rails.root.to_s,'plugins'),'').split('/')[1] - else - File.dirname(__FILE__).gsub(File.join(Rails.root.to_s,'vendor','plugins'),'').split('/')[1] - end - end - - # return subprojects ID - def subProjects(id) - Project.find_by_sql("select * from projects where parent_id = #{id.to_i}") - end - - # return an array with the project and subprojects IDs - def return_ids(id) - array = Array.new - array.push(id) - subprojects = subProjects(id) - subprojects.each do |project| - array.push(return_ids(project.id)) - end - - return array.inspect.gsub("[","").gsub("]","").gsub("\\","").gsub("\"","") - end - - # return total of tasks with closed flag false - # done tasks - def returnTotalOfClosedTasks(project_identifier) - countTasks(project_identifier, true) - end - # done tasks - def returnTotalOfOpenTasks(project_identifier) - countTasks(project_identifier, false) - end - - private - #count tasks - def countTasks(project_identifier, isClosed) - #get main project - project = Project.find_by_identifier(project_identifier) - #get projects and sub projects - stringSqlProjectsSubProjects = return_ids(project.id) - total = 0 - Issue.find_by_sql(["select count(1) as totalclosedissue - from issues - where project_id in (#{stringSqlProjectsSubProjects}) - and status_id in (select id from issue_statuses where is_closed = ?)",isClosed]).each do |t| - - total = t.totalclosedissue.to_i - end - - total - end - -end \ No newline at end of file diff --git a/plugins/redmine_monitoring_controlling/license.txt b/plugins/redmine_monitoring_controlling/license.txt deleted file mode 100644 index 2243e9f..0000000 --- a/plugins/redmine_monitoring_controlling/license.txt +++ /dev/null @@ -1,15 +0,0 @@ -Redmine Monitoring Controlling Plugin - Show tasks on project throught Charts. -Copyright (C) 2012-2013 Alexander Monteiro - -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 3 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, see http://www.gnu.org/licenses/. \ No newline at end of file diff --git a/plugins/redmine_monitoring_controlling/logo.png b/plugins/redmine_monitoring_controlling/logo.png deleted file mode 100644 index 565e25d8bb722ecaa28197228f23c58f39b4729b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39747 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ð<<as1!yU&~m& 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 diff --git a/plugins/redmine_monitoring_controlling/screenshotEn.png b/plugins/redmine_monitoring_controlling/screenshotEn.png deleted file mode 100644 index 3b69658dfe4901b17b56c5233b505af643390fde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161460 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%0D9fAQB!FP+oy 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%0DtX?Zdz2V|;)Ar|0!wD{XxB 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 diff --git a/plugins/redmine_monitoring_controlling/screenshotPt.png b/plugins/redmine_monitoring_controlling/screenshotPt.png deleted file mode 100644 index 739cd5d90a5e72c5efb90f65e3c57fec580522b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164958 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 L)z4*}Q$iB}ND?ok diff --git a/plugins/redmine_monitoring_controlling/test/test_helper.rb b/plugins/redmine_monitoring_controlling/test/test_helper.rb deleted file mode 100644 index bd1ed0c..0000000 --- a/plugins/redmine_monitoring_controlling/test/test_helper.rb +++ /dev/null @@ -1,5 +0,0 @@ -# Load the normal Rails helper -require File.expand_path(File.dirname(__FILE__) + '/../../../../test/test_helper') - -# Ensure that we are using the temporary fixture path -Engines::Testing.set_fixture_path diff --git a/plugins/redmine_omniauth_client/Gemfile b/plugins/redmine_omniauth_client/Gemfile deleted file mode 100644 index 7723190..0000000 --- a/plugins/redmine_omniauth_client/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'http://rubygems.org' - -gem 'oauth2' -gem 'json' diff --git a/plugins/redmine_omniauth_client/Gemfile.lock b/plugins/redmine_omniauth_client/Gemfile.lock deleted file mode 100644 index a495cd5..0000000 --- a/plugins/redmine_omniauth_client/Gemfile.lock +++ /dev/null @@ -1,22 +0,0 @@ -GEM - remote: http://rubygems.org/ - specs: - addressable (2.3.2) - faraday (0.7.6) - addressable (~> 2.2) - multipart-post (~> 1.1) - rack (~> 1.1) - json (1.7.5) - multi_json (1.3.6) - multipart-post (1.1.5) - oauth2 (0.5.2) - faraday (~> 0.7) - multi_json (~> 1.0) - rack (1.4.1) - -PLATFORMS - ruby - -DEPENDENCIES - json - oauth2 diff --git a/plugins/redmine_omniauth_client/README.md b/plugins/redmine_omniauth_client/README.md deleted file mode 100644 index b5715b8..0000000 --- a/plugins/redmine_omniauth_client/README.md +++ /dev/null @@ -1,51 +0,0 @@ -## Redmine omniauth ROR - -This plugin is used to authenticate Redmine users using an OAuth2 provider. - -### Installation: - -Download the plugin and install required gems: - -```console -cd /path/to/redmine/plugins -git clone https://github.com/arlin2050/redmine_omniauth_client.git -cd /path/to/redmine -bundle install -``` - -Restart the app -```console -touch /path/to/redmine/tmp/restart.txt -``` - -### Configuration - -* Login as a user with administrative privileges. -* In top menu select "Administration". -* Click "Plugins" -* In plugins list, click "Configure" in the row for "Redmine OAuth Client plugin" -* Configure all fields. -* Check the box near "Enable OAuth authentication" -* Click Apply. - -Users can now to use their account to log into your instance of Redmine. - -Additionaly -* Setup value Autologin in Settings on tab Authentification - -### Authentication Workflow - -1. An unauthenticated user requests the URL to your Redmine instance. -2. User clicks the "Login via App" button. -3. The plugin redirects them to a sign in page if they are not already signed into their account. -4. App redirects user back to Redmine, where the OAuth plugin's controller takes over. - -One of the following cases will occur: - -1. If self-registration is disabled (Under Administration > Settings > Authentication) but force_account_creation option is checked, the account is created and user is redirected to 'my/page'. -2. Otherwise, self-registration method is used to register users. - -### TODO - -* Access webservices in other formats than json. -* Fonctionnal tests \ No newline at end of file diff --git a/plugins/redmine_omniauth_client/app/controllers/redmine_oauth_controller.rb b/plugins/redmine_omniauth_client/app/controllers/redmine_oauth_controller.rb deleted file mode 100644 index 849c06c..0000000 --- a/plugins/redmine_omniauth_client/app/controllers/redmine_oauth_controller.rb +++ /dev/null @@ -1,223 +0,0 @@ -require 'account_controller' -require 'json' -require 'jwt' - -class RedmineOauthController < AccountController - def oauth - if Setting.plugin_redmine_omniauth_client['oauth_authentification'] - session[:back_url] = params[:back_url] - redirect_to oauth_client.auth_code.authorize_url(:redirect_uri => oauth_callback_url) - else - password_authentication - end - end - - def oauth_callback - if params[:error] - flash[:error] = l(:notice_access_denied, :app => settings['app_name']) - redirect_to signin_path - else - begin - token = oauth_client.auth_code.get_token(params[:code],:mode => :body, :redirect_uri => oauth_callback_url) - info = JWT.decode(token.token, nil, false)[0] - rescue - flash[:error] = (t 'notices.unable_to_authenticate') - end - - #result = token.get(settings['site_url'] + settings['ws_url']) - #info = JSON.parse(result.body) - - if info && info[settings['field_username']] - try_to_login info - else - flash[:error] = l(:notice_unable_to_obtain_app_credentials, :app => settings['app_name']) - redirect_to signin_path - end - end - end - - def try_to_login(info) - params[:back_url] = session[:back_url] - session.delete(:back_url) - begin - user = User.where(sso_u_id: info[settings['sso_u_id']]).first - #File.open("ssouid_user.txt", 'w') { |file| file.write(user) } - rescue - end - if user.nil? - user = User.find_by_login(info[settings['field_username']]) - #File.open("username_user.txt", 'w') { |file| file.write(user) } - #File.open("sso.txt", 'w') { |file| file.write(info[settings['sso_u_id']]) } - - #user.sso_u_id = info[settings['sso_u_id']] - #user.save - if user.nil? - # Create on the fly - user = User.new - user.sso_u_id = info[settings['sso_u_id']] - user.firstname = info[settings['field_firstname']] - user.lastname = info[settings['field_lastname']] - user.mail = info[settings['field_email']] - if info.key?('email_contact') - if info['email_contact'] != "" - user.mail = info['email_contact'] - end - end - user.login = info[settings['field_username']] - user.random_password - user.register - - # Use registration if defined - case Setting.self_registration - when '1' - register_by_email_activation(user) do - onthefly_creation_failed(user) - end - when '2' - register_manually_by_administrator(user) do - onthefly_creation_failed(user) - end - when '3' - register_automatically(user) do - onthefly_creation_failed(user) - end - else - if settings['force_account_creation'] - register_automatically(user) do - onthefly_creation_failed(user) - end - else - flash[:error] = l(:unable_create_account) - redirect_to signin_path - end - end - else - user.sso_u_id = info[settings['sso_u_id']] - user.save - end - else - user.firstname = info[settings['field_firstname']] - user.lastname = info[settings['field_lastname']] - user.mail = info[settings['field_email']] - if info.key?('email_contact') - if info['email_contact'] != "" - user.mail = info['email_contact'] - end - end - user.login = info[settings['field_username']] - user.save - - # Existing record - if user.active? - successful_authentication(user) - else - # Redmine 2.4 adds an argument to account_pending - if Redmine::VERSION::MAJOR > 2 or - (Redmine::VERSION::MAJOR == 2 and Redmine::VERSION::MINOR >= 4) - account_pending(user) - else - account_pending - end - end - end -######################### - #File.open("ssouidUSER.txt", 'w') { |file| file.write(user.sso_u_id) } - begin - # Odstraní uživatele ze všech skupin, případně jen ze skupin párovaných k SSO. - if @settings['remove_from_groups'] - if @settings['remove_from_all_groups'] - user.groups.delete(Group.all) - # Nebo pouze ze spárovaných skupin - else - GroupMapping.all.each do |group_mapping| - group = Group.find(group_mapping.group_id) - user.groups.delete(group) if user.groups.include? group - end - end - end - - group_prefix = "f~" - groups = info['groups'] - - unless groups == nil || groups == [] - # Prochází každou skupinou v SSO acces tokenu - groups.each do |sso_group| - # možná mají role nějaký prefix - sso_group = group_prefix + sso_group - # Vyhledá mapování skupin na skupiny RM - mappings = GroupMapping.where(variable: sso_group) - # Pokud najde, přiřadí uživatele do příslušných skupin - unless mappings.to_a == nil || mappings.to_a == [] - mappings.each do |mapping| - @group = Group.find(mapping.group_id) - unless @group.users.include? user - @group.users << user - end - end - # Pokud nenajde, hledá skupinu přímo odpovídající jménem skupině v SSO - else - @group = Group.find_by(lastname: sso_group) - # Pokud nenajde, vytvoří skupinu - if @group == nil || @group == [] - @group = Group.new({:lastname => sso_group}) - #@group.name= sso_group - @group.save - end - # Vytváří mapování na novou, či nemapovanou skupinu a přiřadí uživatele do skupiny - #File.open("mapping_" + sso_group + ".txt", 'w') { |file| file.write(@group) } - unless @group.users.include? user - @group.users << user - end - new_mapping = GroupMapping.new({:variable => sso_group, :group_id => @group.get_id}) - new_mapping.save - end - end - end # groups - rescue - logger.error "Error. Group assignemnt failed." - end - end - - def oauth_client - @client ||= OAuth2::Client.new(settings['client_id'], settings['client_secret'], - :site => settings['site_url'], - :authorize_url => settings['auth_url'], - :token_url => settings['token_url']) - end - - def settings - @settings ||= Setting.plugin_redmine_omniauth_client - end - -############################ - - def group_mapping - @groups = GroupMapping.all - end - - def edit - #mapping = GroupMapping.find_by(variable: params[:variable]) - begin - mapping = GroupMapping.find_by(variable: params[:variable], :group_id => params[:group_id]) - if mapping == nil - new_mapping = GroupMapping.new({:variable => params[:variable], :group_id => params[:group_id]}) - new_mapping.save - else - mapping.update({:variable => params[:variable], :group_id => params[:group_id]}) - # mapping.destroy - end - flash[:notice] = (t 'notices.saved') - rescue - flash[:warning] = (t 'notices.notSaved') - end - redirect_to :action => 'group_mapping' - end - - def delete - unless GroupMapping.find_by(variable: params[:variable], :group_id => params[:group_id]) == nil - mapping = GroupMapping.find_by(variable: params[:variable], :group_id => params[:group_id]) - mapping.destroy - end - redirect_to :action => 'group_mapping' - end -end diff --git a/plugins/redmine_omniauth_client/app/helpers/redmine_omniauth_helper.rb b/plugins/redmine_omniauth_client/app/helpers/redmine_omniauth_helper.rb deleted file mode 100644 index e1d2445..0000000 --- a/plugins/redmine_omniauth_client/app/helpers/redmine_omniauth_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module RedmineOmniauthHelper -end diff --git a/plugins/redmine_omniauth_client/app/models/group_mapping.rb b/plugins/redmine_omniauth_client/app/models/group_mapping.rb deleted file mode 100644 index 9afd216..0000000 --- a/plugins/redmine_omniauth_client/app/models/group_mapping.rb +++ /dev/null @@ -1,2 +0,0 @@ -class GroupMapping < ActiveRecord::Base -end diff --git a/plugins/redmine_omniauth_client/app/views/hooks/_view_account_login_top.html.erb b/plugins/redmine_omniauth_client/app/views/hooks/_view_account_login_top.html.erb deleted file mode 100644 index 0b5334c..0000000 --- a/plugins/redmine_omniauth_client/app/views/hooks/_view_account_login_top.html.erb +++ /dev/null @@ -1,11 +0,0 @@ -<%= stylesheet_link_tag 'buttons', :plugin => 'redmine_omniauth_client' %> - -<% if Setting.plugin_redmine_omniauth_client['oauth_authentification'] %> - <%= link_to oauth_client_path(:back_url => back_url), :class=>"no-pointer" do %> - <h2 style="width:450px; margin: 10px auto -25px auto; max-width: 20em; margin: 1rem auto; text-align: center; padding: 1rem 0; border: 1px rgb(204, 204, 204) solid; cursor: pointer; background: #efefef;"><%= t 'oauth.login_via_sso' %></h2> - <br/> - <br/> - <% end %> -<% end %> - - diff --git a/plugins/redmine_omniauth_client/app/views/redmine_oauth/group_mapping.html.erb b/plugins/redmine_omniauth_client/app/views/redmine_oauth/group_mapping.html.erb deleted file mode 100644 index b7c74c1..0000000 --- a/plugins/redmine_omniauth_client/app/views/redmine_oauth/group_mapping.html.erb +++ /dev/null @@ -1,49 +0,0 @@ -<h2><%=t 'oauth.mapping_headline'%></h2> - -<table> - <%= form_tag({:controller => 'redmine_oauth', :action => 'edit'}, method: "post") do %> - <tr> - <td> - <%= text_field_tag :variable %> - </td> - <td> - <%= select_tag :group_id, options_from_collection_for_select(Group.all - GroupBuiltin.all, :id, :name) %> - </td> - <td> - <%= submit_tag(t 'oauth.save') %> - </td> - </tr> - <% end %> -</table> - -<hr /> - -<h3><%=t 'oauth.saved_settings'%></h3> - -<table style="border: 1px solid black; padding: 1px"> - <% @groups.each do |group| %> - <%= form_tag({:controller => 'redmine_oauth', :action => 'edit'}, method: "post") do %> - <tr> - <td style="border: 1px solid black"> - <b><%= group.variable %></b> - <%= text_field_tag :variable, group.variable, hidden: true %> - </td> - <td style="border: 1px solid black"> - <%= select_tag :group_id, options_from_collection_for_select(Group.all - GroupBuiltin.all, :id, :name, group.group_id) %> - </td> - <td style="border: 1px solid black"> - <%= submit_tag(t 'oauth.edit') %> - <% end %> - </td> - <td style="border: 1px solid black"> - <%= form_tag({:controller => 'redmine_oauth', :action => 'delete'}, method: "post") do %> - <%= text_field_tag :variable, group.variable, hidden: true %> - <%= text_field_tag :group_id, group.group_id, hidden: true %> - <%= submit_tag(t 'oauth.delete') %> - <% end %> - </td> - </tr> - <% end %> -</table> - -<%#= link_to "Back", :back %> diff --git a/plugins/redmine_omniauth_client/app/views/settings/_client_settings.html.erb b/plugins/redmine_omniauth_client/app/views/settings/_client_settings.html.erb deleted file mode 100644 index 73dc869..0000000 --- a/plugins/redmine_omniauth_client/app/views/settings/_client_settings.html.erb +++ /dev/null @@ -1,81 +0,0 @@ -<p> - <label><%=t 'oauth.app_name'%></label> - <%= text_field_tag 'settings[app_name]', @settings['app_name'] %> -</p> -<p> - <label><%=t 'oauth.site_url'%></label> - <%= text_field_tag 'settings[site_url]', @settings['site_url'] %> -</p> -<p> - <label><%=t 'oauth.auth_url'%></label> - <%= text_field_tag 'settings[auth_url]', @settings['auth_url'] %> -</p> -<p> - <label><%=t 'oauth.token_url'%></label> - <%= text_field_tag 'settings[token_url]', @settings['token_url'] %> -</p> -<p> - <label><%=t 'oauth.ws_url'%></label> - <%= text_field_tag 'settings[ws_url]', @settings['ws_url'] %> -</p> -<p> - <label><%=t 'oauth.client_id'%></label> - <%= text_field_tag 'settings[client_id]', @settings['client_id'] %> -</p> -<p> - <label><%=t 'oauth.client_secret'%></label> - <%= text_field_tag 'settings[client_secret]', @settings['client_secret'] %> -</p> -<p> - <label><%=t 'oauth.sso_u_id'%></label> - <%= text_field_tag 'settings[sso_u_id]', @settings['sso_u_id'] %> -</p> -<p> - <label><%=t 'oauth.username_f'%></label> - <%= text_field_tag 'settings[field_username]', @settings['field_username'] %> -</p> -<p> - <label><%=t 'oauth.mail_f'%></label> - <%= text_field_tag 'settings[field_email]', @settings['field_email'] %> -</p> -<p> - <label><%=t 'oauth.firstname_f'%></label> - <%= text_field_tag 'settings[field_firstname]', @settings['field_firstname'] %> -</p> -<p> - <label><%=t 'oauth.lastname_f'%></label> - <%= text_field_tag 'settings[field_lastname]', @settings['field_lastname'] %> -</p> -<p> - <label><%=t 'oauth.resourecs_f'%></label> - <%= text_field_tag 'settings[field_resources]', @settings['field_resources'] %> -</p> -<p> - <label><%=t 'oauth.groups_f'%></label> - <%= text_field_tag 'settings[field_groups]', @settings['field_groups'] %> -</p> -<p> - <label><%=t 'oauth.roles_f'%></label> - <%= text_field_tag 'settings[field_roles]', @settings['field_roles'] %> -</p> -<p> - <%= link_to (t 'oauth.mapping_headline'), group_mapping_path %> - </p> -<p> - <label><%=t 'oauth.remove_from_groups'%> </label> - <%= check_box_tag "settings[remove_from_groups]", true, @settings['remove_from_groups'], :onclick => - "if (this.checked) { $('#settings_remove_from_all_groups').removeAttr('disabled'); } else { $('#settings_remove_from_all_groups').attr('disabled', true); }" %> -</p> -<p> - <label><%=t 'oauth.remove_from_all_groups'%></label> - <%= check_box_tag "settings[remove_from_all_groups]", true, @settings['remove_from_all_groups'], disabled: true %> -</p> -<p> - <label><%=t 'oauth.force_acc_creation'%> </label> - <%= check_box_tag "settings[force_account_creation]", true, @settings['force_account_creation'] %> -</p> -<p> - <label><%=t 'oauth.enable_oauth'%></label> - <%= check_box_tag "settings[oauth_authentification]", true, @settings['oauth_authentification'] %> -</p> - diff --git a/plugins/redmine_omniauth_client/assets/images/bt_connect_portail.png b/plugins/redmine_omniauth_client/assets/images/bt_connect_portail.png deleted file mode 100644 index f61c0a7be2f4d96fce00739e9f8399fcbe0269ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9930 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 YCa?NX64o#)7qq&})78&qol`;+0Lb!I{r~^~ diff --git a/plugins/redmine_omniauth_client/assets/images/bt_connect_ror.png b/plugins/redmine_omniauth_client/assets/images/bt_connect_ror.png deleted file mode 100644 index 161ec0549b34fad4e08a4f82e7d5454428d77b3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11316 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≤mzGriXfDo5oNBRQ zLP{cUso@IlqUP@TjjS6rgVQw9Eh9yf=gjaII3=}(zuULiv8MjQ>=5qjpEgu&>Tr3G zo`19X()!$E=Kn>$K8u%Gx!-)>n!*E%58e%utlKwNR#*12d{jUVAMcy(kED|Xzp3oF zuU~ptYkC!1u(l@i!bUH9+vug6=S;gGzh=VJZ8x;8immy>AkO2)SGmESD<taTo%3h@ z7TFsv3|YyaYmlpK`gO6JUv$P&bB0YDon+2j(N|@iR;SW>xPPm2@w4uvGUgvogW|Z7 zRF^Xq{f}&%IHy93!+eR4a8Sg=wO9Oa$+QHVSQ39*%;H{+@u?lpQr#<8u6dFZaz+2V z%ftKgFRi#y-_P~!`T4c~ez)0FOuCkG@m2oU`^yu#EM-0|U|LgfbdBRJsWxYx!+W1z zQd}7^;o3EWEerg2lwX+S^YmcD_shHU_2iR3#?If*t2F&wKxcrT#ngKCaJjghzmFKb zJbt0GZ_a%ynfKErQdjofpV~8d`CL<{`b)iio7cC_<NtT()|-4b{R-z5X->1eIM}Cb zJm-;Zm7V(2bi0@FD;-UTzJe?B8nz3`vMw%+if%r@p{#mWDr{>QTf?igS9eckT+Ccu z^8NzLlGKWao+)WwA7(XkZs2tN+^%{{OVWG8L(BFmX|YZ<$*2IMg(A_Bm9sY5KmD@( z)!zNa)297ro&E5~UG|F~SVPlnejmRSbbNl0%)x(aRF+O*YfLrH^jm#s)y-SC&b(L@ zU3_82rNo<CF70Czos=ywcd6TKH)WQyhb^{TI=127q)207^Y$pgNB3lSUhqE^p4K`= zYw<l9u@0e3*<h})8-`04R<`Rz9o8~XD=L01A<BK<=R5yj!!3KZY_SP_rm+8+g;(zu zb-qm;wfjo%w%b4Zb@%9fsrw(l{Qkf1;s4to>eZY6TW9<;eEKhX;@^kmXaCEueDAjR z|FR$Z82=u8H{rkCRH;8peaoW1*)BHu6n<)*UdBZ8C+m66?OA(wZEVN|(M>Os)b;1> z-sAFqsZy%=89}}@M}ww^Z<XqfobA>&at~46SrP4gYlDW!t<xTrinFfY_MKU|x5u>f z1()HMLkirU7i8zjT~f*FWC^a?-IN%aw>FU}>-p3zr#7Z4X(rg+)sdT9y11{RDl>A| zL)i&ym;RsR@cZ+3_BZk#S8lIm@n0{L7VC8=hI49w*4|Tj70FX~J8~88C@D|;b~nPx zgdzNim(K1Dd@uU_?!9}LH%EhW_c}fOkH^k9FdD0Rc}NRN+3e-$F=Jr$UOMTU=**JI z;tLX*JMy<r5|d&|_;+{9MFE~wEkZdeQcC8kXFFY8WKKAGYTa;+y2`7~(;2jf(LiNF zU{ZnVLB+lqqD*CiCMyJ)w0C>fp2+QBedA=fAW14NXkM7qge5KKv>*KJ&6U5jX#Z{H z8}_|kDeVgvs+`!`ZNio9(Dg)BW`lrN5OdPSyRFaSOb+aN%o2UscUE)2U9Vev^H`MG zGg+5%mc??g?6@0|oZ+!OsEa{v!&1SCQ`XNGo9Uu(XF`DX$KXko<~ygpn0wK;%Hxm6 zOb$<$#vBeIP6zV|(<2hqZq%x3s^55cjd@3&{!`CM>XnmCR|?*9Si*U?XX2y}?a^Yh tFZNET=vLI6q_E60i}C#dk6-^q6BrzF8n$f_-w0mF>*?y}vd$@?2>^ZM7196z diff --git a/plugins/redmine_omniauth_client/assets/images/keycloak_plugin.png b/plugins/redmine_omniauth_client/assets/images/keycloak_plugin.png deleted file mode 100644 index 9d92a7af42fcfccfc354886671439b4ccbcec6c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18377 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 GGywqply2$( diff --git a/plugins/redmine_omniauth_client/assets/images/keycloak_plugin_small.png b/plugins/redmine_omniauth_client/assets/images/keycloak_plugin_small.png deleted file mode 100644 index 249f0bdba4b18aa0be367e5740df93da272fe325..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14889 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 diff --git a/plugins/redmine_omniauth_client/assets/stylesheets/buttons.css b/plugins/redmine_omniauth_client/assets/stylesheets/buttons.css deleted file mode 100644 index 865524f..0000000 --- a/plugins/redmine_omniauth_client/assets/stylesheets/buttons.css +++ /dev/null @@ -1,60 +0,0 @@ -.button-login { - display: inline-block; - border: none; - border-radius: 2px; - margin-top: 40px; - width: 360px; - height: 75px; - padding: 0; - width: 100%; - background-color: #fff; - cursor: pointer; -} - -.button-login-text { - margin-left: auto; - margin-right: auto; - background: url(../images/keycloak_plugin_small.png) !important; - width: 360px; - height: 75px; - /* margin-left: -129px; */ - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - /* background-repeat: no-repeat; */ - /* overflow: hidden; */ - /* z-index: 100; */ - text-align: center; -} - -.or-container { - display:block; - padding: 0; - margin: 0; - min-width: 900px; - padding-top: 40px; -} - -.or-container hr { - width: 454px; - margin-left: auto; - margin-right: auto; -} - -.or-container p { - width: 454px; - margin-left: auto; - margin-right: auto; - text-align: center; - margin-top: -15px; -} - -.or-container span { - background-color: #fff; - padding: 5px; - font-size: medium; -} - -.no-pointer { - cursor: default; -} \ No newline at end of file diff --git a/plugins/redmine_omniauth_client/config/locales/cs.yml b/plugins/redmine_omniauth_client/config/locales/cs.yml deleted file mode 100644 index b3408c4..0000000 --- a/plugins/redmine_omniauth_client/config/locales/cs.yml +++ /dev/null @@ -1,37 +0,0 @@ -# Czech strings go here for Rails i18n -cs: - oauth: - login_via_sso: 'Přihlásit se pirátskou identitou' - login_via_rm: 'Přihlásit se heslem z Redmine' - - mapping_headline: 'Mapování skupin' - save: 'Uložit' - delete: 'Smazat' - edit: 'Upravit' - saved_settings: 'Uložené mapování' - - app_name: 'Název aplikace:' - site_url: 'URL stránky:' - auth_url: 'URL autorizace:' - token_url: 'URL tokenu:' - ws_url: 'URL webové služby:' - client_id: 'ID klienta:' - client_secret: 'Tajný klíč klienta:' - sso_u_id: 'SSO id uživatele:' - username_f: 'Pole uživatelského jména:' - mail_f: 'Pole emailu:' - firstname_f: 'Pole křestního jména:' - lastname_f: 'Pole příjmení:' - resourecs_f: 'Pole zdrojů skupin:' - groups_f: 'Pole redmine skupin:' - roles_f: 'Pole rolí:' - remove_from_groups: 'Odebrat uživatele ze skupiny v Redmine při jeho odebrání ze skupiny v SSO:' - remove_from_all_groups: 'Odstranit úplně ze všech skupin, nikoliv pouze z těch párovaných na SSO:' - force_acc_creation: 'Vynutit založení účtu:' - enable_oauth: 'Povolit OAuth autentizaci:' - - notices: - saved: 'Nastavení uloženo.' - notSaved: 'Chyba! Nastavení nebylo uloženo.' - groups_failed: 'Chyba! Selhalo přiřazení skupin.' - unable_to_authenticate: 'Chyba! Přihlášení selhalo. Kontaktujte prosím správce serveru' diff --git a/plugins/redmine_omniauth_client/config/locales/en.yml b/plugins/redmine_omniauth_client/config/locales/en.yml deleted file mode 100644 index 3fd9095..0000000 --- a/plugins/redmine_omniauth_client/config/locales/en.yml +++ /dev/null @@ -1,41 +0,0 @@ -en: - notice_unable_to_obtain_app_credentials: "Unable to obtain credentials from %{app}." - notice_domain_not_allowed: "You can not login using %{domain} domain." - notice_access_denied: "You must allow to use you %{app} credentials to enter this site." - login_via_app: "" - unable_create_account: "Unable to create account." - - oauth: - login_via_sso: 'Login via SSO' - - mapping_headline: 'Groups mapping' - save: 'Save' - delete: 'Delete' - edit: 'Edit' - saved_settings: 'Saved mapping' - - app_name: 'Application Name:' - site_url: 'Site URL:' - auth_url: 'Authorization URL:' - token_url: 'Token URL:' - ws_url: 'Webservice URL:' - client_id: 'Client ID:' - client_secret: 'Client Secret:' - sso_u_id: 'SSO user id:' - username_f: 'Username field:' - mail_f: 'Mail field:' - firstname_f: 'First name field:' - lastname_f: 'Last name field:' - resourecs_f: 'Group resources field:' - groups_f: 'Redmine groups field:' - roles_f: 'Roles field:' - remove_from_groups: 'Remove users from redmine groups with removing from SSO group:' - remove_from_all_groups: 'Remove user from all groups (including SSO-non-mapped):' - force_acc_creation: 'Force account creation:' - enable_oauth: 'Enable OAuth authentification:' - - notices: - saved: 'Settings saved.' - notSaved: 'Error! Settings not saved.' - groups_failed: 'Error! Groups assignement failed.' - unable_to_authenticate: 'Error! Authentication failed.' diff --git a/plugins/redmine_omniauth_client/config/locales/fr.yml b/plugins/redmine_omniauth_client/config/locales/fr.yml deleted file mode 100644 index cf559db..0000000 --- a/plugins/redmine_omniauth_client/config/locales/fr.yml +++ /dev/null @@ -1,6 +0,0 @@ -fr: - notice_unable_to_obtain_app_credentials: "Impossible d'obtenir les droits d'authentification sur le %{app}." - notice_domain_not_allowed: "Vous ne pouvez pas vous identifier sur le domaine %{domain}." - notice_access_denied: "Vous devez autoriser l'utilisation de vos données provenant du %{app}." - login_via_app: "" - unable_create_account: "Votre compte n'a pas pu être créé." diff --git a/plugins/redmine_omniauth_client/config/locales/ru.yml b/plugins/redmine_omniauth_client/config/locales/ru.yml deleted file mode 100644 index 0144c48..0000000 --- a/plugins/redmine_omniauth_client/config/locales/ru.yml +++ /dev/null @@ -1,5 +0,0 @@ -ru: - notice_unable_to_obtain_app_credentials: "Не удалось получить данные от %{app}." - notice_domain_not_allowed: "Вы не можете войти в систему при помощи домена %{domain}." - notice_access_denied: "Для корректного входа необходимо разрешить приложению доступ к аккаунту." - login_via_app: "Войти с %{app}" diff --git a/plugins/redmine_omniauth_client/config/routes.rb b/plugins/redmine_omniauth_client/config/routes.rb deleted file mode 100644 index 3d34c40..0000000 --- a/plugins/redmine_omniauth_client/config/routes.rb +++ /dev/null @@ -1,5 +0,0 @@ -get 'oauth_client', :to => 'redmine_oauth#oauth' -get 'oauth_client_callback', :to => 'redmine_oauth#oauth_callback', :as => 'oauth_callback' -get 'group_mapping', :to => 'redmine_oauth#group_mapping' -post 'post/redmine_oauth#edit', :to => 'redmine_oauth#edit' -post 'post/redmine_oauth#delete', :to => 'redmine_oauth#delete' \ No newline at end of file diff --git a/plugins/redmine_omniauth_client/db/migrate/001_create_group_mappings.rb b/plugins/redmine_omniauth_client/db/migrate/001_create_group_mappings.rb deleted file mode 100644 index 98c0ab3..0000000 --- a/plugins/redmine_omniauth_client/db/migrate/001_create_group_mappings.rb +++ /dev/null @@ -1,8 +0,0 @@ -class CreateGroupMappings < ActiveRecord::Migration[5.2] - def change - create_table :group_mappings do |t| - t.string :variable - t.integer :group_id - end - end -end diff --git a/plugins/redmine_omniauth_client/db/migrate/002_update_users_ssouid.rb b/plugins/redmine_omniauth_client/db/migrate/002_update_users_ssouid.rb deleted file mode 100644 index 99b1d84..0000000 --- a/plugins/redmine_omniauth_client/db/migrate/002_update_users_ssouid.rb +++ /dev/null @@ -1,13 +0,0 @@ -class UpdateUsersSsouid < ActiveRecord::Migration[5.2] - def self.up - change_table :users do |t| - t.column :sso_u_id, :string - end - end - - def self.down - change_table :users do |t| - t.remove :sso_u_id - end - end -end \ No newline at end of file diff --git a/plugins/redmine_omniauth_client/init.rb b/plugins/redmine_omniauth_client/init.rb deleted file mode 100644 index 293026b..0000000 --- a/plugins/redmine_omniauth_client/init.rb +++ /dev/null @@ -1,31 +0,0 @@ -require 'redmine' -#require 'openssl' -require_dependency 'redmine_omniauth_client/hooks' -require_dependency 'group_patch' -Group.send(:include, GroupPatch) - -Redmine::Plugin.register :redmine_omniauth_client do - name 'Redmine OAuth Client plugin' - author 'Andre Cardoso <acardoso@orupaca.fr>' - description 'This is a plugin for Redmine registration through OAuth 2.0 protocole.' - version '0.0.1' - url 'https://github.com/arlin2050/redmine_omniauth_client.git' - - #OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE - - settings :default => { - :app_name => "Application name", - :site_url => "http://example.net", - :auth_url => "/oauth/v2/auth", - :token_url => "/oauth/v2/token", - :ws_url => "/current.json", - :client_id => "", - :client_secret => "", - :field_username => "", - :field_email => "", - :field_firstname => "", - :field_lastname => "", - :force_account_creation => true, - :oauth_autentification => false, - }, :partial => 'settings/client_settings' -end diff --git a/plugins/redmine_omniauth_client/lib/group_patch.rb b/plugins/redmine_omniauth_client/lib/group_patch.rb deleted file mode 100644 index a4223fe..0000000 --- a/plugins/redmine_omniauth_client/lib/group_patch.rb +++ /dev/null @@ -1,15 +0,0 @@ -module GroupPatch - def self.included(base) - base.extend(ClassMethods) - base.send(:include, InstanceMethods) - end - - module InstanceMethods - def get_id - return self.id - end - end - - module ClassMethods - end -end \ No newline at end of file diff --git a/plugins/redmine_omniauth_client/lib/redmine_omniauth_client/hooks.rb b/plugins/redmine_omniauth_client/lib/redmine_omniauth_client/hooks.rb deleted file mode 100644 index a3a1fdd..0000000 --- a/plugins/redmine_omniauth_client/lib/redmine_omniauth_client/hooks.rb +++ /dev/null @@ -1,9 +0,0 @@ -module RedmineOmniauthRor - class Hooks < Redmine::Hook::ViewListener - def view_account_login_top(context = {}) - context[:controller].send(:render_to_string, { - :partial => "hooks/view_account_login_top", - :locals => context}) - end - end -end diff --git a/plugins/redmine_omniauth_client/test/functional/redmine_oauth_controller_test.rb b/plugins/redmine_omniauth_client/test/functional/redmine_oauth_controller_test.rb deleted file mode 100644 index 9d5dc38..0000000 --- a/plugins/redmine_omniauth_client/test/functional/redmine_oauth_controller_test.rb +++ /dev/null @@ -1,116 +0,0 @@ -require File.expand_path('../../test_helper', __FILE__) - -class RedmineOauthControllerTest < ActionController::TestCase - include Helpers::MailHelper - def setup - @default_user_credentials = { :firstname => 'Cool', - :lastname => 'User', - :mail => 'user@somedomain.com'} - @default_response_body = {:verified_email => true, - :name => 'Cool User', - :given_name => 'Cool', - :family_name => 'User', - :email => 'user@somedomain.com'} - User.current = nil - Setting.openid = '1' - OAuth2::AccessToken.any_instance.stubs(:get => OAuth2::Response.new(nil)) - OAuth2::Client.any_instance.stubs(:get_token => OAuth2::AccessToken.new('code', 'redirect_uri')) - end - - #creates a new user with the credentials listed in the options and fills in the missing data by default data - def new_user options = {} - User.where(@default_user_credentials.merge(options)).delete_all - user = User.new @default_user_credentials.merge(options) - user.login = options[:login] || 'cool_user' - user - end - - #creates a new user with the credentials listed in the options and fills in the missing data by default data - def set_response_body_stub options = {} - OAuth2::Response.any_instance.stubs(:body => @default_response_body.merge(options).to_json) - end - - def test_oauth_client_with_enabled_oauth_authentification - Setting.plugin_redmine_omniauth_client[:oauth_authentification] = nil - get :oauth_client - assert_response 404 - end - - def test_oauth_client_callback_for_existing_non_active_user - Setting.self_registration = '2' - user = new_user :status => User::STATUS_REGISTERED - assert user.save - set_response_body_stub - get :oauth_client_callback - assert_redirected_to signin_path - end - - def test_oauth_client_callback_for_existing_active_user - user = new_user - user.activate - assert user.save - set_response_body_stub - get :oauth_client_callback - assert_redirected_to :controller => 'my', :action => 'page' - end - - def test_oauth_client_callback_for_new_user_with_valid_credentials_and_sefregistration_enabled - Setting.self_registration = '3' - set_response_body_stub - get :oauth_client_callback - assert_redirected_to :controller => 'my', :action => 'account' - user = User.find_by_mail(@default_response_body[:email]) - assert_equal user.mail, @default_response_body[:email] - assert_equal user.login, parse_email(@default_response_body[:email])[:login] - end - - def test_oauth_client_callback_for_new_user_with_valid_credentials_and_sefregistration_disabled - Setting.self_registration = '2' - set_response_body_stub - get :oauth_client_callback - assert_redirected_to signin_path - end - - def test_oauth_client_callback_with_new_user_with_invalid_oauth_provider - Setting.self_registration = '3' - set_response_body_stub :verified_email => false - get :oauth_client_callback - assert_redirected_to signin_path - end - - def test_oauth_client_callback_with_new_user_created_with_email_activation_should_have_a_token - Setting.self_registration = '1' - set_response_body_stub - get :oauth_client_callback - assert_redirected_to :signin - user = User.find_by_mail(@default_user_credentials[:mail]) - assert user - token = Token.find_by_user_id_and_action(user.id, 'register') - assert token - end - - def test_oauth_client_callback_with_new_user_created_with_manual_activation - Setting.self_registration = '2' - set_response_body_stub - get :oauth_client_callback - assert_redirected_to :signin - user = User.find_by_mail(@default_user_credentials[:mail]) - assert user - assert_equal User::STATUS_REGISTERED, user.status - end - - def test_oauth_client_callback_with_not_allowed_email_domain - Setting.plugin_redmine_omniauth_client[:allowed_domains] = "twinslash.com" - set_response_body_stub - get :oauth_client_callback - assert_redirected_to :signin - end - - def test_oauth_client_callback_with_allowed_email_domain - Setting.self_registration = '3' - Setting.plugin_redmine_omniauth_client[:allowed_domains] = parse_email(@default_response_body[:email])[:domain] - set_response_body_stub - get :oauth_client_callback - assert_redirected_to :controller => 'my', :action => 'account' - end -end diff --git a/plugins/redmine_omniauth_client/test/test_helper.rb b/plugins/redmine_omniauth_client/test/test_helper.rb deleted file mode 100644 index 54685d3..0000000 --- a/plugins/redmine_omniauth_client/test/test_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -# Load the Redmine helper -require File.expand_path(File.dirname(__FILE__) + '/../../../test/test_helper') diff --git a/plugins/redmine_omniauth_client/test/unit/group_mapping_test.rb b/plugins/redmine_omniauth_client/test/unit/group_mapping_test.rb deleted file mode 100644 index f03a143..0000000 --- a/plugins/redmine_omniauth_client/test/unit/group_mapping_test.rb +++ /dev/null @@ -1,9 +0,0 @@ -require File.expand_path('../../test_helper', __FILE__) - -class GroupMappingTest < ActiveSupport::TestCase - - # Replace this with your real tests. - def test_truth - assert true - end -end diff --git a/plugins/redmine_pivot_table b/plugins/redmine_pivot_table deleted file mode 160000 index 8049f7b..0000000 --- a/plugins/redmine_pivot_table +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8049f7ba3cfdbb5670ed84c3e82dfa2924cbb712 diff --git a/plugins/redmine_theme_changer b/plugins/redmine_theme_changer deleted file mode 160000 index 30247a1..0000000 --- a/plugins/redmine_theme_changer +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 30247a1f11ed12104d36b9ed77cea128f364a1d0 diff --git a/plugins/redmine_work_time b/plugins/redmine_work_time deleted file mode 160000 index d30876f..0000000 --- a/plugins/redmine_work_time +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d30876f176e899dfe6d57ddfd7d024e7dffd1e39 diff --git a/plugins/redmine_zulip b/plugins/redmine_zulip deleted file mode 160000 index 0d47476..0000000 --- a/plugins/redmine_zulip +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0d474763f1678e476fb876028e2c8951f5d545ca diff --git a/plugins/redmineup_tags/.drone.jsonnet b/plugins/redmineup_tags/.drone.jsonnet deleted file mode 100644 index 94601f9..0000000 --- a/plugins/redmineup_tags/.drone.jsonnet +++ /dev/null @@ -1,27 +0,0 @@ -local Pipeline(rubyVer, db, license, redmine, dependents) = { - kind: "pipeline", - name: rubyVer + "-" + db + "-" + redmine + "-" + license + "-" + dependents, - steps: [ - { - name: "tests", - image: "redmineup/redmineup_ci", - commands: [ - "service postgresql start && service mysql start && sleep 5", - "export PATH=~/.rbenv/shims:$PATH", - "export CODEPATH=`pwd`", - "/root/run_for.sh redmineup_tags+" + license + " ruby-" + rubyVer + " " + db + " redmine-" + redmine + " " + dependents - ] - } - ] -}; - -[ - Pipeline("3.2.2", "mysql", "pro", "trunk", "redmine_agile+pro"), - Pipeline("3.2.2", "pg", "pro", "5.1", ""), - Pipeline("3.0.6", "mysql", "pro", "5.0", "redmine_agile+light"), - Pipeline("2.7.8", "mysql", "light", "4.2", ""), - Pipeline("2.7.8", "pg", "pro", "4.2", "redmine_contacts+pro"), - Pipeline("2.3.8", "mysql", "pro", "4.0", ""), - Pipeline("2.3.8", "mysql", "light", "4.0", ""), - Pipeline("2.3.8", "pg", "pro", "4.0", "") -] diff --git a/plugins/redmineup_tags/Gemfile b/plugins/redmineup_tags/Gemfile deleted file mode 100644 index ffc40a3..0000000 --- a/plugins/redmineup_tags/Gemfile +++ /dev/null @@ -1 +0,0 @@ -gem 'redmineup' diff --git a/plugins/redmineup_tags/app/controllers/issue_tags_controller.rb b/plugins/redmineup_tags/app/controllers/issue_tags_controller.rb deleted file mode 100644 index d2911a1..0000000 --- a/plugins/redmineup_tags/app/controllers/issue_tags_controller.rb +++ /dev/null @@ -1,87 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -class IssueTagsController < ApplicationController - before_action :find_issues, only: [:edit, :update] - - def edit - return unless User.current.allowed_to?(:edit_tags, @projects.first) - @issue_ids = params[:ids] - @is_bulk_editing = @issue_ids.size > 1 - @most_used_tags = Issue.all_tags(sort_by: 'count', order: 'DESC').limit(10) - end - - def update - if User.current.allowed_to?(:edit_tags, @projects.first) - tags = params[:issue] && params[:issue][:tag_list] ? params[:issue][:tag_list].reject(&:empty?) : [] - - unless User.current.allowed_to?(:create_tags, @projects.first) || Issue.allowed_tags?(tags) - flash[:error] = t(:notice_failed_to_add_tags) - return - end - - if update_tags(@issues, tags) - flash[:notice] = t(:notice_tags_added) - else - flash[:error] = t(:notice_failed_to_add_tags) - end - else - flash[:error] = t(:notice_failed_to_add_tags) - end - rescue Exception => e - puts e - flash[:error] = t(:notice_failed_to_add_tags) - ensure - redirect_to_referer_or { render text: 'Tags updated.', layout: true } - end - - private - - def update_tags(issues, tags) - if (tags.present? && issues.size > 1) || params[:add_only] - add_issues_tags(issues, tags) - else - update_issues_tags(issues, tags) - end - end - - def add_issues_tags(issues, tags) - saved = true - Issue.transaction do - issues.each do |issue| - issue.tag_list = (issue.tag_list + tags).uniq - saved &&= issue.save - raise ActiveRecord::Rollback unless saved - end - end - saved - end - - def update_issues_tags(issues, tags) - saved = true - Issue.transaction do - issues.each do |issue| - issue.tag_list = tags - saved &&= issue.save - raise ActiveRecord::Rollback unless saved - end - end - saved - end -end diff --git a/plugins/redmineup_tags/app/controllers/tags_controller.rb b/plugins/redmineup_tags/app/controllers/tags_controller.rb deleted file mode 100644 index b32a1e6..0000000 --- a/plugins/redmineup_tags/app/controllers/tags_controller.rb +++ /dev/null @@ -1,89 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -class TagsController < ApplicationController - before_action :require_admin - before_action :find_tag, only: [:edit, :update] - before_action :bulk_find_tags, only: [:context_menu, :merge, :destroy] - - helper :issues_tags - - def edit - end - - def destroy - @tags.each do |tag| - begin - tag.reload.destroy - rescue ::ActiveRecord::RecordNotFound - end - end - - redirect_back_or_default(controller: 'settings', action: 'plugin', id: 'redmineup_tags', tab: 'manage_tags') - end - - def update - @tag.name = params[:tag][:name] if params[:tag] - if @tag.save - flash[:notice] = l(:notice_successful_update) - respond_to do |format| - format.html { redirect_to controller: 'settings', action: 'plugin', id: 'redmineup_tags', tab: 'manage_tags' } - format.xml {} - end - else - respond_to do |format| - format.html { render action: 'edit' } - end - end - end - - def context_menu - @tag = @tags.first if @tags.size == 1 - @back = back_url - render layout: false - end - - def merge - if request.post? && params[:tag] && params[:tag][:name] - params_hash = params[:tag].respond_to?(:to_unsafe_hash) ? params[:tag].to_unsafe_hash : params - Redmineup::Tagging.transaction do - tag = Redmineup::Tag.find_by_name(params_hash['name']) || Redmineup::Tag.create(params_hash) - Redmineup::Tagging.where(tag_id: @tags.map(&:id)).update_all(tag_id: tag.id) - @tags.select { |t| t.id != tag.id }.each{ |t| t.destroy } - redirect_to controller: 'settings', action: 'plugin', id: 'redmineup_tags', tab: 'manage_tags' - end - end - end - - private - - def bulk_find_tags - @tags = Redmineup::Tag.joins("JOIN #{Redmineup::Tagging.table_name} ON #{Redmineup::Tagging.table_name}.tag_id = #{Redmineup::Tag.table_name}.id "). - select("#{Redmineup::Tag.table_name}.*, COUNT(DISTINCT #{Redmineup::Tagging.table_name}.taggable_id) AS count"). - where(id: params[:id] ? [params[:id]] : params[:ids]). - group("#{Redmineup::Tag.table_name}.id, #{Redmineup::Tag.table_name}.name") - raise ActiveRecord::RecordNotFound if @tags.empty? - end - - def find_tag - @tag = Redmineup::Tag.find(params[:id]) - rescue ActiveRecord::RecordNotFound - render_404 - end -end diff --git a/plugins/redmineup_tags/app/helpers/issues_tags_helper.rb b/plugins/redmineup_tags/app/helpers/issues_tags_helper.rb deleted file mode 100644 index 41f6a19..0000000 --- a/plugins/redmineup_tags/app/helpers/issues_tags_helper.rb +++ /dev/null @@ -1,41 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -module IssuesTagsHelper - def sidebar_tags - unless @sidebar_tags - @sidebar_tags = [] - projects = [@project] + (@project && Setting.display_subprojects_issues? ? @project.descendants : []) - if RedmineupTags.settings['issues_sidebar'].to_sym != :none - @sidebar_tags = Issue.available_tags(project: @project, - projects: projects, - open_only: (RedmineupTags.settings['issues_open_only'].to_i == 1)) - end - end - @sidebar_tags.to_a - end - - def render_sidebar_tags - render_tags_list(sidebar_tags, show_count: (RedmineupTags.settings['issues_show_count'].to_i == 1), - open_only: (RedmineupTags.settings['issues_open_only'].to_i == 1), - style: RedmineupTags.settings['issues_sidebar'].to_sym) - end -end diff --git a/plugins/redmineup_tags/app/helpers/tags_helper.rb b/plugins/redmineup_tags/app/helpers/tags_helper.rb deleted file mode 100644 index 3b3908d..0000000 --- a/plugins/redmineup_tags/app/helpers/tags_helper.rb +++ /dev/null @@ -1,129 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -require 'digest/md5' - -module TagsHelper - include Redmineup::TagsHelper - - def render_issue_tag_link(tag, options = {}) - filters = [[:issue_tags, '=', tag.name]] - filters << [:status_id, 'o'] if options[:open_only] - content = - if options[:use_search] - link_to(tag, controller: 'search', action: 'index', id: @project, q: tag.name, wiki_pages: true, issues: true) - else - link_to_issue_filter tag.name, filters, project_id: @project - end - content << content_tag('span', "(#{tag.count})", class: 'tag-count') if options[:show_count] - - style = RedmineupTags.settings['issues_use_colors'].to_i > 0 ? { class: 'tag-label-color', style: "background-color: #{tag_color(tag)}" } : { class: 'tag-label' } - content_tag('span', content, style) - end - - def tag_color(tag) - tag_name = tag.respond_to?(:name) ? tag.name : tag - "##{Digest::MD5.hexdigest(tag_name)[0..5]}" - end - - def render_tags_list(tags, options = {}) - unless tags.nil? || tags.empty? - content, style = '', options.delete(:style) - - tags = tags.all.to_a if tags.respond_to?(:all) - - case sorting = "#{RedmineupTags.settings['issues_sort_by']}:#{RedmineupTags.settings['issues_sort_order']}" - when 'name:asc' then tags.sort! { |a, b| a.name <=> b.name } - when 'name:desc' then tags.sort! { |a, b| b.name <=> a.name } - when 'count:asc' then tags.sort! { |a, b| a.count <=> b.count } - when 'count:desc' then tags.sort! { |a, b| b.count <=> a.count } - # Unknown sorting option. Fallback to default one - else - logger.warn "[redmine_tags] Unknown sorting option: <#{sorting}>" - tags.sort! { |a, b| a.name <=> b.name } - end - - if style == :list - list_el, item_el = 'ul', 'li' - elsif style == :simple_cloud - list_el, item_el = 'div', 'span' - elsif style == :cloud - list_el, item_el = 'div', 'span' - else - raise 'Unknown list style' - end - - content = content.html_safe - if style == :list && RedmineupTags.settings['issues_sort_by'] == 'name' - tags.group_by { |tag| tag.name.downcase.first }.each do |letter, grouped_tags| - content << content_tag(item_el, letter.upcase, class: 'letter', :style => '') - add_tags(style, grouped_tags, content, item_el, options) - end - else - add_tags(style, tags, content, item_el, options) - end - - content_tag(list_el, content, class: 'tags-cloud', style: (style == :simple_cloud ? 'text-align: left;' : '')) - end - end - - def link_to_issue_filter(title, filters, options = {}) - options.merge! link_to_issue_filter_options(filters) - link_to title, options - end - - # returns hash suitable for passing it to the <tt>to_link</tt> - # === parameters - # * <i>filters</i> = array of arrays. each child array is an array of strings: - # name, operator and value - # === example - # link_to 'foobar', link_to_issue_filter_options [[ :tags, '~', 'foobar' ]] - # - # filters = [[ :tags, '~', 'bazbaz' ], [:status_id, 'o']] - # link_to 'bazbaz', link_to_issue_filter_options filters - def link_to_issue_filter_options(filters) - options = { - controller: 'issues', - action: 'index', - set_filter: 1, - fields: [], - values: {}, - operators: {} - } - - filters.each do |f| - name, operator, value = f - options[:fields].push(name) - options[:operators][name] = operator - options[:values][name] = [value] - end - - options - end - - private - - def add_tags(style, tags, content, item_el, options) - tag_cloud tags, (1..8).to_a do |tag, weight| - content << ' '.html_safe + content_tag(item_el, render_issue_tag_link(tag, options), class: "tag-nube-#{weight}", style: (style == :simple_cloud ? 'font-size: 1em;' : '')) + ' '.html_safe - end - end -end diff --git a/plugins/redmineup_tags/app/views/context_menus/_issues_tags.html.erb b/plugins/redmineup_tags/app/views/context_menus/_issues_tags.html.erb deleted file mode 100644 index 9923f00..0000000 --- a/plugins/redmineup_tags/app/views/context_menus/_issues_tags.html.erb +++ /dev/null @@ -1,6 +0,0 @@ -<% if User.current.allowed_to?(:edit_tags, @projects || @project) %> - <li><%= context_menu_link l(:label_add_tags), - edit_issue_tags_path(:ids => @issue_ids), - :remote => true, - :class => 'icon icon-add-tags' %></li> -<% end %> diff --git a/plugins/redmineup_tags/app/views/issue_tags/_edit_modal.html.erb b/plugins/redmineup_tags/app/views/issue_tags/_edit_modal.html.erb deleted file mode 100644 index 6063025..0000000 --- a/plugins/redmineup_tags/app/views/issue_tags/_edit_modal.html.erb +++ /dev/null @@ -1,42 +0,0 @@ -<h3 class="title"><%= l(:label_add_tags) %></h3> - -<% if @is_bulk_editing %> - <h3><%= l(:label_bulk_edit_selected_issues) %></h3> - <ul> - <% @issues.each do |issue| %> - <%= content_tag 'li', link_to_issue(issue) %> - <% end %> - </ul> -<% else %> - <h3><%= content_tag 'span', link_to_issue(@issues.first) %></h3> -<% end %> - - -<%= form_tag(update_issue_tags_path(:ids => @issue_ids), - :method => :post, - :id => 'edit-issue-tags-form') do %> - - <%= hidden_field_tag :add_only, 1 %> - <fieldset class="box"> - <legend><%= l(:tags) %></legend> - <div id="issue_tags"> - <%= select2_tag 'issue[tag_list]', - [], - width: '100%', - multiple: true, - url: auto_complete_redmine_tags_path, - placeholder: @is_bulk_editing ? t(:label_no_change_option) : '+ add tag', - tags: User.current.allowed_to?(:create_tags, @project) %> - </div> - - <p class="most_used_tags"> - <%= safe_join(@most_used_tags.collect { |t| content_tag('span', t.name, :class => 'most_used_tag') }, ', ') %> - </p> - <%= javascript_tag "var mostUsedTags = #{@most_used_tags.map(&:name)}" %> - </fieldset> - - <div class="buttons"> - <%= submit_tag l(:button_add), :name => nil %> - <%= submit_tag l(:button_cancel), :name => nil, :onclick => "hideModal(this);", :type => 'button' %> - </div> -<% end %> diff --git a/plugins/redmineup_tags/app/views/issue_tags/edit.js.erb b/plugins/redmineup_tags/app/views/issue_tags/edit.js.erb deleted file mode 100644 index b2ae127..0000000 --- a/plugins/redmineup_tags/app/views/issue_tags/edit.js.erb +++ /dev/null @@ -1,2 +0,0 @@ -$('#ajax-modal').html('<%= escape_javascript(render :partial => 'issue_tags/edit_modal') %>'); -showModal('ajax-modal', '600px'); diff --git a/plugins/redmineup_tags/app/views/issues/_tags.html.erb b/plugins/redmineup_tags/app/views/issues/_tags.html.erb deleted file mode 100644 index 15a2574..0000000 --- a/plugins/redmineup_tags/app/views/issues/_tags.html.erb +++ /dev/null @@ -1,5 +0,0 @@ -<% if issue.tag_list.present? %> - <%= issue_fields_rows do |rows| - rows.left l(:tags), safe_join(issue.tag_counts.collect{ |t| render_issue_tag_link(t, :show_count => false, :open_only => RedmineupTags.settings['issues_open_only'].to_i > 0 ) }, RedmineupTags.settings['issues_use_colors'].to_i > 0 ? ' ' : ', ') - end %> -<% end %> diff --git a/plugins/redmineup_tags/app/views/issues/_tags_form.html.erb b/plugins/redmineup_tags/app/views/issues/_tags_form.html.erb deleted file mode 100644 index ffa254c..0000000 --- a/plugins/redmineup_tags/app/views/issues/_tags_form.html.erb +++ /dev/null @@ -1,23 +0,0 @@ -<% if User.current.allowed_to?(:edit_tags, (@issue && @issue.project) || @projects || @project) %> - <div class="<%= 'splitcontentleft' if defined? form %>"> - <p id="issue_tags"> - <label><%= l(:tags) %></label> - <% text_field_options = {:label => :tags, :size => 60, :class => 'hol'} %> - <% tags = defined?(form) ? form.object.tag_list : [] %> - <% if defined? form || defined? issues %> - <%= select2_tag 'issue[tag_list]', - options_for_select(tags.map{ |tag| [tag, tag] }, tags), - :multiple => true, - :include_hidden => (params[:action] != 'bulk_edit'), - :style => 'width: 100%;', - :url => auto_complete_redmine_tags_path, - :placeholder => params[:action] == 'bulk_edit' ? t(:label_no_change_option) : '+ add tag', - :tags => User.current.allowed_to?(:create_tags, @projects || @project) %> - - <% else %> - <%= label_tag :tags, nil, :for => :issue_tag_list %> - <%= text_field_tag 'issue[tag_list]', "", :class => text_field_options[:class], :size => text_field_options[:size], :id => :issue_tag_list %> - <% end %> - </p> - </div> -<% end %> diff --git a/plugins/redmineup_tags/app/views/issues/_tags_sidebar.html.erb b/plugins/redmineup_tags/app/views/issues/_tags_sidebar.html.erb deleted file mode 100644 index 966a296..0000000 --- a/plugins/redmineup_tags/app/views/issues/_tags_sidebar.html.erb +++ /dev/null @@ -1,6 +0,0 @@ -<% unless sidebar_tags.empty? -%> -<div class="sidebar-tags"> - <h3><%= l(:tags) %></h3> - <%= render_sidebar_tags %> -</div> -<% end -%> diff --git a/plugins/redmineup_tags/app/views/reports/_tags_simple.html.erb b/plugins/redmineup_tags/app/views/reports/_tags_simple.html.erb deleted file mode 100644 index 3fcf272..0000000 --- a/plugins/redmineup_tags/app/views/reports/_tags_simple.html.erb +++ /dev/null @@ -1,8 +0,0 @@ -<h3> - <%=l(:field_tags)%> - <%= link_to l(:label_details), - project_issues_report_details_path(@project, detail: 'tag'), - :class => 'icon-only icon-zoom-in', - :title => l(:label_details) %> -</h3> -<%= render partial: 'simple', locals: { data: @issues_by_tags, field_name: "tag_id", rows: @tags } %> diff --git a/plugins/redmineup_tags/app/views/tags/_additional_assets.html.erb b/plugins/redmineup_tags/app/views/tags/_additional_assets.html.erb deleted file mode 100644 index 8b941e6..0000000 --- a/plugins/redmineup_tags/app/views/tags/_additional_assets.html.erb +++ /dev/null @@ -1,5 +0,0 @@ -<% content_for :header_tags do %> - <%= stylesheet_link_tag(:redmine_tags, plugin: 'redmineup_tags') %> - <%= javascript_include_tag(:redmine_tags, plugin: 'redmineup_tags') %> - <%= select2_assets %> -<% end %> diff --git a/plugins/redmineup_tags/app/views/tags/_general.html.erb b/plugins/redmineup_tags/app/views/tags/_general.html.erb deleted file mode 100644 index 8f3c36e..0000000 --- a/plugins/redmineup_tags/app/views/tags/_general.html.erb +++ /dev/null @@ -1,25 +0,0 @@ -<p> - <%= label_tag 'settings[issues_sidebar]', l(:issues_sidebar) %> - <%= select_tag 'settings[issues_sidebar]', options_for_select(%w(none list cloud simple_cloud).collect{|v| [l("issue_tags_sidebar_#{v}"), v]}, @settings['issues_sidebar']) %> -</p> -<p> - <%= label_tag 'settings[issues_show_count]', l(:issues_show_count) %> - <%= check_box_tag 'settings[issues_show_count]', 1, 1 == @settings['issues_show_count'].to_i %> -</p> -<p> - <%= label_tag 'settings[issues_open_only]', l(:issues_open_only) %> - <%= check_box_tag 'settings[issues_open_only]', 1, 1 == @settings['issues_open_only'].to_i %> -</p> -<p> - <%= label_tag 'settings[issues_sort_by]', l(:issues_sort_by) %> - <%= select_tag 'settings[issues_sort_by]', options_for_select(%w(name count).collect{|v| [l("issues_sort_by_#{v}"), v]}, @settings['issues_sort_by']) %> - <%= select_tag 'settings[issues_sort_order]', options_for_select(%w(asc desc).collect{|v| [l("issues_sort_order_#{v}"), v]}, @settings['issues_sort_order']) %> -</p> -<p> - <%= label_tag 'settings[tags_suggestion_order]', l(:tags_suggestion_order) %> - <%= select_tag 'settings[tags_suggestion_order]', options_for_select(%w(name last_created most_used).collect{|v| [l("tags_order_by_#{v}"), v]}, @settings['tags_suggestion_order']) %> -</p> -<p> - <%= label_tag 'settings[issues_use_colors]', l(:issues_use_colors) %> - <%= check_box_tag 'settings[issues_use_colors]', 1, 1 == @settings['issues_use_colors'].to_i %> -</p> diff --git a/plugins/redmineup_tags/app/views/tags/_manage_tags.html.erb b/plugins/redmineup_tags/app/views/tags/_manage_tags.html.erb deleted file mode 100644 index 64cbf45..0000000 --- a/plugins/redmineup_tags/app/views/tags/_manage_tags.html.erb +++ /dev/null @@ -1,46 +0,0 @@ -<% tags = Issue.all_tag_counts(:order => :name) %> -<% unless tags.to_a.empty? %> - <table class = "list issues"> - <thead> - <tr> - <th class="checkbox hide-when-print"> - <%= link_to image_tag('toggle_check.png'), {}, - :onclick => 'toggleIssuesSelection(this); return false;', - :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %> - </th> - <th><%= l(:field_name) %></th> - <th align="center" style="width:10%;"> </th> - </tr> - </thead> - <tbody> - <% tags.each do |tag| %> - <tr id="<%= tag.id %>" class="<%= cycle("odd", "even") %> hascontextmenu "> - <td class="checkbox hide-when-print"><%= check_box_tag("ids[]", tag.id, false, :id => nil) %></td> - <td><%= render_issue_tag_link(tag) %></td> - <td class="buttons"> - <%= link_to l(:button_edit), edit_tag_path(tag), - :class => 'icon icon-edit' %> - <%= link_to l(:button_delete), tags_path(:ids => tag), - :method => :delete, - :confirm => l(:text_are_you_sure), - :class => 'icon icon-del' %> - </td> - </tr> - <% end %> - </tbody> - </table> - - <% content_for :header_tags do - javascript_include_tag('context_menu') + stylesheet_link_tag('context_menu') - end %> - - <%= javascript_tag do %> - $(document).ready(function(){ - $('#settings form').data('cmUrl', '<%= tags_context_menu_path %>') - }) - <% end %> -<% else %> - <p class="nodata"><%= l(:label_no_data) %></p> -<% end %> - - diff --git a/plugins/redmineup_tags/app/views/tags/_select2_transformation_rules.html.erb b/plugins/redmineup_tags/app/views/tags/_select2_transformation_rules.html.erb deleted file mode 100644 index 58b491d..0000000 --- a/plugins/redmineup_tags/app/views/tags/_select2_transformation_rules.html.erb +++ /dev/null @@ -1 +0,0 @@ -<%= transform_to_select2('issue_tags', url: auto_complete_redmine_tags_path) %> diff --git a/plugins/redmineup_tags/app/views/tags/_settings.html.erb b/plugins/redmineup_tags/app/views/tags/_settings.html.erb deleted file mode 100644 index 543f4e4..0000000 --- a/plugins/redmineup_tags/app/views/tags/_settings.html.erb +++ /dev/null @@ -1,8 +0,0 @@ -<% tags_tabs = [{:name => 'general', :partial => 'tags/general', :label => :label_general}, - {:name => 'manage_tags', :partial => 'tags/manage_tags', :label => :issue_tags_manage_tags} - ] %> - - -<%= render_tabs tags_tabs %> - -<% html_title(l(:label_settings), l(:tags)) -%> diff --git a/plugins/redmineup_tags/app/views/tags/context_menu.html.erb b/plugins/redmineup_tags/app/views/tags/context_menu.html.erb deleted file mode 100644 index 31bf288..0000000 --- a/plugins/redmineup_tags/app/views/tags/context_menu.html.erb +++ /dev/null @@ -1,12 +0,0 @@ -<ul> - <% if @tag -%> - <li><%= link_to l(:button_edit), edit_tag_path(@tag), - :class => 'icon icon-edit' %></li> - <% else %> - <li><%= link_to l(:issue_tags_button_merge), merge_tags_path(:ids => @tags.collect(&:id)), - :class => 'icon icon-tags-merge' %></li> - <% end %> - - <li><%= link_to l(:button_delete), tags_path(:ids => @tags.collect(&:id), :back_url => @back), - :method => :delete, :data => {:confirm => l(:text_are_you_sure)}, :class => 'icon icon-del' %></li> -</ul> diff --git a/plugins/redmineup_tags/app/views/tags/edit.html.erb b/plugins/redmineup_tags/app/views/tags/edit.html.erb deleted file mode 100644 index 601e764..0000000 --- a/plugins/redmineup_tags/app/views/tags/edit.html.erb +++ /dev/null @@ -1,14 +0,0 @@ -<h2><%= link_to l(:setting_issue_tags), controller: 'settings', action: 'plugin', id: 'redmineup_tags', tab: 'manage_tags' %> » <%=h (l(:issue_tags_tag) + ": " + @tag.name) %></h2> - -<%= form_tag(tag_path(@tag, :tab => 'tags'), :class => "tabular", :method => :put) do %> - <%= error_messages_for 'tag' %> -<div class="box"> -<!--[form:optvalue]--> -<p><label for="tag_name"><%=l(:field_name)%></label> -<%= text_field 'tag', 'name' %></p> - - -</div> - - <%= submit_tag l(:button_save) %> -<% end %> diff --git a/plugins/redmineup_tags/app/views/tags/merge.html.erb b/plugins/redmineup_tags/app/views/tags/merge.html.erb deleted file mode 100644 index 76ac2ac..0000000 --- a/plugins/redmineup_tags/app/views/tags/merge.html.erb +++ /dev/null @@ -1,26 +0,0 @@ -<h2> - <%= link_to l(:setting_issue_tags), :controller => 'settings', :action => 'plugin', :id => 'redmineup_tags', :tab => 'manage_tags' %> » <%= l(:issue_tags_label_merge) %> -</h2> - -<%= form_tag(merge_tags_path(:ids => @tags.map(&:id)), :class => "tabular") do %> - <%= error_messages_for 'tag' %> - <%= render_tags_list(@tags, { - :show_count => true, - :open_only => false, - :style => :simple_cloud - }) %> - - -<div class="box"> - - -<!--[form:optvalue]--> -<p><label for="tag_name"><%=l(:field_name)%></label> -<%= text_field 'tag', 'name', :value => @tags.first.name %></p> - - -</div> - - <%= submit_tag l(:button_save) %> -<% end %> - diff --git a/plugins/redmineup_tags/assets/images/tag-icon.png b/plugins/redmineup_tags/assets/images/tag-icon.png deleted file mode 100644 index 9757fc6ed6597438eb8e5a70a1ab2402cdebd5d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 586 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$@%~i(`nz>DI|NyQCaN z+Fq+ZGds9lV3tj+Ldql`J!5B~PYmlc-f3uP<z2STv(@XE(YNT>9n+O*Io1EJXl|4( zJb85IN~{0h|1bY#a=BFYZl3ttGU>Hp+-K8-XDxFK4K<PK)n<4Tw9#)l^YOyIEUUR* z9$TaKawI<SVLEKE<a3Hqp<;<z(1H-Hxvd6WK4+h}v45?KHT4zVmV3IGDNIZB$>*Pw z1>Dx{c2leqn#g;4(*}dwCv~}#dyXfIbh|z&+NsQ;{5<x_*)(RM|NmY;IDFXn-aY2X z<Z5%NUJceuFTXIhbV~lr+B(Vi^;fClhc#<$AA5`cSj8+a|82s<0uN1r{^PM6tFLC| zAL*&t8FOmcxl_~5l{0-<%wAJ%)562X?A7R@qNF$}NN>8Rp>n*A*rt~s`+L8yYPPQB z-+8U!%z51<*Ix&6wKy%*E}!PKa6yOU&l)@XrW)~v^S%$B-D}!=bD4+QWDXXl_55)m zXO^dIj<lP7Hs*vi<4+a09l2{0qx|)c%9XcFpL#N7N{H6cOkvJN+$VBxH>SRy`?qfY z@!BK7rzd)-Oo`ArmML65f5wqVe;jJW97KEF_C8u_sT;BXzP;u?js;xphwmjAobY_} s`KOI~_|N+Ns|&tzeOz7q{Xaw08LKy2zEo>6FfcH9y85}Sb4q9e0C-6PEC2ui diff --git a/plugins/redmineup_tags/assets/images/tag_blue_add.png b/plugins/redmineup_tags/assets/images/tag_blue_add.png deleted file mode 100644 index f135248f82e3d0b87d29d1628057f62dc51ec6c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 671 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfyvO*#WBR<bnT?`-9dpO z$M4%4cAL5GHq(t#^;oOiB&Hjcc2VTYBC*Y@TthBoBugHga^-?mNr;JPt*v9=$8f8E z75;%PXG~0^Rc%i$|2(&P-pdp#JByfid!N_ryI*|&p^9gdM%RhwpHDn3I+3>dM2eBe z^2;7egR&WRgdP;-V(mHpxHZFUww8)q|N54KB|faZZqA|WuD>?sm}@BB;iBa3WU<NT z<PtablPN}b-+y1I(N*PlAVQ}t!C;5Tp^2|dCW`(~oF?6TkYVn=rUTnMCr7PqE3oKs zP}som(4#V|(nPAUtNxGN<Dd8J=G8H_9DA}ZYV9QMAAkQ@avZOkQoVQHEE5^Ni)p9Y z&e+}SIAG0r<Cb+xh?Zy(WB+mE=7LU_M>4Mi-<9po3R<{)#i=y59|27F#GflZEt(l~ z;AP1wfvG~hZd=#5@4WnSh3C=vTwh)qp1GuWWCG)l^}-%2LzKif+<u$AInHU}glS(j zw%>lsdV-JH=2yz`zuT?uR8>k^{bjW=%ugsU|9<37_ojbaniNi~4a;V$Jf^@eBmeP6 zm26(2^v(A+KJ(u{SoPB6+&$a0m>=tH&S%%!&G(t?A<*f#PEzksWCd&bN7J)hJ%_A( z4&^fOO!J$5{q@ydck^bdO;ngJH?J}L&cXfjwfFlrEKa}kv?%k2_i2-a=kMnp5vymO zy~j`Y-j~;5)-&1;KfG`w$E@=3mOkxc!4(JZhfK{}`uCFg5BoJ?tB)mZlu18XCAR;> fxBH>~-`NAJ6wV6gJzmMcz`)??>gTe~DWM4fv}`qZ diff --git a/plugins/redmineup_tags/assets/javascripts/redmine_tags.js b/plugins/redmineup_tags/assets/javascripts/redmine_tags.js deleted file mode 100644 index 4bb2891..0000000 --- a/plugins/redmineup_tags/assets/javascripts/redmine_tags.js +++ /dev/null @@ -1,19 +0,0 @@ -$(function () { - $('body').on('click', '.most_used_tags .most_used_tag', function (e) { - var $tagsSelect = $('select#issue_tag_list'); - var tag = e.target.innerText; - if ($tagsSelect.find("option[value='" + tag + "']").length === 0) { - var newOption = new Option(tag, tag, true, true); - $tagsSelect.append(newOption).trigger("change"); - } - - mostUsedTags = $.grep(mostUsedTags, function(t) { return t != tag; }); - var tagsHtml = mostUsedTags.map(function(tag) { - return '<span class="most_used_tag">' + tag + '</span>'; - }).join(', '); - - var $mostUsedTagsContainer = $(e.target).parent('.most_used_tags'); - $mostUsedTagsContainer.empty(); - $mostUsedTagsContainer.append(tagsHtml); - }); -}); diff --git a/plugins/redmineup_tags/assets/stylesheets/redmine_tags.css b/plugins/redmineup_tags/assets/stylesheets/redmine_tags.css deleted file mode 100644 index 67be79b..0000000 --- a/plugins/redmineup_tags/assets/stylesheets/redmine_tags.css +++ /dev/null @@ -1,44 +0,0 @@ -#admin-menu a.tags { background-image: url(../images/tag-icon.png);} - -#sidebar ul.tags-cloud { list-style: none; padding: 0px; } -#sidebar ul.tags-cloud li { margin: .25em 0px; } - -div.tags-cloud { text-align: center; } -.tag-label-color { - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 3px; - padding: 2px 4px; - display: inline-block; - font-size: 10px; - margin: 0px 0px 5px 2px; - color: white; -} - -table.list tr.issue .tag-label-color a, .tag-label-color a { color: white; } - -tr.issue td.tags, -table.list tr td.tags {text-align: left; white-space: normal;} - -div.tags-cloud .tag-nube-1 { font-size: .8em; } -div.tags-cloud .tag-nube-2 { font-size: .9em; } -div.tags-cloud .tag-nube-3 { font-size: 1em; } -div.tags-cloud .tag-nube-4 { font-size: 1.1em; } -div.tags-cloud .tag-nube-5 { font-size: 1.2em; } -div.tags-cloud .tag-nube-6 { font-size: 1.3em; } -div.tags-cloud .tag-nube-7 { font-size: 1.4em; } -div.tags-cloud .tag-nube-8 { font-size: 1.5em; } - -.tag-label .tag-count, -.tag-label-color .tag-count { font-size: .75em; margin-left: .5em; } - - -#sidebar ul.tags-cloud li.letter { border-bottom: 1px dotted; margin: 10px 30px 10px 0px; font-weight: bold; } - -#tr_tags .select2-selection { background: initial; } -#tr_tags .select2-selection__rendered { padding-left: 8px; } - -.icon-tags { background-image: url(../images/tag-icon.png);} -.icon-add-tags { background-image: url(../images/tag_blue_add.png);} - -.most_used_tag { cursor: pointer; color: #169; } -.most_used_tag:hover { text-decoration: underline;} diff --git a/plugins/redmineup_tags/config/locales/bg.yml b/plugins/redmineup_tags/config/locales/bg.yml deleted file mode 100644 index af3700e..0000000 --- a/plugins/redmineup_tags/config/locales/bg.yml +++ /dev/null @@ -1,43 +0,0 @@ -# This file is a part of redmine_tags -# redMine plugin, that adds tagging support. -# -# Bulgarian translation for redmine_tags -# by Ivan Cenov (jwalker_@Skype) i_cenov@botevgrad.com -# -# Copyright (c) 2010 Aleksey V Zapparov AKA ixti -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -bg: - tags: Маркери - field_tags: Маркери - field_tag_list: Маркери - setting_issue_tags: Маркери на задачите - issues_sidebar: Показване на страничния панел като - issues_show_count: Показване на броя на задачите - issues_open_only: Само отворените задачи - issues_sort_by: Подреждане на маркерите по - issues_use_colors: Използване на цветове - - issue_tags_sidebar_none: Да не се показват - issue_tags_sidebar_list: Списък - issue_tags_sidebar_cloud: Облак - issue_tags_sidebar_simple_cloud: Опростен облак - - issues_sort_by_name: Наименование - issues_sort_by_count: Количество задачи - issues_sort_order_asc: Нарастване - issues_sort_order_desc: Намаляване - - auto_complete_new_tag: Добавяне на нов... diff --git a/plugins/redmineup_tags/config/locales/de.yml b/plugins/redmineup_tags/config/locales/de.yml deleted file mode 100644 index 2b57337..0000000 --- a/plugins/redmineup_tags/config/locales/de.yml +++ /dev/null @@ -1,36 +0,0 @@ -de: - tags: Tags - field_tags: Tags - field_tag_list: Tags - label_add_tags: Tags hinzufügen - notice_tags_added: Tags hinzugefügt - notice_failed_to_add_tags: Fehler beim hinzufügen der Tags - setting_issue_tags: Ticket Tags - issues_sidebar: Zeige die Tags auf der Sidebar - issues_show_count: Zeige die Ticketanzahl an - issues_open_only: Zeige nur noch offene Tickets - issues_sort_by: Sortiere Tags nach - issues_use_colors: Farben verwenden - - issue_tags_sidebar_none: Keine - issue_tags_sidebar_list: Liste - issue_tags_sidebar_cloud: Cloud - issue_tags_sidebar_simple_cloud: Simple Cloud - - issues_sort_by_name: Name - issues_sort_by_count: Anzahl tickets - issues_sort_order_asc: Aufsteigend - issues_sort_order_desc: Absteigend - - auto_complete_new_tag: Hinzufügen... - - issue_tags_label_add_tag: + tag hinzufügen - issue_tags_manage_tags: Tags bearbeiten - issue_tags_tag: Tag - issue_tags_button_merge: zusammenführen - issue_tags_label_merge: ausgwählte Tags zusammenführen - - tags_suggestion_order: Reihenfolge der Vorschläge - tags_order_by_name: Name - tags_order_by_last_created: zuletzt angelegt - tags_order_by_most_used: am meisten benutzt diff --git a/plugins/redmineup_tags/config/locales/en.yml b/plugins/redmineup_tags/config/locales/en.yml deleted file mode 100644 index 4826377..0000000 --- a/plugins/redmineup_tags/config/locales/en.yml +++ /dev/null @@ -1,57 +0,0 @@ -# This file is a part of redmine_tags -# redMine plugin, that adds tagging support. -# -# English translation for redmine_tags -# by Aleksey V Zapparov AKA ixti -# -# Copyright (c) 2010 Aleksey V Zapparov AKA ixti -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -en: - tags: Tags - field_tags: Tags - field_tag_list: Tags - label_add_tags: Add tags - notice_tags_added: Tags added - notice_failed_to_add_tags: Failed to add tags - setting_issue_tags: Issues Tags - issues_sidebar: Display tags on sidebar as - issues_show_count: Display amount of issues - issues_open_only: Display open issues only - issues_sort_by: Sort tags by - issues_use_colors: Use colors - - issue_tags_sidebar_none: None - issue_tags_sidebar_list: List - issue_tags_sidebar_cloud: Cloud - issue_tags_sidebar_simple_cloud: Simple cloud - - issues_sort_by_name: Name - issues_sort_by_count: Issues amount - issues_sort_order_asc: Ascending - issues_sort_order_desc: Descending - - auto_complete_new_tag: Add new... - - issue_tags_label_add_tag: + add tag - issue_tags_manage_tags: Manage tags - issue_tags_tag: Tag - issue_tags_button_merge: Merge - issue_tags_label_merge: Merge selected tags - - tags_suggestion_order: Suggestion order - tags_order_by_name: Name - tags_order_by_last_created: Last created - tags_order_by_most_used: Most used diff --git a/plugins/redmineup_tags/config/locales/fr.yml b/plugins/redmineup_tags/config/locales/fr.yml deleted file mode 100644 index 3476420..0000000 --- a/plugins/redmineup_tags/config/locales/fr.yml +++ /dev/null @@ -1,41 +0,0 @@ -# This file is a part of redmine_tags -# redMine plugin, that adds tagging support. -# -# French translation for redmine_tags -# by Stephane HANNEQUIN, <stephane.hannequin(at)aster-ingenierie.com> -# -# Copyright (c) 2010 Stephane HANNEQUIN -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -fr: - tags: Tags - field_tags: Tags - field_tag_list: Tags - setting_issue_tags: Tags des demandes - issues_sidebar: Afficher les Tags comme - issues_show_count: Afficher le nombre de demande - issues_open_only: N'afficher que les demandes ouvertes - issues_sort_by: (en) Sort tags by - - issue_tags_sidebar_none: Ne pas afficher - issue_tags_sidebar_list: Liste - issue_tags_sidebar_cloud: Nuage - - issues_sort_by_name: (en) Name - issues_sort_by_count: (en) Issues amount - issues_sort_order_asc: (en) Ascending - issues_sort_order_desc: (en) Descending - - auto_complete_new_tag: Nouveau... diff --git a/plugins/redmineup_tags/config/locales/pt-BR.yml b/plugins/redmineup_tags/config/locales/pt-BR.yml deleted file mode 100644 index 02c5052..0000000 --- a/plugins/redmineup_tags/config/locales/pt-BR.yml +++ /dev/null @@ -1,49 +0,0 @@ -# This file is a part of redmine_tags -# redMine plugin, that adds tagging support. -# -# Portuguese Brazil translation for redmine_tags -# by Leandro Guindani Gehlen -# -# Copyright (c) 2018 Leandro Guindani Gehlen -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -pt-BR: - tags: Tags - field_tags: Tags - field_tag_list: Tags - setting_issue_tags: Tags das tarefas - issues_sidebar: Exibir tags no menu lateral como - issues_show_count: Exibir a quantidade de tarefas - issues_open_only: Exibir apenas tarefas abertas - issues_sort_by: Ordentar tags por - issues_use_colors: Usar cores - - issue_tags_sidebar_none: Nenhum - issue_tags_sidebar_list: Lista - issue_tags_sidebar_cloud: Cloud - issue_tags_sidebar_simple_cloud: Cloud simples - - issues_sort_by_name: Nome - issues_sort_by_count: Quantidade - issues_sort_order_asc: Ascendente - issues_sort_order_desc: Descendente - - auto_complete_new_tag: Adicionar nova... - - issue_tags_label_add_tag: + Adicionar tag - issue_tags_manage_tags: Gerenciar tags - issue_tags_tag: Tag - issue_tags_button_merge: Mesclar - issue_tags_label_merge: Mesclar tags selecionada diff --git a/plugins/redmineup_tags/config/locales/ro.yml b/plugins/redmineup_tags/config/locales/ro.yml deleted file mode 100644 index df86462..0000000 --- a/plugins/redmineup_tags/config/locales/ro.yml +++ /dev/null @@ -1,36 +0,0 @@ -ro: - tags: Etichete - field_tags: Etichete - field_tag_list: Etichete - label_add_tags: Adaugă etichete - notice_tags_added: Etichetele au fost adăugate - notice_failed_to_add_tags: Etichetele nu s-au putut adăuga - setting_issue_tags: Etichete de sarcini - issues_sidebar: Mod de afișare etichete în sidebar - issues_show_count: Afișează numărul de sarcini - issues_open_only: Afișează doar pentru sarcinile deschise - issues_sort_by: Sortează etichetele după - issues_use_colors: Folosește culori - - issue_tags_sidebar_none: Deloc - issue_tags_sidebar_list: Listă - issue_tags_sidebar_cloud: Nor - issue_tags_sidebar_simple_cloud: Nor simplu - - issues_sort_by_name: Denumire - issues_sort_by_count: Număr de sarcini - issues_sort_order_asc: Crescător - issues_sort_order_desc: Descrescător - - auto_complete_new_tag: "Adaugă..." - - issue_tags_label_add_tag: "+ adaugă etichetă" - issue_tags_manage_tags: Administrare etichete - issue_tags_tag: Etichetă - issue_tags_button_merge: Unește - issue_tags_label_merge: Unește etichetele selectate - - tags_suggestion_order: Sugerează în ordine, pornind de la - tags_order_by_name: Denumire alfabetic - tags_order_by_last_created: Ultima creată - tags_order_by_most_used: Cea mai folosită diff --git a/plugins/redmineup_tags/config/locales/ru.yml b/plugins/redmineup_tags/config/locales/ru.yml deleted file mode 100644 index d381ddc..0000000 --- a/plugins/redmineup_tags/config/locales/ru.yml +++ /dev/null @@ -1,31 +0,0 @@ -ru: - tags: Теги - field_tags: Теги - field_tag_list: Теги - label_add_tags: Добавить теги - notice_tags_added: Теги добавлены - notice_failed_to_add_tags: Не удалось добавить теги - setting_issue_tags: Теги задач - issues_sidebar: Боковую панель как - issues_show_count: Показать кол-во задач - issues_open_only: Только открытые задачи - issues_sort_by: Упорядочить теги по - issues_use_colors: Использовать цвета - - issue_tags_sidebar_none: Не показывать - issue_tags_sidebar_list: Список - issue_tags_sidebar_cloud: Облако - issue_tags_sidebar_simple_cloud: Простое облако - - issues_sort_by_name: Названию - issues_sort_by_count: Кол-ву задач - issues_sort_order_asc: по возрастанию - issues_sort_order_desc: по убыванию - - auto_complete_new_tag: Добавить... - issue_tags_label_add_tag: + добавить тег - - tags_suggestion_order: Порядок поиска - tags_order_by_name: По названию - tags_order_by_last_created: Сначала новые - tags_order_by_most_used: Часто используемые diff --git a/plugins/redmineup_tags/config/locales/zh-TW.yml b/plugins/redmineup_tags/config/locales/zh-TW.yml deleted file mode 100644 index bc26fbc..0000000 --- a/plugins/redmineup_tags/config/locales/zh-TW.yml +++ /dev/null @@ -1,47 +0,0 @@ -# This file is a part of redmine_tags -# redmine plugin, that adds tagging support. -# -# Tranditional Chinese translation for redmine_tags -# by Timothy Lee (https://github.com/ctiml) -# -# Copyright (c) 2010 Aleksey V Zapparov AKA ixti -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -zh-TW: - tags: 標籤 - field_tags: 標籤 - field_tag_list: 標籤 - setting_issue_tags: 問題標籤 - issues_sidebar: 在側邊欄顯示標籤 - issues_show_count: 顯示問計數 - issues_open_only: 僅顯示進行中的問題 - issues_sort_by: 標籤依哪種方式排序 - - issue_tags_sidebar_none: 無 - issue_tags_sidebar_list: 列表顯示 - issue_tags_sidebar_cloud: 標籤雲 - - issues_sort_by_name: 名稱名称 - issues_sort_by_count: 問題計數 - issues_sort_order_asc: 順序 - issues_sort_order_desc: 倒序 - - auto_complete_new_tag: 增加新標籤 ... - - issue_tags_label_add_tag: + 新增 - issue_tags_manage_tags: 管理標籤 - issue_tags_tag: 標籤 - issue_tags_button_merge: 合併 - issue_tags_label_merge: 合併選擇的標籤 diff --git a/plugins/redmineup_tags/config/locales/zh.yml b/plugins/redmineup_tags/config/locales/zh.yml deleted file mode 100644 index b83afbb..0000000 --- a/plugins/redmineup_tags/config/locales/zh.yml +++ /dev/null @@ -1,57 +0,0 @@ -# This file is a part of redmine_tags -# redMine plugin, that adds tagging support. -# -# Simplified Chinese translation for redmine_tags -# by archonwang (https://github.com/archonwang) -# -# Copyright (c) 2010 Aleksey V Zapparov AKA ixti -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -zh: - tags: 标签 - field_tags: 标签 - field_tag_list: 标签 - label_add_tags: 添加标签 - notice_tags_added: 添加的标签 - notice_failed_to_add_tags: 添加标签失败 - setting_issue_tags: 问题标签 - issues_sidebar: 在侧边栏显示标签 - issues_show_count: 显示问题计数 - issues_open_only: 仅显示打开的问题 - issues_sort_by: 标签按何种方式排序 - issues_use_colors: 使用颜色 - - issue_tags_sidebar_none: 无 - issue_tags_sidebar_list: 列表显示 - issue_tags_sidebar_cloud: 云显示 - issue_tags_sidebar_simple_cloud: 简单云 - - issues_sort_by_name: 名称 - issues_sort_by_count: 问题计数 - issues_sort_order_asc: 顺序 - issues_sort_order_desc: 倒序 - - auto_complete_new_tag: 添加新标签 ... - - issue_tags_label_add_tag: + 添加标签 - issue_tags_manage_tags: 管理标签 - issue_tags_tag: 标签 - issue_tags_button_merge: 合并 - issue_tags_label_merge: 合并选择的标签 - - tags_suggestion_order: 建议顺序 - tags_order_by_name: 名称 - tags_order_by_last_created: 最后创建的标签 - tags_order_by_most_used: 最常用的标签 diff --git a/plugins/redmineup_tags/config/routes.rb b/plugins/redmineup_tags/config/routes.rb deleted file mode 100644 index 0d0cd43..0000000 --- a/plugins/redmineup_tags/config/routes.rb +++ /dev/null @@ -1,34 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -RedmineApp::Application.routes.draw do - match 'auto_completes/redmine_tags' => 'auto_completes#redmine_tags', via: :get, as: 'auto_complete_redmine_tags' - match '/tags/context_menu', to: 'tags#context_menu', as: 'tags_context_menu', via: [:get, :post] - match '/tags', controller: 'tags', action: 'destroy', via: :delete -end - -resources :tags, only: [:edit, :update] do - collection do - post :merge - get :context_menu, :merge - end -end - -get :edit_issue_tags, to: 'issue_tags#edit' -post :update_issue_tags, to: 'issue_tags#update' diff --git a/plugins/redmineup_tags/db/migrate/001_add_tags_and_taggings.rb b/plugins/redmineup_tags/db/migrate/001_add_tags_and_taggings.rb deleted file mode 100644 index 478cc9b..0000000 --- a/plugins/redmineup_tags/db/migrate/001_add_tags_and_taggings.rb +++ /dev/null @@ -1,26 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -class AddTagsAndTaggings < ActiveRecord::Migration[4.2] - def up - end - - def down - end -end diff --git a/plugins/redmineup_tags/db/migrate/002_create_tags.rb b/plugins/redmineup_tags/db/migrate/002_create_tags.rb deleted file mode 100644 index 8912b7e..0000000 --- a/plugins/redmineup_tags/db/migrate/002_create_tags.rb +++ /dev/null @@ -1,28 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -class CreateTags < ActiveRecord::Migration[4.2] - - def self.up - ActiveRecord::Base.create_taggable_table - end - - def self.down - end -end diff --git a/plugins/redmineup_tags/doc/CHANGELOG b/plugins/redmineup_tags/doc/CHANGELOG deleted file mode 100755 index 9ec94a3..0000000 --- a/plugins/redmineup_tags/doc/CHANGELOG +++ /dev/null @@ -1,97 +0,0 @@ -== Redmine Tags plugin changelog - -Redmine Tags plugin - Tags board plugin for redmine -Copyright (C) 2011-2024 Kirill Bezrukov (RedmineUP) -http://www.redmineup.com/ - -== 2024-02-15 v2.0.14 - -* Dropped Redmine 3 support -* Fixed insecure XMLHttpRequest -* Fixed select2 bug - -== 2023-01-27 v2.0.13 - -* Romanian locale updated (MarianV) -* Fixed "is not" tags filter condition - -== 2022-04-11 v2.0.12 - -* Fixed broken link -* Fixed wrong proto error -* Redmine 5.0 compatibility - -== 2021-06-14 v2.0.11 - -* Fixed global issue list bug - -== 2021-06-04 v2.0.10 - -* Fixed patches typo - -== 2021-05-31 v2.0.9 - -* Added Redmine 4.2 compatibility -* Changed path to url for autocomplete -* Updated br locale -* Updated zh locale -* Fixed production load error -* Fixed tags column bug -* Fixed copy tags bug -* Fixed global spent time bug -* Fixed tags count bug -* Fixed bulk edit issue tags bug -* Fixed tags link - -== 2019-06-14 v2.0.8 - -* Tags report for issues summary - -== 2019-06-14 v2.0.7 - -* Agile plugin compatibility fixes - -== 2019-05-16 v2.0.6 - -* Added tags to Time entries report -* Added tags to Agile Versions board -* Updated german translation (Werner Maier) -* Fixed Agile plugin compatibility bug -* Fixed adding tags context menu permissions -* Fixed bulk edit issue tags form permissions - -== 2019-04-08 v2.0.5 - - * Changed tags filter by condition AND - * Fixed tags field on issues bulk edit form - -== 2018-09-25 v2.0.4 - -* Fixed bug with Agile board view - -== 2018-08-10 v2.0.3 - -* Fixed issues export to CSV, PDF tags field -* select2 behaviour fixes - -== 2018-03-21 v2.0.2 - -* Redmine 4 support -* Adding tags from issue's context menu -* Added new permissions for Add and Create new tags in a project -* Suggestion order setting for tags autocomplete (Name, Last created, Most used) -* Prevent adding commas -* Fixed issues list tags column formating - -== 2017-09-21 v2.0.1 - -* Fixed issue import error - -== 2017-07-24 v2.0.0 - -* select2 control -* redmine_crm gem for tags -* Admin settings link -* Alphabet sorting view for list -* Merging tags fixes -erging tags fixes diff --git a/plugins/redmineup_tags/doc/COPYING b/plugins/redmineup_tags/doc/COPYING deleted file mode 100644 index 63e41a4..0000000 --- a/plugins/redmineup_tags/doc/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - 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. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - 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. - - <signature of Ty Coon>, 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/redmineup_tags/doc/LICENSE b/plugins/redmineup_tags/doc/LICENSE deleted file mode 100644 index e2e50b5..0000000 --- a/plugins/redmineup_tags/doc/LICENSE +++ /dev/null @@ -1,26 +0,0 @@ -LICENSING - -RedmineUP Licencing - -This End User License Agreement is a binding legal agreement between you and RedmineUP. Purchase, installation or use of RedmineUP Extensions provided on redmineup.com signifies that you have read, understood, and agreed to be bound by the terms outlined below. - -RedmineUP GPL Licencing - -All Redmine Extensions produced by RedmineUP are released under the GNU General Public License, version 2 (http://www.gnu.org/licenses/gpl-2.0.html). Specifically, the Ruby code portions are distributed under the GPL license. If not otherwise stated, all images, manuals, cascading style sheets, and included JavaScript are NOT GPL, and are released under the RedmineUP Proprietary Use License v1.0 (See below) unless specifically authorized by RedmineUP. Elements of the extensions released under this proprietary license may not be redistributed or repackaged for use other than those allowed by the Terms of Service. - -RedmineUP Proprietary Use License (v1.0) - -The RedmineUP Proprietary Use License covers any images, cascading stylesheets, manuals and JavaScript files in any extensions produced and/or distributed by redmineup.com. These files are copyrighted by redmineup.com (RedmineUP) and cannot be redistributed in any form without prior consent from redmineup.com (RedmineUP) - -Usage Terms - -You are allowed to use the Extensions on one or many "production" domains, depending on the type of your license -You are allowed to make any changes to the code, however modified code will not be supported by us. - -Modification Of Extensions Produced By RedmineUP. - -You are authorized to make any modification(s) to RedmineUP extension Ruby code. However, if you change any Ruby code and it breaks functionality, support may not be available to you. - -In accordance with the RedmineUP Proprietary Use License v1.0, you may not release any proprietary files (modified or otherwise) under the GPL license. The terms of this license and the GPL v2 prohibit the removal of the copyright information from any file. - -Please contact us if you have any requirements that are not covered by these terms. \ No newline at end of file diff --git a/plugins/redmineup_tags/init.rb b/plugins/redmineup_tags/init.rb deleted file mode 100644 index 8d286bb..0000000 --- a/plugins/redmineup_tags/init.rb +++ /dev/null @@ -1,60 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -requires_redmineup version_or_higher: '1.0.5' rescue raise "\n\033[31mRedmine requires newer redmineup gem version.\nPlease update with 'bundle update redmineup'.\033[0m" - -require 'redmine' - -TAGS_VERSION_NUMBER = '2.0.14' -TAGS_VERSION_TYPE = 'Light version' - -Redmine::Plugin.register :redmineup_tags do - name "Redmine Tags plugin (#{TAGS_VERSION_TYPE})" - author 'RedmineUP' - description 'Redmine issues tagging support' - version TAGS_VERSION_NUMBER - url 'https://www.redmineup.com/pages/plugins/tags/' - author_url 'mailto:support@redmineup.com' - - requires_redmine version_or_higher: '4.0' - - settings default: { issues_sidebar: 'none', - issues_show_count: 0, - issues_open_only: 0, - issues_sort_by: 'name', - issues_sort_order: 'asc', - tags_suggestion_order: 'name' - }, partial: 'tags/settings' - - menu :admin_menu, :tags, { controller: 'settings', action: 'plugin', id: 'redmineup_tags' }, caption: :tags, html: { class: 'icon' } - - project_module :issue_tracking do - permission :create_tags, {} - permission :edit_tags, {} - end -end - -if Rails.configuration.respond_to?(:autoloader) && Rails.configuration.autoloader == :zeitwerk - Rails.autoloaders.each { |loader| loader.ignore(File.dirname(__FILE__) + '/lib') } -end -require File.dirname(__FILE__) + '/lib/redmineup_tags' - -ActiveSupport.on_load(:action_view) do - include TagsHelper -end diff --git a/plugins/redmineup_tags/lib/query_tags_column.rb b/plugins/redmineup_tags/lib/query_tags_column.rb deleted file mode 100644 index 4238c09..0000000 --- a/plugins/redmineup_tags/lib/query_tags_column.rb +++ /dev/null @@ -1,24 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -require_dependency 'query' - -class QueryTagsColumn < QueryColumn - def css_classes; 'tags' end -end diff --git a/plugins/redmineup_tags/lib/redmineup_tags.rb b/plugins/redmineup_tags/lib/redmineup_tags.rb deleted file mode 100644 index 3584d06..0000000 --- a/plugins/redmineup_tags/lib/redmineup_tags.rb +++ /dev/null @@ -1,49 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -module RedmineupTags - def self.settings() Setting[:plugin_redmineup_tags].stringify_keys end -end - -REDMINEUP_TAGS_REQUIRED_FILES = [ - 'redmineup_tags/hooks/model_issue_hook', - 'redmineup_tags/hooks/views_context_menus_hook', - 'redmineup_tags/hooks/views_issues_hook', - 'redmineup_tags/hooks/views_layouts_hook', - 'redmineup_tags/patches/add_helpers_for_issue_tags_patch', - 'redmineup_tags/patches/auto_completes_controller_patch', - 'redmineup_tags/patches/issue_patch', - 'redmineup_tags/patches/issue_query_patch', - 'redmineup_tags/patches/queries_helper_patch', - 'redmineup_tags/patches/time_entry_query_patch', - 'redmineup_tags/patches/time_report_patch', - 'redmineup_tags/patches/time_entry_patch', - 'query_tags_column', - 'redmineup_tags/patches/reports_controller_patch', - 'redmineup_tags/hooks/views_reports_hook', -] - -if Redmine::Plugin.installed?(:redmine_agile) && - Gem::Version.new(Redmine::Plugin.find(:redmine_agile).version) >= Gem::Version.new('1.4.3') && AGILE_VERSION_TYPE == 'PRO version' - REDMINEUP_TAGS_REQUIRED_FILES << 'redmineup_tags/patches/agile_query_patch' - REDMINEUP_TAGS_REQUIRED_FILES << 'redmineup_tags/patches/agile_versions_query_patch' -end - -base_url = File.dirname(__FILE__) -REDMINEUP_TAGS_REQUIRED_FILES.each { |file| require(base_url + '/' + file) } diff --git a/plugins/redmineup_tags/lib/redmineup_tags/hooks/model_issue_hook.rb b/plugins/redmineup_tags/lib/redmineup_tags/hooks/model_issue_hook.rb deleted file mode 100644 index b837989..0000000 --- a/plugins/redmineup_tags/lib/redmineup_tags/hooks/model_issue_hook.rb +++ /dev/null @@ -1,47 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -module RedmineupTags - module Hooks - class ModelIssueHook < Redmine::Hook::ViewListener - def controller_issues_edit_before_save(context = {}) - tags_log context - end - - def controller_issues_bulk_edit_before_save(context = {}) - tags_log context - end - - def tags_log(context, create_journal = true) - issue = context[:issue] - params = context[:params] - if params && params[:issue] && !params[:issue][:tag_list].nil? - old_tags = Issue.find(issue.id).tag_list.to_s - new_tags = issue.tag_list.to_s - if create_journal && !(old_tags == new_tags || issue.current_journal.blank?) - issue.current_journal.details << JournalDetail.new(property: 'attr', - prop_key: 'tag_list', - old_value: old_tags, - value: new_tags) - end - end - end - end - end -end diff --git a/plugins/redmineup_tags/lib/redmineup_tags/hooks/views_context_menus_hook.rb b/plugins/redmineup_tags/lib/redmineup_tags/hooks/views_context_menus_hook.rb deleted file mode 100644 index 3953b88..0000000 --- a/plugins/redmineup_tags/lib/redmineup_tags/hooks/views_context_menus_hook.rb +++ /dev/null @@ -1,26 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -module RedmineupTags - module Hooks - class ViewsContextMenusHook < Redmine::Hook::ViewListener - render_on :view_issues_context_menu_end, partial: 'context_menus/issues_tags' - end - end -end diff --git a/plugins/redmineup_tags/lib/redmineup_tags/hooks/views_issues_hook.rb b/plugins/redmineup_tags/lib/redmineup_tags/hooks/views_issues_hook.rb deleted file mode 100644 index b02ead5..0000000 --- a/plugins/redmineup_tags/lib/redmineup_tags/hooks/views_issues_hook.rb +++ /dev/null @@ -1,29 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -module RedmineupTags - module Hooks - class ViewsIssuesHook < Redmine::Hook::ViewListener - render_on :view_issues_show_details_bottom, partial: 'issues/tags' - render_on :view_issues_form_details_bottom, partial: 'issues/tags_form' - render_on :view_issues_sidebar_planning_bottom, partial: 'issues/tags_sidebar' - render_on :view_issues_bulk_edit_details_bottom, partial: 'issues/tags_form' - end - end -end diff --git a/plugins/redmineup_tags/lib/redmineup_tags/hooks/views_layouts_hook.rb b/plugins/redmineup_tags/lib/redmineup_tags/hooks/views_layouts_hook.rb deleted file mode 100644 index 91c7856..0000000 --- a/plugins/redmineup_tags/lib/redmineup_tags/hooks/views_layouts_hook.rb +++ /dev/null @@ -1,27 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -module RedmineupTags - module Hooks - class ViewsLayoutsHook < Redmine::Hook::ViewListener - render_on :view_layouts_base_html_head, partial: 'tags/additional_assets' - render_on :view_layouts_base_body_bottom, partial: 'tags/select2_transformation_rules' - end - end -end diff --git a/plugins/redmineup_tags/lib/redmineup_tags/hooks/views_reports_hook.rb b/plugins/redmineup_tags/lib/redmineup_tags/hooks/views_reports_hook.rb deleted file mode 100644 index 4eada6b..0000000 --- a/plugins/redmineup_tags/lib/redmineup_tags/hooks/views_reports_hook.rb +++ /dev/null @@ -1,26 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -module RedmineupTags - module Hooks - class ViewsReportsHook < Redmine::Hook::ViewListener - render_on :view_reports_issue_report_split_content_right, partial: 'tags_simple' - end - end -end diff --git a/plugins/redmineup_tags/lib/redmineup_tags/patches/add_helpers_for_issue_tags_patch.rb b/plugins/redmineup_tags/lib/redmineup_tags/patches/add_helpers_for_issue_tags_patch.rb deleted file mode 100644 index ac60fd2..0000000 --- a/plugins/redmineup_tags/lib/redmineup_tags/patches/add_helpers_for_issue_tags_patch.rb +++ /dev/null @@ -1,41 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -module RedmineupTags - module Patches - module AddHelpersForIssueTagsPatch - def self.included(base) # :nodoc: - base.class_eval do - helper :tags - helper :issues_tags - end - end - end - end -end - -[IssuesController, CalendarsController, GanttsController, SettingsController].each do |controller| - unless controller.included_modules.include?(RedmineupTags::Patches::AddHelpersForIssueTagsPatch) - controller.send(:include, RedmineupTags::Patches::AddHelpersForIssueTagsPatch) - end -end - -unless ImportsController.included_modules.include?(RedmineupTags::Patches::AddHelpersForIssueTagsPatch) - ImportsController.send(:include, RedmineupTags::Patches::AddHelpersForIssueTagsPatch) -end diff --git a/plugins/redmineup_tags/lib/redmineup_tags/patches/agile_query_patch.rb b/plugins/redmineup_tags/lib/redmineup_tags/patches/agile_query_patch.rb deleted file mode 100644 index be81dec..0000000 --- a/plugins/redmineup_tags/lib/redmineup_tags/patches/agile_query_patch.rb +++ /dev/null @@ -1,70 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -if Redmine::Plugin.installed?(:redmine_agile) && - Gem::Version.new(Redmine::Plugin.find(:redmine_agile).version) >= Gem::Version.new('1.4.3') - - module RedmineupTags - module Patches - module AgileQueryPatch - def self.included(base) - base.send(:include, InstanceMethods) - base.class_eval do - alias_method :available_filters_without_redmine_tags, :available_filters - alias_method :available_filters, :available_filters_with_redmine_tags - - add_available_column QueryTagsColumn.new(:tags_relations, caption: :tags) - end - end - - module InstanceMethods - def sql_for_issue_tags_field(_field, operator, value) - case operator - when '=', '!' - issues = Issue.tagged_with(value.clone) - when '!*' - issues = Issue.joins(:tags).uniq - else - issues = Issue.tagged_with(Redmineup::Tag.all.map(&:to_s), any: true) - end - - compare = operator.include?('!') ? 'NOT IN' : 'IN' - ids_list = issues.collect(&:id).push(0).join(',') - "( #{Issue.table_name}.id #{compare} (#{ids_list}) ) " - end - - def available_filters_with_redmine_tags - available_filters_without_redmine_tags - selected_tags = [] - if filters['issue_tags'].present? - selected_tags = Issue.all_tags(project: project, open_only: RedmineupTags.settings['issues_open_only'].to_i == 1). - where(name: filters['issue_tags'][:values]).map { |c| [c.name, c.name] } - end - add_available_filter('issue_tags', type: :issue_tags, name: l(:tags), values: selected_tags) - end - end - end - end - end - - unless AgileQuery.included_modules.include?(RedmineupTags::Patches::AgileQueryPatch) - AgileQuery.send(:include, RedmineupTags::Patches::AgileQueryPatch) - end - -end diff --git a/plugins/redmineup_tags/lib/redmineup_tags/patches/agile_versions_query_patch.rb b/plugins/redmineup_tags/lib/redmineup_tags/patches/agile_versions_query_patch.rb deleted file mode 100644 index 8c99912..0000000 --- a/plugins/redmineup_tags/lib/redmineup_tags/patches/agile_versions_query_patch.rb +++ /dev/null @@ -1,46 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -if Redmine::Plugin.installed?(:redmine_agile) && - Gem::Version.new(Redmine::Plugin.find(:redmine_agile).version) >= Gem::Version.new('1.4.3') && - AGILE_VERSION_TYPE == 'PRO version' - - require_dependency 'query' - - module RedmineupTags - module Patches - module AgileVersionsQueryPatch - def self.included(base) - base.send(:include, InstanceMethods) - base.class_eval do - add_available_column QueryTagsColumn.new(:tags_relations, caption: :tags) - end - end - - module InstanceMethods - - end - end - end - end - - unless AgileVersionsQuery.included_modules.include?(RedmineupTags::Patches::AgileVersionsQueryPatch) - AgileVersionsQuery.send(:include, RedmineupTags::Patches::AgileVersionsQueryPatch) - end -end diff --git a/plugins/redmineup_tags/lib/redmineup_tags/patches/auto_completes_controller_patch.rb b/plugins/redmineup_tags/lib/redmineup_tags/patches/auto_completes_controller_patch.rb deleted file mode 100644 index abc327c..0000000 --- a/plugins/redmineup_tags/lib/redmineup_tags/patches/auto_completes_controller_patch.rb +++ /dev/null @@ -1,65 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -require_dependency 'auto_completes_controller' - -module RedmineupTags - module Patches - module AutoCompletesControllerPatch - def self.included(base) - base.send(:include, InstanceMethods) - - base.class_eval do - end - end - - module InstanceMethods - SORTING_FIELDS = { 'name' => 'name', - 'last_created' => 'created_at', - 'most_used' => 'count' } - - def redmine_tags - suggestion_order = RedmineupTags.settings['tags_suggestion_order'] || 'name' - options = { - name_like: (params[:q] || params[:term]).to_s.strip, - sort_by: SORTING_FIELDS[suggestion_order], - order: (suggestion_order == 'name' ? 'ASC' : 'DESC') - } - @redmine_tags = Issue.all_tags(options).limit(params[:limit] || 10) - render json: format_redmine_tags_json(@redmine_tags) - end - - private - - def format_redmine_tags_json(redmine_tags) - redmine_tags.map do |redmine_tag| - { - id: redmine_tag.name, - text: redmine_tag.name - } - end - end - end - end - end -end - -unless AutoCompletesController.included_modules.include?(RedmineupTags::Patches::AutoCompletesControllerPatch) - AutoCompletesController.send(:include, RedmineupTags::Patches::AutoCompletesControllerPatch) -end diff --git a/plugins/redmineup_tags/lib/redmineup_tags/patches/issue_patch.rb b/plugins/redmineup_tags/lib/redmineup_tags/patches/issue_patch.rb deleted file mode 100644 index 502f41b..0000000 --- a/plugins/redmineup_tags/lib/redmineup_tags/patches/issue_patch.rb +++ /dev/null @@ -1,157 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -require_dependency 'issue' - -module RedmineupTags - module Patches - module IssuePatch - - def self.included(base) - base.extend(ClassMethods) - - base.class_eval do - include InstanceMethods - up_acts_as_taggable - - alias_method :safe_attributes_without_safe_tags=, :safe_attributes= - alias_method :safe_attributes=, :safe_attributes_with_safe_tags= - - class << self - alias_method :available_tags_without_redmine_tags, :available_tags - alias_method :available_tags, :available_tags_with_redmine_tags - end - - alias_method :copy_from_without_redmine_tags, :copy_from - alias_method :copy_from, :copy_from_with_redmine_tags - - scope :on_project, lambda { |project| - project = project.id if project.is_a? Project - { conditions: ["#{Project.table_name}.id=?", project] } - } - end - end - - # Class used to represent the tags relations of an issue - class TagsRelations < IssueRelation::Relations - def to_s(*args) - map(&:name).join(', ') - end - end - - module ClassMethods - def available_tags_with_redmine_tags(options = {}) - scope = available_tags_without_redmine_tags(options) - return scope unless options[:open_only] - scope.joins("JOIN #{IssueStatus.table_name} ON #{IssueStatus.table_name}.id = #{table_name}.status_id"). - where("#{IssueStatus.table_name}.is_closed = ?", false) - end - - def all_tags(options = {}) - scope = Redmineup::Tag.where({}) - scope = scope.where("LOWER(#{Redmineup::Tag.table_name}.name) LIKE LOWER(?)", "%#{options[:name_like]}%") if options[:name_like] - join = [] - join << "JOIN #{Redmineup::Tagging.table_name} ON #{Redmineup::Tagging.table_name}.tag_id = #{Redmineup::Tag.table_name}.id " - join << "JOIN #{Issue.table_name} ON #{Issue.table_name}.id = #{Redmineup::Tagging.table_name}.taggable_id - AND #{Redmineup::Tagging.table_name}.taggable_type = '#{Issue.name}' " - scope = scope.joins(join.join(' ')) - - columns = [ - "#{Redmineup::Tag.table_name}.*", - "COUNT(DISTINCT #{Redmineup::Tagging.table_name}.taggable_id) AS count" - ] - if options[:sort_by] == 'created_at' - columns << "MIN(#{Redmineup::Tagging.table_name}.created_at) AS created_at" - end - scope = scope.select(columns.join(', ')) - - scope = scope.group("#{Redmineup::Tag.table_name}.id, #{Redmineup::Tag.table_name}.name ") - scope = scope.having('COUNT(*) > 0') - - column = options[:sort_by] || "#{Redmineup::Tag.table_name}.name" - order = options[:order] || 'ASC' - scope.order("#{column} #{order}") - end - - def project_tags(project) - all_tags.where("#{Issue.table_name}.project_id = #{project.id}") - end - - def allowed_tags?(tags) - allowed_tags = all_tags.map(&:name) - tags.all? { |tag| allowed_tags.include?(tag) } - end - - def by_tags(project, with_subprojects=false) - count_and_group_by_with_redmine_tags(project: project, association: :tags, with_subprojects: with_subprojects) - end - - def count_and_group_by_with_redmine_tags(options) - return count_and_group_by_without_redmine_tags(options) unless options[:association] == :tags - - assoc = reflect_on_association(options[:association]) - select_field = assoc.foreign_key - - Issue. - visible(User.current, :project => options[:project], :with_subprojects => options[:with_subprojects]). - joins(:status, assoc.name). - group(:status_id, :is_closed, select_field). - count. - map do |columns, total| - status_id, is_closed, field_value = columns - is_closed = ['t', 'true', '1'].include?(is_closed.to_s) - { - "status_id" => status_id.to_s, - "closed" => is_closed, - select_field => field_value.to_s, - "total" => total.to_s - } - end - end - end - - module InstanceMethods - def safe_attributes_with_safe_tags=(attrs, user = User.current) - self.send(:safe_attributes_without_safe_tags=, attrs, user) - if attrs && attrs[:tag_list] && user.allowed_to?(:edit_tags, project) - tags = attrs[:tag_list].reject(&:empty?) - if user.allowed_to?(:create_tags, project) || Issue.allowed_tags?(tags) - self.tag_list = tags - end - end - end - - def tags_relations - TagsRelations.new(self, tags.to_a) - end - - def copy_from_with_redmine_tags(arg, options={}) - original_issue = arg.is_a?(Issue) ? arg : Issue.visible.find(arg) - copied_issue = copy_from_without_redmine_tags(original_issue, options) - copied_issue.tags = original_issue.tags - copied_issue - end - end - end - end -end - -unless Issue.included_modules.include?(RedmineupTags::Patches::IssuePatch) - Issue.send(:include, RedmineupTags::Patches::IssuePatch) -end diff --git a/plugins/redmineup_tags/lib/redmineup_tags/patches/issue_query_patch.rb b/plugins/redmineup_tags/lib/redmineup_tags/patches/issue_query_patch.rb deleted file mode 100644 index 01b2c16..0000000 --- a/plugins/redmineup_tags/lib/redmineup_tags/patches/issue_query_patch.rb +++ /dev/null @@ -1,93 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -module RedmineupTags - module Patches - module IssueQueryPatch - def self.included(base) - base.send(:include, InstanceMethods) - - base.class_eval do - alias_method :statement_without_redmine_tags, :statement - alias_method :statement, :statement_with_redmine_tags - - alias_method :available_filters_without_redmine_tags, :available_filters - alias_method :available_filters, :available_filters_with_redmine_tags - - alias_method :build_from_params_without_redmine_tags, :build_from_params - alias_method :build_from_params, :build_from_params_with_redmine_tags - - add_available_column QueryTagsColumn.new(:tags_relations, caption: :tags) - end - end - - module InstanceMethods - def statement_with_redmine_tags - filter = filters.delete 'issue_tags' - clauses = statement_without_redmine_tags || '' - - if filter - filters['issue_tags'] = filter - - issues = Issue.where({}) - - op = operator_for('issue_tags') - case op - when '=', '!' - issues = issues.tagged_with(values_for('issue_tags').clone, any: true) - when '!*' - issues = issues.joins(:tags).uniq - else - issues = issues.tagged_with(Redmineup::Tag.all.map(&:to_s), any: true) - end - - compare = op.include?('!') ? 'NOT IN' : 'IN' - ids_list = issues.collect(&:id).push(0).join(',') - - clauses << ' AND ' unless clauses.empty? - clauses << "( #{Issue.table_name}.id #{compare} (#{ids_list}) ) " - end - - clauses - end - - def available_filters_with_redmine_tags - available_filters_without_redmine_tags - selected_tags = [] - if filters['issue_tags'].present? - selected_tags = Issue.all_tags(project: project, open_only: RedmineupTags.settings['issues_open_only'].to_i == 1). - where(name: filters['issue_tags'][:values]).map { |c| [c.name, c.name] } - end - add_available_filter('issue_tags', type: :issue_tags, name: l(:tags), values: selected_tags) - end - - def build_from_params_with_redmine_tags(params, defaults = {}) - build_from_params_without_redmine_tags(params, defaults) - - add_filter('issue_tags', '=', [Redmineup::Tag.find_by(id: params[:tag_id]).try(:name)]) if params[:tag_id].present? - end - end - end - end -end - -if (ActiveRecord::Base.connection.tables.include?('queries') rescue false) && - IssueQuery.included_modules.exclude?(RedmineupTags::Patches::IssueQueryPatch) - IssueQuery.send(:include, RedmineupTags::Patches::IssueQueryPatch) -end diff --git a/plugins/redmineup_tags/lib/redmineup_tags/patches/queries_helper_patch.rb b/plugins/redmineup_tags/lib/redmineup_tags/patches/queries_helper_patch.rb deleted file mode 100644 index df8685c..0000000 --- a/plugins/redmineup_tags/lib/redmineup_tags/patches/queries_helper_patch.rb +++ /dev/null @@ -1,53 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -require_dependency 'queries_helper' -require_dependency 'issue_queries_query' if ActiveSupport::Dependencies::search_for_file('issue_queries_helper') - -module RedmineupTags - module Patches - module QueriesHelperPatch - def self.included(base) - base.send(:include, InstanceMethods) - - base.class_eval do - alias_method :column_value_without_tags, :column_value - alias_method :column_value, :column_value_with_tags - end - end - - module InstanceMethods - include TagsHelper - - def column_value_with_tags(column, list_object, value) - if column.name == :tags_relations && list_object.is_a?(Issue) - [value].flatten.collect{ |t| render_issue_tag_link(t) }.join(RedmineupTags.settings['issues_use_colors'].to_i > 0 ? ' ' : ', ').html_safe - else - column_value_without_tags(column, list_object, value) - end - end - end - end - end -end - -base = ActiveSupport::Dependencies::search_for_file('issue_queries_helper') ? IssueQueriesHelper : QueriesHelper -unless base.included_modules.include?(RedmineupTags::Patches::QueriesHelperPatch) - base.send(:include, RedmineupTags::Patches::QueriesHelperPatch) -end diff --git a/plugins/redmineup_tags/lib/redmineup_tags/patches/reports_controller_patch.rb b/plugins/redmineup_tags/lib/redmineup_tags/patches/reports_controller_patch.rb deleted file mode 100644 index 775040f..0000000 --- a/plugins/redmineup_tags/lib/redmineup_tags/patches/reports_controller_patch.rb +++ /dev/null @@ -1,65 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -module RedmineupTags - module Patches - module ReportsControllerPatch - def self.included(base) - base.send(:include, InstanceMethods) - - base.class_eval do - alias_method :issue_report_without_redmine_tags, :issue_report - alias_method :issue_report, :issue_report_with_redmine_tags - - alias_method :issue_report_details_without_redmine_tags, :issue_report_details - alias_method :issue_report_details, :issue_report_details_with_redmine_tags - end - end - - module InstanceMethods - - def issue_report_with_redmine_tags - with_subprojects = Setting.display_subprojects_issues? - - @tags = Issue.project_tags(@project) - @issues_by_tags = Issue.by_tags(@project, with_subprojects) - - issue_report_without_redmine_tags - end - - def issue_report_details_with_redmine_tags - with_subprojects = Setting.display_subprojects_issues? - - if params[:detail] == 'tag' - @field = "tag_id" - @rows = Issue.project_tags(@project) - @data = Issue.by_tags(@project, with_subprojects) - @report_title = l(:field_tags) - else - issue_report_details_without_redmine_tags - end - end - end - end - end -end - -unless ReportsController.included_modules.include?(RedmineupTags::Patches::ReportsControllerPatch) - ReportsController.send(:include, RedmineupTags::Patches::ReportsControllerPatch) -end diff --git a/plugins/redmineup_tags/lib/redmineup_tags/patches/time_entry_patch.rb b/plugins/redmineup_tags/lib/redmineup_tags/patches/time_entry_patch.rb deleted file mode 100644 index 1e1a859..0000000 --- a/plugins/redmineup_tags/lib/redmineup_tags/patches/time_entry_patch.rb +++ /dev/null @@ -1,48 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -module RedmineupTags - module Patches - module TimeEntryPatch - - def self.included(base) - base.class_eval do - include InstanceMethods - end - end - - # Class used to represent the tags relations of an issue - class TagsRelations < IssueRelation::Relations - def to_s(*args) - map(&:name).join(', ') - end - end - - module InstanceMethods - def tags_relations - TagsRelations.new(self, issue ? issue.tags.to_a : []) - end - end - end - end -end - -unless TimeEntry.included_modules.include?(RedmineupTags::Patches::TimeEntryPatch) - TimeEntry.send(:include, RedmineupTags::Patches::TimeEntryPatch) -end diff --git a/plugins/redmineup_tags/lib/redmineup_tags/patches/time_entry_query_patch.rb b/plugins/redmineup_tags/lib/redmineup_tags/patches/time_entry_query_patch.rb deleted file mode 100644 index 3808165..0000000 --- a/plugins/redmineup_tags/lib/redmineup_tags/patches/time_entry_query_patch.rb +++ /dev/null @@ -1,84 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -module RedmineupTags - module Patches - module TimeEntryQueryPatch - def self.included(base) - base.send(:include, InstanceMethods) - - base.class_eval do - alias_method :statement_without_redmine_tags, :statement - alias_method :statement, :statement_with_redmine_tags - - alias_method :available_filters_without_redmine_tags, :available_filters - alias_method :available_filters, :available_filters_with_redmine_tags - - add_available_column QueryTagsColumn.new(:tags_relations, caption: :tags) - end - end - - module InstanceMethods - def statement_with_redmine_tags - filter = filters.delete 'issue_tags' - clauses = statement_without_redmine_tags || '' - - if filter - filters['issue_tags'] = filter - - issues = Issue.where({}) - - op = operator_for('issue_tags') - case op - when '=', '!' - issues = issues.tagged_with(values_for('issue_tags').clone, match_all: true) - when '!*' - issues = issues.joins(:tags).uniq - else - issues = issues.tagged_with(Redmineup::Tag.all.map(&:to_s), any: true) - end - - compare = op.include?('!') ? 'NOT IN' : 'IN' - ids_list = issues.collect(&:id).push(0).join(',') - - clauses << ' AND ' unless clauses.empty? - clauses << "( #{Issue.table_name}.id #{compare} (#{ids_list}) ) " - end - - clauses - end - - def available_filters_with_redmine_tags - available_filters_without_redmine_tags - selected_tags = [] - if filters['issue_tags'].present? - selected_tags = Issue.all_tags(project: project, open_only: RedmineupTags.settings['issues_open_only'].to_i == 1). - where(name: filters['issue_tags'][:values]).map { |c| [c.name, c.name] } - end - add_available_filter('issue_tags', type: :issue_tags, name: l(:tags), values: selected_tags) - end - end - end - end -end - -if (ActiveRecord::Base.connection.tables.include?('queries') rescue false) && - TimeEntryQuery.included_modules.exclude?(RedmineupTags::Patches::TimeEntryQueryPatch) - TimeEntryQuery.send(:include, RedmineupTags::Patches::TimeEntryQueryPatch) -end diff --git a/plugins/redmineup_tags/lib/redmineup_tags/patches/time_report_patch.rb b/plugins/redmineup_tags/lib/redmineup_tags/patches/time_report_patch.rb deleted file mode 100644 index a83a752..0000000 --- a/plugins/redmineup_tags/lib/redmineup_tags/patches/time_report_patch.rb +++ /dev/null @@ -1,57 +0,0 @@ -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -require_dependency 'query' - -module RedmineupTags - module Patches - module TimeReportPatch - def self.included(base) - base.send(:include, InstanceMethods) - base.class_eval do - alias_method :load_available_criteria_without_redmine_tags, :load_available_criteria - alias_method :load_available_criteria, :load_available_criteria_with_redmine_tags - end - end - - module InstanceMethods - - def load_available_criteria_with_redmine_tags - return @load_available_criteria_with_redmine_tags if @load_available_criteria_with_redmine_tags - @load_available_criteria_with_redmine_tags = load_available_criteria_without_redmine_tags - @load_available_criteria_with_redmine_tags['tags'] = { sql: "#{Redmineup::Tag.table_name}.id", - klass: Redmineup::Tag, - joins: redmine_tags_join, - label: :tags } - @load_available_criteria_with_redmine_tags - end - - private - - def redmine_tags_join - { issue: :tags } - end - end - end - end -end - -unless Redmine::Helpers::TimeReport.included_modules.include?(RedmineupTags::Patches::TimeReportPatch) - Redmine::Helpers::TimeReport.send(:include, RedmineupTags::Patches::TimeReportPatch) -end diff --git a/plugins/redmineup_tags/test/fixtures/taggings.yml b/plugins/redmineup_tags/test/fixtures/taggings.yml deleted file mode 100644 index 28c2b16..0000000 --- a/plugins/redmineup_tags/test/fixtures/taggings.yml +++ /dev/null @@ -1,68 +0,0 @@ -# project_1: -# issue_1: -# tags: [second, third] -# issue_2: -# tags: [second, third] -# issue_8: -# tags: [first, second] -# -# project_3: -# issue_5: -# tags: [second, third] - ---- -# Relation with closed issue from project with id 1 -tagging_1: - tag_id: 1 - taggable_id: 8 - taggable_type: Issue - created_at: "2017-12-04 00:0:00" - -# Relation with opened issue from project with id 1 -tagging_2: - tag_id: 2 - taggable_id: 1 - taggable_type: Issue - created_at: "2017-12-04 01:00:00" - -# Relation with opened issue from project with id 1 -tagging_3: - tag_id: 2 - taggable_id: 2 - taggable_type: Issue - created_at: "2017-12-04 02:00:00" - -# Relation with closed issue from project with id 1 -tagging_4: - tag_id: 2 - taggable_id: 8 - taggable_type: Issue - created_at: "2017-12-04 03:00:00" - -# Relation with opened issue from project with id 3 -tagging_5: - tag_id: 2 - taggable_id: 5 - taggable_type: Issue - created_at: "2017-12-04 04:00:00" - -# Relation with opened issue from project with id 1 -tagging_6: - tag_id: 3 - taggable_id: 1 - taggable_type: Issue - created_at: "2017-12-04 05:00:00" - -# Relation with opened issue from project with id 1 -tagging_7: - tag_id: 3 - taggable_id: 2 - taggable_type: Issue - created_at: "2017-12-04 06:00:00" - -# Relation with closed issue from project with id 3 -tagging_8: - tag_id: 3 - taggable_id: 5 - taggable_type: Issue - created_at: "2017-12-04 07:00:00" \ No newline at end of file diff --git a/plugins/redmineup_tags/test/fixtures/tags.yml b/plugins/redmineup_tags/test/fixtures/tags.yml deleted file mode 100644 index 7e4e6c1..0000000 --- a/plugins/redmineup_tags/test/fixtures/tags.yml +++ /dev/null @@ -1,12 +0,0 @@ ---- -tag_1: - id: 1 - name: first - -tag_2: - id: 2 - name: second - -tag_3: - id: 3 - name: third diff --git a/plugins/redmineup_tags/test/functional/agile_boards_controller_test.rb b/plugins/redmineup_tags/test/functional/agile_boards_controller_test.rb deleted file mode 100644 index 671967e..0000000 --- a/plugins/redmineup_tags/test/functional/agile_boards_controller_test.rb +++ /dev/null @@ -1,39 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -class AgileBoardsControllerTest < ActionController::TestCase - fixtures :projects, - :users - - def setup - @request.session[:user_id] = 1 - end - - def test_get_index_with_filters - return unless Redmine::Plugin.installed?(:redmine_agile) && AGILE_VERSION_TYPE == 'PRO version' - - compatible_request :get, :index - assert_response :success - assert response.body.match /issue_tags/ - end -end diff --git a/plugins/redmineup_tags/test/functional/agile_versions_controller_test.rb b/plugins/redmineup_tags/test/functional/agile_versions_controller_test.rb deleted file mode 100644 index 40887a1..0000000 --- a/plugins/redmineup_tags/test/functional/agile_versions_controller_test.rb +++ /dev/null @@ -1,44 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -class AgileVersionsControllerTest < ActionController::TestCase - fixtures :projects, - :users - - def setup - @project_1 = Project.find(1) - ['agile', 'agile_backlog'].each do |p_module| - EnabledModule.create(project: @project_1, name: p_module) - end - - @request.session[:user_id] = 1 - end - - def test_get_index_with_filters - return unless Redmine::Plugin.installed?(:redmine_agile) && AGILE_VERSION_TYPE == 'PRO version' - - compatible_request :get, :index, project_id: @project_1.identifier - assert_response :success - assert response.body.match /issue_tags/ - end -end diff --git a/plugins/redmineup_tags/test/functional/auto_completes_controller_test.rb b/plugins/redmineup_tags/test/functional/auto_completes_controller_test.rb deleted file mode 100644 index 4535455..0000000 --- a/plugins/redmineup_tags/test/functional/auto_completes_controller_test.rb +++ /dev/null @@ -1,108 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -class AutoCompletesControllerTest < ActionController::TestCase - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers - - def setup - @tag = Redmineup::Tag.create(name: 'Test_tag') - @request.session[:user_id] = 1 - end - - def test_redmine_tags_should_not_be_case_sensitive - issue = Issue.find(1) - issue.tags << @tag - compatible_request :get, :redmine_tags, project_id: 'ecookbook', q: 'te' - assert_response :success - redmine_tags = ActiveSupport::JSON.decode(response.body).map { |item| item['id'] } - assert_not_nil redmine_tags - assert_equal [@tag.name], redmine_tags - end - - def test_contacts_should_return_json - issue = Issue.find(1) - issue.tags << @tag - compatible_request :get, :redmine_tags, project_id: 'ecookbook', q: 'te' - assert_response :success - json = ActiveSupport::JSON.decode(response.body) - assert_kind_of Array, json - parsed_tag = json.last - assert_kind_of Hash, parsed_tag - assert_equal @tag.name, parsed_tag['id'] - assert_equal @tag.name, parsed_tag['text'] - end - - def test_suggestion_order_default - with_settings plugin_redmineup_tags: Setting.available_settings['plugin_redmineup_tags']['default'] do - compatible_request :get, :redmine_tags, project_id: 'ecookbook' - end - assert_response :success - tags = ActiveSupport::JSON.decode(response.body).map { |item| item['id'] } - assert_equal %w[first second third], tags - end - - def test_suggestion_order_name - with_settings plugin_redmineup_tags: { tags_suggestion_order: 'name' } do - compatible_request :get, :redmine_tags, project_id: 'ecookbook' - end - assert_response :success - tags = ActiveSupport::JSON.decode(response.body).map { |item| item['id'] } - assert_equal %w[first second third], tags - end - - def test_suggestion_order_most_used - with_settings plugin_redmineup_tags: { tags_suggestion_order: 'most_used' } do - compatible_request :get, :redmine_tags, project_id: 'ecookbook' - end - assert_response :success - tags = ActiveSupport::JSON.decode(response.body).map { |item| item['id'] } - assert_equal %w[second third first], tags - end - - def test_suggestion_order_last_created - with_settings plugin_redmineup_tags: { tags_suggestion_order: 'last_created' } do - compatible_request :get, :redmine_tags, project_id: 'ecookbook' - end - assert_response :success - tags = ActiveSupport::JSON.decode(response.body).map { |item| item['id'] } - assert_equal %w[third second first], tags - end -end diff --git a/plugins/redmineup_tags/test/functional/issue_tags_controller_test.rb b/plugins/redmineup_tags/test/functional/issue_tags_controller_test.rb deleted file mode 100644 index 556a5ff..0000000 --- a/plugins/redmineup_tags/test/functional/issue_tags_controller_test.rb +++ /dev/null @@ -1,216 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -class IssueTagsControllerTest < ActionController::TestCase - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers - - def setup - @request.env['HTTP_REFERER'] = '/update_issue_tags' - @request.session[:user_id] = 2 - @project_1 = projects(:projects_001) - @issue_1 = issues(:issues_001) - @issue_2 = issues(:issues_002) - @issue_8 = issues(:issues_008) - @issues = [@issue_1, @issue_2, @issue_8] - @ids = [1, 2, 8] - @most_used_tags = %w[second third first] - @role = roles(:roles_001) # Manager role - @role.add_permission! :edit_tags - end - - def test_should_get_edit_when_one_issue_chose - compatible_xhr_request :get, :edit, ids: [1] - assert_response :success - assert_match 'text/javascript', response.content_type - - html_form = response.body[/<form.+form>/].delete('\\') - - assert_select_in html_form, '.most_used_tags', text: /.+second.+third.+first.+/, count: 1 do - assert_select '.most_used_tag', 3 - @most_used_tags.each { |tag| assert_select '.most_used_tag', text: tag, count: 1 } - end - end - - def test_should_get_edit_when_several_issues_chose - compatible_xhr_request :get, :edit, ids: @ids - assert_response :success - assert_match 'text/javascript', response.content_type - - html_form = response.body[/<form.+form>/].delete('\\') - - assert_select_in html_form, '.most_used_tags', text: /.+second.+third.+first.+/, count: 1 do - assert_select '.most_used_tag', 3 - @most_used_tags.each { |tag| assert_select '.most_used_tag', text: tag, count: 1 } - end - end - - def test_should_get_not_found_when_no_ids - compatible_xhr_request :get, :edit, ids: [] - assert_response :missing - compatible_request :post, :update, ids: [], issue: { tag_list: [] } - assert_response :missing - end - - def test_should_change_issue_tags_empty_tags - compatible_request :post, :update, ids: [1], issue: { tag_list: ['', '', ''] } - assert_response :redirect - assert_redirected_to action: 'update' - assert_equal I18n.t(:notice_tags_added), flash[:notice] - assert_equal [], @issue_1.tag_list - end - - def test_should_change_issue_tags_no_tags - compatible_request :post, :update, ids: [1], issue: { tag_list: [] } - assert_response :redirect - assert_redirected_to action: 'update' - assert_equal I18n.t(:notice_tags_added), flash[:notice] - assert_equal [], @issue_1.tag_list - end - - def test_should_change_issue_tags_one_tag - compatible_request :post, :update, ids: [1], issue: { tag_list: %w[first] } - assert_response :redirect - assert_redirected_to action: 'update' - assert_equal I18n.t(:notice_tags_added), flash[:notice] - assert_equal %w[first], @issue_1.tag_list - end - - def test_should_change_issue_tags_several_tags - compatible_request :post, :update, ids: [1], issue: { tag_list: %w[first second third] } - assert_response :redirect - assert_redirected_to action: 'update' - assert_equal I18n.t(:notice_tags_added), flash[:notice] - assert_equal %w[first second third], @issue_1.tag_list.sort - end - - def test_should_bulk_change_issue_tags_no_tags - compatible_request :post, :update, ids: @ids, issue: { tag_list: [] } - assert_response :redirect - assert_redirected_to action: 'update' - assert_equal I18n.t(:notice_tags_added), flash[:notice] - @issues.each { |issue| assert_equal [], issue.tag_list } - end - - def test_should_bulk_change_issue_tags_one_tag - compatible_request :post, :update, ids: @ids, issue: { tag_list: %w[first] } - assert_response :redirect - assert_redirected_to action: 'update' - assert_equal I18n.t(:notice_tags_added), flash[:notice] - - assert_equal %w[first second third], @issue_1.tag_list.sort - assert_equal %w[first second third], @issue_2.tag_list.sort - assert_equal %w[first second], @issue_8.tag_list.sort - end - - def test_should_bulk_change_issue_tags_several_tags - compatible_request :post, :update, ids: @ids, issue: { tag_list: %w[first second third] } - assert_response :redirect - assert_redirected_to action: 'update' - assert_equal I18n.t(:notice_tags_added), flash[:notice] - @issues.each { |issue| assert_equal %w[first second third], issue.tag_list.sort } - end - - def test_edit_tags_permission - tag = 'first' - assert_not_equal Issue.find(1).tag_list, [tag] - assert Issue.all_tags.map(&:name).include?(tag) - compatible_request :post, :update, ids: [1], issue: { tag_list: [tag] } - assert_response :redirect - assert_redirected_to action: 'update' - assert_equal I18n.t(:notice_tags_added), flash[:notice] - assert_equal Issue.find(1).tag_list, [tag] - - @role.remove_permission! :edit_tags - tag2 = 'second' - - assert Issue.all_tags.map(&:name).include?(tag2) - compatible_request :post, :update, ids: [1], issue: { tag_list: [tag2] } - assert_response :redirect - assert_redirected_to action: 'update' - assert_equal I18n.t(:notice_failed_to_add_tags), flash[:error] - assert_equal Issue.find(1).tag_list, [tag] - end - - def test_bulk_edit_tags_permission - tag = 'first' - assert Issue.all_tags.map(&:name).include?(tag) - compatible_request :post, :update, ids: [1, 8], issue: { tag_list: [tag] } - assert_response :redirect - assert_redirected_to action: 'update' - assert_equal I18n.t(:notice_tags_added), flash[:notice] - assert_equal Issue.find(1).tag_list.sort, %w[first second third] - assert_equal Issue.find(8).tag_list.sort, %w[first second] - - @role.remove_permission! :edit_tags - tag2 = 'second' - - assert Issue.all_tags.map(&:name).include?(tag2) - compatible_request :post, :update, ids: [1, 8], issue: { tag_list: [tag2] } - assert_response :redirect - assert_redirected_to action: 'update' - assert_equal I18n.t(:notice_failed_to_add_tags), flash[:error] - assert_equal Issue.find(1).tag_list.sort, %w[first second third] - assert_equal Issue.find(8).tag_list.sort, %w[first second] - end - - def test_create_tags_permission - @role.add_permission! :create_tags - new_tag = 'enable_create_tags_permission' - - assert_not_equal Issue.find(1).tag_list, [new_tag] - assert !Issue.all_tags.map(&:name).include?(new_tag) - compatible_request :post, :update, ids: [1], issue: { tag_list: [new_tag] } - assert_response :redirect - assert_redirected_to action: 'update' - assert_equal I18n.t(:notice_tags_added), flash[:notice] - assert_equal Issue.find(1).tag_list, [new_tag] - - @role.remove_permission! :create_tags - new_tag2 = 'disable_create_tags_permission' - - assert !Issue.all_tags.map(&:name).include?(new_tag2) - compatible_request :post, :update, ids: [1], issue: { tag_list: [new_tag2] } - assert_response :redirect - assert_redirected_to action: 'update' - assert_equal I18n.t(:notice_failed_to_add_tags), flash[:error] - assert_equal Issue.find(1).tag_list, [new_tag] - end -end diff --git a/plugins/redmineup_tags/test/functional/issues_controller_test.rb b/plugins/redmineup_tags/test/functional/issues_controller_test.rb deleted file mode 100644 index 547a107..0000000 --- a/plugins/redmineup_tags/test/functional/issues_controller_test.rb +++ /dev/null @@ -1,331 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -class IssuesControllerTest < ActionController::TestCase - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers - - def setup - @tag = Redmineup::Tag.create(name: 'test_tag') - @last_tag = Redmineup::Tag.create(name: 'last_tag') - @request.session[:user_id] = 1 - end - - def test_get_index_with_tags - issue = Issue.find(2) - issue.tags << @tag - compatible_request( - :get, - :index, - f: ['status_id', 'issue_tags', ''], - op: { status_id: 'o', issue_tags: '=' }, - v: { issue_tags: ['test_tag'] }, - c: ['status', 'priority', 'subject', 'tags_relations'], - project_id: 'ecookbook' - ) - assert_response :success - assert_select 'table.list.issues tr.issue', 1 - assert_select 'table.list.issues tr.issue td.subject', issue.subject - assert_select 'table.list.issues tr.issue td.tags a', 'test_tag' - ensure - issue.tags = [] - end - - def test_get_index_without_selected_tags - issue1, issue2 = Issue.find(1), Issue.find(2) - issue1.tags << @tag - issue2.tags << @last_tag - compatible_request( - :get, - :index, - f: ['issue_tags'], - op: { issue_tags: '!' }, - v: { issue_tags: ['test_tag', 'last_tag'] }, - c: ['status', 'priority', 'subject', 'tags_relations'] - ) - assert_response :success - assert_select 'table.list.issues tr.issue', (Issue.count - 2) - assert_select 'table.list.issues tr.issue td.subject', text: issue2.subject, count: 0 - assert_select 'table.list.issues tr.issue td.tags a', text: 'test_tag', count: 0 - ensure - issue1.tags, issue2.tags = [], [] - end - - def test_get_index_with_sidebar_tags_in_list_by_count - issue1 = Issue.find(1) - issue1.tags << @tag - issue2 = Issue.find(2) - issue2.tags << @tag - issue2.tags << @last_tag - RedmineupTags.stubs(:settings).returns('issues_sidebar' => 'list', - 'issues_show_count' => '1', - 'issues_sort_by' => 'count', - 'issues_sort_order' => 'desc') - - compatible_request :get, :index, project_id: 'ecookbook' - assert_response :success - assert_select '.tag-label', 'test_tag(2)' - ensure - issue1.tags = [] - issue2.tags = [] - RedmineupTags.unstub(:settings) - end - - def test_get_index_with_sidebar_tags_in_cloud_by_count - issue1 = Issue.find(1) - issue1.tags << @last_tag - - issue2 = Issue.find(2) - issue2.tags << @tag - issue2.tags << @last_tag - - RedmineupTags.stubs(:settings).returns('issues_sidebar' => 'cloud', - 'issues_show_count' => '1', - 'issues_sort_by' => 'count', - 'issues_sort_order' => 'desc') - compatible_request :get, :index, project_id: 'ecookbook' - assert_response :success - assert_select '.tag-label', 'last_tag(2)' - ensure - issue1.tags = [] - issue2.tags = [] - RedmineupTags.unstub(:settings) - end - - def test_should_not_update_without_tag_list - tags = %w[second third] - assert_equal tags, Issue.find(1).tag_list.sort - compatible_request :post, :update, id: 1, issue: { project_id: 1 } - assert_response :redirect - assert_equal tags, Issue.find(1).tag_list.sort - end - - def test_should_update_with_empty_string_tags - assert_equal %w[second third], Issue.find(1).tag_list.sort - compatible_request :post, :update, id: 1, issue: { project_id: 1, tag_list: ['', ''] } - assert_response :redirect - assert_equal [], Issue.find(1).tag_list - end - - def test_should_update_with_new_tags - assert_equal %w[second third], Issue.find(1).tag_list.sort - compatible_request :post, :update, id: 1, issue: { project_id: 1, tag_list: %w[new_tag1 new_tag2] } - assert_response :redirect - assert_equal %w[new_tag1 new_tag2], Issue.find(1).tag_list.sort - end - - def test_should_update_issue_and_tags - assert_equal %w[second third], Issue.find(1).tag_list.sort - compatible_request :post, :update, id: 1, issue: { - project_id: 1, - description: 'Test should update issue and tags', - tag_list: %w[new_tag1 new_tag2] - } - assert_response :redirect - issue = Issue.find(1) - assert_equal 'Test should update issue and tags', issue.description - assert_equal %w[new_tag1 new_tag2], issue.tag_list.sort - end - - def test_get_bulk_edit_with_tags - compatible_request :get, :bulk_edit, ids: [1, 2] - assert_select '#issue_tags' - assert_response :success - end - - def test_post_bulk_edit_without_tag_list - issue1 = Issue.find(1) - issue1.tags = [@tag] - - issue2 = Issue.find(2) - issue2.tags = [@last_tag] - - compatible_request :post, :bulk_update, ids: [1, 2], issue: { project_id: '', tracker_id: '' } - assert_response :redirect - assert_equal [@tag.name], Issue.find(1).tag_list - assert_equal [@last_tag.name], Issue.find(2).tag_list - ensure - issue1.tags = [] - issue2.tags = [] - RedmineupTags.unstub(:settings) - end - - def test_post_bulk_edit_with_empty_string_tags - (1..2).each { |i| assert_equal %w[second third], Issue.find(i).tag_list.sort } - compatible_request :post, :bulk_update, ids: [1, 2], issue: { project_id: '', tracker_id: '', tag_list: ['', ''] } - assert_response :redirect - (1..2).each { |i| assert_equal [], Issue.find(i).tag_list } - end - - def test_post_bulk_edit_with_changed_tags - issue1 = Issue.find(1) - issue1.tags << @tag - - issue2 = Issue.find(2) - issue2.tags << @last_tag - - compatible_request :post, :bulk_update, ids: [1, 2], issue: { project_id: '', tracker_id: '', tag_list: ['bulk_tag'] } - assert_response :redirect - assert_equal ['bulk_tag'], Issue.find(1).tag_list - assert_equal ['bulk_tag'], Issue.find(2).tag_list - ensure - issue1.tags = [] - issue2.tags = [] - RedmineupTags.unstub(:settings) - end - - def test_get_new_with_permission_edit_tags - # User(id: 2) has role Manager in Project(id: 1) - @request.session[:user_id] = 2 - manager_role = Role.find(1) - manager_role.add_permission! :edit_tags - compatible_request :get, :new, issue: { project_id: 1 } - assert_select '#issue_tags' - end - - def test_get_new_without_permission_edit_tags - @request.session[:user_id] = 2 - manager_role = Role.find(1) - manager_role.remove_permission! :edit_tags - compatible_request :get, :new, issue: { project_id: 1 } - assert_select '#issue_tags', 0 - end - - def test_get_new_with_permission_edit_tags_in_other_project - # User(id: 2) has role Manager in Project(id: 1) and role Developer in Project(id: 2) - @request.session[:user_id] = 2 - manager_role = Role.find(1) - manager_role.add_permission! :edit_tags - compatible_request :get, :new, issue: { project_id: 2 } - assert_select '#issue_tags', 0 - end - - def test_get_edit_with_permission_edit_tags - # User(id: 2) has role Manager in Project(id: 1) and Project(id: 1) contains Issue(id: 1) - @request.session[:user_id] = 2 - manager_role = Role.find(1) - manager_role.add_permission! :edit_tags - compatible_request :get, :edit, id: 1, issue: { project_id: 1 } - assert_select '#issue_tags' - end - - def test_get_edit_without_permission_edit_tags - @request.session[:user_id] = 2 - manager_role = Role.find(1) - manager_role.remove_permission! :edit_tags - compatible_request :get, :edit, id: 1, issue: { project_id: 1 } - assert_select '#issue_tags', 0 - end - - def test_get_edit_with_permission_edit_tags_in_other_project - # User(id: 2) has role Manager in Project(id: 1) and role Developer in Project(id: 2) - # Project(id: 1) contains Issue(id: 1) - @request.session[:user_id] = 2 - manager_role = Role.find(1) - manager_role.add_permission! :edit_tags - compatible_request :get, :edit, id: 1, issue: { project_id: 2 } - assert_select '#issue_tags', 0 - end - - def test_edit_tags_permission - # User(id: 2) has role Manager in Project(id: 1) and Project(id: 1) contains Issue(id: 1) - @request.session[:user_id] = 2 - manager_role = Role.find(1) - manager_role.add_permission! :edit_tags - tag = 'first' - - assert_not_equal Issue.find(1).tag_list, [tag] - assert Issue.all_tags.map(&:name).include?(tag) - compatible_request :post, :update, id: 1, issue: { project_id: 1, tag_list: [tag] } - assert_response :redirect - assert_equal Issue.find(1).tag_list, [tag] - - manager_role.remove_permission! :edit_tags - tag2 = 'second' - - assert Issue.all_tags.map(&:name).include?(tag2) - assert_equal Issue.find(1).description, 'Unable to print recipes' - compatible_request :post, :update, id: 1, issue: { project_id: 1, description: 'New description', tag_list: [tag2] } - assert_response :redirect - issue = Issue.find(1) - assert_equal 'New description', issue.description - assert_equal [tag], issue.tag_list - end - - def test_create_tags_permission - @request.session[:user_id] = 2 - manager_role = Role.find(1) - manager_role.add_permission! :edit_tags, :create_tags - new_tag = 'enable_create_tags_permission' - - assert_not_equal Issue.find(1).tag_list, [new_tag] - assert !Issue.all_tags.map(&:name).include?(new_tag) # The project should not contain the new tag - compatible_request :post, :update, id: 1, issue: { project_id: 1, tag_list: [new_tag] } - assert_response :redirect - assert_equal [new_tag], Issue.find(1).tag_list - - manager_role.remove_permission! :create_tags - new_tag2 = 'disable_create_tags_permission' - - assert !Issue.all_tags.map(&:name).include?(new_tag2) - compatible_request :post, :update, id: 1, issue: { project_id: 1, tag_list: [new_tag2] } - assert_response :redirect - assert_equal Issue.find(1).tag_list, [new_tag] - end - - def test_filter_by_tags_equal - tags = %w(first second) - compatible_request :get, :index, project_id: 1, set_filter: 1, f: ['issue_tags', ''], op: { issue_tags: '=' }, v: { issue_tags: tags } - assert_response :success - issues_in_list.each { |issue| assert_equal (tags & issue.tag_list), tags } - end - - def test_filter_by_tags_not_equal - tags = %w(first second) - compatible_request :get, :index, project_id: 1, set_filter: 1, f: ['issue_tags', ''], op: { issue_tags: '!' }, v: { issue_tags: tags } - assert_response :success - issues_in_list.each { |issue| assert_not_equal (tags & issue.tag_list), tags } - end - - def test_get_index_without_project - compatible_request(:get, :index) - assert_response :success - end -end diff --git a/plugins/redmineup_tags/test/functional/reports_controller_test.rb b/plugins/redmineup_tags/test/functional/reports_controller_test.rb deleted file mode 100644 index a0f1b84..0000000 --- a/plugins/redmineup_tags/test/functional/reports_controller_test.rb +++ /dev/null @@ -1,62 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -class ReportsControllerTest < ActionController::TestCase - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers, - :time_entries - - def setup - @request.session[:user_id] = 1 - @project = Project.find(1) - end - - def test_get_report_with_tags - compatible_request(:get, :issue_report, id: @project.id) - assert_response :success - assert response.body.match /Tags/ - end - - def test_get_issue_report_details_with_tags - compatible_request(:get, :issue_report_details, id: @project.id, detail: 'tag') - assert_response :success - assert response.body.match /Tags/ - end -end diff --git a/plugins/redmineup_tags/test/functional/tags_controller_test.rb b/plugins/redmineup_tags/test/functional/tags_controller_test.rb deleted file mode 100644 index 9e11430..0000000 --- a/plugins/redmineup_tags/test/functional/tags_controller_test.rb +++ /dev/null @@ -1,102 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -class TagsControllerTest < ActionController::TestCase - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers - - def setup - # run as the admin - @request.session[:user_id] = 1 - - @project_a = Project.generate! - @project_b = Project.generate! - - add_issue @project_a, %w[a1 a2], false - add_issue @project_a, %w[a2 a3], false - add_issue @project_a, %w[a4 a5], true - add_issue @project_b, %w[b6 b7], true - add_issue @project_b, %w[b8 b9], false - end - - def test_should_get_edit - tag = Redmineup::Tag.find_by_name('a1') - compatible_request :get, :edit, id: tag.id - assert_response :success - assert_select "input#tag_name[value='#{tag.name}']", 1 - end - - def test_should_put_update - tag1 = Redmineup::Tag.find_by_name('a1') - new_name = 'updated main' - compatible_request :put, :update, id: tag1.id, tag: { name: new_name } - assert_redirected_to controller: 'settings', action: 'plugin', id: 'redmineup_tags', tab: 'manage_tags' - tag1.reload - assert_equal new_name, tag1.name - end - - test 'should delete destroy' do - tag1 = Redmineup::Tag.find_by_name('a1') - assert_difference 'Redmineup::Tag.count', -1 do - compatible_request :post, :destroy, ids: tag1.id - assert_response 302 - end - end - - test 'should post merge' do - tag1 = Redmineup::Tag.find_by_name('a1') - tag2 = Redmineup::Tag.find_by_name('b8') - assert_difference 'Redmineup::Tag.count', -1 do - compatible_request :post, :merge, ids: [tag1.id, tag2.id], tag: { name: 'a1' } - assert_redirected_to controller: 'settings', action: 'plugin', id: 'redmineup_tags', tab: 'manage_tags' - end - assert_equal 0, Issue.tagged_with('b8').count - assert_equal 2, Issue.tagged_with('a1').count - end - - private - - def add_issue(project, tags, closed) - issue = Issue.generate!(project_id: project.id) - issue.tag_list = tags - issue.status = IssueStatus.where(is_closed: true).first if closed - issue.save - end -end diff --git a/plugins/redmineup_tags/test/functional/timelog_controller_test.rb b/plugins/redmineup_tags/test/functional/timelog_controller_test.rb deleted file mode 100644 index 2953325..0000000 --- a/plugins/redmineup_tags/test/functional/timelog_controller_test.rb +++ /dev/null @@ -1,62 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -class TimelogControllerTest < ActionController::TestCase - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers, - :time_entries - - def setup - @request.session[:user_id] = 1 - end - - def test_get_report_with_tags - compatible_request(:get, :report, criteria: ['tags'], - set_filter: "1", - sort: 'spent_on:desc', - f: ['spent_on', ''], - op: { spent_on: '*' }, - t: ['hours', ''], - columns: 'month') - assert_response :success - assert_select 'table#time-report tr.last-level td.name' - assert_select 'table#time-report tr.total', 1 - end -end diff --git a/plugins/redmineup_tags/test/test_helper.rb b/plugins/redmineup_tags/test/test_helper.rb deleted file mode 100644 index 3068ca4..0000000 --- a/plugins/redmineup_tags/test/test_helper.rb +++ /dev/null @@ -1,56 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path(File.dirname(__FILE__) + '/../../../test/test_helper') - -def plugin_fixtures(*fixtures) - fixtures_directory = "#{File.dirname(__FILE__)}/fixtures/" - fixture_names = - if fixtures.first == :all - Dir["#{fixtures_directory}/**/*.{yml}"].map do |file_path| - file_path[(fixtures_directory.size + 1)..-5] - end - else - fixtures.flatten.map { |n| n.to_s } - end - - create_fixtures(fixtures_directory, fixture_names, class_names = {}) -end - -def create_fixtures(fixtures_directory, table_names, class_names = {}) - ActiveRecord::FixtureSet.create_fixtures(fixtures_directory, table_names, class_names) -end - -plugin_fixtures :all - -def compatible_request(type, action, parameters = {}) - send(type, action, params: parameters) -end - -def compatible_xhr_request(type, action, parameters = {}) - send(type, action, params: parameters, xhr: true) -end - -# Returns the issues that are displayed in the list in the same order -def issues_in_list - ids = css_select('tr.issue td.id').map{ |tag| tag['text'].to_i } - Issue.where(id: ids).sort_by { |issue| ids.index(issue.id) } -end diff --git a/plugins/redmineup_tags/test/unit/issue_test.rb b/plugins/redmineup_tags/test/unit/issue_test.rb deleted file mode 100644 index a28a09d..0000000 --- a/plugins/redmineup_tags/test/unit/issue_test.rb +++ /dev/null @@ -1,74 +0,0 @@ -# encoding: utf-8 -# -# This file is a part of Redmine Tags (redmine_tags) plugin, -# customer relationship management plugin for Redmine -# -# Copyright (C) 2011-2024 RedmineUP -# http://www.redmineup.com/ -# -# redmine_tags 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 3 of the License, or -# (at your option) any later version. -# -# redmine_tags 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 redmine_tags. If not, see <http://www.gnu.org/licenses/>. - -require File.expand_path('../../test_helper', __FILE__) - -class RedmineupTags::Patches::IssueTest < ActiveSupport::TestCase - fixtures :users, :projects, :issues, :issue_statuses, :enumerations, :trackers, :enabled_modules - - def setup - # run as the admin - User.stubs(:current).returns(users(:users_001)) - - @project_a = Project.find 1 - @project_b = Project.find 3 - end - - test 'patch was applied' do - assert_respond_to Issue, :available_tags, 'Issue has available_tags getter' - assert_respond_to Issue.new, :tags, 'Issue instance has tags getter' - assert_respond_to Issue.new, :tags=, 'Issue instance has tags setter' - assert_respond_to Issue.new, :tag_list=, 'Issue instance has tag_list setter' - end - - test 'available tags should return list of distinct tags' do - assert_equal 3, Issue.available_tags.to_a.size - end - - test 'available tags should allow list tags of open issues only' do - assert_equal 2, Issue.available_tags(open_only: true).to_a.size - end - - test 'available tags should allow list tags of specific project only' do - assert_equal 3, Issue.available_tags(project: @project_a).to_a.size - assert_equal 2, Issue.available_tags(project: @project_b).to_a.size - - assert_equal 2, Issue.available_tags(open_only: true, project: @project_a).to_a.size - assert_equal 2, Issue.available_tags(open_only: true, project: @project_b).to_a.size - end - - test 'available tags should allow list tags found by name' do - assert_equal 2, Issue.available_tags(name_like: 'i').to_a.size - assert_equal 1, Issue.available_tags(name_like: 'rd').to_a.size - assert_equal 2, Issue.available_tags(name_like: 's').to_a.size - assert_equal 1, Issue.available_tags(name_like: 'e').to_a.size - - assert_equal 1, Issue.available_tags(name_like: 'f', project: @project_a).to_a.size - assert_equal 0, Issue.available_tags(name_like: 'b', project: @project_a).to_a.size - assert_equal 1, Issue.available_tags(name_like: 'sec', open_only: true, project: @project_a).to_a.size - assert_equal 0, Issue.available_tags(name_like: 'fir', open_only: true, project: @project_a).to_a.size - end - - test 'Issue.all_tags should return all tags kind of Issue' do - tags = Issue.all_tags.map(&:name) - assert_equal %w[first second third], tags - end -end diff --git a/plugins/sparkline b/plugins/sparkline deleted file mode 160000 index 53970b5..0000000 --- a/plugins/sparkline +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 53970b5d80d0787f8830667fbdfeab8709dfcae8 diff --git a/plugins/traffic_lights b/plugins/traffic_lights deleted file mode 160000 index 80c200c..0000000 --- a/plugins/traffic_lights +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 80c200c9d1d9f10dc2d7c88ff30adf8a3c009fd2 diff --git a/themes/PurpleMine2 b/themes/PurpleMine2 deleted file mode 160000 index 510a32e..0000000 --- a/themes/PurpleMine2 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 510a32ec415f3a07be2331842db8eedf41e5c4dd -- GitLab